{"version":3,"file":"owid.mjs","sources":["../../__vite-browser-external","../../node_modules/dotenv/lib/main.js","../../settings/findBaseDir.ts","../../settings/loadDotenv.ts","../../settings/clientSettings.ts","../../node_modules/lodash-es/_freeGlobal.js","../../node_modules/lodash-es/_root.js","../../node_modules/lodash-es/_Symbol.js","../../node_modules/lodash-es/_getRawTag.js","../../node_modules/lodash-es/_objectToString.js","../../node_modules/lodash-es/_baseGetTag.js","../../node_modules/lodash-es/isObjectLike.js","../../node_modules/lodash-es/isSymbol.js","../../node_modules/lodash-es/_arrayMap.js","../../node_modules/lodash-es/isArray.js","../../node_modules/lodash-es/_baseToString.js","../../node_modules/lodash-es/_trimmedEndIndex.js","../../node_modules/lodash-es/_baseTrim.js","../../node_modules/lodash-es/isObject.js","../../node_modules/lodash-es/toNumber.js","../../node_modules/lodash-es/toFinite.js","../../node_modules/lodash-es/toInteger.js","../../node_modules/lodash-es/identity.js","../../node_modules/lodash-es/isFunction.js","../../node_modules/lodash-es/_coreJsData.js","../../node_modules/lodash-es/_isMasked.js","../../node_modules/lodash-es/_toSource.js","../../node_modules/lodash-es/_baseIsNative.js","../../node_modules/lodash-es/_getValue.js","../../node_modules/lodash-es/_getNative.js","../../node_modules/lodash-es/_WeakMap.js","../../node_modules/lodash-es/_baseCreate.js","../../node_modules/lodash-es/_apply.js","../../node_modules/lodash-es/noop.js","../../node_modules/lodash-es/_copyArray.js","../../node_modules/lodash-es/_shortOut.js","../../node_modules/lodash-es/constant.js","../../node_modules/lodash-es/_defineProperty.js","../../node_modules/lodash-es/_baseSetToString.js","../../node_modules/lodash-es/_setToString.js","../../node_modules/lodash-es/_arrayEach.js","../../node_modules/lodash-es/_baseFindIndex.js","../../node_modules/lodash-es/_baseIsNaN.js","../../node_modules/lodash-es/_strictIndexOf.js","../../node_modules/lodash-es/_baseIndexOf.js","../../node_modules/lodash-es/_arrayIncludes.js","../../node_modules/lodash-es/_isIndex.js","../../node_modules/lodash-es/_baseAssignValue.js","../../node_modules/lodash-es/eq.js","../../node_modules/lodash-es/_assignValue.js","../../node_modules/lodash-es/_copyObject.js","../../node_modules/lodash-es/_overRest.js","../../node_modules/lodash-es/_baseRest.js","../../node_modules/lodash-es/isLength.js","../../node_modules/lodash-es/isArrayLike.js","../../node_modules/lodash-es/_isIterateeCall.js","../../node_modules/lodash-es/_createAssigner.js","../../node_modules/lodash-es/_isPrototype.js","../../node_modules/lodash-es/_baseTimes.js","../../node_modules/lodash-es/_baseIsArguments.js","../../node_modules/lodash-es/isArguments.js","../../node_modules/lodash-es/stubFalse.js","../../node_modules/lodash-es/isBuffer.js","../../node_modules/lodash-es/_baseIsTypedArray.js","../../node_modules/lodash-es/_baseUnary.js","../../node_modules/lodash-es/_nodeUtil.js","../../node_modules/lodash-es/isTypedArray.js","../../node_modules/lodash-es/_arrayLikeKeys.js","../../node_modules/lodash-es/_overArg.js","../../node_modules/lodash-es/_nativeKeys.js","../../node_modules/lodash-es/_baseKeys.js","../../node_modules/lodash-es/keys.js","../../node_modules/lodash-es/_nativeKeysIn.js","../../node_modules/lodash-es/_baseKeysIn.js","../../node_modules/lodash-es/keysIn.js","../../node_modules/lodash-es/assignIn.js","../../node_modules/lodash-es/_isKey.js","../../node_modules/lodash-es/_nativeCreate.js","../../node_modules/lodash-es/_hashClear.js","../../node_modules/lodash-es/_hashDelete.js","../../node_modules/lodash-es/_hashGet.js","../../node_modules/lodash-es/_hashHas.js","../../node_modules/lodash-es/_hashSet.js","../../node_modules/lodash-es/_Hash.js","../../node_modules/lodash-es/_listCacheClear.js","../../node_modules/lodash-es/_assocIndexOf.js","../../node_modules/lodash-es/_listCacheDelete.js","../../node_modules/lodash-es/_listCacheGet.js","../../node_modules/lodash-es/_listCacheHas.js","../../node_modules/lodash-es/_listCacheSet.js","../../node_modules/lodash-es/_ListCache.js","../../node_modules/lodash-es/_Map.js","../../node_modules/lodash-es/_mapCacheClear.js","../../node_modules/lodash-es/_isKeyable.js","../../node_modules/lodash-es/_getMapData.js","../../node_modules/lodash-es/_mapCacheDelete.js","../../node_modules/lodash-es/_mapCacheGet.js","../../node_modules/lodash-es/_mapCacheHas.js","../../node_modules/lodash-es/_mapCacheSet.js","../../node_modules/lodash-es/_MapCache.js","../../node_modules/lodash-es/memoize.js","../../node_modules/lodash-es/_memoizeCapped.js","../../node_modules/lodash-es/_stringToPath.js","../../node_modules/lodash-es/toString.js","../../node_modules/lodash-es/_castPath.js","../../node_modules/lodash-es/_toKey.js","../../node_modules/lodash-es/_baseGet.js","../../node_modules/lodash-es/get.js","../../node_modules/lodash-es/_arrayPush.js","../../node_modules/lodash-es/_isFlattenable.js","../../node_modules/lodash-es/_baseFlatten.js","../../node_modules/lodash-es/flatten.js","../../node_modules/lodash-es/_flatRest.js","../../node_modules/lodash-es/_getPrototype.js","../../node_modules/lodash-es/isPlainObject.js","../../node_modules/lodash-es/_baseSlice.js","../../node_modules/lodash-es/_castSlice.js","../../node_modules/lodash-es/_hasUnicode.js","../../node_modules/lodash-es/_asciiToArray.js","../../node_modules/lodash-es/_unicodeToArray.js","../../node_modules/lodash-es/_stringToArray.js","../../node_modules/lodash-es/_createCaseFirst.js","../../node_modules/lodash-es/upperFirst.js","../../node_modules/lodash-es/capitalize.js","../../node_modules/lodash-es/_createRound.js","../../node_modules/lodash-es/_baseClamp.js","../../node_modules/lodash-es/clamp.js","../../node_modules/lodash-es/_stackClear.js","../../node_modules/lodash-es/_stackDelete.js","../../node_modules/lodash-es/_stackGet.js","../../node_modules/lodash-es/_stackHas.js","../../node_modules/lodash-es/_stackSet.js","../../node_modules/lodash-es/_Stack.js","../../node_modules/lodash-es/_baseAssign.js","../../node_modules/lodash-es/_baseAssignIn.js","../../node_modules/lodash-es/_cloneBuffer.js","../../node_modules/lodash-es/_arrayFilter.js","../../node_modules/lodash-es/stubArray.js","../../node_modules/lodash-es/_getSymbols.js","../../node_modules/lodash-es/_copySymbols.js","../../node_modules/lodash-es/_getSymbolsIn.js","../../node_modules/lodash-es/_copySymbolsIn.js","../../node_modules/lodash-es/_baseGetAllKeys.js","../../node_modules/lodash-es/_getAllKeys.js","../../node_modules/lodash-es/_getAllKeysIn.js","../../node_modules/lodash-es/_DataView.js","../../node_modules/lodash-es/_Promise.js","../../node_modules/lodash-es/_Set.js","../../node_modules/lodash-es/_getTag.js","../../node_modules/lodash-es/_initCloneArray.js","../../node_modules/lodash-es/_Uint8Array.js","../../node_modules/lodash-es/_cloneArrayBuffer.js","../../node_modules/lodash-es/_cloneDataView.js","../../node_modules/lodash-es/_cloneRegExp.js","../../node_modules/lodash-es/_cloneSymbol.js","../../node_modules/lodash-es/_cloneTypedArray.js","../../node_modules/lodash-es/_initCloneByTag.js","../../node_modules/lodash-es/_initCloneObject.js","../../node_modules/lodash-es/_baseIsMap.js","../../node_modules/lodash-es/isMap.js","../../node_modules/lodash-es/_baseIsSet.js","../../node_modules/lodash-es/isSet.js","../../node_modules/lodash-es/_baseClone.js","../../node_modules/lodash-es/clone.js","../../node_modules/lodash-es/cloneDeep.js","../../node_modules/lodash-es/compact.js","../../node_modules/lodash-es/_setCacheAdd.js","../../node_modules/lodash-es/_setCacheHas.js","../../node_modules/lodash-es/_SetCache.js","../../node_modules/lodash-es/_arraySome.js","../../node_modules/lodash-es/_cacheHas.js","../../node_modules/lodash-es/_equalArrays.js","../../node_modules/lodash-es/_mapToArray.js","../../node_modules/lodash-es/_setToArray.js","../../node_modules/lodash-es/_equalByTag.js","../../node_modules/lodash-es/_equalObjects.js","../../node_modules/lodash-es/_baseIsEqualDeep.js","../../node_modules/lodash-es/_baseIsEqual.js","../../node_modules/lodash-es/_baseIsMatch.js","../../node_modules/lodash-es/_isStrictComparable.js","../../node_modules/lodash-es/_getMatchData.js","../../node_modules/lodash-es/_matchesStrictComparable.js","../../node_modules/lodash-es/_baseMatches.js","../../node_modules/lodash-es/_baseHasIn.js","../../node_modules/lodash-es/_hasPath.js","../../node_modules/lodash-es/hasIn.js","../../node_modules/lodash-es/_baseMatchesProperty.js","../../node_modules/lodash-es/_baseProperty.js","../../node_modules/lodash-es/_basePropertyDeep.js","../../node_modules/lodash-es/property.js","../../node_modules/lodash-es/_baseIteratee.js","../../node_modules/lodash-es/_arrayAggregator.js","../../node_modules/lodash-es/_createBaseFor.js","../../node_modules/lodash-es/_baseFor.js","../../node_modules/lodash-es/_baseForOwn.js","../../node_modules/lodash-es/_createBaseEach.js","../../node_modules/lodash-es/_baseEach.js","../../node_modules/lodash-es/_baseAggregator.js","../../node_modules/lodash-es/_createAggregator.js","../../node_modules/lodash-es/now.js","../../node_modules/lodash-es/debounce.js","../../node_modules/lodash-es/_assignMergeValue.js","../../node_modules/lodash-es/isArrayLikeObject.js","../../node_modules/lodash-es/_safeGet.js","../../node_modules/lodash-es/toPlainObject.js","../../node_modules/lodash-es/_baseMergeDeep.js","../../node_modules/lodash-es/_baseMerge.js","../../node_modules/lodash-es/mergeWith.js","../../node_modules/lodash-es/_arrayIncludesWith.js","../../node_modules/lodash-es/_baseDifference.js","../../node_modules/lodash-es/difference.js","../../node_modules/lodash-es/last.js","../../node_modules/lodash-es/_baseMap.js","../../node_modules/lodash-es/groupBy.js","../../node_modules/lodash-es/_baseGt.js","../../node_modules/lodash-es/_baseValues.js","../../node_modules/lodash-es/values.js","../../node_modules/lodash-es/_parent.js","../../node_modules/lodash-es/isEmpty.js","../../node_modules/lodash-es/isEqual.js","../../node_modules/lodash-es/isInteger.js","../../node_modules/lodash-es/isNumber.js","../../node_modules/lodash-es/isNil.js","../../node_modules/lodash-es/keyBy.js","../../node_modules/lodash-es/_baseLt.js","../../node_modules/lodash-es/mapValues.js","../../node_modules/lodash-es/_baseExtremum.js","../../node_modules/lodash-es/max.js","../../node_modules/lodash-es/maxBy.js","../../node_modules/lodash-es/_baseSum.js","../../node_modules/lodash-es/merge.js","../../node_modules/lodash-es/min.js","../../node_modules/lodash-es/minBy.js","../../node_modules/lodash-es/_baseUnset.js","../../node_modules/lodash-es/_customOmitClone.js","../../node_modules/lodash-es/omit.js","../../node_modules/lodash-es/_baseSortBy.js","../../node_modules/lodash-es/_compareAscending.js","../../node_modules/lodash-es/_compareMultiple.js","../../node_modules/lodash-es/_baseOrderBy.js","../../node_modules/lodash-es/orderBy.js","../../node_modules/lodash-es/partition.js","../../node_modules/lodash-es/_baseRandom.js","../../node_modules/lodash-es/_baseRange.js","../../node_modules/lodash-es/_createRange.js","../../node_modules/lodash-es/range.js","../../node_modules/lodash-es/reverse.js","../../node_modules/lodash-es/round.js","../../node_modules/lodash-es/_shuffleSelf.js","../../node_modules/lodash-es/_arrayShuffle.js","../../node_modules/lodash-es/_baseShuffle.js","../../node_modules/lodash-es/shuffle.js","../../node_modules/lodash-es/sortBy.js","../../node_modules/lodash-es/_baseSortedUniq.js","../../node_modules/lodash-es/sortedUniq.js","../../node_modules/lodash-es/sortedUniqBy.js","../../node_modules/lodash-es/sum.js","../../node_modules/lodash-es/sumBy.js","../../node_modules/lodash-es/throttle.js","../../node_modules/lodash-es/_createSet.js","../../node_modules/lodash-es/_baseUniq.js","../../node_modules/lodash-es/union.js","../../node_modules/lodash-es/uniq.js","../../node_modules/lodash-es/uniqBy.js","../../node_modules/lodash-es/uniqWith.js","../../node_modules/lodash-es/without.js","../../node_modules/mobx/dist/mobx.esm.js","../../node_modules/remeda/dist/lazyDataLastImpl-BDhrIOwR.js","../../node_modules/remeda/dist/purry-DH9cw9sy.js","../../node_modules/remeda/dist/withPrecision-D4S0Kwr9.js","../../node_modules/remeda/dist/chunk-DjNU0gfg.js","../../node_modules/remeda/dist/clamp-DSPiOOFS.js","../../node_modules/remeda/dist/concat-Bi7sChf0.js","../../node_modules/remeda/dist/countBy-DRx5TN-y.js","../../node_modules/remeda/dist/utilityEvaluators-DORpnx39.js","../../node_modules/remeda/dist/pipe-jLehR9-P.js","../../node_modules/remeda/dist/purryFromLazy-3oywCNIb.js","../../node_modules/remeda/dist/difference-DxYg8_zs.js","../../node_modules/remeda/dist/hasAtLeast-F1Oj_xBB.js","../../node_modules/remeda/dist/swapInPlace-CPRo9crU.js","../../node_modules/remeda/dist/heap-Gww6bokq.js","../../node_modules/remeda/dist/purryOrderRules-CfRtTEyM.js","../../node_modules/remeda/dist/dropLast-Cn6tyuw5.js","../../node_modules/remeda/dist/dropLastWhile-BAeXDa6z.js","../../node_modules/remeda/dist/dropWhile-tNbnGg9S.js","../../node_modules/remeda/dist/filter-BiMaBet0.js","../../node_modules/remeda/dist/toSingle-Bfpp5_i-.js","../../node_modules/remeda/dist/first-1mSmk2BJ.js","../../node_modules/remeda/dist/firstBy-DxmX0NGR.js","../../node_modules/remeda/dist/flatMap-Cw4Hh6bl.js","../../node_modules/remeda/dist/groupBy-DG3Piv-t.js","../../node_modules/remeda/dist/isDeepEqual-jLo35Woq.js","../../node_modules/remeda/dist/identity-CdMenAq7.js","../../node_modules/remeda/dist/intersection-DCadGlPk.js","../../node_modules/remeda/dist/invert-BZScEfjD.js","../../node_modules/remeda/dist/isDefined-D96LKBI6.js","../../node_modules/remeda/dist/isEmpty-B6r3tkJ8.js","../../node_modules/remeda/dist/isNumber-ccMQhOVD.js","../../node_modules/remeda/dist/isPlainObject-Crc4dM9-.js","../../node_modules/remeda/dist/isShallowEqual-B8ugYLnO.js","../../node_modules/remeda/dist/isString-BPlksnnG.js","../../node_modules/remeda/dist/last-BaD4Geh6.js","../../node_modules/remeda/dist/map-B0uTZUd8.js","../../node_modules/remeda/dist/sum-DXyvmTLT.js","../../node_modules/remeda/dist/omit-HZOiLuMO.js","../../node_modules/remeda/dist/omitBy-CgV9CAW2.js","../../node_modules/remeda/dist/partition-DAu403JQ.js","../../node_modules/remeda/dist/pick-CZJrFX39.js","../../node_modules/remeda/dist/prop-Cv_AVBuA.js","../../node_modules/remeda/dist/range-amdmPz_6.js","../../node_modules/remeda/dist/reverse-CkjHvjWj.js","../../node_modules/remeda/dist/round-DcwvM4Um.js","../../node_modules/remeda/dist/sample-C8kGw2Ic.js","../../node_modules/remeda/dist/sort-DJMgrJTX.js","../../node_modules/remeda/dist/sortBy-CjYY6W42.js","../../node_modules/remeda/dist/binarySearchCutoffIndex-CeJltMp9.js","../../node_modules/remeda/dist/sortedIndex-CQhzGRfq.js","../../node_modules/remeda/dist/sortedIndexBy-D37YUiBV.js","../../node_modules/remeda/dist/sortedIndexWith-CAKl35Dc.js","../../node_modules/remeda/dist/sumBy-B4Rqq3Nr.js","../../node_modules/remeda/dist/take-Bdy9Ko1L.js","../../node_modules/remeda/dist/takeFirstBy-CWZxOHpF.js","../../node_modules/remeda/dist/takeWhile-QWH_1pO-.js","../../node_modules/remeda/dist/unique-10P7QXxd.js","../../node_modules/remeda/dist/uniqueBy-C_PxkF_D.js","../../node_modules/remeda/dist/values-CpYo8vbR.js","../../node_modules/remeda/dist/zip-DxS_OtaF.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/number.js","../../node_modules/d3-array/src/bisect.js","../../node_modules/d3-array/src/extent.js","../../node_modules/d3-array/src/fsum.js","../../node_modules/d3-array/src/sort.js","../../node_modules/d3-array/src/ticks.js","../../node_modules/d3-array/src/max.js","../../node_modules/d3-array/src/min.js","../../node_modules/d3-array/src/quickselect.js","../../node_modules/d3-array/src/quantile.js","../../node_modules/d3-array/src/merge.js","../../node_modules/d3-array/src/pairs.js","../../node_modules/d3-array/src/range.js","../../node_modules/dayjs/dayjs.min.js","../../node_modules/dayjs/plugin/customParseFormat.js","../../node_modules/dayjs/plugin/isToday.js","../../node_modules/dayjs/plugin/isYesterday.js","../../node_modules/dayjs/plugin/relativeTime.js","../../node_modules/dayjs/plugin/utc.js","../../packages/@ourworldindata/utils/src/dayjs.ts","../../node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-format/src/exponent.js","../../node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-format/src/formatPrefixAuto.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/precisionFixed.js","../../node_modules/d3-format/src/precisionPrefix.js","../../node_modules/d3-format/src/precisionRound.js","../../node_modules/striptags/src/striptags.js","../../node_modules/zod/v4/core/core.js","../../node_modules/zod/v4/core/util.js","../../node_modules/zod/v4/core/errors.js","../../node_modules/zod/v4/core/parse.js","../../node_modules/zod/v4/core/regexes.js","../../node_modules/zod/v4/core/checks.js","../../node_modules/zod/v4/core/doc.js","../../node_modules/zod/v4/core/versions.js","../../node_modules/zod/v4/core/schemas.js","../../node_modules/zod/v4/core/registries.js","../../node_modules/zod/v4/core/api.js","../../node_modules/zod/v4/mini/schemas.js","../../packages/@ourworldindata/types/src/DonationTypes.ts","../../packages/@ourworldindata/types/src/domainTypes/Various.ts","../../packages/@ourworldindata/types/src/grapherTypes/GrapherConstants.ts","../../packages/@ourworldindata/types/src/grapherTypes/GrapherTypes.ts","../../packages/@ourworldindata/types/src/domainTypes/Layout.ts","../../packages/@ourworldindata/types/src/domainTypes/ContentGraph.ts","../../packages/@ourworldindata/types/src/gdocTypes/archieMLComponents/generic.ts","../../packages/@ourworldindata/types/src/gdocTypes/Gdoc.ts","../../packages/@ourworldindata/types/src/gdocTypes/GdocConstants.ts","../../packages/@ourworldindata/types/src/OwidVariable.ts","../../packages/@ourworldindata/types/src/OwidVariableDisplayConfigInterface.ts","../../packages/@ourworldindata/types/src/domainTypes/CoreTableTypes.ts","../../node_modules/zod/v4/classic/iso.js","../../node_modules/zod/v4/classic/errors.js","../../node_modules/zod/v4/classic/parse.js","../../node_modules/zod/v4/classic/schemas.js","../../packages/@ourworldindata/types/src/domainTypes/StaticViz.ts","../../packages/@ourworldindata/types/src/siteTypes/SiteConstants.ts","../../packages/@ourworldindata/types/src/domainTypes/Archive.ts","../../packages/@ourworldindata/types/src/grapherTypes/BinningStrategyTypes.ts","../../packages/@ourworldindata/types/src/endpointTypes/GrapherSearchResultJson.ts","../../packages/@ourworldindata/types/src/analyticsTypes/analyticsTypes.ts","../../packages/@ourworldindata/types/src/domainTypes/Search.ts","../../packages/@ourworldindata/utils/src/PointVector.ts","../../node_modules/ts-pattern/dist/index.js","../../node_modules/url-slug/dist/index.mjs","../../packages/@ourworldindata/utils/src/Util.ts","../../packages/@ourworldindata/utils/src/archival/archivalDate.ts","../../packages/@ourworldindata/utils/src/metadataHelpers.ts","../../packages/@ourworldindata/utils/src/isPresent.ts","../../packages/@ourworldindata/utils/src/formatValue.ts","../../packages/@ourworldindata/utils/src/TimeBounds.ts","../../packages/@ourworldindata/utils/src/regions/regions.data.ts","../../packages/@ourworldindata/utils/src/regions/regions.ts","../../packages/@ourworldindata/utils/src/regions/regionsUtils.ts","../../node_modules/requires-port/index.js","../../node_modules/querystringify/index.js","../../node_modules/url-parse/index.js","../../packages/@ourworldindata/utils/src/urls/UrlUtils.ts","../../packages/@ourworldindata/utils/src/urls/Url.ts","../../packages/@ourworldindata/utils/src/profiles.ts","../../packages/@ourworldindata/utils/src/stringWidth.ts","../../packages/@ourworldindata/utils/src/Bounds.ts","../../packages/@ourworldindata/utils/src/persistable/Persistable.ts","../../packages/@ourworldindata/utils/src/OwidVariable.ts","../../packages/@ourworldindata/utils/src/urls/UrlMigration.ts","../../packages/@ourworldindata/utils/src/string.ts","../../packages/@ourworldindata/utils/src/serializers.ts","../../packages/@ourworldindata/utils/src/PromiseCache.ts","../../packages/@ourworldindata/utils/src/PromiseSwitcher.ts","../../packages/@ourworldindata/utils/src/image.ts","../../node_modules/react/cjs/react-jsx-runtime.production.js","../../node_modules/react/jsx-runtime.js","../../node_modules/react/cjs/react.production.js","../../node_modules/react/index.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/popper.js","../../node_modules/tippy.js/dist/tippy.esm.js","../../node_modules/react-dom/cjs/react-dom.production.js","../../node_modules/react-dom/index.js","../../node_modules/@tippyjs/react/dist/tippy-react.esm.js","../../packages/@ourworldindata/utils/src/Tippy.tsx","../../packages/@ourworldindata/utils/src/BrowserUtils.ts","../../node_modules/@sentry/core/build/esm/debug-build.js","../../node_modules/@sentry/core/build/esm/utils/worldwide.js","../../node_modules/@sentry/core/build/esm/utils/version.js","../../node_modules/@sentry/core/build/esm/carrier.js","../../node_modules/@sentry/core/build/esm/utils/debug-logger.js","../../node_modules/@sentry/core/build/esm/utils/is.js","../../node_modules/@sentry/core/build/esm/utils/object.js","../../node_modules/@sentry/core/build/esm/utils/randomSafeContext.js","../../node_modules/@sentry/core/build/esm/utils/string.js","../../node_modules/@sentry/core/build/esm/utils/misc.js","../../node_modules/@sentry/core/build/esm/utils/time.js","../../node_modules/@sentry/core/build/esm/session.js","../../node_modules/@sentry/core/build/esm/utils/merge.js","../../node_modules/@sentry/core/build/esm/utils/propagationContext.js","../../node_modules/@sentry/core/build/esm/utils/spanOnScope.js","../../node_modules/@sentry/core/build/esm/scope.js","../../node_modules/@sentry/core/build/esm/defaultScopes.js","../../node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","../../node_modules/@sentry/core/build/esm/asyncContext/index.js","../../node_modules/@sentry/core/build/esm/currentScopes.js","../../node_modules/@sentry/core/build/esm/utils/dsn.js","../../node_modules/@sentry/core/build/esm/utils/prepareEvent.js","../../node_modules/@sentry/core/build/esm/exports.js","../../node_modules/@sentry/core/build/esm/api.js","../../node_modules/@sentry/browser/build/npm/esm/prod/helpers.js","../../node_modules/@sentry/browser/build/npm/esm/prod/debug-build.js","../../node_modules/@sentry/browser/build/npm/esm/prod/report-dialog.js","../../packages/@ourworldindata/utils/src/grapherConfigUtils.ts","../../packages/@ourworldindata/utils/src/MultiDimDataPageConfig.ts","../../node_modules/fuzzysort/fuzzysort.js","../../packages/@ourworldindata/utils/src/FuzzySearch.ts","../../packages/@ourworldindata/utils/src/experiments/utils.ts","../../packages/@ourworldindata/utils/src/experiments/constants.ts","../../packages/@ourworldindata/utils/src/experiments/Experiment.ts","../../packages/@ourworldindata/utils/src/experiments/config.ts","../../node_modules/js-cookie/dist/js.cookie.mjs","../../packages/@ourworldindata/utils/src/experiments/state.ts","../../packages/@ourworldindata/utils/src/search/SearchHelpers.ts","../../packages/@ourworldindata/utils/src/search/MediumVariantRichDataHelpers.ts","../../packages/@ourworldindata/grapher/src/color/ColorScaleConfig.ts","../../packages/@ourworldindata/grapher/src/color/CustomSchemes.ts","../../node_modules/d3-color/src/define.js","../../node_modules/d3-color/src/color.js","../../node_modules/d3-interpolate/src/constant.js","../../node_modules/d3-interpolate/src/color.js","../../node_modules/d3-interpolate/src/rgb.js","../../node_modules/d3-interpolate/src/numberArray.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/value.js","../../node_modules/d3-interpolate/src/round.js","../../node_modules/d3-interpolate/src/transform/decompose.js","../../node_modules/d3-interpolate/src/transform/parse.js","../../node_modules/d3-interpolate/src/transform/index.js","../../node_modules/d3-interpolate/src/zoom.js","../../node_modules/d3-interpolate/src/quantize.js","../../packages/@ourworldindata/grapher/src/color/ColorUtils.ts","../../packages/@ourworldindata/grapher/src/color/ColorScheme.ts","../../node_modules/colorbrewer/index.js","../../packages/@ourworldindata/grapher/src/color/ColorBrewerSchemes.ts","../../packages/@ourworldindata/grapher/src/color/ColorSchemes.ts","../../packages/@ourworldindata/grapher/src/color/ColorConstants.ts","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-selection/src/namespaces.js","../../node_modules/d3-selection/src/namespace.js","../../node_modules/d3-selection/src/creator.js","../../node_modules/d3-selection/src/selector.js","../../node_modules/d3-selection/src/selection/select.js","../../node_modules/d3-selection/src/array.js","../../node_modules/d3-selection/src/selectorAll.js","../../node_modules/d3-selection/src/selection/selectAll.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/filter.js","../../node_modules/d3-selection/src/selection/sparse.js","../../node_modules/d3-selection/src/selection/enter.js","../../node_modules/d3-selection/src/constant.js","../../node_modules/d3-selection/src/selection/data.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/sort.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/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/selection/append.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/datum.js","../../node_modules/d3-selection/src/selection/on.js","../../node_modules/d3-selection/src/selection/dispatch.js","../../node_modules/d3-selection/src/selection/iterator.js","../../node_modules/d3-selection/src/selection/index.js","../../node_modules/d3-selection/src/select.js","../../node_modules/d3-selection/src/sourceEvent.js","../../node_modules/d3-selection/src/pointer.js","../../node_modules/d3-drag/src/noevent.js","../../node_modules/d3-drag/src/nodrag.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-timer/src/timeout.js","../../node_modules/d3-transition/src/transition/schedule.js","../../node_modules/d3-transition/src/interrupt.js","../../node_modules/d3-transition/src/selection/interrupt.js","../../node_modules/d3-transition/src/transition/tween.js","../../node_modules/d3-transition/src/transition/interpolate.js","../../node_modules/d3-transition/src/transition/attr.js","../../node_modules/d3-transition/src/transition/attrTween.js","../../node_modules/d3-transition/src/transition/delay.js","../../node_modules/d3-transition/src/transition/duration.js","../../node_modules/d3-transition/src/transition/ease.js","../../node_modules/d3-transition/src/transition/easeVarying.js","../../node_modules/d3-transition/src/transition/filter.js","../../node_modules/d3-transition/src/transition/merge.js","../../node_modules/d3-transition/src/transition/on.js","../../node_modules/d3-transition/src/transition/remove.js","../../node_modules/d3-transition/src/transition/select.js","../../node_modules/d3-transition/src/transition/selectAll.js","../../node_modules/d3-transition/src/transition/selection.js","../../node_modules/d3-transition/src/transition/style.js","../../node_modules/d3-transition/src/transition/styleTween.js","../../node_modules/d3-transition/src/transition/text.js","../../node_modules/d3-transition/src/transition/textTween.js","../../node_modules/d3-transition/src/transition/transition.js","../../node_modules/d3-transition/src/transition/end.js","../../node_modules/d3-transition/src/transition/index.js","../../node_modules/d3-ease/src/linear.js","../../node_modules/d3-ease/src/quad.js","../../node_modules/d3-ease/src/cubic.js","../../node_modules/d3-transition/src/selection/transition.js","../../node_modules/d3-transition/src/selection/index.js","../../node_modules/d3-path/src/path.js","../../node_modules/robust-predicates/esm/util.js","../../node_modules/robust-predicates/esm/orient2d.js","../../node_modules/d3-quadtree/src/add.js","../../node_modules/d3-quadtree/src/cover.js","../../node_modules/d3-quadtree/src/data.js","../../node_modules/d3-quadtree/src/extent.js","../../node_modules/d3-quadtree/src/quad.js","../../node_modules/d3-quadtree/src/find.js","../../node_modules/d3-quadtree/src/remove.js","../../node_modules/d3-quadtree/src/root.js","../../node_modules/d3-quadtree/src/size.js","../../node_modules/d3-quadtree/src/visit.js","../../node_modules/d3-quadtree/src/visitAfter.js","../../node_modules/d3-quadtree/src/x.js","../../node_modules/d3-quadtree/src/y.js","../../node_modules/d3-quadtree/src/quadtree.js","../../node_modules/d3-force/src/constant.js","../../node_modules/d3-force/src/lcg.js","../../node_modules/d3-force/src/simulation.js","../../node_modules/d3-force/src/x.js","../../node_modules/d3-force/src/y.js","../../node_modules/d3-geo/src/math.js","../../node_modules/d3-geo/src/noop.js","../../node_modules/d3-geo/src/stream.js","../../node_modules/d3-geo/src/area.js","../../node_modules/d3-geo/src/cartesian.js","../../node_modules/d3-geo/src/bounds.js","../../node_modules/d3-geo/src/centroid.js","../../node_modules/d3-geo/src/compose.js","../../node_modules/d3-geo/src/rotation.js","../../node_modules/d3-geo/src/circle.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-geo/src/polygonContains.js","../../node_modules/d3-geo/src/clip/index.js","../../node_modules/d3-geo/src/clip/antimeridian.js","../../node_modules/d3-geo/src/clip/circle.js","../../node_modules/d3-geo/src/clip/line.js","../../node_modules/d3-geo/src/clip/rectangle.js","../../node_modules/d3-geo/src/graticule.js","../../node_modules/d3-geo/src/interpolate.js","../../node_modules/d3-geo/src/identity.js","../../node_modules/d3-geo/src/path/area.js","../../node_modules/d3-geo/src/path/bounds.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/d3-geo/src/path/string.js","../../node_modules/d3-geo/src/path/index.js","../../node_modules/d3-geo/src/transform.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/conic.js","../../node_modules/d3-geo/src/projection/azimuthal.js","../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../../node_modules/d3-geo/src/projection/mercator.js","../../node_modules/d3-geo/src/projection/conicConformal.js","../../node_modules/d3-geo/src/projection/orthographic.js","../../node_modules/d3-scale/src/init.js","../../node_modules/d3-scale/src/constant.js","../../node_modules/d3-scale/src/number.js","../../node_modules/d3-scale/src/continuous.js","../../node_modules/d3-scale/src/tickFormat.js","../../node_modules/d3-scale/src/linear.js","../../node_modules/d3-scale/src/nice.js","../../node_modules/d3-scale/src/log.js","../../node_modules/d3-scale/src/pow.js","../../node_modules/d3-shape/src/constant.js","../../node_modules/d3-shape/src/path.js","../../node_modules/d3-shape/src/array.js","../../node_modules/d3-shape/src/curve/linear.js","../../node_modules/d3-shape/src/point.js","../../node_modules/d3-shape/src/line.js","../../node_modules/d3-zoom/src/constant.js","../../node_modules/d3-zoom/src/event.js","../../node_modules/d3-zoom/src/transform.js","../../node_modules/d3-zoom/src/noevent.js","../../node_modules/d3-zoom/src/zoom.js","../../packages/@ourworldindata/grapher/src/color/BinningStrategyLogarithmic.ts","../../packages/@ourworldindata/grapher/src/color/BinningStrategyEqualSizeBins.ts","../../packages/@ourworldindata/grapher/src/color/BinningStrategies.ts","../../packages/@ourworldindata/grapher/src/color/ColorScale.ts","../../packages/@ourworldindata/grapher/src/color/ColorScaleBin.ts","../../packages/@ourworldindata/grapher/src/chart/ChartDimension.ts","../../packages/@ourworldindata/components/src/TextWrap/TextWrapUtils.ts","../../packages/@ourworldindata/components/src/TextWrap/TextWrap.tsx","../../node_modules/mdast-util-to-string/lib/index.js","../../node_modules/decode-named-character-reference/index.dom.js","../../node_modules/micromark-util-chunked/index.js","../../node_modules/micromark-util-combine-extensions/index.js","../../node_modules/micromark-util-decode-numeric-character-reference/index.js","../../node_modules/micromark-util-normalize-identifier/index.js","../../node_modules/micromark-util-character/index.js","../../node_modules/micromark-util-sanitize-uri/index.js","../../node_modules/micromark-factory-space/index.js","../../node_modules/micromark/lib/initialize/content.js","../../node_modules/micromark/lib/initialize/document.js","../../node_modules/micromark-util-classify-character/index.js","../../node_modules/micromark-util-resolve-all/index.js","../../node_modules/micromark-core-commonmark/lib/attention.js","../../node_modules/micromark-core-commonmark/lib/autolink.js","../../node_modules/micromark-core-commonmark/lib/blank-line.js","../../node_modules/micromark-core-commonmark/lib/block-quote.js","../../node_modules/micromark-core-commonmark/lib/character-escape.js","../../node_modules/micromark-core-commonmark/lib/character-reference.js","../../node_modules/micromark-core-commonmark/lib/code-fenced.js","../../node_modules/micromark-core-commonmark/lib/code-indented.js","../../node_modules/micromark-core-commonmark/lib/code-text.js","../../node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../../node_modules/micromark-util-subtokenize/index.js","../../node_modules/micromark-core-commonmark/lib/content.js","../../node_modules/micromark-factory-destination/index.js","../../node_modules/micromark-factory-label/index.js","../../node_modules/micromark-factory-title/index.js","../../node_modules/micromark-factory-whitespace/index.js","../../node_modules/micromark-core-commonmark/lib/definition.js","../../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../../node_modules/micromark-core-commonmark/lib/heading-atx.js","../../node_modules/micromark-util-html-tag-name/index.js","../../node_modules/micromark-core-commonmark/lib/html-flow.js","../../node_modules/micromark-core-commonmark/lib/html-text.js","../../node_modules/micromark-core-commonmark/lib/label-end.js","../../node_modules/micromark-core-commonmark/lib/label-start-image.js","../../node_modules/micromark-core-commonmark/lib/label-start-link.js","../../node_modules/micromark-core-commonmark/lib/line-ending.js","../../node_modules/micromark-core-commonmark/lib/thematic-break.js","../../node_modules/micromark-core-commonmark/lib/list.js","../../node_modules/micromark-core-commonmark/lib/setext-underline.js","../../node_modules/micromark/lib/initialize/flow.js","../../node_modules/micromark/lib/initialize/text.js","../../node_modules/micromark/lib/constructs.js","../../node_modules/micromark/lib/create-tokenizer.js","../../node_modules/micromark/lib/parse.js","../../node_modules/micromark/lib/postprocess.js","../../node_modules/micromark/lib/preprocess.js","../../node_modules/micromark-util-decode-string/index.js","../../node_modules/unist-util-stringify-position/lib/index.js","../../node_modules/mdast-util-from-markdown/lib/index.js","../../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","../../node_modules/unist-util-is/lib/index.js","../../node_modules/unist-util-visit-parents/lib/index.js","../../node_modules/mdast-util-find-and-replace/lib/index.js","../../packages/@ourworldindata/components/src/markdown/remarkPlainLinks.ts","../../packages/@ourworldindata/components/src/MarkdownTextWrap/MarkdownTextWrap.tsx","../../node_modules/comma-separated-tokens/index.js","../../node_modules/estree-util-is-identifier-name/lib/index.js","../../node_modules/hast-util-whitespace/lib/index.js","../../node_modules/property-information/lib/util/schema.js","../../node_modules/property-information/lib/util/merge.js","../../node_modules/property-information/lib/normalize.js","../../node_modules/property-information/lib/util/info.js","../../node_modules/property-information/lib/util/types.js","../../node_modules/property-information/lib/util/defined-info.js","../../node_modules/property-information/lib/util/create.js","../../node_modules/property-information/lib/aria.js","../../node_modules/property-information/lib/util/case-sensitive-transform.js","../../node_modules/property-information/lib/util/case-insensitive-transform.js","../../node_modules/property-information/lib/html.js","../../node_modules/property-information/lib/svg.js","../../node_modules/property-information/lib/xlink.js","../../node_modules/property-information/lib/xmlns.js","../../node_modules/property-information/lib/xml.js","../../node_modules/property-information/lib/hast-to-react.js","../../node_modules/property-information/lib/find.js","../../node_modules/property-information/index.js","../../node_modules/space-separated-tokens/index.js","../../node_modules/inline-style-parser/index.js","../../node_modules/style-to-object/cjs/index.js","../../node_modules/style-to-js/cjs/utilities.js","../../node_modules/style-to-js/cjs/index.js","../../node_modules/unist-util-position/lib/index.js","../../node_modules/vfile-message/lib/index.js","../../node_modules/hast-util-to-jsx-runtime/lib/index.js","../../node_modules/html-url-attributes/lib/index.js","../../node_modules/remark-parse/lib/index.js","../../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../../node_modules/mdast-util-to-hast/lib/handlers/break.js","../../node_modules/mdast-util-to-hast/lib/handlers/code.js","../../node_modules/mdast-util-to-hast/lib/handlers/delete.js","../../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../../node_modules/mdast-util-to-hast/lib/handlers/heading.js","../../node_modules/mdast-util-to-hast/lib/handlers/html.js","../../node_modules/mdast-util-to-hast/lib/revert.js","../../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../../node_modules/mdast-util-to-hast/lib/handlers/image.js","../../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../../node_modules/mdast-util-to-hast/lib/handlers/link.js","../../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../../node_modules/mdast-util-to-hast/lib/handlers/list.js","../../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../../node_modules/mdast-util-to-hast/lib/handlers/root.js","../../node_modules/mdast-util-to-hast/lib/handlers/strong.js","../../node_modules/mdast-util-to-hast/lib/handlers/table.js","../../node_modules/mdast-util-to-hast/lib/handlers/table-row.js","../../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","../../node_modules/trim-lines/index.js","../../node_modules/mdast-util-to-hast/lib/handlers/text.js","../../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../../node_modules/mdast-util-to-hast/lib/handlers/index.js","../../node_modules/@ungap/structured-clone/esm/types.js","../../node_modules/@ungap/structured-clone/esm/deserialize.js","../../node_modules/@ungap/structured-clone/esm/serialize.js","../../node_modules/@ungap/structured-clone/esm/index.js","../../node_modules/mdast-util-to-hast/lib/footer.js","../../node_modules/unist-util-visit/lib/index.js","../../node_modules/mdast-util-to-hast/lib/state.js","../../node_modules/mdast-util-to-hast/lib/index.js","../../node_modules/remark-rehype/lib/index.js","../../node_modules/bail/index.js","../../node_modules/extend/index.js","../../node_modules/is-plain-obj/index.js","../../node_modules/trough/lib/index.js","../../node_modules/vfile/lib/minpath.browser.js","../../node_modules/vfile/lib/minproc.browser.js","../../node_modules/vfile/lib/minurl.shared.js","../../node_modules/vfile/lib/minurl.browser.js","../../node_modules/vfile/lib/index.js","../../node_modules/unified/lib/callable-instance.js","../../node_modules/unified/lib/index.js","../../node_modules/react-markdown/lib/index.js","../../packages/@ourworldindata/components/src/SimpleMarkdownText.tsx","../../packages/@ourworldindata/components/src/GdocsUtils.ts","../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs","../../node_modules/@fortawesome/fontawesome-svg-core/index.mjs","../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../node_modules/prop-types/factoryWithThrowingShims.js","../../node_modules/prop-types/index.js","../../node_modules/@fortawesome/react-fontawesome/index.es.js","../../node_modules/classnames/index.js","../../packages/@ourworldindata/components/src/ExpandableToggle/ExpandableToggle.tsx","../../packages/@ourworldindata/components/src/SharedDataPageConstants.ts","../../packages/@ourworldindata/components/src/IndicatorKeyData/IndicatorKeyData.tsx","../../packages/@ourworldindata/components/src/IndicatorProcessing/IndicatorProcessing.tsx","../../node_modules/react-aria-components/dist/RSPContexts.mjs","../../node_modules/@react-aria/utils/dist/useLayoutEffect.mjs","../../node_modules/@react-aria/utils/dist/useValueEffect.mjs","../../node_modules/@react-aria/ssr/dist/SSRProvider.mjs","../../node_modules/@react-aria/utils/dist/useId.mjs","../../node_modules/@react-aria/utils/dist/chain.mjs","../../node_modules/@react-aria/utils/dist/domHelpers.mjs","../../node_modules/@react-stately/flags/dist/import.mjs","../../node_modules/@react-aria/utils/dist/DOMFunctions.mjs","../../node_modules/@react-aria/utils/dist/ShadowTreeWalker.mjs","../../node_modules/clsx/dist/clsx.mjs","../../node_modules/@react-aria/utils/dist/mergeProps.mjs","../../node_modules/@react-aria/utils/dist/mergeRefs.mjs","../../node_modules/@react-aria/utils/dist/filterDOMProps.mjs","../../node_modules/@react-aria/utils/dist/focusWithoutScrolling.mjs","../../node_modules/@react-aria/utils/dist/platform.mjs","../../node_modules/@react-aria/utils/dist/openLink.mjs","../../node_modules/@react-aria/utils/dist/runAfterTransition.mjs","../../node_modules/@react-aria/utils/dist/useGlobalListeners.mjs","../../node_modules/@react-aria/utils/dist/useLabels.mjs","../../node_modules/@react-aria/utils/dist/useObjectRef.mjs","../../node_modules/@react-aria/utils/dist/useEffectEvent.mjs","../../node_modules/@react-aria/utils/dist/useUpdateLayoutEffect.mjs","../../node_modules/@react-aria/utils/dist/useResizeObserver.mjs","../../node_modules/@react-aria/utils/dist/useSyncRef.mjs","../../node_modules/@react-aria/utils/dist/isScrollable.mjs","../../node_modules/@react-aria/utils/dist/getScrollParent.mjs","../../node_modules/@react-aria/utils/dist/getScrollParents.mjs","../../node_modules/@react-aria/utils/dist/keyboard.mjs","../../node_modules/@react-aria/utils/dist/useViewportSize.mjs","../../node_modules/@react-aria/utils/dist/useDescription.mjs","../../node_modules/@react-aria/utils/dist/useEvent.mjs","../../node_modules/@react-aria/utils/dist/scrollIntoView.mjs","../../node_modules/@react-aria/utils/dist/isVirtualEvent.mjs","../../node_modules/@react-aria/utils/dist/useDeepMemo.mjs","../../node_modules/@react-aria/utils/dist/useFormReset.mjs","../../node_modules/@react-aria/utils/dist/useLoadMoreSentinel.mjs","../../node_modules/@react-aria/utils/dist/inertValue.mjs","../../node_modules/@react-aria/utils/dist/constants.mjs","../../node_modules/@react-aria/utils/dist/animation.mjs","../../node_modules/@react-aria/utils/dist/isElementVisible.mjs","../../node_modules/@react-aria/utils/dist/isFocusable.mjs","../../node_modules/@react-stately/utils/dist/useControlledState.mjs","../../node_modules/@react-stately/utils/dist/number.mjs","../../node_modules/react-aria-components/dist/utils.mjs","../../node_modules/@react-aria/optimize-locales-plugin/empty.js","../../node_modules/@react-aria/live-announcer/dist/LiveAnnouncer.mjs","../../node_modules/@react-aria/overlays/dist/calculatePosition.mjs","../../node_modules/@react-aria/overlays/dist/useCloseOnScroll.mjs","../../node_modules/@react-aria/i18n/dist/utils.mjs","../../node_modules/@react-aria/i18n/dist/useDefaultLocale.mjs","../../node_modules/@react-aria/i18n/dist/context.mjs","../../node_modules/@internationalized/string/dist/LocalizedStringDictionary.mjs","../../node_modules/@internationalized/string/dist/LocalizedStringFormatter.mjs","../../node_modules/@react-aria/i18n/dist/useLocalizedStringFormatter.mjs","../../node_modules/@react-aria/i18n/dist/useListFormatter.mjs","../../node_modules/@internationalized/date/dist/utils.mjs","../../node_modules/@internationalized/date/dist/GregorianCalendar.mjs","../../node_modules/@internationalized/date/dist/queries.mjs","../../node_modules/@internationalized/date/dist/conversion.mjs","../../node_modules/@internationalized/date/dist/manipulation.mjs","../../node_modules/@internationalized/date/dist/string.mjs","../../node_modules/@swc/helpers/esm/_check_private_redeclaration.js","../../node_modules/@swc/helpers/esm/_class_private_field_init.js","../../node_modules/@internationalized/date/dist/CalendarDate.mjs","../../node_modules/@internationalized/date/dist/JapaneseCalendar.mjs","../../node_modules/@internationalized/date/dist/BuddhistCalendar.mjs","../../node_modules/@internationalized/date/dist/TaiwanCalendar.mjs","../../node_modules/@internationalized/date/dist/PersianCalendar.mjs","../../node_modules/@internationalized/date/dist/IndianCalendar.mjs","../../node_modules/@internationalized/date/dist/IslamicCalendar.mjs","../../node_modules/@internationalized/date/dist/HebrewCalendar.mjs","../../node_modules/@internationalized/date/dist/EthiopicCalendar.mjs","../../node_modules/@internationalized/date/dist/createCalendar.mjs","../../node_modules/@internationalized/date/dist/DateFormatter.mjs","../../node_modules/@react-aria/i18n/dist/useDateFormatter.mjs","../../node_modules/@internationalized/number/dist/NumberFormatter.mjs","../../node_modules/@internationalized/number/dist/NumberParser.mjs","../../node_modules/@react-aria/i18n/dist/useCollator.mjs","../../node_modules/@react-aria/i18n/dist/useFilter.mjs","../../node_modules/@react-aria/overlays/dist/useOverlayPosition.mjs","../../node_modules/@react-aria/interactions/dist/utils.mjs","../../node_modules/@react-aria/interactions/dist/textSelection.mjs","../../node_modules/@react-aria/interactions/dist/context.mjs","../../node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js","../../node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js","../../node_modules/@swc/helpers/esm/_class_private_field_get.js","../../node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js","../../node_modules/@swc/helpers/esm/_class_private_field_set.js","../../node_modules/@react-aria/interactions/dist/usePress.mjs","../../node_modules/@react-aria/interactions/dist/useFocusVisible.mjs","../../node_modules/@react-aria/interactions/dist/focusSafely.mjs","../../node_modules/@react-aria/interactions/dist/useFocus.mjs","../../node_modules/@react-aria/interactions/dist/createEventHandler.mjs","../../node_modules/@react-aria/interactions/dist/useKeyboard.mjs","../../node_modules/@react-aria/interactions/dist/useFocusable.mjs","../../node_modules/@react-aria/interactions/dist/PressResponder.mjs","../../node_modules/@react-aria/interactions/dist/useFocusWithin.mjs","../../node_modules/@react-aria/interactions/dist/useHover.mjs","../../node_modules/@react-aria/interactions/dist/useInteractOutside.mjs","../../node_modules/@react-aria/interactions/dist/useLongPress.mjs","../../node_modules/@react-aria/focus/dist/FocusScope.mjs","../../node_modules/@react-aria/focus/dist/useFocusRing.mjs","../../node_modules/@react-aria/focus/dist/virtualFocus.mjs","../../node_modules/@react-aria/overlays/dist/useOverlay.mjs","../../node_modules/@react-aria/overlays/dist/useOverlayTrigger.mjs","../../node_modules/@react-aria/overlays/dist/usePreventScroll.mjs","../../node_modules/@react-aria/overlays/dist/PortalProvider.mjs","../../node_modules/@react-aria/overlays/dist/useModal.mjs","../../node_modules/@react-aria/overlays/dist/en-US.mjs","../../node_modules/@react-aria/overlays/dist/intlStrings.mjs","../../node_modules/@react-aria/visually-hidden/dist/VisuallyHidden.mjs","../../node_modules/@react-aria/overlays/dist/DismissButton.mjs","../../node_modules/@react-aria/overlays/dist/ariaHideOutside.mjs","../../node_modules/@react-aria/overlays/dist/usePopover.mjs","../../node_modules/@react-aria/overlays/dist/Overlay.mjs","../../node_modules/@react-aria/overlays/dist/useModalOverlay.mjs","../../node_modules/@react-aria/listbox/dist/utils.mjs","../../node_modules/@react-aria/label/dist/useLabel.mjs","../../node_modules/@react-aria/label/dist/useField.mjs","../../node_modules/@react-aria/selection/dist/utils.mjs","../../node_modules/@react-aria/selection/dist/useTypeSelect.mjs","../../node_modules/@react-aria/selection/dist/useSelectableCollection.mjs","../../node_modules/@react-aria/selection/dist/useSelectableItem.mjs","../../node_modules/@react-aria/selection/dist/DOMLayoutDelegate.mjs","../../node_modules/@react-aria/selection/dist/ListKeyboardDelegate.mjs","../../node_modules/@react-aria/selection/dist/useSelectableList.mjs","../../node_modules/@react-aria/listbox/dist/useListBox.mjs","../../node_modules/@react-stately/collections/dist/CollectionBuilder.mjs","../../node_modules/@react-stately/collections/dist/useCollection.mjs","../../node_modules/@react-stately/collections/dist/getChildNodes.mjs","../../node_modules/@react-stately/collections/dist/getItemCount.mjs","../../node_modules/@react-aria/listbox/dist/useOption.mjs","../../node_modules/@react-aria/listbox/dist/useListBoxSection.mjs","../../node_modules/@react-stately/form/dist/useFormValidationState.mjs","../../node_modules/@react-aria/menu/dist/en-US.mjs","../../node_modules/@react-aria/menu/dist/intlStrings.mjs","../../node_modules/@react-aria/menu/dist/useMenuTrigger.mjs","../../node_modules/@react-aria/menu/dist/utils.mjs","../../node_modules/@react-aria/menu/dist/useMenu.mjs","../../node_modules/@react-aria/menu/dist/useMenuItem.mjs","../../node_modules/@react-aria/menu/dist/useMenuSection.mjs","../../node_modules/@react-aria/form/dist/useFormValidation.mjs","../../node_modules/@react-aria/textfield/dist/useTextField.mjs","../../node_modules/@react-aria/searchfield/dist/en-US.mjs","../../node_modules/@react-aria/searchfield/dist/intlStrings.mjs","../../node_modules/@react-aria/searchfield/dist/useSearchField.mjs","../../node_modules/@react-aria/autocomplete/dist/en-US.mjs","../../node_modules/@react-aria/autocomplete/dist/intlStrings.mjs","../../node_modules/@react-aria/autocomplete/dist/useAutocomplete.mjs","../../node_modules/@react-stately/autocomplete/dist/useAutocompleteState.mjs","../../node_modules/react-aria-components/dist/Autocomplete.mjs","../../node_modules/@react-aria/collections/dist/BaseCollection.mjs","../../node_modules/@react-aria/collections/dist/Document.mjs","../../node_modules/@react-aria/collections/dist/useCachedChildren.mjs","../../node_modules/@react-aria/collections/dist/Hidden.mjs","../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../node_modules/use-sync-external-store/shim/index.js","../../node_modules/@react-aria/collections/dist/CollectionBuilder.mjs","../../node_modules/react-aria-components/dist/Collection.mjs","../../node_modules/@react-aria/button/dist/useButton.mjs","../../node_modules/@react-aria/spinbutton/dist/en-US.mjs","../../node_modules/@react-aria/spinbutton/dist/intlStrings.mjs","../../node_modules/@react-aria/spinbutton/dist/useSpinButton.mjs","../../node_modules/@react-aria/datepicker/dist/en-US.mjs","../../node_modules/@react-aria/datepicker/dist/intlStrings.mjs","../../node_modules/@react-aria/datepicker/dist/useDatePickerGroup.mjs","../../node_modules/@react-aria/datepicker/dist/useDateField.mjs","../../node_modules/@react-aria/datepicker/dist/useDisplayNames.mjs","../../node_modules/@react-aria/datepicker/dist/useDateSegment.mjs","../../node_modules/@react-aria/dialog/dist/useDialog.mjs","../../node_modules/@react-aria/select/dist/useSelect.mjs","../../node_modules/@react-aria/select/dist/HiddenSelect.mjs","../../node_modules/@react-aria/tabs/dist/utils.mjs","../../node_modules/@react-aria/tabs/dist/useTab.mjs","../../node_modules/@react-aria/tabs/dist/TabsKeyboardDelegate.mjs","../../node_modules/@react-aria/tabs/dist/useTabList.mjs","../../node_modules/@react-aria/tooltip/dist/useTooltip.mjs","../../node_modules/@react-aria/tooltip/dist/useTooltipTrigger.mjs","../../node_modules/react-aria-components/dist/Label.mjs","../../node_modules/react-aria-components/dist/ProgressBar.mjs","../../node_modules/react-aria-components/dist/Button.mjs","../../node_modules/react-aria-components/dist/Text.mjs","../../node_modules/@react-stately/list/dist/ListCollection.mjs","../../node_modules/@react-stately/selection/dist/Selection.mjs","../../node_modules/@react-stately/selection/dist/useMultipleSelectionState.mjs","../../node_modules/@react-stately/selection/dist/SelectionManager.mjs","../../node_modules/@react-stately/list/dist/useListState.mjs","../../node_modules/@react-stately/list/dist/useSingleSelectListState.mjs","../../node_modules/@react-stately/overlays/dist/useOverlayTriggerState.mjs","../../node_modules/@react-stately/datepicker/dist/en-US.mjs","../../node_modules/@react-stately/datepicker/dist/intlStrings.mjs","../../node_modules/@react-stately/datepicker/dist/utils.mjs","../../node_modules/@react-stately/datepicker/dist/placeholders.mjs","../../node_modules/@react-stately/datepicker/dist/useDateFieldState.mjs","../../node_modules/@react-stately/menu/dist/useMenuTriggerState.mjs","../../node_modules/@react-stately/searchfield/dist/useSearchFieldState.mjs","../../node_modules/@react-stately/select/dist/useSelectState.mjs","../../node_modules/@react-stately/tabs/dist/useTabListState.mjs","../../node_modules/@react-stately/tooltip/dist/useTooltipTriggerState.mjs","../../node_modules/@react-stately/tree/dist/TreeCollection.mjs","../../node_modules/@react-stately/tree/dist/useTreeState.mjs","../../node_modules/react-aria-components/dist/FieldError.mjs","../../node_modules/react-aria-components/dist/Form.mjs","../../node_modules/react-aria-components/dist/Group.mjs","../../node_modules/react-aria-components/dist/Input.mjs","../../node_modules/react-aria-components/dist/en-US.mjs","../../node_modules/react-aria-components/dist/intlStrings.mjs","../../node_modules/react-aria-components/dist/DragAndDrop.mjs","../../node_modules/react-aria-components/dist/Header.mjs","../../node_modules/react-aria-components/dist/SharedElementTransition.mjs","../../node_modules/react-aria-components/dist/SelectionIndicator.mjs","../../node_modules/react-aria-components/dist/Separator.mjs","../../node_modules/react-aria-components/dist/ListBox.mjs","../../node_modules/react-aria-components/dist/OverlayArrow.mjs","../../node_modules/react-aria-components/dist/Popover.mjs","../../node_modules/react-aria-components/dist/Keyboard.mjs","../../node_modules/react-aria-components/dist/Menu.mjs","../../node_modules/react-aria-components/dist/Dialog.mjs","../../node_modules/react-aria-components/dist/HiddenDateInput.mjs","../../node_modules/react-aria-components/dist/DateField.mjs","../../node_modules/react-aria-components/dist/Heading.mjs","../../node_modules/react-aria-components/dist/Modal.mjs","../../node_modules/react-aria-components/dist/SearchField.mjs","../../node_modules/react-aria-components/dist/Select.mjs","../../node_modules/react-aria-components/dist/Tabs.mjs","../../node_modules/react-aria-components/dist/Tooltip.mjs","../../packages/@ourworldindata/components/src/LabeledSwitch/LabeledSwitch.tsx","../../packages/@ourworldindata/components/src/Checkbox.tsx","../../packages/@ourworldindata/components/src/RadioButton.tsx","../../packages/@ourworldindata/components/src/closeButton/CloseButton.tsx","../../packages/@ourworldindata/components/src/OverlayHeader.tsx","../../packages/@ourworldindata/components/src/CodeSnippet/CodeSnippet.tsx","../../packages/@ourworldindata/components/src/IndicatorSources/IndicatorSources.tsx","../../packages/@ourworldindata/components/src/TextInput.tsx","../../node_modules/scheduler/cjs/scheduler.production.js","../../node_modules/scheduler/index.js","../../node_modules/react-dom/cjs/react-dom-client.production.js","../../node_modules/react-dom/client.js","../../packages/@ourworldindata/components/src/DataCitation/DataCitation.tsx","../../packages/@ourworldindata/components/src/Button/Button.tsx","../../packages/@ourworldindata/components/src/Halo/Halo.tsx","../../packages/@ourworldindata/components/src/BodyPortal/BodyPortal.tsx","../../packages/@ourworldindata/components/src/loadingIndicator/LoadingIndicator.tsx","../../packages/@ourworldindata/components/src/reactUtil.ts","../../packages/@ourworldindata/components/src/GrapherTabIcon.tsx","../../packages/@ourworldindata/components/src/GrapherTrendArrow.tsx","../../packages/@ourworldindata/grapher/src/schema/defaultGrapherConfig.ts","../../packages/@ourworldindata/grapher/src/core/GrapherConstants.ts","../../node_modules/mobx-react-lite/es/utils/assertEnvironment.js","../../node_modules/mobx-react-lite/es/utils/observerBatching.js","../../node_modules/mobx-react-lite/es/utils/printDebugValue.js","../../node_modules/mobx-react-lite/es/utils/UniversalFinalizationRegistry.js","../../node_modules/mobx-react-lite/es/utils/observerFinalizationRegistry.js","../../node_modules/mobx-react-lite/es/useObserver.js","../../node_modules/mobx-react-lite/es/observer.js","../../node_modules/mobx-react-lite/es/index.js","../../node_modules/mobx-react/dist/mobxreact.esm.js","../../packages/@ourworldindata/grapher/src/selection/SelectionArray.ts","../../packages/@ourworldindata/core-table/src/ErrorValues.ts","../../packages/@ourworldindata/core-table/src/OwidTableUtil.ts","../../packages/@ourworldindata/core-table/src/CoreTableColumns.ts","../../node_modules/papaparse/papaparse.min.js","../../packages/@ourworldindata/core-table/src/CoreTableUtils.ts","../../packages/@ourworldindata/core-table/src/Transforms.ts","../../packages/@ourworldindata/core-table/src/CoreTable.ts","../../packages/@ourworldindata/core-table/src/OwidTable.ts","../../packages/@ourworldindata/grapher/src/interaction/InteractionState.ts","../../packages/@ourworldindata/grapher/src/chart/ChartUtils.tsx","../../packages/@ourworldindata/grapher/src/fullScreen/FullScreen.tsx","../../packages/@ourworldindata/grapher/src/tooltip/TooltipProps.ts","../../packages/@ourworldindata/grapher/src/tooltip/TooltipContents.tsx","../../packages/@ourworldindata/grapher/src/tooltip/TooltipState.ts","../../packages/@ourworldindata/grapher/src/tooltip/Tooltip.tsx","../../packages/@ourworldindata/grapher/src/modal/Modal.tsx","../../node_modules/indefinite/dist/indefinite.js","../../node_modules/rematrix/dist/rematrix.es.js","../../node_modules/flip-toolkit/lib/index.es.js","../../node_modules/react-flip-toolkit/lib/index.es.js","../../packages/@ourworldindata/grapher/src/controls/SortIcon.tsx","../../packages/@ourworldindata/grapher/src/controls/Dropdown.tsx","../../packages/@ourworldindata/grapher/src/slideInDrawer/SlideInDrawer.tsx","../../packages/@ourworldindata/grapher/src/selection/MapSelectionArray.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapChartConstants.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapConfig.ts","../../packages/@ourworldindata/grapher/src/core/RegionGroups.ts","../../packages/@ourworldindata/grapher/src/controls/SearchField.tsx","../../packages/@ourworldindata/grapher/src/core/loadCatalogData.ts","../../packages/@ourworldindata/grapher/src/entitySelector/EntitySelector.tsx","../../packages/@ourworldindata/grapher/src/modal/EntitySelectorModal.tsx","../../packages/@ourworldindata/grapher/src/tabs/Tabs.tsx","../../packages/@ourworldindata/grapher/src/modal/DownloadIcons.tsx","../../packages/@ourworldindata/grapher/src/modal/DownloadModal.tsx","../../packages/@ourworldindata/grapher/src/modal/SourcesKeyDataTable.tsx","../../packages/@ourworldindata/grapher/src/modal/SourcesDescriptions.tsx","../../packages/@ourworldindata/grapher/src/tabs/TabsWithDropdown.tsx","../../packages/@ourworldindata/grapher/src/modal/SourcesModal.tsx","../../packages/@ourworldindata/grapher/src/controls/CommandPalette.tsx","../../packages/@ourworldindata/grapher/src/modal/EmbedModal.tsx","../../node_modules/mousetrap/mousetrap.js","../../packages/@ourworldindata/grapher/src/core/LegacyToOwidTable.ts","../../packages/@ourworldindata/grapher/src/sidePanel/SidePanel.tsx","../../packages/@ourworldindata/grapher/src/captionedChart/LogosSVG.tsx","../../packages/@ourworldindata/grapher/src/captionedChart/Logos.tsx","../../packages/@ourworldindata/grapher/src/header/Header.tsx","../../packages/@ourworldindata/grapher/src/controls/ShareMenu.tsx","../../packages/@ourworldindata/grapher/src/controls/ActionButtons.tsx","../../packages/@ourworldindata/grapher/src/footer/Footer.tsx","../../packages/@ourworldindata/grapher/src/timeline/TimelineController.ts","../../packages/@ourworldindata/grapher/src/timeline/TimelineComponent.tsx","../../packages/@ourworldindata/grapher/src/chart/ChartTabs.ts","../../packages/@ourworldindata/grapher/src/controls/ContentSwitchers.tsx","../../packages/@ourworldindata/grapher/src/controls/EntitySelectionToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/MapRegionDropdown.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/AxisScaleToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/AbsRelToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/ZoomToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/FacetStrategySelector.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/FacetYDomainToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/settings/NoDataAreaToggle.tsx","../../packages/@ourworldindata/grapher/src/controls/SettingsMenu.tsx","../../packages/@ourworldindata/grapher/src/controls/MapResetButton.tsx","../../packages/@ourworldindata/grapher/src/controls/DataTableFilterDropdown.tsx","../../packages/@ourworldindata/grapher/src/controls/DataTableSearchField.tsx","../../packages/@ourworldindata/grapher/src/controls/MapZoomToSelectionButton.tsx","../../packages/@ourworldindata/grapher/src/controls/MapZoomDropdown.tsx","../../packages/@ourworldindata/grapher/src/controls/controlsRow/ControlsRow.tsx","../../packages/@ourworldindata/grapher/src/noDataModal/NoDataModal.tsx","../../packages/@ourworldindata/grapher/src/dataTable/DataTableConstants.ts","../../packages/@ourworldindata/grapher/src/dataTable/DataTable.tsx","../../packages/@ourworldindata/grapher/src/interaction/Emphasis.ts","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartConstants.ts","../../packages/@ourworldindata/grapher/src/color/CategoricalColorAssigner.ts","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartHelpers.ts","../../packages/@ourworldindata/grapher/src/focus/FocusArray.ts","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartState.ts","../../packages/@ourworldindata/grapher/src/slopeCharts/SlopeChartState.ts","../../packages/@ourworldindata/grapher/src/barCharts/DiscreteBarChartState.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/AbstractStackedChartState.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedUtils.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedAreaChartState.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedBarChartState.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedDiscreteBarChartState.ts","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPlotChartConstants.ts","../../packages/@ourworldindata/grapher/src/comparisonLine/ComparisonLineHelpers.ts","../../packages/@ourworldindata/grapher/src/axis/Axis.ts","../../packages/@ourworldindata/grapher/src/axis/AxisConfig.ts","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterUtils.ts","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPlotChartState.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/MarimekkoChartConstants.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/MarimekkoChartState.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapTopology.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapHelpers.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapChartState.ts","../../packages/@ourworldindata/grapher/src/comparisonLine/ComparisonLineConstants.ts","../../packages/@ourworldindata/grapher/src/comparisonLine/VerticalComparisonLine.tsx","../../node_modules/fparser/dist/fparser.js","../../packages/@ourworldindata/grapher/src/comparisonLine/ComparisonLineGenerator.ts","../../packages/@ourworldindata/grapher/src/comparisonLine/CustomComparisonLine.tsx","../../packages/@ourworldindata/grapher/src/comparisonLine/ComparisonLine.tsx","../../packages/@ourworldindata/grapher/src/axis/AxisViews.tsx","../../node_modules/topojson-client/src/identity.js","../../node_modules/topojson-client/src/transform.js","../../node_modules/topojson-client/src/reverse.js","../../node_modules/topojson-client/src/feature.js","../../packages/@ourworldindata/grapher/src/mapCharts/d3-geo-projection.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapProjections.ts","../../packages/@ourworldindata/grapher/src/mapCharts/GeoFeatures.ts","../../packages/@ourworldindata/grapher/src/seriesLabel/RegionMap.tsx","../../packages/@ourworldindata/grapher/src/seriesLabel/RegionTooltipData.ts","../../packages/@ourworldindata/grapher/src/hooks.ts","../../packages/@ourworldindata/grapher/src/seriesLabel/RegionTooltip.tsx","../../packages/@ourworldindata/grapher/src/seriesLabel/SeriesLabel.tsx","../../packages/@ourworldindata/grapher/src/verticalLabels/VerticalLabelsConstants.ts","../../packages/@ourworldindata/grapher/src/verticalLabels/VerticalLabelsHelpers.ts","../../packages/@ourworldindata/grapher/src/verticalLabels/VerticalLabels.tsx","../../packages/@ourworldindata/grapher/src/seriesLabel/SeriesLabelState.ts","../../packages/@ourworldindata/grapher/src/verticalLabels/VerticalLabelsFilterAlgorithms.ts","../../packages/@ourworldindata/grapher/src/verticalLabels/VerticalLabelsState.ts","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartTooltip.tsx","../../packages/@ourworldindata/grapher/src/legend/HorizontalColorLegends.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/MultiColorPolyline.tsx","../../packages/@ourworldindata/grapher/src/lineCharts/Lines.tsx","../../packages/@ourworldindata/grapher/src/lineCharts/LineChart.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/NoDataSection.tsx","../../packages/@ourworldindata/grapher/src/slopeCharts/SlopeChartHelpers.ts","../../packages/@ourworldindata/grapher/src/slopeCharts/Slope.tsx","../../packages/@ourworldindata/grapher/src/slopeCharts/MarkX.tsx","../../packages/@ourworldindata/grapher/src/slopeCharts/SlopeChart.tsx","../../packages/@ourworldindata/grapher/src/barCharts/DiscreteBarChartConstants.ts","../../packages/@ourworldindata/grapher/src/barCharts/DiscreteBarChartHelpers.ts","../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../node_modules/@babel/runtime/helpers/esm/createClass.js","../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/esm/inherits.js","../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../node_modules/kapellmeister/node_modules/d3-timer/src/timer.js","../../node_modules/kapellmeister/node_modules/d3-timer/src/timeout.js","../../node_modules/kapellmeister/node_modules/d3-timer/src/interval.js","../../node_modules/kapellmeister/es/utils.js","../../node_modules/kapellmeister/es/Events.js","../../node_modules/kapellmeister/es/BaseNode.js","../../node_modules/react-move/es/core/mergeKeys.js","../../node_modules/react-move/es/core/types.js","../../node_modules/react-move/es/utils.js","../../node_modules/react-move/es/NodeGroup/index.js","../../node_modules/react-move/es/Animate/index.js","../../packages/@ourworldindata/grapher/src/barCharts/DiscreteBarChart.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedConstants.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedAreas.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedAreaChart.tsx","../../packages/@ourworldindata/grapher/src/legend/VerticalColorLegend.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedBars.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedBarChart.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedDiscreteBarChartConstants.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedDiscreteBarRow.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedDiscreteBarChart.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/Triangle.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ConnectedScatterLegend.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPoints.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPointsWithLabels.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterSizeLegend.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPlotTooltip.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPlotChart.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/MarimekkoBarsForOneEntity.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/MarimekkoBars.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/MarimekkoChartHelpers.ts","../../packages/@ourworldindata/grapher/src/stackedCharts/MarimekkoChart.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/MapSparkline.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/MapTooltip.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/d3-bboxCollide.js","../../node_modules/point-in-polygon-hao/dist/esm/index.js","../../node_modules/@turf/helpers/dist/esm/index.js","../../node_modules/@turf/invariant/dist/esm/index.js","../../node_modules/@turf/boolean-point-in-polygon/dist/esm/index.js","../../node_modules/sweepline-intersections/dist/sweeplineIntersections.esm.js","../../node_modules/@turf/line-intersect/dist/esm/index.js","../../node_modules/@turf/meta/dist/esm/index.js","../../node_modules/@turf/polygon-to-line/dist/esm/index.js","../../node_modules/@turf/boolean-disjoint/dist/esm/index.js","../../node_modules/@turf/boolean-intersects/dist/esm/index.js","../../packages/@ourworldindata/grapher/src/mapCharts/MapAnnotationPlacements.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapAnnotations.ts","../../packages/@ourworldindata/grapher/src/mapCharts/MapComponents.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/ChoroplethMap.tsx","../../node_modules/versor/src/index.js","../../node_modules/simple-statistics/dist/simple-statistics.mjs","../../node_modules/@turf/bbox/dist/esm/index.js","../../node_modules/@turf/center/dist/esm/index.js","../../packages/@ourworldindata/grapher/src/mapCharts/GlobeController.ts","../../packages/@ourworldindata/grapher/src/mapCharts/ChoroplethGlobe.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/MapChart.tsx","../../packages/@ourworldindata/grapher/src/verticalLabels/SimpleVerticalLabelsState.ts","../../packages/@ourworldindata/grapher/src/verticalLabels/SimpleVerticalLabels.tsx","../../packages/@ourworldindata/grapher/src/lineCharts/LineChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/slopeCharts/SlopeChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/barCharts/DiscreteBarChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedAreaChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedBarChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/StackedDiscreteBarChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/scatterCharts/ScatterPlotChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/MarimekkoInternalLabels.tsx","../../packages/@ourworldindata/grapher/src/stackedCharts/MarimekkoChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/mapCharts/MapChartThumbnail.tsx","../../packages/@ourworldindata/grapher/src/chart/ChartTypeMap.tsx","../../packages/@ourworldindata/grapher/src/facet/FacetChartUtils.ts","../../packages/@ourworldindata/grapher/src/facet/FacetChart.tsx","../../packages/@ourworldindata/grapher/src/facet/FacetMap.tsx","../../packages/@ourworldindata/grapher/src/chart/ChartAreaContent.tsx","../../packages/@ourworldindata/grapher/src/chart/StaticChartWrapper.tsx","../../packages/@ourworldindata/grapher/src/captionedChart/CaptionedChart.tsx","../../packages/@ourworldindata/grapher/src/chart/Chart.tsx","../../packages/@ourworldindata/grapher/src/core/Grapher.tsx","../../node_modules/url-join/lib/url-join.js","../../packages/@ourworldindata/grapher/src/core/loadVariable.ts","../../packages/@ourworldindata/grapher/src/core/loadGrapherTableHelpers.ts","../../packages/@ourworldindata/grapher/src/core/EntityCodes.ts","../../packages/@ourworldindata/grapher/src/core/EntityUrlBuilder.ts","../../packages/@ourworldindata/grapher/src/core/GrapherUrlMigrations.ts","../../packages/@ourworldindata/grapher/src/schema/migrations/helpers.ts","../../packages/@ourworldindata/grapher/src/schema/migrations/migrations.ts","../../packages/@ourworldindata/grapher/src/schema/migrations/migrate.ts","../../packages/@ourworldindata/grapher/src/captionedChart/StaticChartRasterizer.tsx","../../packages/@ourworldindata/grapher/src/chart/DimensionSlot.ts","../../packages/@ourworldindata/grapher/src/core/GrapherAnalytics.ts","../../packages/@ourworldindata/grapher/src/core/GrapherUrl.ts","../../packages/@ourworldindata/grapher/src/core/PeerCountrySelection.ts","../../packages/@ourworldindata/grapher/src/core/GrapherQueryParamParser.ts","../../packages/@ourworldindata/grapher/src/core/relatedQuestion.ts","../../packages/@ourworldindata/grapher/src/core/sourcesLine.ts","../../packages/@ourworldindata/grapher/src/core/GrapherState.tsx","../../packages/@ourworldindata/grapher/src/chart/guidedChartUtils.ts","../../packages/@ourworldindata/grapher/src/core/FetchingGrapher.tsx","../../packages/@ourworldindata/grapher/src/controls/VerticalScrollContainer.tsx","../../packages/@ourworldindata/grapher/src/controls/entityPicker/EntityPicker.tsx","../../packages/@ourworldindata/grapher/src/slideshowController/SlideShowController.tsx","../../node_modules/@sentry/react/build/esm/error.js","../../node_modules/@sentry/react/build/esm/debug-build.js","../../node_modules/@sentry/react/build/esm/errorboundary.js","../../packages/@ourworldindata/grapher/src/core/GrapherUseHelpers.tsx","../../packages/@ourworldindata/explorer/src/ExplorerConstants.ts","../../packages/@ourworldindata/explorer/src/gridLang/GridLangConstants.ts","../../packages/@ourworldindata/explorer/src/ExplorerControls.tsx","../../packages/@ourworldindata/explorer/src/gridLang/GrammarUtils.ts","../../packages/@ourworldindata/explorer/src/gridLang/GridCell.ts","../../packages/@ourworldindata/explorer/src/gridLang/GridProgram.ts","../../packages/@ourworldindata/explorer/src/ColumnGrammar.ts","../../packages/@ourworldindata/explorer/src/GrapherGrammar.ts","../../packages/@ourworldindata/explorer/src/ExplorerDecisionMatrix.ts","../../packages/@ourworldindata/explorer/src/ExplorerGrammar.ts","../../packages/@ourworldindata/explorer/src/ExplorerProgram.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/LegacyCovidUrlMigration.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/ExplorerUrlMigrationUtils.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/CO2UrlMigration.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/EnergyUrlMigration.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/CovidUrlMigration.ts","../../packages/@ourworldindata/explorer/src/urlMigrations/ExplorerUrlMigrations.ts","../../packages/@ourworldindata/explorer/src/Explorer.tsx","../../packages/@ourworldindata/explorer/src/ExplorerUtils.ts","../../site/search/searchClient.ts","../../site/search/searchUtils.tsx","../../site/SiteAnalytics.ts","../../site/hacks.ts","../../node_modules/@fortawesome/free-brands-svg-icons/index.mjs","../../site/SiteConstants.ts","../../site/blocks/GalleryArrow.tsx","../../site/GrapherImage.tsx","../../site/blocks/AllChartsListItem.tsx","../../site/multiDim/api.ts","../../node_modules/lodash.debounce/index.js","../../node_modules/usehooks-ts/dist/index.js","../../site/multiDim/multiDimSettings.ts","../../site/multiDim/DimensionDropdown.tsx","../../site/multiDim/MultiDimDropdowns.tsx","../../site/multiDim/MultiDimEmbedSettingsPanel.tsx","../../site/multiDim/hooks.ts","../../site/multiDim/MultiDim.tsx","../../site/multiembedder/MultiEmbedder.tsx","../../site/hooks.ts","../../site/GrapherFigureView.tsx","../../site/GrapherWithFallback.tsx","../../site/gdocs/DocumentContext.ts","../../site/blocks/RelatedCharts.tsx","../../node_modules/@tanstack/query-core/build/modern/subscribable.js","../../node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../../node_modules/@tanstack/query-core/build/modern/utils.js","../../node_modules/@tanstack/query-core/build/modern/focusManager.js","../../node_modules/@tanstack/query-core/build/modern/thenable.js","../../node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../node_modules/@tanstack/query-core/build/modern/retryer.js","../../node_modules/@tanstack/query-core/build/modern/removable.js","../../node_modules/@tanstack/query-core/build/modern/query.js","../../node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../node_modules/@tanstack/query-core/build/modern/mutation.js","../../node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../node_modules/@tanstack/query-core/build/modern/queryCache.js","../../node_modules/@tanstack/query-core/build/modern/queryClient.js","../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../node_modules/@tanstack/react-query/build/modern/suspense.js","../../node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../node_modules/@tanstack/react-query/build/modern/useQuery.js","../../site/search/SearchChartHitDataDisplay.tsx","../../node_modules/@swc/helpers/cjs/_define_property.cjs","../../node_modules/@swc/helpers/cjs/_object_spread.cjs","../../node_modules/@swc/helpers/cjs/_object_spread_props.cjs","../../node_modules/@swc/helpers/cjs/_object_without_properties_loose.cjs","../../node_modules/@swc/helpers/cjs/_object_without_properties.cjs","../../node_modules/instantsearch.js/es/lib/utils/getPropertyByPath.js","../../node_modules/instantsearch.js/es/lib/utils/escape-html.js","../../node_modules/instantsearch.js/es/lib/utils/escape-highlight.js","../../node_modules/instantsearch.js/es/lib/utils/getHighlightedParts.js","../../node_modules/instantsearch-ui-components/dist/es/lib/cx.js","../../node_modules/instantsearch-ui-components/dist/es/components/Highlight.js","../../node_modules/react-instantsearch/dist/es/ui/InternalHighlight.js","../../node_modules/react-instantsearch/dist/es/ui/Highlight.js","../../node_modules/react-instantsearch/dist/es/widgets/Highlight.js","../../site/search/SearchChartHitHeader.tsx","../../site/search/queries.ts","../../site/search/SearchChartHitRichDataTypes.ts","../../site/search/SearchChartHitRichDataHelpers.ts","../../site/search/SearchChartHitSmallHelpers.ts","../../site/search/SearchChartHitSmall.tsx","../../site/search/SearchChartHitDataTable.tsx","../../site/search/SearchChartHitCaptionedLink.tsx","../../site/search/SearchChartHitCaptionedTable.tsx","../../site/search/SearchChartHitThumbnail.tsx","../../site/search/SearchChartHitCaptionedThumbnail.tsx","../../site/search/SearchChartHitRichDataFallback.tsx","../../site/search/SearchChartHitRichData.tsx","../../site/search/SearchChartHitComponent.tsx","../../node_modules/@remix-run/router/dist/router.js","../../node_modules/react-router-dom-v5-compat/node_modules/react-router/dist/index.js","../../node_modules/react-router-dom-v5-compat/dist/index.js","../../site/search/searchState.ts","../../node_modules/@algolia/client-common/dist/common.js","../../node_modules/@algolia/requester-browser-xhr/dist/requester.xhr.js","../../node_modules/algoliasearch/dist/lite/builds/browser.js","../../site/search/searchClients.ts","../../site/search/SearchResultHeaderSkeleton.tsx","../../site/search/SearchDataTopicsResultsSkeleton.tsx","../../site/search/SearchDataResultsSkeleton.tsx","../../site/FeaturedMetrics.tsx","../../site/blocks/StickyNav.tsx","../../site/KeyDataTable.tsx","../../site/AboutThisData.tsx","../../site/gdocs/AttachmentsContext.ts","../../site/gdocs/utils.ts","../../site/gdocs/DebugContext.ts","../../site/gdocs/components/BlockErrorBoundary.tsx","../../node_modules/react-zoom-pan-pinch/dist/index.esm.js","../../site/Lightbox.tsx","../../site/gdocs/components/FloatingDownloadButton.tsx","../../site/gdocs/components/Image.tsx","../../site/DataPageResearchAndWriting.tsx","../../site/gdocs/components/Callout.tsx","../../site/gdocs/components/ChartPreview.tsx","../../site/gdocs/components/LinkedA.tsx","../../site/gdocs/components/SpanElement.tsx","../../site/gdocs/components/SpanElements.tsx","../../site/MultiDimEmbed.tsx","../../site/gdocs/components/Chart.tsx","../../site/gdocs/components/ChartStory.tsx","../../site/gdocs/components/Donors.tsx","../../site/gdocs/components/Paragraph.tsx","../../site/gdocs/components/layout.ts","../../site/gdocs/components/PullQuote.tsx","../../site/AriaAnnouncerUtils.ts","../../site/gdocs/components/GuidedChart.tsx","../../site/gdocs/components/Thumbnail.tsx","../../site/gdocs/components/HybridLinkList.tsx","../../site/gdocs/components/Recirc.tsx","../../site/gdocs/components/SubscribeBanner.tsx","../../site/gdocs/components/List.tsx","../../site/gdocs/components/NumberedList.tsx","../../site/gdocs/components/SDGGrid.tsx","../../site/gdocs/components/People.tsx","../../site/gdocs/components/TableOfContents.tsx","../../site/gdocs/components/MissingData.tsx","../../site/gdocs/components/AdditionalCharts.tsx","../../site/gdocs/components/ProminentLink.tsx","../../site/blocks/ExpandableParagraph.tsx","../../site/gdocs/components/TopicPageIntro.tsx","../../node_modules/react-horizontal-scrolling-menu/dist/index.mjs","../../site/gdocs/components/NarrativeChart.tsx","../../site/gdocs/components/KeyInsights.tsx","../../site/gdocs/components/ResearchAndWriting.tsx","../../site/gdocs/components/AllCharts.tsx","../../site/gdocs/components/Video.tsx","../../site/gdocs/components/StaticViz.tsx","../../site/gdocs/components/Table.tsx","../../site/gdocs/components/ExplorerTiles.tsx","../../site/gdocs/components/KeyIndicator.tsx","../../site/gdocs/components/KeyIndicatorCollection.tsx","../../site/gdocs/components/PillRow.tsx","../../site/gdocs/components/NewsletterIcon.tsx","../../site/NewsletterSubscription.tsx","../../site/gdocs/components/AnnouncementsIcon.tsx","../../site/OwidSocials.tsx","../../site/newsletter.ts","../../site/gdocs/components/HomepageIntro.tsx","../../site/search/SearchContext.tsx","../../site/search/searchHooks.ts","../../node_modules/@algolia/autocomplete-shared/dist/esm/createRef.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/debounce.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/flatten.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/generateAutocompleteId.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/getAttributeValueByPath.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/getItemsCount.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/isEqual.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/noop.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/safelyRunOnBrowser.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/version.js","../../node_modules/@algolia/autocomplete-shared/dist/esm/userAgents.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createClickedEvent.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isModernInsightsClient.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createSearchInsightsApi.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createViewedEvents.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isAlgoliaInsightsHit.js","../../node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createAlgoliaInsightsPlugin.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromise.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromiseList.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/createConcurrentSafePromise.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNextActiveItemId.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNormalizedSources.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getPluginSubmitPromise.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getActiveItem.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getAutocompleteElementId.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isOrContainsNode.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/isSamsung.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/mapToAlgoliaResponse.js","../../node_modules/@algolia/autocomplete-core/dist/esm/utils/getNativeEvent.js","../../node_modules/@algolia/autocomplete-core/dist/esm/createStore.js","../../node_modules/@algolia/autocomplete-core/dist/esm/getAutocompleteSetters.js","../../node_modules/@algolia/autocomplete-core/dist/esm/getDefaultProps.js","../../node_modules/@algolia/autocomplete-core/dist/esm/reshape.js","../../node_modules/@algolia/autocomplete-core/dist/esm/resolve.js","../../node_modules/@algolia/autocomplete-core/dist/esm/onInput.js","../../node_modules/@algolia/autocomplete-core/dist/esm/onKeyDown.js","../../node_modules/@algolia/autocomplete-core/dist/esm/getPropGetters.js","../../node_modules/@algolia/autocomplete-core/dist/esm/metadata.js","../../node_modules/@algolia/autocomplete-core/dist/esm/getCompletion.js","../../node_modules/@algolia/autocomplete-core/dist/esm/stateReducer.js","../../node_modules/@algolia/autocomplete-core/dist/esm/createAutocomplete.js","../../node_modules/htm/dist/htm.module.js","../../node_modules/@algolia/autocomplete-js/dist/esm/elements/ClearIcon.js","../../node_modules/@algolia/autocomplete-js/dist/esm/utils/getHTMLElement.js","../../node_modules/@algolia/autocomplete-js/dist/esm/utils/mergeClassNames.js","../../node_modules/@algolia/autocomplete-js/dist/esm/utils/mergeDeep.js","../../node_modules/@algolia/autocomplete-js/dist/esm/utils/pickBy.js","../../node_modules/@algolia/autocomplete-js/dist/esm/utils/setProperties.js","../../node_modules/@algolia/autocomplete-js/dist/esm/getCreateDomElement.js","../../node_modules/@algolia/autocomplete-js/dist/esm/elements/Input.js","../../node_modules/@algolia/autocomplete-js/dist/esm/elements/LoadingIcon.js","../../node_modules/@algolia/autocomplete-js/dist/esm/elements/SearchIcon.js","../../node_modules/@algolia/autocomplete-js/dist/esm/createAutocompleteDom.js","../../node_modules/@algolia/autocomplete-js/dist/esm/createEffectWrapper.js","../../node_modules/@algolia/autocomplete-js/dist/esm/createReactiveWrapper.js","../../node_modules/preact/dist/preact.module.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/constants/index.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/parseAttribute.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitHighlight.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/isPartHighlighted.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/reverseHighlightedParts.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitReverseHighlight.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitSnippet.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/highlight/parseAlgoliaHitReverseSnippet.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/requester/createRequester.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/utils/getAppIdAndApiKey.js","../../node_modules/@algolia/autocomplete-preset-algolia/dist/esm/search/fetchAlgoliaResults.js","../../node_modules/@algolia/autocomplete-js/dist/esm/components/Highlight.js","../../node_modules/@algolia/autocomplete-js/dist/esm/components/ReverseHighlight.js","../../node_modules/@algolia/autocomplete-js/dist/esm/components/ReverseSnippet.js","../../node_modules/@algolia/autocomplete-js/dist/esm/components/Snippet.js","../../node_modules/@algolia/autocomplete-js/dist/esm/getDefaultOptions.js","../../node_modules/@algolia/autocomplete-js/dist/esm/getPanelPlacementStyle.js","../../node_modules/@algolia/autocomplete-js/dist/esm/render.js","../../node_modules/@algolia/autocomplete-js/dist/esm/userAgents.js","../../node_modules/@algolia/autocomplete-js/dist/esm/autocomplete.js","../../node_modules/@algolia/autocomplete-js/dist/esm/requesters/createAlgoliaRequester.js","../../node_modules/@algolia/autocomplete-js/dist/esm/requesters/getAlgoliaResults.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/addHighlightedAttribute.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/constants.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/getLocalStorage.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createLocalStorage.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createStorageApi.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/getTemplates.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createRecentSearchesPlugin.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/search.js","../../node_modules/@algolia/autocomplete-plugin-recent-searches/dist/esm/createLocalStorageRecentSearchesPlugin.js","../../site/search/synonymUtils.ts","../../site/search/SearchFilterPill.tsx","../../site/search/Autocomplete.tsx","../../site/gdocs/components/HomepageSearch.tsx","../../node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js","../../node_modules/embla-carousel/esm/embla-carousel.esm.js","../../node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js","../../node_modules/embla-carousel-class-names/esm/embla-carousel-class-names.esm.js","../../site/gdocs/components/DataInsightDateline.tsx","../../site/gdocs/components/LatestDataInsights.tsx","../../site/gdocs/components/LatestDataInsightsBlock.tsx","../../site/gdocs/components/Socials.tsx","../../site/gdocs/components/Person.tsx","../../site/bespokeComponentRegistry.ts","../../bespoke/shared/bespokeComponentShadowDom.ts","../../site/gdocs/components/BespokeComponent.tsx","../../site/gdocs/components/Expander.tsx","../../site/gdocs/components/ResourcePanel.tsx","../../site/gdocs/components/Cta.tsx","../../site/search/SearchDataInsightsResultsSkeleton.tsx","../../site/search/SearchDataInsightHit.tsx","../../site/FeaturedDataInsights.tsx","../../site/gdocs/components/BlockQueryClientProvider.tsx","../../site/gdocs/components/ExploreDataSection.tsx","../../site/gdocs/components/LTPTableOfContents.tsx","../../site/gdocs/components/DataCallout.tsx","../../node_modules/@fortawesome/react-fontawesome/index.js","../../site/gdocs/components/CountryProfileSelector.tsx","../../site/gdocs/components/ArticleBlock.tsx","../../site/gdocs/components/gdocComponentUtils.ts","../../site/gdocs/components/ArticleBlocks.tsx","../../site/MetadataSection.tsx","../../site/TopicTags.tsx","../../site/dataPage.ts","../../site/DataPageV2Content.tsx","../../site/Footnote.tsx","../../site/gdocs/components/Footnotes.tsx","../../site/Breadcrumb/Breadcrumb.tsx","../../site/gdocs/components/LinkedAuthor.tsx","../../site/gdocs/components/Byline.tsx","../../site/SiteLogos.tsx","../../site/archive/queries.ts","../../site/archive/versions.ts","../../site/archive/ArchiveNavigation.tsx","../../site/archive/VersionsDrawer.tsx","../../site/gdocs/components/OwidGdocHeader.tsx","../../site/TableOfContents.tsx","../../site/gdocs/pages/GdocPost.tsx","../../site/gdocs/pages/DataInsight.tsx","../../site/gdocs/pages/Fragment.tsx","../../site/gdocs/pages/Homepage.tsx","../../site/gdocs/pages/Author.tsx","../../site/gdocs/pages/AboutPage.tsx","../../site/gdocs/pages/Announcement.tsx","../../site/gdocs/pages/Profile.tsx","../../site/gdocs/OwidGdoc.tsx","../../site/Feedback.tsx","../../site/detailsOnDemand.tsx","../../site/collections/DynamicCollection.tsx","../../site/search/SearchAutocompleteContext.tsx","../../site/search/SearchInput.tsx","../../site/search/SearchCountrySelector.tsx","../../site/search/SearchResultTypeToggle.tsx","../../site/gdocs/DebugProvider.tsx","../../site/AriaAnnouncerContext.tsx","../../site/AriaAnnouncer.tsx","../../site/multiDim/MultiDimDataPageSettingsPanel.tsx","../../site/multiDim/MultiDimDataPageContent.tsx","../../site/SiteNavigationTopic.tsx","../../site/SiteNavigationTopics.tsx","../../site/SiteAbout.tsx","../../site/SiteResources.tsx","../../site/SiteSearchNavigation.tsx","../../site/SiteNavigationToggle.tsx","../../site/SiteMobileArea.tsx","../../site/SiteMobileMenu.tsx","../../site/SiteNavigation.tsx","../../site/SiteHeader.tsx","../../node_modules/uuidv7/dist/index.js","../../site/gdocs/components/UserSurvey.tsx","../../site/runSiteFooterScripts.tsx","../../site/owid-archive.entry.ts"],"sourcesContent":["export default {}","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n  const obj = {}\n\n  // Convert buffer to string\n  let lines = src.toString()\n\n  // Convert line breaks to same format\n  lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n  let match\n  while ((match = LINE.exec(lines)) != null) {\n    const key = match[1]\n\n    // Default undefined or null to empty string\n    let value = (match[2] || '')\n\n    // Remove whitespace\n    value = value.trim()\n\n    // Check if double quoted\n    const maybeQuote = value[0]\n\n    // Remove surrounding quotes\n    value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n    // Expand newlines if double quoted\n    if (maybeQuote === '\"') {\n      value = value.replace(/\\\\n/g, '\\n')\n      value = value.replace(/\\\\r/g, '\\r')\n    }\n\n    // Add to object\n    obj[key] = value\n  }\n\n  return obj\n}\n\nfunction _parseVault (options) {\n  options = options || {}\n\n  const vaultPath = _vaultPath(options)\n  options.path = vaultPath // parse .env.vault\n  const result = DotenvModule.configDotenv(options)\n  if (!result.parsed) {\n    const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n    err.code = 'MISSING_DATA'\n    throw err\n  }\n\n  // handle scenario for comma separated keys - for use with key rotation\n  // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n  const keys = _dotenvKey(options).split(',')\n  const length = keys.length\n\n  let decrypted\n  for (let i = 0; i < length; i++) {\n    try {\n      // Get full key\n      const key = keys[i].trim()\n\n      // Get instructions for decrypt\n      const attrs = _instructions(result, key)\n\n      // Decrypt\n      decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n      break\n    } catch (error) {\n      // last key\n      if (i + 1 >= length) {\n        throw error\n      }\n      // try next key\n    }\n  }\n\n  // Parse decrypted .env string\n  return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n  console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n  console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n  console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n  // prioritize developer directly setting options.DOTENV_KEY\n  if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n    return options.DOTENV_KEY\n  }\n\n  // secondary infra already contains a DOTENV_KEY environment variable\n  if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n    return process.env.DOTENV_KEY\n  }\n\n  // fallback to empty string\n  return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n  // Parse DOTENV_KEY. Format is a URI\n  let uri\n  try {\n    uri = new URL(dotenvKey)\n  } catch (error) {\n    if (error.code === 'ERR_INVALID_URL') {\n      const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    }\n\n    throw error\n  }\n\n  // Get decrypt key\n  const key = uri.password\n  if (!key) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get environment\n  const environment = uri.searchParams.get('environment')\n  if (!environment) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get ciphertext payload\n  const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n  const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n  if (!ciphertext) {\n    const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n    err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n    throw err\n  }\n\n  return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n  let possibleVaultPath = null\n\n  if (options && options.path && options.path.length > 0) {\n    if (Array.isArray(options.path)) {\n      for (const filepath of options.path) {\n        if (fs.existsSync(filepath)) {\n          possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n        }\n      }\n    } else {\n      possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n    }\n  } else {\n    possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n  }\n\n  if (fs.existsSync(possibleVaultPath)) {\n    return possibleVaultPath\n  }\n\n  return null\n}\n\nfunction _resolveHome (envPath) {\n  return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n  const debug = Boolean(options && options.debug)\n  const quiet = options && 'quiet' in options ? options.quiet : true\n\n  if (debug || !quiet) {\n    _log('Loading env from encrypted .env.vault')\n  }\n\n  const parsed = DotenvModule._parseVault(options)\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsed, options)\n\n  return { parsed }\n}\n\nfunction configDotenv (options) {\n  const dotenvPath = path.resolve(process.cwd(), '.env')\n  let encoding = 'utf8'\n  const debug = Boolean(options && options.debug)\n  const quiet = options && 'quiet' in options ? options.quiet : true\n\n  if (options && options.encoding) {\n    encoding = options.encoding\n  } else {\n    if (debug) {\n      _debug('No encoding is specified. UTF-8 is used by default')\n    }\n  }\n\n  let optionPaths = [dotenvPath] // default, look for .env\n  if (options && options.path) {\n    if (!Array.isArray(options.path)) {\n      optionPaths = [_resolveHome(options.path)]\n    } else {\n      optionPaths = [] // reset default\n      for (const filepath of options.path) {\n        optionPaths.push(_resolveHome(filepath))\n      }\n    }\n  }\n\n  // Build the parsed data in a temporary object (because we need to return it).  Once we have the final\n  // parsed data, we will combine it with process.env (or options.processEnv if provided).\n  let lastError\n  const parsedAll = {}\n  for (const path of optionPaths) {\n    try {\n      // Specifying an encoding returns a string instead of a buffer\n      const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n      DotenvModule.populate(parsedAll, parsed, options)\n    } catch (e) {\n      if (debug) {\n        _debug(`Failed to load ${path} ${e.message}`)\n      }\n      lastError = e\n    }\n  }\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsedAll, options)\n\n  if (debug || !quiet) {\n    const keysCount = Object.keys(parsedAll).length\n    const shortPaths = []\n    for (const filePath of optionPaths) {\n      try {\n        const relative = path.relative(process.cwd(), filePath)\n        shortPaths.push(relative)\n      } catch (e) {\n        if (debug) {\n          _debug(`Failed to load ${filePath} ${e.message}`)\n        }\n        lastError = e\n      }\n    }\n\n    _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n  }\n\n  if (lastError) {\n    return { parsed: parsedAll, error: lastError }\n  } else {\n    return { parsed: parsedAll }\n  }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n  // fallback to original dotenv if DOTENV_KEY is not set\n  if (_dotenvKey(options).length === 0) {\n    return DotenvModule.configDotenv(options)\n  }\n\n  const vaultPath = _vaultPath(options)\n\n  // dotenvKey exists but .env.vault file does not exist\n  if (!vaultPath) {\n    _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n    return DotenvModule.configDotenv(options)\n  }\n\n  return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n  const key = Buffer.from(keyStr.slice(-64), 'hex')\n  let ciphertext = Buffer.from(encrypted, 'base64')\n\n  const nonce = ciphertext.subarray(0, 12)\n  const authTag = ciphertext.subarray(-16)\n  ciphertext = ciphertext.subarray(12, -16)\n\n  try {\n    const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n    aesgcm.setAuthTag(authTag)\n    return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n  } catch (error) {\n    const isRange = error instanceof RangeError\n    const invalidKeyLength = error.message === 'Invalid key length'\n    const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n    if (isRange || invalidKeyLength) {\n      const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    } else if (decryptionFailed) {\n      const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n      err.code = 'DECRYPTION_FAILED'\n      throw err\n    } else {\n      throw error\n    }\n  }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n  const debug = Boolean(options && options.debug)\n  const override = Boolean(options && options.override)\n\n  if (typeof parsed !== 'object') {\n    const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n    err.code = 'OBJECT_REQUIRED'\n    throw err\n  }\n\n  // Set process.env\n  for (const key of Object.keys(parsed)) {\n    if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n      if (override === true) {\n        processEnv[key] = parsed[key]\n      }\n\n      if (debug) {\n        if (override === true) {\n          _debug(`\"${key}\" is already defined and WAS overwritten`)\n        } else {\n          _debug(`\"${key}\" is already defined and was NOT overwritten`)\n        }\n      }\n    } else {\n      processEnv[key] = parsed[key]\n    }\n  }\n}\n\nconst DotenvModule = {\n  configDotenv,\n  _configVault,\n  _parseVault,\n  config,\n  decrypt,\n  parse,\n  populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","import path from \"path\"\nimport fs from \"fs\"\n\n/**\n * With our code residing either in some src folder or in the `itsJustJavascript` folder, it's not\n * always straightforward to know where to find a config file like `.env`.\n * Here, we just traverse the directory tree upwards until we find a `package.json` file, which\n * should indicate that we have found the root directory of the `owid-grapher` repo.\n */\nexport default function findProjectBaseDir(from: string): string | undefined {\n    if (!fs.existsSync) return undefined // if fs.existsSync doesn't exist, we're probably running in the browser\n\n    let dir = path.dirname(from)\n\n    while (dir.length) {\n        if (fs.existsSync(path.resolve(dir, \"package.json\"))) return dir\n\n        const parentDir = path.resolve(dir, \"..\")\n        // break if we have reached the file system root\n        if (parentDir === dir) break\n        else dir = parentDir\n    }\n\n    return undefined\n}\n","import dotenv from \"dotenv\"\nimport findBaseDir from \"./findBaseDir.js\"\n\nif (typeof __dirname !== \"undefined\") {\n    // only run this code in node, not in the browser.\n    // in the browser, process.env is already populated by vite.\n    const baseDir = findBaseDir(__dirname)\n    if (!baseDir) throw new Error(\"could not locate base package.json\")\n\n    // If a PRIMARY_ENV_FILE is specified, load its variables first, and then load the default .env file\n    const additionalEnvFile = process.env.PRIMARY_ENV_FILE || undefined\n    let dotenvPath: string[]\n    if (additionalEnvFile) {\n        dotenvPath = [`${baseDir}/${additionalEnvFile}`, `${baseDir}/.env`]\n        console.log(\n            `Loading environment variables from ${dotenvPath.join(\", \")}`\n        )\n    } else {\n        dotenvPath = [`${baseDir}/.env`]\n    }\n    dotenv.config({ path: dotenvPath })\n}\n","// All of this information is available to the client-side code\n// DO NOT retrieve sensitive information from the environment in here! :O\n// Settings in here will be made available to the client-side code that is\n// bundled and shipped out to our users.\n\nimport \"./loadDotenv.js\"\n\nconst parseIntOrUndefined = (value: string | undefined): number | undefined => {\n    try {\n        return value ? parseInt(value) : undefined\n    } catch {\n        return undefined\n    }\n}\n\ntype Environment = \"development\" | \"staging\" | \"production\"\nexport const ENV: Environment =\n    (process.env.ENV as Environment) || \"development\"\nexport const IS_ARCHIVE: boolean = process.env.IS_ARCHIVE === \"true\"\nexport const COMMIT_SHA = process.env.COMMIT_SHA\n\nexport const SENTRY_DSN: string | undefined = process.env.SENTRY_DSN\nexport const SENTRY_ADMIN_DSN: string | undefined = process.env.SENTRY_ADMIN_DSN\nexport const ADMIN_SERVER_PORT: number =\n    parseIntOrUndefined(process.env.ADMIN_SERVER_PORT) ?? 3030\nexport const ADMIN_SERVER_HOST: string =\n    process.env.ADMIN_SERVER_HOST ?? \"localhost\"\nexport const BAKED_BASE_URL: string =\n    process.env.BAKED_BASE_URL ??\n    `http://${ADMIN_SERVER_HOST}:${ADMIN_SERVER_PORT}`\n\nexport const ARCHIVE_BASE_URL: string | null =\n    process.env.ARCHIVE_BASE_URL || null\n\nexport const BAKED_GRAPHER_URL: string =\n    process.env.BAKED_GRAPHER_URL ?? `${BAKED_BASE_URL}/grapher`\n\nexport const GRAPHER_DYNAMIC_THUMBNAIL_URL: string =\n    process.env.GRAPHER_DYNAMIC_THUMBNAIL_URL ?? `${BAKED_GRAPHER_URL}`\n\nexport const EXPLORER_DYNAMIC_THUMBNAIL_URL: string =\n    process.env.EXPLORER_DYNAMIC_THUMBNAIL_URL ?? `${BAKED_BASE_URL}/explorers`\n\nexport const GRAPHER_DYNAMIC_CONFIG_URL: string =\n    process.env.GRAPHER_DYNAMIC_CONFIG_URL ?? `${BAKED_GRAPHER_URL}`\n\nexport const EXPLORER_DYNAMIC_CONFIG_URL: string =\n    process.env.EXPLORER_DYNAMIC_CONFIG_URL ?? `${BAKED_BASE_URL}/explorers`\n\nexport const MULTI_DIM_DYNAMIC_CONFIG_URL: string =\n    process.env.MULTI_DIM_DYNAMIC_CONFIG_URL ?? `${BAKED_BASE_URL}/multi-dim`\n\nexport const ADMIN_BASE_URL: string =\n    process.env.ADMIN_BASE_URL ??\n    `http://${ADMIN_SERVER_HOST}:${ADMIN_SERVER_PORT}`\n// e.g. \"https://api.ourworldindata.org/v1/indicators\" or \"https://api-staging.owid.io/user/v1/indicators\"\nexport const DATA_API_URL: string =\n    process.env.DATA_API_URL ?? \"https://api.ourworldindata.org/v1/indicators\"\n\nexport const CATALOG_URL: string =\n    process.env.CATALOG_URL ?? \"https://catalog.ourworldindata.org\"\n\nexport const ALGOLIA_ID: string = process.env.ALGOLIA_ID ?? \"\"\nexport const ALGOLIA_SEARCH_KEY: string = process.env.ALGOLIA_SEARCH_KEY ?? \"\"\nexport const ALGOLIA_INDEX_PREFIX: string =\n    process.env.ALGOLIA_INDEX_PREFIX ?? \"\"\n\nexport const CLOUDFLARE_IMAGES_URL = process.env.CLOUDFLARE_IMAGES_URL ?? \"\"\n\nexport const DONATE_API_URL: string =\n    process.env.DONATE_API_URL ?? \"http://localhost:8788/donation/donate\"\n\nexport const RECAPTCHA_SITE_KEY: string =\n    process.env.RECAPTCHA_SITE_KEY ?? \"6LcJl5YUAAAAAATQ6F4vl9dAWRZeKPBm15MAZj4Q\"\n\n// e.g. \"GTM-N2D4V8S\" (our production GTM container)\nexport const GOOGLE_TAG_MANAGER_ID: string =\n    process.env.GOOGLE_TAG_MANAGER_ID ?? \"\"\n\nexport const TOPICS_CONTENT_GRAPH: boolean =\n    process.env.TOPICS_CONTENT_GRAPH === \"true\"\n\nexport const GDOCS_CLIENT_EMAIL: string = process.env.GDOCS_CLIENT_EMAIL ?? \"\"\nexport const GDOCS_ARTICLE_DUPLICATION_TEMPLATE_ID: string =\n    process.env.GDOCS_ARTICLE_DUPLICATION_TEMPLATE_ID ?? \"\"\nexport const GDOCS_DATA_INSIGHT_DUPLICATION_TEMPLATE_ID: string =\n    process.env.GDOCS_DATA_INSIGHT_DUPLICATION_TEMPLATE_ID ?? \"\"\nexport const GDOCS_ANNOUNCEMENT_DUPLICATION_TEMPLATE_ID: string =\n    process.env.GDOCS_ANNOUNCEMENT_DUPLICATION_TEMPLATE_ID ?? \"\"\nexport const GDOCS_DATA_INSIGHT_API_TEMPLATE_ID: string =\n    process.env.GDOCS_DATA_INSIGHT_API_TEMPLATE_ID ?? \"\"\n\n// Link to production wizard.  You need Tailscale to access it in production.\nexport const ETL_WIZARD_URL: string =\n    process.env.ETL_WIZARD_URL ?? `http://${ADMIN_SERVER_HOST}:8053`\n\n// Production ETL API runs on http://etl-prod-2:8083/v1 (you need Tailscale to access it)\nexport const ETL_API_URL: string =\n    process.env.ETL_API_URL ?? `http://${ADMIN_SERVER_HOST}:8081/api/v1`\n\nexport const PUBLISHED_AT_FORMAT = \"ddd, MMM D, YYYY HH:mm\"\n\n/** A map of possible features which can be enabled or disabled. */\nexport const Features = {\n    ExampleFeature: \"ExampleFeature\",\n} as const\n\ntype Feature = (typeof Features)[keyof typeof Features]\n\n// process.env.FEATURE_FLAGS is a comma-separated list of flags, and they need\n// to be a valid value in the Features object to be considered.\nconst featureFlagsRaw =\n    (typeof process.env.FEATURE_FLAGS === \"string\" &&\n        process.env.FEATURE_FLAGS.trim()?.split(\",\")) ||\n    []\nexport const FEATURE_FLAGS: Set<Feature> = new Set(\n    Object.values(Features).filter((feature) =>\n        featureFlagsRaw.includes(feature)\n    )\n)\n\nexport const SLACK_DI_PITCHES_CHANNEL_ID: string =\n    process.env.SLACK_DI_PITCHES_CHANNEL_ID ?? \"\"\n\nexport const IS_RUNNING_INSIDE_VITEST: boolean = !!process.env.VITEST\n\n/// Generated properties only, these cannot be overridden directly\n// Whether to only enable cookie-less tracking & never show the cookie notice\nexport const REDUCED_TRACKING = IS_ARCHIVE\nexport const LOAD_SENTRY = !REDUCED_TRACKING && !IS_RUNNING_INSIDE_VITEST\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\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\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\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\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\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\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nexport default baseTrim;\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\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\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\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\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\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\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\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\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\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nexport default baseCreate;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nexport default noop;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nexport default copyArray;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\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 */\nfunction 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\nexport default arrayEach;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nexport default baseAssignValue;\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\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nexport default copyObject;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nexport default createAssigner;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport keysIn from './keysIn.js';\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 */\nvar assignIn = createAssigner(function(object, source) {\n  copyObject(source, keysIn(source), object);\n});\n\nexport default assignIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default 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\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\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\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\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\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\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\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\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\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\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\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\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\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\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\nexport default getMapData;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\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\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\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\nexport default MapCache;\n","import MapCache from './_MapCache.js';\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\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\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 */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\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 */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nexport default baseSlice;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\nexport default createCaseFirst;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n","import toString from './toString.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","import root from './_root.js';\nimport toInteger from './toInteger.js';\nimport toNumber from './toNumber.js';\nimport toString from './toString.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite,\n    nativeMin = Math.min;\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 */\nfunction 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\nexport default createRound;\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 */\nfunction 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\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\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 */\nfunction 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\nexport default clamp;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\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 */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\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 */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\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 */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own 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 */\nvar 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\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\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 */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\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 */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nexport default getTag;\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 * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction 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\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\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 */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\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 */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * 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 */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    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/**\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 */\nfunction 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\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\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 */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\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 */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\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 */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\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 */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\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 */\nfunction 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\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\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 */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\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 */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\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 */\nfunction 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\nexport default compact;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nexport default baseMatches;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nexport default baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nexport default baseIteratee;\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 */\nfunction 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\nexport default arrayAggregator;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import baseEach from './_baseEach.js';\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 */\nfunction 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\nexport default baseAggregator;\n","import arrayAggregator from './_arrayAggregator.js';\nimport baseAggregator from './_baseAggregator.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\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 */\nfunction 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, baseIteratee(iteratee, 2), accumulator);\n  };\n}\n\nexport default createAggregator;\n","import root from './_root.js';\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 */\nvar now = function() {\n  return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\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 */\nfunction 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\nexport default debounce;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nexport default baseMerge;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\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 */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n  baseMerge(object, source, srcIndex, customizer);\n});\n\nexport default mergeWith;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport default arrayIncludesWith;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\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 */\nfunction 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\nexport default baseDifference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\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 */\nvar difference = baseRest(function(array, values) {\n  return isArrayLikeObject(array)\n    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n    : [];\n});\n\nexport default difference;\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 */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nexport default baseMap;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an 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 */\nvar 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\nexport default groupBy;\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 */\nfunction baseGt(value, other) {\n  return value > other;\n}\n\nexport default baseGt;\n","import arrayMap from './_arrayMap.js';\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 */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\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 */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n","import baseGet from './_baseGet.js';\nimport baseSlice from './_baseSlice.js';\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 */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nexport default parent;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\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 `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 */\nfunction 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\nexport default isEmpty;\n","import baseIsEqual from './_baseIsEqual.js';\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 */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import toInteger from './toInteger.js';\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 */\nfunction isInteger(value) {\n  return typeof value == 'number' && value == toInteger(value);\n}\n\nexport default isInteger;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\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 */\nfunction isNumber(value) {\n  return typeof value == 'number' ||\n    (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\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 */\nfunction isNil(value) {\n  return value == null;\n}\n\nexport default isNil;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\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 */\nvar keyBy = createAggregator(function(result, value, key) {\n  baseAssignValue(result, key, value);\n});\n\nexport default keyBy;\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 */\nfunction baseLt(value, other) {\n  return value < other;\n}\n\nexport default baseLt;\n","import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\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 */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nexport default mapValues;\n","import isSymbol from './isSymbol.js';\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 */\nfunction 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\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport identity from './identity.js';\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 */\nfunction max(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseGt)\n    : undefined;\n}\n\nexport default max;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport baseIteratee from './_baseIteratee.js';\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 */\nfunction maxBy(array, iteratee) {\n  return (array && array.length)\n    ? baseExtremum(array, baseIteratee(iteratee, 2), baseGt)\n    : undefined;\n}\n\nexport default maxBy;\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 */\nfunction 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\nexport default baseSum;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\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 */\nfunction min(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseLt)\n    : undefined;\n}\n\nexport default min;\n","import baseExtremum from './_baseExtremum.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseLt from './_baseLt.js';\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 */\nfunction minBy(array, iteratee) {\n  return (array && array.length)\n    ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n    : undefined;\n}\n\nexport default minBy;\n","import castPath from './_castPath.js';\nimport last from './last.js';\nimport parent from './_parent.js';\nimport toKey from './_toKey.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.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 */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n\n  // Prevent prototype pollution, see: https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n  var index = -1,\n      length = path.length;\n\n  if (!length) {\n    return true;\n  }\n\n  var isRootPrimitive = object == null || (typeof object !== 'object' && typeof object !== 'function');\n\n  while (++index < length) {\n    var key = path[index];\n\n    // skip non-string keys (e.g., Symbols, numbers)\n    if (typeof key !== 'string') {\n      continue;\n    }\n\n    // Always block \"__proto__\" anywhere in the path if it's not expected\n    if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n      return false;\n    }\n\n    // Block \"constructor.prototype\" chains\n    if (key === 'constructor' &&\n        (index + 1) < length &&\n        typeof path[index + 1] === 'string' &&\n        path[index + 1] === 'prototype') {\n\n      // Allow ONLY when the path starts at a primitive root, e.g., _.unset(0, 'constructor.prototype.a')\n      if (isRootPrimitive && index === 0) {\n        continue;\n      }\n\n      return false;\n    }\n  }\n\n  var obj = parent(object, path);\n  return obj == null || delete obj[toKey(last(path))];\n}\n\nexport default baseUnset;\n","import isPlainObject from './isPlainObject.js';\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 */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nexport default customOmitClone;\n","import arrayMap from './_arrayMap.js';\nimport baseClone from './_baseClone.js';\nimport baseUnset from './_baseUnset.js';\nimport castPath from './_castPath.js';\nimport copyObject from './_copyObject.js';\nimport customOmitClone from './_customOmitClone.js';\nimport flatRest from './_flatRest.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\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 */\nvar 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\nexport default omit;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nexport default baseSortBy;\n","import isSymbol from './isSymbol.js';\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nexport default compareAscending;\n","import compareAscending from './_compareAscending.js';\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nexport default compareMultiple;\n","import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        }\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nexport default baseOrderBy;\n","import baseOrderBy from './_baseOrderBy.js';\nimport isArray from './isArray.js';\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 */\nfunction 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\nexport default orderBy;\n","import createAggregator from './_createAggregator.js';\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 */\nvar partition = createAggregator(function(result, value, key) {\n  result[key ? 0 : 1].push(value);\n}, function() { return [[], []]; });\n\nexport default partition;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor,\n    nativeRandom = Math.random;\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 */\nfunction baseRandom(lower, upper) {\n  return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n}\n\nexport default baseRandom;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\nexport default baseRange;\n","import baseRange from './_baseRange.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toFinite from './toFinite.js';\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n  return function(start, end, step) {\n    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n      end = step = undefined;\n    }\n    // Ensure the sign of `-0` is preserved.\n    start = toFinite(start);\n    if (end === undefined) {\n      end = start;\n      start = 0;\n    } else {\n      end = toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n    return baseRange(start, end, step, fromRight);\n  };\n}\n\nexport default createRange;\n","import createRange from './_createRange.js';\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nexport default range;\n","/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeReverse = arrayProto.reverse;\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 */\nfunction reverse(array) {\n  return array == null ? array : nativeReverse.call(array);\n}\n\nexport default reverse;\n","import createRound from './_createRound.js';\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 */\nvar round = createRound('round');\n\nexport default round;\n","import baseRandom from './_baseRandom.js';\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 */\nfunction 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\nexport default shuffleSelf;\n","import copyArray from './_copyArray.js';\nimport shuffleSelf from './_shuffleSelf.js';\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 */\nfunction arrayShuffle(array) {\n  return shuffleSelf(copyArray(array));\n}\n\nexport default arrayShuffle;\n","import shuffleSelf from './_shuffleSelf.js';\nimport values from './values.js';\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 */\nfunction baseShuffle(collection) {\n  return shuffleSelf(values(collection));\n}\n\nexport default baseShuffle;\n","import arrayShuffle from './_arrayShuffle.js';\nimport baseShuffle from './_baseShuffle.js';\nimport isArray from './isArray.js';\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 */\nfunction shuffle(collection) {\n  var func = isArray(collection) ? arrayShuffle : baseShuffle;\n  return func(collection);\n}\n\nexport default shuffle;\n","import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nexport default sortBy;\n","import eq from './eq.js';\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 */\nfunction 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\nexport default baseSortedUniq;\n","import baseSortedUniq from './_baseSortedUniq.js';\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 */\nfunction sortedUniq(array) {\n  return (array && array.length)\n    ? baseSortedUniq(array)\n    : [];\n}\n\nexport default sortedUniq;\n","import baseIteratee from './_baseIteratee.js';\nimport baseSortedUniq from './_baseSortedUniq.js';\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 */\nfunction sortedUniqBy(array, iteratee) {\n  return (array && array.length)\n    ? baseSortedUniq(array, baseIteratee(iteratee, 2))\n    : [];\n}\n\nexport default sortedUniqBy;\n","import baseSum from './_baseSum.js';\nimport identity from './identity.js';\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 */\nfunction sum(array) {\n  return (array && array.length)\n    ? baseSum(array, identity)\n    : 0;\n}\n\nexport default sum;\n","import baseIteratee from './_baseIteratee.js';\nimport baseSum from './_baseSum.js';\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 */\nfunction sumBy(array, iteratee) {\n  return (array && array.length)\n    ? baseSum(array, baseIteratee(iteratee, 2))\n    : 0;\n}\n\nexport default sumBy;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\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 */\nfunction 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\nexport default throttle;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nexport default baseUniq;\n","import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\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 */\nvar union = baseRest(function(arrays) {\n  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n","import baseUniq from './_baseUniq.js';\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n  return (array && array.length) ? baseUniq(array) : [];\n}\n\nexport default uniq;\n","import baseIteratee from './_baseIteratee.js';\nimport baseUniq from './_baseUniq.js';\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 */\nfunction uniqBy(array, iteratee) {\n  return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nexport default uniqBy;\n","import baseUniq from './_baseUniq.js';\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 */\nfunction uniqWith(array, comparator) {\n  comparator = typeof comparator == 'function' ? comparator : undefined;\n  return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n}\n\nexport default uniqWith;\n","import baseDifference from './_baseDifference.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\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 */\nvar without = baseRest(function(array, values) {\n  return isArrayLikeObject(array)\n    ? baseDifference(array, values)\n    : [];\n});\n\nexport default without;\n","var niceErrors = {\n  0: \"Invalid value for configuration 'enforceActions', expected 'never', 'always' or 'observed'\",\n  1: function _(annotationType, key) {\n    return \"Cannot apply '\" + annotationType + \"' to '\" + key.toString() + \"': Field not found.\";\n  },\n  /*\n  2(prop) {\n      return `invalid decorator for '${prop.toString()}'`\n  },\n  3(prop) {\n      return `Cannot decorate '${prop.toString()}': action can only be used on properties with a function value.`\n  },\n  4(prop) {\n      return `Cannot decorate '${prop.toString()}': computed can only be used on getter properties.`\n  },\n  */\n  5: \"'keys()' can only be used on observable objects, arrays, sets and maps\",\n  6: \"'values()' can only be used on observable objects, arrays, sets and maps\",\n  7: \"'entries()' can only be used on observable objects, arrays and maps\",\n  8: \"'set()' can only be used on observable objects, arrays and maps\",\n  9: \"'remove()' can only be used on observable objects, arrays and maps\",\n  10: \"'has()' can only be used on observable objects, arrays and maps\",\n  11: \"'get()' can only be used on observable objects, arrays and maps\",\n  12: \"Invalid annotation\",\n  13: \"Dynamic observable objects cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)\",\n  14: \"Intercept handlers should return nothing or a change object\",\n  15: \"Observable arrays cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)\",\n  16: \"Modification exception: the internal structure of an observable array was changed.\",\n  17: function _(index, length) {\n    return \"[mobx.array] Index out of bounds, \" + index + \" is larger than \" + length;\n  },\n  18: \"mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js\",\n  19: function _(other) {\n    return \"Cannot initialize from classes that inherit from Map: \" + other.constructor.name;\n  },\n  20: function _(other) {\n    return \"Cannot initialize map from \" + other;\n  },\n  21: function _(dataStructure) {\n    return \"Cannot convert to map from '\" + dataStructure + \"'\";\n  },\n  22: \"mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js\",\n  23: \"It is not possible to get index atoms from arrays\",\n  24: function _(thing) {\n    return \"Cannot obtain administration from \" + thing;\n  },\n  25: function _(property, name) {\n    return \"the entry '\" + property + \"' does not exist in the observable map '\" + name + \"'\";\n  },\n  26: \"please specify a property\",\n  27: function _(property, name) {\n    return \"no observable property '\" + property.toString() + \"' found on the observable object '\" + name + \"'\";\n  },\n  28: function _(thing) {\n    return \"Cannot obtain atom from \" + thing;\n  },\n  29: \"Expecting some object\",\n  30: \"invalid action stack. did you forget to finish an action?\",\n  31: \"missing option for computed: get\",\n  32: function _(name, derivation) {\n    return \"Cycle detected in computation \" + name + \": \" + derivation;\n  },\n  33: function _(name) {\n    return \"The setter of computed value '\" + name + \"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?\";\n  },\n  34: function _(name) {\n    return \"[ComputedValue '\" + name + \"'] It is not possible to assign a new value to a computed value.\";\n  },\n  35: \"There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`\",\n  36: \"isolateGlobalState should be called before MobX is running any reactions\",\n  37: function _(method) {\n    return \"[mobx] `observableArray.\" + method + \"()` mutates the array in-place, which is not allowed inside a derivation. Use `array.slice().\" + method + \"()` instead\";\n  },\n  38: \"'ownKeys()' can only be used on observable objects\",\n  39: \"'defineProperty()' can only be used on observable objects\"\n};\nvar errors = process.env.NODE_ENV !== \"production\" ? niceErrors : {};\nfunction die(error) {\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    var e = typeof error === \"string\" ? error : errors[error];\n    if (typeof e === \"function\") e = e.apply(null, args);\n    throw new Error(\"[MobX] \" + e);\n  }\n  throw new Error(typeof error === \"number\" ? \"[MobX] minified error nr: \" + error + (args.length ? \" \" + args.map(String).join(\",\") : \"\") + \". Find the full error at: https://github.com/mobxjs/mobx/blob/main/packages/mobx/src/errors.ts\" : \"[MobX] \" + error);\n}\n\nvar mockGlobal = {};\nfunction getGlobal() {\n  if (typeof globalThis !== \"undefined\") {\n    return globalThis;\n  }\n  if (typeof window !== \"undefined\") {\n    return window;\n  }\n  if (typeof global !== \"undefined\") {\n    return global;\n  }\n  if (typeof self !== \"undefined\") {\n    return self;\n  }\n  return mockGlobal;\n}\n\n// We shorten anything used > 5 times\nvar assign = Object.assign;\nvar getDescriptor = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar objectPrototype = Object.prototype;\nvar EMPTY_ARRAY = [];\nObject.freeze(EMPTY_ARRAY);\nvar EMPTY_OBJECT = {};\nObject.freeze(EMPTY_OBJECT);\nvar hasProxy = typeof Proxy !== \"undefined\";\nvar plainObjectString = /*#__PURE__*/Object.toString();\nfunction assertProxies() {\n  if (!hasProxy) {\n    die(process.env.NODE_ENV !== \"production\" ? \"`Proxy` objects are not available in the current environment. Please configure MobX to enable a fallback implementation.`\" : \"Proxy not available\");\n  }\n}\nfunction warnAboutProxyRequirement(msg) {\n  if (process.env.NODE_ENV !== \"production\" && globalState.verifyProxies) {\n    die(\"MobX is currently configured to be able to run in ES5 mode, but in ES5 MobX won't be able to \" + msg);\n  }\n}\nfunction getNextId() {\n  return ++globalState.mobxGuid;\n}\n/**\n * Makes sure that the provided function is invoked at most once.\n */\nfunction once(func) {\n  var invoked = false;\n  return function () {\n    if (invoked) {\n      return;\n    }\n    invoked = true;\n    return func.apply(this, arguments);\n  };\n}\nvar noop = function noop() {};\nfunction isFunction(fn) {\n  return typeof fn === \"function\";\n}\nfunction isStringish(value) {\n  var t = typeof value;\n  switch (t) {\n    case \"string\":\n    case \"symbol\":\n    case \"number\":\n      return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && typeof value === \"object\";\n}\nfunction isPlainObject(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  var proto = Object.getPrototypeOf(value);\n  if (proto == null) {\n    return true;\n  }\n  var protoConstructor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  return typeof protoConstructor === \"function\" && protoConstructor.toString() === plainObjectString;\n}\n// https://stackoverflow.com/a/37865170\nfunction isGenerator(obj) {\n  var constructor = obj == null ? void 0 : obj.constructor;\n  if (!constructor) {\n    return false;\n  }\n  if (\"GeneratorFunction\" === constructor.name || \"GeneratorFunction\" === constructor.displayName) {\n    return true;\n  }\n  return false;\n}\nfunction addHiddenProp(object, propName, value) {\n  defineProperty(object, propName, {\n    enumerable: false,\n    writable: true,\n    configurable: true,\n    value: value\n  });\n}\nfunction addHiddenFinalProp(object, propName, value) {\n  defineProperty(object, propName, {\n    enumerable: false,\n    writable: false,\n    configurable: true,\n    value: value\n  });\n}\nfunction createInstanceofPredicate(name, theClass) {\n  var propName = \"isMobX\" + name;\n  theClass.prototype[propName] = true;\n  return function (x) {\n    return isObject(x) && x[propName] === true;\n  };\n}\n/**\n * Yields true for both native and observable Map, even across different windows.\n */\nfunction isES6Map(thing) {\n  return thing != null && Object.prototype.toString.call(thing) === \"[object Map]\";\n}\n/**\n * Makes sure a Map is an instance of non-inherited native or observable Map.\n */\nfunction isPlainES6Map(thing) {\n  var mapProto = Object.getPrototypeOf(thing);\n  var objectProto = Object.getPrototypeOf(mapProto);\n  var nullProto = Object.getPrototypeOf(objectProto);\n  return nullProto === null;\n}\n/**\n * Yields true for both native and observable Set, even across different windows.\n */\nfunction isES6Set(thing) {\n  return thing != null && Object.prototype.toString.call(thing) === \"[object Set]\";\n}\nvar hasGetOwnPropertySymbols = typeof Object.getOwnPropertySymbols !== \"undefined\";\n/**\n * Returns the following: own enumerable keys and symbols.\n */\nfunction getPlainObjectKeys(object) {\n  var keys = Object.keys(object);\n  // Not supported in IE, so there are not going to be symbol props anyway...\n  if (!hasGetOwnPropertySymbols) {\n    return keys;\n  }\n  var symbols = Object.getOwnPropertySymbols(object);\n  if (!symbols.length) {\n    return keys;\n  }\n  return [].concat(keys, symbols.filter(function (s) {\n    return objectPrototype.propertyIsEnumerable.call(object, s);\n  }));\n}\n// From Immer utils\n// Returns all own keys, including non-enumerable and symbolic\nvar ownKeys = typeof Reflect !== \"undefined\" && Reflect.ownKeys ? Reflect.ownKeys : hasGetOwnPropertySymbols ? function (obj) {\n  return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj));\n} : /* istanbul ignore next */Object.getOwnPropertyNames;\nfunction stringifyKey(key) {\n  if (typeof key === \"string\") {\n    return key;\n  }\n  if (typeof key === \"symbol\") {\n    return key.toString();\n  }\n  return new String(key).toString();\n}\nfunction toPrimitive(value) {\n  return value === null ? null : typeof value === \"object\" ? \"\" + value : value;\n}\nfunction hasProp(target, prop) {\n  return objectPrototype.hasOwnProperty.call(target, prop);\n}\n// From Immer utils\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function getOwnPropertyDescriptors(target) {\n  // Polyfill needed for Hermes and IE, see https://github.com/facebook/hermes/issues/274\n  var res = {};\n  // Note: without polyfill for ownKeys, symbols won't be picked up\n  ownKeys(target).forEach(function (key) {\n    res[key] = getDescriptor(target, key);\n  });\n  return res;\n};\nfunction getFlag(flags, mask) {\n  return !!(flags & mask);\n}\nfunction setFlag(flags, mask, newValue) {\n  if (newValue) {\n    flags |= mask;\n  } else {\n    flags &= ~mask;\n  }\n  return flags;\n}\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\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}\nfunction _createForOfIteratorHelperLoose(r, e) {\n  var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (t) return (t = t.call(r)).next.bind(t);\n  if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) {\n    t && (r = t);\n    var o = 0;\n    return function () {\n      return o >= r.length ? {\n        done: !0\n      } : {\n        done: !1,\n        value: r[o++]\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}\nfunction _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);\n}\nfunction _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\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}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar storedAnnotationsSymbol = /*#__PURE__*/Symbol(\"mobx-stored-annotations\");\n/**\n * Creates a function that acts as\n * - decorator\n * - annotation object\n */\nfunction createDecoratorAnnotation(annotation) {\n  function decorator(target, property) {\n    if (is20223Decorator(property)) {\n      return annotation.decorate_20223_(target, property);\n    } else {\n      storeAnnotation(target, property, annotation);\n    }\n  }\n  return Object.assign(decorator, annotation);\n}\n/**\n * Stores annotation to prototype,\n * so it can be inspected later by `makeObservable` called from constructor\n */\nfunction storeAnnotation(prototype, key, annotation) {\n  if (!hasProp(prototype, storedAnnotationsSymbol)) {\n    addHiddenProp(prototype, storedAnnotationsSymbol, _extends({}, prototype[storedAnnotationsSymbol]));\n  }\n  // @override must override something\n  if (process.env.NODE_ENV !== \"production\" && isOverride(annotation) && !hasProp(prototype[storedAnnotationsSymbol], key)) {\n    var fieldName = prototype.constructor.name + \".prototype.\" + key.toString();\n    die(\"'\" + fieldName + \"' is decorated with 'override', \" + \"but no such decorated member was found on prototype.\");\n  }\n  // Cannot re-decorate\n  assertNotDecorated(prototype, annotation, key);\n  // Ignore override\n  if (!isOverride(annotation)) {\n    prototype[storedAnnotationsSymbol][key] = annotation;\n  }\n}\nfunction assertNotDecorated(prototype, annotation, key) {\n  if (process.env.NODE_ENV !== \"production\" && !isOverride(annotation) && hasProp(prototype[storedAnnotationsSymbol], key)) {\n    var fieldName = prototype.constructor.name + \".prototype.\" + key.toString();\n    var currentAnnotationType = prototype[storedAnnotationsSymbol][key].annotationType_;\n    var requestedAnnotationType = annotation.annotationType_;\n    die(\"Cannot apply '@\" + requestedAnnotationType + \"' to '\" + fieldName + \"':\" + (\"\\nThe field is already decorated with '@\" + currentAnnotationType + \"'.\") + \"\\nRe-decorating fields is not allowed.\" + \"\\nUse '@override' decorator for methods overridden by subclass.\");\n  }\n}\n/**\n * Collects annotations from prototypes and stores them on target (instance)\n */\nfunction collectStoredAnnotations(target) {\n  if (!hasProp(target, storedAnnotationsSymbol)) {\n    // if (__DEV__ && !target[storedAnnotationsSymbol]) {\n    //     die(\n    //         `No annotations were passed to makeObservable, but no decorated members have been found either`\n    //     )\n    // }\n    // We need a copy as we will remove annotation from the list once it's applied.\n    addHiddenProp(target, storedAnnotationsSymbol, _extends({}, target[storedAnnotationsSymbol]));\n  }\n  return target[storedAnnotationsSymbol];\n}\nfunction is20223Decorator(context) {\n  return typeof context == \"object\" && typeof context[\"kind\"] == \"string\";\n}\nfunction assert20223DecoratorType(context, types) {\n  if (process.env.NODE_ENV !== \"production\" && !types.includes(context.kind)) {\n    die(\"The decorator applied to '\" + String(context.name) + \"' cannot be used on a \" + context.kind + \" element\");\n  }\n}\n\nvar $mobx = /*#__PURE__*/Symbol(\"mobx administration\");\nvar Atom = /*#__PURE__*/function () {\n  /**\n   * Create a new atom. For debugging purposes it is recommended to give it a name.\n   * The onBecomeObserved and onBecomeUnobserved callbacks can be used for resource management.\n   */\n  function Atom(name_) {\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"Atom@\" + getNextId() : \"Atom\";\n    }\n    this.name_ = void 0;\n    this.flags_ = 0;\n    this.observers_ = new Set();\n    this.lastAccessedBy_ = 0;\n    this.lowestObserverState_ = IDerivationState_.NOT_TRACKING_;\n    // onBecomeObservedListeners\n    this.onBOL = void 0;\n    // onBecomeUnobservedListeners\n    this.onBUOL = void 0;\n    this.name_ = name_;\n  }\n  // for effective unobserving. BaseAtom has true, for extra optimization, so its onBecomeUnobserved never gets called, because it's not needed\n  var _proto = Atom.prototype;\n  _proto.onBO = function onBO() {\n    if (this.onBOL) {\n      this.onBOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  };\n  _proto.onBUO = function onBUO() {\n    if (this.onBUOL) {\n      this.onBUOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  }\n  /**\n   * Invoke this method to notify mobx that your atom has been used somehow.\n   * Returns true if there is currently a reactive context.\n   */;\n  _proto.reportObserved = function reportObserved$1() {\n    return reportObserved(this);\n  }\n  /**\n   * Invoke this method _after_ this method has changed to signal mobx that all its observers should invalidate.\n   */;\n  _proto.reportChanged = function reportChanged() {\n    startBatch();\n    propagateChanged(this);\n    endBatch();\n  };\n  _proto.toString = function toString() {\n    return this.name_;\n  };\n  return _createClass(Atom, [{\n    key: \"isBeingObserved\",\n    get: function get() {\n      return getFlag(this.flags_, Atom.isBeingObservedMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Atom.isBeingObservedMask_, newValue);\n    }\n  }, {\n    key: \"isPendingUnobservation\",\n    get: function get() {\n      return getFlag(this.flags_, Atom.isPendingUnobservationMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Atom.isPendingUnobservationMask_, newValue);\n    }\n  }, {\n    key: \"diffValue\",\n    get: function get() {\n      return getFlag(this.flags_, Atom.diffValueMask_) ? 1 : 0;\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Atom.diffValueMask_, newValue === 1 ? true : false);\n    }\n  }]);\n}();\nAtom.isBeingObservedMask_ = 1;\nAtom.isPendingUnobservationMask_ = 2;\nAtom.diffValueMask_ = 4;\nvar isAtom = /*#__PURE__*/createInstanceofPredicate(\"Atom\", Atom);\nfunction createAtom(name, onBecomeObservedHandler, onBecomeUnobservedHandler) {\n  if (onBecomeObservedHandler === void 0) {\n    onBecomeObservedHandler = noop;\n  }\n  if (onBecomeUnobservedHandler === void 0) {\n    onBecomeUnobservedHandler = noop;\n  }\n  var atom = new Atom(name);\n  // default `noop` listener will not initialize the hook Set\n  if (onBecomeObservedHandler !== noop) {\n    onBecomeObserved(atom, onBecomeObservedHandler);\n  }\n  if (onBecomeUnobservedHandler !== noop) {\n    onBecomeUnobserved(atom, onBecomeUnobservedHandler);\n  }\n  return atom;\n}\n\nfunction identityComparer(a, b) {\n  return a === b;\n}\nfunction structuralComparer(a, b) {\n  return deepEqual(a, b);\n}\nfunction shallowComparer(a, b) {\n  return deepEqual(a, b, 1);\n}\nfunction defaultComparer(a, b) {\n  if (Object.is) {\n    return Object.is(a, b);\n  }\n  return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b;\n}\nvar comparer = {\n  identity: identityComparer,\n  structural: structuralComparer,\n  \"default\": defaultComparer,\n  shallow: shallowComparer\n};\n\nfunction deepEnhancer(v, _, name) {\n  // it is an observable already, done\n  if (isObservable(v)) {\n    return v;\n  }\n  // something that can be converted and mutated?\n  if (Array.isArray(v)) {\n    return observable.array(v, {\n      name: name\n    });\n  }\n  if (isPlainObject(v)) {\n    return observable.object(v, undefined, {\n      name: name\n    });\n  }\n  if (isES6Map(v)) {\n    return observable.map(v, {\n      name: name\n    });\n  }\n  if (isES6Set(v)) {\n    return observable.set(v, {\n      name: name\n    });\n  }\n  if (typeof v === \"function\" && !isAction(v) && !isFlow(v)) {\n    if (isGenerator(v)) {\n      return flow(v);\n    } else {\n      return autoAction(name, v);\n    }\n  }\n  return v;\n}\nfunction shallowEnhancer(v, _, name) {\n  if (v === undefined || v === null) {\n    return v;\n  }\n  if (isObservableObject(v) || isObservableArray(v) || isObservableMap(v) || isObservableSet(v)) {\n    return v;\n  }\n  if (Array.isArray(v)) {\n    return observable.array(v, {\n      name: name,\n      deep: false\n    });\n  }\n  if (isPlainObject(v)) {\n    return observable.object(v, undefined, {\n      name: name,\n      deep: false\n    });\n  }\n  if (isES6Map(v)) {\n    return observable.map(v, {\n      name: name,\n      deep: false\n    });\n  }\n  if (isES6Set(v)) {\n    return observable.set(v, {\n      name: name,\n      deep: false\n    });\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    die(\"The shallow modifier / decorator can only used in combination with arrays, objects, maps and sets\");\n  }\n}\nfunction referenceEnhancer(newValue) {\n  // never turn into an observable\n  return newValue;\n}\nfunction refStructEnhancer(v, oldValue) {\n  if (process.env.NODE_ENV !== \"production\" && isObservable(v)) {\n    die(\"observable.struct should not be used with observable values\");\n  }\n  if (deepEqual(v, oldValue)) {\n    return oldValue;\n  }\n  return v;\n}\n\nvar OVERRIDE = \"override\";\nvar override = /*#__PURE__*/createDecoratorAnnotation({\n  annotationType_: OVERRIDE,\n  make_: make_,\n  extend_: extend_,\n  decorate_20223_: decorate_20223_\n});\nfunction isOverride(annotation) {\n  return annotation.annotationType_ === OVERRIDE;\n}\nfunction make_(adm, key) {\n  // Must not be plain object\n  if (process.env.NODE_ENV !== \"production\" && adm.isPlainObject_) {\n    die(\"Cannot apply '\" + this.annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + this.annotationType_ + \"' cannot be used on plain objects.\"));\n  }\n  // Must override something\n  if (process.env.NODE_ENV !== \"production\" && !hasProp(adm.appliedAnnotations_, key)) {\n    die(\"'\" + adm.name_ + \".\" + key.toString() + \"' is annotated with '\" + this.annotationType_ + \"', \" + \"but no such annotated member was found on prototype.\");\n  }\n  return 0 /* MakeResult.Cancel */;\n}\nfunction extend_(adm, key, descriptor, proxyTrap) {\n  die(\"'\" + this.annotationType_ + \"' can only be used with 'makeObservable'\");\n}\nfunction decorate_20223_(desc, context) {\n  console.warn(\"'\" + this.annotationType_ + \"' cannot be used with decorators - this is a no-op\");\n}\n\nfunction createActionAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$1,\n    extend_: extend_$1,\n    decorate_20223_: decorate_20223_$1\n  };\n}\nfunction make_$1(adm, key, descriptor, source) {\n  var _this$options_;\n  // bound\n  if ((_this$options_ = this.options_) != null && _this$options_.bound) {\n    return this.extend_(adm, key, descriptor, false) === null ? 0 /* MakeResult.Cancel */ : 1 /* MakeResult.Break */;\n  }\n  // own\n  if (source === adm.target_) {\n    return this.extend_(adm, key, descriptor, false) === null ? 0 /* MakeResult.Cancel */ : 2 /* MakeResult.Continue */;\n  }\n  // prototype\n  if (isAction(descriptor.value)) {\n    // A prototype could have been annotated already by other constructor,\n    // rest of the proto chain must be annotated already\n    return 1 /* MakeResult.Break */;\n  }\n  var actionDescriptor = createActionDescriptor(adm, this, key, descriptor, false);\n  defineProperty(source, key, actionDescriptor);\n  return 2 /* MakeResult.Continue */;\n}\nfunction extend_$1(adm, key, descriptor, proxyTrap) {\n  var actionDescriptor = createActionDescriptor(adm, this, key, descriptor);\n  return adm.defineProperty_(key, actionDescriptor, proxyTrap);\n}\nfunction decorate_20223_$1(mthd, context) {\n  if (process.env.NODE_ENV !== \"production\") {\n    assert20223DecoratorType(context, [\"method\", \"field\"]);\n  }\n  var kind = context.kind,\n    name = context.name,\n    addInitializer = context.addInitializer;\n  var ann = this;\n  var _createAction = function _createAction(m) {\n    var _ann$options_$name, _ann$options_, _ann$options_$autoAct, _ann$options_2;\n    return createAction((_ann$options_$name = (_ann$options_ = ann.options_) == null ? void 0 : _ann$options_.name) != null ? _ann$options_$name : name.toString(), m, (_ann$options_$autoAct = (_ann$options_2 = ann.options_) == null ? void 0 : _ann$options_2.autoAction) != null ? _ann$options_$autoAct : false);\n  };\n  if (kind == \"field\") {\n    return function (initMthd) {\n      var _ann$options_3;\n      var mthd = initMthd;\n      if (!isAction(mthd)) {\n        mthd = _createAction(mthd);\n      }\n      if ((_ann$options_3 = ann.options_) != null && _ann$options_3.bound) {\n        mthd = mthd.bind(this);\n        mthd.isMobxAction = true;\n      }\n      return mthd;\n    };\n  }\n  if (kind == \"method\") {\n    var _this$options_2;\n    if (!isAction(mthd)) {\n      mthd = _createAction(mthd);\n    }\n    if ((_this$options_2 = this.options_) != null && _this$options_2.bound) {\n      addInitializer(function () {\n        var self = this;\n        var bound = self[name].bind(self);\n        bound.isMobxAction = true;\n        self[name] = bound;\n      });\n    }\n    return mthd;\n  }\n  die(\"Cannot apply '\" + ann.annotationType_ + \"' to '\" + String(name) + \"' (kind: \" + kind + \"):\" + (\"\\n'\" + ann.annotationType_ + \"' can only be used on properties with a function value.\"));\n}\nfunction assertActionDescriptor(adm, _ref, key, _ref2) {\n  var annotationType_ = _ref.annotationType_;\n  var value = _ref2.value;\n  if (process.env.NODE_ENV !== \"production\" && !isFunction(value)) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' can only be used on properties with a function value.\"));\n  }\n}\nfunction createActionDescriptor(adm, annotation, key, descriptor,\n// provides ability to disable safeDescriptors for prototypes\nsafeDescriptors) {\n  var _annotation$options_, _annotation$options_$, _annotation$options_2, _annotation$options_$2, _annotation$options_3, _annotation$options_4, _adm$proxy_2;\n  if (safeDescriptors === void 0) {\n    safeDescriptors = globalState.safeDescriptors;\n  }\n  assertActionDescriptor(adm, annotation, key, descriptor);\n  var value = descriptor.value;\n  if ((_annotation$options_ = annotation.options_) != null && _annotation$options_.bound) {\n    var _adm$proxy_;\n    value = value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_);\n  }\n  return {\n    value: createAction((_annotation$options_$ = (_annotation$options_2 = annotation.options_) == null ? void 0 : _annotation$options_2.name) != null ? _annotation$options_$ : key.toString(), value, (_annotation$options_$2 = (_annotation$options_3 = annotation.options_) == null ? void 0 : _annotation$options_3.autoAction) != null ? _annotation$options_$2 : false,\n    // https://github.com/mobxjs/mobx/discussions/3140\n    (_annotation$options_4 = annotation.options_) != null && _annotation$options_4.bound ? (_adm$proxy_2 = adm.proxy_) != null ? _adm$proxy_2 : adm.target_ : undefined),\n    // Non-configurable for classes\n    // prevents accidental field redefinition in subclass\n    configurable: safeDescriptors ? adm.isPlainObject_ : true,\n    // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058\n    enumerable: false,\n    // Non-obsevable, therefore non-writable\n    // Also prevents rewriting in subclass constructor\n    writable: safeDescriptors ? false : true\n  };\n}\n\nfunction createFlowAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$2,\n    extend_: extend_$2,\n    decorate_20223_: decorate_20223_$2\n  };\n}\nfunction make_$2(adm, key, descriptor, source) {\n  var _this$options_;\n  // own\n  if (source === adm.target_) {\n    return this.extend_(adm, key, descriptor, false) === null ? 0 /* MakeResult.Cancel */ : 2 /* MakeResult.Continue */;\n  }\n  // prototype\n  // bound - must annotate protos to support super.flow()\n  if ((_this$options_ = this.options_) != null && _this$options_.bound && (!hasProp(adm.target_, key) || !isFlow(adm.target_[key]))) {\n    if (this.extend_(adm, key, descriptor, false) === null) {\n      return 0 /* MakeResult.Cancel */;\n    }\n  }\n  if (isFlow(descriptor.value)) {\n    // A prototype could have been annotated already by other constructor,\n    // rest of the proto chain must be annotated already\n    return 1 /* MakeResult.Break */;\n  }\n  var flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, false, false);\n  defineProperty(source, key, flowDescriptor);\n  return 2 /* MakeResult.Continue */;\n}\nfunction extend_$2(adm, key, descriptor, proxyTrap) {\n  var _this$options_2;\n  var flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, (_this$options_2 = this.options_) == null ? void 0 : _this$options_2.bound);\n  return adm.defineProperty_(key, flowDescriptor, proxyTrap);\n}\nfunction decorate_20223_$2(mthd, context) {\n  var _this$options_3;\n  if (process.env.NODE_ENV !== \"production\") {\n    assert20223DecoratorType(context, [\"method\"]);\n  }\n  var name = context.name,\n    addInitializer = context.addInitializer;\n  if (!isFlow(mthd)) {\n    mthd = flow(mthd);\n  }\n  if ((_this$options_3 = this.options_) != null && _this$options_3.bound) {\n    addInitializer(function () {\n      var self = this;\n      var bound = self[name].bind(self);\n      bound.isMobXFlow = true;\n      self[name] = bound;\n    });\n  }\n  return mthd;\n}\nfunction assertFlowDescriptor(adm, _ref, key, _ref2) {\n  var annotationType_ = _ref.annotationType_;\n  var value = _ref2.value;\n  if (process.env.NODE_ENV !== \"production\" && !isFunction(value)) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' can only be used on properties with a generator function value.\"));\n  }\n}\nfunction createFlowDescriptor(adm, annotation, key, descriptor, bound,\n// provides ability to disable safeDescriptors for prototypes\nsafeDescriptors) {\n  if (safeDescriptors === void 0) {\n    safeDescriptors = globalState.safeDescriptors;\n  }\n  assertFlowDescriptor(adm, annotation, key, descriptor);\n  var value = descriptor.value;\n  // In case of flow.bound, the descriptor can be from already annotated prototype\n  if (!isFlow(value)) {\n    value = flow(value);\n  }\n  if (bound) {\n    var _adm$proxy_;\n    // We do not keep original function around, so we bind the existing flow\n    value = value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_);\n    // This is normally set by `flow`, but `bind` returns new function...\n    value.isMobXFlow = true;\n  }\n  return {\n    value: value,\n    // Non-configurable for classes\n    // prevents accidental field redefinition in subclass\n    configurable: safeDescriptors ? adm.isPlainObject_ : true,\n    // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058\n    enumerable: false,\n    // Non-obsevable, therefore non-writable\n    // Also prevents rewriting in subclass constructor\n    writable: safeDescriptors ? false : true\n  };\n}\n\nfunction createComputedAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$3,\n    extend_: extend_$3,\n    decorate_20223_: decorate_20223_$3\n  };\n}\nfunction make_$3(adm, key, descriptor) {\n  return this.extend_(adm, key, descriptor, false) === null ? 0 /* MakeResult.Cancel */ : 1 /* MakeResult.Break */;\n}\nfunction extend_$3(adm, key, descriptor, proxyTrap) {\n  assertComputedDescriptor(adm, this, key, descriptor);\n  return adm.defineComputedProperty_(key, _extends({}, this.options_, {\n    get: descriptor.get,\n    set: descriptor.set\n  }), proxyTrap);\n}\nfunction decorate_20223_$3(get, context) {\n  if (process.env.NODE_ENV !== \"production\") {\n    assert20223DecoratorType(context, [\"getter\"]);\n  }\n  var ann = this;\n  var key = context.name,\n    addInitializer = context.addInitializer;\n  addInitializer(function () {\n    var adm = asObservableObject(this)[$mobx];\n    var options = _extends({}, ann.options_, {\n      get: get,\n      context: this\n    });\n    options.name || (options.name = process.env.NODE_ENV !== \"production\" ? adm.name_ + \".\" + key.toString() : \"ObservableObject.\" + key.toString());\n    adm.values_.set(key, new ComputedValue(options));\n  });\n  return function () {\n    return this[$mobx].getObservablePropValue_(key);\n  };\n}\nfunction assertComputedDescriptor(adm, _ref, key, _ref2) {\n  var annotationType_ = _ref.annotationType_;\n  var get = _ref2.get;\n  if (process.env.NODE_ENV !== \"production\" && !get) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' can only be used on getter(+setter) properties.\"));\n  }\n}\n\nfunction createObservableAnnotation(name, options) {\n  return {\n    annotationType_: name,\n    options_: options,\n    make_: make_$4,\n    extend_: extend_$4,\n    decorate_20223_: decorate_20223_$4\n  };\n}\nfunction make_$4(adm, key, descriptor) {\n  return this.extend_(adm, key, descriptor, false) === null ? 0 /* MakeResult.Cancel */ : 1 /* MakeResult.Break */;\n}\nfunction extend_$4(adm, key, descriptor, proxyTrap) {\n  var _this$options_$enhanc, _this$options_;\n  assertObservableDescriptor(adm, this, key, descriptor);\n  return adm.defineObservableProperty_(key, descriptor.value, (_this$options_$enhanc = (_this$options_ = this.options_) == null ? void 0 : _this$options_.enhancer) != null ? _this$options_$enhanc : deepEnhancer, proxyTrap);\n}\nfunction decorate_20223_$4(desc, context) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (context.kind === \"field\") {\n      throw die(\"Please use `@observable accessor \" + String(context.name) + \"` instead of `@observable \" + String(context.name) + \"`\");\n    }\n    assert20223DecoratorType(context, [\"accessor\"]);\n  }\n  var ann = this;\n  var kind = context.kind,\n    name = context.name;\n  // The laziness here is not ideal... It's a workaround to how 2022.3 Decorators are implemented:\n  //   `addInitializer` callbacks are executed _before_ any accessors are defined (instead of the ideal-for-us right after each).\n  //   This means that, if we were to do our stuff in an `addInitializer`, we'd attempt to read a private slot\n  //   before it has been initialized. The runtime doesn't like that and throws a `Cannot read private member\n  //   from an object whose class did not declare it` error.\n  // TODO: it seems that this will not be required anymore in the final version of the spec\n  // See TODO: link\n  var initializedObjects = new WeakSet();\n  function initializeObservable(target, value) {\n    var _ann$options_$enhance, _ann$options_;\n    var adm = asObservableObject(target)[$mobx];\n    var observable = new ObservableValue(value, (_ann$options_$enhance = (_ann$options_ = ann.options_) == null ? void 0 : _ann$options_.enhancer) != null ? _ann$options_$enhance : deepEnhancer, process.env.NODE_ENV !== \"production\" ? adm.name_ + \".\" + name.toString() : \"ObservableObject.\" + name.toString(), false);\n    adm.values_.set(name, observable);\n    initializedObjects.add(target);\n  }\n  if (kind == \"accessor\") {\n    return {\n      get: function get() {\n        if (!initializedObjects.has(this)) {\n          initializeObservable(this, desc.get.call(this));\n        }\n        return this[$mobx].getObservablePropValue_(name);\n      },\n      set: function set(value) {\n        if (!initializedObjects.has(this)) {\n          initializeObservable(this, value);\n        }\n        return this[$mobx].setObservablePropValue_(name, value);\n      },\n      init: function init(value) {\n        if (!initializedObjects.has(this)) {\n          initializeObservable(this, value);\n        }\n        return value;\n      }\n    };\n  }\n  return;\n}\nfunction assertObservableDescriptor(adm, _ref, key, descriptor) {\n  var annotationType_ = _ref.annotationType_;\n  if (process.env.NODE_ENV !== \"production\" && !(\"value\" in descriptor)) {\n    die(\"Cannot apply '\" + annotationType_ + \"' to '\" + adm.name_ + \".\" + key.toString() + \"':\" + (\"\\n'\" + annotationType_ + \"' cannot be used on getter/setter properties\"));\n  }\n}\n\nvar AUTO = \"true\";\nvar autoAnnotation = /*#__PURE__*/createAutoAnnotation();\nfunction createAutoAnnotation(options) {\n  return {\n    annotationType_: AUTO,\n    options_: options,\n    make_: make_$5,\n    extend_: extend_$5,\n    decorate_20223_: decorate_20223_$5\n  };\n}\nfunction make_$5(adm, key, descriptor, source) {\n  var _this$options_3, _this$options_4;\n  // getter -> computed\n  if (descriptor.get) {\n    return computed.make_(adm, key, descriptor, source);\n  }\n  // lone setter -> action setter\n  if (descriptor.set) {\n    // TODO make action applicable to setter and delegate to action.make_\n    var set = createAction(key.toString(), descriptor.set);\n    // own\n    if (source === adm.target_) {\n      return adm.defineProperty_(key, {\n        configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true,\n        set: set\n      }) === null ? 0 /* MakeResult.Cancel */ : 2 /* MakeResult.Continue */;\n    }\n    // proto\n    defineProperty(source, key, {\n      configurable: true,\n      set: set\n    });\n    return 2 /* MakeResult.Continue */;\n  }\n  // function on proto -> autoAction/flow\n  if (source !== adm.target_ && typeof descriptor.value === \"function\") {\n    var _this$options_2;\n    if (isGenerator(descriptor.value)) {\n      var _this$options_;\n      var flowAnnotation = (_this$options_ = this.options_) != null && _this$options_.autoBind ? flow.bound : flow;\n      return flowAnnotation.make_(adm, key, descriptor, source);\n    }\n    var actionAnnotation = (_this$options_2 = this.options_) != null && _this$options_2.autoBind ? autoAction.bound : autoAction;\n    return actionAnnotation.make_(adm, key, descriptor, source);\n  }\n  // other -> observable\n  // Copy props from proto as well, see test:\n  // \"decorate should work with Object.create\"\n  var observableAnnotation = ((_this$options_3 = this.options_) == null ? void 0 : _this$options_3.deep) === false ? observable.ref : observable;\n  // if function respect autoBind option\n  if (typeof descriptor.value === \"function\" && (_this$options_4 = this.options_) != null && _this$options_4.autoBind) {\n    var _adm$proxy_;\n    descriptor.value = descriptor.value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_);\n  }\n  return observableAnnotation.make_(adm, key, descriptor, source);\n}\nfunction extend_$5(adm, key, descriptor, proxyTrap) {\n  var _this$options_5, _this$options_6;\n  // getter -> computed\n  if (descriptor.get) {\n    return computed.extend_(adm, key, descriptor, proxyTrap);\n  }\n  // lone setter -> action setter\n  if (descriptor.set) {\n    // TODO make action applicable to setter and delegate to action.extend_\n    return adm.defineProperty_(key, {\n      configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true,\n      set: createAction(key.toString(), descriptor.set)\n    }, proxyTrap);\n  }\n  // other -> observable\n  // if function respect autoBind option\n  if (typeof descriptor.value === \"function\" && (_this$options_5 = this.options_) != null && _this$options_5.autoBind) {\n    var _adm$proxy_2;\n    descriptor.value = descriptor.value.bind((_adm$proxy_2 = adm.proxy_) != null ? _adm$proxy_2 : adm.target_);\n  }\n  var observableAnnotation = ((_this$options_6 = this.options_) == null ? void 0 : _this$options_6.deep) === false ? observable.ref : observable;\n  return observableAnnotation.extend_(adm, key, descriptor, proxyTrap);\n}\nfunction decorate_20223_$5(desc, context) {\n  die(\"'\" + this.annotationType_ + \"' cannot be used as a decorator\");\n}\n\nvar OBSERVABLE = \"observable\";\nvar OBSERVABLE_REF = \"observable.ref\";\nvar OBSERVABLE_SHALLOW = \"observable.shallow\";\nvar OBSERVABLE_STRUCT = \"observable.struct\";\n// Predefined bags of create observable options, to avoid allocating temporarily option objects\n// in the majority of cases\nvar defaultCreateObservableOptions = {\n  deep: true,\n  name: undefined,\n  defaultDecorator: undefined,\n  proxy: true\n};\nObject.freeze(defaultCreateObservableOptions);\nfunction asCreateObservableOptions(thing) {\n  return thing || defaultCreateObservableOptions;\n}\nvar observableAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE);\nvar observableRefAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_REF, {\n  enhancer: referenceEnhancer\n});\nvar observableShallowAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_SHALLOW, {\n  enhancer: shallowEnhancer\n});\nvar observableStructAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_STRUCT, {\n  enhancer: refStructEnhancer\n});\nvar observableDecoratorAnnotation = /*#__PURE__*/createDecoratorAnnotation(observableAnnotation);\nfunction getEnhancerFromOptions(options) {\n  return options.deep === true ? deepEnhancer : options.deep === false ? referenceEnhancer : getEnhancerFromAnnotation(options.defaultDecorator);\n}\nfunction getAnnotationFromOptions(options) {\n  var _options$defaultDecor;\n  return options ? (_options$defaultDecor = options.defaultDecorator) != null ? _options$defaultDecor : createAutoAnnotation(options) : undefined;\n}\nfunction getEnhancerFromAnnotation(annotation) {\n  var _annotation$options_$, _annotation$options_;\n  return !annotation ? deepEnhancer : (_annotation$options_$ = (_annotation$options_ = annotation.options_) == null ? void 0 : _annotation$options_.enhancer) != null ? _annotation$options_$ : deepEnhancer;\n}\n/**\n * Turns an object, array or function into a reactive structure.\n * @param v the value which should become observable.\n */\nfunction createObservable(v, arg2, arg3) {\n  // @observable someProp; (2022.3 Decorators)\n  if (is20223Decorator(arg2)) {\n    return observableAnnotation.decorate_20223_(v, arg2);\n  }\n  // @observable someProp;\n  if (isStringish(arg2)) {\n    storeAnnotation(v, arg2, observableAnnotation);\n    return;\n  }\n  // already observable - ignore\n  if (isObservable(v)) {\n    return v;\n  }\n  // plain object\n  if (isPlainObject(v)) {\n    return observable.object(v, arg2, arg3);\n  }\n  // Array\n  if (Array.isArray(v)) {\n    return observable.array(v, arg2);\n  }\n  // Map\n  if (isES6Map(v)) {\n    return observable.map(v, arg2);\n  }\n  // Set\n  if (isES6Set(v)) {\n    return observable.set(v, arg2);\n  }\n  // other object - ignore\n  if (typeof v === \"object\" && v !== null) {\n    return v;\n  }\n  // anything else\n  return observable.box(v, arg2);\n}\nassign(createObservable, observableDecoratorAnnotation);\nvar observableFactories = {\n  box: function box(value, options) {\n    var o = asCreateObservableOptions(options);\n    return new ObservableValue(value, getEnhancerFromOptions(o), o.name, true, o.equals);\n  },\n  array: function array(initialValues, options) {\n    var o = asCreateObservableOptions(options);\n    return (globalState.useProxies === false || o.proxy === false ? createLegacyArray : createObservableArray)(initialValues, getEnhancerFromOptions(o), o.name);\n  },\n  map: function map(initialValues, options) {\n    var o = asCreateObservableOptions(options);\n    return new ObservableMap(initialValues, getEnhancerFromOptions(o), o.name);\n  },\n  set: function set(initialValues, options) {\n    var o = asCreateObservableOptions(options);\n    return new ObservableSet(initialValues, getEnhancerFromOptions(o), o.name);\n  },\n  object: function object(props, decorators, options) {\n    return initObservable(function () {\n      return extendObservable(globalState.useProxies === false || (options == null ? void 0 : options.proxy) === false ? asObservableObject({}, options) : asDynamicObservableObject({}, options), props, decorators);\n    });\n  },\n  ref: /*#__PURE__*/createDecoratorAnnotation(observableRefAnnotation),\n  shallow: /*#__PURE__*/createDecoratorAnnotation(observableShallowAnnotation),\n  deep: observableDecoratorAnnotation,\n  struct: /*#__PURE__*/createDecoratorAnnotation(observableStructAnnotation)\n};\n// eslint-disable-next-line\nvar observable = /*#__PURE__*/assign(createObservable, observableFactories);\n\nvar COMPUTED = \"computed\";\nvar COMPUTED_STRUCT = \"computed.struct\";\nvar computedAnnotation = /*#__PURE__*/createComputedAnnotation(COMPUTED);\nvar computedStructAnnotation = /*#__PURE__*/createComputedAnnotation(COMPUTED_STRUCT, {\n  equals: comparer.structural\n});\n/**\n * Decorator for class properties: @computed get value() { return expr; }.\n * For legacy purposes also invokable as ES5 observable created: `computed(() => expr)`;\n */\nvar computed = function computed(arg1, arg2) {\n  if (is20223Decorator(arg2)) {\n    // @computed (2022.3 Decorators)\n    return computedAnnotation.decorate_20223_(arg1, arg2);\n  }\n  if (isStringish(arg2)) {\n    // @computed\n    return storeAnnotation(arg1, arg2, computedAnnotation);\n  }\n  if (isPlainObject(arg1)) {\n    // @computed({ options })\n    return createDecoratorAnnotation(createComputedAnnotation(COMPUTED, arg1));\n  }\n  // computed(expr, options?)\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(arg1)) {\n      die(\"First argument to `computed` should be an expression.\");\n    }\n    if (isFunction(arg2)) {\n      die(\"A setter as second argument is no longer supported, use `{ set: fn }` option instead\");\n    }\n  }\n  var opts = isPlainObject(arg2) ? arg2 : {};\n  opts.get = arg1;\n  opts.name || (opts.name = arg1.name || \"\"); /* for generated name */\n  return new ComputedValue(opts);\n};\nObject.assign(computed, computedAnnotation);\ncomputed.struct = /*#__PURE__*/createDecoratorAnnotation(computedStructAnnotation);\n\nvar _getDescriptor$config, _getDescriptor;\n// we don't use globalState for these in order to avoid possible issues with multiple\n// mobx versions\nvar currentActionId = 0;\nvar nextActionId = 1;\nvar isFunctionNameConfigurable = (_getDescriptor$config = (_getDescriptor = /*#__PURE__*/getDescriptor(function () {}, \"name\")) == null ? void 0 : _getDescriptor.configurable) != null ? _getDescriptor$config : false;\n// we can safely recycle this object\nvar tmpNameDescriptor = {\n  value: \"action\",\n  configurable: true,\n  writable: false,\n  enumerable: false\n};\nfunction createAction(actionName, fn, autoAction, ref) {\n  if (autoAction === void 0) {\n    autoAction = false;\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(fn)) {\n      die(\"`action` can only be invoked on functions\");\n    }\n    if (typeof actionName !== \"string\" || !actionName) {\n      die(\"actions should have valid names, got: '\" + actionName + \"'\");\n    }\n  }\n  function res() {\n    return executeAction(actionName, autoAction, fn, ref || this, arguments);\n  }\n  res.isMobxAction = true;\n  res.toString = function () {\n    return fn.toString();\n  };\n  if (isFunctionNameConfigurable) {\n    tmpNameDescriptor.value = actionName;\n    defineProperty(res, \"name\", tmpNameDescriptor);\n  }\n  return res;\n}\nfunction executeAction(actionName, canRunAsDerivation, fn, scope, args) {\n  var runInfo = _startAction(actionName, canRunAsDerivation, scope, args);\n  try {\n    return fn.apply(scope, args);\n  } catch (err) {\n    runInfo.error_ = err;\n    throw err;\n  } finally {\n    _endAction(runInfo);\n  }\n}\nfunction _startAction(actionName, canRunAsDerivation,\n// true for autoAction\nscope, args) {\n  var notifySpy_ = process.env.NODE_ENV !== \"production\" && isSpyEnabled() && !!actionName;\n  var startTime_ = 0;\n  if (process.env.NODE_ENV !== \"production\" && notifySpy_) {\n    startTime_ = Date.now();\n    var flattenedArgs = args ? Array.from(args) : EMPTY_ARRAY;\n    spyReportStart({\n      type: ACTION,\n      name: actionName,\n      object: scope,\n      arguments: flattenedArgs\n    });\n  }\n  var prevDerivation_ = globalState.trackingDerivation;\n  var runAsAction = !canRunAsDerivation || !prevDerivation_;\n  startBatch();\n  var prevAllowStateChanges_ = globalState.allowStateChanges; // by default preserve previous allow\n  if (runAsAction) {\n    untrackedStart();\n    prevAllowStateChanges_ = allowStateChangesStart(true);\n  }\n  var prevAllowStateReads_ = allowStateReadsStart(true);\n  var runInfo = {\n    runAsAction_: runAsAction,\n    prevDerivation_: prevDerivation_,\n    prevAllowStateChanges_: prevAllowStateChanges_,\n    prevAllowStateReads_: prevAllowStateReads_,\n    notifySpy_: notifySpy_,\n    startTime_: startTime_,\n    actionId_: nextActionId++,\n    parentActionId_: currentActionId\n  };\n  currentActionId = runInfo.actionId_;\n  return runInfo;\n}\nfunction _endAction(runInfo) {\n  if (currentActionId !== runInfo.actionId_) {\n    die(30);\n  }\n  currentActionId = runInfo.parentActionId_;\n  if (runInfo.error_ !== undefined) {\n    globalState.suppressReactionErrors = true;\n  }\n  allowStateChangesEnd(runInfo.prevAllowStateChanges_);\n  allowStateReadsEnd(runInfo.prevAllowStateReads_);\n  endBatch();\n  if (runInfo.runAsAction_) {\n    untrackedEnd(runInfo.prevDerivation_);\n  }\n  if (process.env.NODE_ENV !== \"production\" && runInfo.notifySpy_) {\n    spyReportEnd({\n      time: Date.now() - runInfo.startTime_\n    });\n  }\n  globalState.suppressReactionErrors = false;\n}\nfunction allowStateChanges(allowStateChanges, func) {\n  var prev = allowStateChangesStart(allowStateChanges);\n  try {\n    return func();\n  } finally {\n    allowStateChangesEnd(prev);\n  }\n}\nfunction allowStateChangesStart(allowStateChanges) {\n  var prev = globalState.allowStateChanges;\n  globalState.allowStateChanges = allowStateChanges;\n  return prev;\n}\nfunction allowStateChangesEnd(prev) {\n  globalState.allowStateChanges = prev;\n}\n\nvar CREATE = \"create\";\nvar ObservableValue = /*#__PURE__*/function (_Atom) {\n  function ObservableValue(value, enhancer, name_, notifySpy, equals) {\n    var _this;\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"ObservableValue@\" + getNextId() : \"ObservableValue\";\n    }\n    if (notifySpy === void 0) {\n      notifySpy = true;\n    }\n    if (equals === void 0) {\n      equals = comparer[\"default\"];\n    }\n    _this = _Atom.call(this, name_) || this;\n    _this.enhancer = void 0;\n    _this.name_ = void 0;\n    _this.equals = void 0;\n    _this.hasUnreportedChange_ = false;\n    _this.interceptors_ = void 0;\n    _this.changeListeners_ = void 0;\n    _this.value_ = void 0;\n    _this.dehancer = void 0;\n    _this.enhancer = enhancer;\n    _this.name_ = name_;\n    _this.equals = equals;\n    _this.value_ = enhancer(value, undefined, name_);\n    if (process.env.NODE_ENV !== \"production\" && notifySpy && isSpyEnabled()) {\n      // only notify spy if this is a stand-alone observable\n      spyReport({\n        type: CREATE,\n        object: _this,\n        observableKind: \"value\",\n        debugObjectName: _this.name_,\n        newValue: \"\" + _this.value_\n      });\n    }\n    return _this;\n  }\n  _inheritsLoose(ObservableValue, _Atom);\n  var _proto = ObservableValue.prototype;\n  _proto.dehanceValue = function dehanceValue(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n    return value;\n  };\n  _proto.set = function set(newValue) {\n    var oldValue = this.value_;\n    newValue = this.prepareNewValue_(newValue);\n    if (newValue !== globalState.UNCHANGED) {\n      var notifySpy = isSpyEnabled();\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart({\n          type: UPDATE,\n          object: this,\n          observableKind: \"value\",\n          debugObjectName: this.name_,\n          newValue: newValue,\n          oldValue: oldValue\n        });\n      }\n      this.setNewValue_(newValue);\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n  };\n  _proto.prepareNewValue_ = function prepareNewValue_(newValue) {\n    checkIfStateModificationsAreAllowed(this);\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        object: this,\n        type: UPDATE,\n        newValue: newValue\n      });\n      if (!change) {\n        return globalState.UNCHANGED;\n      }\n      newValue = change.newValue;\n    }\n    // apply modifier\n    newValue = this.enhancer(newValue, this.value_, this.name_);\n    return this.equals(this.value_, newValue) ? globalState.UNCHANGED : newValue;\n  };\n  _proto.setNewValue_ = function setNewValue_(newValue) {\n    var oldValue = this.value_;\n    this.value_ = newValue;\n    this.reportChanged();\n    if (hasListeners(this)) {\n      notifyListeners(this, {\n        type: UPDATE,\n        object: this,\n        newValue: newValue,\n        oldValue: oldValue\n      });\n    }\n  };\n  _proto.get = function get() {\n    this.reportObserved();\n    return this.dehanceValue(this.value_);\n  };\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    if (fireImmediately) {\n      listener({\n        observableKind: \"value\",\n        debugObjectName: this.name_,\n        object: this,\n        type: UPDATE,\n        newValue: this.value_,\n        oldValue: undefined\n      });\n    }\n    return registerListener(this, listener);\n  };\n  _proto.raw = function raw() {\n    // used by MST ot get undehanced value\n    return this.value_;\n  };\n  _proto.toJSON = function toJSON() {\n    return this.get();\n  };\n  _proto.toString = function toString() {\n    return this.name_ + \"[\" + this.value_ + \"]\";\n  };\n  _proto.valueOf = function valueOf() {\n    return toPrimitive(this.get());\n  };\n  _proto[Symbol.toPrimitive] = function () {\n    return this.valueOf();\n  };\n  return ObservableValue;\n}(Atom);\nvar isObservableValue = /*#__PURE__*/createInstanceofPredicate(\"ObservableValue\", ObservableValue);\n\n/**\n * A node in the state dependency root that observes other nodes, and can be observed itself.\n *\n * ComputedValue will remember the result of the computation for the duration of the batch, or\n * while being observed.\n *\n * During this time it will recompute only when one of its direct dependencies changed,\n * but only when it is being accessed with `ComputedValue.get()`.\n *\n * Implementation description:\n * 1. First time it's being accessed it will compute and remember result\n *    give back remembered result until 2. happens\n * 2. First time any deep dependency change, propagate POSSIBLY_STALE to all observers, wait for 3.\n * 3. When it's being accessed, recompute if any shallow dependency changed.\n *    if result changed: propagate STALE to all observers, that were POSSIBLY_STALE from the last step.\n *    go to step 2. either way\n *\n * If at any point it's outside batch and it isn't observed: reset everything and go to 1.\n */\nvar ComputedValue = /*#__PURE__*/function () {\n  /**\n   * Create a new computed value based on a function expression.\n   *\n   * The `name` property is for debug purposes only.\n   *\n   * The `equals` property specifies the comparer function to use to determine if a newly produced\n   * value differs from the previous value. Two comparers are provided in the library; `defaultComparer`\n   * compares based on identity comparison (===), and `structuralComparer` deeply compares the structure.\n   * Structural comparison can be convenient if you always produce a new aggregated object and\n   * don't want to notify observers if it is structurally the same.\n   * This is useful for working with vectors, mouse coordinates etc.\n   */\n  function ComputedValue(options) {\n    this.dependenciesState_ = IDerivationState_.NOT_TRACKING_;\n    this.observing_ = [];\n    // nodes we are looking at. Our value depends on these nodes\n    this.newObserving_ = null;\n    // during tracking it's an array with new observed observers\n    this.observers_ = new Set();\n    this.runId_ = 0;\n    this.lastAccessedBy_ = 0;\n    this.lowestObserverState_ = IDerivationState_.UP_TO_DATE_;\n    this.unboundDepsCount_ = 0;\n    this.value_ = new CaughtException(null);\n    this.name_ = void 0;\n    this.triggeredBy_ = void 0;\n    this.flags_ = 0;\n    this.derivation = void 0;\n    // N.B: unminified as it is used by MST\n    this.setter_ = void 0;\n    this.isTracing_ = TraceMode.NONE;\n    this.scope_ = void 0;\n    this.equals_ = void 0;\n    this.requiresReaction_ = void 0;\n    this.keepAlive_ = void 0;\n    this.onBOL = void 0;\n    this.onBUOL = void 0;\n    if (!options.get) {\n      die(31);\n    }\n    this.derivation = options.get;\n    this.name_ = options.name || (process.env.NODE_ENV !== \"production\" ? \"ComputedValue@\" + getNextId() : \"ComputedValue\");\n    if (options.set) {\n      this.setter_ = createAction(process.env.NODE_ENV !== \"production\" ? this.name_ + \"-setter\" : \"ComputedValue-setter\", options.set);\n    }\n    this.equals_ = options.equals || (options.compareStructural || options.struct ? comparer.structural : comparer[\"default\"]);\n    this.scope_ = options.context;\n    this.requiresReaction_ = options.requiresReaction;\n    this.keepAlive_ = !!options.keepAlive;\n  }\n  var _proto = ComputedValue.prototype;\n  _proto.onBecomeStale_ = function onBecomeStale_() {\n    propagateMaybeChanged(this);\n  };\n  _proto.onBO = function onBO() {\n    if (this.onBOL) {\n      this.onBOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  };\n  _proto.onBUO = function onBUO() {\n    if (this.onBUOL) {\n      this.onBUOL.forEach(function (listener) {\n        return listener();\n      });\n    }\n  }\n  // to check for cycles\n  ;\n  /**\n   * Returns the current value of this computed value.\n   * Will evaluate its computation first if needed.\n   */\n  _proto.get = function get() {\n    if (this.isComputing) {\n      die(32, this.name_, this.derivation);\n    }\n    if (globalState.inBatch === 0 &&\n    // !globalState.trackingDerivatpion &&\n    this.observers_.size === 0 && !this.keepAlive_) {\n      if (shouldCompute(this)) {\n        this.warnAboutUntrackedRead_();\n        startBatch(); // See perf test 'computed memoization'\n        this.value_ = this.computeValue_(false);\n        endBatch();\n      }\n    } else {\n      reportObserved(this);\n      if (shouldCompute(this)) {\n        var prevTrackingContext = globalState.trackingContext;\n        if (this.keepAlive_ && !prevTrackingContext) {\n          globalState.trackingContext = this;\n        }\n        if (this.trackAndCompute()) {\n          propagateChangeConfirmed(this);\n        }\n        globalState.trackingContext = prevTrackingContext;\n      }\n    }\n    var result = this.value_;\n    if (isCaughtException(result)) {\n      throw result.cause;\n    }\n    return result;\n  };\n  _proto.set = function set(value) {\n    if (this.setter_) {\n      if (this.isRunningSetter) {\n        die(33, this.name_);\n      }\n      this.isRunningSetter = true;\n      try {\n        this.setter_.call(this.scope_, value);\n      } finally {\n        this.isRunningSetter = false;\n      }\n    } else {\n      die(34, this.name_);\n    }\n  };\n  _proto.trackAndCompute = function trackAndCompute() {\n    // N.B: unminified as it is used by MST\n    var oldValue = this.value_;\n    var wasSuspended = /* see #1208 */this.dependenciesState_ === IDerivationState_.NOT_TRACKING_;\n    var newValue = this.computeValue_(true);\n    var changed = wasSuspended || isCaughtException(oldValue) || isCaughtException(newValue) || !this.equals_(oldValue, newValue);\n    if (changed) {\n      this.value_ = newValue;\n      if (process.env.NODE_ENV !== \"production\" && isSpyEnabled()) {\n        spyReport({\n          observableKind: \"computed\",\n          debugObjectName: this.name_,\n          object: this.scope_,\n          type: \"update\",\n          oldValue: oldValue,\n          newValue: newValue\n        });\n      }\n    }\n    return changed;\n  };\n  _proto.computeValue_ = function computeValue_(track) {\n    this.isComputing = true;\n    // don't allow state changes during computation\n    var prev = allowStateChangesStart(false);\n    var res;\n    if (track) {\n      res = trackDerivedFunction(this, this.derivation, this.scope_);\n    } else {\n      if (globalState.disableErrorBoundaries === true) {\n        res = this.derivation.call(this.scope_);\n      } else {\n        try {\n          res = this.derivation.call(this.scope_);\n        } catch (e) {\n          res = new CaughtException(e);\n        }\n      }\n    }\n    allowStateChangesEnd(prev);\n    this.isComputing = false;\n    return res;\n  };\n  _proto.suspend_ = function suspend_() {\n    if (!this.keepAlive_) {\n      clearObserving(this);\n      this.value_ = undefined; // don't hold on to computed value!\n      if (process.env.NODE_ENV !== \"production\" && this.isTracing_ !== TraceMode.NONE) {\n        console.log(\"[mobx.trace] Computed value '\" + this.name_ + \"' was suspended and it will recompute on the next access.\");\n      }\n    }\n  };\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    var _this = this;\n    var firstTime = true;\n    var prevValue = undefined;\n    return autorun(function () {\n      // TODO: why is this in a different place than the spyReport() function? in all other observables it's called in the same place\n      var newValue = _this.get();\n      if (!firstTime || fireImmediately) {\n        var prevU = untrackedStart();\n        listener({\n          observableKind: \"computed\",\n          debugObjectName: _this.name_,\n          type: UPDATE,\n          object: _this,\n          newValue: newValue,\n          oldValue: prevValue\n        });\n        untrackedEnd(prevU);\n      }\n      firstTime = false;\n      prevValue = newValue;\n    });\n  };\n  _proto.warnAboutUntrackedRead_ = function warnAboutUntrackedRead_() {\n    if (!(process.env.NODE_ENV !== \"production\")) {\n      return;\n    }\n    if (this.isTracing_ !== TraceMode.NONE) {\n      console.log(\"[mobx.trace] Computed value '\" + this.name_ + \"' is being read outside a reactive context. Doing a full recompute.\");\n    }\n    if (typeof this.requiresReaction_ === \"boolean\" ? this.requiresReaction_ : globalState.computedRequiresReaction) {\n      console.warn(\"[mobx] Computed value '\" + this.name_ + \"' is being read outside a reactive context. Doing a full recompute.\");\n    }\n  };\n  _proto.toString = function toString() {\n    return this.name_ + \"[\" + this.derivation.toString() + \"]\";\n  };\n  _proto.valueOf = function valueOf() {\n    return toPrimitive(this.get());\n  };\n  _proto[Symbol.toPrimitive] = function () {\n    return this.valueOf();\n  };\n  return _createClass(ComputedValue, [{\n    key: \"isComputing\",\n    get: function get() {\n      return getFlag(this.flags_, ComputedValue.isComputingMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, ComputedValue.isComputingMask_, newValue);\n    }\n  }, {\n    key: \"isRunningSetter\",\n    get: function get() {\n      return getFlag(this.flags_, ComputedValue.isRunningSetterMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, ComputedValue.isRunningSetterMask_, newValue);\n    }\n  }, {\n    key: \"isBeingObserved\",\n    get: function get() {\n      return getFlag(this.flags_, ComputedValue.isBeingObservedMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, ComputedValue.isBeingObservedMask_, newValue);\n    }\n  }, {\n    key: \"isPendingUnobservation\",\n    get: function get() {\n      return getFlag(this.flags_, ComputedValue.isPendingUnobservationMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, ComputedValue.isPendingUnobservationMask_, newValue);\n    }\n  }, {\n    key: \"diffValue\",\n    get: function get() {\n      return getFlag(this.flags_, ComputedValue.diffValueMask_) ? 1 : 0;\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, ComputedValue.diffValueMask_, newValue === 1 ? true : false);\n    }\n  }]);\n}();\nComputedValue.isComputingMask_ = 1;\nComputedValue.isRunningSetterMask_ = 2;\nComputedValue.isBeingObservedMask_ = 4;\nComputedValue.isPendingUnobservationMask_ = 8;\nComputedValue.diffValueMask_ = 16;\nvar isComputedValue = /*#__PURE__*/createInstanceofPredicate(\"ComputedValue\", ComputedValue);\n\nvar IDerivationState_;\n(function (IDerivationState_) {\n  // before being run or (outside batch and not being observed)\n  // at this point derivation is not holding any data about dependency tree\n  IDerivationState_[IDerivationState_[\"NOT_TRACKING_\"] = -1] = \"NOT_TRACKING_\";\n  // no shallow dependency changed since last computation\n  // won't recalculate derivation\n  // this is what makes mobx fast\n  IDerivationState_[IDerivationState_[\"UP_TO_DATE_\"] = 0] = \"UP_TO_DATE_\";\n  // some deep dependency changed, but don't know if shallow dependency changed\n  // will require to check first if UP_TO_DATE or POSSIBLY_STALE\n  // currently only ComputedValue will propagate POSSIBLY_STALE\n  //\n  // having this state is second big optimization:\n  // don't have to recompute on every dependency change, but only when it's needed\n  IDerivationState_[IDerivationState_[\"POSSIBLY_STALE_\"] = 1] = \"POSSIBLY_STALE_\";\n  // A shallow dependency has changed since last computation and the derivation\n  // will need to recompute when it's needed next.\n  IDerivationState_[IDerivationState_[\"STALE_\"] = 2] = \"STALE_\";\n})(IDerivationState_ || (IDerivationState_ = {}));\nvar TraceMode;\n(function (TraceMode) {\n  TraceMode[TraceMode[\"NONE\"] = 0] = \"NONE\";\n  TraceMode[TraceMode[\"LOG\"] = 1] = \"LOG\";\n  TraceMode[TraceMode[\"BREAK\"] = 2] = \"BREAK\";\n})(TraceMode || (TraceMode = {}));\nvar CaughtException = function CaughtException(cause) {\n  this.cause = void 0;\n  this.cause = cause;\n  // Empty\n};\nfunction isCaughtException(e) {\n  return e instanceof CaughtException;\n}\n/**\n * Finds out whether any dependency of the derivation has actually changed.\n * If dependenciesState is 1 then it will recalculate dependencies,\n * if any dependency changed it will propagate it by changing dependenciesState to 2.\n *\n * By iterating over the dependencies in the same order that they were reported and\n * stopping on the first change, all the recalculations are only called for ComputedValues\n * that will be tracked by derivation. That is because we assume that if the first x\n * dependencies of the derivation doesn't change then the derivation should run the same way\n * up until accessing x-th dependency.\n */\nfunction shouldCompute(derivation) {\n  switch (derivation.dependenciesState_) {\n    case IDerivationState_.UP_TO_DATE_:\n      return false;\n    case IDerivationState_.NOT_TRACKING_:\n    case IDerivationState_.STALE_:\n      return true;\n    case IDerivationState_.POSSIBLY_STALE_:\n      {\n        // state propagation can occur outside of action/reactive context #2195\n        var prevAllowStateReads = allowStateReadsStart(true);\n        var prevUntracked = untrackedStart(); // no need for those computeds to be reported, they will be picked up in trackDerivedFunction.\n        var obs = derivation.observing_,\n          l = obs.length;\n        for (var i = 0; i < l; i++) {\n          var obj = obs[i];\n          if (isComputedValue(obj)) {\n            if (globalState.disableErrorBoundaries) {\n              obj.get();\n            } else {\n              try {\n                obj.get();\n              } catch (e) {\n                // we are not interested in the value *or* exception at this moment, but if there is one, notify all\n                untrackedEnd(prevUntracked);\n                allowStateReadsEnd(prevAllowStateReads);\n                return true;\n              }\n            }\n            // if ComputedValue `obj` actually changed it will be computed and propagated to its observers.\n            // and `derivation` is an observer of `obj`\n            // invariantShouldCompute(derivation)\n            if (derivation.dependenciesState_ === IDerivationState_.STALE_) {\n              untrackedEnd(prevUntracked);\n              allowStateReadsEnd(prevAllowStateReads);\n              return true;\n            }\n          }\n        }\n        changeDependenciesStateTo0(derivation);\n        untrackedEnd(prevUntracked);\n        allowStateReadsEnd(prevAllowStateReads);\n        return false;\n      }\n  }\n}\nfunction isComputingDerivation() {\n  return globalState.trackingDerivation !== null; // filter out actions inside computations\n}\nfunction checkIfStateModificationsAreAllowed(atom) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n  var hasObservers = atom.observers_.size > 0;\n  // Should not be possible to change observed state outside strict mode, except during initialization, see #563\n  if (!globalState.allowStateChanges && (hasObservers || globalState.enforceActions === \"always\")) {\n    console.warn(\"[MobX] \" + (globalState.enforceActions ? \"Since strict-mode is enabled, changing (observed) observable values without using an action is not allowed. Tried to modify: \" : \"Side effects like changing state are not allowed at this point. Are you trying to modify state from, for example, a computed value or the render function of a React component? You can wrap side effects in 'runInAction' (or decorate functions with 'action') if needed. Tried to modify: \") + atom.name_);\n  }\n}\nfunction checkIfStateReadsAreAllowed(observable) {\n  if (process.env.NODE_ENV !== \"production\" && !globalState.allowStateReads && globalState.observableRequiresReaction) {\n    console.warn(\"[mobx] Observable '\" + observable.name_ + \"' being read outside a reactive context.\");\n  }\n}\n/**\n * Executes the provided function `f` and tracks which observables are being accessed.\n * The tracking information is stored on the `derivation` object and the derivation is registered\n * as observer of any of the accessed observables.\n */\nfunction trackDerivedFunction(derivation, f, context) {\n  var prevAllowStateReads = allowStateReadsStart(true);\n  changeDependenciesStateTo0(derivation);\n  // Preallocate array; will be trimmed by bindDependencies.\n  derivation.newObserving_ = new Array(\n  // Reserve constant space for initial dependencies, dynamic space otherwise.\n  // See https://github.com/mobxjs/mobx/pull/3833\n  derivation.runId_ === 0 ? 100 : derivation.observing_.length);\n  derivation.unboundDepsCount_ = 0;\n  derivation.runId_ = ++globalState.runId;\n  var prevTracking = globalState.trackingDerivation;\n  globalState.trackingDerivation = derivation;\n  globalState.inBatch++;\n  var result;\n  if (globalState.disableErrorBoundaries === true) {\n    result = f.call(context);\n  } else {\n    try {\n      result = f.call(context);\n    } catch (e) {\n      result = new CaughtException(e);\n    }\n  }\n  globalState.inBatch--;\n  globalState.trackingDerivation = prevTracking;\n  bindDependencies(derivation);\n  warnAboutDerivationWithoutDependencies(derivation);\n  allowStateReadsEnd(prevAllowStateReads);\n  return result;\n}\nfunction warnAboutDerivationWithoutDependencies(derivation) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n  if (derivation.observing_.length !== 0) {\n    return;\n  }\n  if (typeof derivation.requiresObservable_ === \"boolean\" ? derivation.requiresObservable_ : globalState.reactionRequiresObservable) {\n    console.warn(\"[mobx] Derivation '\" + derivation.name_ + \"' is created/updated without reading any observable value.\");\n  }\n}\n/**\n * diffs newObserving with observing.\n * update observing to be newObserving with unique observables\n * notify observers that become observed/unobserved\n */\nfunction bindDependencies(derivation) {\n  // invariant(derivation.dependenciesState !== IDerivationState.NOT_TRACKING, \"INTERNAL ERROR bindDependencies expects derivation.dependenciesState !== -1\");\n  var prevObserving = derivation.observing_;\n  var observing = derivation.observing_ = derivation.newObserving_;\n  var lowestNewObservingDerivationState = IDerivationState_.UP_TO_DATE_;\n  // Go through all new observables and check diffValue: (this list can contain duplicates):\n  //   0: first occurrence, change to 1 and keep it\n  //   1: extra occurrence, drop it\n  var i0 = 0,\n    l = derivation.unboundDepsCount_;\n  for (var i = 0; i < l; i++) {\n    var dep = observing[i];\n    if (dep.diffValue === 0) {\n      dep.diffValue = 1;\n      if (i0 !== i) {\n        observing[i0] = dep;\n      }\n      i0++;\n    }\n    // Upcast is 'safe' here, because if dep is IObservable, `dependenciesState` will be undefined,\n    // not hitting the condition\n    if (dep.dependenciesState_ > lowestNewObservingDerivationState) {\n      lowestNewObservingDerivationState = dep.dependenciesState_;\n    }\n  }\n  observing.length = i0;\n  derivation.newObserving_ = null; // newObserving shouldn't be needed outside tracking (statement moved down to work around FF bug, see #614)\n  // Go through all old observables and check diffValue: (it is unique after last bindDependencies)\n  //   0: it's not in new observables, unobserve it\n  //   1: it keeps being observed, don't want to notify it. change to 0\n  l = prevObserving.length;\n  while (l--) {\n    var _dep = prevObserving[l];\n    if (_dep.diffValue === 0) {\n      removeObserver(_dep, derivation);\n    }\n    _dep.diffValue = 0;\n  }\n  // Go through all new observables and check diffValue: (now it should be unique)\n  //   0: it was set to 0 in last loop. don't need to do anything.\n  //   1: it wasn't observed, let's observe it. set back to 0\n  while (i0--) {\n    var _dep2 = observing[i0];\n    if (_dep2.diffValue === 1) {\n      _dep2.diffValue = 0;\n      addObserver(_dep2, derivation);\n    }\n  }\n  // Some new observed derivations may become stale during this derivation computation\n  // so they have had no chance to propagate staleness (#916)\n  if (lowestNewObservingDerivationState !== IDerivationState_.UP_TO_DATE_) {\n    derivation.dependenciesState_ = lowestNewObservingDerivationState;\n    derivation.onBecomeStale_();\n  }\n}\nfunction clearObserving(derivation) {\n  // invariant(globalState.inBatch > 0, \"INTERNAL ERROR clearObserving should be called only inside batch\");\n  var obs = derivation.observing_;\n  derivation.observing_ = [];\n  var i = obs.length;\n  while (i--) {\n    removeObserver(obs[i], derivation);\n  }\n  derivation.dependenciesState_ = IDerivationState_.NOT_TRACKING_;\n}\nfunction untracked(action) {\n  var prev = untrackedStart();\n  try {\n    return action();\n  } finally {\n    untrackedEnd(prev);\n  }\n}\nfunction untrackedStart() {\n  var prev = globalState.trackingDerivation;\n  globalState.trackingDerivation = null;\n  return prev;\n}\nfunction untrackedEnd(prev) {\n  globalState.trackingDerivation = prev;\n}\nfunction allowStateReadsStart(allowStateReads) {\n  var prev = globalState.allowStateReads;\n  globalState.allowStateReads = allowStateReads;\n  return prev;\n}\nfunction allowStateReadsEnd(prev) {\n  globalState.allowStateReads = prev;\n}\n/**\n * needed to keep `lowestObserverState` correct. when changing from (2 or 1) to 0\n *\n */\nfunction changeDependenciesStateTo0(derivation) {\n  if (derivation.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n    return;\n  }\n  derivation.dependenciesState_ = IDerivationState_.UP_TO_DATE_;\n  var obs = derivation.observing_;\n  var i = obs.length;\n  while (i--) {\n    obs[i].lowestObserverState_ = IDerivationState_.UP_TO_DATE_;\n  }\n}\n\n/**\n * These values will persist if global state is reset\n */\nvar persistentKeys = [\"mobxGuid\", \"spyListeners\", \"enforceActions\", \"computedRequiresReaction\", \"reactionRequiresObservable\", \"observableRequiresReaction\", \"allowStateReads\", \"disableErrorBoundaries\", \"runId\", \"UNCHANGED\", \"useProxies\"];\nvar MobXGlobals = function MobXGlobals() {\n  /**\n   * MobXGlobals version.\n   * MobX compatiblity with other versions loaded in memory as long as this version matches.\n   * It indicates that the global state still stores similar information\n   *\n   * N.B: this version is unrelated to the package version of MobX, and is only the version of the\n   * internal state storage of MobX, and can be the same across many different package versions\n   */\n  this.version = 6;\n  /**\n   * globally unique token to signal unchanged\n   */\n  this.UNCHANGED = {};\n  /**\n   * Currently running derivation\n   */\n  this.trackingDerivation = null;\n  /**\n   * Currently running reaction. This determines if we currently have a reactive context.\n   * (Tracking derivation is also set for temporal tracking of computed values inside actions,\n   * but trackingReaction can only be set by a form of Reaction)\n   */\n  this.trackingContext = null;\n  /**\n   * Each time a derivation is tracked, it is assigned a unique run-id\n   */\n  this.runId = 0;\n  /**\n   * 'guid' for general purpose. Will be persisted amongst resets.\n   */\n  this.mobxGuid = 0;\n  /**\n   * Are we in a batch block? (and how many of them)\n   */\n  this.inBatch = 0;\n  /**\n   * Observables that don't have observers anymore, and are about to be\n   * suspended, unless somebody else accesses it in the same batch\n   *\n   * @type {IObservable[]}\n   */\n  this.pendingUnobservations = [];\n  /**\n   * List of scheduled, not yet executed, reactions.\n   */\n  this.pendingReactions = [];\n  /**\n   * Are we currently processing reactions?\n   */\n  this.isRunningReactions = false;\n  /**\n   * Is it allowed to change observables at this point?\n   * In general, MobX doesn't allow that when running computations and React.render.\n   * To ensure that those functions stay pure.\n   */\n  this.allowStateChanges = false;\n  /**\n   * Is it allowed to read observables at this point?\n   * Used to hold the state needed for `observableRequiresReaction`\n   */\n  this.allowStateReads = true;\n  /**\n   * If strict mode is enabled, state changes are by default not allowed\n   */\n  this.enforceActions = true;\n  /**\n   * Spy callbacks\n   */\n  this.spyListeners = [];\n  /**\n   * Globally attached error handlers that react specifically to errors in reactions\n   */\n  this.globalReactionErrorHandlers = [];\n  /**\n   * Warn if computed values are accessed outside a reactive context\n   */\n  this.computedRequiresReaction = false;\n  /**\n   * (Experimental)\n   * Warn if you try to create to derivation / reactive context without accessing any observable.\n   */\n  this.reactionRequiresObservable = false;\n  /**\n   * (Experimental)\n   * Warn if observables are accessed outside a reactive context\n   */\n  this.observableRequiresReaction = false;\n  /*\n   * Don't catch and rethrow exceptions. This is useful for inspecting the state of\n   * the stack when an exception occurs while debugging.\n   */\n  this.disableErrorBoundaries = false;\n  /*\n   * If true, we are already handling an exception in an action. Any errors in reactions should be suppressed, as\n   * they are not the cause, see: https://github.com/mobxjs/mobx/issues/1836\n   */\n  this.suppressReactionErrors = false;\n  this.useProxies = true;\n  /*\n   * print warnings about code that would fail if proxies weren't available\n   */\n  this.verifyProxies = false;\n  /**\n   * False forces all object's descriptors to\n   * writable: true\n   * configurable: true\n   */\n  this.safeDescriptors = true;\n};\nvar canMergeGlobalState = true;\nvar isolateCalled = false;\nvar globalState = /*#__PURE__*/function () {\n  var global = /*#__PURE__*/getGlobal();\n  if (global.__mobxInstanceCount > 0 && !global.__mobxGlobals) {\n    canMergeGlobalState = false;\n  }\n  if (global.__mobxGlobals && global.__mobxGlobals.version !== new MobXGlobals().version) {\n    canMergeGlobalState = false;\n  }\n  if (!canMergeGlobalState) {\n    // Because this is a IIFE we need to let isolateCalled a chance to change\n    // so we run it after the event loop completed at least 1 iteration\n    setTimeout(function () {\n      if (!isolateCalled) {\n        die(35);\n      }\n    }, 1);\n    return new MobXGlobals();\n  } else if (global.__mobxGlobals) {\n    global.__mobxInstanceCount += 1;\n    if (!global.__mobxGlobals.UNCHANGED) {\n      global.__mobxGlobals.UNCHANGED = {};\n    } // make merge backward compatible\n    return global.__mobxGlobals;\n  } else {\n    global.__mobxInstanceCount = 1;\n    return global.__mobxGlobals = /*#__PURE__*/new MobXGlobals();\n  }\n}();\nfunction isolateGlobalState() {\n  if (globalState.pendingReactions.length || globalState.inBatch || globalState.isRunningReactions) {\n    die(36);\n  }\n  isolateCalled = true;\n  if (canMergeGlobalState) {\n    var global = getGlobal();\n    if (--global.__mobxInstanceCount === 0) {\n      global.__mobxGlobals = undefined;\n    }\n    globalState = new MobXGlobals();\n  }\n}\nfunction getGlobalState() {\n  return globalState;\n}\n/**\n * For testing purposes only; this will break the internal state of existing observables,\n * but can be used to get back at a stable state after throwing errors\n */\nfunction resetGlobalState() {\n  var defaultGlobals = new MobXGlobals();\n  for (var key in defaultGlobals) {\n    if (persistentKeys.indexOf(key) === -1) {\n      globalState[key] = defaultGlobals[key];\n    }\n  }\n  globalState.allowStateChanges = !globalState.enforceActions;\n}\n\nfunction hasObservers(observable) {\n  return observable.observers_ && observable.observers_.size > 0;\n}\nfunction getObservers(observable) {\n  return observable.observers_;\n}\n// function invariantObservers(observable: IObservable) {\n//     const list = observable.observers\n//     const map = observable.observersIndexes\n//     const l = list.length\n//     for (let i = 0; i < l; i++) {\n//         const id = list[i].__mapid\n//         if (i) {\n//             invariant(map[id] === i, \"INTERNAL ERROR maps derivation.__mapid to index in list\") // for performance\n//         } else {\n//             invariant(!(id in map), \"INTERNAL ERROR observer on index 0 shouldn't be held in map.\") // for performance\n//         }\n//     }\n//     invariant(\n//         list.length === 0 || Object.keys(map).length === list.length - 1,\n//         \"INTERNAL ERROR there is no junk in map\"\n//     )\n// }\nfunction addObserver(observable, node) {\n  // invariant(node.dependenciesState !== -1, \"INTERNAL ERROR, can add only dependenciesState !== -1\");\n  // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR add already added node\");\n  // invariantObservers(observable);\n  observable.observers_.add(node);\n  if (observable.lowestObserverState_ > node.dependenciesState_) {\n    observable.lowestObserverState_ = node.dependenciesState_;\n  }\n  // invariantObservers(observable);\n  // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR didn't add node\");\n}\nfunction removeObserver(observable, node) {\n  // invariant(globalState.inBatch > 0, \"INTERNAL ERROR, remove should be called only inside batch\");\n  // invariant(observable._observers.indexOf(node) !== -1, \"INTERNAL ERROR remove already removed node\");\n  // invariantObservers(observable);\n  observable.observers_[\"delete\"](node);\n  if (observable.observers_.size === 0) {\n    // deleting last observer\n    queueForUnobservation(observable);\n  }\n  // invariantObservers(observable);\n  // invariant(observable._observers.indexOf(node) === -1, \"INTERNAL ERROR remove already removed node2\");\n}\nfunction queueForUnobservation(observable) {\n  if (observable.isPendingUnobservation === false) {\n    // invariant(observable._observers.length === 0, \"INTERNAL ERROR, should only queue for unobservation unobserved observables\");\n    observable.isPendingUnobservation = true;\n    globalState.pendingUnobservations.push(observable);\n  }\n}\n/**\n * Batch starts a transaction, at least for purposes of memoizing ComputedValues when nothing else does.\n * During a batch `onBecomeUnobserved` will be called at most once per observable.\n * Avoids unnecessary recalculations.\n */\nfunction startBatch() {\n  globalState.inBatch++;\n}\nfunction endBatch() {\n  if (--globalState.inBatch === 0) {\n    runReactions();\n    // the batch is actually about to finish, all unobserving should happen here.\n    var list = globalState.pendingUnobservations;\n    for (var i = 0; i < list.length; i++) {\n      var observable = list[i];\n      observable.isPendingUnobservation = false;\n      if (observable.observers_.size === 0) {\n        if (observable.isBeingObserved) {\n          // if this observable had reactive observers, trigger the hooks\n          observable.isBeingObserved = false;\n          observable.onBUO();\n        }\n        if (observable instanceof ComputedValue) {\n          // computed values are automatically teared down when the last observer leaves\n          // this process happens recursively, this computed might be the last observabe of another, etc..\n          observable.suspend_();\n        }\n      }\n    }\n    globalState.pendingUnobservations = [];\n  }\n}\nfunction reportObserved(observable) {\n  checkIfStateReadsAreAllowed(observable);\n  var derivation = globalState.trackingDerivation;\n  if (derivation !== null) {\n    /**\n     * Simple optimization, give each derivation run an unique id (runId)\n     * Check if last time this observable was accessed the same runId is used\n     * if this is the case, the relation is already known\n     */\n    if (derivation.runId_ !== observable.lastAccessedBy_) {\n      observable.lastAccessedBy_ = derivation.runId_;\n      // Tried storing newObserving, or observing, or both as Set, but performance didn't come close...\n      derivation.newObserving_[derivation.unboundDepsCount_++] = observable;\n      if (!observable.isBeingObserved && globalState.trackingContext) {\n        observable.isBeingObserved = true;\n        observable.onBO();\n      }\n    }\n    return observable.isBeingObserved;\n  } else if (observable.observers_.size === 0 && globalState.inBatch > 0) {\n    queueForUnobservation(observable);\n  }\n  return false;\n}\n// function invariantLOS(observable: IObservable, msg: string) {\n//     // it's expensive so better not run it in produciton. but temporarily helpful for testing\n//     const min = getObservers(observable).reduce((a, b) => Math.min(a, b.dependenciesState), 2)\n//     if (min >= observable.lowestObserverState) return // <- the only assumption about `lowestObserverState`\n//     throw new Error(\n//         \"lowestObserverState is wrong for \" +\n//             msg +\n//             \" because \" +\n//             min +\n//             \" < \" +\n//             observable.lowestObserverState\n//     )\n// }\n/**\n * NOTE: current propagation mechanism will in case of self reruning autoruns behave unexpectedly\n * It will propagate changes to observers from previous run\n * It's hard or maybe impossible (with reasonable perf) to get it right with current approach\n * Hopefully self reruning autoruns aren't a feature people should depend on\n * Also most basic use cases should be ok\n */\n// Called by Atom when its value changes\nfunction propagateChanged(observable) {\n  // invariantLOS(observable, \"changed start\");\n  if (observable.lowestObserverState_ === IDerivationState_.STALE_) {\n    return;\n  }\n  observable.lowestObserverState_ = IDerivationState_.STALE_;\n  // Ideally we use for..of here, but the downcompiled version is really slow...\n  observable.observers_.forEach(function (d) {\n    if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n      if (process.env.NODE_ENV !== \"production\" && d.isTracing_ !== TraceMode.NONE) {\n        logTraceInfo(d, observable);\n      }\n      d.onBecomeStale_();\n    }\n    d.dependenciesState_ = IDerivationState_.STALE_;\n  });\n  // invariantLOS(observable, \"changed end\");\n}\n// Called by ComputedValue when it recalculate and its value changed\nfunction propagateChangeConfirmed(observable) {\n  // invariantLOS(observable, \"confirmed start\");\n  if (observable.lowestObserverState_ === IDerivationState_.STALE_) {\n    return;\n  }\n  observable.lowestObserverState_ = IDerivationState_.STALE_;\n  observable.observers_.forEach(function (d) {\n    if (d.dependenciesState_ === IDerivationState_.POSSIBLY_STALE_) {\n      d.dependenciesState_ = IDerivationState_.STALE_;\n      if (process.env.NODE_ENV !== \"production\" && d.isTracing_ !== TraceMode.NONE) {\n        logTraceInfo(d, observable);\n      }\n    } else if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_ // this happens during computing of `d`, just keep lowestObserverState up to date.\n    ) {\n      observable.lowestObserverState_ = IDerivationState_.UP_TO_DATE_;\n    }\n  });\n  // invariantLOS(observable, \"confirmed end\");\n}\n// Used by computed when its dependency changed, but we don't wan't to immediately recompute.\nfunction propagateMaybeChanged(observable) {\n  // invariantLOS(observable, \"maybe start\");\n  if (observable.lowestObserverState_ !== IDerivationState_.UP_TO_DATE_) {\n    return;\n  }\n  observable.lowestObserverState_ = IDerivationState_.POSSIBLY_STALE_;\n  observable.observers_.forEach(function (d) {\n    if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) {\n      d.dependenciesState_ = IDerivationState_.POSSIBLY_STALE_;\n      d.onBecomeStale_();\n    }\n  });\n  // invariantLOS(observable, \"maybe end\");\n}\nfunction logTraceInfo(derivation, observable) {\n  console.log(\"[mobx.trace] '\" + derivation.name_ + \"' is invalidated due to a change in: '\" + observable.name_ + \"'\");\n  if (derivation.isTracing_ === TraceMode.BREAK) {\n    var lines = [];\n    printDepTree(getDependencyTree(derivation), lines, 1);\n    // prettier-ignore\n    new Function(\"debugger;\\n/*\\nTracing '\" + derivation.name_ + \"'\\n\\nYou are entering this break point because derivation '\" + derivation.name_ + \"' is being traced and '\" + observable.name_ + \"' is now forcing it to update.\\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\\n\\n\" + (derivation instanceof ComputedValue ? derivation.derivation.toString().replace(/[*]\\//g, \"/\") : \"\") + \"\\n\\nThe dependencies for this derivation are:\\n\\n\" + lines.join(\"\\n\") + \"\\n*/\\n    \")();\n  }\n}\nfunction printDepTree(tree, lines, depth) {\n  if (lines.length >= 1000) {\n    lines.push(\"(and many more)\");\n    return;\n  }\n  lines.push(\"\" + \"\\t\".repeat(depth - 1) + tree.name);\n  if (tree.dependencies) {\n    tree.dependencies.forEach(function (child) {\n      return printDepTree(child, lines, depth + 1);\n    });\n  }\n}\n\nvar Reaction = /*#__PURE__*/function () {\n  function Reaction(name_, onInvalidate_, errorHandler_, requiresObservable_) {\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"Reaction@\" + getNextId() : \"Reaction\";\n    }\n    this.name_ = void 0;\n    this.onInvalidate_ = void 0;\n    this.errorHandler_ = void 0;\n    this.requiresObservable_ = void 0;\n    this.observing_ = [];\n    // nodes we are looking at. Our value depends on these nodes\n    this.newObserving_ = [];\n    this.dependenciesState_ = IDerivationState_.NOT_TRACKING_;\n    this.runId_ = 0;\n    this.unboundDepsCount_ = 0;\n    this.flags_ = 0;\n    this.isTracing_ = TraceMode.NONE;\n    this.name_ = name_;\n    this.onInvalidate_ = onInvalidate_;\n    this.errorHandler_ = errorHandler_;\n    this.requiresObservable_ = requiresObservable_;\n  }\n  var _proto = Reaction.prototype;\n  _proto.onBecomeStale_ = function onBecomeStale_() {\n    this.schedule_();\n  };\n  _proto.schedule_ = function schedule_() {\n    if (!this.isScheduled) {\n      this.isScheduled = true;\n      globalState.pendingReactions.push(this);\n      runReactions();\n    }\n  }\n  /**\n   * internal, use schedule() if you intend to kick off a reaction\n   */;\n  _proto.runReaction_ = function runReaction_() {\n    if (!this.isDisposed) {\n      startBatch();\n      this.isScheduled = false;\n      var prev = globalState.trackingContext;\n      globalState.trackingContext = this;\n      if (shouldCompute(this)) {\n        this.isTrackPending = true;\n        try {\n          this.onInvalidate_();\n          if (process.env.NODE_ENV !== \"production\" && this.isTrackPending && isSpyEnabled()) {\n            // onInvalidate didn't trigger track right away..\n            spyReport({\n              name: this.name_,\n              type: \"scheduled-reaction\"\n            });\n          }\n        } catch (e) {\n          this.reportExceptionInDerivation_(e);\n        }\n      }\n      globalState.trackingContext = prev;\n      endBatch();\n    }\n  };\n  _proto.track = function track(fn) {\n    if (this.isDisposed) {\n      return;\n      // console.warn(\"Reaction already disposed\") // Note: Not a warning / error in mobx 4 either\n    }\n    startBatch();\n    var notify = isSpyEnabled();\n    var startTime;\n    if (process.env.NODE_ENV !== \"production\" && notify) {\n      startTime = Date.now();\n      spyReportStart({\n        name: this.name_,\n        type: \"reaction\"\n      });\n    }\n    this.isRunning = true;\n    var prevReaction = globalState.trackingContext; // reactions could create reactions...\n    globalState.trackingContext = this;\n    var result = trackDerivedFunction(this, fn, undefined);\n    globalState.trackingContext = prevReaction;\n    this.isRunning = false;\n    this.isTrackPending = false;\n    if (this.isDisposed) {\n      // disposed during last run. Clean up everything that was bound after the dispose call.\n      clearObserving(this);\n    }\n    if (isCaughtException(result)) {\n      this.reportExceptionInDerivation_(result.cause);\n    }\n    if (process.env.NODE_ENV !== \"production\" && notify) {\n      spyReportEnd({\n        time: Date.now() - startTime\n      });\n    }\n    endBatch();\n  };\n  _proto.reportExceptionInDerivation_ = function reportExceptionInDerivation_(error) {\n    var _this = this;\n    if (this.errorHandler_) {\n      this.errorHandler_(error, this);\n      return;\n    }\n    if (globalState.disableErrorBoundaries) {\n      throw error;\n    }\n    var message = process.env.NODE_ENV !== \"production\" ? \"[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '\" + this + \"'\" : \"[mobx] uncaught error in '\" + this + \"'\";\n    if (!globalState.suppressReactionErrors) {\n      console.error(message, error);\n      /** If debugging brought you here, please, read the above message :-). Tnx! */\n    } else if (process.env.NODE_ENV !== \"production\") {\n      console.warn(\"[mobx] (error in reaction '\" + this.name_ + \"' suppressed, fix error of causing action below)\");\n    } // prettier-ignore\n    if (process.env.NODE_ENV !== \"production\" && isSpyEnabled()) {\n      spyReport({\n        type: \"error\",\n        name: this.name_,\n        message: message,\n        error: \"\" + error\n      });\n    }\n    globalState.globalReactionErrorHandlers.forEach(function (f) {\n      return f(error, _this);\n    });\n  };\n  _proto.dispose = function dispose() {\n    if (!this.isDisposed) {\n      this.isDisposed = true;\n      if (!this.isRunning) {\n        // if disposed while running, clean up later. Maybe not optimal, but rare case\n        startBatch();\n        clearObserving(this);\n        endBatch();\n      }\n    }\n  };\n  _proto.getDisposer_ = function getDisposer_(abortSignal) {\n    var _this2 = this;\n    var dispose = function dispose() {\n      _this2.dispose();\n      abortSignal == null || abortSignal.removeEventListener == null || abortSignal.removeEventListener(\"abort\", dispose);\n    };\n    abortSignal == null || abortSignal.addEventListener == null || abortSignal.addEventListener(\"abort\", dispose);\n    dispose[$mobx] = this;\n    return dispose;\n  };\n  _proto.toString = function toString() {\n    return \"Reaction[\" + this.name_ + \"]\";\n  };\n  _proto.trace = function trace$1(enterBreakPoint) {\n    if (enterBreakPoint === void 0) {\n      enterBreakPoint = false;\n    }\n    trace(this, enterBreakPoint);\n  };\n  return _createClass(Reaction, [{\n    key: \"isDisposed\",\n    get: function get() {\n      return getFlag(this.flags_, Reaction.isDisposedMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Reaction.isDisposedMask_, newValue);\n    }\n  }, {\n    key: \"isScheduled\",\n    get: function get() {\n      return getFlag(this.flags_, Reaction.isScheduledMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Reaction.isScheduledMask_, newValue);\n    }\n  }, {\n    key: \"isTrackPending\",\n    get: function get() {\n      return getFlag(this.flags_, Reaction.isTrackPendingMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Reaction.isTrackPendingMask_, newValue);\n    }\n  }, {\n    key: \"isRunning\",\n    get: function get() {\n      return getFlag(this.flags_, Reaction.isRunningMask_);\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Reaction.isRunningMask_, newValue);\n    }\n  }, {\n    key: \"diffValue\",\n    get: function get() {\n      return getFlag(this.flags_, Reaction.diffValueMask_) ? 1 : 0;\n    },\n    set: function set(newValue) {\n      this.flags_ = setFlag(this.flags_, Reaction.diffValueMask_, newValue === 1 ? true : false);\n    }\n  }]);\n}();\nReaction.isDisposedMask_ = 1;\nReaction.isScheduledMask_ = 2;\nReaction.isTrackPendingMask_ = 4;\nReaction.isRunningMask_ = 8;\nReaction.diffValueMask_ = 16;\nfunction onReactionError(handler) {\n  globalState.globalReactionErrorHandlers.push(handler);\n  return function () {\n    var idx = globalState.globalReactionErrorHandlers.indexOf(handler);\n    if (idx >= 0) {\n      globalState.globalReactionErrorHandlers.splice(idx, 1);\n    }\n  };\n}\n/**\n * Magic number alert!\n * Defines within how many times a reaction is allowed to re-trigger itself\n * until it is assumed that this is gonna be a never ending loop...\n */\nvar MAX_REACTION_ITERATIONS = 100;\nvar reactionScheduler = function reactionScheduler(f) {\n  return f();\n};\nfunction runReactions() {\n  // Trampolining, if runReactions are already running, new reactions will be picked up\n  if (globalState.inBatch > 0 || globalState.isRunningReactions) {\n    return;\n  }\n  reactionScheduler(runReactionsHelper);\n}\nfunction runReactionsHelper() {\n  globalState.isRunningReactions = true;\n  var allReactions = globalState.pendingReactions;\n  var iterations = 0;\n  // While running reactions, new reactions might be triggered.\n  // Hence we work with two variables and check whether\n  // we converge to no remaining reactions after a while.\n  while (allReactions.length > 0) {\n    if (++iterations === MAX_REACTION_ITERATIONS) {\n      console.error(process.env.NODE_ENV !== \"production\" ? \"Reaction doesn't converge to a stable state after \" + MAX_REACTION_ITERATIONS + \" iterations.\" + (\" Probably there is a cycle in the reactive function: \" + allReactions[0]) : \"[mobx] cycle in reaction: \" + allReactions[0]);\n      allReactions.splice(0); // clear reactions\n    }\n    var remainingReactions = allReactions.splice(0);\n    for (var i = 0, l = remainingReactions.length; i < l; i++) {\n      remainingReactions[i].runReaction_();\n    }\n  }\n  globalState.isRunningReactions = false;\n}\nvar isReaction = /*#__PURE__*/createInstanceofPredicate(\"Reaction\", Reaction);\nfunction setReactionScheduler(fn) {\n  var baseScheduler = reactionScheduler;\n  reactionScheduler = function reactionScheduler(f) {\n    return fn(function () {\n      return baseScheduler(f);\n    });\n  };\n}\n\nfunction isSpyEnabled() {\n  return process.env.NODE_ENV !== \"production\" && !!globalState.spyListeners.length;\n}\nfunction spyReport(event) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  } // dead code elimination can do the rest\n  if (!globalState.spyListeners.length) {\n    return;\n  }\n  var listeners = globalState.spyListeners;\n  for (var i = 0, l = listeners.length; i < l; i++) {\n    listeners[i](event);\n  }\n}\nfunction spyReportStart(event) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n  var change = _extends({}, event, {\n    spyReportStart: true\n  });\n  spyReport(change);\n}\nvar END_EVENT = {\n  type: \"report-end\",\n  spyReportEnd: true\n};\nfunction spyReportEnd(change) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n  if (change) {\n    spyReport(_extends({}, change, {\n      type: \"report-end\",\n      spyReportEnd: true\n    }));\n  } else {\n    spyReport(END_EVENT);\n  }\n}\nfunction spy(listener) {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    console.warn(\"[mobx.spy] Is a no-op in production builds\");\n    return function () {};\n  } else {\n    globalState.spyListeners.push(listener);\n    return once(function () {\n      globalState.spyListeners = globalState.spyListeners.filter(function (l) {\n        return l !== listener;\n      });\n    });\n  }\n}\n\nvar ACTION = \"action\";\nvar ACTION_BOUND = \"action.bound\";\nvar AUTOACTION = \"autoAction\";\nvar AUTOACTION_BOUND = \"autoAction.bound\";\nvar DEFAULT_ACTION_NAME = \"<unnamed action>\";\nvar actionAnnotation = /*#__PURE__*/createActionAnnotation(ACTION);\nvar actionBoundAnnotation = /*#__PURE__*/createActionAnnotation(ACTION_BOUND, {\n  bound: true\n});\nvar autoActionAnnotation = /*#__PURE__*/createActionAnnotation(AUTOACTION, {\n  autoAction: true\n});\nvar autoActionBoundAnnotation = /*#__PURE__*/createActionAnnotation(AUTOACTION_BOUND, {\n  autoAction: true,\n  bound: true\n});\nfunction createActionFactory(autoAction) {\n  var res = function action(arg1, arg2) {\n    // action(fn() {})\n    if (isFunction(arg1)) {\n      return createAction(arg1.name || DEFAULT_ACTION_NAME, arg1, autoAction);\n    }\n    // action(\"name\", fn() {})\n    if (isFunction(arg2)) {\n      return createAction(arg1, arg2, autoAction);\n    }\n    // @action (2022.3 Decorators)\n    if (is20223Decorator(arg2)) {\n      return (autoAction ? autoActionAnnotation : actionAnnotation).decorate_20223_(arg1, arg2);\n    }\n    // @action\n    if (isStringish(arg2)) {\n      return storeAnnotation(arg1, arg2, autoAction ? autoActionAnnotation : actionAnnotation);\n    }\n    // action(\"name\") & @action(\"name\")\n    if (isStringish(arg1)) {\n      return createDecoratorAnnotation(createActionAnnotation(autoAction ? AUTOACTION : ACTION, {\n        name: arg1,\n        autoAction: autoAction\n      }));\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      die(\"Invalid arguments for `action`\");\n    }\n  };\n  return res;\n}\nvar action = /*#__PURE__*/createActionFactory(false);\nObject.assign(action, actionAnnotation);\nvar autoAction = /*#__PURE__*/createActionFactory(true);\nObject.assign(autoAction, autoActionAnnotation);\naction.bound = /*#__PURE__*/createDecoratorAnnotation(actionBoundAnnotation);\nautoAction.bound = /*#__PURE__*/createDecoratorAnnotation(autoActionBoundAnnotation);\nfunction runInAction(fn) {\n  return executeAction(fn.name || DEFAULT_ACTION_NAME, false, fn, this, undefined);\n}\nfunction isAction(thing) {\n  return isFunction(thing) && thing.isMobxAction === true;\n}\n\n/**\n * Creates a named reactive view and keeps it alive, so that the view is always\n * updated if one of the dependencies changes, even when the view is not further used by something else.\n * @param view The reactive view\n * @returns disposer function, which can be used to stop the view from being updated in the future.\n */\nfunction autorun(view, opts) {\n  var _opts$name, _opts, _opts2, _opts3;\n  if (opts === void 0) {\n    opts = EMPTY_OBJECT;\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(view)) {\n      die(\"Autorun expects a function as first argument\");\n    }\n    if (isAction(view)) {\n      die(\"Autorun does not accept actions since actions are untrackable\");\n    }\n  }\n  var name = (_opts$name = (_opts = opts) == null ? void 0 : _opts.name) != null ? _opts$name : process.env.NODE_ENV !== \"production\" ? view.name || \"Autorun@\" + getNextId() : \"Autorun\";\n  var runSync = !opts.scheduler && !opts.delay;\n  var reaction;\n  if (runSync) {\n    // normal autorun\n    reaction = new Reaction(name, function () {\n      this.track(reactionRunner);\n    }, opts.onError, opts.requiresObservable);\n  } else {\n    var scheduler = createSchedulerFromOptions(opts);\n    // debounced autorun\n    var isScheduled = false;\n    reaction = new Reaction(name, function () {\n      if (!isScheduled) {\n        isScheduled = true;\n        scheduler(function () {\n          isScheduled = false;\n          if (!reaction.isDisposed) {\n            reaction.track(reactionRunner);\n          }\n        });\n      }\n    }, opts.onError, opts.requiresObservable);\n  }\n  function reactionRunner() {\n    view(reaction);\n  }\n  if (!((_opts2 = opts) != null && (_opts2 = _opts2.signal) != null && _opts2.aborted)) {\n    reaction.schedule_();\n  }\n  return reaction.getDisposer_((_opts3 = opts) == null ? void 0 : _opts3.signal);\n}\nvar run = function run(f) {\n  return f();\n};\nfunction createSchedulerFromOptions(opts) {\n  return opts.scheduler ? opts.scheduler : opts.delay ? function (f) {\n    return setTimeout(f, opts.delay);\n  } : run;\n}\nfunction reaction(expression, effect, opts) {\n  var _opts$name2, _opts4, _opts5;\n  if (opts === void 0) {\n    opts = EMPTY_OBJECT;\n  }\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isFunction(expression) || !isFunction(effect)) {\n      die(\"First and second argument to reaction should be functions\");\n    }\n    if (!isPlainObject(opts)) {\n      die(\"Third argument of reactions should be an object\");\n    }\n  }\n  var name = (_opts$name2 = opts.name) != null ? _opts$name2 : process.env.NODE_ENV !== \"production\" ? \"Reaction@\" + getNextId() : \"Reaction\";\n  var effectAction = action(name, opts.onError ? wrapErrorHandler(opts.onError, effect) : effect);\n  var runSync = !opts.scheduler && !opts.delay;\n  var scheduler = createSchedulerFromOptions(opts);\n  var firstTime = true;\n  var isScheduled = false;\n  var value;\n  var equals = opts.compareStructural ? comparer.structural : opts.equals || comparer[\"default\"];\n  var r = new Reaction(name, function () {\n    if (firstTime || runSync) {\n      reactionRunner();\n    } else if (!isScheduled) {\n      isScheduled = true;\n      scheduler(reactionRunner);\n    }\n  }, opts.onError, opts.requiresObservable);\n  function reactionRunner() {\n    isScheduled = false;\n    if (r.isDisposed) {\n      return;\n    }\n    var changed = false;\n    var oldValue = value;\n    r.track(function () {\n      var nextValue = allowStateChanges(false, function () {\n        return expression(r);\n      });\n      changed = firstTime || !equals(value, nextValue);\n      value = nextValue;\n    });\n    if (firstTime && opts.fireImmediately) {\n      effectAction(value, oldValue, r);\n    } else if (!firstTime && changed) {\n      effectAction(value, oldValue, r);\n    }\n    firstTime = false;\n  }\n  if (!((_opts4 = opts) != null && (_opts4 = _opts4.signal) != null && _opts4.aborted)) {\n    r.schedule_();\n  }\n  return r.getDisposer_((_opts5 = opts) == null ? void 0 : _opts5.signal);\n}\nfunction wrapErrorHandler(errorHandler, baseFn) {\n  return function () {\n    try {\n      return baseFn.apply(this, arguments);\n    } catch (e) {\n      errorHandler.call(this, e);\n    }\n  };\n}\n\nvar ON_BECOME_OBSERVED = \"onBO\";\nvar ON_BECOME_UNOBSERVED = \"onBUO\";\nfunction onBecomeObserved(thing, arg2, arg3) {\n  return interceptHook(ON_BECOME_OBSERVED, thing, arg2, arg3);\n}\nfunction onBecomeUnobserved(thing, arg2, arg3) {\n  return interceptHook(ON_BECOME_UNOBSERVED, thing, arg2, arg3);\n}\nfunction interceptHook(hook, thing, arg2, arg3) {\n  var atom = typeof arg3 === \"function\" ? getAtom(thing, arg2) : getAtom(thing);\n  var cb = isFunction(arg3) ? arg3 : arg2;\n  var listenersKey = hook + \"L\";\n  if (atom[listenersKey]) {\n    atom[listenersKey].add(cb);\n  } else {\n    atom[listenersKey] = new Set([cb]);\n  }\n  return function () {\n    var hookListeners = atom[listenersKey];\n    if (hookListeners) {\n      hookListeners[\"delete\"](cb);\n      if (hookListeners.size === 0) {\n        delete atom[listenersKey];\n      }\n    }\n  };\n}\n\nvar NEVER = \"never\";\nvar ALWAYS = \"always\";\nvar OBSERVED = \"observed\";\n// const IF_AVAILABLE = \"ifavailable\"\nfunction configure(options) {\n  if (options.isolateGlobalState === true) {\n    isolateGlobalState();\n  }\n  var useProxies = options.useProxies,\n    enforceActions = options.enforceActions;\n  if (useProxies !== undefined) {\n    globalState.useProxies = useProxies === ALWAYS ? true : useProxies === NEVER ? false : typeof Proxy !== \"undefined\";\n  }\n  if (useProxies === \"ifavailable\") {\n    globalState.verifyProxies = true;\n  }\n  if (enforceActions !== undefined) {\n    var ea = enforceActions === ALWAYS ? ALWAYS : enforceActions === OBSERVED;\n    globalState.enforceActions = ea;\n    globalState.allowStateChanges = ea === true || ea === ALWAYS ? false : true;\n  }\n  [\"computedRequiresReaction\", \"reactionRequiresObservable\", \"observableRequiresReaction\", \"disableErrorBoundaries\", \"safeDescriptors\"].forEach(function (key) {\n    if (key in options) {\n      globalState[key] = !!options[key];\n    }\n  });\n  globalState.allowStateReads = !globalState.observableRequiresReaction;\n  if (process.env.NODE_ENV !== \"production\" && globalState.disableErrorBoundaries === true) {\n    console.warn(\"WARNING: Debug feature only. MobX will NOT recover from errors when `disableErrorBoundaries` is enabled.\");\n  }\n  if (options.reactionScheduler) {\n    setReactionScheduler(options.reactionScheduler);\n  }\n}\n\nfunction extendObservable(target, properties, annotations, options) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (arguments.length > 4) {\n      die(\"'extendObservable' expected 2-4 arguments\");\n    }\n    if (typeof target !== \"object\") {\n      die(\"'extendObservable' expects an object as first argument\");\n    }\n    if (isObservableMap(target)) {\n      die(\"'extendObservable' should not be used on maps, use map.merge instead\");\n    }\n    if (!isPlainObject(properties)) {\n      die(\"'extendObservable' only accepts plain objects as second argument\");\n    }\n    if (isObservable(properties) || isObservable(annotations)) {\n      die(\"Extending an object with another observable (object) is not supported\");\n    }\n  }\n  // Pull descriptors first, so we don't have to deal with props added by administration ($mobx)\n  var descriptors = getOwnPropertyDescriptors(properties);\n  initObservable(function () {\n    var adm = asObservableObject(target, options)[$mobx];\n    ownKeys(descriptors).forEach(function (key) {\n      adm.extend_(key, descriptors[key],\n      // must pass \"undefined\" for { key: undefined }\n      !annotations ? true : key in annotations ? annotations[key] : true);\n    });\n  });\n  return target;\n}\n\nfunction getDependencyTree(thing, property) {\n  return nodeToDependencyTree(getAtom(thing, property));\n}\nfunction nodeToDependencyTree(node) {\n  var result = {\n    name: node.name_\n  };\n  if (node.observing_ && node.observing_.length > 0) {\n    result.dependencies = unique(node.observing_).map(nodeToDependencyTree);\n  }\n  return result;\n}\nfunction getObserverTree(thing, property) {\n  return nodeToObserverTree(getAtom(thing, property));\n}\nfunction nodeToObserverTree(node) {\n  var result = {\n    name: node.name_\n  };\n  if (hasObservers(node)) {\n    result.observers = Array.from(getObservers(node)).map(nodeToObserverTree);\n  }\n  return result;\n}\nfunction unique(list) {\n  return Array.from(new Set(list));\n}\n\nvar generatorId = 0;\nfunction FlowCancellationError() {\n  this.message = \"FLOW_CANCELLED\";\n}\nFlowCancellationError.prototype = /*#__PURE__*/Object.create(Error.prototype);\nfunction isFlowCancellationError(error) {\n  return error instanceof FlowCancellationError;\n}\nvar flowAnnotation = /*#__PURE__*/createFlowAnnotation(\"flow\");\nvar flowBoundAnnotation = /*#__PURE__*/createFlowAnnotation(\"flow.bound\", {\n  bound: true\n});\nvar flow = /*#__PURE__*/Object.assign(function flow(arg1, arg2) {\n  // @flow (2022.3 Decorators)\n  if (is20223Decorator(arg2)) {\n    return flowAnnotation.decorate_20223_(arg1, arg2);\n  }\n  // @flow\n  if (isStringish(arg2)) {\n    return storeAnnotation(arg1, arg2, flowAnnotation);\n  }\n  // flow(fn)\n  if (process.env.NODE_ENV !== \"production\" && arguments.length !== 1) {\n    die(\"Flow expects single argument with generator function\");\n  }\n  var generator = arg1;\n  var name = generator.name || \"<unnamed flow>\";\n  // Implementation based on https://github.com/tj/co/blob/master/index.js\n  var res = function res() {\n    var ctx = this;\n    var args = arguments;\n    var runId = ++generatorId;\n    var gen = action(name + \" - runid: \" + runId + \" - init\", generator).apply(ctx, args);\n    var rejector;\n    var pendingPromise = undefined;\n    var promise = new Promise(function (resolve, reject) {\n      var stepId = 0;\n      rejector = reject;\n      function onFulfilled(res) {\n        pendingPromise = undefined;\n        var ret;\n        try {\n          ret = action(name + \" - runid: \" + runId + \" - yield \" + stepId++, gen.next).call(gen, res);\n        } catch (e) {\n          return reject(e);\n        }\n        next(ret);\n      }\n      function onRejected(err) {\n        pendingPromise = undefined;\n        var ret;\n        try {\n          ret = action(name + \" - runid: \" + runId + \" - yield \" + stepId++, gen[\"throw\"]).call(gen, err);\n        } catch (e) {\n          return reject(e);\n        }\n        next(ret);\n      }\n      function next(ret) {\n        if (isFunction(ret == null ? void 0 : ret.then)) {\n          // an async iterator\n          ret.then(next, reject);\n          return;\n        }\n        if (ret.done) {\n          return resolve(ret.value);\n        }\n        pendingPromise = Promise.resolve(ret.value);\n        return pendingPromise.then(onFulfilled, onRejected);\n      }\n      onFulfilled(undefined); // kick off the process\n    });\n    promise.cancel = action(name + \" - runid: \" + runId + \" - cancel\", function () {\n      try {\n        if (pendingPromise) {\n          cancelPromise(pendingPromise);\n        }\n        // Finally block can return (or yield) stuff..\n        var _res = gen[\"return\"](undefined);\n        // eat anything that promise would do, it's cancelled!\n        var yieldedPromise = Promise.resolve(_res.value);\n        yieldedPromise.then(noop, noop);\n        cancelPromise(yieldedPromise); // maybe it can be cancelled :)\n        // reject our original promise\n        rejector(new FlowCancellationError());\n      } catch (e) {\n        rejector(e); // there could be a throwing finally block\n      }\n    });\n    return promise;\n  };\n  res.isMobXFlow = true;\n  return res;\n}, flowAnnotation);\nflow.bound = /*#__PURE__*/createDecoratorAnnotation(flowBoundAnnotation);\nfunction cancelPromise(promise) {\n  if (isFunction(promise.cancel)) {\n    promise.cancel();\n  }\n}\nfunction flowResult(result) {\n  return result; // just tricking TypeScript :)\n}\nfunction isFlow(fn) {\n  return (fn == null ? void 0 : fn.isMobXFlow) === true;\n}\n\nfunction interceptReads(thing, propOrHandler, handler) {\n  var target;\n  if (isObservableMap(thing) || isObservableArray(thing) || isObservableValue(thing)) {\n    target = getAdministration(thing);\n  } else if (isObservableObject(thing)) {\n    if (process.env.NODE_ENV !== \"production\" && !isStringish(propOrHandler)) {\n      return die(\"InterceptReads can only be used with a specific property, not with an object in general\");\n    }\n    target = getAdministration(thing, propOrHandler);\n  } else if (process.env.NODE_ENV !== \"production\") {\n    return die(\"Expected observable map, object or array as first array\");\n  }\n  if (process.env.NODE_ENV !== \"production\" && target.dehancer !== undefined) {\n    return die(\"An intercept reader was already established\");\n  }\n  target.dehancer = typeof propOrHandler === \"function\" ? propOrHandler : handler;\n  return function () {\n    target.dehancer = undefined;\n  };\n}\n\nfunction intercept(thing, propOrHandler, handler) {\n  if (isFunction(handler)) {\n    return interceptProperty(thing, propOrHandler, handler);\n  } else {\n    return interceptInterceptable(thing, propOrHandler);\n  }\n}\nfunction interceptInterceptable(thing, handler) {\n  return getAdministration(thing).intercept_(handler);\n}\nfunction interceptProperty(thing, property, handler) {\n  return getAdministration(thing, property).intercept_(handler);\n}\n\nfunction _isComputed(value, property) {\n  if (property === undefined) {\n    return isComputedValue(value);\n  }\n  if (isObservableObject(value) === false) {\n    return false;\n  }\n  if (!value[$mobx].values_.has(property)) {\n    return false;\n  }\n  var atom = getAtom(value, property);\n  return isComputedValue(atom);\n}\nfunction isComputed(value) {\n  if (process.env.NODE_ENV !== \"production\" && arguments.length > 1) {\n    return die(\"isComputed expects only 1 argument. Use isComputedProp to inspect the observability of a property\");\n  }\n  return _isComputed(value);\n}\nfunction isComputedProp(value, propName) {\n  if (process.env.NODE_ENV !== \"production\" && !isStringish(propName)) {\n    return die(\"isComputed expected a property name as second argument\");\n  }\n  return _isComputed(value, propName);\n}\n\nfunction _isObservable(value, property) {\n  if (!value) {\n    return false;\n  }\n  if (property !== undefined) {\n    if (process.env.NODE_ENV !== \"production\" && (isObservableMap(value) || isObservableArray(value))) {\n      return die(\"isObservable(object, propertyName) is not supported for arrays and maps. Use map.has or array.length instead.\");\n    }\n    if (isObservableObject(value)) {\n      return value[$mobx].values_.has(property);\n    }\n    return false;\n  }\n  // For first check, see #701\n  return isObservableObject(value) || !!value[$mobx] || isAtom(value) || isReaction(value) || isComputedValue(value);\n}\nfunction isObservable(value) {\n  if (process.env.NODE_ENV !== \"production\" && arguments.length !== 1) {\n    die(\"isObservable expects only 1 argument. Use isObservableProp to inspect the observability of a property\");\n  }\n  return _isObservable(value);\n}\nfunction isObservableProp(value, propName) {\n  if (process.env.NODE_ENV !== \"production\" && !isStringish(propName)) {\n    return die(\"expected a property name as second argument\");\n  }\n  return _isObservable(value, propName);\n}\n\nfunction keys(obj) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].keys_();\n  }\n  if (isObservableMap(obj) || isObservableSet(obj)) {\n    return Array.from(obj.keys());\n  }\n  if (isObservableArray(obj)) {\n    return obj.map(function (_, index) {\n      return index;\n    });\n  }\n  die(5);\n}\nfunction values(obj) {\n  if (isObservableObject(obj)) {\n    return keys(obj).map(function (key) {\n      return obj[key];\n    });\n  }\n  if (isObservableMap(obj)) {\n    return keys(obj).map(function (key) {\n      return obj.get(key);\n    });\n  }\n  if (isObservableSet(obj)) {\n    return Array.from(obj.values());\n  }\n  if (isObservableArray(obj)) {\n    return obj.slice();\n  }\n  die(6);\n}\nfunction entries(obj) {\n  if (isObservableObject(obj)) {\n    return keys(obj).map(function (key) {\n      return [key, obj[key]];\n    });\n  }\n  if (isObservableMap(obj)) {\n    return keys(obj).map(function (key) {\n      return [key, obj.get(key)];\n    });\n  }\n  if (isObservableSet(obj)) {\n    return Array.from(obj.entries());\n  }\n  if (isObservableArray(obj)) {\n    return obj.map(function (key, index) {\n      return [index, key];\n    });\n  }\n  die(7);\n}\nfunction set(obj, key, value) {\n  if (arguments.length === 2 && !isObservableSet(obj)) {\n    startBatch();\n    var _values = key;\n    try {\n      for (var _key in _values) {\n        set(obj, _key, _values[_key]);\n      }\n    } finally {\n      endBatch();\n    }\n    return;\n  }\n  if (isObservableObject(obj)) {\n    obj[$mobx].set_(key, value);\n  } else if (isObservableMap(obj)) {\n    obj.set(key, value);\n  } else if (isObservableSet(obj)) {\n    obj.add(key);\n  } else if (isObservableArray(obj)) {\n    if (typeof key !== \"number\") {\n      key = parseInt(key, 10);\n    }\n    if (key < 0) {\n      die(\"Invalid index: '\" + key + \"'\");\n    }\n    startBatch();\n    if (key >= obj.length) {\n      obj.length = key + 1;\n    }\n    obj[key] = value;\n    endBatch();\n  } else {\n    die(8);\n  }\n}\nfunction remove(obj, key) {\n  if (isObservableObject(obj)) {\n    obj[$mobx].delete_(key);\n  } else if (isObservableMap(obj)) {\n    obj[\"delete\"](key);\n  } else if (isObservableSet(obj)) {\n    obj[\"delete\"](key);\n  } else if (isObservableArray(obj)) {\n    if (typeof key !== \"number\") {\n      key = parseInt(key, 10);\n    }\n    obj.splice(key, 1);\n  } else {\n    die(9);\n  }\n}\nfunction has(obj, key) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].has_(key);\n  } else if (isObservableMap(obj)) {\n    return obj.has(key);\n  } else if (isObservableSet(obj)) {\n    return obj.has(key);\n  } else if (isObservableArray(obj)) {\n    return key >= 0 && key < obj.length;\n  }\n  die(10);\n}\nfunction get(obj, key) {\n  if (!has(obj, key)) {\n    return undefined;\n  }\n  if (isObservableObject(obj)) {\n    return obj[$mobx].get_(key);\n  } else if (isObservableMap(obj)) {\n    return obj.get(key);\n  } else if (isObservableArray(obj)) {\n    return obj[key];\n  }\n  die(11);\n}\nfunction apiDefineProperty(obj, key, descriptor) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].defineProperty_(key, descriptor);\n  }\n  die(39);\n}\nfunction apiOwnKeys(obj) {\n  if (isObservableObject(obj)) {\n    return obj[$mobx].ownKeys_();\n  }\n  die(38);\n}\n\nfunction observe(thing, propOrCb, cbOrFire, fireImmediately) {\n  if (isFunction(cbOrFire)) {\n    return observeObservableProperty(thing, propOrCb, cbOrFire, fireImmediately);\n  } else {\n    return observeObservable(thing, propOrCb, cbOrFire);\n  }\n}\nfunction observeObservable(thing, listener, fireImmediately) {\n  return getAdministration(thing).observe_(listener, fireImmediately);\n}\nfunction observeObservableProperty(thing, property, listener, fireImmediately) {\n  return getAdministration(thing, property).observe_(listener, fireImmediately);\n}\n\nfunction cache(map, key, value) {\n  map.set(key, value);\n  return value;\n}\nfunction toJSHelper(source, __alreadySeen) {\n  if (source == null || typeof source !== \"object\" || source instanceof Date || !isObservable(source)) {\n    return source;\n  }\n  if (isObservableValue(source) || isComputedValue(source)) {\n    return toJSHelper(source.get(), __alreadySeen);\n  }\n  if (__alreadySeen.has(source)) {\n    return __alreadySeen.get(source);\n  }\n  if (isObservableArray(source)) {\n    var res = cache(__alreadySeen, source, new Array(source.length));\n    source.forEach(function (value, idx) {\n      res[idx] = toJSHelper(value, __alreadySeen);\n    });\n    return res;\n  }\n  if (isObservableSet(source)) {\n    var _res = cache(__alreadySeen, source, new Set());\n    source.forEach(function (value) {\n      _res.add(toJSHelper(value, __alreadySeen));\n    });\n    return _res;\n  }\n  if (isObservableMap(source)) {\n    var _res2 = cache(__alreadySeen, source, new Map());\n    source.forEach(function (value, key) {\n      _res2.set(key, toJSHelper(value, __alreadySeen));\n    });\n    return _res2;\n  } else {\n    // must be observable object\n    var _res3 = cache(__alreadySeen, source, {});\n    apiOwnKeys(source).forEach(function (key) {\n      if (objectPrototype.propertyIsEnumerable.call(source, key)) {\n        _res3[key] = toJSHelper(source[key], __alreadySeen);\n      }\n    });\n    return _res3;\n  }\n}\n/**\n * Recursively converts an observable to it's non-observable native counterpart.\n * It does NOT recurse into non-observables, these are left as they are, even if they contain observables.\n * Computed and other non-enumerable properties are completely ignored.\n * Complex scenarios require custom solution, eg implementing `toJSON` or using `serializr` lib.\n */\nfunction toJS(source, options) {\n  if (process.env.NODE_ENV !== \"production\" && options) {\n    die(\"toJS no longer supports options\");\n  }\n  return toJSHelper(source, new Map());\n}\n\nfunction trace() {\n  if (!(process.env.NODE_ENV !== \"production\")) {\n    return;\n  }\n  var enterBreakPoint = false;\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  if (typeof args[args.length - 1] === \"boolean\") {\n    enterBreakPoint = args.pop();\n  }\n  var derivation = getAtomFromArgs(args);\n  if (!derivation) {\n    return die(\"'trace(break?)' can only be used inside a tracked computed value or a Reaction. Consider passing in the computed value or reaction explicitly\");\n  }\n  if (derivation.isTracing_ === TraceMode.NONE) {\n    console.log(\"[mobx.trace] '\" + derivation.name_ + \"' tracing enabled\");\n  }\n  derivation.isTracing_ = enterBreakPoint ? TraceMode.BREAK : TraceMode.LOG;\n}\nfunction getAtomFromArgs(args) {\n  switch (args.length) {\n    case 0:\n      return globalState.trackingDerivation;\n    case 1:\n      return getAtom(args[0]);\n    case 2:\n      return getAtom(args[0], args[1]);\n  }\n}\n\n/**\n * During a transaction no views are updated until the end of the transaction.\n * The transaction will be run synchronously nonetheless.\n *\n * @param action a function that updates some reactive state\n * @returns any value that was returned by the 'action' parameter.\n */\nfunction transaction(action, thisArg) {\n  if (thisArg === void 0) {\n    thisArg = undefined;\n  }\n  startBatch();\n  try {\n    return action.apply(thisArg);\n  } finally {\n    endBatch();\n  }\n}\n\nfunction when(predicate, arg1, arg2) {\n  if (arguments.length === 1 || arg1 && typeof arg1 === \"object\") {\n    return whenPromise(predicate, arg1);\n  }\n  return _when(predicate, arg1, arg2 || {});\n}\nfunction _when(predicate, effect, opts) {\n  var timeoutHandle;\n  if (typeof opts.timeout === \"number\") {\n    var error = new Error(\"WHEN_TIMEOUT\");\n    timeoutHandle = setTimeout(function () {\n      if (!disposer[$mobx].isDisposed) {\n        disposer();\n        if (opts.onError) {\n          opts.onError(error);\n        } else {\n          throw error;\n        }\n      }\n    }, opts.timeout);\n  }\n  opts.name = process.env.NODE_ENV !== \"production\" ? opts.name || \"When@\" + getNextId() : \"When\";\n  var effectAction = createAction(process.env.NODE_ENV !== \"production\" ? opts.name + \"-effect\" : \"When-effect\", effect);\n  // eslint-disable-next-line\n  var disposer = autorun(function (r) {\n    // predicate should not change state\n    var cond = allowStateChanges(false, predicate);\n    if (cond) {\n      r.dispose();\n      if (timeoutHandle) {\n        clearTimeout(timeoutHandle);\n      }\n      effectAction();\n    }\n  }, opts);\n  return disposer;\n}\nfunction whenPromise(predicate, opts) {\n  var _opts$signal;\n  if (process.env.NODE_ENV !== \"production\" && opts && opts.onError) {\n    return die(\"the options 'onError' and 'promise' cannot be combined\");\n  }\n  if (opts != null && (_opts$signal = opts.signal) != null && _opts$signal.aborted) {\n    return Object.assign(Promise.reject(new Error(\"WHEN_ABORTED\")), {\n      cancel: function cancel() {\n        return null;\n      }\n    });\n  }\n  var cancel;\n  var abort;\n  var res = new Promise(function (resolve, reject) {\n    var _opts$signal2;\n    var disposer = _when(predicate, resolve, _extends({}, opts, {\n      onError: reject\n    }));\n    cancel = function cancel() {\n      disposer();\n      reject(new Error(\"WHEN_CANCELLED\"));\n    };\n    abort = function abort() {\n      disposer();\n      reject(new Error(\"WHEN_ABORTED\"));\n    };\n    opts == null || (_opts$signal2 = opts.signal) == null || _opts$signal2.addEventListener == null || _opts$signal2.addEventListener(\"abort\", abort);\n  })[\"finally\"](function () {\n    var _opts$signal3;\n    return opts == null || (_opts$signal3 = opts.signal) == null || _opts$signal3.removeEventListener == null ? void 0 : _opts$signal3.removeEventListener(\"abort\", abort);\n  });\n  res.cancel = cancel;\n  return res;\n}\n\nfunction getAdm(target) {\n  return target[$mobx];\n}\n// Optimization: we don't need the intermediate objects and could have a completely custom administration for DynamicObjects,\n// and skip either the internal values map, or the base object with its property descriptors!\nvar objectProxyTraps = {\n  has: function has(target, name) {\n    if (process.env.NODE_ENV !== \"production\" && globalState.trackingDerivation) {\n      warnAboutProxyRequirement(\"detect new properties using the 'in' operator. Use 'has' from 'mobx' instead.\");\n    }\n    return getAdm(target).has_(name);\n  },\n  get: function get(target, name) {\n    return getAdm(target).get_(name);\n  },\n  set: function set(target, name, value) {\n    var _getAdm$set_;\n    if (!isStringish(name)) {\n      return false;\n    }\n    if (process.env.NODE_ENV !== \"production\" && !getAdm(target).values_.has(name)) {\n      warnAboutProxyRequirement(\"add a new observable property through direct assignment. Use 'set' from 'mobx' instead.\");\n    }\n    // null (intercepted) -> true (success)\n    return (_getAdm$set_ = getAdm(target).set_(name, value, true)) != null ? _getAdm$set_ : true;\n  },\n  deleteProperty: function deleteProperty(target, name) {\n    var _getAdm$delete_;\n    if (process.env.NODE_ENV !== \"production\") {\n      warnAboutProxyRequirement(\"delete properties from an observable object. Use 'remove' from 'mobx' instead.\");\n    }\n    if (!isStringish(name)) {\n      return false;\n    }\n    // null (intercepted) -> true (success)\n    return (_getAdm$delete_ = getAdm(target).delete_(name, true)) != null ? _getAdm$delete_ : true;\n  },\n  defineProperty: function defineProperty(target, name, descriptor) {\n    var _getAdm$definePropert;\n    if (process.env.NODE_ENV !== \"production\") {\n      warnAboutProxyRequirement(\"define property on an observable object. Use 'defineProperty' from 'mobx' instead.\");\n    }\n    // null (intercepted) -> true (success)\n    return (_getAdm$definePropert = getAdm(target).defineProperty_(name, descriptor)) != null ? _getAdm$definePropert : true;\n  },\n  ownKeys: function ownKeys(target) {\n    if (process.env.NODE_ENV !== \"production\" && globalState.trackingDerivation) {\n      warnAboutProxyRequirement(\"iterate keys to detect added / removed properties. Use 'keys' from 'mobx' instead.\");\n    }\n    return getAdm(target).ownKeys_();\n  },\n  preventExtensions: function preventExtensions(target) {\n    die(13);\n  }\n};\nfunction asDynamicObservableObject(target, options) {\n  var _target$$mobx, _target$$mobx$proxy_;\n  assertProxies();\n  target = asObservableObject(target, options);\n  return (_target$$mobx$proxy_ = (_target$$mobx = target[$mobx]).proxy_) != null ? _target$$mobx$proxy_ : _target$$mobx.proxy_ = new Proxy(target, objectProxyTraps);\n}\n\nfunction hasInterceptors(interceptable) {\n  return interceptable.interceptors_ !== undefined && interceptable.interceptors_.length > 0;\n}\nfunction registerInterceptor(interceptable, handler) {\n  var interceptors = interceptable.interceptors_ || (interceptable.interceptors_ = []);\n  interceptors.push(handler);\n  return once(function () {\n    var idx = interceptors.indexOf(handler);\n    if (idx !== -1) {\n      interceptors.splice(idx, 1);\n    }\n  });\n}\nfunction interceptChange(interceptable, change) {\n  var prevU = untrackedStart();\n  try {\n    // Interceptor can modify the array, copy it to avoid concurrent modification, see #1950\n    var interceptors = [].concat(interceptable.interceptors_ || []);\n    for (var i = 0, l = interceptors.length; i < l; i++) {\n      change = interceptors[i](change);\n      if (change && !change.type) {\n        die(14);\n      }\n      if (!change) {\n        break;\n      }\n    }\n    return change;\n  } finally {\n    untrackedEnd(prevU);\n  }\n}\n\nfunction hasListeners(listenable) {\n  return listenable.changeListeners_ !== undefined && listenable.changeListeners_.length > 0;\n}\nfunction registerListener(listenable, handler) {\n  var listeners = listenable.changeListeners_ || (listenable.changeListeners_ = []);\n  listeners.push(handler);\n  return once(function () {\n    var idx = listeners.indexOf(handler);\n    if (idx !== -1) {\n      listeners.splice(idx, 1);\n    }\n  });\n}\nfunction notifyListeners(listenable, change) {\n  var prevU = untrackedStart();\n  var listeners = listenable.changeListeners_;\n  if (!listeners) {\n    return;\n  }\n  listeners = listeners.slice();\n  for (var i = 0, l = listeners.length; i < l; i++) {\n    listeners[i](change);\n  }\n  untrackedEnd(prevU);\n}\n\nfunction makeObservable(target, annotations, options) {\n  initObservable(function () {\n    var _annotations;\n    var adm = asObservableObject(target, options)[$mobx];\n    if (process.env.NODE_ENV !== \"production\" && annotations && target[storedAnnotationsSymbol]) {\n      die(\"makeObservable second arg must be nullish when using decorators. Mixing @decorator syntax with annotations is not supported.\");\n    }\n    // Default to decorators\n    (_annotations = annotations) != null ? _annotations : annotations = collectStoredAnnotations(target);\n    // Annotate\n    ownKeys(annotations).forEach(function (key) {\n      return adm.make_(key, annotations[key]);\n    });\n  });\n  return target;\n}\n// proto[keysSymbol] = new Set<PropertyKey>()\nvar keysSymbol = /*#__PURE__*/Symbol(\"mobx-keys\");\nfunction makeAutoObservable(target, overrides, options) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isPlainObject(target) && !isPlainObject(Object.getPrototypeOf(target))) {\n      die(\"'makeAutoObservable' can only be used for classes that don't have a superclass\");\n    }\n    if (isObservableObject(target)) {\n      die(\"makeAutoObservable can only be used on objects not already made observable\");\n    }\n  }\n  // Optimization: avoid visiting protos\n  // Assumes that annotation.make_/.extend_ works the same for plain objects\n  if (isPlainObject(target)) {\n    return extendObservable(target, target, overrides, options);\n  }\n  initObservable(function () {\n    var adm = asObservableObject(target, options)[$mobx];\n    // Optimization: cache keys on proto\n    // Assumes makeAutoObservable can be called only once per object and can't be used in subclass\n    if (!target[keysSymbol]) {\n      var proto = Object.getPrototypeOf(target);\n      var keys = new Set([].concat(ownKeys(target), ownKeys(proto)));\n      keys[\"delete\"](\"constructor\");\n      keys[\"delete\"]($mobx);\n      addHiddenProp(proto, keysSymbol, keys);\n    }\n    target[keysSymbol].forEach(function (key) {\n      return adm.make_(key,\n      // must pass \"undefined\" for { key: undefined }\n      !overrides ? true : key in overrides ? overrides[key] : true);\n    });\n  });\n  return target;\n}\n\nvar SPLICE = \"splice\";\nvar UPDATE = \"update\";\nvar MAX_SPLICE_SIZE = 10000; // See e.g. https://github.com/mobxjs/mobx/issues/859\nvar arrayTraps = {\n  get: function get(target, name) {\n    var adm = target[$mobx];\n    if (name === $mobx) {\n      return adm;\n    }\n    if (name === \"length\") {\n      return adm.getArrayLength_();\n    }\n    if (typeof name === \"string\" && !isNaN(name)) {\n      return adm.get_(parseInt(name));\n    }\n    if (hasProp(arrayExtensions, name)) {\n      return arrayExtensions[name];\n    }\n    return target[name];\n  },\n  set: function set(target, name, value) {\n    var adm = target[$mobx];\n    if (name === \"length\") {\n      adm.setArrayLength_(value);\n    }\n    if (typeof name === \"symbol\" || isNaN(name)) {\n      target[name] = value;\n    } else {\n      // numeric string\n      adm.set_(parseInt(name), value);\n    }\n    return true;\n  },\n  preventExtensions: function preventExtensions() {\n    die(15);\n  }\n};\nvar ObservableArrayAdministration = /*#__PURE__*/function () {\n  function ObservableArrayAdministration(name, enhancer, owned_, legacyMode_) {\n    if (name === void 0) {\n      name = process.env.NODE_ENV !== \"production\" ? \"ObservableArray@\" + getNextId() : \"ObservableArray\";\n    }\n    this.owned_ = void 0;\n    this.legacyMode_ = void 0;\n    this.atom_ = void 0;\n    this.values_ = [];\n    // this is the prop that gets proxied, so can't replace it!\n    this.interceptors_ = void 0;\n    this.changeListeners_ = void 0;\n    this.enhancer_ = void 0;\n    this.dehancer = void 0;\n    this.proxy_ = void 0;\n    this.lastKnownLength_ = 0;\n    this.owned_ = owned_;\n    this.legacyMode_ = legacyMode_;\n    this.atom_ = new Atom(name);\n    this.enhancer_ = function (newV, oldV) {\n      return enhancer(newV, oldV, process.env.NODE_ENV !== \"production\" ? name + \"[..]\" : \"ObservableArray[..]\");\n    };\n  }\n  var _proto = ObservableArrayAdministration.prototype;\n  _proto.dehanceValue_ = function dehanceValue_(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n    return value;\n  };\n  _proto.dehanceValues_ = function dehanceValues_(values) {\n    if (this.dehancer !== undefined && values.length > 0) {\n      return values.map(this.dehancer);\n    }\n    return values;\n  };\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    if (fireImmediately === void 0) {\n      fireImmediately = false;\n    }\n    if (fireImmediately) {\n      listener({\n        observableKind: \"array\",\n        object: this.proxy_,\n        debugObjectName: this.atom_.name_,\n        type: \"splice\",\n        index: 0,\n        added: this.values_.slice(),\n        addedCount: this.values_.length,\n        removed: [],\n        removedCount: 0\n      });\n    }\n    return registerListener(this, listener);\n  };\n  _proto.getArrayLength_ = function getArrayLength_() {\n    this.atom_.reportObserved();\n    return this.values_.length;\n  };\n  _proto.setArrayLength_ = function setArrayLength_(newLength) {\n    if (typeof newLength !== \"number\" || isNaN(newLength) || newLength < 0) {\n      die(\"Out of range: \" + newLength);\n    }\n    var currentLength = this.values_.length;\n    if (newLength === currentLength) {\n      return;\n    } else if (newLength > currentLength) {\n      var newItems = new Array(newLength - currentLength);\n      for (var i = 0; i < newLength - currentLength; i++) {\n        newItems[i] = undefined;\n      } // No Array.fill everywhere...\n      this.spliceWithArray_(currentLength, 0, newItems);\n    } else {\n      this.spliceWithArray_(newLength, currentLength - newLength);\n    }\n  };\n  _proto.updateArrayLength_ = function updateArrayLength_(oldLength, delta) {\n    if (oldLength !== this.lastKnownLength_) {\n      die(16);\n    }\n    this.lastKnownLength_ += delta;\n    if (this.legacyMode_ && delta > 0) {\n      reserveArrayBuffer(oldLength + delta + 1);\n    }\n  };\n  _proto.spliceWithArray_ = function spliceWithArray_(index, deleteCount, newItems) {\n    var _this = this;\n    checkIfStateModificationsAreAllowed(this.atom_);\n    var length = this.values_.length;\n    if (index === undefined) {\n      index = 0;\n    } else if (index > length) {\n      index = length;\n    } else if (index < 0) {\n      index = Math.max(0, length + index);\n    }\n    if (arguments.length === 1) {\n      deleteCount = length - index;\n    } else if (deleteCount === undefined || deleteCount === null) {\n      deleteCount = 0;\n    } else {\n      deleteCount = Math.max(0, Math.min(deleteCount, length - index));\n    }\n    if (newItems === undefined) {\n      newItems = EMPTY_ARRAY;\n    }\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        object: this.proxy_,\n        type: SPLICE,\n        index: index,\n        removedCount: deleteCount,\n        added: newItems\n      });\n      if (!change) {\n        return EMPTY_ARRAY;\n      }\n      deleteCount = change.removedCount;\n      newItems = change.added;\n    }\n    newItems = newItems.length === 0 ? newItems : newItems.map(function (v) {\n      return _this.enhancer_(v, undefined);\n    });\n    if (this.legacyMode_ || process.env.NODE_ENV !== \"production\") {\n      var lengthDelta = newItems.length - deleteCount;\n      this.updateArrayLength_(length, lengthDelta); // checks if internal array wasn't modified\n    }\n    var res = this.spliceItemsIntoValues_(index, deleteCount, newItems);\n    if (deleteCount !== 0 || newItems.length !== 0) {\n      this.notifyArraySplice_(index, newItems, res);\n    }\n    return this.dehanceValues_(res);\n  };\n  _proto.spliceItemsIntoValues_ = function spliceItemsIntoValues_(index, deleteCount, newItems) {\n    if (newItems.length < MAX_SPLICE_SIZE) {\n      var _this$values_;\n      return (_this$values_ = this.values_).splice.apply(_this$values_, [index, deleteCount].concat(newItems));\n    } else {\n      // The items removed by the splice\n      var res = this.values_.slice(index, index + deleteCount);\n      // The items that that should remain at the end of the array\n      var oldItems = this.values_.slice(index + deleteCount);\n      // New length is the previous length + addition count - deletion count\n      this.values_.length += newItems.length - deleteCount;\n      for (var i = 0; i < newItems.length; i++) {\n        this.values_[index + i] = newItems[i];\n      }\n      for (var _i = 0; _i < oldItems.length; _i++) {\n        this.values_[index + newItems.length + _i] = oldItems[_i];\n      }\n      return res;\n    }\n  };\n  _proto.notifyArrayChildUpdate_ = function notifyArrayChildUpdate_(index, newValue, oldValue) {\n    var notifySpy = !this.owned_ && isSpyEnabled();\n    var notify = hasListeners(this);\n    var change = notify || notifySpy ? {\n      observableKind: \"array\",\n      object: this.proxy_,\n      type: UPDATE,\n      debugObjectName: this.atom_.name_,\n      index: index,\n      newValue: newValue,\n      oldValue: oldValue\n    } : null;\n    // The reason why this is on right hand side here (and not above), is this way the uglifier will drop it, but it won't\n    // cause any runtime overhead in development mode without NODE_ENV set, unless spying is enabled\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportStart(change);\n    }\n    this.atom_.reportChanged();\n    if (notify) {\n      notifyListeners(this, change);\n    }\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportEnd();\n    }\n  };\n  _proto.notifyArraySplice_ = function notifyArraySplice_(index, added, removed) {\n    var notifySpy = !this.owned_ && isSpyEnabled();\n    var notify = hasListeners(this);\n    var change = notify || notifySpy ? {\n      observableKind: \"array\",\n      object: this.proxy_,\n      debugObjectName: this.atom_.name_,\n      type: SPLICE,\n      index: index,\n      removed: removed,\n      added: added,\n      removedCount: removed.length,\n      addedCount: added.length\n    } : null;\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportStart(change);\n    }\n    this.atom_.reportChanged();\n    // conform: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/observe\n    if (notify) {\n      notifyListeners(this, change);\n    }\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportEnd();\n    }\n  };\n  _proto.get_ = function get_(index) {\n    if (this.legacyMode_ && index >= this.values_.length) {\n      console.warn(process.env.NODE_ENV !== \"production\" ? \"[mobx.array] Attempt to read an array index (\" + index + \") that is out of bounds (\" + this.values_.length + \"). Please check length first. Out of bound indices will not be tracked by MobX\" : \"[mobx] Out of bounds read: \" + index);\n      return undefined;\n    }\n    this.atom_.reportObserved();\n    return this.dehanceValue_(this.values_[index]);\n  };\n  _proto.set_ = function set_(index, newValue) {\n    var values = this.values_;\n    if (this.legacyMode_ && index > values.length) {\n      // out of bounds\n      die(17, index, values.length);\n    }\n    if (index < values.length) {\n      // update at index in range\n      checkIfStateModificationsAreAllowed(this.atom_);\n      var oldValue = values[index];\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          type: UPDATE,\n          object: this.proxy_,\n          // since \"this\" is the real array we need to pass its proxy\n          index: index,\n          newValue: newValue\n        });\n        if (!change) {\n          return;\n        }\n        newValue = change.newValue;\n      }\n      newValue = this.enhancer_(newValue, oldValue);\n      var changed = newValue !== oldValue;\n      if (changed) {\n        values[index] = newValue;\n        this.notifyArrayChildUpdate_(index, newValue, oldValue);\n      }\n    } else {\n      // For out of bound index, we don't create an actual sparse array,\n      // but rather fill the holes with undefined (same as setArrayLength_).\n      // This could be considered a bug.\n      var newItems = new Array(index + 1 - values.length);\n      for (var i = 0; i < newItems.length - 1; i++) {\n        newItems[i] = undefined;\n      } // No Array.fill everywhere...\n      newItems[newItems.length - 1] = newValue;\n      this.spliceWithArray_(values.length, 0, newItems);\n    }\n  };\n  return ObservableArrayAdministration;\n}();\nfunction createObservableArray(initialValues, enhancer, name, owned) {\n  if (name === void 0) {\n    name = process.env.NODE_ENV !== \"production\" ? \"ObservableArray@\" + getNextId() : \"ObservableArray\";\n  }\n  if (owned === void 0) {\n    owned = false;\n  }\n  assertProxies();\n  return initObservable(function () {\n    var adm = new ObservableArrayAdministration(name, enhancer, owned, false);\n    addHiddenFinalProp(adm.values_, $mobx, adm);\n    var proxy = new Proxy(adm.values_, arrayTraps);\n    adm.proxy_ = proxy;\n    if (initialValues && initialValues.length) {\n      adm.spliceWithArray_(0, 0, initialValues);\n    }\n    return proxy;\n  });\n}\n// eslint-disable-next-line\nvar arrayExtensions = {\n  clear: function clear() {\n    return this.splice(0);\n  },\n  replace: function replace(newItems) {\n    var adm = this[$mobx];\n    return adm.spliceWithArray_(0, adm.values_.length, newItems);\n  },\n  // Used by JSON.stringify\n  toJSON: function toJSON() {\n    return this.slice();\n  },\n  /*\n   * functions that do alter the internal structure of the array, (based on lib.es6.d.ts)\n   * since these functions alter the inner structure of the array, the have side effects.\n   * Because the have side effects, they should not be used in computed function,\n   * and for that reason the do not call dependencyState.notifyObserved\n   */\n  splice: function splice(index, deleteCount) {\n    for (var _len = arguments.length, newItems = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      newItems[_key - 2] = arguments[_key];\n    }\n    var adm = this[$mobx];\n    switch (arguments.length) {\n      case 0:\n        return [];\n      case 1:\n        return adm.spliceWithArray_(index);\n      case 2:\n        return adm.spliceWithArray_(index, deleteCount);\n    }\n    return adm.spliceWithArray_(index, deleteCount, newItems);\n  },\n  spliceWithArray: function spliceWithArray(index, deleteCount, newItems) {\n    return this[$mobx].spliceWithArray_(index, deleteCount, newItems);\n  },\n  push: function push() {\n    var adm = this[$mobx];\n    for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      items[_key2] = arguments[_key2];\n    }\n    adm.spliceWithArray_(adm.values_.length, 0, items);\n    return adm.values_.length;\n  },\n  pop: function pop() {\n    return this.splice(Math.max(this[$mobx].values_.length - 1, 0), 1)[0];\n  },\n  shift: function shift() {\n    return this.splice(0, 1)[0];\n  },\n  unshift: function unshift() {\n    var adm = this[$mobx];\n    for (var _len3 = arguments.length, items = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      items[_key3] = arguments[_key3];\n    }\n    adm.spliceWithArray_(0, 0, items);\n    return adm.values_.length;\n  },\n  reverse: function reverse() {\n    // reverse by default mutates in place before returning the result\n    // which makes it both a 'derivation' and a 'mutation'.\n    if (globalState.trackingDerivation) {\n      die(37, \"reverse\");\n    }\n    this.replace(this.slice().reverse());\n    return this;\n  },\n  sort: function sort() {\n    // sort by default mutates in place before returning the result\n    // which goes against all good practices. Let's not change the array in place!\n    if (globalState.trackingDerivation) {\n      die(37, \"sort\");\n    }\n    var copy = this.slice();\n    copy.sort.apply(copy, arguments);\n    this.replace(copy);\n    return this;\n  },\n  remove: function remove(value) {\n    var adm = this[$mobx];\n    var idx = adm.dehanceValues_(adm.values_).indexOf(value);\n    if (idx > -1) {\n      this.splice(idx, 1);\n      return true;\n    }\n    return false;\n  }\n};\n/**\n * Wrap function from prototype\n * Without this, everything works as well, but this works\n * faster as everything works on unproxied values\n */\naddArrayExtension(\"at\", simpleFunc);\naddArrayExtension(\"concat\", simpleFunc);\naddArrayExtension(\"flat\", simpleFunc);\naddArrayExtension(\"includes\", simpleFunc);\naddArrayExtension(\"indexOf\", simpleFunc);\naddArrayExtension(\"join\", simpleFunc);\naddArrayExtension(\"lastIndexOf\", simpleFunc);\naddArrayExtension(\"slice\", simpleFunc);\naddArrayExtension(\"toString\", simpleFunc);\naddArrayExtension(\"toLocaleString\", simpleFunc);\naddArrayExtension(\"toSorted\", simpleFunc);\naddArrayExtension(\"toSpliced\", simpleFunc);\naddArrayExtension(\"with\", simpleFunc);\n// map\naddArrayExtension(\"every\", mapLikeFunc);\naddArrayExtension(\"filter\", mapLikeFunc);\naddArrayExtension(\"find\", mapLikeFunc);\naddArrayExtension(\"findIndex\", mapLikeFunc);\naddArrayExtension(\"findLast\", mapLikeFunc);\naddArrayExtension(\"findLastIndex\", mapLikeFunc);\naddArrayExtension(\"flatMap\", mapLikeFunc);\naddArrayExtension(\"forEach\", mapLikeFunc);\naddArrayExtension(\"map\", mapLikeFunc);\naddArrayExtension(\"some\", mapLikeFunc);\naddArrayExtension(\"toReversed\", mapLikeFunc);\n// reduce\naddArrayExtension(\"reduce\", reduceLikeFunc);\naddArrayExtension(\"reduceRight\", reduceLikeFunc);\nfunction addArrayExtension(funcName, funcFactory) {\n  if (typeof Array.prototype[funcName] === \"function\") {\n    arrayExtensions[funcName] = funcFactory(funcName);\n  }\n}\n// Report and delegate to dehanced array\nfunction simpleFunc(funcName) {\n  return function () {\n    var adm = this[$mobx];\n    adm.atom_.reportObserved();\n    var dehancedValues = adm.dehanceValues_(adm.values_);\n    return dehancedValues[funcName].apply(dehancedValues, arguments);\n  };\n}\n// Make sure callbacks receive correct array arg #2326\nfunction mapLikeFunc(funcName) {\n  return function (callback, thisArg) {\n    var _this2 = this;\n    var adm = this[$mobx];\n    adm.atom_.reportObserved();\n    var dehancedValues = adm.dehanceValues_(adm.values_);\n    return dehancedValues[funcName](function (element, index) {\n      return callback.call(thisArg, element, index, _this2);\n    });\n  };\n}\n// Make sure callbacks receive correct array arg #2326\nfunction reduceLikeFunc(funcName) {\n  return function () {\n    var _this3 = this;\n    var adm = this[$mobx];\n    adm.atom_.reportObserved();\n    var dehancedValues = adm.dehanceValues_(adm.values_);\n    // #2432 - reduce behavior depends on arguments.length\n    var callback = arguments[0];\n    arguments[0] = function (accumulator, currentValue, index) {\n      return callback(accumulator, currentValue, index, _this3);\n    };\n    return dehancedValues[funcName].apply(dehancedValues, arguments);\n  };\n}\nvar isObservableArrayAdministration = /*#__PURE__*/createInstanceofPredicate(\"ObservableArrayAdministration\", ObservableArrayAdministration);\nfunction isObservableArray(thing) {\n  return isObject(thing) && isObservableArrayAdministration(thing[$mobx]);\n}\n\nvar ObservableMapMarker = {};\nvar ADD = \"add\";\nvar DELETE = \"delete\";\n// just extend Map? See also https://gist.github.com/nestharus/13b4d74f2ef4a2f4357dbd3fc23c1e54\n// But: https://github.com/mobxjs/mobx/issues/1556\nvar ObservableMap = /*#__PURE__*/function () {\n  function ObservableMap(initialData, enhancer_, name_) {\n    var _this = this;\n    if (enhancer_ === void 0) {\n      enhancer_ = deepEnhancer;\n    }\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"ObservableMap@\" + getNextId() : \"ObservableMap\";\n    }\n    this.enhancer_ = void 0;\n    this.name_ = void 0;\n    this[$mobx] = ObservableMapMarker;\n    this.data_ = void 0;\n    this.hasMap_ = void 0;\n    // hasMap, not hashMap >-).\n    this.keysAtom_ = void 0;\n    this.interceptors_ = void 0;\n    this.changeListeners_ = void 0;\n    this.dehancer = void 0;\n    this.enhancer_ = enhancer_;\n    this.name_ = name_;\n    if (!isFunction(Map)) {\n      die(18);\n    }\n    initObservable(function () {\n      _this.keysAtom_ = createAtom(process.env.NODE_ENV !== \"production\" ? _this.name_ + \".keys()\" : \"ObservableMap.keys()\");\n      _this.data_ = new Map();\n      _this.hasMap_ = new Map();\n      if (initialData) {\n        _this.merge(initialData);\n      }\n    });\n  }\n  var _proto = ObservableMap.prototype;\n  _proto.has_ = function has_(key) {\n    return this.data_.has(key);\n  };\n  _proto.has = function has(key) {\n    var _this2 = this;\n    if (!globalState.trackingDerivation) {\n      return this.has_(key);\n    }\n    var entry = this.hasMap_.get(key);\n    if (!entry) {\n      var newEntry = entry = new ObservableValue(this.has_(key), referenceEnhancer, process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + stringifyKey(key) + \"?\" : \"ObservableMap.key?\", false);\n      this.hasMap_.set(key, newEntry);\n      onBecomeUnobserved(newEntry, function () {\n        return _this2.hasMap_[\"delete\"](key);\n      });\n    }\n    return entry.get();\n  };\n  _proto.set = function set(key, value) {\n    var hasKey = this.has_(key);\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: hasKey ? UPDATE : ADD,\n        object: this,\n        newValue: value,\n        name: key\n      });\n      if (!change) {\n        return this;\n      }\n      value = change.newValue;\n    }\n    if (hasKey) {\n      this.updateValue_(key, value);\n    } else {\n      this.addValue_(key, value);\n    }\n    return this;\n  };\n  _proto[\"delete\"] = function _delete(key) {\n    var _this3 = this;\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: DELETE,\n        object: this,\n        name: key\n      });\n      if (!change) {\n        return false;\n      }\n    }\n    if (this.has_(key)) {\n      var notifySpy = isSpyEnabled();\n      var notify = hasListeners(this);\n      var _change = notify || notifySpy ? {\n        observableKind: \"map\",\n        debugObjectName: this.name_,\n        type: DELETE,\n        object: this,\n        oldValue: this.data_.get(key).value_,\n        name: key\n      } : null;\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(_change);\n      } // TODO fix type\n      transaction(function () {\n        var _this3$hasMap_$get;\n        _this3.keysAtom_.reportChanged();\n        (_this3$hasMap_$get = _this3.hasMap_.get(key)) == null || _this3$hasMap_$get.setNewValue_(false);\n        var observable = _this3.data_.get(key);\n        observable.setNewValue_(undefined);\n        _this3.data_[\"delete\"](key);\n      });\n      if (notify) {\n        notifyListeners(this, _change);\n      }\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n      return true;\n    }\n    return false;\n  };\n  _proto.updateValue_ = function updateValue_(key, newValue) {\n    var observable = this.data_.get(key);\n    newValue = observable.prepareNewValue_(newValue);\n    if (newValue !== globalState.UNCHANGED) {\n      var notifySpy = isSpyEnabled();\n      var notify = hasListeners(this);\n      var change = notify || notifySpy ? {\n        observableKind: \"map\",\n        debugObjectName: this.name_,\n        type: UPDATE,\n        object: this,\n        oldValue: observable.value_,\n        name: key,\n        newValue: newValue\n      } : null;\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(change);\n      } // TODO fix type\n      observable.setNewValue_(newValue);\n      if (notify) {\n        notifyListeners(this, change);\n      }\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n  };\n  _proto.addValue_ = function addValue_(key, newValue) {\n    var _this4 = this;\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    transaction(function () {\n      var _this4$hasMap_$get;\n      var observable = new ObservableValue(newValue, _this4.enhancer_, process.env.NODE_ENV !== \"production\" ? _this4.name_ + \".\" + stringifyKey(key) : \"ObservableMap.key\", false);\n      _this4.data_.set(key, observable);\n      newValue = observable.value_; // value might have been changed\n      (_this4$hasMap_$get = _this4.hasMap_.get(key)) == null || _this4$hasMap_$get.setNewValue_(true);\n      _this4.keysAtom_.reportChanged();\n    });\n    var notifySpy = isSpyEnabled();\n    var notify = hasListeners(this);\n    var change = notify || notifySpy ? {\n      observableKind: \"map\",\n      debugObjectName: this.name_,\n      type: ADD,\n      object: this,\n      name: key,\n      newValue: newValue\n    } : null;\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportStart(change);\n    } // TODO fix type\n    if (notify) {\n      notifyListeners(this, change);\n    }\n    if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n      spyReportEnd();\n    }\n  };\n  _proto.get = function get(key) {\n    if (this.has(key)) {\n      return this.dehanceValue_(this.data_.get(key).get());\n    }\n    return this.dehanceValue_(undefined);\n  };\n  _proto.dehanceValue_ = function dehanceValue_(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n    return value;\n  };\n  _proto.keys = function keys() {\n    this.keysAtom_.reportObserved();\n    return this.data_.keys();\n  };\n  _proto.values = function values() {\n    var self = this;\n    var keys = this.keys();\n    return makeIterableForMap({\n      next: function next() {\n        var _keys$next = keys.next(),\n          done = _keys$next.done,\n          value = _keys$next.value;\n        return {\n          done: done,\n          value: done ? undefined : self.get(value)\n        };\n      }\n    });\n  };\n  _proto.entries = function entries() {\n    var self = this;\n    var keys = this.keys();\n    return makeIterableForMap({\n      next: function next() {\n        var _keys$next2 = keys.next(),\n          done = _keys$next2.done,\n          value = _keys$next2.value;\n        return {\n          done: done,\n          value: done ? undefined : [value, self.get(value)]\n        };\n      }\n    });\n  };\n  _proto[Symbol.iterator] = function () {\n    return this.entries();\n  };\n  _proto.forEach = function forEach(callback, thisArg) {\n    for (var _iterator = _createForOfIteratorHelperLoose(this), _step; !(_step = _iterator()).done;) {\n      var _step$value = _step.value,\n        key = _step$value[0],\n        value = _step$value[1];\n      callback.call(thisArg, value, key, this);\n    }\n  }\n  /** Merge another object into this object, returns this. */;\n  _proto.merge = function merge(other) {\n    var _this5 = this;\n    if (isObservableMap(other)) {\n      other = new Map(other);\n    }\n    transaction(function () {\n      if (isPlainObject(other)) {\n        getPlainObjectKeys(other).forEach(function (key) {\n          return _this5.set(key, other[key]);\n        });\n      } else if (Array.isArray(other)) {\n        other.forEach(function (_ref) {\n          var key = _ref[0],\n            value = _ref[1];\n          return _this5.set(key, value);\n        });\n      } else if (isES6Map(other)) {\n        if (!isPlainES6Map(other)) {\n          die(19, other);\n        }\n        other.forEach(function (value, key) {\n          return _this5.set(key, value);\n        });\n      } else if (other !== null && other !== undefined) {\n        die(20, other);\n      }\n    });\n    return this;\n  };\n  _proto.clear = function clear() {\n    var _this6 = this;\n    transaction(function () {\n      untracked(function () {\n        for (var _iterator2 = _createForOfIteratorHelperLoose(_this6.keys()), _step2; !(_step2 = _iterator2()).done;) {\n          var key = _step2.value;\n          _this6[\"delete\"](key);\n        }\n      });\n    });\n  };\n  _proto.replace = function replace(values) {\n    var _this7 = this;\n    // Implementation requirements:\n    // - respect ordering of replacement map\n    // - allow interceptors to run and potentially prevent individual operations\n    // - don't recreate observables that already exist in original map (so we don't destroy existing subscriptions)\n    // - don't _keysAtom.reportChanged if the keys of resulting map are indentical (order matters!)\n    // - note that result map may differ from replacement map due to the interceptors\n    transaction(function () {\n      // Convert to map so we can do quick key lookups\n      var replacementMap = convertToMap(values);\n      var orderedData = new Map();\n      // Used for optimization\n      var keysReportChangedCalled = false;\n      // Delete keys that don't exist in replacement map\n      // if the key deletion is prevented by interceptor\n      // add entry at the beginning of the result map\n      for (var _iterator3 = _createForOfIteratorHelperLoose(_this7.data_.keys()), _step3; !(_step3 = _iterator3()).done;) {\n        var key = _step3.value;\n        // Concurrently iterating/deleting keys\n        // iterator should handle this correctly\n        if (!replacementMap.has(key)) {\n          var deleted = _this7[\"delete\"](key);\n          // Was the key removed?\n          if (deleted) {\n            // _keysAtom.reportChanged() was already called\n            keysReportChangedCalled = true;\n          } else {\n            // Delete prevented by interceptor\n            var value = _this7.data_.get(key);\n            orderedData.set(key, value);\n          }\n        }\n      }\n      // Merge entries\n      for (var _iterator4 = _createForOfIteratorHelperLoose(replacementMap.entries()), _step4; !(_step4 = _iterator4()).done;) {\n        var _step4$value = _step4.value,\n          _key = _step4$value[0],\n          _value = _step4$value[1];\n        // We will want to know whether a new key is added\n        var keyExisted = _this7.data_.has(_key);\n        // Add or update value\n        _this7.set(_key, _value);\n        // The addition could have been prevent by interceptor\n        if (_this7.data_.has(_key)) {\n          // The update could have been prevented by interceptor\n          // and also we want to preserve existing values\n          // so use value from _data map (instead of replacement map)\n          var _value2 = _this7.data_.get(_key);\n          orderedData.set(_key, _value2);\n          // Was a new key added?\n          if (!keyExisted) {\n            // _keysAtom.reportChanged() was already called\n            keysReportChangedCalled = true;\n          }\n        }\n      }\n      // Check for possible key order change\n      if (!keysReportChangedCalled) {\n        if (_this7.data_.size !== orderedData.size) {\n          // If size differs, keys are definitely modified\n          _this7.keysAtom_.reportChanged();\n        } else {\n          var iter1 = _this7.data_.keys();\n          var iter2 = orderedData.keys();\n          var next1 = iter1.next();\n          var next2 = iter2.next();\n          while (!next1.done) {\n            if (next1.value !== next2.value) {\n              _this7.keysAtom_.reportChanged();\n              break;\n            }\n            next1 = iter1.next();\n            next2 = iter2.next();\n          }\n        }\n      }\n      // Use correctly ordered map\n      _this7.data_ = orderedData;\n    });\n    return this;\n  };\n  _proto.toString = function toString() {\n    return \"[object ObservableMap]\";\n  };\n  _proto.toJSON = function toJSON() {\n    return Array.from(this);\n  };\n  /**\n   * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n   * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n   * for callback details\n   */\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    if (process.env.NODE_ENV !== \"production\" && fireImmediately === true) {\n      die(\"`observe` doesn't support fireImmediately=true in combination with maps.\");\n    }\n    return registerListener(this, listener);\n  };\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n  return _createClass(ObservableMap, [{\n    key: \"size\",\n    get: function get() {\n      this.keysAtom_.reportObserved();\n      return this.data_.size;\n    }\n  }, {\n    key: Symbol.toStringTag,\n    get: function get() {\n      return \"Map\";\n    }\n  }]);\n}();\n// eslint-disable-next-line\nvar isObservableMap = /*#__PURE__*/createInstanceofPredicate(\"ObservableMap\", ObservableMap);\nfunction makeIterableForMap(iterator) {\n  iterator[Symbol.toStringTag] = \"MapIterator\";\n  return makeIterable(iterator);\n}\nfunction convertToMap(dataStructure) {\n  if (isES6Map(dataStructure) || isObservableMap(dataStructure)) {\n    return dataStructure;\n  } else if (Array.isArray(dataStructure)) {\n    return new Map(dataStructure);\n  } else if (isPlainObject(dataStructure)) {\n    var map = new Map();\n    for (var key in dataStructure) {\n      map.set(key, dataStructure[key]);\n    }\n    return map;\n  } else {\n    return die(21, dataStructure);\n  }\n}\n\nvar ObservableSetMarker = {};\nvar ObservableSet = /*#__PURE__*/function () {\n  function ObservableSet(initialData, enhancer, name_) {\n    var _this = this;\n    if (enhancer === void 0) {\n      enhancer = deepEnhancer;\n    }\n    if (name_ === void 0) {\n      name_ = process.env.NODE_ENV !== \"production\" ? \"ObservableSet@\" + getNextId() : \"ObservableSet\";\n    }\n    this.name_ = void 0;\n    this[$mobx] = ObservableSetMarker;\n    this.data_ = new Set();\n    this.atom_ = void 0;\n    this.changeListeners_ = void 0;\n    this.interceptors_ = void 0;\n    this.dehancer = void 0;\n    this.enhancer_ = void 0;\n    this.name_ = name_;\n    if (!isFunction(Set)) {\n      die(22);\n    }\n    this.enhancer_ = function (newV, oldV) {\n      return enhancer(newV, oldV, name_);\n    };\n    initObservable(function () {\n      _this.atom_ = createAtom(_this.name_);\n      if (initialData) {\n        _this.replace(initialData);\n      }\n    });\n  }\n  var _proto = ObservableSet.prototype;\n  _proto.dehanceValue_ = function dehanceValue_(value) {\n    if (this.dehancer !== undefined) {\n      return this.dehancer(value);\n    }\n    return value;\n  };\n  _proto.clear = function clear() {\n    var _this2 = this;\n    transaction(function () {\n      untracked(function () {\n        for (var _iterator = _createForOfIteratorHelperLoose(_this2.data_.values()), _step; !(_step = _iterator()).done;) {\n          var value = _step.value;\n          _this2[\"delete\"](value);\n        }\n      });\n    });\n  };\n  _proto.forEach = function forEach(callbackFn, thisArg) {\n    for (var _iterator2 = _createForOfIteratorHelperLoose(this), _step2; !(_step2 = _iterator2()).done;) {\n      var value = _step2.value;\n      callbackFn.call(thisArg, value, value, this);\n    }\n  };\n  _proto.add = function add(value) {\n    var _this3 = this;\n    checkIfStateModificationsAreAllowed(this.atom_);\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: ADD,\n        object: this,\n        newValue: value\n      });\n      if (!change) {\n        return this;\n      }\n      // implemented reassignment same as it's done for ObservableMap\n      value = change.newValue;\n    }\n    if (!this.has(value)) {\n      transaction(function () {\n        _this3.data_.add(_this3.enhancer_(value, undefined));\n        _this3.atom_.reportChanged();\n      });\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var notify = hasListeners(this);\n      var _change = notify || notifySpy ? {\n        observableKind: \"set\",\n        debugObjectName: this.name_,\n        type: ADD,\n        object: this,\n        newValue: value\n      } : null;\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportStart(_change);\n      }\n      if (notify) {\n        notifyListeners(this, _change);\n      }\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportEnd();\n      }\n    }\n    return this;\n  };\n  _proto[\"delete\"] = function _delete(value) {\n    var _this4 = this;\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: DELETE,\n        object: this,\n        oldValue: value\n      });\n      if (!change) {\n        return false;\n      }\n    }\n    if (this.has(value)) {\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var notify = hasListeners(this);\n      var _change2 = notify || notifySpy ? {\n        observableKind: \"set\",\n        debugObjectName: this.name_,\n        type: DELETE,\n        object: this,\n        oldValue: value\n      } : null;\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportStart(_change2);\n      }\n      transaction(function () {\n        _this4.atom_.reportChanged();\n        _this4.data_[\"delete\"](value);\n      });\n      if (notify) {\n        notifyListeners(this, _change2);\n      }\n      if (notifySpy && process.env.NODE_ENV !== \"production\") {\n        spyReportEnd();\n      }\n      return true;\n    }\n    return false;\n  };\n  _proto.has = function has(value) {\n    this.atom_.reportObserved();\n    return this.data_.has(this.dehanceValue_(value));\n  };\n  _proto.entries = function entries() {\n    var values = this.values();\n    return makeIterableForSet({\n      next: function next() {\n        var _values$next = values.next(),\n          value = _values$next.value,\n          done = _values$next.done;\n        return !done ? {\n          value: [value, value],\n          done: done\n        } : {\n          value: undefined,\n          done: done\n        };\n      }\n    });\n  };\n  _proto.keys = function keys() {\n    return this.values();\n  };\n  _proto.values = function values() {\n    this.atom_.reportObserved();\n    var self = this;\n    var values = this.data_.values();\n    return makeIterableForSet({\n      next: function next() {\n        var _values$next2 = values.next(),\n          value = _values$next2.value,\n          done = _values$next2.done;\n        return !done ? {\n          value: self.dehanceValue_(value),\n          done: done\n        } : {\n          value: undefined,\n          done: done\n        };\n      }\n    });\n  };\n  _proto.intersection = function intersection(otherSet) {\n    if (isES6Set(otherSet) && !isObservableSet(otherSet)) {\n      return otherSet.intersection(this);\n    } else {\n      var dehancedSet = new Set(this);\n      return dehancedSet.intersection(otherSet);\n    }\n  };\n  _proto.union = function union(otherSet) {\n    if (isES6Set(otherSet) && !isObservableSet(otherSet)) {\n      return otherSet.union(this);\n    } else {\n      var dehancedSet = new Set(this);\n      return dehancedSet.union(otherSet);\n    }\n  };\n  _proto.difference = function difference(otherSet) {\n    return new Set(this).difference(otherSet);\n  };\n  _proto.symmetricDifference = function symmetricDifference(otherSet) {\n    if (isES6Set(otherSet) && !isObservableSet(otherSet)) {\n      return otherSet.symmetricDifference(this);\n    } else {\n      var dehancedSet = new Set(this);\n      return dehancedSet.symmetricDifference(otherSet);\n    }\n  };\n  _proto.isSubsetOf = function isSubsetOf(otherSet) {\n    return new Set(this).isSubsetOf(otherSet);\n  };\n  _proto.isSupersetOf = function isSupersetOf(otherSet) {\n    return new Set(this).isSupersetOf(otherSet);\n  };\n  _proto.isDisjointFrom = function isDisjointFrom(otherSet) {\n    if (isES6Set(otherSet) && !isObservableSet(otherSet)) {\n      return otherSet.isDisjointFrom(this);\n    } else {\n      var dehancedSet = new Set(this);\n      return dehancedSet.isDisjointFrom(otherSet);\n    }\n  };\n  _proto.replace = function replace(other) {\n    var _this5 = this;\n    if (isObservableSet(other)) {\n      other = new Set(other);\n    }\n    transaction(function () {\n      if (Array.isArray(other)) {\n        _this5.clear();\n        other.forEach(function (value) {\n          return _this5.add(value);\n        });\n      } else if (isES6Set(other)) {\n        _this5.clear();\n        other.forEach(function (value) {\n          return _this5.add(value);\n        });\n      } else if (other !== null && other !== undefined) {\n        die(\"Cannot initialize set from \" + other);\n      }\n    });\n    return this;\n  };\n  _proto.observe_ = function observe_(listener, fireImmediately) {\n    // ... 'fireImmediately' could also be true?\n    if (process.env.NODE_ENV !== \"production\" && fireImmediately === true) {\n      die(\"`observe` doesn't support fireImmediately=true in combination with sets.\");\n    }\n    return registerListener(this, listener);\n  };\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n  _proto.toJSON = function toJSON() {\n    return Array.from(this);\n  };\n  _proto.toString = function toString() {\n    return \"[object ObservableSet]\";\n  };\n  _proto[Symbol.iterator] = function () {\n    return this.values();\n  };\n  return _createClass(ObservableSet, [{\n    key: \"size\",\n    get: function get() {\n      this.atom_.reportObserved();\n      return this.data_.size;\n    }\n  }, {\n    key: Symbol.toStringTag,\n    get: function get() {\n      return \"Set\";\n    }\n  }]);\n}();\n// eslint-disable-next-line\nvar isObservableSet = /*#__PURE__*/createInstanceofPredicate(\"ObservableSet\", ObservableSet);\nfunction makeIterableForSet(iterator) {\n  iterator[Symbol.toStringTag] = \"SetIterator\";\n  return makeIterable(iterator);\n}\n\nvar descriptorCache = /*#__PURE__*/Object.create(null);\nvar REMOVE = \"remove\";\nvar ObservableObjectAdministration = /*#__PURE__*/function () {\n  function ObservableObjectAdministration(target_, values_, name_,\n  // Used anytime annotation is not explicitely provided\n  defaultAnnotation_) {\n    if (values_ === void 0) {\n      values_ = new Map();\n    }\n    if (defaultAnnotation_ === void 0) {\n      defaultAnnotation_ = autoAnnotation;\n    }\n    this.target_ = void 0;\n    this.values_ = void 0;\n    this.name_ = void 0;\n    this.defaultAnnotation_ = void 0;\n    this.keysAtom_ = void 0;\n    this.changeListeners_ = void 0;\n    this.interceptors_ = void 0;\n    this.proxy_ = void 0;\n    this.isPlainObject_ = void 0;\n    this.appliedAnnotations_ = void 0;\n    this.pendingKeys_ = void 0;\n    this.target_ = target_;\n    this.values_ = values_;\n    this.name_ = name_;\n    this.defaultAnnotation_ = defaultAnnotation_;\n    this.keysAtom_ = new Atom(process.env.NODE_ENV !== \"production\" ? this.name_ + \".keys\" : \"ObservableObject.keys\");\n    // Optimization: we use this frequently\n    this.isPlainObject_ = isPlainObject(this.target_);\n    if (process.env.NODE_ENV !== \"production\" && !isAnnotation(this.defaultAnnotation_)) {\n      die(\"defaultAnnotation must be valid annotation\");\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      // Prepare structure for tracking which fields were already annotated\n      this.appliedAnnotations_ = {};\n    }\n  }\n  var _proto = ObservableObjectAdministration.prototype;\n  _proto.getObservablePropValue_ = function getObservablePropValue_(key) {\n    return this.values_.get(key).get();\n  };\n  _proto.setObservablePropValue_ = function setObservablePropValue_(key, newValue) {\n    var observable = this.values_.get(key);\n    if (observable instanceof ComputedValue) {\n      observable.set(newValue);\n      return true;\n    }\n    // intercept\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        type: UPDATE,\n        object: this.proxy_ || this.target_,\n        name: key,\n        newValue: newValue\n      });\n      if (!change) {\n        return null;\n      }\n      newValue = change.newValue;\n    }\n    newValue = observable.prepareNewValue_(newValue);\n    // notify spy & observers\n    if (newValue !== globalState.UNCHANGED) {\n      var notify = hasListeners(this);\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var _change = notify || notifySpy ? {\n        type: UPDATE,\n        observableKind: \"object\",\n        debugObjectName: this.name_,\n        object: this.proxy_ || this.target_,\n        oldValue: observable.value_,\n        name: key,\n        newValue: newValue\n      } : null;\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(_change);\n      }\n      observable.setNewValue_(newValue);\n      if (notify) {\n        notifyListeners(this, _change);\n      }\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n    return true;\n  };\n  _proto.get_ = function get_(key) {\n    if (globalState.trackingDerivation && !hasProp(this.target_, key)) {\n      // Key doesn't exist yet, subscribe for it in case it's added later\n      this.has_(key);\n    }\n    return this.target_[key];\n  }\n  /**\n   * @param {PropertyKey} key\n   * @param {any} value\n   * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is\n   * @param {boolean} proxyTrap whether it's called from proxy trap\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n   */;\n  _proto.set_ = function set_(key, value, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    // Don't use .has(key) - we care about own\n    if (hasProp(this.target_, key)) {\n      // Existing prop\n      if (this.values_.has(key)) {\n        // Observable (can be intercepted)\n        return this.setObservablePropValue_(key, value);\n      } else if (proxyTrap) {\n        // Non-observable - proxy\n        return Reflect.set(this.target_, key, value);\n      } else {\n        // Non-observable\n        this.target_[key] = value;\n        return true;\n      }\n    } else {\n      // New prop\n      return this.extend_(key, {\n        value: value,\n        enumerable: true,\n        writable: true,\n        configurable: true\n      }, this.defaultAnnotation_, proxyTrap);\n    }\n  }\n  // Trap for \"in\"\n  ;\n  _proto.has_ = function has_(key) {\n    if (!globalState.trackingDerivation) {\n      // Skip key subscription outside derivation\n      return key in this.target_;\n    }\n    this.pendingKeys_ || (this.pendingKeys_ = new Map());\n    var entry = this.pendingKeys_.get(key);\n    if (!entry) {\n      entry = new ObservableValue(key in this.target_, referenceEnhancer, process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + stringifyKey(key) + \"?\" : \"ObservableObject.key?\", false);\n      this.pendingKeys_.set(key, entry);\n    }\n    return entry.get();\n  }\n  /**\n   * @param {PropertyKey} key\n   * @param {Annotation|boolean} annotation true - use default annotation, false - ignore prop\n   */;\n  _proto.make_ = function make_(key, annotation) {\n    if (annotation === true) {\n      annotation = this.defaultAnnotation_;\n    }\n    if (annotation === false) {\n      return;\n    }\n    assertAnnotable(this, annotation, key);\n    if (!(key in this.target_)) {\n      var _this$target_$storedA;\n      // Throw on missing key, except for decorators:\n      // Decorator annotations are collected from whole prototype chain.\n      // When called from super() some props may not exist yet.\n      // However we don't have to worry about missing prop,\n      // because the decorator must have been applied to something.\n      if ((_this$target_$storedA = this.target_[storedAnnotationsSymbol]) != null && _this$target_$storedA[key]) {\n        return; // will be annotated by subclass constructor\n      } else {\n        die(1, annotation.annotationType_, this.name_ + \".\" + key.toString());\n      }\n    }\n    var source = this.target_;\n    while (source && source !== objectPrototype) {\n      var descriptor = getDescriptor(source, key);\n      if (descriptor) {\n        var outcome = annotation.make_(this, key, descriptor, source);\n        if (outcome === 0 /* MakeResult.Cancel */) {\n          return;\n        }\n        if (outcome === 1 /* MakeResult.Break */) {\n          break;\n        }\n      }\n      source = Object.getPrototypeOf(source);\n    }\n    recordAnnotationApplied(this, annotation, key);\n  }\n  /**\n   * @param {PropertyKey} key\n   * @param {PropertyDescriptor} descriptor\n   * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is\n   * @param {boolean} proxyTrap whether it's called from proxy trap\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n   */;\n  _proto.extend_ = function extend_(key, descriptor, annotation, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    if (annotation === true) {\n      annotation = this.defaultAnnotation_;\n    }\n    if (annotation === false) {\n      return this.defineProperty_(key, descriptor, proxyTrap);\n    }\n    assertAnnotable(this, annotation, key);\n    var outcome = annotation.extend_(this, key, descriptor, proxyTrap);\n    if (outcome) {\n      recordAnnotationApplied(this, annotation, key);\n    }\n    return outcome;\n  }\n  /**\n   * @param {PropertyKey} key\n   * @param {PropertyDescriptor} descriptor\n   * @param {boolean} proxyTrap whether it's called from proxy trap\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n   */;\n  _proto.defineProperty_ = function defineProperty_(key, descriptor, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    try {\n      startBatch();\n      // Delete\n      var deleteOutcome = this.delete_(key);\n      if (!deleteOutcome) {\n        // Failure or intercepted\n        return deleteOutcome;\n      }\n      // ADD interceptor\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          object: this.proxy_ || this.target_,\n          name: key,\n          type: ADD,\n          newValue: descriptor.value\n        });\n        if (!change) {\n          return null;\n        }\n        var newValue = change.newValue;\n        if (descriptor.value !== newValue) {\n          descriptor = _extends({}, descriptor, {\n            value: newValue\n          });\n        }\n      }\n      // Define\n      if (proxyTrap) {\n        if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n          return false;\n        }\n      } else {\n        defineProperty(this.target_, key, descriptor);\n      }\n      // Notify\n      this.notifyPropertyAddition_(key, descriptor.value);\n    } finally {\n      endBatch();\n    }\n    return true;\n  }\n  // If original descriptor becomes relevant, move this to annotation directly\n  ;\n  _proto.defineObservableProperty_ = function defineObservableProperty_(key, value, enhancer, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    try {\n      startBatch();\n      // Delete\n      var deleteOutcome = this.delete_(key);\n      if (!deleteOutcome) {\n        // Failure or intercepted\n        return deleteOutcome;\n      }\n      // ADD interceptor\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          object: this.proxy_ || this.target_,\n          name: key,\n          type: ADD,\n          newValue: value\n        });\n        if (!change) {\n          return null;\n        }\n        value = change.newValue;\n      }\n      var cachedDescriptor = getCachedObservablePropDescriptor(key);\n      var descriptor = {\n        configurable: globalState.safeDescriptors ? this.isPlainObject_ : true,\n        enumerable: true,\n        get: cachedDescriptor.get,\n        set: cachedDescriptor.set\n      };\n      // Define\n      if (proxyTrap) {\n        if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n          return false;\n        }\n      } else {\n        defineProperty(this.target_, key, descriptor);\n      }\n      var observable = new ObservableValue(value, enhancer, process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + key.toString() : \"ObservableObject.key\", false);\n      this.values_.set(key, observable);\n      // Notify (value possibly changed by ObservableValue)\n      this.notifyPropertyAddition_(key, observable.value_);\n    } finally {\n      endBatch();\n    }\n    return true;\n  }\n  // If original descriptor becomes relevant, move this to annotation directly\n  ;\n  _proto.defineComputedProperty_ = function defineComputedProperty_(key, options, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    try {\n      startBatch();\n      // Delete\n      var deleteOutcome = this.delete_(key);\n      if (!deleteOutcome) {\n        // Failure or intercepted\n        return deleteOutcome;\n      }\n      // ADD interceptor\n      if (hasInterceptors(this)) {\n        var change = interceptChange(this, {\n          object: this.proxy_ || this.target_,\n          name: key,\n          type: ADD,\n          newValue: undefined\n        });\n        if (!change) {\n          return null;\n        }\n      }\n      options.name || (options.name = process.env.NODE_ENV !== \"production\" ? this.name_ + \".\" + key.toString() : \"ObservableObject.key\");\n      options.context = this.proxy_ || this.target_;\n      var cachedDescriptor = getCachedObservablePropDescriptor(key);\n      var descriptor = {\n        configurable: globalState.safeDescriptors ? this.isPlainObject_ : true,\n        enumerable: false,\n        get: cachedDescriptor.get,\n        set: cachedDescriptor.set\n      };\n      // Define\n      if (proxyTrap) {\n        if (!Reflect.defineProperty(this.target_, key, descriptor)) {\n          return false;\n        }\n      } else {\n        defineProperty(this.target_, key, descriptor);\n      }\n      this.values_.set(key, new ComputedValue(options));\n      // Notify\n      this.notifyPropertyAddition_(key, undefined);\n    } finally {\n      endBatch();\n    }\n    return true;\n  }\n  /**\n   * @param {PropertyKey} key\n   * @param {PropertyDescriptor} descriptor\n   * @param {boolean} proxyTrap whether it's called from proxy trap\n   * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor\n   */;\n  _proto.delete_ = function delete_(key, proxyTrap) {\n    if (proxyTrap === void 0) {\n      proxyTrap = false;\n    }\n    checkIfStateModificationsAreAllowed(this.keysAtom_);\n    // No such prop\n    if (!hasProp(this.target_, key)) {\n      return true;\n    }\n    // Intercept\n    if (hasInterceptors(this)) {\n      var change = interceptChange(this, {\n        object: this.proxy_ || this.target_,\n        name: key,\n        type: REMOVE\n      });\n      // Cancelled\n      if (!change) {\n        return null;\n      }\n    }\n    // Delete\n    try {\n      var _this$pendingKeys_;\n      startBatch();\n      var notify = hasListeners(this);\n      var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n      var observable = this.values_.get(key);\n      // Value needed for spies/listeners\n      var value = undefined;\n      // Optimization: don't pull the value unless we will need it\n      if (!observable && (notify || notifySpy)) {\n        var _getDescriptor;\n        value = (_getDescriptor = getDescriptor(this.target_, key)) == null ? void 0 : _getDescriptor.value;\n      }\n      // delete prop (do first, may fail)\n      if (proxyTrap) {\n        if (!Reflect.deleteProperty(this.target_, key)) {\n          return false;\n        }\n      } else {\n        delete this.target_[key];\n      }\n      // Allow re-annotating this field\n      if (process.env.NODE_ENV !== \"production\") {\n        delete this.appliedAnnotations_[key];\n      }\n      // Clear observable\n      if (observable) {\n        this.values_[\"delete\"](key);\n        // for computed, value is undefined\n        if (observable instanceof ObservableValue) {\n          value = observable.value_;\n        }\n        // Notify: autorun(() => obj[key]), see #1796\n        propagateChanged(observable);\n      }\n      // Notify \"keys/entries/values\" observers\n      this.keysAtom_.reportChanged();\n      // Notify \"has\" observers\n      // \"in\" as it may still exist in proto\n      (_this$pendingKeys_ = this.pendingKeys_) == null || (_this$pendingKeys_ = _this$pendingKeys_.get(key)) == null || _this$pendingKeys_.set(key in this.target_);\n      // Notify spies/listeners\n      if (notify || notifySpy) {\n        var _change2 = {\n          type: REMOVE,\n          observableKind: \"object\",\n          object: this.proxy_ || this.target_,\n          debugObjectName: this.name_,\n          oldValue: value,\n          name: key\n        };\n        if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n          spyReportStart(_change2);\n        }\n        if (notify) {\n          notifyListeners(this, _change2);\n        }\n        if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n          spyReportEnd();\n        }\n      }\n    } finally {\n      endBatch();\n    }\n    return true;\n  }\n  /**\n   * Observes this object. Triggers for the events 'add', 'update' and 'delete'.\n   * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe\n   * for callback details\n   */;\n  _proto.observe_ = function observe_(callback, fireImmediately) {\n    if (process.env.NODE_ENV !== \"production\" && fireImmediately === true) {\n      die(\"`observe` doesn't support the fire immediately property for observable objects.\");\n    }\n    return registerListener(this, callback);\n  };\n  _proto.intercept_ = function intercept_(handler) {\n    return registerInterceptor(this, handler);\n  };\n  _proto.notifyPropertyAddition_ = function notifyPropertyAddition_(key, value) {\n    var _this$pendingKeys_2;\n    var notify = hasListeners(this);\n    var notifySpy = process.env.NODE_ENV !== \"production\" && isSpyEnabled();\n    if (notify || notifySpy) {\n      var change = notify || notifySpy ? {\n        type: ADD,\n        observableKind: \"object\",\n        debugObjectName: this.name_,\n        object: this.proxy_ || this.target_,\n        name: key,\n        newValue: value\n      } : null;\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportStart(change);\n      }\n      if (notify) {\n        notifyListeners(this, change);\n      }\n      if (process.env.NODE_ENV !== \"production\" && notifySpy) {\n        spyReportEnd();\n      }\n    }\n    (_this$pendingKeys_2 = this.pendingKeys_) == null || (_this$pendingKeys_2 = _this$pendingKeys_2.get(key)) == null || _this$pendingKeys_2.set(true);\n    // Notify \"keys/entries/values\" observers\n    this.keysAtom_.reportChanged();\n  };\n  _proto.ownKeys_ = function ownKeys_() {\n    this.keysAtom_.reportObserved();\n    return ownKeys(this.target_);\n  };\n  _proto.keys_ = function keys_() {\n    // Returns enumerable && own, but unfortunately keysAtom will report on ANY key change.\n    // There is no way to distinguish between Object.keys(object) and Reflect.ownKeys(object) - both are handled by ownKeys trap.\n    // We can either over-report in Object.keys(object) or under-report in Reflect.ownKeys(object)\n    // We choose to over-report in Object.keys(object), because:\n    // - typically it's used with simple data objects\n    // - when symbolic/non-enumerable keys are relevant Reflect.ownKeys works as expected\n    this.keysAtom_.reportObserved();\n    return Object.keys(this.target_);\n  };\n  return ObservableObjectAdministration;\n}();\nfunction asObservableObject(target, options) {\n  var _options$name;\n  if (process.env.NODE_ENV !== \"production\" && options && isObservableObject(target)) {\n    die(\"Options can't be provided for already observable objects.\");\n  }\n  if (hasProp(target, $mobx)) {\n    if (process.env.NODE_ENV !== \"production\" && !(getAdministration(target) instanceof ObservableObjectAdministration)) {\n      die(\"Cannot convert '\" + getDebugName(target) + \"' into observable object:\" + \"\\nThe target is already observable of different type.\" + \"\\nExtending builtins is not supported.\");\n    }\n    return target;\n  }\n  if (process.env.NODE_ENV !== \"production\" && !Object.isExtensible(target)) {\n    die(\"Cannot make the designated object observable; it is not extensible\");\n  }\n  var name = (_options$name = options == null ? void 0 : options.name) != null ? _options$name : process.env.NODE_ENV !== \"production\" ? (isPlainObject(target) ? \"ObservableObject\" : target.constructor.name) + \"@\" + getNextId() : \"ObservableObject\";\n  var adm = new ObservableObjectAdministration(target, new Map(), String(name), getAnnotationFromOptions(options));\n  addHiddenProp(target, $mobx, adm);\n  return target;\n}\nvar isObservableObjectAdministration = /*#__PURE__*/createInstanceofPredicate(\"ObservableObjectAdministration\", ObservableObjectAdministration);\nfunction getCachedObservablePropDescriptor(key) {\n  return descriptorCache[key] || (descriptorCache[key] = {\n    get: function get() {\n      return this[$mobx].getObservablePropValue_(key);\n    },\n    set: function set(value) {\n      return this[$mobx].setObservablePropValue_(key, value);\n    }\n  });\n}\nfunction isObservableObject(thing) {\n  if (isObject(thing)) {\n    return isObservableObjectAdministration(thing[$mobx]);\n  }\n  return false;\n}\nfunction recordAnnotationApplied(adm, annotation, key) {\n  var _adm$target_$storedAn;\n  if (process.env.NODE_ENV !== \"production\") {\n    adm.appliedAnnotations_[key] = annotation;\n  }\n  // Remove applied decorator annotation so we don't try to apply it again in subclass constructor\n  (_adm$target_$storedAn = adm.target_[storedAnnotationsSymbol]) == null || delete _adm$target_$storedAn[key];\n}\nfunction assertAnnotable(adm, annotation, key) {\n  // Valid annotation\n  if (process.env.NODE_ENV !== \"production\" && !isAnnotation(annotation)) {\n    die(\"Cannot annotate '\" + adm.name_ + \".\" + key.toString() + \"': Invalid annotation.\");\n  }\n  /*\n  // Configurable, not sealed, not frozen\n  // Possibly not needed, just a little better error then the one thrown by engine.\n  // Cases where this would be useful the most (subclass field initializer) are not interceptable by this.\n  if (__DEV__) {\n      const configurable = getDescriptor(adm.target_, key)?.configurable\n      const frozen = Object.isFrozen(adm.target_)\n      const sealed = Object.isSealed(adm.target_)\n      if (!configurable || frozen || sealed) {\n          const fieldName = `${adm.name_}.${key.toString()}`\n          const requestedAnnotationType = annotation.annotationType_\n          let error = `Cannot apply '${requestedAnnotationType}' to '${fieldName}':`\n          if (frozen) {\n              error += `\\nObject is frozen.`\n          }\n          if (sealed) {\n              error += `\\nObject is sealed.`\n          }\n          if (!configurable) {\n              error += `\\nproperty is not configurable.`\n              // Mention only if caused by us to avoid confusion\n              if (hasProp(adm.appliedAnnotations!, key)) {\n                  error += `\\nTo prevent accidental re-definition of a field by a subclass, `\n                  error += `all annotated fields of non-plain objects (classes) are not configurable.`\n              }\n          }\n          die(error)\n      }\n  }\n  */\n  // Not annotated\n  if (process.env.NODE_ENV !== \"production\" && !isOverride(annotation) && hasProp(adm.appliedAnnotations_, key)) {\n    var fieldName = adm.name_ + \".\" + key.toString();\n    var currentAnnotationType = adm.appliedAnnotations_[key].annotationType_;\n    var requestedAnnotationType = annotation.annotationType_;\n    die(\"Cannot apply '\" + requestedAnnotationType + \"' to '\" + fieldName + \"':\" + (\"\\nThe field is already annotated with '\" + currentAnnotationType + \"'.\") + \"\\nRe-annotating fields is not allowed.\" + \"\\nUse 'override' annotation for methods overridden by subclass.\");\n  }\n}\n\n// Bug in safari 9.* (or iOS 9 safari mobile). See #364\nvar ENTRY_0 = /*#__PURE__*/createArrayEntryDescriptor(0);\nvar safariPrototypeSetterInheritanceBug = /*#__PURE__*/function () {\n  var v = false;\n  var p = {};\n  Object.defineProperty(p, \"0\", {\n    set: function set() {\n      v = true;\n    }\n  });\n  /*#__PURE__*/Object.create(p)[\"0\"] = 1;\n  return v === false;\n}();\n/**\n * This array buffer contains two lists of properties, so that all arrays\n * can recycle their property definitions, which significantly improves performance of creating\n * properties on the fly.\n */\nvar OBSERVABLE_ARRAY_BUFFER_SIZE = 0;\n// Typescript workaround to make sure ObservableArray extends Array\nvar StubArray = function StubArray() {};\nfunction inherit(ctor, proto) {\n  if (Object.setPrototypeOf) {\n    Object.setPrototypeOf(ctor.prototype, proto);\n  } else if (ctor.prototype.__proto__ !== undefined) {\n    ctor.prototype.__proto__ = proto;\n  } else {\n    ctor.prototype = proto;\n  }\n}\ninherit(StubArray, Array.prototype);\n// Weex proto freeze protection was here,\n// but it is unclear why the hack is need as MobX never changed the prototype\n// anyway, so removed it in V6\nvar LegacyObservableArray = /*#__PURE__*/function (_StubArray) {\n  function LegacyObservableArray(initialValues, enhancer, name, owned) {\n    var _this;\n    if (name === void 0) {\n      name = process.env.NODE_ENV !== \"production\" ? \"ObservableArray@\" + getNextId() : \"ObservableArray\";\n    }\n    if (owned === void 0) {\n      owned = false;\n    }\n    _this = _StubArray.call(this) || this;\n    initObservable(function () {\n      var adm = new ObservableArrayAdministration(name, enhancer, owned, true);\n      adm.proxy_ = _this;\n      addHiddenFinalProp(_this, $mobx, adm);\n      if (initialValues && initialValues.length) {\n        // @ts-ignore\n        _this.spliceWithArray(0, 0, initialValues);\n      }\n      if (safariPrototypeSetterInheritanceBug) {\n        // Seems that Safari won't use numeric prototype setter until any * numeric property is\n        // defined on the instance. After that it works fine, even if this property is deleted.\n        Object.defineProperty(_this, \"0\", ENTRY_0);\n      }\n    });\n    return _this;\n  }\n  _inheritsLoose(LegacyObservableArray, _StubArray);\n  var _proto = LegacyObservableArray.prototype;\n  _proto.concat = function concat() {\n    this[$mobx].atom_.reportObserved();\n    for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) {\n      arrays[_key] = arguments[_key];\n    }\n    return Array.prototype.concat.apply(this.slice(),\n    //@ts-ignore\n    arrays.map(function (a) {\n      return isObservableArray(a) ? a.slice() : a;\n    }));\n  };\n  _proto[Symbol.iterator] = function () {\n    var self = this;\n    var nextIndex = 0;\n    return makeIterable({\n      next: function next() {\n        return nextIndex < self.length ? {\n          value: self[nextIndex++],\n          done: false\n        } : {\n          done: true,\n          value: undefined\n        };\n      }\n    });\n  };\n  return _createClass(LegacyObservableArray, [{\n    key: \"length\",\n    get: function get() {\n      return this[$mobx].getArrayLength_();\n    },\n    set: function set(newLength) {\n      this[$mobx].setArrayLength_(newLength);\n    }\n  }, {\n    key: Symbol.toStringTag,\n    get: function get() {\n      return \"Array\";\n    }\n  }]);\n}(StubArray);\nObject.entries(arrayExtensions).forEach(function (_ref) {\n  var prop = _ref[0],\n    fn = _ref[1];\n  if (prop !== \"concat\") {\n    addHiddenProp(LegacyObservableArray.prototype, prop, fn);\n  }\n});\nfunction createArrayEntryDescriptor(index) {\n  return {\n    enumerable: false,\n    configurable: true,\n    get: function get() {\n      return this[$mobx].get_(index);\n    },\n    set: function set(value) {\n      this[$mobx].set_(index, value);\n    }\n  };\n}\nfunction createArrayBufferItem(index) {\n  defineProperty(LegacyObservableArray.prototype, \"\" + index, createArrayEntryDescriptor(index));\n}\nfunction reserveArrayBuffer(max) {\n  if (max > OBSERVABLE_ARRAY_BUFFER_SIZE) {\n    for (var index = OBSERVABLE_ARRAY_BUFFER_SIZE; index < max + 100; index++) {\n      createArrayBufferItem(index);\n    }\n    OBSERVABLE_ARRAY_BUFFER_SIZE = max;\n  }\n}\nreserveArrayBuffer(1000);\nfunction createLegacyArray(initialValues, enhancer, name) {\n  return new LegacyObservableArray(initialValues, enhancer, name);\n}\n\nfunction getAtom(thing, property) {\n  if (typeof thing === \"object\" && thing !== null) {\n    if (isObservableArray(thing)) {\n      if (property !== undefined) {\n        die(23);\n      }\n      return thing[$mobx].atom_;\n    }\n    if (isObservableSet(thing)) {\n      return thing.atom_;\n    }\n    if (isObservableMap(thing)) {\n      if (property === undefined) {\n        return thing.keysAtom_;\n      }\n      var observable = thing.data_.get(property) || thing.hasMap_.get(property);\n      if (!observable) {\n        die(25, property, getDebugName(thing));\n      }\n      return observable;\n    }\n    if (isObservableObject(thing)) {\n      if (!property) {\n        return die(26);\n      }\n      var _observable = thing[$mobx].values_.get(property);\n      if (!_observable) {\n        die(27, property, getDebugName(thing));\n      }\n      return _observable;\n    }\n    if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n      return thing;\n    }\n  } else if (isFunction(thing)) {\n    if (isReaction(thing[$mobx])) {\n      // disposer function\n      return thing[$mobx];\n    }\n  }\n  die(28);\n}\nfunction getAdministration(thing, property) {\n  if (!thing) {\n    die(29);\n  }\n  if (property !== undefined) {\n    return getAdministration(getAtom(thing, property));\n  }\n  if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) {\n    return thing;\n  }\n  if (isObservableMap(thing) || isObservableSet(thing)) {\n    return thing;\n  }\n  if (thing[$mobx]) {\n    return thing[$mobx];\n  }\n  die(24, thing);\n}\nfunction getDebugName(thing, property) {\n  var named;\n  if (property !== undefined) {\n    named = getAtom(thing, property);\n  } else if (isAction(thing)) {\n    return thing.name;\n  } else if (isObservableObject(thing) || isObservableMap(thing) || isObservableSet(thing)) {\n    named = getAdministration(thing);\n  } else {\n    // valid for arrays as well\n    named = getAtom(thing);\n  }\n  return named.name_;\n}\n/**\n * Helper function for initializing observable structures, it applies:\n * 1. allowStateChanges so we don't violate enforceActions.\n * 2. untracked so we don't accidentaly subscribe to anything observable accessed during init in case the observable is created inside derivation.\n * 3. batch to avoid state version updates\n */\nfunction initObservable(cb) {\n  var derivation = untrackedStart();\n  var allowStateChanges = allowStateChangesStart(true);\n  startBatch();\n  try {\n    return cb();\n  } finally {\n    endBatch();\n    allowStateChangesEnd(allowStateChanges);\n    untrackedEnd(derivation);\n  }\n}\n\nvar toString = objectPrototype.toString;\nfunction deepEqual(a, b, depth) {\n  if (depth === void 0) {\n    depth = -1;\n  }\n  return eq(a, b, depth);\n}\n// Copied from https://github.com/jashkenas/underscore/blob/5c237a7c682fb68fd5378203f0bf22dce1624854/underscore.js#L1186-L1289\n// Modified: \"Deep compare objects\" part to iterate over keys in forward order instead of reverse order.\n//\n// Internal recursive comparison function for `isEqual`.\nfunction eq(a, b, depth, aStack, bStack) {\n  // Identical objects are equal. `0 === -0`, but they aren't identical.\n  // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n  if (a === b) {\n    return a !== 0 || 1 / a === 1 / b;\n  }\n  // `null` or `undefined` only equal to itself (strict comparison).\n  if (a == null || b == null) {\n    return false;\n  }\n  // `NaN`s are equivalent, but non-reflexive.\n  if (a !== a) {\n    return b !== b;\n  }\n  // Exhaust primitive checks\n  var type = typeof a;\n  if (type !== \"function\" && type !== \"object\" && typeof b != \"object\") {\n    return false;\n  }\n  // Compare `[[Class]]` names.\n  var className = toString.call(a);\n  if (className !== toString.call(b)) {\n    return false;\n  }\n  switch (className) {\n    // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n    case \"[object RegExp]\":\n    // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n    case \"[object String]\":\n      // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n      // equivalent to `new String(\"5\")`.\n      return \"\" + a === \"\" + b;\n    case \"[object Number]\":\n      // `NaN`s are equivalent, but non-reflexive.\n      // Object(NaN) is equivalent to NaN.\n      if (+a !== +a) {\n        return +b !== +b;\n      }\n      // An `egal` comparison is performed for other numeric values.\n      return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n    case \"[object Date]\":\n    case \"[object Boolean]\":\n      // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n      // millisecond representations. Note that invalid dates with millisecond representations\n      // of `NaN` are not equivalent.\n      return +a === +b;\n    case \"[object Symbol]\":\n      return typeof Symbol !== \"undefined\" && Symbol.valueOf.call(a) === Symbol.valueOf.call(b);\n    case \"[object Map]\":\n    case \"[object Set]\":\n      // Maps and Sets are unwrapped to arrays of entry-pairs, adding an incidental level.\n      // Hide this extra level by increasing the depth.\n      if (depth >= 0) {\n        depth++;\n      }\n      break;\n  }\n  // Unwrap any wrapped objects.\n  a = unwrap(a);\n  b = unwrap(b);\n  var areArrays = className === \"[object Array]\";\n  if (!areArrays) {\n    if (typeof a != \"object\" || typeof b != \"object\") {\n      return false;\n    }\n    // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n    // from different frames are.\n    var aCtor = a.constructor,\n      bCtor = b.constructor;\n    if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor && isFunction(bCtor) && bCtor instanceof bCtor) && \"constructor\" in a && \"constructor\" in b) {\n      return false;\n    }\n  }\n  if (depth === 0) {\n    return false;\n  } else if (depth < 0) {\n    depth = -1;\n  }\n  // Assume equality for cyclic structures. The algorithm for detecting cyclic\n  // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n  // Initializing stack of traversed objects.\n  // It's done here since we only need them for objects and arrays comparison.\n  aStack = aStack || [];\n  bStack = bStack || [];\n  var length = aStack.length;\n  while (length--) {\n    // Linear search. Performance is inversely proportional to the number of\n    // unique nested structures.\n    if (aStack[length] === a) {\n      return bStack[length] === b;\n    }\n  }\n  // Add the first object to the stack of traversed objects.\n  aStack.push(a);\n  bStack.push(b);\n  // Recursively compare objects and arrays.\n  if (areArrays) {\n    // Compare array lengths to determine if a deep comparison is necessary.\n    length = a.length;\n    if (length !== b.length) {\n      return false;\n    }\n    // Deep compare the contents, ignoring non-numeric properties.\n    while (length--) {\n      if (!eq(a[length], b[length], depth - 1, aStack, bStack)) {\n        return false;\n      }\n    }\n  } else {\n    // Deep compare objects.\n    var keys = Object.keys(a);\n    var _length = keys.length;\n    // Ensure that both objects contain the same number of properties before comparing deep equality.\n    if (Object.keys(b).length !== _length) {\n      return false;\n    }\n    for (var i = 0; i < _length; i++) {\n      // Deep compare each member\n      var key = keys[i];\n      if (!(hasProp(b, key) && eq(a[key], b[key], depth - 1, aStack, bStack))) {\n        return false;\n      }\n    }\n  }\n  // Remove the first object from the stack of traversed objects.\n  aStack.pop();\n  bStack.pop();\n  return true;\n}\nfunction unwrap(a) {\n  if (isObservableArray(a)) {\n    return a.slice();\n  }\n  if (isES6Map(a) || isObservableMap(a)) {\n    return Array.from(a.entries());\n  }\n  if (isES6Set(a) || isObservableSet(a)) {\n    return Array.from(a.entries());\n  }\n  return a;\n}\n\nvar _getGlobal$Iterator;\n// safely get iterator prototype if available\nvar maybeIteratorPrototype = ((_getGlobal$Iterator = /*#__PURE__*/getGlobal().Iterator) == null ? void 0 : _getGlobal$Iterator.prototype) || {};\nfunction makeIterable(iterator) {\n  iterator[Symbol.iterator] = getSelf;\n  return Object.assign(Object.create(maybeIteratorPrototype), iterator);\n}\nfunction getSelf() {\n  return this;\n}\n\nfunction isAnnotation(thing) {\n  return (\n    // Can be function\n    thing instanceof Object && typeof thing.annotationType_ === \"string\" && isFunction(thing.make_) && isFunction(thing.extend_)\n  );\n}\n\n/**\n * (c) Michel Weststrate 2015 - 2020\n * MIT Licensed\n *\n * Welcome to the mobx sources! To get a global overview of how MobX internally works,\n * this is a good place to start:\n * https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.xvbh6qd74\n *\n * Source folders:\n * ===============\n *\n * - api/     Most of the public static methods exposed by the module can be found here.\n * - core/    Implementation of the MobX algorithm; atoms, derivations, reactions, dependency trees, optimizations. Cool stuff can be found here.\n * - types/   All the magic that is need to have observable objects, arrays and values is in this folder. Including the modifiers like `asFlat`.\n * - utils/   Utility stuff.\n *\n */\n[\"Symbol\", \"Map\", \"Set\"].forEach(function (m) {\n  var g = getGlobal();\n  if (typeof g[m] === \"undefined\") {\n    die(\"MobX requires global '\" + m + \"' to be available or polyfilled\");\n  }\n});\nif (typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__ === \"object\") {\n  // See: https://github.com/andykog/mobx-devtools/\n  __MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({\n    spy: spy,\n    extras: {\n      getDebugName: getDebugName\n    },\n    $mobx: $mobx\n  });\n}\n\nexport { $mobx, FlowCancellationError, ObservableMap, ObservableSet, Reaction, allowStateChanges as _allowStateChanges, runInAction as _allowStateChangesInsideComputed, allowStateReadsEnd as _allowStateReadsEnd, allowStateReadsStart as _allowStateReadsStart, autoAction as _autoAction, _endAction, getAdministration as _getAdministration, getGlobalState as _getGlobalState, interceptReads as _interceptReads, isComputingDerivation as _isComputingDerivation, resetGlobalState as _resetGlobalState, _startAction, action, autorun, comparer, computed, configure, createAtom, apiDefineProperty as defineProperty, entries, extendObservable, flow, flowResult, get, getAtom, getDebugName, getDependencyTree, getObserverTree, has, intercept, isAction, isObservableValue as isBoxedObservable, isComputed, isComputedProp, isFlow, isFlowCancellationError, isObservable, isObservableArray, isObservableMap, isObservableObject, isObservableProp, isObservableSet, keys, makeAutoObservable, makeObservable, observable, observe, onBecomeObserved, onBecomeUnobserved, onReactionError, override, apiOwnKeys as ownKeys, reaction, remove, runInAction, set, spy, toJS, trace, transaction, untracked, values, when };\n//# sourceMappingURL=mobx.esm.js.map\n","function e(e,t,n){let r=n=>e(n,...t);return n===void 0?r:Object.assign(r,{lazy:n,lazyArgs:t})}export{e as lazyDataLastImpl};\n//# sourceMappingURL=lazyDataLastImpl-BDhrIOwR.js.map","import{lazyDataLastImpl as e}from\"./lazyDataLastImpl-BDhrIOwR.js\";function t(t,n,r){let i=t.length-n.length;if(i===0)return t(...n);if(i===1)return e(t,n,r);throw Error(`Wrong number of arguments`)}export{t as purry};\n//# sourceMappingURL=purry-DH9cw9sy.js.map","const e=e=>(n,r)=>{if(r===0)return e(n);if(!Number.isInteger(r))throw TypeError(`precision must be an integer: ${r.toString()}`);if(r>15||r<-15)throw RangeError(`precision must be between -15 and 15`);if(Number.isNaN(n)||!Number.isFinite(n))return e(n);let i=t(n,r),a=e(i);return t(a,-r)};function t(e,t){let[n,r]=e.toString().split(`e`),i=(r===void 0?0:Number.parseInt(r,10))+t,a=`${n}e${i.toString()}`;return Number.parseFloat(a)}export{e as withPrecision};\n//# sourceMappingURL=withPrecision-D4S0Kwr9.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){if(t<1)throw RangeError(`chunk: A chunk size of '${t.toString()}' would result in an infinite array`);if(e.length===0)return[];if(t>=e.length)return[[...e]];let n=Math.ceil(e.length/t),r=Array(n);if(t===1)for(let[t,n]of e.entries())r[t]=[n];else for(let i=0;i<n;i+=1){let n=i*t;r[i]=e.slice(n,n+t)}return r}export{t as chunk};\n//# sourceMappingURL=chunk-DjNU0gfg.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}const n=(e,{min:t,max:n})=>t!==void 0&&e<t?t:n!==void 0&&e>n?n:e;export{t as clamp};\n//# sourceMappingURL=clamp-DSPiOOFS.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}const n=(e,t)=>[...e,...t];export{t as concat};\n//# sourceMappingURL=concat-Bi7sChf0.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}const n=(e,t)=>{let n=new Map;for(let[r,i]of e.entries()){let a=t(i,r,e);if(a!==void 0){let e=n.get(a);e===void 0?n.set(a,1):n.set(a,e+1)}}return Object.fromEntries(n)};export{t as countBy};\n//# sourceMappingURL=countBy-DRx5TN-y.js.map","const e={done:!0,hasNext:!1},t={done:!1,hasNext:!1},n=()=>e,r=e=>({hasNext:!0,next:e,done:!1});export{t as SKIP_ITEM,n as lazyEmptyEvaluator,r as lazyIdentityEvaluator};\n//# sourceMappingURL=utilityEvaluators-DORpnx39.js.map","import{SKIP_ITEM as e}from\"./utilityEvaluators-DORpnx39.js\";function t(e,...t){let a=e,o=t.map(e=>`lazy`in e?r(e):void 0),s=0;for(;s<t.length;){if(o[s]===void 0||!i(a)){let e=t[s];a=e(a),s+=1;continue}let e=[];for(let n=s;n<t.length;n++){let t=o[n];if(t===void 0||(e.push(t),t.isSingle))break}let r=[];for(let t of a)if(n(t,r,e))break;let{isSingle:c}=e.at(-1);a=c?r[0]:r,s+=e.length}return a}function n(t,r,i){if(i.length===0)return r.push(t),!1;let a=t,o=e,s=!1;for(let[e,t]of i.entries()){let{index:c,items:l}=t;if(l.push(a),o=t(a,c,l),t.index+=1,o.hasNext){if(o.hasMany??!1){for(let t of o.next)if(n(t,r,i.slice(e+1)))return!0;return s}a=o.next}if(!o.hasNext)break;o.done&&(s=!0)}return o.hasNext&&r.push(a),s}function r(e){let{lazy:t,lazyArgs:n}=e,r=t(...n);return Object.assign(r,{isSingle:t.single??!1,index:0,items:[]})}function i(e){return typeof e==`string`||typeof e==`object`&&!!e&&Symbol.iterator in e}export{t as pipe};\n//# sourceMappingURL=pipe-jLehR9-P.js.map","import{pipe as e}from\"./pipe-jLehR9-P.js\";function t(t,n){let r=n.length-t.length;if(r===1){let[r,...i]=n;return e(r,{lazy:t,lazyArgs:i})}if(r===0){let r={lazy:t,lazyArgs:n};return Object.assign(t=>e(t,r),r)}throw Error(`Wrong number of arguments`)}export{t as purryFromLazy};\n//# sourceMappingURL=purryFromLazy-3oywCNIb.js.map","import{SKIP_ITEM as e,lazyIdentityEvaluator as t}from\"./utilityEvaluators-DORpnx39.js\";import{purryFromLazy as n}from\"./purryFromLazy-3oywCNIb.js\";function r(...e){return n(i,e)}function i(n){if(n.length===0)return t;let r=new Map;for(let e of n)r.set(e,(r.get(e)??0)+1);return t=>{let n=r.get(t);return n===void 0||n===0?{done:!1,hasNext:!0,next:t}:(r.set(t,n-1),e)}}export{r as difference};\n//# sourceMappingURL=difference-DxYg8_zs.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}const n=(e,t)=>e.length>=t;export{t as hasAtLeast};\n//# sourceMappingURL=hasAtLeast-F1Oj_xBB.js.map","function e(e,t,n){[e[t],e[n]]=[e[n],e[t]]}export{e as swapInPlace};\n//# sourceMappingURL=swapInPlace-CPRo9crU.js.map","import{hasAtLeast as e}from\"./hasAtLeast-F1Oj_xBB.js\";import{swapInPlace as t}from\"./swapInPlace-CPRo9crU.js\";function n(e,t){for(let n=Math.floor(e.length/2)-1;n>=0;n--)i(e,n,t)}function r(t,n,r){if(!e(t,1))return;let[a]=t;if(!(n(r,a)>=0))return t[0]=r,i(t,0,n),a}function i(e,n,r){let i=n;for(;i*2+1<e.length;){let n=i*2+1,a=r(e[i],e[n])<0?n:i,o=n+1;if(o<e.length&&r(e[a],e[o])<0&&(a=o),a===i)return;t(e,i,a),i=a}}export{r as heapMaybeInsert,n as heapify};\n//# sourceMappingURL=heap-Gww6bokq.js.map","const e={asc:(e,t)=>e>t,desc:(e,t)=>e<t};function t(e,t){let[n,...a]=t;if(!i(n)){let t=r(...a);return e(n,t)}let o=r(n,...a);return t=>e(t,o)}function n(e,[n,r,...a]){let o,s;return i(r)?(o=n,s=[r,...a]):(o=r,s=[n,...a]),t((...t)=>e(...t,o),s)}function r(t,n,...i){let a=typeof t==`function`?t:t[0],o=typeof t==`function`?`asc`:t[1],{[o]:s}=e,c=n===void 0?void 0:r(n,...i);return(e,t)=>{let n=a(e),r=a(t);return s(n,r)?1:s(r,n)?-1:c?.(e,t)??0}}function i(t){if(a(t))return!0;if(typeof t!=`object`||!Array.isArray(t))return!1;let[n,r,...i]=t;return a(n)&&typeof r==`string`&&r in e&&i.length===0}const a=e=>typeof e==`function`&&e.length===1;export{t as purryOrderRules,n as purryOrderRulesWithArgument};\n//# sourceMappingURL=purryOrderRules-CfRtTEyM.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}const n=(e,t)=>t>0?e.slice(0,Math.max(0,e.length-t)):[...e];export{t as dropLast};\n//# sourceMappingURL=dropLast-Cn6tyuw5.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){for(let n=e.length-1;n>=0;n--)if(!t(e[n],n,e))return e.slice(0,n+1);return[]}export{t as dropLastWhile};\n//# sourceMappingURL=dropLastWhile-BAeXDa6z.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){for(let[n,r]of e.entries())if(!t(r,n,e))return e.slice(n);return[]}export{t as dropWhile};\n//# sourceMappingURL=dropWhile-tNbnGg9S.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";import{SKIP_ITEM as t}from\"./utilityEvaluators-DORpnx39.js\";function n(...t){return e(r,t,i)}const r=(e,t)=>e.filter(t),i=e=>(n,r,i)=>e(n,r,i)?{done:!1,hasNext:!0,next:n}:t;export{n as filter};\n//# sourceMappingURL=filter-BiMaBet0.js.map","const e=e=>Object.assign(e,{single:!0});export{e as toSingle};\n//# sourceMappingURL=toSingle-Bfpp5_i-.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";import{toSingle as t}from\"./toSingle-Bfpp5_i-.js\";function n(...n){return e(r,n,t(i))}const r=([e])=>e,i=()=>a,a=e=>({hasNext:!0,next:e,done:!0});export{n as first};\n//# sourceMappingURL=first-1mSmk2BJ.js.map","import{hasAtLeast as e}from\"./hasAtLeast-F1Oj_xBB.js\";import{purryOrderRules as t}from\"./purryOrderRules-CfRtTEyM.js\";function n(...e){return t(r,e)}function r(t,n){if(!e(t,2))return t[0];let[r]=t,[,...i]=t;for(let e of i)n(e,r)<0&&(r=e);return r}export{n as firstBy};\n//# sourceMappingURL=firstBy-DxmX0NGR.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t,r)}const n=(e,t)=>e.flatMap(t),r=e=>(t,n,r)=>{let i=e(t,n,r);return Array.isArray(i)?{done:!1,hasNext:!0,hasMany:!0,next:i}:{done:!1,hasNext:!0,next:i}};export{t as flatMap};\n//# sourceMappingURL=flatMap-Cw4Hh6bl.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}const n=(e,t)=>{let n=Object.create(null);for(let r=0;r<e.length;r++){let i=e[r],a=t(i,r,e);if(a!==void 0){let e=n[a];e===void 0?n[a]=[i]:e.push(i)}}return Object.setPrototypeOf(n,Object.prototype),n};export{t as groupBy};\n//# sourceMappingURL=groupBy-DG3Piv-t.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){if(e===t||Object.is(e,t))return!0;if(typeof e!=`object`||typeof t!=`object`||e===null||t===null||Object.getPrototypeOf(e)!==Object.getPrototypeOf(t))return!1;if(Array.isArray(e))return r(e,t);if(e instanceof Map)return i(e,t);if(e instanceof Set)return a(e,t);if(e instanceof Date)return e.getTime()===t.getTime();if(e instanceof RegExp)return e.toString()===t.toString();if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let[r,i]of Object.entries(e))if(!(r in t)||!n(i,t[r]))return!1;return!0}function r(e,t){if(e.length!==t.length)return!1;for(let[r,i]of e.entries())if(!n(i,t[r]))return!1;return!0}function i(e,t){if(e.size!==t.size)return!1;for(let[r,i]of e.entries())if(!t.has(r)||!n(i,t.get(r)))return!1;return!0}function a(e,t){if(e.size!==t.size)return!1;let r=[...t];for(let t of e){let e=!1;for(let[i,a]of r.entries())if(n(t,a)){e=!0,r.splice(i,1);break}if(!e)return!1}return!0}export{t as isDeepEqual};\n//# sourceMappingURL=isDeepEqual-jLo35Woq.js.map","function e(){return t}const t=e=>e;export{e as identity};\n//# sourceMappingURL=identity-CdMenAq7.js.map","import{SKIP_ITEM as e,lazyEmptyEvaluator as t}from\"./utilityEvaluators-DORpnx39.js\";import{purryFromLazy as n}from\"./purryFromLazy-3oywCNIb.js\";function r(...e){return n(i,e)}function i(n){if(n.length===0)return t;let r=new Map;for(let e of n)r.set(e,(r.get(e)??0)+1);return t=>{let n=r.get(t);return n===void 0||n===0?e:(n===1?r.delete(t):r.set(t,n-1),{hasNext:!0,next:t,done:r.size===0})}}export{r as intersection};\n//# sourceMappingURL=intersection-DCadGlPk.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e){let t={};for(let[n,r]of Object.entries(e))t[r]=n;return t}export{t as invert};\n//# sourceMappingURL=invert-BZScEfjD.js.map","function e(e){return e!==void 0}export{e as isDefined};\n//# sourceMappingURL=isDefined-D96LKBI6.js.map","function e(e){return e===``||e===void 0?!0:Array.isArray(e)?e.length===0:Object.keys(e).length===0}export{e as isEmpty};\n//# sourceMappingURL=isEmpty-B6r3tkJ8.js.map","function e(e){return typeof e==`number`&&!Number.isNaN(e)}export{e as isNumber};\n//# sourceMappingURL=isNumber-ccMQhOVD.js.map","function e(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}export{e as isPlainObject};\n//# sourceMappingURL=isPlainObject-Crc4dM9-.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){if(e===t||Object.is(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;if(e instanceof Map&&t instanceof Map)return r(e,t);if(e instanceof Set&&t instanceof Set)return i(e,t);let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let r of n){if(!Object.hasOwn(t,r))return!1;let{[r]:n}=e,{[r]:i}=t;if(n!==i||!Object.is(n,i))return!1}return!0}function r(e,t){if(e.size!==t.size)return!1;for(let[n,r]of e){let e=t.get(n);if(r!==e||!Object.is(r,e))return!1}return!0}function i(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}export{t as isShallowEqual};\n//# sourceMappingURL=isShallowEqual-B8ugYLnO.js.map","function e(e){return typeof e==`string`}export{e as isString};\n//# sourceMappingURL=isString-BPlksnnG.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}const n=e=>e.at(-1);export{t as last};\n//# sourceMappingURL=last-BaD4Geh6.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t,r)}const n=(e,t)=>e.map(t),r=e=>(t,n,r)=>({done:!1,hasNext:!0,next:e(t,n,r)});export{t as map};\n//# sourceMappingURL=map-B0uTZUd8.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e){let t=typeof e[0]==`bigint`?0n:0;for(let n of e)t+=n;return t}export{t as sum};\n//# sourceMappingURL=sum-DXyvmTLT.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";import{hasAtLeast as t}from\"./hasAtLeast-F1Oj_xBB.js\";function n(...t){return e(r,t)}function r(e,n){if(!t(n,1))return{...e};if(!t(n,2)){let{[n[0]]:t,...r}=e;return r}let r={...e};for(let e of n)delete r[e];return r}export{n as omit};\n//# sourceMappingURL=omit-HZOiLuMO.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){let n={...e};for(let[r,i]of Object.entries(n))t(i,r,e)&&delete n[r];return n}export{t as omitBy};\n//# sourceMappingURL=omitBy-CgV9CAW2.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}const n=(e,t)=>{let n=[[],[]];for(let[r,i]of e.entries())t(i,r,e)?n[0].push(i):n[1].push(i);return n};export{t as partition};\n//# sourceMappingURL=partition-DAu403JQ.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}export{t as pick};\n//# sourceMappingURL=pick-CZJrFX39.js.map","function e(e,...n){return typeof e==`string`||typeof e==`number`||typeof e==`symbol`?r=>t(r,e,...n):t(e,...n)}function t(e,...t){let n=e;for(let e of t){if(n==null)return;n=n[e]}return n}export{e as prop};\n//# sourceMappingURL=prop-Cv_AVBuA.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){let n=[];for(let r=e;r<t;r++)n.push(r);return n}export{t as range};\n//# sourceMappingURL=range-amdmPz_6.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e){return[...e].reverse()}export{t as reverse};\n//# sourceMappingURL=reverse-CkjHvjWj.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";import{withPrecision as t}from\"./withPrecision-D4S0Kwr9.js\";function n(...n){return e(t(Math.round),n)}export{n as round};\n//# sourceMappingURL=round-DcwvM4Um.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){if(t<=0)return[];if(t>=e.length)return[...e];let n=Math.min(t,e.length-t),r=new Set;for(;r.size<n;){let t=Math.floor(Math.random()*e.length);r.add(t)}return t===n?[...r].sort((e,t)=>e-t).map(t=>e[t]):e.filter((e,t)=>!r.has(t))}export{t as sample};\n//# sourceMappingURL=sample-C8kGw2Ic.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){let n=[...e];return n.sort(t),n}export{t as sort};\n//# sourceMappingURL=sort-DJMgrJTX.js.map","import{purryOrderRules as e}from\"./purryOrderRules-CfRtTEyM.js\";function t(...t){return e(n,t)}const n=(e,t)=>[...e].sort(t);export{t as sortBy};\n//# sourceMappingURL=sortBy-CjYY6W42.js.map","function e(e,t){let n=0,r=e.length;for(;n<r;){let i=n+r>>>1,a=e[i];t(a,i,e)?n=i+1:r=i}return r}export{e as binarySearchCutoffIndex};\n//# sourceMappingURL=binarySearchCutoffIndex-CeJltMp9.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";import{binarySearchCutoffIndex as t}from\"./binarySearchCutoffIndex-CeJltMp9.js\";function n(...t){return e(r,t)}const r=(e,n)=>t(e,e=>e<n);export{n as sortedIndex};\n//# sourceMappingURL=sortedIndex-CQhzGRfq.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";import{binarySearchCutoffIndex as t}from\"./binarySearchCutoffIndex-CeJltMp9.js\";function n(...t){return e(r,t)}function r(e,n,r){let i=r(n,void 0,e);return t(e,(t,n)=>r(t,n,e)<i)}export{n as sortedIndexBy};\n//# sourceMappingURL=sortedIndexBy-D37YUiBV.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";import{binarySearchCutoffIndex as t}from\"./binarySearchCutoffIndex-CeJltMp9.js\";function n(...n){return e(t,n)}export{n as sortedIndexWith};\n//# sourceMappingURL=sortedIndexWith-CAKl35Dc.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}const n=(e,t)=>{let n=e.entries(),r=n.next();if(`done`in r&&r.done)return 0;let{value:[,i]}=r,a=t(i,0,e);for(let[r,i]of n){let n=t(i,r,e);a+=n}return a};export{t as sumBy};\n//# sourceMappingURL=sumBy-B4Rqq3Nr.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";import{lazyEmptyEvaluator as t}from\"./utilityEvaluators-DORpnx39.js\";function n(...t){return e(r,t,i)}const r=(e,t)=>t<0?[]:e.slice(0,t);function i(e){if(e<=0)return t;let n=e;return e=>(--n,{done:n<=0,hasNext:!0,next:e})}export{n as take};\n//# sourceMappingURL=take-Bdy9Ko1L.js.map","import{heapMaybeInsert as e,heapify as t}from\"./heap-Gww6bokq.js\";import{purryOrderRulesWithArgument as n}from\"./purryOrderRules-CfRtTEyM.js\";function r(...e){return n(i,e)}function i(n,r,i){if(i<=0)return[];if(i>=n.length)return[...n];let a=n.slice(0,i);t(a,r);let o=n.slice(i);for(let t of o)e(a,r,t);return a}export{r as takeFirstBy};\n//# sourceMappingURL=takeFirstBy-CWZxOHpF.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t)}function n(e,t){let n=[];for(let[r,i]of e.entries()){if(!t(i,r,e))break;n.push(i)}return n}export{t as takeWhile};\n//# sourceMappingURL=takeWhile-QWH_1pO-.js.map","import{SKIP_ITEM as e}from\"./utilityEvaluators-DORpnx39.js\";import{purryFromLazy as t}from\"./purryFromLazy-3oywCNIb.js\";function n(...e){return t(r,e)}function r(){let t=new Set;return n=>t.has(n)?e:(t.add(n),{done:!1,hasNext:!0,next:n})}export{n as unique};\n//# sourceMappingURL=unique-10P7QXxd.js.map","import{SKIP_ITEM as e}from\"./utilityEvaluators-DORpnx39.js\";import{purryFromLazy as t}from\"./purryFromLazy-3oywCNIb.js\";function n(...e){return t(r,e)}function r(t){let n=t,r=new Set;return(t,i,a)=>{let o=n(t,i,a);return r.has(o)?e:(r.add(o),{done:!1,hasNext:!0,next:t})}}export{n as uniqueBy};\n//# sourceMappingURL=uniqueBy-C_PxkF_D.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(Object.values,t)}export{t as values};\n//# sourceMappingURL=values-CpYo8vbR.js.map","import{purry as e}from\"./purry-DH9cw9sy.js\";function t(...t){return e(n,t,r)}const n=(e,t)=>e.length<t.length?e.map((e,n)=>[e,t[n]]):t.map((t,n)=>[e[n],t]),r=e=>(t,n)=>({hasNext:!0,next:[t,e[n]],done:n>=e.length-1});export{t as zip};\n//# sourceMappingURL=zip-DxS_OtaF.js.map","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","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 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 extent(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\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 ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  values = Array.from(values);\n  let [f] = F;\n  if ((f && f.length !== 2) || F.length > 1) {\n    const index = Uint32Array.from(values, (d, i) => i);\n    if (F.length > 1) {\n      F = F.map(f => values.map(f));\n      index.sort((i, j) => {\n        for (const f of F) {\n          const c = ascendingDefined(f[i], f[j]);\n          if (c) return c;\n        }\n      });\n    } else {\n      f = values.map(f);\n      index.sort((i, j) => ascendingDefined(f[i], f[j]));\n    }\n    return permute(values, index);\n  }\n  return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n  if (compare === ascending) return ascendingDefined;\n  if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n  return (a, b) => {\n    const x = compare(a, b);\n    if (x || x === 0) return x;\n    return (compare(b, b) === 0) - (compare(a, a) === 0);\n  };\n}\n\nexport function ascendingDefined(a, b) {\n  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\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","export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n  k = Math.floor(k);\n  left = Math.floor(Math.max(0, left));\n  right = Math.floor(Math.min(array.length - 1, right));\n\n  if (!(left <= k && k <= right)) return array;\n\n  compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n  while (right > left) {\n    if (right - left > 600) {\n      const n = right - left + 1;\n      const m = k - left + 1;\n      const z = Math.log(n);\n      const s = 0.5 * Math.exp(2 * z / 3);\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n      quickselect(array, k, newLeft, newRight, compare);\n    }\n\n    const t = array[k];\n    let i = left;\n    let j = right;\n\n    swap(array, left, k);\n    if (compare(array[right], t) > 0) swap(array, left, right);\n\n    while (i < j) {\n      swap(array, i, j), ++i, --j;\n      while (compare(array[i], t) < 0) ++i;\n      while (compare(array[j], t) > 0) --j;\n    }\n\n    if (compare(array[left], t) === 0) swap(array, left, j);\n    else ++j, swap(array, j, right);\n\n    if (j <= k) left = j + 1;\n    if (k <= j) right = j - 1;\n  }\n\n  return array;\n}\n\nfunction swap(array, i, j) {\n  const t = array[i];\n  array[i] = array[j];\n  array[j] = t;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n  if (isNaN(p = +p)) return;\n  numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n  if (p <= 0) return minIndex(numbers);\n  if (p >= 1) return maxIndex(numbers);\n  var numbers,\n      index = Uint32Array.from(values, (_, i) => i),\n      j = numbers.length - 1,\n      i = Math.floor(j * p);\n  quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n  i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n  return i >= 0 ? i : -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","export default function pairs(values, pairof = pair) {\n  const pairs = [];\n  let previous;\n  let first = false;\n  for (const value of values) {\n    if (first) pairs.push(pairof(previous, value));\n    previous = value;\n    first = true;\n  }\n  return pairs;\n}\n\nexport function pair(a, b) {\n  return [a, b];\n}\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","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(e,o){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=o():\"function\"==typeof define&&define.amd?define(o):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isToday=o()}(this,(function(){\"use strict\";return function(e,o,t){o.prototype.isToday=function(){var e=\"YYYY-MM-DD\",o=t();return this.format(e)===o.format(e)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isYesterday=t()}(this,(function(){\"use strict\";return function(e,t,n){t.prototype.isYesterday=function(){var e=\"YYYY-MM-DD\",t=n().subtract(1,\"day\");return this.format(e)===t.format(e)}}}));","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var r=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),r.call(this,t)};var o=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s;if(0===u)return this.utc(f);var r=this.clone();if(f)return r.$offset=u,r.$u=!1,r;var o=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(r=this.local().add(u+o,t)).$offset=u,r.$x.$localOffset=o,r};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","// Imports dayjs and loads the plugins we need. Then exports it with the correct types.\n\nimport dayjs, { Dayjs } from \"dayjs\"\nimport customParseFormat from \"dayjs/plugin/customParseFormat.js\"\nimport isToday from \"dayjs/plugin/isToday.js\"\nimport isYesterday from \"dayjs/plugin/isYesterday.js\"\nimport relativeTime from \"dayjs/plugin/relativeTime.js\"\nimport utc from \"dayjs/plugin/utc.js\"\n\ndayjs.extend(customParseFormat)\ndayjs.extend(isToday)\ndayjs.extend(isYesterday)\ndayjs.extend(relativeTime)\ndayjs.extend(utc)\n\nexport default dayjs\n\n// We need these explicit plugin type imports _and exports_ to get the right Dayjs type down the line\nimport type customParseFormatType from \"dayjs/plugin/customParseFormat.js\"\nimport type isTodayType from \"dayjs/plugin/isToday.js\"\nimport type isYesterdayType from \"dayjs/plugin/isYesterday.js\"\nimport type relativeTimeType from \"dayjs/plugin/relativeTime.js\"\nimport type utcType from \"dayjs/plugin/utc.js\"\n\nexport type {\n    Dayjs,\n    customParseFormatType,\n    isTodayType,\n    isYesterdayType,\n    relativeTimeType,\n    utcType,\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","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","// [[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","// 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 {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","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","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\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","'use strict';\n\n(function (global) {\n\n    // minimal symbol polyfill for IE11 and others\n    if (typeof Symbol !== 'function') {\n        var Symbol = function(name) {\n            return name;\n        }\n\n        Symbol.nonNative = true;\n    }\n\n    const STATE_PLAINTEXT = Symbol('plaintext');\n    const STATE_HTML      = Symbol('html');\n    const STATE_COMMENT   = Symbol('comment');\n\n    const ALLOWED_TAGS_REGEX  = /<(\\w*)>/g;\n    const NORMALIZE_TAG_REGEX = /<\\/?([^\\s\\/>]+)/;\n\n    function striptags(html, allowable_tags, tag_replacement) {\n        html            = html || '';\n        allowable_tags  = allowable_tags || [];\n        tag_replacement = tag_replacement || '';\n\n        let context = init_context(allowable_tags, tag_replacement);\n\n        return striptags_internal(html, context);\n    }\n\n    function init_striptags_stream(allowable_tags, tag_replacement) {\n        allowable_tags  = allowable_tags || [];\n        tag_replacement = tag_replacement || '';\n\n        let context = init_context(allowable_tags, tag_replacement);\n\n        return function striptags_stream(html) {\n            return striptags_internal(html || '', context);\n        };\n    }\n\n    striptags.init_streaming_mode = init_striptags_stream;\n\n    function init_context(allowable_tags, tag_replacement) {\n        allowable_tags = parse_allowable_tags(allowable_tags);\n\n        return {\n            allowable_tags : allowable_tags,\n            tag_replacement: tag_replacement,\n\n            state         : STATE_PLAINTEXT,\n            tag_buffer    : '',\n            depth         : 0,\n            in_quote_char : ''\n        };\n    }\n\n    function striptags_internal(html, context) {\n        if (typeof html != \"string\") {\n            throw new TypeError(\"'html' parameter must be a string\");\n        }\n\n        let allowable_tags  = context.allowable_tags;\n        let tag_replacement = context.tag_replacement;\n\n        let state         = context.state;\n        let tag_buffer    = context.tag_buffer;\n        let depth         = context.depth;\n        let in_quote_char = context.in_quote_char;\n        let output        = '';\n\n        for (let idx = 0, length = html.length; idx < length; idx++) {\n            let char = html[idx];\n\n            if (state === STATE_PLAINTEXT) {\n                switch (char) {\n                    case '<':\n                        state       = STATE_HTML;\n                        tag_buffer += char;\n                        break;\n\n                    default:\n                        output += char;\n                        break;\n                }\n            }\n\n            else if (state === STATE_HTML) {\n                switch (char) {\n                    case '<':\n                        // ignore '<' if inside a quote\n                        if (in_quote_char) {\n                            break;\n                        }\n\n                        // we're seeing a nested '<'\n                        depth++;\n                        break;\n\n                    case '>':\n                        // ignore '>' if inside a quote\n                        if (in_quote_char) {\n                            break;\n                        }\n\n                        // something like this is happening: '<<>>'\n                        if (depth) {\n                            depth--;\n\n                            break;\n                        }\n\n                        // this is closing the tag in tag_buffer\n                        in_quote_char = '';\n                        state         = STATE_PLAINTEXT;\n                        tag_buffer   += '>';\n\n                        if (allowable_tags.has(normalize_tag(tag_buffer))) {\n                            output += tag_buffer;\n                        } else {\n                            output += tag_replacement;\n                        }\n\n                        tag_buffer = '';\n                        break;\n\n                    case '\"':\n                    case '\\'':\n                        // catch both single and double quotes\n\n                        if (char === in_quote_char) {\n                            in_quote_char = '';\n                        } else {\n                            in_quote_char = in_quote_char || char;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    case '-':\n                        if (tag_buffer === '<!-') {\n                            state = STATE_COMMENT;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    case ' ':\n                    case '\\n':\n                        if (tag_buffer === '<') {\n                            state      = STATE_PLAINTEXT;\n                            output    += '< ';\n                            tag_buffer = '';\n\n                            break;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    default:\n                        tag_buffer += char;\n                        break;\n                }\n            }\n\n            else if (state === STATE_COMMENT) {\n                switch (char) {\n                    case '>':\n                        if (tag_buffer.slice(-2) == '--') {\n                            // close the comment\n                            state = STATE_PLAINTEXT;\n                        }\n\n                        tag_buffer = '';\n                        break;\n\n                    default:\n                        tag_buffer += char;\n                        break;\n                }\n            }\n        }\n\n        // save the context for future iterations\n        context.state         = state;\n        context.tag_buffer    = tag_buffer;\n        context.depth         = depth;\n        context.in_quote_char = in_quote_char;\n\n        return output;\n    }\n\n    function parse_allowable_tags(allowable_tags) {\n        let tag_set = new Set();\n\n        if (typeof allowable_tags === 'string') {\n            let match;\n\n            while ((match = ALLOWED_TAGS_REGEX.exec(allowable_tags))) {\n                tag_set.add(match[1]);\n            }\n        }\n\n        else if (!Symbol.nonNative &&\n                 typeof allowable_tags[Symbol.iterator] === 'function') {\n\n            tag_set = new Set(allowable_tags);\n        }\n\n        else if (typeof allowable_tags.forEach === 'function') {\n            // IE11 compatible\n            allowable_tags.forEach(tag_set.add, tag_set);\n        }\n\n        return tag_set;\n    }\n\n    function normalize_tag(tag_buffer) {\n        let match = NORMALIZE_TAG_REGEX.exec(tag_buffer);\n\n        return match ? match[1].toLowerCase() : null;\n    }\n\n    if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(function module_factory() { return striptags; });\n    }\n\n    else if (typeof module === 'object' && module.exports) {\n        // Node\n        module.exports = striptags;\n    }\n\n    else {\n        // Browser\n        global.striptags = striptags;\n    }\n}(this));\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        var _a;\n        Object.defineProperty(inst, \"_zod\", {\n            value: inst._zod ?? {},\n            enumerable: false,\n        });\n        (_a = inst._zod).traits ?? (_a.traits = new Set());\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        for (const k in _.prototype) {\n            if (!(k in inst))\n                Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n        }\n        inst._zod.constr = _;\n        inst._zod.def = def;\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepString = step.toString();\n    let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n    if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n        const match = stepString.match(/\\d?e-(\\d?)/);\n        if (match?.[1]) {\n            stepDecCount = Number.parseInt(match[1]);\n        }\n    }\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = {};\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                newShape[key] = currDef.shape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = { ...schema._zod.def.shape };\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                delete newShape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\"Object schemas containing refinements cannot be extended. Use `.safeExtend()` instead.\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    const def = {\n        ...schema._zod.def,\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: schema._zod.def.checks,\n    };\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    const def = mergeDefs(a._zod.def, {\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: [], // delete existing checks\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in oldShape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in shape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n *   ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`✖ ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  → at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n    return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","export const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n","export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n","export const version = {\n    major: 4,\n    minor: 1,\n    patch: 12,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        // const handleChecksResult = (\n        //   checkResult: ParsePayload,\n        //   originalResult: ParsePayload,\n        //   ctx: ParseContextInternal\n        // ): util.MaybeAsync<ParsePayload> => {\n        //   // if the checks mutated the value && there are no issues, re-parse the result\n        //   if (checkResult.value !== originalResult.value && !checkResult.issues.length)\n        //     return inst._zod.parse(checkResult, ctx);\n        //   return originalResult;\n        // };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary\n                // initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    inst[\"~standard\"] = {\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            // @ts-ignore\n            const url = new URL(trimmed);\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: regexes.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // Set the output value based on normalize flag\n            if (def.normalize) {\n                // Use normalized URL\n                payload.value = url.href;\n            }\n            else {\n                // Preserve the original input (trimmed)\n                payload.value = trimmed;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv4`;\n    });\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv6`;\n    });\n    inst._zod.check = (payload) => {\n        try {\n            // @ts-ignore\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const parts = payload.value.split(\"/\");\n        try {\n            if (parts.length !== 2)\n                throw new Error();\n            const [address, prefix] = parts;\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            // @ts-ignore\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64url\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checksp\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (result.value === undefined) {\n        if (key in input) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    for (const k of keys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        keys,\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n    const unrecognized = [];\n    // iterate over input keys\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    for (const key of Object.keys(input)) {\n        if (keySet.has(key))\n            continue;\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    // const sh = def.shape;\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    if (!desc?.get) {\n        const sh = def.shape;\n        Object.defineProperty(def, \"shape\", {\n            get: () => {\n                const newSh = { ...sh };\n                Object.defineProperty(def, \"shape\", {\n                    value: newSh,\n                });\n                return newSh;\n            },\n        });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = {};\n        const proms = [];\n        const shape = value.shape;\n        for (const key of value.keys) {\n            const el = shape[key];\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {};`);\n        for (const key of normalized.keys) {\n            const id = ids[key];\n            const k = util.esc(key);\n            doc.write(`const ${id} = ${parseStr(key)};`);\n            doc.write(`\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        \n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const single = def.options.length === 1;\n    const first = def.options[0]._zod.run;\n    inst._zod.parse = (payload, ctx) => {\n        if (single) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues?.[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    if (left.issues.length) {\n        result.issues.push(...left.issues);\n    }\n    if (right.issues.length) {\n        result.issues.push(...right.issues);\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (def.keyType._zod.values) {\n            const values = def.keyType._zod.values;\n            payload.value = {};\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!values.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                if (keyResult.issues.length) {\n                    payload.issues.push({\n                        code: \"invalid_key\",\n                        origin: \"record\",\n                        issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        input: key,\n                        path: [key],\n                        inst,\n                    });\n                    payload.value[keyResult.value] = keyResult.value;\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    if (def.values.length === 0) {\n        throw new Error(\"Cannot create literal schema with no valid values\");\n    }\n    inst._zod.values = new Set(def.values);\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nfunction handleOptionalResult(result, input) {\n    if (result.issues.length && input === undefined) {\n        return { issues: [], value: undefined };\n    }\n    return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            const result = def.innerType._zod.run(payload, ctx);\n            if (result instanceof Promise)\n                return result.then((r) => handleOptionalResult(r, payload.value));\n            return handleOptionalResult(result, payload.value);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    if (left.issues.length) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"template_literal\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._def = def;\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        return function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // let _innerType!: any;\n    // util.defineLazy(def, \"getter\", () => {\n    //   if (!_innerType) {\n    //     _innerType = def.getter();\n    //   }\n    //   return () => _innerType;\n    // });\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType._zod.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType._zod.optin ?? undefined);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n","export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            if (this._idmap.has(meta.id)) {\n                throw new Error(`ID ${meta.id} already exists in the registry`);\n            }\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\nexport const globalRegistry = /*@__PURE__*/ registry();\n","import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\nexport function _superRefine(fn) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    return codec;\n}\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodMiniType = /*@__PURE__*/ core.$constructor(\"ZodMiniType\", (inst, def) => {\n    if (!inst._zod)\n        throw new Error(\"Uninitialized schema in ZodMiniType.\");\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    inst.type = def.type;\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.check = (...checks) => {\n        return inst.clone({\n            ...def,\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }\n        // { parent: true }\n        );\n    };\n    inst.clone = (_def, params) => core.clone(inst, _def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n});\nexport const ZodMiniString = /*@__PURE__*/ core.$constructor(\"ZodMiniString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function string(params) {\n    return core._string(ZodMiniString, params);\n}\nexport const ZodMiniStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    ZodMiniString.init(inst, def);\n});\nexport const ZodMiniEmail = /*@__PURE__*/ core.$constructor(\"ZodMiniEmail\", (inst, def) => {\n    core.$ZodEmail.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodMiniEmail, params);\n}\nexport const ZodMiniGUID = /*@__PURE__*/ core.$constructor(\"ZodMiniGUID\", (inst, def) => {\n    core.$ZodGUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodMiniGUID, params);\n}\nexport const ZodMiniUUID = /*@__PURE__*/ core.$constructor(\"ZodMiniUUID\", (inst, def) => {\n    core.$ZodUUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodMiniUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodMiniUUID, params);\n}\nexport const ZodMiniURL = /*@__PURE__*/ core.$constructor(\"ZodMiniURL\", (inst, def) => {\n    core.$ZodURL.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodMiniURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodMiniURL, {\n        protocol: /^https?$/,\n        hostname: core.regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniEmoji = /*@__PURE__*/ core.$constructor(\"ZodMiniEmoji\", (inst, def) => {\n    core.$ZodEmoji.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodMiniEmoji, params);\n}\nexport const ZodMiniNanoID = /*@__PURE__*/ core.$constructor(\"ZodMiniNanoID\", (inst, def) => {\n    core.$ZodNanoID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodMiniNanoID, params);\n}\nexport const ZodMiniCUID = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID\", (inst, def) => {\n    core.$ZodCUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodMiniCUID, params);\n}\nexport const ZodMiniCUID2 = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID2\", (inst, def) => {\n    core.$ZodCUID2.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodMiniCUID2, params);\n}\nexport const ZodMiniULID = /*@__PURE__*/ core.$constructor(\"ZodMiniULID\", (inst, def) => {\n    core.$ZodULID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodMiniULID, params);\n}\nexport const ZodMiniXID = /*@__PURE__*/ core.$constructor(\"ZodMiniXID\", (inst, def) => {\n    core.$ZodXID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodMiniXID, params);\n}\nexport const ZodMiniKSUID = /*@__PURE__*/ core.$constructor(\"ZodMiniKSUID\", (inst, def) => {\n    core.$ZodKSUID.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodMiniKSUID, params);\n}\nexport const ZodMiniIPv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv4\", (inst, def) => {\n    core.$ZodIPv4.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodMiniIPv4, params);\n}\nexport const ZodMiniIPv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv6\", (inst, def) => {\n    core.$ZodIPv6.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodMiniIPv6, params);\n}\nexport const ZodMiniCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodMiniCIDRv4, params);\n}\nexport const ZodMiniCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodMiniCIDRv6, params);\n}\nexport const ZodMiniBase64 = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64\", (inst, def) => {\n    core.$ZodBase64.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodMiniBase64, params);\n}\nexport const ZodMiniBase64URL = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64URL\", (inst, def) => {\n    core.$ZodBase64URL.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodMiniBase64URL, params);\n}\nexport const ZodMiniE164 = /*@__PURE__*/ core.$constructor(\"ZodMiniE164\", (inst, def) => {\n    core.$ZodE164.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodMiniE164, params);\n}\nexport const ZodMiniJWT = /*@__PURE__*/ core.$constructor(\"ZodMiniJWT\", (inst, def) => {\n    core.$ZodJWT.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodMiniJWT, params);\n}\nexport const ZodMiniCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniCustomStringFormat\", (inst, def) => {\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodMiniStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodMiniCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodMiniCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodMiniCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    // check for unrecognized format\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodMiniCustomStringFormat, format, regex, params);\n}\nexport const ZodMiniNumber = /*@__PURE__*/ core.$constructor(\"ZodMiniNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function number(params) {\n    return core._number(ZodMiniNumber, params);\n}\nexport const ZodMiniNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodMiniNumber.init(inst, def);\n});\n// int\nexport function int(params) {\n    return core._int(ZodMiniNumberFormat, params);\n}\n// float32\nexport function float32(params) {\n    return core._float32(ZodMiniNumberFormat, params);\n}\n// float64\nexport function float64(params) {\n    return core._float64(ZodMiniNumberFormat, params);\n}\n// int32\nexport function int32(params) {\n    return core._int32(ZodMiniNumberFormat, params);\n}\n// uint32\nexport function uint32(params) {\n    return core._uint32(ZodMiniNumberFormat, params);\n}\nexport const ZodMiniBoolean = /*@__PURE__*/ core.$constructor(\"ZodMiniBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodMiniBoolean, params);\n}\nexport const ZodMiniBigInt = /*@__PURE__*/ core.$constructor(\"ZodMiniBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function bigint(params) {\n    return core._bigint(ZodMiniBigInt, params);\n}\nexport const ZodMiniBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodMiniBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodMiniBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodMiniBigIntFormat, params);\n}\nexport const ZodMiniSymbol = /*@__PURE__*/ core.$constructor(\"ZodMiniSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodMiniSymbol, params);\n}\nexport const ZodMiniUndefined = /*@__PURE__*/ core.$constructor(\"ZodMiniUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodMiniUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodMiniNull = /*@__PURE__*/ core.$constructor(\"ZodMiniNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodMiniNull, params);\n}\nexport { _null as null };\nexport const ZodMiniAny = /*@__PURE__*/ core.$constructor(\"ZodMiniAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodMiniAny);\n}\nexport const ZodMiniUnknown = /*@__PURE__*/ core.$constructor(\"ZodMiniUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodMiniUnknown);\n}\nexport const ZodMiniNever = /*@__PURE__*/ core.$constructor(\"ZodMiniNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodMiniNever, params);\n}\nexport const ZodMiniVoid = /*@__PURE__*/ core.$constructor(\"ZodMiniVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodMiniVoid, params);\n}\nexport { _void as void };\nexport const ZodMiniDate = /*@__PURE__*/ core.$constructor(\"ZodMiniDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function date(params) {\n    return core._date(ZodMiniDate, params);\n}\nexport const ZodMiniArray = /*@__PURE__*/ core.$constructor(\"ZodMiniArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function array(element, params) {\n    return new ZodMiniArray({\n        type: \"array\",\n        element: element,\n        ...util.normalizeParams(params),\n    });\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodMiniObject = /*@__PURE__*/ core.$constructor(\"ZodMiniObject\", (inst, def) => {\n    core.$ZodObject.init(inst, def);\n    ZodMiniType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => def.shape);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodMiniObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodMiniObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodMiniObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\n// object methods\nexport function extend(schema, shape) {\n    return util.extend(schema, shape);\n}\nexport function safeExtend(schema, shape) {\n    return util.safeExtend(schema, shape);\n}\nexport function merge(schema, shape) {\n    return util.extend(schema, shape);\n}\nexport function pick(schema, mask) {\n    return util.pick(schema, mask);\n}\n// .omit\nexport function omit(schema, mask) {\n    return util.omit(schema, mask);\n}\nexport function partial(schema, mask) {\n    return util.partial(ZodMiniOptional, schema, mask);\n}\nexport function required(schema, mask) {\n    return util.required(ZodMiniNonOptional, schema, mask);\n}\nexport function catchall(inst, catchall) {\n    return inst.clone({ ...inst._zod.def, catchall: catchall });\n}\nexport const ZodMiniUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function union(options, params) {\n    return new ZodMiniUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniDiscriminatedUnion\", (inst, def) => {\n    core.$ZodDiscriminatedUnion.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    return new ZodMiniDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniIntersection = /*@__PURE__*/ core.$constructor(\"ZodMiniIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodMiniIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodMiniTuple = /*@__PURE__*/ core.$constructor(\"ZodMiniTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodMiniTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniRecord = /*@__PURE__*/ core.$constructor(\"ZodMiniRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function record(keyType, valueType, params) {\n    return new ZodMiniRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new ZodMiniRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniMap = /*@__PURE__*/ core.$constructor(\"ZodMiniMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMiniMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniSet = /*@__PURE__*/ core.$constructor(\"ZodMiniSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function set(valueType, params) {\n    return new ZodMiniSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniEnum = /*@__PURE__*/ core.$constructor(\"ZodMiniEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodMiniType.init(inst, def);\n    inst.options = Object.values(def.entries);\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodMiniEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodMiniEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function literal(value, params) {\n    return new ZodMiniLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniFile = /*@__PURE__*/ core.$constructor(\"ZodMiniFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function file(params) {\n    return core._file(ZodMiniFile, params);\n}\nexport const ZodMiniTransform = /*@__PURE__*/ core.$constructor(\"ZodMiniTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function transform(fn) {\n    return new ZodMiniTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodMiniOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function optional(innerType) {\n    return new ZodMiniOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniNullable = /*@__PURE__*/ core.$constructor(\"ZodMiniNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function nullable(innerType) {\n    return new ZodMiniNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodMiniDefault = /*@__PURE__*/ core.$constructor(\"ZodMiniDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodMiniDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodMiniPrefault = /*@__PURE__*/ core.$constructor(\"ZodMiniPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodMiniPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodMiniNonOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function nonoptional(innerType, params) {\n    return new ZodMiniNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniSuccess = /*@__PURE__*/ core.$constructor(\"ZodMiniSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function success(innerType) {\n    return new ZodMiniSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniCatch = /*@__PURE__*/ core.$constructor(\"ZodMiniCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodMiniCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodMiniNaN = /*@__PURE__*/ core.$constructor(\"ZodMiniNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodMiniNaN, params);\n}\nexport const ZodMiniPipe = /*@__PURE__*/ core.$constructor(\"ZodMiniPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function pipe(in_, out) {\n    return new ZodMiniPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n    });\n}\nexport const ZodMiniCodec = /*@__PURE__*/ core.$constructor(\"ZodMiniCodec\", (inst, def) => {\n    ZodMiniPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodMiniCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport const ZodMiniReadonly = /*@__PURE__*/ core.$constructor(\"ZodMiniReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function readonly(innerType) {\n    return new ZodMiniReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodMiniTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMiniLazy = /*@__PURE__*/ core.$constructor(\"ZodMiniLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// export function lazy<T extends object>(getter: () => T): T {\n//   return util.createTransparentProxy<T>(getter);\n// }\nfunction _lazy(getter) {\n    return new ZodMiniLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport { _lazy as lazy };\nexport const ZodMiniPromise = /*@__PURE__*/ core.$constructor(\"ZodMiniPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function promise(innerType) {\n    return new ZodMiniPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodMiniCustom = /*@__PURE__*/ core.$constructor(\"ZodMiniCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\n// custom checks\nexport function check(fn, params) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// ZodCustom\n// custom schema\nexport function custom(fn, _params) {\n    return core._custom(ZodMiniCustom, fn ?? (() => true), _params);\n}\n// refine\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodMiniCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    return core._superRefine(fn);\n}\n// instanceof\nclass Class {\n    constructor(..._args) { }\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = custom((data) => data instanceof cls, params);\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodMiniCodec,\n    Boolean: ZodMiniBoolean,\n    String: ZodMiniString,\n}, ...args);\nexport function json() {\n    const jsonSchema = _lazy(() => {\n        return union([string(), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\nexport const ZodMiniFunction = /*@__PURE__*/ core.$constructor(\"ZodMiniFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodMiniType.init(inst, def);\n});\nexport function _function(params) {\n    return new ZodMiniFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\n","import * as z from \"zod/mini\"\nexport type DonationInterval = \"once\" | \"monthly\" | \"annual\"\n\nexport type DonationCurrencyCode = \"USD\" | \"GBP\" | \"EUR\"\n\nexport interface DonateSessionResponse {\n    url?: string\n    error?: string\n}\n\n// This is used to validate the type of the request body in the donate session\n// when received by the server (see functions/donation/checkout).\nexport const DonationRequestTypeObject = z.object({\n    name: z.optional(z.string()),\n    showOnList: z.boolean(),\n    subscribeToDonorNewsletter: z.boolean(),\n    currency: z.enum([\"GBP\", \"EUR\", \"USD\"]),\n    amount: z.optional(\n        z.number({\n            // We don't want to enforce a minimum or maximum donation amount at the\n            // type level so that we can return friendlier error messages than\n            // zod's default ones. These friendlier error messages are returned\n            // by getErrorMessageDonation().\n        })\n    ),\n    interval: z.enum([\"once\", \"monthly\", \"annual\"]),\n    successUrl: z.string(),\n    cancelUrl: z.string(),\n    captchaToken: z.string(),\n})\n\nexport type DonationRequest = z.infer<typeof DonationRequestTypeObject>\n","import { Nominal } from \"../NominalType\"\n\nexport type Integer = number\n\nexport type OwidVariableId = Integer // remove.\n\nexport type JsonString = string\nexport type Base64String = Nominal<string, \"Base64\">\nexport type HexString = Nominal<string, \"Hex\">\n\n/**\n * Pageview information about a single URL\n */\nexport interface RawPageview {\n    day: Date\n    url: string\n    views_7d: number\n    views_14d: number\n    views_365d: number\n}\n\nexport interface UserCountryInformation {\n    code: string\n    name: string\n    short_code: string\n    slug: string\n    regions: string[] | null\n}\n\nexport enum SiteFooterContext {\n    gdocsDocument = \"gdocsDocument\", // the rendered version (on the site)\n    grapherPage = \"grapherPage\",\n    dataPageV2 = \"dataPageV2\",\n    multiDimDataPage = \"multiDimDataPage\",\n    dynamicCollectionPage = \"dynamicCollectionPage\",\n    explorerPage = \"explorerPage\",\n    explorerIndexPage = \"explorerIndexPage\",\n    default = \"default\",\n    dataInsightsIndexPage = \"data-insights-index-page\",\n    latestPage = \"latestPage\",\n    searchPage = \"search-page\",\n    subscribePage = \"subscribe-page\",\n}\n\nexport interface GitCommit {\n    author_email: string\n    author_name: string\n    body: string\n    date: string\n    hash: string\n    message: string\n}\nexport interface SerializedGridProgram {\n    slug: string\n    program: string\n    lastCommit?: GitCommit\n}\n\nexport enum TaggableType {\n    Charts = \"charts\",\n}\n\n// Exception format that can be easily given as an API error\nexport class JsonError extends Error {\n    status: number\n    constructor(message: string, status?: number, options?: ErrorOptions) {\n        super(message, options)\n        this.status = status ?? 400\n    }\n}\n\nexport interface QueryParams {\n    [key: string]: string | undefined\n}\n\nexport enum R2GrapherConfigDirectory {\n    byUUID = \"config/by-uuid\",\n    publishedGrapherBySlug = \"config/by-slug-published\",\n    multiDim = \"multi-dim-config\",\n}\n","// todo: remove when we ditch Year and YearIsDay\nexport const EPOCH_DATE = \"2020-01-21\"\n\n/** The \"plot\" is a chart without any header, footer or controls */\nexport const IDEAL_PLOT_ASPECT_RATIO = 1.8\n\nexport const GRAPHER_MAP_TYPE = \"WorldMap\"\n\nexport const GRAPHER_CHART_TYPES = {\n    LineChart: \"LineChart\",\n    ScatterPlot: \"ScatterPlot\",\n    StackedArea: \"StackedArea\",\n    DiscreteBar: \"DiscreteBar\",\n    StackedDiscreteBar: \"StackedDiscreteBar\",\n    SlopeChart: \"SlopeChart\",\n    StackedBar: \"StackedBar\",\n    Marimekko: \"Marimekko\",\n} as const\n\nexport const ALL_GRAPHER_CHART_TYPES = Object.values(GRAPHER_CHART_TYPES)\n\n/**\n * Grapher tab specified in the config that determines the default tab to show.\n * If `chart` is selected and Grapher has more than one chart tab, then the\n * first chart tab will be active.\n */\nexport const GRAPHER_TAB_CONFIG_OPTIONS = {\n    // general\n    table: \"table\",\n    map: \"map\",\n    chart: \"chart\",\n\n    // chart types\n    line: \"line\",\n    scatter: \"scatter\",\n    \"stacked-area\": \"stacked-area\",\n    \"discrete-bar\": \"discrete-bar\",\n    \"stacked-discrete-bar\": \"stacked-discrete-bar\",\n    slope: \"slope\",\n    \"stacked-bar\": \"stacked-bar\",\n    marimekko: \"marimekko\",\n} as const\n\n/** Internal tab names used in Grapher */\nexport const GRAPHER_TAB_NAMES = {\n    Table: \"Table\",\n    WorldMap: \"WorldMap\",\n\n    ...GRAPHER_CHART_TYPES,\n} as const\n\n/** Valid values for the `tab` query parameter in Grapher */\nexport const GRAPHER_TAB_QUERY_PARAMS = GRAPHER_TAB_CONFIG_OPTIONS\n\n/**\n * Validation regex patterns for originUrl field.\n * The origin url can either be a full URL (with optional https protocol),\n * or a relative URL starting with /.\n * We use separate regex patterns rather than combining them for readability.\n */\nexport const ORIGIN_URL_REGEX_PATTERNS = [\n    /^(https?:\\/\\/)?[^/.]+\\.[^/].+$/, // absolute URL, optionally starting with https\n    /^\\/.+$/, // relative URL, starting with /\n] as const\n","import {\n    OwidChartDimensionInterface,\n    OwidVariableRoundingMode,\n} from \"../OwidVariableDisplayConfigInterface.js\"\nimport { ColumnSlugs, EntityName } from \"../domainTypes/CoreTableTypes.js\"\nimport { AxisAlign, Position } from \"../domainTypes/Layout.js\"\nimport { Integer } from \"../domainTypes/Various.js\"\nimport { DetailDictionary } from \"../gdocTypes/Gdoc.js\"\nimport {\n    GRAPHER_CHART_TYPES,\n    GRAPHER_MAP_TYPE,\n    GRAPHER_TAB_NAMES,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n    GRAPHER_TAB_QUERY_PARAMS,\n} from \"./GrapherConstants.js\"\nimport { ArchiveContext } from \"../domainTypes/Archive.js\"\nimport {\n    BinningStrategyIncludingManual,\n    MidpointMode,\n} from \"./BinningStrategyTypes.js\"\nimport { CatalogDataForKey, CatalogKey } from \"../CatalogTypes.js\"\n\n// Utility type that marks all properties of T that may be undefined as optional.\nexport type UndefinedToOptional<T> = Partial<T> & {\n    [K in keyof T as undefined extends T[K] ? never : K]: T[K]\n}\n\nexport interface Box {\n    x: number\n    y: number\n    width: number\n    height: number\n}\n\n// TODO: remove duplicate definition, also available in CoreTable\nexport enum SortOrder {\n    asc = \"asc\",\n    desc = \"desc\",\n}\n\nexport enum SortBy {\n    custom = \"custom\",\n    entityName = \"entityName\",\n    column = \"column\",\n    total = \"total\",\n}\n\nexport interface SortConfig {\n    sortBy?: SortBy\n    sortOrder?: SortOrder\n    sortColumnSlug?: string\n}\n\nexport type Year = Integer\nexport type Color = string\n\n/**\n * A concrete point in time (year or date). It's always supposed to be a finite number, but we\n * cannot enforce this in TypeScript.\n */\nexport type Time = Integer\nexport type TimeRange = [Time, Time]\n\nexport type PrimitiveType = number | string | boolean\nexport type ValueRange = [number, number]\n\nexport enum ScaleType {\n    linear = \"linear\",\n    log = \"log\",\n}\n\nexport enum KeyChartLevel {\n    None = 0, // not a key chart, will not show in the all charts block of the related topic page\n    Bottom = 1, // chart will show at the bottom of the all charts block\n    Middle = 2, // chart will show in the middle of the all charts block\n    Top = 3, // chart will show at the top of the all charts block\n}\n\n/**\n * How to mark a detail on demand:\n * - superscript: add a superscript reference number\n * - underline: underline the text\n * - none: don't mark it\n */\nexport type DetailsMarker = \"superscript\" | \"underline\" | \"none\"\n\nexport interface BasicChartInformation {\n    title: string\n    slug: string\n    variantName?: string | null\n}\nexport interface RelatedChart extends BasicChartInformation {\n    chartId: number\n    keyChartLevel?: KeyChartLevel\n    archiveContext?: ArchiveContext | undefined\n}\nexport enum DimensionProperty {\n    y = \"y\",\n    x = \"x\",\n    size = \"size\",\n    color = \"color\",\n    table = \"table\",\n}\n\n// see CoreTableConstants.ts\nexport type ColumnSlug = string // a url friendly name for a column in a table. cannot have spaces\n\n/**\n * An unbounded value (±Infinity) or a concrete point in time (year or date).\n */\nexport type TimeBound = number\n\nexport type TimeBounds = [TimeBound, TimeBound]\n\n/**\n * The two special TimeBound values: unbounded left & unbounded right.\n */\nexport enum TimeBoundValue {\n    negativeInfinity = -Infinity,\n    positiveInfinity = Infinity,\n}\n\nexport enum TimeBoundValueStr {\n    unboundedLeft = \"earliest\",\n    unboundedRight = \"latest\",\n}\n\n/**\n * Time tolerance strategy used for maps\n */\nexport enum ToleranceStrategy {\n    closest = \"closest\",\n    backwards = \"backwards\",\n    forwards = \"forwards\",\n}\n\nexport interface ToleranceOptions {\n    toleranceOverride?: number\n    toleranceStrategyOverride?: ToleranceStrategy\n}\n\nexport enum AxisMinMaxValueStr {\n    auto = \"auto\",\n}\n\n// We currently have the notion of \"modes\", where you can either select 1 entity, or select multiple entities, or not change the selection at all.\n// Todo: can we remove?\nexport enum EntitySelectionMode {\n    MultipleEntities = \"add-country\",\n    SingleEntity = \"change-country\",\n    Disabled = \"disabled\",\n}\n\nexport enum StackMode {\n    absolute = \"absolute\",\n    relative = \"relative\",\n}\n\nexport enum FacetStrategy {\n    none = \"none\", // No facets\n    entity = \"entity\", // One chart for each country/entity\n    metric = \"metric\", // One chart for each Y column\n}\n\nexport enum FacetAxisDomain {\n    independent = \"independent\", // all facets have their own y domain\n    // TODO: rename to \"uniform\", since \"shared\" has a different meaning when\n    // axes are being plotted (it means the axis is omitted).\n    // Need to migrate Grapher & Explorer configs.\n    shared = \"shared\", // all facets share the same y domain\n}\n\nexport enum SeriesStrategy {\n    column = \"column\", // One line per column\n    entity = \"entity\", // One line per entity\n}\n\nexport interface ChartErrorInfo {\n    reason: string // no chart error if set to the empty string\n    help?: string\n}\n\nexport type SeriesName = string\n\nexport type SeriesColorMap = Map<SeriesName, Color>\n\nexport type GrapherMapType = typeof GRAPHER_MAP_TYPE\nexport type GrapherChartType = keyof typeof GRAPHER_CHART_TYPES\nexport type GrapherChartOrMapType = GrapherChartType | GrapherMapType\n\nexport type GrapherTabConfigOption = keyof typeof GRAPHER_TAB_CONFIG_OPTIONS\nexport type GrapherTabQueryParam = keyof typeof GRAPHER_TAB_QUERY_PARAMS\nexport type GrapherTabName = keyof typeof GRAPHER_TAB_NAMES\n\nexport interface RelatedQuestionsConfig {\n    text: string\n    url: string\n}\n\nexport enum MissingDataStrategy {\n    auto = \"auto\", // pick default strategy based on chart type\n    hide = \"hide\", // hide entities with missing data\n    show = \"show\", // show entities with missing data\n}\n\n// When a user hovers over a connected series line in a ScatterPlot we show\n// a label for each point. By default that value will be from the \"year\" column\n// but by changing this option the column used for the x or y axis could be used instead.\nexport enum ScatterPointLabelStrategy {\n    year = \"year\",\n    x = \"x\",\n    y = \"y\",\n}\n\nexport enum PeerCountryStrategy {\n    /** Use the containing continent, income group and World as peers */\n    ParentRegions = \"parentRegions\",\n    /** Use countries with similar GDP per capita as peers */\n    GdpPerCapita = \"gdpPerCapita\",\n    /** Use countries with similar population as peers */\n    Population = \"population\",\n    /** Use countries that represent the full data range */\n    DataRange = \"dataRange\",\n    /** Use the chart's default selection as peers */\n    DefaultSelection = \"defaultSelection\",\n    /** Use geographically neighboring countries as peers */\n    Neighbors = \"neighbors\",\n    /** Don't automatically add any peer countries (useful in search) */\n    None = \"none\",\n}\n\nexport type PeerCountryStrategyQueryParam = PeerCountryStrategy | \"auto\"\n\n/** Valid values for the peerCountries query parameter */\nexport const VALID_PEER_COUNTRY_STRATEGY_QUERY_PARAMS: PeerCountryStrategyQueryParam[] =\n    [\"auto\", ...Object.values(PeerCountryStrategy)]\n\nexport enum GrapherTooltipAnchor {\n    /** The tooltip is positioned relative to the mouse cursor */\n    mouse = \"mouse\",\n    /** The tooltip is pinned to the bottom of the screen */\n    bottom = \"bottom\",\n}\n\nexport interface AnnotationFieldsInTitle {\n    entity?: boolean\n    time?: boolean\n    changeInPrefix?: boolean\n}\n\nexport interface Tickmark {\n    value: number\n    priority: number\n    faint?: boolean\n    gridLineOnly?: boolean\n    solid?: boolean // mostly for labelling domain start (e.g. 0)\n}\nexport interface TickFormattingOptions {\n    roundingMode?: OwidVariableRoundingMode\n    numDecimalPlaces?: number\n    numSignificantFigures?: number\n    unit?: string\n    trailingZeroes?: boolean\n    spaceBeforeUnit?: boolean\n    useNoBreakSpace?: boolean\n    showPlus?: boolean\n    numberAbbreviation?: \"short\" | \"long\" | false\n}\n// Represents the actual entered configuration state in the editor\nexport interface AxisConfigInterface {\n    scaleType?: ScaleType\n    label?: string\n    min?: number | AxisMinMaxValueStr.auto\n    max?: number | AxisMinMaxValueStr.auto\n    canChangeScaleType?: boolean\n    removePointsOutsideDomain?: boolean\n    hideAxis?: boolean\n    hideTickLabels?: boolean\n\n    /** Hide the faint lines that are shown inside the plot (axis ticks may still be visible). */\n    hideGridlines?: boolean\n\n    /**\n     * The *preferred* orientation of the axis.\n     * If the orientation is not supported by the axis, this parameter will be ignored.\n     */\n    orient?: Position\n\n    /**\n     * Whether the axis domain should be the same across faceted charts (if possible)\n     */\n    facetDomain?: FacetAxisDomain\n\n    /**\n     * Minimum pixels to take up.\n     * Dictates the minimum height for a HorizontalAxis, minimum width for a VerticalAxis.\n     */\n    minSize?: number\n\n    /**\n     * The padding between an axis label and an axis tick\n     */\n    labelPadding?: number\n\n    /**\n     * The padding between an axis tick and an axis gridline\n     */\n    tickPadding?: number\n\n    /**\n     * Extend scale to start & end on \"nicer\" round values.\n     * See: https://github.com/d3/d3-scale#continuous_nice\n     */\n    nice?: boolean\n\n    /**\n     * The (rough) maximum number of ticks to show. Not a strict limit, more ticks may be shown.\n     * See: https://github.com/d3/d3-scale#continuous_ticks\n     */\n    maxTicks?: number\n\n    /**\n     * Custom ticks to use. Any automatic ticks are omitted.\n     * Note that the ticks will be omitted if they are outside the axis domain.\n     * To control the domain, use `min` and `max`.\n     */\n    ticks?: Tickmark[]\n\n    /**\n     * Tick formatting overrides. Allows things like omitting the unit and using\n     * short number abbreviations.\n     */\n    tickFormattingOptions?: TickFormattingOptions\n\n    /**\n     * What to do when .place() is called on an axis that only contains a single\n     * domain value.\n     * Should the point be placed at the start, middle or end of the axis?\n     */\n    singleValueAxisPointAlign?: AxisAlign\n\n    /**\n     * If given, think of the axis scale as a band scale, where each domain value\n     * occupies a fixed width. The axis is padded on both sides to reserve space\n     * for the outermost values.\n     */\n    domainValues?: number[]\n}\n\nexport interface VerticalComparisonLineConfig {\n    xEquals: number // x-coordinate of the vertical line\n    label?: string\n}\n\nexport interface CustomComparisonLineConfig {\n    yEquals?: string // line equation like \"2*x^2\" or \"sqrt(x)\"; defaults to \"x\"\n    label?: string\n}\n\nexport type ComparisonLineConfig =\n    | VerticalComparisonLineConfig\n    | CustomComparisonLineConfig\n\nexport enum LogoOption {\n    owid = \"owid\",\n    \"core+owid\" = \"core+owid\",\n    \"gv+owid\" = \"gv+owid\",\n}\n\nexport interface ProjectionColumnInfo {\n    projectedSlug: ColumnSlug\n    historicalSlug: ColumnSlug\n    combinedSlug: ColumnSlug\n    slugForIsProjectionColumn: ColumnSlug\n}\n\nexport interface ColorScaleConfigInterface {\n    baseColorScheme?: ColorSchemeName\n    colorSchemeInvert?: boolean\n    binningStrategy: BinningStrategyIncludingManual\n    createBinForMidpoint?: boolean\n    minValue?: number\n    maxValue?: number\n    midpoint?: number\n    midpointMode?: MidpointMode\n    customNumericValues: number[]\n    customNumericLabels: (string | undefined | null)[]\n    customNumericColorsActive?: boolean\n    customNumericColors: (Color | undefined | null)[]\n\n    customCategoryColors: Record<string, string | undefined>\n    customCategoryLabels: Record<string, string | undefined>\n    customHiddenCategories: Record<string, true | undefined>\n    legendDescription?: string\n}\n\nexport const colorScaleConfigDefaults = {\n    binningStrategy: \"auto\",\n    customNumericValues: [],\n    customNumericLabels: [],\n    customNumericColors: [],\n\n    customCategoryColors: {},\n    customCategoryLabels: {},\n    customHiddenCategories: {},\n} satisfies ColorScaleConfigInterface\n\nexport interface ColorSchemeInterface {\n    name: string\n    colorSets: Color[][] // Different color sets depending on how many distinct colors you want\n    singleColorScale?: boolean\n    isDistinct?: boolean\n    displayName?: string\n    colorMap?: Record<string, Color> // Optional mapping from categorical values to specific colors\n}\n\n// Note: TypeScript does not currently support extending or merging enums. Ideally we would have 2 enums here (one for custom and one for brewer) and then just merge them.\n// https://github.com/microsoft/TypeScript/issues/17592\nexport enum ColorSchemeName {\n    // Brewer schemes:\n    YlGn = \"YlGn\",\n    YlGnBu = \"YlGnBu\",\n    GnBu = \"GnBu\",\n    BuGn = \"BuGn\",\n    PuBuGn = \"PuBuGn\",\n    BuPu = \"BuPu\",\n    RdPu = \"RdPu\",\n    PuRd = \"PuRd\",\n    OrRd = \"OrRd\",\n    YlOrRd = \"YlOrRd\",\n    YlOrBr = \"YlOrBr\",\n    Purples = \"Purples\",\n    Blues = \"Blues\",\n    Greens = \"Greens\",\n    Oranges = \"Oranges\",\n    Reds = \"Reds\",\n    Greys = \"Greys\",\n    PuOr = \"PuOr\",\n    BrBG = \"BrBG\",\n    PRGn = \"PRGn\",\n    PiYG = \"PiYG\",\n    RdBu = \"RdBu\",\n    RdGy = \"RdGy\",\n    RdYlBu = \"RdYlBu\",\n    Spectral = \"Spectral\",\n    RdYlGn = \"RdYlGn\",\n    Accent = \"Accent\",\n    Dark2 = \"Dark2\",\n    Paired = \"Paired\",\n    Pastel1 = \"Pastel1\",\n    Pastel2 = \"Pastel2\",\n    Set1 = \"Set1\",\n    Set2 = \"Set2\",\n    Set3 = \"Set3\",\n    PuBu = \"PuBu\",\n\n    // Custom schemes:\n    Magma = \"Magma\",\n    Inferno = \"Inferno\",\n    Plasma = \"Plasma\",\n    Viridis = \"Viridis\",\n    continents = \"continents\",\n    stackedAreaDefault = \"stackedAreaDefault\",\n    \"owid-distinct\" = \"owid-distinct\",\n    SingleColorDenim = \"SingleColorDenim\",\n    SingleColorTeal = \"SingleColorTeal\",\n    SingleColorPurple = \"SingleColorPurple\",\n    SingleColorDustyCoral = \"SingleColorDustyCoral\",\n    SingleColorDarkCopper = \"SingleColorDarkCopper\",\n    OwidCategoricalA = \"OwidCategoricalA\",\n    OwidCategoricalB = \"OwidCategoricalB\",\n    OwidCategoricalC = \"OwidCategoricalC\",\n    OwidCategoricalD = \"OwidCategoricalD\",\n    OwidCategoricalE = \"OwidCategoricalE\",\n    OwidCategoricalMap = \"OwidCategoricalMap\",\n    OwidEnergy = \"OwidEnergy\",\n    OwidEnergyLines = \"OwidEnergyLines\",\n    OwidDistinctLines = \"OwidDistinctLines\",\n    BinaryMapPaletteA = \"BinaryMapPaletteA\",\n    BinaryMapPaletteB = \"BinaryMapPaletteB\",\n    BinaryMapPaletteC = \"BinaryMapPaletteC\",\n    BinaryMapPaletteD = \"BinaryMapPaletteD\",\n    BinaryMapPaletteE = \"BinaryMapPaletteE\",\n    SingleColorGradientDenim = \"SingleColorGradientDenim\",\n    SingleColorGradientTeal = \"SingleColorGradientTeal\",\n    SingleColorGradientPurple = \"SingleColorGradientPurple\",\n    SingleColorGradientDustyCoral = \"SingleColorGradientDustyCoral\",\n    SingleColorGradientDarkCopper = \"SingleColorGradientDarkCopper\",\n}\n\nexport enum MapRegionName {\n    World = \"World\",\n    Africa = \"Africa\",\n    NorthAmerica = \"NorthAmerica\",\n    SouthAmerica = \"SouthAmerica\",\n    Asia = \"Asia\",\n    Europe = \"Europe\",\n    Oceania = \"Oceania\",\n}\n\n// 'World' doesn't make sense as a region for the globe\nexport type GlobeRegionName = Exclude<MapRegionName, MapRegionName.World>\n\nexport interface GlobeConfig {\n    isActive: boolean\n    rotation: [number, number]\n    zoom: number\n    focusCountry?: EntityName\n}\n\nexport interface MapConfigInterface {\n    columnSlug?: ColumnSlug\n    time?: TimeBound | TimeBoundValueStr\n    startTime?: TimeBound | TimeBoundValueStr\n    timeTolerance?: number\n    toleranceStrategy?: ToleranceStrategy\n    hideTimeline?: boolean\n    region?: MapRegionName\n    globe?: GlobeConfig\n    colorScale?: Partial<ColorScaleConfigInterface>\n    tooltipUseCustomLabels?: boolean\n    selectedEntityNames?: EntityName[]\n}\n\n// This configuration represents the entire persistent state of a grapher\n// Ideally, this is also all of the interaction state: when a grapher is saved and loaded again\n// under the same rendering conditions it ought to remain visually identical\nexport interface GrapherInterface extends SortConfig {\n    $schema?: string\n    chartTypes?: GrapherChartType[]\n    id?: number\n    version?: number\n    slug?: string\n    title?: string\n    subtitle?: string\n    sourceDesc?: string\n    note?: string\n    hideAnnotationFieldsInTitle?: AnnotationFieldsInTitle\n    minTime?: TimeBound | TimeBoundValueStr\n    maxTime?: TimeBound | TimeBoundValueStr\n    timelineMinTime?: Time | TimeBoundValueStr\n    timelineMaxTime?: Time | TimeBoundValueStr\n    dimensions?: OwidChartDimensionInterface[]\n    addCountryMode?: EntitySelectionMode\n    comparisonLines?: ComparisonLineConfig[]\n    stackMode?: StackMode\n\n    showNoDataArea?: boolean\n    hideSeriesLabels?: boolean\n    logo?: LogoOption\n    hideLogo?: boolean\n    hideRelativeToggle?: boolean\n    entityType?: string\n    entityTypePlural?: string\n    hideTimeline?: boolean\n    zoomToSelection?: boolean\n    showYearLabels?: boolean // Always show year in labels for bar charts\n    hasMapTab?: boolean\n    tab?: GrapherTabConfigOption\n    relatedQuestions?: RelatedQuestionsConfig[]\n    details?: DetailDictionary\n    internalNotes?: string\n    variantName?: string\n    originUrl?: string\n    isPublished?: boolean\n    baseColorScheme?: ColorSchemeName\n    invertColorScheme?: boolean\n    hideConnectedScatterLines?: boolean // Hides lines between points when timeline spans multiple years. Requested by core-econ for certain charts\n    hideScatterLabels?: boolean\n    scatterPointLabelStrategy?: ScatterPointLabelStrategy\n    compareEndPointsOnly?: boolean\n    matchingEntitiesOnly?: boolean\n    hideTotalValueLabel?: boolean\n    excludedEntityNames?: EntityName[]\n    includedEntityNames?: EntityName[]\n    selectedEntityNames?: EntityName[]\n    selectedEntityColors?: { [entityName: string]: string | undefined }\n    focusedSeriesNames?: SeriesName[]\n    peerCountryStrategy?: PeerCountryStrategy\n    missingDataStrategy?: MissingDataStrategy\n    hideFacetControl?: boolean\n    facettingLabelByYVariables?: string\n    selectedFacetStrategy?: FacetStrategy\n\n    xAxis?: Partial<AxisConfigInterface>\n    yAxis?: Partial<AxisConfigInterface>\n    colorScale?: Partial<ColorScaleConfigInterface>\n    map?: Partial<MapConfigInterface>\n\n    // When we move graphers to Git, and remove dimensions, we can clean this up.\n    ySlugs?: ColumnSlugs\n    xSlug?: ColumnSlug\n    sizeSlug?: ColumnSlug\n    colorSlug?: ColumnSlug\n    tableSlugs?: ColumnSlugs\n}\n\nexport interface LegacyGrapherInterface extends GrapherInterface {\n    data: any\n}\n\n// This is intentionally a `type` and not an `interface`, because the TS semantics make it so that this here can be assigned to a `Record<string, string>`.\n// See https://stackoverflow.com/q/64970414\nexport type GrapherQueryParams = {\n    country?: string\n    focus?: string\n    tab?: string\n    overlay?: string\n    stackMode?: string\n    zoomToSelection?: string\n    xScale?: string\n    yScale?: string\n    time?: string\n    region?: string\n    endpointsOnly?: string\n    facet?: string\n    uniformYAxis?: string\n    showSelectionOnlyInTable?: string\n    showNoDataArea?: string\n    globe?: string\n    globeRotation?: string\n    globeZoom?: string\n    mapSelect?: string\n    tableFilter?: string\n    tableSearch?: string\n    peerCountries?: string\n}\n\nexport type LegacyGrapherQueryParams = GrapherQueryParams & {\n    year?: string\n}\n\n// We don't use this anywhere, but this is a way to ensure that we have an object with all keys present\n// ... so GRAPHER_QUERY_PARAM_KEYS below is guaranteed to have all keys of LegacyGrapherQueryParams\nconst GRAPHER_ALL_QUERY_PARAMS: Required<LegacyGrapherQueryParams> = {\n    country: \"\",\n    focus: \"\",\n    tab: \"\",\n    overlay: \"\",\n    stackMode: \"\",\n    zoomToSelection: \"\",\n    xScale: \"\",\n    yScale: \"\",\n    time: \"\",\n    region: \"\",\n    endpointsOnly: \"\",\n    facet: \"\",\n    uniformYAxis: \"\",\n    showSelectionOnlyInTable: \"\",\n    showNoDataArea: \"\",\n    year: \"\",\n    globe: \"\",\n    globeRotation: \"\",\n    globeZoom: \"\",\n    mapSelect: \"\",\n    tableFilter: \"\",\n    tableSearch: \"\",\n    peerCountries: \"\",\n}\n\nexport const GRAPHER_QUERY_PARAM_KEYS = Object.keys(\n    GRAPHER_ALL_QUERY_PARAMS\n) as (keyof LegacyGrapherQueryParams)[]\n\n// Another approach we may want to try is this: https://github.com/mobxjs/serializr\nexport const grapherKeysToSerialize = [\n    \"$schema\",\n    \"chartTypes\",\n    \"id\",\n    \"version\",\n    \"slug\",\n    \"title\",\n    \"subtitle\",\n    \"sourceDesc\",\n    \"note\",\n    \"hideAnnotationFieldsInTitle\",\n    \"minTime\",\n    \"maxTime\",\n    \"timelineMinTime\",\n    \"timelineMaxTime\",\n    \"addCountryMode\",\n    \"stackMode\",\n    \"showNoDataArea\",\n    \"hideSeriesLabels\",\n    \"logo\",\n    \"hideLogo\",\n    \"hideRelativeToggle\",\n    \"entityType\",\n    \"entityTypePlural\",\n    \"facettingLabelByYVariables\",\n    \"hideTimeline\",\n    \"zoomToSelection\",\n    \"showYearLabels\",\n    \"hasMapTab\",\n    \"tab\",\n    \"internalNotes\",\n    \"variantName\",\n    \"originUrl\",\n    \"isPublished\",\n    \"baseColorScheme\",\n    \"invertColorScheme\",\n    \"hideConnectedScatterLines\",\n    \"hideScatterLabels\",\n    \"scatterPointLabelStrategy\",\n    \"compareEndPointsOnly\",\n    \"matchingEntitiesOnly\",\n    \"hideTotalValueLabel\",\n    \"xAxis\",\n    \"yAxis\",\n    \"colorScale\",\n    \"map\",\n    \"dimensions\",\n    \"selectedEntityNames\",\n    \"selectedEntityColors\",\n    \"focusedSeriesNames\",\n    \"sortBy\",\n    \"sortOrder\",\n    \"sortColumnSlug\",\n    \"excludedEntityNames\",\n    \"includedEntityNames\",\n    \"selectedFacetStrategy\",\n    \"hideFacetControl\",\n    \"comparisonLines\",\n    \"relatedQuestions\",\n    \"missingDataStrategy\",\n    \"peerCountryStrategy\",\n\n    // internals\n    \"adminBaseUrl\",\n    \"bakedGrapherURL\",\n]\n\nexport enum GrapherVariant {\n    /**\n     * Default rendering, with header and footer\n     */\n    Default = \"default\",\n\n    /**\n     * Default rendering, chart area only\n     */\n    Uncaptioned = \"uncaptioned\",\n\n    /**\n     * Simplified rendering, suitable for thumbnails.\n     * Less noisy visualization, but should be understandable on its own\n     */\n    Thumbnail = \"thumbnail\",\n}\n\nexport interface ChartRedirect {\n    id: number\n    slug: string\n    chartId: number\n}\n\nexport enum GrapherWindowType {\n    panel = \"panel\",\n    modal = \"modal\",\n    drawer = \"drawer\",\n}\n\nexport type GrapherTrendArrowDirection = \"up\" | \"right\" | \"down\"\n\n/** Function type for loading additional indicator data from the catalog */\nexport type AdditionalGrapherDataFetchFn = <K extends CatalogKey>(\n    catalogKey: K\n) => Promise<CatalogDataForKey<K>>\n","export enum Position {\n    top = \"top\",\n    right = \"right\",\n    bottom = \"bottom\",\n    left = \"left\",\n}\n\nexport type PositionMap<Value> = {\n    [key in Position]?: Value\n}\n\nexport enum HorizontalAlign {\n    left = \"left\",\n    center = \"center\",\n    right = \"right\",\n}\n\nexport enum VerticalAlign {\n    top = \"top\",\n    middle = \"middle\",\n    bottom = \"bottom\",\n}\n\nexport enum AxisAlign {\n    start = \"start\",\n    middle = \"middle\",\n    end = \"end\",\n}\n\nexport interface GridParameters {\n    rows: number\n    columns: number\n    count: number\n}\n","import { DbPlainTag } from \"../dbTypes/Tags.js\"\nimport { OwidGdocType } from \"../gdocTypes/Gdoc.js\"\n\nexport interface EntryMeta {\n    slug: string\n    title: string\n}\n\nexport interface CategoryWithEntries {\n    name: string\n    slug: string\n    entries: EntryMeta[]\n    subcategories?: CategoryWithEntries[]\n}\n\nexport const TagGraphTableName = \"tag_graph\"\n\nexport type DbInsertTagGraphNode = {\n    parentId: number\n    childId: number\n    weight?: number\n    updatedAt?: string\n}\n\nexport type DbPlainTagGraphNode = Required<DbInsertTagGraphNode>\n\nexport const TagGraphRootName = \"tag-graph-root\" as const\n\nexport type FlatTagGraphNode = Pick<DbPlainTag, \"name\" | \"slug\"> & {\n    weight: number\n    isTopic: boolean\n    isSearchable: boolean\n    parentId: number\n    childId: number\n    slug: string | null\n}\n\nexport type FlatTagGraph = Record<number, FlatTagGraphNode[]>\n\nexport interface TagGraphNode {\n    children: TagGraphNode[]\n    id: number\n    isTopic: boolean\n    isSearchable: boolean\n    name: string\n    path: number[]\n    slug: string | null\n    weight: number\n}\n\nexport type TagGraphRoot = TagGraphNode & {\n    children: TagGraphNode[]\n    id: number\n    isTopic: false\n    isSearchable: false\n    name: typeof TagGraphRootName\n    path: [number]\n    slug: null\n    weight: 0\n}\n\nexport interface PostReference {\n    id: string\n    title: string\n    slug: string\n    url: string\n    type: OwidGdocType\n}\n\nexport enum ContentGraphLinkType {\n    Gdoc = \"gdoc\",\n    Url = \"url\",\n    Grapher = \"grapher\",\n    Explorer = \"explorer\",\n    NarrativeChart = \"narrative-chart\",\n    StaticViz = \"static-viz\",\n    Dod = \"dod\",\n    GuidedChart = \"guided-chart\",\n}\n","import type { OwidEnrichedGdocBlock } from \"../ArchieMlComponents.js\"\nexport type ArchieMLUnexpectedNonObjectValue = string\n\nexport type ParseError = {\n    message: string\n    isWarning?: boolean\n}\n\nexport type EnrichedBlockWithParseErrors = {\n    parseErrors: ParseError[]\n}\n\nexport enum BlockSize {\n    Narrow = \"narrow\",\n    Wide = \"wide\",\n    Widest = \"widest\",\n}\n\nexport function checkIsBlockSize(size: unknown): size is BlockSize {\n    if (typeof size !== \"string\") return false\n    return Object.values(BlockSize).includes(size as any)\n}\n\nexport const blockVisibilitys = [\"desktop\", \"mobile\"] as const\n\nexport type BlockVisibility = (typeof blockVisibilitys)[number]\n\nexport const blockAlignments = [\"left\", \"center\", \"right\"] as const\n\nexport type BlockAlignment = (typeof blockAlignments)[number]\n\n/* This can either be a link to a gdoc/grapher/explorer or external URL */\nexport type RawHybridLink = {\n    url?: string\n    title?: string\n    subtitle?: string\n}\n\n/* This can either be a link to a gdoc/grapher/explorer or external URL */\nexport type EnrichedHybridLink = {\n    url: string\n    title?: string\n    subtitle?: string\n    thumbnail?: string\n    type: \"hybrid-link\"\n}\n\nexport type Ref = {\n    id: string\n    // Can be -1\n    index: number\n    content: OwidEnrichedGdocBlock[]\n    parseErrors: ParseError[]\n}\n\nexport type RefDictionary = {\n    [refId: string]: Ref\n}\n","import {\n    GrapherChartOrMapType,\n    GrapherTabConfigOption,\n    RelatedChart,\n} from \"../grapherTypes/GrapherTypes.js\"\nimport { BreadcrumbItem } from \"../domainTypes/Site.js\"\nimport { TocHeadingWithTitleSupertitle } from \"../domainTypes/Toc.js\"\nimport { ImageMetadata } from \"./Image.js\"\nimport {\n    EnrichedBlockSocials,\n    EnrichedBlockText,\n    EnrichedBlockWithParseErrors,\n    OwidEnrichedGdocBlock,\n    OwidRawGdocBlock,\n    RefDictionary,\n} from \"./ArchieMlComponents.js\"\nimport { MinimalTag } from \"../dbTypes/Tags.js\"\nimport { DbEnrichedLatestWork } from \"../domainTypes/Author.js\"\nimport { QueryParams } from \"../domainTypes/Various.js\"\nimport { TagGraphRoot } from \"../domainTypes/ContentGraph.js\"\nimport { DbRawImage } from \"../dbTypes/Images.js\"\nimport { DbPlainNarrativeChart } from \"../dbTypes/NarrativeCharts.js\"\nimport { ArchivedPageVersion } from \"../domainTypes/Archive.js\"\nimport { GrapherValuesJson } from \"../endpointTypes/GrapherValuesJson.js\"\n\nexport enum OwidGdocPublicationContext {\n    unlisted = \"unlisted\",\n    listed = \"listed\",\n}\n\nexport interface LatestDataInsight {\n    id: string\n    slug: string\n    publishedAt: Date | null\n    content: OwidGdocDataInsightContent\n    index?: number\n}\n\nexport interface LinkedAuthor {\n    name: string\n    slug: string\n    featuredImage: string | null\n    updatedAt: Date\n    role?: string\n}\n\nexport enum ChartConfigType {\n    Grapher = \"grapher\",\n    Explorer = \"explorer\",\n    MultiDim = \"multi-dim\",\n}\n\n// A minimal object containing metadata needed for rendering prominent links etc in the client\nexport interface LinkedChart {\n    configType: ChartConfigType\n    originalSlug: string\n    resolvedUrl: string\n    title: string\n    subtitle?: string\n    thumbnail?: string\n    tags: string[]\n    tab?: GrapherTabConfigOption\n    indicatorId?: number // in case of a datapage\n    archivedPageVersion?: ArchivedPageVersion | undefined\n    dimensionSlugs?: string[] // for validating mdim links, to make sure the query params are correct\n}\n\n// An object containing metadata needed for embedded narrative charts\nexport interface NarrativeChartInfo {\n    name: string\n    title: string\n    chartConfigId: string\n    parentChartSlug: string\n    queryParamsForParentChart: QueryParams\n    latestArchivedParent?: ArchivedPageVersion\n}\n\n// An object containing metadata needed for embedded static visualizations\nexport interface LinkedStaticViz {\n    desktop: ImageMetadata\n    mobile?: ImageMetadata\n    name: string\n    grapherUrl?: string\n    sourceUrl?: string\n    description: string\n}\n\n/**\n * A linked indicator is derived from a linked grapher's config (see: getVariableOfDatapageIfApplicable)\n * e.g. https://ourworldindata.org/grapher/tomato-production -> config for grapher with { slug: \"tomato-production\" } -> indicator metadata\n * currently we only attach a small amount of metadata that we need for key-indicator blocks.\n * In the future we might want to attach more metadata, e.g. the indicator's description, source, etc\n */\nexport interface LinkedIndicator {\n    id: number\n    title: string\n    attributionShort?: string\n}\n\n/**\n * A linked callout stores the data values needed to populate a data-callout block.\n * The key is generated from the normalized URL + entity name.\n */\nexport interface LinkedCallout {\n    url: string\n    /** The data values for this chart/entity combination */\n    values: GrapherValuesJson\n}\n\nexport type LinkedCallouts = Record<string, LinkedCallout>\n\nexport enum OwidGdocType {\n    Article = \"article\",\n    TopicPage = \"topic-page\",\n    Fragment = \"fragment\",\n    LinearTopicPage = \"linear-topic-page\",\n    DataInsight = \"data-insight\",\n    Homepage = \"homepage\",\n    AboutPage = \"about-page\",\n    Author = \"author\",\n    Announcement = \"announcement\",\n    Profile = \"profile\",\n}\n\nexport const ALL_GDOC_TYPES: OwidGdocType[] = Object.values(\n    OwidGdocType\n) as OwidGdocType[]\n\nexport interface OwidGdocBaseInterface {\n    id: string\n    slug: string\n    // TODO: should we type this as a union of the possible content types instead?\n    content: OwidGdocContent\n    contentMd5: string\n    published: boolean\n    createdAt: Date\n    publishedAt: Date | null\n    updatedAt: Date | null\n    revisionId: string | null\n    publicationContext: OwidGdocPublicationContext\n    manualBreadcrumbs: BreadcrumbItem[] | null\n    linkedAuthors?: LinkedAuthor[]\n    linkedDocuments?: Record<string, OwidGdocMinimalPostInterface>\n    linkedCharts?: Record<string, LinkedChart>\n    linkedNarrativeCharts?: Record<string, NarrativeChartInfo>\n    linkedStaticViz?: Record<string, LinkedStaticViz>\n    linkedIndicators?: Record<number, LinkedIndicator>\n    linkedCallouts?: LinkedCallouts\n    imageMetadata?: Record<string, ImageMetadata>\n    relatedCharts?: RelatedChart[]\n    tags?: MinimalTag[] | null\n    errors?: OwidGdocErrorMessage[]\n    breadcrumbs?: BreadcrumbItem[] | null\n    markdown: string | null\n}\n\nexport interface OwidGdocPostInterface extends OwidGdocBaseInterface {\n    content: OwidGdocPostContent\n}\n\n// Used for linkedDocuments attachments, instead of attaching the entire gdoc model\nexport interface OwidGdocMinimalPostInterface {\n    id: string\n    title: string // used in prominent links, topic-page-intro related topics, etc\n    slug: string\n    authors: string[] // used in research & writing block\n    publishedAt: string | null // used in research & writing block\n    published: boolean // used in preview to validate whether or not the post will display\n    subtitle: string // used in prominent links & research & writing block\n    excerpt: string // used in prominent links\n    type: OwidGdocType // used in useLinkedDocument to prepend /data-insights/ to the slug\n    \"featured-image\"?: string // used in prominent links and research & writing block\n    kicker?: string // used in homepage announcements\n    cta?: { text: string; url: string } // used in homepage announcements\n    availableEntityCodes?: string[] // used for profile-type docs to resolve ?country=X links\n}\n\nexport type OwidGdocIndexItem = Pick<\n    OwidGdocBaseInterface,\n    \"id\" | \"slug\" | \"tags\" | \"published\" | \"publishedAt\"\n> &\n    Pick<OwidGdocContent, \"title\" | \"authors\" | \"type\">\n\nexport function extractGdocIndexItem(\n    gdoc: OwidGdocBaseInterface\n): OwidGdocIndexItem {\n    return {\n        id: gdoc.id,\n        slug: gdoc.slug,\n        tags: gdoc.tags ?? [],\n        published: gdoc.published,\n        publishedAt: gdoc.publishedAt,\n        title: gdoc.content.title ?? \"\",\n        authors: gdoc.content.authors,\n        type: gdoc.content.type,\n    }\n}\n\nexport interface OwidGdocDataInsightContent {\n    title: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    [\"narrative-chart\"]?: string\n    [\"grapher-url\"]?: string\n    [\"figma-url\"]?: string\n    [\"approved-by\"]: string // can't publish an insight unless this is set\n    body: OwidEnrichedGdocBlock[]\n    type: OwidGdocType.DataInsight\n}\n\nexport type OwidGdocDataInsightIndexItem = Pick<\n    OwidGdocBaseInterface,\n    \"id\" | \"slug\" | \"tags\" | \"published\" | \"publishedAt\" | \"markdown\"\n> &\n    Pick<OwidGdocDataInsightContent, \"title\" | \"authors\"> & {\n        approvedBy?: OwidGdocDataInsightContent[\"approved-by\"]\n        grapherUrl?: OwidGdocDataInsightContent[\"grapher-url\"]\n        explorerUrl?: OwidGdocDataInsightContent[\"grapher-url\"]\n        narrativeChart?: Pick<\n            DbPlainNarrativeChart,\n            \"id\" | \"name\" | \"chartConfigId\"\n        >\n        chartType?: GrapherChartOrMapType\n        figmaUrl?: OwidGdocDataInsightContent[\"figma-url\"]\n        image?: {\n            id: NonNullable<DbRawImage[\"id\"]>\n            filename: NonNullable<DbRawImage[\"filename\"]>\n            cloudflareId: NonNullable<DbRawImage[\"cloudflareId\"]>\n            originalWidth: NonNullable<DbRawImage[\"originalWidth\"]>\n        }\n    }\n\nexport const DATA_INSIGHTS_INDEX_PAGE_SIZE = 20\nexport const LATEST_INDEX_PAGE_SIZE = 20\n\nexport interface OwidGdocDataInsightInterface extends OwidGdocBaseInterface {\n    content: OwidGdocDataInsightContent\n    latestDataInsights?: LatestDataInsight[]\n}\n\nexport type MinimalDataInsightInterface = Pick<\n    OwidGdocDataInsightContent,\n    \"title\"\n> & {\n    publishedAt: string\n    updatedAt: string\n    slug: string\n    // Not used in any UI, only needed for the data insights atom feed\n    authors: string[]\n    // We select the 5 most recently published insights\n    // We only display 4, but if you're on the DI page for one of them we hide it and show the next most recent\n    index: 0 | 1 | 2 | 3 | 4\n}\n\nexport interface OwidGdocAnnouncementContent {\n    title: string\n    excerpt: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    \"featured-image\"?: string\n    kicker?: string\n    body: OwidEnrichedGdocBlock[]\n    type: OwidGdocType.Announcement\n    cta?: {\n        text: string\n        url: string\n    }\n}\n\nexport interface OwidGdocAnnouncementInterface extends OwidGdocBaseInterface {\n    content: OwidGdocAnnouncementContent\n}\n\nexport type OwidGdocProfileScope = \"countries\" | \"continents\" | \"all\"\n\nexport interface OwidGdocProfileContent {\n    type: OwidGdocType.Profile\n    title: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    scope: OwidGdocProfileScope\n    exclude?: string\n    subtitle?: string\n    excerpt?: string\n    \"featured-image\"?: string\n    \"sidebar-toc\"?: boolean\n    toc?: TocHeadingWithTitleSupertitle[]\n    body: OwidEnrichedGdocBlock[]\n    refs?: { definitions: RefDictionary; errors: OwidGdocErrorMessage[] }\n    instantiatedEntity?: OwidGdocProfileEntitySummary\n}\n\nexport interface OwidGdocProfileEntitySummary {\n    name: string\n    code: string\n    slug?: string\n    regionType?: string\n    isCountry: boolean\n}\n\nexport interface OwidGdocProfileInterface extends OwidGdocBaseInterface {\n    content: OwidGdocProfileContent\n}\n\nexport interface OwidGdocHomepageContent {\n    type: OwidGdocType.Homepage\n    title?: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    body: OwidEnrichedGdocBlock[]\n}\n\nexport interface OwidGdocHomepageMetadata {\n    chartCount?: number\n    topicCount?: number\n    explorerCount?: number\n    tagGraph?: TagGraphRoot\n    announcements?: OwidGdocMinimalPostInterface[]\n}\n\nexport interface OwidGdocHomepageInterface extends OwidGdocBaseInterface {\n    content: OwidGdocHomepageContent\n    linkedDocuments?: Record<string, OwidGdocMinimalPostInterface>\n    homepageMetadata?: OwidGdocHomepageMetadata\n    latestDataInsights?: LatestDataInsight[]\n}\n\nexport interface OwidGdocAuthorContent {\n    type: OwidGdocType.Author\n    title?: string\n    role: string\n    bio?: EnrichedBlockText[]\n    socials?: EnrichedBlockSocials\n    \"featured-image\"?: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    body: OwidEnrichedGdocBlock[]\n}\n\nexport interface OwidGdocAuthorInterface extends OwidGdocBaseInterface {\n    content: OwidGdocAuthorContent\n    latestWorkLinks?: DbEnrichedLatestWork[]\n}\n\nexport interface OwidGdocAboutContent {\n    type: OwidGdocType.AboutPage\n    title: string\n    excerpt?: string\n    \"featured-image\"?: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    \"hide-nav\"?: boolean\n    // By default, all about pages render with the title \"About\" even if they have a title set\n    // (which we use in the gdocs index page in the admin)\n    // This boolean makes it so that the title is used in *both* locations\n    \"override-title\"?: boolean\n    body: OwidEnrichedGdocBlock[]\n    refs?: { definitions: RefDictionary; errors: OwidGdocErrorMessage[] }\n}\n\nexport interface OwidGdocAboutInterface extends OwidGdocBaseInterface {\n    content: OwidGdocAboutContent\n    donors?: string[]\n}\n\nexport type OwidGdocContent =\n    | OwidGdocPostContent\n    | OwidGdocDataInsightContent\n    | OwidGdocHomepageContent\n    | OwidGdocAuthorContent\n    | OwidGdocAboutContent\n    | OwidGdocAnnouncementContent\n    | OwidGdocProfileContent\n\nexport type OwidGdoc =\n    | OwidGdocPostInterface\n    | OwidGdocDataInsightInterface\n    | OwidGdocHomepageInterface\n    | OwidGdocAuthorInterface\n    | OwidGdocAboutInterface\n    | OwidGdocAnnouncementInterface\n    | OwidGdocProfileInterface\n\nexport enum OwidGdocErrorMessageType {\n    Error = \"error\",\n    Warning = \"warning\",\n}\n\nexport type OwidGdocProperty =\n    | keyof OwidGdocPostInterface\n    | keyof OwidGdocPostContent\n    | keyof OwidGdocDataInsightInterface\n    | keyof OwidGdocDataInsightContent\n    | keyof OwidGdocAnnouncementInterface\n    | keyof OwidGdocAnnouncementContent\n    | keyof OwidGdocAuthorInterface\n    | keyof OwidGdocAuthorContent\n    | keyof OwidGdocAboutInterface\n    | keyof OwidGdocAboutContent\n    | keyof OwidGdocProfileInterface\n    | keyof OwidGdocProfileContent\n\nexport type OwidGdocErrorMessageProperty =\n    | OwidGdocProperty\n    | `${OwidGdocProperty}${string}` // also allows for nesting, like `breadcrumbs[0].label`\nexport interface OwidGdocErrorMessage {\n    property: OwidGdocErrorMessageProperty\n    type: OwidGdocErrorMessageType\n    message: string\n}\n\n// see also: getOwidGdocFromJSON()\nexport interface OwidGdocJSON extends Omit<\n    OwidGdocPostInterface,\n    \"createdAt\" | \"publishedAt\" | \"updatedAt\"\n> {\n    createdAt: string\n    publishedAt: string | null\n    updatedAt: string | null\n}\n\nexport interface OwidGdocPostContent {\n    body?: OwidEnrichedGdocBlock[]\n    type?:\n        | OwidGdocType.Article\n        | OwidGdocType.TopicPage\n        | OwidGdocType.LinearTopicPage\n        // TODO: Fragments need their own OwidGdocFragment interface and flow in the UI\n        // Historically they were treated the same as GdocPosts but not baked\n        // In reality, they have multiple possible data structures in their content (details, faqs, etc)\n        // We should be able to render these in the preview before publishing\n        // We're keeping them in this union until we have time to sort this out\n        | OwidGdocType.Fragment\n    title?: string\n    supertitle?: string\n    subtitle?: string\n    authors: string[]\n    authorRoles?: Record<string, string>\n    dateline?: string\n    excerpt?: string\n    refs?: { definitions: RefDictionary; errors: OwidGdocErrorMessage[] }\n    summary?: EnrichedBlockText[]\n    \"deprecation-notice\"?: EnrichedBlockText[]\n    \"hide-citation\"?: boolean\n    toc?: TocHeadingWithTitleSupertitle[]\n    \"cover-image\"?: string\n    \"featured-image\"?: string\n    \"atom-title\"?: string\n    \"atom-excerpt\"?: string\n    \"sidebar-toc\"?: boolean\n    \"heading-variant\"?: \"heavy\" | \"light\"\n    \"hide-subscribe-banner\"?: boolean\n    \"cover-color\"?:\n        | \"sdg-color-1\"\n        | \"sdg-color-2\"\n        | \"sdg-color-3\"\n        | \"sdg-color-4\"\n        | \"sdg-color-5\"\n        | \"sdg-color-6\"\n        | \"sdg-color-7\"\n        | \"sdg-color-8\"\n        | \"sdg-color-9\"\n        | \"sdg-color-10\"\n        | \"sdg-color-11\"\n        | \"sdg-color-12\"\n        | \"sdg-color-13\"\n        | \"sdg-color-14\"\n        | \"sdg-color-15\"\n        | \"sdg-color-16\"\n        | \"sdg-color-17\"\n        | \"amber\"\n    \"sticky-nav\"?: OwidGdocStickyNavItem[]\n    details?: DetailDictionary\n    // TODO: having both the unparsed and parsed variant on the same type is pretty crude\n    // Consider moving faqs into body or splitting the types and creating\n    // a parsed and an unparsed gdoc variant.\n    faqs?: RawFaq[]\n    parsedFaqs?: FaqDictionary\n}\n\nexport type OwidGdocStickyNavItem = { target: string; text: string }\n\nexport type GdocsPatch = Partial<OwidGdocPostInterface>\n\nexport enum GdocsContentSource {\n    Internal = \"internal\",\n    Gdocs = \"gdocs\",\n}\n\nexport const DYNAMIC_COLLECTION_PAGE_CONTAINER_ID = \"dynamic-collection-page\"\n\nexport type EnrichedDetail = {\n    id: string\n    text: string\n}\n\nexport type DetailDictionary = Record<string, EnrichedDetail>\n\nexport type RawFaq = {\n    id: string\n    content: OwidRawGdocBlock[]\n}\nexport type EnrichedFaq = {\n    id: string\n    content: OwidEnrichedGdocBlock[]\n} & EnrichedBlockWithParseErrors\n\nexport type FaqDictionary = Record<string, EnrichedFaq>\n\nexport type LatestPageItem =\n    | { type: OwidGdocType.Article; data: OwidGdocMinimalPostInterface }\n    | { type: OwidGdocType.DataInsight; data: LatestDataInsight }\n    | { type: OwidGdocType.Announcement; data: OwidGdocAnnouncementInterface }\n","// For use in the sticky nav and the component implementation\n\nexport const ALL_CHARTS_ID = \"all-charts\"\nexport const KEY_INSIGHTS_ID = \"key-insights\"\nexport const LICENSE_ID = \"article-licence\"\nexport const CITATION_ID = \"article-citation\"\nexport const ENDNOTES_ID = \"article-endnotes\"\nexport const RESEARCH_AND_WRITING_ID = \"research-writing\"\nexport const FEATURED_METRICS_ID = \"featured-metrics\"\nexport const FEATURED_DATA_INSIGHTS_ID = \"featured-data-insights\"\nexport const EXPLORE_DATA_SECTION_ID = \"explore-data-section\"\n\nexport const RESEARCH_AND_WRITING_DEFAULT_HEADING = \"Research & Writing\"\nexport const EXPLORE_DATA_SECTION_DEFAULT_TITLE = \"Explore the data\"\n\n/** Works for:\n * https://docs.google.com/document/d/abcd1234\n * https://docs.google.com/document/d/abcd1234/\n * https://docs.google.com/document/d/abcd1234/edit\n * https://docs.google.com/document/d/abcd-1234/edit\n * https://docs.google.com/document/u/0/d/abcd-1234/edit\n * https://docs.google.com/document/u/0/d/abcd-1234/edit?usp=sharing\n * Excludes:\n * https://docs.google.com/spreadsheets/d/abcd1234\n */\nexport const gdocUrlRegex =\n    // Disable the lint because the regex is compiled using the v flag in newer\n    // browsers when used in the pattern attribute, which requires escaping\n    // additional characters.\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/pattern\n    // eslint-disable-next-line no-useless-escape\n    /https:\\/\\/docs\\.google\\.com\\/document(?:\\/u\\/\\d)?\\/d\\/([\\-\\w]+)\\/?(edit)?(\\?tab=[\\w.]+)?#?/\n\nexport const GDOCS_BASE_URL = \"https://docs.google.com\"\nexport const GDOCS_URL_PLACEHOLDER = `${GDOCS_BASE_URL}/document/d/****/edit`\n\nexport const gdocIdRegex = /^[0-9A-Za-z\\-_]{44}$/\n\n// Stored in this repo and served\nexport const DEFAULT_GDOC_FEATURED_IMAGE = \"default-featured-image.png\"\n\n// Stored in this repo and served\nexport const DEFAULT_THUMBNAIL_FILENAME = \"default-thumbnail.png\"\n\n// Stored in this repo and served\nexport const ARCHIVED_THUMBNAIL_FILENAME = \"archived-thumbnail.jpg\"\n","import { OwidOrigin } from \"./OwidOrigin.js\"\nimport { OwidSource } from \"./OwidSource.js\"\nimport { OwidVariableDisplayConfigInterface } from \"./OwidVariableDisplayConfigInterface.js\"\n\nexport interface OwidVariableWithSource {\n    id: number\n    name?: string\n    description?: string\n    descriptionShort?: string\n    descriptionFromProducer?: string\n    descriptionKey?: string[]\n    descriptionProcessing?: string\n    unit?: string\n    display?: OwidVariableDisplayConfigInterface\n    shortUnit?: string\n    datasetName?: string\n    datasetId?: number\n    coverage?: string\n    nonRedistributable?: boolean\n    source?: OwidSource\n    origins?: OwidOrigin[]\n    schemaVersion?: number\n    processingLevel?: OwidProcessingLevel\n    presentation?: OwidVariablePresentation\n    shortName?: string\n    timespan?: string\n    catalogPath?: string\n    license?: OwidLicense\n    updatePeriodDays?: number\n    datasetVersion?: string\n    licenses?: OwidLicense[]\n    type?: OwidVariableType\n\n    // omitted:\n    // code\n    // coverage\n    // dataPath\n    // metadataPath\n}\n\nexport interface IndicatorTitleWithFragments {\n    title: string\n    attributionShort?: string\n    titleVariant?: string\n}\n\nexport function joinTitleFragments(\n    attributionShort: string | undefined,\n    titleVariant: string | undefined\n): string | undefined {\n    if (attributionShort && titleVariant && attributionShort !== titleVariant) {\n        return `${titleVariant} – ${attributionShort}`\n    }\n    if (attributionShort) {\n        return attributionShort\n    }\n    if (titleVariant) {\n        return titleVariant\n    }\n    return undefined\n}\n\nexport interface OwidLicense {\n    name: string\n    url: string\n}\n\nexport interface OwidVariablePresentation {\n    titlePublic?: string\n    titleVariant?: string\n    attributionShort?: string\n    attribution?: string\n    topicTagsLinks?: string[]\n    faqs?: FaqLink[]\n}\n\nexport type OwidProcessingLevel = \"minor\" | \"major\"\n\nexport interface FaqLink {\n    gdocId: string\n    fragmentId: string\n}\n\nexport type OwidVariableWithSourceAndDimension = OwidVariableWithSource & {\n    dimensions: OwidVariableDimensions\n}\n\nexport type OwidVariableWithSourceAndDimensionWithoutId = Omit<\n    OwidVariableWithSourceAndDimension,\n    \"id\"\n>\n\nexport interface OwidVariableMixedData {\n    years: number[]\n    entities: number[]\n    values: (string | number)[]\n}\n\nexport type OwidVariableWithDataAndSource = OwidVariableWithSource &\n    OwidVariableMixedData\n\nexport interface OwidVariableDimension {\n    values: OwidVariableDimensionValuePartial[]\n}\n\nexport interface OwidVariableDimensions {\n    years: OwidVariableDimension\n    entities: OwidVariableDimension\n    values?: OwidVariableDimension\n}\n\nexport type OwidVariableDataMetadataDimensions = {\n    data: OwidVariableMixedData\n    metadata: OwidVariableWithSourceAndDimension\n}\nexport type MultipleOwidVariableDataDimensionsMap = Map<\n    number,\n    OwidVariableDataMetadataDimensions\n>\n\nexport interface OwidVariableDimensionValuePartial {\n    id: number\n    name?: string\n    code?: string\n}\nexport type OwidVariableDimensionValueFull =\n    Required<OwidVariableDimensionValuePartial>\n\nexport interface OwidEntityKey {\n    [id: string]: OwidVariableDimensionValuePartial\n}\n\nexport type OwidVariableType = \"string\" | \"float\" | \"int\" | \"mixed\" | \"ordinal\"\n","import { OwidVariableId } from \"./domainTypes/Various.js\"\nimport {\n    ColumnSlug,\n    DimensionProperty,\n    Time,\n} from \"./grapherTypes/GrapherTypes.js\"\n\nexport interface OwidVariableDisplayConfigInterface {\n    name?: string\n    unit?: string\n    shortUnit?: string\n    isProjection?: boolean\n    conversionFactor?: number\n    roundingMode?: OwidVariableRoundingMode\n    numDecimalPlaces?: number\n    numSignificantFigures?: number\n    tolerance?: number\n    yearIsDay?: boolean\n    zeroDay?: string\n    entityAnnotationsMap?: string\n    includeInTable?: boolean\n    tableDisplay?: OwidVariableDataTableConfigInterface\n    color?: string\n    plotMarkersOnlyInLineChart?: boolean\n}\n\n// todo: flatten onto the above\nexport interface OwidVariableDataTableConfigInterface {\n    hideAbsoluteChange?: boolean\n    hideRelativeChange?: boolean\n}\n\nexport enum OwidVariableRoundingMode {\n    decimalPlaces = \"decimalPlaces\",\n    significantFigures = \"significantFigures\",\n}\n\nexport interface OwidChartDimensionInterface {\n    property: DimensionProperty\n    targetYear?: Time\n    display?: OwidVariableDisplayConfigInterface\n    variableId: OwidVariableId\n    slug?: ColumnSlug\n}\n\nexport interface OwidChartDimensionInterfaceWithMandatorySlug extends OwidChartDimensionInterface {\n    slug: ColumnSlug\n}\n","import { OwidOrigin } from \"../OwidOrigin.js\"\nimport {\n    OwidProcessingLevel,\n    OwidVariablePresentation,\n} from \"../OwidVariable.js\"\nimport { OwidVariableDisplayConfigInterface } from \"../OwidVariableDisplayConfigInterface.js\"\nimport {\n    Color,\n    ColumnSlug,\n    PrimitiveType,\n    Time,\n    ToleranceStrategy,\n    Year,\n} from \"../grapherTypes/GrapherTypes.js\"\nimport { Integer } from \"./Various.js\"\n\nexport type TableSlug = string // a url friendly name for a table\nexport type ColumnSlugs = string // slugs cannot have spaces, so this is a space delimited array of ColumnSlugs\n\nexport enum SortOrder {\n    asc = \"asc\",\n    desc = \"desc\",\n}\n\n/**\n * A concrete point in time (year or date). It's always supposed to be a finite number, but we\n * cannot enforce this in TypeScript.\n */\nexport type TimeRange = [Time, Time]\n\nexport type ValueRange = [number, number]\n\nexport type TimeTolerance = Integer\n\nexport interface CoreRow {\n    [columnSlug: string]: any\n}\n\nexport enum InputType {\n    Delimited = \"Delimited\",\n    RowStore = \"RowStore\",\n    ColumnStore = \"ColumnStore\",\n    Matrix = \"Matrix\",\n}\n\nexport enum TransformType {\n    // Table level ops\n    LoadFromDelimited = \"LoadFromDelimited\",\n    LoadFromRowStore = \"LoadFromRowStore\",\n    LoadFromColumnStore = \"LoadFromColumnStore\",\n    LoadFromMatrix = \"LoadFromMatrix\",\n    Concat = \"Concat\",\n    Noop = \"Noop\", // for when we notice that we can skip a transform\n\n    // Row ops\n    FilterRows = \"FilterRows\",\n    SortRows = \"SortRows\",\n    UpdateRows = \"UpdateRows\", // replace values in a row. For example: to prep columns for log scale, or testing messy runtime data scenarios.\n\n    // Column ops\n    FilterColumns = \"FilterColumns\",\n    AppendColumns = \"AppendColumns\", // This will run column transform fns.\n    UpdateColumnDefs = \"UpdateColumnDefs\", // do not use for updates that add a column transform fn.\n    UpdateColumnDefsAndApply = \"UpdateColumnDefsAndApply\", // use this for updates that add a column transform fn.\n    RenameColumns = \"RenameColumns\",\n    CombineColumns = \"CombineColumns\",\n}\n\nexport enum JsTypes {\n    string = \"string\",\n    boolean = \"boolean\",\n    number = \"number\",\n}\n\nexport abstract class ErrorValue {\n    toString(): string {\n        return \"\"\n    }\n    toErrorString(): string {\n        return this.constructor.name\n    }\n}\n\nexport type CsvString = string\n\nexport type CoreValueType = PrimitiveType | ErrorValue\n\n/**\n * An Object Literal of Column Slugs and Primitives of the same type:\n * {\n *  score: [1, 2, 3],\n *  year: [2000, 2001]\n * }\n */\nexport type CoreColumnStore = {\n    [columnSlug: string]: CoreValueType[]\n}\n\nexport type CoreTableInputOption =\n    | CoreRow[]\n    | CoreColumnStore\n    | CsvString\n    | CoreMatrix\n\n// Every row will be checked against each column/value(s) pair.\nexport interface CoreQuery {\n    [columnSlug: string]: PrimitiveType | PrimitiveType[]\n}\n\ntype CoreVector = any[]\n\n/**\n * This is just an array of arrays where the first array is the header and the rest are rows. An example is:\n * [[\"country\", \"gdp\"],\n * [\"usa\", 123],\n * [\"can\", 456]]\n * Having this type is just to provide a common unique name for the basic structure used by HandsOnTable\n * and some other popular JS data libraries.\n */\nexport type CoreMatrix = CoreVector[]\n\nexport enum OwidTableSlugs {\n    entityName = \"entityName\",\n    entityColor = \"entityColor\",\n    entityId = \"entityId\",\n    entityCode = \"entityCode\",\n    time = \"time\",\n    day = \"day\",\n    year = \"year\",\n    date = \"date\",\n}\n\nenum OwidTableNames {\n    Entity = \"Entity\",\n    Code = \"Code\",\n}\n\nexport type EntityName = string\nexport type EntityCode = string\nexport type EntityId = number\n\nexport interface Entity {\n    entityName: EntityName\n    entityId?: EntityId\n    entityCode?: EntityCode\n}\n\nexport enum ColumnTypeNames {\n    NumberOrString = \"NumberOrString\",\n    Numeric = \"Numeric\",\n    String = \"String\",\n    Region = \"Region\",\n    SeriesAnnotation = \"SeriesAnnotation\",\n    Categorical = \"Categorical\",\n    Ordinal = \"Ordinal\",\n    Continent = \"Continent\",\n    EntityName = \"EntityName\",\n    EntityId = \"EntityId\",\n    EntityCode = \"EntityCode\",\n    Boolean = \"Boolean\",\n    Currency = \"Currency\",\n    Percentage = \"Percentage\",\n    RelativePercentage = \"RelativePercentage\",\n    DecimalPercentage = \"DecimalPercentage\",\n    Integer = \"Integer\",\n    PercentChangeOverTime = \"PercentChangeOverTime\",\n    Ratio = \"Ratio\",\n    Year = \"Year\",\n    Day = \"Day\",\n    Date = \"Date\",\n    Color = \"Color\",\n    Population = \"Population\",\n    PopulationDensity = \"PopulationDensity\",\n    Age = \"Age\",\n    Quarter = \"Quarter\",\n}\n\nexport interface ColumnColorScale {\n    // Color scales\n    colorScaleScheme?: string\n    colorScaleInvert?: boolean\n    colorScaleBinningStrategy?: string\n    colorScaleNumericMinValue?: number\n    colorScaleNumericBins?: string\n    colorScaleCategoricalBins?: string\n    colorScaleNoDataLabel?: string\n    colorScaleLegendDescription?: string\n}\n\nexport interface CoreColumnDef extends ColumnColorScale {\n    // Core\n    slug: ColumnSlug\n    type?: ColumnTypeNames\n\n    // Computational\n    transform?: string // Code that maps to a CoreTable transform\n    transformHasRun?: boolean // If true, the transform has been applied\n    tolerance?: number // If set, some charts can use this for an interpolation strategy.\n    toleranceStrategy?: ToleranceStrategy // Tolerance strategy to use for interpolation\n    skipParsing?: boolean // If set, the values will never run through the type parser\n    // Denotes the relationship of this column to another column\n    derivedFrom?: {\n        columnSlug: ColumnSlug\n        relationship:\n            | \"annotations\"\n            | \"originalTime\"\n            | \"originalStartTime\"\n            | \"originalValue\"\n    }\n\n    // Column information used for display only\n    name?: string // The display name for the column\n    description?: string\n    descriptionShort?: string\n    descriptionProcessing?: string\n    descriptionKey?: string[]\n    descriptionFromProducer?: string\n    note?: string // Any internal notes the author wants to record for display in admin interfaces\n\n    // Sorted values (in case of ordinal data)\n    sort?: string[]\n\n    // Color\n    color?: Color // A column can have a fixed color for use in charts where the columns are series\n\n    // Source information used for display only\n    sourceName?: string\n    sourceLink?: string\n    dataPublishedBy?: string\n    dataPublisherSource?: string\n    retrievedDate?: string\n    additionalInfo?: string\n    timespan?: string\n\n    // Metadata v2\n    origins?: OwidOrigin[]\n    presentation?: OwidVariablePresentation\n    updatePeriodDays?: number\n\n    // Dataset information\n    datasetId?: number\n    datasetName?: string\n\n    // Informational only\n    targetTime?: number\n\n    // For developer internal use only.\n    values?: CoreValueType[]\n    generator?: () => number // A function for generating synthetic data for testing\n    growthRateGenerator?: () => number // A function for generating synthetic data for testing. Can probably combine with the above.\n\n    // DEPRECATED\n    unit?: string // DEPRECATED: use an existing column type or create a new one instead.\n    shortUnit?: string // DEPRECATED: use an existing column type or create a new one instead.\n    display?: OwidVariableDisplayConfigInterface // DEPRECATED: use an existing column type or create a new one instead, or migrate any properties you need onto this interface.\n}\n\n// Todo: coverage, datasetId, and datasetName can just be on source, right? or should we flatten source onto this?\nexport interface OwidColumnDef extends CoreColumnDef {\n    owidVariableId?: number\n    coverage?: string\n    datasetId?: number\n    datasetName?: string\n    isDailyMeasurement?: boolean // todo: remove after mysql time refactor\n    annotationsColumnSlug?: ColumnSlug\n    nonRedistributable?: boolean\n    skipParsing?: boolean\n    catalogPath?: string\n    owidProcessingLevel?: OwidProcessingLevel\n    owidSchemaVersion?: number\n    shortName?: string\n}\n\nexport const OwidEntityNameColumnDef = {\n    name: OwidTableNames.Entity,\n    slug: OwidTableSlugs.entityName,\n    type: ColumnTypeNames.EntityName,\n}\n\nexport const OwidEntityIdColumnDef = {\n    slug: OwidTableSlugs.entityId,\n    type: ColumnTypeNames.EntityId,\n}\n\nexport const OwidEntityCodeColumnDef = {\n    name: OwidTableNames.Code,\n    slug: OwidTableSlugs.entityCode,\n    type: ColumnTypeNames.EntityCode,\n}\n\nexport const StandardOwidColumnDefs: OwidColumnDef[] = [\n    OwidEntityNameColumnDef,\n    OwidEntityIdColumnDef,\n    OwidEntityCodeColumnDef,\n]\n\n// This is a row with the additional columns specific to our OWID data model\nexport interface OwidRow extends CoreRow {\n    entityName: EntityName\n    time: Time\n    entityCode?: EntityCode\n    entityId?: EntityId\n    year?: Year\n    day?: Integer\n    date?: string\n}\n\nexport interface OwidVariableRow<ValueType extends PrimitiveType> {\n    entityName: EntityName\n    time: Time\n    value: ValueType\n    originalTime: Time\n    originalValue?: ValueType\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => {\n                inst.issues.push(issue);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => {\n                inst.issues.push(...issues);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    inst.type = def.type;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone(util.mergeDefs(def, {\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }));\n    };\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // encoding/decoding\n    inst.encode = (data, params) => parse.encode(inst, data, params);\n    inst.decode = (data, params) => parse.decode(inst, data, params);\n    inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n    inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n    inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n    inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n    inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n    inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: /^https?$/,\n        hostname: core.regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => {\n        return def.shape;\n    });\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return util.extend(inst, incoming);\n    };\n    inst.safeExtend = (incoming) => {\n        return util.safeExtend(inst, incoming);\n    };\n    inst.merge = (other) => util.merge(inst, other);\n    inst.pick = (mask) => util.pick(inst, mask);\n    inst.omit = (mask) => util.omit(inst, mask);\n    inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n    inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new ZodRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    return core._superRefine(fn);\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n","import { z } from \"zod\"\n\nexport const StaticVizTableName = \"static_viz\"\n\nexport interface DbRawStaticViz {\n    id: number\n    name: string\n    description: string | null\n    grapherSlug: string | null\n    sourceUrl: string | null\n    imageId: number\n    mobileImageId: number | null\n    createdBy: number | null\n    updatedBy: number | null\n    createdAt: Date\n    updatedAt: Date\n}\n\ntype StaticVizImage = {\n    id: number\n    cloudflareId: string\n    filename: string\n    originalHeight: number\n    originalWidth: number\n}\n\n// A type for rendering the static viz admin, with images resolved and user names instead of numeric IDs\nexport type DbEnrichedStaticViz = Omit<\n    DbRawStaticViz,\n    \"createdBy\" | \"updatedBy\" | \"imageId\" | \"mobileImageId\"\n> & {\n    desktop?: StaticVizImage\n    mobile?: StaticVizImage\n    name: string\n    grapherSlug?: string\n    chartId?: number\n    sourceUrl?: string\n    description?: string\n    createdBy: string\n    updatedBy: string\n}\n\nexport const StaticVizInsertSchema = z.object({\n    name: z.string().min(1),\n    description: z.string().nullable().optional(),\n    grapherSlug: z.string().nullable().optional(),\n    sourceUrl: z.string().nullable().optional(),\n    imageId: z.number().min(1),\n    mobileImageId: z.number().min(1).nullable().optional(),\n    createdBy: z.number().min(1).nullable().optional(),\n    updatedBy: z.number().min(1).nullable().optional(),\n})\n\nexport const StaticVizUpdateSchema = z.object({\n    name: z.string().min(1).optional(),\n    description: z.string().nullable().optional(),\n    grapherSlug: z.string().nullable().optional(),\n    sourceUrl: z.string().nullable().optional(),\n    imageId: z.number().min(1).optional(),\n    mobileImageId: z.number().min(1).nullable().optional(),\n    updatedBy: z.number().min(1).nullable().optional(),\n})\n\nexport type StaticVizUpdate = z.infer<typeof StaticVizUpdateSchema>\n","// Used in GrapherPage.tsx\nexport const HIDE_IF_JS_ENABLED_CLASSNAME = \"js--hide-if-js-enabled\"\n\nexport const HIDE_IF_JS_DISABLED_CLASSNAME = \"js--hide-if-js-disabled\"\n\n// Used in GrapherWithFallback.tsx\nexport const GRAPHER_PREVIEW_CLASS = \"grapherPreview\"\n\n// Sentry constants\nexport const SENTRY_DEFAULT_REPLAYS_SESSION_SAMPLE_RATE = 0.05\nexport const SENTRY_SESSION_STORAGE_KEY = \"sentryReplaySession\"\nexport const SENTRY_SAMPLED_RATE_KEY = \"sentrySampledRate\"\n\nexport const SUBSCRIBE_PAGE_FORM_CONTAINER_ID = \"subscribe-page-form-container\"\n","export type ArchivalDateString = `${number}-${number}`\nexport const ARCHIVE_DATE_TIME_FORMAT = \"YYYYMMDD-HHmmss\" // e.g. 20250414-074331, always UTC\n\nexport type AssetMap = Record<string, string>\n\nexport type IndicatorChecksums = {\n    [id: string]: { metadataChecksum: string; dataChecksum: string }\n}\n\nexport interface UrlAndMaybeDate {\n    url: string\n    date?: Date | ArchivalDateString\n}\n\nexport type ArchiveContentType = \"data\" | \"writing\"\n\nexport interface ArchiveSiteNavigationInfo {\n    contentType: ArchiveContentType\n    liveUrl?: string\n    previousVersion?: UrlAndMaybeDate\n    nextVersion?: UrlAndMaybeDate\n    versionsFileUrl?: string\n}\n\n// Information about an archived page version that is available, i.e. we can point to from the live site\nexport interface ArchivedPageVersion {\n    archivalDate: ArchivalDateString\n    archiveUrl: string\n    versionsFileUrl?: string\n    type: \"archived-page-version\"\n}\n\n// Information about an archived chart that is necessary for rendering the archived page, incl. navigation and assets\nexport interface ArchiveMetaInformation extends Omit<\n    ArchivedPageVersion,\n    \"type\"\n> {\n    archiveNavigation: ArchiveSiteNavigationInfo\n    assets: {\n        runtime: AssetMap\n        static?: AssetMap\n    }\n    type: \"archive-page\"\n}\n\nexport type ArchiveContext = ArchivedPageVersion | ArchiveMetaInformation\n\nexport interface ArchiveVersions {\n    chartId: number\n    versions: Array<{\n        archivalDate: ArchivalDateString\n        slug: string\n        url: string\n    }>\n}\n\nexport interface GrapherChecksums {\n    chartConfigMd5: string\n    indicators: IndicatorChecksums\n}\n\nexport interface GrapherChecksumsObjectWithHash {\n    chartId: number\n    chartSlug: string\n    checksums: GrapherChecksums\n    checksumsHashed: string\n}\n\nexport interface MultiDimChecksums {\n    multiDimConfigMd5: string\n    chartConfigs: {\n        [id: string]: string // chartConfigId -> MD5\n    }\n    indicators: IndicatorChecksums\n}\n\nexport interface MultiDimChecksumsObjectWithHash {\n    multiDimId: number\n    multiDimSlug: string\n    checksums: MultiDimChecksums\n    checksumsHashed: string\n}\n\nexport interface ExplorerChecksums {\n    explorerConfigMd5: string\n    chartConfigs: {\n        [id: string]: string // chartId -> chart_configs.fullMd5 of explorer view configs\n    }\n    indicators: IndicatorChecksums\n}\n\nexport interface ExplorerChecksumsObjectWithHash {\n    explorerSlug: string\n    checksums: ExplorerChecksums\n    checksumsHashed: string\n}\n\nexport interface NarrativeChartChecksums {\n    chartConfigMd5: string\n    queryParamsForParentChartMd5: string\n    indicators: IndicatorChecksums\n}\n\nexport interface NarrativeChartChecksumsResult {\n    narrativeChartId: number\n    narrativeChartName: string\n    checksums: NarrativeChartChecksums\n}\n\nexport interface PostChecksums {\n    postContentMd5: string\n    indicators: IndicatorChecksums // Shared across all chart types\n    graphers: {\n        [chartId: string]: {\n            slug: string\n            chartConfigMd5: string\n        }\n    }\n    explorers: {\n        [slug: string]: {\n            explorerConfigMd5: string\n            chartConfigs: {\n                [id: string]: string // chartConfigId -> MD5\n            }\n        }\n    }\n    multiDims: {\n        [multiDimId: string]: {\n            slug: string\n            multiDimConfigMd5: string\n            chartConfigs: {\n                [id: string]: string // chartConfigId -> MD5\n            }\n        }\n    }\n    narrativeCharts: {\n        [narrativeChartId: string]: {\n            name: string\n            chartConfigMd5: string\n            queryParamsForParentChartMd5: string\n        }\n    }\n    images: {\n        [imageId: string]: { filename: string; hash: string }\n    }\n}\n\nexport interface PostChecksumsObjectWithHash {\n    postId: string\n    postSlug: string\n    checksums: PostChecksums\n    checksumsHashed: string\n}\n","export const logBinningStrategies = [\n    \"log-auto\",\n    \"log-1-2-5\",\n    \"log-1-3\",\n    \"log-10\",\n] as const\n\nexport const equalSizeBinningStrategies = [\n    \"equalSizeBins-normal\",\n    \"equalSizeBins-few-bins\",\n    \"equalSizeBins-many-bins\",\n    \"equalSizeBins-percent\",\n] as const\n\nexport const automaticBinningStrategies = [\n    \"auto\",\n    ...logBinningStrategies,\n    ...equalSizeBinningStrategies,\n] as const\n\nexport const binningStrategiesIncludingManual = [\n    \"manual\",\n    ...automaticBinningStrategies,\n] as const\n\nexport type LogBinningStrategy = (typeof logBinningStrategies)[number]\nexport type EqualSizeBinningStrategy =\n    (typeof equalSizeBinningStrategies)[number]\n\nexport type ResolvedLogBinningStrategy = Exclude<LogBinningStrategy, \"log-auto\">\n\nexport type AutomaticBinningStrategy =\n    (typeof automaticBinningStrategies)[number]\n\nexport type ResolvedBinningStrategy = Exclude<AutomaticBinningStrategy, \"auto\">\nexport type BinningStrategyIncludingManual =\n    (typeof binningStrategiesIncludingManual)[number]\n\nexport const binningMidpointModes = [\n    undefined, // Automatic\n    \"none\", // No midpoint\n    \"symmetric\", // Symmetric bins around a midpoint, with negBins = -1 * posBins\n    \"same-num-bins\", // Symmetric bins around a midpoint, with negBins.length = posBins.length\n    \"asymmetric\", // Bins around a midpoint, with negBins.length not necessarily equal to posBins.length\n] as const\nexport type MidpointMode = (typeof binningMidpointModes)[number]\n","import {\n    GrapherQueryParams,\n    GrapherTabName,\n    GrapherTrendArrowDirection,\n} from \"../grapherTypes/GrapherTypes\"\n\n/** Type definition for data retrieved from the `/grapher/slug.search-result.json` endpoint */\nexport type GrapherSearchResultJson = {\n    title: string\n    subtitle?: string\n    source: string\n    grapherQueryParams: GrapherQueryParams\n    layout: LayoutSlot[]\n    dataTable: SearchChartHitDataTableProps\n    valueDisplay?: SearchChartHitDataDisplayProps\n    entityType: string\n    entityTypePlural: string\n    unit?: string\n}\n\nexport interface SearchChartHitDataTableProps {\n    rows: TableRow[]\n    title: string\n}\n\ninterface TableRow {\n    seriesName?: string\n    label: string\n    color?: string\n    value?: string\n    startValue?: string\n    time?: string\n    timePreposition?: string\n    muted?: boolean\n    striped?: boolean | \"no-data\"\n    outlined?: boolean\n    rounded?: boolean\n    trend?: GrapherTrendArrowDirection // only relevant if startValue is given\n}\n\nexport interface LayoutSlot<TSlotKey extends GridSlotKey = GridSlotKey> {\n    slotKey: TSlotKey\n    grapherTab: GrapherTabName\n    chartParams?: GrapherQueryParams\n    previewParams?: GrapherQueryParams\n}\n\nexport type GridSlotKey = MediumVariantGridSlotKey | LargeVariantGridSlotKey\n\n// The medium variant is a one-dimensional grid layout\n// where the last quarter might contain two smaller slots\nexport enum MediumVariantGridSlotKey {\n    Single = \"single-slot\",\n    Double = \"double-slot\",\n    Triple = \"triple-slot\",\n    Quad = \"quad-slot\",\n    SmallLeft = \"small-slot-left\",\n    SmallRight = \"small-slot-right\",\n}\n\n// The large variant occupies a 4x2 grid layout:\n// -----------------\n// │ 1 │ 2 │ 3 │ 4 │\n// -----------------\n// │ 5 │ 6 │ 7 │ 8 │\n// -----------------\nexport enum LargeVariantGridSlotKey {\n    // Full grid (all cells)\n    Full = \"full\",\n    // Cell numbers 1, 2, 5, 6\n    LeftQuad = \"left-quad\",\n    // Cell numbers 3, 4, 7, 8\n    RightQuad = \"right-quad\",\n    // Cell numbers 3, 7\n    RightQuadLeftColumn = \"right-quad-left-column\",\n    // Cell number 4\n    TopRightCell = \"top-right-cell\",\n    // Cell number 8\n    BottomRightCell = \"bottom-right-cell\",\n    // Any cell, no specific number\n    SingleCell = \"single-cell\",\n}\n\nexport interface SearchChartHitDataDisplayProps {\n    entityName: string\n    endValue: string\n    time: string\n    unit?: string\n    startValue?: string // if given, display as a range\n    trend?: GrapherTrendArrowDirection // only relevant if startValue is given\n    showLocationIcon?: boolean\n    className?: string\n    numericEndTime?: number // not displayed, but useful to know\n}\n","// Analytics Type System\n//\n// This file defines the complete contract between the frontend and analytics backend.\n// Each event category has exactly one corresponding parameter interface.\n// TypeScript enforces you can't send wrong parameters for an event.\n//\n// IMPORTANT GUIDELINES FOR ANALYTICS BACKEND:\n//\n// 1. GA4 100-Character Limit:\n//    - GA4 truncates ALL string parameters at exactly 100 characters\n//    - Use separate typed parameters instead of JSON in eventContext\n//    - Example: searchQuery, searchTopics (separate params)\n//      is better than eventContext: JSON.stringify({query, topics})\n//\n// 2. Register Custom Parameters in Google Tag Manager:\n//    - After adding new parameters, you MUST register them in GTM\n//    - Go to: https://tagmanager.google.com/#/container/accounts/4702630479/containers/12712743/workspaces/50/tags\n//    - Without registration, custom parameters won't be collected by GA4\n//\n// 3. This file is the single source of truth for the analytics contract\n\nimport { JsonString } from \"../domainTypes/Various.js\"\n\n// =============================================================================\n// EVENT CATEGORIES\n// =============================================================================\n\nexport enum EventCategory {\n    Filter = \"owid.filter\",\n    GrapherView = \"owid.grapher_view\",\n    GrapherClick = \"owid.grapher_click\",\n    GrapherHover = \"owid.grapher_hover\",\n    GrapherError = \"owid.grapher_error\",\n    GrapherEntitySelector = \"owid.grapher_entity_selector\",\n    ExplorerView = \"owid.explorer_view\",\n    Expander = \"owid.expander\",\n    ExplorerCountrySelector = \"owid.explorer_country_selector\",\n    KeyboardShortcut = \"owid.keyboard_shortcut\",\n    SiteClick = \"owid.site_click\",\n    SiteError = \"owid.site_error\",\n    SiteInstantSearchClick = \"owid.site_instantsearch_click\",\n    SiteSearch = \"owid.site_search\",\n    SiteSearchAutocompleteClick = \"owid.site_search_autocomplete_click\",\n    SiteSearchResultClick = \"owid.site_search_result_click\",\n    SiteFormSubmit = \"owid.site_form_submit\",\n    DetailOnDemand = \"owid.detail_on_demand\",\n    SiteGuidedChartLinkClick = \"owid.site_guided_chart_link_click\",\n    SiteChartPreviewMouseover = \"owid.site_chart_preview_mouseover\",\n    SiteStaticVizDownload = \"owid.site_static_viz_download\",\n    SiteUserSurvey = \"owid.site_user_survey\",\n    TranslatePage = \"owid.translate_page\",\n}\n\n// =============================================================================\n// EVENT-TO-PARAMETER MAPPING\n// =============================================================================\n\nexport type EventParamsMap = {\n    [EventCategory.SiteSearch]: SiteSearchParams\n    [EventCategory.SiteSearchAutocompleteClick]: SiteSearchAutocompleteClickParams\n    [EventCategory.SiteSearchResultClick]: SiteSearchResultClickParams\n    [EventCategory.GrapherView]: GrapherViewParams\n    [EventCategory.GrapherClick]: GrapherClickParams\n    [EventCategory.GrapherHover]: GrapherHoverParams\n    [EventCategory.GrapherError]: GrapherErrorParams\n    [EventCategory.GrapherEntitySelector]: GrapherEntitySelectorParams\n    [EventCategory.ExplorerView]: ExplorerViewParams\n    [EventCategory.ExplorerCountrySelector]: ExplorerCountrySelectorParams\n    [EventCategory.DetailOnDemand]: DetailOnDemandParams\n    [EventCategory.Expander]: ExpanderParams\n    [EventCategory.KeyboardShortcut]: KeyboardShortcutParams\n    [EventCategory.SiteGuidedChartLinkClick]: SiteGuidedChartLinkClickParams\n    [EventCategory.SiteChartPreviewMouseover]: SiteChartPreviewMouseoverParams\n    [EventCategory.SiteStaticVizDownload]: SiteStaticVizDownloadParams\n    [EventCategory.SiteUserSurvey]: SiteUserSurveyParams\n    [EventCategory.SiteClick]: SiteClickParams\n    [EventCategory.SiteFormSubmit]: SiteFormSubmitParams\n    [EventCategory.SiteInstantSearchClick]: SiteInstantSearchClickParams\n    [EventCategory.SiteError]: SiteErrorParams\n    [EventCategory.Filter]: FilterParams\n    [EventCategory.TranslatePage]: TranslatePageParams\n}\n\nexport type GAEvent = {\n    [K in EventCategory]: { event: K } & EventParamsMap[K]\n}[EventCategory]\n\n// =============================================================================\n// EVENT PARAMETER INTERFACES\n// =============================================================================\n\n// Site Events\n\nexport interface SiteSearchParams {\n    /** Always 'search' for this event */\n    eventAction: \"search\"\n    /** Search query entered by user */\n    searchQuery: string\n    /** Whether 'all countries' filter is enabled */\n    searchRequireAllCountries: boolean\n    /** Type of results displayed ('all', 'data', 'articles', etc.) */\n    searchResultType: string\n    /** Tilde-separated list of selected topic names */\n    searchTopics: string\n    /** Tilde-separated list of selected country names */\n    searchSelectedCountries: string\n}\n\nexport interface SiteSearchAutocompleteClickParams {\n    /** Always 'click' for this event */\n    eventAction: \"click\"\n    /** Search query when autocomplete was clicked */\n    autocompleteQuery: string\n    /** Position of selected suggestion (0-indexed) */\n    autocompletePosition: number\n    /** Type of selected filter ('topic' | 'country' | 'query') */\n    autocompleteFilterType: string\n    /** Name of the selected filter (e.g., 'France', 'Health') */\n    autocompleteFilterName: string\n    /** Tilde-separated list of all suggestions shown */\n    autocompleteSuggestions: string\n    /** Tilde-separated list of suggestion types */\n    autocompleteSuggestionsTypes: string\n    /** Total number of suggestions displayed */\n    autocompleteSuggestionsCount: number\n}\n\nexport interface SiteSearchResultClickParams {\n    /** Always 'click' for this event */\n    eventAction: \"click\"\n    /** JSON string with context about the clicked result */\n    eventContext: string\n    /** Target URL of the clicked result */\n    eventTarget: string\n}\n\nexport interface SiteClickParams {\n    /** Action type */\n    eventAction: string\n    /** Target element or label */\n    eventTarget?: string\n}\n\nexport interface SiteFormSubmitParams {\n    /** Action type - form submission type */\n    eventAction: \"newsletter-subscribe\" | \"donate\"\n    /** Target element or label */\n    eventTarget?: string\n}\n\nexport interface SiteInstantSearchClickParams {\n    /** Always 'click' for this event */\n    eventAction: \"click\"\n    /** JSON context with query and position */\n    eventContext: string\n    /** Target URL */\n    eventTarget: string\n}\n\nexport interface SiteErrorParams {\n    /** Action type (e.g., 'not_found') */\n    eventAction: string\n    /** Error details or URL */\n    eventContext: string\n}\n\nexport interface SiteGuidedChartLinkClickParams {\n    /** Always 'click' for this event */\n    eventAction: \"click\"\n    /** Target URL or chart path */\n    eventTarget: string\n    /** Continuation of eventTarget for URLs > 100 chars (characters 101-200) */\n    eventTargetNext?: string\n    /** Grapher path of the linked chart (optional - may use eventTarget instead) */\n    grapherPath?: string\n}\n\nexport interface SiteChartPreviewMouseoverParams {\n    /** Always 'mouseover' for this event */\n    eventAction: \"mouseover\"\n    /** Target chart URL */\n    eventTarget: string\n    /** Continuation of eventTarget for URLs > 100 chars (characters 101-200) */\n    eventTargetNext?: string\n    /** Explorer path if in explorer */\n    explorerPath?: string\n    /** Grapher path being previewed */\n    grapherPath?: string\n}\n\nexport interface SiteStaticVizDownloadParams {\n    /** Type of download action */\n    eventAction: \"image_download\" | \"data_download\" | \"source_link_click\"\n    /** Name of the static viz */\n    eventTarget: string\n    /** Additional context (e.g., 'desktop' or 'mobile' for images, URL for data/source) */\n    eventContext?: string\n}\n\nexport type UserSurveyExperimentArm = \"long-list\" | \"short-list\" | \"free-form\"\n\nexport type UserSurveyRoleAnswer =\n    | {\n          experimentArm: \"free-form\"\n          freeFormInput: string\n      }\n    | {\n          experimentArm: \"long-list\" | \"short-list\"\n          optionId: string\n          optionLabel: string\n          optionIndex: number\n          freeFormInput?: string\n      }\n\nexport type SiteUserSurveyParams =\n    | {\n          /** Always 'user_role_show' for this event */\n          eventAction: \"user_role_show\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** First-screen arm for this survey */\n          experimentArm: UserSurveyExperimentArm\n      }\n    | {\n          /** Always 'thank_you_show' for this event */\n          eventAction: \"thank_you_show\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** First-screen arm for this survey */\n          experimentArm: UserSurveyExperimentArm\n      }\n    | {\n          /** Always 'user_role_submit' for this event */\n          eventAction: \"user_role_submit\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** Free-form arm name */\n          experimentArm: \"free-form\"\n          /** Text field input from the first screen */\n          freeFormInput: string\n      }\n    | {\n          /** Always 'user_role_submit' for this event */\n          eventAction: \"user_role_submit\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** Choice-based arm names */\n          experimentArm: \"long-list\" | \"short-list\"\n          /** Option id from predefined options */\n          optionId: string\n          /** Option label from predefined options */\n          optionLabel: string\n          /** 0-based index of selected option in randomized list */\n          optionIndex: number\n          /** Optional text field input from the \"other\" option */\n          freeFormInput?: string\n      }\n    | {\n          /** Always 'feedback_submit' for this event */\n          eventAction: \"feedback_submit\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** First-screen arm for this survey */\n          experimentArm: UserSurveyExperimentArm\n      }\n    | {\n          /** Always 'user_role_dismiss' for this event */\n          eventAction: \"user_role_dismiss\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** First-screen arm for this survey */\n          experimentArm: UserSurveyExperimentArm\n      }\n    | {\n          /** Always 'thank_you_dismiss' for this event */\n          eventAction: \"thank_you_dismiss\"\n          /** Survey name identifier */\n          surveyName: string\n          /** Survey instance identifier generated with uuidv7 */\n          responseId: string\n          /** First-screen arm for this survey */\n          experimentArm: UserSurveyExperimentArm\n      }\n\n// Grapher Events\n\nexport interface GrapherViewParams {\n    /** Grapher chart path (e.g., '/grapher/life-expectancy') */\n    grapherPath?: string\n    /** Continuation of grapherPath for URLs > 100 chars (characters 101-200) */\n    grapherPathNext?: string\n    /** View configuration ID for multi-dimensional data pages */\n    viewConfigId?: string\n    /** Name of the narrative chart if embedded */\n    narrativeChartName?: string\n}\n\nexport interface GrapherClickParams {\n    /** Action type - image downloads or generic clicks */\n    eventAction: GrapherImageDownloadEvent | string\n    /** Grapher chart path */\n    grapherPath?: string\n    /** Continuation of grapherPath for URLs > 100 chars (characters 101-200) */\n    grapherPathNext?: string\n    /** View configuration ID */\n    viewConfigId?: string\n    /** Name of narrative chart */\n    narrativeChartName?: string\n    /** Target element label */\n    eventTarget?: string\n    /** Additional context as JSON */\n    eventContext?: string\n}\n\nexport interface GrapherHoverParams {\n    /** Type of hover interaction */\n    eventAction: GrapherInteractionEvent\n    /** Grapher chart path */\n    grapherPath?: string\n    /** Continuation of grapherPath for URLs > 100 chars (characters 101-200) */\n    grapherPathNext?: string\n    /** View configuration ID */\n    viewConfigId?: string\n    /** Name of narrative chart */\n    narrativeChartName?: string\n    /** Target element (e.g., country name) */\n    eventTarget?: string\n}\n\nexport interface GrapherErrorParams {\n    /** Type of error */\n    eventAction: \"grapher_view_error\" | \"entities_not_found\"\n    /** Error message or details */\n    eventContext: string\n    /** Grapher chart path */\n    grapherPath?: string\n    /** Continuation of grapherPath for URLs > 100 chars (characters 101-200) */\n    grapherPathNext?: string\n    /** View configuration ID */\n    viewConfigId?: string\n    /** Name of narrative chart */\n    narrativeChartName?: string\n}\n\nexport interface GrapherEntitySelectorParams {\n    /** Entity selector action */\n    eventAction: EntitySelectorEvent\n    /** Grapher chart path */\n    grapherPath?: string\n    /** Continuation of grapherPath for URLs > 100 chars (characters 101-200) */\n    grapherPathNext?: string\n    /** View configuration ID */\n    viewConfigId?: string\n    /** Name of narrative chart */\n    narrativeChartName?: string\n    /** Target entity or note */\n    eventTarget?: string\n}\n\n// Explorer Events\n\nexport interface ExplorerViewParams {\n    /** Explorer path (e.g., '/explorers/migration') */\n    explorerPath: string\n    /** JSON string of the explorer view state */\n    explorerView: string\n    /** Chart config ID of the explorer view */\n    viewConfigId?: string\n}\n\nexport interface ExplorerCountrySelectorParams {\n    /** Entity selector action */\n    eventAction: EntitySelectorEvent\n    /** Additional context */\n    eventContext?: string\n    /** Explorer path */\n    explorerPath?: string\n}\n\n// Shared Events\n\nexport interface DetailOnDemandParams {\n    /** Action type - typically 'show' */\n    eventAction: \"show\" | string\n    /** Target element ID */\n    eventTarget: string\n    /** Explorer path if triggered from explorer */\n    explorerPath?: string\n    /** Grapher path if triggered from grapher */\n    grapherPath?: string\n}\n\nexport interface ExpanderParams {\n    /** Action type - 'open' or 'close' */\n    eventAction: \"open\" | \"close\"\n    /** Target element ID */\n    eventTarget: string\n    /** Explorer path if in explorer */\n    explorerPath?: string\n    /** Grapher path if in grapher */\n    grapherPath?: string\n}\n\nexport interface KeyboardShortcutParams {\n    /** The keyboard shortcut name */\n    eventAction: string\n    /** The key combination (e.g., 'Ctrl+K') */\n    eventContext: string\n    /** Explorer path if in explorer */\n    explorerPath?: string\n    /** Grapher path if in grapher */\n    grapherPath?: string\n}\n\nexport interface FilterParams {\n    /** Always 'country_page_search' for this event */\n    eventAction: \"country_page_search\"\n    /** Search query or filter context */\n    eventContext: string\n}\n\nexport interface TranslatePageParams {\n    /** Information about the translation event, in the form { from: string | null, to: string | null } */\n    eventTarget: JsonString\n    /** Comma-separated list of browser languages, e.g.: `es-ES,de-DE,en` */\n    eventContext: string\n}\n\n// =============================================================================\n// EVENT ACTION TYPES & HELPERS\n// =============================================================================\n\nexport type EntitySelectorEvent =\n    | \"enter\"\n    | \"select\"\n    | \"deselect\"\n    | \"sortBy\"\n    | \"sortOrder\"\n    | \"filterBy\"\n    | \"clear\"\n\nexport type GrapherImageDownloadEvent =\n    | \"chart_download_png\"\n    | \"chart_download_svg\"\n\nexport type GrapherInteractionEvent =\n    | \"map_country_hover\" // hover over a country in the map or on the globe\n    | \"map_legend_hover\" // hover over a legend item on the map tab\n\nexport enum GrapherErrorAction {\n    GrapherViewError = \"grapher_view_error\",\n    EntitiesNotFound = \"entities_not_found\",\n}\n\nexport interface GrapherAnalyticsContext {\n    slug?: string\n    viewConfigId?: string\n    narrativeChartName?: string\n}\n","import type {\n    SearchResponse,\n    BaseHit,\n    Hit,\n    HitHighlightResult,\n} from \"instantsearch.js\"\nimport { OwidGdocType } from \"../gdocTypes/Gdoc.js\"\nimport { GrapherTabName } from \"../grapherTypes/GrapherTypes.js\"\nimport * as z from \"zod/mini\"\n\nexport const PagesIndexRecordSchema = z.object({\n    objectID: z.string(),\n    importance: z.number(),\n    type: z.enum(OwidGdocType),\n    slug: z.string(),\n    title: z.string(),\n    content: z.string(),\n    views_7d: z.number(),\n    score: z.number(),\n    excerpt: z.optional(z.string()),\n    excerptLong: z.optional(z.array(z.string())),\n    authors: z.optional(z.array(z.string())),\n    date: z.optional(z.string()),\n    modifiedDate: z.optional(z.string()),\n    tags: z.optional(z.array(z.string())),\n    thumbnailUrl: z.string(),\n    availableEntities: z.optional(z.array(z.string())),\n})\n\nexport type PageRecord = z.infer<typeof PagesIndexRecordSchema>\n\n// Lightweight record for the chronological pages index (one per page, no chunked content)\nexport type PageChronologicalRecord = {\n    objectID: string\n    type: string\n    slug: string\n    title: string\n    excerpt: string\n    date: string\n    modifiedDate: string\n    authors: string[]\n    tags: string[]\n    thumbnailUrl: string\n}\n\nexport const PagesIndexRecordsResponseSchema = z.object({\n    records: z.array(PagesIndexRecordSchema),\n    count: z.number(),\n    message: z.optional(z.string()),\n})\n\nexport type PagesIndexRecordsResponse = z.infer<\n    typeof PagesIndexRecordsResponseSchema\n>\n\nexport type IPageHit = PageRecord & Hit<BaseHit>\n\nexport enum ChartRecordType {\n    Chart = \"chart\",\n    ExplorerView = \"explorerView\",\n    MultiDimView = \"multiDimView\",\n}\n\nexport enum ExplorerType {\n    Grapher = \"grapher\",\n    Indicator = \"indicator\",\n    Csv = \"csv\",\n}\n\nexport interface ChartRecord {\n    type: ChartRecordType\n    objectID: string\n    chartId: number\n    chartConfigId?: string\n    slug: string\n    queryParams?: string\n    title: string\n    containerTitle?: string\n    subtitle: string | undefined\n    variantName: string\n    availableTabs: GrapherTabName[]\n    keyChartForTags: string[]\n    tags: string[]\n    availableEntities: string[]\n    /** ETL namespace/provider of the variables used in this chart (e.g., \"who\", \"faostat\") */\n    datasetNamespaces: string[]\n    /** ETL version dates of the variables used in this chart (e.g., \"2024-08-06\") */\n    datasetVersions: string[]\n    /** ETL dataset product names of the variables used in this chart (e.g., \"ghe\", \"faostat_tcl\") */\n    datasetProducts: string[]\n    /** Data producers of the variables used in this chart (e.g., \"World Bank\") */\n    datasetProducers: string[]\n    /**\n     * Only present for income group-specific FMs: availableEntities before it gets filtered down.\n     * Without this, searching for charts with data for \"Uganda\" OR \"United States\" would return\n     * the FM version of the chart that only has Uganda in its available entities, and thus we\n     * wouldn't plot the data for the US, even though the chart has data for the US.\n     */\n    originalAvailableEntities?: string[]\n    /**\n     * Also only set for FMs: used so that we can filter out income group-specific FMs on a plain data catalog view.\n     */\n    isIncomeGroupSpecificFM: boolean\n    isFM: boolean\n    publishedAt: string\n    updatedAt: string\n    numDimensions: number\n    titleLength: number\n    numRelatedArticles: number\n    views_7d: number\n    score: number\n    // we set attributeForDistinct on this, so we can use it to deduplicate\n    // when we have multiple records for the same chart (e.g. with featured metrics)\n    id: string\n}\n\nexport type IChartHit = Hit<BaseHit> & ChartRecord\n\nexport enum SearchIndexName {\n    Pages = \"pages\",\n    PagesChronological = \"pages-chronological\",\n    ExplorerViewsMdimViewsAndCharts = \"explorer-views-and-charts\",\n}\n\ninterface BaseSearchChartHit {\n    title: string\n    containerTitle?: string\n    slug: string\n    availableEntities: string[]\n    originalAvailableEntities?: string[]\n    objectID: string\n    variantName?: string\n    subtitle?: string\n    availableTabs: GrapherTabName[]\n    __position: number\n    _highlightResult?: HitHighlightResult\n    _snippetResult?: HitHighlightResult\n}\n\ntype SearchChartViewHit = BaseSearchChartHit & {\n    type: ChartRecordType.Chart\n}\n\ntype SearchExplorerViewHit = BaseSearchChartHit & {\n    type: ChartRecordType.ExplorerView\n    explorerType: ExplorerType\n    queryParams: string\n}\n\ntype SearchMultiDimViewHit = BaseSearchChartHit & {\n    type: ChartRecordType.MultiDimView\n    queryParams: string\n    chartConfigId: string\n}\n\n/**\n * This is the type for the hits that we get back from algolia when we search\n * response.results[0].hits is an array of these\n */\nexport type SearchChartHit =\n    | SearchChartViewHit\n    | SearchExplorerViewHit\n    | SearchMultiDimViewHit\n\nexport interface SearchChartHitComponentProps {\n    hit: SearchChartHit\n    selectedRegionNames?: string[] | undefined\n    // Search uses a global onClick handler to track analytics\n    // But the data catalog passes a function to this component explicitly\n    onClick: (vizType: string | null) => void\n}\n\nexport type SearchChartHitComponentVariant = \"large\" | \"medium\" | \"small\"\n\n// SearchResponse adds the extra fields from Algolia: page, nbHits, etc\nexport type SearchChartsResponse = SearchResponse<SearchChartHit>\n\nexport type SearchDataTopicsResponse = {\n    title: string\n    charts: SearchResponse<SearchChartHit>\n}\n\nexport type ScoredFilter = Filter & {\n    name: string\n    score: number\n}\n\nexport type ScoredFilterPositioned = ScoredFilter & {\n    positions: number[]\n}\n\nexport type DataInsightHit = {\n    title: string\n    thumbnailUrl: string\n    date: string\n    slug: string\n    type: OwidGdocType.DataInsight\n    objectID: string\n    __position: number\n}\n\nexport type SearchDataInsightResponse = SearchResponse<DataInsightHit>\n\nexport type FlatArticleHit = {\n    title: string\n    thumbnailUrl: string\n    date: string\n    slug: string\n    type: OwidGdocType.Article | OwidGdocType.AboutPage\n    content: string\n    authors: string[]\n    objectID: string\n    __position: number\n}\n\nexport type StackedArticleHit = {\n    title: string\n    thumbnailUrl: string\n    slug: string\n    type: OwidGdocType.Article | OwidGdocType.AboutPage\n    content: string\n    objectID: string\n    __position: number\n}\n\nexport type SearchStackedArticleResponse = SearchResponse<StackedArticleHit>\nexport type SearchFlatArticleResponse = SearchResponse<FlatArticleHit>\n\nexport type TopicPageHit = {\n    title: string\n    type: OwidGdocType.TopicPage | OwidGdocType.LinearTopicPage\n    slug: string\n    excerpt: string\n    excerptLong?: string[]\n    objectID: string\n    __position: number\n}\n\nexport type SearchTopicPageResponse = SearchResponse<TopicPageHit>\n\nexport type ProfileHit = {\n    title: string\n    thumbnailUrl: string\n    slug: string\n    excerpt: string\n    type: OwidGdocType.Profile\n    availableEntities: string[]\n    objectID: string\n    __position: number\n}\n\nexport type SearchProfileResponse = SearchResponse<ProfileHit>\n\nexport type SearchWritingTopicsResponse = {\n    title: string\n    articles: SearchStackedArticleResponse\n    topicPages: SearchTopicPageResponse\n    totalCount: number\n}\n\nexport enum FilterType {\n    COUNTRY = \"country\",\n    TOPIC = \"topic\",\n    QUERY = \"query\",\n    DATASET_PRODUCT = \"datasetProduct\",\n    DATASET_NAMESPACE = \"datasetNamespace\",\n    DATASET_VERSION = \"datasetVersion\",\n    DATASET_PRODUCER = \"datasetProducer\",\n}\n\nexport enum SearchResultType {\n    ALL = \"all\",\n    DATA = \"data\",\n    WRITING = \"writing\",\n}\n\nexport type Filter = {\n    type: FilterType\n    name: string\n}\n\nexport enum SearchUrlParam {\n    COUNTRY = \"countries\",\n    TOPIC = \"topics\",\n    QUERY = \"q\",\n    REQUIRE_ALL_COUNTRIES = \"requireAllCountries\",\n    RESULT_TYPE = \"resultType\",\n    DATASET_PRODUCT = \"datasetProducts\",\n    DATASET_NAMESPACE = \"datasetNamespaces\",\n    DATASET_VERSION = \"datasetVersions\",\n    DATASET_PRODUCER = \"datasetProducers\",\n}\n\nexport type SearchState = Readonly<{\n    query: string\n    filters: Filter[]\n    requireAllCountries: boolean\n    resultType: SearchResultType\n}>\n\nexport interface SearchActions {\n    setQuery: (query: string) => void\n    addCountry: (country: string) => void\n    addCountryAndSetQuery: (country: string, query: string) => void\n    removeCountry: (country: string) => void\n    setTopic: (topic: string) => void\n    setTopicAndClearQuery: (topic: string) => void\n    removeTopic: (topic: string) => void\n    addFilter: (filter: Filter) => void\n    removeFilter: (filter: Filter) => void\n    toggleRequireAllCountries: () => void\n    setResultType: (resultType: SearchResultType) => void\n    replaceQueryWithFilter: (filter: ScoredFilterPositioned) => void\n    reset: () => void\n}\n\nexport enum SearchTopicType {\n    Topic = \"topic\",\n    Area = \"area\",\n}\n\nexport interface TemplateConfig {\n    resultType: SearchResultType\n    topicType: SearchTopicType | null\n    hasCountry: boolean\n    hasQuery: boolean\n    hasDatasetFilters: boolean\n}\n\nexport type SearchFacetFilters = (string | string[])[]\n\nexport type SynonymMap = Map<string, string[]>\n\nexport interface WordPositioned {\n    word: string\n    position: number\n}\n\nexport type Ngram = WordPositioned[]\n\n/**\n * Context object containing shared enrichment data needed for Algolia indexing of chart, explorer and multi-dim views.\n */\nexport interface IndexingContext {\n    /** Pageview data by URL (e.g., \"/grapher/life-expectancy\" -> { views_7d: 1234 }) */\n    pageviews: Record<string, { views_7d: number }>\n\n    /**\n     * Topic tag hierarchies for computing parent topic tags.\n     * Maps tag name -> array of parent tag paths (each path is an array of tags with id, name, slug).\n     */\n    topicHierarchies: Record<\n        string,\n        Array<Array<{ id: number; name: string; slug: string | null }>>\n    >\n}\n\nexport type ChartsIndexingContext = IndexingContext & {\n    redirectsByChartId: Map<number, string[]>\n}\n\nexport const CHRONOLOGICAL_INDEX_TYPES = new Set<string>([\n    OwidGdocType.Article,\n    OwidGdocType.LinearTopicPage,\n    OwidGdocType.TopicPage,\n    OwidGdocType.DataInsight,\n    OwidGdocType.Announcement,\n])\n","/*\n * Vector utility class\n * Partly based on the Unity vector: https://docs.unity3d.com/ScriptReference/Vector2.html\n * Wraps the Victor library, mainly so we can do type hinting\n *\n * @project Our World In Data\n * @author  Jaiden Mispy\n * @created 2017-03-15\n */\n\nexport interface Point {\n    x: number\n    y: number\n}\n\nexport class PointVector {\n    x: number\n    y: number\n\n    constructor(x: number, y: number) {\n        this.x = x\n        this.y = y\n    }\n\n    subtract(v: PointVector): PointVector {\n        return new PointVector(this.x - v.x, this.y - v.y)\n    }\n\n    add(v: PointVector): PointVector {\n        return new PointVector(this.x + v.x, this.y + v.y)\n    }\n\n    times(n: number): PointVector {\n        return new PointVector(this.x * n, this.y * n)\n    }\n\n    get magnitude(): number {\n        return Math.sqrt(this.x ** 2 + this.y ** 2)\n    }\n\n    normalize(): PointVector {\n        const magnitude = this.magnitude\n        if (magnitude > 1e-5)\n            return new PointVector(this.x / magnitude, this.y / magnitude)\n\n        return new PointVector(0, 0)\n    }\n\n    normals(): [PointVector, PointVector] {\n        return [\n            new PointVector(-this.y, this.x),\n            new PointVector(this.y, -this.x),\n        ]\n    }\n\n    toString(): string {\n        return `PointVector<${this.x}, ${this.y}>`\n    }\n\n    static up = new PointVector(0, -1)\n    static zero = new PointVector(0, 0)\n\n    static distanceSq(a: PointVector, b: PointVector): number {\n        return (b.x - a.x) ** 2 + (b.y - a.y) ** 2\n    }\n\n    static distance(a: PointVector, b: PointVector): number {\n        return Math.sqrt(PointVector.distanceSq(a, b))\n    }\n\n    static angle(a: PointVector, b: PointVector): number {\n        return (\n            Math.acos(\n                Math.max(\n                    Math.min(PointVector.dot(a.normalize(), b.normalize()), 1),\n                    -1\n                )\n            ) * 57.29578 // this is 180/pi, used to convert radians to degrees\n        )\n    }\n\n    private static dot(lhs: PointVector, rhs: PointVector): number {\n        return lhs.x * rhs.x + lhs.y * rhs.y\n    }\n\n    // From: http://stackoverflow.com/a/1501725/1983739\n    static distanceFromPointToLineSegmentSq(\n        p: PointVector,\n        v: PointVector, // start of line segment\n        w: PointVector // end of line segment\n    ): number {\n        const l2 = PointVector.distanceSq(v, w)\n        if (l2 === 0) return PointVector.distanceSq(p, v)\n\n        let t = ((p.x - v.x) * (w.x - v.x) + (p.y - v.y) * (w.y - v.y)) / l2\n        t = Math.max(0, Math.min(1, t))\n        return PointVector.distanceSq(\n            p,\n            new PointVector(v.x + t * (w.x - v.x), v.y + t * (w.y - v.y))\n        )\n    }\n}\n","const t=Symbol.for(\"@ts-pattern/matcher\"),e=Symbol.for(\"@ts-pattern/isVariadic\"),n=\"@ts-pattern/anonymous-select-key\",r=t=>Boolean(t&&\"object\"==typeof t),i=e=>e&&!!e[t],o=(n,s,c)=>{if(i(n)){const e=n[t](),{matched:r,selections:i}=e.match(s);return r&&i&&Object.keys(i).forEach(t=>c(t,i[t])),r}if(r(n)){if(!r(s))return!1;if(Array.isArray(n)){if(!Array.isArray(s))return!1;let t=[],r=[],a=[];for(const o of n.keys()){const s=n[o];i(s)&&s[e]?a.push(s):a.length?r.push(s):t.push(s)}if(a.length){if(a.length>1)throw new Error(\"Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.\");if(s.length<t.length+r.length)return!1;const e=s.slice(0,t.length),n=0===r.length?[]:s.slice(-r.length),i=s.slice(t.length,0===r.length?Infinity:-r.length);return t.every((t,n)=>o(t,e[n],c))&&r.every((t,e)=>o(t,n[e],c))&&(0===a.length||o(a[0],i,c))}return n.length===s.length&&n.every((t,e)=>o(t,s[e],c))}return Reflect.ownKeys(n).every(e=>{const r=n[e];return(e in s||i(a=r)&&\"optional\"===a[t]().matcherType)&&o(r,s[e],c);var a})}return Object.is(s,n)},s=e=>{var n,o,a;return r(e)?i(e)?null!=(n=null==(o=(a=e[t]()).getSelectionKeys)?void 0:o.call(a))?n:[]:Array.isArray(e)?c(e,s):c(Object.values(e),s):[]},c=(t,e)=>t.reduce((t,n)=>t.concat(e(n)),[]);function a(...t){if(1===t.length){const[e]=t;return t=>o(e,t,()=>{})}if(2===t.length){const[e,n]=t;return o(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function u(t){return Object.assign(t,{optional:()=>l(t),and:e=>m(t,e),or:e=>d(t,e),select:e=>void 0===e?y(t):y(e,t)})}function h(t){return Object.assign((t=>Object.assign(t,{[Symbol.iterator](){let n=0;const r=[{value:Object.assign(t,{[e]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var t;return null!=(t=r[n++])?t:r.at(-1)}}}}))(t),{optional:()=>h(l(t)),select:e=>h(void 0===e?y(t):y(e,t))})}function l(e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return void 0===t?(s(e).forEach(t=>r(t,void 0)),{matched:!0,selections:n}):{matched:o(e,t,r),selections:n}},getSelectionKeys:()=>s(e),matcherType:\"optional\"})})}const f=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},g=(t,e)=>{for(const[n,r]of t.entries())if(!e(r,n))return!1;return!0};function m(...e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return{matched:e.every(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"and\"})})}function d(...e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return c(e,s).forEach(t=>r(t,void 0)),{matched:e.some(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"or\"})})}function p(e){return{[t]:()=>({match:t=>({matched:Boolean(e(t))})})}}function y(...e){const r=\"string\"==typeof e[0]?e[0]:void 0,i=2===e.length?e[1]:\"string\"==typeof e[0]?void 0:e[0];return u({[t]:()=>({match:t=>{let e={[null!=r?r:n]:t};return{matched:void 0===i||o(i,t,(t,n)=>{e[t]=n}),selections:e}},getSelectionKeys:()=>[null!=r?r:n].concat(void 0===i?[]:s(i))})})}function v(t){return\"number\"==typeof t}function b(t){return\"string\"==typeof t}function w(t){return\"bigint\"==typeof t}const S=u(p(function(t){return!0})),O=S,j=t=>Object.assign(u(t),{startsWith:e=>{return j(m(t,(n=e,p(t=>b(t)&&t.startsWith(n)))));var n},endsWith:e=>{return j(m(t,(n=e,p(t=>b(t)&&t.endsWith(n)))));var n},minLength:e=>j(m(t,(t=>p(e=>b(e)&&e.length>=t))(e))),length:e=>j(m(t,(t=>p(e=>b(e)&&e.length===t))(e))),maxLength:e=>j(m(t,(t=>p(e=>b(e)&&e.length<=t))(e))),includes:e=>{return j(m(t,(n=e,p(t=>b(t)&&t.includes(n)))));var n},regex:e=>{return j(m(t,(n=e,p(t=>b(t)&&Boolean(t.match(n))))));var n}}),K=j(p(b)),x=t=>Object.assign(u(t),{between:(e,n)=>x(m(t,((t,e)=>p(n=>v(n)&&t<=n&&e>=n))(e,n))),lt:e=>x(m(t,(t=>p(e=>v(e)&&e<t))(e))),gt:e=>x(m(t,(t=>p(e=>v(e)&&e>t))(e))),lte:e=>x(m(t,(t=>p(e=>v(e)&&e<=t))(e))),gte:e=>x(m(t,(t=>p(e=>v(e)&&e>=t))(e))),int:()=>x(m(t,p(t=>v(t)&&Number.isInteger(t)))),finite:()=>x(m(t,p(t=>v(t)&&Number.isFinite(t)))),positive:()=>x(m(t,p(t=>v(t)&&t>0))),negative:()=>x(m(t,p(t=>v(t)&&t<0)))}),E=x(p(v)),A=t=>Object.assign(u(t),{between:(e,n)=>A(m(t,((t,e)=>p(n=>w(n)&&t<=n&&e>=n))(e,n))),lt:e=>A(m(t,(t=>p(e=>w(e)&&e<t))(e))),gt:e=>A(m(t,(t=>p(e=>w(e)&&e>t))(e))),lte:e=>A(m(t,(t=>p(e=>w(e)&&e<=t))(e))),gte:e=>A(m(t,(t=>p(e=>w(e)&&e>=t))(e))),positive:()=>A(m(t,p(t=>w(t)&&t>0))),negative:()=>A(m(t,p(t=>w(t)&&t<0)))}),P=A(p(w)),T=u(p(function(t){return\"boolean\"==typeof t})),B=u(p(function(t){return\"symbol\"==typeof t})),_=u(p(function(t){return null==t})),k=u(p(function(t){return null!=t}));var N={__proto__:null,matcher:t,optional:l,array:function(...e){return h({[t]:()=>({match:t=>{if(!Array.isArray(t))return{matched:!1};if(0===e.length)return{matched:!0};const n=e[0];let r={};if(0===t.length)return s(n).forEach(t=>{r[t]=[]}),{matched:!0,selections:r};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])};return{matched:t.every(t=>o(n,t,i)),selections:r}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},set:function(...e){return u({[t]:()=>({match:t=>{if(!(t instanceof Set))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};if(0===e.length)return{matched:!0};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])},i=e[0];return{matched:f(t,t=>o(i,t,r)),selections:n}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},map:function(...e){return u({[t]:()=>({match:t=>{if(!(t instanceof Map))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])};if(0===e.length)return{matched:!0};var i;if(1===e.length)throw new Error(`\\`P.map\\` wasn't given enough arguments. Expected (key, value), received ${null==(i=e[0])?void 0:i.toString()}`);const[s,c]=e;return{matched:g(t,(t,e)=>{const n=o(s,e,r),i=o(c,t,r);return n&&i}),selections:n}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},intersection:m,union:d,not:function(e){return u({[t]:()=>({match:t=>({matched:!o(e,t,()=>{})}),getSelectionKeys:()=>[],matcherType:\"not\"})})},when:p,select:y,any:S,_:O,string:K,number:E,bigint:P,boolean:T,symbol:B,nullish:_,nonNullable:k,instanceOf:function(t){return u(p(function(t){return e=>e instanceof t}(t)))},shape:function(t){return u(p(a(t)))}};class W extends Error{constructor(t){let e;try{e=JSON.stringify(t)}catch(n){e=t}super(`Pattern matching error: no pattern matches value ${e}`),this.input=void 0,this.input=t}}const $={matched:!1,value:void 0};function z(t){return new I(t,$)}class I{constructor(t,e){this.input=void 0,this.state=void 0,this.input=t,this.state=e}with(...t){if(this.state.matched)return this;const e=t[t.length-1],r=[t[0]];let i;3===t.length&&\"function\"==typeof t[1]?i=t[1]:t.length>2&&r.push(...t.slice(1,t.length-1));let s=!1,c={};const a=(t,e)=>{s=!0,c[t]=e},u=!r.some(t=>o(t,this.input,a))||i&&!Boolean(i(this.input))?$:{matched:!0,value:e(s?n in c?c[n]:c:this.input,this.input)};return new I(this.input,u)}when(t,e){if(this.state.matched)return this;const n=Boolean(t(this.input));return new I(this.input,n?{matched:!0,value:e(this.input,this.input)}:$)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(t=L){return this.state.matched?this.state.value:t(this.input)}run(){return this.exhaustive()}returnType(){return this}narrow(){return this}}function L(t){throw new W(t)}export{W as NonExhaustiveError,N as P,N as Pattern,a as isMatching,z as match};\n//# sourceMappingURL=index.js.map\n","const CAMELCASE_REGEXP_PATTERN = '(?:[a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))';\nfunction replace(value, dictionary) {\n    for (let index = 0, length = value.length; index < length; index++) {\n        const char = value[index];\n        const replacement = dictionary[char] && String(dictionary[char]);\n        if (replacement !== undefined) {\n            value = value.slice(0, index) + replacement + value.slice(index + 1);\n            const addedCharsCount = replacement.length - 1;\n            index += addedCharsCount;\n            length += addedCharsCount;\n        }\n    }\n    return value;\n}\n\nconst LOWERCASE_TRANSFORMER = (fragments, separator) => {\n    return fragments.join(separator).toLowerCase();\n};\nconst SENTENCECASE_TRANSFORMER = (fragments, separator) => {\n    const sentence = fragments.join(separator);\n    return sentence.charAt(0).toUpperCase() + sentence.slice(1).toLowerCase();\n};\nconst TITLECASE_TRANSFORMER = (fragments, separator) => {\n    const buffer = [];\n    for (let index = 0; index < fragments.length; index++) {\n        buffer.push(fragments[index].charAt(0).toUpperCase() +\n            fragments[index].slice(1).toLowerCase());\n    }\n    return buffer.join(separator);\n};\nconst UPPERCASE_TRANSFORMER = (fragments, separator) => {\n    return fragments.join(separator).toUpperCase();\n};\n\n// eslint-disable-next-line no-misleading-character-class\nconst COMBINING_CHARS = /[\\u0300-\\u036F\\u1AB0-\\u1AFF\\u1DC0-\\u1DFF]+/g;\nconst CONVERT = /[A-Za-z\\d]+/g;\nconst CONVERT_CAMELCASE = new RegExp('[A-Za-z\\\\d]*?' + CAMELCASE_REGEXP_PATTERN + '|[A-Za-z\\\\d]+', 'g');\nfunction convert(value, { camelCase = true, dictionary, separator = '-', transformer = LOWERCASE_TRANSFORMER, } = {}) {\n    const fragments = (dictionary ? replace(String(value), dictionary) : String(value))\n        .normalize('NFKD')\n        .replace(COMBINING_CHARS, '')\n        .match(camelCase ? CONVERT_CAMELCASE : CONVERT);\n    if (!fragments) {\n        return '';\n    }\n    return transformer\n        ? transformer(fragments, String(separator))\n        : fragments.join(String(separator));\n}\n\nconst REVERT = /[^-._~!$&'()*+,;=]+/g;\nconst REVERT_CAMELCASE = new RegExp(\"[^-._~!$&'()*+,;=]*?\" + CAMELCASE_REGEXP_PATTERN + \"|[^-._~!$&'()*+,;=]+\", 'g');\nconst REVERT_CAMELCASE_ONLY = new RegExp('.*?' + CAMELCASE_REGEXP_PATTERN + '|.+', 'g');\nfunction revert(value, { camelCase = false, separator = null, transformer = null, } = {}) {\n    let fragments;\n    value = String(value);\n    /* Determine which method will be used to split the slug */\n    if (separator === '') {\n        fragments = camelCase ? value.match(REVERT_CAMELCASE_ONLY) : [value];\n    }\n    else if (typeof separator === 'string') {\n        fragments = value.split(separator);\n    }\n    else {\n        fragments = value.match(camelCase ? REVERT_CAMELCASE : REVERT);\n    }\n    if (!fragments) {\n        return '';\n    }\n    return transformer ? transformer(fragments, ' ') : fragments.join(' ');\n}\n\nexport { LOWERCASE_TRANSFORMER, SENTENCECASE_TRANSFORMER, TITLECASE_TRANSFORMER, UPPERCASE_TRANSFORMER, convert, convert as default, revert };\n//# sourceMappingURL=index.mjs.map\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { extent } from \"d3-array\"\nimport dayjs from \"./dayjs.js\"\nimport { formatLocale, FormatLocaleObject } from \"d3-format\"\nimport striptags from \"striptags\"\nimport {\n    type Integer,\n    IDEAL_PLOT_ASPECT_RATIO,\n    EPOCH_DATE,\n    SortOrder,\n    TimeBoundValue,\n    ScaleType,\n    VerticalAlign,\n    type GridParameters,\n    HorizontalAlign,\n    type OwidEnrichedGdocBlock,\n    type EnrichedBlockKeyInsightsSlide,\n    type EnrichedTopicPageIntroRelatedTopic,\n    type EnrichedTopicPageIntroDownloadButton,\n    type EnrichedHybridLink,\n    type OwidGdocPostInterface,\n    type OwidGdocDataInsightInterface,\n    type OwidGdocAuthorInterface,\n    type OwidGdoc,\n    OwidGdocType,\n    type OwidGdocJSON,\n    type Span,\n    UserCountryInformation,\n    Time,\n    TimeBound,\n    TagGraphRoot,\n    TagGraphRootName,\n    TagGraphNode,\n    GrapherInterface,\n    DimensionProperty,\n    GRAPHER_CHART_TYPES,\n    DbPlainTag,\n    AssetMap,\n    OwidGdocAboutInterface,\n    OwidGdocHomepageInterface,\n    PrimitiveType,\n    GrapherTrendArrowDirection,\n    TocHeadingWithTitleSupertitle,\n    ALL_CHARTS_ID,\n    FEATURED_DATA_INSIGHTS_ID,\n    EXPLORE_DATA_SECTION_DEFAULT_TITLE,\n    EXPLORE_DATA_SECTION_ID,\n    OwidGdocAnnouncementInterface,\n    CHRONOLOGICAL_INDEX_TYPES,\n} from \"@ourworldindata/types\"\nimport { Point, PointVector } from \"./PointVector.js\"\nimport * as React from \"react\"\nimport { match, P } from \"ts-pattern\"\nimport urlSlug from \"url-slug\"\n\nexport type NoUndefinedValues<T> = {\n    [P in keyof T]: Required<NonNullable<T[P]>>\n}\n\ntype OptionalKeysOf<T> = Exclude<\n    {\n        [K in keyof T]: T extends Record<K, T[K]> ? never : K\n    }[keyof T],\n    undefined\n>\n\ntype AllowUndefinedValues<T> = {\n    [K in keyof T]: T[K] | undefined\n}\n\n/**\n * This generic makes every (top-level) optional property in an interface required,\n * but with `undefined` as an allowed value.\n *\n * For example:\n *     AllKeysRequired<{\n *         a: number\n *         b?: number\n *     }>\n * becomes:\n *     {\n *         a: number\n *         b: number | undefined\n *     }\n */\n// This was tricky to construct.\n// It seems like the initial, elegant approach is:\n//\n// export type AllKeysRequired<T> = {\n//     [K in keyof T]-?: T extends Record<K, T[K]> ? T[K] : T[K] | undefined\n// }\n//\n// But TypeScript will omit `undefined` from the value type whenever you\n// make the key required with `-?`. So we have this ugly workaround.\n//\n// -@danielgavrilov, 2022-02-15\nexport type AllKeysRequired<T> = AllowUndefinedValues<\n    Required<Pick<T, OptionalKeysOf<T>>>\n> &\n    Exclude<T, OptionalKeysOf<T>>\n\nexport type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport type RequiredBy<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>\n\n// doesn't do anything fancy, but makes it a bit more readable by skipping one layer of angle brackets:\n// PartialRecord<A, B> = Partial<Record<A, B>>\nexport type PartialRecord<K extends keyof any, V> = Partial<Record<K, V>>\n\n// d3 v6 changed the default minus sign used in d3-format to \"−\" (Unicode minus sign), which looks\n// nicer but can cause issues when copy-pasting values into a spreadsheet or script.\n// For that reason we change that back to a plain old hyphen.\n// See https://observablehq.com/@d3/d3v6-migration-guide#minus\nexport const createFormatter = (\n    currency: string = \"$\"\n): FormatLocaleObject[\"format\"] =>\n    formatLocale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        minus: \"-\",\n        currency: [currency, \"\"],\n    }).format\n\nconst getRootSVG = (\n    element: Element | SVGGraphicsElement | SVGSVGElement\n): SVGSVGElement | undefined => {\n    if (\"createSVGPoint\" in element) return element\n    if (\"ownerSVGElement\" in element)\n        return element.ownerSVGElement || undefined\n    return undefined\n}\n\nexport const getRelativeMouse = (\n    node: Element | SVGGraphicsElement | SVGSVGElement,\n    event:\n        | React.TouchEvent\n        | TouchEvent\n        | PointerEvent\n        | { clientX: number; clientY: number }\n): PointVector => {\n    const eventOwner = checkIsTouchEvent(event) ? event.targetTouches[0] : event\n\n    const { clientX, clientY } = eventOwner\n\n    const svg = getRootSVG(node)\n    if (svg && \"getScreenCTM\" in node) {\n        const svgPoint = svg.createSVGPoint()\n        svgPoint.x = clientX\n        svgPoint.y = clientY\n        const point = svgPoint.matrixTransform(node.getScreenCTM()?.inverse())\n        return new PointVector(point.x, point.y)\n    }\n\n    const rect = node.getBoundingClientRect()\n    return new PointVector(\n        clientX - rect.left - node.clientLeft,\n        clientY - rect.top - node.clientTop\n    )\n}\n\n// Just a quick and dirty way to expose window.chart/explorer/etc for debugging. Last caller wins.\nexport const exposeInstanceOnWindow = (\n    component: unknown,\n    name = \"chart\",\n    alsoOnTopWindow?: boolean\n): void => {\n    if (typeof window === \"undefined\") return\n    const win = window as any\n    win[name] = component\n    if (alsoOnTopWindow && win !== win.top) win.top[name] = component\n}\n\n// Make an arbitrary string workable as a css class name\nexport const makeSafeForCSS = (name: string): string =>\n    name.replace(/[^a-z0-9]/g, (str) => {\n        const char = str.charCodeAt(0)\n        if (char === 32 || char === 45) return \"-\"\n        if (char === 95) return \"_\"\n        if (char >= 65 && char <= 90) return str\n        return \"__\" + (\"000\" + char.toString(16)).slice(-4)\n    })\n\nfunction makeSafeForFigma(name: string): string {\n    return name.replace(/\\s/g, \"-\")\n}\n\n/**\n * Make a human-readable string meant to be be used as the ID of a SVG chart\n * element. This is useful when a static chart is manually edited in a SVG\n * editor since SVG manipulation software like Figma often show the element's\n * id as its title.\n *\n * Note that these IDs are not meant to be used in CSS!\n */\nexport function makeFigmaId(...unsafeKeys: (string | undefined)[]): string {\n    return makeSafeForFigma(unsafeKeys.filter((key) => key).join(\"__\"))\n}\n\nexport function convertDaysSinceEpochToDate(dayAsYear: number): dayjs.Dayjs {\n    // Use dayjs' UTC mode\n    // This will force dayjs to format in UTC time instead of local time,\n    // making dates consistent no matter what timezone the user is in.\n    return dayjs.utc(EPOCH_DATE).add(dayAsYear, \"days\")\n}\n\nexport function formatDay(\n    dayAsYear: number,\n    options?: { format?: string }\n): string {\n    const format = options?.format ?? \"MMM D, YYYY\"\n    return convertDaysSinceEpochToDate(dayAsYear).format(format)\n}\n\nexport const formatYear = (year: number): string => {\n    if (isNaN(year)) {\n        console.warn(`Invalid year '${year}'`)\n        return \"\"\n    }\n\n    return year < 0\n        ? `${createFormatter()(\",.0f\")(Math.abs(year))} BCE`\n        : year.toString()\n}\n\n/**\n *  Computes the base-10 magnitude of a number, which can be useful for rounding by sigfigs etc.\n * Formally, numberMagnitude computes `m` such that `10^(m-1) <= abs(num) < 10^m`.\n * Equivalently, `num / 10^(numberMagnitude(num))` is always in the range ±[0.1, 1[.\n *\n * - numberMagnitude(0.5) = 0\n * - numberMagnitude(1) = 1\n * - numberMagnitude(-2) = 1\n * - numberMagnitude(100) = 3\n */\nexport const numberMagnitude = (num: number): number => {\n    if (num === 0) return 0\n    const magnitude = Math.floor(Math.log10(Math.abs(num))) + 1\n    return Number.isFinite(magnitude) ? magnitude : 0\n}\n\n// Turns every number except 0 to a number in the range [1, 9.9999] or [-9.9999, -1] for negative inputs\n// Also returns the factor needed to un-normalise the value back to its original scale\n// Turns 100 -> 1 (factor 100), 0.2 -> 2 (factor 0.1), -100 -> -1 (factor -100), 35 -> 3.5 (factor 10)\nexport const normaliseToSingleDigitNumber = (\n    num: number\n): { normalised: number; factor: number } => {\n    if (num === 0) return { normalised: 0, factor: 1 }\n    const magnitude = numberMagnitude(num)\n    const factor = Math.pow(10, magnitude - 1)\n\n    const normalised = num / factor\n    return { normalised, factor }\n}\n\nexport const roundSigFig = (num: number, sigfigs: number = 1): number => {\n    if (num === 0) return 0\n    const magnitude = numberMagnitude(num)\n    return _.round(num, -magnitude + sigfigs)\n}\n\nexport const excludeUndefined = <T>(arr: (T | undefined)[]): T[] =>\n    arr.filter((x) => x !== undefined) as T[]\n\nexport const excludeNull = <T>(arr: (T | null)[]): T[] =>\n    arr.filter((x) => x !== null) as T[]\n\nexport const excludeNullish = <T>(arr: (T | null | undefined | void)[]): T[] =>\n    arr.filter((x) => x !== null && x !== undefined) as T[]\n\nexport const firstOfNonEmptyArray = <T>(arr: T[]): T => {\n    if (arr.length < 1) throw new Error(\"array is empty\")\n    return R.first(arr) as T\n}\n\nexport const lastOfNonEmptyArray = <T>(arr: T[]): T => {\n    if (arr.length < 1) throw new Error(\"array is empty\")\n    return R.last(arr) as T\n}\n\nexport function next<T>(set: T[], current: T): T {\n    let nextIndex = set.indexOf(current) + 1\n    nextIndex = nextIndex === -1 ? 0 : nextIndex\n    return set[nextIndex === set.length ? 0 : nextIndex]\n}\n\nexport const previous = <T>(set: T[], current: T): T => {\n    const nextIndex = set.indexOf(current) - 1\n    return set[nextIndex < 0 ? set.length - 1 : nextIndex]\n}\n\n// Calculate the extents of a set of numbers, with safeguards for log scales\nexport const domainExtent = (\n    numValues: number[],\n    scaleType: ScaleType,\n    maxValueMultiplierForPadding = 1\n): [number, number] | undefined => {\n    const filterValues =\n        scaleType === ScaleType.log ? numValues.filter((v) => v > 0) : numValues\n    const [minValue, maxValue] = extent(filterValues)\n\n    if (\n        minValue !== undefined &&\n        maxValue !== undefined &&\n        isFinite(minValue) &&\n        isFinite(maxValue)\n    ) {\n        if (minValue !== maxValue) {\n            return [minValue, maxValue * maxValueMultiplierForPadding]\n        } else {\n            // Only one value, make up a reasonable default\n            return scaleType === ScaleType.log\n                ? [minValue / 10, minValue * 10]\n                : [minValue - 1, maxValue + 1]\n        }\n    }\n\n    return undefined\n}\n\n// Compound annual growth rate\n// cagr = ((new_value - old_value) ** (1 / Δt)) - 1\n// see https://en.wikipedia.org/wiki/Compound_annual_growth_rate\nexport const cagr = (\n    startValue: number,\n    endValue: number,\n    yearsElapsed: number\n): number => {\n    const ratio = endValue / startValue\n    return (\n        Math.sign(ratio) *\n        (Math.pow(Math.abs(ratio), 1 / yearsElapsed) - 1) *\n        100\n    )\n}\n\n// Take an arbitrary string and turn it into a nice url slug\nexport const slugify = (str: string, allowSlashes?: boolean): string => {\n    // Convert subscript and superscript numbers to regular numbers\n    const normalizedStr = str.replace(/[₀₁₂₃₄₅₆₇₈₉⁰¹²³⁴⁵⁶⁷⁸⁹]/g, (match) => {\n        // Subscript characters (₀₁₂₃₄₅₆₇₈₉)\n        const subscriptMap: { [key: string]: string } = {\n            \"₀\": \"0\",\n            \"₁\": \"1\",\n            \"₂\": \"2\",\n            \"₃\": \"3\",\n            \"₄\": \"4\",\n            \"₅\": \"5\",\n            \"₆\": \"6\",\n            \"₇\": \"7\",\n            \"₈\": \"8\",\n            \"₉\": \"9\",\n        }\n        // Superscript characters (⁰¹²³⁴⁵⁶⁷⁸⁹)\n        const superscriptMap: { [key: string]: string } = {\n            \"⁰\": \"0\",\n            \"¹\": \"1\",\n            \"²\": \"2\",\n            \"³\": \"3\",\n            \"⁴\": \"4\",\n            \"⁵\": \"5\",\n            \"⁶\": \"6\",\n            \"⁷\": \"7\",\n            \"⁸\": \"8\",\n            \"⁹\": \"9\",\n        }\n        return subscriptMap[match] || superscriptMap[match] || match\n    })\n    return slugifySameCase(normalizedStr.toLowerCase(), allowSlashes)\n}\n\nexport const slugifySameCase = (\n    str: string,\n    allowSlashes: boolean = false\n): string => {\n    let slug = str\n        .trim()\n        .replace(/\\s*\\*.+\\*/, \"\")\n        .replace(/[^\\w\\- /]+/g, \"\")\n        .replace(/ +/g, \"-\")\n    if (!allowSlashes) {\n        slug = slug.replace(/\\//g, \"\")\n    }\n    return slug\n}\n\n// Unique number for this execution context\n// Useful for coordinating between embeds to avoid conflicts in their ids\nlet _guid = 0\nlet _guidsDisabledForTesting = false\nexport const guid = (): number => (_guidsDisabledForTesting ? 1 : ++_guid)\nexport const TESTING_ONLY_disable_guid = (): boolean =>\n    (_guidsDisabledForTesting = true)\n\n/** Create an SVG path from an array of points */\nexport const pointsToPath = (points: Point[]): string => {\n    let path = \"\"\n    for (let i = 0; i < points.length; i++) {\n        if (i === 0) path += `M${points[i].x} ${points[i].y}`\n        else path += `L${points[i].x} ${points[i].y}`\n    }\n    return path\n}\n\n// Based on https://stackoverflow.com/a/30245398/1983739\n// In case of tie returns higher value\n// todo: add unit tests\nexport const sortedFindClosestIndex = (\n    array: number[],\n    value: number,\n    startIndex: number = 0,\n    // non-inclusive end\n    endIndex: number = array.length\n): number => {\n    if (startIndex >= endIndex) return -1\n\n    if (value < array[startIndex]) return startIndex\n\n    if (value > array[endIndex - 1]) return endIndex - 1\n\n    let lo = startIndex\n    let hi = endIndex - 1\n\n    while (lo <= hi) {\n        const mid = Math.round((hi + lo) / 2)\n\n        if (value < array[mid]) {\n            hi = mid - 1\n        } else if (value > array[mid]) {\n            lo = mid + 1\n        } else {\n            return mid\n        }\n    }\n\n    // lo == hi + 1\n    return array[lo] - value < value - array[hi] ? lo : hi\n}\n\nexport const sortedFindClosest = (\n    array: number[],\n    value: number,\n    startIndex?: number,\n    endIndex?: number\n): number | undefined => {\n    const index = sortedFindClosestIndex(array, value, startIndex, endIndex)\n    return index !== -1 ? array[index] : undefined\n}\n\nexport const isMobile = (): boolean =>\n    typeof window === \"undefined\"\n        ? false\n        : !!window?.navigator?.userAgent.toLowerCase().includes(\"mobi\")\n\nexport const isTouchDevice = (): boolean =>\n    typeof window === \"undefined\" ? false : !!(\"ontouchstart\" in window)\n\n// General type representing arbitrary json data; basically a non-nullable 'any'\nexport interface Json {\n    [x: string]: any\n}\n\n// Escape a function for storage in a csv cell\nexport const csvEscape = (value: unknown): string => {\n    const valueStr = _.toString(value)\n    return valueStr.includes(\",\")\n        ? `\"${valueStr.replace(/\"/g, '\"\"')}\"`\n        : valueStr\n}\n\n// Removes all undefineds from an object.\nexport const trimObject = <Obj>(\n    obj: Obj,\n    trimStringEmptyStrings = false\n): NoUndefinedValues<Obj> => {\n    const clone: any = {}\n    for (const key in obj) {\n        const val = obj[key] as any\n        if (_.isObject(val) && _.isEmpty(val)) {\n            // Drop empty objects\n        } else if (trimStringEmptyStrings && val === \"\") {\n            // ignore\n        } else if (val !== undefined) clone[key] = obj[key]\n    }\n    return clone\n}\n\nexport const fetchText = async (url: string): Promise<string> => {\n    return await fetchWithRetry(url).then((res) => {\n        if (!res.ok)\n            throw new Error(`Fetch failed: ${res.status} ${res.statusText}`)\n        return res.text()\n    })\n}\n\nexport async function fetchJson<TResult>(\n    url: string,\n    options?: { timeoutMs?: number }\n): Promise<TResult> {\n    const response =\n        options?.timeoutMs !== undefined\n            ? await fetchWithTimeout(url, options.timeoutMs)\n            : await fetch(url)\n\n    if (!response.ok) {\n        throw new Error(`Failed to fetch ${url}: ${response.statusText}`)\n    }\n\n    return response.json()\n}\n\n// Adapted from https://github.com/sindresorhus/ky/blob/main/source/utils/timeout.ts\nexport async function fetchWithTimeout(\n    url: string,\n    timeoutMs: number,\n    options?: RequestInit\n): Promise<Response> {\n    const abortController = new AbortController()\n\n    return new Promise((resolve, reject) => {\n        const timeoutId = setTimeout(() => {\n            abortController.abort()\n            reject(new Error(`Request timed out: ${url}`))\n        }, timeoutMs)\n\n        void fetch(url, { ...options, signal: abortController.signal })\n            .then(resolve)\n            .catch(reject)\n            .finally(() => clearTimeout(timeoutId))\n    })\n}\n\nconst _getUserCountryInformation = async (): Promise<\n    UserCountryInformation | undefined\n> =>\n    await fetchWithRetry(\"https://ourworldindata.org/api/detect-country\")\n        .then((res) => res.json())\n        .then((res) => res.country)\n        .catch(() => undefined)\n\n// Memoized because this will pretty much never change during a session.\n// The memoization, however, also means that any failures will also be cached.\n// This is okay currently, because currently this information is very much an optional nice-to-have.\nexport const getUserCountryInformation: () => Promise<\n    UserCountryInformation | undefined\n> = _.memoize(_getUserCountryInformation)\n\nexport const stripHTML = (html: string): string => striptags(html)\n\n// Math.rand doesn't have between nor seed. Lodash's Random doesn't take a seed, making it bad for testing.\n// So we have our own *very* psuedo-RNG.\nexport const getRandomNumberGenerator =\n    (min: Integer = 0, max: Integer = 100, seed = Date.now()) =>\n    (): Integer => {\n        const semiRand = Math.sin(seed++) * 10000\n        return Math.floor(min + (max - min) * (semiRand - Math.floor(semiRand)))\n    }\n\nexport const sampleFrom = <T>(\n    collection: T[],\n    howMany: number,\n    seed: number\n): T[] => shuffleArray(collection, seed).slice(0, howMany)\n\n// A seeded array shuffle\n// https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array\nconst shuffleArray = <T>(array: T[], seed = Date.now()): T[] => {\n    const rand = getRandomNumberGenerator(0, 100, seed)\n    const clonedArr = array.slice()\n    for (let index = clonedArr.length - 1; index > 0; index--) {\n        const replacerIndex = Math.floor((rand() / 100) * (index + 1))\n        ;[clonedArr[index], clonedArr[replacerIndex]] = [\n            clonedArr[replacerIndex],\n            clonedArr[index],\n        ]\n    }\n    return clonedArr\n}\n\nexport const getIdealGridParams = ({\n    count,\n    containerAspectRatio,\n    idealAspectRatio = IDEAL_PLOT_ASPECT_RATIO,\n}: {\n    count: number\n    containerAspectRatio: number\n    idealAspectRatio?: number\n}): GridParameters => {\n    // See Observable notebook: https://observablehq.com/@danielgavrilov/pack-rectangles-of-a-preferred-aspect-ratio\n    // Also Desmos graph: https://www.desmos.com/calculator/tmajzuq5tm\n    const ratio = containerAspectRatio / idealAspectRatio\n    // Prefer vertical grid for count=2.\n    if (count === 2 && containerAspectRatio < 2.8)\n        return { rows: 2, columns: 1, count }\n    // Otherwise, optimize for closest to the ideal aspect ratio.\n    const initialColumns = Math.min(Math.round(Math.sqrt(count * ratio)), count)\n    const rows = Math.ceil(count / initialColumns)\n    // Remove extra columns if we can fit everything in fewer.\n    // This will result in wider aspect ratios than ideal, which is ok.\n    const columns = Math.ceil(count / rows)\n    return {\n        rows,\n        columns,\n        count,\n    }\n}\n\nexport const findClosestTimeIndex = (\n    timesAsc: Time[],\n    targetTime: Time,\n    tolerance?: number // When not specified, the tolerance is infinite\n): Time | undefined => {\n    const closestIndex = R.sortedIndex(timesAsc, targetTime)\n\n    // This value is >= targetTime, or undefined in case there is no such value in the arr\n    const higherOrEqualVal = timesAsc.at(closestIndex)\n    if (higherOrEqualVal === targetTime) return closestIndex\n\n    // if tolerance is set to 0, and no exact match was found, return undefined\n    if (tolerance === 0) return undefined\n\n    // This value is < targetTime, or undefined in case there is no such value in the arr\n    const lowerVal = timesAsc[closestIndex - 1] as Time | undefined\n    const lowerDiff = lowerVal !== undefined ? targetTime - lowerVal : Infinity\n    const higherDiff =\n        higherOrEqualVal !== undefined\n            ? higherOrEqualVal - targetTime\n            : Infinity\n\n    if (lowerDiff === Infinity && higherDiff === Infinity) return undefined\n\n    // Prefer later times, e.g. if targetTime is 2010, prefer 2011 to 2009\n    if (higherDiff <= lowerDiff) {\n        if (tolerance !== undefined && higherDiff > tolerance) return undefined\n        return closestIndex\n    } else {\n        if (tolerance !== undefined && lowerDiff > tolerance) return undefined\n        return closestIndex - 1\n    }\n}\n\nexport const isNegativeInfinity = (\n    timeBound: TimeBound\n): timeBound is TimeBoundValue => timeBound === TimeBoundValue.negativeInfinity\n\nexport const isPositiveInfinity = (\n    timeBound: TimeBound\n): timeBound is TimeBoundValue => timeBound === TimeBoundValue.positiveInfinity\n\nexport const findClosestTime = (\n    timesAsc: Time[],\n    targetTime: Time,\n    tolerance?: number\n): Time | undefined => {\n    if (isNegativeInfinity(targetTime)) return timesAsc.at(0)\n    if (isPositiveInfinity(targetTime)) return timesAsc.at(-1)\n    const index = findClosestTimeIndex(timesAsc, targetTime, tolerance)\n    return index !== undefined ? timesAsc[index] : undefined\n}\n\n// _.mapValues() equivalent for ES6 Maps\nexport const es6mapValues = <K, V, M>(\n    input: Map<K, V>,\n    mapper: (value: V, key: K) => M\n): Map<K, M> =>\n    new Map(\n        Array.from(input, ([key, value]) => {\n            return [key, mapper(value, key)]\n        })\n    )\n\nexport interface DataValue {\n    time: Time | undefined\n    value: number | string | undefined\n}\n\nconst valuesAtTimes = (\n    valueByTime: Map<number, string | number>,\n    targetTimes: Time[],\n    tolerance = 0\n): { time: number | undefined; value: string | number | undefined }[] => {\n    const timesAsc = sortNumeric(Array.from(valueByTime.keys()))\n    return targetTimes.map((targetTime) => {\n        const time = findClosestTime(timesAsc, targetTime, tolerance)\n        const value = time === undefined ? undefined : valueByTime.get(time)\n        return {\n            time,\n            value,\n        }\n    })\n}\n\nexport const valuesByEntityAtTimes = (\n    valueByEntityAndTime: Map<string, Map<number, string | number>>,\n    targetTimes: Time[],\n    tolerance = 0\n): Map<string, DataValue[]> =>\n    es6mapValues(valueByEntityAndTime, (valueByTime) =>\n        valuesAtTimes(valueByTime, targetTimes, tolerance)\n    )\n\nconst MS_PER_DAY = 1000 * 60 * 60 * 24\n\n// From https://stackoverflow.com/a/15289883\nexport function dateDiffInDays(a: Date, b: Date): number {\n    // Discard the time and time-zone information.\n    const utca = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate())\n    const utcb = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate())\n    return Math.floor((utca - utcb) / MS_PER_DAY)\n}\n\nexport const diffDateISOStringInDays = (a: string, b: string): number =>\n    dayjs.utc(a).diff(dayjs.utc(b), \"day\")\n\nexport const getYearFromISOStringAndDayOffset = (\n    epoch: string,\n    daysOffset: number\n): number => {\n    const date = dayjs.utc(epoch).add(daysOffset, \"day\")\n    return date.year()\n}\n\nexport const sleep = (ms: number): Promise<void> =>\n    new Promise((resolve) => setTimeout(resolve, ms))\n\ninterface RetryOptions {\n    maxRetries?: number\n    exponentialBackoff?: boolean\n    initialDelay?: number\n}\n\nexport async function fetchWithRetry(\n    url: string,\n    fetchOptions?: RequestInit,\n    retryOptions?: RetryOptions\n): Promise<Response> {\n    const defaultRetryOptions: RetryOptions = {\n        maxRetries: 5,\n        exponentialBackoff: true,\n        initialDelay: 250,\n    }\n    return retryPromise(\n        () => fetch(url, fetchOptions),\n        retryOptions ?? defaultRetryOptions\n    )\n}\nexport async function retryPromise<T>(\n    promiseGetter: () => Promise<T>,\n    {\n        maxRetries = 3,\n        exponentialBackoff = false,\n        initialDelay = 200,\n    }: RetryOptions = {}\n): Promise<T> {\n    let retried = 0\n    let lastError\n    let delay = initialDelay\n\n    while (retried++ < maxRetries) {\n        try {\n            return await promiseGetter()\n        } catch (error) {\n            lastError = error\n            if (exponentialBackoff && retried < maxRetries) {\n                await sleep(delay)\n                delay *= 2 // Double the delay for next retry\n            }\n        }\n    }\n    throw lastError\n}\n\nexport function parseIntOrUndefined(s: string | undefined): number | undefined {\n    if (s === undefined) return undefined\n    const value = parseInt(s)\n    return isNaN(value) ? undefined : value\n}\n\nexport function parseFloatOrUndefined(\n    s: string | undefined\n): number | undefined {\n    if (s === undefined) return undefined\n    const value = parseFloat(s)\n    return isNaN(value) ? undefined : value\n}\n\nexport const anyToString = (value: unknown): string => {\n    if (typeof value === \"undefined\" || value === null) return \"\"\n    return String(value)\n}\n\n// Scroll Helpers\n// Borrowed from: https://github.com/JedWatson/react-select/blob/32ad5c040b/packages/react-select/src/utils.js\n\nfunction isDocumentElement(el: HTMLElement): boolean {\n    return [document.documentElement, document.body].includes(el)\n}\n\nfunction scrollTo(el: HTMLElement, top: number): void {\n    // with a scroll distance, we perform scroll on the element\n    if (isDocumentElement(el)) {\n        window.scrollTo(0, top)\n        return\n    }\n\n    el.scrollTop = top\n}\n\nexport function scrollIntoViewIfNeeded(\n    containerEl: HTMLElement,\n    focusedEl: HTMLElement\n): void {\n    const menuRect = containerEl.getBoundingClientRect()\n    const focusedRect = focusedEl.getBoundingClientRect()\n    const overScroll = focusedEl.offsetHeight / 3\n\n    if (focusedRect.bottom + overScroll > menuRect.bottom) {\n        scrollTo(\n            containerEl,\n            Math.min(\n                focusedEl.offsetTop +\n                    focusedEl.clientHeight -\n                    containerEl.offsetHeight +\n                    overScroll,\n                containerEl.scrollHeight\n            )\n        )\n    } else if (focusedRect.top - overScroll < menuRect.top) {\n        scrollTo(containerEl, Math.max(focusedEl.offsetTop - overScroll, 0))\n    }\n}\n\nexport function rollingMap<T, U>(array: T[], mapper: (a: T, b: T) => U): U[] {\n    const result: U[] = []\n    if (array.length <= 1) return result\n    for (let i = 0; i < array.length - 1; i++) {\n        result.push(mapper(array[i], array[i + 1]))\n    }\n    return result\n}\n\nexport function keyMap<Key, Value>(\n    array: Value[],\n    accessor: (v: Value) => Key\n): Map<Key, Value> {\n    const result = new Map<Key, Value>()\n    array.forEach((item) => {\n        const key = accessor(item)\n        if (!result.has(key)) {\n            result.set(key, item)\n        }\n    })\n    return result\n}\n\nexport const intersectionOfSets = <T>(sets: Set<T>[]): Set<T> => {\n    if (!sets.length) return new Set<T>()\n    const intersection = new Set<T>(sets[0])\n\n    sets.slice(1).forEach((set) => {\n        for (const elem of intersection) {\n            if (!set.has(elem)) {\n                intersection.delete(elem)\n            }\n        }\n    })\n    return intersection\n}\n\nexport const differenceOfSets = <T>(sets: Set<T>[]): Set<T> => {\n    if (!sets.length) return new Set<T>()\n    const diff = new Set<T>(sets[0])\n\n    sets.slice(1).forEach((set) => {\n        for (const elem of set) {\n            diff.delete(elem)\n        }\n    })\n    return diff\n}\n\nexport const areSetsEqual = <T>(setA: Set<T>, setB: Set<T>): boolean =>\n    setA.size === setB.size && [...setA].every((value) => setB.has(value))\n\n/** Tests whether the first argument is a strict subset of the second. The arguments do not have\n    to be sets yet, they can be any iterable. Sets will be created by the function internally */\nexport function isSubsetOf<T>(\n    subsetIter: Iterable<T>,\n    supersetIter: Iterable<T>\n): boolean {\n    const subset = new Set(subsetIter)\n    const superset = new Set(supersetIter)\n    return intersectionOfSets([subset, superset]).size === subset.size\n}\n\n// ES6 is now significantly faster than lodash's intersection\nexport const intersection = <T>(...arrs: T[][]): T[] => {\n    if (arrs.length === 0) return []\n    if (arrs.length === 1) return arrs[0]\n    if (arrs.length === 2) {\n        const set = new Set(arrs[0])\n        return arrs[1].filter((value) => set.has(value))\n    }\n    return intersection(arrs[0], intersection(...arrs.slice(1)))\n}\n\nexport function sortByUndefinedLast<T>(\n    array: T[],\n    accessor: (t: T) => string | number | undefined,\n    order: SortOrder = SortOrder.asc\n): T[] {\n    const sorted = _.sortBy(array, (value) => {\n        const mapped = accessor(value)\n        if (mapped === undefined) {\n            return order === SortOrder.asc ? Infinity : -Infinity\n        }\n        return mapped\n    })\n    return order === SortOrder.asc ? sorted : sorted.reverse()\n}\n\nexport const mapNullToUndefined = <T>(\n    array: (T | undefined | null)[]\n): (T | undefined)[] => array.map((v) => (v === null ? undefined : v))\n\nexport const lowerCaseFirstLetterUnlessAbbreviation = (str: string): string =>\n    str.charAt(1).match(/[A-Z]/)\n        ? str\n        : str.charAt(0).toLowerCase() + str.slice(1)\n\n/**\n * Use with caution - please note that this sort function only sorts on numeric data, and that sorts\n * **in-place** and **not stable**.\n * If you need a more general sort function that is stable and leaves the original array untouched,\n * please use lodash's `sortBy` instead. This function is faster, though.\n */\nexport const sortNumeric = <T>(\n    arr: T[],\n    sortByFn: (el: T) => number = _.identity,\n    sortOrder: SortOrder = SortOrder.asc\n): T[] =>\n    arr.sort(\n        sortOrder === SortOrder.asc\n            ? (a: T, b: T): number => sortByFn(a) - sortByFn(b)\n            : (a: T, b: T): number => sortByFn(b) - sortByFn(a)\n    )\n\nexport function getClosestTimePairs(\n    sortedTimesA: Time[],\n    sortedTimesB: Time[],\n    maxDiff: Integer = Infinity\n): [number, number][] {\n    if (sortedTimesA.length === 0 || sortedTimesB.length === 0) return []\n\n    const decidedPairs: [Time, Time][] = []\n    const undecidedPairs: [Time, Time][] = []\n\n    let indexB = 0\n\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let indexA = 0; indexA < sortedTimesA.length; indexA++) {\n        const timeA = sortedTimesA[indexA]\n\n        const closestIndexInB = sortedFindClosestIndex(\n            sortedTimesB,\n            timeA,\n            indexB\n        )\n\n        /**\n         * the index that holds the value that is definitely lower than timeA, the candidate time\n         */\n        const lowCandidateIndexB =\n            sortedTimesB[closestIndexInB] < timeA\n                ? closestIndexInB\n                : closestIndexInB > indexB\n                  ? closestIndexInB - 1\n                  : undefined\n\n        /**\n         * the index that holds the value that is definitely equal to or greater than timeA, the candidate time\n         */\n        const highCandidateIndexB =\n            sortedTimesB[closestIndexInB] >= timeA ? closestIndexInB : undefined\n\n        if (\n            lowCandidateIndexB !== undefined &&\n            highCandidateIndexB !== undefined &&\n            timeA - sortedTimesB[lowCandidateIndexB] <= maxDiff &&\n            timeA - sortedTimesB[lowCandidateIndexB] <\n                sortedTimesB[highCandidateIndexB] - timeA\n        ) {\n            decidedPairs.push([timeA, sortedTimesB[lowCandidateIndexB]])\n        } else if (\n            highCandidateIndexB !== undefined &&\n            timeA === sortedTimesB[highCandidateIndexB]\n        ) {\n            decidedPairs.push([timeA, sortedTimesB[highCandidateIndexB]])\n        } else {\n            if (\n                lowCandidateIndexB !== undefined &&\n                timeA - sortedTimesB[lowCandidateIndexB] <= maxDiff\n            ) {\n                undecidedPairs.push([timeA, sortedTimesB[lowCandidateIndexB]])\n            }\n            if (\n                highCandidateIndexB !== undefined &&\n                sortedTimesB[highCandidateIndexB] - timeA <= maxDiff\n            ) {\n                undecidedPairs.push([timeA, sortedTimesB[highCandidateIndexB]])\n            }\n        }\n\n        indexB = closestIndexInB\n    }\n\n    const seenTimes = new Set(decidedPairs.flat())\n\n    sortNumeric(undecidedPairs, (pair) => Math.abs(pair[0] - pair[1])).forEach(\n        (pair) => {\n            if (!seenTimes.has(pair[0]) && !seenTimes.has(pair[1])) {\n                decidedPairs.push(pair)\n                seenTimes.add(pair[0])\n                seenTimes.add(pair[1])\n            }\n        }\n    )\n\n    return decidedPairs\n}\n\nexport const omitUndefinedValues = <T>(object: T): NoUndefinedValues<T> => {\n    const result: any = {}\n    for (const key in object) {\n        if (object[key] !== undefined) result[key] = object[key]\n    }\n    return result\n}\n\nexport function omitUndefinedValuesRecursive<T extends Record<string, any>>(\n    obj: T\n): NoUndefinedValues<T> {\n    const result: any = {}\n    for (const key in obj) {\n        if (R.isPlainObject(obj[key])) {\n            // re-apply the function if we encounter a non-empty object\n            result[key] = omitUndefinedValuesRecursive(obj[key])\n        } else if (obj[key] === undefined) {\n            // omit undefined values\n        } else {\n            // otherwise, keep the value\n            result[key] = obj[key]\n        }\n    }\n    return result\n}\n\nexport function omitEmptyObjectsRecursive<T extends Record<string, any>>(\n    obj: T\n): Partial<T> {\n    const result: any = {}\n    for (const key in obj) {\n        if (R.isPlainObject(obj[key])) {\n            const isObjectEmpty = _.isEmpty(omitEmptyObjectsRecursive(obj[key]))\n            if (!isObjectEmpty) result[key] = obj[key]\n        } else {\n            result[key] = obj[key]\n        }\n    }\n    return result\n}\n\nexport const isInIFrame = (): boolean => {\n    try {\n        return window.self !== window.top\n    } catch {\n        return false\n    }\n}\n\nexport const differenceObj = <A extends Record<string, unknown>>(\n    obj: A,\n    defaultObj: Record<string, unknown>\n): Partial<A> => {\n    const result: Partial<A> = {}\n    for (const key in obj) {\n        if (defaultObj[key] !== obj[key]) {\n            result[key] = obj[key]\n        }\n    }\n    return result\n}\n\nexport const findDOMParent = (\n    el: HTMLElement,\n    condition: (el: HTMLElement) => boolean\n): HTMLElement | null => {\n    let current: HTMLElement | null = el\n    while (current) {\n        if (condition(current)) return current\n        current = current.parentElement\n    }\n    return null\n}\n\nexport const wrapInDiv = (el: Element, classes?: string[]): Element => {\n    if (!el.parentNode) return el\n    const wrapper = document.createElement(\"div\")\n    if (classes) wrapper.classList.add(...classes)\n    el.parentNode.insertBefore(wrapper, el)\n    wrapper.appendChild(el)\n    return wrapper\n}\n\nexport const textAnchorFromAlign = (\n    align: HorizontalAlign\n): \"start\" | \"middle\" | \"end\" => {\n    if (align === HorizontalAlign.center) return \"middle\"\n    if (align === HorizontalAlign.right) return \"end\"\n    return \"start\"\n}\n\nexport const dyFromAlign = (align: VerticalAlign): string => {\n    if (align === VerticalAlign.middle) return \".32em\"\n    if (align === VerticalAlign.bottom) return \".71em\"\n    return \"0\"\n}\n\nexport function stringifyUnknownError(error: unknown): string | undefined {\n    if (error === undefined || error === null) return undefined\n    if (error instanceof Error) {\n        return `${error.name}: ${error.message}`\n    }\n    if (typeof error === \"function\") {\n        // Within this branch, `error` has type `Function`,\n        // so we can access the function's `name` property\n        const functionName = error.name || \"(anonymous)\"\n        return `[function ${functionName}]`\n    }\n\n    if (error instanceof Date) {\n        // Within this branch, `error` has type `Date`,\n        // so we can call the `toISOString` method\n        return error.toISOString()\n    }\n\n    if (typeof error === \"object\" && !Array.isArray(error) && error !== null) {\n        if (Object.prototype.hasOwnProperty.call(error, \"message\")) {\n            // Within this branch, `error` is an object with the `message`\n            // property, so we can access the object's `message` property.\n            return (error as any).message\n        } else {\n            // Otherwise, `error` is an object with an unknown structure, so\n            // we stringify it.\n            return JSON.stringify(error)\n        }\n    }\n\n    return String(error)\n}\n\n/**\n * Turns a 2D array that is not necessarily rectangular into a rectangular array\n * by appending missing values and filling them with `fill`.\n */\nexport function toRectangularMatrix<T, F>(arr: T[][], fill: F): (T | F)[][] {\n    if (arr.length === 0) return []\n    const width = _.max(arr.map((row) => row.length)) as number\n\n    return arr.map((row) => {\n        if (row.length < width)\n            return [...row, ...Array(width - row.length).fill(fill)]\n        else return row\n    })\n}\n\nexport function checkIsStringIndexable(\n    x: unknown\n): x is Record<string, unknown> {\n    return R.isPlainObject(x) || R.isArray(x)\n}\n\nexport function checkIsTouchEvent(\n    event: unknown\n): event is React.TouchEvent | TouchEvent {\n    if (_.isObject(event)) {\n        return \"targetTouches\" in event\n    }\n    return false\n}\n\nexport const triggerDownloadFromBlob = (filename: string, blob: Blob): void => {\n    const objectUrl = URL.createObjectURL(blob)\n    triggerDownloadFromUrl(filename, objectUrl)\n    URL.revokeObjectURL(objectUrl)\n}\n\nexport const triggerDownloadFromUrl = (filename: string, url: string): void => {\n    const downloadLink = document.createElement(\"a\")\n    downloadLink.setAttribute(\"href\", url)\n    downloadLink.setAttribute(\"download\", filename)\n    downloadLink.click()\n}\n\nexport async function downloadImage(\n    url: string,\n    filename: string\n): Promise<void> {\n    const response = await fetch(url)\n    const blob = await response.blob()\n    triggerDownloadFromBlob(filename, blob)\n}\n\nexport const removeAllWhitespace = (text: string): string => {\n    return text.replace(/\\s+|\\n/g, \"\")\n}\n\nexport function moveArrayItemToIndex<Item>(\n    arr: Item[],\n    fromIndex: number,\n    toIndex: number\n): Item[] {\n    const newArray = Array.from(arr)\n    const [removed] = newArray.splice(fromIndex, 1)\n    newArray.splice(toIndex, 0, removed)\n    return newArray\n}\n\nexport const getIndexableKeys = Object.keys as <T extends object>(\n    obj: T\n) => Array<keyof T>\n\n/** Formats a date like this: \"October 6, 2024\"\n */\nexport const formatDate = (date: Date): string => {\n    return date.toLocaleDateString(\"en-US\", {\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\",\n    })\n}\n\n/**\n *\n * Parses a gdoc article JSON with non-primitive types (Date)\n *\n * Note: if dates could also be found deeper in the JSON, it could make sense to\n * write a custom JSON parser to handle that automatically for all keys. At this\n * stage, the manual approach is probably simpler.\n */\nexport const getOwidGdocFromJSON = (json: OwidGdocJSON): OwidGdoc => {\n    return {\n        ...json,\n        createdAt: new Date(json.createdAt),\n        publishedAt: json.publishedAt ? new Date(json.publishedAt) : null,\n        updatedAt: json.updatedAt ? new Date(json.updatedAt) : null,\n    }\n}\n\n// We want to infer the return type from the existing types instead of having to\n// manually specify it.\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport function extractGdocPageData(gdoc: OwidGdoc) {\n    // Generic properties every gdoc has\n    const gdocProps = R.pick(gdoc, [\n        \"id\",\n        \"slug\",\n        \"content\",\n        \"contentMd5\",\n        \"createdAt\",\n        \"updatedAt\",\n        \"published\",\n        \"publishedAt\",\n        \"breadcrumbs\",\n        \"manualBreadcrumbs\",\n        \"tags\",\n    ])\n\n    // Also generic properties. A separate function call because R.pick can only take so many arguments before TS complains\n    const attachmentProps = R.pick(gdoc, [\n        \"linkedAuthors\",\n        \"linkedDocuments\",\n        \"linkedStaticViz\",\n        \"linkedCharts\",\n        \"linkedNarrativeCharts\",\n        \"linkedIndicators\",\n        \"linkedCallouts\",\n        \"imageMetadata\",\n        \"relatedCharts\",\n    ])\n\n    const commonProps = {\n        ...gdocProps,\n        ...attachmentProps,\n    }\n\n    return match(gdoc)\n        .when(checkIsAboutPage, (aboutGdoc) => {\n            return {\n                ...commonProps,\n                ...R.pick(aboutGdoc, [\"donors\"]),\n            }\n        })\n        .when(checkIsHomepage, (homepageGdoc) => {\n            return {\n                ...commonProps,\n                ...R.pick(homepageGdoc, [\n                    \"homepageMetadata\",\n                    \"latestDataInsights\",\n                ]),\n            }\n        })\n        .when(checkIsDataInsight, (dataInsightGdoc) => {\n            return {\n                ...commonProps,\n                ...R.pick(dataInsightGdoc, [\"latestDataInsights\"]),\n            }\n        })\n        .when(checkIsAuthor, (authorGdoc) => {\n            return {\n                ...commonProps,\n                ...R.pick(authorGdoc, [\"latestWorkLinks\"]),\n            }\n        })\n        .otherwise(() => commonProps)\n}\n\nexport type OwidGdocPageProps = ReturnType<typeof extractGdocPageData>\n\nexport type OwidGdocPageData = Omit<\n    OwidGdocPageProps,\n    \"createdAt\" | \"publishedAt\" | \"updatedAt\"\n> & {\n    createdAt: string\n    publishedAt: string | null\n    updatedAt: string | null\n}\n\nexport function deserializeOwidGdocPageData(\n    json: OwidGdocPageData\n): OwidGdocPageProps {\n    // NOTE: We have to do manual type casting around the content.type property\n    // because it can be undefined in OwidGdocPostContent. That makes sense\n    // during the gdoc creation, where we do manual validation for various\n    // properties. But at some point we should only pass around a valid gdoc\n    // where content.type can't be undefined anymore. So we should likely create\n    // a new type for that use case and use the less strict type only until we\n    // do the validation.\n    return {\n        ...json,\n        createdAt: new Date(json.createdAt),\n        publishedAt: json.publishedAt ? new Date(json.publishedAt) : null,\n        updatedAt: json.updatedAt ? new Date(json.updatedAt) : null,\n    } as OwidGdocPageProps\n}\n\n// Checking whether we have clipboard write access is surprisingly complicated.\n// For example, if a chart is embedded in an iframe, then Chrome will prevent the\n// use of clipboard.writeText() unless the iframe has allow=\"clipboard-write\".\n// On the other hand, Firefox and Safari haven't implemented the Permissions API\n// for \"clipboard-write\", so we need to handle that case gracefully.\n// See https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API#browser_compatibility\nexport const canWriteToClipboard = async (): Promise<boolean> => {\n    if (!(\"clipboard\" in navigator)) return false\n\n    if (\"permissions\" in navigator) {\n        // Is Permissions API implemented?\n\n        try {\n            // clipboard-write permission is not supported in all browsers - need to catch that case\n            const res = await navigator.permissions.query({\n                name: \"clipboard-write\" as PermissionName,\n            })\n\n            // Asking permission was successful, we may use clipboard-write methods if permission wasn't denied.\n            return [\"granted\", \"prompt\"].includes(res.state)\n        } catch {\n            // ignore\n        }\n    }\n    // navigator.clipboard is available, but we couldn't check for permissions -- assume we can use it.\n    return true\n}\n\n/** Function to copy to clipboard. This uses the new Clipboard API if it is available.\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n    const useModernClipboardApi = await canWriteToClipboard()\n    if (useModernClipboardApi) {\n        // We can use the new clipboard API\n        return navigator.clipboard\n            .writeText(text)\n            .then(() => true)\n            .catch((err) => {\n                console.error(\"Failed to copy text to clipboard\", err)\n                return false\n            })\n    } else {\n        // GPT 4 suggested attempt to work around the lack of clipboard API\n        const textarea = document.createElement(\"textarea\")\n        textarea.value = text\n        textarea.style.position = \"fixed\"\n        textarea.style.opacity = \"0\"\n        document.body.appendChild(textarea)\n        textarea.focus()\n        textarea.select()\n\n        try {\n            return document.execCommand(\"copy\")\n        } catch (err) {\n            console.error(\"Failed to copy text to clipboard\", err)\n            return false\n        } finally {\n            document.body.removeChild(textarea)\n        }\n    }\n}\n\n// Memoization for immutable getters. Run the function once for this instance and cache the result.\nexport const imemo = <Type, This extends Record<string, any>>(\n    target: () => Type,\n    context: ClassGetterDecoratorContext<This, Type>\n) => {\n    const { name } = context\n    const propName = `${String(name)}_memoized`\n\n    return function (this: This): Type {\n        if (propName in this) {\n            return this[propName]\n        }\n        const value = target.call(this)\n        Object.defineProperty(this, propName, {\n            configurable: false,\n            enumerable: false,\n            writable: false,\n            value,\n        })\n        return value\n    }\n}\n\n// A decorator to log the evaluation time of a class method or class getter.\nexport function logPerf(\n    target: ((...args: any[]) => any) | ClassAccessorDecoratorTarget<any, any>,\n    context:\n        | ClassMethodDecoratorContext\n        | ClassAccessorDecoratorContext\n        | ClassGetterDecoratorContext\n): ((...args: any[]) => any) | ClassAccessorDecoratorResult<any, any> {\n    const { name, kind } = context\n    const propertyKey = String(name)\n\n    const logPerfWrapper = (fn: () => unknown, ...log: unknown[]): unknown => {\n        // eslint-disable-next-line no-console\n        console.log(\"⏱︎▶️ logging\", propertyKey, ...log)\n        const start = performance.now()\n        const result = fn()\n        const end = performance.now()\n        // eslint-disable-next-line no-console\n        console.log(\n            `⏱︎🏁 Perf: ${propertyKey} took ${(end - start).toFixed(3)}ms`\n        )\n        return result\n    }\n\n    if (kind === \"method\") {\n        const methodTarget = target as (...args: any[]) => any\n        return function (this: any, ...args: unknown[]): unknown {\n            return logPerfWrapper(() => methodTarget.apply(this, args), args)\n        }\n    } else if (kind === \"getter\") {\n        const getterTarget = target as () => any\n        return function (this: any): unknown {\n            return logPerfWrapper(() => getterTarget.call(this))\n        }\n    } else if (kind === \"accessor\") {\n        const accessorTarget = target as ClassAccessorDecoratorTarget<any, any>\n        return {\n            get(this: any): unknown {\n                return logPerfWrapper(() => accessorTarget.get.call(this))\n            },\n            set: accessorTarget.set,\n        }\n    }\n\n    return target\n}\n\n// A decorator to bind methods to the class instance, ensuring 'this' is always correct\nexport function bind<This, Args extends any[], Return>(\n    target: (this: This, ...args: Args) => Return,\n    context: ClassMethodDecoratorContext<\n        This,\n        (this: This, ...args: Args) => Return\n    >\n): (this: This, ...args: Args) => Return {\n    const { name } = context\n\n    context.addInitializer(function (this: This) {\n        const boundMethod = target.bind(this)\n        // Store the bound method on the instance\n        Object.defineProperty(this, name, {\n            value: boundMethod,\n            writable: false,\n            enumerable: false,\n            configurable: true,\n        })\n    })\n\n    return target\n}\n\n// These are all the types that we need to be able to iterate through to extract their URLs/filenames.\n// It's more than just the EnrichedBlocks and Spans, because some EnrichedBlocks have nested children\n// that contain URLs/filenames\nexport type NodeWithUrl =\n    | OwidEnrichedGdocBlock\n    | Span\n    | EnrichedHybridLink\n    | EnrichedTopicPageIntroRelatedTopic\n    | EnrichedTopicPageIntroDownloadButton\n    | EnrichedBlockKeyInsightsSlide\n\nexport function recursivelyMapArticleContent(\n    node: NodeWithUrl,\n    callback: (node: NodeWithUrl) => NodeWithUrl\n): NodeWithUrl {\n    if (checkNodeIsSpan(node)) {\n        if (\"children\" in node) {\n            node.children.map((node) =>\n                recursivelyMapArticleContent(node, callback)\n            )\n        }\n    } else if (node.type === \"gray-section\") {\n        node.items.map((block) => recursivelyMapArticleContent(block, callback))\n    } else if (node.type === \"conditional-section\") {\n        node.content.map((block) =>\n            recursivelyMapArticleContent(block, callback)\n        )\n    } else if (\n        node.type === \"sticky-left\" ||\n        node.type === \"sticky-right\" ||\n        node.type === \"side-by-side\"\n    ) {\n        node.left.map((node) => recursivelyMapArticleContent(node, callback))\n        node.right.map((node) => recursivelyMapArticleContent(node, callback))\n    } else if (node.type === \"text\") {\n        node.value.map((node) => recursivelyMapArticleContent(node, callback))\n    } else if (node.type === \"additional-charts\") {\n        node.items.map((spans) =>\n            spans.map((span) => recursivelyMapArticleContent(span, callback))\n        )\n    } else if (node.type === \"chart-story\") {\n        node.items.map((item) =>\n            recursivelyMapArticleContent(item.chart, callback)\n        )\n    } else if (node.type === \"recirc\") {\n        node.links.map((link) => callback(link))\n    } else if (node.type === \"topic-page-intro\") {\n        const { downloadButton, relatedTopics, content } = node\n        if (downloadButton) callback(downloadButton)\n        if (relatedTopics) relatedTopics.forEach(callback)\n        content.forEach(callback)\n    } else if (node.type === \"key-insights\") {\n        node.insights.forEach((insight) => {\n            callback(insight)\n            insight.content.forEach(callback)\n        })\n    }\n\n    return callback(node)\n}\n\nexport function traverseEnrichedSpan(\n    span: Span,\n    callback: (x: Span) => void\n): void {\n    match(span)\n        .with({ children: P.any }, (span) => {\n            callback(span)\n            span.children.forEach((child) =>\n                traverseEnrichedSpan(child, callback)\n            )\n        })\n        .with({ spanType: \"span-simple-text\" }, (simpleSpan) => {\n            callback(simpleSpan)\n        })\n        .with({ spanType: \"span-newline\" }, (newlineSpan) => {\n            callback(newlineSpan)\n        })\n        .exhaustive()\n}\n\n// If your node is a OwidEnrichedGdocBlock, the callback will apply to it\n// If your node has children that are Spans, the spanCallback will apply to them\n// If your node has children that aren't OwidEnrichedGdocBlocks or Spans\n// you'll have to handle those children yourself in your callback\nexport function traverseEnrichedBlock(\n    node: OwidEnrichedGdocBlock,\n    callback: (x: OwidEnrichedGdocBlock) => void,\n    spanCallback?: (x: Span) => void\n): void {\n    match(node)\n        .with(\n            { type: P.union(\"sticky-right\", \"sticky-left\", \"side-by-side\") },\n            (container) => {\n                callback(container)\n                container.left.forEach((leftNode) =>\n                    traverseEnrichedBlock(leftNode, callback, spanCallback)\n                )\n                container.right.forEach((rightNode) =>\n                    traverseEnrichedBlock(rightNode, callback, spanCallback)\n                )\n            }\n        )\n        .with({ type: \"gray-section\" }, (graySection) => {\n            callback(graySection)\n            graySection.items.forEach((node) =>\n                traverseEnrichedBlock(node, callback, spanCallback)\n            )\n        })\n        .with({ type: \"explore-data-section\" }, (exploreDataSection) => {\n            callback(exploreDataSection)\n            exploreDataSection.content.forEach((node) =>\n                traverseEnrichedBlock(node, callback, spanCallback)\n            )\n        })\n        .with({ type: \"conditional-section\" }, (conditional) => {\n            callback(conditional)\n            conditional.content.forEach((node) =>\n                traverseEnrichedBlock(node, callback, spanCallback)\n            )\n        })\n        .with({ type: \"key-insights\" }, (keyInsights) => {\n            callback(keyInsights)\n            keyInsights.insights.forEach((insight) =>\n                insight.content.forEach((node) =>\n                    traverseEnrichedBlock(node, callback, spanCallback)\n                )\n            )\n        })\n        .with({ type: \"expander\" }, (expander) => {\n            callback(expander)\n            expander.content.forEach((block) =>\n                traverseEnrichedBlock(block, callback, spanCallback)\n            )\n        })\n        .with({ type: \"callout\" }, (callout) => {\n            callback(callout)\n            if (spanCallback) {\n                callout.text.forEach((textBlock) =>\n                    traverseEnrichedBlock(textBlock, callback, spanCallback)\n                )\n            }\n        })\n        .with({ type: \"aside\" }, (aside) => {\n            callback(aside)\n            if (spanCallback) {\n                aside.caption.forEach((span) =>\n                    traverseEnrichedSpan(span, spanCallback)\n                )\n            }\n        })\n        .with({ type: \"list\" }, (list) => {\n            callback(list)\n            if (spanCallback) {\n                list.items.forEach((textBlock) =>\n                    traverseEnrichedBlock(textBlock, callback, spanCallback)\n                )\n            }\n        })\n        .with({ type: \"numbered-list\" }, (numberedList) => {\n            callback(numberedList)\n            if (spanCallback) {\n                numberedList.items.forEach((textBlock) =>\n                    traverseEnrichedBlock(textBlock, callback, spanCallback)\n                )\n            }\n        })\n        .with({ type: \"text\" }, (textNode) => {\n            callback(textNode)\n            if (spanCallback) {\n                textNode.value.forEach((span) => {\n                    traverseEnrichedSpan(span, spanCallback)\n                })\n            }\n        })\n        .with({ type: \"simple-text\" }, (simpleTextNode) => {\n            if (spanCallback) {\n                spanCallback(simpleTextNode.value)\n            }\n        })\n        .with({ type: \"additional-charts\" }, (additionalCharts) => {\n            callback(additionalCharts)\n            if (spanCallback) {\n                additionalCharts.items.forEach((spans) => {\n                    spans.forEach((span) =>\n                        traverseEnrichedSpan(span, spanCallback)\n                    )\n                })\n            }\n        })\n        .with({ type: \"heading\" }, (heading) => {\n            callback(heading)\n            if (spanCallback) {\n                heading.text.forEach((span) => {\n                    traverseEnrichedSpan(span, spanCallback)\n                })\n            }\n        })\n        .with({ type: \"expandable-paragraph\" }, (expandableParagraph) => {\n            callback(expandableParagraph)\n            expandableParagraph.items.forEach((textBlock) => {\n                traverseEnrichedBlock(textBlock, callback, spanCallback)\n            })\n        })\n        .with({ type: \"guided-chart\" }, (guidedChart) => {\n            callback(guidedChart)\n            guidedChart.content.forEach((block) => {\n                traverseEnrichedBlock(block, callback, spanCallback)\n            })\n        })\n        .with({ type: \"align\" }, (align) => {\n            callback(align)\n            align.content.forEach((node) => {\n                traverseEnrichedBlock(node, callback, spanCallback)\n            })\n        })\n        .with({ type: \"table\" }, (table) => {\n            callback(table)\n            table.rows.forEach((row) => {\n                row.cells.forEach((cell) => {\n                    cell.content.forEach((node) => {\n                        traverseEnrichedBlock(node, callback, spanCallback)\n                    })\n                })\n            })\n        })\n        .with({ type: \"blockquote\" }, (blockquote) => {\n            callback(blockquote)\n            blockquote.text.forEach((node) => {\n                traverseEnrichedBlock(node, callback, spanCallback)\n            })\n        })\n        .with(\n            {\n                type: \"key-indicator\",\n            },\n            (keyIndicator) => {\n                callback(keyIndicator)\n                keyIndicator.text.forEach((node) => {\n                    traverseEnrichedBlock(node, callback, spanCallback)\n                })\n            }\n        )\n        .with(\n            { type: \"key-indicator-collection\" },\n            (keyIndicatorCollection) => {\n                callback(keyIndicatorCollection)\n                keyIndicatorCollection.blocks.forEach((node) =>\n                    traverseEnrichedBlock(node, callback, spanCallback)\n                )\n            }\n        )\n        .with({ type: \"people\" }, (people) => {\n            callback(people)\n            for (const item of people.items) {\n                traverseEnrichedBlock(item, callback, spanCallback)\n            }\n        })\n        .with({ type: \"people-rows\" }, (peopleRows) => {\n            callback(peopleRows)\n            for (const person of peopleRows.people) {\n                traverseEnrichedBlock(person, callback, spanCallback)\n            }\n        })\n        .with({ type: \"person\" }, (person) => {\n            callback(person)\n            for (const node of person.text) {\n                traverseEnrichedBlock(node, callback, spanCallback)\n            }\n        })\n        .with({ type: \"data-callout\" }, (dataCallout) => {\n            callback(dataCallout)\n            for (const node of dataCallout.content) {\n                traverseEnrichedBlock(node, callback, spanCallback)\n            }\n        })\n        .with(\n            {\n                type: P.union(\n                    \"chart-story\",\n                    \"chart\",\n                    \"narrative-chart\",\n                    \"code\",\n                    \"cookie-notice\",\n                    \"cta\",\n                    \"donors\",\n                    \"horizontal-rule\",\n                    \"html\",\n                    \"script\",\n                    \"image\",\n                    \"video\",\n                    \"missing-data\",\n                    \"prominent-link\",\n                    \"pull-quote\",\n                    \"recirc\",\n                    \"subscribe-banner\",\n                    \"resource-panel\",\n                    \"research-and-writing\",\n                    \"sdg-grid\",\n                    \"sdg-toc\",\n                    \"ltp-toc\",\n                    \"topic-page-intro\",\n                    \"all-charts\",\n                    \"entry-summary\",\n                    \"explorer-tiles\",\n                    \"pill-row\",\n                    \"homepage-search\",\n                    \"homepage-intro\",\n                    \"featured-metrics\",\n                    \"featured-data-insights\",\n                    \"latest-data-insights\",\n                    \"socials\",\n                    \"static-viz\",\n                    \"country-profile-selector\",\n                    \"bespoke-component\"\n                ),\n            },\n            callback\n        )\n        .exhaustive()\n}\n\nexport function checkNodeIsSpan(node: NodeWithUrl): node is Span {\n    return \"spanType\" in node\n}\n\nexport function spansToUnformattedPlainText(spans: Span[]): string {\n    return spans\n        .map((span) =>\n            match(span)\n                .with({ spanType: \"span-simple-text\" }, (span) => span.text)\n                .with(\n                    {\n                        spanType: P.union(\n                            \"span-link\",\n                            \"span-callout\",\n                            \"span-italic\",\n                            \"span-bold\",\n                            \"span-fallback\",\n                            \"span-quote\",\n                            \"span-superscript\",\n                            \"span-subscript\",\n                            \"span-underline\",\n                            \"span-ref\",\n                            \"span-dod\",\n                            \"span-guided-chart-link\"\n                        ),\n                    },\n                    (span) => spansToUnformattedPlainText(span.children)\n                )\n                .with({ spanType: \"span-newline\" }, () => \"\")\n                .exhaustive()\n        )\n        .join(\"\")\n}\n\nexport function generateToc(\n    body: OwidEnrichedGdocBlock[] | undefined,\n    isTocForLinearTopicPage: boolean = false\n): TocHeadingWithTitleSupertitle[] {\n    if (!body) return []\n\n    // For linear topic pages, we record only h1s\n    // For the sdg-toc, we record h2s & h3s (as it was developed before we decided to use h1s as our top level heading)\n    // It would be nice to standardise this but it would require a migration, updating CSS, updating Gdocs, etc.\n    const [primary, secondary] = isTocForLinearTopicPage\n        ? [1, undefined]\n        : [2, 3]\n    const toc: TocHeadingWithTitleSupertitle[] = []\n\n    body.forEach((block) =>\n        traverseEnrichedBlock(block, (child) => {\n            if (child.type === \"heading\") {\n                const { level, text, supertitle } = child\n                const titleString = spansToUnformattedPlainText(text)\n                const supertitleString = supertitle\n                    ? spansToUnformattedPlainText(supertitle)\n                    : \"\"\n                if (titleString && (level === primary || level === secondary)) {\n                    toc.push({\n                        title: titleString,\n                        supertitle: supertitleString,\n                        text: titleString,\n                        slug: urlSlug(`${supertitleString} ${titleString}`),\n                        isSubheading: level === secondary,\n                    })\n                }\n            }\n            if (!isTocForLinearTopicPage) return\n\n            if (child.type === \"all-charts\") {\n                toc.push({\n                    title: child.heading,\n                    text: child.heading,\n                    slug: ALL_CHARTS_ID,\n                    isSubheading: false,\n                })\n                return\n            }\n\n            if (child.type === \"featured-data-insights\") {\n                const title = \"Data insights\"\n                toc.push({\n                    title,\n                    text: title,\n                    slug: FEATURED_DATA_INSIGHTS_ID,\n                    isSubheading: false,\n                })\n                return\n            }\n\n            if (child.type === \"explore-data-section\") {\n                const title = child.title || EXPLORE_DATA_SECTION_DEFAULT_TITLE\n                toc.push({\n                    title,\n                    text: title,\n                    slug: EXPLORE_DATA_SECTION_ID,\n                    isSubheading: false,\n                })\n                return\n            }\n        })\n    )\n\n    return toc\n}\n\nexport function checkIsOwidGdocType(\n    gdocType: unknown\n): gdocType is OwidGdocType {\n    return Object.values(OwidGdocType).includes(gdocType as any)\n}\n\nexport function isArrayOfNumbers(arr: unknown[]): arr is number[] {\n    return arr.every((item) => typeof item === \"number\")\n}\n\nexport function greatestCommonDivisor(a: number, b: number): number {\n    if (a === 0) return Math.abs(b)\n    return greatestCommonDivisor(b % a, a)\n}\n\nexport function findGreatestCommonDivisorOfArray(arr: number[]): number | null {\n    if (arr.length === 0) return null\n    if (arr.includes(1)) return 1\n    return _.uniq(arr).reduce((acc, num) => greatestCommonDivisor(acc, num))\n}\nexport function lowercaseObjectKeys(\n    obj: Record<string, unknown>\n): Record<string, unknown> {\n    return Object.fromEntries(\n        Object.entries(obj).map(([key, value]) => [key.toLowerCase(), value])\n    )\n}\n\n/** Works for:\n * #dod:text\n * #dod:text-hyphenated\n * #dod:text_underscored\n * #dod:text_underscored-and-hyphenated\n * Duplicated in parser.ts\n */\nexport const detailOnDemandRegex = /#dod:([\\w\\-_]+)/\n\nexport const guidedChartRegex = /#guide:(https?:\\/\\/[^\\s]+)/\n\n/**\n * Matches plaintext callout token syntax:\n * $latestTime(shortName)\n * $latestValue(shortName)\n *\n * Group 1: function name (e.g., \"latestTime\", \"latestValue\")\n * Group 2: parameters (e.g., \"shortName\")\n */\nexport const plaintextCalloutRegex =\n    /\\$(latestValueWithUnit|latestValue|latestTime)\\(([^)]*)\\)/g\n\nexport function extractDetailsFromSyntax(str: string): string[] {\n    return [...str.matchAll(new RegExp(detailOnDemandRegex, \"g\"))].map(\n        ([_, term]) => term\n    )\n}\n\n/**\n * If you're using this type guard, make sure you're okay with Fragments\n * See https://github.com/owid/owid-grapher/issues/3426\n */\nexport function checkIsGdocPost(x: unknown): x is OwidGdocPostInterface {\n    const type = _.get(x, \"content.type\") as OwidGdocType | undefined\n    return [\n        OwidGdocType.Article,\n        OwidGdocType.TopicPage,\n        OwidGdocType.LinearTopicPage,\n        OwidGdocType.Fragment,\n        OwidGdocType.AboutPage,\n    ].includes(type as any)\n}\n\n/**\n * Fragments were developed before we had a robust gdoc type system in place\n * Use this function when you want to be sure you're dealing with published editorial content\n * and not just content that has the right shape\n * See https://github.com/owid/owid-grapher/issues/3426\n */\nexport function checkIsGdocPostExcludingFragments(\n    x: unknown\n): x is OwidGdocPostInterface {\n    const type = _.get(x, \"content.type\") as OwidGdocType | undefined\n    return [\n        OwidGdocType.Article,\n        OwidGdocType.TopicPage,\n        OwidGdocType.LinearTopicPage,\n        OwidGdocType.AboutPage,\n    ].includes(type as any)\n}\n\nexport function checkIsDataInsight(\n    gdoc: OwidGdoc\n): gdoc is OwidGdocDataInsightInterface {\n    return gdoc.content.type === OwidGdocType.DataInsight\n}\n\nexport function checkIsAboutPage(\n    gdoc: OwidGdoc\n): gdoc is OwidGdocAboutInterface {\n    return gdoc.content.type === OwidGdocType.AboutPage\n}\n\nexport function checkIsAuthor(gdoc: OwidGdoc): gdoc is OwidGdocAuthorInterface {\n    return gdoc.content.type === OwidGdocType.Author\n}\n\nexport function checkIsHomepage(\n    gdoc: OwidGdoc\n): gdoc is OwidGdocHomepageInterface {\n    return gdoc.content.type === OwidGdocType.Homepage\n}\n\n/**\n * Posts that should show up in the chronological algolia index\n * for dynamic RSS feeds & /latest page\n */\nexport function checkIsChronologicalFeedPost(gdoc: {\n    content: { type?: OwidGdocType }\n}): gdoc is\n    | OwidGdocPostInterface\n    | OwidGdocDataInsightInterface\n    | OwidGdocAnnouncementInterface {\n    return CHRONOLOGICAL_INDEX_TYPES.has(gdoc.content.type as string)\n}\n\n/**\n * Returns the cartesian product of the given arrays.\n *\n * For example, `cartesian([[\"a\", \"b\"], [\"x\", \"y\"]])` returns `[[\"a\", \"x\"], [\"a\", \"y\"], [\"b\", \"x\"], [\"b\", \"y\"]]`\n */\nexport function cartesian<T>(matrix: T[][]): T[][] {\n    if (matrix.length === 0) return []\n    if (matrix.length === 1) return matrix[0].map((i) => [i])\n    return matrix.reduce<T[][]>(\n        (acc, curr) => acc.flatMap((i) => curr.map((j) => [...i, j])),\n        [[]]\n    )\n}\n\n// Remove any parenthetical content from _the end_ of a string\n// E.g. \"Africa (UN)\" -> \"Africa\"\nexport function removeTrailingParenthetical(str: string): string {\n    return str.replace(/\\s*\\(.*\\)$/, \"\")\n}\n\nconst commafyFormatter = lazy(() => new Intl.NumberFormat(\"en-US\"))\n/**\n * Example: 12000 -> \"12,000\"\n */\nexport function commafyNumber(value: number): string {\n    return commafyFormatter().format(value)\n}\n\nexport function isFiniteWithGuard(value: unknown): value is number {\n    return isFinite(value as any)\n}\n\n/**\n * Collapse all paths to topic tags into a single array of unique parent tag\n * names, including the original tags if they are topics. This is used across\n * all Algolia indexing utilities to ensure comprehensive search results when\n * faceting by topic.\n *\n * Use with getTagHierarchiesByChildName to get the topic hierarchies\n *\n */\nexport const getUniqueNamesFromTagHierarchies = (\n    tagNames: string[],\n    tagHierarchiesByChildName: Record<\n        string,\n        Pick<DbPlainTag, \"id\" | \"name\" | \"slug\">[][]\n    >\n): string[] => {\n    return R.unique(\n        tagNames.flatMap((tagName) =>\n            (tagHierarchiesByChildName[tagName] ?? []) // fallback for non-topic tags\n                .flatMap((tagHierarchy) => tagHierarchy.map((tag) => tag.name))\n        )\n    )\n}\n\nexport function createTagGraph(\n    tagGraphByParentId: Record<number, any>,\n    rootId: number\n): TagGraphRoot {\n    const tagGraph: TagGraphRoot = {\n        id: rootId,\n        name: TagGraphRootName,\n        slug: null,\n        isTopic: false,\n        isSearchable: false,\n        path: [rootId],\n        weight: 0,\n        children: [],\n    }\n\n    function recursivelySetChildren(node: TagGraphNode): TagGraphNode {\n        const children = tagGraphByParentId[node.id]\n        if (!children) return node\n\n        for (const child of children) {\n            const childNode: TagGraphNode = {\n                id: child.childId,\n                path: [...node.path, child.childId],\n                name: child.name,\n                slug: child.slug,\n                isTopic: child.isTopic,\n                isSearchable: child.isSearchable,\n                weight: child.weight,\n                children: [],\n            }\n\n            node.children.push(recursivelySetChildren(childNode))\n        }\n        return node\n    }\n\n    return recursivelySetChildren(tagGraph) as TagGraphRoot\n}\n\nexport const getAllChildrenOfArea = (area: TagGraphNode): TagGraphNode[] => {\n    const children = []\n    for (const child of area.children) {\n        children.push(child)\n        children.push(...getAllChildrenOfArea(child))\n    }\n    return children\n}\n\n/**\n * topicTagGraph.json includes sub-areas: non-searchable tags that have searchable children\n * e.g. \"Health\" is an area, \"Life & Death\" is a sub-area, and \"Life Expectancy\" is a topic,\n * This function flattens the graph by removing sub-areas and moving their children up to the area level\n * e.g. \"Life Expectancy\" becomes a child of \"Health\" instead of \"Life & Death\"\n * We need this because the all-topics section on the homepage renders sub-areas, but the site nav doesn't\n * Note that topics can have children (e.g. \"Air Pollution\" is a topic, and \"Indoor Air Pollution\" is a sub-topic)\n * Such cases are not flattened here, but in the frontend with getAllChildrenOfArea\n * Searchable tags include both topics (tags with a topic page) and tags with searchableInAlgolia set\n */\nexport function flattenNonTopicNodes(tagGraph: TagGraphRoot): TagGraphRoot {\n    const flattenNodes = (nodes: TagGraphNode[]): TagGraphNode[] =>\n        nodes.flatMap((node) =>\n            !node.isSearchable && node.children.length\n                ? flattenNodes(node.children)\n                : node.isSearchable\n                  ? [{ ...node, children: flattenNodes(node.children) }]\n                  : []\n        )\n\n    return {\n        ...tagGraph,\n        children: tagGraph.children.map((area) => ({\n            ...area,\n            children: flattenNodes(area.children),\n        })),\n    }\n}\n\nexport function formatInlineList(\n    array: unknown[],\n    connector: \"and\" | \"or\" = \"and\"\n): string {\n    if (array.length === 0) return \"\"\n    if (array.length === 1) return `${array[0]}`\n    return `${array.slice(0, -1).join(\", \")} ${connector} ${R.last(array)}`\n}\n\n// The below comment marks this function as side-effect free, meaning that the bundler\n// can safely remove it if it is not used.\n// This is useful for e.g. constants that are only used in some parts of the codebase.\n// See https://rollupjs.org/configuration-options/#no-side-effects\n// @__NO_SIDE_EFFECTS__\n// Other than that, this function is like lodash's once, in that it'll run fn at most once\n// and then save the result for future calls.\nexport function lazy<T>(fn: () => T): () => T {\n    let hasRun = false\n    let _value: T\n    return () => {\n        if (!hasRun) {\n            _value = fn()\n            hasRun = true\n        }\n        return _value\n    }\n}\n\nexport function traverseObjects<T extends Record<string, any>>(\n    obj: T,\n    ref: Record<string, any>,\n    cb: (objValue: unknown, refValue: unknown, key: string) => unknown\n): Partial<T> {\n    const result: any = {}\n    for (const key in obj) {\n        if (R.isPlainObject(obj[key]) && R.isPlainObject(ref[key])) {\n            result[key] = traverseObjects(obj[key], ref[key], cb)\n        } else {\n            result[key] = cb(obj[key], ref[key], key)\n        }\n    }\n    return result\n}\n\nexport function getParentVariableIdFromChartConfig(\n    config: GrapherInterface\n): number | undefined {\n    const { chartTypes, dimensions } = config\n\n    const chartType = chartTypes?.[0] ?? GRAPHER_CHART_TYPES.LineChart\n    if (chartType === GRAPHER_CHART_TYPES.ScatterPlot) return undefined\n    if (!dimensions) return undefined\n\n    const yVariableIds = dimensions\n        .filter((d) => d.property === DimensionProperty.y)\n        .map((d) => d.variableId)\n\n    if (yVariableIds.length !== 1) return undefined\n\n    return yVariableIds[0]\n}\n\nexport function extractLinksFromMarkdown(markdown: string): [string, string][] {\n    return [...markdown.matchAll(/\\[(.*?)\\]\\((.*?)\\)/g)].map((match) => [\n        match[1],\n        match[2],\n    ])\n}\n\nexport function getPaginationPageNumbers(\n    currentPageNumber: number,\n    totalPageCount: number,\n    size: number = 5\n): number[] {\n    let start = Math.max(1, currentPageNumber - Math.floor(size / 2))\n\n    if (start + size > totalPageCount) {\n        start = Math.max(1, totalPageCount - size + 1)\n    }\n\n    const pageNumbers = []\n\n    for (let i = start; i <= Math.min(start + size - 1, totalPageCount); i++) {\n        pageNumbers.push(i)\n    }\n\n    return pageNumbers\n}\n\n/**\n * Checks for content equality, but doesn't care about the order of elements.\n *\n * For example, `isArrayDifferentFromReference([1, 2], [2, 1])` returns `false`.\n */\nexport function isArrayDifferentFromReference<T>(\n    array: T[],\n    referenceArray: T[]\n): boolean {\n    if (array.length !== referenceArray.length) return true\n    return _.difference(array, referenceArray).length > 0\n}\n\n// When reading from an asset map, we want a very particular behavior:\n// If the asset map is entirely undefined, then we want to just fail silently and return the fallback.\n// If the asset map is defined but the asset is not found, however, then we want to throw an error.\n// This is to avoid invisible errors that'll lead to runtime errors or 404s.\n\nexport function readFromAssetMap(\n    assetMap: AssetMap | undefined,\n    { path, fallback }: { path: string; fallback: string }\n): string\n\nexport function readFromAssetMap(\n    assetMap: AssetMap | undefined,\n    { path, fallback }: { path: string; fallback?: string }\n): string | undefined\n\nexport function readFromAssetMap(\n    assetMap: AssetMap | undefined,\n    { path, fallback }: { path: string; fallback?: string }\n): string | undefined {\n    if (!assetMap) return fallback\n\n    const assetValue = assetMap[path]\n    if (assetValue === undefined)\n        throw new Error(`Entry for asset not found in asset map: ${path}`)\n    return assetValue\n}\n\nexport const getUserNavigatorLanguages = (): readonly string[] => {\n    return navigator.languages ?? [navigator.language]\n}\n\nexport const getUserNavigatorLanguagesNonEnglish = (): readonly string[] => {\n    return getUserNavigatorLanguages().filter((lang) => !lang.startsWith(\"en\"))\n}\n\n/**\n * Merge multiple objects into a single object.\n * Arrays are overwritten completely instead of merged.\n */\nexport const merge: typeof _.merge = (\n    ...objects: Parameters<typeof _.merge>\n) => {\n    return _.mergeWith(\n        {}, // merge mutates the first argument\n        ...objects,\n        // Overwrite arrays completely instead of merging them.\n        // Otherwise fall back to the default merge behavior.\n        (_: unknown, srcValue: unknown) => {\n            return Array.isArray(srcValue) ? srcValue : undefined\n        }\n    )\n}\n\nexport function calculateTrendDirection(\n    startValue?: PrimitiveType,\n    endValue?: PrimitiveType\n): GrapherTrendArrowDirection | undefined {\n    if (typeof startValue !== \"number\" || typeof endValue !== \"number\")\n        return undefined\n    return endValue > startValue\n        ? \"up\"\n        : endValue < startValue\n          ? \"down\"\n          : \"right\"\n}\n\n/**\n * Removes a single pair of outer parentheses from a string, if present.\n *\n * For example:\n *   \"(example)\" => \"example\"\n *   \"no parentheses\" => \"no parentheses\"\n *   \"(example (with inner))\" => \"example (with inner)\"\n *\n * Leading and trailing whitespace is trimmed before checking for parentheses.\n */\nexport function stripOuterParentheses(input: string): string {\n    return input.trim().replace(/^\\((.*)\\)$/, \"$1\")\n}\n\nexport function getDisplayUnit(\n    column: { unit?: string; shortUnit?: string },\n    { allowTrivial = false }: { allowTrivial?: boolean } = {}\n): string | undefined {\n    if (!column.unit) return undefined\n\n    // The unit is considered trivial if it is the same as the short unit\n    const isTrivial = column.unit === column.shortUnit\n    const unit = allowTrivial || !isTrivial ? column.unit : undefined\n\n    // Remove parentheses from the beginning and end of the unit\n    const strippedUnit = unit ? stripOuterParentheses(unit) : undefined\n\n    return strippedUnit\n}\n\nexport function dimensionsToViewId(\n    dimensions: Record<string, string> // Keys: dimension slugs, values: choice slugs\n): string {\n    return Object.entries(dimensions)\n        .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n        .map(([key, value]) => `${slugify(key)}=${slugify(value)}`)\n        .join(\"__\")\n        .toLowerCase()\n}\n","import {\n    ARCHIVE_DATE_TIME_FORMAT,\n    ArchivalDateString,\n} from \"@ourworldindata/types\"\nimport dayjs from \"../dayjs.js\"\n\nexport interface ArchivalTimestamp {\n    date: Date\n    formattedDate: ArchivalDateString\n}\n\nexport type DateInput = Date | ArchivalDateString | string | dayjs.Dayjs\n\nexport const parseArchivalDate = (dateInput: DateInput): dayjs.Dayjs => {\n    if (typeof dateInput === \"string\") {\n        if (dateInput.length === ARCHIVE_DATE_TIME_FORMAT.length)\n            return dayjs.utc(dateInput, ARCHIVE_DATE_TIME_FORMAT)\n        else return dayjs.utc(dateInput)\n    }\n    return dayjs.utc(dateInput)\n}\n\nexport const formatAsArchivalDate = (date: dayjs.Dayjs): ArchivalDateString =>\n    date.format(ARCHIVE_DATE_TIME_FORMAT) as ArchivalDateString\n\nexport const convertToArchivalDateStringIfNecessary = (\n    dateInput: DateInput\n): ArchivalDateString => {\n    if (\n        typeof dateInput === \"string\" &&\n        dateInput.length === ARCHIVE_DATE_TIME_FORMAT.length\n    )\n        return dateInput as ArchivalDateString\n\n    return formatAsArchivalDate(parseArchivalDate(dateInput))\n}\n\nexport const getDateForArchival = (): ArchivalTimestamp => {\n    const date = dayjs\n        .utc()\n        // it's important here that we explicitly set the milliseconds to 0 -\n        // otherwise we run the risk of MySQL rounding up to the next second,\n        // which then breaks the archival URL\n        .millisecond(0)\n    const formattedDate = formatAsArchivalDate(date)\n\n    return { date: date.toDate(), formattedDate }\n}\n","import * as R from \"remeda\"\nimport {\n    OwidOrigin,\n    OwidVariableWithSource,\n    OwidProcessingLevel,\n    DisplaySource,\n    IndicatorTitleWithFragments,\n    OwidSource,\n} from \"@ourworldindata/types\"\nimport * as _ from \"lodash-es\"\nimport { excludeUndefined } from \"./Util\"\nimport dayjs from \"./dayjs.js\"\nimport { parseArchivalDate } from \"./archival/archivalDate.js\"\n\nexport function getOriginAttributionFragments(\n    origins: OwidOrigin[] | undefined\n): string[] {\n    return origins\n        ? origins.map((origin) => {\n              const yearPublished = origin.datePublished\n                  ? dayjs(origin.datePublished, [\"YYYY-MM-DD\", \"YYYY\"]).year()\n                  : undefined\n              const yearPublishedString = yearPublished\n                  ? ` (${yearPublished})`\n                  : \"\"\n              return (\n                  origin.attribution ??\n                  `${origin.producer}${yearPublishedString}`\n              )\n          })\n        : []\n}\n\nexport const splitSourceTextIntoFragments = (\n    text: string | undefined\n): string[] => {\n    return text ? text.split(\";\").map((fragment) => fragment.trim()) : []\n}\n\nexport function getAttributionFragmentsFromVariable(\n    variable: Pick<\n        OwidVariableWithSource,\n        \"presentation\" | \"origins\" | \"source\"\n    >\n): string[] {\n    if (\n        variable.presentation?.attribution &&\n        variable.presentation?.attribution !== \"\"\n    )\n        return [variable.presentation?.attribution]\n\n    const originAttributionFragments = getOriginAttributionFragments(\n        variable.origins\n    )\n    const name = variable.source?.name\n    return _.uniq(_.compact([name, ...originAttributionFragments]))\n}\n\ninterface ETLPathComponents {\n    channel: string\n    producer: string\n    version: string\n    dataset: string\n    table: string\n    indicator: string\n}\n\nexport const getETLPathComponents = (path: string): ETLPathComponents => {\n    const [channel, producer, version, dataset, table, indicator] =\n        path.split(\"/\")\n    return { channel, producer, version, dataset, table, indicator }\n}\n\nexport function formatAuthors(authors: string[]): string {\n    if (authors.length === 0) return \"\"\n    if (authors.length === 1) return authors[0]\n    if (authors.length === 2) return authors.join(\" and \")\n    return authors.slice(0, -1).join(\", \") + `, and ${R.last(authors)}`\n}\n\nexport function formatAuthorsForBibtex(authors: string[]): string {\n    return authors.join(\" and \")\n}\n\nconst isDate = (date: string): boolean => {\n    const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/\n    return !!date.match(dateRegex)\n}\n\nexport const getLastUpdatedFromVariable = (\n    variable: Pick<OwidVariableWithSource, \"catalogPath\" | \"origins\">\n): string | undefined => {\n    // if possible, extract date from the catalog path\n    const version = getETLPathComponents(variable.catalogPath ?? \"\")?.version\n    if (version && isDate(version)) return version\n\n    const { origins = [] } = variable\n    const originDates = excludeUndefined(\n        origins.map((origin) => origin.dateAccessed)\n    )\n\n    if (originDates.length === 0) return undefined\n\n    // alternatively, pick the latest dateAccessed from the origins\n    const latestDate = new Date(\n        Math.max(...originDates.map((date) => new Date(date).getTime()))\n    )\n    return dayjs(latestDate).format(\"YYYY-MM-DD\")\n}\n\nexport const getNextUpdateFromVariable = (\n    variable: Pick<OwidVariableWithSource, \"catalogPath\" | \"updatePeriodDays\">\n): string | undefined => {\n    const lastUpdated = getLastUpdatedFromVariable(variable)\n    let nextUpdate = undefined\n    if (variable.updatePeriodDays) {\n        const date = dayjs(lastUpdated)\n        const nextUpdateDate = date.add(variable.updatePeriodDays, \"day\")\n        // If the next update date is in the past, we set it to the next month\n        if (nextUpdateDate.isBefore(dayjs()))\n            nextUpdate = dayjs().add(1, \"month\")\n        else nextUpdate = nextUpdateDate\n    }\n    return nextUpdate?.format(\"YYYY-MM-DD\")\n}\n\nexport const getPhraseForProcessingLevel = (\n    processingLevel: OwidProcessingLevel | undefined\n): string => {\n    switch (processingLevel) {\n        case \"major\":\n            return \"with major processing\"\n        case \"minor\":\n            return \"with minor processing\"\n        default:\n            return \"processed\"\n    }\n}\n\nconst prepareOriginForDisplay = (origin: OwidOrigin): DisplaySource => {\n    let label = origin.producer ?? \"\"\n    if (origin.title && origin.title !== label) {\n        label += \" – \" + origin.title\n    }\n\n    return {\n        label,\n        description: origin.description,\n        retrievedOn: origin.dateAccessed,\n        retrievedFrom: origin.urlMain,\n        citation: origin.citationFull,\n    }\n}\n\nexport const prepareSourcesForDisplay = (\n    variable: Pick<OwidVariableWithSource, \"origins\" | \"source\">\n): DisplaySource[] => {\n    const { origins, source } = variable\n\n    const sourcesForDisplay: DisplaySource[] = []\n\n    if (\n        source?.name &&\n        (source?.dataPublishedBy || source?.retrievedDate || source?.link)\n    ) {\n        sourcesForDisplay.push({\n            label: source?.name,\n            dataPublishedBy: source?.dataPublishedBy,\n            retrievedOn: source?.retrievedDate,\n            retrievedFrom: source?.link,\n        })\n    }\n\n    if (origins && origins.length > 0) {\n        sourcesForDisplay.push(\n            ...origins.map((origin) => prepareOriginForDisplay(origin))\n        )\n    }\n\n    return sourcesForDisplay\n}\n\nconst getYearSuffixFromOrigin = (o: OwidOrigin): string => {\n    const year = o.dateAccessed\n        ? dayjs(o.dateAccessed, [\"YYYY-MM-DD\", \"YYYY\"]).year()\n        : o.datePublished\n          ? dayjs(o.datePublished, [\"YYYY-MM-DD\", \"YYYY\"]).year()\n          : undefined\n    if (year) return ` (${year})`\n    else return \"\"\n}\n\nexport const getCitationShort = (\n    origins: OwidOrigin[],\n    attributions: string[],\n    owidProcessingLevel: OwidProcessingLevel | undefined\n): string => {\n    const producersWithYear = _.uniq(\n        origins.map((o) => `${o.producer}${getYearSuffixFromOrigin(o)}`)\n    )\n    const processingLevelPhrase =\n        getPhraseForProcessingLevel(owidProcessingLevel)\n\n    const attributionFragments = attributions ?? producersWithYear\n    const attributionPotentiallyShortened =\n        attributionFragments.length > 3\n            ? `${attributionFragments[0]} and other sources`\n            : attributionFragments.join(\"; \")\n\n    return `${attributionPotentiallyShortened} – ${processingLevelPhrase} by Our World in Data`\n}\n\nconst getDateForCitation = (date: dayjs.Dayjs): string =>\n    date.format(\"MMMM D, YYYY\")\n\nexport const getPhraseForArchivalDate = (\n    archivalDate: string | undefined\n): string | undefined => {\n    if (!archivalDate) return undefined\n\n    const parsedDate = parseArchivalDate(archivalDate)\n    const formatted = getDateForCitation(parsedDate)\n    return `(archived on ${formatted}).`\n}\n\nexport const getCitationLong = (\n    indicatorTitle: IndicatorTitleWithFragments,\n    origins: OwidOrigin[],\n    source: OwidSource | undefined,\n    attributions: string[],\n    attributionShort: string | undefined,\n    titleVariant: string | undefined,\n    owidProcessingLevel: OwidProcessingLevel | undefined,\n    citationUrl: string | undefined,\n    archivalDate: string | undefined\n): string => {\n    const sourceShortName =\n        attributionShort && titleVariant\n            ? `${attributionShort} – ${titleVariant}`\n            : attributionShort || titleVariant\n    const producersWithYear = _.uniq(\n        origins.map((o) => `${o.producer}${getYearSuffixFromOrigin(o)}`)\n    )\n    const processingLevelPhrase =\n        getPhraseForProcessingLevel(owidProcessingLevel)\n\n    const attributionFragments = attributions ?? producersWithYear\n    const attributionUnshortened = attributionFragments.join(\"; \")\n    const citationLonger = `${attributionUnshortened} – ${processingLevelPhrase} by Our World in Data`\n    const titleWithOptionalFragments = excludeUndefined([\n        indicatorTitle.title,\n        sourceShortName,\n    ]).join(\" – \")\n    const originsLong = _.uniq(\n        origins.map(\n            (o) =>\n                `${o.producer}, “${o.title ?? o.titleSnapshot}${\n                    o.versionProducer ? \" \" + o.versionProducer : \"\"\n                }”`\n        )\n    ).join(\"; \")\n    const today = getDateForCitation(dayjs())\n    const archivalString = getPhraseForArchivalDate(archivalDate)\n    return excludeUndefined([\n        `${citationLonger}.`,\n        `“${titleWithOptionalFragments}” [dataset].`,\n        originsLong\n            ? `${originsLong} [original data].`\n            : source?.name\n              ? `${source?.name} [original data].`\n              : undefined,\n        citationUrl\n            ? `Retrieved ${today} from ${citationUrl}${archivalString ? ` ${archivalString}` : \"\"}`\n            : undefined,\n    ]).join(\" \")\n}\n\nexport const formatSourceDate = (\n    date: string | undefined,\n    format: string\n): string | null => {\n    const parsedDate = dayjs(date ?? \"\", [\"YYYY-MM-DD\", \"DD/MM/YYYY\"])\n    if (!parsedDate.isValid()) return date || null\n    return parsedDate.format(format)\n}\n\nexport const getDateRange = (dateRange: string): string | null => {\n    // This regex matches:\n    //   Beginning of string\n    //   Ignore whitespace\n    //   a named group called start that matches:\n    //     hyphen aka minus\n    //     1 or more digits\n    //   Ignore whitespace\n    //   hyphen aka minus OR en dash\n    //   Ignore whitespace\n    //   a named group called end that matches:\n    //     hyphen aka minus\n    //     1 or more digits\n    //   Ignore whitespace\n    //   End of string\n    const dateRangeRegex = /^\\s*(?<start>(-)?\\d+)\\s*(-|–)\\s*(?<end>(-)?\\d+)\\s*$/\n    const match = dateRange.match(dateRangeRegex)\n    if (match) {\n        const firstYearString = match.groups?.start\n        const lastYearString = match.groups?.end\n        if (!firstYearString || !lastYearString) return null\n\n        const firstYear = parseInt(firstYearString, 10)\n        const lastYear = parseInt(lastYearString, 10)\n        let formattedFirstYear\n\n        // if start year is before year 0, add BCE to the end\n        if (firstYear < 0) formattedFirstYear = `${Math.abs(firstYear)} BCE`\n        else formattedFirstYear = firstYear\n\n        // if end year is before year 0, add BCE to the end or, if start year is after year 0, add CE to the end\n        let formattedLastYear\n        if (lastYear < 0) formattedLastYear = `${Math.abs(lastYear)} BCE`\n        else if (firstYear < 0) formattedLastYear = `${lastYear} CE`\n        else formattedLastYear = lastYear\n\n        if (lastYear < 0 || firstYear < 0)\n            return `${formattedFirstYear} – ${formattedLastYear}`\n        else return `${formattedFirstYear}–${formattedLastYear}`\n    }\n    return null\n}\n","// https://github.com/robertmassaioli/ts-is-present\n// A predicate for filtering an array of nulls and undefineds that returns the correct type\n\nexport const isPresent = <T>(t: T | undefined | null | void): t is T =>\n    t !== undefined && t !== null\n","import { FormatSpecifier } from \"d3-format\"\nimport { createFormatter } from \"./Util.js\"\nimport {\n    OwidVariableRoundingMode,\n    TickFormattingOptions,\n} from \"@ourworldindata/types\"\n\n// Used outside this module to figure out if the unit will be joined with the number.\nexport function checkIsVeryShortUnit(unit: string): unit is \"$\" | \"£\" | \"%\" {\n    return [\"%\", \"$\", \"£\"].includes(unit)\n}\n\nfunction checkIsUnitCurrency(unit: string): unit is \"$\" | \"£\" {\n    return [\"$\", \"£\"].includes(unit)\n}\n\nfunction checkIsUnitPercent(unit: string): unit is \"%\" {\n    return unit[0] === \"%\"\n}\n\nfunction getTrim({\n    roundingMode,\n    trailingZeroes,\n}: {\n    roundingMode: OwidVariableRoundingMode\n    trailingZeroes: boolean\n}): \"~\" | \"\" {\n    // always show trailing zeroes when rounding to significant figures\n    return roundingMode === OwidVariableRoundingMode.significantFigures\n        ? \"\"\n        : trailingZeroes\n          ? \"\"\n          : \"~\"\n}\n\nfunction getSign({ showPlus }: { showPlus: boolean }): \"+\" | \"\" {\n    return showPlus ? \"+\" : \"\"\n}\n\nfunction getSymbol({ unit }: { unit: string }): \"$\" | \"\" {\n    return checkIsUnitCurrency(unit) ? \"$\" : \"\"\n}\n\nfunction getType({\n    roundingMode,\n    numberAbbreviation,\n    value,\n    unit,\n}: {\n    roundingMode: OwidVariableRoundingMode\n    numberAbbreviation: \"long\" | \"short\" | false\n    value: number\n    unit: string\n}): \"f\" | \"s\" | \"r\" {\n    // f: fixed-point notation (i.e. fixed number of decimal points)\n    // r: decimal notation, rounded to significant digits\n    // s: decimal notation with an SI prefix, rounded to significant digits\n\n    const typeMap: Record<OwidVariableRoundingMode, \"f\" | \"r\"> = {\n        [OwidVariableRoundingMode.decimalPlaces]: \"f\",\n        [OwidVariableRoundingMode.significantFigures]: \"r\",\n    }\n    const type = typeMap[roundingMode]\n\n    if (checkIsUnitPercent(unit)) {\n        return type\n    }\n    if (numberAbbreviation === \"long\") {\n        // do not abbreviate until 1 million\n        return Math.abs(value) < 1e6 ? type : \"s\"\n    }\n    if (numberAbbreviation === \"short\") {\n        // do not abbreviate until 1 thousand\n        return Math.abs(value) < 1e3 ? type : \"s\"\n    }\n\n    return type\n}\n\nfunction getPrecision({\n    value,\n    roundingMode,\n    numDecimalPlaces,\n    numSignificantFigures,\n    type,\n}: {\n    value: number\n    roundingMode: OwidVariableRoundingMode\n    numDecimalPlaces: number\n    numSignificantFigures: number\n    type: \"f\" | \"s\" | \"r\"\n}): string {\n    if (roundingMode === OwidVariableRoundingMode.significantFigures) {\n        return `${numSignificantFigures}`\n    }\n\n    if (type === \"f\") {\n        return `${numDecimalPlaces}`\n    }\n\n    // when dealing with abbreviated numbers, adjust precision so we get 12.84 million instead of 13 million\n    // the modulo one-liner counts the \"place columns\" of the number, resetting every 3\n    // 1 -> 1, 48 -> 2, 981 -> 3, 7222 -> 1\n    const numberOfDigits = String(Math.floor(Math.abs(value))).length\n    const precisionPadding = ((numberOfDigits - 1) % 3) + 1\n\n    // hard-coded 2 decimal places for abbreviated numbers\n    return `${precisionPadding + 2}`\n}\n\nfunction replaceSIPrefixes({\n    string,\n    numberAbbreviation,\n}: {\n    string: string\n    numberAbbreviation: \"short\" | \"long\"\n}): string {\n    const prefix = string[string.length - 1]\n\n    const prefixMap: Record<string, Record<string, string>> = {\n        short: {\n            k: \"k\",\n            M: \"M\",\n            G: \"B\",\n            T: \"T\",\n            P: \"quad\",\n            E: \"quint\",\n            Z: \"sext\",\n            Y: \"sept\",\n        },\n        long: {\n            k: \"k\",\n            M: \" million\",\n            G: \" billion\",\n            T: \" trillion\",\n            P: \" quadrillion\",\n            E: \" quintillion\",\n            Z: \" sextillion\",\n            Y: \" septillion\",\n        },\n    }\n\n    if (prefixMap[numberAbbreviation][prefix]) {\n        return string.replace(prefix, prefixMap[numberAbbreviation][prefix])\n    }\n    return string\n}\n\nfunction postprocessString({\n    string,\n    roundingMode,\n    numberAbbreviation,\n    spaceBeforeUnit,\n    useNoBreakSpace,\n    unit,\n    value,\n    numDecimalPlaces,\n}: {\n    string: string\n    roundingMode: OwidVariableRoundingMode\n    numberAbbreviation: \"long\" | \"short\" | false\n    spaceBeforeUnit: boolean\n    useNoBreakSpace: boolean\n    unit: string\n    value: number\n    numDecimalPlaces: number\n}): string {\n    let output = string\n\n    // handling infinitesimal values\n    if (roundingMode !== OwidVariableRoundingMode.significantFigures) {\n        const tooSmallThreshold = Math.pow(10, -numDecimalPlaces).toPrecision(1)\n        if (numberAbbreviation && 0 < value && value < +tooSmallThreshold) {\n            output = \"<\" + output.replace(/0\\.?(\\d+)?/, tooSmallThreshold)\n        }\n    }\n\n    if (numberAbbreviation) {\n        output = replaceSIPrefixes({\n            string: output,\n            numberAbbreviation,\n        })\n    }\n\n    if (unit && !checkIsUnitCurrency(unit)) {\n        const spaceCharacter = useNoBreakSpace ? \"\\u00a0\" : \" \"\n        const appendage = spaceBeforeUnit ? spaceCharacter + unit : unit\n        output += appendage\n    }\n\n    return output\n}\n\nexport function formatValue(\n    value: number,\n    {\n        roundingMode = OwidVariableRoundingMode.decimalPlaces,\n        trailingZeroes = false, // only applies to fixed-point notation\n        unit = \"\",\n        spaceBeforeUnit = !checkIsUnitPercent(unit),\n        useNoBreakSpace = false,\n        showPlus = false,\n        numDecimalPlaces = 2, // only applies to fixed-point notation\n        numSignificantFigures = 3, // only applies to sig fig rounding\n        numberAbbreviation = \"long\",\n    }: TickFormattingOptions\n): string {\n    const formatter = createFormatter(unit)\n\n    // Explore how specifiers work here\n    // https://observablehq.com/@ikesau/d3-format-interactive-demo\n    const specifier = new FormatSpecifier({\n        zero: \"0\",\n        trim: getTrim({ roundingMode, trailingZeroes }),\n        sign: getSign({ showPlus }),\n        symbol: getSymbol({ unit }),\n        comma: \",\",\n        precision: getPrecision({\n            roundingMode,\n            value,\n            numDecimalPlaces,\n            numSignificantFigures,\n            type: getType({ roundingMode, numberAbbreviation, value, unit }),\n        }),\n        type: getType({ roundingMode, numberAbbreviation, value, unit }),\n    }).toString()\n\n    const formattedString = formatter(specifier)(value)\n\n    const postprocessedString = postprocessString({\n        string: formattedString,\n        roundingMode,\n        numberAbbreviation,\n        spaceBeforeUnit,\n        useNoBreakSpace,\n        unit,\n        value,\n        numDecimalPlaces,\n    })\n\n    return postprocessedString\n}\n","import {\n    EPOCH_DATE,\n    Time,\n    TimeBound,\n    TimeBoundValue,\n    TimeBoundValueStr,\n} from \"@ourworldindata/types\"\nimport {\n    parseIntOrUndefined,\n    diffDateISOStringInDays,\n    formatDay,\n    isNegativeInfinity,\n    isPositiveInfinity,\n} from \"./Util.js\"\nimport * as R from \"remeda\"\n\nexport const timeFromTimebounds = (\n    timeBound: TimeBound,\n    minTime: Time,\n    maxTime: Time\n): number => {\n    switch (timeBound) {\n        case -Infinity:\n            return minTime\n        case Infinity:\n            return maxTime\n        default:\n            return timeBound\n    }\n}\n\nconst hasAnInfinity = (timeBound: TimeBound): timeBound is TimeBoundValue =>\n    isNegativeInfinity(timeBound) || isPositiveInfinity(timeBound)\n\nconst formatTimeBound = (timeBound: TimeBound): string => {\n    if (isNegativeInfinity(timeBound)) return TimeBoundValueStr.unboundedLeft\n    if (isPositiveInfinity(timeBound)) return TimeBoundValueStr.unboundedRight\n    return `${timeBound}`\n}\n\nconst parseTimeBound = (str: string): TimeBound | undefined => {\n    if (str === TimeBoundValueStr.unboundedLeft)\n        return TimeBoundValue.negativeInfinity\n\n    if (str === TimeBoundValueStr.unboundedRight)\n        return TimeBoundValue.positiveInfinity\n\n    return parseIntOrUndefined(str)\n}\n\n// Use this to not repeat logic\nconst fromJSON = (value: TimeBound | string | undefined): number | undefined =>\n    R.isString(value) ? parseTimeBound(value) : value\n\nconst toJSON = (\n    bound: TimeBound | undefined\n): TimeBoundValueStr | number | undefined => {\n    if (bound === undefined) return undefined\n    if (isNegativeInfinity(bound)) return TimeBoundValueStr.unboundedLeft\n    if (isPositiveInfinity(bound)) return TimeBoundValueStr.unboundedRight\n    return bound\n}\n\nexport const minTimeBoundFromJSONOrNegativeInfinity = (\n    minTime: TimeBound | string | undefined\n): TimeBound => fromJSON(minTime) ?? TimeBoundValue.negativeInfinity\n\nexport const maxTimeBoundFromJSONOrPositiveInfinity = (\n    maxTime: TimeBound | string | undefined\n): TimeBound => fromJSON(maxTime) ?? TimeBoundValue.positiveInfinity\n\nexport const minTimeToJSON = toJSON\nexport const maxTimeToJSON = toJSON\n\nconst reISODateComponent = new RegExp(\"\\\\d{4}-[01]\\\\d-[0-3]\\\\d\")\nconst reISODate = new RegExp(`^(${reISODateComponent.source})$`)\n\nexport const timeBoundToTimeBoundString = (\n    timeBound: TimeBound,\n    isDate: boolean\n): string => {\n    if (hasAnInfinity(timeBound)) return formatTimeBound(timeBound)\n    return isDate\n        ? formatDay(timeBound, { format: \"YYYY-MM-DD\" })\n        : `${timeBound}`\n}\n\nconst parseTimeURIComponent = (param: string): TimeBound | undefined =>\n    reISODate.test(param)\n        ? diffDateISOStringInDays(param, EPOCH_DATE)\n        : parseTimeBound(param)\n\nconst upgradeLegacyTimeString = (time: string): string => {\n    // In the past we supported unbounded time parameters like time=2015.. which would be\n    // equivalent to time=2015..latest. We don't actively generate these kinds of URL any\n    // more because URLs ending with dots are not interpreted correctly by many services\n    // (Twitter, Facebook and others) - but we still want to recognize incoming requests\n    // for these \"legacy\" URLs!\n    if (time === \"..\") return \"earliest..latest\"\n    return time.endsWith(\"..\")\n        ? time + \"latest\"\n        : time.startsWith(\"..\")\n          ? \"earliest\" + time\n          : time\n}\n\nexport const getTimeDomainFromQueryString = (\n    time: string\n): [number, number] => {\n    time = upgradeLegacyTimeString(time)\n\n    const reIntComponent = new RegExp(\"\\\\-?\\\\d+\")\n    const reIntRange = new RegExp(\n        `^(${reIntComponent.source}|earliest)\\\\.\\\\.(${reIntComponent.source}|latest)$`\n    )\n    const reDateRange = new RegExp(\n        `^(${reISODateComponent.source}|earliest)\\\\.\\\\.(${reISODateComponent.source}|latest)$`\n    )\n    if (reIntRange.test(time) || reDateRange.test(time)) {\n        const [start, end] = time.split(\"..\")\n        return [\n            parseTimeURIComponent(start) ?? TimeBoundValue.negativeInfinity,\n            parseTimeURIComponent(end) ?? TimeBoundValue.positiveInfinity,\n        ]\n    }\n\n    const timebound =\n        parseTimeURIComponent(time) ?? TimeBoundValue.positiveInfinity\n    return [timebound, timebound]\n}\n","// This file is auto-generated by devTools/regionsUpdater/update.ts\n// Do not edit manually. Run `yarn runRegionsUpdater` to regenerate.\n\nexport const regionsData = [\n    {\n        code: \"ABW\",\n        shortCode: \"AW\",\n        name: \"Aruba\",\n        slug: \"aruba\",\n        regionType: \"country\",\n    },\n    {\n        code: \"AFG\",\n        shortCode: \"AF\",\n        name: \"Afghanistan\",\n        slug: \"afghanistan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AGO\",\n        shortCode: \"AO\",\n        name: \"Angola\",\n        slug: \"angola\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AIA\",\n        shortCode: \"AI\",\n        name: \"Anguilla\",\n        slug: \"anguilla\",\n        regionType: \"country\",\n    },\n    {\n        code: \"ALA\",\n        shortCode: \"AX\",\n        name: \"Aland Islands\",\n        slug: \"aland-islands\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"ALB\",\n        shortCode: \"AL\",\n        name: \"Albania\",\n        slug: \"albania\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AND\",\n        shortCode: \"AD\",\n        name: \"Andorra\",\n        slug: \"andorra\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ANT\",\n        shortCode: \"AN\",\n        name: \"Netherlands Antilles\",\n        slug: \"netherlands-antilles\",\n        regionType: \"country\",\n        isHistorical: true,\n        isUnlisted: true,\n    },\n    {\n        code: \"ARE\",\n        shortCode: \"AE\",\n        name: \"United Arab Emirates\",\n        slug: \"united-arab-emirates\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"UAE\"],\n    },\n    {\n        code: \"ARG\",\n        shortCode: \"AR\",\n        name: \"Argentina\",\n        slug: \"argentina\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ARM\",\n        shortCode: \"AM\",\n        name: \"Armenia\",\n        slug: \"armenia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ASM\",\n        shortCode: \"AS\",\n        name: \"American Samoa\",\n        slug: \"american-samoa\",\n        regionType: \"country\",\n    },\n    {\n        code: \"ATA\",\n        shortCode: \"AQ\",\n        name: \"Antarctica\",\n        slug: \"antarctica\",\n        regionType: \"other\",\n        isMappable: true,\n        isUnlisted: true,\n    },\n    {\n        code: \"ATF\",\n        shortCode: \"TF\",\n        name: \"French Southern Territories\",\n        slug: \"french-southern-territories\",\n        regionType: \"country\",\n        isMappable: true,\n        isUnlisted: true,\n    },\n    {\n        code: \"ATG\",\n        shortCode: \"AG\",\n        name: \"Antigua and Barbuda\",\n        slug: \"antigua-and-barbuda\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AUS\",\n        shortCode: \"AU\",\n        name: \"Australia\",\n        slug: \"australia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AUT\",\n        shortCode: \"AT\",\n        name: \"Austria\",\n        slug: \"austria\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"AZE\",\n        shortCode: \"AZ\",\n        name: \"Azerbaijan\",\n        slug: \"azerbaijan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BDI\",\n        shortCode: \"BI\",\n        name: \"Burundi\",\n        slug: \"burundi\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BEL\",\n        shortCode: \"BE\",\n        name: \"Belgium\",\n        slug: \"belgium\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BEN\",\n        shortCode: \"BJ\",\n        name: \"Benin\",\n        slug: \"benin\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BES\",\n        shortCode: \"BQ\",\n        name: \"Bonaire Sint Eustatius and Saba\",\n        slug: \"bonaire-sint-eustatius-and-saba\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"BFA\",\n        shortCode: \"BF\",\n        name: \"Burkina Faso\",\n        slug: \"burkina-faso\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BGD\",\n        shortCode: \"BD\",\n        name: \"Bangladesh\",\n        slug: \"bangladesh\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BGR\",\n        shortCode: \"BG\",\n        name: \"Bulgaria\",\n        slug: \"bulgaria\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BHR\",\n        shortCode: \"BH\",\n        name: \"Bahrain\",\n        slug: \"bahrain\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BHS\",\n        shortCode: \"BS\",\n        name: \"Bahamas\",\n        slug: \"bahamas\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BIH\",\n        shortCode: \"BA\",\n        name: \"Bosnia and Herzegovina\",\n        shortName: \"Bosnia and Herz.\",\n        slug: \"bosnia-and-herzegovina\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BLM\",\n        shortCode: \"BL\",\n        name: \"Saint Barthelemy\",\n        slug: \"saint-barthelemy\",\n        regionType: \"country\",\n    },\n    {\n        code: \"BLR\",\n        shortCode: \"BY\",\n        name: \"Belarus\",\n        slug: \"belarus\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BLZ\",\n        shortCode: \"BZ\",\n        name: \"Belize\",\n        slug: \"belize\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BMU\",\n        shortCode: \"BM\",\n        name: \"Bermuda\",\n        slug: \"bermuda\",\n        regionType: \"country\",\n    },\n    {\n        code: \"BOL\",\n        shortCode: \"BO\",\n        name: \"Bolivia\",\n        slug: \"bolivia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BRA\",\n        shortCode: \"BR\",\n        name: \"Brazil\",\n        slug: \"brazil\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BRB\",\n        shortCode: \"BB\",\n        name: \"Barbados\",\n        slug: \"barbados\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BRN\",\n        shortCode: \"BN\",\n        name: \"Brunei\",\n        slug: \"brunei\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BTN\",\n        shortCode: \"BT\",\n        name: \"Bhutan\",\n        slug: \"bhutan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"BVT\",\n        shortCode: \"BV\",\n        name: \"Bouvet Island\",\n        slug: \"bouvet-island\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"BWA\",\n        shortCode: \"BW\",\n        name: \"Botswana\",\n        slug: \"botswana\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CAF\",\n        shortCode: \"CF\",\n        name: \"Central African Republic\",\n        slug: \"central-african-republic\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CAN\",\n        shortCode: \"CA\",\n        name: \"Canada\",\n        slug: \"canada\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CCK\",\n        shortCode: \"CC\",\n        name: \"Cocos Islands\",\n        slug: \"cocos-islands\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"CHE\",\n        shortCode: \"CH\",\n        name: \"Switzerland\",\n        slug: \"switzerland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CHL\",\n        shortCode: \"CL\",\n        name: \"Chile\",\n        slug: \"chile\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CHN\",\n        shortCode: \"CN\",\n        name: \"China\",\n        slug: \"china\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CIV\",\n        shortCode: \"CI\",\n        name: \"Cote d'Ivoire\",\n        slug: \"cote-divoire\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CMR\",\n        shortCode: \"CM\",\n        name: \"Cameroon\",\n        slug: \"cameroon\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"COD\",\n        shortCode: \"CD\",\n        name: \"Democratic Republic of Congo\",\n        shortName: \"DR Congo\",\n        slug: \"democratic-republic-of-congo\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"COG\",\n        shortCode: \"CG\",\n        name: \"Congo\",\n        slug: \"congo\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"COK\",\n        shortCode: \"CK\",\n        name: \"Cook Islands\",\n        slug: \"cook-islands\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"COL\",\n        shortCode: \"CO\",\n        name: \"Colombia\",\n        slug: \"colombia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"COM\",\n        shortCode: \"KM\",\n        name: \"Comoros\",\n        slug: \"comoros\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CPV\",\n        shortCode: \"CV\",\n        name: \"Cape Verde\",\n        slug: \"cape-verde\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CRI\",\n        shortCode: \"CR\",\n        name: \"Costa Rica\",\n        slug: \"costa-rica\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CUB\",\n        shortCode: \"CU\",\n        name: \"Cuba\",\n        slug: \"cuba\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CUW\",\n        shortCode: \"CW\",\n        name: \"Curacao\",\n        slug: \"curacao\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"CXR\",\n        shortCode: \"CX\",\n        name: \"Christmas Island\",\n        slug: \"christmas-island\",\n        regionType: \"country\",\n    },\n    {\n        code: \"CYM\",\n        shortCode: \"KY\",\n        name: \"Cayman Islands\",\n        slug: \"cayman-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"CYP\",\n        shortCode: \"CY\",\n        name: \"Cyprus\",\n        slug: \"cyprus\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"CZE\",\n        shortCode: \"CZ\",\n        name: \"Czechia\",\n        slug: \"czechia\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"Czech Republic\"],\n    },\n    {\n        code: \"DEU\",\n        shortCode: \"DE\",\n        name: \"Germany\",\n        slug: \"germany\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"DJI\",\n        shortCode: \"DJ\",\n        name: \"Djibouti\",\n        slug: \"djibouti\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"DMA\",\n        shortCode: \"DM\",\n        name: \"Dominica\",\n        slug: \"dominica\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"DNK\",\n        shortCode: \"DK\",\n        name: \"Denmark\",\n        slug: \"denmark\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"DOM\",\n        shortCode: \"DO\",\n        name: \"Dominican Republic\",\n        slug: \"dominican-republic\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"DZA\",\n        shortCode: \"DZ\",\n        name: \"Algeria\",\n        slug: \"algeria\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ECU\",\n        shortCode: \"EC\",\n        name: \"Ecuador\",\n        slug: \"ecuador\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"EGY\",\n        shortCode: \"EG\",\n        name: \"Egypt\",\n        slug: \"egypt\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ERI\",\n        shortCode: \"ER\",\n        name: \"Eritrea\",\n        slug: \"eritrea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ESH\",\n        shortCode: \"EH\",\n        name: \"Western Sahara\",\n        slug: \"western-sahara\",\n        regionType: \"country\",\n        isMappable: true,\n        isUnlisted: true,\n    },\n    {\n        code: \"ESP\",\n        shortCode: \"ES\",\n        name: \"Spain\",\n        slug: \"spain\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"EST\",\n        shortCode: \"EE\",\n        name: \"Estonia\",\n        slug: \"estonia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ETH\",\n        shortCode: \"ET\",\n        name: \"Ethiopia\",\n        slug: \"ethiopia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"FIN\",\n        shortCode: \"FI\",\n        name: \"Finland\",\n        slug: \"finland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"FJI\",\n        shortCode: \"FJ\",\n        name: \"Fiji\",\n        slug: \"fiji\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"FLK\",\n        shortCode: \"FK\",\n        name: \"Falkland Islands\",\n        slug: \"falkland-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"FRA\",\n        shortCode: \"FR\",\n        name: \"France\",\n        slug: \"france\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"FRO\",\n        shortCode: \"FO\",\n        name: \"Faroe Islands\",\n        slug: \"faroe-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"FSM\",\n        shortCode: \"FM\",\n        name: \"Micronesia (country)\",\n        slug: \"micronesia-country\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GAB\",\n        shortCode: \"GA\",\n        name: \"Gabon\",\n        slug: \"gabon\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GBR\",\n        shortCode: \"GB\",\n        name: \"United Kingdom\",\n        slug: \"united-kingdom\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"UK\"],\n    },\n    {\n        code: \"GEO\",\n        shortCode: \"GE\",\n        name: \"Georgia\",\n        slug: \"georgia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GGY\",\n        shortCode: \"GG\",\n        name: \"Guernsey\",\n        slug: \"guernsey\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"GHA\",\n        shortCode: \"GH\",\n        name: \"Ghana\",\n        slug: \"ghana\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GIB\",\n        shortCode: \"GI\",\n        name: \"Gibraltar\",\n        slug: \"gibraltar\",\n        regionType: \"country\",\n    },\n    {\n        code: \"GIN\",\n        shortCode: \"GN\",\n        name: \"Guinea\",\n        slug: \"guinea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GLP\",\n        shortCode: \"GP\",\n        name: \"Guadeloupe\",\n        slug: \"guadeloupe\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"GMB\",\n        shortCode: \"GM\",\n        name: \"Gambia\",\n        slug: \"gambia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GNB\",\n        shortCode: \"GW\",\n        name: \"Guinea-Bissau\",\n        slug: \"guinea-bissau\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GNQ\",\n        shortCode: \"GQ\",\n        name: \"Equatorial Guinea\",\n        slug: \"equatorial-guinea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GRC\",\n        shortCode: \"GR\",\n        name: \"Greece\",\n        slug: \"greece\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GRD\",\n        shortCode: \"GD\",\n        name: \"Grenada\",\n        slug: \"grenada\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GRL\",\n        shortCode: \"GL\",\n        name: \"Greenland\",\n        slug: \"greenland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GTM\",\n        shortCode: \"GT\",\n        name: \"Guatemala\",\n        slug: \"guatemala\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GUF\",\n        shortCode: \"GF\",\n        name: \"French Guiana\",\n        slug: \"french-guiana\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"GUM\",\n        shortCode: \"GU\",\n        name: \"Guam\",\n        slug: \"guam\",\n        regionType: \"country\",\n    },\n    {\n        code: \"GUY\",\n        shortCode: \"GY\",\n        name: \"Guyana\",\n        slug: \"guyana\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"HKG\",\n        shortCode: \"HK\",\n        name: \"Hong Kong\",\n        slug: \"hong-kong\",\n        regionType: \"country\",\n    },\n    {\n        code: \"HMD\",\n        shortCode: \"HM\",\n        name: \"Heard Island and McDonald Islands\",\n        slug: \"heard-island-and-mcdonald-islands\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"HND\",\n        shortCode: \"HN\",\n        name: \"Honduras\",\n        slug: \"honduras\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"HRV\",\n        shortCode: \"HR\",\n        name: \"Croatia\",\n        slug: \"croatia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"HTI\",\n        shortCode: \"HT\",\n        name: \"Haiti\",\n        slug: \"haiti\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"HUN\",\n        shortCode: \"HU\",\n        name: \"Hungary\",\n        slug: \"hungary\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"IDN\",\n        shortCode: \"ID\",\n        name: \"Indonesia\",\n        slug: \"indonesia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"IMN\",\n        shortCode: \"IM\",\n        name: \"Isle of Man\",\n        slug: \"isle-of-man\",\n        regionType: \"country\",\n    },\n    {\n        code: \"IND\",\n        shortCode: \"IN\",\n        name: \"India\",\n        slug: \"india\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"IOT\",\n        shortCode: \"IO\",\n        name: \"British Indian Ocean Territory\",\n        slug: \"british-indian-ocean-territory\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"IRL\",\n        shortCode: \"IE\",\n        name: \"Ireland\",\n        slug: \"ireland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"IRN\",\n        shortCode: \"IR\",\n        name: \"Iran\",\n        slug: \"iran\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"IRQ\",\n        shortCode: \"IQ\",\n        name: \"Iraq\",\n        slug: \"iraq\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ISL\",\n        shortCode: \"IS\",\n        name: \"Iceland\",\n        slug: \"iceland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ISR\",\n        shortCode: \"IL\",\n        name: \"Israel\",\n        slug: \"israel\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ITA\",\n        shortCode: \"IT\",\n        name: \"Italy\",\n        slug: \"italy\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"JAM\",\n        shortCode: \"JM\",\n        name: \"Jamaica\",\n        slug: \"jamaica\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"JEY\",\n        shortCode: \"JE\",\n        name: \"Jersey\",\n        slug: \"jersey\",\n        regionType: \"country\",\n    },\n    {\n        code: \"JOR\",\n        shortCode: \"JO\",\n        name: \"Jordan\",\n        slug: \"jordan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"JPN\",\n        shortCode: \"JP\",\n        name: \"Japan\",\n        slug: \"japan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KAZ\",\n        shortCode: \"KZ\",\n        name: \"Kazakhstan\",\n        slug: \"kazakhstan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KEN\",\n        shortCode: \"KE\",\n        name: \"Kenya\",\n        slug: \"kenya\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KGZ\",\n        shortCode: \"KG\",\n        name: \"Kyrgyzstan\",\n        slug: \"kyrgyzstan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KHM\",\n        shortCode: \"KH\",\n        name: \"Cambodia\",\n        slug: \"cambodia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KIR\",\n        shortCode: \"KI\",\n        name: \"Kiribati\",\n        slug: \"kiribati\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KNA\",\n        shortCode: \"KN\",\n        name: \"Saint Kitts and Nevis\",\n        slug: \"saint-kitts-and-nevis\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KOR\",\n        shortCode: \"KR\",\n        name: \"South Korea\",\n        slug: \"south-korea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"KWT\",\n        shortCode: \"KW\",\n        name: \"Kuwait\",\n        slug: \"kuwait\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LAO\",\n        shortCode: \"LA\",\n        name: \"Laos\",\n        slug: \"laos\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LBN\",\n        shortCode: \"LB\",\n        name: \"Lebanon\",\n        slug: \"lebanon\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LBR\",\n        shortCode: \"LR\",\n        name: \"Liberia\",\n        slug: \"liberia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LBY\",\n        shortCode: \"LY\",\n        name: \"Libya\",\n        slug: \"libya\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LCA\",\n        shortCode: \"LC\",\n        name: \"Saint Lucia\",\n        slug: \"saint-lucia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LIE\",\n        shortCode: \"LI\",\n        name: \"Liechtenstein\",\n        slug: \"liechtenstein\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LKA\",\n        shortCode: \"LK\",\n        name: \"Sri Lanka\",\n        slug: \"sri-lanka\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LSO\",\n        shortCode: \"LS\",\n        name: \"Lesotho\",\n        slug: \"lesotho\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LTU\",\n        shortCode: \"LT\",\n        name: \"Lithuania\",\n        slug: \"lithuania\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LUX\",\n        shortCode: \"LU\",\n        name: \"Luxembourg\",\n        slug: \"luxembourg\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"LVA\",\n        shortCode: \"LV\",\n        name: \"Latvia\",\n        slug: \"latvia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MAC\",\n        shortCode: \"MO\",\n        name: \"Macao\",\n        slug: \"macao\",\n        regionType: \"country\",\n    },\n    {\n        code: \"MAF\",\n        shortCode: \"MF\",\n        name: \"Saint Martin (French part)\",\n        slug: \"saint-martin-french-part\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"MAR\",\n        shortCode: \"MA\",\n        name: \"Morocco\",\n        slug: \"morocco\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MCO\",\n        shortCode: \"MC\",\n        name: \"Monaco\",\n        slug: \"monaco\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MDA\",\n        shortCode: \"MD\",\n        name: \"Moldova\",\n        slug: \"moldova\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MDG\",\n        shortCode: \"MG\",\n        name: \"Madagascar\",\n        slug: \"madagascar\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MDV\",\n        shortCode: \"MV\",\n        name: \"Maldives\",\n        slug: \"maldives\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MEX\",\n        shortCode: \"MX\",\n        name: \"Mexico\",\n        slug: \"mexico\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MHL\",\n        shortCode: \"MH\",\n        name: \"Marshall Islands\",\n        slug: \"marshall-islands\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MKD\",\n        shortCode: \"MK\",\n        name: \"North Macedonia\",\n        slug: \"north-macedonia\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"Macedonia\"],\n    },\n    {\n        code: \"MLI\",\n        shortCode: \"ML\",\n        name: \"Mali\",\n        slug: \"mali\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MLT\",\n        shortCode: \"MT\",\n        name: \"Malta\",\n        slug: \"malta\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MMR\",\n        shortCode: \"MM\",\n        name: \"Myanmar\",\n        slug: \"myanmar\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MNE\",\n        shortCode: \"ME\",\n        name: \"Montenegro\",\n        slug: \"montenegro\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MNG\",\n        shortCode: \"MN\",\n        name: \"Mongolia\",\n        slug: \"mongolia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MNP\",\n        shortCode: \"MP\",\n        name: \"Northern Mariana Islands\",\n        slug: \"northern-mariana-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"MOZ\",\n        shortCode: \"MZ\",\n        name: \"Mozambique\",\n        slug: \"mozambique\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MRT\",\n        shortCode: \"MR\",\n        name: \"Mauritania\",\n        slug: \"mauritania\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MSR\",\n        shortCode: \"MS\",\n        name: \"Montserrat\",\n        slug: \"montserrat\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"MTQ\",\n        shortCode: \"MQ\",\n        name: \"Martinique\",\n        slug: \"martinique\",\n        regionType: \"country\",\n    },\n    {\n        code: \"MUS\",\n        shortCode: \"MU\",\n        name: \"Mauritius\",\n        slug: \"mauritius\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MWI\",\n        shortCode: \"MW\",\n        name: \"Malawi\",\n        slug: \"malawi\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MYS\",\n        shortCode: \"MY\",\n        name: \"Malaysia\",\n        slug: \"malaysia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"MYT\",\n        shortCode: \"YT\",\n        name: \"Mayotte\",\n        slug: \"mayotte\",\n        regionType: \"country\",\n    },\n    {\n        code: \"NAM\",\n        shortCode: \"NA\",\n        name: \"Namibia\",\n        slug: \"namibia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NCL\",\n        shortCode: \"NC\",\n        name: \"New Caledonia\",\n        slug: \"new-caledonia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NER\",\n        shortCode: \"NE\",\n        name: \"Niger\",\n        slug: \"niger\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NFK\",\n        shortCode: \"NF\",\n        name: \"Norfolk Island\",\n        slug: \"norfolk-island\",\n        regionType: \"country\",\n    },\n    {\n        code: \"NGA\",\n        shortCode: \"NG\",\n        name: \"Nigeria\",\n        slug: \"nigeria\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NIC\",\n        shortCode: \"NI\",\n        name: \"Nicaragua\",\n        slug: \"nicaragua\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NIU\",\n        shortCode: \"NU\",\n        name: \"Niue\",\n        slug: \"niue\",\n        regionType: \"country\",\n    },\n    {\n        code: \"NLD\",\n        shortCode: \"NL\",\n        name: \"Netherlands\",\n        slug: \"netherlands\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NOR\",\n        shortCode: \"NO\",\n        name: \"Norway\",\n        slug: \"norway\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NPL\",\n        shortCode: \"NP\",\n        name: \"Nepal\",\n        slug: \"nepal\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NRU\",\n        shortCode: \"NR\",\n        name: \"Nauru\",\n        slug: \"nauru\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"NZL\",\n        shortCode: \"NZ\",\n        name: \"New Zealand\",\n        slug: \"new-zealand\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"OMN\",\n        shortCode: \"OM\",\n        name: \"Oman\",\n        slug: \"oman\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"OWID_ABK\",\n        name: \"Abkhazia\",\n        slug: \"abkhazia\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_AFR\",\n        name: \"Africa\",\n        slug: \"africa\",\n        regionType: \"continent\",\n        translationCodes: [\"002\"],\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"OWID_ERE\",\n            \"OWID_OFS\",\n            \"OWID_SDN\",\n            \"OWID_SML\",\n            \"OWID_ZAN\",\n            \"REU\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"OWID_AKD\",\n        name: \"Akrotiri and Dhekelia\",\n        slug: \"akrotiri-and-dhekelia\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_ASI\",\n        name: \"Asia\",\n        slug: \"asia\",\n        regionType: \"continent\",\n        translationCodes: [\"142\"],\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BGD\",\n            \"BHR\",\n            \"BRN\",\n            \"BTN\",\n            \"CCK\",\n            \"CHN\",\n            \"CXR\",\n            \"GEO\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"IOT\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KOR\",\n            \"KWT\",\n            \"LAO\",\n            \"LBN\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"OMN\",\n            \"OWID_ABK\",\n            \"OWID_CYN\",\n            \"OWID_DRV\",\n            \"OWID_FPK\",\n            \"OWID_KRU\",\n            \"OWID_NAG\",\n            \"OWID_RVN\",\n            \"OWID_SOS\",\n            \"OWID_YAR\",\n            \"OWID_YPR\",\n            \"PAK\",\n            \"PHL\",\n            \"PRK\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SGP\",\n            \"SYR\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TLS\",\n            \"TUR\",\n            \"TWN\",\n            \"UZB\",\n            \"VNM\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"OWID_AUH\",\n        name: \"Austria-Hungary\",\n        slug: \"austria-hungary\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_BAD\",\n        name: \"Grand Duchy of Baden\",\n        slug: \"grand-duchy-of-baden\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_BAV\",\n        name: \"Kingdom of Bavaria\",\n        slug: \"kingdom-of-bavaria\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_CIS\",\n        name: \"Channel Islands\",\n        slug: \"channel-islands\",\n        regionType: \"aggregate\",\n        members: [\"GGY\", \"JEY\"],\n    },\n    {\n        code: \"OWID_CYN\",\n        name: \"Northern Cyprus\",\n        slug: \"northern-cyprus\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_CZS\",\n        name: \"Czechoslovakia\",\n        slug: \"czechoslovakia\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_DRV\",\n        name: \"Democratic Republic of Vietnam\",\n        slug: \"democratic-republic-of-vietnam\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_DSI\",\n        name: \"Kingdom of the Two Sicilies\",\n        slug: \"kingdom-of-the-two-sicilies\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_ERE\",\n        name: \"Ethiopia (former)\",\n        slug: \"ethiopia-former\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_EU27\",\n        name: \"European Union (27)\",\n        slug: \"european-union-27\",\n        regionType: \"aggregate\",\n        members: [\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IRL\",\n            \"ITA\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MLT\",\n            \"NLD\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n        ],\n    },\n    {\n        code: \"OWID_EUR\",\n        name: \"Europe\",\n        slug: \"europe\",\n        regionType: \"continent\",\n        translationCodes: [\"150\"],\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_AKD\",\n            \"OWID_AUH\",\n            \"OWID_BAD\",\n            \"OWID_BAV\",\n            \"OWID_CZS\",\n            \"OWID_DSI\",\n            \"OWID_GDR\",\n            \"OWID_GFR\",\n            \"OWID_KOS\",\n            \"OWID_MOD\",\n            \"OWID_PAR\",\n            \"OWID_SAR\",\n            \"OWID_SAX\",\n            \"OWID_SEK\",\n            \"OWID_SRM\",\n            \"OWID_TRS\",\n            \"OWID_TSC\",\n            \"OWID_USS\",\n            \"OWID_WTB\",\n            \"OWID_YGS\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SJM\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"OWID_FPK\",\n        name: \"Pakistan (former)\",\n        slug: \"pakistan-former\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_GCL\",\n        name: \"Great Colombia\",\n        slug: \"great-colombia\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_GDR\",\n        name: \"East Germany\",\n        slug: \"east-germany\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_GFR\",\n        name: \"West Germany\",\n        slug: \"west-germany\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_HIC\",\n        name: \"High-income countries\",\n        slug: \"high-income-countries\",\n        regionType: \"income_group\",\n        members: [\n            \"ABW\",\n            \"AND\",\n            \"ARE\",\n            \"ASM\",\n            \"ATF\",\n            \"ATG\",\n            \"AUS\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BHR\",\n            \"BHS\",\n            \"BMU\",\n            \"BRB\",\n            \"BRN\",\n            \"CAN\",\n            \"CHE\",\n            \"CHL\",\n            \"CRI\",\n            \"CUW\",\n            \"CYM\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GIB\",\n            \"GRC\",\n            \"GRL\",\n            \"GUF\",\n            \"GUM\",\n            \"GUY\",\n            \"HKG\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ISR\",\n            \"ITA\",\n            \"JPN\",\n            \"KNA\",\n            \"KOR\",\n            \"KWT\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MAC\",\n            \"MAF\",\n            \"MCO\",\n            \"MLT\",\n            \"MNP\",\n            \"NCL\",\n            \"NLD\",\n            \"NOR\",\n            \"NRU\",\n            \"NZL\",\n            \"OMN\",\n            \"OWID_CIS\",\n            \"PAN\",\n            \"PLW\",\n            \"POL\",\n            \"PRI\",\n            \"PRT\",\n            \"PYF\",\n            \"QAT\",\n            \"ROU\",\n            \"RUS\",\n            \"SAU\",\n            \"SGP\",\n            \"SMR\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"SXM\",\n            \"SYC\",\n            \"TCA\",\n            \"TTO\",\n            \"TWN\",\n            \"URY\",\n            \"USA\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"OWID_KOS\",\n        name: \"Kosovo\",\n        slug: \"kosovo\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"OWID_KRU\",\n        name: \"Korea (former)\",\n        slug: \"korea-former\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_LIC\",\n        name: \"Low-income countries\",\n        slug: \"low-income-countries\",\n        regionType: \"income_group\",\n        members: [\n            \"AFG\",\n            \"BDI\",\n            \"BFA\",\n            \"CAF\",\n            \"COD\",\n            \"ERI\",\n            \"GMB\",\n            \"GNB\",\n            \"LBR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MWI\",\n            \"NER\",\n            \"PRK\",\n            \"RWA\",\n            \"SDN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"SYR\",\n            \"TCD\",\n            \"TGO\",\n            \"UGA\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"OWID_LMC\",\n        name: \"Lower-middle-income countries\",\n        slug: \"lower-middle-income-countries\",\n        regionType: \"income_group\",\n        members: [\n            \"AGO\",\n            \"BEN\",\n            \"BGD\",\n            \"BOL\",\n            \"BTN\",\n            \"CIV\",\n            \"CMR\",\n            \"COG\",\n            \"COM\",\n            \"DJI\",\n            \"EGY\",\n            \"FSM\",\n            \"GHA\",\n            \"GIN\",\n            \"HND\",\n            \"HTI\",\n            \"IND\",\n            \"JOR\",\n            \"KEN\",\n            \"KGZ\",\n            \"KHM\",\n            \"KIR\",\n            \"LAO\",\n            \"LBN\",\n            \"LKA\",\n            \"LSO\",\n            \"MAR\",\n            \"MMR\",\n            \"MRT\",\n            \"NAM\",\n            \"NGA\",\n            \"NIC\",\n            \"NPL\",\n            \"PAK\",\n            \"PHL\",\n            \"PNG\",\n            \"PSE\",\n            \"SEN\",\n            \"SLB\",\n            \"STP\",\n            \"SWZ\",\n            \"TJK\",\n            \"TLS\",\n            \"TUN\",\n            \"TZA\",\n            \"UZB\",\n            \"VNM\",\n            \"VUT\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"OWID_MNS\",\n        name: \"Melanesia\",\n        slug: \"melanesia\",\n        regionType: \"aggregate\",\n        translationCodes: [\"054\"],\n        members: [\"FJI\", \"PNG\", \"SLB\", \"VUT\"],\n    },\n    {\n        code: \"OWID_MOD\",\n        name: \"Duchy of Modena and Reggio\",\n        slug: \"duchy-of-modena-and-reggio\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_NAG\",\n        name: \"Nagorno-Karabakh\",\n        slug: \"nagorno-karabakh\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_NAM\",\n        name: \"North America\",\n        slug: \"north-america\",\n        regionType: \"continent\",\n        translationCodes: [\"003\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ANT\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BMU\",\n            \"BRB\",\n            \"CAN\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"GLP\",\n            \"GRD\",\n            \"GRL\",\n            \"GTM\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"OWID_RCA\",\n            \"PAN\",\n            \"PRI\",\n            \"SLV\",\n            \"SPM\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"USA\",\n            \"VCT\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"OWID_NH\",\n        name: \"Northern Hemisphere\",\n        slug: \"northern-hemisphere\",\n        regionType: \"aggregate\",\n        members: [\n            \"ABW\",\n            \"AFG\",\n            \"AIA\",\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"ANT\",\n            \"ARE\",\n            \"ARM\",\n            \"ATG\",\n            \"AUT\",\n            \"AZE\",\n            \"BEL\",\n            \"BEN\",\n            \"BES\",\n            \"BFA\",\n            \"BGD\",\n            \"BGR\",\n            \"BHR\",\n            \"BHS\",\n            \"BIH\",\n            \"BLM\",\n            \"BLR\",\n            \"BLZ\",\n            \"BMU\",\n            \"BRB\",\n            \"BRN\",\n            \"BTN\",\n            \"CAF\",\n            \"CAN\",\n            \"CHE\",\n            \"CHN\",\n            \"CIV\",\n            \"CMR\",\n            \"COL\",\n            \"CPV\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DJI\",\n            \"DMA\",\n            \"DNK\",\n            \"DOM\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ESP\",\n            \"EST\",\n            \"ETH\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"FSM\",\n            \"GBR\",\n            \"GEO\",\n            \"GGY\",\n            \"GHA\",\n            \"GIB\",\n            \"GIN\",\n            \"GLP\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"GRC\",\n            \"GRD\",\n            \"GRL\",\n            \"GTM\",\n            \"GUF\",\n            \"GUM\",\n            \"GUY\",\n            \"HKG\",\n            \"HND\",\n            \"HRV\",\n            \"HTI\",\n            \"HUN\",\n            \"IMN\",\n            \"IND\",\n            \"IRL\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISL\",\n            \"ISR\",\n            \"ITA\",\n            \"JAM\",\n            \"JEY\",\n            \"JOR\",\n            \"JPN\",\n            \"KAZ\",\n            \"KEN\",\n            \"KGZ\",\n            \"KHM\",\n            \"KIR\",\n            \"KNA\",\n            \"KOR\",\n            \"KWT\",\n            \"LAO\",\n            \"LBN\",\n            \"LBR\",\n            \"LBY\",\n            \"LCA\",\n            \"LIE\",\n            \"LKA\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MAC\",\n            \"MAF\",\n            \"MAR\",\n            \"MCO\",\n            \"MDA\",\n            \"MDV\",\n            \"MEX\",\n            \"MHL\",\n            \"MKD\",\n            \"MLI\",\n            \"MLT\",\n            \"MMR\",\n            \"MNE\",\n            \"MNG\",\n            \"MNP\",\n            \"MRT\",\n            \"MSR\",\n            \"MTQ\",\n            \"MYS\",\n            \"NER\",\n            \"NGA\",\n            \"NIC\",\n            \"NLD\",\n            \"NOR\",\n            \"NPL\",\n            \"OMN\",\n            \"OWID_AUH\",\n            \"OWID_BAD\",\n            \"OWID_BAV\",\n            \"OWID_CZS\",\n            \"OWID_DRV\",\n            \"OWID_DSI\",\n            \"OWID_ERE\",\n            \"OWID_FPK\",\n            \"OWID_GCL\",\n            \"OWID_GDR\",\n            \"OWID_GFR\",\n            \"OWID_KOS\",\n            \"OWID_KRU\",\n            \"OWID_MOD\",\n            \"OWID_PAR\",\n            \"OWID_RCA\",\n            \"OWID_RVN\",\n            \"OWID_SAR\",\n            \"OWID_SAX\",\n            \"OWID_SDN\",\n            \"OWID_SRM\",\n            \"OWID_TSC\",\n            \"OWID_USS\",\n            \"OWID_WTB\",\n            \"OWID_YAR\",\n            \"OWID_YGS\",\n            \"OWID_YPR\",\n            \"PAK\",\n            \"PAN\",\n            \"PHL\",\n            \"PLW\",\n            \"POL\",\n            \"PRI\",\n            \"PRK\",\n            \"PRT\",\n            \"PSE\",\n            \"PS_GZA\",\n            \"QAT\",\n            \"ROU\",\n            \"RUS\",\n            \"SAU\",\n            \"SDN\",\n            \"SEN\",\n            \"SGP\",\n            \"SLE\",\n            \"SLV\",\n            \"SMR\",\n            \"SOM\",\n            \"SPM\",\n            \"SRB\",\n            \"SSD\",\n            \"STP\",\n            \"SUR\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"SXM\",\n            \"SYR\",\n            \"TCA\",\n            \"TCD\",\n            \"TGO\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TTO\",\n            \"TUN\",\n            \"TUR\",\n            \"TWN\",\n            \"UGA\",\n            \"UKR\",\n            \"USA\",\n            \"UZB\",\n            \"VAT\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n            \"VNM\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"OWID_OCE\",\n        name: \"Oceania\",\n        slug: \"oceania\",\n        regionType: \"continent\",\n        translationCodes: [\"009\"],\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PCN\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"UMI\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"OWID_OFS\",\n        name: \"Orange Free State\",\n        slug: \"orange-free-state\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_PAR\",\n        name: \"Duchy of Parma and Piacenza\",\n        slug: \"duchy-of-parma-and-piacenza\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_PYA\",\n        name: \"Polynesia\",\n        slug: \"polynesia\",\n        regionType: \"aggregate\",\n        translationCodes: [\"061\"],\n        members: [\n            \"ASM\",\n            \"COK\",\n            \"NFK\",\n            \"NIU\",\n            \"NZL\",\n            \"PCN\",\n            \"PYF\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"OWID_RCA\",\n        name: \"Federal Republic of Central America\",\n        slug: \"federal-republic-of-central-america\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_RVN\",\n        name: \"Republic of Vietnam\",\n        slug: \"republic-of-vietnam\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_SAM\",\n        name: \"South America\",\n        slug: \"south-america\",\n        regionType: \"continent\",\n        translationCodes: [\"005\"],\n        members: [\n            \"ARG\",\n            \"BOL\",\n            \"BRA\",\n            \"CHL\",\n            \"COL\",\n            \"ECU\",\n            \"FLK\",\n            \"GUF\",\n            \"GUY\",\n            \"OWID_GCL\",\n            \"PER\",\n            \"PRY\",\n            \"SGS\",\n            \"SUR\",\n            \"URY\",\n            \"VEN\",\n        ],\n    },\n    {\n        code: \"OWID_SAR\",\n        name: \"Kingdom of Sardinia\",\n        slug: \"kingdom-of-sardinia\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_SAX\",\n        name: \"Kingdom of Saxony\",\n        slug: \"kingdom-of-saxony\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_SDN\",\n        name: \"Sudan (former)\",\n        slug: \"sudan-former\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_SEK\",\n        name: \"Serbia excluding Kosovo\",\n        slug: \"serbia-excluding-kosovo\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_SH\",\n        name: \"Southern Hemisphere\",\n        slug: \"southern-hemisphere\",\n        regionType: \"aggregate\",\n        members: [\n            \"AGO\",\n            \"ARG\",\n            \"ASM\",\n            \"ATF\",\n            \"AUS\",\n            \"BDI\",\n            \"BOL\",\n            \"BRA\",\n            \"BVT\",\n            \"BWA\",\n            \"CCK\",\n            \"CHL\",\n            \"COD\",\n            \"COG\",\n            \"COK\",\n            \"COM\",\n            \"CXR\",\n            \"ECU\",\n            \"FJI\",\n            \"FLK\",\n            \"GAB\",\n            \"HMD\",\n            \"IDN\",\n            \"IOT\",\n            \"LSO\",\n            \"MDG\",\n            \"MOZ\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"OWID_OFS\",\n            \"PCN\",\n            \"PER\",\n            \"PNG\",\n            \"PRY\",\n            \"PYF\",\n            \"REU\",\n            \"RWA\",\n            \"SGS\",\n            \"SHN\",\n            \"SLB\",\n            \"SWZ\",\n            \"SYC\",\n            \"TKL\",\n            \"TLS\",\n            \"TON\",\n            \"TUV\",\n            \"TZA\",\n            \"URY\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"OWID_SML\",\n        name: \"Somaliland\",\n        slug: \"somaliland\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_SOS\",\n        name: \"South Ossetia\",\n        slug: \"south-ossetia\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_SRM\",\n        name: \"Serbia and Montenegro\",\n        slug: \"serbia-and-montenegro\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_TRS\",\n        name: \"Transnistria\",\n        slug: \"transnistria\",\n        regionType: \"other\",\n    },\n    {\n        code: \"OWID_TSC\",\n        name: \"Grand Duchy of Tuscany\",\n        slug: \"grand-duchy-of-tuscany\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_UMC\",\n        name: \"Upper-middle-income countries\",\n        slug: \"upper-middle-income-countries\",\n        regionType: \"income_group\",\n        members: [\n            \"ALB\",\n            \"ARG\",\n            \"ARM\",\n            \"AZE\",\n            \"BIH\",\n            \"BLR\",\n            \"BLZ\",\n            \"BRA\",\n            \"BWA\",\n            \"CHN\",\n            \"COL\",\n            \"CPV\",\n            \"CUB\",\n            \"DMA\",\n            \"DOM\",\n            \"DZA\",\n            \"ECU\",\n            \"FJI\",\n            \"GAB\",\n            \"GEO\",\n            \"GNQ\",\n            \"GRD\",\n            \"GTM\",\n            \"IDN\",\n            \"IRN\",\n            \"IRQ\",\n            \"JAM\",\n            \"KAZ\",\n            \"LBY\",\n            \"LCA\",\n            \"MDA\",\n            \"MDV\",\n            \"MEX\",\n            \"MHL\",\n            \"MKD\",\n            \"MNE\",\n            \"MNG\",\n            \"MUS\",\n            \"MYS\",\n            \"OWID_KOS\",\n            \"PER\",\n            \"PRY\",\n            \"SLV\",\n            \"SRB\",\n            \"SUR\",\n            \"THA\",\n            \"TKM\",\n            \"TON\",\n            \"TUR\",\n            \"TUV\",\n            \"UKR\",\n            \"VCT\",\n            \"WSM\",\n            \"ZAF\",\n        ],\n    },\n    {\n        code: \"OWID_USS\",\n        name: \"USSR\",\n        slug: \"ussr\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_WRL\",\n        name: \"World\",\n        slug: \"world\",\n        regionType: \"aggregate\",\n        translationCodes: [\"001\"],\n        members: [\n            \"OWID_AFR\",\n            \"OWID_ASI\",\n            \"OWID_EUR\",\n            \"OWID_NAM\",\n            \"OWID_OCE\",\n            \"OWID_SAM\",\n        ],\n    },\n    {\n        code: \"OWID_WTB\",\n        name: \"Kingdom of Wurttemberg\",\n        slug: \"kingdom-of-wurttemberg\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_YAR\",\n        name: \"Yemen Arab Republic\",\n        slug: \"yemen-arab-republic\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_YGS\",\n        name: \"Yugoslavia\",\n        slug: \"yugoslavia\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_YPR\",\n        name: \"Yemen People's Republic\",\n        slug: \"yemen-peoples-republic\",\n        regionType: \"country\",\n        isHistorical: true,\n    },\n    {\n        code: \"OWID_ZAN\",\n        name: \"Zanzibar\",\n        slug: \"zanzibar\",\n        regionType: \"other\",\n    },\n    {\n        code: \"PAK\",\n        shortCode: \"PK\",\n        name: \"Pakistan\",\n        slug: \"pakistan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PAN\",\n        shortCode: \"PA\",\n        name: \"Panama\",\n        slug: \"panama\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PCN\",\n        shortCode: \"PN\",\n        name: \"Pitcairn\",\n        slug: \"pitcairn\",\n        regionType: \"country\",\n    },\n    {\n        code: \"PER\",\n        shortCode: \"PE\",\n        name: \"Peru\",\n        slug: \"peru\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PEW_APA\",\n        name: \"Asia-Pacific (Pew)\",\n        slug: \"asia-pacific-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        members: [\n            \"AFG\",\n            \"ARM\",\n            \"ASM\",\n            \"AUS\",\n            \"AZE\",\n            \"BGD\",\n            \"BRN\",\n            \"BTN\",\n            \"CHN\",\n            \"COK\",\n            \"CYP\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"IRN\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KIR\",\n            \"KOR\",\n            \"LAO\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MHL\",\n            \"MMR\",\n            \"MNG\",\n            \"MNP\",\n            \"MYS\",\n            \"NCL\",\n            \"NIU\",\n            \"NPL\",\n            \"NRU\",\n            \"NZL\",\n            \"PAK\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PRK\",\n            \"PYF\",\n            \"SGP\",\n            \"SLB\",\n            \"THA\",\n            \"TJK\",\n            \"TKL\",\n            \"TKM\",\n            \"TLS\",\n            \"TON\",\n            \"TUR\",\n            \"TUV\",\n            \"UZB\",\n            \"VNM\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"PEW_EUR\",\n        name: \"Europe (Pew)\",\n        slug: \"europe-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GEO\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"PEW_LAC\",\n        name: \"Latin America-Caribbean (Pew)\",\n        slug: \"latin-america-caribbean-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"PEW_MENA\",\n        name: \"Middle East-North Africa (Pew)\",\n        slug: \"middle-east-north-africa-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        members: [\n            \"ARE\",\n            \"BHR\",\n            \"DZA\",\n            \"EGY\",\n            \"ESH\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"OMN\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SDN\",\n            \"SYR\",\n            \"TUN\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"PEW_NAM\",\n        name: \"North America (Pew)\",\n        slug: \"north-america-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        members: [\"BMU\", \"CAN\", \"GRL\", \"SPM\", \"USA\"],\n    },\n    {\n        code: \"PEW_SSA\",\n        name: \"Sub-Saharan Africa (Pew)\",\n        slug: \"sub-saharan-africa-pew\",\n        regionType: \"aggregate\",\n        definedBy: \"pew\",\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"PHL\",\n        shortCode: \"PH\",\n        name: \"Philippines\",\n        slug: \"philippines\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PLW\",\n        shortCode: \"PW\",\n        name: \"Palau\",\n        slug: \"palau\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PNG\",\n        shortCode: \"PG\",\n        name: \"Papua New Guinea\",\n        slug: \"papua-new-guinea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"POL\",\n        shortCode: \"PL\",\n        name: \"Poland\",\n        slug: \"poland\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PRI\",\n        shortCode: \"PR\",\n        name: \"Puerto Rico\",\n        slug: \"puerto-rico\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PRK\",\n        shortCode: \"KP\",\n        name: \"North Korea\",\n        slug: \"north-korea\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PRT\",\n        shortCode: \"PT\",\n        name: \"Portugal\",\n        slug: \"portugal\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PRY\",\n        shortCode: \"PY\",\n        name: \"Paraguay\",\n        slug: \"paraguay\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PSE\",\n        shortCode: \"PS\",\n        name: \"Palestine\",\n        slug: \"palestine\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"PS_GZA\",\n        shortCode: \"PS-GZA\",\n        name: \"Gaza Strip\",\n        slug: \"gaza-strip\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"PYF\",\n        shortCode: \"PF\",\n        name: \"French Polynesia\",\n        slug: \"french-polynesia\",\n        regionType: \"country\",\n    },\n    {\n        code: \"QAT\",\n        shortCode: \"QA\",\n        name: \"Qatar\",\n        slug: \"qatar\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"REU\",\n        shortCode: \"RE\",\n        name: \"Reunion\",\n        slug: \"reunion\",\n        regionType: \"country\",\n    },\n    {\n        code: \"ROU\",\n        shortCode: \"RO\",\n        name: \"Romania\",\n        slug: \"romania\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"RUS\",\n        shortCode: \"RU\",\n        name: \"Russia\",\n        slug: \"russia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"RWA\",\n        shortCode: \"RW\",\n        name: \"Rwanda\",\n        slug: \"rwanda\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SAU\",\n        shortCode: \"SA\",\n        name: \"Saudi Arabia\",\n        slug: \"saudi-arabia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SDN\",\n        shortCode: \"SD\",\n        name: \"Sudan\",\n        slug: \"sudan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SEN\",\n        shortCode: \"SN\",\n        name: \"Senegal\",\n        slug: \"senegal\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SGP\",\n        shortCode: \"SG\",\n        name: \"Singapore\",\n        slug: \"singapore\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SGS\",\n        shortCode: \"GS\",\n        name: \"South Georgia and the South Sandwich Islands\",\n        slug: \"south-georgia-and-the-south-sandwich-islands\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"SHN\",\n        shortCode: \"SH\",\n        name: \"Saint Helena\",\n        slug: \"saint-helena\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"SJM\",\n        shortCode: \"SJ\",\n        name: \"Svalbard and Jan Mayen\",\n        slug: \"svalbard-and-jan-mayen\",\n        regionType: \"other\",\n        isUnlisted: true,\n    },\n    {\n        code: \"SLB\",\n        shortCode: \"SB\",\n        name: \"Solomon Islands\",\n        slug: \"solomon-islands\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SLE\",\n        shortCode: \"SL\",\n        name: \"Sierra Leone\",\n        slug: \"sierra-leone\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SLV\",\n        shortCode: \"SV\",\n        name: \"El Salvador\",\n        slug: \"el-salvador\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SMR\",\n        shortCode: \"SM\",\n        name: \"San Marino\",\n        slug: \"san-marino\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SOM\",\n        shortCode: \"SO\",\n        name: \"Somalia\",\n        slug: \"somalia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SPM\",\n        shortCode: \"PM\",\n        name: \"Saint Pierre and Miquelon\",\n        slug: \"saint-pierre-and-miquelon\",\n        regionType: \"country\",\n    },\n    {\n        code: \"SRB\",\n        shortCode: \"RS\",\n        name: \"Serbia\",\n        slug: \"serbia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SSD\",\n        shortCode: \"SS\",\n        name: \"South Sudan\",\n        slug: \"south-sudan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"STP\",\n        shortCode: \"ST\",\n        name: \"Sao Tome and Principe\",\n        slug: \"sao-tome-and-principe\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SUR\",\n        shortCode: \"SR\",\n        name: \"Suriname\",\n        slug: \"suriname\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SVK\",\n        shortCode: \"SK\",\n        name: \"Slovakia\",\n        slug: \"slovakia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SVN\",\n        shortCode: \"SI\",\n        name: \"Slovenia\",\n        slug: \"slovenia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SWE\",\n        shortCode: \"SE\",\n        name: \"Sweden\",\n        slug: \"sweden\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SWZ\",\n        shortCode: \"SZ\",\n        name: \"Eswatini\",\n        slug: \"eswatini\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"Swaziland\"],\n    },\n    {\n        code: \"SXM\",\n        shortCode: \"SX\",\n        name: \"Sint Maarten (Dutch part)\",\n        slug: \"sint-maarten-dutch-part\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"SYC\",\n        shortCode: \"SC\",\n        name: \"Seychelles\",\n        slug: \"seychelles\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"SYR\",\n        shortCode: \"SY\",\n        name: \"Syria\",\n        slug: \"syria\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TCA\",\n        shortCode: \"TC\",\n        name: \"Turks and Caicos Islands\",\n        shortName: \"Turks and Caicos\",\n        slug: \"turks-and-caicos-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"TCD\",\n        shortCode: \"TD\",\n        name: \"Chad\",\n        slug: \"chad\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TGO\",\n        shortCode: \"TG\",\n        name: \"Togo\",\n        slug: \"togo\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"THA\",\n        shortCode: \"TH\",\n        name: \"Thailand\",\n        slug: \"thailand\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TJK\",\n        shortCode: \"TJ\",\n        name: \"Tajikistan\",\n        slug: \"tajikistan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TKL\",\n        shortCode: \"TK\",\n        name: \"Tokelau\",\n        slug: \"tokelau\",\n        regionType: \"country\",\n    },\n    {\n        code: \"TKM\",\n        shortCode: \"TM\",\n        name: \"Turkmenistan\",\n        slug: \"turkmenistan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TLS\",\n        shortCode: \"TL\",\n        name: \"East Timor\",\n        slug: \"east-timor\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TON\",\n        shortCode: \"TO\",\n        name: \"Tonga\",\n        slug: \"tonga\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TTO\",\n        shortCode: \"TT\",\n        name: \"Trinidad and Tobago\",\n        slug: \"trinidad-and-tobago\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TUN\",\n        shortCode: \"TN\",\n        name: \"Tunisia\",\n        slug: \"tunisia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TUR\",\n        shortCode: \"TR\",\n        name: \"Turkey\",\n        slug: \"turkey\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TUV\",\n        shortCode: \"TV\",\n        name: \"Tuvalu\",\n        slug: \"tuvalu\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TWN\",\n        shortCode: \"TW\",\n        name: \"Taiwan\",\n        slug: \"taiwan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"TZA\",\n        shortCode: \"TZ\",\n        name: \"Tanzania\",\n        slug: \"tanzania\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"UGA\",\n        shortCode: \"UG\",\n        name: \"Uganda\",\n        slug: \"uganda\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"UKR\",\n        shortCode: \"UA\",\n        name: \"Ukraine\",\n        slug: \"ukraine\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"UMI\",\n        shortCode: \"UM\",\n        name: \"United States Minor Outlying Islands\",\n        slug: \"united-states-minor-outlying-islands\",\n        regionType: \"other\",\n        isUnlisted: true,\n    },\n    {\n        code: \"UNM49_AFR\",\n        name: \"Africa (UN M49)\",\n        slug: \"africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_1\",\n        translationCodes: [\"002\"],\n        members: [\n            \"AGO\",\n            \"ATF\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"IOT\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UNM49_AMR\",\n        name: \"Americas (UN M49)\",\n        slug: \"americas-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_1\",\n        translationCodes: [\"019\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BMU\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"BVT\",\n            \"CAN\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GRL\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SPM\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"USA\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"UNM49_ANZ\",\n        name: \"Australia and New Zealand (UN M49)\",\n        slug: \"australia-and-new-zealand-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"053\"],\n        members: [\"AUS\", \"CCK\", \"CXR\", \"HMD\", \"NFK\", \"NZL\"],\n    },\n    {\n        code: \"UNM49_ASI\",\n        name: \"Asia (UN M49)\",\n        slug: \"asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_1\",\n        translationCodes: [\"142\"],\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BGD\",\n            \"BHR\",\n            \"BRN\",\n            \"BTN\",\n            \"CHN\",\n            \"CYP\",\n            \"GEO\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KOR\",\n            \"KWT\",\n            \"LAO\",\n            \"LBN\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"OMN\",\n            \"PAK\",\n            \"PHL\",\n            \"PRK\",\n            \"QAT\",\n            \"SAU\",\n            \"SGP\",\n            \"SYR\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TLS\",\n            \"TUR\",\n            \"UZB\",\n            \"VNM\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"UNM49_CAM\",\n        name: \"Central America (UN M49)\",\n        slug: \"central-america-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        translationCodes: [\"013\"],\n        members: [\"BLZ\", \"CRI\", \"GTM\", \"HND\", \"MEX\", \"NIC\", \"PAN\", \"SLV\"],\n    },\n    {\n        code: \"UNM49_CAR\",\n        name: \"Caribbean (UN M49)\",\n        slug: \"caribbean-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        translationCodes: [\"029\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BRB\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"GLP\",\n            \"GRD\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MSR\",\n            \"MTQ\",\n            \"PRI\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"VCT\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"UNM49_CAS\",\n        name: \"Central Asia (UN M49)\",\n        slug: \"central-asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"143\"],\n        members: [\"KAZ\", \"KGZ\", \"TJK\", \"TKM\", \"UZB\"],\n    },\n    {\n        code: \"UNM49_EAF\",\n        name: \"Eastern Africa (UN M49)\",\n        slug: \"eastern-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        translationCodes: [\"014\"],\n        members: [\n            \"ATF\",\n            \"BDI\",\n            \"COM\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"IOT\",\n            \"KEN\",\n            \"MDG\",\n            \"MOZ\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"REU\",\n            \"RWA\",\n            \"SOM\",\n            \"SSD\",\n            \"SYC\",\n            \"TZA\",\n            \"UGA\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UNM49_EAS\",\n        name: \"Eastern Asia (UN M49)\",\n        slug: \"eastern-asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"030\"],\n        members: [\"CHN\", \"HKG\", \"JPN\", \"KOR\", \"MAC\", \"MNG\", \"PRK\"],\n    },\n    {\n        code: \"UNM49_EEU\",\n        name: \"Eastern Europe (UN M49)\",\n        slug: \"eastern-europe-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"151\"],\n        members: [\n            \"BGR\",\n            \"BLR\",\n            \"CZE\",\n            \"HUN\",\n            \"MDA\",\n            \"POL\",\n            \"ROU\",\n            \"RUS\",\n            \"SVK\",\n            \"UKR\",\n        ],\n    },\n    {\n        code: \"UNM49_EUR\",\n        name: \"Europe (UN M49)\",\n        slug: \"europe-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_1\",\n        translationCodes: [\"150\"],\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SJM\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"UNM49_LAC\",\n        name: \"Latin America and the Caribbean (UN M49)\",\n        slug: \"latin-america-and-the-caribbean-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"419\", \"029\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"BVT\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"UNM49_MAF\",\n        name: \"Middle Africa (UN M49)\",\n        slug: \"middle-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        translationCodes: [\"017\"],\n        members: [\n            \"AGO\",\n            \"CAF\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"GAB\",\n            \"GNQ\",\n            \"STP\",\n            \"TCD\",\n        ],\n    },\n    {\n        code: \"UNM49_MEL\",\n        name: \"Melanesia (UN M49)\",\n        slug: \"melanesia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"054\"],\n        members: [\"FJI\", \"NCL\", \"PNG\", \"SLB\", \"VUT\"],\n    },\n    {\n        code: \"UNM49_MIC\",\n        name: \"Micronesia (UN M49)\",\n        slug: \"micronesia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"057\"],\n        members: [\"FSM\", \"GUM\", \"KIR\", \"MHL\", \"MNP\", \"NRU\", \"PLW\", \"UMI\"],\n    },\n    {\n        code: \"UNM49_NAF\",\n        name: \"Northern Africa (UN M49)\",\n        slug: \"northern-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"015\"],\n        members: [\"DZA\", \"EGY\", \"ESH\", \"LBY\", \"MAR\", \"SDN\", \"TUN\"],\n    },\n    {\n        code: \"UNM49_NAM\",\n        name: \"Northern America (UN M49)\",\n        slug: \"northern-america-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"003\"],\n        members: [\"BMU\", \"CAN\", \"GRL\", \"SPM\", \"USA\"],\n    },\n    {\n        code: \"UNM49_NEU\",\n        name: \"Northern Europe (UN M49)\",\n        slug: \"northern-europe-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"154\"],\n        members: [\n            \"ALA\",\n            \"DNK\",\n            \"EST\",\n            \"FIN\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"JEY\",\n            \"LTU\",\n            \"LVA\",\n            \"NOR\",\n            \"SJM\",\n            \"SWE\",\n        ],\n    },\n    {\n        code: \"UNM49_OCE\",\n        name: \"Oceania (UN M49)\",\n        slug: \"oceania-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_1\",\n        translationCodes: [\"009\"],\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"CCK\",\n            \"COK\",\n            \"CXR\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HMD\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PCN\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"UMI\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"UNM49_POL\",\n        name: \"Polynesia (UN M49)\",\n        slug: \"polynesia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"061\"],\n        members: [\n            \"ASM\",\n            \"COK\",\n            \"NIU\",\n            \"PCN\",\n            \"PYF\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"UNM49_SAF\",\n        name: \"Southern Africa (UN M49)\",\n        slug: \"southern-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        translationCodes: [\"018\"],\n        members: [\"BWA\", \"LSO\", \"NAM\", \"SWZ\", \"ZAF\"],\n    },\n    {\n        code: \"UNM49_SAM\",\n        name: \"South America (UN M49)\",\n        slug: \"south-america-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        translationCodes: [\"005\"],\n        members: [\n            \"ARG\",\n            \"BOL\",\n            \"BRA\",\n            \"BVT\",\n            \"CHL\",\n            \"COL\",\n            \"ECU\",\n            \"FLK\",\n            \"GUF\",\n            \"GUY\",\n            \"PER\",\n            \"PRY\",\n            \"SGS\",\n            \"SUR\",\n            \"URY\",\n            \"VEN\",\n        ],\n    },\n    {\n        code: \"UNM49_SAS\",\n        name: \"Southern Asia (UN M49)\",\n        slug: \"southern-asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"034\"],\n        members: [\n            \"AFG\",\n            \"BGD\",\n            \"BTN\",\n            \"IND\",\n            \"IRN\",\n            \"LKA\",\n            \"MDV\",\n            \"NPL\",\n            \"PAK\",\n        ],\n    },\n    {\n        code: \"UNM49_SEA\",\n        name: \"South-eastern Asia (UN M49)\",\n        slug: \"south-eastern-asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"035\"],\n        members: [\n            \"BRN\",\n            \"IDN\",\n            \"KHM\",\n            \"LAO\",\n            \"MMR\",\n            \"MYS\",\n            \"PHL\",\n            \"SGP\",\n            \"THA\",\n            \"TLS\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"UNM49_SEU\",\n        name: \"Southern Europe (UN M49)\",\n        slug: \"southern-europe-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"039\"],\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"BIH\",\n            \"ESP\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"ITA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"PRT\",\n            \"SMR\",\n            \"SRB\",\n            \"SVN\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"UNM49_SSA\",\n        name: \"Sub-Saharan Africa (UN M49)\",\n        slug: \"sub-saharan-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"202\"],\n        members: [\n            \"AGO\",\n            \"ATF\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"IOT\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UNM49_WAF\",\n        name: \"Western Africa (UN M49)\",\n        slug: \"western-africa-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_3\",\n        translationCodes: [\"011\"],\n        members: [\n            \"BEN\",\n            \"BFA\",\n            \"CIV\",\n            \"CPV\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"LBR\",\n            \"MLI\",\n            \"MRT\",\n            \"NER\",\n            \"NGA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"TGO\",\n        ],\n    },\n    {\n        code: \"UNM49_WAS\",\n        name: \"Western Asia (UN M49)\",\n        slug: \"western-asia-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"145\"],\n        members: [\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BHR\",\n            \"CYP\",\n            \"GEO\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"OMN\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"TUR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"UNM49_WEU\",\n        name: \"Western Europe (UN M49)\",\n        slug: \"western-europe-un-m49\",\n        regionType: \"aggregate\",\n        definedBy: \"un_m49_2\",\n        translationCodes: [\"155\"],\n        members: [\n            \"AUT\",\n            \"BEL\",\n            \"CHE\",\n            \"DEU\",\n            \"FRA\",\n            \"LIE\",\n            \"LUX\",\n            \"MCO\",\n            \"NLD\",\n        ],\n    },\n    {\n        code: \"UNSDG_ANZ\",\n        name: \"Australia and New Zealand (UN SDG)\",\n        slug: \"australia-and-new-zealand-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        members: [\"AUS\", \"CCK\", \"CXR\", \"HMD\", \"NFK\", \"NZL\"],\n    },\n    {\n        code: \"UNSDG_CSA\",\n        name: \"Central and Southern Asia (UN SDG)\",\n        slug: \"central-and-southern-asia-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        members: [\n            \"AFG\",\n            \"BGD\",\n            \"BTN\",\n            \"IND\",\n            \"IRN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"LKA\",\n            \"MDV\",\n            \"NPL\",\n            \"PAK\",\n            \"TJK\",\n            \"TKM\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"UNSDG_ENA\",\n        name: \"Europe and Northern America (UN SDG)\",\n        slug: \"europe-and-northern-america-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"BMU\",\n            \"CAN\",\n            \"CHE\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"GRL\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SJM\",\n            \"SMR\",\n            \"SPM\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"USA\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"UNSDG_ESEA\",\n        name: \"Eastern and South-Eastern Asia (UN SDG)\",\n        slug: \"eastern-and-south-eastern-asia-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        members: [\n            \"BRN\",\n            \"CHN\",\n            \"HKG\",\n            \"IDN\",\n            \"JPN\",\n            \"KHM\",\n            \"KOR\",\n            \"LAO\",\n            \"MAC\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"PHL\",\n            \"PRK\",\n            \"SGP\",\n            \"THA\",\n            \"TLS\",\n            \"VNM\",\n        ],\n    },\n    {\n        code: \"UNSDG_LAC\",\n        name: \"Latin America and the Caribbean (UN SDG)\",\n        slug: \"latin-america-and-the-caribbean-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"BVT\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"UNSDG_NAWA\",\n        name: \"Northern Africa and Western Asia (UN SDG)\",\n        slug: \"northern-africa-and-western-asia-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        members: [\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BHR\",\n            \"CYP\",\n            \"DZA\",\n            \"EGY\",\n            \"ESH\",\n            \"GEO\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"OMN\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SDN\",\n            \"SYR\",\n            \"TUN\",\n            \"TUR\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"UNSDG_OC\",\n        name: \"Oceania (UN SDG)\",\n        slug: \"oceania-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        members: [\n            \"ASM\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NCL\",\n            \"NIU\",\n            \"NRU\",\n            \"PCN\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"UMI\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"UNSDG_SSA\",\n        name: \"Sub-Saharan Africa (UN SDG)\",\n        slug: \"sub-saharan-africa-un-sdg\",\n        regionType: \"aggregate\",\n        definedBy: \"unsdg\",\n        members: [\n            \"AGO\",\n            \"ATF\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"IOT\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UN_AFR\",\n        name: \"Africa (UN)\",\n        slug: \"africa-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        translationCodes: [\"002\"],\n        members: [\n            \"AGO\",\n            \"ATF\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"ERI\",\n            \"ESH\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"IOT\",\n            \"KEN\",\n            \"LBR\",\n            \"LBY\",\n            \"LSO\",\n            \"MAR\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"MYT\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"REU\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SHN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TUN\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"UN_ASI\",\n        name: \"Asia (UN)\",\n        slug: \"asia-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        translationCodes: [\"142\"],\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"ARM\",\n            \"AZE\",\n            \"BGD\",\n            \"BHR\",\n            \"BRN\",\n            \"BTN\",\n            \"CHN\",\n            \"CYP\",\n            \"GEO\",\n            \"HKG\",\n            \"IDN\",\n            \"IND\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"JPN\",\n            \"KAZ\",\n            \"KGZ\",\n            \"KHM\",\n            \"KOR\",\n            \"KWT\",\n            \"LAO\",\n            \"LBN\",\n            \"LKA\",\n            \"MAC\",\n            \"MDV\",\n            \"MMR\",\n            \"MNG\",\n            \"MYS\",\n            \"NPL\",\n            \"OMN\",\n            \"PAK\",\n            \"PHL\",\n            \"PRK\",\n            \"QAT\",\n            \"SAU\",\n            \"SGP\",\n            \"SYR\",\n            \"THA\",\n            \"TJK\",\n            \"TKM\",\n            \"TLS\",\n            \"TUR\",\n            \"UZB\",\n            \"VNM\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"UN_EUR\",\n        name: \"Europe (UN)\",\n        slug: \"europe-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        translationCodes: [\"150\"],\n        members: [\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"AUT\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GGY\",\n            \"GIB\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SJM\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"UKR\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"UN_LAC\",\n        name: \"Latin America and the Caribbean (UN)\",\n        slug: \"latin-america-and-the-caribbean-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        translationCodes: [\"419\", \"029\"],\n        members: [\n            \"ABW\",\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BES\",\n            \"BHS\",\n            \"BLM\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"BVT\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GLP\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"MSR\",\n            \"MTQ\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"UN_NAM\",\n        name: \"Northern America (UN)\",\n        slug: \"northern-america-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        translationCodes: [\"003\"],\n        members: [\"BMU\", \"CAN\", \"GRL\", \"SPM\", \"USA\"],\n    },\n    {\n        code: \"UN_OCE\",\n        name: \"Oceania (UN)\",\n        slug: \"oceania-un\",\n        regionType: \"aggregate\",\n        definedBy: \"un\",\n        translationCodes: [\"009\"],\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"CCK\",\n            \"COK\",\n            \"CXR\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HMD\",\n            \"KIR\",\n            \"MHL\",\n            \"MNP\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PCN\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SLB\",\n            \"TKL\",\n            \"TON\",\n            \"TUV\",\n            \"UMI\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"URY\",\n        shortCode: \"UY\",\n        name: \"Uruguay\",\n        slug: \"uruguay\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"USA\",\n        shortCode: \"US\",\n        name: \"United States\",\n        slug: \"united-states\",\n        regionType: \"country\",\n        isMappable: true,\n        variantNames: [\"US\", \"USA\"],\n    },\n    {\n        code: \"UZB\",\n        shortCode: \"UZ\",\n        name: \"Uzbekistan\",\n        slug: \"uzbekistan\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"VAT\",\n        shortCode: \"VA\",\n        name: \"Vatican\",\n        slug: \"vatican\",\n        regionType: \"country\",\n    },\n    {\n        code: \"VCT\",\n        shortCode: \"VC\",\n        name: \"Saint Vincent and the Grenadines\",\n        slug: \"saint-vincent-and-the-grenadines\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"VEN\",\n        shortCode: \"VE\",\n        name: \"Venezuela\",\n        slug: \"venezuela\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"VGB\",\n        shortCode: \"VG\",\n        name: \"British Virgin Islands\",\n        slug: \"british-virgin-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"VIR\",\n        shortCode: \"VI\",\n        name: \"United States Virgin Islands\",\n        slug: \"united-states-virgin-islands\",\n        regionType: \"country\",\n    },\n    {\n        code: \"VNM\",\n        shortCode: \"VN\",\n        name: \"Vietnam\",\n        slug: \"vietnam\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"VUT\",\n        shortCode: \"VU\",\n        name: \"Vanuatu\",\n        slug: \"vanuatu\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"WB_EAP\",\n        name: \"East Asia and Pacific (WB)\",\n        slug: \"east-asia-and-pacific-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        translationCodes: [\"030\", \"009\"],\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"BRN\",\n            \"CCK\",\n            \"CHN\",\n            \"COK\",\n            \"CXR\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HKG\",\n            \"IDN\",\n            \"JPN\",\n            \"KHM\",\n            \"KIR\",\n            \"KOR\",\n            \"LAO\",\n            \"MAC\",\n            \"MHL\",\n            \"MMR\",\n            \"MNG\",\n            \"MNP\",\n            \"MYS\",\n            \"NCL\",\n            \"NFK\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"OWID_DRV\",\n            \"OWID_KRU\",\n            \"OWID_RVN\",\n            \"PCN\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PRK\",\n            \"PYF\",\n            \"SGP\",\n            \"SLB\",\n            \"THA\",\n            \"TKL\",\n            \"TLS\",\n            \"TON\",\n            \"TUV\",\n            \"TWN\",\n            \"UMI\",\n            \"VNM\",\n            \"VUT\",\n            \"WLF\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"WB_ECA\",\n        name: \"Europe and Central Asia (WB)\",\n        slug: \"europe-and-central-asia-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        translationCodes: [\"143\", \"150\"],\n        members: [\n            \"AIA\",\n            \"ALA\",\n            \"ALB\",\n            \"AND\",\n            \"ANT\",\n            \"ARM\",\n            \"AUT\",\n            \"AZE\",\n            \"BEL\",\n            \"BES\",\n            \"BGR\",\n            \"BIH\",\n            \"BLM\",\n            \"BLR\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"FRO\",\n            \"GBR\",\n            \"GEO\",\n            \"GGY\",\n            \"GIB\",\n            \"GLP\",\n            \"GRC\",\n            \"GRL\",\n            \"GUF\",\n            \"HRV\",\n            \"HUN\",\n            \"IMN\",\n            \"IRL\",\n            \"ISL\",\n            \"ITA\",\n            \"JEY\",\n            \"KAZ\",\n            \"KGZ\",\n            \"LIE\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MNE\",\n            \"MSR\",\n            \"MTQ\",\n            \"MYT\",\n            \"NLD\",\n            \"NOR\",\n            \"OWID_AUH\",\n            \"OWID_BAD\",\n            \"OWID_BAV\",\n            \"OWID_CYN\",\n            \"OWID_CZS\",\n            \"OWID_DSI\",\n            \"OWID_GDR\",\n            \"OWID_GFR\",\n            \"OWID_KOS\",\n            \"OWID_MOD\",\n            \"OWID_PAR\",\n            \"OWID_SAR\",\n            \"OWID_SAX\",\n            \"OWID_SEK\",\n            \"OWID_SRM\",\n            \"OWID_TSC\",\n            \"OWID_USS\",\n            \"OWID_WTB\",\n            \"OWID_YGS\",\n            \"POL\",\n            \"PRT\",\n            \"REU\",\n            \"ROU\",\n            \"RUS\",\n            \"SHN\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"TJK\",\n            \"TKM\",\n            \"TUR\",\n            \"UKR\",\n            \"UZB\",\n            \"VAT\",\n        ],\n    },\n    {\n        code: \"WB_LAC\",\n        name: \"Latin America and Caribbean (WB)\",\n        slug: \"latin-america-and-caribbean-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        translationCodes: [\"419\", \"029\"],\n        members: [\n            \"ABW\",\n            \"ARG\",\n            \"ATG\",\n            \"BHS\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CUW\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"FLK\",\n            \"GRD\",\n            \"GTM\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MAF\",\n            \"MEX\",\n            \"NIC\",\n            \"OWID_GCL\",\n            \"OWID_RCA\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SGS\",\n            \"SLV\",\n            \"SUR\",\n            \"SXM\",\n            \"TCA\",\n            \"TTO\",\n            \"URY\",\n            \"VCT\",\n            \"VEN\",\n            \"VGB\",\n            \"VIR\",\n        ],\n    },\n    {\n        code: \"WB_MENAP\",\n        name: \"Middle East, North Africa, Afghanistan and Pakistan (WB)\",\n        shortName: \"MENA, Afghanistan and Pakistan (WB)\",\n        slug: \"middle-east-north-africa-afghanistan-and-pakistan-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        translationCodes: [\"145\", \"015\"],\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"BHR\",\n            \"DJI\",\n            \"DZA\",\n            \"EGY\",\n            \"IRN\",\n            \"IRQ\",\n            \"ISR\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"MLT\",\n            \"OMN\",\n            \"OWID_FPK\",\n            \"PAK\",\n            \"PSE\",\n            \"QAT\",\n            \"SAU\",\n            \"SYR\",\n            \"TUN\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"WB_NA\",\n        name: \"North America (WB)\",\n        slug: \"north-america-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        translationCodes: [\"003\"],\n        members: [\"BMU\", \"CAN\", \"SPM\", \"USA\"],\n    },\n    {\n        code: \"WB_SA\",\n        name: \"South Asia (WB)\",\n        slug: \"south-asia-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        translationCodes: [\"034\"],\n        members: [\"BGD\", \"BTN\", \"IND\", \"IOT\", \"LKA\", \"MDV\", \"NPL\"],\n    },\n    {\n        code: \"WB_SSA\",\n        name: \"Sub-Saharan Africa (WB)\",\n        slug: \"sub-saharan-africa-wb\",\n        regionType: \"aggregate\",\n        definedBy: \"wb\",\n        translationCodes: [\"202\"],\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"OWID_ERE\",\n            \"OWID_OFS\",\n            \"RWA\",\n            \"SDN\",\n            \"SEN\",\n            \"SLE\",\n            \"SOM\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"WHO_AFR\",\n        name: \"Africa (WHO)\",\n        slug: \"africa-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        translationCodes: [\"002\"],\n        members: [\n            \"AGO\",\n            \"BDI\",\n            \"BEN\",\n            \"BFA\",\n            \"BWA\",\n            \"CAF\",\n            \"CIV\",\n            \"CMR\",\n            \"COD\",\n            \"COG\",\n            \"COM\",\n            \"CPV\",\n            \"DZA\",\n            \"ERI\",\n            \"ETH\",\n            \"GAB\",\n            \"GHA\",\n            \"GIN\",\n            \"GMB\",\n            \"GNB\",\n            \"GNQ\",\n            \"KEN\",\n            \"LBR\",\n            \"LSO\",\n            \"MDG\",\n            \"MLI\",\n            \"MOZ\",\n            \"MRT\",\n            \"MUS\",\n            \"MWI\",\n            \"NAM\",\n            \"NER\",\n            \"NGA\",\n            \"RWA\",\n            \"SEN\",\n            \"SLE\",\n            \"SSD\",\n            \"STP\",\n            \"SWZ\",\n            \"SYC\",\n            \"TCD\",\n            \"TGO\",\n            \"TZA\",\n            \"UGA\",\n            \"ZAF\",\n            \"ZMB\",\n            \"ZWE\",\n        ],\n    },\n    {\n        code: \"WHO_AMR\",\n        name: \"Americas (WHO)\",\n        slug: \"americas-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        translationCodes: [\"019\"],\n        members: [\n            \"AIA\",\n            \"ARG\",\n            \"ATG\",\n            \"BHS\",\n            \"BLZ\",\n            \"BOL\",\n            \"BRA\",\n            \"BRB\",\n            \"CAN\",\n            \"CHL\",\n            \"COL\",\n            \"CRI\",\n            \"CUB\",\n            \"CYM\",\n            \"DMA\",\n            \"DOM\",\n            \"ECU\",\n            \"GRD\",\n            \"GTM\",\n            \"GUF\",\n            \"GUY\",\n            \"HND\",\n            \"HTI\",\n            \"JAM\",\n            \"KNA\",\n            \"LCA\",\n            \"MEX\",\n            \"MSR\",\n            \"NIC\",\n            \"PAN\",\n            \"PER\",\n            \"PRI\",\n            \"PRY\",\n            \"SLV\",\n            \"SUR\",\n            \"TTO\",\n            \"URY\",\n            \"USA\",\n            \"VEN\",\n        ],\n    },\n    {\n        code: \"WHO_EMR\",\n        name: \"Eastern Mediterranean (WHO)\",\n        slug: \"eastern-mediterranean-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        translationCodes: [\"145\"],\n        members: [\n            \"AFG\",\n            \"ARE\",\n            \"BHR\",\n            \"DJI\",\n            \"EGY\",\n            \"IRN\",\n            \"IRQ\",\n            \"JOR\",\n            \"KWT\",\n            \"LBN\",\n            \"LBY\",\n            \"MAR\",\n            \"OMN\",\n            \"PAK\",\n            \"QAT\",\n            \"SAU\",\n            \"SDN\",\n            \"SOM\",\n            \"SYR\",\n            \"TUN\",\n            \"YEM\",\n        ],\n    },\n    {\n        code: \"WHO_EUR\",\n        name: \"Europe (WHO)\",\n        slug: \"europe-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        translationCodes: [\"150\"],\n        members: [\n            \"ALB\",\n            \"AND\",\n            \"ARM\",\n            \"AUT\",\n            \"AZE\",\n            \"BEL\",\n            \"BGR\",\n            \"BIH\",\n            \"BLR\",\n            \"CHE\",\n            \"CYP\",\n            \"CZE\",\n            \"DEU\",\n            \"DNK\",\n            \"ESP\",\n            \"EST\",\n            \"FIN\",\n            \"FRA\",\n            \"GBR\",\n            \"GEO\",\n            \"GRC\",\n            \"HRV\",\n            \"HUN\",\n            \"IRL\",\n            \"ISL\",\n            \"ISR\",\n            \"ITA\",\n            \"KAZ\",\n            \"KGZ\",\n            \"LTU\",\n            \"LUX\",\n            \"LVA\",\n            \"MCO\",\n            \"MDA\",\n            \"MKD\",\n            \"MLT\",\n            \"MNE\",\n            \"NLD\",\n            \"NOR\",\n            \"POL\",\n            \"PRT\",\n            \"ROU\",\n            \"RUS\",\n            \"SMR\",\n            \"SRB\",\n            \"SVK\",\n            \"SVN\",\n            \"SWE\",\n            \"TJK\",\n            \"TKM\",\n            \"TUR\",\n            \"UKR\",\n            \"UZB\",\n        ],\n    },\n    {\n        code: \"WHO_SEAR\",\n        name: \"South-East Asia (WHO)\",\n        slug: \"south-east-asia-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        translationCodes: [\"035\"],\n        members: [\n            \"BGD\",\n            \"BTN\",\n            \"IDN\",\n            \"IND\",\n            \"LKA\",\n            \"MDV\",\n            \"MMR\",\n            \"NPL\",\n            \"PRK\",\n            \"THA\",\n            \"TLS\",\n        ],\n    },\n    {\n        code: \"WHO_WPAC\",\n        name: \"Western Pacific (WHO)\",\n        slug: \"western-pacific-who\",\n        regionType: \"aggregate\",\n        definedBy: \"who\",\n        translationCodes: [\"030\", \"035\", \"009\"],\n        members: [\n            \"ASM\",\n            \"AUS\",\n            \"BRN\",\n            \"CHN\",\n            \"COK\",\n            \"FJI\",\n            \"FSM\",\n            \"GUM\",\n            \"HKG\",\n            \"JPN\",\n            \"KHM\",\n            \"KIR\",\n            \"KOR\",\n            \"LAO\",\n            \"MAC\",\n            \"MHL\",\n            \"MNG\",\n            \"MNP\",\n            \"MYS\",\n            \"NCL\",\n            \"NIU\",\n            \"NRU\",\n            \"NZL\",\n            \"PHL\",\n            \"PLW\",\n            \"PNG\",\n            \"PYF\",\n            \"SGP\",\n            \"SLB\",\n            \"TON\",\n            \"TUV\",\n            \"VNM\",\n            \"VUT\",\n            \"WSM\",\n        ],\n    },\n    {\n        code: \"WLF\",\n        shortCode: \"WF\",\n        name: \"Wallis and Futuna\",\n        slug: \"wallis-and-futuna\",\n        regionType: \"country\",\n        isUnlisted: true,\n    },\n    {\n        code: \"WSM\",\n        shortCode: \"WS\",\n        name: \"Samoa\",\n        slug: \"samoa\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"YEM\",\n        shortCode: \"YE\",\n        name: \"Yemen\",\n        slug: \"yemen\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ZAF\",\n        shortCode: \"ZA\",\n        name: \"South Africa\",\n        slug: \"south-africa\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ZMB\",\n        shortCode: \"ZM\",\n        name: \"Zambia\",\n        slug: \"zambia\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n    {\n        code: \"ZWE\",\n        shortCode: \"ZW\",\n        name: \"Zimbabwe\",\n        slug: \"zimbabwe\",\n        regionType: \"country\",\n        isMappable: true,\n    },\n] as const\n","import { regionsData } from \"./regions.data.js\"\nimport type { Region } from \"./regionsTypes.js\"\n\nexport const regions: readonly Region[] =\n    regionsData satisfies readonly Region[]\n","import * as _ from \"lodash-es\"\nimport { EntityName } from \"@ourworldindata/types\"\nimport { lazy } from \"../Util.js\"\nimport { regions } from \"./regions.js\"\nimport type {\n    Region,\n    Country,\n    Aggregate,\n    Continent,\n    IncomeGroup,\n    OwidIncomeGroupCode,\n    RegionDataProvider,\n    AggregateWithDefinedBy,\n} from \"./regionsTypes.js\"\n\nexport function checkIsCountry(region: Region): region is Country {\n    return region.regionType === \"country\" || region.regionType === \"other\"\n}\n\nexport function checkIsAggregate(region: Region): region is Aggregate {\n    return region.regionType === \"aggregate\"\n}\n\nexport function checkIsOwidContinent(region: Region): region is Continent {\n    return region.regionType === \"continent\"\n}\n\nexport function checkIsIncomeGroup(region: Region): region is IncomeGroup {\n    return region.regionType === \"income_group\"\n}\n\nexport function checkHasMembers(\n    region?: Region\n): region is Aggregate | Continent | IncomeGroup {\n    return region !== undefined && \"members\" in region\n}\n\nexport function checkIsOwidIncomeGroupCode(\n    code: string\n): code is OwidIncomeGroupCode {\n    return getIncomeGroups().some((incomeGroup) => incomeGroup.code === code)\n}\n\nexport const countries: Country[] = regions.filter(\n    (entity): entity is Country =>\n        entity.regionType === \"country\" &&\n        !entity.isUnlisted &&\n        !entity.isHistorical\n)\n\nexport const mappableCountries: Country[] = regions.filter(\n    (country): country is Country =>\n        checkIsCountry(country) && !!country.isMappable\n)\n\nexport const getContinents = lazy(() =>\n    regions.filter((entity): entity is Continent =>\n        checkIsOwidContinent(entity)\n    )\n)\n\nexport const getIncomeGroups = lazy(() =>\n    regions.filter((entity): entity is IncomeGroup =>\n        checkIsIncomeGroup(entity)\n    )\n)\n\nexport const getAggregates = lazy(() =>\n    regions.filter((entity): entity is Aggregate => checkIsAggregate(entity))\n)\n\nexport const listedRegionsNames = lazy(() =>\n    regions\n        .filter((entity) => checkIsCountry(entity) && !entity.isUnlisted)\n        .map((entity) => entity.name)\n)\n\nexport const getRegionDataProviders = lazy(() =>\n    _.uniq(\n        regions\n            .filter(\n                (r): r is AggregateWithDefinedBy =>\n                    r.regionType === \"aggregate\" && \"definedBy\" in r\n            )\n            .map((r) => r.definedBy)\n    )\n)\n\nexport const getAggregatesByProvider = (\n    provider: RegionDataProvider\n): Aggregate[] => getAggregates().filter((r) => r.definedBy === provider)\n\nconst regionsByName = lazy(() =>\n    Object.fromEntries(regions.map((region) => [region.name, region]))\n)\n\nconst regionsBySlug = lazy(() =>\n    Object.fromEntries(regions.map((region) => [region.slug, region]))\n)\n\nconst regionsByCode = lazy(() =>\n    Object.fromEntries(regions.map((region) => [region.code, region]))\n)\n\nconst regionsByShortName = lazy(() =>\n    Object.fromEntries(\n        regions\n            .filter((region) => region.shortName)\n            .map((region) => [region.shortName, region])\n    )\n)\n\nconst regionsByNameOrVariantNameLowercase = lazy(\n    () =>\n        new Map(\n            regions.flatMap((region) => {\n                const names = [region.name.toLowerCase()]\n                if (\"variantNames\" in region && region.variantNames) {\n                    names.push(\n                        ...region.variantNames.map((variant) =>\n                            variant.toLowerCase()\n                        )\n                    )\n                }\n                return names.map((name) => [name, region])\n            })\n        )\n)\n\nexport const countriesByName = lazy(() =>\n    Object.fromEntries(countries.map((country) => [country.name, country]))\n)\n\nconst countriesBySlug = lazy(() =>\n    Object.fromEntries(countries.map((country) => [country.slug, country]))\n)\n\nexport const incomeGroupsByCode = lazy(\n    () =>\n        Object.fromEntries(\n            getIncomeGroups().map((region) => [region.code, region])\n        ) as Record<OwidIncomeGroupCode, IncomeGroup>\n)\n\nexport const getRegionByName = (name: string): Region | undefined =>\n    regionsByName()[name]\n\nexport const getRegionBySlug = (slug: string): Region | undefined =>\n    regionsBySlug()[slug]\n\nexport const getRegionByCode = (code: string): Region | undefined =>\n    regionsByCode()[code]\n\nexport const getRegionByShortName = (shortName: string): Region | undefined =>\n    regionsByShortName()[shortName]\n\nexport const getRegionByNameOrVariantName = (\n    nameOrVariantName: string\n): Region | undefined =>\n    regionsByNameOrVariantNameLowercase().get(nameOrVariantName.toLowerCase())\n\nexport const getCountryByName = (name: string): Country | undefined =>\n    countriesByName()[name]\n\nexport const getCountryBySlug = (slug: string): Country | undefined =>\n    countriesBySlug()[slug]\n\n/**\n * Lazy-loaded map of region names to their parent regions.\n *\n * This creates a reverse lookup from child regions to all the parent regions\n * that contain them. For example, if \"France\" is a member of both \"Europe\"\n * and \"European Union\", then parentRegions.get(\"France\") would return\n * both regions.\n */\nconst parentRegions = lazy(() => {\n    const parentRegions = new Map<string, Region[]>()\n    for (const region of regions) {\n        // Only process regions that can contain other regions\n        if (!checkHasMembers(region)) continue\n\n        for (const memberCode of region.members) {\n            const subRegion = getRegionByCode(memberCode)\n            if (!subRegion) continue\n            if (!parentRegions.has(subRegion.name))\n                parentRegions.set(subRegion.name, [])\n            parentRegions.get(subRegion.name)!.push(region)\n        }\n    }\n    return parentRegions\n})\n\n/**\n * Get all parent regions that contain the specified region as a member.\n *\n * For example, France's parent regions are 'Europe', 'European Union',\n * 'High-income countries', etc.\n */\nexport const getParentRegions = (regionName: string): Region[] => {\n    return parentRegions().get(regionName) ?? []\n}\n\n/**\n * Get all sibling regions that share the same parent(s) as the specified region.\n *\n * For example, returns other European countries for 'Germany' or other\n * continents for 'Europe'.\n */\nexport const getSiblingRegions = (regionName: string): Region[] => {\n    const parentRegions = getParentRegions(regionName)\n    const siblingCodes = _.uniq(\n        parentRegions.flatMap((region) =>\n            checkHasMembers(region) ? region.members : []\n        )\n    )\n    return siblingCodes\n        .map(getRegionByCode)\n        .filter(\n            (region): region is Region =>\n                region !== undefined && region.name !== regionName\n        )\n}\n\n/**\n * Gets the OWID continent name for a country.\n * Returns undefined if the entity is not a country or has no continent.\n */\nexport function getContinentForCountry(\n    countryName: EntityName\n): string | undefined {\n    const parentRegions = getParentRegions(countryName)\n    const continent = parentRegions.find((r) => checkIsOwidContinent(r))\n    return continent?.name\n}\n\nconst getCountryNamesForRegionRecursive = (region: Region): string[] => {\n    if (!checkHasMembers(region)) return [region.name]\n    return region.members.reduce<string[]>((countryNames, memberCode) => {\n        const subRegion = getRegionByCode(memberCode)\n        if (!subRegion) return countryNames\n        return [\n            ...countryNames,\n            ...getCountryNamesForRegionRecursive(subRegion),\n        ]\n    }, [])\n}\n\nexport const getCountryNamesForRegion = (\n    region: Exclude<Region, Country>\n): string[] => {\n    return getCountryNamesForRegionRecursive(region)\n}\n\nconst _IntlDisplayNamesInstances = new Map<string, Intl.DisplayNames>()\nconst getRegionTranslation = (\n    regionCode: string,\n    languageCode: string\n): string | undefined => {\n    try {\n        if (!_IntlDisplayNamesInstances.has(languageCode)) {\n            _IntlDisplayNamesInstances.set(\n                languageCode,\n                new Intl.DisplayNames([languageCode], {\n                    type: \"region\",\n                    fallback: \"none\",\n                })\n            )\n        }\n        return _IntlDisplayNamesInstances.get(languageCode)!.of(regionCode)\n    } catch {\n        return undefined\n    }\n}\n\nconst _regionAlternativeNames = new Map<string, string[] | undefined>()\nexport const getRegionAlternativeNames = (\n    regionName: string,\n    languages: readonly string[]\n): string[] | undefined => {\n    if (!_regionAlternativeNames.has(regionName)) {\n        const region = getRegionByNameOrVariantName(regionName)\n        if (region) {\n            const names = new Set<string>()\n            if (\"variantNames\" in region && region.variantNames) {\n                for (const variant of region.variantNames) {\n                    names.add(variant)\n                }\n            }\n\n            const translationCodes =\n                \"translationCodes\" in region\n                    ? region.translationCodes\n                    : undefined\n            const shortCode =\n                \"shortCode\" in region ? region.shortCode : undefined\n\n            const codes = translationCodes ?? (shortCode ? [shortCode] : [])\n            const translations = languages\n                .flatMap((lang) =>\n                    codes.map((code) => getRegionTranslation(code, lang))\n                )\n                .filter((name) => name !== undefined)\n\n            translations.forEach((translation) => names.add(translation))\n            _regionAlternativeNames.set(regionName, Array.from(names))\n        } else {\n            _regionAlternativeNames.set(regionName, undefined)\n        }\n    }\n    return _regionAlternativeNames.get(regionName)!\n}\n\n// Regions that require the definite article \"the\" before their name\n// Maintained here instead of in the ETL because it's such a specific piece of metadata.\nconst regionsWithArticles = new Set([\n    \"Aland Islands\",\n    \"Netherlands Antilles\",\n    \"United Arab Emirates\",\n    \"French Southern Territories\",\n    \"Bahrain\",\n    \"Bahamas\",\n    \"Central African Republic\",\n    \"Cocos Islands\",\n    \"Democratic Republic of Congo\",\n    \"Congo\",\n    \"Cook Islands\",\n    \"Comoros\",\n    \"Cayman Islands\",\n    \"Dominican Republic\",\n    \"Western Sahara\",\n    \"Falkland Islands\",\n    \"Faroe Islands\",\n    \"United Kingdom\",\n    \"Gambia\",\n    \"Heard Island and McDonald Islands\",\n    \"Isle of Man\",\n    \"British Indian Ocean Territory\",\n    \"Maldives\",\n    \"Marshall Islands\",\n    \"Northern Mariana Islands\",\n    \"Netherlands\",\n    \"Grand Duchy of Baden\",\n    \"Kingdom of Bavaria\",\n    \"Democratic Republic of Vietnam\",\n    \"Kingdom of the Two Sicilies\",\n    \"Duchy of Modena and Reggio\",\n    \"Orange Free State\",\n    \"Duchy of Parma and Piacenza\",\n    \"Federal Republic of Central America\",\n    \"Republic of Vietnam\",\n    \"Kingdom of Sardinia\",\n    \"Kingdom of Saxony\",\n    \"Sudan (former)\",\n    \"Grand Duchy of Tuscany\",\n    \"USSR\",\n    \"Kingdom of Wurttemberg\",\n    \"Yemen Arab Republic\",\n    \"Yemen People's Republic\",\n    \"Philippines\",\n    \"Gaza Strip\",\n    \"South Georgia and the South Sandwich Islands\",\n    \"Solomon Islands\",\n    \"Seychelles\",\n    \"Turks and Caicos Islands\",\n    \"United States\",\n    \"Vatican\",\n    \"British Virgin Islands\",\n    \"United States Virgin Islands\",\n])\n\nexport const articulateEntity = (entityName: EntityName): string => {\n    return regionsWithArticles.has(entityName)\n        ? `the ${entityName}`\n        : entityName\n}\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n  try {\n    return decodeURIComponent(input.replace(/\\+/g, ' '));\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n  try {\n    return encodeURIComponent(input);\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  while (part = parser.exec(query)) {\n    var key = decode(part[1])\n      , value = decode(part[2]);\n\n    //\n    // Prevent overriding of existing properties. This ensures that build-in\n    // methods like `toString` or __proto__ are not overriden by malicious\n    // querystrings.\n    //\n    // In the case if failed decoding, we want to omit the key/value pairs\n    // from the result.\n    //\n    if (key === null || value === null || key in result) continue;\n    result[key] = value;\n  }\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = []\n    , value\n    , key;\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (key in obj) {\n    if (has.call(obj, key)) {\n      value = obj[key];\n\n      //\n      // Edge cases where we actually want to encode the value to an empty\n      // string instead of the stringified value.\n      //\n      if (!value && (value === null || value === undef || isNaN(value))) {\n        value = '';\n      }\n\n      key = encodeURIComponent(key);\n      value = encodeURIComponent(value);\n\n      //\n      // If we failed to encode the strings, we should bail out as we don't\n      // want to add invalid strings to the query.\n      //\n      if (key === null || value === null) continue;\n      pairs.push(key +'='+ value);\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\nvar required = require('requires-port')\n  , qs = require('querystringify')\n  , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n  , CRHTLF = /[\\n\\r\\t]/g\n  , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n  , port = /:\\d+$/\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n  , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n *     characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n  return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  function sanitize(address, url) {     // Sanitize what is left of the address\n    return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n  },\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d*)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n  var globalVar;\n\n  if (typeof window !== 'undefined') globalVar = window;\n  else if (typeof global !== 'undefined') globalVar = global;\n  else if (typeof self !== 'undefined') globalVar = self;\n  else globalVar = {};\n\n  var location = globalVar.location || {};\n  loc = loc || location;\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new Url(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new Url(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n  return (\n    scheme === 'file:' ||\n    scheme === 'ftp:' ||\n    scheme === 'http:' ||\n    scheme === 'https:' ||\n    scheme === 'ws:' ||\n    scheme === 'wss:'\n  );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n  location = location || {};\n\n  var match = protocolre.exec(address);\n  var protocol = match[1] ? match[1].toLowerCase() : '';\n  var forwardSlashes = !!match[2];\n  var otherSlashes = !!match[3];\n  var slashesCount = 0;\n  var rest;\n\n  if (forwardSlashes) {\n    if (otherSlashes) {\n      rest = match[2] + match[3] + match[4];\n      slashesCount = match[2].length + match[3].length;\n    } else {\n      rest = match[2] + match[4];\n      slashesCount = match[2].length;\n    }\n  } else {\n    if (otherSlashes) {\n      rest = match[3] + match[4];\n      slashesCount = match[3].length;\n    } else {\n      rest = match[4]\n    }\n  }\n\n  if (protocol === 'file:') {\n    if (slashesCount >= 2) {\n      rest = rest.slice(2);\n    }\n  } else if (isSpecial(protocol)) {\n    rest = match[4];\n  } else if (protocol) {\n    if (forwardSlashes) {\n      rest = rest.slice(2);\n    }\n  } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n    rest = match[4];\n  }\n\n  return {\n    protocol: protocol,\n    slashes: forwardSlashes || isSpecial(protocol),\n    slashesCount: slashesCount,\n    rest: rest\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n  if (relative === '') return base;\n\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n\n  if (!(this instanceof Url)) {\n    return new Url(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '', location);\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (\n    extracted.protocol === 'file:' && (\n      extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n    (!extracted.slashes &&\n      (extracted.protocol ||\n        extracted.slashesCount < 2 ||\n        !isSpecial(url.protocol)))\n  ) {\n    instructions[3] = [/(.*)/, 'pathname'];\n  }\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n\n    if (typeof instruction === 'function') {\n      address = instruction(address, url);\n      continue;\n    }\n\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      index = parse === '@'\n        ? address.lastIndexOf(parse)\n        : address.indexOf(parse);\n\n      if (~index) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // Default to a / for pathname if none exists. This normalizes the URL\n  // to always have a /\n  //\n  if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n    url.pathname = '/' + url.pathname;\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!required(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n\n  if (url.auth) {\n    index = url.auth.indexOf(':');\n\n    if (~index) {\n      url.username = url.auth.slice(0, index);\n      url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n      url.password = url.auth.slice(index + 1);\n      url.password = encodeURIComponent(decodeURIComponent(url.password))\n    } else {\n      url.username = encodeURIComponent(decodeURIComponent(url.auth));\n    }\n\n    url.auth = url.password ? url.username +':'+ url.password : url.username;\n  }\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || qs.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!required(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (port.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n    case 'hash':\n      if (value) {\n        var char = part === 'pathname' ? '/' : '#';\n        url[part] = value.charAt(0) !== char ? char + value : value;\n      } else {\n        url[part] = value;\n      }\n      break;\n\n    case 'username':\n    case 'password':\n      url[part] = encodeURIComponent(value);\n      break;\n\n    case 'auth':\n      var index = value.indexOf(':');\n\n      if (~index) {\n        url.username = value.slice(0, index);\n        url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n        url.password = value.slice(index + 1);\n        url.password = encodeURIComponent(decodeURIComponent(url.password));\n      } else {\n        url.username = encodeURIComponent(decodeURIComponent(value));\n      }\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n  var query\n    , url = this\n    , host = url.host\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result =\n    protocol +\n    ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  } else if (url.password) {\n    result += ':'+ url.password;\n    result += '@';\n  } else if (\n    url.protocol !== 'file:' &&\n    isSpecial(url.protocol) &&\n    !host &&\n    url.pathname !== '/'\n  ) {\n    //\n    // Add back the empty userinfo, otherwise the original invalid URL\n    // might be transformed into a valid one with `url.pathname` as host.\n    //\n    result += '@';\n  }\n\n  //\n  // Trailing colon is removed from `url.host` when it is parsed. If it still\n  // ends with a colon, then add back the trailing colon that was removed. This\n  // prevents an invalid URL from being transformed into a valid one.\n  //\n  if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n    host += ':';\n  }\n\n  result += host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","import { QueryParams } from \"@ourworldindata/types\"\nimport { omitUndefinedValues } from \"../Util.js\"\n\n/**\n * Converts a query string into an object of key-value pairs.\n * Handles URI-decoding of the values.\n * @param queryStr\n * @param doNotDecode Passing `true` will return a QueryParams object with URI-encoded values.\n *                    Only use when absolutely necessary, for example, to distinguish between\n *                    `+` and `%20` for legacy URLs.\n */\nexport const strToQueryParams = (\n    queryStr = \"\",\n    doNotDecode: boolean = false\n): QueryParams => {\n    if (queryStr[0] === \"?\") queryStr = queryStr.substring(1)\n\n    const querySplit = queryStr.split(\"&\").filter((s) => s)\n    const params: QueryParams = {}\n\n    for (const param of querySplit) {\n        const [key, value] = param.split(\"=\", 2)\n        const decodedKey = decodeURIComponent(key.replace(/\\+/g, \"%20\"))\n        const decoded =\n            value !== undefined\n                ? decodeURIComponent(value.replace(/\\+/g, \"%20\"))\n                : undefined\n\n        params[decodedKey] = doNotDecode ? value : decoded\n    }\n\n    return params\n}\n\n/**\n * Converts an object to a query string.\n * Expects the input object to not be encoded already, and handles the URI-encoding of the values.\n */\nexport const queryParamsToStr = (params: QueryParams): string => {\n    const queryParams = new URLSearchParams(omitUndefinedValues(params))\n\n    // we're relying on `~` (%7E) to not be encoded in some places, so make sure that it never is\n    const newQueryStr = queryParams.toString().replace(/%7E/g, \"~\")\n    return newQueryStr.length ? `?${newQueryStr}` : \"\"\n}\n\nexport const getWindowQueryStr = (): string => window.location.search\n\nexport const setWindowQueryStr = (str: string): void =>\n    history.replaceState(\n        null,\n        document.title,\n        window.location.pathname + str + window.location.hash\n    )\n","import urlParseLib from \"url-parse\"\nimport { gdocUrlRegex, QueryParams } from \"@ourworldindata/types\"\n\nimport {\n    detailOnDemandRegex,\n    guidedChartRegex,\n    excludeUndefined,\n    omitUndefinedValues,\n} from \"../Util.js\"\n\nimport { queryParamsToStr, strToQueryParams } from \"./UrlUtils.js\"\nimport * as R from \"remeda\"\n\nconst parseUrl = (url: string): urlParseLib<string> => urlParseLib(url, {})\n\nconst ensureStartsWith = (str: string, start: string): string => {\n    if (str.startsWith(start)) return str\n    return `${start}${str}`\n}\n\nconst ensureQueryStrFormat = (queryStr: string): string =>\n    ensureStartsWith(queryStr, \"?\")\nconst ensureHashFormat = (queryStr: string): string =>\n    ensureStartsWith(queryStr, \"#\")\n\ninterface UrlProps {\n    readonly origin?: string // https://ourworldindata.org\n    readonly pathname?: string // /grapher/abc\n    readonly queryStr?: string // ?stackMode=relative\n    readonly hash?: string // #articles\n}\n\nexport class Url {\n    private props: UrlProps\n\n    /**\n     * @param url Absolute or relative URL\n     */\n    static fromURL(url: string): Url {\n        const { origin, pathname, query, hash } = parseUrl(url)\n        return new Url({\n            origin:\n                origin !== undefined && origin !== \"null\" ? origin : undefined,\n            pathname,\n            queryStr: query,\n            hash,\n        })\n    }\n\n    static fromQueryStr(queryStr: string): Url {\n        return new Url({\n            queryStr: ensureQueryStrFormat(queryStr),\n        })\n    }\n\n    static fromQueryParams(queryParams: QueryParams): Url {\n        return new Url({\n            queryStr: queryParamsToStr(queryParams),\n        })\n    }\n\n    private constructor(props: UrlProps = {}) {\n        this.props = {\n            ...props,\n            pathname:\n                props.pathname !== undefined\n                    ? props.pathname\n                    : props.origin\n                      ? \"\"\n                      : undefined,\n        }\n    }\n\n    get origin(): string | undefined {\n        return this.props.origin\n    }\n\n    get pathname(): string | undefined {\n        return this.props.pathname\n    }\n\n    get slug(): string | undefined {\n        return this.props.pathname?.split(\"/\").pop()\n    }\n\n    get originAndPath(): string | undefined {\n        const strings = excludeUndefined([this.origin, this.pathname])\n        if (strings.length === 0) return undefined\n        return strings.join(\"\")\n    }\n\n    get queryStr(): string {\n        const { queryStr } = this.props\n        // Drop a single trailing `?`, if there is one\n        return queryStr && queryStr !== \"?\"\n            ? ensureQueryStrFormat(queryStr)\n            : \"\"\n    }\n\n    get hash(): string {\n        const { hash } = this.props\n        return hash ? ensureHashFormat(hash) : \"\"\n    }\n\n    get fullUrl(): string {\n        return excludeUndefined([\n            this.origin,\n            this.pathname,\n            this.queryStr,\n            this.hash,\n        ]).join(\"\")\n    }\n\n    get fullUrlNoTrailingSlash(): string {\n        return this.fullUrl.replace(/\\/$/, \"\") || \"/\"\n    }\n\n    get queryParams(): QueryParams {\n        return strToQueryParams(this.queryStr)\n    }\n\n    get encodedQueryParams(): QueryParams {\n        return strToQueryParams(this.queryStr, true)\n    }\n\n    get isGoogleDoc(): boolean {\n        return !!(this.pathname && gdocUrlRegex.test(this.fullUrl))\n    }\n\n    get isGrapher(): boolean {\n        return !!(this.pathname && /^\\/grapher\\/[\\w]+/.test(this.pathname))\n    }\n\n    get isDod(): boolean {\n        return !!(this.fullUrl && detailOnDemandRegex.test(this.fullUrl))\n    }\n    get isGuidedChart(): boolean {\n        return !!(this.fullUrl && guidedChartRegex.test(this.fullUrl))\n    }\n\n    get isUpload(): boolean {\n        return !!(this.pathname && /^\\/uploads\\/[\\w]+/.test(this.pathname))\n    }\n\n    // todo(refactor): move outisde of generic Url class\n    // see EXPLORERS_ROUTE_FOLDER\n    get isExplorer(): boolean {\n        return !!(this.pathname && /^\\/explorers\\/[\\w]+/.test(this.pathname))\n    }\n\n    update(props: UrlProps): Url {\n        return new Url({\n            ...this.props,\n            ...props,\n        })\n    }\n\n    setQueryParams(queryParams: QueryParams): Url {\n        return new Url({\n            ...this.props,\n            queryStr: queryParamsToStr(queryParams),\n        })\n    }\n\n    updateQueryParams(queryParams: QueryParams): Url {\n        return this.update({\n            queryStr: queryParamsToStr(\n                omitUndefinedValues({\n                    ...this.queryParams,\n                    ...queryParams,\n                })\n            ),\n        })\n    }\n\n    areQueryParamsEqual(otherUrl: Url): boolean {\n        const thisParams = this.queryParams\n        const otherParams = otherUrl.queryParams\n\n        return R.isShallowEqual(thisParams, otherParams)\n    }\n}\n\nexport const setWindowUrl = (url: Url): void => {\n    const pathname = url.pathname ?? window.location.pathname\n    window.history.replaceState(\n        null,\n        document.title,\n        excludeUndefined([pathname, url.queryStr, url.hash]).join(\"\")\n    )\n}\n\nexport const getWindowUrl = (): Url => {\n    return Url.fromURL(window.location.href)\n}\n","import * as _ from \"lodash-es\"\nimport { match } from \"ts-pattern\"\nimport {\n    articulateEntity,\n    checkHasMembers,\n    checkIsCountry,\n    countries,\n    getRegionByName,\n    getRegionByNameOrVariantName,\n    regions,\n    type Region,\n} from \"./regions/index.js\"\nimport {\n    CalloutFunction,\n    EnrichedBlockConditionalSection,\n    EnrichedBlockDataCallout,\n    GRAPHER_QUERY_PARAM_KEYS,\n    GrapherValuesJson,\n    GrapherValuesJsonDataPoint,\n    LinkedCallouts,\n    ParseError,\n    SpanCallout,\n    type OwidGdocProfileContent,\n} from \"@ourworldindata/types\"\n\nimport { traverseEnrichedBlock } from \"./Util.js\"\nimport { Url } from \"./urls/Url.js\"\n\nexport type ProfileEntity = Pick<Region, \"name\" | \"code\">\n\ntype ReplacementPair = [token: string, value: string]\n\nconst replaceTokens = (text: string, replacements: ReplacementPair[]): string =>\n    replacements.reduce(\n        (acc, [token, replacement]) =>\n            acc.includes(token) ? acc.split(token).join(replacement) : acc,\n        text\n    )\n\n/**\n * Recursively replaces strings in the given array based on the provided replacements.\n * e.g.\n * [\"Data for $entityName\", \"$entityName is a country\"] with [(\"$entityName\", \"Canada\")] → [\"Data for Canada\", \"Canada is a country\"]\n */\nconst replaceStringsInArray = (\n    items: any[],\n    replacements: ReplacementPair[]\n): void => {\n    for (let index = 0; index < items.length; index++) {\n        const item = items[index]\n        if (typeof item === \"string\") {\n            items[index] = replaceTokens(item, replacements)\n        } else if (Array.isArray(item)) {\n            replaceStringsInArray(item, replacements)\n        } else if (item && typeof item === \"object\") {\n            replaceStringsInObject(item as Record<string, any>, replacements)\n        }\n    }\n}\n\n/**\n * Recursively replaces strings in the given record based on the provided replacements.\n * e.g.\n * { title: \"Data for $entityName\" } with [(\"$entityName\", \"Canada\")] → { title: \"Data for Canada\" }\n * { list: [\"$entityName facts\", \"$entityName is a country\"] } → { list: [\"Canada facts\", \"Canada is a country\"] }\n */\nconst replaceStringsInObject = (\n    record: Record<string, any>,\n    replacements: ReplacementPair[]\n): void => {\n    for (const key of Object.keys(record)) {\n        const value = record[key]\n        if (typeof value === \"string\") {\n            record[key] = replaceTokens(value, replacements)\n        } else if (Array.isArray(value)) {\n            replaceStringsInArray(value, replacements)\n        } else if (value && typeof value === \"object\") {\n            replaceStringsInObject(value as Record<string, any>, replacements)\n        }\n    }\n}\n\nconst getEntityPossessive = (value: string): string => {\n    const trimmedValue = value.trim()\n    if (!trimmedValue) return trimmedValue\n    return /s$/i.test(trimmedValue) ? `${trimmedValue}’` : `${trimmedValue}’s`\n}\n\nconst capitalizeEntityName = (value: string): string => {\n    if (!value) return value\n    const [first, ...rest] = value\n    return first.toUpperCase() + rest.join(\"\")\n}\n\n/**\n * Instantiates a profile content by replacing tokens with entity-specific values.\n */\nexport const instantiateProfile = (\n    content: OwidGdocProfileContent,\n    entity: ProfileEntity\n): OwidGdocProfileContent => {\n    const entityNameWithArticle = articulateEntity(entity.name)\n    const capitalizedEntity = capitalizeEntityName(entityNameWithArticle)\n    const entityPossessiveWithArticle = getEntityPossessive(\n        entityNameWithArticle\n    )\n    const entityPossessiveCapitalized = getEntityPossessive(capitalizedEntity)\n    const entityPossessiveWithoutArticle = getEntityPossessive(entity.name)\n    const replacements: ReplacementPair[] = [\n        [\"$EntityName’s\", entityPossessiveCapitalized],\n        [\"$EntityName\", capitalizedEntity],\n        [\"$entityName’s\", entityPossessiveWithArticle],\n        [\"$entityName\", entityNameWithArticle],\n        [\"$entityCode\", entity.code],\n        [\"$noArticleEntityName’s\", entityPossessiveWithoutArticle],\n        [\"$noArticleEntityName\", entity.name],\n    ]\n\n    const clonedContent = _.cloneDeep(content)\n\n    replaceStringsInObject(clonedContent, replacements)\n\n    clonedContent.body.forEach((node) => {\n        traverseEnrichedBlock(node, (block) => {\n            if (block.type === \"conditional-section\") {\n                parseInstantiatedConditionalSection(block, entity.name)\n            }\n        })\n    })\n\n    const region = getRegionByNameOrVariantName(entity.name)\n    if (region) {\n        clonedContent.instantiatedEntity = {\n            ...region,\n            isCountry: checkIsCountry(region),\n        }\n    }\n\n    return clonedContent\n}\n\nexport function getEntitiesForProfile(\n    scopeRaw: string,\n    excludeRaw?: string\n): ProfileEntity[] {\n    if (!scopeRaw) return []\n\n    const scopeValues = scopeRaw\n        .split(\",\")\n        .map((value) => value.trim().toLowerCase())\n        .filter((value) => value.length > 0)\n\n    const entitiesByCode = new Map<string, ProfileEntity>()\n    const addEntity = (region?: { name?: string; code?: string }): void => {\n        if (!region?.code || !region?.name) return\n        if (!entitiesByCode.has(region.code)) {\n            entitiesByCode.set(region.code, {\n                name: region.name,\n                code: region.code,\n            })\n        }\n    }\n\n    const continents = regions.filter(\n        (region) => region.regionType === \"continent\"\n    )\n\n    for (const scopeValue of scopeValues) {\n        // Add all countries\n        if (scopeValue === \"countries\" || scopeValue === \"all\") {\n            for (const country of countries) addEntity(country)\n        }\n        // Add all continents\n        if (scopeValue === \"continents\" || scopeValue === \"all\") {\n            for (const region of continents) addEntity(region)\n        }\n        // Add specific entity by name or code\n        if (\n            scopeValue !== \"countries\" &&\n            scopeValue !== \"continents\" &&\n            scopeValue !== \"all\"\n        ) {\n            addEntity(getRegionByNameOrVariantName(scopeValue))\n        }\n    }\n\n    // Remove excluded entities\n    if (excludeRaw) {\n        const excludeValues = excludeRaw\n            .split(\",\")\n            .map((value) => value.trim().toLowerCase())\n            .filter((value) => value.length > 0)\n\n        for (const excludeValue of excludeValues) {\n            const region = getRegionByNameOrVariantName(excludeValue)\n            if (region?.code) entitiesByCode.delete(region.code)\n        }\n    }\n\n    return Array.from(entitiesByCode.values()).sort((a, b) =>\n        a.name.localeCompare(b.name)\n    )\n}\n\n/**\n * Conditional Section Parsing & Validation\n */\n\n/**\n * This is the second pass to parse conditional sections after instantiation.\n * It determines whether or not the profile is instantiated for an entity that\n * matches the include/exclude criteria, and removes the content if not.\n */\nfunction parseInstantiatedConditionalSection(\n    block: EnrichedBlockConditionalSection,\n    entity: string\n): void {\n    const shouldRender = checkShouldConditionalSectionRender({\n        entity,\n        include: block.include,\n        exclude: block.exclude,\n    })\n    if (!shouldRender) {\n        block.content = []\n        return\n    }\n}\n\nfunction resolveRegionList(names: string[]): {\n    resolved: { region: Region; raw: string }[]\n    errors: ParseError[]\n} {\n    const errors: ParseError[] = []\n    const resolved: { region: Region; raw: string }[] = []\n\n    for (const name of names) {\n        const region = getRegionByName(name)\n        if (!region) {\n            errors.push({ message: `Unknown region: ${name}` })\n        } else {\n            resolved.push({ region, raw: name })\n        }\n    }\n    return { resolved, errors }\n}\n\nconst validationRules = {\n    ensureHasEntries: function (\n        includeCount: number,\n        excludeCount: number\n    ): ParseError[] {\n        if (includeCount === 0 && excludeCount === 0) {\n            return [\n                {\n                    message:\n                        \"Conditional section must specify at least one include or exclude entry\",\n                },\n            ]\n        }\n        return []\n    },\n    ensureNoOverlap: function (\n        includeRegions: { region: Region; raw: string }[],\n        excludeRegions: { region: Region; raw: string }[]\n    ): { errors: ParseError[]; overlapNames: string[] } {\n        const includeCodes = new Map(\n            includeRegions.map(({ region }) => [region.code, region.name])\n        )\n\n        const overlapNames = excludeRegions\n            .map(({ region }) => includeCodes.get(region.code))\n            .filter((name): name is string => !!name)\n\n        if (overlapNames.length === 0) return { errors: [], overlapNames }\n\n        return {\n            overlapNames,\n            errors: [\n                {\n                    message: `Entities cannot be in both include and exclude lists: ${[\n                        ...new Set(overlapNames),\n                    ].join(\", \")}`,\n                },\n            ],\n        }\n    },\n    ensureIncludeListsAreRegionsWhenExcluding: function (\n        includeContainsCountry: boolean,\n        hasOverlap: boolean\n    ): ParseError[] {\n        if (!includeContainsCountry || hasOverlap) return []\n        return [\n            {\n                message:\n                    \"Include list must contain regions (not individual countries) when excludes are specified\",\n            },\n        ]\n    },\n    ensureExcludesAreCovered: function (\n        includeRegions: { region: Region; raw: string }[],\n        excludeRegions: { region: Region; raw: string }[],\n        includeContainsCountry: boolean,\n        hasOverlap: boolean\n    ): ParseError[] {\n        if (includeContainsCountry || hasOverlap) return []\n\n        const errors: ParseError[] = []\n        for (const { region: excludedRegion } of excludeRegions) {\n            const includedByAny = includeRegions.some(({ region }) => {\n                if (region.code === excludedRegion.code) return true\n                if (!checkHasMembers(region)) return false\n                return region.members.includes(excludedRegion.code)\n            })\n            if (!includedByAny) {\n                errors.push({\n                    message: `${excludedRegion.name} is not covered by the include list`,\n                })\n            }\n        }\n        return errors\n    },\n}\n\n/**\n * Validate that the include/exclude lists in a conditional section make sense.\n * e.g. include: \"Europe\", exclude: \"France\" is valid\n * e.g. include: \"South America\", exclude: \"Germany\" is invalid\n * See validationRules for more details.\n */\nexport function validateConditionalSectionLists(\n    include: string[],\n    exclude: string[]\n): ParseError[] {\n    const allErrors: ParseError[] = []\n    const entryRuleErrors = validationRules.ensureHasEntries(\n        include.length,\n        exclude.length\n    )\n    if (entryRuleErrors.length) {\n        return entryRuleErrors\n    }\n\n    const [\n        { resolved: includeRegions, errors: includeErrors },\n        { resolved: excludeRegions, errors: excludeErrors },\n    ] = [include, exclude].map(resolveRegionList)\n    allErrors.push(...includeErrors, ...excludeErrors)\n\n    // If only one list has entries, we can skip interaction checks\n    if (includeRegions.length === 0 || excludeRegions.length === 0) {\n        return allErrors\n    }\n\n    const { errors: overlapErrors, overlapNames } =\n        validationRules.ensureNoOverlap(includeRegions, excludeRegions)\n\n    const hasOverlap = overlapNames.length > 0\n    const includeContainsCountry = includeRegions.some(({ region }) =>\n        checkIsCountry(region)\n    )\n\n    const includeErrorsRule =\n        validationRules.ensureIncludeListsAreRegionsWhenExcluding(\n            includeContainsCountry,\n            hasOverlap\n        )\n\n    const coverageErrors = validationRules.ensureExcludesAreCovered(\n        includeRegions,\n        excludeRegions,\n        includeContainsCountry,\n        hasOverlap\n    )\n\n    allErrors.push(...overlapErrors, ...includeErrorsRule, ...coverageErrors)\n\n    return allErrors\n}\n\nfunction calculateRenderLogic(\n    entityRegion: Region,\n    includeRegions: { region: Region; raw: string }[],\n    excludeRegions: { region: Region; raw: string }[]\n): boolean {\n    // Helper to check if entity is in a given region (or is the region)\n    const matchesCondition = (condition: Region): boolean => {\n        if (condition.code === entityRegion.code) return true\n        if (checkHasMembers(condition)) {\n            return condition.members.includes(entityRegion.code)\n        }\n        return false\n    }\n\n    const isExcluded = excludeRegions.some(({ region }) =>\n        matchesCondition(region)\n    )\n\n    // An empty include list means \"include all\"\n    const isIncluded =\n        includeRegions.length === 0 ||\n        includeRegions.some(({ region }) => matchesCondition(region))\n\n    return !isExcluded && isIncluded\n}\n\nexport function checkShouldConditionalSectionRender({\n    entity,\n    include,\n    exclude,\n}: {\n    entity: string\n    include: string[]\n    exclude: string[]\n}): boolean {\n    const entityRegion = getRegionByName(entity)\n    if (!entityRegion) return false\n\n    const { resolved: includeRegions } = resolveRegionList(include)\n    const { resolved: excludeRegions } = resolveRegionList(exclude)\n\n    return calculateRenderLogic(entityRegion, includeRegions, excludeRegions)\n}\n\n/**\n * Data callout utils\n */\n\n// Remove all grapher query params from a URL string\n// What remains is the base URL without any grapher-specific query params\n// e.g. only indicator-specifying query params remain\nexport function stripGrapherQueryParams(url: string): string {\n    const urlObj = Url.fromURL(url)\n    const emptyParams = Object.fromEntries(\n        GRAPHER_QUERY_PARAM_KEYS.map((key) => [key, undefined])\n    )\n    const strippedUrl = urlObj.updateQueryParams(emptyParams)\n    return strippedUrl.fullUrl\n}\n\n// \"/grapher/life-expectancy?time=2022\" and \"/grapher/life-expectancy?time=2020\"\n// both refer to the same grapher state, so they should have the same key\nexport function makeCalloutGrapherStateKey(fullUrl: string): string {\n    const key = stripGrapherQueryParams(fullUrl)\n    return key\n}\n\n// Generate a key for LinkedCallouts based on full URL (including country param)\nexport function makeLinkedCalloutKey(fullUrl: string): string {\n    const url = Url.fromURL(fullUrl)\n    const key = url.pathname + url.queryStr\n    return key\n}\n\n/**\n * Check if a data-callout block has all required values available.\n * Returns true if all span-callout spans in the block have values in linkedCallouts.\n */\nexport function checkShouldDataCalloutRender(\n    block: EnrichedBlockDataCallout,\n    linkedCallouts: LinkedCallouts\n): boolean {\n    const key = makeLinkedCalloutKey(block.url)\n    const linkedCallout = linkedCallouts[key]\n\n    // If no callout data is available, we can't render\n    if (!linkedCallout?.values) return false\n\n    // Collect all span-callout spans from the content\n    const calloutSpans: SpanCallout[] = []\n    for (const contentBlock of block.content) {\n        traverseEnrichedBlock(contentBlock, _.noop, (span) => {\n            if (span.spanType === \"span-callout\") {\n                calloutSpans.push(span)\n            }\n        })\n    }\n\n    // Check if all callout values are available\n    const values = linkedCallout.values\n    for (const calloutSpan of calloutSpans) {\n        const value = getCalloutValue(\n            values,\n            calloutSpan.functionName,\n            calloutSpan.parameters\n        )\n        if (value === undefined) {\n            return false\n        }\n    }\n\n    return true\n}\n\n/**\n * Find the y-dimension data point matching the given shortName.\n * If shortName is omitted and there is exactly one y data point,\n * it is returned automatically — so single-indicator charts don't\n * require the column name in the callout syntax.\n */\nfunction findYDataPoint(\n    values: GrapherValuesJson,\n    shortName: string | undefined\n): GrapherValuesJsonDataPoint | undefined {\n    if (shortName) {\n        const columnSlug = values.columns\n            ? Object.entries(values.columns).find(\n                  ([_, col]) => col.shortName === shortName\n              )?.[0]\n            : undefined\n        if (!columnSlug) return undefined\n\n        return values.endValues?.y?.find(\n            (dp) => dp.columnSlug === String(columnSlug)\n        )\n    }\n\n    // No shortName provided: use the single y data point if unambiguous\n    const yValues = values.endValues?.y\n    if (yValues?.length === 1) return yValues[0]\n\n    return undefined\n}\n\n/**\n * Look up a value from GrapherValuesJson based on the callout function name.\n * Returns the formatted value or undefined if not found.\n */\nexport function getCalloutValue(\n    values: GrapherValuesJson,\n    functionName: CalloutFunction,\n    parameters: string[]\n): string | undefined {\n    return match(functionName)\n        .with(\"latestValue\", () => {\n            return findYDataPoint(values, parameters[0])?.formattedValue\n        })\n        .with(\"latestValueWithUnit\", () => {\n            return findYDataPoint(values, parameters[0])?.formattedValueShort\n        })\n        .with(\"latestTime\", () => {\n            return findYDataPoint(values, parameters[0])?.formattedTime\n        })\n        .exhaustive()\n}\n","/**\n * This file contains an adapted version of https://github.com/adambisek/string-pixel-width,\n * just with the character widths hardcoded for our two main fonts (Lato and Playfair Display).\n * It can be used to roughly estimate the width of a string in pixels.\n */\n\n// We have pixel width data for all ASCII characters, plus the following:\n// ‑–—…‘’“”°→≤≥£⁰₀¹₁²₂³₃⁴₄⁵₅⁶₆⁷₇⁸₈⁹₉ºµ\n\nexport enum FontFamily {\n    Lato = \"Lato\",\n    PlayfairDisplay = \"PlayfairDisplay\",\n}\n\n// Variant indices: 0=regular, 1=bold, 2=italic, 3=bold+italic\n// Pre-flattened maps: widthsMap[font][variant][char] -> width in pixels\nconst widthsMap: Record<FontFamily, Record<string, number>[]> = {\n    [FontFamily.Lato]: [\n        // regular\n        {\n            \"0\": 58,\n            \"1\": 58,\n            \"2\": 58,\n            \"3\": 58,\n            \"4\": 58,\n            \"5\": 58,\n            \"6\": 58,\n            \"7\": 58,\n            \"8\": 58,\n            \"9\": 58,\n            \" \": 26,\n            \"!\": 27,\n            '\"': 37,\n            \"#\": 58,\n            $: 58,\n            \"%\": 80,\n            \"&\": 71,\n            \"'\": 20,\n            \"(\": 27,\n            \")\": 27,\n            \"*\": 43,\n            \"+\": 58,\n            \",\": 23,\n            \"-\": 37,\n            \".\": 24,\n            \"/\": 45,\n            \":\": 25,\n            \";\": 26,\n            \"<\": 58,\n            \"=\": 58,\n            \">\": 58,\n            \"?\": 45,\n            \"@\": 84,\n            A: 68,\n            B: 65,\n            C: 67,\n            D: 76,\n            E: 58,\n            F: 57,\n            G: 73,\n            H: 76,\n            I: 28,\n            J: 42,\n            K: 66,\n            L: 51,\n            M: 93,\n            N: 76,\n            O: 80,\n            P: 60,\n            Q: 80,\n            R: 63,\n            S: 54,\n            T: 59,\n            U: 74,\n            V: 68,\n            W: 104,\n            X: 65,\n            Y: 62,\n            Z: 60,\n            \"[\": 31,\n            \"\\\\\": 45,\n            \"]\": 31,\n            \"^\": 58,\n            _: 46,\n            \"`\": 40,\n            a: 50,\n            b: 56,\n            c: 48,\n            d: 56,\n            e: 53,\n            f: 35,\n            g: 52,\n            h: 56,\n            i: 24,\n            j: 24,\n            k: 51,\n            l: 24,\n            m: 82,\n            n: 56,\n            o: 57,\n            p: 56,\n            q: 56,\n            r: 36,\n            s: 43,\n            t: 36,\n            u: 56,\n            v: 52,\n            w: 79,\n            x: 50,\n            y: 52,\n            z: 45,\n            \"{\": 30,\n            \"|\": 25,\n            \"}\": 30,\n            \"~\": 58,\n            \"₀\": 33,\n            \"₁\": 33,\n            \"₂\": 33,\n            \"₃\": 33,\n            \"₄\": 33,\n            \"₅\": 33,\n            \"₆\": 33,\n            \"₇\": 33,\n            \"₈\": 33,\n            \"₉\": 33,\n            \"⁰\": 33,\n            \"¹\": 33,\n            \"²\": 33,\n            \"³\": 33,\n            \"⁴\": 33,\n            \"⁵\": 33,\n            \"⁶\": 33,\n            \"⁷\": 33,\n            \"⁸\": 33,\n            \"⁹\": 33,\n            \"‑\": 37,\n            \"–\": 58,\n            \"—\": 79,\n            \"…\": 75,\n            \"‘\": 21,\n            \"’\": 21,\n            \"“\": 37,\n            \"”\": 37,\n            \"°\": 41,\n            \"→\": 100,\n            \"≤\": 58,\n            \"≥\": 58,\n            \"£\": 58,\n            º: 40,\n            µ: 65,\n        },\n        // bold\n        {\n            \"0\": 58,\n            \"1\": 58,\n            \"2\": 58,\n            \"3\": 58,\n            \"4\": 58,\n            \"5\": 58,\n            \"6\": 58,\n            \"7\": 58,\n            \"8\": 58,\n            \"9\": 58,\n            \" \": 24,\n            \"!\": 28,\n            '\"': 40,\n            \"#\": 58,\n            $: 58,\n            \"%\": 82,\n            \"&\": 72,\n            \"'\": 21,\n            \"(\": 27,\n            \")\": 27,\n            \"*\": 43,\n            \"+\": 58,\n            \",\": 23,\n            \"-\": 37,\n            \".\": 24,\n            \"/\": 47,\n            \":\": 26,\n            \";\": 27,\n            \"<\": 58,\n            \"=\": 58,\n            \">\": 58,\n            \"?\": 46,\n            \"@\": 84,\n            A: 69,\n            B: 66,\n            C: 66,\n            D: 76,\n            E: 58,\n            F: 57,\n            G: 73,\n            H: 77,\n            I: 30,\n            J: 43,\n            K: 69,\n            L: 52,\n            M: 95,\n            N: 77,\n            O: 81,\n            P: 62,\n            Q: 81,\n            R: 64,\n            S: 55,\n            T: 60,\n            U: 74,\n            V: 69,\n            W: 105,\n            X: 67,\n            Y: 65,\n            Z: 61,\n            \"[\": 31,\n            \"\\\\\": 47,\n            \"]\": 31,\n            \"^\": 58,\n            _: 47,\n            \"`\": 40,\n            a: 51,\n            b: 57,\n            c: 48,\n            d: 57,\n            e: 53,\n            f: 36,\n            g: 53,\n            h: 56,\n            i: 25,\n            j: 25,\n            k: 53,\n            l: 25,\n            m: 84,\n            n: 56,\n            o: 57,\n            p: 57,\n            q: 57,\n            r: 37,\n            s: 44,\n            t: 37,\n            u: 56,\n            v: 53,\n            w: 80,\n            x: 52,\n            y: 53,\n            z: 46,\n            \"{\": 31,\n            \"|\": 26,\n            \"}\": 31,\n            \"~\": 58,\n            \"₀\": 33,\n            \"₁\": 33,\n            \"₂\": 33,\n            \"₃\": 33,\n            \"₄\": 33,\n            \"₅\": 33,\n            \"₆\": 33,\n            \"₇\": 33,\n            \"₈\": 33,\n            \"₉\": 33,\n            \"⁰\": 33,\n            \"¹\": 33,\n            \"²\": 33,\n            \"³\": 33,\n            \"⁴\": 33,\n            \"⁵\": 33,\n            \"⁶\": 33,\n            \"⁷\": 33,\n            \"⁸\": 33,\n            \"⁹\": 33,\n            \"‑\": 37,\n            \"–\": 58,\n            \"—\": 80,\n            \"…\": 77,\n            \"‘\": 22,\n            \"’\": 22,\n            \"“\": 39,\n            \"”\": 39,\n            \"°\": 42,\n            \"→\": 100,\n            \"≤\": 58,\n            \"≥\": 58,\n            \"£\": 58,\n            º: 40,\n            µ: 66,\n        },\n        // italic\n        {\n            \"0\": 58,\n            \"1\": 58,\n            \"2\": 58,\n            \"3\": 58,\n            \"4\": 58,\n            \"5\": 58,\n            \"6\": 53,\n            \"7\": 58,\n            \"8\": 58,\n            \"9\": 58,\n            \" \": 23,\n            \"!\": 25,\n            '\"': 35,\n            \"#\": 58,\n            $: 58,\n            \"%\": 74,\n            \"&\": 66,\n            \"'\": 19,\n            \"(\": 26,\n            \")\": 26,\n            \"*\": 40,\n            \"+\": 58,\n            \",\": 22,\n            \"-\": 35,\n            \".\": 23,\n            \"/\": 42,\n            \":\": 25,\n            \";\": 26,\n            \"<\": 58,\n            \"=\": 58,\n            \">\": 58,\n            \"?\": 42,\n            \"@\": 77,\n            A: 63,\n            B: 60,\n            C: 62,\n            D: 71,\n            E: 54,\n            F: 53,\n            G: 68,\n            H: 71,\n            I: 27,\n            J: 40,\n            K: 62,\n            L: 48,\n            M: 86,\n            N: 71,\n            O: 75,\n            P: 56,\n            Q: 75,\n            R: 58,\n            S: 51,\n            T: 55,\n            U: 69,\n            V: 63,\n            W: 96,\n            X: 61,\n            Y: 58,\n            Z: 56,\n            \"[\": 29,\n            \"\\\\\": 41,\n            \"]\": 29,\n            \"^\": 58,\n            _: 44,\n            \"`\": 37,\n            a: 51,\n            b: 53,\n            c: 45,\n            d: 53,\n            e: 48,\n            f: 32,\n            g: 48,\n            h: 53,\n            i: 23,\n            j: 23,\n            k: 47,\n            l: 23,\n            m: 79,\n            n: 53,\n            o: 52,\n            p: 53,\n            q: 51,\n            r: 34,\n            s: 40,\n            t: 35,\n            u: 53,\n            v: 48,\n            w: 72,\n            x: 46,\n            y: 48,\n            z: 42,\n            \"{\": 28,\n            \"|\": 26,\n            \"}\": 28,\n            \"~\": 58,\n            \"₀\": 33,\n            \"₁\": 33,\n            \"₂\": 33,\n            \"₃\": 33,\n            \"₄\": 33,\n            \"₅\": 33,\n            \"₆\": 33,\n            \"₇\": 33,\n            \"₈\": 33,\n            \"₉\": 33,\n            \"⁰\": 33,\n            \"¹\": 33,\n            \"²\": 33,\n            \"³\": 33,\n            \"⁴\": 33,\n            \"⁵\": 33,\n            \"⁶\": 33,\n            \"⁷\": 33,\n            \"⁸\": 33,\n            \"⁹\": 33,\n            \"‑\": 35,\n            \"–\": 58,\n            \"—\": 74,\n            \"…\": 75,\n            \"‘\": 20,\n            \"’\": 21,\n            \"“\": 34,\n            \"”\": 35,\n            \"°\": 41,\n            \"→\": 100,\n            \"≤\": 58,\n            \"≥\": 58,\n            \"£\": 58,\n            º: 38,\n            µ: 61,\n        },\n        // bold+italic\n        {\n            \"0\": 58,\n            \"1\": 58,\n            \"2\": 58,\n            \"3\": 58,\n            \"4\": 58,\n            \"5\": 58,\n            \"6\": 53,\n            \"7\": 58,\n            \"8\": 58,\n            \"9\": 58,\n            \" \": 22,\n            \"!\": 27,\n            '\"': 37,\n            \"#\": 58,\n            $: 58,\n            \"%\": 76,\n            \"&\": 67,\n            \"'\": 20,\n            \"(\": 27,\n            \")\": 27,\n            \"*\": 40,\n            \"+\": 58,\n            \",\": 24,\n            \"-\": 35,\n            \".\": 24,\n            \"/\": 43,\n            \":\": 26,\n            \";\": 27,\n            \"<\": 58,\n            \"=\": 58,\n            \">\": 58,\n            \"?\": 43,\n            \"@\": 77,\n            A: 65,\n            B: 61,\n            C: 62,\n            D: 71,\n            E: 54,\n            F: 53,\n            G: 68,\n            H: 72,\n            I: 28,\n            J: 41,\n            K: 64,\n            L: 48,\n            M: 88,\n            N: 72,\n            O: 75,\n            P: 58,\n            Q: 75,\n            R: 60,\n            S: 52,\n            T: 56,\n            U: 69,\n            V: 65,\n            W: 97,\n            X: 63,\n            Y: 61,\n            Z: 56,\n            \"[\": 30,\n            \"\\\\\": 43,\n            \"]\": 30,\n            \"^\": 58,\n            _: 44,\n            \"`\": 37,\n            a: 52,\n            b: 54,\n            c: 45,\n            d: 54,\n            e: 49,\n            f: 33,\n            g: 50,\n            h: 54,\n            i: 25,\n            j: 24,\n            k: 50,\n            l: 24,\n            m: 79,\n            n: 54,\n            o: 52,\n            p: 54,\n            q: 52,\n            r: 35,\n            s: 41,\n            t: 37,\n            u: 54,\n            v: 49,\n            w: 74,\n            x: 49,\n            y: 49,\n            z: 43,\n            \"{\": 29,\n            \"|\": 27,\n            \"}\": 29,\n            \"~\": 58,\n            \"₀\": 33,\n            \"₁\": 33,\n            \"₂\": 33,\n            \"₃\": 33,\n            \"₄\": 33,\n            \"₅\": 33,\n            \"₆\": 33,\n            \"₇\": 33,\n            \"₈\": 33,\n            \"₉\": 33,\n            \"⁰\": 33,\n            \"¹\": 33,\n            \"²\": 33,\n            \"³\": 33,\n            \"⁴\": 33,\n            \"⁵\": 33,\n            \"⁶\": 33,\n            \"⁷\": 33,\n            \"⁸\": 33,\n            \"⁹\": 33,\n            \"‑\": 35,\n            \"–\": 58,\n            \"—\": 74,\n            \"…\": 77,\n            \"‘\": 21,\n            \"’\": 21,\n            \"“\": 36,\n            \"”\": 36,\n            \"°\": 41,\n            \"→\": 100,\n            \"≤\": 58,\n            \"≥\": 58,\n            \"£\": 58,\n            º: 37,\n            µ: 62,\n        },\n    ],\n    [FontFamily.PlayfairDisplay]: [\n        // regular\n        {\n            \"0\": 60,\n            \"1\": 37,\n            \"2\": 48,\n            \"3\": 45,\n            \"4\": 49,\n            \"5\": 42,\n            \"6\": 52,\n            \"7\": 41,\n            \"8\": 52,\n            \"9\": 51,\n            \" \": 25,\n            \"!\": 26,\n            '\"': 30,\n            \"#\": 64,\n            $: 52,\n            \"%\": 74,\n            \"&\": 84,\n            \"'\": 19,\n            \"(\": 29,\n            \")\": 29,\n            \"*\": 49,\n            \"+\": 59,\n            \",\": 26,\n            \"-\": 50,\n            \".\": 25,\n            \"/\": 37,\n            \":\": 27,\n            \";\": 29,\n            \"<\": 61,\n            \"=\": 65,\n            \">\": 61,\n            \"?\": 46,\n            \"@\": 88,\n            A: 63,\n            B: 62,\n            C: 69,\n            D: 72,\n            E: 61,\n            F: 57,\n            G: 70,\n            H: 76,\n            I: 34,\n            J: 33,\n            K: 66,\n            L: 59,\n            M: 87,\n            N: 71,\n            O: 74,\n            P: 59,\n            Q: 74,\n            R: 65,\n            S: 54,\n            T: 62,\n            U: 68,\n            V: 63,\n            W: 91,\n            X: 63,\n            Y: 59,\n            Z: 59,\n            \"[\": 30,\n            \"\\\\\": 37,\n            \"]\": 30,\n            \"^\": 54,\n            _: 59,\n            \"`\": 28,\n            a: 50,\n            b: 56,\n            c: 49,\n            d: 58,\n            e: 51,\n            f: 33,\n            g: 53,\n            h: 59,\n            i: 29,\n            j: 27,\n            k: 55,\n            l: 29,\n            m: 89,\n            n: 60,\n            o: 55,\n            p: 58,\n            q: 56,\n            r: 45,\n            s: 45,\n            t: 35,\n            u: 58,\n            v: 49,\n            w: 77,\n            x: 52,\n            y: 50,\n            z: 48,\n            \"{\": 30,\n            \"|\": 22,\n            \"}\": 30,\n            \"~\": 65,\n            \"₀\": 45,\n            \"₁\": 26,\n            \"₂\": 34,\n            \"₃\": 32,\n            \"₄\": 36,\n            \"₅\": 32,\n            \"₆\": 38,\n            \"₇\": 31,\n            \"₈\": 37,\n            \"₉\": 38,\n            \"⁰\": 45,\n            \"¹\": 26,\n            \"²\": 34,\n            \"³\": 32,\n            \"⁴\": 36,\n            \"⁵\": 32,\n            \"⁶\": 38,\n            \"⁷\": 31,\n            \"⁸\": 37,\n            \"⁹\": 39,\n            \"‑\": 50,\n            \"–\": 57,\n            \"—\": 86,\n            \"…\": 81,\n            \"‘\": 25,\n            \"’\": 25,\n            \"“\": 42,\n            \"”\": 42,\n            \"°\": 33,\n            \"→\": 68,\n            \"≤\": 64,\n            \"≥\": 64,\n            \"£\": 60,\n            º: 45,\n            µ: 58,\n        },\n        // bold\n        {\n            \"0\": 65,\n            \"1\": 38,\n            \"2\": 52,\n            \"3\": 49,\n            \"4\": 53,\n            \"5\": 46,\n            \"6\": 56,\n            \"7\": 46,\n            \"8\": 56,\n            \"9\": 55,\n            \" \": 23,\n            \"!\": 29,\n            '\"': 37,\n            \"#\": 62,\n            $: 57,\n            \"%\": 73,\n            \"&\": 90,\n            \"'\": 21,\n            \"(\": 32,\n            \")\": 32,\n            \"*\": 48,\n            \"+\": 57,\n            \",\": 27,\n            \"-\": 48,\n            \".\": 27,\n            \"/\": 37,\n            \":\": 29,\n            \";\": 30,\n            \"<\": 60,\n            \"=\": 64,\n            \">\": 60,\n            \"?\": 51,\n            \"@\": 88,\n            A: 67,\n            B: 67,\n            C: 71,\n            D: 78,\n            E: 63,\n            F: 59,\n            G: 74,\n            H: 80,\n            I: 38,\n            J: 36,\n            K: 71,\n            L: 61,\n            M: 93,\n            N: 72,\n            O: 79,\n            P: 64,\n            Q: 79,\n            R: 69,\n            S: 58,\n            T: 67,\n            U: 69,\n            V: 67,\n            W: 97,\n            X: 69,\n            Y: 62,\n            Z: 60,\n            \"[\": 32,\n            \"\\\\\": 37,\n            \"]\": 32,\n            \"^\": 53,\n            _: 59,\n            \"`\": 30,\n            a: 52,\n            b: 59,\n            c: 50,\n            d: 60,\n            e: 50,\n            f: 35,\n            g: 55,\n            h: 61,\n            i: 32,\n            j: 30,\n            k: 59,\n            l: 31,\n            m: 91,\n            n: 61,\n            o: 57,\n            p: 60,\n            q: 59,\n            r: 47,\n            s: 46,\n            t: 35,\n            u: 61,\n            v: 51,\n            w: 79,\n            x: 54,\n            y: 52,\n            z: 47,\n            \"{\": 33,\n            \"|\": 25,\n            \"}\": 33,\n            \"~\": 67,\n            \"₀\": 45,\n            \"₁\": 28,\n            \"₂\": 35,\n            \"₃\": 33,\n            \"₄\": 37,\n            \"₅\": 32,\n            \"₆\": 39,\n            \"₇\": 32,\n            \"₈\": 38,\n            \"₉\": 39,\n            \"⁰\": 45,\n            \"¹\": 28,\n            \"²\": 35,\n            \"³\": 33,\n            \"⁴\": 37,\n            \"⁵\": 32,\n            \"⁶\": 39,\n            \"⁷\": 32,\n            \"⁸\": 38,\n            \"⁹\": 39,\n            \"‑\": 48,\n            \"–\": 60,\n            \"—\": 90,\n            \"…\": 83,\n            \"‘\": 26,\n            \"’\": 25,\n            \"“\": 46,\n            \"”\": 46,\n            \"°\": 31,\n            \"→\": 68,\n            \"≤\": 62,\n            \"≥\": 62,\n            \"£\": 66,\n            º: 47,\n            µ: 58,\n        },\n        // italic\n        {\n            \"0\": 57,\n            \"1\": 34,\n            \"2\": 50,\n            \"3\": 49,\n            \"4\": 52,\n            \"5\": 46,\n            \"6\": 53,\n            \"7\": 49,\n            \"8\": 54,\n            \"9\": 51,\n            \" \": 25,\n            \"!\": 26,\n            '\"': 30,\n            \"#\": 64,\n            $: 55,\n            \"%\": 77,\n            \"&\": 82,\n            \"'\": 19,\n            \"(\": 36,\n            \")\": 36,\n            \"*\": 50,\n            \"+\": 59,\n            \",\": 25,\n            \"-\": 50,\n            \".\": 24,\n            \"/\": 47,\n            \":\": 28,\n            \";\": 29,\n            \"<\": 60,\n            \"=\": 66,\n            \">\": 60,\n            \"?\": 44,\n            \"@\": 85,\n            A: 63,\n            B: 63,\n            C: 67,\n            D: 73,\n            E: 61,\n            F: 57,\n            G: 71,\n            H: 76,\n            I: 34,\n            J: 64,\n            K: 68,\n            L: 59,\n            M: 87,\n            N: 77,\n            O: 73,\n            P: 59,\n            Q: 78,\n            R: 66,\n            S: 55,\n            T: 66,\n            U: 68,\n            V: 63,\n            W: 90,\n            X: 70,\n            Y: 67,\n            Z: 65,\n            \"[\": 30,\n            \"\\\\\": 49,\n            \"]\": 30,\n            \"^\": 54,\n            _: 74,\n            \"`\": 32,\n            a: 52,\n            b: 50,\n            c: 43,\n            d: 54,\n            e: 43,\n            f: 32,\n            g: 45,\n            h: 54,\n            i: 30,\n            j: 28,\n            k: 52,\n            l: 28,\n            m: 81,\n            n: 58,\n            o: 49,\n            p: 55,\n            q: 51,\n            r: 43,\n            s: 38,\n            t: 34,\n            u: 57,\n            v: 53,\n            w: 69,\n            x: 53,\n            y: 48,\n            z: 45,\n            \"{\": 31,\n            \"|\": 32,\n            \"}\": 31,\n            \"~\": 65,\n            \"₀\": 41,\n            \"₁\": 25,\n            \"₂\": 34,\n            \"₃\": 33,\n            \"₄\": 34,\n            \"₅\": 31,\n            \"₆\": 36,\n            \"₇\": 32,\n            \"₈\": 35,\n            \"₉\": 36,\n            \"⁰\": 40,\n            \"¹\": 25,\n            \"²\": 34,\n            \"³\": 33,\n            \"⁴\": 34,\n            \"⁵\": 31,\n            \"⁶\": 34,\n            \"⁷\": 32,\n            \"⁸\": 35,\n            \"⁹\": 34,\n            \"‑\": 50,\n            \"–\": 73,\n            \"—\": 100,\n            \"…\": 81,\n            \"‘\": 24,\n            \"’\": 24,\n            \"“\": 40,\n            \"”\": 40,\n            \"°\": 34,\n            \"→\": 68,\n            \"≤\": 65,\n            \"≥\": 64,\n            \"£\": 62,\n            º: 41,\n            µ: 58,\n        },\n        // bold+italic\n        {\n            \"0\": 62,\n            \"1\": 37,\n            \"2\": 54,\n            \"3\": 52,\n            \"4\": 54,\n            \"5\": 47,\n            \"6\": 57,\n            \"7\": 50,\n            \"8\": 58,\n            \"9\": 55,\n            \" \": 26,\n            \"!\": 31,\n            '\"': 39,\n            \"#\": 63,\n            $: 61,\n            \"%\": 80,\n            \"&\": 86,\n            \"'\": 23,\n            \"(\": 40,\n            \")\": 40,\n            \"*\": 48,\n            \"+\": 58,\n            \",\": 29,\n            \"-\": 51,\n            \".\": 28,\n            \"/\": 46,\n            \":\": 31,\n            \";\": 32,\n            \"<\": 59,\n            \"=\": 65,\n            \">\": 60,\n            \"?\": 49,\n            \"@\": 86,\n            A: 65,\n            B: 68,\n            C: 69,\n            D: 77,\n            E: 63,\n            F: 59,\n            G: 74,\n            H: 81,\n            I: 39,\n            J: 68,\n            K: 74,\n            L: 61,\n            M: 92,\n            N: 83,\n            O: 78,\n            P: 64,\n            Q: 83,\n            R: 71,\n            S: 59,\n            T: 68,\n            U: 69,\n            V: 66,\n            W: 98,\n            X: 74,\n            Y: 73,\n            Z: 66,\n            \"[\": 36,\n            \"\\\\\": 49,\n            \"]\": 36,\n            \"^\": 53,\n            _: 74,\n            \"`\": 32,\n            a: 56,\n            b: 55,\n            c: 46,\n            d: 58,\n            e: 47,\n            f: 34,\n            g: 47,\n            h: 57,\n            i: 32,\n            j: 30,\n            k: 55,\n            l: 30,\n            m: 86,\n            n: 60,\n            o: 53,\n            p: 58,\n            q: 55,\n            r: 47,\n            s: 42,\n            t: 35,\n            u: 60,\n            v: 53,\n            w: 68,\n            x: 57,\n            y: 48,\n            z: 46,\n            \"{\": 36,\n            \"|\": 37,\n            \"}\": 36,\n            \"~\": 65,\n            \"₀\": 44,\n            \"₁\": 27,\n            \"₂\": 36,\n            \"₃\": 34,\n            \"₄\": 36,\n            \"₅\": 33,\n            \"₆\": 38,\n            \"₇\": 33,\n            \"₈\": 39,\n            \"₉\": 38,\n            \"⁰\": 44,\n            \"¹\": 27,\n            \"²\": 36,\n            \"³\": 34,\n            \"⁴\": 36,\n            \"⁵\": 32,\n            \"⁶\": 37,\n            \"⁷\": 34,\n            \"⁸\": 39,\n            \"⁹\": 37,\n            \"‑\": 51,\n            \"–\": 69,\n            \"—\": 98,\n            \"…\": 84,\n            \"‘\": 27,\n            \"’\": 27,\n            \"“\": 47,\n            \"”\": 46,\n            \"°\": 33,\n            \"→\": 68,\n            \"≤\": 63,\n            \"≥\": 62,\n            \"£\": 67,\n            º: 49,\n            µ: 58,\n        },\n    ],\n}\n\ninterface StringWidthSettings {\n    font?: FontFamily\n    size?: number\n    bold?: boolean\n    italic?: boolean\n}\n\nconst getPixelWidth = (\n    string: string,\n    settings: StringWidthSettings\n): number => {\n    const font = settings.font ?? FontFamily.Lato\n    const size = settings.size ?? 100\n    const variant = (settings.bold ? 1 : 0) + (settings.italic ? 2 : 0)\n\n    const fontVariants = widthsMap[font]\n    if (!fontVariants) {\n        throw new Error(\n            `This font is not supported. Supported fonts are: ${Object.values(FontFamily).join(\", \")}`\n        )\n    }\n\n    // Get the map for this font+variant combination\n    const charWidths = fontVariants[variant]\n    let totalWidth = 0\n\n    // Normalize to decompose accented characters (é -> e + combining accent ´)\n    // then skip combining marks (U+0300-U+036F) and control characters\n    const normalized = string.normalize(\"NFD\")\n    const len = normalized.length\n\n    for (let i = 0; i < len; i++) {\n        const code = normalized.charCodeAt(i)\n\n        // Skip control characters (0x00-0x1F) and combining diacritical marks (0x0300-0x036F)\n        if (code <= 0x1f || (code >= 0x0300 && code <= 0x036f)) {\n            continue\n        }\n\n        // if we don't have a width for the character, use the width of 'x' as a fallback\n        totalWidth += charWidths[normalized[i]] ?? charWidths[\"x\"]\n    }\n\n    return totalWidth * (size / 100)\n}\n\nexport { getPixelWidth }\n","import * as _ from \"lodash-es\"\nimport { PointVector } from \"./PointVector.js\"\nimport { getPixelWidth, FontFamily } from \"./stringWidth.js\"\nimport {\n    Box,\n    GridParameters,\n    Position,\n    PositionMap,\n} from \"@ourworldindata/types\"\n\n// Important utility class for all visualizations\n// Since we want to be able to render charts headlessly and functionally, we\n// can't rely on the DOM to do these calculations for us, and instead must\n// calculate using geometry and first principles\n\ntype PadObject = PositionMap<number>\n\nexport interface GridBounds {\n    col: number\n    row: number\n    cellEdges: Set<Position>\n    bounds: Bounds\n}\n\nexport { FontFamily }\n\nexport class Bounds {\n    static ctx: CanvasRenderingContext2D\n\n    static fromProps(props: Box): Bounds {\n        const { x, y, width, height } = props\n        return new Bounds(x, y, width, height)\n    }\n\n    static fromBBox(bbox: Box): Bounds {\n        return this.fromProps(bbox)\n    }\n\n    static fromRect(rect: ClientRect): Bounds {\n        return new Bounds(rect.left, rect.top, rect.width, rect.height)\n    }\n\n    static fromElement(el: HTMLElement): Bounds {\n        return Bounds.fromRect(el.getBoundingClientRect())\n    }\n\n    static fromCorners(p1: PointVector, p2: PointVector): Bounds {\n        const x1 = Math.min(p1.x, p2.x)\n        const x2 = Math.max(p1.x, p2.x)\n        const y1 = Math.min(p1.y, p2.y)\n        const y2 = Math.max(p1.y, p2.y)\n\n        return new Bounds(x1, y1, x2 - x1, y2 - y1)\n    }\n\n    // Merge a collection of bounding boxes into a single encompassing Bounds\n    static merge(boundsList: Bounds[]): Bounds {\n        let x1 = Infinity,\n            y1 = Infinity,\n            x2 = -Infinity,\n            y2 = -Infinity\n        for (const b of boundsList) {\n            x1 = Math.min(x1, b.x)\n            y1 = Math.min(y1, b.y)\n            x2 = Math.max(x2, b.x + b.width)\n            y2 = Math.max(y2, b.y + b.height)\n        }\n        return Bounds.fromCorners(\n            new PointVector(x1, y1),\n            new PointVector(x2, y2)\n        )\n    }\n\n    static empty(): Bounds {\n        return new Bounds(0, 0, 0, 0)\n    }\n\n    static forText(\n        str: string = \"\",\n        {\n            x = 0,\n            y = 0,\n            fontSize = 16,\n            fontWeight = 400,\n            fontFamily = FontFamily.Lato,\n            isItalic = false,\n        }: {\n            x?: number\n            y?: number\n            fontSize?: number\n            fontWeight?: number\n            fontFamily?: FontFamily\n            isItalic?: boolean\n        } = {}\n    ): Bounds {\n        // Collapse contiguous spaces into one\n        str = str.replace(/ +/g, \" \")\n\n        const isBold = fontWeight >= 600\n\n        const height = fontSize\n        let bounds = new Bounds(x, y - height, 0, height)\n        if (str) {\n            // pixelWidth uses a precomputed character width table to quickly give a\n            // rough estimate of string width based on characters in a string - it is probably not\n            // worth caching further\n            const width = getPixelWidth(str, {\n                font: fontFamily,\n                size: fontSize,\n                bold: isBold,\n                italic: isItalic,\n            })\n            bounds = bounds.set({ width })\n        }\n\n        return bounds\n    }\n\n    readonly x: number\n    readonly y: number\n    readonly width: number\n    readonly height: number\n\n    constructor(x: number, y: number, width: number, height: number) {\n        this.x = x\n        this.y = y\n        this.width = Math.max(width, 0)\n        this.height = Math.max(height, 0)\n    }\n\n    get left(): number {\n        return this.x\n    }\n    get top(): number {\n        return this.y\n    }\n    get right(): number {\n        return this.x + this.width\n    }\n    get bottom(): number {\n        return this.y + this.height\n    }\n    get centerX(): number {\n        return this.x + this.width / 2\n    }\n    get centerY(): number {\n        return this.y + this.height / 2\n    }\n    get centerPos(): PointVector {\n        return new PointVector(this.centerX, this.centerY)\n    }\n    get area(): number {\n        return this.width * this.height\n    }\n\n    get topLeft(): PointVector {\n        return new PointVector(this.left, this.top)\n    }\n    get topRight(): PointVector {\n        return new PointVector(this.right, this.top)\n    }\n    get bottomLeft(): PointVector {\n        return new PointVector(this.left, this.bottom)\n    }\n    get bottomRight(): PointVector {\n        return new PointVector(this.right, this.bottom)\n    }\n\n    padLeft(amount: number): Bounds {\n        return new Bounds(\n            this.x + amount,\n            this.y,\n            this.width - amount,\n            this.height\n        )\n    }\n\n    padRight(amount: number): Bounds {\n        return new Bounds(this.x, this.y, this.width - amount, this.height)\n    }\n\n    padBottom(amount: number): Bounds {\n        return new Bounds(this.x, this.y, this.width, this.height - amount)\n    }\n\n    padTop(amount: number): Bounds {\n        return new Bounds(\n            this.x,\n            this.y + amount,\n            this.width,\n            this.height - amount\n        )\n    }\n\n    padWidth(amount: number): Bounds {\n        return new Bounds(\n            this.x + amount,\n            this.y,\n            this.width - amount * 2,\n            this.height\n        )\n    }\n\n    padHeight(amount: number): Bounds {\n        return new Bounds(\n            this.x,\n            this.y + amount,\n            this.width,\n            this.height - amount * 2\n        )\n    }\n\n    fromLeft(amount: number): Bounds {\n        return this.padRight(this.width - amount)\n    }\n\n    fromBottom(amount: number): Bounds {\n        return this.padTop(this.height - amount)\n    }\n\n    pad(amount: number | PadObject): Bounds {\n        if (_.isNumber(amount)) {\n            return new Bounds(\n                this.x + amount,\n                this.y + amount,\n                this.width - amount * 2,\n                this.height - amount * 2\n            )\n        }\n        return this.padTop(amount.top ?? 0)\n            .padRight(amount.right ?? 0)\n            .padBottom(amount.bottom ?? 0)\n            .padLeft(amount.left ?? 0)\n    }\n\n    expand(amount: number | PadObject): Bounds {\n        if (_.isNumber(amount)) return this.pad(-amount)\n        return this.pad(\n            _.mapValues(amount, (v) => (v !== undefined ? -v : undefined))\n        )\n    }\n\n    set(props: {\n        x?: number\n        y?: number\n        width?: number\n        height?: number\n    }): Bounds {\n        return Bounds.fromProps({ ...this, ...props })\n    }\n\n    scale(scale: number): Bounds {\n        return new Bounds(\n            this.x * scale,\n            this.y * scale,\n            this.width * scale,\n            this.height * scale\n        )\n    }\n\n    intersects(otherBounds: Bounds): boolean {\n        const r2 = otherBounds\n        return !(\n            r2.left > this.right ||\n            r2.right < this.left ||\n            r2.top > this.bottom ||\n            r2.bottom < this.top\n        )\n    }\n\n    hasVerticalOverlap(otherBounds: Bounds): boolean {\n        const r2 = otherBounds\n        return !(r2.top > this.bottom || r2.bottom < this.top)\n    }\n\n    hasHorizontalOverlap(otherBounds: Bounds): boolean {\n        const r2 = otherBounds\n        return !(r2.left > this.right || r2.right < this.left)\n    }\n\n    lines(): PointVector[][] {\n        return [\n            [this.topLeft, this.topRight],\n            [this.topRight, this.bottomRight],\n            [this.bottomRight, this.bottomLeft],\n            [this.bottomLeft, this.topLeft],\n        ]\n    }\n\n    boundedPoint(p: PointVector): PointVector {\n        return new PointVector(\n            Math.max(Math.min(p.x, this.right), this.left),\n            Math.max(Math.min(p.y, this.bottom), this.top)\n        )\n    }\n\n    containsPoint(x: number, y: number): boolean {\n        return (\n            x >= this.left &&\n            x <= this.right &&\n            y >= this.top &&\n            y <= this.bottom\n        )\n    }\n\n    contains(p: PointVector): boolean {\n        return this.containsPoint(p.x, p.y)\n    }\n\n    encloses(bounds: Bounds): boolean {\n        return (\n            this.containsPoint(bounds.left, bounds.top) &&\n            this.containsPoint(bounds.left, bounds.bottom) &&\n            this.containsPoint(bounds.right, bounds.top) &&\n            this.containsPoint(bounds.right, bounds.bottom)\n        )\n    }\n\n    toCSS(): { left: string; top: string; width: string; height: string } {\n        return {\n            left: `${this.left}px`,\n            top: `${this.top}px`,\n            width: `${this.width}px`,\n            height: `${this.height}px`,\n        }\n    }\n\n    toProps(): { x: number; y: number; width: number; height: number } {\n        return { x: this.x, y: this.y, width: this.width, height: this.height }\n    }\n\n    toArray(): [[number, number], [number, number]] {\n        return [\n            [this.left, this.top],\n            [this.right, this.bottom],\n        ]\n    }\n\n    toViewBox(): string {\n        return `${this.x} ${this.y} ${this.width} ${this.height}`\n    }\n\n    xRange(): [number, number] {\n        return [this.left, this.right]\n    }\n\n    grid(\n        gridParams: GridParameters,\n        padding: SplitBoundsPadding = {}\n    ): GridBounds[] {\n        const { columns, rows, count } = gridParams\n        const { columnPadding = 0, rowPadding = 0, outerPadding = 0 } = padding\n\n        const contentWidth =\n            this.width - columnPadding * (columns - 1) - outerPadding * 2\n        const contentHeight =\n            this.height - rowPadding * (rows - 1) - outerPadding * 2\n        const boxWidth = Math.floor(contentWidth / columns)\n        const boxHeight = Math.floor(contentHeight / rows)\n\n        const hasCell = (row: number, col: number): boolean => {\n            if (row < 0 || row >= rows) return false\n            if (col < 0 || col >= columns) return false\n            const index = row * columns + col\n            if (index >= count) return false\n            return true\n        }\n\n        const grid = _.range(0, count).map((index: number) => {\n            const col = index % columns\n            const row = Math.floor(index / columns)\n\n            // edges around the existing cells\n            const cellEdges = new Set<Position>()\n            if (!hasCell(row, col - 1)) cellEdges.add(Position.left)\n            if (!hasCell(row, col + 1)) cellEdges.add(Position.right)\n            if (!hasCell(row - 1, col)) cellEdges.add(Position.top)\n            if (!hasCell(row + 1, col)) cellEdges.add(Position.bottom)\n\n            return {\n                row,\n                col,\n                cellEdges,\n                bounds: new Bounds(\n                    this.x + outerPadding + col * (boxWidth + columnPadding),\n                    this.y + outerPadding + row * (boxHeight + rowPadding),\n                    boxWidth,\n                    boxHeight\n                ),\n            }\n        })\n\n        return grid\n    }\n\n    yRange(): [number, number] {\n        return [this.bottom, this.top]\n    }\n\n    equals(bounds: Bounds): boolean {\n        return (\n            this.x === bounds.x &&\n            this.y === bounds.y &&\n            this.width === bounds.width &&\n            this.height === bounds.height\n        )\n    }\n\n    // Calculate squared distance between a given point and the closest border of the bounds\n    // If the point is within the bounds, returns 0\n    private distanceToPointSq(p: PointVector): number {\n        if (this.contains(p)) return 0\n\n        const cx = Math.max(Math.min(p.x, this.x + this.width), this.x)\n        const cy = Math.max(Math.min(p.y, this.y + this.height), this.y)\n        return (p.x - cx) * (p.x - cx) + (p.y - cy) * (p.y - cy)\n    }\n\n    distanceToPoint(p: PointVector): number {\n        return Math.sqrt(this.distanceToPointSq(p))\n    }\n}\n\nexport interface SplitBoundsPadding {\n    columnPadding?: number\n    rowPadding?: number\n    outerPadding?: number\n}\n","import { toJS } from \"mobx\"\nimport * as _ from \"lodash-es\"\n\n// Any classes that the user can edit, save, and then rehydrate should implement this interface\nexport interface Persistable {\n    toObject(): any // This should dehydrate any runtime instances to a plain object ready to be JSON stringified\n    updateFromObject(obj: unknown): any // This should parse an incoming object, extend the current instance, and create new instances for any non native class types\n}\n\n// Todo: see if there's a better way to do this with Mobx\nexport function objectWithPersistablesToObject<T>(\n    objWithPersistables: T,\n    keysToSerialize: string[] = []\n): T {\n    const obj = toJS(objWithPersistables) as any\n    const keysSet = new Set(keysToSerialize)\n    Object.keys(obj).forEach((key) => {\n        const val = (objWithPersistables as any)[key]\n        const valIsPersistable = val && val.toObject\n\n        // Delete any keys we don't want to serialize, if a keep list is provided\n        if (keysToSerialize.length && !keysSet.has(key)) {\n            delete obj[key]\n            return\n        }\n\n        // Val is persistable, call toObject\n        if (valIsPersistable) obj[key] = val.toObject()\n        else if (Array.isArray(val))\n            // Scan array for persistables and seriazile.\n            obj[key] = val.map((item) =>\n                item?.toObject ? item.toObject() : item\n            )\n        else obj[key] = val\n    })\n    return obj as T\n}\n\n// Basically does an Object.assign, except if the target is a Persistable, will call updateFromObject on\n// that Persistable. It does not recurse. Will only update top level Persistables.\nexport function updatePersistables(\n    target: Record<string, any>,\n    obj?: Record<string, any>\n): void {\n    if (obj === undefined) return\n    for (const key in target) {\n        if (key in obj) {\n            const currentVal = target[key]\n            const currentValIsPersistableObject = currentVal?.updateFromObject\n            const newVal = obj[key]\n            if (currentValIsPersistableObject)\n                currentVal.updateFromObject(newVal)\n            else target[key] = newVal\n        }\n    }\n}\n\n// Don't persist properties that haven't changed from the defaults, and don't\n// keep properties not on the comparable class\nexport function deleteRuntimeAndUnchangedProps<T>(\n    changedObj: T,\n    defaultObject: T\n): T {\n    const obj = toJS(changedObj) as Record<string, unknown>\n    const defaultObj = defaultObject as Record<string, unknown>\n    const defaultKeys = new Set(Object.keys(defaultObj))\n    Object.keys(obj).forEach((key) => {\n        if (!defaultKeys.has(key)) {\n            // Don't persist any runtime props not in the persistable instance\n            delete obj[key]\n            return\n        }\n\n        const currentValue = obj[key]\n        const defaultValue = defaultObj[key]\n        if (_.isEqual(currentValue, defaultValue)) {\n            // Don't persist any values that weren't changed from the default\n            delete obj[key]\n        }\n    })\n    return obj as T\n}\n","// todo: remove file\n\nimport { observable, makeObservable } from \"mobx\"\nimport {\n    Persistable,\n    updatePersistables,\n    objectWithPersistablesToObject,\n    deleteRuntimeAndUnchangedProps,\n} from \"./persistable/Persistable.js\"\nimport {\n    OwidVariableDataTableConfigInterface,\n    OwidVariableDisplayConfigInterface,\n    OwidVariableRoundingMode,\n} from \"@ourworldindata/types\"\n\nclass OwidVariableDisplayConfigDefaults {\n    name: string | undefined = undefined\n    unit: string | undefined = undefined\n    shortUnit: string | undefined = undefined\n    isProjection: boolean | undefined = undefined\n    conversionFactor: number | undefined = undefined\n    roundingMode: OwidVariableRoundingMode | undefined = undefined\n    numDecimalPlaces: number | undefined = undefined\n    numSignificantFigures: number | undefined = undefined\n    tolerance: number | undefined = undefined\n    yearIsDay: boolean | undefined = undefined\n    zeroDay: string | undefined = undefined\n    entityAnnotationsMap: string | undefined = undefined\n    includeInTable: boolean | undefined = true\n    tableDisplay: OwidVariableDataTableConfigInterface | undefined = undefined\n    color: string | undefined = undefined\n    plotMarkersOnlyInLineChart: boolean | undefined = undefined\n\n    constructor() {\n        makeObservable(this, {\n            name: observable,\n            unit: observable,\n            shortUnit: observable,\n            isProjection: observable,\n            conversionFactor: observable,\n            roundingMode: observable,\n            numDecimalPlaces: observable,\n            numSignificantFigures: observable,\n            tolerance: observable,\n            yearIsDay: observable,\n            zeroDay: observable,\n            entityAnnotationsMap: observable,\n            includeInTable: observable,\n            tableDisplay: observable,\n            color: observable,\n            plotMarkersOnlyInLineChart: observable,\n        })\n    }\n}\n\nexport class OwidVariableDisplayConfig\n    extends OwidVariableDisplayConfigDefaults\n    implements Persistable\n{\n    updateFromObject(obj?: Partial<OwidVariableDisplayConfigInterface>): void {\n        if (obj) updatePersistables(this, obj)\n    }\n\n    toObject(): OwidVariableDisplayConfigDefaults {\n        return deleteRuntimeAndUnchangedProps(\n            objectWithPersistablesToObject(this),\n            new OwidVariableDisplayConfigDefaults()\n        )\n    }\n\n    constructor(obj?: Partial<OwidVariableDisplayConfigInterface>) {\n        super()\n        if (obj) this.updateFromObject(obj)\n    }\n}\n\n// export interface OwidVariablesAndEntityKey {\n//     variables: {\n//         [id: string]: OwidVariableWithDataAndSource\n//     }\n//     entityKey: OwidEntityKey\n// }\n","import { Url } from \"./Url.js\"\n\nexport type UrlMigration = (url: Url) => Url\n\nexport const performUrlMigrations = (\n    migrations: UrlMigration[],\n    url: Url\n): Url => {\n    return migrations.reduce((url, migration) => migration(url), url)\n}\n","const snakeToCamel = (str: string): string =>\n    str.replace(/(_\\w)/g, (char) => char[1].toUpperCase())\n\nexport const camelCaseProperties = (\n    obj: Record<string, unknown>\n): Record<string, unknown> => {\n    const newObj: any = {}\n    for (const key in obj) {\n        newObj[snakeToCamel(key)] = obj[key]\n    }\n    return newObj\n}\n\n/**\n * Converts a string to title case, with support for hyphenated words\n * e.g. 'WELCOME to jean-édouard' -> 'Welcome To Jean-Édouard!'\n */\nexport const titleCase = (str: string): string => {\n    return str\n        .split(\" \")\n        .map(function (word) {\n            return word\n                .split(\"-\")\n                .map(function (subWord) {\n                    return (\n                        subWord.charAt(0).toUpperCase() +\n                        subWord.substring(1).toLowerCase()\n                    )\n                })\n                .join(\"-\")\n        })\n        .join(\" \")\n}\n\nexport function toAsciiQuotes(str: string): string {\n    return str.replace(/[“”]/g, '\"').replace(/[‘’]/g, \"'\")\n}\n\n// https://stackoverflow.com/a/37511463/9846837\nexport function removeDiacritics(str: string): string {\n    return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\")\n}\n","const jsonCommentDelimiter = \"\\n//EMBEDDED_JSON\\n\"\n\nconst escapeJSONStringForInlineScript = (json: string): string =>\n    json\n        .replace(/</g, \"\\\\u003c\")\n        .replace(/\\u2028/g, \"\\\\u2028\")\n        .replace(/\\u2029/g, \"\\\\u2029\")\n\n// Stringifies JSON for placing into an arbitrary doc, for later extraction without parsing the whole doc\nexport const serializeJSONForHTML = (\n    obj: unknown,\n    delimiter = jsonCommentDelimiter\n): string =>\n    `${delimiter}${\n        obj === undefined\n            ? \"\"\n            : escapeJSONStringForInlineScript(JSON.stringify(obj, null, 2))\n    }${delimiter}`\nexport const deserializeJSONFromHTML = (\n    html: string,\n    delimiter = jsonCommentDelimiter\n): any => {\n    const json = html.split(delimiter)[1]\n    return json === undefined || json === \"\" ? undefined : JSON.parse(json)\n}\n","/**\n * Prevents creating multiple promises for a single key.\n *\n * If an existing promise for a key is pending, that promise will be returned without\n * creating a new one.\n *\n * If a promise throws an error, it will be discarded, and a new one created the next\n * time a key is requested.\n *\n * For now it only supports primitive value keys, but we can extend it if necessary.\n */\nexport class PromiseCache<Key extends string | number | undefined, Result> {\n    constructor(private createPromiseFromKey: (key: Key) => Promise<Result>) {}\n\n    private promisesByKey = new Map<Key, Promise<Result>>()\n\n    get(key: Key): Promise<Result> {\n        if (!this.promisesByKey.has(key)) {\n            this.promisesByKey.set(\n                key,\n                // Make sure to attach .catch() _before_ adding it to the cache.\n                // Otherwise external logic would be able to attach a catch() that\n                // could make this one unreachable.\n                this.createPromiseFromKey(key).catch((error) => {\n                    this.promisesByKey.delete(key)\n                    throw error\n                })\n            )\n        }\n        return this.promisesByKey.get(key)!\n    }\n\n    has(key: Key): boolean {\n        return this.promisesByKey.has(key)\n    }\n}\n","interface PromiseSelectorArg<Result> {\n    onResolve?: (result: Result) => void\n    onReject?: (error: any) => void\n}\n\n/**\n * An alternative to cancellable promises. Allows set()-ing a single promise,\n * discarding the results of any previous ones, regardless whether they\n * resolve or reject.\n *\n * The problem it solves:\n *\n * 1. User interacts with UI\n * 2. Request sent to fetch required data: `getViewData().then((data) => updateView(data))`\n * 3. But now what if the user navigates away? When the promise completes, it will\n *    update the view regardless.\n *\n * In order to solve this, we use `switcher = PromiseSwitcher({ onResolve: updateView })`\n * And then send off requests with `switcher.set(getViewData())`\n * If set() is called with a new Promise while the previous is still pending, the\n * pending promise is ignored – it doesn't call `onResolve` or `onReject`.\n *\n */\nexport class PromiseSwitcher<Result> {\n    private pendingPromise: Promise<Result> | undefined\n\n    private onResolve?: (result: Result) => void\n    private onReject?: (error: any) => void\n\n    constructor(arg: PromiseSelectorArg<Result>) {\n        this.onResolve = arg.onResolve\n        this.onReject = arg.onReject\n    }\n\n    async set(promise: Promise<Result>): Promise<void> {\n        this.pendingPromise = promise\n        try {\n            const result = await promise\n            if (this.pendingPromise === promise) {\n                this.onResolve?.(result)\n            }\n        } catch (error) {\n            if (this.pendingPromise === promise) {\n                this.onReject?.(error)\n            }\n        }\n    }\n\n    clear(): void {\n        this.pendingPromise = undefined\n    }\n}\n","/*\nCommon utlities for deriving properties from image metadata.\n*/\n\nimport { traverseEnrichedBlock } from \"./Util.js\"\nimport {\n    AssetMap,\n    OwidGdoc,\n    OwidGdocType,\n    ImageMetadata,\n} from \"@ourworldindata/types\"\nimport { match, P } from \"ts-pattern\"\n\nexport const AUTHOR_BYLINE_WIDTH = 48\nexport const THUMBNAIL_WIDTH = 100\nexport const LARGE_THUMBNAIL_WIDTH = 350\nexport const LARGEST_IMAGE_WIDTH = 1350\n\nexport function getArchivalSizes(\n    originalWidth: ImageMetadata[\"originalWidth\"]\n): number[] {\n    if (!originalWidth) return []\n    const widths: number[] = []\n    if (originalWidth > LARGE_THUMBNAIL_WIDTH) {\n        widths.push(LARGE_THUMBNAIL_WIDTH)\n    }\n    if (originalWidth > LARGEST_IMAGE_WIDTH) {\n        widths.push(LARGEST_IMAGE_WIDTH)\n    }\n    widths.push(originalWidth)\n    return widths\n}\n\nexport function getSizes(\n    originalWidth: ImageMetadata[\"originalWidth\"]\n): number[] {\n    if (!originalWidth) return []\n    // ensure a thumbnail and author byline is generated\n    const widths = [AUTHOR_BYLINE_WIDTH, THUMBNAIL_WIDTH]\n    // start at large thumbnail and go up by 500 to a max of 1350 before we just show the original image\n    let width = LARGE_THUMBNAIL_WIDTH\n    while (width < originalWidth && width <= LARGEST_IMAGE_WIDTH) {\n        widths.push(width)\n        width += 500\n    }\n    widths.push(originalWidth)\n    return widths\n}\n\nexport function generateSrcSet(\n    sizes: number[],\n    id: ImageMetadata[\"cloudflareId\"],\n    absoluteUrl: string = \"\"\n): string {\n    return sizes\n        .map((size) => {\n            const path = `${absoluteUrl}/${id}/w=${size}`\n            return `${path} ${size}w`\n        })\n        .join(\", \")\n}\n\nexport function getFilenameWithoutExtension(\n    filename: ImageMetadata[\"filename\"]\n): string {\n    return filename.slice(0, filename.indexOf(\".\"))\n}\n\nexport function getFilenameExtension(\n    filename: ImageMetadata[\"filename\"]\n): string {\n    return filename.slice(filename.lastIndexOf(\".\") + 1)\n}\n\nexport function getFilenameAsPng(filename: ImageMetadata[\"filename\"]): string {\n    return `${getFilenameWithoutExtension(filename)}.png`\n}\n\nexport function getFilenameMIMEType(filename: string): string | undefined {\n    const fileExtension = getFilenameExtension(filename)\n    const MIMEType = {\n        png: \"image/png\",\n        svg: \"image/svg+xml\",\n        jpg: \"image/jpg\",\n        jpeg: \"image/jpeg\",\n        webp: \"image/webp\",\n    }[fileExtension]\n\n    return MIMEType\n}\n\nexport type SourceProps = {\n    media: string | undefined\n    srcSet: string\n}\n\nexport function appendImageSizeSuffix(filename: string, size: number): string {\n    const extIndex = filename.lastIndexOf(\".\")\n    if (extIndex === -1) return `${filename}-${size}w`\n    const name = filename.slice(0, extIndex)\n    const ext = filename.slice(extIndex)\n    return `${name}-${size}w${ext}`\n}\n\nfunction generateArchivalSrcSet(\n    image: ImageMetadata,\n    sizes: number[],\n    assetMap: AssetMap\n): string {\n    return sizes\n        .map((size) => {\n            const filename =\n                size === image.originalWidth\n                    ? image.filename\n                    : appendImageSizeSuffix(image.filename, size)\n            const path = assetMap[filename]\n            if (!path) {\n                throw new Error(\n                    `Image ${image.filename} not found in asset map`\n                )\n            }\n            return `${path} ${size}w`\n        })\n        .filter(Boolean)\n        .join(\", \")\n}\n\n/**\n * When we have a small and large image, we want to generate two <source> elements.\n * The first will only be active at small screen sizes, due to its `media` property.\n * The second will be active at all screen sizes.\n * These props work in conjuction with a `sizes` attribute on the <source> element.\n */\nexport function generateSourceProps(\n    smallImage: ImageMetadata | undefined,\n    regularImage: ImageMetadata,\n    absoluteUrl: string = \"\",\n    assetMap?: AssetMap\n): SourceProps[] {\n    const props: SourceProps[] = []\n\n    function buildProps(image: ImageMetadata, media: string | undefined): void {\n        const sizes = assetMap\n            ? getArchivalSizes(image.originalWidth)\n            : getSizes(image.originalWidth)\n        if (sizes.length === 0) return\n\n        let srcSet: string | undefined\n        if (assetMap) {\n            srcSet = generateArchivalSrcSet(image, sizes, assetMap)\n        } else if (image.cloudflareId) {\n            const encodedId = encodeURIComponent(image.cloudflareId)\n            srcSet = generateSrcSet(sizes, encodedId, absoluteUrl)\n        }\n\n        if (!srcSet) return\n\n        props.push({\n            media,\n            srcSet,\n        })\n    }\n\n    if (smallImage) {\n        buildProps(smallImage, \"(max-width: 768px)\")\n    }\n    if (regularImage) {\n        buildProps(regularImage, undefined)\n    }\n\n    return props\n}\n\nexport function getFeaturedImageFilename(gdoc: OwidGdoc): string | undefined {\n    return match(gdoc)\n        .with(\n            {\n                content: {\n                    type: P.union(\n                        OwidGdocType.Article,\n                        OwidGdocType.TopicPage,\n                        OwidGdocType.LinearTopicPage,\n                        OwidGdocType.AboutPage,\n                        OwidGdocType.Author,\n                        OwidGdocType.Announcement\n                    ),\n                },\n            },\n            (match) => {\n                const featuredImageFilename = match.content[\"featured-image\"]\n                return featuredImageFilename\n            }\n        )\n        .with({ content: { type: OwidGdocType.DataInsight } }, (gdoc) => {\n            // Use the first image in the document as the featured image\n            let filename: string | undefined = undefined\n            for (const block of gdoc.content.body) {\n                traverseEnrichedBlock(block, (block) => {\n                    if (!filename && block.type === \"image\") {\n                        filename = block.smallFilename || block.filename\n                    }\n                })\n            }\n            return filename\n        })\n        .with(\n            {\n                content: { type: OwidGdocType.Profile },\n            },\n            (match) => match.content[\"featured-image\"]\n        )\n        .with(\n            {\n                content: {\n                    type: P.optional(\n                        P.union(OwidGdocType.Fragment, OwidGdocType.Homepage)\n                    ),\n                },\n            },\n            // This will fallback to DEFAULT_THUMBNAIL_FILENAME in Head.tsx\n            () => undefined\n        )\n        .exhaustive()\n}\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n  var refProp = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== refProp ? refProp : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop, noop)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  Children = {\n    map: mapChildren,\n    forEach: function (children, forEachFunc, forEachContext) {\n      mapChildren(\n        children,\n        function () {\n          forEachFunc.apply(this, arguments);\n        },\n        forEachContext\n      );\n    },\n    count: function (children) {\n      var n = 0;\n      mapChildren(children, function () {\n        n++;\n      });\n      return n;\n    },\n    toArray: function (children) {\n      return (\n        mapChildren(children, function (child) {\n          return child;\n        }) || []\n      );\n    },\n    only: function (children) {\n      if (!isValidElement(children))\n        throw Error(\n          \"React.Children.only expected to receive a single React element child.\"\n        );\n      return children;\n    }\n  };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cacheSignal = function () {\n  return null;\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    null !== prevTransition &&\n      null !== currentTransition.types &&\n      (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n  return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n  return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.4\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nexport default function getBoundingClientRect(element, includeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  var rect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (isHTMLElement(element) && includeScale) {\n    var offsetHeight = element.offsetHeight;\n    var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n    // Fallback to 1 in case both values are `0`\n\n    if (offsetWidth > 0) {\n      scaleX = round(rect.width) / offsetWidth || 1;\n    }\n\n    if (offsetHeight > 0) {\n      scaleY = round(rect.height) / offsetHeight || 1;\n    }\n  }\n\n  return {\n    width: rect.width / scaleX,\n    height: rect.height / scaleY,\n    top: rect.top / scaleY,\n    right: rect.right / scaleX,\n    bottom: rect.bottom / scaleY,\n    left: rect.left / scaleX,\n    x: rect.left / scaleX,\n    y: rect.top / scaleY\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n  var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n  // can be obscured underneath it.\n  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n  // if it isn't open, so if this isn't available, the popper will be detected\n  // to overflow the bottom of the screen too early.\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n    // Feature detection fails in mobile emulation mode in Chrome.\n    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n    // 0.001\n    // Fallback here: \"Not Safari\" userAgent\n\n    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n  var rect = getBoundingClientRect(element);\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**!\n* tippy.js v6.3.7\n* (c) 2017-2021 atomiks\n* MIT License\n*/\nimport { createPopper, applyStyles } from '@popperjs/core';\n\nvar ROUND_ARROW = '<svg width=\"16\" height=\"6\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z\"></svg>';\nvar BOX_CLASS = \"tippy-box\";\nvar CONTENT_CLASS = \"tippy-content\";\nvar BACKDROP_CLASS = \"tippy-backdrop\";\nvar ARROW_CLASS = \"tippy-arrow\";\nvar SVG_ARROW_CLASS = \"tippy-svg-arrow\";\nvar TOUCH_OPTIONS = {\n  passive: true,\n  capture: true\n};\nvar TIPPY_DEFAULT_APPEND_TO = function TIPPY_DEFAULT_APPEND_TO() {\n  return document.body;\n};\n\nfunction hasOwnProperty(obj, key) {\n  return {}.hasOwnProperty.call(obj, key);\n}\nfunction getValueAtIndexOrReturn(value, index, defaultValue) {\n  if (Array.isArray(value)) {\n    var v = value[index];\n    return v == null ? Array.isArray(defaultValue) ? defaultValue[index] : defaultValue : v;\n  }\n\n  return value;\n}\nfunction isType(value, type) {\n  var str = {}.toString.call(value);\n  return str.indexOf('[object') === 0 && str.indexOf(type + \"]\") > -1;\n}\nfunction invokeWithArgsOrReturn(value, args) {\n  return typeof value === 'function' ? value.apply(void 0, args) : value;\n}\nfunction debounce(fn, ms) {\n  // Avoid wrapping in `setTimeout` if ms is 0 anyway\n  if (ms === 0) {\n    return fn;\n  }\n\n  var timeout;\n  return function (arg) {\n    clearTimeout(timeout);\n    timeout = setTimeout(function () {\n      fn(arg);\n    }, ms);\n  };\n}\nfunction removeProperties(obj, keys) {\n  var clone = Object.assign({}, obj);\n  keys.forEach(function (key) {\n    delete clone[key];\n  });\n  return clone;\n}\nfunction splitBySpaces(value) {\n  return value.split(/\\s+/).filter(Boolean);\n}\nfunction normalizeToArray(value) {\n  return [].concat(value);\n}\nfunction pushIfUnique(arr, value) {\n  if (arr.indexOf(value) === -1) {\n    arr.push(value);\n  }\n}\nfunction unique(arr) {\n  return arr.filter(function (item, index) {\n    return arr.indexOf(item) === index;\n  });\n}\nfunction getBasePlacement(placement) {\n  return placement.split('-')[0];\n}\nfunction arrayFrom(value) {\n  return [].slice.call(value);\n}\nfunction removeUndefinedProps(obj) {\n  return Object.keys(obj).reduce(function (acc, key) {\n    if (obj[key] !== undefined) {\n      acc[key] = obj[key];\n    }\n\n    return acc;\n  }, {});\n}\n\nfunction div() {\n  return document.createElement('div');\n}\nfunction isElement(value) {\n  return ['Element', 'Fragment'].some(function (type) {\n    return isType(value, type);\n  });\n}\nfunction isNodeList(value) {\n  return isType(value, 'NodeList');\n}\nfunction isMouseEvent(value) {\n  return isType(value, 'MouseEvent');\n}\nfunction isReferenceElement(value) {\n  return !!(value && value._tippy && value._tippy.reference === value);\n}\nfunction getArrayOfElements(value) {\n  if (isElement(value)) {\n    return [value];\n  }\n\n  if (isNodeList(value)) {\n    return arrayFrom(value);\n  }\n\n  if (Array.isArray(value)) {\n    return value;\n  }\n\n  return arrayFrom(document.querySelectorAll(value));\n}\nfunction setTransitionDuration(els, value) {\n  els.forEach(function (el) {\n    if (el) {\n      el.style.transitionDuration = value + \"ms\";\n    }\n  });\n}\nfunction setVisibilityState(els, state) {\n  els.forEach(function (el) {\n    if (el) {\n      el.setAttribute('data-state', state);\n    }\n  });\n}\nfunction getOwnerDocument(elementOrElements) {\n  var _element$ownerDocumen;\n\n  var _normalizeToArray = normalizeToArray(elementOrElements),\n      element = _normalizeToArray[0]; // Elements created via a <template> have an ownerDocument with no reference to the body\n\n\n  return element != null && (_element$ownerDocumen = element.ownerDocument) != null && _element$ownerDocumen.body ? element.ownerDocument : document;\n}\nfunction isCursorOutsideInteractiveBorder(popperTreeData, event) {\n  var clientX = event.clientX,\n      clientY = event.clientY;\n  return popperTreeData.every(function (_ref) {\n    var popperRect = _ref.popperRect,\n        popperState = _ref.popperState,\n        props = _ref.props;\n    var interactiveBorder = props.interactiveBorder;\n    var basePlacement = getBasePlacement(popperState.placement);\n    var offsetData = popperState.modifiersData.offset;\n\n    if (!offsetData) {\n      return true;\n    }\n\n    var topDistance = basePlacement === 'bottom' ? offsetData.top.y : 0;\n    var bottomDistance = basePlacement === 'top' ? offsetData.bottom.y : 0;\n    var leftDistance = basePlacement === 'right' ? offsetData.left.x : 0;\n    var rightDistance = basePlacement === 'left' ? offsetData.right.x : 0;\n    var exceedsTop = popperRect.top - clientY + topDistance > interactiveBorder;\n    var exceedsBottom = clientY - popperRect.bottom - bottomDistance > interactiveBorder;\n    var exceedsLeft = popperRect.left - clientX + leftDistance > interactiveBorder;\n    var exceedsRight = clientX - popperRect.right - rightDistance > interactiveBorder;\n    return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n  });\n}\nfunction updateTransitionEndListener(box, action, listener) {\n  var method = action + \"EventListener\"; // some browsers apparently support `transition` (unprefixed) but only fire\n  // `webkitTransitionEnd`...\n\n  ['transitionend', 'webkitTransitionEnd'].forEach(function (event) {\n    box[method](event, listener);\n  });\n}\n/**\n * Compared to xxx.contains, this function works for dom structures with shadow\n * dom\n */\n\nfunction actualContains(parent, child) {\n  var target = child;\n\n  while (target) {\n    var _target$getRootNode;\n\n    if (parent.contains(target)) {\n      return true;\n    }\n\n    target = target.getRootNode == null ? void 0 : (_target$getRootNode = target.getRootNode()) == null ? void 0 : _target$getRootNode.host;\n  }\n\n  return false;\n}\n\nvar currentInput = {\n  isTouch: false\n};\nvar lastMouseMoveTime = 0;\n/**\n * When a `touchstart` event is fired, it's assumed the user is using touch\n * input. We'll bind a `mousemove` event listener to listen for mouse input in\n * the future. This way, the `isTouch` property is fully dynamic and will handle\n * hybrid devices that use a mix of touch + mouse input.\n */\n\nfunction onDocumentTouchStart() {\n  if (currentInput.isTouch) {\n    return;\n  }\n\n  currentInput.isTouch = true;\n\n  if (window.performance) {\n    document.addEventListener('mousemove', onDocumentMouseMove);\n  }\n}\n/**\n * When two `mousemove` event are fired consecutively within 20ms, it's assumed\n * the user is using mouse input again. `mousemove` can fire on touch devices as\n * well, but very rarely that quickly.\n */\n\nfunction onDocumentMouseMove() {\n  var now = performance.now();\n\n  if (now - lastMouseMoveTime < 20) {\n    currentInput.isTouch = false;\n    document.removeEventListener('mousemove', onDocumentMouseMove);\n  }\n\n  lastMouseMoveTime = now;\n}\n/**\n * When an element is in focus and has a tippy, leaving the tab/window and\n * returning causes it to show again. For mouse users this is unexpected, but\n * for keyboard use it makes sense.\n * TODO: find a better technique to solve this problem\n */\n\nfunction onWindowBlur() {\n  var activeElement = document.activeElement;\n\n  if (isReferenceElement(activeElement)) {\n    var instance = activeElement._tippy;\n\n    if (activeElement.blur && !instance.state.isVisible) {\n      activeElement.blur();\n    }\n  }\n}\nfunction bindGlobalEventListeners() {\n  document.addEventListener('touchstart', onDocumentTouchStart, TOUCH_OPTIONS);\n  window.addEventListener('blur', onWindowBlur);\n}\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nvar isIE11 = isBrowser ? // @ts-ignore\n!!window.msCrypto : false;\n\nfunction createMemoryLeakWarning(method) {\n  var txt = method === 'destroy' ? 'n already-' : ' ';\n  return [method + \"() was called on a\" + txt + \"destroyed instance. This is a no-op but\", 'indicates a potential memory leak.'].join(' ');\n}\nfunction clean(value) {\n  var spacesAndTabs = /[ \\t]{2,}/g;\n  var lineStartWithSpaces = /^[ \\t]*/gm;\n  return value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();\n}\n\nfunction getDevMessage(message) {\n  return clean(\"\\n  %ctippy.js\\n\\n  %c\" + clean(message) + \"\\n\\n  %c\\uD83D\\uDC77\\u200D This is a development-only message. It will be removed in production.\\n  \");\n}\n\nfunction getFormattedMessage(message) {\n  return [getDevMessage(message), // title\n  'color: #00C584; font-size: 1.3em; font-weight: bold;', // message\n  'line-height: 1.5', // footer\n  'color: #a6a095;'];\n} // Assume warnings and errors never have the same message\n\nvar visitedMessages;\n\nif (process.env.NODE_ENV !== \"production\") {\n  resetVisitedMessages();\n}\n\nfunction resetVisitedMessages() {\n  visitedMessages = new Set();\n}\nfunction warnWhen(condition, message) {\n  if (condition && !visitedMessages.has(message)) {\n    var _console;\n\n    visitedMessages.add(message);\n\n    (_console = console).warn.apply(_console, getFormattedMessage(message));\n  }\n}\nfunction errorWhen(condition, message) {\n  if (condition && !visitedMessages.has(message)) {\n    var _console2;\n\n    visitedMessages.add(message);\n\n    (_console2 = console).error.apply(_console2, getFormattedMessage(message));\n  }\n}\nfunction validateTargets(targets) {\n  var didPassFalsyValue = !targets;\n  var didPassPlainObject = Object.prototype.toString.call(targets) === '[object Object]' && !targets.addEventListener;\n  errorWhen(didPassFalsyValue, ['tippy() was passed', '`' + String(targets) + '`', 'as its targets (first) argument. Valid types are: String, Element,', 'Element[], or NodeList.'].join(' '));\n  errorWhen(didPassPlainObject, ['tippy() was passed a plain object which is not supported as an argument', 'for virtual positioning. Use props.getReferenceClientRect instead.'].join(' '));\n}\n\nvar pluginProps = {\n  animateFill: false,\n  followCursor: false,\n  inlinePositioning: false,\n  sticky: false\n};\nvar renderProps = {\n  allowHTML: false,\n  animation: 'fade',\n  arrow: true,\n  content: '',\n  inertia: false,\n  maxWidth: 350,\n  role: 'tooltip',\n  theme: '',\n  zIndex: 9999\n};\nvar defaultProps = Object.assign({\n  appendTo: TIPPY_DEFAULT_APPEND_TO,\n  aria: {\n    content: 'auto',\n    expanded: 'auto'\n  },\n  delay: 0,\n  duration: [300, 250],\n  getReferenceClientRect: null,\n  hideOnClick: true,\n  ignoreAttributes: false,\n  interactive: false,\n  interactiveBorder: 2,\n  interactiveDebounce: 0,\n  moveTransition: '',\n  offset: [0, 10],\n  onAfterUpdate: function onAfterUpdate() {},\n  onBeforeUpdate: function onBeforeUpdate() {},\n  onCreate: function onCreate() {},\n  onDestroy: function onDestroy() {},\n  onHidden: function onHidden() {},\n  onHide: function onHide() {},\n  onMount: function onMount() {},\n  onShow: function onShow() {},\n  onShown: function onShown() {},\n  onTrigger: function onTrigger() {},\n  onUntrigger: function onUntrigger() {},\n  onClickOutside: function onClickOutside() {},\n  placement: 'top',\n  plugins: [],\n  popperOptions: {},\n  render: null,\n  showOnCreate: false,\n  touch: true,\n  trigger: 'mouseenter focus',\n  triggerTarget: null\n}, pluginProps, renderProps);\nvar defaultKeys = Object.keys(defaultProps);\nvar setDefaultProps = function setDefaultProps(partialProps) {\n  /* istanbul ignore else */\n  if (process.env.NODE_ENV !== \"production\") {\n    validateProps(partialProps, []);\n  }\n\n  var keys = Object.keys(partialProps);\n  keys.forEach(function (key) {\n    defaultProps[key] = partialProps[key];\n  });\n};\nfunction getExtendedPassedProps(passedProps) {\n  var plugins = passedProps.plugins || [];\n  var pluginProps = plugins.reduce(function (acc, plugin) {\n    var name = plugin.name,\n        defaultValue = plugin.defaultValue;\n\n    if (name) {\n      var _name;\n\n      acc[name] = passedProps[name] !== undefined ? passedProps[name] : (_name = defaultProps[name]) != null ? _name : defaultValue;\n    }\n\n    return acc;\n  }, {});\n  return Object.assign({}, passedProps, pluginProps);\n}\nfunction getDataAttributeProps(reference, plugins) {\n  var propKeys = plugins ? Object.keys(getExtendedPassedProps(Object.assign({}, defaultProps, {\n    plugins: plugins\n  }))) : defaultKeys;\n  var props = propKeys.reduce(function (acc, key) {\n    var valueAsString = (reference.getAttribute(\"data-tippy-\" + key) || '').trim();\n\n    if (!valueAsString) {\n      return acc;\n    }\n\n    if (key === 'content') {\n      acc[key] = valueAsString;\n    } else {\n      try {\n        acc[key] = JSON.parse(valueAsString);\n      } catch (e) {\n        acc[key] = valueAsString;\n      }\n    }\n\n    return acc;\n  }, {});\n  return props;\n}\nfunction evaluateProps(reference, props) {\n  var out = Object.assign({}, props, {\n    content: invokeWithArgsOrReturn(props.content, [reference])\n  }, props.ignoreAttributes ? {} : getDataAttributeProps(reference, props.plugins));\n  out.aria = Object.assign({}, defaultProps.aria, out.aria);\n  out.aria = {\n    expanded: out.aria.expanded === 'auto' ? props.interactive : out.aria.expanded,\n    content: out.aria.content === 'auto' ? props.interactive ? null : 'describedby' : out.aria.content\n  };\n  return out;\n}\nfunction validateProps(partialProps, plugins) {\n  if (partialProps === void 0) {\n    partialProps = {};\n  }\n\n  if (plugins === void 0) {\n    plugins = [];\n  }\n\n  var keys = Object.keys(partialProps);\n  keys.forEach(function (prop) {\n    var nonPluginProps = removeProperties(defaultProps, Object.keys(pluginProps));\n    var didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop); // Check if the prop exists in `plugins`\n\n    if (didPassUnknownProp) {\n      didPassUnknownProp = plugins.filter(function (plugin) {\n        return plugin.name === prop;\n      }).length === 0;\n    }\n\n    warnWhen(didPassUnknownProp, [\"`\" + prop + \"`\", \"is not a valid prop. You may have spelled it incorrectly, or if it's\", 'a plugin, forgot to pass it in an array as props.plugins.', '\\n\\n', 'All props: https://atomiks.github.io/tippyjs/v6/all-props/\\n', 'Plugins: https://atomiks.github.io/tippyjs/v6/plugins/'].join(' '));\n  });\n}\n\nvar innerHTML = function innerHTML() {\n  return 'innerHTML';\n};\n\nfunction dangerouslySetInnerHTML(element, html) {\n  element[innerHTML()] = html;\n}\n\nfunction createArrowElement(value) {\n  var arrow = div();\n\n  if (value === true) {\n    arrow.className = ARROW_CLASS;\n  } else {\n    arrow.className = SVG_ARROW_CLASS;\n\n    if (isElement(value)) {\n      arrow.appendChild(value);\n    } else {\n      dangerouslySetInnerHTML(arrow, value);\n    }\n  }\n\n  return arrow;\n}\n\nfunction setContent(content, props) {\n  if (isElement(props.content)) {\n    dangerouslySetInnerHTML(content, '');\n    content.appendChild(props.content);\n  } else if (typeof props.content !== 'function') {\n    if (props.allowHTML) {\n      dangerouslySetInnerHTML(content, props.content);\n    } else {\n      content.textContent = props.content;\n    }\n  }\n}\nfunction getChildren(popper) {\n  var box = popper.firstElementChild;\n  var boxChildren = arrayFrom(box.children);\n  return {\n    box: box,\n    content: boxChildren.find(function (node) {\n      return node.classList.contains(CONTENT_CLASS);\n    }),\n    arrow: boxChildren.find(function (node) {\n      return node.classList.contains(ARROW_CLASS) || node.classList.contains(SVG_ARROW_CLASS);\n    }),\n    backdrop: boxChildren.find(function (node) {\n      return node.classList.contains(BACKDROP_CLASS);\n    })\n  };\n}\nfunction render(instance) {\n  var popper = div();\n  var box = div();\n  box.className = BOX_CLASS;\n  box.setAttribute('data-state', 'hidden');\n  box.setAttribute('tabindex', '-1');\n  var content = div();\n  content.className = CONTENT_CLASS;\n  content.setAttribute('data-state', 'hidden');\n  setContent(content, instance.props);\n  popper.appendChild(box);\n  box.appendChild(content);\n  onUpdate(instance.props, instance.props);\n\n  function onUpdate(prevProps, nextProps) {\n    var _getChildren = getChildren(popper),\n        box = _getChildren.box,\n        content = _getChildren.content,\n        arrow = _getChildren.arrow;\n\n    if (nextProps.theme) {\n      box.setAttribute('data-theme', nextProps.theme);\n    } else {\n      box.removeAttribute('data-theme');\n    }\n\n    if (typeof nextProps.animation === 'string') {\n      box.setAttribute('data-animation', nextProps.animation);\n    } else {\n      box.removeAttribute('data-animation');\n    }\n\n    if (nextProps.inertia) {\n      box.setAttribute('data-inertia', '');\n    } else {\n      box.removeAttribute('data-inertia');\n    }\n\n    box.style.maxWidth = typeof nextProps.maxWidth === 'number' ? nextProps.maxWidth + \"px\" : nextProps.maxWidth;\n\n    if (nextProps.role) {\n      box.setAttribute('role', nextProps.role);\n    } else {\n      box.removeAttribute('role');\n    }\n\n    if (prevProps.content !== nextProps.content || prevProps.allowHTML !== nextProps.allowHTML) {\n      setContent(content, instance.props);\n    }\n\n    if (nextProps.arrow) {\n      if (!arrow) {\n        box.appendChild(createArrowElement(nextProps.arrow));\n      } else if (prevProps.arrow !== nextProps.arrow) {\n        box.removeChild(arrow);\n        box.appendChild(createArrowElement(nextProps.arrow));\n      }\n    } else if (arrow) {\n      box.removeChild(arrow);\n    }\n  }\n\n  return {\n    popper: popper,\n    onUpdate: onUpdate\n  };\n} // Runtime check to identify if the render function is the default one; this\n// way we can apply default CSS transitions logic and it can be tree-shaken away\n\nrender.$$tippy = true;\n\nvar idCounter = 1;\nvar mouseMoveListeners = []; // Used by `hideAll()`\n\nvar mountedInstances = [];\nfunction createTippy(reference, passedProps) {\n  var props = evaluateProps(reference, Object.assign({}, defaultProps, getExtendedPassedProps(removeUndefinedProps(passedProps)))); // ===========================================================================\n  // 🔒 Private members\n  // ===========================================================================\n\n  var showTimeout;\n  var hideTimeout;\n  var scheduleHideAnimationFrame;\n  var isVisibleFromClick = false;\n  var didHideDueToDocumentMouseDown = false;\n  var didTouchMove = false;\n  var ignoreOnFirstUpdate = false;\n  var lastTriggerEvent;\n  var currentTransitionEndListener;\n  var onFirstUpdate;\n  var listeners = [];\n  var debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);\n  var currentTarget; // ===========================================================================\n  // 🔑 Public members\n  // ===========================================================================\n\n  var id = idCounter++;\n  var popperInstance = null;\n  var plugins = unique(props.plugins);\n  var state = {\n    // Is the instance currently enabled?\n    isEnabled: true,\n    // Is the tippy currently showing and not transitioning out?\n    isVisible: false,\n    // Has the instance been destroyed?\n    isDestroyed: false,\n    // Is the tippy currently mounted to the DOM?\n    isMounted: false,\n    // Has the tippy finished transitioning in?\n    isShown: false\n  };\n  var instance = {\n    // properties\n    id: id,\n    reference: reference,\n    popper: div(),\n    popperInstance: popperInstance,\n    props: props,\n    state: state,\n    plugins: plugins,\n    // methods\n    clearDelayTimeouts: clearDelayTimeouts,\n    setProps: setProps,\n    setContent: setContent,\n    show: show,\n    hide: hide,\n    hideWithInteractivity: hideWithInteractivity,\n    enable: enable,\n    disable: disable,\n    unmount: unmount,\n    destroy: destroy\n  }; // TODO: Investigate why this early return causes a TDZ error in the tests —\n  // it doesn't seem to happen in the browser\n\n  /* istanbul ignore if */\n\n  if (!props.render) {\n    if (process.env.NODE_ENV !== \"production\") {\n      errorWhen(true, 'render() function has not been supplied.');\n    }\n\n    return instance;\n  } // ===========================================================================\n  // Initial mutations\n  // ===========================================================================\n\n\n  var _props$render = props.render(instance),\n      popper = _props$render.popper,\n      onUpdate = _props$render.onUpdate;\n\n  popper.setAttribute('data-tippy-root', '');\n  popper.id = \"tippy-\" + instance.id;\n  instance.popper = popper;\n  reference._tippy = instance;\n  popper._tippy = instance;\n  var pluginsHooks = plugins.map(function (plugin) {\n    return plugin.fn(instance);\n  });\n  var hasAriaExpanded = reference.hasAttribute('aria-expanded');\n  addListeners();\n  handleAriaExpandedAttribute();\n  handleStyles();\n  invokeHook('onCreate', [instance]);\n\n  if (props.showOnCreate) {\n    scheduleShow();\n  } // Prevent a tippy with a delay from hiding if the cursor left then returned\n  // before it started hiding\n\n\n  popper.addEventListener('mouseenter', function () {\n    if (instance.props.interactive && instance.state.isVisible) {\n      instance.clearDelayTimeouts();\n    }\n  });\n  popper.addEventListener('mouseleave', function () {\n    if (instance.props.interactive && instance.props.trigger.indexOf('mouseenter') >= 0) {\n      getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    }\n  });\n  return instance; // ===========================================================================\n  // 🔒 Private methods\n  // ===========================================================================\n\n  function getNormalizedTouchSettings() {\n    var touch = instance.props.touch;\n    return Array.isArray(touch) ? touch : [touch, 0];\n  }\n\n  function getIsCustomTouchBehavior() {\n    return getNormalizedTouchSettings()[0] === 'hold';\n  }\n\n  function getIsDefaultRenderFn() {\n    var _instance$props$rende;\n\n    // @ts-ignore\n    return !!((_instance$props$rende = instance.props.render) != null && _instance$props$rende.$$tippy);\n  }\n\n  function getCurrentTarget() {\n    return currentTarget || reference;\n  }\n\n  function getDocument() {\n    var parent = getCurrentTarget().parentNode;\n    return parent ? getOwnerDocument(parent) : document;\n  }\n\n  function getDefaultTemplateChildren() {\n    return getChildren(popper);\n  }\n\n  function getDelay(isShow) {\n    // For touch or keyboard input, force `0` delay for UX reasons\n    // Also if the instance is mounted but not visible (transitioning out),\n    // ignore delay\n    if (instance.state.isMounted && !instance.state.isVisible || currentInput.isTouch || lastTriggerEvent && lastTriggerEvent.type === 'focus') {\n      return 0;\n    }\n\n    return getValueAtIndexOrReturn(instance.props.delay, isShow ? 0 : 1, defaultProps.delay);\n  }\n\n  function handleStyles(fromHide) {\n    if (fromHide === void 0) {\n      fromHide = false;\n    }\n\n    popper.style.pointerEvents = instance.props.interactive && !fromHide ? '' : 'none';\n    popper.style.zIndex = \"\" + instance.props.zIndex;\n  }\n\n  function invokeHook(hook, args, shouldInvokePropsHook) {\n    if (shouldInvokePropsHook === void 0) {\n      shouldInvokePropsHook = true;\n    }\n\n    pluginsHooks.forEach(function (pluginHooks) {\n      if (pluginHooks[hook]) {\n        pluginHooks[hook].apply(pluginHooks, args);\n      }\n    });\n\n    if (shouldInvokePropsHook) {\n      var _instance$props;\n\n      (_instance$props = instance.props)[hook].apply(_instance$props, args);\n    }\n  }\n\n  function handleAriaContentAttribute() {\n    var aria = instance.props.aria;\n\n    if (!aria.content) {\n      return;\n    }\n\n    var attr = \"aria-\" + aria.content;\n    var id = popper.id;\n    var nodes = normalizeToArray(instance.props.triggerTarget || reference);\n    nodes.forEach(function (node) {\n      var currentValue = node.getAttribute(attr);\n\n      if (instance.state.isVisible) {\n        node.setAttribute(attr, currentValue ? currentValue + \" \" + id : id);\n      } else {\n        var nextValue = currentValue && currentValue.replace(id, '').trim();\n\n        if (nextValue) {\n          node.setAttribute(attr, nextValue);\n        } else {\n          node.removeAttribute(attr);\n        }\n      }\n    });\n  }\n\n  function handleAriaExpandedAttribute() {\n    if (hasAriaExpanded || !instance.props.aria.expanded) {\n      return;\n    }\n\n    var nodes = normalizeToArray(instance.props.triggerTarget || reference);\n    nodes.forEach(function (node) {\n      if (instance.props.interactive) {\n        node.setAttribute('aria-expanded', instance.state.isVisible && node === getCurrentTarget() ? 'true' : 'false');\n      } else {\n        node.removeAttribute('aria-expanded');\n      }\n    });\n  }\n\n  function cleanupInteractiveMouseListeners() {\n    getDocument().removeEventListener('mousemove', debouncedOnMouseMove);\n    mouseMoveListeners = mouseMoveListeners.filter(function (listener) {\n      return listener !== debouncedOnMouseMove;\n    });\n  }\n\n  function onDocumentPress(event) {\n    // Moved finger to scroll instead of an intentional tap outside\n    if (currentInput.isTouch) {\n      if (didTouchMove || event.type === 'mousedown') {\n        return;\n      }\n    }\n\n    var actualTarget = event.composedPath && event.composedPath()[0] || event.target; // Clicked on interactive popper\n\n    if (instance.props.interactive && actualContains(popper, actualTarget)) {\n      return;\n    } // Clicked on the event listeners target\n\n\n    if (normalizeToArray(instance.props.triggerTarget || reference).some(function (el) {\n      return actualContains(el, actualTarget);\n    })) {\n      if (currentInput.isTouch) {\n        return;\n      }\n\n      if (instance.state.isVisible && instance.props.trigger.indexOf('click') >= 0) {\n        return;\n      }\n    } else {\n      invokeHook('onClickOutside', [instance, event]);\n    }\n\n    if (instance.props.hideOnClick === true) {\n      instance.clearDelayTimeouts();\n      instance.hide(); // `mousedown` event is fired right before `focus` if pressing the\n      // currentTarget. This lets a tippy with `focus` trigger know that it\n      // should not show\n\n      didHideDueToDocumentMouseDown = true;\n      setTimeout(function () {\n        didHideDueToDocumentMouseDown = false;\n      }); // The listener gets added in `scheduleShow()`, but this may be hiding it\n      // before it shows, and hide()'s early bail-out behavior can prevent it\n      // from being cleaned up\n\n      if (!instance.state.isMounted) {\n        removeDocumentPress();\n      }\n    }\n  }\n\n  function onTouchMove() {\n    didTouchMove = true;\n  }\n\n  function onTouchStart() {\n    didTouchMove = false;\n  }\n\n  function addDocumentPress() {\n    var doc = getDocument();\n    doc.addEventListener('mousedown', onDocumentPress, true);\n    doc.addEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.addEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.addEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function removeDocumentPress() {\n    var doc = getDocument();\n    doc.removeEventListener('mousedown', onDocumentPress, true);\n    doc.removeEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.removeEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.removeEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function onTransitionedOut(duration, callback) {\n    onTransitionEnd(duration, function () {\n      if (!instance.state.isVisible && popper.parentNode && popper.parentNode.contains(popper)) {\n        callback();\n      }\n    });\n  }\n\n  function onTransitionedIn(duration, callback) {\n    onTransitionEnd(duration, callback);\n  }\n\n  function onTransitionEnd(duration, callback) {\n    var box = getDefaultTemplateChildren().box;\n\n    function listener(event) {\n      if (event.target === box) {\n        updateTransitionEndListener(box, 'remove', listener);\n        callback();\n      }\n    } // Make callback synchronous if duration is 0\n    // `transitionend` won't fire otherwise\n\n\n    if (duration === 0) {\n      return callback();\n    }\n\n    updateTransitionEndListener(box, 'remove', currentTransitionEndListener);\n    updateTransitionEndListener(box, 'add', listener);\n    currentTransitionEndListener = listener;\n  }\n\n  function on(eventType, handler, options) {\n    if (options === void 0) {\n      options = false;\n    }\n\n    var nodes = normalizeToArray(instance.props.triggerTarget || reference);\n    nodes.forEach(function (node) {\n      node.addEventListener(eventType, handler, options);\n      listeners.push({\n        node: node,\n        eventType: eventType,\n        handler: handler,\n        options: options\n      });\n    });\n  }\n\n  function addListeners() {\n    if (getIsCustomTouchBehavior()) {\n      on('touchstart', onTrigger, {\n        passive: true\n      });\n      on('touchend', onMouseLeave, {\n        passive: true\n      });\n    }\n\n    splitBySpaces(instance.props.trigger).forEach(function (eventType) {\n      if (eventType === 'manual') {\n        return;\n      }\n\n      on(eventType, onTrigger);\n\n      switch (eventType) {\n        case 'mouseenter':\n          on('mouseleave', onMouseLeave);\n          break;\n\n        case 'focus':\n          on(isIE11 ? 'focusout' : 'blur', onBlurOrFocusOut);\n          break;\n\n        case 'focusin':\n          on('focusout', onBlurOrFocusOut);\n          break;\n      }\n    });\n  }\n\n  function removeListeners() {\n    listeners.forEach(function (_ref) {\n      var node = _ref.node,\n          eventType = _ref.eventType,\n          handler = _ref.handler,\n          options = _ref.options;\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function onTrigger(event) {\n    var _lastTriggerEvent;\n\n    var shouldScheduleClickHide = false;\n\n    if (!instance.state.isEnabled || isEventListenerStopped(event) || didHideDueToDocumentMouseDown) {\n      return;\n    }\n\n    var wasFocused = ((_lastTriggerEvent = lastTriggerEvent) == null ? void 0 : _lastTriggerEvent.type) === 'focus';\n    lastTriggerEvent = event;\n    currentTarget = event.currentTarget;\n    handleAriaExpandedAttribute();\n\n    if (!instance.state.isVisible && isMouseEvent(event)) {\n      // If scrolling, `mouseenter` events can be fired if the cursor lands\n      // over a new target, but `mousemove` events don't get fired. This\n      // causes interactive tooltips to get stuck open until the cursor is\n      // moved\n      mouseMoveListeners.forEach(function (listener) {\n        return listener(event);\n      });\n    } // Toggle show/hide when clicking click-triggered tooltips\n\n\n    if (event.type === 'click' && (instance.props.trigger.indexOf('mouseenter') < 0 || isVisibleFromClick) && instance.props.hideOnClick !== false && instance.state.isVisible) {\n      shouldScheduleClickHide = true;\n    } else {\n      scheduleShow(event);\n    }\n\n    if (event.type === 'click') {\n      isVisibleFromClick = !shouldScheduleClickHide;\n    }\n\n    if (shouldScheduleClickHide && !wasFocused) {\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseMove(event) {\n    var target = event.target;\n    var isCursorOverReferenceOrPopper = getCurrentTarget().contains(target) || popper.contains(target);\n\n    if (event.type === 'mousemove' && isCursorOverReferenceOrPopper) {\n      return;\n    }\n\n    var popperTreeData = getNestedPopperTree().concat(popper).map(function (popper) {\n      var _instance$popperInsta;\n\n      var instance = popper._tippy;\n      var state = (_instance$popperInsta = instance.popperInstance) == null ? void 0 : _instance$popperInsta.state;\n\n      if (state) {\n        return {\n          popperRect: popper.getBoundingClientRect(),\n          popperState: state,\n          props: props\n        };\n      }\n\n      return null;\n    }).filter(Boolean);\n\n    if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {\n      cleanupInteractiveMouseListeners();\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseLeave(event) {\n    var shouldBail = isEventListenerStopped(event) || instance.props.trigger.indexOf('click') >= 0 && isVisibleFromClick;\n\n    if (shouldBail) {\n      return;\n    }\n\n    if (instance.props.interactive) {\n      instance.hideWithInteractivity(event);\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function onBlurOrFocusOut(event) {\n    if (instance.props.trigger.indexOf('focusin') < 0 && event.target !== getCurrentTarget()) {\n      return;\n    } // If focus was moved to within the popper\n\n\n    if (instance.props.interactive && event.relatedTarget && popper.contains(event.relatedTarget)) {\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function isEventListenerStopped(event) {\n    return currentInput.isTouch ? getIsCustomTouchBehavior() !== event.type.indexOf('touch') >= 0 : false;\n  }\n\n  function createPopperInstance() {\n    destroyPopperInstance();\n    var _instance$props2 = instance.props,\n        popperOptions = _instance$props2.popperOptions,\n        placement = _instance$props2.placement,\n        offset = _instance$props2.offset,\n        getReferenceClientRect = _instance$props2.getReferenceClientRect,\n        moveTransition = _instance$props2.moveTransition;\n    var arrow = getIsDefaultRenderFn() ? getChildren(popper).arrow : null;\n    var computedReference = getReferenceClientRect ? {\n      getBoundingClientRect: getReferenceClientRect,\n      contextElement: getReferenceClientRect.contextElement || getCurrentTarget()\n    } : reference;\n    var tippyModifier = {\n      name: '$$tippy',\n      enabled: true,\n      phase: 'beforeWrite',\n      requires: ['computeStyles'],\n      fn: function fn(_ref2) {\n        var state = _ref2.state;\n\n        if (getIsDefaultRenderFn()) {\n          var _getDefaultTemplateCh = getDefaultTemplateChildren(),\n              box = _getDefaultTemplateCh.box;\n\n          ['placement', 'reference-hidden', 'escaped'].forEach(function (attr) {\n            if (attr === 'placement') {\n              box.setAttribute('data-placement', state.placement);\n            } else {\n              if (state.attributes.popper[\"data-popper-\" + attr]) {\n                box.setAttribute(\"data-\" + attr, '');\n              } else {\n                box.removeAttribute(\"data-\" + attr);\n              }\n            }\n          });\n          state.attributes.popper = {};\n        }\n      }\n    };\n    var modifiers = [{\n      name: 'offset',\n      options: {\n        offset: offset\n      }\n    }, {\n      name: 'preventOverflow',\n      options: {\n        padding: {\n          top: 2,\n          bottom: 2,\n          left: 5,\n          right: 5\n        }\n      }\n    }, {\n      name: 'flip',\n      options: {\n        padding: 5\n      }\n    }, {\n      name: 'computeStyles',\n      options: {\n        adaptive: !moveTransition\n      }\n    }, tippyModifier];\n\n    if (getIsDefaultRenderFn() && arrow) {\n      modifiers.push({\n        name: 'arrow',\n        options: {\n          element: arrow,\n          padding: 3\n        }\n      });\n    }\n\n    modifiers.push.apply(modifiers, (popperOptions == null ? void 0 : popperOptions.modifiers) || []);\n    instance.popperInstance = createPopper(computedReference, popper, Object.assign({}, popperOptions, {\n      placement: placement,\n      onFirstUpdate: onFirstUpdate,\n      modifiers: modifiers\n    }));\n  }\n\n  function destroyPopperInstance() {\n    if (instance.popperInstance) {\n      instance.popperInstance.destroy();\n      instance.popperInstance = null;\n    }\n  }\n\n  function mount() {\n    var appendTo = instance.props.appendTo;\n    var parentNode; // By default, we'll append the popper to the triggerTargets's parentNode so\n    // it's directly after the reference element so the elements inside the\n    // tippy can be tabbed to\n    // If there are clipping issues, the user can specify a different appendTo\n    // and ensure focus management is handled correctly manually\n\n    var node = getCurrentTarget();\n\n    if (instance.props.interactive && appendTo === TIPPY_DEFAULT_APPEND_TO || appendTo === 'parent') {\n      parentNode = node.parentNode;\n    } else {\n      parentNode = invokeWithArgsOrReturn(appendTo, [node]);\n    } // The popper element needs to exist on the DOM before its position can be\n    // updated as Popper needs to read its dimensions\n\n\n    if (!parentNode.contains(popper)) {\n      parentNode.appendChild(popper);\n    }\n\n    instance.state.isMounted = true;\n    createPopperInstance();\n    /* istanbul ignore else */\n\n    if (process.env.NODE_ENV !== \"production\") {\n      // Accessibility check\n      warnWhen(instance.props.interactive && appendTo === defaultProps.appendTo && node.nextElementSibling !== popper, ['Interactive tippy element may not be accessible via keyboard', 'navigation because it is not directly after the reference element', 'in the DOM source order.', '\\n\\n', 'Using a wrapper <div> or <span> tag around the reference element', 'solves this by creating a new parentNode context.', '\\n\\n', 'Specifying `appendTo: document.body` silences this warning, but it', 'assumes you are using a focus management solution to handle', 'keyboard navigation.', '\\n\\n', 'See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity'].join(' '));\n    }\n  }\n\n  function getNestedPopperTree() {\n    return arrayFrom(popper.querySelectorAll('[data-tippy-root]'));\n  }\n\n  function scheduleShow(event) {\n    instance.clearDelayTimeouts();\n\n    if (event) {\n      invokeHook('onTrigger', [instance, event]);\n    }\n\n    addDocumentPress();\n    var delay = getDelay(true);\n\n    var _getNormalizedTouchSe = getNormalizedTouchSettings(),\n        touchValue = _getNormalizedTouchSe[0],\n        touchDelay = _getNormalizedTouchSe[1];\n\n    if (currentInput.isTouch && touchValue === 'hold' && touchDelay) {\n      delay = touchDelay;\n    }\n\n    if (delay) {\n      showTimeout = setTimeout(function () {\n        instance.show();\n      }, delay);\n    } else {\n      instance.show();\n    }\n  }\n\n  function scheduleHide(event) {\n    instance.clearDelayTimeouts();\n    invokeHook('onUntrigger', [instance, event]);\n\n    if (!instance.state.isVisible) {\n      removeDocumentPress();\n      return;\n    } // For interactive tippies, scheduleHide is added to a document.body handler\n    // from onMouseLeave so must intercept scheduled hides from mousemove/leave\n    // events when trigger contains mouseenter and click, and the tip is\n    // currently shown as a result of a click.\n\n\n    if (instance.props.trigger.indexOf('mouseenter') >= 0 && instance.props.trigger.indexOf('click') >= 0 && ['mouseleave', 'mousemove'].indexOf(event.type) >= 0 && isVisibleFromClick) {\n      return;\n    }\n\n    var delay = getDelay(false);\n\n    if (delay) {\n      hideTimeout = setTimeout(function () {\n        if (instance.state.isVisible) {\n          instance.hide();\n        }\n      }, delay);\n    } else {\n      // Fixes a `transitionend` problem when it fires 1 frame too\n      // late sometimes, we don't want hide() to be called.\n      scheduleHideAnimationFrame = requestAnimationFrame(function () {\n        instance.hide();\n      });\n    }\n  } // ===========================================================================\n  // 🔑 Public methods\n  // ===========================================================================\n\n\n  function enable() {\n    instance.state.isEnabled = true;\n  }\n\n  function disable() {\n    // Disabling the instance should also hide it\n    // https://github.com/atomiks/tippy.js-react/issues/106\n    instance.hide();\n    instance.state.isEnabled = false;\n  }\n\n  function clearDelayTimeouts() {\n    clearTimeout(showTimeout);\n    clearTimeout(hideTimeout);\n    cancelAnimationFrame(scheduleHideAnimationFrame);\n  }\n\n  function setProps(partialProps) {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('setProps'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    invokeHook('onBeforeUpdate', [instance, partialProps]);\n    removeListeners();\n    var prevProps = instance.props;\n    var nextProps = evaluateProps(reference, Object.assign({}, prevProps, removeUndefinedProps(partialProps), {\n      ignoreAttributes: true\n    }));\n    instance.props = nextProps;\n    addListeners();\n\n    if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {\n      cleanupInteractiveMouseListeners();\n      debouncedOnMouseMove = debounce(onMouseMove, nextProps.interactiveDebounce);\n    } // Ensure stale aria-expanded attributes are removed\n\n\n    if (prevProps.triggerTarget && !nextProps.triggerTarget) {\n      normalizeToArray(prevProps.triggerTarget).forEach(function (node) {\n        node.removeAttribute('aria-expanded');\n      });\n    } else if (nextProps.triggerTarget) {\n      reference.removeAttribute('aria-expanded');\n    }\n\n    handleAriaExpandedAttribute();\n    handleStyles();\n\n    if (onUpdate) {\n      onUpdate(prevProps, nextProps);\n    }\n\n    if (instance.popperInstance) {\n      createPopperInstance(); // Fixes an issue with nested tippies if they are all getting re-rendered,\n      // and the nested ones get re-rendered first.\n      // https://github.com/atomiks/tippyjs-react/issues/177\n      // TODO: find a cleaner / more efficient solution(!)\n\n      getNestedPopperTree().forEach(function (nestedPopper) {\n        // React (and other UI libs likely) requires a rAF wrapper as it flushes\n        // its work in one\n        requestAnimationFrame(nestedPopper._tippy.popperInstance.forceUpdate);\n      });\n    }\n\n    invokeHook('onAfterUpdate', [instance, partialProps]);\n  }\n\n  function setContent(content) {\n    instance.setProps({\n      content: content\n    });\n  }\n\n  function show() {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('show'));\n    } // Early bail-out\n\n\n    var isAlreadyVisible = instance.state.isVisible;\n    var isDestroyed = instance.state.isDestroyed;\n    var isDisabled = !instance.state.isEnabled;\n    var isTouchAndTouchDisabled = currentInput.isTouch && !instance.props.touch;\n    var duration = getValueAtIndexOrReturn(instance.props.duration, 0, defaultProps.duration);\n\n    if (isAlreadyVisible || isDestroyed || isDisabled || isTouchAndTouchDisabled) {\n      return;\n    } // Normalize `disabled` behavior across browsers.\n    // Firefox allows events on disabled elements, but Chrome doesn't.\n    // Using a wrapper element (i.e. <span>) is recommended.\n\n\n    if (getCurrentTarget().hasAttribute('disabled')) {\n      return;\n    }\n\n    invokeHook('onShow', [instance], false);\n\n    if (instance.props.onShow(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = true;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'visible';\n    }\n\n    handleStyles();\n    addDocumentPress();\n\n    if (!instance.state.isMounted) {\n      popper.style.transition = 'none';\n    } // If flipping to the opposite side after hiding at least once, the\n    // animation will use the wrong placement without resetting the duration\n\n\n    if (getIsDefaultRenderFn()) {\n      var _getDefaultTemplateCh2 = getDefaultTemplateChildren(),\n          box = _getDefaultTemplateCh2.box,\n          content = _getDefaultTemplateCh2.content;\n\n      setTransitionDuration([box, content], 0);\n    }\n\n    onFirstUpdate = function onFirstUpdate() {\n      var _instance$popperInsta2;\n\n      if (!instance.state.isVisible || ignoreOnFirstUpdate) {\n        return;\n      }\n\n      ignoreOnFirstUpdate = true; // reflow\n\n      void popper.offsetHeight;\n      popper.style.transition = instance.props.moveTransition;\n\n      if (getIsDefaultRenderFn() && instance.props.animation) {\n        var _getDefaultTemplateCh3 = getDefaultTemplateChildren(),\n            _box = _getDefaultTemplateCh3.box,\n            _content = _getDefaultTemplateCh3.content;\n\n        setTransitionDuration([_box, _content], duration);\n        setVisibilityState([_box, _content], 'visible');\n      }\n\n      handleAriaContentAttribute();\n      handleAriaExpandedAttribute();\n      pushIfUnique(mountedInstances, instance); // certain modifiers (e.g. `maxSize`) require a second update after the\n      // popper has been positioned for the first time\n\n      (_instance$popperInsta2 = instance.popperInstance) == null ? void 0 : _instance$popperInsta2.forceUpdate();\n      invokeHook('onMount', [instance]);\n\n      if (instance.props.animation && getIsDefaultRenderFn()) {\n        onTransitionedIn(duration, function () {\n          instance.state.isShown = true;\n          invokeHook('onShown', [instance]);\n        });\n      }\n    };\n\n    mount();\n  }\n\n  function hide() {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hide'));\n    } // Early bail-out\n\n\n    var isAlreadyHidden = !instance.state.isVisible;\n    var isDestroyed = instance.state.isDestroyed;\n    var isDisabled = !instance.state.isEnabled;\n    var duration = getValueAtIndexOrReturn(instance.props.duration, 1, defaultProps.duration);\n\n    if (isAlreadyHidden || isDestroyed || isDisabled) {\n      return;\n    }\n\n    invokeHook('onHide', [instance], false);\n\n    if (instance.props.onHide(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = false;\n    instance.state.isShown = false;\n    ignoreOnFirstUpdate = false;\n    isVisibleFromClick = false;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'hidden';\n    }\n\n    cleanupInteractiveMouseListeners();\n    removeDocumentPress();\n    handleStyles(true);\n\n    if (getIsDefaultRenderFn()) {\n      var _getDefaultTemplateCh4 = getDefaultTemplateChildren(),\n          box = _getDefaultTemplateCh4.box,\n          content = _getDefaultTemplateCh4.content;\n\n      if (instance.props.animation) {\n        setTransitionDuration([box, content], duration);\n        setVisibilityState([box, content], 'hidden');\n      }\n    }\n\n    handleAriaContentAttribute();\n    handleAriaExpandedAttribute();\n\n    if (instance.props.animation) {\n      if (getIsDefaultRenderFn()) {\n        onTransitionedOut(duration, instance.unmount);\n      }\n    } else {\n      instance.unmount();\n    }\n  }\n\n  function hideWithInteractivity(event) {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hideWithInteractivity'));\n    }\n\n    getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);\n    debouncedOnMouseMove(event);\n  }\n\n  function unmount() {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('unmount'));\n    }\n\n    if (instance.state.isVisible) {\n      instance.hide();\n    }\n\n    if (!instance.state.isMounted) {\n      return;\n    }\n\n    destroyPopperInstance(); // If a popper is not interactive, it will be appended outside the popper\n    // tree by default. This seems mainly for interactive tippies, but we should\n    // find a workaround if possible\n\n    getNestedPopperTree().forEach(function (nestedPopper) {\n      nestedPopper._tippy.unmount();\n    });\n\n    if (popper.parentNode) {\n      popper.parentNode.removeChild(popper);\n    }\n\n    mountedInstances = mountedInstances.filter(function (i) {\n      return i !== instance;\n    });\n    instance.state.isMounted = false;\n    invokeHook('onHidden', [instance]);\n  }\n\n  function destroy() {\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== \"production\") {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('destroy'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    instance.clearDelayTimeouts();\n    instance.unmount();\n    removeListeners();\n    delete reference._tippy;\n    instance.state.isDestroyed = true;\n    invokeHook('onDestroy', [instance]);\n  }\n}\n\nfunction tippy(targets, optionalProps) {\n  if (optionalProps === void 0) {\n    optionalProps = {};\n  }\n\n  var plugins = defaultProps.plugins.concat(optionalProps.plugins || []);\n  /* istanbul ignore else */\n\n  if (process.env.NODE_ENV !== \"production\") {\n    validateTargets(targets);\n    validateProps(optionalProps, plugins);\n  }\n\n  bindGlobalEventListeners();\n  var passedProps = Object.assign({}, optionalProps, {\n    plugins: plugins\n  });\n  var elements = getArrayOfElements(targets);\n  /* istanbul ignore else */\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var isSingleContentElement = isElement(passedProps.content);\n    var isMoreThanOneReferenceElement = elements.length > 1;\n    warnWhen(isSingleContentElement && isMoreThanOneReferenceElement, ['tippy() was passed an Element as the `content` prop, but more than', 'one tippy instance was created by this invocation. This means the', 'content element will only be appended to the last tippy instance.', '\\n\\n', 'Instead, pass the .innerHTML of the element, or use a function that', 'returns a cloned version of the element instead.', '\\n\\n', '1) content: element.innerHTML\\n', '2) content: () => element.cloneNode(true)'].join(' '));\n  }\n\n  var instances = elements.reduce(function (acc, reference) {\n    var instance = reference && createTippy(reference, passedProps);\n\n    if (instance) {\n      acc.push(instance);\n    }\n\n    return acc;\n  }, []);\n  return isElement(targets) ? instances[0] : instances;\n}\n\ntippy.defaultProps = defaultProps;\ntippy.setDefaultProps = setDefaultProps;\ntippy.currentInput = currentInput;\nvar hideAll = function hideAll(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      excludedReferenceOrInstance = _ref.exclude,\n      duration = _ref.duration;\n\n  mountedInstances.forEach(function (instance) {\n    var isExcluded = false;\n\n    if (excludedReferenceOrInstance) {\n      isExcluded = isReferenceElement(excludedReferenceOrInstance) ? instance.reference === excludedReferenceOrInstance : instance.popper === excludedReferenceOrInstance.popper;\n    }\n\n    if (!isExcluded) {\n      var originalDuration = instance.props.duration;\n      instance.setProps({\n        duration: duration\n      });\n      instance.hide();\n\n      if (!instance.state.isDestroyed) {\n        instance.setProps({\n          duration: originalDuration\n        });\n      }\n    }\n  });\n};\n\n// every time the popper is destroyed (i.e. a new target), removing the styles\n// and causing transitions to break for singletons when the console is open, but\n// most notably for non-transform styles being used, `gpuAcceleration: false`.\n\nvar applyStylesModifier = Object.assign({}, applyStyles, {\n  effect: function effect(_ref) {\n    var state = _ref.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    } // intentionally return no cleanup function\n    // return () => { ... }\n\n  }\n});\n\nvar createSingleton = function createSingleton(tippyInstances, optionalProps) {\n  var _optionalProps$popper;\n\n  if (optionalProps === void 0) {\n    optionalProps = {};\n  }\n\n  /* istanbul ignore else */\n  if (process.env.NODE_ENV !== \"production\") {\n    errorWhen(!Array.isArray(tippyInstances), ['The first argument passed to createSingleton() must be an array of', 'tippy instances. The passed value was', String(tippyInstances)].join(' '));\n  }\n\n  var individualInstances = tippyInstances;\n  var references = [];\n  var triggerTargets = [];\n  var currentTarget;\n  var overrides = optionalProps.overrides;\n  var interceptSetPropsCleanups = [];\n  var shownOnCreate = false;\n\n  function setTriggerTargets() {\n    triggerTargets = individualInstances.map(function (instance) {\n      return normalizeToArray(instance.props.triggerTarget || instance.reference);\n    }).reduce(function (acc, item) {\n      return acc.concat(item);\n    }, []);\n  }\n\n  function setReferences() {\n    references = individualInstances.map(function (instance) {\n      return instance.reference;\n    });\n  }\n\n  function enableInstances(isEnabled) {\n    individualInstances.forEach(function (instance) {\n      if (isEnabled) {\n        instance.enable();\n      } else {\n        instance.disable();\n      }\n    });\n  }\n\n  function interceptSetProps(singleton) {\n    return individualInstances.map(function (instance) {\n      var originalSetProps = instance.setProps;\n\n      instance.setProps = function (props) {\n        originalSetProps(props);\n\n        if (instance.reference === currentTarget) {\n          singleton.setProps(props);\n        }\n      };\n\n      return function () {\n        instance.setProps = originalSetProps;\n      };\n    });\n  } // have to pass singleton, as it maybe undefined on first call\n\n\n  function prepareInstance(singleton, target) {\n    var index = triggerTargets.indexOf(target); // bail-out\n\n    if (target === currentTarget) {\n      return;\n    }\n\n    currentTarget = target;\n    var overrideProps = (overrides || []).concat('content').reduce(function (acc, prop) {\n      acc[prop] = individualInstances[index].props[prop];\n      return acc;\n    }, {});\n    singleton.setProps(Object.assign({}, overrideProps, {\n      getReferenceClientRect: typeof overrideProps.getReferenceClientRect === 'function' ? overrideProps.getReferenceClientRect : function () {\n        var _references$index;\n\n        return (_references$index = references[index]) == null ? void 0 : _references$index.getBoundingClientRect();\n      }\n    }));\n  }\n\n  enableInstances(false);\n  setReferences();\n  setTriggerTargets();\n  var plugin = {\n    fn: function fn() {\n      return {\n        onDestroy: function onDestroy() {\n          enableInstances(true);\n        },\n        onHidden: function onHidden() {\n          currentTarget = null;\n        },\n        onClickOutside: function onClickOutside(instance) {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            currentTarget = null;\n          }\n        },\n        onShow: function onShow(instance) {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            prepareInstance(instance, references[0]);\n          }\n        },\n        onTrigger: function onTrigger(instance, event) {\n          prepareInstance(instance, event.currentTarget);\n        }\n      };\n    }\n  };\n  var singleton = tippy(div(), Object.assign({}, removeProperties(optionalProps, ['overrides']), {\n    plugins: [plugin].concat(optionalProps.plugins || []),\n    triggerTarget: triggerTargets,\n    popperOptions: Object.assign({}, optionalProps.popperOptions, {\n      modifiers: [].concat(((_optionalProps$popper = optionalProps.popperOptions) == null ? void 0 : _optionalProps$popper.modifiers) || [], [applyStylesModifier])\n    })\n  }));\n  var originalShow = singleton.show;\n\n  singleton.show = function (target) {\n    originalShow(); // first time, showOnCreate or programmatic call with no params\n    // default to showing first instance\n\n    if (!currentTarget && target == null) {\n      return prepareInstance(singleton, references[0]);\n    } // triggered from event (do nothing as prepareInstance already called by onTrigger)\n    // programmatic call with no params when already visible (do nothing again)\n\n\n    if (currentTarget && target == null) {\n      return;\n    } // target is index of instance\n\n\n    if (typeof target === 'number') {\n      return references[target] && prepareInstance(singleton, references[target]);\n    } // target is a child tippy instance\n\n\n    if (individualInstances.indexOf(target) >= 0) {\n      var ref = target.reference;\n      return prepareInstance(singleton, ref);\n    } // target is a ReferenceElement\n\n\n    if (references.indexOf(target) >= 0) {\n      return prepareInstance(singleton, target);\n    }\n  };\n\n  singleton.showNext = function () {\n    var first = references[0];\n\n    if (!currentTarget) {\n      return singleton.show(0);\n    }\n\n    var index = references.indexOf(currentTarget);\n    singleton.show(references[index + 1] || first);\n  };\n\n  singleton.showPrevious = function () {\n    var last = references[references.length - 1];\n\n    if (!currentTarget) {\n      return singleton.show(last);\n    }\n\n    var index = references.indexOf(currentTarget);\n    var target = references[index - 1] || last;\n    singleton.show(target);\n  };\n\n  var originalSetProps = singleton.setProps;\n\n  singleton.setProps = function (props) {\n    overrides = props.overrides || overrides;\n    originalSetProps(props);\n  };\n\n  singleton.setInstances = function (nextInstances) {\n    enableInstances(true);\n    interceptSetPropsCleanups.forEach(function (fn) {\n      return fn();\n    });\n    individualInstances = nextInstances;\n    enableInstances(false);\n    setReferences();\n    setTriggerTargets();\n    interceptSetPropsCleanups = interceptSetProps(singleton);\n    singleton.setProps({\n      triggerTarget: triggerTargets\n    });\n  };\n\n  interceptSetPropsCleanups = interceptSetProps(singleton);\n  return singleton;\n};\n\nvar BUBBLING_EVENTS_MAP = {\n  mouseover: 'mouseenter',\n  focusin: 'focus',\n  click: 'click'\n};\n/**\n * Creates a delegate instance that controls the creation of tippy instances\n * for child elements (`target` CSS selector).\n */\n\nfunction delegate(targets, props) {\n  /* istanbul ignore else */\n  if (process.env.NODE_ENV !== \"production\") {\n    errorWhen(!(props && props.target), ['You must specity a `target` prop indicating a CSS selector string matching', 'the target elements that should receive a tippy.'].join(' '));\n  }\n\n  var listeners = [];\n  var childTippyInstances = [];\n  var disabled = false;\n  var target = props.target;\n  var nativeProps = removeProperties(props, ['target']);\n  var parentProps = Object.assign({}, nativeProps, {\n    trigger: 'manual',\n    touch: false\n  });\n  var childProps = Object.assign({\n    touch: defaultProps.touch\n  }, nativeProps, {\n    showOnCreate: true\n  });\n  var returnValue = tippy(targets, parentProps);\n  var normalizedReturnValue = normalizeToArray(returnValue);\n\n  function onTrigger(event) {\n    if (!event.target || disabled) {\n      return;\n    }\n\n    var targetNode = event.target.closest(target);\n\n    if (!targetNode) {\n      return;\n    } // Get relevant trigger with fallbacks:\n    // 1. Check `data-tippy-trigger` attribute on target node\n    // 2. Fallback to `trigger` passed to `delegate()`\n    // 3. Fallback to `defaultProps.trigger`\n\n\n    var trigger = targetNode.getAttribute('data-tippy-trigger') || props.trigger || defaultProps.trigger; // @ts-ignore\n\n    if (targetNode._tippy) {\n      return;\n    }\n\n    if (event.type === 'touchstart' && typeof childProps.touch === 'boolean') {\n      return;\n    }\n\n    if (event.type !== 'touchstart' && trigger.indexOf(BUBBLING_EVENTS_MAP[event.type]) < 0) {\n      return;\n    }\n\n    var instance = tippy(targetNode, childProps);\n\n    if (instance) {\n      childTippyInstances = childTippyInstances.concat(instance);\n    }\n  }\n\n  function on(node, eventType, handler, options) {\n    if (options === void 0) {\n      options = false;\n    }\n\n    node.addEventListener(eventType, handler, options);\n    listeners.push({\n      node: node,\n      eventType: eventType,\n      handler: handler,\n      options: options\n    });\n  }\n\n  function addEventListeners(instance) {\n    var reference = instance.reference;\n    on(reference, 'touchstart', onTrigger, TOUCH_OPTIONS);\n    on(reference, 'mouseover', onTrigger);\n    on(reference, 'focusin', onTrigger);\n    on(reference, 'click', onTrigger);\n  }\n\n  function removeEventListeners() {\n    listeners.forEach(function (_ref) {\n      var node = _ref.node,\n          eventType = _ref.eventType,\n          handler = _ref.handler,\n          options = _ref.options;\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function applyMutations(instance) {\n    var originalDestroy = instance.destroy;\n    var originalEnable = instance.enable;\n    var originalDisable = instance.disable;\n\n    instance.destroy = function (shouldDestroyChildInstances) {\n      if (shouldDestroyChildInstances === void 0) {\n        shouldDestroyChildInstances = true;\n      }\n\n      if (shouldDestroyChildInstances) {\n        childTippyInstances.forEach(function (instance) {\n          instance.destroy();\n        });\n      }\n\n      childTippyInstances = [];\n      removeEventListeners();\n      originalDestroy();\n    };\n\n    instance.enable = function () {\n      originalEnable();\n      childTippyInstances.forEach(function (instance) {\n        return instance.enable();\n      });\n      disabled = false;\n    };\n\n    instance.disable = function () {\n      originalDisable();\n      childTippyInstances.forEach(function (instance) {\n        return instance.disable();\n      });\n      disabled = true;\n    };\n\n    addEventListeners(instance);\n  }\n\n  normalizedReturnValue.forEach(applyMutations);\n  return returnValue;\n}\n\nvar animateFill = {\n  name: 'animateFill',\n  defaultValue: false,\n  fn: function fn(instance) {\n    var _instance$props$rende;\n\n    // @ts-ignore\n    if (!((_instance$props$rende = instance.props.render) != null && _instance$props$rende.$$tippy)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        errorWhen(instance.props.animateFill, 'The `animateFill` plugin requires the default render function.');\n      }\n\n      return {};\n    }\n\n    var _getChildren = getChildren(instance.popper),\n        box = _getChildren.box,\n        content = _getChildren.content;\n\n    var backdrop = instance.props.animateFill ? createBackdropElement() : null;\n    return {\n      onCreate: function onCreate() {\n        if (backdrop) {\n          box.insertBefore(backdrop, box.firstElementChild);\n          box.setAttribute('data-animatefill', '');\n          box.style.overflow = 'hidden';\n          instance.setProps({\n            arrow: false,\n            animation: 'shift-away'\n          });\n        }\n      },\n      onMount: function onMount() {\n        if (backdrop) {\n          var transitionDuration = box.style.transitionDuration;\n          var duration = Number(transitionDuration.replace('ms', '')); // The content should fade in after the backdrop has mostly filled the\n          // tooltip element. `clip-path` is the other alternative but is not\n          // well-supported and is buggy on some devices.\n\n          content.style.transitionDelay = Math.round(duration / 10) + \"ms\";\n          backdrop.style.transitionDuration = transitionDuration;\n          setVisibilityState([backdrop], 'visible');\n        }\n      },\n      onShow: function onShow() {\n        if (backdrop) {\n          backdrop.style.transitionDuration = '0ms';\n        }\n      },\n      onHide: function onHide() {\n        if (backdrop) {\n          setVisibilityState([backdrop], 'hidden');\n        }\n      }\n    };\n  }\n};\n\nfunction createBackdropElement() {\n  var backdrop = div();\n  backdrop.className = BACKDROP_CLASS;\n  setVisibilityState([backdrop], 'hidden');\n  return backdrop;\n}\n\nvar mouseCoords = {\n  clientX: 0,\n  clientY: 0\n};\nvar activeInstances = [];\n\nfunction storeMouseCoords(_ref) {\n  var clientX = _ref.clientX,\n      clientY = _ref.clientY;\n  mouseCoords = {\n    clientX: clientX,\n    clientY: clientY\n  };\n}\n\nfunction addMouseCoordsListener(doc) {\n  doc.addEventListener('mousemove', storeMouseCoords);\n}\n\nfunction removeMouseCoordsListener(doc) {\n  doc.removeEventListener('mousemove', storeMouseCoords);\n}\n\nvar followCursor = {\n  name: 'followCursor',\n  defaultValue: false,\n  fn: function fn(instance) {\n    var reference = instance.reference;\n    var doc = getOwnerDocument(instance.props.triggerTarget || reference);\n    var isInternalUpdate = false;\n    var wasFocusEvent = false;\n    var isUnmounted = true;\n    var prevProps = instance.props;\n\n    function getIsInitialBehavior() {\n      return instance.props.followCursor === 'initial' && instance.state.isVisible;\n    }\n\n    function addListener() {\n      doc.addEventListener('mousemove', onMouseMove);\n    }\n\n    function removeListener() {\n      doc.removeEventListener('mousemove', onMouseMove);\n    }\n\n    function unsetGetReferenceClientRect() {\n      isInternalUpdate = true;\n      instance.setProps({\n        getReferenceClientRect: null\n      });\n      isInternalUpdate = false;\n    }\n\n    function onMouseMove(event) {\n      // If the instance is interactive, avoid updating the position unless it's\n      // over the reference element\n      var isCursorOverReference = event.target ? reference.contains(event.target) : true;\n      var followCursor = instance.props.followCursor;\n      var clientX = event.clientX,\n          clientY = event.clientY;\n      var rect = reference.getBoundingClientRect();\n      var relativeX = clientX - rect.left;\n      var relativeY = clientY - rect.top;\n\n      if (isCursorOverReference || !instance.props.interactive) {\n        instance.setProps({\n          // @ts-ignore - unneeded DOMRect properties\n          getReferenceClientRect: function getReferenceClientRect() {\n            var rect = reference.getBoundingClientRect();\n            var x = clientX;\n            var y = clientY;\n\n            if (followCursor === 'initial') {\n              x = rect.left + relativeX;\n              y = rect.top + relativeY;\n            }\n\n            var top = followCursor === 'horizontal' ? rect.top : y;\n            var right = followCursor === 'vertical' ? rect.right : x;\n            var bottom = followCursor === 'horizontal' ? rect.bottom : y;\n            var left = followCursor === 'vertical' ? rect.left : x;\n            return {\n              width: right - left,\n              height: bottom - top,\n              top: top,\n              right: right,\n              bottom: bottom,\n              left: left\n            };\n          }\n        });\n      }\n    }\n\n    function create() {\n      if (instance.props.followCursor) {\n        activeInstances.push({\n          instance: instance,\n          doc: doc\n        });\n        addMouseCoordsListener(doc);\n      }\n    }\n\n    function destroy() {\n      activeInstances = activeInstances.filter(function (data) {\n        return data.instance !== instance;\n      });\n\n      if (activeInstances.filter(function (data) {\n        return data.doc === doc;\n      }).length === 0) {\n        removeMouseCoordsListener(doc);\n      }\n    }\n\n    return {\n      onCreate: create,\n      onDestroy: destroy,\n      onBeforeUpdate: function onBeforeUpdate() {\n        prevProps = instance.props;\n      },\n      onAfterUpdate: function onAfterUpdate(_, _ref2) {\n        var followCursor = _ref2.followCursor;\n\n        if (isInternalUpdate) {\n          return;\n        }\n\n        if (followCursor !== undefined && prevProps.followCursor !== followCursor) {\n          destroy();\n\n          if (followCursor) {\n            create();\n\n            if (instance.state.isMounted && !wasFocusEvent && !getIsInitialBehavior()) {\n              addListener();\n            }\n          } else {\n            removeListener();\n            unsetGetReferenceClientRect();\n          }\n        }\n      },\n      onMount: function onMount() {\n        if (instance.props.followCursor && !wasFocusEvent) {\n          if (isUnmounted) {\n            onMouseMove(mouseCoords);\n            isUnmounted = false;\n          }\n\n          if (!getIsInitialBehavior()) {\n            addListener();\n          }\n        }\n      },\n      onTrigger: function onTrigger(_, event) {\n        if (isMouseEvent(event)) {\n          mouseCoords = {\n            clientX: event.clientX,\n            clientY: event.clientY\n          };\n        }\n\n        wasFocusEvent = event.type === 'focus';\n      },\n      onHidden: function onHidden() {\n        if (instance.props.followCursor) {\n          unsetGetReferenceClientRect();\n          removeListener();\n          isUnmounted = true;\n        }\n      }\n    };\n  }\n};\n\nfunction getProps(props, modifier) {\n  var _props$popperOptions;\n\n  return {\n    popperOptions: Object.assign({}, props.popperOptions, {\n      modifiers: [].concat((((_props$popperOptions = props.popperOptions) == null ? void 0 : _props$popperOptions.modifiers) || []).filter(function (_ref) {\n        var name = _ref.name;\n        return name !== modifier.name;\n      }), [modifier])\n    })\n  };\n}\n\nvar inlinePositioning = {\n  name: 'inlinePositioning',\n  defaultValue: false,\n  fn: function fn(instance) {\n    var reference = instance.reference;\n\n    function isEnabled() {\n      return !!instance.props.inlinePositioning;\n    }\n\n    var placement;\n    var cursorRectIndex = -1;\n    var isInternalUpdate = false;\n    var triedPlacements = [];\n    var modifier = {\n      name: 'tippyInlinePositioning',\n      enabled: true,\n      phase: 'afterWrite',\n      fn: function fn(_ref2) {\n        var state = _ref2.state;\n\n        if (isEnabled()) {\n          if (triedPlacements.indexOf(state.placement) !== -1) {\n            triedPlacements = [];\n          }\n\n          if (placement !== state.placement && triedPlacements.indexOf(state.placement) === -1) {\n            triedPlacements.push(state.placement);\n            instance.setProps({\n              // @ts-ignore - unneeded DOMRect properties\n              getReferenceClientRect: function getReferenceClientRect() {\n                return _getReferenceClientRect(state.placement);\n              }\n            });\n          }\n\n          placement = state.placement;\n        }\n      }\n    };\n\n    function _getReferenceClientRect(placement) {\n      return getInlineBoundingClientRect(getBasePlacement(placement), reference.getBoundingClientRect(), arrayFrom(reference.getClientRects()), cursorRectIndex);\n    }\n\n    function setInternalProps(partialProps) {\n      isInternalUpdate = true;\n      instance.setProps(partialProps);\n      isInternalUpdate = false;\n    }\n\n    function addModifier() {\n      if (!isInternalUpdate) {\n        setInternalProps(getProps(instance.props, modifier));\n      }\n    }\n\n    return {\n      onCreate: addModifier,\n      onAfterUpdate: addModifier,\n      onTrigger: function onTrigger(_, event) {\n        if (isMouseEvent(event)) {\n          var rects = arrayFrom(instance.reference.getClientRects());\n          var cursorRect = rects.find(function (rect) {\n            return rect.left - 2 <= event.clientX && rect.right + 2 >= event.clientX && rect.top - 2 <= event.clientY && rect.bottom + 2 >= event.clientY;\n          });\n          var index = rects.indexOf(cursorRect);\n          cursorRectIndex = index > -1 ? index : cursorRectIndex;\n        }\n      },\n      onHidden: function onHidden() {\n        cursorRectIndex = -1;\n      }\n    };\n  }\n};\nfunction getInlineBoundingClientRect(currentBasePlacement, boundingRect, clientRects, cursorRectIndex) {\n  // Not an inline element, or placement is not yet known\n  if (clientRects.length < 2 || currentBasePlacement === null) {\n    return boundingRect;\n  } // There are two rects and they are disjoined\n\n\n  if (clientRects.length === 2 && cursorRectIndex >= 0 && clientRects[0].left > clientRects[1].right) {\n    return clientRects[cursorRectIndex] || boundingRect;\n  }\n\n  switch (currentBasePlacement) {\n    case 'top':\n    case 'bottom':\n      {\n        var firstRect = clientRects[0];\n        var lastRect = clientRects[clientRects.length - 1];\n        var isTop = currentBasePlacement === 'top';\n        var top = firstRect.top;\n        var bottom = lastRect.bottom;\n        var left = isTop ? firstRect.left : lastRect.left;\n        var right = isTop ? firstRect.right : lastRect.right;\n        var width = right - left;\n        var height = bottom - top;\n        return {\n          top: top,\n          bottom: bottom,\n          left: left,\n          right: right,\n          width: width,\n          height: height\n        };\n      }\n\n    case 'left':\n    case 'right':\n      {\n        var minLeft = Math.min.apply(Math, clientRects.map(function (rects) {\n          return rects.left;\n        }));\n        var maxRight = Math.max.apply(Math, clientRects.map(function (rects) {\n          return rects.right;\n        }));\n        var measureRects = clientRects.filter(function (rect) {\n          return currentBasePlacement === 'left' ? rect.left === minLeft : rect.right === maxRight;\n        });\n        var _top = measureRects[0].top;\n        var _bottom = measureRects[measureRects.length - 1].bottom;\n        var _left = minLeft;\n        var _right = maxRight;\n\n        var _width = _right - _left;\n\n        var _height = _bottom - _top;\n\n        return {\n          top: _top,\n          bottom: _bottom,\n          left: _left,\n          right: _right,\n          width: _width,\n          height: _height\n        };\n      }\n\n    default:\n      {\n        return boundingRect;\n      }\n  }\n}\n\nvar sticky = {\n  name: 'sticky',\n  defaultValue: false,\n  fn: function fn(instance) {\n    var reference = instance.reference,\n        popper = instance.popper;\n\n    function getReference() {\n      return instance.popperInstance ? instance.popperInstance.state.elements.reference : reference;\n    }\n\n    function shouldCheck(value) {\n      return instance.props.sticky === true || instance.props.sticky === value;\n    }\n\n    var prevRefRect = null;\n    var prevPopRect = null;\n\n    function updatePosition() {\n      var currentRefRect = shouldCheck('reference') ? getReference().getBoundingClientRect() : null;\n      var currentPopRect = shouldCheck('popper') ? popper.getBoundingClientRect() : null;\n\n      if (currentRefRect && areRectsDifferent(prevRefRect, currentRefRect) || currentPopRect && areRectsDifferent(prevPopRect, currentPopRect)) {\n        if (instance.popperInstance) {\n          instance.popperInstance.update();\n        }\n      }\n\n      prevRefRect = currentRefRect;\n      prevPopRect = currentPopRect;\n\n      if (instance.state.isMounted) {\n        requestAnimationFrame(updatePosition);\n      }\n    }\n\n    return {\n      onMount: function onMount() {\n        if (instance.props.sticky) {\n          updatePosition();\n        }\n      }\n    };\n  }\n};\n\nfunction areRectsDifferent(rectA, rectB) {\n  if (rectA && rectB) {\n    return rectA.top !== rectB.top || rectA.right !== rectB.right || rectA.bottom !== rectB.bottom || rectA.left !== rectB.left;\n  }\n\n  return true;\n}\n\ntippy.setDefaultProps({\n  render: render\n});\n\nexport default tippy;\nexport { animateFill, createSingleton, delegate, followCursor, hideAll, inlinePositioning, ROUND_ARROW as roundArrow, sticky };\n//# sourceMappingURL=tippy.esm.js.map\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.4\";\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.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","import tippy, { createSingleton } from 'tippy.js';\nexport { default as tippy } from 'tippy.js';\nimport React, { useLayoutEffect, useEffect, useRef, useState, cloneElement, useMemo, forwardRef as forwardRef$1 } from 'react';\nimport { createPortal } from 'react-dom';\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nfunction preserveRef(ref, node) {\n  if (ref) {\n    if (typeof ref === 'function') {\n      ref(node);\n    }\n\n    if ({}.hasOwnProperty.call(ref, 'current')) {\n      ref.current = node;\n    }\n  }\n}\nfunction ssrSafeCreateDiv() {\n  return isBrowser && document.createElement('div');\n}\nfunction toDataAttributes(attrs) {\n  var dataAttrs = {\n    'data-placement': attrs.placement\n  };\n\n  if (attrs.referenceHidden) {\n    dataAttrs['data-reference-hidden'] = '';\n  }\n\n  if (attrs.escaped) {\n    dataAttrs['data-escaped'] = '';\n  }\n\n  return dataAttrs;\n}\n\nfunction deepEqual(x, y) {\n  if (x === y) {\n    return true;\n  } else if (typeof x === 'object' && x != null && typeof y === 'object' && y != null) {\n    if (Object.keys(x).length !== Object.keys(y).length) {\n      return false;\n    }\n\n    for (var prop in x) {\n      if (y.hasOwnProperty(prop)) {\n        if (!deepEqual(x[prop], y[prop])) {\n          return false;\n        }\n      } else {\n        return false;\n      }\n    }\n\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction uniqueByShape(arr) {\n  var output = [];\n  arr.forEach(function (item) {\n    if (!output.find(function (outputItem) {\n      return deepEqual(item, outputItem);\n    })) {\n      output.push(item);\n    }\n  });\n  return output;\n}\nfunction deepPreserveProps(instanceProps, componentProps) {\n  var _instanceProps$popper, _componentProps$poppe;\n\n  return Object.assign({}, componentProps, {\n    popperOptions: Object.assign({}, instanceProps.popperOptions, componentProps.popperOptions, {\n      modifiers: uniqueByShape([].concat(((_instanceProps$popper = instanceProps.popperOptions) == null ? void 0 : _instanceProps$popper.modifiers) || [], ((_componentProps$poppe = componentProps.popperOptions) == null ? void 0 : _componentProps$poppe.modifiers) || []))\n    })\n  });\n}\n\nvar useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\nfunction useMutableBox(initialValue) {\n  // Using refs instead of state as it's recommended to not store imperative\n  // values in state due to memory problems in React(?)\n  var ref = useRef();\n\n  if (!ref.current) {\n    ref.current = typeof initialValue === 'function' ? initialValue() : initialValue;\n  }\n\n  return ref.current;\n}\n\nfunction updateClassName(box, action, classNames) {\n  classNames.split(/\\s+/).forEach(function (name) {\n    if (name) {\n      box.classList[action](name);\n    }\n  });\n}\n\nvar classNamePlugin = {\n  name: 'className',\n  defaultValue: '',\n  fn: function fn(instance) {\n    var box = instance.popper.firstElementChild;\n\n    var isDefaultRenderFn = function isDefaultRenderFn() {\n      var _instance$props$rende;\n\n      return !!((_instance$props$rende = instance.props.render) == null ? void 0 : _instance$props$rende.$$tippy);\n    };\n\n    function add() {\n      if (instance.props.className && !isDefaultRenderFn()) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.warn(['@tippyjs/react: Cannot use `className` prop in conjunction with', '`render` prop. Place the className on the element you are', 'rendering.'].join(' '));\n        }\n\n        return;\n      }\n\n      updateClassName(box, 'add', instance.props.className);\n    }\n\n    function remove() {\n      if (isDefaultRenderFn()) {\n        updateClassName(box, 'remove', instance.props.className);\n      }\n    }\n\n    return {\n      onCreate: add,\n      onBeforeUpdate: remove,\n      onAfterUpdate: add\n    };\n  }\n};\n\nfunction TippyGenerator(tippy) {\n  function Tippy(_ref) {\n    var children = _ref.children,\n        content = _ref.content,\n        visible = _ref.visible,\n        singleton = _ref.singleton,\n        render = _ref.render,\n        reference = _ref.reference,\n        _ref$disabled = _ref.disabled,\n        disabled = _ref$disabled === void 0 ? false : _ref$disabled,\n        _ref$ignoreAttributes = _ref.ignoreAttributes,\n        ignoreAttributes = _ref$ignoreAttributes === void 0 ? true : _ref$ignoreAttributes,\n        __source = _ref.__source,\n        __self = _ref.__self,\n        restOfNativeProps = _objectWithoutPropertiesLoose(_ref, [\"children\", \"content\", \"visible\", \"singleton\", \"render\", \"reference\", \"disabled\", \"ignoreAttributes\", \"__source\", \"__self\"]);\n\n    var isControlledMode = visible !== undefined;\n    var isSingletonMode = singleton !== undefined;\n\n    var _useState = useState(false),\n        mounted = _useState[0],\n        setMounted = _useState[1];\n\n    var _useState2 = useState({}),\n        attrs = _useState2[0],\n        setAttrs = _useState2[1];\n\n    var _useState3 = useState(),\n        singletonContent = _useState3[0],\n        setSingletonContent = _useState3[1];\n\n    var mutableBox = useMutableBox(function () {\n      return {\n        container: ssrSafeCreateDiv(),\n        renders: 1\n      };\n    });\n    var props = Object.assign({\n      ignoreAttributes: ignoreAttributes\n    }, restOfNativeProps, {\n      content: mutableBox.container\n    });\n\n    if (isControlledMode) {\n      if (process.env.NODE_ENV !== 'production') {\n        ['trigger', 'hideOnClick', 'showOnCreate'].forEach(function (nativeStateProp) {\n          if (props[nativeStateProp] !== undefined) {\n            console.warn([\"@tippyjs/react: Cannot specify `\" + nativeStateProp + \"` prop in\", \"controlled mode (`visible` prop)\"].join(' '));\n          }\n        });\n      }\n\n      props.trigger = 'manual';\n      props.hideOnClick = false;\n    }\n\n    if (isSingletonMode) {\n      disabled = true;\n    }\n\n    var computedProps = props;\n    var plugins = props.plugins || [];\n\n    if (render) {\n      computedProps = Object.assign({}, props, {\n        plugins: isSingletonMode && singleton.data != null ? [].concat(plugins, [{\n          fn: function fn() {\n            return {\n              onTrigger: function onTrigger(instance, event) {\n                var node = singleton.data.children.find(function (_ref2) {\n                  var instance = _ref2.instance;\n                  return instance.reference === event.currentTarget;\n                });\n                instance.state.$$activeSingletonInstance = node.instance;\n                setSingletonContent(node.content);\n              }\n            };\n          }\n        }]) : plugins,\n        render: function render() {\n          return {\n            popper: mutableBox.container\n          };\n        }\n      });\n    }\n\n    var deps = [reference].concat(children ? [children.type] : []); // CREATE\n\n    useIsomorphicLayoutEffect(function () {\n      var element = reference;\n\n      if (reference && reference.hasOwnProperty('current')) {\n        element = reference.current;\n      }\n\n      var instance = tippy(element || mutableBox.ref || ssrSafeCreateDiv(), Object.assign({}, computedProps, {\n        plugins: [classNamePlugin].concat(props.plugins || [])\n      }));\n      mutableBox.instance = instance;\n\n      if (disabled) {\n        instance.disable();\n      }\n\n      if (visible) {\n        instance.show();\n      }\n\n      if (isSingletonMode) {\n        singleton.hook({\n          instance: instance,\n          content: content,\n          props: computedProps,\n          setSingletonContent: setSingletonContent\n        });\n      }\n\n      setMounted(true);\n      return function () {\n        instance.destroy();\n        singleton == null ? void 0 : singleton.cleanup(instance);\n      };\n    }, deps); // UPDATE\n\n    useIsomorphicLayoutEffect(function () {\n      var _instance$popperInsta;\n\n      // Prevent this effect from running on 1st render\n      if (mutableBox.renders === 1) {\n        mutableBox.renders++;\n        return;\n      }\n\n      var instance = mutableBox.instance;\n      instance.setProps(deepPreserveProps(instance.props, computedProps)); // Fixes #264\n\n      (_instance$popperInsta = instance.popperInstance) == null ? void 0 : _instance$popperInsta.forceUpdate();\n\n      if (disabled) {\n        instance.disable();\n      } else {\n        instance.enable();\n      }\n\n      if (isControlledMode) {\n        if (visible) {\n          instance.show();\n        } else {\n          instance.hide();\n        }\n      }\n\n      if (isSingletonMode) {\n        singleton.hook({\n          instance: instance,\n          content: content,\n          props: computedProps,\n          setSingletonContent: setSingletonContent\n        });\n      }\n    });\n    useIsomorphicLayoutEffect(function () {\n      var _instance$props$poppe;\n\n      if (!render) {\n        return;\n      }\n\n      var instance = mutableBox.instance;\n      instance.setProps({\n        popperOptions: Object.assign({}, instance.props.popperOptions, {\n          modifiers: [].concat((((_instance$props$poppe = instance.props.popperOptions) == null ? void 0 : _instance$props$poppe.modifiers) || []).filter(function (_ref3) {\n            var name = _ref3.name;\n            return name !== '$$tippyReact';\n          }), [{\n            name: '$$tippyReact',\n            enabled: true,\n            phase: 'beforeWrite',\n            requires: ['computeStyles'],\n            fn: function fn(_ref4) {\n              var _state$modifiersData;\n\n              var state = _ref4.state;\n              var hideData = (_state$modifiersData = state.modifiersData) == null ? void 0 : _state$modifiersData.hide; // WARNING: this is a high-risk path that can cause an infinite\n              // loop. This expression _must_ evaluate to false when required\n\n              if (attrs.placement !== state.placement || attrs.referenceHidden !== (hideData == null ? void 0 : hideData.isReferenceHidden) || attrs.escaped !== (hideData == null ? void 0 : hideData.hasPopperEscaped)) {\n                setAttrs({\n                  placement: state.placement,\n                  referenceHidden: hideData == null ? void 0 : hideData.isReferenceHidden,\n                  escaped: hideData == null ? void 0 : hideData.hasPopperEscaped\n                });\n              }\n\n              state.attributes.popper = {};\n            }\n          }])\n        })\n      });\n    }, [attrs.placement, attrs.referenceHidden, attrs.escaped].concat(deps));\n    return /*#__PURE__*/React.createElement(React.Fragment, null, children ? /*#__PURE__*/cloneElement(children, {\n      ref: function ref(node) {\n        mutableBox.ref = node;\n        preserveRef(children.ref, node);\n      }\n    }) : null, mounted && /*#__PURE__*/createPortal(render ? render(toDataAttributes(attrs), singletonContent, mutableBox.instance) : content, mutableBox.container));\n  }\n\n  return Tippy;\n}\n\nfunction useSingletonGenerator(createSingleton) {\n  return function useSingleton(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        _ref$disabled = _ref.disabled,\n        disabled = _ref$disabled === void 0 ? false : _ref$disabled,\n        _ref$overrides = _ref.overrides,\n        overrides = _ref$overrides === void 0 ? [] : _ref$overrides;\n\n    var _useState = useState(false),\n        mounted = _useState[0],\n        setMounted = _useState[1];\n\n    var mutableBox = useMutableBox({\n      children: [],\n      renders: 1\n    });\n    useIsomorphicLayoutEffect(function () {\n      if (!mounted) {\n        setMounted(true);\n        return;\n      }\n\n      var children = mutableBox.children,\n          sourceData = mutableBox.sourceData;\n\n      if (!sourceData) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.error(['@tippyjs/react: The `source` variable from `useSingleton()` has', 'not been passed to a <Tippy /> component.'].join(' '));\n        }\n\n        return;\n      }\n\n      var instance = createSingleton(children.map(function (child) {\n        return child.instance;\n      }), Object.assign({}, sourceData.props, {\n        popperOptions: sourceData.instance.props.popperOptions,\n        overrides: overrides,\n        plugins: [classNamePlugin].concat(sourceData.props.plugins || [])\n      }));\n      mutableBox.instance = instance;\n\n      if (disabled) {\n        instance.disable();\n      }\n\n      return function () {\n        instance.destroy();\n        mutableBox.children = children.filter(function (_ref2) {\n          var instance = _ref2.instance;\n          return !instance.state.isDestroyed;\n        });\n      };\n    }, [mounted]);\n    useIsomorphicLayoutEffect(function () {\n      if (!mounted) {\n        return;\n      }\n\n      if (mutableBox.renders === 1) {\n        mutableBox.renders++;\n        return;\n      }\n\n      var children = mutableBox.children,\n          instance = mutableBox.instance,\n          sourceData = mutableBox.sourceData;\n\n      if (!(instance && sourceData)) {\n        return;\n      }\n\n      var _sourceData$props = sourceData.props,\n          content = _sourceData$props.content,\n          props = _objectWithoutPropertiesLoose(_sourceData$props, [\"content\"]);\n\n      instance.setProps(deepPreserveProps(instance.props, Object.assign({}, props, {\n        overrides: overrides\n      })));\n      instance.setInstances(children.map(function (child) {\n        return child.instance;\n      }));\n\n      if (disabled) {\n        instance.disable();\n      } else {\n        instance.enable();\n      }\n    });\n    return useMemo(function () {\n      var source = {\n        data: mutableBox,\n        hook: function hook(data) {\n          mutableBox.sourceData = data;\n          mutableBox.setSingletonContent = data.setSingletonContent;\n        },\n        cleanup: function cleanup() {\n          mutableBox.sourceData = null;\n        }\n      };\n      var target = {\n        hook: function hook(data) {\n          var _mutableBox$instance, _mutableBox$instance2;\n\n          mutableBox.children = mutableBox.children.filter(function (_ref3) {\n            var instance = _ref3.instance;\n            return data.instance !== instance;\n          });\n          mutableBox.children.push(data);\n\n          if (((_mutableBox$instance = mutableBox.instance) == null ? void 0 : _mutableBox$instance.state.isMounted) && ((_mutableBox$instance2 = mutableBox.instance) == null ? void 0 : _mutableBox$instance2.state.$$activeSingletonInstance) === data.instance) {\n            mutableBox.setSingletonContent == null ? void 0 : mutableBox.setSingletonContent(data.content);\n          }\n\n          if (mutableBox.instance && !mutableBox.instance.state.isDestroyed) {\n            mutableBox.instance.setInstances(mutableBox.children.map(function (child) {\n              return child.instance;\n            }));\n          }\n        },\n        cleanup: function cleanup(instance) {\n          mutableBox.children = mutableBox.children.filter(function (data) {\n            return data.instance !== instance;\n          });\n\n          if (mutableBox.instance && !mutableBox.instance.state.isDestroyed) {\n            mutableBox.instance.setInstances(mutableBox.children.map(function (child) {\n              return child.instance;\n            }));\n          }\n        }\n      };\n      return [source, target];\n    }, []);\n  };\n}\n\nvar forwardRef = (function (Tippy, defaultProps) {\n  return /*#__PURE__*/forwardRef$1(function TippyWrapper(_ref, _ref2) {\n    var children = _ref.children,\n        props = _objectWithoutPropertiesLoose(_ref, [\"children\"]);\n\n    return (\n      /*#__PURE__*/\n      // If I spread them separately here, Babel adds the _extends ponyfill for\n      // some reason\n      React.createElement(Tippy, Object.assign({}, defaultProps, props), children ? /*#__PURE__*/cloneElement(children, {\n        ref: function ref(node) {\n          preserveRef(_ref2, node);\n          preserveRef(children.ref, node);\n        }\n      }) : null)\n    );\n  });\n});\n\nvar useSingleton = /*#__PURE__*/useSingletonGenerator(createSingleton);\nvar index = /*#__PURE__*/forwardRef( /*#__PURE__*/TippyGenerator(tippy));\n\nexport default index;\nexport { useSingleton };\n//# sourceMappingURL=tippy-react.esm.js.map\n","import * as React from \"react\"\nimport { default as OriginalTippy, TippyProps } from \"@tippyjs/react\"\n\ninterface CustomTippyProps extends TippyProps {\n    lazy?: boolean\n}\n\nexport const Tippy = (props: CustomTippyProps): React.ReactElement => {\n    const { lazy, ...tippyProps } = props\n\n    const TippyInstance = lazy ? LazyTippy : OriginalTippy\n    return <TippyInstance theme=\"light\" {...tippyProps} />\n}\n\n// A Tippy instance that only evaluates `content` when the tooltip is shown.\n// Taken from https://gist.github.com/atomiks/520f4b0c7b537202a23a3059d4eec908\n// This will hopefully become supported in Tippy itself someday: See https://github.com/atomiks/tippyjs-react/issues/209\nexport const LazyTippy = (props: TippyProps): React.ReactElement => {\n    const [mounted, setMounted] = React.useState(false)\n\n    const lazyPlugin = {\n        fn: (): { onMount: () => void; onHidden: () => void } => ({\n            onMount: (): void => setMounted(true),\n            onHidden: (): void => setMounted(false),\n        }),\n    }\n\n    const computedProps = { ...props }\n\n    computedProps.plugins = [lazyPlugin, ...(props.plugins || [])]\n\n    if (props.render) {\n        const render = props.render // let TypeScript safely derive that render is not undefined\n        computedProps.render = (...args): React.ReactNode =>\n            mounted ? render(...args) : \"\"\n    } else {\n        computedProps.content = mounted ? props.content : \"\"\n    }\n\n    return <Tippy {...computedProps} />\n}\n\ninterface TippyIfInteractiveProps extends CustomTippyProps {\n    isInteractive: boolean\n}\n\n// We sometimes need a conditional Tippy instance, i.e. a Tippy that is only hooked up to\n// interactive charts (and not in static SVG exports etc.). This is that: If `isInteractive=false`,\n// then it bypasses Tippy and just renders the children.\nexport const TippyIfInteractive = (\n    props: TippyIfInteractiveProps\n): React.ReactElement => {\n    const { isInteractive, ...tippyProps } = props\n\n    if (isInteractive) return <Tippy {...tippyProps} />\n    else return <>{props.children}</>\n}\n","export const isAndroid = (): boolean => {\n    return /Android/i.test(navigator.userAgent)\n}\n\nexport const isIOS = (): boolean => {\n    return (\n        /iPhone|iPad|iPod/.test(navigator.userAgent) ||\n        // iPadOS 13+ reports itself as Macintosh, see https://stackoverflow.com/a/9039885\n        (navigator.userAgent.includes(\"Intel Mac OS X\") &&\n            navigator.maxTouchPoints > 1)\n    )\n}\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","/** Internal global with common properties and Sentry extensions  */\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ = globalThis ;\n\nexport { GLOBAL_OBJ };\n//# sourceMappingURL=worldwide.js.map\n","// This is a magic string replaced by rollup\n\nconst SDK_VERSION = \"10.40.0\" ;\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { SDK_VERSION } from './utils/version.js';\nimport { GLOBAL_OBJ } from './utils/worldwide.js';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n  // This ensures a Sentry carrier exists\n  getSentryCarrier(GLOBAL_OBJ);\n  return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nfunction getSentryCarrier(carrier) {\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n  // For now: First SDK that sets the .version property wins\n  __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n  // Intentionally populating and returning the version of \"this\" SDK instance\n  // rather than what's set in .version so that \"this\" SDK always gets its carrier\n  return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__[]` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(\n  name,\n  creator,\n  obj = GLOBAL_OBJ,\n) {\n  const __SENTRY__ = (obj.__SENTRY__ = obj.__SENTRY__ || {});\n  const carrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n  // Note: We do not want to set `carrier.version` here, as this may be called before any `init` is called, e.g. for the default scopes\n  return carrier[name] || (carrier[name] = creator());\n}\n\nexport { getGlobalSingleton, getMainCarrier, getSentryCarrier };\n//# sourceMappingURL=carrier.js.map\n","import { getGlobalSingleton } from '../carrier.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst CONSOLE_LEVELS = [\n  'debug',\n  'info',\n  'warn',\n  'error',\n  'log',\n  'assert',\n  'trace',\n] ;\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n  if (!('console' in GLOBAL_OBJ)) {\n    return callback();\n  }\n\n  const console = GLOBAL_OBJ.console;\n  const wrappedFuncs = {};\n\n  const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n  // Restore all wrapped console methods\n  wrappedLevels.forEach(level => {\n    const originalConsoleMethod = originalConsoleMethods[level];\n    wrappedFuncs[level] = console[level] ;\n    console[level] = originalConsoleMethod ;\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    wrappedLevels.forEach(level => {\n      console[level] = wrappedFuncs[level] ;\n    });\n  }\n}\n\nfunction enable() {\n  _getLoggerSettings().enabled = true;\n}\n\nfunction disable() {\n  _getLoggerSettings().enabled = false;\n}\n\nfunction isEnabled() {\n  return _getLoggerSettings().enabled;\n}\n\nfunction log(...args) {\n  _maybeLog('log', ...args);\n}\n\nfunction warn(...args) {\n  _maybeLog('warn', ...args);\n}\n\nfunction error(...args) {\n  _maybeLog('error', ...args);\n}\n\nfunction _maybeLog(level, ...args) {\n  if (!DEBUG_BUILD) {\n    return;\n  }\n\n  if (isEnabled()) {\n    consoleSandbox(() => {\n      GLOBAL_OBJ.console[level](`${PREFIX}[${level}]:`, ...args);\n    });\n  }\n}\n\nfunction _getLoggerSettings() {\n  if (!DEBUG_BUILD) {\n    return { enabled: false };\n  }\n\n  return getGlobalSingleton('loggerSettings', () => ({ enabled: false }));\n}\n\n/**\n * This is a logger singleton which either logs things or no-ops if logging is not enabled.\n */\nconst debug = {\n  /** Enable logging. */\n  enable,\n  /** Disable logging. */\n  disable,\n  /** Check if logging is enabled. */\n  isEnabled,\n  /** Log a message. */\n  log,\n  /** Log a warning. */\n  warn,\n  /** Log an error. */\n  error,\n} ;\n\nexport { CONSOLE_LEVELS, consoleSandbox, debug, originalConsoleMethods };\n//# sourceMappingURL=debug-logger.js.map\n","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n  switch (objectToString.call(wat)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n    case '[object WebAssembly.Exception]':\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, className) {\n  return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n  return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n  return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n  return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n  return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isParameterizedString(wat) {\n  return (\n    typeof wat === 'object' &&\n    wat !== null &&\n    '__sentry_template_string__' in wat &&\n    '__sentry_template_values__' in wat\n  );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n  return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n  return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n  return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat?.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\n// TODO: fix in v11, convert any to unknown\n// export function isInstanceOf<T>(wat: unknown, base: { new (...args: any[]): T }): wat is T {\nfunction isInstanceOf(wat, base) {\n  try {\n    return wat instanceof base;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel or a VNode.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isVueViewModel(wat) {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  // We also need to check for __v_isVNode because Vue 3 component render instances have an internal __v_isVNode property.\n  return !!(\n    typeof wat === 'object' &&\n    wat !== null &&\n    ((wat ).__isVue || (wat )._isVue || (wat ).__v_isVNode)\n  );\n}\n\n/**\n * Checks whether the given parameter is a Standard Web API Request instance.\n *\n * Returns false if Request is not available in the current runtime.\n */\nfunction isRequest(request) {\n  return typeof Request !== 'undefined' && isInstanceOf(request, Request);\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isRequest, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { htmlTreeAsString } from './browser.js';\nimport { debug } from './debug-logger.js';\nimport { isError, isEvent, isInstanceOf, isPrimitive, isElement } from './is.js';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * If the method on the passed object is not a function, the wrapper will not be applied.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n  if (!(name in source)) {\n    return;\n  }\n\n  // explicitly casting to unknown because we don't know the type of the method initially at all\n  const original = source[name] ;\n\n  if (typeof original !== 'function') {\n    return;\n  }\n\n  const wrapped = replacementFactory(original) ;\n\n  // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n  // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n  if (typeof wrapped === 'function') {\n    markFunctionWrapped(wrapped, original);\n  }\n\n  try {\n    source[name] = wrapped;\n  } catch {\n    DEBUG_BUILD && debug.log(`Failed to replace method \"${name}\" in object`, source);\n  }\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n  try {\n    Object.defineProperty(obj, name, {\n      // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n      value: value,\n      writable: true,\n      configurable: true,\n    });\n  } catch {\n    DEBUG_BUILD && debug.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n  }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getOriginalFunction(func) {\n  return func.__sentry_original__;\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argument itself, when value is neither an Event nor\n *  an Error.\n */\nfunction convertToPlainObject(value)\n\n {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    };\n  } else if (isEvent(value)) {\n    const newObj\n\n = {\n      type: value.type,\n      target: serializeEventTarget(value.target),\n      currentTarget: serializeEventTarget(value.currentTarget),\n      ...getOwnProperties(value),\n    };\n\n    if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n      newObj.detail = value.detail;\n    }\n\n    return newObj;\n  } else {\n    return value;\n  }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n  try {\n    return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n  } catch {\n    return '<unknown>';\n  }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n  if (typeof obj === 'object' && obj !== null) {\n    const extractedProps = {};\n    for (const property in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, property)) {\n        extractedProps[property] = (obj )[property];\n      }\n    }\n    return extractedProps;\n  } else {\n    return {};\n  }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception) {\n  const keys = Object.keys(convertToPlainObject(exception));\n  keys.sort();\n\n  return !keys[0] ? '[object has no keys]' : keys.join(', ');\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n *\n * @deprecated This function is no longer used by the SDK and will be removed in a future major version.\n */\nfunction dropUndefinedKeys(inputValue) {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n  // Early return for primitive values\n  if (inputValue === null || typeof inputValue !== 'object') {\n    return inputValue;\n  }\n\n  // Check memo map first for all object types\n  const memoVal = memoizationMap.get(inputValue);\n  if (memoVal !== undefined) {\n    return memoVal ;\n  }\n\n  // handle arrays\n  if (Array.isArray(inputValue)) {\n    const returnValue = [];\n    // Store mapping to handle circular references\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach(value => {\n      returnValue.push(_dropUndefinedKeys(value, memoizationMap));\n    });\n\n    return returnValue ;\n  }\n\n  if (isPojo(inputValue)) {\n    const returnValue = {};\n    // Store mapping to handle circular references\n    memoizationMap.set(inputValue, returnValue);\n\n    const keys = Object.keys(inputValue);\n\n    keys.forEach(key => {\n      const val = inputValue[key];\n      if (val !== undefined) {\n        returnValue[key] = _dropUndefinedKeys(val, memoizationMap);\n      }\n    });\n\n    return returnValue ;\n  }\n\n  // For other object types, return as is\n  return inputValue;\n}\n\nfunction isPojo(input) {\n  // Plain objects have Object as constructor or no constructor\n  const constructor = (input ).constructor;\n  return constructor === Object || constructor === undefined;\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n  let objectified;\n  switch (true) {\n    // this will catch both undefined and null\n    case wat == undefined:\n      objectified = new String(wat);\n      break;\n\n    // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n    // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n    // an object in order to wrap it.\n    case typeof wat === 'symbol' || typeof wat === 'bigint':\n      objectified = Object(wat);\n      break;\n\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case isPrimitive(wat):\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      objectified = new (wat ).constructor(wat);\n      break;\n\n    // by process of elimination, at this point we know that `wat` must already be an object\n    default:\n      objectified = wat;\n      break;\n  }\n  return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify };\n//# sourceMappingURL=object.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\n// undefined = not yet resolved, null = no runner found, function = runner found\nlet RESOLVED_RUNNER;\n\n/**\n * Simple wrapper that allows SDKs to *secretly* set context wrapper to generate safe random IDs in cache components contexts\n */\nfunction withRandomSafeContext(cb) {\n  // Skips future symbol lookups if we've already resolved (or attempted to resolve) the runner once\n  if (RESOLVED_RUNNER !== undefined) {\n    return RESOLVED_RUNNER ? RESOLVED_RUNNER(cb) : cb();\n  }\n\n  const sym = Symbol.for('__SENTRY_SAFE_RANDOM_ID_WRAPPER__');\n  const globalWithSymbol = GLOBAL_OBJ;\n\n  if (sym in globalWithSymbol && typeof globalWithSymbol[sym] === 'function') {\n    RESOLVED_RUNNER = globalWithSymbol[sym];\n    return RESOLVED_RUNNER(cb);\n  }\n\n  RESOLVED_RUNNER = null;\n  return cb();\n}\n\n/**\n * Identical to Math.random() but wrapped in withRandomSafeContext\n * to ensure safe random number generation in certain contexts (e.g., Next.js Cache Components).\n */\nfunction safeMathRandom() {\n  return withRandomSafeContext(() => Math.random());\n}\n\n/**\n * Identical to Date.now() but wrapped in withRandomSafeContext\n * to ensure safe time value generation in certain contexts (e.g., Next.js Cache Components).\n */\nfunction safeDateNow() {\n  return withRandomSafeContext(() => Date.now());\n}\n\nexport { safeDateNow, safeMathRandom, withRandomSafeContext };\n//# sourceMappingURL=randomSafeContext.js.map\n","import { isString, isRegExp, isVueViewModel } from './is.js';\nimport { getVueInternalName } from './stacktrace.js';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n  let newLine = line;\n  const lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    // eslint-disable-next-line no-param-reassign\n    colno = lineLength;\n  }\n\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n\n  let end = Math.min(start + 140, lineLength);\n  if (end > lineLength - 5) {\n    end = lineLength;\n  }\n  if (end === lineLength) {\n    start = Math.max(end - 140, 0);\n  }\n\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\nfunction safeJoin(input, delimiter) {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line @typescript-eslint/prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    try {\n      // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n      // console warnings. This happens when a Vue template is rendered with\n      // an undeclared variable, which we try to stringify, ultimately causing\n      // Vue to issue another warning which repeats indefinitely.\n      // see: https://github.com/getsentry/sentry-javascript/pull/8981\n      if (isVueViewModel(value)) {\n        output.push(getVueInternalName(value));\n      } else {\n        output.push(String(value));\n      }\n    } catch {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nfunction isMatchingPattern(\n  value,\n  pattern,\n  requireExactStringMatch = false,\n) {\n  if (!isString(value)) {\n    return false;\n  }\n\n  if (isRegExp(pattern)) {\n    return pattern.test(value);\n  }\n  if (isString(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nfunction stringMatchesSomePattern(\n  testString,\n  patterns = [],\n  requireExactStringMatch = false,\n) {\n  return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate };\n//# sourceMappingURL=string.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { withRandomSafeContext, safeMathRandom } from './randomSafeContext.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nfunction getCrypto() {\n  const gbl = GLOBAL_OBJ ;\n  return gbl.crypto || gbl.msCrypto;\n}\n\nlet emptyUuid;\n\nfunction getRandomByte() {\n  return safeMathRandom() * 16;\n}\n\n/**\n * UUID4 generator\n * @param crypto Object that provides the crypto API.\n * @returns string Generated UUID4.\n */\nfunction uuid4(crypto = getCrypto()) {\n  try {\n    if (crypto?.randomUUID) {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      return withRandomSafeContext(() => crypto.randomUUID()).replace(/-/g, '');\n    }\n  } catch {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  if (!emptyUuid) {\n    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n    // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n    emptyUuid = ([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11;\n  }\n\n  return emptyUuid.replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event) {\n  return event.exception?.values?.[0];\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\n\n  const firstException = getFirstException(event);\n  if (firstException) {\n    if (firstException.type && firstException.value) {\n      return `${firstException.type}: ${firstException.value}`;\n    }\n    return firstException.type || firstException.value || eventId || '<unknown>';\n  }\n  return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n  const exception = (event.exception = event.exception || {});\n  const values = (exception.values = exception.values || []);\n  const firstException = (values[0] = values[0] || {});\n  if (!firstException.value) {\n    firstException.value = value || '';\n  }\n  if (!firstException.type) {\n    firstException.type = type || 'Error';\n  }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n\n  const defaultMechanism = { type: 'generic', handled: true };\n  const currentMechanism = firstException.mechanism;\n  firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n  if (newMechanism && 'data' in newMechanism) {\n    const mergedData = { ...currentMechanism?.data, ...newMechanism.data };\n    firstException.mechanism.data = mergedData;\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n  /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\nfunction _parseInt(input) {\n  return parseInt(input || '', 10);\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = _parseInt(match[1]);\n  const minor = _parseInt(match[2]);\n  const patch = _parseInt(match[3]);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line) => snipLine(line, 0));\n\n  // We guard here to ensure this is not larger than the existing number of lines\n  const lineIndex = Math.min(maxLines - 1, sourceLine);\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  frame.context_line = snipLine(lines[lineIndex], frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n  if (isAlreadyCaptured(exception)) {\n    return true;\n  }\n\n  try {\n    // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n    // `ExtraErrorData` integration\n    addNonEnumerableProperty(exception , '__sentry_captured__', true);\n  } catch {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\n/**\n * Checks whether we've already captured the given exception (note: not an identical exception - the very object).\n * It is considered already captured if it has the `__sentry_captured__` property set to `true`.\n *\n * @internal Only considered for internal usage\n */\nfunction isAlreadyCaptured(exception) {\n  try {\n    return (exception ).__sentry_captured__;\n  } catch {} // eslint-disable-line no-empty\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, checkOrSetAlreadyCaught, getEventDescription, isAlreadyCaptured, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","import { safeDateNow, withRandomSafeContext } from './randomSafeContext.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nfunction dateTimestampInSeconds() {\n  return safeDateNow() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc() {\n  const { performance } = GLOBAL_OBJ ;\n  // Some browser and environments don't have a performance or timeOrigin, so we fallback to\n  // using Date.now() to compute the starting time.\n  if (!performance?.now || !performance.timeOrigin) {\n    return dateTimestampInSeconds;\n  }\n\n  const timeOrigin = performance.timeOrigin;\n\n  // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n  // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n  //\n  // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n  // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n  // correct for this.\n  // See: https://github.com/getsentry/sentry-javascript/issues/2590\n  // See: https://github.com/mdn/content/issues/4713\n  // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n  return () => {\n    return (timeOrigin + withRandomSafeContext(() => performance.now())) / ONE_SECOND_IN_MS;\n  };\n}\n\nlet _cachedTimestampInSeconds;\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nfunction timestampInSeconds() {\n  // We store this in a closure so that we don't have to create a new function every time this is called.\n  const func = _cachedTimestampInSeconds ?? (_cachedTimestampInSeconds = createUnixTimestampInSecondsFunc());\n  return func();\n}\n\n/**\n * Cached result of getBrowserTimeOrigin.\n */\nlet cachedTimeOrigin = null;\n\n/**\n * Gets the time origin and the mode used to determine it.\n *\n * Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n * performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n * data as reliable if they are within a reasonable threshold of the current time.\n *\n * TODO: move to `@sentry/browser-utils` package.\n */\nfunction getBrowserTimeOrigin() {\n  const { performance } = GLOBAL_OBJ ;\n  if (!performance?.now) {\n    return undefined;\n  }\n\n  const threshold = 300000; // 5 minutes in milliseconds\n  const performanceNow = withRandomSafeContext(() => performance.now());\n  const dateNow = safeDateNow();\n\n  const timeOrigin = performance.timeOrigin;\n  if (typeof timeOrigin === 'number') {\n    const timeOriginDelta = Math.abs(timeOrigin + performanceNow - dateNow);\n    if (timeOriginDelta < threshold) {\n      return timeOrigin;\n    }\n  }\n\n  // TODO: Remove all code related to `performance.timing.navigationStart` once we drop support for Safari 14.\n  // `performance.timeSince` is available in Safari 15.\n  // see: https://caniuse.com/mdn-api_performance_timeorigin\n\n  // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n  // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n  // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n  // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n  // Date API.\n  // eslint-disable-next-line deprecation/deprecation\n  const navigationStart = performance.timing?.navigationStart;\n  if (typeof navigationStart === 'number') {\n    const navigationStartDelta = Math.abs(navigationStart + performanceNow - dateNow);\n    if (navigationStartDelta < threshold) {\n      return navigationStart;\n    }\n  }\n\n  // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to subtracting\n  // `performance.now()` from `Date.now()`.\n  return dateNow - performanceNow;\n}\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nfunction browserPerformanceTimeOrigin() {\n  if (cachedTimeOrigin === null) {\n    cachedTimeOrigin = getBrowserTimeOrigin();\n  }\n\n  return cachedTimeOrigin;\n}\n\nexport { browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds };\n//# sourceMappingURL=time.js.map\n","import { uuid4 } from './utils/misc.js';\nimport { timestampInSeconds } from './utils/time.js';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n  // Both timestamp and started are in seconds since the UNIX epoch.\n  const startingTime = timestampInSeconds();\n\n  const session = {\n    sid: uuid4(),\n    init: true,\n    timestamp: startingTime,\n    started: startingTime,\n    duration: 0,\n    status: 'ok',\n    errors: 0,\n    ignoreDuration: false,\n    toJSON: () => sessionToJSON(session),\n  };\n\n  if (context) {\n    updateSession(session, context);\n  }\n\n  return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see Client.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nfunction updateSession(session, context = {}) {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n\n  session.timestamp = context.timestamp || timestampInSeconds();\n\n  if (context.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== undefined) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === 'number') {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = undefined;\n  } else if (typeof context.duration === 'number') {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === 'number') {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n  return {\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  };\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","/**\n * Shallow merge two objects.\n * Does not mutate the passed in objects.\n * Undefined/empty values in the merge object will overwrite existing values.\n *\n * By default, this merges 2 levels deep.\n */\nfunction merge(initialObj, mergeObj, levels = 2) {\n  // If the merge value is not an object, or we have no merge levels left,\n  // we just set the value to the merge value\n  if (!mergeObj || typeof mergeObj !== 'object' || levels <= 0) {\n    return mergeObj;\n  }\n\n  // If the merge object is an empty object, and the initial object is not undefined, we return the initial object\n  if (initialObj && Object.keys(mergeObj).length === 0) {\n    return initialObj;\n  }\n\n  // Clone object\n  const output = { ...initialObj };\n\n  // Merge values into output, resursively\n  for (const key in mergeObj) {\n    if (Object.prototype.hasOwnProperty.call(mergeObj, key)) {\n      output[key] = merge(output[key], mergeObj[key], levels - 1);\n    }\n  }\n\n  return output;\n}\n\nexport { merge };\n//# sourceMappingURL=merge.js.map\n","import { uuid4 } from './misc.js';\n\n/**\n * Generate a random, valid trace ID.\n */\nfunction generateTraceId() {\n  return uuid4();\n}\n\n/**\n * Generate a random, valid span ID.\n */\nfunction generateSpanId() {\n  return uuid4().substring(16);\n}\n\nexport { generateSpanId, generateTraceId };\n//# sourceMappingURL=propagationContext.js.map\n","import { addNonEnumerableProperty } from './object.js';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _setSpanForScope(scope, span) {\n  if (span) {\n    addNonEnumerableProperty(scope , SCOPE_SPAN_FIELD, span);\n  } else {\n    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n    delete (scope )[SCOPE_SPAN_FIELD];\n  }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _getSpanForScope(scope) {\n  return scope[SCOPE_SPAN_FIELD];\n}\n\nexport { _getSpanForScope, _setSpanForScope };\n//# sourceMappingURL=spanOnScope.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { updateSession } from './session.js';\nimport { debug } from './utils/debug-logger.js';\nimport { isPlainObject } from './utils/is.js';\nimport { merge } from './utils/merge.js';\nimport { uuid4 } from './utils/misc.js';\nimport { generateTraceId } from './utils/propagationContext.js';\nimport { safeMathRandom } from './utils/randomSafeContext.js';\nimport { _setSpanForScope, _getSpanForScope } from './utils/spanOnScope.js';\nimport { truncate } from './utils/string.js';\nimport { dateTimestampInSeconds } from './utils/time.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * A context to be used for capturing an event.\n * This can either be a Scope, or a partial ScopeContext,\n * or a callback that receives the current scope and returns a new scope to use.\n */\n\n/**\n * Holds additional event information.\n */\nclass Scope {\n  /** Flag if notifying is happening. */\n\n  /** Callback for client to receive scope changes. */\n\n  /** Callback list that will be called during event processing. */\n\n  /** Array of breadcrumbs. */\n\n  /** User */\n\n  /** Tags */\n\n  /** Attributes */\n\n  /** Extra */\n\n  /** Contexts */\n\n  /** Attachments */\n\n  /** Propagation Context for distributed tracing */\n\n  /**\n   * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n   * sent to Sentry\n   */\n\n  /** Fingerprint */\n\n  /** Severity */\n\n  /**\n   * Transaction Name\n   *\n   * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n   * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n   */\n\n  /** Session */\n\n  /** The client on this scope */\n\n  /** Contains the last event id of a captured event.  */\n\n  /** Conversation ID */\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n   constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._attributes = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    this._propagationContext = {\n      traceId: generateTraceId(),\n      sampleRand: safeMathRandom(),\n    };\n  }\n\n  /**\n   * Clone all data from this scope into a new scope.\n   */\n   clone() {\n    const newScope = new Scope();\n    newScope._breadcrumbs = [...this._breadcrumbs];\n    newScope._tags = { ...this._tags };\n    newScope._attributes = { ...this._attributes };\n    newScope._extra = { ...this._extra };\n    newScope._contexts = { ...this._contexts };\n    if (this._contexts.flags) {\n      // We need to copy the `values` array so insertions on a cloned scope\n      // won't affect the original array.\n      newScope._contexts.flags = {\n        values: [...this._contexts.flags.values],\n      };\n    }\n\n    newScope._user = this._user;\n    newScope._level = this._level;\n    newScope._session = this._session;\n    newScope._transactionName = this._transactionName;\n    newScope._fingerprint = this._fingerprint;\n    newScope._eventProcessors = [...this._eventProcessors];\n    newScope._attachments = [...this._attachments];\n    newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n    newScope._propagationContext = { ...this._propagationContext };\n    newScope._client = this._client;\n    newScope._lastEventId = this._lastEventId;\n    newScope._conversationId = this._conversationId;\n\n    _setSpanForScope(newScope, _getSpanForScope(this));\n\n    return newScope;\n  }\n\n  /**\n   * Update the client assigned to this scope.\n   * Note that not every scope will have a client assigned - isolation scopes & the global scope will generally not have a client,\n   * as well as manually created scopes.\n   */\n   setClient(client) {\n    this._client = client;\n  }\n\n  /**\n   * Set the ID of the last captured error event.\n   * This is generally only captured on the isolation scope.\n   */\n   setLastEventId(lastEventId) {\n    this._lastEventId = lastEventId;\n  }\n\n  /**\n   * Get the client assigned to this scope.\n   */\n   getClient() {\n    return this._client ;\n  }\n\n  /**\n   * Get the ID of the last captured error event.\n   * This is generally only available on the isolation scope.\n   */\n   lastEventId() {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addScopeListener(callback) {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * Add an event processor that will be called before an event is sent.\n   */\n   addEventProcessor(callback) {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * Set the user for this scope.\n   * Set to `null` to unset the user.\n   */\n   setUser(user) {\n    // If null is passed we want to unset everything, but still define keys,\n    // so that later down in the pipeline any existing values are cleared.\n    this._user = user || {\n      email: undefined,\n      id: undefined,\n      ip_address: undefined,\n      username: undefined,\n    };\n\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Get the user from this scope.\n   */\n   getUser() {\n    return this._user;\n  }\n\n  /**\n   * Set the conversation ID for this scope.\n   * Set to `null` to unset the conversation ID.\n   */\n   setConversationId(conversationId) {\n    this._conversationId = conversationId || undefined;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set an object that will be merged into existing tags on the scope,\n   * and will be sent as tags data with the event.\n   */\n   setTags(tags) {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set a single tag that will be sent as tags data with the event.\n   */\n   setTag(key, value) {\n    return this.setTags({ [key]: value });\n  }\n\n  /**\n   * Sets attributes onto the scope.\n   *\n   * These attributes are currently applied to logs and metrics.\n   * In the future, they will also be applied to spans.\n   *\n   * Important: For now, only strings, numbers and boolean attributes are supported, despite types allowing for\n   * more complex attribute types. We'll add this support in the future but already specify the wider type to\n   * avoid a breaking change in the future.\n   *\n   * @param newAttributes - The attributes to set on the scope. You can either pass in key-value pairs, or\n   * an object with a `value` and an optional `unit` (if applicable to your attribute).\n   *\n   * @example\n   * ```typescript\n   * scope.setAttributes({\n   *   is_admin: true,\n   *   payment_selection: 'credit_card',\n   *   render_duration: { value: 'render_duration', unit: 'ms' },\n   * });\n   * ```\n   */\n   setAttributes(newAttributes) {\n    this._attributes = {\n      ...this._attributes,\n      ...newAttributes,\n    };\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets an attribute onto the scope.\n   *\n   * These attributes are currently applied to logs and metrics.\n   * In the future, they will also be applied to spans.\n   *\n   * Important: For now, only strings, numbers and boolean attributes are supported, despite types allowing for\n   * more complex attribute types. We'll add this support in the future but already specify the wider type to\n   * avoid a breaking change in the future.\n   *\n   * @param key - The attribute key.\n   * @param value - the attribute value. You can either pass in a raw value, or an attribute\n   * object with a `value` and an optional `unit` (if applicable to your attribute).\n   *\n   * @example\n   * ```typescript\n   * scope.setAttribute('is_admin', true);\n   * scope.setAttribute('render_duration', { value: 'render_duration', unit: 'ms' });\n   * ```\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n   setAttribute(\n    key,\n    value,\n  ) {\n    return this.setAttributes({ [key]: value });\n  }\n\n  /**\n   * Removes the attribute with the given key from the scope.\n   *\n   * @param key - The attribute key.\n   *\n   * @example\n   * ```typescript\n   * scope.removeAttribute('is_admin');\n   * ```\n   */\n   removeAttribute(key) {\n    if (key in this._attributes) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._attributes[key];\n      this._notifyScopeListeners();\n    }\n    return this;\n  }\n\n  /**\n   * Set an object that will be merged into existing extra on the scope,\n   * and will be sent as extra data with the event.\n   */\n   setExtras(extras) {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set a single key:value extra entry that will be sent as extra data with the event.\n   */\n   setExtra(key, extra) {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the fingerprint on the scope to send with the events.\n   * @param {string[]} fingerprint Fingerprint to group events in Sentry.\n   */\n   setFingerprint(fingerprint) {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the level on the scope for future events.\n   */\n   setLevel(level) {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the transaction name on the scope so that the name of e.g. taken server route or\n   * the page location is attached to future events.\n   *\n   * IMPORTANT: Calling this function does NOT change the name of the currently active\n   * root span. If you want to change the name of the active root span, use\n   * `Sentry.updateSpanName(rootSpan, 'new name')` instead.\n   *\n   * By default, the SDK updates the scope's transaction name automatically on sensible\n   * occasions, such as a page navigation or when handling a new request on the server.\n   */\n   setTransactionName(name) {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets context data with the given name.\n   * Data passed as context will be normalized. You can also pass `null` to unset the context.\n   * Note that context data will not be merged - calling `setContext` will overwrite an existing context with the same key.\n   */\n   setContext(key, context) {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set the session for the scope.\n   */\n   setSession(session) {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Get the session from the scope.\n   */\n   getSession() {\n    return this._session;\n  }\n\n  /**\n   * Updates the scope with provided data. Can work in three variations:\n   * - plain object containing updatable attributes\n   * - Scope instance that'll extract the attributes from\n   * - callback function that'll receive the current scope as an argument and allow for modifications\n   */\n   update(captureContext) {\n    if (!captureContext) {\n      return this;\n    }\n\n    const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n    const scopeInstance =\n      scopeToMerge instanceof Scope\n        ? scopeToMerge.getScopeData()\n        : isPlainObject(scopeToMerge)\n          ? (captureContext )\n          : undefined;\n\n    const {\n      tags,\n      attributes,\n      extra,\n      user,\n      contexts,\n      level,\n      fingerprint = [],\n      propagationContext,\n      conversationId,\n    } = scopeInstance || {};\n\n    this._tags = { ...this._tags, ...tags };\n    this._attributes = { ...this._attributes, ...attributes };\n    this._extra = { ...this._extra, ...extra };\n    this._contexts = { ...this._contexts, ...contexts };\n\n    if (user && Object.keys(user).length) {\n      this._user = user;\n    }\n\n    if (level) {\n      this._level = level;\n    }\n\n    if (fingerprint.length) {\n      this._fingerprint = fingerprint;\n    }\n\n    if (propagationContext) {\n      this._propagationContext = propagationContext;\n    }\n\n    if (conversationId) {\n      this._conversationId = conversationId;\n    }\n\n    return this;\n  }\n\n  /**\n   * Clears the current scope and resets its properties.\n   * Note: The client will not be cleared.\n   */\n   clear() {\n    // client is not cleared here on purpose!\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._attributes = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._session = undefined;\n    this._conversationId = undefined;\n    _setSpanForScope(this, undefined);\n    this._attachments = [];\n    this.setPropagationContext({\n      traceId: generateTraceId(),\n      sampleRand: safeMathRandom(),\n    });\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Adds a breadcrumb to the scope.\n   * By default, the last 100 breadcrumbs are kept.\n   */\n   addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n    const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n    // No data has been changed, so don't notify scope listeners\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n\n    const mergedBreadcrumb = {\n      timestamp: dateTimestampInSeconds(),\n      ...breadcrumb,\n      // Breadcrumb messages can theoretically be infinitely large and they're held in memory so we truncate them not to leak (too much) memory\n      message: breadcrumb.message ? truncate(breadcrumb.message, 2048) : breadcrumb.message,\n    };\n\n    this._breadcrumbs.push(mergedBreadcrumb);\n    if (this._breadcrumbs.length > maxCrumbs) {\n      this._breadcrumbs = this._breadcrumbs.slice(-maxCrumbs);\n      this._client?.recordDroppedEvent('buffer_overflow', 'log_item');\n    }\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * Get the last breadcrumb of the scope.\n   */\n   getLastBreadcrumb() {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * Clear all breadcrumbs from the scope.\n   */\n   clearBreadcrumbs() {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Add an attachment to the scope.\n   */\n   addAttachment(attachment) {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * Clear all attachments from the scope.\n   */\n   clearAttachments() {\n    this._attachments = [];\n    return this;\n  }\n\n  /**\n   * Get the data of this scope, which should be applied to an event during processing.\n   */\n   getScopeData() {\n    return {\n      breadcrumbs: this._breadcrumbs,\n      attachments: this._attachments,\n      contexts: this._contexts,\n      tags: this._tags,\n      attributes: this._attributes,\n      extra: this._extra,\n      user: this._user,\n      level: this._level,\n      fingerprint: this._fingerprint || [],\n      eventProcessors: this._eventProcessors,\n      propagationContext: this._propagationContext,\n      sdkProcessingMetadata: this._sdkProcessingMetadata,\n      transactionName: this._transactionName,\n      span: _getSpanForScope(this),\n      conversationId: this._conversationId,\n    };\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry.\n   */\n   setSDKProcessingMetadata(newData) {\n    this._sdkProcessingMetadata = merge(this._sdkProcessingMetadata, newData, 2);\n    return this;\n  }\n\n  /**\n   * Add propagation context to the scope, used for distributed tracing\n   */\n   setPropagationContext(context) {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * Get propagation context from the scope, used for distributed tracing\n   */\n   getPropagationContext() {\n    return this._propagationContext;\n  }\n\n  /**\n   * Capture an exception for this scope.\n   *\n   * @returns {string} The id of the captured Sentry event.\n   */\n   captureException(exception, hint) {\n    const eventId = hint?.event_id || uuid4();\n\n    if (!this._client) {\n      DEBUG_BUILD && debug.warn('No client configured on scope - will not capture exception!');\n      return eventId;\n    }\n\n    const syntheticException = new Error('Sentry syntheticException');\n\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a message for this scope.\n   *\n   * @returns {string} The id of the captured message.\n   */\n   captureMessage(message, level, hint) {\n    const eventId = hint?.event_id || uuid4();\n\n    if (!this._client) {\n      DEBUG_BUILD && debug.warn('No client configured on scope - will not capture message!');\n      return eventId;\n    }\n\n    const syntheticException = hint?.syntheticException ?? new Error(message);\n\n    this._client.captureMessage(\n      message,\n      level,\n      {\n        originalException: message,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a Sentry event for this scope.\n   *\n   * @returns {string} The id of the captured event.\n   */\n   captureEvent(event, hint) {\n    const eventId = event.event_id || hint?.event_id || uuid4();\n\n    if (!this._client) {\n      DEBUG_BUILD && debug.warn('No client configured on scope - will not capture event!');\n      return eventId;\n    }\n\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n    return eventId;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n   _notifyScopeListeners() {\n    // We need this check for this._notifyingListeners to be able to work on scope during updates\n    // If this check is not here we'll produce endless recursion when something is done with the scope\n    // during the callback.\n    if (!this._notifyingListeners) {\n      this._notifyingListeners = true;\n      this._scopeListeners.forEach(callback => {\n        callback(this);\n      });\n      this._notifyingListeners = false;\n    }\n  }\n}\n\nexport { Scope };\n//# sourceMappingURL=scope.js.map\n","import { getGlobalSingleton } from './carrier.js';\nimport { Scope } from './scope.js';\n\n/** Get the default current scope. */\nfunction getDefaultCurrentScope() {\n  return getGlobalSingleton('defaultCurrentScope', () => new Scope());\n}\n\n/** Get the default isolation scope. */\nfunction getDefaultIsolationScope() {\n  return getGlobalSingleton('defaultIsolationScope', () => new Scope());\n}\n\nexport { getDefaultCurrentScope, getDefaultIsolationScope };\n//# sourceMappingURL=defaultScopes.js.map\n","import { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes.js';\nimport { Scope } from '../scope.js';\nimport { isThenable } from '../utils/is.js';\nimport { getMainCarrier, getSentryCarrier } from '../carrier.js';\n\n/**\n * This is an object that holds a stack of scopes.\n */\nclass AsyncContextStack {\n\n   constructor(scope, isolationScope) {\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    // scope stack for domains or the process\n    this._stack = [{ scope: assignedScope }];\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Fork a scope for the stack.\n   */\n   withScope(callback) {\n    const scope = this._pushScope();\n\n    let maybePromiseResult;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      this._popScope();\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      // @ts-expect-error - isThenable returns the wrong type\n      return maybePromiseResult.then(\n        res => {\n          this._popScope();\n          return res;\n        },\n        e => {\n          this._popScope();\n          throw e;\n        },\n      );\n    }\n\n    this._popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * Get the client of the stack.\n   */\n   getClient() {\n    return this.getStackTop().client ;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   */\n   getScope() {\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * Get the isolation scope for the stack.\n   */\n   getIsolationScope() {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   */\n   getStackTop() {\n    return this._stack[this._stack.length - 1] ;\n  }\n\n  /**\n   * Push a scope to the stack.\n   */\n   _pushScope() {\n    // We want to clone the content of prev scope\n    const scope = this.getScope().clone();\n    this._stack.push({\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * Pop a scope from the stack.\n   */\n   _popScope() {\n    if (this._stack.length <= 1) return false;\n    return !!this._stack.pop();\n  }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack() {\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n\n  return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope(callback) {\n  return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope(scope, callback) {\n  const stack = getAsyncContextStack();\n  return stack.withScope(() => {\n    stack.getStackTop().scope = scope;\n    return callback(scope);\n  });\n}\n\nfunction withIsolationScope(callback) {\n  return getAsyncContextStack().withScope(() => {\n    return callback(getAsyncContextStack().getIsolationScope());\n  });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nfunction getStackAsyncContextStrategy() {\n  return {\n    withIsolationScope,\n    withScope,\n    withSetScope,\n    withSetIsolationScope: (_isolationScope, callback) => {\n      return withIsolationScope(callback);\n    },\n    getCurrentScope: () => getAsyncContextStack().getScope(),\n    getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n  };\n}\n\nexport { AsyncContextStack, getStackAsyncContextStrategy };\n//# sourceMappingURL=stackStrategy.js.map\n","import { getMainCarrier, getSentryCarrier } from '../carrier.js';\nimport { getStackAsyncContextStrategy } from './stackStrategy.js';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n  sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nfunction getAsyncContextStrategy(carrier) {\n  const sentry = getSentryCarrier(carrier);\n\n  if (sentry.acs) {\n    return sentry.acs;\n  }\n\n  // Otherwise, use the default one (stack)\n  return getStackAsyncContextStrategy();\n}\n\nexport { getAsyncContextStrategy, setAsyncContextStrategy };\n//# sourceMappingURL=index.js.map\n","import { getAsyncContextStrategy } from './asyncContext/index.js';\nimport { getMainCarrier, getGlobalSingleton } from './carrier.js';\nimport { Scope } from './scope.js';\nimport { generateSpanId } from './utils/propagationContext.js';\n\n/**\n * Get the currently active scope.\n */\nfunction getCurrentScope() {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current execution context.\n */\nfunction getIsolationScope() {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nfunction getGlobalScope() {\n  return getGlobalSingleton('globalScope', () => new Scope());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\n\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nfunction withScope(\n  ...rest\n) {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n\n    if (!scope) {\n      return acs.withScope(callback);\n    }\n\n    return acs.withSetScope(scope, callback);\n  }\n\n  return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\n\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nfunction withIsolationScope(\n  ...rest\n\n) {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [isolationScope, callback] = rest;\n\n    if (!isolationScope) {\n      return acs.withIsolationScope(callback);\n    }\n\n    return acs.withSetIsolationScope(isolationScope, callback);\n  }\n\n  return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n  return getCurrentScope().getClient();\n}\n\n/**\n * Get a trace context for the given scope.\n */\nfunction getTraceContextFromScope(scope) {\n  const propagationContext = scope.getPropagationContext();\n\n  const { traceId, parentSpanId, propagationSpanId } = propagationContext;\n\n  const traceContext = {\n    trace_id: traceId,\n    span_id: propagationSpanId || generateSpanId(),\n  };\n\n  if (parentSpanId) {\n    traceContext.parent_span_id = parentSpanId;\n  }\n\n  return traceContext;\n}\n\nexport { getClient, getCurrentScope, getGlobalScope, getIsolationScope, getTraceContextFromScope, withIsolationScope, withScope };\n//# sourceMappingURL=currentScopes.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { consoleSandbox, debug } from './debug-logger.js';\n\n/** Regular expression used to extract org ID from a DSN host. */\nconst ORG_ID_REGEX = /^o(\\d+)\\./;\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)((?:\\[[:.%\\w]+\\]|[\\w.-]+))(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol) {\n  return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nfunction dsnToString(dsn, withPassword = false) {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nfunction dsnFromString(str) {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\n    return undefined;\n  }\n\n  const [protocol, publicKey, pass = '', host = '', port = '', lastPath = ''] = match.slice(1);\n  let path = '';\n  let projectId = lastPath;\n\n  const split = projectId.split('/');\n  if (split.length > 1) {\n    path = split.slice(0, -1).join('/');\n    projectId = split.pop() ;\n  }\n\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol , publicKey });\n}\n\nfunction dsnFromComponents(components) {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || '',\n    pass: components.pass || '',\n    host: components.host,\n    port: components.port || '',\n    path: components.path || '',\n    projectId: components.projectId,\n  };\n}\n\nfunction validateDsn(dsn) {\n  if (!DEBUG_BUILD) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents = ['protocol', 'publicKey', 'host', 'projectId'];\n  const hasMissingRequiredComponent = requiredComponents.find(component => {\n    if (!dsn[component]) {\n      debug.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    debug.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    debug.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    debug.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Extract the org ID from a DSN host.\n *\n * @param host The host from a DSN\n * @returns The org ID if found, undefined otherwise\n */\nfunction extractOrgIdFromDsnHost(host) {\n  const match = host.match(ORG_ID_REGEX);\n\n  return match?.[1];\n}\n\n/**\n *  Returns the organization ID of the client.\n *\n *  The organization ID is extracted from the DSN. If the client options include a `orgId`, this will always take precedence.\n */\nfunction extractOrgIdFromClient(client) {\n  const options = client.getOptions();\n\n  const { host } = client.getDsn() || {};\n\n  let org_id;\n\n  if (options.orgId) {\n    org_id = String(options.orgId);\n  } else if (host) {\n    org_id = extractOrgIdFromDsnHost(host);\n  }\n\n  return org_id;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nfunction makeDsn(from) {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n\nexport { dsnFromString, dsnToString, extractOrgIdFromClient, extractOrgIdFromDsnHost, makeDsn };\n//# sourceMappingURL=dsn.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { notifyEventProcessors } from '../eventProcessors.js';\nimport { Scope } from '../scope.js';\nimport { getFilenameToDebugIdMap } from './debug-ids.js';\nimport { uuid4, addExceptionMechanism } from './misc.js';\nimport { normalize } from './normalize.js';\nimport { getCombinedScopeData, applyScopeDataToEvent } from './scopeData.js';\nimport { truncate } from './string.js';\nimport { resolvedSyncPromise } from './syncpromise.js';\nimport { dateTimestampInSeconds } from './time.js';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nfunction prepareEvent(\n  options,\n  event,\n  hint,\n  scope,\n  client,\n  isolationScope,\n) {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n  const prepared = {\n    ...event,\n    event_id: event.event_id || hint.event_id || uuid4(),\n    timestamp: event.timestamp || dateTimestampInSeconds(),\n  };\n  const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  if (client) {\n    client.emit('applyFrameMetadata', event);\n  }\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n\n  // If we have scope given to us, use it as the base for further modifications.\n  // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n  const finalScope = getFinalScope(scope, hint.captureContext);\n\n  if (hint.mechanism) {\n    addExceptionMechanism(prepared, hint.mechanism);\n  }\n\n  const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Scope.addEventProcessor} gets the finished prepared event.\n  // Merge scope data together\n  const data = getCombinedScopeData(isolationScope, finalScope);\n\n  const attachments = [...(hint.attachments || []), ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n\n  applyScopeDataToEvent(prepared, data);\n\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors,\n  ];\n\n  // Skip event processors for internal exceptions to prevent recursion\n  const isInternalException = hint.data && (hint.data ).__sentry__ === true;\n  const result = isInternalException\n    ? resolvedSyncPromise(prepared)\n    : notifyEventProcessors(eventProcessors, prepared, hint);\n\n  return result.then(evt => {\n    if (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n *\n * Only exported for tests.\n *\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n  const { environment, release, dist, maxValueLength } = options;\n\n  // empty strings do not make sense for environment, release, and dist\n  // so we handle them the same as if they were not provided\n  event.environment = event.environment || environment || DEFAULT_ENVIRONMENT;\n\n  if (!event.release && release) {\n    event.release = release;\n  }\n\n  if (!event.dist && dist) {\n    event.dist = dist;\n  }\n\n  const request = event.request;\n  if (request?.url && maxValueLength) {\n    request.url = truncate(request.url, maxValueLength);\n  }\n\n  if (maxValueLength) {\n    event.exception?.values?.forEach(exception => {\n      if (exception.value) {\n        // Truncates error messages\n        exception.value = truncate(exception.value, maxValueLength);\n      }\n    });\n  }\n}\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n  event.exception?.values?.forEach(exception => {\n    exception.stacktrace?.frames?.forEach(frame => {\n      if (frame.filename) {\n        frame.debug_id = filenameDebugIdMap[frame.filename];\n      }\n    });\n  });\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap = {};\n  event.exception?.values?.forEach(exception => {\n    exception.stacktrace?.frames?.forEach(frame => {\n      if (frame.debug_id) {\n        if (frame.abs_path) {\n          filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n        } else if (frame.filename) {\n          filenameDebugIdMap[frame.filename] = frame.debug_id;\n        }\n        delete frame.debug_id;\n      }\n    });\n  });\n\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n    images.push({\n      type: 'sourcemap',\n      code_file: filename,\n      debug_id,\n    });\n  });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event, integrationNames) {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n  }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event, depth, maxBreadth) {\n  if (!event) {\n    return null;\n  }\n\n  const normalized = {\n    ...event,\n    ...(event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map(b => ({\n        ...b,\n        ...(b.data && {\n          data: normalize(b.data, depth, maxBreadth),\n        }),\n      })),\n    }),\n    ...(event.user && {\n      user: normalize(event.user, depth, maxBreadth),\n    }),\n    ...(event.contexts && {\n      contexts: normalize(event.contexts, depth, maxBreadth),\n    }),\n    ...(event.extra && {\n      extra: normalize(event.extra, depth, maxBreadth),\n    }),\n  };\n\n  // event.contexts.trace stores information about a Transaction. Similarly,\n  // event.spans[] stores information about child Spans. Given that a\n  // Transaction is conceptually a Span, normalization should apply to both\n  // Transactions and Spans consistently.\n  // For now the decision is to skip normalization of Transactions and Spans,\n  // so this block overwrites the normalized event to add back the original\n  // Transaction information prior to normalization.\n  if (event.contexts?.trace && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\n  if (event.spans) {\n    normalized.spans = event.spans.map(span => {\n      return {\n        ...span,\n        ...(span.data && {\n          data: normalize(span.data, depth, maxBreadth),\n        }),\n      };\n    });\n  }\n\n  // event.contexts.flags (FeatureFlagContext) stores context for our feature\n  // flag integrations. It has a greater nesting depth than our other typed\n  // Contexts, so we re-normalize with a fixed depth of 3 here. We do not want\n  // to skip this in case of conflicting, user-provided context.\n  if (event.contexts?.flags && normalized.contexts) {\n    normalized.contexts.flags = normalize(event.contexts.flags, 3, maxBreadth);\n  }\n\n  return normalized;\n}\n\nfunction getFinalScope(scope, captureContext) {\n  if (!captureContext) {\n    return scope;\n  }\n\n  const finalScope = scope ? scope.clone() : new Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nfunction parseEventHintOrCaptureContext(\n  hint,\n) {\n  if (!hint) {\n    return undefined;\n  }\n\n  // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint,\n    };\n  }\n\n  return hint;\n}\n\nfunction hintIsScopeOrFunction(hint) {\n  return hint instanceof Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n  'user',\n  'level',\n  'extra',\n  'contexts',\n  'tags',\n  'fingerprint',\n  'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n  return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\nexport { applyClientOptions, applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { getIsolationScope, getCurrentScope, getClient, withIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { closeSession, makeSession, updateSession } from './session.js';\nimport { startNewTrace } from './tracing/trace.js';\nimport { debug } from './utils/debug-logger.js';\nimport { isThenable } from './utils/is.js';\nimport { uuid4 } from './utils/misc.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\nimport { getCombinedScopeData } from './utils/scopeData.js';\nimport { timestampInSeconds } from './utils/time.js';\nimport { GLOBAL_OBJ } from './utils/worldwide.js';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureException(exception, hint) {\n  return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nfunction captureMessage(message, captureContext) {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const hint = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  return getCurrentScope().captureMessage(message, level, hint);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nfunction captureEvent(event, hint) {\n  return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\nfunction setContext(name, context) {\n  getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nfunction setExtras(extras) {\n  getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nfunction setExtra(key, extra) {\n  getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nfunction setTags(tags) {\n  getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nfunction setTag(key, value) {\n  getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nfunction setUser(user) {\n  getIsolationScope().setUser(user);\n}\n\n/**\n * Sets the conversation ID for the current isolation scope.\n *\n * @param conversationId The conversation ID to set. Pass `null` or `undefined` to unset the conversation ID.\n */\nfunction setConversationId(conversationId) {\n  getIsolationScope().setConversationId(conversationId);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nfunction lastEventId() {\n  return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\n  const scope = getCurrentScope();\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && debug.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    DEBUG_BUILD && debug.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param callback Callback to be monitored\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction withMonitor(\n  monitorSlug,\n  callback,\n  upsertMonitorConfig,\n) {\n  function runCallback() {\n    const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n    const now = timestampInSeconds();\n\n    function finishCheckIn(status) {\n      captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n    }\n    // Default behavior without isolateTrace\n    let maybePromiseResult;\n    try {\n      maybePromiseResult = callback();\n    } catch (e) {\n      finishCheckIn('error');\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      return maybePromiseResult.then(\n        r => {\n          finishCheckIn('ok');\n          return r;\n        },\n        e => {\n          finishCheckIn('error');\n          throw e;\n        },\n      ) ;\n    }\n    finishCheckIn('ok');\n\n    return maybePromiseResult;\n  }\n\n  return withIsolationScope(() => (upsertMonitorConfig?.isolateTrace ? startNewTrace(runCallback) : runCallback()));\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function flush(timeout) {\n  const client = getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  DEBUG_BUILD && debug.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function close(timeout) {\n  const client = getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  DEBUG_BUILD && debug.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nfunction isInitialized() {\n  return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nfunction isEnabled() {\n  const client = getClient();\n  return client?.getOptions().enabled !== false && !!client?.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nfunction addEventProcessor(callback) {\n  getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nfunction startSession(context) {\n  const isolationScope = getIsolationScope();\n\n  const { user } = getCombinedScopeData(isolationScope, getCurrentScope());\n\n  // Will fetch userAgent if called from browser sdk\n  const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n  const session = makeSession({\n    user,\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession?.status === 'ok') {\n    updateSession(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nfunction endSession() {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate() {\n  const isolationScope = getIsolationScope();\n  const client = getClient();\n  const session = isolationScope.getSession();\n  if (session && client) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nfunction captureSession(end = false) {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n\nexport { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setConversationId, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor };\n//# sourceMappingURL=exports.js.map\n","import { makeDsn, dsnToString } from './utils/dsn.js';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn) {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n  const port = dsn.port ? `:${dsn.port}` : '';\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn) {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn, sdkInfo) {\n  const params = {\n    sentry_version: SENTRY_API_VERSION,\n  };\n\n  if (dsn.publicKey) {\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    params.sentry_key = dsn.publicKey;\n  }\n\n  if (sdkInfo) {\n    params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`;\n  }\n\n  return new URLSearchParams(params).toString();\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nfunction getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nfunction getReportDialogEndpoint(dsnLike, dialogOptions) {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'onClose') {\n      continue;\n    }\n\n    if (key === 'user') {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] )}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, withScope, addExceptionTypeValue, addExceptionMechanism, captureException, getLocationHref } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n  return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n  // onerror should trigger before setTimeout\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nfunction wrap(\n  fn,\n  options\n\n = {},\n) {\n  // for future readers what this does is wrap a function and then create\n  // a bi-directional wrapping between them.\n  //\n  // example: wrapped = wrap(original);\n  //  original.__sentry_wrapped__ -> wrapped\n  //  wrapped.__sentry_original__ -> original\n\n  function isFunction(fn) {\n    return typeof fn === 'function';\n  }\n\n  if (!isFunction(fn)) {\n    return fn;\n  }\n\n  try {\n    // if we're dealing with a function that was previously wrapped, return\n    // the original wrapper.\n    const wrapper = (fn ).__sentry_wrapped__;\n    if (wrapper) {\n      if (typeof wrapper === 'function') {\n        return wrapper;\n      } else {\n        // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n        // that something messed with it. In that case we want to return the originally passed function.\n        return fn;\n      }\n    }\n\n    // We don't wanna wrap it twice\n    if (getOriginalFunction(fn)) {\n      return fn;\n    }\n  } catch {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    // Bail on wrapping and return the function as-is (defers to window.onerror).\n    return fn;\n  }\n\n  // Wrap the function itself\n  // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n  const sentryWrapped = function ( ...args) {\n    try {\n      // Also wrap arguments that are themselves functions\n      const wrappedArguments = args.map(arg => wrap(arg, options));\n\n      // Attempt to invoke user-land function\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n      //       means the sentry.javascript SDK caught an error invoking your application code. This\n      //       is expected behavior and NOT indicative of a bug with sentry.javascript.\n      return fn.apply(this, wrappedArguments);\n    } catch (ex) {\n      ignoreNextOnError();\n\n      withScope(scope => {\n        scope.addEventProcessor(event => {\n          if (options.mechanism) {\n            addExceptionTypeValue(event, undefined, undefined);\n            addExceptionMechanism(event, options.mechanism);\n          }\n\n          event.extra = {\n            ...event.extra,\n            arguments: args,\n          };\n\n          return event;\n        });\n\n        // no need to add a mechanism here, we already add it via an event processor above\n        captureException(ex);\n      });\n\n      throw ex;\n    }\n  } ;\n\n  // Wrap the wrapped function in a proxy, to ensure any other properties of the original function remain available\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property ] = fn[property ];\n      }\n    }\n  } catch {\n    // Accessing some objects may throw\n    // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n  }\n\n  // Signal that this function has been wrapped/filled already\n  // for both debugging and to prevent it to being wrapped/filled twice\n  markFunctionWrapped(sentryWrapped, fn);\n\n  addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n  // Restore original function name (not all browsers allow that)\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name');\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, 'name', {\n        get() {\n          return fn.name;\n        },\n      });\n    }\n  } catch {\n    // This may throw if e.g. the descriptor does not exist, or a browser does not allow redefining `name`.\n    // to save some bytes we simply try-catch this\n  }\n\n  return sentryWrapped;\n}\n\n/**\n * Get HTTP request data from the current page.\n */\nfunction getHttpRequestData() {\n  // grab as much info as exists and add it to the event\n  const url = getLocationHref();\n  const { referrer } = WINDOW.document || {};\n  const { userAgent } = WINDOW.navigator || {};\n\n  const headers = {\n    ...(referrer && { Referer: referrer }),\n    ...(userAgent && { 'User-Agent': userAgent }),\n  };\n  const request = {\n    url,\n    headers,\n  };\n\n  return request;\n}\n\nexport { WINDOW, getHttpRequestData, ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { debug, getCurrentScope, getClient, lastEventId, getReportDialogEndpoint } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './helpers.js';\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the current scope.\n */\nfunction showReportDialog(options = {}) {\n  const optionalDocument = WINDOW.document ;\n  const injectionPoint = optionalDocument?.head || optionalDocument?.body;\n\n  // doesn't work without a document (React Native)\n  if (!injectionPoint) {\n    DEBUG_BUILD && debug.error('[showReportDialog] Global document not defined');\n    return;\n  }\n\n  const scope = getCurrentScope();\n  const client = getClient();\n  const dsn = client?.getDsn();\n\n  if (!dsn) {\n    DEBUG_BUILD && debug.error('[showReportDialog] DSN not configured');\n    return;\n  }\n\n  const mergedOptions = {\n    ...options,\n    user: {\n      ...scope.getUser(),\n      ...options.user,\n    },\n    eventId: options.eventId || lastEventId(),\n  };\n\n  const script = WINDOW.document.createElement('script');\n  script.async = true;\n  script.crossOrigin = 'anonymous';\n  script.src = getReportDialogEndpoint(dsn, mergedOptions);\n\n  const { onLoad, onClose } = mergedOptions;\n\n  if (onLoad) {\n    script.onload = onLoad;\n  }\n\n  if (onClose) {\n    const reportDialogClosedMessageHandler = (event) => {\n      if (event.data === '__sentry_reportdialog_closed__') {\n        try {\n          onClose();\n        } finally {\n          WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n        }\n      }\n    };\n    WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n  }\n\n  injectionPoint.appendChild(script);\n}\n\nexport { showReportDialog };\n//# sourceMappingURL=report-dialog.js.map\n","import { GrapherInterface } from \"@ourworldindata/types\"\nimport * as _ from \"lodash-es\"\nimport {\n    excludeUndefined,\n    omitUndefinedValuesRecursive,\n    omitEmptyObjectsRecursive,\n    traverseObjects,\n    merge,\n} from \"./Util\"\nimport * as Sentry from \"@sentry/browser\"\n\nconst REQUIRED_KEYS = [\"$schema\", \"dimensions\"]\n\nconst KEYS_EXCLUDED_FROM_INHERITANCE = [\n    \"$schema\",\n    \"id\",\n    \"slug\",\n    \"version\",\n    \"isPublished\",\n]\n\nexport function mergeGrapherConfigs(\n    ...grapherConfigs: GrapherInterface[]\n): GrapherInterface {\n    const configsToMerge = grapherConfigs.filter((c) => !_.isEmpty(c))\n\n    // return early if there are no configs to merge\n    if (configsToMerge.length === 0) return {}\n    if (configsToMerge.length === 1) return configsToMerge[0]\n\n    // warn if one of the configs is missing a schema version\n    const configsWithoutSchema = configsToMerge.filter(\n        (c) => c[\"$schema\"] === undefined\n    )\n    if (configsWithoutSchema.length > 0) {\n        const configsJson = JSON.stringify(configsWithoutSchema, null, 2)\n        console.warn(\n            `About to merge Grapher configs with missing schema information: ${configsJson}`\n        )\n    }\n\n    // abort if the grapher configs have different schema versions\n    const uniqueSchemas = _.uniq(\n        excludeUndefined(configsToMerge.map((c) => c[\"$schema\"]))\n    )\n    if (uniqueSchemas.length > 1) {\n        const message = `Merging Grapher configs with different schema versions. This may lead to unexpected behavior. Found: ${uniqueSchemas.join(\n            \", \"\n        )}`\n        console.warn(message)\n        Sentry.captureMessage(message, {\n            level: \"warning\",\n        })\n    }\n\n    // keys that should not be inherited are removed from all but the last config\n    const cleanedConfigs = configsToMerge.map((config, index) => {\n        if (index === configsToMerge.length - 1) return config\n        return _.omit(config, KEYS_EXCLUDED_FROM_INHERITANCE)\n    })\n\n    return merge(\n        ...(cleanedConfigs as [GrapherInterface, ...GrapherInterface[]])\n    )\n}\n\nexport function diffGrapherConfigs(\n    config: GrapherInterface,\n    reference: GrapherInterface\n): GrapherInterface {\n    const keepKeys = [...REQUIRED_KEYS, ...KEYS_EXCLUDED_FROM_INHERITANCE]\n    const keep = _.pick(config, keepKeys)\n\n    const diffed = omitEmptyObjectsRecursive(\n        omitUndefinedValuesRecursive(\n            traverseObjects(config, reference, (value, refValue) => {\n                if (refValue === undefined) return value\n                if (!_.isEqual(value, refValue)) return value\n                return undefined\n            })\n        )\n    )\n\n    return { ...diffed, ...keep }\n}\n","import {\n    Choice,\n    ChoicesEnriched,\n    DimensionEnriched,\n    IndicatorsAfterPreProcessing,\n    MultiDimDimensionChoices,\n    View,\n    ViewEnriched,\n    OwidChartDimensionInterface,\n    DimensionProperty,\n    MultiDimDataPageConfigEnriched,\n    OwidVariableWithSourceAndDimension,\n} from \"@ourworldindata/types\"\nimport * as _ from \"lodash-es\"\nimport { merge } from \"./Util\"\n\ninterface FilterToAvailableResult {\n    selectedChoices: MultiDimDimensionChoices\n    dimensionsWithAvailableChoices: Record<string, DimensionEnriched>\n}\n\nexport class MultiDimDataPageConfig {\n    private constructor(\n        public readonly config: MultiDimDataPageConfigEnriched\n    ) {}\n\n    static fromJson(jsonString: string): MultiDimDataPageConfig {\n        return new MultiDimDataPageConfig(JSON.parse(jsonString))\n    }\n\n    static fromObject(\n        obj: MultiDimDataPageConfigEnriched\n    ): MultiDimDataPageConfig {\n        return new MultiDimDataPageConfig(obj)\n    }\n\n    private static getEnrichedChoicesFields(\n        choices: Choice[]\n    ): ChoicesEnriched {\n        return {\n            choices,\n            choicesBySlug: _.keyBy(choices, \"slug\"),\n            choicesByGroup: _.groupBy(choices, \"group\"),\n        }\n    }\n\n    get dimensions(): Record<string, DimensionEnriched> {\n        const dimensionsEnriched = this.config.dimensions.map((dimension) => ({\n            ...dimension,\n            ...MultiDimDataPageConfig.getEnrichedChoicesFields(\n                dimension.choices\n            ),\n        }))\n        return _.keyBy(dimensionsEnriched, \"slug\")\n    }\n\n    filterViewsByDimensions(\n        dimensions: MultiDimDimensionChoices\n    ): ViewEnriched[] {\n        return this.config.views.filter((view) => {\n            for (const [dimensionSlug, choiceSlug] of Object.entries(\n                dimensions\n            )) {\n                if (view.dimensions[dimensionSlug] !== choiceSlug) return false\n            }\n            return true\n        })\n    }\n\n    // This'll only ever find one or zero views, and will throw an error\n    // if more than one matching views were found\n    findViewByDimensions(\n        dimensions: MultiDimDimensionChoices\n    ): ViewEnriched | undefined {\n        const matchingViews = this.filterViewsByDimensions(dimensions)\n        if (matchingViews.length === 0) return undefined\n        if (matchingViews.length > 1) {\n            throw new Error(\n                `Multiple views found for dimensions ${JSON.stringify(\n                    dimensions\n                )}`\n            )\n        }\n        return matchingViews[0]\n    }\n\n    /**\n     * This checks if matching views are available for the selected choices, and otherwise\n     * adapts them in such a way that they are available, in the following way:\n     * - Go through the choices left-to-right. The current dimension we're looking at is called `cur`.\n     * - If there is at least one available view for choices[leftmost, ..., cur], continue.\n     * - Otherwise, for dimension `cur`, find the first choice that has at least one available view.\n     *\n     * The method returns two values:\n     * - `selectedChoices` is the updated version of the input `selectedChoices`, where choices have been adapted to make sure there are available views. It is fully-qualified, i.e. it has choices for all dimensions.\n     * - `dimensionsWithAvailableChoices` indicates for each dimension which choices are available, and excludes the ones that are excluded by choices left of it.\n     *\n     * - @marcelgerber, 2024-07-22\n     */\n    filterToAvailableChoices(\n        selectedChoices: MultiDimDimensionChoices\n    ): FilterToAvailableResult {\n        const updatedSelectedChoices: MultiDimDimensionChoices = {}\n        const dimensionsWithAvailableChoices: Record<\n            string,\n            DimensionEnriched\n        > = {}\n        for (const [currentDimSlug, currentDim] of Object.entries(\n            this.dimensions\n        )) {\n            const availableViewsBeforeSelection = this.filterViewsByDimensions(\n                updatedSelectedChoices\n            )\n            if (\n                selectedChoices[currentDimSlug] &&\n                currentDim.choicesBySlug[selectedChoices[currentDimSlug]]\n            ) {\n                updatedSelectedChoices[currentDimSlug] =\n                    selectedChoices[currentDimSlug]\n            } else {\n                updatedSelectedChoices[currentDimSlug] =\n                    availableViewsBeforeSelection[0].dimensions[currentDimSlug]\n            }\n\n            const availableViewsAfterSelection = this.filterViewsByDimensions(\n                updatedSelectedChoices\n            )\n            if (availableViewsAfterSelection.length === 0) {\n                // If there are no views available after this selection, choose the first available view before this choice and update to its choice\n                updatedSelectedChoices[currentDimSlug] =\n                    availableViewsBeforeSelection[0].dimensions[currentDimSlug]\n            }\n\n            // Find all the available choices we can show for this dimension - these are all\n            // the ones that are possible for this dimension with all of the previous choices\n            // (i.e., left of this dimension) in mind.\n            const availableChoicesForDimension = Object.values(\n                currentDim.choices\n            ).filter((choice) =>\n                availableViewsBeforeSelection.some(\n                    (view) => view.dimensions[currentDimSlug] === choice.slug\n                )\n            )\n            dimensionsWithAvailableChoices[currentDimSlug] = {\n                ...currentDim,\n                ...MultiDimDataPageConfig.getEnrichedChoicesFields(\n                    availableChoicesForDimension\n                ),\n            }\n        }\n\n        return {\n            selectedChoices: updatedSelectedChoices,\n            dimensionsWithAvailableChoices,\n        }\n    }\n\n    mergeViewMetadata(\n        dimensions: MultiDimDimensionChoices,\n        variableMetadata: OwidVariableWithSourceAndDimension\n    ): OwidVariableWithSourceAndDimension {\n        const mdimConfigView = this.findViewByDimensions(dimensions)\n\n        return merge(\n            variableMetadata,\n            this.config.metadata ?? {},\n            mdimConfigView?.metadata ?? {}\n        )\n    }\n\n    findViewDimensionsByConfigId(\n        viewConfigId: string\n    ): MultiDimDimensionChoices | null {\n        const view = this.config.views.find(\n            (v) => v.fullConfigId === viewConfigId\n        )\n        return view?.dimensions ?? null\n    }\n\n    static viewToDimensionsConfig(\n        view?: View<IndicatorsAfterPreProcessing>\n    ): OwidChartDimensionInterface[] {\n        const dimensions: OwidChartDimensionInterface[] = []\n        if (!view?.indicators) return dimensions\n        if (view.indicators.y) {\n            dimensions.push(\n                ...view.indicators.y.map(({ id, display }) => ({\n                    property: DimensionProperty.y,\n                    variableId: id,\n                    display,\n                }))\n            )\n        }\n        if (view.indicators.x) {\n            dimensions.push({\n                property: DimensionProperty.x,\n                variableId: view.indicators.x.id,\n                display: view.indicators.x.display,\n            })\n        }\n        if (view.indicators.size) {\n            dimensions.push({\n                property: DimensionProperty.size,\n                variableId: view.indicators.size.id,\n                display: view.indicators.size.display,\n            })\n        }\n        if (view.indicators.color) {\n            dimensions.push({\n                property: DimensionProperty.color,\n                variableId: view.indicators.color.id,\n                display: view.indicators.color.display,\n            })\n        }\n        return dimensions\n    }\n}\n\nexport const extractMultiDimChoicesFromSearchParams = (\n    searchParams: URLSearchParams,\n    config: MultiDimDataPageConfig\n): MultiDimDimensionChoices => {\n    const dimensions = config.dimensions\n    const dimensionChoices: MultiDimDimensionChoices = {}\n    for (const [key, value] of searchParams.entries()) {\n        if (key in dimensions) {\n            dimensionChoices[key] = value\n        }\n    }\n    return dimensionChoices\n}\n\nexport function searchParamsToMultiDimView(\n    config: MultiDimDataPageConfigEnriched,\n    searchParams: URLSearchParams\n): ViewEnriched {\n    const mdimConfig = MultiDimDataPageConfig.fromObject(config)\n    let dimensions = extractMultiDimChoicesFromSearchParams(\n        searchParams,\n        mdimConfig\n    )\n    if (_.isEmpty(dimensions)) {\n        // Get the default dimensions.\n        dimensions = mdimConfig.filterToAvailableChoices({}).selectedChoices\n    }\n    const view = mdimConfig.findViewByDimensions(dimensions)\n    if (!view) {\n        throw new Error(\n            `No view found for dimensions ${JSON.stringify(dimensions)}`\n        )\n    }\n    return view\n}\n","// https://github.com/farzher/fuzzysort v3.0.2\r\n\r\n// UMD (Universal Module Definition) for fuzzysort\r\n;((root, UMD) => {\r\n  if(typeof define === 'function' && define.amd) define([], UMD)\r\n  else if(typeof module === 'object' && module.exports) module.exports = UMD()\r\n  else root['fuzzysort'] = UMD()\r\n})(this, _ => {\r\n  'use strict'\r\n\r\n  var single = (search, target) => {\r\n    if(!search || !target) return NULL\r\n\r\n    var preparedSearch = getPreparedSearch(search)\r\n    if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n    var searchBitflags = preparedSearch.bitflags\r\n    if((searchBitflags & target._bitflags) !== searchBitflags) return NULL\r\n\r\n    return algorithm(preparedSearch, target)\r\n  }\r\n\r\n  var go = (search, targets, options) => {\r\n    if(!search) return options?.all ? all(targets, options) : noResults\r\n\r\n    var preparedSearch = getPreparedSearch(search)\r\n    var searchBitflags = preparedSearch.bitflags\r\n    var containsSpace  = preparedSearch.containsSpace\r\n\r\n    var threshold = denormalizeScore( options?.threshold || 0 )\r\n    var limit     = options?.limit || INFINITY\r\n\r\n    var resultsLen = 0; var limitedCount = 0\r\n    var targetsLen = targets.length\r\n\r\n    function push_result(result) {\r\n      if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n      else {\r\n        ++limitedCount\r\n        if(result._score > q.peek()._score) q.replaceTop(result)\r\n      }\r\n    }\r\n\r\n    // This code is copy/pasted 3 times for performance reasons [options.key, options.keys, no keys]\r\n\r\n    // options.key\r\n    if(options?.key) {\r\n      var key = options.key\r\n      for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]\r\n        var target = getValue(obj, key)\r\n        if(!target) continue\r\n        if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n        if((searchBitflags & target._bitflags) !== searchBitflags) continue\r\n        var result = algorithm(preparedSearch, target)\r\n        if(result === NULL) continue\r\n        if(result._score < threshold) continue\r\n\r\n        result.obj = obj\r\n        push_result(result)\r\n      }\r\n\r\n    // options.keys\r\n    } else if(options?.keys) {\r\n      var keys = options.keys\r\n      var keysLen = keys.length\r\n\r\n      outer: for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]\r\n\r\n        { // early out based on bitflags\r\n          var keysBitflags = 0\r\n          for (var keyI = 0; keyI < keysLen; ++keyI) {\r\n            var key = keys[keyI]\r\n            var target = getValue(obj, key)\r\n            if(!target) { tmpTargets[keyI] = noTarget; continue }\r\n            if(!isPrepared(target)) target = getPrepared(target)\r\n            tmpTargets[keyI] = target\r\n\r\n            keysBitflags |= target._bitflags\r\n          }\r\n\r\n          if((searchBitflags & keysBitflags) !== searchBitflags) continue\r\n        }\r\n\r\n        if(containsSpace) for(let i=0; i<preparedSearch.spaceSearches.length; i++) keysSpacesBestScores[i] = NEGATIVE_INFINITY\r\n\r\n        for (var keyI = 0; keyI < keysLen; ++keyI) {\r\n          target = tmpTargets[keyI]\r\n          if(target === noTarget) { tmpResults[keyI] = noTarget; continue }\r\n\r\n          tmpResults[keyI] = algorithm(preparedSearch, target, /*allowSpaces=*/false, /*allowPartialMatch=*/containsSpace)\r\n          if(tmpResults[keyI] === NULL) { tmpResults[keyI] = noTarget; continue }\r\n\r\n          // todo: this seems weird and wrong. like what if our first match wasn't good. this should just replace it instead of averaging with it\r\n          // if our second match isn't good we ignore it instead of averaging with it\r\n          if(containsSpace) for(let i=0; i<preparedSearch.spaceSearches.length; i++) {\r\n            if(allowPartialMatchScores[i] > -1000) {\r\n              if(keysSpacesBestScores[i] > NEGATIVE_INFINITY) {\r\n                var tmp = (keysSpacesBestScores[i] + allowPartialMatchScores[i]) / 4/*bonus score for having multiple matches*/\r\n                if(tmp > keysSpacesBestScores[i]) keysSpacesBestScores[i] = tmp\r\n              }\r\n            }\r\n            if(allowPartialMatchScores[i] > keysSpacesBestScores[i]) keysSpacesBestScores[i] = allowPartialMatchScores[i]\r\n          }\r\n        }\r\n\r\n        if(containsSpace) {\r\n          for(let i=0; i<preparedSearch.spaceSearches.length; i++) { if(keysSpacesBestScores[i] === NEGATIVE_INFINITY) continue outer }\r\n        } else {\r\n          var hasAtLeast1Match = false\r\n          for(let i=0; i < keysLen; i++) { if(tmpResults[i]._score !== NEGATIVE_INFINITY) { hasAtLeast1Match = true; break } }\r\n          if(!hasAtLeast1Match) continue\r\n        }\r\n\r\n        var objResults = new KeysResult(keysLen)\r\n        for(let i=0; i < keysLen; i++) { objResults[i] = tmpResults[i] }\r\n\r\n        if(containsSpace) {\r\n          var score = 0\r\n          for(let i=0; i<preparedSearch.spaceSearches.length; i++) score += keysSpacesBestScores[i]\r\n        } else {\r\n          // todo could rewrite this scoring to be more similar to when there's spaces\r\n          // if we match multiple keys give us bonus points\r\n          var score = NEGATIVE_INFINITY\r\n          for(let i=0; i<keysLen; i++) {\r\n            var result = objResults[i]\r\n            if(result._score > -1000) {\r\n              if(score > NEGATIVE_INFINITY) {\r\n                var tmp = (score + result._score) / 4/*bonus score for having multiple matches*/\r\n                if(tmp > score) score = tmp\r\n              }\r\n            }\r\n            if(result._score > score) score = result._score\r\n          }\r\n        }\r\n\r\n        objResults.obj = obj\r\n        objResults._score = score\r\n        if(options?.scoreFn) {\r\n          score = options.scoreFn(objResults)\r\n          if(!score) continue\r\n          score = denormalizeScore(score)\r\n          objResults._score = score\r\n        }\r\n\r\n        if(score < threshold) continue\r\n        push_result(objResults)\r\n      }\r\n\r\n    // no keys\r\n    } else {\r\n      for(var i = 0; i < targetsLen; ++i) { var target = targets[i]\r\n        if(!target) continue\r\n        if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n        if((searchBitflags & target._bitflags) !== searchBitflags) continue\r\n        var result = algorithm(preparedSearch, target)\r\n        if(result === NULL) continue\r\n        if(result._score < threshold) continue\r\n\r\n        push_result(result)\r\n      }\r\n    }\r\n\r\n    if(resultsLen === 0) return noResults\r\n    var results = new Array(resultsLen)\r\n    for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()\r\n    results.total = resultsLen + limitedCount\r\n    return results\r\n  }\r\n\r\n\r\n  // this is written as 1 function instead of 2 for minification. perf seems fine ...\r\n  // except when minified. the perf is very slow\r\n  var highlight = (result, open='<b>', close='</b>') => {\r\n    var callback = typeof open === 'function' ? open : undefined\r\n\r\n    var target      = result.target\r\n    var targetLen   = target.length\r\n    var indexes     = result.indexes\r\n    var highlighted = ''\r\n    var matchI      = 0\r\n    var indexesI    = 0\r\n    var opened      = false\r\n    var parts       = []\r\n\r\n    for(var i = 0; i < targetLen; ++i) { var char = target[i]\r\n      if(indexes[indexesI] === i) {\r\n        ++indexesI\r\n        if(!opened) { opened = true\r\n          if(callback) {\r\n            parts.push(highlighted); highlighted = ''\r\n          } else {\r\n            highlighted += open\r\n          }\r\n        }\r\n\r\n        if(indexesI === indexes.length) {\r\n          if(callback) {\r\n            highlighted += char\r\n            parts.push(callback(highlighted, matchI++)); highlighted = ''\r\n            parts.push(target.substr(i+1))\r\n          } else {\r\n            highlighted += char + close + target.substr(i+1)\r\n          }\r\n          break\r\n        }\r\n      } else {\r\n        if(opened) { opened = false\r\n          if(callback) {\r\n            parts.push(callback(highlighted, matchI++)); highlighted = ''\r\n          } else {\r\n            highlighted += close\r\n          }\r\n        }\r\n      }\r\n      highlighted += char\r\n    }\r\n\r\n    return callback ? parts : highlighted\r\n  }\r\n\r\n\r\n  var prepare = (target) => {\r\n    if(typeof target === 'number') target = ''+target\r\n    else if(typeof target !== 'string') target = ''\r\n    var info = prepareLowerInfo(target)\r\n    return new_result(target, {_targetLower:info._lower, _targetLowerCodes:info.lowerCodes, _bitflags:info.bitflags})\r\n  }\r\n\r\n  var cleanup = () => { preparedCache.clear(); preparedSearchCache.clear() }\r\n\r\n\r\n  // Below this point is only internal code\r\n  // Below this point is only internal code\r\n  // Below this point is only internal code\r\n  // Below this point is only internal code\r\n\r\n\r\n  class Result {\r\n    get ['indexes']() { return this._indexes.slice(0, this._indexes.len).sort((a,b)=>a-b) }\r\n    set ['indexes'](indexes) { return this._indexes = indexes }\r\n    ['highlight'](open, close) { return highlight(this, open, close) }\r\n    get ['score']() { return normalizeScore(this._score) }\r\n    set ['score'](score) { this._score = denormalizeScore(score) }\r\n  }\r\n\r\n  class KeysResult extends Array {\r\n    get ['score']() { return normalizeScore(this._score) }\r\n    set ['score'](score) { this._score = denormalizeScore(score) }\r\n  }\r\n\r\n  var new_result = (target, options) => {\r\n    const result = new Result()\r\n    result['target']             = target\r\n    result['obj']                = options.obj                   ?? NULL\r\n    result._score                = options._score                ?? NEGATIVE_INFINITY\r\n    result._indexes              = options._indexes              ?? []\r\n    result._targetLower          = options._targetLower          ?? ''\r\n    result._targetLowerCodes     = options._targetLowerCodes     ?? NULL\r\n    result._nextBeginningIndexes = options._nextBeginningIndexes ?? NULL\r\n    result._bitflags             = options._bitflags             ?? 0\r\n    return result\r\n  }\r\n\r\n\r\n  var normalizeScore = score => {\r\n    if(score === NEGATIVE_INFINITY) return 0\r\n    if(score > 1) return score\r\n    return Math.E ** ( ((-score + 1)**.04307 - 1) * -2)\r\n  }\r\n  var denormalizeScore = normalizedScore => {\r\n    if(normalizedScore === 0) return NEGATIVE_INFINITY\r\n    if(normalizedScore > 1) return normalizedScore\r\n    return 1 - Math.pow((Math.log(normalizedScore) / -2 + 1), 1 / 0.04307)\r\n  }\r\n\r\n\r\n  var prepareSearch = (search) => {\r\n    if(typeof search === 'number') search = ''+search\r\n    else if(typeof search !== 'string') search = ''\r\n    search = search.trim()\r\n    var info = prepareLowerInfo(search)\r\n\r\n    var spaceSearches = []\r\n    if(info.containsSpace) {\r\n      var searches = search.split(/\\s+/)\r\n      searches = [...new Set(searches)] // distinct\r\n      for(var i=0; i<searches.length; i++) {\r\n        if(searches[i] === '') continue\r\n        var _info = prepareLowerInfo(searches[i])\r\n        spaceSearches.push({lowerCodes:_info.lowerCodes, _lower:searches[i].toLowerCase(), containsSpace:false})\r\n      }\r\n    }\r\n\r\n    return {lowerCodes: info.lowerCodes, _lower: info._lower, containsSpace: info.containsSpace, bitflags: info.bitflags, spaceSearches: spaceSearches}\r\n  }\r\n\r\n\r\n\r\n  var getPrepared = (target) => {\r\n    if(target.length > 999) return prepare(target) // don't cache huge targets\r\n    var targetPrepared = preparedCache.get(target)\r\n    if(targetPrepared !== undefined) return targetPrepared\r\n    targetPrepared = prepare(target)\r\n    preparedCache.set(target, targetPrepared)\r\n    return targetPrepared\r\n  }\r\n  var getPreparedSearch = (search) => {\r\n    if(search.length > 999) return prepareSearch(search) // don't cache huge searches\r\n    var searchPrepared = preparedSearchCache.get(search)\r\n    if(searchPrepared !== undefined) return searchPrepared\r\n    searchPrepared = prepareSearch(search)\r\n    preparedSearchCache.set(search, searchPrepared)\r\n    return searchPrepared\r\n  }\r\n\r\n\r\n  var all = (targets, options) => {\r\n    var results = []; results.total = targets.length // this total can be wrong if some targets are skipped\r\n\r\n    var limit = options?.limit || INFINITY\r\n\r\n    if(options?.key) {\r\n      for(var i=0;i<targets.length;i++) { var obj = targets[i]\r\n        var target = getValue(obj, options.key)\r\n        if(target == NULL) continue\r\n        if(!isPrepared(target)) target = getPrepared(target)\r\n        var result = new_result(target.target, {_score: target._score, obj: obj})\r\n        results.push(result); if(results.length >= limit) return results\r\n      }\r\n    } else if(options?.keys) {\r\n      for(var i=0;i<targets.length;i++) { var obj = targets[i]\r\n        var objResults = new KeysResult(options.keys.length)\r\n        for (var keyI = options.keys.length - 1; keyI >= 0; --keyI) {\r\n          var target = getValue(obj, options.keys[keyI])\r\n          if(!target) { objResults[keyI] = noTarget; continue }\r\n          if(!isPrepared(target)) target = getPrepared(target)\r\n          target._score = NEGATIVE_INFINITY\r\n          target._indexes.len = 0\r\n          objResults[keyI] = target\r\n        }\r\n        objResults.obj = obj\r\n        objResults._score = NEGATIVE_INFINITY\r\n        results.push(objResults); if(results.length >= limit) return results\r\n      }\r\n    } else {\r\n      for(var i=0;i<targets.length;i++) { var target = targets[i]\r\n        if(target == NULL) continue\r\n        if(!isPrepared(target)) target = getPrepared(target)\r\n        target._score = NEGATIVE_INFINITY\r\n        target._indexes.len = 0\r\n        results.push(target); if(results.length >= limit) return results\r\n      }\r\n    }\r\n\r\n    return results\r\n  }\r\n\r\n\r\n  var algorithm = (preparedSearch, prepared, allowSpaces=false, allowPartialMatch=false) => {\r\n    if(allowSpaces===false && preparedSearch.containsSpace) return algorithmSpaces(preparedSearch, prepared, allowPartialMatch)\r\n\r\n    var searchLower      = preparedSearch._lower\r\n    var searchLowerCodes = preparedSearch.lowerCodes\r\n    var searchLowerCode  = searchLowerCodes[0]\r\n    var targetLowerCodes = prepared._targetLowerCodes\r\n    var searchLen        = searchLowerCodes.length\r\n    var targetLen        = targetLowerCodes.length\r\n    var searchI          = 0 // where we at\r\n    var targetI          = 0 // where you at\r\n    var matchesSimpleLen = 0\r\n\r\n    // very basic fuzzy match; to remove non-matching targets ASAP!\r\n    // walk through target. find sequential matches.\r\n    // if all chars aren't found then exit\r\n    for(;;) {\r\n      var isMatch = searchLowerCode === targetLowerCodes[targetI]\r\n      if(isMatch) {\r\n        matchesSimple[matchesSimpleLen++] = targetI\r\n        ++searchI; if(searchI === searchLen) break\r\n        searchLowerCode = searchLowerCodes[searchI]\r\n      }\r\n      ++targetI; if(targetI >= targetLen) return NULL // Failed to find searchI\r\n    }\r\n\r\n    var searchI = 0\r\n    var successStrict = false\r\n    var matchesStrictLen = 0\r\n\r\n    var nextBeginningIndexes = prepared._nextBeginningIndexes\r\n    if(nextBeginningIndexes === NULL) nextBeginningIndexes = prepared._nextBeginningIndexes = prepareNextBeginningIndexes(prepared.target)\r\n    targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]\r\n\r\n    // Our target string successfully matched all characters in sequence!\r\n    // Let's try a more advanced and strict test to improve the score\r\n    // only count it as a match if it's consecutive or a beginning character!\r\n    var backtrackCount = 0\r\n    if(targetI !== targetLen) for(;;) {\r\n      if(targetI >= targetLen) {\r\n        // We failed to find a good spot for this search char, go back to the previous search char and force it forward\r\n        if(searchI <= 0) break // We failed to push chars forward for a better match\r\n\r\n        ++backtrackCount; if(backtrackCount > 200) break // exponential backtracking is taking too long, just give up and return a bad match\r\n\r\n        --searchI\r\n        var lastMatch = matchesStrict[--matchesStrictLen]\r\n        targetI = nextBeginningIndexes[lastMatch]\r\n\r\n      } else {\r\n        var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]\r\n        if(isMatch) {\r\n          matchesStrict[matchesStrictLen++] = targetI\r\n          ++searchI; if(searchI === searchLen) { successStrict = true; break }\r\n          ++targetI\r\n        } else {\r\n          targetI = nextBeginningIndexes[targetI]\r\n        }\r\n      }\r\n    }\r\n\r\n    // check if it's a substring match\r\n    var substringIndex = searchLen <= 1 ? -1 : prepared._targetLower.indexOf(searchLower, matchesSimple[0]) // perf: this is slow\r\n    var isSubstring = !!~substringIndex\r\n    var isSubstringBeginning = !isSubstring ? false : substringIndex===0 || prepared._nextBeginningIndexes[substringIndex-1] === substringIndex\r\n\r\n    // if it's a substring match but not at a beginning index, let's try to find a substring starting at a beginning index for a better score\r\n    if(isSubstring && !isSubstringBeginning) {\r\n      for(var i=0; i<nextBeginningIndexes.length; i=nextBeginningIndexes[i]) {\r\n        if(i <= substringIndex) continue\r\n\r\n        for(var s=0; s<searchLen; s++) if(searchLowerCodes[s] !== prepared._targetLowerCodes[i+s]) break\r\n        if(s === searchLen) { substringIndex = i; isSubstringBeginning = true; break }\r\n      }\r\n    }\r\n\r\n    // tally up the score & keep track of matches for highlighting later\r\n    // if it's a simple match, we'll switch to a substring match if a substring exists\r\n    // if it's a strict match, we'll switch to a substring match only if that's a better score\r\n\r\n    var calculateScore = matches => {\r\n      var score = 0\r\n\r\n      var extraMatchGroupCount = 0\r\n      for(var i = 1; i < searchLen; ++i) {\r\n        if(matches[i] - matches[i-1] !== 1) {score -= matches[i]; ++extraMatchGroupCount}\r\n      }\r\n      var unmatchedDistance = matches[searchLen-1] - matches[0] - (searchLen-1)\r\n\r\n      score -= (12+unmatchedDistance) * extraMatchGroupCount // penality for more groups\r\n\r\n      if(matches[0] !== 0) score -= matches[0]*matches[0]*.2 // penality for not starting near the beginning\r\n\r\n      if(!successStrict) {\r\n        score *= 1000\r\n      } else {\r\n        // successStrict on a target with too many beginning indexes loses points for being a bad target\r\n        var uniqueBeginningIndexes = 1\r\n        for(var i = nextBeginningIndexes[0]; i < targetLen; i=nextBeginningIndexes[i]) ++uniqueBeginningIndexes\r\n\r\n        if(uniqueBeginningIndexes > 24) score *= (uniqueBeginningIndexes-24)*10 // quite arbitrary numbers here ...\r\n      }\r\n\r\n      score -= (targetLen - searchLen)/2 // penality for longer targets\r\n\r\n      if(isSubstring)          score /= 1+searchLen*searchLen*1 // bonus for being a full substring\r\n      if(isSubstringBeginning) score /= 1+searchLen*searchLen*1 // bonus for substring starting on a beginningIndex\r\n\r\n      score -= (targetLen - searchLen)/2 // penality for longer targets\r\n\r\n      return score\r\n    }\r\n\r\n    if(!successStrict) {\r\n      if(isSubstring) for(var i=0; i<searchLen; ++i) matchesSimple[i] = substringIndex+i // at this point it's safe to overwrite matchehsSimple with substr matches\r\n      var matchesBest = matchesSimple\r\n      var score = calculateScore(matchesBest)\r\n    } else {\r\n      if(isSubstringBeginning) {\r\n        for(var i=0; i<searchLen; ++i) matchesSimple[i] = substringIndex+i // at this point it's safe to overwrite matchehsSimple with substr matches\r\n        var matchesBest = matchesSimple\r\n        var score = calculateScore(matchesSimple)\r\n      } else {\r\n        var matchesBest = matchesStrict\r\n        var score = calculateScore(matchesStrict)\r\n      }\r\n    }\r\n\r\n    prepared._score = score\r\n\r\n    for(var i = 0; i < searchLen; ++i) prepared._indexes[i] = matchesBest[i]\r\n    prepared._indexes.len = searchLen\r\n\r\n    const result    = new Result()\r\n    result.target   = prepared.target\r\n    result._score   = prepared._score\r\n    result._indexes = prepared._indexes\r\n    return result\r\n  }\r\n  var algorithmSpaces = (preparedSearch, target, allowPartialMatch) => {\r\n    var seen_indexes = new Set()\r\n    var score = 0\r\n    var result = NULL\r\n\r\n    var first_seen_index_last_search = 0\r\n    var searches = preparedSearch.spaceSearches\r\n    var searchesLen = searches.length\r\n    var changeslen = 0\r\n\r\n    // Return _nextBeginningIndexes back to its normal state\r\n    var resetNextBeginningIndexes = () => {\r\n      for(let i=changeslen-1; i>=0; i--) target._nextBeginningIndexes[nextBeginningIndexesChanges[i*2 + 0]] = nextBeginningIndexesChanges[i*2 + 1]\r\n    }\r\n\r\n    var hasAtLeast1Match = false\r\n    for(var i=0; i<searchesLen; ++i) {\r\n      allowPartialMatchScores[i] = NEGATIVE_INFINITY\r\n      var search = searches[i]\r\n\r\n      result = algorithm(search, target)\r\n      if(allowPartialMatch) {\r\n        if(result === NULL) continue\r\n        hasAtLeast1Match = true\r\n      } else {\r\n        if(result === NULL) {resetNextBeginningIndexes(); return NULL}\r\n      }\r\n\r\n      // if not the last search, we need to mutate _nextBeginningIndexes for the next search\r\n      var isTheLastSearch = i === searchesLen - 1\r\n      if(!isTheLastSearch) {\r\n        var indexes = result._indexes\r\n\r\n        var indexesIsConsecutiveSubstring = true\r\n        for(let i=0; i<indexes.len-1; i++) {\r\n          if(indexes[i+1] - indexes[i] !== 1) {\r\n            indexesIsConsecutiveSubstring = false; break;\r\n          }\r\n        }\r\n\r\n        if(indexesIsConsecutiveSubstring) {\r\n          var newBeginningIndex = indexes[indexes.len-1] + 1\r\n          var toReplace = target._nextBeginningIndexes[newBeginningIndex-1]\r\n          for(let i=newBeginningIndex-1; i>=0; i--) {\r\n            if(toReplace !== target._nextBeginningIndexes[i]) break\r\n            target._nextBeginningIndexes[i] = newBeginningIndex\r\n            nextBeginningIndexesChanges[changeslen*2 + 0] = i\r\n            nextBeginningIndexesChanges[changeslen*2 + 1] = toReplace\r\n            changeslen++\r\n          }\r\n        }\r\n      }\r\n\r\n      score += result._score / searchesLen\r\n      allowPartialMatchScores[i] = result._score / searchesLen\r\n\r\n      // dock points based on order otherwise \"c man\" returns Manifest.cpp instead of CheatManager.h\r\n      if(result._indexes[0] < first_seen_index_last_search) {\r\n        score -= (first_seen_index_last_search - result._indexes[0]) * 2\r\n      }\r\n      first_seen_index_last_search = result._indexes[0]\r\n\r\n      for(var j=0; j<result._indexes.len; ++j) seen_indexes.add(result._indexes[j])\r\n    }\r\n\r\n    if(allowPartialMatch && !hasAtLeast1Match) return NULL\r\n\r\n    resetNextBeginningIndexes()\r\n\r\n    // allows a search with spaces that's an exact substring to score well\r\n    var allowSpacesResult = algorithm(preparedSearch, target, /*allowSpaces=*/true)\r\n    if(allowSpacesResult !== NULL && allowSpacesResult._score > score) {\r\n      if(allowPartialMatch) {\r\n        for(var i=0; i<searchesLen; ++i) {\r\n          allowPartialMatchScores[i] = allowSpacesResult._score / searchesLen\r\n        }\r\n      }\r\n      return allowSpacesResult\r\n    }\r\n\r\n    if(allowPartialMatch) result = target\r\n    result._score = score\r\n\r\n    var i = 0\r\n    for (let index of seen_indexes) result._indexes[i++] = index\r\n    result._indexes.len = i\r\n\r\n    return result\r\n  }\r\n\r\n  // we use this instead of just .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') because that screws with japanese characters\r\n  var remove_accents = (str) => str.replace(/\\p{Script=Latin}+/gu, match => match.normalize('NFD')).replace(/[\\u0300-\\u036f]/g, '')\r\n\r\n  var prepareLowerInfo = (str) => {\r\n    str = remove_accents(str)\r\n    var strLen = str.length\r\n    var lower = str.toLowerCase()\r\n    var lowerCodes = [] // new Array(strLen)    sparse array is too slow\r\n    var bitflags = 0\r\n    var containsSpace = false // space isn't stored in bitflags because of how searching with a space works\r\n\r\n    for(var i = 0; i < strLen; ++i) {\r\n      var lowerCode = lowerCodes[i] = lower.charCodeAt(i)\r\n\r\n      if(lowerCode === 32) {\r\n        containsSpace = true\r\n        continue // it's important that we don't set any bitflags for space\r\n      }\r\n\r\n      var bit = lowerCode>=97&&lowerCode<=122 ? lowerCode-97 // alphabet\r\n              : lowerCode>=48&&lowerCode<=57  ? 26           // numbers\r\n                                                             // 3 bits available\r\n              : lowerCode<=127                ? 30           // other ascii\r\n              :                                 31           // other utf8\r\n      bitflags |= 1<<bit\r\n    }\r\n\r\n    return {lowerCodes:lowerCodes, bitflags:bitflags, containsSpace:containsSpace, _lower:lower}\r\n  }\r\n  var prepareBeginningIndexes = (target) => {\r\n    var targetLen = target.length\r\n    var beginningIndexes = []; var beginningIndexesLen = 0\r\n    var wasUpper = false\r\n    var wasAlphanum = false\r\n    for(var i = 0; i < targetLen; ++i) {\r\n      var targetCode = target.charCodeAt(i)\r\n      var isUpper = targetCode>=65&&targetCode<=90\r\n      var isAlphanum = isUpper || targetCode>=97&&targetCode<=122 || targetCode>=48&&targetCode<=57\r\n      var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum\r\n      wasUpper = isUpper\r\n      wasAlphanum = isAlphanum\r\n      if(isBeginning) beginningIndexes[beginningIndexesLen++] = i\r\n    }\r\n    return beginningIndexes\r\n  }\r\n  var prepareNextBeginningIndexes = (target) => {\r\n    target = remove_accents(target)\r\n    var targetLen = target.length\r\n    var beginningIndexes = prepareBeginningIndexes(target)\r\n    var nextBeginningIndexes = [] // new Array(targetLen)     sparse array is too slow\r\n    var lastIsBeginning = beginningIndexes[0]\r\n    var lastIsBeginningI = 0\r\n    for(var i = 0; i < targetLen; ++i) {\r\n      if(lastIsBeginning > i) {\r\n        nextBeginningIndexes[i] = lastIsBeginning\r\n      } else {\r\n        lastIsBeginning = beginningIndexes[++lastIsBeginningI]\r\n        nextBeginningIndexes[i] = lastIsBeginning===undefined ? targetLen : lastIsBeginning\r\n      }\r\n    }\r\n    return nextBeginningIndexes\r\n  }\r\n\r\n  var preparedCache       = new Map()\r\n  var preparedSearchCache = new Map()\r\n\r\n  // the theory behind these being globals is to reduce garbage collection by not making new arrays\r\n  var matchesSimple = []; var matchesStrict = []\r\n  var nextBeginningIndexesChanges = [] // allows straw berry to match strawberry well, by modifying the end of a substring to be considered a beginning index for the rest of the search\r\n  var keysSpacesBestScores = []; var allowPartialMatchScores = []\r\n  var tmpTargets = []; var tmpResults = []\r\n\r\n  // prop = 'key'                  2.5ms optimized for this case, seems to be about as fast as direct obj[prop]\r\n  // prop = 'key1.key2'            10ms\r\n  // prop = ['key1', 'key2']       27ms\r\n  // prop = obj => obj.tags.join() ??ms\r\n  var getValue = (obj, prop) => {\r\n    var tmp = obj[prop]; if(tmp !== undefined) return tmp\r\n    if(typeof prop === 'function') return prop(obj) // this should run first. but that makes string props slower\r\n    var segs = prop\r\n    if(!Array.isArray(prop)) segs = prop.split('.')\r\n    var len = segs.length\r\n    var i = -1\r\n    while (obj && (++i < len)) obj = obj[segs[i]]\r\n    return obj\r\n  }\r\n\r\n  var isPrepared = (x) => { return typeof x === 'object' && typeof x._bitflags === 'number' }\r\n  var INFINITY = Infinity; var NEGATIVE_INFINITY = -INFINITY\r\n  var noResults = []; noResults.total = 0\r\n  var NULL = null\r\n\r\n  var noTarget = prepare('')\r\n\r\n  // Hacked version of https://github.com/lemire/FastPriorityQueue.js\r\n  var fastpriorityqueue=r=>{var e=[],o=0,a={},v=r=>{for(var a=0,v=e[a],c=1;c<o;){var s=c+1;a=c,s<o&&e[s]._score<e[c]._score&&(a=s),e[a-1>>1]=e[a],c=1+(a<<1)}for(var f=a-1>>1;a>0&&v._score<e[f]._score;f=(a=f)-1>>1)e[a]=e[f];e[a]=v};return a.add=(r=>{var a=o;e[o++]=r;for(var v=a-1>>1;a>0&&r._score<e[v]._score;v=(a=v)-1>>1)e[a]=e[v];e[a]=r}),a.poll=(r=>{if(0!==o){var a=e[0];return e[0]=e[--o],v(),a}}),a.peek=(r=>{if(0!==o)return e[0]}),a.replaceTop=(r=>{e[0]=r,v()}),a}\r\n  var q = fastpriorityqueue() // reuse this\r\n\r\n  // fuzzysort is written this way for minification. all names are mangeled unless quoted\r\n  return {'single':single, 'go':go, 'prepare':prepare, 'cleanup':cleanup}\r\n}) // UMD\r\n","import { PrimitiveType } from \"@ourworldindata/types\"\nimport * as _ from \"lodash-es\"\nimport fuzzysort from \"fuzzysort\"\n\nexport class FuzzySearch<T> {\n    strings: Fuzzysort.Prepared[]\n    datamap: Record<string, T[]>\n    uniqByFn: ((obj: T) => PrimitiveType) | undefined\n    opts: Fuzzysort.Options | undefined\n\n    private constructor(\n        datamap: Record<string, T[]>,\n        uniqByFn?: (obj: T) => PrimitiveType,\n        opts?: Fuzzysort.Options\n    ) {\n        const rawStrings = Object.keys(datamap)\n        this.strings = rawStrings.map((s) => fuzzysort.prepare(s))\n        this.datamap = datamap\n        this.uniqByFn = uniqByFn\n        this.opts = opts\n    }\n\n    static withKey<T>(\n        data: T[],\n        keyFn: (obj: T) => string,\n        opts?: Fuzzysort.Options\n    ): FuzzySearch<T> {\n        const datamap = _.groupBy(data, keyFn)\n        return new FuzzySearch(datamap, undefined, opts)\n    }\n\n    // Allows for multiple keys per object, e.g. aliases:\n    // [\n    //     { name: \"Netherlands\", \"keys\": [\"Netherlands\", \"Nederland\"] },\n    //     { name: \"Spain\", \"keys\": [\"Spain\", \"España\"] },\n    // ]\n    static withKeyArray<T>(\n        data: T[],\n        keysFn: (obj: T) => string[],\n        uniqByFn?: (obj: T) => PrimitiveType,\n        opts?: Fuzzysort.Options\n    ): FuzzySearch<T> {\n        const datamap: Record<string, T[]> = {}\n        data.forEach((d) => {\n            keysFn(d).forEach((key) => {\n                if (!datamap[key]) datamap[key] = [d]\n                else datamap[key].push(d)\n            })\n        })\n        return new FuzzySearch(datamap, uniqByFn, opts)\n    }\n\n    search(input: string): T[] {\n        const results = fuzzysort\n            .go(input, this.strings, this.opts)\n            .flatMap((result) => this.datamap[result.target])\n\n        if (this.uniqByFn) {\n            return _.uniqBy(results, this.uniqByFn)\n        }\n        return results\n    }\n\n    searchResults(input: string): Fuzzysort.Results {\n        return fuzzysort.go(input, this.strings, this.opts)\n    }\n\n    single(input: string, target: string): Fuzzysort.Result | null {\n        return fuzzysort.single(input, target)\n    }\n}\n\ntype FuzzySearchResult = Fuzzysort.Result\nexport { type FuzzySearchResult }\n","/*\n * Checks whether all strings in an array are unique.\n *\n * Iterates through the provided array and returns `false` if any duplicate strings are found.\n * Returns `true` if all values are distinct.\n *\n * @param values - An array of strings to check for uniqueness.\n * @returns `true` if all strings are unique, `false` otherwise.\n *\n * @example\n * validateUniqueStrings([\"a\", \"b\", \"c\"]) // true\n * validateUniqueStrings([\"a\", \"b\", \"a\"]) // false\n */\nexport function validateUniqueStrings(values: string[]): boolean {\n    const seen = new Set<string>()\n    for (const value of values) {\n        if (seen.has(value)) return false\n        seen.add(value)\n    }\n    return true\n}\n","// Constants for a/b experiments\n\nexport const EXPERIMENT_ARM_SEPARATOR = \"--\"\nexport const EXPERIMENT_PREFIX = \"exp\"\n","import { validateUniqueStrings } from \"./utils.js\"\nimport { EXPERIMENT_ARM_SEPARATOR, EXPERIMENT_PREFIX } from \"./constants.js\"\n\nconst DEFAULT_COOKIE_EXPIRY = new Date(Date.now() + 7 * (24 * 60 * 60 * 1000)) // cookie expires in 7 days\n\n/**\n * Represents an experiment with multiple arms (variants) for A/B testing or feature experimentation.\n *\n * The `Experiment` class provides configuration and validation logic for an experiment,\n * including the experiment's unique identifier, expiration date, arms (variants), and applicable cookie paths.\n *\n *\n * @property {ExperimentId} id - Unique identifier for the experiment.\n * @property {Date} expires - The expiration date of the experiment.\n * @property {ExperimentArm[]} arms - The list of arms (variants) in the experiment, each with its own fraction.\n * @property {CookiePath[]} paths - The list of cookie paths where the experiment applies.\n *\n * @method getArmById - Retrieves an arm by its unique identifier.\n * @method isExpired - Determines if the experiment has expired.\n *\n * @throws {Error} If the sum of arm fractions does not equal 1, if arm IDs are not unique, or if\n * any `${experimentId}-${armId}` exceeds 100 characters.\n */\nexport class Experiment {\n    id: ExperimentId\n    expires: Date\n    arms: ExperimentArm[]\n    paths: string[]\n\n    constructor(data: RawExperiment) {\n        this.id = asExperimentId(`${EXPERIMENT_PREFIX}-${data.id}`)\n        this.expires =\n            data.expires !== undefined\n                ? new Date(data.expires)\n                : DEFAULT_COOKIE_EXPIRY\n        this.arms = data.arms.map((a) => ({\n            id: asArmId(a.id),\n            fraction: a.fraction,\n            replaysSessionSampleRate: a.replaysSessionSampleRate,\n        }))\n        this.paths = data.paths\n\n        this.validate()\n    }\n\n    private validate(): void {\n        if (!this.validateArmFractions()) {\n            throw new Error(\n                `Arm fractions in experiment \"${this.id}\" do not sum to 1`\n            )\n        }\n        if (!this.validateUniqueArmIds()) {\n            throw new Error(`Arm IDs in experiment \"${this.id}\" are not unique`)\n        }\n\n        if (!this.validateArmIdLengths()) {\n            throw new Error(\n                `One or more arms in experiment \"${this.id}\" are >100 characters when concatenated with experiment id`\n            )\n        }\n    }\n\n    private validateArmFractions(): boolean {\n        const total = this.arms.reduce((sum, arm) => sum + arm.fraction, 0)\n        return Math.abs(total - 1) < 1e-6\n    }\n\n    private validateUniqueArmIds(): boolean {\n        const ids = this.arms.map((a) => a.id)\n        return validateUniqueStrings(ids)\n    }\n\n    private validateArmIdLengths(): boolean {\n        return this.arms.every(\n            (arm) =>\n                `${this.id}${EXPERIMENT_ARM_SEPARATOR}${arm.id}`.length <= 100\n        )\n    }\n\n    getArmById(id: string): ExperimentArm | undefined {\n        return this.arms.find((a) => a.id === id)\n    }\n\n    isExpired(): boolean {\n        return new Date(this.expires).getTime() < Date.now()\n    }\n\n    /*\n     * Check if a URL matches any of the experiment paths.\n     *\n     * Checks if the given URL matches any of the cookie paths defined for the\n     * experiment, following the path-matching rules in https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.4.\n     *\n     * @param url - The URL to check.\n     *\n     * @returns `true` if the URL matches any of the experiment paths, `false` otherwise.\n     */\n    isUrlInPaths(url: string): boolean {\n        return this.paths.some((path) => {\n            // Case 1: Exact match\n            if (url === path) {\n                return true\n            }\n\n            // Case 2: Cookie path is a prefix and ends with \"/\"\n            if (path.endsWith(\"/\") && url.startsWith(path)) {\n                return true\n            }\n\n            // Case 3: Cookie path is a prefix and the next character in request path is \"/\"\n            if (url.startsWith(path) && url.charAt(path.length) === \"/\") {\n                return true\n            }\n\n            // If none of the above, return false\n            return false\n        })\n    }\n}\n\nexport type ExperimentArm = {\n    id: ArmId // unique arm id\n    fraction: number // fraction of visitors to assign to this arm\n    replaysSessionSampleRate?: number // session replay sample rate for this arm\n}\n\ntype RawArm = {\n    id: string\n    fraction: number\n    replaysSessionSampleRate?: number\n}\n\ntype RawExperiment = {\n    id: string\n    expires: string\n    arms: RawArm[]\n    paths: string[]\n}\n\ntype ExperimentId = string & { readonly __brand: \"ExperimentId\" }\n\nfunction asExperimentId(value: string): ExperimentId {\n    if (value.length > 32) {\n        throw new Error(\"Experiment ID exceeds maximum length of 32 characters\")\n    }\n\n    // Check if the value contains only allowed characters for Sentry tag keys:\n    // https://docs.sentry.io/platforms/javascript/guides/nextjs/enriching-events/tags\n    const allowedPattern = /^[a-zA-Z0-9_.:-]+$/\n    if (!allowedPattern.test(value)) {\n        throw new Error(\n            \"Experiment ID contains invalid characters. Only letters (a-zA-Z), numbers (0-9), underscores (_), periods (.), colons (:), and dashes (-) are allowed\"\n        )\n    }\n\n    return value as ExperimentId\n}\n\ntype ArmId = string & { readonly __brand: \"ArmId\" }\n\nfunction asArmId(value: string): ArmId {\n    if (value.length > 200) {\n        throw new Error(\"Arm ID exceeds maximum length of 200 characters\")\n    }\n\n    // Check if the value contains newline characters (not allowed for Sentry tag values)\n    if (value.includes(\"\\n\")) {\n        throw new Error(\n            \"Arm ID contains invalid characters. Newline characters (\\\\n) are not allowed\"\n        )\n    }\n\n    return value as ArmId\n}\n\nexport function validateUniqueExperimentIds(\n    experiments: Experiment[]\n): boolean {\n    const ids = experiments.map((e) => e.id)\n    return validateUniqueStrings(ids)\n}\n","import { Experiment } from \"./Experiment.js\"\n\n/*\n * Hard-coded active experiments.\n */\nexport const experiments: Experiment[] = [\n    /*\n     * Experiment: all-charts-vs-featured-v1\n     *\n     * This experiment trials the \"Featured metrics\" block in place of the \"All Charts\" block on\n     * a sample of modular topic pages and data pages. The goal of the experiment is to\n     * get a feel for differences in user engagement, controlling for the the location it appears.\n     *\n     * Conditions:\n     * - (a) status quo (all charts block)\n     * - (b) featured metrics block (treatment)\n     *\n     */\n    new Experiment({\n        id: \"all-charts-vs-featured-v1\",\n        expires: \"2026-03-24T00:00:00.000Z\",\n        arms: [\n            {\n                id: \"all-charts\",\n                fraction: 0.7,\n                replaysSessionSampleRate: 0.2,\n            },\n            {\n                id: \"featured-metrics\",\n                fraction: 0.3,\n                replaysSessionSampleRate: 0.33,\n            },\n        ],\n        paths: [\n            // modular topic pages\n            \"/population-growth\",\n            \"/poverty\",\n            \"/co2-and-greenhouse-gas-emissions\",\n            \"/life-expectancy\",\n            \"/agricultural-production\",\n            \"/natural-disasters\",\n            \"/causes-of-death\",\n            \"/war-and-peace\",\n            \"/migration\",\n            \"/artificial-intelligence\",\n            \"/child-mortality\",\n            \"/economic-growth\",\n            \"/economic-inequality\",\n            \"/democracy\",\n            \"/climate-change\",\n            // data pages\n            \"/grapher/democracy-index-eiu\",\n            \"/grapher/gdp-per-capita-worldbank\",\n            \"/grapher/co-emissions-per-capita\",\n            \"/grapher/life-expectancy\",\n            \"/grapher/child-mortality\",\n            \"/grapher/population\",\n            \"/grapher/human-rights-index-vdem\",\n            \"/grapher/share-of-population-in-extreme-poverty\",\n            \"/grapher/economic-inequality-gini-index\",\n            \"/grapher/per-capita-energy-use\",\n            \"/grapher/children-born-per-woman\",\n            \"/grapher/nuclear-warhead-stockpiles-lines\",\n            \"/grapher/daily-per-capita-caloric-supply\",\n            \"/grapher/eating-disorders-prevalence\",\n            \"/grapher/share-electricity-nuclear\",\n            \"/grapher/mean-years-of-schooling-long-run\",\n            \"/grapher/female-homicide-victims\",\n            \"/grapher/share-of-individuals-using-the-internet\",\n            \"/grapher/prevalence-of-undernourishment\",\n            \"/grapher/incidence-of-hivaids\",\n        ],\n    }),\n    new Experiment({\n        id: \"user-survey-role-v1\",\n        expires: \"2026-03-20T00:00:00.000Z\",\n        arms: [\n            { id: \"long-list\", fraction: 1 / 3 },\n            { id: \"short-list\", fraction: 1 / 3 },\n            { id: \"free-form\", fraction: 1 / 3 },\n        ],\n        paths: [\"/\"],\n    }),\n]\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      target[key] = source[key];\n    }\n  }\n  return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n  read: function (value) {\n    if (value[0] === '\"') {\n      value = value.slice(1, -1);\n    }\n    return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n  },\n  write: function (value) {\n    return encodeURIComponent(value).replace(\n      /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n      decodeURIComponent\n    )\n  }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n  function set (name, value, attributes) {\n    if (typeof document === 'undefined') {\n      return\n    }\n\n    attributes = assign({}, defaultAttributes, attributes);\n\n    if (typeof attributes.expires === 'number') {\n      attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n    }\n    if (attributes.expires) {\n      attributes.expires = attributes.expires.toUTCString();\n    }\n\n    name = encodeURIComponent(name)\n      .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n      .replace(/[()]/g, escape);\n\n    var stringifiedAttributes = '';\n    for (var attributeName in attributes) {\n      if (!attributes[attributeName]) {\n        continue\n      }\n\n      stringifiedAttributes += '; ' + attributeName;\n\n      if (attributes[attributeName] === true) {\n        continue\n      }\n\n      // Considers RFC 6265 section 5.2:\n      // ...\n      // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n      //     character:\n      // Consume the characters of the unparsed-attributes up to,\n      // not including, the first %x3B (\";\") character.\n      // ...\n      stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n    }\n\n    return (document.cookie =\n      name + '=' + converter.write(value, name) + stringifiedAttributes)\n  }\n\n  function get (name) {\n    if (typeof document === 'undefined' || (arguments.length && !name)) {\n      return\n    }\n\n    // To prevent the for loop in the first place assign an empty array\n    // in case there are no cookies at all.\n    var cookies = document.cookie ? document.cookie.split('; ') : [];\n    var jar = {};\n    for (var i = 0; i < cookies.length; i++) {\n      var parts = cookies[i].split('=');\n      var value = parts.slice(1).join('=');\n\n      try {\n        var found = decodeURIComponent(parts[0]);\n        jar[found] = converter.read(value, found);\n\n        if (name === found) {\n          break\n        }\n      } catch (e) {}\n    }\n\n    return name ? jar[name] : jar\n  }\n\n  return Object.create(\n    {\n      set,\n      get,\n      remove: function (name, attributes) {\n        set(\n          name,\n          '',\n          assign({}, attributes, {\n            expires: -1\n          })\n        );\n      },\n      withAttributes: function (attributes) {\n        return init(this.converter, assign({}, this.attributes, attributes))\n      },\n      withConverter: function (converter) {\n        return init(assign({}, this.converter, converter), this.attributes)\n      }\n    },\n    {\n      attributes: { value: Object.freeze(defaultAttributes) },\n      converter: { value: Object.freeze(converter) }\n    }\n  )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","import Cookies from \"js-cookie\"\nimport { EXPERIMENT_PREFIX } from \"./constants.js\"\nimport { experiments } from \"./config.js\"\n\nexport type ExperimentState = Record<\n    string,\n    { arm: string; isPageInExperiment: boolean }\n>\n\nexport const defaultExperimentState: ExperimentState = {}\n\n/**\n * Gets the experiment state for the current page.\n *\n * This function should be called once when the module loads.\n *\n * @returns {ExperimentState} The experiment state for the current page.\n */\nexport function getExperimentState(): ExperimentState {\n    if (typeof window === \"undefined\") {\n        return defaultExperimentState\n    }\n\n    const activeExperiments = experiments.filter((exp) => !exp.isExpired())\n    const activeExperimentMap = new Map(\n        activeExperiments.map((exp) => [exp.id as string, exp])\n    )\n\n    const assignedExperiments = getAssignedExperiments() ?? {}\n    const currentPath =\n        typeof window !== \"undefined\" ? window.location.pathname : \"\"\n\n    const state = {} as ExperimentState\n    for (const [expId, armId] of Object.entries(assignedExperiments)) {\n        const experiment = activeExperimentMap.get(expId)\n        state[expId] = {\n            arm: armId,\n            isPageInExperiment: experiment?.isUrlInPaths(currentPath) ?? false,\n        }\n    }\n\n    return state\n}\n\n/**\n * Gets the assigned experiments for the current user session.\n *\n * Only works on client, i.e. when cookies are available.\n *\n * @returns {Record<string, string> | undefined} A mapping of experiment IDs to their assigned arm IDs.\n *      Returns undefined if called on the server.\n */\nfunction getAssignedExperiments(): Record<string, string> | undefined {\n    if (typeof window === \"undefined\") return undefined\n\n    const allCookies = Cookies.get()\n\n    const filteredCookies = Object.fromEntries(\n        Object.entries(allCookies).filter(([cookieName]) =>\n            cookieName.startsWith(`${EXPERIMENT_PREFIX}-`)\n        )\n    )\n\n    return filteredCookies as Record<string, string>\n}\n","import {\n    EntityName,\n    GRAPHER_CHART_TYPES,\n    GrapherChartType,\n    GrapherValuesJson,\n    GrapherValuesJsonDataPoint,\n    GridSlotKey,\n    LargeVariantGridSlotKey,\n    MediumVariantGridSlotKey,\n    SearchChartHitDataDisplayProps,\n} from \"@ourworldindata/types\"\nimport { match } from \"ts-pattern\"\nimport { getRegionByName } from \"../regions/index.js\"\nimport { calculateTrendDirection, getDisplayUnit } from \"../Util.js\"\n\nexport function buildChartHitDataDisplayProps({\n    chartInfo,\n    chartType,\n    entity,\n    isEntityPickedByUser,\n}: {\n    chartInfo?: GrapherValuesJson | null\n    chartType?: GrapherChartType\n    entity: EntityName\n    isEntityPickedByUser?: boolean\n}): SearchChartHitDataDisplayProps | undefined {\n    if (!chartInfo) return undefined\n\n    // Showing a time range only makes sense for slope charts and connected scatter plots\n    const showTimeRange =\n        chartType === GRAPHER_CHART_TYPES.SlopeChart ||\n        chartType === GRAPHER_CHART_TYPES.ScatterPlot\n\n    const endDatapoint = findDatapoint(chartInfo, \"end\")\n    const startDatapoint = showTimeRange\n        ? findDatapoint(chartInfo, \"start\")\n        : undefined\n    const columnInfo = endDatapoint?.columnSlug\n        ? chartInfo?.columns?.[endDatapoint?.columnSlug]\n        : undefined\n\n    if (!endDatapoint?.formattedValueShort || !endDatapoint?.formattedTime)\n        return undefined\n\n    // For scatter plots, displaying a single data value is ambiguous since\n    // they have two dimensions. But we do show a data value if the x axis\n    // is GDP since then it's sufficiently clear\n    const xSlug = chartInfo?.endValues?.x?.columnSlug\n    const xColumnInfo = chartInfo?.columns?.[xSlug ?? \"\"]\n    const hasDataDisplay =\n        chartType !== GRAPHER_CHART_TYPES.ScatterPlot ||\n        /GDP/.test(xColumnInfo?.name ?? \"\")\n\n    if (!hasDataDisplay) return undefined\n\n    const endValue = endDatapoint.valueLabel ?? endDatapoint.formattedValueShort\n    const startValue =\n        startDatapoint?.valueLabel ?? startDatapoint?.formattedValueShort\n    const unit = columnInfo ? getDisplayUnit(columnInfo) : undefined\n    const time = startDatapoint?.formattedTime\n        ? `${startDatapoint?.formattedTime}–${endDatapoint.formattedTime}`\n        : endDatapoint.formattedTime\n    const trend =\n        // If both labels are the same, trivially show a right arrow\n        startValue !== undefined && startValue === endValue\n            ? \"right\"\n            : // Otherwise, calculate based on numeric values\n              calculateTrendDirection(\n                  startDatapoint?.value,\n                  endDatapoint?.value\n              )\n    const showLocationIcon =\n        isEntityPickedByUser && getRegionByName(entity) !== undefined\n\n    return {\n        entityName: entity,\n        endValue,\n        startValue,\n        time,\n        unit,\n        trend,\n        showLocationIcon,\n        numericEndTime: endDatapoint.time,\n    }\n}\n\nfunction findDatapoint(\n    chartInfo: GrapherValuesJson | undefined,\n    time: \"end\" | \"start\" = \"end\"\n): GrapherValuesJsonDataPoint | undefined {\n    if (!chartInfo) return undefined\n\n    const yDims = match(time)\n        .with(\"end\", () => chartInfo.endValues?.y)\n        .with(\"start\", () => chartInfo.startValues?.y)\n        .exhaustive()\n    if (!yDims) return undefined\n\n    // Make sure we're not showing a projected data point\n    const historicalDims = yDims.filter(\n        (dim) => !chartInfo.columns?.[dim.columnSlug]?.isProjection\n    )\n\n    // Don't show a data value for charts with multiple y-indicators\n    if (historicalDims.length > 1) return undefined\n\n    return historicalDims[0]\n}\n\nexport function getTableColumnCountForGridSlotKey(slot: GridSlotKey): number {\n    return (\n        match(slot)\n            // medium variant grid slots\n            .with(MediumVariantGridSlotKey.Single, () => 1)\n            .with(MediumVariantGridSlotKey.Double, () => 2)\n            .with(MediumVariantGridSlotKey.Triple, () => 3)\n            .with(MediumVariantGridSlotKey.Quad, () => 4)\n            .with(MediumVariantGridSlotKey.SmallLeft, () => 1)\n            .with(MediumVariantGridSlotKey.SmallRight, () => 1)\n\n            // large variant grid slots\n            .with(LargeVariantGridSlotKey.LeftQuad, () => 2)\n            .with(LargeVariantGridSlotKey.RightQuad, () => 2)\n            .with(LargeVariantGridSlotKey.RightQuadLeftColumn, () => 1)\n            .with(LargeVariantGridSlotKey.SingleCell, () => 0.5)\n            .with(LargeVariantGridSlotKey.TopRightCell, () => 0.5)\n            .with(LargeVariantGridSlotKey.BottomRightCell, () => 0.5)\n            .with(LargeVariantGridSlotKey.Full, () => 4)\n            .exhaustive()\n    )\n}\n","import * as _ from \"lodash-es\"\nimport {\n    GRAPHER_TAB_NAMES,\n    GrapherTabName,\n    MediumVariantGridSlotKey,\n    LayoutSlot,\n} from \"@ourworldindata/types\"\nimport { getTableColumnCountForGridSlotKey } from \"./SearchHelpers.js\"\n\ntype PlacingOptions =\n    | { hasDataTable: false }\n    | {\n          hasDataTable: true\n          numDataTableRows: number\n          numDataTableRowsPerColumn: number\n      }\n\nexport function placeGrapherTabsInMediumVariantGridLayout(\n    tabs: GrapherTabName[],\n    options: {\n        hasDataDisplay: boolean\n        prioritizeTableOverDiscreteBar?: boolean\n    } & PlacingOptions\n): LayoutSlot<MediumVariantGridSlotKey>[] {\n    // If there is a data display, then three equally-sized slots are available,\n    // plus two smaller slots below the data display. If there is no data display,\n    // then four equally-sized slots are available.\n\n    if (options.hasDataDisplay) {\n        const placedMainTabs = assignTabsToGridSlotKeys(tabs, {\n            numAvailableGridSlotKeys: 3,\n            ...options,\n        })\n\n        const remainingTabs = tabs.slice(placedMainTabs.length)\n        const placedRemainingTabs = remainingTabs\n            .slice(0, 2)\n            .map((tab, tabIndex) => ({\n                grapherTab: tab,\n                slotKey:\n                    tabIndex === 0\n                        ? MediumVariantGridSlotKey.SmallLeft\n                        : MediumVariantGridSlotKey.SmallRight,\n            }))\n        return [...placedMainTabs, ...placedRemainingTabs]\n    } else {\n        return assignTabsToGridSlotKeys(tabs, {\n            numAvailableGridSlotKeys: 4,\n            ...options,\n        })\n    }\n}\n\n/**\n * Assigns Grapher tabs to grid slots with special handling for the DiscreteBar tab.\n */\nfunction assignTabsToGridSlotKeys(\n    tabs: GrapherTabName[],\n    options: {\n        numAvailableGridSlotKeys: number\n        prioritizeTableOverDiscreteBar?: boolean\n    } & PlacingOptions\n): LayoutSlot<MediumVariantGridSlotKey>[] {\n    // No special handling for discrete bar charts\n    if (!options.prioritizeTableOverDiscreteBar)\n        return placeTabsInUniformGrid(tabs, options)\n\n    const hasSecondaryDiscreteBarTab =\n        tabs[0] !== GRAPHER_TAB_NAMES.DiscreteBar &&\n        tabs.includes(GRAPHER_TAB_NAMES.DiscreteBar)\n\n    // No need for special handling if there's no DiscreteBar tab\n    if (!hasSecondaryDiscreteBarTab)\n        return placeTabsInUniformGrid(tabs, options)\n\n    // Place tabs without the discrete bar tab\n    const placedMainTabs = placeTabsInUniformGrid(\n        tabs.filter((tab) => tab !== GRAPHER_TAB_NAMES.DiscreteBar),\n        options\n    )\n\n    // Check if there's space for the discrete bar tab\n    const numOccupiedSlots = _.sumBy(placedMainTabs, ({ slotKey }) =>\n        getTableColumnCountForGridSlotKey(slotKey)\n    )\n    if (numOccupiedSlots < options.numAvailableGridSlotKeys) {\n        placedMainTabs.push({\n            grapherTab: GRAPHER_TAB_NAMES.DiscreteBar,\n            slotKey: MediumVariantGridSlotKey.Single,\n        })\n    }\n\n    return placedMainTabs\n}\n\n/**\n * Place Grapher tabs in a uniform grid layout.\n *\n * Chart tabs always occupy a single slots. The table tab might occupy more\n * than one slot if there is space and enough data to fill it.\n */\nfunction placeTabsInUniformGrid(\n    tabs: GrapherTabName[],\n    options: { numAvailableGridSlotKeys: number } & PlacingOptions\n): LayoutSlot<MediumVariantGridSlotKey>[] {\n    const maxNumTabs = options.numAvailableGridSlotKeys\n\n    // If none of the tabs display a table, then all tabs trivially take up one slot each\n    if (!tabs.some((tab) => tab === GRAPHER_TAB_NAMES.Table)) {\n        return tabs.slice(0, maxNumTabs).map((tab) => ({\n            grapherTab: tab,\n            slotKey: MediumVariantGridSlotKey.Single,\n        }))\n    }\n\n    const numTabs = Math.min(tabs.length, maxNumTabs)\n    const numCharts = numTabs - 1 // without the table tab\n\n    const numAvailableSlotsForTable =\n        options.numAvailableGridSlotKeys - numCharts // >= 1\n\n    if (numAvailableSlotsForTable <= 1) {\n        return tabs.slice(0, maxNumTabs).map((tab) => ({\n            grapherTab: tab,\n            slotKey: MediumVariantGridSlotKey.Single,\n        }))\n    }\n\n    let numSlotsForTable = 0\n    if (options.hasDataTable) {\n        const numNeededSlotsForTable = Math.ceil(\n            options.numDataTableRows / options.numDataTableRowsPerColumn\n        )\n\n        numSlotsForTable = Math.min(\n            numAvailableSlotsForTable,\n            numNeededSlotsForTable\n        )\n    }\n\n    const tableSlot = getGridSlotKeyForCount(numSlotsForTable)\n\n    return tabs.map((tab) => ({\n        grapherTab: tab,\n        slotKey:\n            tab === GRAPHER_TAB_NAMES.Table\n                ? tableSlot\n                : MediumVariantGridSlotKey.Single,\n    }))\n}\n\nfunction getGridSlotKeyForCount(slotCount: number): MediumVariantGridSlotKey {\n    if (slotCount <= 1) return MediumVariantGridSlotKey.Single\n    else if (slotCount === 2) return MediumVariantGridSlotKey.Double\n    else if (slotCount === 3) return MediumVariantGridSlotKey.Triple\n    else return MediumVariantGridSlotKey.Quad\n}\n","import * as _ from \"lodash-es\"\nimport { observable, makeObservable } from \"mobx\"\nimport {\n    Color,\n    ColumnColorScale,\n    BinningStrategyIncludingManual,\n    ColorSchemeName,\n    ColorScaleConfigInterface,\n    MidpointMode,\n} from \"@ourworldindata/types\"\nimport {\n    trimObject,\n    deleteRuntimeAndUnchangedProps,\n    objectWithPersistablesToObject,\n    Persistable,\n    updatePersistables,\n} from \"@ourworldindata/utils\"\n\nimport { NO_DATA_LABEL } from \"./ColorScale\"\n\nexport class ColorScaleConfigDefaults implements ColorScaleConfigInterface {\n    // Color scheme\n    // ============\n\n    /** Key for a colorbrewer scheme */\n    baseColorScheme: ColorSchemeName | undefined = undefined\n\n    /** Reverse the order of colors in the color scheme (defined by `baseColorScheme`) */\n    colorSchemeInvert: boolean | undefined = undefined\n\n    // Numeric bins\n    // ============\n\n    /** The strategy for generating the bin boundaries */\n    binningStrategy: BinningStrategyIncludingManual = \"auto\"\n    createBinForMidpoint?: boolean\n    minValue?: number\n    maxValue?: number\n    midpoint?: number\n    midpointMode?: MidpointMode\n\n    /** Custom maximum brackets for each numeric bin. Only applied when strategy is `manual`. */\n    customNumericValues: number[] = []\n    /**\n     * Custom labels for each numeric bin. Only applied when strategy is `manual`.\n     * `undefined` or `null` falls back to default label.\n     * We need to handle `null` because JSON serializes `undefined` values\n     * inside arrays into `null`.\n     */\n    customNumericLabels: (string | undefined | null)[] = []\n\n    /** Whether `customNumericColors` are used to override the color scheme. */\n    customNumericColorsActive: boolean | undefined = undefined\n    /**\n     * Override some or all colors for the numerical color legend.\n     * `undefined` or `null` falls back the color scheme color.\n     * We need to handle `null` because JSON serializes `undefined` values\n     * inside arrays into `null`.\n     */\n    customNumericColors: (Color | undefined | null)[] = []\n\n    // Categorical bins\n    // ================\n\n    customCategoryColors: {\n        [key: string]: string | undefined\n    } = {}\n\n    customCategoryLabels: {\n        [key: string]: string | undefined\n    } = {}\n\n    // Allow hiding categories from the legend\n    customHiddenCategories: {\n        [key: string]: true | undefined\n    } = {}\n\n    // Other\n    // =====\n\n    /** A custom legend description. Only used in ScatterPlot legend titles for now. */\n    legendDescription: string | undefined = undefined\n\n    constructor() {\n        makeObservable(this, {\n            baseColorScheme: observable,\n            colorSchemeInvert: observable,\n            binningStrategy: observable,\n            customNumericValues: observable,\n            customNumericLabels: observable,\n            customNumericColorsActive: observable,\n            customNumericColors: observable,\n            customCategoryColors: observable.ref,\n            customCategoryLabels: observable.ref,\n            customHiddenCategories: observable.ref,\n            legendDescription: observable,\n            createBinForMidpoint: observable,\n            minValue: observable,\n            maxValue: observable,\n            midpoint: observable,\n            midpointMode: observable,\n        })\n    }\n}\n\nexport class ColorScaleConfig\n    extends ColorScaleConfigDefaults\n    implements Persistable\n{\n    updateFromObject(obj: Record<string, unknown>): void {\n        _.extend(this, obj)\n    }\n\n    toObject(): ColorScaleConfigInterface {\n        const obj: ColorScaleConfigInterface =\n            objectWithPersistablesToObject(this)\n        deleteRuntimeAndUnchangedProps(obj, new ColorScaleConfigDefaults())\n        return trimObject(obj)\n    }\n\n    constructor(obj?: Partial<ColorScaleConfig>) {\n        super()\n        updatePersistables(this, obj)\n    }\n\n    static fromDSL(scale: ColumnColorScale): ColorScaleConfig | undefined {\n        const colorSchemeInvert = scale.colorScaleInvert\n        const baseColorScheme = scale.colorScaleScheme as ColorSchemeName\n\n        const customNumericValues: number[] = []\n        const customNumericLabels: (string | undefined)[] = []\n        const customNumericColors: (Color | undefined)[] = []\n\n        if (scale.colorScaleNumericBins) {\n            customNumericValues.push(scale.colorScaleNumericMinValue ?? 0)\n\n            scale.colorScaleNumericBins\n                .split(INTER_BIN_DELIMITER)\n                .forEach((bin: string): void => {\n                    const [value, color, ...label] = bin.split(\n                        INTRA_BIN_DELIMITER\n                    ) as (string | undefined)[]\n                    if (!value) return\n                    customNumericValues.push(parseFloat(value))\n                    customNumericColors.push(color?.trim() || undefined)\n                    customNumericLabels.push(\n                        label.join(INTRA_BIN_DELIMITER).trim() || undefined\n                    )\n                })\n        }\n\n        const customNumericColorsActive =\n            customNumericColors.length > 0 ? true : undefined\n\n        const customCategoryColors: {\n            [key: string]: string | undefined\n        } = {}\n        const customCategoryLabels: {\n            [key: string]: string | undefined\n        } = {}\n        scale.colorScaleCategoricalBins\n            ?.split(INTER_BIN_DELIMITER)\n            .forEach((bin: string): void => {\n                const [value, color, ...label] = bin.split(\n                    INTRA_BIN_DELIMITER\n                ) as (string | undefined)[]\n                if (!value) return\n                customCategoryColors[value] = color?.trim() || undefined\n                customCategoryLabels[value] =\n                    label.join(INTRA_BIN_DELIMITER).trim() || undefined\n            })\n        if (scale.colorScaleNoDataLabel) {\n            customCategoryLabels[NO_DATA_LABEL] = scale.colorScaleNoDataLabel\n        }\n\n        // Use user-defined binning strategy, otherwise set to manual if user has\n        // defined custom bins\n        const binningStrategy = scale.colorScaleBinningStrategy\n            ? (scale.colorScaleBinningStrategy as BinningStrategyIncludingManual)\n            : scale.colorScaleNumericBins || scale.colorScaleCategoricalBins\n              ? \"manual\"\n              : undefined\n\n        const legendDescription = scale.colorScaleLegendDescription\n\n        const trimmed: Partial<ColorScaleConfig> = trimObject({\n            colorSchemeInvert,\n            baseColorScheme,\n            binningStrategy,\n            customNumericValues,\n            customNumericColors,\n            customNumericColorsActive,\n            customNumericLabels,\n            customCategoryLabels,\n            customCategoryColors,\n            legendDescription,\n        })\n\n        return _.isEmpty(trimmed) ? undefined : new ColorScaleConfig(trimmed)\n    }\n}\n\nconst INTER_BIN_DELIMITER = \";\"\nconst INTRA_BIN_DELIMITER = \",\"\n","import * as _ from \"lodash-es\"\nimport { lazy } from \"@ourworldindata/utils\"\nimport {\n    Color,\n    ColorSchemeInterface,\n    ColorSchemeName,\n} from \"@ourworldindata/types\"\nimport * as R from \"remeda\"\n\n// TODO: Initialize CustomColorSchemes lazily\nexport const CustomColorSchemes: ColorSchemeInterface[] = []\n\n// Create some of our own!\n\nexport const OwidDistinctColors = {\n    Purple: \"#6d3e91\",\n    DarkOrange: \"#c05917\",\n    LightTeal: \"#58ac8c\",\n    Blue: \"#286bbb\",\n    Maroon: \"#883039\",\n    Camel: \"#bc8e5a\",\n    MidnightBlue: \"#00295b\",\n    DustyCoral: \"#c15065\",\n    DarkOliveGreen: \"#18470f\",\n    DarkCopper: \"#9a5129\",\n    Peach: \"#e56e5a\",\n    Mauve: \"#a2559c\",\n    Turquoise: \"#38aaba\",\n    OliveGreen: \"#578145\",\n    Cherry: \"#970046\",\n    Teal: \"#00847e\",\n    RustyOrange: \"#b13507\",\n    Denim: \"#4c6a9c\",\n    Fuchsia: \"#cf0a66\",\n    TealishGreen: \"#00875e\",\n    Copper: \"#b16214\",\n    DarkMauve: \"#8c4569\",\n    Lime: \"#3b8e1d\",\n    Coral: \"#d73c50\",\n} as const\n\nconst OwidDistinctColorsNames = lazy(() => R.invert(OwidDistinctColors))\n\n// These are variations of some of the colors above where the original color would have too little\n// contrast against a white background for thin lines or text elements\nexport const DarkerOwidDistinctColors: Record<string, string> = {\n    DarkOrangeDarker: \"#be5915\",\n    PeachDarker: \"#c4523e\",\n    LightTealDarker: \"#2c8465\",\n    TurquoiseDarker: \"#008291\",\n    CamelDarker: \"#996d39\",\n    LimeDarker: \"#338711\",\n}\n\nconst darkerColorReplacementsHexToReplacementColorName = {\n    [OwidDistinctColors.DarkOrange]: DarkerOwidDistinctColors.DarkOrangeDarker,\n    [OwidDistinctColors.Peach]: DarkerOwidDistinctColors.PeachDarker,\n    [OwidDistinctColors.LightTeal]: DarkerOwidDistinctColors.LightTealDarker,\n    [OwidDistinctColors.Turquoise]: DarkerOwidDistinctColors.TurquoiseDarker,\n    [OwidDistinctColors.Camel]: DarkerOwidDistinctColors.CamelDarker,\n    [OwidDistinctColors.Lime]: DarkerOwidDistinctColors.LimeDarker,\n} as Record<string, string>\n\n// TODO: Make this into a lazy initialization\nexport const OwidDistinctLinesColors = {\n    ..._.omit(OwidDistinctColors, Object.keys(DarkerOwidDistinctColors)),\n    ...DarkerOwidDistinctColors,\n}\n\n// Used for looking up names from color hex values\nconst OwidDistinctLinesColorNames = lazy(() =>\n    R.invert(OwidDistinctLinesColors)\n)\n\n// Below are 5 variations of the same colors in different permutations\nexport const CategoricalColorsPaletteA = [\n    OwidDistinctColors.Denim,\n    OwidDistinctColors.Maroon,\n    OwidDistinctColors.OliveGreen,\n    OwidDistinctColors.RustyOrange,\n    OwidDistinctColors.Copper,\n    OwidDistinctColors.Cherry,\n    OwidDistinctColors.Coral,\n    OwidDistinctColors.MidnightBlue,\n    OwidDistinctColors.Teal,\n    OwidDistinctColors.Camel,\n    OwidDistinctColors.Mauve,\n    OwidDistinctColors.DarkOliveGreen,\n]\n\nexport const CategoricalColorsPaletteB = [\n    OwidDistinctColors.Teal,\n    OwidDistinctColors.MidnightBlue,\n    OwidDistinctColors.DustyCoral,\n    OwidDistinctColors.Turquoise,\n    OwidDistinctColors.DarkMauve,\n    OwidDistinctColors.DarkOliveGreen,\n    OwidDistinctColors.RustyOrange,\n    OwidDistinctColors.Camel,\n    OwidDistinctColors.Blue,\n    OwidDistinctColors.Cherry,\n    OwidDistinctColors.LightTeal,\n    OwidDistinctColors.DarkCopper,\n    OwidDistinctColors.Peach,\n]\n\nexport const CategoricalColorsPaletteC = [\n    OwidDistinctColors.Purple,\n    OwidDistinctColors.DarkOrange,\n    OwidDistinctColors.LightTeal,\n    OwidDistinctColors.Blue,\n    OwidDistinctColors.Maroon,\n    OwidDistinctColors.Camel,\n    OwidDistinctColors.MidnightBlue,\n    OwidDistinctColors.DustyCoral,\n    OwidDistinctColors.DarkOliveGreen,\n    OwidDistinctColors.DarkCopper,\n    OwidDistinctColors.Peach,\n    OwidDistinctColors.Mauve,\n    OwidDistinctColors.Turquoise,\n    OwidDistinctColors.OliveGreen,\n    OwidDistinctColors.Cherry,\n    OwidDistinctColors.Teal,\n    OwidDistinctColors.RustyOrange,\n    OwidDistinctColors.Denim,\n    OwidDistinctColors.Fuchsia,\n    OwidDistinctColors.TealishGreen,\n    OwidDistinctColors.Copper,\n    OwidDistinctColors.DarkMauve,\n    OwidDistinctColors.Lime,\n    OwidDistinctColors.Coral,\n]\n\nexport const CategoricalColorsPaletteD = [\n    OwidDistinctColors.DustyCoral,\n    OwidDistinctColors.DarkOliveGreen,\n    OwidDistinctColors.Camel,\n    OwidDistinctColors.DarkMauve,\n    OwidDistinctColors.Turquoise,\n    OwidDistinctColors.TealishGreen,\n    OwidDistinctColors.Peach,\n    OwidDistinctColors.DarkCopper,\n    OwidDistinctColors.Fuchsia,\n    OwidDistinctColors.MidnightBlue,\n]\n\nexport const CategoricalColorsPaletteE = [\n    OwidDistinctColors.DarkCopper,\n    OwidDistinctColors.Peach,\n    OwidDistinctColors.Blue,\n    OwidDistinctColors.DarkOliveGreen,\n    OwidDistinctColors.Purple,\n    OwidDistinctColors.Teal,\n    OwidDistinctColors.Maroon,\n    OwidDistinctColors.Coral,\n    OwidDistinctColors.OliveGreen,\n    OwidDistinctColors.Camel,\n    OwidDistinctColors.DarkMauve,\n]\nexport const OwidDistinctColorScheme = {\n    name: ColorSchemeName[\"owid-distinct\"],\n    displayName: \"OWID Distinct\",\n    singleColorScale: false,\n    isDistinct: true,\n    // We use the feature of ColorSchemes to use the Palette A permutation\n    // for 12 categories or less and the Palette C to reach up to 24 different\n    // colors\n    colorSets: [CategoricalColorsPaletteA, CategoricalColorsPaletteC],\n}\nCustomColorSchemes.push(OwidDistinctColorScheme)\n\nconst OwidDistinctLinesPalette = [\n    OwidDistinctColors.Denim,\n    OwidDistinctColors.RustyOrange,\n    DarkerOwidDistinctColors.CamelDarker,\n    DarkerOwidDistinctColors.LightTealDarker,\n    OwidDistinctColors.Purple,\n    OwidDistinctColors.Maroon,\n    OwidDistinctColors.MidnightBlue,\n    OwidDistinctColors.Mauve,\n    OwidDistinctColors.DarkCopper,\n    DarkerOwidDistinctColors.TurquoiseDarker,\n    OwidDistinctColors.Cherry,\n    DarkerOwidDistinctColors.LimeDarker,\n    DarkerOwidDistinctColors.PeachDarker,\n    OwidDistinctColors.Blue,\n    OwidDistinctColors.DarkOliveGreen,\n    OwidDistinctColors.Coral,\n    OwidDistinctColors.Copper,\n    OwidDistinctColors.Teal,\n    OwidDistinctColors.Fuchsia,\n    OwidDistinctColors.OliveGreen,\n    DarkerOwidDistinctColors.DarkOrangeDarker,\n    OwidDistinctColors.DarkMauve,\n    OwidDistinctColors.TealishGreen,\n    OwidDistinctColors.DustyCoral,\n]\n\nexport const OwidDistinctLinesColorScheme = {\n    name: ColorSchemeName[\"OwidDistinctLines\"],\n    displayName: \"OWID Distinct (lines)\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [OwidDistinctLinesPalette],\n}\nCustomColorSchemes.push(OwidDistinctLinesColorScheme)\n\nexport const OwidCategoricalAScheme = {\n    name: ColorSchemeName[\"OwidCategoricalA\"],\n    displayName: \"OWID categorical A\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalColorsPaletteA],\n}\nCustomColorSchemes.push(OwidCategoricalAScheme)\n\nexport const OwidCategoricalBScheme = {\n    name: ColorSchemeName[\"OwidCategoricalB\"],\n    displayName: \"OWID categorical B\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalColorsPaletteB],\n}\nCustomColorSchemes.push(OwidCategoricalBScheme)\n\nexport const OwidCategoricalCScheme = {\n    name: ColorSchemeName[\"OwidCategoricalC\"],\n    displayName: \"OWID categorical C\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalColorsPaletteC],\n}\nCustomColorSchemes.push(OwidCategoricalCScheme)\n\nexport const OwidCategoricalDScheme = {\n    name: ColorSchemeName[\"OwidCategoricalD\"],\n    displayName: \"OWID categorical D\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalColorsPaletteD],\n}\nCustomColorSchemes.push(OwidCategoricalDScheme)\n\nexport const OwidCategoricalEScheme = {\n    name: ColorSchemeName[\"OwidCategoricalE\"],\n    displayName: \"OWID categorical E\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalColorsPaletteE],\n}\nCustomColorSchemes.push(OwidCategoricalEScheme)\n\nexport const EnergyColors = {\n    Coal: OwidDistinctColors.Maroon,\n    Oil: OwidDistinctColors.DustyCoral,\n    Gas: OwidDistinctColors.Purple,\n    Biomass: OwidDistinctColors.DarkCopper,\n    Hydropower: OwidDistinctColors.Blue,\n    Nuclear: OwidDistinctColors.Teal,\n    Wind: OwidDistinctColors.MidnightBlue,\n    Solar: OwidDistinctColors.Peach,\n    OtherRenewables: OwidDistinctColors.OliveGreen,\n}\n\n// Used for looking up color names from hex values\nconst EnergyColorsNames = lazy(() => R.invert(EnergyColors))\n\nconst EnergyColorPalette = [\n    EnergyColors.Coal,\n    EnergyColors.Oil,\n    EnergyColors.Gas,\n    EnergyColors.Biomass,\n    EnergyColors.Hydropower,\n    EnergyColors.Nuclear,\n    EnergyColors.Wind,\n    EnergyColors.Solar,\n    EnergyColors.OtherRenewables,\n]\n\nexport const OwidEnergy = {\n    name: ColorSchemeName[\"OwidEnergy\"],\n    displayName: \"OWID Energy\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [EnergyColorPalette],\n    colorMap: EnergyColors,\n}\nCustomColorSchemes.push(OwidEnergy)\n\nfunction getModifiedLinesNames(\n    colorNames: Record<string, string>\n): Record<string, string> {\n    return Object.fromEntries(\n        Object.entries(colorNames).map(([k, v]) => [\n            k in darkerColorReplacementsHexToReplacementColorName\n                ? darkerColorReplacementsHexToReplacementColorName[k]\n                : k,\n            v,\n        ])\n    )\n}\n\nconst EnergyColorsLinesNames = lazy(() =>\n    getModifiedLinesNames(EnergyColorsNames())\n)\n\nexport const OwidEnergyLines = getModifiedLinesColorScheme(OwidEnergy)\nCustomColorSchemes.push(OwidEnergyLines)\n\nCustomColorSchemes.push({\n    name: ColorSchemeName.stackedAreaDefault,\n    displayName: \"OWID 4 Color Gradient (=Owid Distinct)\",\n    singleColorScale: false,\n    isDistinct: true,\n    // TODO: this is now a copy of owid-distinct. After a data migration to get\n    // rid of stackedAreaDefault in existing chart configs we should replace it with\n    // owid-distinct\n    // We use the feature of ColorSchemes to use the Palette A permutation\n    // for 12 categories or less and the Palette C to reach up to 24 different\n    // colors\n    colorSets: [CategoricalColorsPaletteA, CategoricalColorsPaletteC],\n})\n\nexport const IncomeGroupColors = {\n    HighIncome: \"#0d8553\",\n    UpperMiddleIncome: \"#a1cb81\",\n    LowerMiddleIncome: \"#df9fdb\",\n    LowIncome: \"#974e94\",\n} as const\n\nexport const ContinentColors = {\n    // World\n    World: OwidDistinctColors.DarkOliveGreen,\n\n    // Continents\n    Africa: OwidDistinctColors.Mauve,\n    Antarctica: OwidDistinctColors.DarkCopper,\n    Asia: OwidDistinctColors.Teal,\n    Europe: OwidDistinctColors.Denim,\n    NorthAmerica: OwidDistinctColors.Peach,\n    [\"North America\"]: OwidDistinctColors.Peach,\n    SouthAmerica: OwidDistinctColors.Maroon,\n    [\"South America\"]: OwidDistinctColors.Maroon,\n    Oceania: OwidDistinctColors.Turquoise,\n\n    // Sub-regions\n    SubSaharanAfrica: OwidDistinctColors.DarkMauve,\n    MiddleEastNorthAfrica: OwidDistinctColors.Purple,\n    CentralAsia: OwidDistinctColors.LightTeal,\n    EastAsia: OwidDistinctColors.TealishGreen,\n    SoutheastAsia: OwidDistinctColors.Lime,\n    SouthAsia: OwidDistinctColors.OliveGreen,\n    CentralAmericaAndCarribean: OwidDistinctColors.DustyCoral,\n    EasternEurope: OwidDistinctColors.Blue,\n    WesternEurope: OwidDistinctColors.MidnightBlue,\n    AustralasiaAndOceania: OwidDistinctColors.Copper,\n\n    // World Bank regions\n    \"East Asia and Pacific (WB)\": OwidDistinctColors.Copper,\n    \"Europe and Central Asia (WB)\": OwidDistinctColors.Denim,\n    \"Middle East, North Africa, Afghanistan and Pakistan (WB)\":\n        OwidDistinctColors.Camel,\n    \"North America (WB)\": OwidDistinctColors.Peach,\n    \"South Asia (WB)\": OwidDistinctColors.OliveGreen,\n    \"Sub-Saharan Africa (WB)\": OwidDistinctColors.DarkMauve,\n    \"Latin America and Caribbean (WB)\": OwidDistinctColors.Maroon,\n\n    // UN regions\n    \"Asia (UN)\": OwidDistinctColors.Teal,\n    \"Africa (UN)\": OwidDistinctColors.Mauve,\n    \"Europe (UN)\": OwidDistinctColors.Denim,\n    \"Oceania (UN)\": OwidDistinctColors.Turquoise,\n    \"Northern America (UN)\": OwidDistinctColors.Peach,\n    \"Latin America and the Caribbean (UN)\": OwidDistinctColors.Maroon,\n\n    // WHO regions\n    \"Africa (WHO)\": OwidDistinctColors.Mauve,\n    \"Europe (WHO)\": OwidDistinctColors.Denim,\n    \"Americas (WHO)\": OwidDistinctColors.Peach,\n    \"South-East Asia (WHO)\": OwidDistinctColors.Lime,\n    \"Western Pacific (WHO)\": OwidDistinctColors.Turquoise,\n    \"Eastern Mediterranean (WHO)\": OwidDistinctColors.Camel,\n\n    // Maddison regions\n    \"East Asia (Maddison)\": OwidDistinctColors.Copper,\n    \"Latin America (Maddison)\": OwidDistinctColors.Maroon,\n    \"Eastern Europe (Maddison)\": OwidDistinctColors.MidnightBlue,\n    \"Western Europe (Maddison)\": OwidDistinctColors.Denim,\n    \"Western Offshoots (Maddison)\": OwidDistinctColors.Peach,\n    \"Sub Saharan Africa (Maddison)\": OwidDistinctColors.DarkMauve,\n    \"South and South East Asia (Maddison)\": OwidDistinctColors.OliveGreen,\n    \"Middle East and North Africa (Maddison)\": OwidDistinctColors.Camel,\n\n    // Pew Research Center regions\n    \"Europe (Pew)\": OwidDistinctColors.Denim,\n    \"Asia-Pacific (Pew)\": OwidDistinctColors.Teal,\n    \"North America (Pew)\": OwidDistinctColors.Peach,\n    \"Sub-Saharan Africa (Pew)\": OwidDistinctColors.DarkMauve,\n    \"Latin America-Caribbean (Pew)\": OwidDistinctColors.Maroon,\n    \"Middle East-North Africa (Pew)\": OwidDistinctColors.Camel,\n\n    // UN SDG regions\n    \"Australia and New Zealand (UN SDG)\": OwidDistinctColors.Teal,\n    \"Central and Southern Asia (UN SDG)\": OwidDistinctColors.OliveGreen,\n    \"Eastern and South-Eastern Asia (UN SDG)\": OwidDistinctColors.Copper,\n    \"Europe and Northern America (UN SDG)\": OwidDistinctColors.Denim,\n    \"Latin America and the Caribbean (UN SDG)\": OwidDistinctColors.Maroon,\n    \"Northern Africa and Western Asia (UN SDG)\": OwidDistinctColors.Camel,\n    \"Oceania (UN SDG)\": OwidDistinctColors.Turquoise,\n    \"Sub-Saharan Africa (UN SDG)\": OwidDistinctColors.DarkMauve,\n\n    // ILO regions\n    \"Africa (ILO)\": OwidDistinctColors.DarkMauve,\n    \"Americas (ILO)\": OwidDistinctColors.Peach,\n    \"Arab States (ILO)\": OwidDistinctColors.Camel,\n    \"Asia and the Pacific (ILO)\": OwidDistinctColors.OliveGreen,\n    \"Europe and Central Asia (ILO)\": OwidDistinctColors.Denim,\n\n    // Income groups\n    \"High-income countries\": IncomeGroupColors.HighIncome,\n    \"Upper-middle-income countries\": IncomeGroupColors.UpperMiddleIncome,\n    \"Lower-middle-income countries\": IncomeGroupColors.LowerMiddleIncome,\n    \"Low-income countries\": IncomeGroupColors.LowIncome,\n} as const\n\n// Used for looking up color names from hex values\nconst ContinentColorsNames = lazy(() => R.invert(ContinentColors))\n\nconst ContinentColorPalette = [\n    ContinentColors.Africa,\n    ContinentColors.Asia,\n    ContinentColors.Europe,\n    ContinentColors.NorthAmerica,\n    ContinentColors.Oceania,\n    ContinentColors.SouthAmerica,\n    ContinentColors.World,\n    ContinentColors.SubSaharanAfrica,\n    ContinentColors.MiddleEastNorthAfrica,\n    ContinentColors.CentralAsia,\n    ContinentColors.EastAsia,\n    ContinentColors.SoutheastAsia,\n    ContinentColors.SouthAsia,\n    ContinentColors.CentralAmericaAndCarribean,\n    ContinentColors.EasternEurope,\n    ContinentColors.WesternEurope,\n    ContinentColors.AustralasiaAndOceania,\n    ContinentColors.Antarctica,\n]\n\nexport const ContinentColorsColorScheme = {\n    name: ColorSchemeName.continents,\n    displayName: \"Continents\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [ContinentColorPalette],\n    colorMap: ContinentColors,\n}\n\nCustomColorSchemes.push(ContinentColorsColorScheme)\n\nfunction getModifiedLinesColorScheme(\n    colorScheme: ColorSchemeInterface\n): ColorSchemeInterface {\n    const colors = colorScheme.colorSets[0]\n    const modifiedColors = colors.map((color) =>\n        color in darkerColorReplacementsHexToReplacementColorName\n            ? darkerColorReplacementsHexToReplacementColorName[color]\n            : color\n    )\n\n    // If the scheme has a colorMap, we need to create a modified version with darker colors\n    const modifiedColorMap = colorScheme.colorMap\n        ? _.mapValues(colorScheme.colorMap, (color) =>\n              color in darkerColorReplacementsHexToReplacementColorName\n                  ? darkerColorReplacementsHexToReplacementColorName[color]\n                  : color\n          )\n        : undefined\n\n    return {\n        ...colorScheme,\n        colorSets: [modifiedColors],\n        colorMap: modifiedColorMap,\n        name: colorScheme.name + \"Lines\",\n        displayName: (colorScheme.displayName ?? \"\") + \" (Lines)\",\n    }\n}\n\nconst ContinentColorsLinesNames = lazy(() =>\n    getModifiedLinesNames(ContinentColorsNames())\n)\n\nexport const ContinentColorsLinesColorScheme = getModifiedLinesColorScheme(\n    ContinentColorsColorScheme\n)\n\nCustomColorSchemes.push(ContinentColorsLinesColorScheme)\n\nexport const SingleColorDenim = {\n    name: ColorSchemeName.SingleColorDenim,\n    displayName: \"Single color: Denim\",\n    singleColorScale: true,\n    isDistinct: true,\n    colorSets: [[OwidDistinctColors.Denim]],\n}\n\nCustomColorSchemes.push(SingleColorDenim)\n\nexport const SingleColorTeal = {\n    name: ColorSchemeName.SingleColorTeal,\n    displayName: \"Single color: Teal\",\n    singleColorScale: true,\n    isDistinct: true,\n    colorSets: [[OwidDistinctColors.Teal]],\n}\n\nCustomColorSchemes.push(SingleColorTeal)\n\nexport const SingleColorPurple = {\n    name: ColorSchemeName.SingleColorPurple,\n    displayName: \"Single color: Purple\",\n    singleColorScale: true,\n    isDistinct: true,\n    colorSets: [[OwidDistinctColors.Purple]],\n}\n\nCustomColorSchemes.push(SingleColorPurple)\n\nexport const SingleColorDustyCoral = {\n    name: ColorSchemeName.SingleColorDustyCoral,\n    displayName: \"Single color: Dusty coral\",\n    singleColorScale: true,\n    isDistinct: true,\n    colorSets: [[OwidDistinctColors.DustyCoral]],\n}\n\nCustomColorSchemes.push(SingleColorDustyCoral)\n\nexport const SingleColorDarkCopper = {\n    name: ColorSchemeName.SingleColorDarkCopper,\n    displayName: \"Single color: Dark copper\",\n    singleColorScale: true,\n    isDistinct: true,\n    colorSets: [[OwidDistinctColors.DarkCopper]],\n}\n\nCustomColorSchemes.push(SingleColorDarkCopper)\n\nexport const SingleColorGradientDenim = {\n    name: ColorSchemeName.SingleColorGradientDenim,\n    displayName: \"Single color gradient: Denim\",\n    singleColorScale: true,\n    isDistinct: false,\n    colorSets: [\n        [\n            \"#00173e\",\n            \"#152a55\",\n            \"#273f6c\",\n            \"#3a5484\",\n            \"#4e6b9e\",\n            \"#6683b5\",\n            \"#7f9bcd\",\n            \"#98b3e6\",\n            \"#b2ccff\",\n        ],\n    ],\n}\nCustomColorSchemes.push(SingleColorGradientDenim)\nexport const SingleColorGradientTeal = {\n    name: ColorSchemeName.SingleColorGradientTeal,\n    displayName: \"Single color gradient: Teal\",\n    singleColorScale: true,\n    isDistinct: false,\n    colorSets: [\n        [\n            \"#002926\",\n            \"#003f3b\",\n            \"#005551\",\n            \"#006e68\",\n            \"#088780\",\n            \"#339f98\",\n            \"#51b7b0\",\n            \"#6cd1c9\",\n            \"#86ebe3\",\n        ],\n    ],\n}\nCustomColorSchemes.push(SingleColorGradientTeal)\n\nexport const SingleColorGradientPurple = {\n    name: ColorSchemeName.SingleColorGradientPurple,\n    displayName: \"Single color gradient: Purple\",\n    singleColorScale: true,\n    isDistinct: false,\n    colorSets: [\n        [\n            \"#3d1161\",\n            \"#542777\",\n            \"#6b3d8f\",\n            \"#8354a2\",\n            \"#9c6bb4\",\n            \"#b484c6\",\n            \"#cd9dd9\",\n            \"#e5b7ec\",\n            \"#ffd1ff\",\n        ],\n    ],\n}\nCustomColorSchemes.push(SingleColorGradientPurple)\n\nexport const SingleColorGradientDustyCoral = {\n    name: ColorSchemeName.SingleColorGradientDustyCoral,\n    displayName: \"Single color gradient: DustyCoral\",\n    singleColorScale: true,\n    isDistinct: false,\n    colorSets: [\n        [\n            \"#580014\",\n            \"#711626\",\n            \"#8b293a\",\n            \"#a53c4e\",\n            \"#bf4e63\",\n            \"#d1697b\",\n            \"#e18495\",\n            \"#f09dae\",\n            \"#ffb8c9\",\n        ],\n    ],\n}\nCustomColorSchemes.push(SingleColorGradientDustyCoral)\nexport const SingleColorGradientDarkCopper = {\n    name: ColorSchemeName.SingleColorGradientDarkCopper,\n    displayName: \"Single color gradient: DarkCopper\",\n    singleColorScale: true,\n    isDistinct: false,\n    colorSets: [\n        [\n            \"#390000\",\n            \"#501510\",\n            \"#692919\",\n            \"#823d21\",\n            \"#9c532a\",\n            \"#b46a40\",\n            \"#cd8257\",\n            \"#e69a6e\",\n            \"#ffb285\",\n        ],\n    ],\n}\nCustomColorSchemes.push(SingleColorGradientDarkCopper)\n\nexport const BinaryMapPaletteA = {\n    name: ColorSchemeName.BinaryMapPaletteA,\n    displayName: \"Binary map palette A\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [[\"#dfc27d\", \"#80cdc1\"]],\n}\n\nCustomColorSchemes.push(BinaryMapPaletteA)\n\nexport const BinaryMapPaletteB = {\n    name: ColorSchemeName.BinaryMapPaletteB,\n    displayName: \"Binary map palette B\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [[\"#f1b6da\", \"#b8e186\"]],\n}\n\nCustomColorSchemes.push(BinaryMapPaletteB)\n\nexport const BinaryMapPaletteC = {\n    name: ColorSchemeName.BinaryMapPaletteC,\n    displayName: \"Binary map palette C\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [[\"#c2a5cf\", \"#a6dba0\"]],\n}\n\nCustomColorSchemes.push(BinaryMapPaletteC)\n\nexport const BinaryMapPaletteD = {\n    name: ColorSchemeName.BinaryMapPaletteD,\n    displayName: \"Binary map palette D\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [[\"#fdb863\", \"#b2abd2\"]],\n}\n\nCustomColorSchemes.push(BinaryMapPaletteD)\n\nexport const BinaryMapPaletteE = {\n    name: ColorSchemeName.BinaryMapPaletteE,\n    displayName: \"Binary map palette E\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [[\"#f4a582\", \"#92c5de\"]],\n}\n\nCustomColorSchemes.push(BinaryMapPaletteE)\n\nexport const OwidMapColors: Record<string, Color> = {\n    // Main\n    MutedDenim: \"#526F9B\",\n    SoftOrange: \"#CC7641\",\n    MutedTeal: \"#238A84\",\n    SoftPurple: \"#77538F\",\n    Sand: \"#C3A27C\",\n    MutedCherry: \"#B04E74\",\n    LeafGreen: \"#6FA54F\",\n    SkyTurquoise: \"#5FB8C8\",\n    Lavendar: \"#8E97C7\",\n    Olive: \"#5B6D35\",\n\n    // Extended\n    LightDenim: \"#92D3DE\",\n    LightOrange: \"#E2A17A\",\n    LightTeal: \"#4FB2AC\",\n    LightPurple: \"#A07AB8\",\n    LightSand: \"#D8C0A2\",\n    LightCherry: \"#CB7FA0\",\n    LightGreen: \"#9DCA7B\",\n\n    // Special\n    Taupe: \"#B9B2A6\",\n    Mustard: \"#D9BC54\",\n    Tomato: \"#D94C3F\",\n} as const\n\nconst CategoricalMapPalette10 = [\n    OwidMapColors.MutedDenim,\n    OwidMapColors.SoftOrange,\n    OwidMapColors.MutedTeal,\n    OwidMapColors.SoftPurple,\n    OwidMapColors.Sand,\n    OwidMapColors.MutedCherry,\n    OwidMapColors.LeafGreen,\n    OwidMapColors.SkyTurquoise,\n    OwidMapColors.Lavendar,\n    OwidMapColors.Olive,\n]\n\nexport const CategoricalMapPalette17 = [\n    ...CategoricalMapPalette10,\n    OwidMapColors.LightDenim,\n    OwidMapColors.LightOrange,\n    OwidMapColors.LightTeal,\n    OwidMapColors.LightPurple,\n    OwidMapColors.LightSand,\n    OwidMapColors.LightCherry,\n    OwidMapColors.LightGreen,\n]\n\nexport const OwidCategoricalMapScheme = {\n    name: ColorSchemeName.OwidCategoricalMap,\n    displayName: \"OWID Categorical Map\",\n    singleColorScale: false,\n    isDistinct: true,\n    colorSets: [CategoricalMapPalette10, CategoricalMapPalette17],\n}\nCustomColorSchemes.push(OwidCategoricalMapScheme)\n\n// Map-specific region colors\nexport const MapContinentColors = {\n    ...ContinentColors,\n\n    // Continents\n    Africa: OwidMapColors.LightPurple,\n    Antarctica: OwidMapColors.SoftOrange,\n    Asia: OwidMapColors.MutedTeal,\n    Europe: OwidMapColors.MutedDenim,\n    NorthAmerica: OwidMapColors.LightOrange,\n    [\"North America\"]: OwidMapColors.LightOrange,\n    SouthAmerica: OwidMapColors.Tomato,\n    [\"South America\"]: OwidMapColors.Tomato,\n    Oceania: OwidMapColors.SkyTurquoise,\n\n    // Sub-regions\n    SubSaharanAfrica: OwidMapColors.SoftPurple,\n    MiddleEastNorthAfrica: OwidMapColors.Sand,\n    CentralAsia: OwidMapColors.LightTeal,\n    EastAsia: OwidMapColors.LightGreen,\n    SoutheastAsia: OwidMapColors.LeafGreen,\n    SouthAsia: OwidMapColors.Olive,\n    CentralAmericaAndCarribean: OwidMapColors.MutedCherry,\n    EasternEurope: OwidMapColors.Lavendar,\n    WesternEurope: OwidMapColors.LightDenim,\n    AustralasiaAndOceania: OwidMapColors.Mustard,\n\n    // World Bank regions\n    \"East Asia and Pacific (WB)\": OwidMapColors.SkyTurquoise,\n    \"Europe and Central Asia (WB)\": OwidMapColors.MutedDenim,\n    \"Middle East, North Africa, Afghanistan and Pakistan (WB)\":\n        OwidMapColors.Sand,\n    \"North America (WB)\": OwidMapColors.SoftOrange,\n    \"South Asia (WB)\": OwidMapColors.Olive,\n    \"Sub-Saharan Africa (WB)\": OwidMapColors.LightPurple,\n    \"Latin America and Caribbean (WB)\": OwidMapColors.MutedCherry,\n\n    // UN regions\n    \"Asia (UN)\": OwidMapColors.MutedTeal,\n    \"Africa (UN)\": OwidMapColors.LightPurple,\n    \"Europe (UN)\": OwidMapColors.MutedDenim,\n    \"Oceania (UN)\": OwidMapColors.SkyTurquoise,\n    \"Northern America (UN)\": OwidMapColors.LightOrange,\n    \"Latin America and the Caribbean (UN)\": OwidMapColors.MutedCherry,\n\n    // WHO regions\n    \"Africa (WHO)\": OwidMapColors.LightPurple,\n    \"Europe (WHO)\": OwidMapColors.MutedDenim,\n    \"Americas (WHO)\": OwidMapColors.SoftOrange,\n    \"South-East Asia (WHO)\": OwidMapColors.LeafGreen,\n    \"Western Pacific (WHO)\": OwidMapColors.SkyTurquoise,\n    \"Eastern Mediterranean (WHO)\": OwidMapColors.Sand,\n\n    // Maddison regions\n    \"East Asia (Maddison)\": OwidMapColors.LightCherry,\n    \"Latin America (Maddison)\": OwidMapColors.MutedCherry,\n    \"Eastern Europe (Maddison)\": OwidMapColors.LightDenim,\n    \"Western Europe (Maddison)\": OwidMapColors.MutedDenim,\n    \"Western Offshoots (Maddison)\": OwidMapColors.SoftOrange,\n    \"Sub Saharan Africa (Maddison)\": OwidMapColors.LightPurple,\n    \"South and South East Asia (Maddison)\": OwidMapColors.Olive,\n    \"Middle East and North Africa (Maddison)\": OwidMapColors.Sand,\n\n    // Pew Research Center regions\n    \"Europe (Pew)\": OwidMapColors.MutedDenim,\n    \"Asia-Pacific (Pew)\": OwidMapColors.MutedTeal,\n    \"North America (Pew)\": OwidMapColors.SoftOrange,\n    \"Sub-Saharan Africa (Pew)\": OwidMapColors.LightPurple,\n    \"Latin America-Caribbean (Pew)\": OwidMapColors.MutedCherry,\n    \"Middle East-North Africa (Pew)\": OwidMapColors.Sand,\n\n    // UN SDG regions\n    \"Australia and New Zealand (UN SDG)\": OwidMapColors.MutedTeal,\n    \"Central and Southern Asia (UN SDG)\": OwidMapColors.Olive,\n    \"Eastern and South-Eastern Asia (UN SDG)\": OwidMapColors.SoftOrange,\n    \"Europe and Northern America (UN SDG)\": OwidMapColors.MutedDenim,\n    \"Latin America and the Caribbean (UN SDG)\": OwidMapColors.MutedCherry,\n    \"Northern Africa and Western Asia (UN SDG)\": OwidMapColors.Sand,\n    \"Oceania (UN SDG)\": OwidMapColors.SkyTurquoise,\n    \"Sub-Saharan Africa (UN SDG)\": OwidMapColors.LightPurple,\n} as const\n\nexport const DefaultColorScheme = OwidDistinctColorScheme\n\nexport function getColorNameAndSemanticPalettes(\n    color: string,\n    baseColorSchemeNames: Record<string, string>,\n    continentsColorSchemeNames: Record<string, string>,\n    energyColorSchemeNames: Record<string, string>\n): string[] {\n    const colorNameStandardized = color.toUpperCase()\n    const owidDistinct =\n        colorNameStandardized in baseColorSchemeNames\n            ? `🎨 ${baseColorSchemeNames[colorNameStandardized]}`\n            : \"\"\n    const continents =\n        colorNameStandardized in continentsColorSchemeNames\n            ? `🌍 ${continentsColorSchemeNames[colorNameStandardized]}`\n            : \"\"\n    const energy =\n        colorNameStandardized in energyColorSchemeNames\n            ? `⚡ ${energyColorSchemeNames[colorNameStandardized]}`\n            : \"\"\n    const lines = [owidDistinct, continents, energy].filter((x) => x !== \"\")\n\n    return lines\n}\n\nexport function getColorNameOwidDistinctAndSemanticPalettes(\n    color: string\n): string[] {\n    return getColorNameAndSemanticPalettes(\n        color,\n        OwidDistinctColorsNames(),\n        ContinentColorsNames(),\n        EnergyColorsNames()\n    )\n}\n\nexport function getColorNameOwidDistinctLinesAndSemanticPalettes(\n    color: string\n): string[] {\n    return getColorNameAndSemanticPalettes(\n        color,\n        OwidDistinctLinesColorNames(),\n        ContinentColorsLinesNames(),\n        EnergyColorsLinesNames()\n    )\n}\n\n// Perceptual color scales from https://github.com/politiken-journalism/scale-color-perceptual\nCustomColorSchemes.push({\n    name: ColorSchemeName.Viridis,\n    singleColorScale: false,\n    colorSets: [\n        [\n            \"#440154\",\n            \"#440256\",\n            \"#450457\",\n            \"#450559\",\n            \"#46075a\",\n            \"#46085c\",\n            \"#460a5d\",\n            \"#460b5e\",\n            \"#470d60\",\n            \"#470e61\",\n            \"#471063\",\n            \"#471164\",\n            \"#471365\",\n            \"#481467\",\n            \"#481668\",\n            \"#481769\",\n            \"#48186a\",\n            \"#481a6c\",\n            \"#481b6d\",\n            \"#481c6e\",\n            \"#481d6f\",\n            \"#481f70\",\n            \"#482071\",\n            \"#482173\",\n            \"#482374\",\n            \"#482475\",\n            \"#482576\",\n            \"#482677\",\n            \"#482878\",\n            \"#482979\",\n            \"#472a7a\",\n            \"#472c7a\",\n            \"#472d7b\",\n            \"#472e7c\",\n            \"#472f7d\",\n            \"#46307e\",\n            \"#46327e\",\n            \"#46337f\",\n            \"#463480\",\n            \"#453581\",\n            \"#453781\",\n            \"#453882\",\n            \"#443983\",\n            \"#443a83\",\n            \"#443b84\",\n            \"#433d84\",\n            \"#433e85\",\n            \"#423f85\",\n            \"#424086\",\n            \"#424186\",\n            \"#414287\",\n            \"#414487\",\n            \"#404588\",\n            \"#404688\",\n            \"#3f4788\",\n            \"#3f4889\",\n            \"#3e4989\",\n            \"#3e4a89\",\n            \"#3e4c8a\",\n            \"#3d4d8a\",\n            \"#3d4e8a\",\n            \"#3c4f8a\",\n            \"#3c508b\",\n            \"#3b518b\",\n            \"#3b528b\",\n            \"#3a538b\",\n            \"#3a548c\",\n            \"#39558c\",\n            \"#39568c\",\n            \"#38588c\",\n            \"#38598c\",\n            \"#375a8c\",\n            \"#375b8d\",\n            \"#365c8d\",\n            \"#365d8d\",\n            \"#355e8d\",\n            \"#355f8d\",\n            \"#34608d\",\n            \"#34618d\",\n            \"#33628d\",\n            \"#33638d\",\n            \"#32648e\",\n            \"#32658e\",\n            \"#31668e\",\n            \"#31678e\",\n            \"#31688e\",\n            \"#30698e\",\n            \"#306a8e\",\n            \"#2f6b8e\",\n            \"#2f6c8e\",\n            \"#2e6d8e\",\n            \"#2e6e8e\",\n            \"#2e6f8e\",\n            \"#2d708e\",\n            \"#2d718e\",\n            \"#2c718e\",\n            \"#2c728e\",\n            \"#2c738e\",\n            \"#2b748e\",\n            \"#2b758e\",\n            \"#2a768e\",\n            \"#2a778e\",\n            \"#2a788e\",\n            \"#29798e\",\n            \"#297a8e\",\n            \"#297b8e\",\n            \"#287c8e\",\n            \"#287d8e\",\n            \"#277e8e\",\n            \"#277f8e\",\n            \"#27808e\",\n            \"#26818e\",\n            \"#26828e\",\n            \"#26828e\",\n            \"#25838e\",\n            \"#25848e\",\n            \"#25858e\",\n            \"#24868e\",\n            \"#24878e\",\n            \"#23888e\",\n            \"#23898e\",\n            \"#238a8d\",\n            \"#228b8d\",\n            \"#228c8d\",\n            \"#228d8d\",\n            \"#218e8d\",\n            \"#218f8d\",\n            \"#21908d\",\n            \"#21918c\",\n            \"#20928c\",\n            \"#20928c\",\n            \"#20938c\",\n            \"#1f948c\",\n            \"#1f958b\",\n            \"#1f968b\",\n            \"#1f978b\",\n            \"#1f988b\",\n            \"#1f998a\",\n            \"#1f9a8a\",\n            \"#1e9b8a\",\n            \"#1e9c89\",\n            \"#1e9d89\",\n            \"#1f9e89\",\n            \"#1f9f88\",\n            \"#1fa088\",\n            \"#1fa188\",\n            \"#1fa187\",\n            \"#1fa287\",\n            \"#20a386\",\n            \"#20a486\",\n            \"#21a585\",\n            \"#21a685\",\n            \"#22a785\",\n            \"#22a884\",\n            \"#23a983\",\n            \"#24aa83\",\n            \"#25ab82\",\n            \"#25ac82\",\n            \"#26ad81\",\n            \"#27ad81\",\n            \"#28ae80\",\n            \"#29af7f\",\n            \"#2ab07f\",\n            \"#2cb17e\",\n            \"#2db27d\",\n            \"#2eb37c\",\n            \"#2fb47c\",\n            \"#31b57b\",\n            \"#32b67a\",\n            \"#34b679\",\n            \"#35b779\",\n            \"#37b878\",\n            \"#38b977\",\n            \"#3aba76\",\n            \"#3bbb75\",\n            \"#3dbc74\",\n            \"#3fbc73\",\n            \"#40bd72\",\n            \"#42be71\",\n            \"#44bf70\",\n            \"#46c06f\",\n            \"#48c16e\",\n            \"#4ac16d\",\n            \"#4cc26c\",\n            \"#4ec36b\",\n            \"#50c46a\",\n            \"#52c569\",\n            \"#54c568\",\n            \"#56c667\",\n            \"#58c765\",\n            \"#5ac864\",\n            \"#5cc863\",\n            \"#5ec962\",\n            \"#60ca60\",\n            \"#63cb5f\",\n            \"#65cb5e\",\n            \"#67cc5c\",\n            \"#69cd5b\",\n            \"#6ccd5a\",\n            \"#6ece58\",\n            \"#70cf57\",\n            \"#73d056\",\n            \"#75d054\",\n            \"#77d153\",\n            \"#7ad151\",\n            \"#7cd250\",\n            \"#7fd34e\",\n            \"#81d34d\",\n            \"#84d44b\",\n            \"#86d549\",\n            \"#89d548\",\n            \"#8bd646\",\n            \"#8ed645\",\n            \"#90d743\",\n            \"#93d741\",\n            \"#95d840\",\n            \"#98d83e\",\n            \"#9bd93c\",\n            \"#9dd93b\",\n            \"#a0da39\",\n            \"#a2da37\",\n            \"#a5db36\",\n            \"#a8db34\",\n            \"#aadc32\",\n            \"#addc30\",\n            \"#b0dd2f\",\n            \"#b2dd2d\",\n            \"#b5de2b\",\n            \"#b8de29\",\n            \"#bade28\",\n            \"#bddf26\",\n            \"#c0df25\",\n            \"#c2df23\",\n            \"#c5e021\",\n            \"#c8e020\",\n            \"#cae11f\",\n            \"#cde11d\",\n            \"#d0e11c\",\n            \"#d2e21b\",\n            \"#d5e21a\",\n            \"#d8e219\",\n            \"#dae319\",\n            \"#dde318\",\n            \"#dfe318\",\n            \"#e2e418\",\n            \"#e5e419\",\n            \"#e7e419\",\n            \"#eae51a\",\n            \"#ece51b\",\n            \"#efe51c\",\n            \"#f1e51d\",\n            \"#f4e61e\",\n            \"#f6e620\",\n            \"#f8e621\",\n            \"#fbe723\",\n            \"#fde725\",\n        ],\n    ],\n})\n\nCustomColorSchemes.push({\n    name: ColorSchemeName.Magma,\n    colorSets: [\n        [\n            \"#000004\",\n            \"#010005\",\n            \"#010106\",\n            \"#010108\",\n            \"#020109\",\n            \"#02020b\",\n            \"#02020d\",\n            \"#03030f\",\n            \"#030312\",\n            \"#040414\",\n            \"#050416\",\n            \"#060518\",\n            \"#06051a\",\n            \"#07061c\",\n            \"#08071e\",\n            \"#090720\",\n            \"#0a0822\",\n            \"#0b0924\",\n            \"#0c0926\",\n            \"#0d0a29\",\n            \"#0e0b2b\",\n            \"#100b2d\",\n            \"#110c2f\",\n            \"#120d31\",\n            \"#130d34\",\n            \"#140e36\",\n            \"#150e38\",\n            \"#160f3b\",\n            \"#180f3d\",\n            \"#19103f\",\n            \"#1a1042\",\n            \"#1c1044\",\n            \"#1d1147\",\n            \"#1e1149\",\n            \"#20114b\",\n            \"#21114e\",\n            \"#221150\",\n            \"#241253\",\n            \"#251255\",\n            \"#271258\",\n            \"#29115a\",\n            \"#2a115c\",\n            \"#2c115f\",\n            \"#2d1161\",\n            \"#2f1163\",\n            \"#311165\",\n            \"#331067\",\n            \"#341069\",\n            \"#36106b\",\n            \"#38106c\",\n            \"#390f6e\",\n            \"#3b0f70\",\n            \"#3d0f71\",\n            \"#3f0f72\",\n            \"#400f74\",\n            \"#420f75\",\n            \"#440f76\",\n            \"#451077\",\n            \"#471078\",\n            \"#491078\",\n            \"#4a1079\",\n            \"#4c117a\",\n            \"#4e117b\",\n            \"#4f127b\",\n            \"#51127c\",\n            \"#52137c\",\n            \"#54137d\",\n            \"#56147d\",\n            \"#57157e\",\n            \"#59157e\",\n            \"#5a167e\",\n            \"#5c167f\",\n            \"#5d177f\",\n            \"#5f187f\",\n            \"#601880\",\n            \"#621980\",\n            \"#641a80\",\n            \"#651a80\",\n            \"#671b80\",\n            \"#681c81\",\n            \"#6a1c81\",\n            \"#6b1d81\",\n            \"#6d1d81\",\n            \"#6e1e81\",\n            \"#701f81\",\n            \"#721f81\",\n            \"#732081\",\n            \"#752181\",\n            \"#762181\",\n            \"#782281\",\n            \"#792282\",\n            \"#7b2382\",\n            \"#7c2382\",\n            \"#7e2482\",\n            \"#802582\",\n            \"#812581\",\n            \"#832681\",\n            \"#842681\",\n            \"#862781\",\n            \"#882781\",\n            \"#892881\",\n            \"#8b2981\",\n            \"#8c2981\",\n            \"#8e2a81\",\n            \"#902a81\",\n            \"#912b81\",\n            \"#932b80\",\n            \"#942c80\",\n            \"#962c80\",\n            \"#982d80\",\n            \"#992d80\",\n            \"#9b2e7f\",\n            \"#9c2e7f\",\n            \"#9e2f7f\",\n            \"#a02f7f\",\n            \"#a1307e\",\n            \"#a3307e\",\n            \"#a5317e\",\n            \"#a6317d\",\n            \"#a8327d\",\n            \"#aa337d\",\n            \"#ab337c\",\n            \"#ad347c\",\n            \"#ae347b\",\n            \"#b0357b\",\n            \"#b2357b\",\n            \"#b3367a\",\n            \"#b5367a\",\n            \"#b73779\",\n            \"#b83779\",\n            \"#ba3878\",\n            \"#bc3978\",\n            \"#bd3977\",\n            \"#bf3a77\",\n            \"#c03a76\",\n            \"#c23b75\",\n            \"#c43c75\",\n            \"#c53c74\",\n            \"#c73d73\",\n            \"#c83e73\",\n            \"#ca3e72\",\n            \"#cc3f71\",\n            \"#cd4071\",\n            \"#cf4070\",\n            \"#d0416f\",\n            \"#d2426f\",\n            \"#d3436e\",\n            \"#d5446d\",\n            \"#d6456c\",\n            \"#d8456c\",\n            \"#d9466b\",\n            \"#db476a\",\n            \"#dc4869\",\n            \"#de4968\",\n            \"#df4a68\",\n            \"#e04c67\",\n            \"#e24d66\",\n            \"#e34e65\",\n            \"#e44f64\",\n            \"#e55064\",\n            \"#e75263\",\n            \"#e85362\",\n            \"#e95462\",\n            \"#ea5661\",\n            \"#eb5760\",\n            \"#ec5860\",\n            \"#ed5a5f\",\n            \"#ee5b5e\",\n            \"#ef5d5e\",\n            \"#f05f5e\",\n            \"#f1605d\",\n            \"#f2625d\",\n            \"#f2645c\",\n            \"#f3655c\",\n            \"#f4675c\",\n            \"#f4695c\",\n            \"#f56b5c\",\n            \"#f66c5c\",\n            \"#f66e5c\",\n            \"#f7705c\",\n            \"#f7725c\",\n            \"#f8745c\",\n            \"#f8765c\",\n            \"#f9785d\",\n            \"#f9795d\",\n            \"#f97b5d\",\n            \"#fa7d5e\",\n            \"#fa7f5e\",\n            \"#fa815f\",\n            \"#fb835f\",\n            \"#fb8560\",\n            \"#fb8761\",\n            \"#fc8961\",\n            \"#fc8a62\",\n            \"#fc8c63\",\n            \"#fc8e64\",\n            \"#fc9065\",\n            \"#fd9266\",\n            \"#fd9467\",\n            \"#fd9668\",\n            \"#fd9869\",\n            \"#fd9a6a\",\n            \"#fd9b6b\",\n            \"#fe9d6c\",\n            \"#fe9f6d\",\n            \"#fea16e\",\n            \"#fea36f\",\n            \"#fea571\",\n            \"#fea772\",\n            \"#fea973\",\n            \"#feaa74\",\n            \"#feac76\",\n            \"#feae77\",\n            \"#feb078\",\n            \"#feb27a\",\n            \"#feb47b\",\n            \"#feb67c\",\n            \"#feb77e\",\n            \"#feb97f\",\n            \"#febb81\",\n            \"#febd82\",\n            \"#febf84\",\n            \"#fec185\",\n            \"#fec287\",\n            \"#fec488\",\n            \"#fec68a\",\n            \"#fec88c\",\n            \"#feca8d\",\n            \"#fecc8f\",\n            \"#fecd90\",\n            \"#fecf92\",\n            \"#fed194\",\n            \"#fed395\",\n            \"#fed597\",\n            \"#fed799\",\n            \"#fed89a\",\n            \"#fdda9c\",\n            \"#fddc9e\",\n            \"#fddea0\",\n            \"#fde0a1\",\n            \"#fde2a3\",\n            \"#fde3a5\",\n            \"#fde5a7\",\n            \"#fde7a9\",\n            \"#fde9aa\",\n            \"#fdebac\",\n            \"#fcecae\",\n            \"#fceeb0\",\n            \"#fcf0b2\",\n            \"#fcf2b4\",\n            \"#fcf4b6\",\n            \"#fcf6b8\",\n            \"#fcf7b9\",\n            \"#fcf9bb\",\n            \"#fcfbbd\",\n            \"#fcfdbf\",\n        ],\n    ],\n})\n\nCustomColorSchemes.push({\n    name: ColorSchemeName.Plasma,\n    colorSets: [\n        [\n            \"#0d0887\",\n            \"#100788\",\n            \"#130789\",\n            \"#16078a\",\n            \"#19068c\",\n            \"#1b068d\",\n            \"#1d068e\",\n            \"#20068f\",\n            \"#220690\",\n            \"#240691\",\n            \"#260591\",\n            \"#280592\",\n            \"#2a0593\",\n            \"#2c0594\",\n            \"#2e0595\",\n            \"#2f0596\",\n            \"#310597\",\n            \"#330597\",\n            \"#350498\",\n            \"#370499\",\n            \"#38049a\",\n            \"#3a049a\",\n            \"#3c049b\",\n            \"#3e049c\",\n            \"#3f049c\",\n            \"#41049d\",\n            \"#43039e\",\n            \"#44039e\",\n            \"#46039f\",\n            \"#48039f\",\n            \"#4903a0\",\n            \"#4b03a1\",\n            \"#4c02a1\",\n            \"#4e02a2\",\n            \"#5002a2\",\n            \"#5102a3\",\n            \"#5302a3\",\n            \"#5502a4\",\n            \"#5601a4\",\n            \"#5801a4\",\n            \"#5901a5\",\n            \"#5b01a5\",\n            \"#5c01a6\",\n            \"#5e01a6\",\n            \"#6001a6\",\n            \"#6100a7\",\n            \"#6300a7\",\n            \"#6400a7\",\n            \"#6600a7\",\n            \"#6700a8\",\n            \"#6900a8\",\n            \"#6a00a8\",\n            \"#6c00a8\",\n            \"#6e00a8\",\n            \"#6f00a8\",\n            \"#7100a8\",\n            \"#7201a8\",\n            \"#7401a8\",\n            \"#7501a8\",\n            \"#7701a8\",\n            \"#7801a8\",\n            \"#7a02a8\",\n            \"#7b02a8\",\n            \"#7d03a8\",\n            \"#7e03a8\",\n            \"#8004a8\",\n            \"#8104a7\",\n            \"#8305a7\",\n            \"#8405a7\",\n            \"#8606a6\",\n            \"#8707a6\",\n            \"#8808a6\",\n            \"#8a09a5\",\n            \"#8b0aa5\",\n            \"#8d0ba5\",\n            \"#8e0ca4\",\n            \"#8f0da4\",\n            \"#910ea3\",\n            \"#920fa3\",\n            \"#9410a2\",\n            \"#9511a1\",\n            \"#9613a1\",\n            \"#9814a0\",\n            \"#99159f\",\n            \"#9a169f\",\n            \"#9c179e\",\n            \"#9d189d\",\n            \"#9e199d\",\n            \"#a01a9c\",\n            \"#a11b9b\",\n            \"#a21d9a\",\n            \"#a31e9a\",\n            \"#a51f99\",\n            \"#a62098\",\n            \"#a72197\",\n            \"#a82296\",\n            \"#aa2395\",\n            \"#ab2494\",\n            \"#ac2694\",\n            \"#ad2793\",\n            \"#ae2892\",\n            \"#b02991\",\n            \"#b12a90\",\n            \"#b22b8f\",\n            \"#b32c8e\",\n            \"#b42e8d\",\n            \"#b52f8c\",\n            \"#b6308b\",\n            \"#b7318a\",\n            \"#b83289\",\n            \"#ba3388\",\n            \"#bb3488\",\n            \"#bc3587\",\n            \"#bd3786\",\n            \"#be3885\",\n            \"#bf3984\",\n            \"#c03a83\",\n            \"#c13b82\",\n            \"#c23c81\",\n            \"#c33d80\",\n            \"#c43e7f\",\n            \"#c5407e\",\n            \"#c6417d\",\n            \"#c7427c\",\n            \"#c8437b\",\n            \"#c9447a\",\n            \"#ca457a\",\n            \"#cb4679\",\n            \"#cc4778\",\n            \"#cc4977\",\n            \"#cd4a76\",\n            \"#ce4b75\",\n            \"#cf4c74\",\n            \"#d04d73\",\n            \"#d14e72\",\n            \"#d24f71\",\n            \"#d35171\",\n            \"#d45270\",\n            \"#d5536f\",\n            \"#d5546e\",\n            \"#d6556d\",\n            \"#d7566c\",\n            \"#d8576b\",\n            \"#d9586a\",\n            \"#da5a6a\",\n            \"#da5b69\",\n            \"#db5c68\",\n            \"#dc5d67\",\n            \"#dd5e66\",\n            \"#de5f65\",\n            \"#de6164\",\n            \"#df6263\",\n            \"#e06363\",\n            \"#e16462\",\n            \"#e26561\",\n            \"#e26660\",\n            \"#e3685f\",\n            \"#e4695e\",\n            \"#e56a5d\",\n            \"#e56b5d\",\n            \"#e66c5c\",\n            \"#e76e5b\",\n            \"#e76f5a\",\n            \"#e87059\",\n            \"#e97158\",\n            \"#e97257\",\n            \"#ea7457\",\n            \"#eb7556\",\n            \"#eb7655\",\n            \"#ec7754\",\n            \"#ed7953\",\n            \"#ed7a52\",\n            \"#ee7b51\",\n            \"#ef7c51\",\n            \"#ef7e50\",\n            \"#f07f4f\",\n            \"#f0804e\",\n            \"#f1814d\",\n            \"#f1834c\",\n            \"#f2844b\",\n            \"#f3854b\",\n            \"#f3874a\",\n            \"#f48849\",\n            \"#f48948\",\n            \"#f58b47\",\n            \"#f58c46\",\n            \"#f68d45\",\n            \"#f68f44\",\n            \"#f79044\",\n            \"#f79143\",\n            \"#f79342\",\n            \"#f89441\",\n            \"#f89540\",\n            \"#f9973f\",\n            \"#f9983e\",\n            \"#f99a3e\",\n            \"#fa9b3d\",\n            \"#fa9c3c\",\n            \"#fa9e3b\",\n            \"#fb9f3a\",\n            \"#fba139\",\n            \"#fba238\",\n            \"#fca338\",\n            \"#fca537\",\n            \"#fca636\",\n            \"#fca835\",\n            \"#fca934\",\n            \"#fdab33\",\n            \"#fdac33\",\n            \"#fdae32\",\n            \"#fdaf31\",\n            \"#fdb130\",\n            \"#fdb22f\",\n            \"#fdb42f\",\n            \"#fdb52e\",\n            \"#feb72d\",\n            \"#feb82c\",\n            \"#feba2c\",\n            \"#febb2b\",\n            \"#febd2a\",\n            \"#febe2a\",\n            \"#fec029\",\n            \"#fdc229\",\n            \"#fdc328\",\n            \"#fdc527\",\n            \"#fdc627\",\n            \"#fdc827\",\n            \"#fdca26\",\n            \"#fdcb26\",\n            \"#fccd25\",\n            \"#fcce25\",\n            \"#fcd025\",\n            \"#fcd225\",\n            \"#fbd324\",\n            \"#fbd524\",\n            \"#fbd724\",\n            \"#fad824\",\n            \"#fada24\",\n            \"#f9dc24\",\n            \"#f9dd25\",\n            \"#f8df25\",\n            \"#f8e125\",\n            \"#f7e225\",\n            \"#f7e425\",\n            \"#f6e626\",\n            \"#f6e826\",\n            \"#f5e926\",\n            \"#f5eb27\",\n            \"#f4ed27\",\n            \"#f3ee27\",\n            \"#f3f027\",\n            \"#f2f227\",\n            \"#f1f426\",\n            \"#f1f525\",\n            \"#f0f724\",\n            \"#f0f921\",\n        ],\n    ],\n})\n\nCustomColorSchemes.push({\n    name: ColorSchemeName.Inferno,\n    colorSets: [\n        [\n            \"#000004\",\n            \"#010005\",\n            \"#010106\",\n            \"#010108\",\n            \"#02010a\",\n            \"#02020c\",\n            \"#02020e\",\n            \"#030210\",\n            \"#040312\",\n            \"#040314\",\n            \"#050417\",\n            \"#060419\",\n            \"#07051b\",\n            \"#08051d\",\n            \"#09061f\",\n            \"#0a0722\",\n            \"#0b0724\",\n            \"#0c0826\",\n            \"#0d0829\",\n            \"#0e092b\",\n            \"#10092d\",\n            \"#110a30\",\n            \"#120a32\",\n            \"#140b34\",\n            \"#150b37\",\n            \"#160b39\",\n            \"#180c3c\",\n            \"#190c3e\",\n            \"#1b0c41\",\n            \"#1c0c43\",\n            \"#1e0c45\",\n            \"#1f0c48\",\n            \"#210c4a\",\n            \"#230c4c\",\n            \"#240c4f\",\n            \"#260c51\",\n            \"#280b53\",\n            \"#290b55\",\n            \"#2b0b57\",\n            \"#2d0b59\",\n            \"#2f0a5b\",\n            \"#310a5c\",\n            \"#320a5e\",\n            \"#340a5f\",\n            \"#360961\",\n            \"#380962\",\n            \"#390963\",\n            \"#3b0964\",\n            \"#3d0965\",\n            \"#3e0966\",\n            \"#400a67\",\n            \"#420a68\",\n            \"#440a68\",\n            \"#450a69\",\n            \"#470b6a\",\n            \"#490b6a\",\n            \"#4a0c6b\",\n            \"#4c0c6b\",\n            \"#4d0d6c\",\n            \"#4f0d6c\",\n            \"#510e6c\",\n            \"#520e6d\",\n            \"#540f6d\",\n            \"#550f6d\",\n            \"#57106e\",\n            \"#59106e\",\n            \"#5a116e\",\n            \"#5c126e\",\n            \"#5d126e\",\n            \"#5f136e\",\n            \"#61136e\",\n            \"#62146e\",\n            \"#64156e\",\n            \"#65156e\",\n            \"#67166e\",\n            \"#69166e\",\n            \"#6a176e\",\n            \"#6c186e\",\n            \"#6d186e\",\n            \"#6f196e\",\n            \"#71196e\",\n            \"#721a6e\",\n            \"#741a6e\",\n            \"#751b6e\",\n            \"#771c6d\",\n            \"#781c6d\",\n            \"#7a1d6d\",\n            \"#7c1d6d\",\n            \"#7d1e6d\",\n            \"#7f1e6c\",\n            \"#801f6c\",\n            \"#82206c\",\n            \"#84206b\",\n            \"#85216b\",\n            \"#87216b\",\n            \"#88226a\",\n            \"#8a226a\",\n            \"#8c2369\",\n            \"#8d2369\",\n            \"#8f2469\",\n            \"#902568\",\n            \"#922568\",\n            \"#932667\",\n            \"#952667\",\n            \"#972766\",\n            \"#982766\",\n            \"#9a2865\",\n            \"#9b2964\",\n            \"#9d2964\",\n            \"#9f2a63\",\n            \"#a02a63\",\n            \"#a22b62\",\n            \"#a32c61\",\n            \"#a52c60\",\n            \"#a62d60\",\n            \"#a82e5f\",\n            \"#a92e5e\",\n            \"#ab2f5e\",\n            \"#ad305d\",\n            \"#ae305c\",\n            \"#b0315b\",\n            \"#b1325a\",\n            \"#b3325a\",\n            \"#b43359\",\n            \"#b63458\",\n            \"#b73557\",\n            \"#b93556\",\n            \"#ba3655\",\n            \"#bc3754\",\n            \"#bd3853\",\n            \"#bf3952\",\n            \"#c03a51\",\n            \"#c13a50\",\n            \"#c33b4f\",\n            \"#c43c4e\",\n            \"#c63d4d\",\n            \"#c73e4c\",\n            \"#c83f4b\",\n            \"#ca404a\",\n            \"#cb4149\",\n            \"#cc4248\",\n            \"#ce4347\",\n            \"#cf4446\",\n            \"#d04545\",\n            \"#d24644\",\n            \"#d34743\",\n            \"#d44842\",\n            \"#d54a41\",\n            \"#d74b3f\",\n            \"#d84c3e\",\n            \"#d94d3d\",\n            \"#da4e3c\",\n            \"#db503b\",\n            \"#dd513a\",\n            \"#de5238\",\n            \"#df5337\",\n            \"#e05536\",\n            \"#e15635\",\n            \"#e25734\",\n            \"#e35933\",\n            \"#e45a31\",\n            \"#e55c30\",\n            \"#e65d2f\",\n            \"#e75e2e\",\n            \"#e8602d\",\n            \"#e9612b\",\n            \"#ea632a\",\n            \"#eb6429\",\n            \"#eb6628\",\n            \"#ec6726\",\n            \"#ed6925\",\n            \"#ee6a24\",\n            \"#ef6c23\",\n            \"#ef6e21\",\n            \"#f06f20\",\n            \"#f1711f\",\n            \"#f1731d\",\n            \"#f2741c\",\n            \"#f3761b\",\n            \"#f37819\",\n            \"#f47918\",\n            \"#f57b17\",\n            \"#f57d15\",\n            \"#f67e14\",\n            \"#f68013\",\n            \"#f78212\",\n            \"#f78410\",\n            \"#f8850f\",\n            \"#f8870e\",\n            \"#f8890c\",\n            \"#f98b0b\",\n            \"#f98c0a\",\n            \"#f98e09\",\n            \"#fa9008\",\n            \"#fa9207\",\n            \"#fa9407\",\n            \"#fb9606\",\n            \"#fb9706\",\n            \"#fb9906\",\n            \"#fb9b06\",\n            \"#fb9d07\",\n            \"#fc9f07\",\n            \"#fca108\",\n            \"#fca309\",\n            \"#fca50a\",\n            \"#fca60c\",\n            \"#fca80d\",\n            \"#fcaa0f\",\n            \"#fcac11\",\n            \"#fcae12\",\n            \"#fcb014\",\n            \"#fcb216\",\n            \"#fcb418\",\n            \"#fbb61a\",\n            \"#fbb81d\",\n            \"#fbba1f\",\n            \"#fbbc21\",\n            \"#fbbe23\",\n            \"#fac026\",\n            \"#fac228\",\n            \"#fac42a\",\n            \"#fac62d\",\n            \"#f9c72f\",\n            \"#f9c932\",\n            \"#f9cb35\",\n            \"#f8cd37\",\n            \"#f8cf3a\",\n            \"#f7d13d\",\n            \"#f7d340\",\n            \"#f6d543\",\n            \"#f6d746\",\n            \"#f5d949\",\n            \"#f5db4c\",\n            \"#f4dd4f\",\n            \"#f4df53\",\n            \"#f4e156\",\n            \"#f3e35a\",\n            \"#f3e55d\",\n            \"#f2e661\",\n            \"#f2e865\",\n            \"#f2ea69\",\n            \"#f1ec6d\",\n            \"#f1ed71\",\n            \"#f1ef75\",\n            \"#f1f179\",\n            \"#f2f27d\",\n            \"#f2f482\",\n            \"#f3f586\",\n            \"#f3f68a\",\n            \"#f4f88e\",\n            \"#f5f992\",\n            \"#f6fa96\",\n            \"#f8fb9a\",\n            \"#f9fc9d\",\n            \"#fafda1\",\n            \"#fcffa4\",\n        ],\n    ],\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 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 {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","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 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","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(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n","import * as _ from \"lodash-es\"\nimport { Color } from \"@ourworldindata/types\"\nimport { rgb, color, RGBColor } from \"d3-color\"\nimport { interpolate } from \"d3-interpolate\"\n\nexport const interpolateArray = (\n    scaleArr: string[]\n): ((t: number) => string) => {\n    const N = scaleArr.length - 2 // -1 for spacings, -1 for number of interpolate fns\n    const intervalWidth = 1 / N\n    const intervals: Array<(t: number) => string> = []\n\n    for (let i = 0; i <= N; i++) {\n        intervals[i] = interpolate(rgb(scaleArr[i]), rgb(scaleArr[i + 1]))\n    }\n\n    return (t: number): string => {\n        if (t < 0 || t > 1)\n            throw new Error(\"Outside the allowed range of [0, 1]\")\n\n        const i = Math.floor(t * N)\n        const intervalOffset = i * intervalWidth\n\n        return intervals[i](t / intervalWidth - intervalOffset / intervalWidth)\n    }\n}\n\nexport function getLeastUsedColor(\n    availableColors: Color[],\n    usedColors: Color[]\n): Color | undefined {\n    // If there are unused colors, return the first available\n    const unusedColors = _.difference(availableColors, usedColors)\n    if (unusedColors.length > 0) return unusedColors[0]\n\n    // If all colors are used, we want to count the times each color is used, and use the most\n    // unused one.\n    const colorCounts = Object.entries(_.groupBy(usedColors)).map(\n        ([color, arr]): any[] => [color, arr.length]\n    )\n    const mostUnusedColor = _.minBy(colorCounts, ([, count]) => count) as [\n        string,\n        number,\n    ]\n    return mostUnusedColor[0]\n}\n\n// Taken from https://github.com/Qix-/color/blob/594a9af778f9a89541510bd1ae24061c82f24693/index.js#L287-L292\nfunction getYiq(rgb: RGBColor): number {\n    // YIQ equation from http://24ways.org/2010/calculating-color-contrast\n    return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000\n}\n\nexport function calculateLightnessScore(colorHex: Color): number | undefined {\n    const rgb = color(colorHex)?.rgb()\n    if (!rgb) return undefined\n    const yiq = getYiq(rgb)\n    return yiq / 255\n}\n\nexport function isDarkColor(colorSpecifier: string): boolean | undefined {\n    const rgb = color(colorSpecifier)?.rgb()\n    if (!rgb) return undefined\n    return getYiq(rgb) < 128\n}\n\n// See https://observablehq.com/@danielgavrilov/darken-colors-to-meet-a-target-contrast-ratio\nfunction darkenColorToTargetYiq(colorHex: Color, targetYiq: number): Color {\n    const c = color(colorHex)?.rgb()\n    if (!c) return colorHex\n    const darkenCoeff = getYiq(c) / targetYiq - 1.0\n    if (darkenCoeff > 0) return c.darker(darkenCoeff).hex()\n    return c.hex()\n}\n\nexport function darkenColorForLine(colorHex: Color): Color {\n    return darkenColorToTargetYiq(colorHex, 170)\n}\n\nexport function darkenColorForText(colorHex: Color): Color {\n    return darkenColorToTargetYiq(colorHex, 125)\n}\n\nexport function darkenColorForHighContrastText(colorHex: Color): Color {\n    return darkenColorToTargetYiq(colorHex, 105)\n}\n","import * as _ from \"lodash-es\"\nimport { rgb } from \"d3-color\"\nimport { interpolate } from \"d3-interpolate\"\nimport { lastOfNonEmptyArray, Color } from \"@ourworldindata/utils\"\nimport { ColorSchemeInterface } from \"@ourworldindata/types\"\nimport { interpolateArray } from \"./ColorUtils\"\n\nexport class ColorScheme implements ColorSchemeInterface {\n    name: string\n    colorSets: Color[][]\n    singleColorScale: boolean\n    isDistinct: boolean\n    colorMap?: Record<string, Color>\n\n    constructor(\n        name: string,\n        colorSets: Color[][],\n        singleColorScale?: boolean,\n        isDistinct?: boolean,\n        colorMap?: Record<string, Color>\n    ) {\n        this.name = name\n        this.colorSets = []\n        this.singleColorScale = !!singleColorScale\n        this.isDistinct = !!isDistinct\n        this.colorMap = colorMap\n        colorSets.forEach((set) => (this.colorSets[set.length] = set))\n    }\n\n    improviseGradientFromShorter(\n        shortColors: Color[],\n        numColors: number\n    ): Color[] {\n        const newColors = _.clone(shortColors)\n\n        while (newColors.length < numColors) {\n            for (let index = newColors.length - 1; index > 0; index -= 1) {\n                const startColor = rgb(newColors[index - 1])\n                const endColor = rgb(newColors[index])\n                const newColor = interpolate(startColor, endColor)(0.5)\n                newColors.splice(index, 0, newColor)\n\n                if (newColors.length >= numColors) break\n            }\n        }\n\n        return newColors\n    }\n\n    improviseGradientFromLonger(\n        knownColors: Color[],\n        numColors: number\n    ): Color[] {\n        const newColors = []\n        const scale = interpolateArray(knownColors)\n        for (let index = 0; index < numColors; index++) {\n            newColors.push(scale(index / numColors))\n        }\n        return newColors\n    }\n\n    getGradientColors(numColors: number): Color[] {\n        const { colorSets } = this\n\n        if (colorSets[numColors]) return _.clone(colorSets[numColors])\n\n        const prevColors = colorSets\n            .toReversed()\n            .find((set) => set && set.length < numColors)\n        if (prevColors)\n            return this.improviseGradientFromShorter(prevColors, numColors)\n        else\n            return this.improviseGradientFromLonger(\n                colorSets.find((set) => !!set) as Color[],\n                numColors\n            )\n    }\n\n    getDistinctColors(numColors: number): Color[] {\n        const { colorSets } = this\n        if (colorSets.length === 0) return []\n        if (colorSets[numColors]) return _.clone(colorSets[numColors])\n\n        if (numColors > colorSets.length - 1) {\n            // If more colors are wanted than we have defined, have to improvise\n            const colorSet = lastOfNonEmptyArray(colorSets)\n            // Special case for colorSchemes with a single color where the usual interpolation would not work\n            if (colorSet.length === 1) return Array(numColors).fill(colorSet[0])\n            return this.improviseGradientFromShorter(colorSet, numColors)\n        }\n\n        // We have enough colors but not a specific set for this number-- improvise from the closest longer set\n        for (let i = numColors; i < colorSets.length; i++) {\n            if (colorSets[i]) {\n                return colorSets[i].slice(0, numColors)\n            }\n        }\n\n        return []\n    }\n\n    getColors(numColors: number): Color[] {\n        return this.isDistinct\n            ? this.getDistinctColors(numColors)\n            : this.getGradientColors(numColors)\n    }\n\n    getUniqValueColorMap(\n        uniqValues: any[],\n        inverseOrder?: boolean\n    ): Map<number, string> {\n        const colors = this.getColors(uniqValues.length) || []\n        if (inverseOrder) colors.reverse()\n\n        // We want to display same values using the same color, e.g. two values of 100 get the same shade of green\n        // Therefore, we create a map from all possible (unique) values to the corresponding color\n        const colorByValue = new Map<number, Color>()\n        uniqValues.forEach((value, index) =>\n            colorByValue.set(value, colors[index])\n        )\n        return colorByValue\n    }\n\n    static fromObject(\n        name: string,\n        colorSets: { [key: string]: Color[] },\n        singleColorScale?: boolean\n    ): ColorScheme {\n        const colorSetsArray: Color[][] = []\n        Object.keys(colorSets).forEach(\n            (numColors): string[] =>\n                (colorSetsArray[+numColors] = colorSets[numColors])\n        )\n        return new ColorScheme(name, colorSetsArray, singleColorScale)\n    }\n}\n","// This product includes color specifications and designs developed by Cynthia Brewer (http://colorbrewer.org/).\n// JavaScript specs as packaged in the D3 library (d3js.org). Please see license at http://colorbrewer.org/export/LICENSE.txt\n!function() {\n\nvar colorbrewer = {schemeGroups: {\nsequential: [\"BuGn\",\"BuPu\",\"GnBu\",\"OrRd\",\"PuBu\",\"PuBuGn\",\"PuRd\",\"RdPu\",\"YlGn\",\"YlGnBu\",\"YlOrBr\",\"YlOrRd\"],\nsinglehue:[\"Blues\",\"Greens\",\"Greys\",\"Oranges\",\"Purples\",\"Reds\"],\ndiverging: [\"BrBG\",\"PiYG\",\"PRGn\",\"PuOr\",\"RdBu\",\"RdGy\",\"RdYlBu\",\"RdYlGn\",\"Spectral\"],\nqualitative: [\"Accent\",\"Dark2\",\"Paired\",\"Pastel1\",\"Pastel2\",\"Set1\",\"Set2\",\"Set3\"]\n}, YlGn: {\n3: [\"#f7fcb9\",\"#addd8e\",\"#31a354\"],\n4: [\"#ffffcc\",\"#c2e699\",\"#78c679\",\"#238443\"],\n5: [\"#ffffcc\",\"#c2e699\",\"#78c679\",\"#31a354\",\"#006837\"],\n6: [\"#ffffcc\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#31a354\",\"#006837\"],\n7: [\"#ffffcc\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#41ab5d\",\"#238443\",\"#005a32\"],\n8: [\"#ffffe5\",\"#f7fcb9\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#41ab5d\",\"#238443\",\"#005a32\"],\n9: [\"#ffffe5\",\"#f7fcb9\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#41ab5d\",\"#238443\",\"#006837\",\"#004529\"]\n},YlGnBu: {\n3: [\"#edf8b1\",\"#7fcdbb\",\"#2c7fb8\"],\n4: [\"#ffffcc\",\"#a1dab4\",\"#41b6c4\",\"#225ea8\"],\n5: [\"#ffffcc\",\"#a1dab4\",\"#41b6c4\",\"#2c7fb8\",\"#253494\"],\n6: [\"#ffffcc\",\"#c7e9b4\",\"#7fcdbb\",\"#41b6c4\",\"#2c7fb8\",\"#253494\"],\n7: [\"#ffffcc\",\"#c7e9b4\",\"#7fcdbb\",\"#41b6c4\",\"#1d91c0\",\"#225ea8\",\"#0c2c84\"],\n8: [\"#ffffd9\",\"#edf8b1\",\"#c7e9b4\",\"#7fcdbb\",\"#41b6c4\",\"#1d91c0\",\"#225ea8\",\"#0c2c84\"],\n9: [\"#ffffd9\",\"#edf8b1\",\"#c7e9b4\",\"#7fcdbb\",\"#41b6c4\",\"#1d91c0\",\"#225ea8\",\"#253494\",\"#081d58\"]\n},GnBu: {\n3: [\"#e0f3db\",\"#a8ddb5\",\"#43a2ca\"],\n4: [\"#f0f9e8\",\"#bae4bc\",\"#7bccc4\",\"#2b8cbe\"],\n5: [\"#f0f9e8\",\"#bae4bc\",\"#7bccc4\",\"#43a2ca\",\"#0868ac\"],\n6: [\"#f0f9e8\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#43a2ca\",\"#0868ac\"],\n7: [\"#f0f9e8\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#4eb3d3\",\"#2b8cbe\",\"#08589e\"],\n8: [\"#f7fcf0\",\"#e0f3db\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#4eb3d3\",\"#2b8cbe\",\"#08589e\"],\n9: [\"#f7fcf0\",\"#e0f3db\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#4eb3d3\",\"#2b8cbe\",\"#0868ac\",\"#084081\"]\n},BuGn: {\n3: [\"#e5f5f9\",\"#99d8c9\",\"#2ca25f\"],\n4: [\"#edf8fb\",\"#b2e2e2\",\"#66c2a4\",\"#238b45\"],\n5: [\"#edf8fb\",\"#b2e2e2\",\"#66c2a4\",\"#2ca25f\",\"#006d2c\"],\n6: [\"#edf8fb\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#2ca25f\",\"#006d2c\"],\n7: [\"#edf8fb\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#41ae76\",\"#238b45\",\"#005824\"],\n8: [\"#f7fcfd\",\"#e5f5f9\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#41ae76\",\"#238b45\",\"#005824\"],\n9: [\"#f7fcfd\",\"#e5f5f9\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#41ae76\",\"#238b45\",\"#006d2c\",\"#00441b\"]\n},PuBuGn: {\n3: [\"#ece2f0\",\"#a6bddb\",\"#1c9099\"],\n4: [\"#f6eff7\",\"#bdc9e1\",\"#67a9cf\",\"#02818a\"],\n5: [\"#f6eff7\",\"#bdc9e1\",\"#67a9cf\",\"#1c9099\",\"#016c59\"],\n6: [\"#f6eff7\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#1c9099\",\"#016c59\"],\n7: [\"#f6eff7\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#3690c0\",\"#02818a\",\"#016450\"],\n8: [\"#fff7fb\",\"#ece2f0\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#3690c0\",\"#02818a\",\"#016450\"],\n9: [\"#fff7fb\",\"#ece2f0\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#3690c0\",\"#02818a\",\"#016c59\",\"#014636\"]\n},PuBu: {\n3: [\"#ece7f2\",\"#a6bddb\",\"#2b8cbe\"],\n4: [\"#f1eef6\",\"#bdc9e1\",\"#74a9cf\",\"#0570b0\"],\n5: [\"#f1eef6\",\"#bdc9e1\",\"#74a9cf\",\"#2b8cbe\",\"#045a8d\"],\n6: [\"#f1eef6\",\"#d0d1e6\",\"#a6bddb\",\"#74a9cf\",\"#2b8cbe\",\"#045a8d\"],\n7: [\"#f1eef6\",\"#d0d1e6\",\"#a6bddb\",\"#74a9cf\",\"#3690c0\",\"#0570b0\",\"#034e7b\"],\n8: [\"#fff7fb\",\"#ece7f2\",\"#d0d1e6\",\"#a6bddb\",\"#74a9cf\",\"#3690c0\",\"#0570b0\",\"#034e7b\"],\n9: [\"#fff7fb\",\"#ece7f2\",\"#d0d1e6\",\"#a6bddb\",\"#74a9cf\",\"#3690c0\",\"#0570b0\",\"#045a8d\",\"#023858\"]\n},BuPu: {\n3: [\"#e0ecf4\",\"#9ebcda\",\"#8856a7\"],\n4: [\"#edf8fb\",\"#b3cde3\",\"#8c96c6\",\"#88419d\"],\n5: [\"#edf8fb\",\"#b3cde3\",\"#8c96c6\",\"#8856a7\",\"#810f7c\"],\n6: [\"#edf8fb\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8856a7\",\"#810f7c\"],\n7: [\"#edf8fb\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8c6bb1\",\"#88419d\",\"#6e016b\"],\n8: [\"#f7fcfd\",\"#e0ecf4\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8c6bb1\",\"#88419d\",\"#6e016b\"],\n9: [\"#f7fcfd\",\"#e0ecf4\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8c6bb1\",\"#88419d\",\"#810f7c\",\"#4d004b\"]\n},RdPu: {\n3: [\"#fde0dd\",\"#fa9fb5\",\"#c51b8a\"],\n4: [\"#feebe2\",\"#fbb4b9\",\"#f768a1\",\"#ae017e\"],\n5: [\"#feebe2\",\"#fbb4b9\",\"#f768a1\",\"#c51b8a\",\"#7a0177\"],\n6: [\"#feebe2\",\"#fcc5c0\",\"#fa9fb5\",\"#f768a1\",\"#c51b8a\",\"#7a0177\"],\n7: [\"#feebe2\",\"#fcc5c0\",\"#fa9fb5\",\"#f768a1\",\"#dd3497\",\"#ae017e\",\"#7a0177\"],\n8: [\"#fff7f3\",\"#fde0dd\",\"#fcc5c0\",\"#fa9fb5\",\"#f768a1\",\"#dd3497\",\"#ae017e\",\"#7a0177\"],\n9: [\"#fff7f3\",\"#fde0dd\",\"#fcc5c0\",\"#fa9fb5\",\"#f768a1\",\"#dd3497\",\"#ae017e\",\"#7a0177\",\"#49006a\"]\n},PuRd: {\n3: [\"#e7e1ef\",\"#c994c7\",\"#dd1c77\"],\n4: [\"#f1eef6\",\"#d7b5d8\",\"#df65b0\",\"#ce1256\"],\n5: [\"#f1eef6\",\"#d7b5d8\",\"#df65b0\",\"#dd1c77\",\"#980043\"],\n6: [\"#f1eef6\",\"#d4b9da\",\"#c994c7\",\"#df65b0\",\"#dd1c77\",\"#980043\"],\n7: [\"#f1eef6\",\"#d4b9da\",\"#c994c7\",\"#df65b0\",\"#e7298a\",\"#ce1256\",\"#91003f\"],\n8: [\"#f7f4f9\",\"#e7e1ef\",\"#d4b9da\",\"#c994c7\",\"#df65b0\",\"#e7298a\",\"#ce1256\",\"#91003f\"],\n9: [\"#f7f4f9\",\"#e7e1ef\",\"#d4b9da\",\"#c994c7\",\"#df65b0\",\"#e7298a\",\"#ce1256\",\"#980043\",\"#67001f\"]\n},OrRd: {\n3: [\"#fee8c8\",\"#fdbb84\",\"#e34a33\"],\n4: [\"#fef0d9\",\"#fdcc8a\",\"#fc8d59\",\"#d7301f\"],\n5: [\"#fef0d9\",\"#fdcc8a\",\"#fc8d59\",\"#e34a33\",\"#b30000\"],\n6: [\"#fef0d9\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#e34a33\",\"#b30000\"],\n7: [\"#fef0d9\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#ef6548\",\"#d7301f\",\"#990000\"],\n8: [\"#fff7ec\",\"#fee8c8\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#ef6548\",\"#d7301f\",\"#990000\"],\n9: [\"#fff7ec\",\"#fee8c8\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#ef6548\",\"#d7301f\",\"#b30000\",\"#7f0000\"]\n},YlOrRd: {\n3: [\"#ffeda0\",\"#feb24c\",\"#f03b20\"],\n4: [\"#ffffb2\",\"#fecc5c\",\"#fd8d3c\",\"#e31a1c\"],\n5: [\"#ffffb2\",\"#fecc5c\",\"#fd8d3c\",\"#f03b20\",\"#bd0026\"],\n6: [\"#ffffb2\",\"#fed976\",\"#feb24c\",\"#fd8d3c\",\"#f03b20\",\"#bd0026\"],\n7: [\"#ffffb2\",\"#fed976\",\"#feb24c\",\"#fd8d3c\",\"#fc4e2a\",\"#e31a1c\",\"#b10026\"],\n8: [\"#ffffcc\",\"#ffeda0\",\"#fed976\",\"#feb24c\",\"#fd8d3c\",\"#fc4e2a\",\"#e31a1c\",\"#b10026\"],\n9: [\"#ffffcc\",\"#ffeda0\",\"#fed976\",\"#feb24c\",\"#fd8d3c\",\"#fc4e2a\",\"#e31a1c\",\"#bd0026\",\"#800026\"]\n},YlOrBr: {\n3: [\"#fff7bc\",\"#fec44f\",\"#d95f0e\"],\n4: [\"#ffffd4\",\"#fed98e\",\"#fe9929\",\"#cc4c02\"],\n5: [\"#ffffd4\",\"#fed98e\",\"#fe9929\",\"#d95f0e\",\"#993404\"],\n6: [\"#ffffd4\",\"#fee391\",\"#fec44f\",\"#fe9929\",\"#d95f0e\",\"#993404\"],\n7: [\"#ffffd4\",\"#fee391\",\"#fec44f\",\"#fe9929\",\"#ec7014\",\"#cc4c02\",\"#8c2d04\"],\n8: [\"#ffffe5\",\"#fff7bc\",\"#fee391\",\"#fec44f\",\"#fe9929\",\"#ec7014\",\"#cc4c02\",\"#8c2d04\"],\n9: [\"#ffffe5\",\"#fff7bc\",\"#fee391\",\"#fec44f\",\"#fe9929\",\"#ec7014\",\"#cc4c02\",\"#993404\",\"#662506\"]\n},Purples: {\n3: [\"#efedf5\",\"#bcbddc\",\"#756bb1\"],\n4: [\"#f2f0f7\",\"#cbc9e2\",\"#9e9ac8\",\"#6a51a3\"],\n5: [\"#f2f0f7\",\"#cbc9e2\",\"#9e9ac8\",\"#756bb1\",\"#54278f\"],\n6: [\"#f2f0f7\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#756bb1\",\"#54278f\"],\n7: [\"#f2f0f7\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#807dba\",\"#6a51a3\",\"#4a1486\"],\n8: [\"#fcfbfd\",\"#efedf5\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#807dba\",\"#6a51a3\",\"#4a1486\"],\n9: [\"#fcfbfd\",\"#efedf5\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#807dba\",\"#6a51a3\",\"#54278f\",\"#3f007d\"]\n},Blues: {\n3: [\"#deebf7\",\"#9ecae1\",\"#3182bd\"],\n4: [\"#eff3ff\",\"#bdd7e7\",\"#6baed6\",\"#2171b5\"],\n5: [\"#eff3ff\",\"#bdd7e7\",\"#6baed6\",\"#3182bd\",\"#08519c\"],\n6: [\"#eff3ff\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#3182bd\",\"#08519c\"],\n7: [\"#eff3ff\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#4292c6\",\"#2171b5\",\"#084594\"],\n8: [\"#f7fbff\",\"#deebf7\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#4292c6\",\"#2171b5\",\"#084594\"],\n9: [\"#f7fbff\",\"#deebf7\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#4292c6\",\"#2171b5\",\"#08519c\",\"#08306b\"]\n},Greens: {\n3: [\"#e5f5e0\",\"#a1d99b\",\"#31a354\"],\n4: [\"#edf8e9\",\"#bae4b3\",\"#74c476\",\"#238b45\"],\n5: [\"#edf8e9\",\"#bae4b3\",\"#74c476\",\"#31a354\",\"#006d2c\"],\n6: [\"#edf8e9\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#31a354\",\"#006d2c\"],\n7: [\"#edf8e9\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#41ab5d\",\"#238b45\",\"#005a32\"],\n8: [\"#f7fcf5\",\"#e5f5e0\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#41ab5d\",\"#238b45\",\"#005a32\"],\n9: [\"#f7fcf5\",\"#e5f5e0\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#41ab5d\",\"#238b45\",\"#006d2c\",\"#00441b\"]\n},Oranges: {\n3: [\"#fee6ce\",\"#fdae6b\",\"#e6550d\"],\n4: [\"#feedde\",\"#fdbe85\",\"#fd8d3c\",\"#d94701\"],\n5: [\"#feedde\",\"#fdbe85\",\"#fd8d3c\",\"#e6550d\",\"#a63603\"],\n6: [\"#feedde\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#e6550d\",\"#a63603\"],\n7: [\"#feedde\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#f16913\",\"#d94801\",\"#8c2d04\"],\n8: [\"#fff5eb\",\"#fee6ce\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#f16913\",\"#d94801\",\"#8c2d04\"],\n9: [\"#fff5eb\",\"#fee6ce\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#f16913\",\"#d94801\",\"#a63603\",\"#7f2704\"]\n},Reds: {\n3: [\"#fee0d2\",\"#fc9272\",\"#de2d26\"],\n4: [\"#fee5d9\",\"#fcae91\",\"#fb6a4a\",\"#cb181d\"],\n5: [\"#fee5d9\",\"#fcae91\",\"#fb6a4a\",\"#de2d26\",\"#a50f15\"],\n6: [\"#fee5d9\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#de2d26\",\"#a50f15\"],\n7: [\"#fee5d9\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#ef3b2c\",\"#cb181d\",\"#99000d\"],\n8: [\"#fff5f0\",\"#fee0d2\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#ef3b2c\",\"#cb181d\",\"#99000d\"],\n9: [\"#fff5f0\",\"#fee0d2\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#ef3b2c\",\"#cb181d\",\"#a50f15\",\"#67000d\"]\n},Greys: {\n3: [\"#f0f0f0\",\"#bdbdbd\",\"#636363\"],\n4: [\"#f7f7f7\",\"#cccccc\",\"#969696\",\"#525252\"],\n5: [\"#f7f7f7\",\"#cccccc\",\"#969696\",\"#636363\",\"#252525\"],\n6: [\"#f7f7f7\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#636363\",\"#252525\"],\n7: [\"#f7f7f7\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#737373\",\"#525252\",\"#252525\"],\n8: [\"#ffffff\",\"#f0f0f0\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#737373\",\"#525252\",\"#252525\"],\n9: [\"#ffffff\",\"#f0f0f0\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#737373\",\"#525252\",\"#252525\",\"#000000\"]\n},PuOr: {\n3: [\"#f1a340\",\"#f7f7f7\",\"#998ec3\"],\n4: [\"#e66101\",\"#fdb863\",\"#b2abd2\",\"#5e3c99\"],\n5: [\"#e66101\",\"#fdb863\",\"#f7f7f7\",\"#b2abd2\",\"#5e3c99\"],\n6: [\"#b35806\",\"#f1a340\",\"#fee0b6\",\"#d8daeb\",\"#998ec3\",\"#542788\"],\n7: [\"#b35806\",\"#f1a340\",\"#fee0b6\",\"#f7f7f7\",\"#d8daeb\",\"#998ec3\",\"#542788\"],\n8: [\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\"],\n9: [\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#f7f7f7\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\"],\n10: [\"#7f3b08\",\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\",\"#2d004b\"],\n11: [\"#7f3b08\",\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#f7f7f7\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\",\"#2d004b\"]\n},BrBG: {\n3: [\"#d8b365\",\"#f5f5f5\",\"#5ab4ac\"],\n4: [\"#a6611a\",\"#dfc27d\",\"#80cdc1\",\"#018571\"],\n5: [\"#a6611a\",\"#dfc27d\",\"#f5f5f5\",\"#80cdc1\",\"#018571\"],\n6: [\"#8c510a\",\"#d8b365\",\"#f6e8c3\",\"#c7eae5\",\"#5ab4ac\",\"#01665e\"],\n7: [\"#8c510a\",\"#d8b365\",\"#f6e8c3\",\"#f5f5f5\",\"#c7eae5\",\"#5ab4ac\",\"#01665e\"],\n8: [\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\"],\n9: [\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#f5f5f5\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\"],\n10: [\"#543005\",\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\",\"#003c30\"],\n11: [\"#543005\",\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#f5f5f5\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\",\"#003c30\"]\n},PRGn: {\n3: [\"#af8dc3\",\"#f7f7f7\",\"#7fbf7b\"],\n4: [\"#7b3294\",\"#c2a5cf\",\"#a6dba0\",\"#008837\"],\n5: [\"#7b3294\",\"#c2a5cf\",\"#f7f7f7\",\"#a6dba0\",\"#008837\"],\n6: [\"#762a83\",\"#af8dc3\",\"#e7d4e8\",\"#d9f0d3\",\"#7fbf7b\",\"#1b7837\"],\n7: [\"#762a83\",\"#af8dc3\",\"#e7d4e8\",\"#f7f7f7\",\"#d9f0d3\",\"#7fbf7b\",\"#1b7837\"],\n8: [\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\"],\n9: [\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#f7f7f7\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\"],\n10: [\"#40004b\",\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\",\"#00441b\"],\n11: [\"#40004b\",\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#f7f7f7\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\",\"#00441b\"]\n},PiYG: {\n3: [\"#e9a3c9\",\"#f7f7f7\",\"#a1d76a\"],\n4: [\"#d01c8b\",\"#f1b6da\",\"#b8e186\",\"#4dac26\"],\n5: [\"#d01c8b\",\"#f1b6da\",\"#f7f7f7\",\"#b8e186\",\"#4dac26\"],\n6: [\"#c51b7d\",\"#e9a3c9\",\"#fde0ef\",\"#e6f5d0\",\"#a1d76a\",\"#4d9221\"],\n7: [\"#c51b7d\",\"#e9a3c9\",\"#fde0ef\",\"#f7f7f7\",\"#e6f5d0\",\"#a1d76a\",\"#4d9221\"],\n8: [\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\"],\n9: [\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#f7f7f7\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\"],\n10: [\"#8e0152\",\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\",\"#276419\"],\n11: [\"#8e0152\",\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#f7f7f7\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\",\"#276419\"]\n},RdBu: {\n3: [\"#ef8a62\",\"#f7f7f7\",\"#67a9cf\"],\n4: [\"#ca0020\",\"#f4a582\",\"#92c5de\",\"#0571b0\"],\n5: [\"#ca0020\",\"#f4a582\",\"#f7f7f7\",\"#92c5de\",\"#0571b0\"],\n6: [\"#b2182b\",\"#ef8a62\",\"#fddbc7\",\"#d1e5f0\",\"#67a9cf\",\"#2166ac\"],\n7: [\"#b2182b\",\"#ef8a62\",\"#fddbc7\",\"#f7f7f7\",\"#d1e5f0\",\"#67a9cf\",\"#2166ac\"],\n8: [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\"],\n9: [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#f7f7f7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\"],\n10: [\"#67001f\",\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\",\"#053061\"],\n11: [\"#67001f\",\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#f7f7f7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\",\"#053061\"]\n},RdGy: {\n3: [\"#ef8a62\",\"#ffffff\",\"#999999\"],\n4: [\"#ca0020\",\"#f4a582\",\"#bababa\",\"#404040\"],\n5: [\"#ca0020\",\"#f4a582\",\"#ffffff\",\"#bababa\",\"#404040\"],\n6: [\"#b2182b\",\"#ef8a62\",\"#fddbc7\",\"#e0e0e0\",\"#999999\",\"#4d4d4d\"],\n7: [\"#b2182b\",\"#ef8a62\",\"#fddbc7\",\"#ffffff\",\"#e0e0e0\",\"#999999\",\"#4d4d4d\"],\n8: [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\"],\n9: [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#ffffff\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\"],\n10: [\"#67001f\",\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\",\"#1a1a1a\"],\n11: [\"#67001f\",\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#ffffff\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\",\"#1a1a1a\"]\n},RdYlBu: {\n3: [\"#fc8d59\",\"#ffffbf\",\"#91bfdb\"],\n4: [\"#d7191c\",\"#fdae61\",\"#abd9e9\",\"#2c7bb6\"],\n5: [\"#d7191c\",\"#fdae61\",\"#ffffbf\",\"#abd9e9\",\"#2c7bb6\"],\n6: [\"#d73027\",\"#fc8d59\",\"#fee090\",\"#e0f3f8\",\"#91bfdb\",\"#4575b4\"],\n7: [\"#d73027\",\"#fc8d59\",\"#fee090\",\"#ffffbf\",\"#e0f3f8\",\"#91bfdb\",\"#4575b4\"],\n8: [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\"],\n9: [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#ffffbf\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\"],\n10: [\"#a50026\",\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\",\"#313695\"],\n11: [\"#a50026\",\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#ffffbf\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\",\"#313695\"]\n},Spectral: {\n3: [\"#fc8d59\",\"#ffffbf\",\"#99d594\"],\n4: [\"#d7191c\",\"#fdae61\",\"#abdda4\",\"#2b83ba\"],\n5: [\"#d7191c\",\"#fdae61\",\"#ffffbf\",\"#abdda4\",\"#2b83ba\"],\n6: [\"#d53e4f\",\"#fc8d59\",\"#fee08b\",\"#e6f598\",\"#99d594\",\"#3288bd\"],\n7: [\"#d53e4f\",\"#fc8d59\",\"#fee08b\",\"#ffffbf\",\"#e6f598\",\"#99d594\",\"#3288bd\"],\n8: [\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\"],\n9: [\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#ffffbf\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\"],\n10: [\"#9e0142\",\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\",\"#5e4fa2\"],\n11: [\"#9e0142\",\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#ffffbf\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\",\"#5e4fa2\"]\n},RdYlGn: {\n3: [\"#fc8d59\",\"#ffffbf\",\"#91cf60\"],\n4: [\"#d7191c\",\"#fdae61\",\"#a6d96a\",\"#1a9641\"],\n5: [\"#d7191c\",\"#fdae61\",\"#ffffbf\",\"#a6d96a\",\"#1a9641\"],\n6: [\"#d73027\",\"#fc8d59\",\"#fee08b\",\"#d9ef8b\",\"#91cf60\",\"#1a9850\"],\n7: [\"#d73027\",\"#fc8d59\",\"#fee08b\",\"#ffffbf\",\"#d9ef8b\",\"#91cf60\",\"#1a9850\"],\n8: [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\"],\n9: [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#ffffbf\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\"],\n10: [\"#a50026\",\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\",\"#006837\"],\n11: [\"#a50026\",\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#ffffbf\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\",\"#006837\"]\n},Accent: {\n3: [\"#7fc97f\",\"#beaed4\",\"#fdc086\"],\n4: [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\"],\n5: [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\"],\n6: [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\",\"#f0027f\"],\n7: [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\",\"#f0027f\",\"#bf5b17\"],\n8: [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\",\"#f0027f\",\"#bf5b17\",\"#666666\"]\n},Dark2: {\n3: [\"#1b9e77\",\"#d95f02\",\"#7570b3\"],\n4: [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\"],\n5: [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\"],\n6: [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\",\"#e6ab02\"],\n7: [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\",\"#e6ab02\",\"#a6761d\"],\n8: [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\",\"#e6ab02\",\"#a6761d\",\"#666666\"]\n},Paired: {\n3: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\"],\n4: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\"],\n5: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\"],\n6: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\"],\n7: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\"],\n8: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\"],\n9: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\",\"#cab2d6\"],\n10: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\",\"#cab2d6\",\"#6a3d9a\"],\n11: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\",\"#cab2d6\",\"#6a3d9a\",\"#ffff99\"],\n12: [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\",\"#cab2d6\",\"#6a3d9a\",\"#ffff99\",\"#b15928\"]\n},Pastel1: {\n3: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\"],\n4: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\"],\n5: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\"],\n6: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\"],\n7: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\",\"#e5d8bd\"],\n8: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\",\"#e5d8bd\",\"#fddaec\"],\n9: [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\",\"#e5d8bd\",\"#fddaec\",\"#f2f2f2\"]\n},Pastel2: {\n3: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\"],\n4: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\"],\n5: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\"],\n6: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\",\"#fff2ae\"],\n7: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\",\"#fff2ae\",\"#f1e2cc\"],\n8: [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\",\"#fff2ae\",\"#f1e2cc\",\"#cccccc\"]\n},Set1: {\n3: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\"],\n4: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\"],\n5: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\"],\n6: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\"],\n7: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\",\"#a65628\"],\n8: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\",\"#a65628\",\"#f781bf\"],\n9: [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\",\"#a65628\",\"#f781bf\",\"#999999\"]\n},Set2: {\n3: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\"],\n4: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\"],\n5: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\"],\n6: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\",\"#ffd92f\"],\n7: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\",\"#ffd92f\",\"#e5c494\"],\n8: [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\",\"#ffd92f\",\"#e5c494\",\"#b3b3b3\"]\n},Set3: {\n3: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\"],\n4: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\"],\n5: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\"],\n6: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\"],\n7: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\"],\n8: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\"],\n9: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\",\"#d9d9d9\"],\n10: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\",\"#d9d9d9\",\"#bc80bd\"],\n11: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\",\"#d9d9d9\",\"#bc80bd\",\"#ccebc5\"],\n12: [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\",\"#d9d9d9\",\"#bc80bd\",\"#ccebc5\",\"#ffed6f\"]\n}};\n\nif (typeof define === \"function\" && define.amd) {\n    define(colorbrewer);\n} else if (typeof module === \"object\" && module.exports) {\n    module.exports = colorbrewer;\n} else {\n    this.colorbrewer = colorbrewer;\n}\n\n}();\n","import colorbrewer from \"colorbrewer\"\nimport {\n    Color,\n    ColorSchemeInterface,\n    ColorSchemeName,\n} from \"@ourworldindata/types\"\n\ntype ColorSchemeProps = { displayName: string; singleColorScale: boolean }\n\nconst ColorBrewerSchemeIndex: {\n    [key in ColorSchemeName]?: ColorSchemeProps\n} = {\n    YlGn: { displayName: \"Yellow-Green shades\", singleColorScale: true },\n    YlGnBu: {\n        displayName: \"Yellow-Green-Blue shades\",\n        singleColorScale: false,\n    },\n    GnBu: { displayName: \"Green-Blue shades\", singleColorScale: true },\n    BuGn: { displayName: \"Blue-Green shades\", singleColorScale: true },\n    PuBuGn: {\n        displayName: \"Purple-Blue-Green shades\",\n        singleColorScale: false,\n    },\n    BuPu: { displayName: \"Blue-Purple shades\", singleColorScale: true },\n    RdPu: { displayName: \"Red-Purple shades\", singleColorScale: true },\n    PuRd: { displayName: \"Purple-Red shades\", singleColorScale: true },\n    OrRd: { displayName: \"Orange-Red shades\", singleColorScale: true },\n    YlOrRd: {\n        displayName: \"Yellow-Orange-Red shades\",\n        singleColorScale: true,\n    },\n    YlOrBr: {\n        displayName: \"Yellow-Orange-Brown shades\",\n        singleColorScale: true,\n    },\n    Purples: { displayName: \"Purple shades\", singleColorScale: true },\n    Blues: { displayName: \"Blue shades\", singleColorScale: true },\n    Greens: { displayName: \"Green shades\", singleColorScale: true },\n    Oranges: { displayName: \"Orange shades\", singleColorScale: true },\n    Reds: { displayName: \"Red shades\", singleColorScale: true },\n    Greys: { displayName: \"Grey shades\", singleColorScale: true },\n    PuOr: { displayName: \"Purple-Orange\", singleColorScale: false },\n    BrBG: { displayName: \"Brown-Blue-Green\", singleColorScale: false },\n    PRGn: { displayName: \"Purple-Red-Green\", singleColorScale: false },\n    PiYG: { displayName: \"Magenta-Yellow-Green\", singleColorScale: false },\n    RdBu: { displayName: \"Red-Blue\", singleColorScale: false },\n    RdGy: { displayName: \"Red-Grey\", singleColorScale: false },\n    RdYlBu: { displayName: \"Red-Yellow-Blue\", singleColorScale: false },\n    Spectral: { displayName: \"Spectral colors\", singleColorScale: false },\n    RdYlGn: { displayName: \"Red-Yellow-Green\", singleColorScale: false },\n    Accent: { displayName: \"Accents\", singleColorScale: false },\n    Dark2: { displayName: \"Dark colors\", singleColorScale: false },\n    Paired: { displayName: \"Paired colors\", singleColorScale: false },\n    Pastel1: { displayName: \"Pastel 1 colors\", singleColorScale: false },\n    Pastel2: { displayName: \"Pastel 2 colors\", singleColorScale: false },\n    Set1: { displayName: \"Set 1 colors\", singleColorScale: false },\n    Set2: { displayName: \"Set 2 colors\", singleColorScale: false },\n    Set3: { displayName: \"Set 3 colors\", singleColorScale: false },\n    PuBu: { displayName: \"Purple-Blue shades\", singleColorScale: true },\n} as const\n\nexport const getColorBrewerScheme: (\n    name: string\n) => ColorSchemeInterface | undefined = (name: string) => {\n    const props = ColorBrewerSchemeIndex[name as ColorSchemeName]\n    const colorSets = (colorbrewer as any)[name]\n\n    if (!props || !colorSets) return undefined\n\n    const colorSetsArray: Color[][] = []\n    Object.keys(colorSets).forEach(\n        (numColors) => (colorSetsArray[+numColors] = colorSets[numColors])\n    )\n    return {\n        name,\n        displayName: props.displayName,\n        colorSets: colorSetsArray,\n        singleColorScale: props.singleColorScale,\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { CustomColorSchemes } from \"./CustomSchemes\"\nimport { ColorScheme } from \"./ColorScheme\"\nimport { match } from \"ts-pattern\"\nimport {\n    GRAPHER_CHART_TYPES,\n    ColorSchemeInterface,\n    ColorSchemeName,\n    GRAPHER_MAP_TYPE,\n    GrapherChartOrMapType,\n} from \"@ourworldindata/types\"\nimport { getColorBrewerScheme } from \"./ColorBrewerSchemes.js\"\n\nfunction getPreferredSchemesByType(\n    type: GrapherChartOrMapType\n): ColorSchemeName[] {\n    // This function could also be a Map<GrapherChartOrMapType, ColorName[]> but\n    // by doing it as a function usign ts-pattern.match we get compile\n    // time safety that all enum cases in GrapherChartOrMapType are always handled here\n    return match(type)\n        .with(GRAPHER_CHART_TYPES.DiscreteBar, () => [\n            ColorSchemeName.SingleColorDenim,\n            ColorSchemeName.SingleColorDustyCoral,\n            ColorSchemeName.SingleColorPurple,\n            ColorSchemeName.SingleColorTeal,\n            ColorSchemeName.SingleColorDarkCopper,\n        ])\n        .with(GRAPHER_CHART_TYPES.LineChart, () => [\n            ColorSchemeName.OwidDistinctLines,\n        ])\n        .with(GRAPHER_CHART_TYPES.Marimekko, () => [\n            ColorSchemeName.continents,\n            ColorSchemeName.SingleColorDenim,\n            ColorSchemeName.SingleColorDustyCoral,\n            ColorSchemeName.SingleColorPurple,\n            ColorSchemeName.SingleColorTeal,\n            ColorSchemeName.SingleColorDarkCopper,\n            ColorSchemeName.OwidCategoricalA,\n            ColorSchemeName.OwidCategoricalB,\n            ColorSchemeName.OwidCategoricalC,\n            ColorSchemeName.OwidCategoricalD,\n            ColorSchemeName.OwidCategoricalE,\n        ])\n        .with(GRAPHER_CHART_TYPES.ScatterPlot, () => [\n            ColorSchemeName.continents,\n            ColorSchemeName.OwidDistinctLines,\n        ])\n        .with(GRAPHER_CHART_TYPES.SlopeChart, () => [\n            ColorSchemeName.continents,\n            ColorSchemeName.OwidDistinctLines,\n        ])\n        .with(GRAPHER_CHART_TYPES.StackedArea, () => [\n            ColorSchemeName[\"owid-distinct\"],\n            ColorSchemeName.OwidCategoricalA,\n            ColorSchemeName.OwidCategoricalB,\n            ColorSchemeName.OwidCategoricalC,\n            ColorSchemeName.OwidCategoricalD,\n            ColorSchemeName.OwidCategoricalE,\n            ColorSchemeName.SingleColorGradientDenim,\n            ColorSchemeName.SingleColorGradientTeal,\n            ColorSchemeName.SingleColorGradientPurple,\n            ColorSchemeName.SingleColorGradientDustyCoral,\n            ColorSchemeName.SingleColorGradientDarkCopper,\n        ])\n        .with(GRAPHER_CHART_TYPES.StackedBar, () => [\n            ColorSchemeName[\"owid-distinct\"],\n            ColorSchemeName.OwidCategoricalA,\n            ColorSchemeName.OwidCategoricalB,\n            ColorSchemeName.OwidCategoricalC,\n            ColorSchemeName.OwidCategoricalD,\n            ColorSchemeName.OwidCategoricalE,\n            ColorSchemeName.SingleColorGradientDenim,\n            ColorSchemeName.SingleColorGradientTeal,\n            ColorSchemeName.SingleColorGradientPurple,\n            ColorSchemeName.SingleColorGradientDustyCoral,\n            ColorSchemeName.SingleColorGradientDarkCopper,\n        ])\n        .with(GRAPHER_CHART_TYPES.StackedDiscreteBar, () => [\n            ColorSchemeName[\"owid-distinct\"],\n            ColorSchemeName.OwidCategoricalA,\n            ColorSchemeName.OwidCategoricalB,\n            ColorSchemeName.OwidCategoricalC,\n            ColorSchemeName.OwidCategoricalD,\n            ColorSchemeName.OwidCategoricalE,\n            ColorSchemeName.SingleColorGradientDenim,\n            ColorSchemeName.SingleColorGradientTeal,\n            ColorSchemeName.SingleColorGradientPurple,\n            ColorSchemeName.SingleColorGradientDustyCoral,\n            ColorSchemeName.SingleColorGradientDarkCopper,\n        ])\n        .with(GRAPHER_MAP_TYPE, () => [\n            ColorSchemeName.BinaryMapPaletteA,\n            ColorSchemeName.BinaryMapPaletteB,\n            ColorSchemeName.BinaryMapPaletteC,\n            ColorSchemeName.BinaryMapPaletteD,\n            ColorSchemeName.BinaryMapPaletteE,\n            ColorSchemeName.OwidCategoricalMap,\n        ])\n        .exhaustive()\n}\n\nconst initColorScheme = (scheme: ColorSchemeInterface): ColorScheme =>\n    new ColorScheme(\n        scheme.displayName ?? scheme.name,\n        scheme.colorSets,\n        scheme.singleColorScale,\n        scheme.isDistinct,\n        scheme.colorMap\n    )\n\nconst _colorSchemes = new Map<ColorSchemeName, ColorScheme>()\n\n// This object has a map-like appearance from the outside (with a .get() method),\n// but lazy-loads color schemes as they are requested\nexport const ColorSchemes = {\n    get: (name: ColorSchemeName): ColorScheme => {\n        if (!_colorSchemes.has(name)) {\n            const schemeRaw =\n                getColorBrewerScheme(name) ??\n                CustomColorSchemes.find((s) => s.name === name)\n            if (!schemeRaw) throw new Error(`Color scheme ${name} not found`)\n            const scheme = initColorScheme(schemeRaw)\n            _colorSchemes.set(name, scheme)\n        }\n        return _colorSchemes.get(name)!\n    },\n}\n\nconst getAllColorSchemes = (): Map<ColorSchemeName, ColorScheme> => {\n    return new Map(\n        Object.keys(ColorSchemeName).map((key) => [\n            key as ColorSchemeName,\n            ColorSchemes.get(key as ColorSchemeName),\n        ])\n    )\n}\n\nexport function getColorSchemeForChartType(type: GrapherChartOrMapType): {\n    [key in ColorSchemeName]: ColorScheme\n} {\n    const preferred = new Set(getPreferredSchemesByType(type))\n    const allSchemes = getAllColorSchemes()\n    const [preferredSchemes, otherSchemes] = _.partition(\n        [...allSchemes.entries()],\n        (schemeKeyValue) => preferred.has(schemeKeyValue[0])\n    )\n    return Object.fromEntries([...preferredSchemes, ...otherSchemes]) as {\n        [key in ColorSchemeName]: ColorScheme\n    }\n}\n","// gray shades\nexport const GRAY_100 = \"#2d2e2d\"\nexport const GRAY_90 = \"#4e4e4e\"\nexport const GRAY_80 = \"#5b5b5b\"\nexport const GRAY_70 = \"#767676\"\nexport const GRAY_60 = \"#a1a1a1\"\nexport const GRAY_50 = \"#c6c6c6\"\nexport const GRAY_30 = \"#dadada\"\nexport const GRAY_20 = \"#e7e7e7\"\nexport const GRAY_10 = \"#f2f2f2\"\nexport const GRAY_5 = \"#f7f7f7\"\n\nexport const GRAPHER_BACKGROUND_DEFAULT = \"#ffffff\"\n\nexport const GRAPHER_DARK_TEXT = GRAY_80\nexport const GRAPHER_LIGHT_TEXT = GRAY_70\n\nexport const OWID_NO_DATA_GRAY = \"#6e7581\"\nexport const OWID_ERROR_COLOR = \"ff0002\"\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\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    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\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\";\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","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\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","// 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","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","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","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(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","export default function(x) {\n  return function() {\n    return x;\n  };\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 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","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 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 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 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","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","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\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","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_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, 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","export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, nonpassivecapture);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.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, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.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 Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._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 Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\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        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") 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        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, 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        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export const linear = t => +t;\n","export function quadIn(t) {\n  return t * t;\n}\n\nexport function quadOut(t) {\n  return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, 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        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`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._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let 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 this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`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._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let 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._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let 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 this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`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._append`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._append`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._append`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(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\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","export default function(d) {\n  const x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = 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\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0 || 1,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n","export default function() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n","export default function(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n","export default function(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nexport function removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n","export default function() {\n  return this._root;\n}\n","export default function() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n","export function defaultX(d) {\n  return d[0];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n  return d[1];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n  let s = 1;\n  return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n  return d.x;\n}\n\nexport function y(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = new Map(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\"),\n      random = lcg();\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.forEach(function(force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (node.fx != null) node.x = node.fx;\n      if (node.fy != null) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes, random);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    randomSource: function(_) {\n      return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      xz;\n\n  if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    xz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      yz;\n\n  if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    yz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n  };\n\n  return force;\n}\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","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 {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nexport var areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaRingSum = new Adder();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop;\n  },\n  sphere: function() {\n    areaSum.add(tau);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos(phi),\n      sinPhi = sin(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\n      v = k * sdLambda * sin(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n  areaSum = new Adder();\n  stream(object, areaStream);\n  return areaSum * 2;\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 {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00, phi00, // first point\n    p0, // previous 3D point\n    deltaSum,\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum = new Adder();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon) phi1 = 90;\n    else if (deltaSum < -epsilon) phi0 = -90;\n    range[0] = lambda0, range[1] = lambda1;\n  },\n  sphere: function() {\n    lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees * sign,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = inflection[1] * degrees;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = -inflection[1] * degrees;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0) {\n        if (lambda < lambda0) lambda0 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00 = lambda, phi00 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00, phi00);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n  range[0] = lambda0, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n  ranges = [];\n  stream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0, phi0], [lambda1, phi1]];\n}\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","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","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","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(2),\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 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","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","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, 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 = 2 * 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","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","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","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 {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math.js\";\n\nexport default function(a, b) {\n  var x0 = a[0] * radians,\n      y0 = a[1] * radians,\n      x1 = b[0] * radians,\n      y1 = b[1] * radians,\n      cy0 = cos(y0),\n      sy0 = sin(y0),\n      cy1 = cos(y1),\n      sy1 = sin(y1),\n      kx0 = cy0 * cos(x0),\n      ky0 = cy0 * sin(x0),\n      kx1 = cy1 * cos(x1),\n      ky1 = cy1 * sin(x1),\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n      k = sin(d);\n\n  var interpolate = d ? function(t) {\n    var B = sin(t *= d) / k,\n        A = sin(d - t) / k,\n        x = A * kx0 + B * kx1,\n        y = A * ky0 + B * ky1,\n        z = A * sy0 + B * sy1;\n    return [\n      atan2(y, x) * degrees,\n      atan2(z, sqrt(x * x + y * y)) * degrees\n    ];\n  } : function() {\n    return [x0 * degrees, y0 * degrees];\n  };\n\n  interpolate.distance = d;\n\n  return interpolate;\n}\n","export default x => x;\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 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 {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","// 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","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","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 {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 {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 {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nexport default function() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\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 {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n  return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n    else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n    var r = f / pow(tany(y), n);\n    return [r * sin(n * x), f - r * cos(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n      l = atan2(x, abs(fy)) * sign(fy);\n    if (fy * n < 0)\n      l -= pi * sign(x) * sign(fy);\n    return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\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","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 default function constants(x) {\n  return function() {\n    return x;\n  };\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","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 {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","export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\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; // falls through\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","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(line);\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(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","export default x => () => x;\n","export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\n          .start()\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n          .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p, event) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p, event);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = pointer(event);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent(event);\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n","import { numberMagnitude, RequiredBy } from \"@ourworldindata/utils\"\nimport {\n    BinningStrategyIncludingManual,\n    LogBinningStrategy,\n    ResolvedLogBinningStrategy,\n} from \"@ourworldindata/types\"\nimport {\n    calcMagnitudeDiff,\n    pruneUnusedBins,\n    ResolvedBinningStrategyConfig,\n} from \"./BinningStrategies.js\"\nimport * as R from \"remeda\"\nimport { match } from \"ts-pattern\"\n\nexport const isLogBinningStrategy = (\n    strategy: BinningStrategyIncludingManual\n): strategy is LogBinningStrategy => strategy.startsWith(\"log-\")\n\n/**\n * Automatically chooses a log binning strategy based on the magnitude difference between the min and max values.\n * Very roughly, the resulting number of bins is roughly magnitudeDiff * numberOfLogSteps.\n *\n * The threshold numbers in here are chosen empirically by experimentation.\n * The main idea is that we want to ideally have 5-8 bins, and with the number of resulting bins very roughly\n * being `magnitudeDiff * numberOfLogSteps`, we arrive roughly at these thresholds:\n * - for magnitudeDiff < 2.6, and 3 log steps, we'll end up with up to 8 bins\n * - for magnitudeDiff between 2.6 and 3.6, and 2 log steps, we'll end up with 5 to 8 bins\n * - for magnitudeDiff >= 3.6, and 1 log step, we'll end up with >=4 bins\n * - ... there's probably also cases where we can end up with more than 8 bins, but these should be pretty rare\n *   (and in these case, the authors can still manually choose a different strategy)\n */\nconst autoChooseLogBinningStrategy = (\n    magnitudeDiff: number\n): ResolvedLogBinningStrategy => {\n    if (magnitudeDiff >= 3.6) {\n        return \"log-10\"\n    }\n    if (magnitudeDiff >= 2.6) {\n        return \"log-1-3\"\n    }\n    return \"log-1-2-5\"\n}\n\nexport const runLogBinningStrategy = (\n    conf: RequiredBy<ResolvedBinningStrategyConfig, \"minValue\" | \"maxValue\">,\n    { hasMidpoint }: { hasMidpoint?: boolean } = {}\n): number[] => {\n    const { minValue, maxValue } = conf\n\n    if (minValue <= 0 || maxValue <= 0) {\n        throw new Error(\"Log binning strategy only supports positive values\")\n    }\n\n    let resolvedStrategy: ResolvedLogBinningStrategy\n    if (conf.strategy === \"log-auto\") {\n        let magnitudeDiff = calcMagnitudeDiff(minValue, maxValue)\n        if (hasMidpoint) magnitudeDiff *= 1.8 // If there is a midpoint, we want to create fewer bins than we would otherwise\n        resolvedStrategy = autoChooseLogBinningStrategy(magnitudeDiff)\n    } else {\n        resolvedStrategy = conf.strategy as ResolvedLogBinningStrategy\n    }\n\n    const bins = match(resolvedStrategy)\n        .with(\"log-10\", () =>\n            createLogBins({ minValue, maxValue, logSteps: [1] })\n        )\n        .with(\"log-1-3\", () =>\n            createLogBins({ minValue, maxValue, logSteps: [1, 3] })\n        )\n        .with(\"log-1-2-5\", () =>\n            createLogBins({ minValue, maxValue, logSteps: [1, 2, 5] })\n        )\n        .exhaustive()\n\n    // Add the midpoint (most likely zero) if it is not already included in a bin\n    if (\n        !hasMidpoint &&\n        conf.midpoint !== undefined &&\n        bins[0] > conf.midpoint\n    ) {\n        bins.unshift(conf.midpoint)\n    }\n\n    return bins\n}\n\nconst createLogBins = ({\n    minValue,\n    maxValue,\n    logSteps,\n}: {\n    minValue: number\n    maxValue: number\n    logSteps: number[]\n}): number[] => {\n    if (minValue <= 0 || maxValue <= 0) {\n        throw new Error(\"createLogBins only supports positive values\")\n    }\n\n    // We need the -1 here to convert between magnitude and logarithms.\n    // Magnitude is defined such that magnitude(1) = 1, whereas log10(1) = 0.\n    // Because we generate factors as 10^magnitude, we need to adjust the values accordingly.\n    const exponentMin = numberMagnitude(minValue) - 1\n    const exponentMax = numberMagnitude(maxValue) - 1\n\n    const candidates = R.range(exponentMin, exponentMax + 1).flatMap(\n        (magnitude) => {\n            const factor = Math.pow(10, magnitude)\n            return logSteps.map((step) => step * factor)\n        }\n    )\n\n    // Adding this extra value at the end is useful if we have, for example, maxValue = 99.\n    // Then the candidates above will go up to 50 (if logSteps includes 5), and here we'll then\n    // add 100 to the mix.\n    if ((R.last(candidates) ?? 0) < maxValue) {\n        candidates.push(1 * Math.pow(10, exponentMax + 1))\n    }\n\n    return pruneUnusedBins(candidates, { minValue, maxValue })\n}\n","import {\n    BinningStrategyIncludingManual,\n    EqualSizeBinningStrategy,\n    ResolvedBinningStrategy,\n} from \"@ourworldindata/types\"\nimport {\n    normaliseToSingleDigitNumber,\n    RequiredBy,\n    roundSigFig,\n} from \"@ourworldindata/utils\"\nimport * as R from \"remeda\"\nimport { match, P } from \"ts-pattern\"\nimport { ResolvedBinningStrategyConfig } from \"./BinningStrategies.js\"\nimport * as Sentry from \"@sentry/browser\"\n\nexport const isEqualSizeBinningStrategy = (\n    strategy: BinningStrategyIncludingManual | ResolvedBinningStrategy\n): strategy is EqualSizeBinningStrategy => strategy.startsWith(\"equalSizeBins-\")\n\nexport const runEqualSizeBinningStrategy = (\n    conf: RequiredBy<ResolvedBinningStrategyConfig, \"minValue\" | \"maxValue\">,\n    { hasMidpoint }: { hasMidpoint?: boolean } = {}\n): number[] => {\n    if (!isEqualSizeBinningStrategy(conf.strategy)) {\n        throw new Error(\"Invalid strategy\")\n    }\n\n    const { minValue, maxValue } = conf\n    const targetBinCount = getTargetBinCountForEqualSizeBinsStrategy(\n        conf.strategy,\n        { hasMidpoint }\n    )\n    return createEqualSizeBins({ minValue, maxValue, targetBinCount })\n}\n\n/**\n * The equal-size binning strategies all operate with a range of target bins depending on the strategy.\n * For example, [5, 9] means that there should be at least 5 bins and at most 9.\n * If there is a midpoint, the number of bins needs to be adjusted downward, because we are potentially\n * creating up to twice as many bins overall.\n */\nconst getTargetBinCountForEqualSizeBinsStrategy = (\n    strategy: EqualSizeBinningStrategy,\n    { hasMidpoint }: { hasMidpoint?: boolean } = {}\n): readonly [number, number] => {\n    return match(strategy)\n        .with(\"equalSizeBins-few-bins\", () =>\n            hasMidpoint ? ([1, 3] as const) : ([2, 5] as const)\n        )\n        .with(\"equalSizeBins-normal\", () =>\n            hasMidpoint ? ([3, 6] as const) : ([5, 9] as const)\n        )\n        .with(P.union(\"equalSizeBins-many-bins\", \"equalSizeBins-percent\"), () =>\n            hasMidpoint ? ([4, 8] as const) : ([8, 12] as const)\n        )\n        .exhaustive()\n}\n\nexport const createEqualSizeBins = ({\n    minValue,\n    maxValue,\n    targetBinCount,\n}: {\n    minValue: number\n    maxValue: number\n    targetBinCount: readonly number[]\n}): number[] => {\n    if (minValue > maxValue) {\n        throw new Error(\"minValue must be less than maxValue\")\n    }\n\n    const range = maxValue - minValue\n\n    // Normalise the range to be within 1 and 10\n    const { normalised: normalisedRange, factor } =\n        normaliseToSingleDigitNumber(range)\n\n    // These are all common and \"good\" step sizes\n    const stepSizeCandidates = [1, 0.1, 0.5, 0.2, 2, 3, 0.3, 0.75, 0.25]\n\n    // Compute the number of bins we would get for each candidate step size\n    const stepSizeInfo = stepSizeCandidates.map((candidateStepSize) => {\n        // if (normalisedRange === 0) return true\n\n        const numSteps = Math.ceil(normalisedRange / candidateStepSize)\n        return { stepSize: candidateStepSize, numSteps }\n        // return numSteps >= targetBinCount[0] && numSteps <= targetBinCount[1]\n    })\n\n    // Find the first step size that gives us the target bin count\n    let stepSize = stepSizeInfo.find(\n        (info) =>\n            info.numSteps >= targetBinCount[0] &&\n            info.numSteps <= targetBinCount[1]\n    )?.stepSize\n\n    if (stepSize === undefined) {\n        // It could be interesting to see which charts cause this, so we can further look into them\n        Sentry.captureMessage(\n            \"Equal size binning: Couldn't find a step size fitting targetBinCount; instead using next-best candidate\",\n            {\n                level: \"warning\",\n                extra: { targetBinCount, minValue, maxValue },\n            }\n        )\n\n        // prefer too many bins over too few (by weighing \"too many\" less highly than \"too few\")\n        const stepSizeDifference = (candidate: number): number =>\n            Math.max(candidate - targetBinCount[1], 0) * 1 + // this is how many more bins there are than targetBinCount specifies\n            Math.max(targetBinCount[0] - candidate, 0) * 2 // and this is how many fewer there are\n\n        // Find the step size that minimizes the distance function, i.e. such that we are not much above/below what targetBinCount requests\n        stepSize = R.firstBy(stepSizeInfo, (info) =>\n            stepSizeDifference(info.numSteps)\n        )?.stepSize\n    }\n\n    if (stepSize === undefined) {\n        // This should never happen\n        throw new Error(\"Could not find a valid step size\")\n    }\n\n    const actualStepSize = stepSize * factor\n\n    // Round min value to step size, e.g. if the step size is 20 then this would round 50 down to 40\n    const minValueRounded =\n        Math.floor(minValue / actualStepSize) * actualStepSize\n\n    const steps = Math.ceil((maxValue - minValueRounded) / actualStepSize)\n\n    return R.range(0, steps + 1).map((i) => {\n        const value = i * actualStepSize\n        return minValueRounded + roundSigFig(value, 3) // to avoid floating point issues\n    })\n}\n","import {\n    automaticBinningStrategies,\n    AutomaticBinningStrategy,\n    MidpointMode,\n    ResolvedBinningStrategy,\n} from \"@ourworldindata/types\"\nimport {\n    firstOfNonEmptyArray,\n    lastOfNonEmptyArray,\n} from \"@ourworldindata/utils\"\nimport { quantile } from \"d3\"\nimport { sortedUniq } from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { match, P } from \"ts-pattern\"\nimport {\n    isLogBinningStrategy,\n    runLogBinningStrategy,\n} from \"./BinningStrategyLogarithmic.js\"\nimport {\n    isEqualSizeBinningStrategy,\n    runEqualSizeBinningStrategy,\n} from \"./BinningStrategyEqualSizeBins.js\"\n\n/**\n * Strategies:\n * - The log scales result in log-like steps, e.g. 1, 2, 5, 10, ...\n *   They are fully defined given a minValue, maxValue and steps, and\n *   then generate as many bins as needed to cover the range.\n *   `log-auto` chooses the step size automatically in order to get a decent number of bins.\n * - The equal size bins result in evenly spaced steps, e.g. 0, 1, 2, 3, ...\n *   They are defined by a minValue, maxValue, and a rough target number of bins.\n *   `equalSizeBins-few-bins` chooses a small number of bins, while\n *   `equalSizeBins-many-bins` chooses a large number of bins.\n *   They then generate nice round bin thresholds given the input data.\n * - `equalSizeBins-percent` is a special case, where for data that looks like percent\n *   from 0% to 100% we want to mostly use 0%, 10%, 20%, etc. bins.\n *\n * Midpoints:\n *  Sometimes, we do have a midpoint in our data. In many cases, a natural midpoint is zero\n *  (e.g. for year-over-year change, net migration, temperature anomaly, etc.), but other\n *  midpoints also make sense (e.g. for sex ratio, or survey responses ranging 0-10).\n *  If we have a midpoint, then we want to account for it when binning, and generate bins\n *  that are centered or symmetric around the midpoint.\n */\n\nexport interface BinningStrategyConfig {\n    strategy: AutomaticBinningStrategy\n    minValue?: number\n    maxValue?: number\n    sortedValues: number[]\n    isPercent?: boolean\n    numDecimalPlaces?: number\n    midpointMode?: MidpointMode\n    midpoint?: number\n    createBinForMidpoint?: boolean\n}\n\nexport interface ResolvedBinningStrategyConfig {\n    strategy: ResolvedBinningStrategy\n    minValue?: number\n    maxValue?: number\n    numDecimalPlaces?: number\n    sortedValues: number[]\n    midpointMode: MidpointMode\n    midpoint: number\n}\n\ninterface BinningStrategyOutput {\n    bins: number[]\n    midpoint?: number\n}\n\n// If the log10 difference between the min and max values is less than or equal to 1.2,\n// the data is considered to be close enough in magnitude to use equal-size bins.\n// This threshold was chosen empirically.\nconst AUTO_EQUAL_BINS_MAX_MAGNITUDE_DIFF = 1.2\n\n/**\n * Calculates the log10 difference between two numbers, i.e. compute x such that lowerValue * 10^x = upperValue.\n */\nexport const calcMagnitudeDiff = (\n    lowerValue: number,\n    upperValue: number\n): number => {\n    if (lowerValue > upperValue)\n        throw new Error(\"lowerValue must be less than upperValue\")\n\n    return Math.log10(upperValue) - Math.log10(lowerValue)\n}\n\nexport const pruneUnusedBins = (\n    bins: number[],\n    { minValue, maxValue }: { minValue?: number; maxValue?: number }\n): number[] => {\n    if (minValue !== undefined) {\n        bins = R.dropWhile(\n            bins,\n            (v, i) => bins[i + 1] !== undefined && bins[i + 1] <= minValue\n        )\n    }\n\n    if (maxValue !== undefined) {\n        bins = R.dropLastWhile(\n            bins,\n            (v, i) => bins[i - 1] !== undefined && bins[i - 1] >= maxValue\n        )\n    }\n\n    return bins\n}\n\nexport const runBinningStrategy = (\n    conf: BinningStrategyConfig\n): BinningStrategyOutput => {\n    if (conf.sortedValues.length === 0) {\n        return { bins: [0] }\n    }\n\n    conf.midpoint ??= 0\n\n    const hasValuesBelowMidpoint = conf.sortedValues[0] < conf.midpoint\n    const hasValuesAboveMidpoint =\n        lastOfNonEmptyArray(conf.sortedValues) > conf.midpoint\n    const hasValuesBelowAndAboveMidpoint =\n        hasValuesBelowMidpoint && hasValuesAboveMidpoint\n\n    if (hasValuesBelowAndAboveMidpoint && conf.midpointMode === undefined) {\n        // Default to symmetric midpoint if there are negative and positive values\n        conf.midpointMode ??= \"symmetric\"\n    }\n\n    conf.midpointMode ??= \"none\"\n\n    let resolvedStrategy: ResolvedBinningStrategy\n    if (conf.strategy === \"auto\") {\n        resolvedStrategy = autoChooseBinningStrategy(conf)\n    } else {\n        resolvedStrategy = conf.strategy as ResolvedBinningStrategy\n    }\n\n    const validationResult = hasValidConfigForBinningStrategy(\n        conf.strategy,\n        conf\n    )\n    if (!validationResult.valid) return { bins: [0] } // Placeholder binning for invalid configurations\n\n    let bins = runBinningStrategyAroundMidpoint({\n        ...conf,\n        midpointMode: conf.midpointMode,\n        midpoint: conf.midpoint,\n        strategy: resolvedStrategy,\n    })\n\n    if (conf.createBinForMidpoint) {\n        const midpointIdx = R.sortedIndex(bins, conf.midpoint)\n        bins = bins.toSpliced(midpointIdx, 0, conf.midpoint)\n    }\n\n    return {\n        bins,\n        midpoint: conf.midpointMode !== \"none\" ? conf.midpoint : undefined,\n    }\n}\n\ntype MinMaxValueResult =\n    | { valid: true }\n    | { valid: false; reason: string; field: string }\n\nexport const hasValidConfigForBinningStrategy = (\n    strategy: AutomaticBinningStrategy,\n    config: { minValue?: number; maxValue?: number; midpoint?: number }\n): MinMaxValueResult => {\n    const { minValue, maxValue, midpoint } = config\n\n    if (!automaticBinningStrategies.includes(strategy))\n        return {\n            valid: false,\n            reason: `Binning: Invalid strategy '${strategy}'`,\n            field: \"binningStrategy\",\n        }\n\n    if (\n        minValue !== undefined &&\n        maxValue !== undefined &&\n        maxValue < minValue\n    ) {\n        return {\n            valid: false,\n            reason: \"Binning: minValue is greater than maxValue\",\n            field: \"minValue\",\n        }\n    }\n\n    return match(strategy)\n        .with(\"auto\", () => {\n            return { valid: true } as const\n        })\n        .when(isEqualSizeBinningStrategy, () => {\n            return { valid: true } as const\n        })\n        .when(isLogBinningStrategy, () => {\n            if (minValue !== undefined && minValue <= 0) {\n                return {\n                    valid: false,\n                    reason: \"Binning: Logarithmic binning requires non-zero positive minValue\",\n                    field: \"minValue\",\n                } as const\n            }\n            if (maxValue !== undefined && maxValue <= 0) {\n                return {\n                    valid: false,\n                    reason: \"Binning: Logarithmic binning requires non-zero positive maxValue\",\n                    field: \"maxValue\",\n                } as const\n            }\n            if (midpoint !== undefined && midpoint !== 0) {\n                return {\n                    valid: false,\n                    reason: \"Binning: Logarithmic binning does not support midpoints other than 0\",\n                    field: \"midpoint\",\n                } as const\n            }\n            return { valid: true } as const\n        })\n        .exhaustive()\n}\n\n/**\n * minValue and maxValue may either be explicitly given, or automatically computed from the data.\n * If auto-computed, they are based on some very much heuristic rules, based on quantiles etc.\n *\n * This also means that these lines contain a bunch of magic numbers, which have been chosen like so\n * because they work well in practice for most cases.\n */\nexport const computeMinMaxForStrategy = (\n    strategy: ResolvedBinningStrategy,\n    sortedValues: number[],\n    conf?: Partial<ResolvedBinningStrategyConfig>\n): { minValue: number; maxValue: number } => {\n    let { minValue, maxValue } = conf || {}\n    if (\n        conf?.midpointMode !== \"none\" &&\n        minValue !== undefined &&\n        conf?.midpoint !== undefined\n    ) {\n        // Ensure that the midpoint is within the min/max range, otherwise we'll get very weird results when mirroring around the midpoint\n        minValue = Math.max(minValue, conf.midpoint)\n    }\n    if (minValue !== undefined && maxValue !== undefined) {\n        maxValue = Math.max(minValue, maxValue)\n        return { minValue, maxValue }\n    }\n\n    match(strategy)\n        .with(\"equalSizeBins-percent\", () => {\n            // Percent strategy always uses 0 to 100\n            minValue ??= 0\n            maxValue ??= 100\n        })\n        .when(isEqualSizeBinningStrategy, () => {\n            const uniqValues = sortedUniq(sortedValues)\n            minValue ??= quantile(uniqValues, 0.05)\n            maxValue ??= quantile(uniqValues, 0.95)\n        })\n        .when(isLogBinningStrategy, () => {\n            const posValues = R.dropWhile(sortedValues, (v) => v <= 0)\n            if (posValues.length === 0) {\n                throw new Error(\"Log binning strategy requires positive values\")\n            }\n\n            const uniqValues = sortedUniq(posValues)\n            minValue ??= quantile(uniqValues, 0.15)\n            maxValue ??= quantile(uniqValues, 0.995)\n\n            if (minValue === undefined || maxValue === undefined)\n                throw new Error(\"Couldn't obtain minValue or maxValue\")\n\n            // Ensure that the min/max values are at least as high as the number of decimals precision.\n            // E.g. if we have 1 decimal place, the minimum value should be at least 0.1\n            if (conf?.numDecimalPlaces !== undefined) {\n                if (minValue > 0)\n                    minValue = Math.max(\n                        minValue,\n                        Math.pow(10, -conf.numDecimalPlaces)\n                    )\n                if (maxValue < 0)\n                    maxValue = Math.min(\n                        maxValue,\n                        -Math.pow(10, -conf.numDecimalPlaces)\n                    )\n            }\n        })\n        .exhaustive()\n\n    if (minValue === undefined || maxValue === undefined)\n        throw new Error(\"Couldn't obtain minValue or maxValue\")\n\n    // Ensure that we have minValue <= maxValue\n    maxValue = Math.max(minValue, maxValue)\n    return { minValue, maxValue }\n}\n\nconst runBinningStrategyAroundMidpoint = (\n    conf: ResolvedBinningStrategyConfig\n): number[] => {\n    if (\n        isLogBinningStrategy(conf.strategy) &&\n        conf.midpointMode !== \"none\" &&\n        conf.midpoint !== 0\n    ) {\n        throw new Error(\n            \"Log binning strategy does not support midpoints other than 0\"\n        )\n    }\n\n    const minValue = firstOfNonEmptyArray(conf.sortedValues)\n    const maxValue = lastOfNonEmptyArray(conf.sortedValues)\n\n    const bins = match(conf.midpointMode)\n        .with(\"none\", () => {\n            return runResolvedBinningStrategy(conf, { hasMidpoint: false })\n        })\n        .with(P.union(\"symmetric\", \"asymmetric\"), () => {\n            const leftRange = Math.max(conf.midpoint - minValue, 0)\n            const rightRange = Math.max(maxValue - conf.midpoint, 0)\n            const biggerRange = Math.max(leftRange, rightRange)\n\n            let posValues: number[]\n            if (biggerRange === leftRange) {\n                posValues = R.takeWhile(\n                    conf.sortedValues,\n                    (v) => v < conf.midpoint\n                )\n                    .map((v) => conf.midpoint - v)\n                    .reverse()\n            } else {\n                posValues = R.dropWhile(\n                    conf.sortedValues,\n                    (v) => v <= conf.midpoint\n                ).map((v) => v - conf.midpoint)\n            }\n\n            const binsRight = runResolvedBinningStrategy(\n                { ...conf, sortedValues: posValues },\n                { hasMidpoint: true }\n            )\n            const bins = mirrorBinsAroundMidpoint(binsRight, conf.midpoint)\n\n            if (conf.midpointMode === \"symmetric\") {\n                return bins\n            } else {\n                // asymmetric: create bins the same way, but then prune any unused ones\n\n                return pruneUnusedBins(bins, {\n                    minValue,\n                    maxValue,\n                })\n            }\n        })\n        .with(\"same-num-bins\", () => {\n            const leftValues = R.takeWhile(\n                conf.sortedValues,\n                (v) => v < conf.midpoint\n            )\n                .map((v) => conf.midpoint - v)\n                .reverse()\n\n            const rightValues = R.dropWhile(\n                conf.sortedValues,\n                (v) => v <= conf.midpoint\n            ).map((v) => v - conf.midpoint)\n\n            const binsRight = runResolvedBinningStrategy(\n                { ...conf, sortedValues: rightValues },\n                { hasMidpoint: true }\n            ).filter((v) => v !== 0)\n            const binsLeft = runResolvedBinningStrategy(\n                { ...conf, sortedValues: leftValues },\n                { hasMidpoint: true }\n            ).filter((v) => v !== 0)\n\n            return [\n                ...binsLeft.map((v) => conf.midpoint - v).reverse(),\n                conf.midpoint,\n                ...binsRight.map((v) => v + conf.midpoint),\n            ]\n        })\n        .with(undefined, () => {\n            throw new Error(\"Invalid unresolved midpoint mode\")\n        })\n        .exhaustive()\n\n    return bins\n}\n\nconst runResolvedBinningStrategy = (\n    conf: ResolvedBinningStrategyConfig,\n    { hasMidpoint }: { hasMidpoint: boolean }\n): number[] => {\n    const { minValue, maxValue } = computeMinMaxForStrategy(\n        conf.strategy,\n        conf.sortedValues,\n        conf\n    )\n    return match(conf.strategy)\n        .when(isEqualSizeBinningStrategy, () =>\n            runEqualSizeBinningStrategy(\n                { ...conf, minValue, maxValue },\n                { hasMidpoint }\n            )\n        )\n        .when(isLogBinningStrategy, () =>\n            runLogBinningStrategy(\n                { ...conf, minValue, maxValue },\n                { hasMidpoint }\n            )\n        )\n        .exhaustive()\n}\n\nconst autoChooseBinningStrategy = (\n    conf: BinningStrategyConfig\n): ResolvedBinningStrategy => {\n    if (conf.midpointMode !== \"none\") {\n        return \"equalSizeBins-normal\"\n    }\n\n    const posValuesOnly = R.dropWhile(conf.sortedValues, (v) => v <= 0)\n    if (posValuesOnly.length === 0) {\n        // All values are negative or zero, use equal size bins as a simple fallback (this is rare anyways)\n        return \"equalSizeBins-normal\"\n    }\n\n    // If either minValue or maxValue is non-positive, we cannot use log bins\n    const hasNegativeMinOrMaxValue =\n        (conf.minValue !== undefined && conf.minValue <= 0) ||\n        (conf.maxValue !== undefined && conf.maxValue <= 0)\n\n    let minValueForLog, maxValueForLog\n    if (hasNegativeMinOrMaxValue) {\n        minValueForLog = maxValueForLog = 0\n    } else {\n        const { minValue, maxValue } = computeMinMaxForStrategy(\n            \"log-auto\",\n            posValuesOnly,\n            { minValue: conf.minValue, maxValue: conf.maxValue }\n        )\n        minValueForLog = minValue\n        maxValueForLog = maxValue\n    }\n\n    const magnitudeDiff = calcMagnitudeDiff(minValueForLog, maxValueForLog)\n\n    if (\n        magnitudeDiff < AUTO_EQUAL_BINS_MAX_MAGNITUDE_DIFF ||\n        hasNegativeMinOrMaxValue\n    ) {\n        if (conf.isPercent) {\n            const lastValue = lastOfNonEmptyArray(posValuesOnly)\n            const percentile99 = quantile(posValuesOnly, 0.99)\n            if (\n                lastValue <= 100 &&\n                percentile99 !== undefined &&\n                percentile99 >= 60\n            ) {\n                return \"equalSizeBins-percent\"\n            }\n        }\n\n        return \"equalSizeBins-normal\"\n    }\n\n    return \"log-auto\"\n}\n\nexport const mirrorBinsAroundMidpoint = (\n    binOffsets: number[],\n    midpoint: number\n): number[] => {\n    const filteredRightBins = binOffsets.filter((v) => v !== 0)\n    const leftBins = filteredRightBins.map((v) => midpoint - v).reverse()\n    const rightBins = filteredRightBins.map((v) => v + midpoint)\n    return [...leftBins, midpoint, ...rightBins]\n}\n","import * as _ from \"lodash-es\"\nimport { computed, toJS, makeObservable } from \"mobx\"\nimport { ColorScaleConfig } from \"./ColorScaleConfig\"\nimport { mapNullToUndefined, sortNumeric } from \"@ourworldindata/utils\"\nimport { pairs } from \"d3-array\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { ColorScaleBin, NumericBin, CategoricalBin } from \"./ColorScaleBin\"\nimport { OWID_NO_DATA_GRAY } from \"./ColorConstants\"\nimport {\n    ColorScaleConfigInterface,\n    ColorSchemeName,\n    Color,\n    CoreValueType,\n    OwidVariableRoundingMode,\n} from \"@ourworldindata/types\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport * as R from \"remeda\"\nimport { runBinningStrategy } from \"./BinningStrategies.js\"\n\nexport const NO_DATA_LABEL = \"No data\"\nexport const PROJECTED_DATA_LABEL = \"Projected data\"\n\nexport interface ColorScaleManager {\n    colorScaleConfig?: ColorScaleConfigInterface\n    hasNoDataBin?: boolean\n    hasProjectedDataBin?: boolean\n    defaultNoDataColor?: string\n    defaultBaseColorScheme?: ColorSchemeName\n    colorScaleColumn?: CoreColumn\n}\n\nexport class ColorScale {\n    private manager: Readonly<ColorScaleManager>\n    constructor(manager: ColorScaleManager = {}) {\n        makeObservable(this)\n        this.manager = manager\n    }\n\n    // Config accessors\n\n    @computed get config(): ColorScaleConfigInterface {\n        return this.manager.colorScaleConfig ?? new ColorScaleConfig()\n    }\n\n    @computed get customNumericValues(): number[] {\n        return this.config.customNumericValues ?? []\n    }\n\n    @computed get customNumericColorsActive(): boolean {\n        return this.config.customNumericColorsActive ?? false\n    }\n\n    @computed get customNumericColors(): (Color | undefined)[] {\n        return this.customNumericColorsActive\n            ? mapNullToUndefined(this.config.customNumericColors)\n            : []\n    }\n\n    @computed get customHiddenCategories(): {\n        [key: string]: true | undefined\n    } {\n        return this.config.customHiddenCategories ?? {}\n    }\n\n    @computed get customNumericLabels(): (string | undefined)[] {\n        if (!this.isManualBuckets) return []\n\n        const labels =\n            mapNullToUndefined(toJS(this.config.customNumericLabels)) || []\n        while (labels.length < this.numNumericBins) labels.push(undefined)\n        return labels\n    }\n\n    @computed get isColorSchemeInverted(): boolean {\n        return this.config.colorSchemeInvert ?? false\n    }\n\n    @computed private get customCategoryLabels(): {\n        [key: string]: string | undefined\n    } {\n        return this.config.customCategoryLabels ?? {}\n    }\n\n    @computed get baseColorScheme(): ColorSchemeName {\n        return (\n            this.config.baseColorScheme ??\n            this.manager.defaultBaseColorScheme ??\n            ColorSchemeName.BuGn\n        )\n    }\n\n    @computed private get defaultColorScheme(): ColorScheme {\n        return ColorSchemes.get(ColorSchemeName.BuGn)\n    }\n\n    @computed private get defaultNoDataColor(): Color {\n        return this.manager.defaultNoDataColor ?? OWID_NO_DATA_GRAY\n    }\n\n    @computed get colorScaleColumn(): CoreColumn | undefined {\n        return this.manager.colorScaleColumn\n    }\n\n    @computed get legendDescription(): string | undefined {\n        return this.config.legendDescription\n    }\n\n    // Transforms\n\n    @computed private get hasNoDataBin(): boolean {\n        return this.manager.hasNoDataBin || false\n    }\n\n    @computed private get hasProjectedDataBin(): boolean {\n        return this.manager.hasProjectedDataBin || false\n    }\n\n    @computed get sortedNumericValues(): number[] {\n        return sortNumeric(\n            this.colorScaleColumn?.values.filter(R.isNumber) ?? []\n        )\n    }\n\n    @computed private get minPossibleValue(): number | undefined {\n        return R.first(this.sortedNumericValues)\n    }\n\n    @computed private get maxPossibleValue(): number | undefined {\n        return R.last(this.sortedNumericValues)\n    }\n\n    @computed private get categoricalValues(): string[] {\n        return this.colorScaleColumn?.sortedUniqNonEmptyStringVals ?? []\n    }\n\n    @computed private get colorScheme(): ColorScheme {\n        return ColorSchemes.get(this.baseColorScheme) ?? this.defaultColorScheme\n    }\n\n    @computed get singleColorScale(): boolean {\n        return this.colorScheme.singleColorScale\n    }\n\n    @computed private get manualBinThresholds(): number[] {\n        if (!this.sortedNumericValues.length || this.numNumericBins <= 0)\n            return []\n\n        return this.customNumericValues\n    }\n\n    // When automatic classification is turned on, this takes the numeric map data\n    // and works out some discrete ranges to assign colors to\n    @computed get autoBinThresholds(): number[] {\n        if (this.config.binningStrategy === \"manual\") {\n            throw new Error(\n                \"Cannot compute automatic bin thresholds when binning is set to manual\"\n            )\n        }\n        return runBinningStrategy({\n            sortedValues: this.sortedNumericValues,\n            isPercent: this.colorScaleColumn?.shortUnit === \"%\",\n            numDecimalPlaces: this.colorScaleColumn?.numDecimalPlaces,\n\n            strategy: this.config.binningStrategy,\n            createBinForMidpoint: this.config.createBinForMidpoint,\n            minValue: this.config.minValue,\n            maxValue: this.config.maxValue,\n            midpoint: this.config.midpoint,\n            midpointMode: this.config.midpointMode,\n        }).bins\n    }\n\n    @computed private get bucketThresholds(): number[] {\n        return this.isManualBuckets\n            ? this.manualBinThresholds\n            : this.autoBinThresholds\n    }\n\n    // Ensure there's always a custom color for \"No data\"\n    @computed private get customCategoryColors(): { [key: string]: Color } {\n        return {\n            [NO_DATA_LABEL]: this.defaultNoDataColor, // default 'no data' color\n            ...this.config.customCategoryColors,\n        }\n    }\n\n    @computed get noDataColor(): Color {\n        return this.customCategoryColors[NO_DATA_LABEL]\n    }\n\n    @computed get baseColors(): Color[] {\n        const { categoricalValues, colorScheme, isColorSchemeInverted } = this\n        const numColors = this.numNumericBins + categoricalValues.length\n        const colors = colorScheme.getColors(numColors)\n\n        if (isColorSchemeInverted) return colors.toReversed()\n        else return colors\n    }\n\n    @computed get isManualBuckets(): boolean {\n        return this.config.binningStrategy === \"manual\"\n    }\n\n    @computed get numNumericBins(): number {\n        if (!this.sortedNumericValues.length) return 0\n\n        return this.isManualBuckets\n            ? Math.max(this.customNumericValues.length - 1, 0)\n            : this.autoBinThresholds.length - 1\n    }\n\n    @computed private get numericLegendBins(): NumericBin[] {\n        const {\n            customNumericLabels,\n            minPossibleValue,\n            maxPossibleValue,\n            customNumericColors,\n            bucketThresholds,\n            baseColors,\n        } = this\n\n        if (minPossibleValue === undefined || maxPossibleValue === undefined)\n            return []\n\n        return pairs(bucketThresholds).map(([min, max], index) => {\n            const baseColor = baseColors[index]\n            const color = customNumericColors[index] ?? baseColor\n            const label = customNumericLabels[index]\n\n            const roundingOptions = {\n                roundingMode: OwidVariableRoundingMode.decimalPlaces,\n            }\n            const displayMin =\n                this.colorScaleColumn?.formatValueShort(min, roundingOptions) ??\n                min.toString()\n            const displayMax =\n                this.colorScaleColumn?.formatValueShort(max, roundingOptions) ??\n                max.toString()\n\n            const isFirst = index === 0\n            const isLast = index === bucketThresholds.length - 2\n            return new NumericBin({\n                isFirst,\n                isOpenLeft: isFirst && min > minPossibleValue,\n                isOpenRight: isLast && max < maxPossibleValue,\n                min,\n                max,\n                color,\n                label,\n                displayMin,\n                displayMax,\n            })\n        })\n    }\n\n    @computed get legendBins(): ColorScaleBin[] {\n        // todo: turn comment into unit test\n        // Will eventually produce something like this:\n        // [{ min: 10, max: 20, minText: \"10%\", maxText: \"20%\", color: '#faeaef' },\n        //  { min: 20, max: 30, minText: \"20%\", maxText: \"30%\", color: '#fefabc' },\n        //  { value: 'Foobar', text: \"Foobar Boop\", color: '#bbbbbb'}]\n        return [\n            ...this.numericLegendBins,\n            ...this.categoricalLegendBins,\n        ] as ColorScaleBin[]\n    }\n\n    @computed get categoricalLegendBins(): CategoricalBin[] {\n        const {\n            bucketThresholds,\n            baseColors,\n            hasNoDataBin,\n            hasProjectedDataBin,\n            categoricalValues,\n            customCategoryColors,\n            customCategoryLabels,\n            customHiddenCategories,\n            colorScheme,\n        } = this\n\n        let allCategoricalValues = categoricalValues\n\n        // Inject \"No data\" bin\n        if (hasNoDataBin && !allCategoricalValues.includes(NO_DATA_LABEL)) {\n            // The color scheme colors get applied in order, starting from first, and we only use\n            // as many colors as there are categorical values (excluding \"No data\").\n            // So in order to leave it colorless, we want to append the \"No data\" label last.\n            // -@danielgavrilov, 2020-06-02\n            allCategoricalValues = [...allCategoricalValues, NO_DATA_LABEL]\n        }\n\n        // Inject \"Projected data\" bin\n        if (hasProjectedDataBin) {\n            allCategoricalValues = [\n                ...allCategoricalValues,\n                PROJECTED_DATA_LABEL,\n            ]\n        }\n\n        return allCategoricalValues.map((value, index) => {\n            const boundingOffset = _.isEmpty(bucketThresholds)\n                ? 0\n                : bucketThresholds.length - 1\n\n            // Use colorMap if available and the value exists in it\n            let baseColor: Color | undefined\n            if (colorScheme.colorMap && value in colorScheme.colorMap) {\n                baseColor = colorScheme.colorMap[value]\n            } else {\n                baseColor = baseColors[index + boundingOffset]\n            }\n\n            const color = customCategoryColors[value] ?? baseColor\n            const label = customCategoryLabels[value] ?? value\n\n            return new CategoricalBin({\n                index,\n                value,\n                color,\n                label,\n                isHidden: !!customHiddenCategories[value],\n            })\n        })\n    }\n\n    getBinForValue(\n        value: CoreValueType | undefined\n    ): ColorScaleBin | undefined {\n        return value === undefined\n            ? undefined\n            : this.legendBins.find((bin) => bin.contains(value))\n    }\n\n    getColor(value: CoreValueType | undefined): string | undefined {\n        if (value === undefined) return this.noDataColor\n        return this.getBinForValue(value)?.color\n    }\n}\n","import { Color, CoreValueType } from \"@ourworldindata/types\"\nimport { NO_DATA_LABEL, PROJECTED_DATA_LABEL } from \"./ColorScale\"\n\ninterface BinProps {\n    color: Color\n    label?: string\n    patternRef?: string\n}\n\ninterface NumericBinProps extends BinProps {\n    isFirst: boolean\n    isOpenLeft: boolean\n    isOpenRight: boolean\n    min: number\n    max: number\n    displayMin: string\n    displayMax: string\n}\n\ninterface CategoricalBinProps extends BinProps {\n    index: number\n    value: string\n    label: string\n    isHidden?: boolean\n}\n\nabstract class AbstractColorScaleBin<T extends BinProps> {\n    props: T\n    constructor(props: T) {\n        this.props = props\n    }\n    get color(): string {\n        return this.props.color\n    }\n    get patternRef(): string | undefined {\n        return this.props.patternRef\n    }\n    get label(): string | undefined {\n        return this.props.label\n    }\n}\n\nexport class NumericBin extends AbstractColorScaleBin<NumericBinProps> {\n    get min(): number {\n        return this.props.min\n    }\n    get max(): number {\n        return this.props.max\n    }\n    get minText(): string {\n        if (this.props.isOpenLeft) return \"\"\n        return this.props.displayMin\n    }\n    get maxText(): string {\n        if (this.props.isOpenRight) return \"\"\n        return this.props.displayMax\n    }\n    get text(): string {\n        return this.props.label || \"\"\n    }\n    get isHidden(): boolean {\n        return false\n    }\n\n    contains(value: CoreValueType | undefined): boolean {\n        if (typeof value !== \"number\") return false\n\n        // In looking at this code, it is important to realise that `isOpenLeft`, `isOpenRight`,\n        // and `isFirst` are _not_ mutually exclusive.\n        // For example, if both `isOpenRight` and `isFirst` are set, then we effectively want `value >= min`.\n\n        // If the bin is left-open, we just need to check the right side\n        if (this.props.isOpenLeft && value <= this.max) return true\n\n        // If the bin is right-open, we just need to check the left side\n        if (this.props.isOpenRight && value > this.min) return true\n\n        // If this is the first bin of the chart, we want to include the `min` value and thus use greater-equals\n        if (this.props.isFirst) {\n            return value >= this.min && value <= this.max\n        } else {\n            return value > this.min && value <= this.max\n        }\n    }\n\n    equals(other: ColorScaleBin): boolean {\n        return (\n            other instanceof NumericBin &&\n            this.min === other.min &&\n            this.max === other.max\n        )\n    }\n}\n\nexport class CategoricalBin extends AbstractColorScaleBin<CategoricalBinProps> {\n    get index(): number {\n        return this.props.index\n    }\n    get value(): string {\n        return this.props.value\n    }\n    get isHidden(): boolean | undefined {\n        return this.props.isHidden\n    }\n\n    get text(): string {\n        return this.props.label || this.props.value\n    }\n\n    contains(\n        value: CoreValueType | undefined,\n        { isProjection = false } = {}\n    ): boolean {\n        return (\n            (value === undefined && this.props.value === NO_DATA_LABEL) ||\n            (value !== undefined &&\n                isProjection &&\n                this.props.value === PROJECTED_DATA_LABEL) ||\n            (value !== undefined && value === this.props.value)\n        )\n    }\n\n    equals(other: ColorScaleBin): boolean {\n        return (\n            other instanceof CategoricalBin &&\n            this.props.index === other.props.index\n        )\n    }\n}\n\nexport function isCategoricalBin(bin: ColorScaleBin): bin is CategoricalBin {\n    return bin instanceof CategoricalBin\n}\n\nexport function isNumericBin(bin: ColorScaleBin): bin is NumericBin {\n    return bin instanceof NumericBin\n}\n\nexport function isNoDataBin(bin: ColorScaleBin): bin is CategoricalBin {\n    return isCategoricalBin(bin) && bin.value === NO_DATA_LABEL\n}\n\nexport function isProjectedDataBin(bin: ColorScaleBin): bin is CategoricalBin {\n    return isCategoricalBin(bin) && bin.value === PROJECTED_DATA_LABEL\n}\n\nexport type ColorScaleBin = CategoricalBin | NumericBin\n","import { observable, computed, makeObservable } from \"mobx\"\nimport {\n    trimObject,\n    ColumnSlug,\n    DimensionProperty,\n    OwidVariableId,\n    Persistable,\n    deleteRuntimeAndUnchangedProps,\n    updatePersistables,\n    OwidVariableDisplayConfig,\n    OwidChartDimensionInterface,\n    Time,\n    OwidChartDimensionInterfaceWithMandatorySlug,\n    objectWithPersistablesToObject,\n} from \"@ourworldindata/utils\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\n\n// A chart \"dimension\" represents a binding between a chart\n// and a particular variable that it requests as data\nclass ChartDimensionDefaults implements OwidChartDimensionInterface {\n    property!: DimensionProperty\n    variableId!: OwidVariableId\n\n    // check on: malaria-deaths-comparisons and computing-efficiency\n\n    display = new OwidVariableDisplayConfig() // todo: make persistable\n\n    // XXX move this somewhere else, it's only used for scatter x override and Marimekko override\n    targetYear: Time | undefined = undefined\n\n    constructor() {\n        makeObservable(this, {\n            property: observable,\n            variableId: observable,\n            display: observable,\n            targetYear: observable,\n        })\n    }\n}\n\n// todo: remove when we remove dimensions\nexport interface LegacyDimensionsManager {\n    table: OwidTable\n}\n\nexport function getDimensionColumnSlug(\n    variableId: OwidVariableId,\n    targetYear: Time | undefined\n): ColumnSlug {\n    if (targetYear) return `${variableId}-${targetYear}`\n    return variableId.toString()\n}\n\nexport class ChartDimension\n    extends ChartDimensionDefaults\n    implements Persistable, OwidChartDimensionInterfaceWithMandatorySlug\n{\n    private manager: LegacyDimensionsManager\n\n    constructor(\n        obj: OwidChartDimensionInterface,\n        manager: LegacyDimensionsManager\n    ) {\n        super()\n\n        makeObservable(this, {\n            _slug: observable,\n        })\n        this.manager = manager\n        if (obj) this.updateFromObject(obj)\n    }\n\n    @computed private get table(): OwidTable {\n        return this.manager.table\n    }\n\n    updateFromObject(obj: OwidChartDimensionInterface): void {\n        if (obj.display) updatePersistables(this, { display: obj.display })\n\n        this.targetYear = obj.targetYear\n        this.variableId = obj.variableId\n        this.property = obj.property\n        this.slug = obj.slug\n    }\n\n    toObject(): OwidChartDimensionInterface {\n        const keysToSerialize = [\n            \"variableId\",\n            \"property\",\n            \"display\",\n            \"targetYear\",\n        ]\n        const obj: OwidChartDimensionInterface = objectWithPersistablesToObject(\n            this,\n            keysToSerialize\n        )\n\n        deleteRuntimeAndUnchangedProps(obj, new ChartDimensionDefaults())\n\n        return trimObject(obj)\n    }\n\n    // Do not persist yet, until we migrate off VariableIds\n    _slug: ColumnSlug | undefined = undefined\n\n    @computed get slug(): ColumnSlug {\n        if (this._slug) return this._slug\n        return getDimensionColumnSlug(this.variableId, this.targetYear)\n    }\n\n    set slug(value: ColumnSlug | undefined) {\n        this._slug = value\n    }\n\n    @computed get column(): CoreColumn {\n        return this.table.get(this.columnSlug)\n    }\n\n    @computed get columnSlug(): string {\n        return this.slug ?? this.variableId.toString()\n    }\n}\n","import * as _ from \"lodash-es\"\n\nexport type Fragment = {\n    text: string\n    separator: string\n}\n\nexport function splitIntoFragments(\n    text: string,\n    separators = [\" \"]\n): Fragment[] {\n    if (_.isEmpty(text)) return []\n    const fragments: Fragment[] = []\n    let currText = \"\"\n    for (const char of text) {\n        if (separators.includes(char)) {\n            fragments.push({ text: currText, separator: char })\n            currText = \"\"\n        } else {\n            currText += char\n        }\n    }\n    fragments.push({ text: currText, separator: \"\" })\n    return fragments\n}\n\nexport function joinFragments(fragments: Fragment[]): string {\n    return fragments\n        .map(({ text, separator }) => text + separator)\n        .join(\"\")\n        .trim()\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    stripHTML,\n    Bounds,\n    FontFamily,\n    VerticalAlign,\n} from \"@ourworldindata/utils\"\nimport { computed, makeObservable } from \"mobx\"\nimport * as React from \"react\"\nimport { Fragment, joinFragments, splitIntoFragments } from \"./TextWrapUtils\"\nimport { match } from \"ts-pattern\"\n\ndeclare type FontSize = number\n\ninterface TextWrapProps {\n    text: string\n    maxWidth: number\n    lineHeight?: number\n    fontSize: FontSize\n    fontWeight?: number\n    fontFamily?: FontFamily\n    separators?: string[]\n    rawHtml?: boolean\n    verticalAlign?: VerticalAlign\n}\n\ninterface WrapLine {\n    text: string\n    width: number\n    height: number\n}\n\ninterface OpenHtmlTag {\n    tag: string // e.g. \"a\" for an <a> tag, or \"span\" for a <span> tag\n    fullTag: string // e.g. \"<a href='https://ourworldindata.org'>\"\n}\n\ninterface SVGRenderProps {\n    textProps?: React.SVGProps<SVGTextElement>\n    id?: string\n}\n\nconst HTML_OPENING_CLOSING_TAG_REGEX = /<(\\/?)([A-Za-z]+)( [^<>]*)?>/g\n\nfunction startsWithNewline(text: string): boolean {\n    return text.startsWith(\"\\n\")\n}\n\n/**\n * Shortens text to fit within a target width using binary search.\n * Returns the longest substring that fits within the target width.\n */\nexport const shortenForTargetWidth = (\n    text: string,\n    targetWidth: number,\n    fontSettings: {\n        fontSize?: number\n        fontWeight?: number\n        fontFamily?: FontFamily\n    } = {}\n): string => {\n    // Use binary search to find the largest substring that fits within the target width\n    let low = 0\n    let high = text.length\n    while (low <= high) {\n        const mid = (high + low) >> 1\n        const bounds = Bounds.forText(text.slice(0, mid), fontSettings)\n        if (bounds.width < targetWidth) {\n            low = mid + 1\n        } else {\n            high = mid - 1\n        }\n    }\n    return text.slice(0, low - 1)\n}\n\n/** Shortens text to fit within the target width and appends an ellipsis (…) */\nexport const shortenWithEllipsis = (\n    text: string,\n    targetWidth: number,\n    fontSettings: {\n        fontSize?: number\n        fontWeight?: number\n        fontFamily?: FontFamily\n    } = {}\n): string => {\n    const ellipsis = \"…\"\n    const ellipsisWidth = Bounds.forText(ellipsis, fontSettings).width\n    const truncatedText = shortenForTargetWidth(\n        text,\n        targetWidth - ellipsisWidth,\n        fontSettings\n    )\n    return `${truncatedText}${ellipsis}`\n}\n\nexport class TextWrap {\n    props: TextWrapProps\n    constructor(props: TextWrapProps) {\n        makeObservable(this)\n        this.props = props\n    }\n\n    @computed get maxWidth(): number {\n        return this.props.maxWidth ?? Infinity\n    }\n    @computed get lineHeight(): number {\n        return this.props.lineHeight ?? 1.1\n    }\n    @computed get fontSize(): FontSize {\n        return this.props.fontSize ?? 1\n    }\n    @computed get fontWeight(): number | undefined {\n        return this.props.fontWeight\n    }\n    @computed get fontFamily(): FontFamily | undefined {\n        return this.props.fontFamily\n    }\n    @computed get verticalAlign(): VerticalAlign {\n        return this.props.verticalAlign ?? VerticalAlign.bottom\n    }\n    @computed get text(): string {\n        return this.props.text\n    }\n    @computed get separators(): string[] {\n        return this.props.separators ?? [\" \"]\n    }\n\n    // We need to take care that HTML tags are not split across lines.\n    // Instead, we want every line to have opening and closing tags for all tags that appear.\n    // This is so we don't produce invalid HTML.\n    processHtmlTags(lines: WrapLine[]): WrapLine[] {\n        const currentlyOpenTags: OpenHtmlTag[] = []\n        for (const line of lines) {\n            // Prepend any still-open tags to the start of the line\n            const prependOpenTags = currentlyOpenTags\n                .map((t) => t.fullTag)\n                .join(\"\")\n\n            const tagMatches = line.text.matchAll(\n                HTML_OPENING_CLOSING_TAG_REGEX\n            )\n            for (const tag of tagMatches) {\n                const isOpeningTag = tag[1] !== \"/\"\n                if (isOpeningTag) {\n                    currentlyOpenTags.push({\n                        tag: tag[2],\n                        fullTag: tag[0],\n                    })\n                } else {\n                    if (\n                        !currentlyOpenTags.length ||\n                        currentlyOpenTags.at(-1)?.tag !== tag[2]\n                    ) {\n                        throw new Error(\n                            \"TextWrap: Opening and closing HTML tags do not match\"\n                        )\n                    }\n                    currentlyOpenTags.pop()\n                }\n            }\n\n            // Append any unclosed tags to the end of the line\n            const appendCloseTags = currentlyOpenTags\n                .toReversed()\n                .map((t) => `</${t.tag}>`)\n                .join(\"\")\n            line.text = prependOpenTags + line.text + appendCloseTags\n        }\n        return lines\n    }\n\n    @computed get lines(): WrapLine[] {\n        const { text, separators, maxWidth, fontSize, fontWeight, fontFamily } =\n            this\n\n        // Prepend spaces so that the string is also split before newline characters\n        // See startsWithNewline\n        const fragments = splitIntoFragments(\n            text.replace(/\\n/g, \" \\n\"),\n            separators\n        )\n\n        const lines: WrapLine[] = []\n\n        let line: Fragment[] = []\n        let lineBounds = Bounds.empty()\n\n        fragments.forEach((fragment) => {\n            const nextLine = line.concat([fragment])\n\n            // Strip HTML if a raw string is passed\n            const text = this.props.rawHtml\n                ? stripHTML(joinFragments(nextLine))\n                : joinFragments(nextLine)\n\n            const nextBounds = Bounds.forText(text, {\n                fontSize,\n                fontWeight,\n                fontFamily,\n            })\n\n            if (\n                startsWithNewline(fragment.text) ||\n                (nextBounds.width + 10 > maxWidth && line.length >= 1)\n            ) {\n                // Introduce a newline _before_ this word\n                lines.push({\n                    text: joinFragments(line),\n                    width: lineBounds.width,\n                    height: lineBounds.height,\n                })\n                // ... and start a new line with this word (with a potential leading newline stripped)\n                const wordWithoutNewline = fragment.text.replace(/^\\n/, \"\")\n                line = [\n                    {\n                        text: wordWithoutNewline,\n                        separator: fragment.separator,\n                    },\n                ]\n                lineBounds = Bounds.forText(wordWithoutNewline, {\n                    fontSize,\n                    fontWeight,\n                    fontFamily,\n                })\n            } else {\n                line = nextLine\n                lineBounds = nextBounds\n            }\n        })\n\n        // Push the last line\n        if (line.length > 0)\n            lines.push({\n                text: joinFragments(line),\n                width: lineBounds.width,\n                height: lineBounds.height,\n            })\n\n        // Process HTML to ensure that each opening tag has a matching closing tag _in each line_\n        if (this.props.rawHtml) return this.processHtmlTags(lines)\n        else return lines\n    }\n\n    @computed get lineCount(): number {\n        return this.lines.length\n    }\n\n    @computed get singleLineHeight(): number {\n        return this.fontSize * this.lineHeight\n    }\n\n    @computed get height(): number {\n        if (this.lineCount === 0) return 0\n        return this.lineCount * this.singleLineHeight\n    }\n\n    @computed get width(): number {\n        return _.max(this.lines.map((l) => l.width)) ?? 0\n    }\n\n    @computed get lastLineWidth(): number {\n        return R.last(this.lines)?.width ?? 0\n    }\n\n    @computed get htmlStyle(): any {\n        const { fontSize, fontWeight, lineHeight } = this\n        return {\n            fontSize: fontSize.toFixed(2) + \"px\",\n            fontWeight: fontWeight,\n            lineHeight: lineHeight,\n            overflowY: \"visible\",\n        }\n    }\n\n    getPositionForSvgRendering(x: number, y: number): [number, number] {\n        const { lines, fontSize, lineHeight, height, verticalAlign } = this\n\n        // Magic number set through experimentation.\n        // The HTML and SVG renderers need to position lines identically.\n        // This number was tweaked until the overlaid HTML and SVG outputs\n        // overlap.\n        const HEIGHT_CORRECTION_FACTOR = 0.74\n\n        const textHeight = _.max(lines.map((line) => line.height)) ?? 0\n        const correctedTextHeight = textHeight * HEIGHT_CORRECTION_FACTOR\n        const containerHeight = lineHeight * fontSize\n        const correctedY =\n            y + (containerHeight - (containerHeight - correctedTextHeight) / 2)\n\n        const renderY = match(verticalAlign)\n            .with(VerticalAlign.top, () => correctedY - height)\n            .with(VerticalAlign.middle, () => correctedY - height / 2)\n            .with(VerticalAlign.bottom, () => correctedY)\n            .exhaustive()\n\n        return [x, renderY]\n    }\n\n    renderHTML(): React.ReactElement | null {\n        const { props, lines } = this\n\n        if (lines.length === 0) return null\n\n        return (\n            <span>\n                {lines.map((line, index) => {\n                    const content = props.rawHtml ? (\n                        <span\n                            dangerouslySetInnerHTML={{\n                                __html: line.text,\n                            }}\n                        />\n                    ) : (\n                        <span>{line.text}</span>\n                    )\n                    return (\n                        <React.Fragment key={index}>\n                            {content}\n                            <br />\n                        </React.Fragment>\n                    )\n                })}\n            </span>\n        )\n    }\n\n    renderSVG(x: number, y: number, options: SVGRenderProps = {}) {\n        const { props, lines, fontSize, fontWeight } = this\n\n        if (lines.length === 0) return <></>\n\n        const [renderX, renderY] = this.getPositionForSvgRendering(x, y)\n\n        return (\n            <text\n                id={options.id}\n                fontSize={fontSize.toFixed(2)}\n                fontWeight={fontWeight}\n                x={renderX.toFixed(1)}\n                y={renderY.toFixed(1)}\n                {...options.textProps}\n            >\n                {lines.map((line, i) => {\n                    const x = renderX\n                    const y = renderY + this.singleLineHeight * i\n\n                    if (props.rawHtml)\n                        return (\n                            <tspan\n                                key={i}\n                                x={x}\n                                y={y}\n                                dangerouslySetInnerHTML={{ __html: line.text }}\n                            />\n                        )\n                    else\n                        return (\n                            <tspan key={i} x={x} y={y}>\n                                {line.text}\n                            </tspan>\n                        )\n                })}\n            </text>\n        )\n    }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/// <reference lib=\"dom\" />\n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const char = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return char === characterReference ? false : char\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length;\n  let chunkStart = 0;\n  /** @type {Array<unknown>} */\n  let parameters;\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start;\n  } else {\n    start = start > end ? end : start;\n  }\n  remove = remove > 0 ? remove : 0;\n\n  // No need to chunk the items if there’s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items);\n    parameters.unshift(start, remove);\n    // @ts-expect-error Hush, it’s fine.\n    list.splice(...parameters);\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove);\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000);\n      parameters.unshift(start, 0);\n      // @ts-expect-error Hush, it’s fine.\n      list.splice(...parameters);\n      chunkStart += 10000;\n      start += 10000;\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items);\n    return list;\n  }\n  return items;\n}","/**\n * @import {\n *   Extension,\n *   Handles,\n *   HtmlExtension,\n *   NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n *   List of constructs to merge into.\n * @param {Array<unknown>} list\n *   List of constructs to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return value\n  // Collapse markdown whitespace.\n  .replace(/[\\t\\n\\r ]+/g, \" \")\n  // Trim.\n  .replace(/^ | $/g, '')\n  // Some characters are considered “uppercase”, but if their lowercase\n  // counterpart is uppercased will result in a different uppercase\n  // character.\n  // Hence, to get that form, we perform both lower- and uppercase.\n  // Upper case makes sure keys will not interact with default prototypal\n  // methods: no method is uppercase.\n  .toLowerCase().toUpperCase();\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n *   Expression.\n * @returns {(code: Code) => boolean}\n *   Check.\n */\nfunction regexCheck(regex) {\n  return check;\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n  }\n}","import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''));\n  if (!protocol) {\n    return value;\n  }\n  const colon = value.indexOf(':');\n  const questionMark = value.indexOf('?');\n  const numberSign = value.indexOf('#');\n  const slash = value.indexOf('/');\n  if (\n  // If there is no protocol, it’s relative.\n  colon < 0 ||\n  // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n  slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n  // It is a protocol, it should be allowed.\n  protocol.test(value.slice(0, colon))) {\n    return value;\n  }\n  return '';\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = [];\n  let index = -1;\n  let start = 0;\n  let skip = 0;\n  while (++index < value.length) {\n    const code = value.charCodeAt(index);\n    /** @type {string} */\n    let replace = '';\n\n    // A correct percent encoded value.\n    if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n      skip = 2;\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code);\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1);\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next);\n        skip = 1;\n      }\n      // Lone surrogate.\n      else {\n        replace = \"\\uFFFD\";\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code);\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace));\n      start = index + skip + 1;\n      replace = '';\n    }\n    if (skip) {\n      index += skip;\n      skip = 0;\n    }\n  }\n  return result.join('') + value.slice(start);\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type);\n      return prefix(code);\n    }\n    return ok(code);\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code);\n      return prefix;\n    }\n    effects.exit(type);\n    return ok(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Initializer}\n *   Content.\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\n  /** @type {Token} */\n  let previous;\n  return contentStart;\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, contentStart, \"linePrefix\");\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter(\"paragraph\");\n    return lineStart(code);\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter(\"chunkText\", {\n      contentType: \"text\",\n      previous\n    });\n    if (previous) {\n      previous.next = token;\n    }\n    previous = token;\n    return data(code);\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit(\"chunkText\");\n      effects.exit(\"paragraph\");\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      effects.exit(\"chunkText\");\n      return lineStart;\n    }\n\n    // Data.\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * @import {\n *   Construct,\n *   ContainerState,\n *   InitialConstruct,\n *   Initializer,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n *   Construct and its state.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n};\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeDocument(effects) {\n  const self = this;\n  /** @type {Array<StackItem>} */\n  const stack = [];\n  let continued = 0;\n  /** @type {TokenizeContext | undefined} */\n  let childFlow;\n  /** @type {Token | undefined} */\n  let childToken;\n  /** @type {number} */\n  let lineStartOffset;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued];\n      self.containerState = item[1];\n      return effects.attempt(item[0].continuation, documentContinue, checkNewContainers)(code);\n    }\n\n    // Done.\n    return checkNewContainers(code);\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++;\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined;\n      if (childFlow) {\n        closeFlow();\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          point = self.events[indexBeforeFlow][1].end;\n          break;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      let index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n      return checkNewContainers(code);\n    }\n    return start(code);\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code);\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code);\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n    }\n\n    // Check if there is a new container.\n    self.containerState = {};\n    return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code);\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow();\n    exitContainers(continued);\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length;\n    lineStartOffset = self.now().offset;\n    return flowStart(code);\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {};\n    return effects.attempt(containerConstruct, containerContinue, flowStart)(code);\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++;\n    stack.push([self.currentConstruct, self.containerState]);\n    // Try another.\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow();\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    childFlow = childFlow || self.parser.flow(self.now());\n    effects.enter(\"chunkFlow\", {\n      _tokenizer: childFlow,\n      contentType: \"flow\",\n      previous: childToken\n    });\n    return flowContinue(code);\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit(\"chunkFlow\"), true);\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      writeToChild(effects.exit(\"chunkFlow\"));\n      // Get ready for the next line.\n      continued = 0;\n      self.interrupt = undefined;\n      return start;\n    }\n    effects.consume(code);\n    return flowContinue;\n  }\n\n  /**\n   * @param {Token} token\n   *   Token.\n   * @param {boolean | undefined} [endOfFile]\n   *   Whether the token is at the end of the file (default: `false`).\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function writeToChild(token, endOfFile) {\n    const stream = self.sliceStream(token);\n    if (endOfFile) stream.push(null);\n    token.previous = childToken;\n    if (childToken) childToken.next = token;\n    childToken = token;\n    childFlow.defineSkip(token.start);\n    childFlow.write(stream);\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length;\n      while (index--) {\n        if (\n        // The token starts before the line ending…\n        childFlow.events[index][1].start.offset < lineStartOffset && (\n        // …and either is not ended yet…\n        !childFlow.events[index][1].end ||\n        // …or ends after it.\n        childFlow.events[index][1].end.offset > lineStartOffset)) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return;\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {boolean | undefined} */\n      let seen;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end;\n            break;\n          }\n          seen = true;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n    }\n  }\n\n  /**\n   * @param {number} size\n   *   Size.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exitContainers(size) {\n    let index = stack.length;\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index];\n      self.containerState = entry[1];\n      entry[0].exit.call(self, effects);\n    }\n    stack.length = size;\n  }\n  function closeFlow() {\n    childFlow.write([null]);\n    childToken = undefined;\n    childFlow = undefined;\n    self.containerState._closeFlow = undefined;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n *   Tokenizer.\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), \"linePrefix\", this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n    return 1;\n  }\n  if (unicodePunctuation(code)) {\n    return 2;\n  }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Event,\n *   Point,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  resolveAll: resolveAllAttention,\n  tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1;\n  /** @type {number} */\n  let open;\n  /** @type {Token} */\n  let group;\n  /** @type {Token} */\n  let text;\n  /** @type {Token} */\n  let openingSequence;\n  /** @type {Token} */\n  let closingSequence;\n  /** @type {number} */\n  let use;\n  /** @type {Array<Event>} */\n  let nextEvents;\n  /** @type {number} */\n  let offset;\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n      open = index;\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n        // If the markers are the same:\n        context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n            continue;\n          }\n\n          // Number of markers to use from the sequence.\n          use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n          const start = {\n            ...events[open][1].end\n          };\n          const end = {\n            ...events[index][1].start\n          };\n          movePoint(start, -use);\n          movePoint(end, use);\n          openingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start,\n            end: {\n              ...events[open][1].end\n            }\n          };\n          closingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start: {\n              ...events[index][1].start\n            },\n            end\n          };\n          text = {\n            type: use > 1 ? \"strongText\" : \"emphasisText\",\n            start: {\n              ...events[open][1].end\n            },\n            end: {\n              ...events[index][1].start\n            }\n          };\n          group = {\n            type: use > 1 ? \"strong\" : \"emphasis\",\n            start: {\n              ...openingSequence.start\n            },\n            end: {\n              ...closingSequence.end\n            }\n          };\n          events[open][1].end = {\n            ...openingSequence.start\n          };\n          events[index][1].start = {\n            ...closingSequence.end\n          };\n          nextEvents = [];\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n          // Closing.\n          nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2;\n            nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n          } else {\n            offset = 0;\n          }\n          splice(events, open - 1, index - open + 3, nextEvents);\n          index = open + nextEvents.length - offset - 2;\n          break;\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1;\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data';\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n  const previous = this.previous;\n  const before = classifyCharacter(previous);\n\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code;\n    effects.enter('attentionSequence');\n    return inside(code);\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    const token = effects.exit('attentionSequence');\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code);\n\n    // Always populated by defaults.\n\n    const open = !after || after === 2 && before || attentionMarkers.includes(code);\n    const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n    token._open = Boolean(marker === 42 ? open : open && (before || !close));\n    token._close = Boolean(marker === 42 ? close : close && (after || !open));\n    return ok(code);\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n *   Point.\n * @param {number} offset\n *   Amount to move.\n * @returns {undefined}\n *   Nothing.\n */\nfunction movePoint(point, offset) {\n  point.column += offset;\n  point.offset += offset;\n  point._bufferIndex += offset;\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"autolink\");\n    effects.enter(\"autolinkMarker\");\n    effects.consume(code);\n    effects.exit(\"autolinkMarker\");\n    effects.enter(\"autolinkProtocol\");\n    return open;\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return schemeOrEmailAtext;\n    }\n    if (code === 64) {\n      return nok(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1;\n      return schemeInsideOrEmailAtext(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code);\n      size = 0;\n      return urlInside;\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n      effects.consume(code);\n      return schemeInsideOrEmailAtext;\n    }\n    size = 0;\n    return emailAtext(code);\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit(\"autolinkProtocol\");\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return urlInside;\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code);\n      return emailAtSignOrDot;\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code);\n      return emailAtext;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code);\n      size = 0;\n      return emailAtSignOrDot;\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n    return emailValue(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel;\n      effects.consume(code);\n      return next;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n  partial: true,\n  tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of blank line.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *     ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *       ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit,\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState;\n      if (!state.open) {\n        effects.enter(\"blockQuote\", {\n          _container: true\n        });\n        state.open = true;\n      }\n      effects.enter(\"blockQuotePrefix\");\n      effects.enter(\"blockQuoteMarker\");\n      effects.consume(code);\n      effects.exit(\"blockQuoteMarker\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"blockQuotePrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"blockQuotePrefixWhitespace\");\n      effects.exit(\"blockQuotePrefix\");\n      return ok;\n    }\n    effects.exit(\"blockQuotePrefix\");\n    return ok(code);\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this;\n  return contStart;\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return contBefore(code);\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code);\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit(\"blockQuote\");\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterEscape\");\n    effects.enter(\"escapeMarker\");\n    effects.consume(code);\n    effects.exit(\"escapeMarker\");\n    return inside;\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter(\"characterEscapeValue\");\n      effects.consume(code);\n      effects.exit(\"characterEscapeValue\");\n      effects.exit(\"characterEscape\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  /** @type {number} */\n  let max;\n  /** @type {(code: Code) => boolean} */\n  let test;\n  return start;\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterReference\");\n    effects.enter(\"characterReferenceMarker\");\n    effects.consume(code);\n    effects.exit(\"characterReferenceMarker\");\n    return open;\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter(\"characterReferenceMarkerNumeric\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerNumeric\");\n      return numeric;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 31;\n    test = asciiAlphanumeric;\n    return value(code);\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter(\"characterReferenceMarkerHexadecimal\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerHexadecimal\");\n      effects.enter(\"characterReferenceValue\");\n      max = 6;\n      test = asciiHexDigit;\n      return value;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 7;\n    test = asciiDigit;\n    return value(code);\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit(\"characterReferenceValue\");\n      if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n        return nok(code);\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter(\"characterReferenceMarker\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarker\");\n      effects.exit(\"characterReference\");\n      return ok;\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code);\n      return value;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n  concrete: true,\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this;\n  /** @type {Construct} */\n  const closeStart = {\n    partial: true,\n    tokenize: tokenizeCloseStart\n  };\n  let initialPrefix = 0;\n  let sizeOpen = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code);\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1];\n    initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n    marker = code;\n    effects.enter(\"codeFenced\");\n    effects.enter(\"codeFencedFence\");\n    effects.enter(\"codeFencedFenceSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++;\n      effects.consume(code);\n      return sequenceOpen;\n    }\n    if (sizeOpen < 3) {\n      return nok(code);\n    }\n    effects.exit(\"codeFencedFenceSequence\");\n    return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFencedFence\");\n      return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFencedFenceInfo\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return info(code);\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return infoBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return factorySpace(effects, metaBefore, \"whitespace\")(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return info;\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code);\n    }\n    effects.enter(\"codeFencedFenceMeta\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return meta(code);\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceMeta\");\n      return infoBefore(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return meta;\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code);\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return contentStart;\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return contentChunk(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return beforeContentChunk(code);\n    }\n    effects.consume(code);\n    return contentChunk;\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit(\"codeFenced\");\n    return ok(code);\n  }\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0;\n    return startBefore;\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return start;\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter(\"codeFencedFence\");\n      return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter(\"codeFencedFenceSequence\");\n        return sequenceClose(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++;\n        effects.consume(code);\n        return sequenceClose;\n      }\n      if (size >= sizeOpen) {\n        effects.exit(\"codeFencedFenceSequence\");\n        return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(\"codeFencedFence\");\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n  partial: true,\n  tokenize: tokenizeFurtherStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter(\"codeIndented\");\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return inside(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return inside;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit(\"codeIndented\");\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this;\n  return furtherStart;\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return furtherStart;\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can’t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Previous,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  previous,\n  resolve: resolveCodeText,\n  tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4;\n  let headEnterIndex = 3;\n  /** @type {number} */\n  let index;\n  /** @type {number | undefined} */\n  let enter;\n\n  // If we start and end with an EOL or a space.\n  if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n    index = headEnterIndex;\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === \"codeTextData\") {\n        // Then we have padding.\n        events[headEnterIndex][1].type = \"codeTextPadding\";\n        events[tailExitIndex][1].type = \"codeTextPadding\";\n        headEnterIndex += 2;\n        tailExitIndex -= 2;\n        break;\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1;\n  tailExitIndex++;\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n        enter = index;\n      }\n    } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n      events[enter][1].type = \"codeTextData\";\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end;\n        events.splice(enter + 2, index - enter - 2);\n        tailExitIndex -= index - enter - 2;\n        index = enter + 2;\n      }\n      enter = undefined;\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this;\n  let sizeOpen = 0;\n  /** @type {number} */\n  let size;\n  /** @type {Token} */\n  let token;\n  return start;\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"codeText\");\n    effects.enter(\"codeTextSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    effects.exit(\"codeTextSequence\");\n    return between(code);\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code);\n    }\n\n    // To do: next major: don’t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don’t work, and virtual spaces don’t make sense.\n    if (code === 32) {\n      effects.enter('space');\n      effects.consume(code);\n      effects.exit('space');\n      return between;\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter(\"codeTextSequence\");\n      size = 0;\n      return sequenceClose(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return between;\n    }\n\n    // Data.\n    effects.enter(\"codeTextData\");\n    return data(code);\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n      effects.exit(\"codeTextData\");\n      return between(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code);\n      size++;\n      return sequenceClose;\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit(\"codeTextSequence\");\n      effects.exit(\"codeText\");\n      return ok(code);\n    }\n\n    // More or less accents: mark as data.\n    token.type = \"codeTextData\";\n    return data(code);\n  }\n}","/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n *  - Array-length modifications at the high end of an array (push/pop) are\n *    expected to be common and are implemented in (amortized) time\n *    proportional to the number of elements added or removed, whereas\n *    other operations (shift/unshift and splice) are much less efficient.\n *  - Function arguments are passed on the stack, so adding tens of thousands\n *    of elements to an array with `arr.push(...newElements)` will frequently\n *    cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n *   Item type.\n */\nexport class SpliceBuffer {\n  /**\n   * @param {ReadonlyArray<T> | null | undefined} [initial]\n   *   Initial items (optional).\n   * @returns\n   *   Splice buffer.\n   */\n  constructor(initial) {\n    /** @type {Array<T>} */\n    this.left = initial ? [...initial] : [];\n    /** @type {Array<T>} */\n    this.right = [];\n  }\n\n  /**\n   * Array access;\n   * does not move the cursor.\n   *\n   * @param {number} index\n   *   Index.\n   * @return {T}\n   *   Item.\n   */\n  get(index) {\n    if (index < 0 || index >= this.left.length + this.right.length) {\n      throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n    }\n    if (index < this.left.length) return this.left[index];\n    return this.right[this.right.length - index + this.left.length - 1];\n  }\n\n  /**\n   * The length of the splice buffer, one greater than the largest index in the\n   * array.\n   */\n  get length() {\n    return this.left.length + this.right.length;\n  }\n\n  /**\n   * Remove and return `list[0]`;\n   * moves the cursor to `0`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  shift() {\n    this.setCursor(0);\n    return this.right.pop();\n  }\n\n  /**\n   * Slice the buffer to get an array;\n   * does not move the cursor.\n   *\n   * @param {number} start\n   *   Start.\n   * @param {number | null | undefined} [end]\n   *   End (optional).\n   * @returns {Array<T>}\n   *   Array of items.\n   */\n  slice(start, end) {\n    /** @type {number} */\n    const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n    if (stop < this.left.length) {\n      return this.left.slice(start, stop);\n    }\n    if (start > this.left.length) {\n      return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n    }\n    return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n  }\n\n  /**\n   * Mimics the behavior of Array.prototype.splice() except for the change of\n   * interface necessary to avoid segfaults when patching in very large arrays.\n   *\n   * This operation moves cursor is moved to `start` and results in the cursor\n   * placed after any inserted items.\n   *\n   * @param {number} start\n   *   Start;\n   *   zero-based index at which to start changing the array;\n   *   negative numbers count backwards from the end of the array and values\n   *   that are out-of bounds are clamped to the appropriate end of the array.\n   * @param {number | null | undefined} [deleteCount=0]\n   *   Delete count (default: `0`);\n   *   maximum number of elements to delete, starting from start.\n   * @param {Array<T> | null | undefined} [items=[]]\n   *   Items to include in place of the deleted items (default: `[]`).\n   * @return {Array<T>}\n   *   Any removed items.\n   */\n  splice(start, deleteCount, items) {\n    /** @type {number} */\n    const count = deleteCount || 0;\n    this.setCursor(Math.trunc(start));\n    const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n    if (items) chunkedPush(this.left, items);\n    return removed.reverse();\n  }\n\n  /**\n   * Remove and return the highest-numbered item in the array, so\n   * `list[list.length - 1]`;\n   * Moves the cursor to `length`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  pop() {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    return this.left.pop();\n  }\n\n  /**\n   * Inserts a single item to the high-numbered side of the array;\n   * moves the cursor to `length`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  push(item) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    this.left.push(item);\n  }\n\n  /**\n   * Inserts many items to the high-numbered side of the array.\n   * Moves the cursor to `length`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  pushMany(items) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    chunkedPush(this.left, items);\n  }\n\n  /**\n   * Inserts a single item to the low-numbered side of the array;\n   * Moves the cursor to `0`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshift(item) {\n    this.setCursor(0);\n    this.right.push(item);\n  }\n\n  /**\n   * Inserts many items to the low-numbered side of the array;\n   * moves the cursor to `0`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshiftMany(items) {\n    this.setCursor(0);\n    chunkedPush(this.right, items.reverse());\n  }\n\n  /**\n   * Move the cursor to a specific position in the array. Requires\n   * time proportional to the distance moved.\n   *\n   * If `n < 0`, the cursor will end up at the beginning.\n   * If `n > length`, the cursor will end up at the end.\n   *\n   * @param {number} n\n   *   Position.\n   * @return {undefined}\n   *   Nothing.\n   */\n  setCursor(n) {\n    if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n    if (n < this.left.length) {\n      // Move cursor to the this.left\n      const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.right, removed.reverse());\n    } else {\n      // Move cursor to the this.right\n      const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.left, removed.reverse());\n    }\n  }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n *   Item type.\n * @param {Array<T>} list\n *   List to inject into.\n * @param {ReadonlyArray<T>} right\n *   Items to inject.\n * @return {undefined}\n *   Nothing.\n */\nfunction chunkedPush(list, right) {\n  /** @type {number} */\n  let chunkStart = 0;\n  if (right.length < 10000) {\n    list.push(...right);\n  } else {\n    while (chunkStart < right.length) {\n      list.push(...right.slice(chunkStart, chunkStart + 10000));\n      chunkStart += 10000;\n    }\n  }\n}","/**\n * @import {Chunk, Event, Token} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n  /** @type {Record<string, number>} */\n  const jumps = {};\n  let index = -1;\n  /** @type {Event} */\n  let event;\n  /** @type {number | undefined} */\n  let lineIndex;\n  /** @type {number} */\n  let otherIndex;\n  /** @type {Event} */\n  let otherEvent;\n  /** @type {Array<Event>} */\n  let parameters;\n  /** @type {Array<Event>} */\n  let subevents;\n  /** @type {boolean | undefined} */\n  let more;\n  const events = new SpliceBuffer(eventsArray);\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index];\n    }\n    event = events.get(index);\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n      subevents = event[1]._tokenizer.events;\n      otherIndex = 0;\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n        otherIndex += 2;\n      }\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === \"content\") {\n            break;\n          }\n          if (subevents[otherIndex][1].type === \"chunkText\") {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n            otherIndex++;\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index));\n        index = jumps[index];\n        more = true;\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index;\n      lineIndex = undefined;\n      while (otherIndex--) {\n        otherEvent = events.get(otherIndex);\n        if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events.get(lineIndex)[1].type = \"lineEndingBlank\";\n            }\n            otherEvent[1].type = \"lineEnding\";\n            lineIndex = otherIndex;\n          }\n        } else if (otherEvent[1].type === \"linePrefix\" || otherEvent[1].type === \"listItemIndent\") {\n          // Move past.\n        } else {\n          break;\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = {\n          ...events.get(lineIndex)[1].start\n        };\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index);\n        parameters.unshift(event);\n        events.splice(lineIndex, index - lineIndex + 1, parameters);\n      }\n    }\n  }\n\n  // The changes to the `events` buffer must be copied back into the eventsArray\n  splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n  return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n *   Events.\n * @param {number} eventIndex\n *   Index.\n * @returns {Record<string, number>}\n *   Gaps.\n */\nfunction subcontent(events, eventIndex) {\n  const token = events.get(eventIndex)[1];\n  const context = events.get(eventIndex)[2];\n  let startPosition = eventIndex - 1;\n  /** @type {Array<number>} */\n  const startPositions = [];\n  let tokenizer = token._tokenizer;\n  if (!tokenizer) {\n    tokenizer = context.parser[token.contentType](token.start);\n    if (token._contentTypeTextTrailing) {\n      tokenizer._contentTypeTextTrailing = true;\n    }\n  }\n  const childEvents = tokenizer.events;\n  /** @type {Array<[number, number]>} */\n  const jumps = [];\n  /** @type {Record<string, number>} */\n  const gaps = {};\n  /** @type {Array<Chunk>} */\n  let stream;\n  /** @type {Token | undefined} */\n  let previous;\n  let index = -1;\n  /** @type {Token | undefined} */\n  let current = token;\n  let adjust = 0;\n  let start = 0;\n  const breaks = [start];\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events.get(++startPosition)[1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition);\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current);\n      if (!current.next) {\n        stream.push(null);\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start);\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true;\n      }\n      tokenizer.write(stream);\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n      }\n    }\n\n    // Unravel the next token.\n    previous = current;\n    current = current.next;\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token;\n  while (++index < childEvents.length) {\n    if (\n    // Find a void token that includes a break.\n    childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n      start = index + 1;\n      breaks.push(start);\n      // Help GC.\n      current._tokenizer = undefined;\n      current.previous = undefined;\n      current = current.next;\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = [];\n\n  // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined;\n    current.previous = undefined;\n  } else {\n    breaks.pop();\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n  index = breaks.length;\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n    const start = startPositions.pop();\n    jumps.push([start, start + slice.length - 1]);\n    events.splice(start, 2, slice);\n  }\n  jumps.reverse();\n  index = -1;\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n    adjust += jumps[index][1] - jumps[index][0] - 1;\n  }\n  return gaps;\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  resolve: resolveContent,\n  tokenize: tokenizeContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  partial: true,\n  tokenize: tokenizeContinuation\n};\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous;\n  return chunkStart;\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter(\"content\");\n    previous = effects.enter(\"chunkContent\", {\n      contentType: \"content\"\n    });\n    return chunkInside(code);\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code);\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n    }\n\n    // Data.\n    effects.consume(code);\n    return chunkInside;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit(\"chunkContent\");\n    effects.exit(\"content\");\n    return ok(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code);\n    effects.exit(\"chunkContent\");\n    previous.next = effects.enter(\"chunkContent\", {\n      contentType: \"content\",\n      previous\n    });\n    previous = previous.next;\n    return chunkInside;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this;\n  return startLookahead;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit(\"chunkContent\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, prefixed, \"linePrefix\");\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1];\n    if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n      return ok(code);\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n  }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\n  const limit = max || Number.POSITIVE_INFINITY;\n  let balance = 0;\n  return start;\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type);\n      effects.enter(literalType);\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      return enclosedBefore;\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.enter(type);\n    effects.enter(rawType);\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return raw(code);\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      effects.exit(literalType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return enclosed(code);\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      return enclosedBefore(code);\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? enclosedEscape : enclosed;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code);\n      return enclosed;\n    }\n    return enclosed(code);\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      effects.exit(rawType);\n      effects.exit(type);\n      return ok(code);\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code);\n      balance++;\n      return raw;\n    }\n    if (code === 41) {\n      effects.consume(code);\n      balance--;\n      return raw;\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn’t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? rawEscape : raw;\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code);\n      return raw;\n    }\n    return raw(code);\n  }\n}","/**\n * @import {\n *   Effects,\n *   State,\n *   TokenizeContext,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this;\n  let size = 0;\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type);\n    effects.enter(markerType);\n    effects.consume(code);\n    effects.exit(markerType);\n    effects.enter(stringType);\n    return atBreak;\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (size > 999 || code === null || code === 91 || code === 93 && !seen ||\n    // To do: remove in the future once we’ve switched from\n    // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n    // which doesn’t need this.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit(stringType);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return atBreak;\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return labelInside(code);\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    if (!seen) seen = !markdownSpace(code);\n    return code === 92 ? labelEscape : labelInside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return labelInside;\n    }\n    return labelInside(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Effects,\n *   State,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      marker = code === 40 ? 41 : code;\n      return begin;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    return atBreak(code);\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType);\n      return begin(marker);\n    }\n    if (code === null) {\n      return nok(code);\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return factorySpace(effects, atBreak, \"linePrefix\");\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return inside(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? escape : inside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code);\n      return inside;\n    }\n    return inside(code);\n  }\n}","/**\n * @import {Effects, State} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      seen = true;\n      return start;\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, start, seen ? \"linePrefix\" : \"lineSuffix\")(code);\n    }\n    return ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n  partial: true,\n  tokenize: tokenizeTitleBefore\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this;\n  /** @type {string} */\n  let identifier;\n  return start;\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter(\"definition\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(self, effects, labelAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n    if (code === 58) {\n      effects.enter(\"definitionMarker\");\n      effects.consume(code);\n      effects.exit(\"definitionMarker\");\n      return markerAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(effects, destinationAfter,\n    // Note: we don’t need to reset the way `markdown-rs` does.\n    nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code);\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"definition\");\n\n      // Note: we don’t care about uniqueness.\n      // It’s likely that that doesn’t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier);\n\n      // To do: `markdown-rs` interrupt.\n      // // You’d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore;\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"hardBreakEscape\");\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit(\"hardBreakEscape\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  resolve: resolveHeadingAtx,\n  tokenize: tokenizeHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2;\n  let contentStart = 3;\n  /** @type {Token} */\n  let content;\n  /** @type {Token} */\n  let text;\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === \"whitespace\") {\n    contentStart += 2;\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n    contentEnd -= 2;\n  }\n  if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: \"atxHeadingText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    };\n    text = {\n      type: \"chunkText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: \"text\"\n    };\n    splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter(\"atxHeading\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"atxHeadingSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code);\n      return sequenceOpen;\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingSequence\");\n      return atBreak(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter(\"atxHeadingSequence\");\n      return sequenceFurther(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"atxHeading\");\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, \"whitespace\")(code);\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter(\"atxHeadingText\");\n    return data(code);\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal “visible” hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code);\n      return sequenceFurther;\n    }\n    effects.exit(\"atxHeadingSequence\");\n    return atBreak(code);\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingText\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  concrete: true,\n  name: 'htmlFlow',\n  resolveTo: resolveToHtmlFlow,\n  tokenize: tokenizeHtmlFlow\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  partial: true,\n  tokenize: tokenizeBlankLineBefore\n};\nconst nonLazyContinuationStart = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuationStart\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length;\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n      break;\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start;\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start;\n    // Remove the line prefix.\n    events.splice(index - 2, 2);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this;\n  /** @type {number} */\n  let marker;\n  /** @type {boolean} */\n  let closingTag;\n  /** @type {string} */\n  let buffer;\n  /** @type {number} */\n  let index;\n  /** @type {Code} */\n  let markerB;\n  return start;\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"htmlFlow\");\n    effects.enter(\"htmlFlowData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      closingTag = true;\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      marker = 3;\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      marker = 2;\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      marker = 5;\n      index = 0;\n      return cdataOpenInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      marker = 4;\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation;\n      }\n      return cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      const slash = code === 47;\n      const name = buffer.toLowerCase();\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1;\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6;\n        if (slash) {\n          effects.consume(code);\n          return basicSelfClosing;\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      marker = 7;\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeClosingTagAfter;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return completeEnd;\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameBefore;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    return completeAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameAfter;\n    }\n    return completeAttributeNameBefore(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      markerB = code;\n      return completeAttributeValueQuoted;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    return completeAttributeValueUnquoted(code);\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code);\n      markerB = null;\n      return completeAttributeValueQuotedAfter;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n      return completeAttributeNameAfter(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationCommentInside;\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code);\n      return continuationRawTagOpen;\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code);\n      return continuationClose;\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code);\n      return continuationCdataInside;\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit(\"htmlFlowData\");\n      return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationStart(code);\n    }\n    effects.consume(code);\n    return continuation;\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return continuationBefore;\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code);\n    }\n    effects.enter(\"htmlFlowData\");\n    return continuation(code);\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code);\n      buffer = '';\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase();\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code);\n        return continuationClose;\n      }\n      return continuation(code);\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      // Always the case.\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return continuationClose;\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationAfter(code);\n    }\n    effects.consume(code);\n    return continuationClose;\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit(\"htmlFlow\");\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start;\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return effects.attempt(blankLine, ok, nok);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code> | undefined} */\n  let marker;\n  /** @type {number} */\n  let index;\n  /** @type {State} */\n  let returnState;\n  return start;\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"htmlText\");\n    effects.enter(\"htmlTextData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instruction;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      index = 0;\n      return cdataOpenInside;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return declaration;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 45) {\n      effects.consume(code);\n      return commentClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return comment;\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return comment(code);\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      return index === value.length ? cdata : cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return cdata;\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return declaration;\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instructionClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return instruction;\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return tagCloseBetween(code);\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagCloseBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return end;\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    return tagOpenAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeNameAfter;\n    }\n    return tagOpenBetween(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      marker = code;\n      return tagOpenAttributeValueQuoted;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code);\n      marker = undefined;\n      return tagOpenAttributeValueQuotedAfter;\n    }\n    if (code === null) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n      return nok(code);\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code);\n      effects.exit(\"htmlTextData\");\n      effects.exit(\"htmlText\");\n      return ok;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At eol.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit(\"htmlTextData\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineEndingAfter;\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter(\"htmlTextData\");\n    return returnState(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   Event,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  resolveAll: resolveAllLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1;\n  /** @type {Array<Event>} */\n  const newEvents = [];\n  while (++index < events.length) {\n    const token = events[index][1];\n    newEvents.push(events[index]);\n    if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n      // Remove the marker.\n      const offset = token.type === \"labelImage\" ? 4 : 2;\n      token.type = \"data\";\n      index += offset;\n    }\n  }\n\n  // If the events are equal, we don't have to copy newEvents to events\n  if (events.length !== newEvents.length) {\n    splice(events, 0, events.length, newEvents);\n  }\n  return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length;\n  let offset = 0;\n  /** @type {Token} */\n  let token;\n  /** @type {number | undefined} */\n  let open;\n  /** @type {number | undefined} */\n  let close;\n  /** @type {Array<Event>} */\n  let media;\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1];\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n        break;\n      }\n\n      // Mark other link openings as inactive, as we can’t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n        token._inactive = true;\n      }\n    } else if (close) {\n      if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n        open = index;\n        if (token.type !== \"labelLink\") {\n          offset = 2;\n          break;\n        }\n      }\n    } else if (token.type === \"labelEnd\") {\n      close = index;\n    }\n  }\n  const group = {\n    type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n  const label = {\n    type: \"label\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[close][1].end\n    }\n  };\n  const text = {\n    type: \"labelText\",\n    start: {\n      ...events[open + offset + 2][1].end\n    },\n    end: {\n      ...events[close - 2][1].start\n    }\n  };\n  media = [['enter', group, context], ['enter', label, context]];\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3));\n\n  // Text open.\n  media = push(media, [['enter', text, context]]);\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n  // Text close, marker close, label close.\n  media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1));\n\n  // Media close.\n  media = push(media, [['exit', group, context]]);\n  splice(events, open, events.length, media);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  /** @type {Token} */\n  let labelStart;\n  /** @type {boolean} */\n  let defined;\n\n  // Find an opening.\n  while (index--) {\n    if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n      labelStart = self.events[index][1];\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code);\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we’d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can’t have that, so it’s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code);\n    }\n    defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    })));\n    effects.enter(\"labelEnd\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelEnd\");\n    return after;\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code);\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code);\n  }\n\n  /**\n   * Done, it’s nothing.\n   *\n   * There was an okay opening, but we didn’t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true;\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart;\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter(\"resource\");\n    effects.enter(\"resourceMarker\");\n    effects.consume(code);\n    effects.exit(\"resourceMarker\");\n    return resourceBefore;\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code);\n    }\n    return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code);\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n    }\n    return resourceEnd(code);\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter(\"resourceMarker\");\n      effects.consume(code);\n      effects.exit(\"resourceMarker\");\n      effects.exit(\"resource\");\n      return ok;\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this;\n  return referenceFull;\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart;\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there’s a `[`.\n\n    effects.enter(\"reference\");\n    effects.enter(\"referenceMarker\");\n    effects.consume(code);\n    effects.exit(\"referenceMarker\");\n    return referenceCollapsedOpen;\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter(\"referenceMarker\");\n      effects.consume(code);\n      effects.exit(\"referenceMarker\");\n      effects.exit(\"reference\");\n      return ok;\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelImage\");\n    effects.enter(\"labelImageMarker\");\n    effects.consume(code);\n    effects.exit(\"labelImageMarker\");\n    return open;\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter(\"labelMarker\");\n      effects.consume(code);\n      effects.exit(\"labelMarker\");\n      effects.exit(\"labelImage\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn’t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelLink\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelLink\");\n    return after;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}","/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, ok, \"linePrefix\");\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"thematicBreak\");\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code;\n    return atBreak(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter(\"thematicBreakSequence\");\n      return sequence(code);\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit(\"thematicBreak\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code);\n      size++;\n      return sequence;\n    }\n    effects.exit(\"thematicBreakSequence\");\n    return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd,\n  name: 'list',\n  tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  partial: true,\n  tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n  partial: true,\n  tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n    if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind;\n        effects.enter(kind, {\n          _container: true\n        });\n      }\n      if (kind === \"listUnordered\") {\n        effects.enter(\"listItemPrefix\");\n        return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter(\"listItemPrefix\");\n        effects.enter(\"listItemValue\");\n        return inside(code);\n      }\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code);\n      return inside;\n    }\n    if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n      effects.exit(\"listItemValue\");\n      return atMarker(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter(\"listItemMarker\");\n    effects.consume(code);\n    effects.exit(\"listItemMarker\");\n    self.containerState.marker = self.containerState.marker || code;\n    return effects.check(blankLine,\n    // Can’t be empty when interrupting.\n    self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true;\n    initialSize++;\n    return endOfPrefix(code);\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"listItemPrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"listItemPrefixWhitespace\");\n      return endOfPrefix;\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this;\n  self.containerState._closeFlow = undefined;\n  return effects.check(blankLine, onBlank, notBlank);\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined;\n      self.containerState.initialBlankLine = undefined;\n      return notInCurrentItem(code);\n    }\n    self.containerState.furtherBlankLines = undefined;\n    self.containerState.initialBlankLine = undefined;\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true;\n    // As we’re closing flow, we’re no longer interrupting.\n    self.interrupt = undefined;\n    // Always populated by defaults.\n\n    return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this;\n\n  // Always populated by defaults.\n\n  return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n  }\n}","/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  resolveTo: resolveToSetextUnderline,\n  tokenize: tokenizeSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length;\n  /** @type {number | undefined} */\n  let content;\n  /** @type {number | undefined} */\n  let text;\n  /** @type {number | undefined} */\n  let definition;\n\n  // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === \"content\") {\n        content = index;\n        break;\n      }\n      if (events[index][1].type === \"paragraph\") {\n        text = index;\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === \"content\") {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1);\n      }\n      if (!definition && events[index][1].type === \"definition\") {\n        definition = index;\n      }\n    }\n  }\n  const heading = {\n    type: \"setextHeading\",\n    start: {\n      ...events[content][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = \"setextHeadingText\";\n\n  // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context]);\n    events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n    events[content][1].end = {\n      ...events[definition][1].end\n    };\n  } else {\n    events[content][1] = heading;\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context]);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length;\n    /** @type {boolean | undefined} */\n    let paragraph;\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n        paragraph = self.events[index][1].type === \"paragraph\";\n        break;\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter(\"setextHeadingLine\");\n      marker = code;\n      return before(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"setextHeadingLineSequence\");\n    return inside(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    effects.exit(\"setextHeadingLineSequence\");\n    return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"setextHeadingLine\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}","/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeFlow(effects) {\n  const self = this;\n  const initial = effects.attempt(\n  // Try to parse a blank line.\n  blankLine, atBlankEnding,\n  // Try to parse initial flow (essentially, only code).\n  effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\n  return initial;\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEndingBlank\");\n    effects.consume(code);\n    effects.exit(\"lineEndingBlank\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n}","/**\n * @import {\n *   Code,\n *   InitialConstruct,\n *   Initializer,\n *   Resolver,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n\n/**\n * @param {'string' | 'text'} field\n *   Field.\n * @returns {InitialConstruct}\n *   Construct.\n */\nfunction initializeFactory(field) {\n  return {\n    resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n    tokenize: initializeText\n  };\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this;\n    const constructs = this.parser.constructs[field];\n    const text = effects.attempt(constructs, start, notText);\n    return start;\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code);\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code);\n        return;\n      }\n      effects.enter(\"data\");\n      effects.consume(code);\n      return data;\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit(\"data\");\n        return text(code);\n      }\n\n      // Data.\n      effects.consume(code);\n      return data;\n    }\n\n    /**\n     * @param {Code} code\n     *   Code.\n     * @returns {boolean}\n     *   Whether the code is a break.\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true;\n      }\n      const list = constructs[code];\n      let index = -1;\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index];\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n *   Resolver.\n * @returns {Resolver}\n *   Resolver.\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText;\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1;\n    /** @type {number | undefined} */\n    let enter;\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === \"data\") {\n          enter = index;\n          index++;\n        }\n      } else if (!events[index] || events[index][1].type !== \"data\") {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end;\n          events.splice(enter + 2, index - enter - 2);\n          index = enter + 2;\n        }\n        enter = undefined;\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events;\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0; // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\n      const data = events[eventIndex - 1][1];\n      const chunks = context.sliceStream(data);\n      let index = chunks.length;\n      let bufferIndex = -1;\n      let size = 0;\n      /** @type {boolean | undefined} */\n      let tabs;\n      while (index--) {\n        const chunk = chunks[index];\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length;\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++;\n            bufferIndex--;\n          }\n          if (bufferIndex) break;\n          bufferIndex = -1;\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true;\n          size++;\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++;\n          break;\n        }\n      }\n\n      // Allow final trailing whitespace.\n      if (context._contentTypeTextTrailing && eventIndex === events.length) {\n        size = 0;\n      }\n      if (size) {\n        const token = {\n          type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n          start: {\n            _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n            _index: data.start._index + index,\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size\n          },\n          end: {\n            ...data.end\n          }\n        };\n        data.end = {\n          ...token.start\n        };\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token);\n        } else {\n          events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n          eventIndex += 2;\n        }\n      }\n      eventIndex++;\n    }\n  }\n  return events;\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n};","/**\n * @import {\n *   Chunk,\n *   Code,\n *   ConstructRecord,\n *   Construct,\n *   Effects,\n *   InitialConstruct,\n *   ParseContext,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n *   Restore the state.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef Info\n *   Info.\n * @property {Restore} restore\n *   Restore.\n * @property {number} from\n *   From.\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n *   Construct.\n * @param {Info} info\n *   Info.\n * @returns {undefined}\n *   Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n *   Parser.\n * @param {InitialConstruct} initialize\n *   Construct.\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n *   Point (optional).\n * @returns {TokenizeContext}\n *   Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = {\n    _bufferIndex: -1,\n    _index: 0,\n    line: from && from.line || 1,\n    column: from && from.column || 1,\n    offset: from && from.offset || 0\n  };\n  /** @type {Record<string, number>} */\n  const columnStart = {};\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = [];\n  /** @type {Array<Chunk>} */\n  let chunks = [];\n  /** @type {Array<Token>} */\n  let stack = [];\n  /** @type {boolean | undefined} */\n  let consumed = true;\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    consume,\n    enter,\n    exit,\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  };\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    code: null,\n    containerState: {},\n    defineSkip,\n    events: [],\n    now,\n    parser,\n    previous: null,\n    sliceSerialize,\n    sliceStream,\n    write\n  };\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects);\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode;\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize);\n  }\n  return context;\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice);\n    main();\n\n    // Exit if we’re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return [];\n    }\n    addResult(initialize, 0);\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context);\n    return context.events;\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs);\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token);\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    } = point;\n    return {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    };\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column;\n    accountForPotentialSkip();\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex;\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index];\n\n      // If we’re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index;\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0;\n        }\n        while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n          go(chunk.charCodeAt(point._bufferIndex));\n        }\n      } else {\n        go(chunk);\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   *   Code.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function go(code) {\n    consumed = undefined;\n    expectedCode = code;\n    state = state(code);\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++;\n      point.column = 1;\n      point.offset += code === -3 ? 2 : 1;\n      accountForPotentialSkip();\n    } else if (code !== -1) {\n      point.column++;\n      point.offset++;\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++;\n    } else {\n      point._bufferIndex++;\n\n      // At end of string chunk.\n      if (point._bufferIndex ===\n      // Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      /** @type {string} */\n      chunks[point._index].length) {\n        point._bufferIndex = -1;\n        point._index++;\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code;\n\n    // Mark as consumed.\n    consumed = true;\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {};\n    token.type = type;\n    token.start = now();\n    context.events.push(['enter', token, context]);\n    stack.push(token);\n    return token;\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop();\n    token.end = now();\n    context.events.push(['exit', token, context]);\n    return token;\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from);\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore();\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   *   Callback.\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   *   Fields.\n   */\n  function constructFactory(onreturn, fields) {\n    return hook;\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | ConstructRecord | Construct} constructs\n     *   Constructs.\n     * @param {State} returnState\n     *   State.\n     * @param {State | undefined} [bogusState]\n     *   State.\n     * @returns {State}\n     *   State.\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {ReadonlyArray<Construct>} */\n      let listOfConstructs;\n      /** @type {number} */\n      let constructIndex;\n      /** @type {Construct} */\n      let currentConstruct;\n      /** @type {Info} */\n      let info;\n      return Array.isArray(constructs) ? /* c8 ignore next 1 */\n      handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n      // Looks like a construct.\n      handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleMapOfConstructs(map) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          const left = code !== null && map[code];\n          const all = code !== null && map.null;\n          const list = [\n          // To do: add more extension tests.\n          /* c8 ignore next 2 */\n          ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n          return handleListOfConstructs(list)(code);\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ReadonlyArray<Construct>} list\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list;\n        constructIndex = 0;\n        if (list.length === 0) {\n          return bogusState;\n        }\n        return handleConstruct(list[constructIndex]);\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       *   Construct.\n       * @returns {State}\n       *   State.\n       */\n      function handleConstruct(construct) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store();\n          currentConstruct = construct;\n          if (!construct.partial) {\n            context.currentConstruct = construct;\n          }\n\n          // Always populated by defaults.\n\n          if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n            return nok(code);\n          }\n          return construct.tokenize.call(\n          // If we do have fields, create an object w/ `context` as its\n          // prototype.\n          // This allows a “live binding”, which is needed for `interrupt`.\n          fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true;\n        onreturn(currentConstruct, info);\n        return returnState;\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true;\n        info.restore();\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex]);\n        }\n        return bogusState;\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   *   Construct.\n   * @param {number} from\n   *   From.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct);\n    }\n    if (construct.resolve) {\n      splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context);\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   *   Info.\n   */\n  function store() {\n    const startPoint = now();\n    const startPrevious = context.previous;\n    const startCurrentConstruct = context.currentConstruct;\n    const startEventsIndex = context.events.length;\n    const startStack = Array.from(stack);\n    return {\n      from: startEventsIndex,\n      restore\n    };\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     *   Nothing.\n     */\n    function restore() {\n      point = startPoint;\n      context.previous = startPrevious;\n      context.currentConstruct = startCurrentConstruct;\n      context.events.length = startEventsIndex;\n      stack = startStack;\n      accountForPotentialSkip();\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line];\n      point.offset += columnStart[point.line] - 1;\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {Pick<Token, 'end' | 'start'>} token\n *   Token.\n * @returns {Array<Chunk>}\n *   Chunks.\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index;\n  const startBufferIndex = token.start._bufferIndex;\n  const endIndex = token.end._index;\n  const endBufferIndex = token.end._bufferIndex;\n  /** @type {Array<Chunk>} */\n  let view;\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n  } else {\n    view = chunks.slice(startIndex, endIndex);\n    if (startBufferIndex > -1) {\n      const head = view[0];\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex);\n        /* c8 ignore next 4 -- used to be used, no longer */\n      } else {\n        view.shift();\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex));\n    }\n  }\n  return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n *   Whether to expand tabs (default: `false`).\n * @returns {string}\n *   Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1;\n  /** @type {Array<string>} */\n  const result = [];\n  /** @type {boolean | undefined} */\n  let atTab;\n  while (++index < chunks.length) {\n    const chunk = chunks[index];\n    /** @type {string} */\n    let value;\n    if (typeof chunk === 'string') {\n      value = chunk;\n    } else switch (chunk) {\n      case -5:\n        {\n          value = \"\\r\";\n          break;\n        }\n      case -4:\n        {\n          value = \"\\n\";\n          break;\n        }\n      case -3:\n        {\n          value = \"\\r\" + \"\\n\";\n          break;\n        }\n      case -2:\n        {\n          value = expandTabs ? \" \" : \"\\t\";\n          break;\n        }\n      case -1:\n        {\n          if (!expandTabs && atTab) continue;\n          value = \" \";\n          break;\n        }\n      default:\n        {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk);\n        }\n    }\n    atTab = chunk === -2;\n    result.push(value);\n  }\n  return result.join('');\n}","/**\n * @import {\n *   Create,\n *   FullNormalizedExtension,\n *   InitialConstruct,\n *   ParseContext,\n *   ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ParseContext}\n *   Parser.\n */\nexport function parse(options) {\n  const settings = options || {};\n  const constructs = /** @type {FullNormalizedExtension} */\n  combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n  /** @type {ParseContext} */\n  const parser = {\n    constructs,\n    content: create(content),\n    defined: [],\n    document: create(document),\n    flow: create(flow),\n    lazy: {},\n    string: create(string),\n    text: create(text)\n  };\n  return parser;\n\n  /**\n   * @param {InitialConstruct} initial\n   *   Construct to start with.\n   * @returns {Create}\n   *   Create a tokenizer.\n   */\n  function create(initial) {\n    return creator;\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from);\n    }\n  }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array<Event>} events\n *   Events.\n * @returns {Array<Event>}\n *   Events.\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events;\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n *   Preprocess a value.\n * @param {Value} value\n *   Value.\n * @param {Encoding | null | undefined} [encoding]\n *   Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n *   Whether this is the last chunk (default: `false`).\n * @returns {Array<Chunk>}\n *   Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n *   Preprocess a value.\n */\nexport function preprocess() {\n  let column = 1;\n  let buffer = '';\n  /** @type {boolean | undefined} */\n  let start = true;\n  /** @type {boolean | undefined} */\n  let atCarriageReturn;\n  return preprocessor;\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = [];\n    /** @type {RegExpMatchArray | null} */\n    let match;\n    /** @type {number} */\n    let next;\n    /** @type {number} */\n    let startPosition;\n    /** @type {number} */\n    let endPosition;\n    /** @type {Code} */\n    let code;\n    value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n    startPosition = 0;\n    buffer = '';\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++;\n      }\n      start = undefined;\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition;\n      match = search.exec(value);\n      endPosition = match && match.index !== undefined ? match.index : value.length;\n      code = value.charCodeAt(endPosition);\n      if (!match) {\n        buffer = value.slice(startPosition);\n        break;\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3);\n        atCarriageReturn = undefined;\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5);\n          atCarriageReturn = undefined;\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition));\n          column += endPosition - startPosition;\n        }\n        switch (code) {\n          case 0:\n            {\n              chunks.push(65533);\n              column++;\n              break;\n            }\n          case 9:\n            {\n              next = Math.ceil(column / 4) * 4;\n              chunks.push(-2);\n              while (column++ < next) chunks.push(-1);\n              break;\n            }\n          case 10:\n            {\n              chunks.push(-4);\n              column = 1;\n              break;\n            }\n          default:\n            {\n              atCarriageReturn = true;\n              column = 1;\n            }\n        }\n      }\n      startPosition = endPosition + 1;\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5);\n      if (buffer) chunks.push(buffer);\n      chunks.push(null);\n    }\n    return chunks;\n  }\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n *   Match.\n * @param {string} $1\n *   Character escape.\n * @param {string} $2\n *   Character reference.\n * @returns {string}\n *   Decoded value\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1;\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0);\n  if (head === 35) {\n    const head = $2.charCodeAt(1);\n    const hex = head === 120 || head === 88;\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n  }\n  return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @import {\n *   Break,\n *   Blockquote,\n *   Code,\n *   Definition,\n *   Emphasis,\n *   Heading,\n *   Html,\n *   Image,\n *   InlineCode,\n *   Link,\n *   ListItem,\n *   List,\n *   Nodes,\n *   Paragraph,\n *   PhrasingContent,\n *   ReferenceType,\n *   Root,\n *   Strong,\n *   Text,\n *   ThematicBreak\n * } from 'mdast'\n * @import {\n *   Encoding,\n *   Event,\n *   Token,\n *   Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n *   CompileContext,\n *   CompileData,\n *   Config,\n *   Extension,\n *   Handle,\n *   OnEnterError,\n *   Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding;\n    encoding = undefined;\n  }\n  return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      characterReference: onexitcharacterreference,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  };\n  configure(config, (options || {}).mdastExtensions || []);\n\n  /** @type {CompileData} */\n  const data = {};\n  return compile;\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    };\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    };\n    /** @type {Array<number>} */\n    const listStack = [];\n    let index = -1;\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n        if (events[index][0] === 'enter') {\n          listStack.push(index);\n        } else {\n          const tail = listStack.pop();\n          index = prepareList(events, tail, index);\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      const handler = config[events[index][0]];\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(Object.assign({\n          sliceSerialize: events[index][2].sliceSerialize\n        }, context), events[index][1]);\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1];\n      const handler = tail[1] || defaultOnError;\n      handler.call(context, undefined, tail[0]);\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(events.length > 0 ? events[0][1].start : {\n        line: 1,\n        column: 1,\n        offset: 0\n      }),\n      end: point(events.length > 0 ? events[events.length - 2][1].end : {\n        line: 1,\n        column: 1,\n        offset: 0\n      })\n    };\n\n    // Call transforms.\n    index = -1;\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree;\n    }\n    return tree;\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1;\n    let containerBalance = -1;\n    let listSpread = false;\n    /** @type {Token | undefined} */\n    let listItem;\n    /** @type {number | undefined} */\n    let lineIndex;\n    /** @type {number | undefined} */\n    let firstBlankLineIndex;\n    /** @type {boolean | undefined} */\n    let atMarker;\n    while (++index <= length) {\n      const event = events[index];\n      switch (event[1].type) {\n        case \"listUnordered\":\n        case \"listOrdered\":\n        case \"blockQuote\":\n          {\n            if (event[0] === 'enter') {\n              containerBalance++;\n            } else {\n              containerBalance--;\n            }\n            atMarker = undefined;\n            break;\n          }\n        case \"lineEndingBlank\":\n          {\n            if (event[0] === 'enter') {\n              if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n                firstBlankLineIndex = index;\n              }\n              atMarker = undefined;\n            }\n            break;\n          }\n        case \"linePrefix\":\n        case \"listItemValue\":\n        case \"listItemMarker\":\n        case \"listItemPrefix\":\n        case \"listItemPrefixWhitespace\":\n          {\n            // Empty.\n\n            break;\n          }\n        default:\n          {\n            atMarker = undefined;\n          }\n      }\n      if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n        if (listItem) {\n          let tailIndex = index;\n          lineIndex = undefined;\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex];\n            if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n              if (tailEvent[0] === 'exit') continue;\n              if (lineIndex) {\n                events[lineIndex][1].type = \"lineEndingBlank\";\n                listSpread = true;\n              }\n              tailEvent[1].type = \"lineEnding\";\n              lineIndex = tailIndex;\n            } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n              // Empty\n            } else {\n              break;\n            }\n          }\n          if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n            listItem._spread = true;\n          }\n\n          // Fix position.\n          listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n          index++;\n          length++;\n        }\n\n        // Create a new list item.\n        if (event[1].type === \"listItemPrefix\") {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we’ll add `end` in a second.\n            end: undefined\n          };\n          listItem = item;\n          events.splice(index, 0, ['enter', item, event[2]]);\n          index++;\n          length++;\n          firstBlankLineIndex = undefined;\n          atMarker = true;\n        }\n      }\n    }\n    events[start][1]._spread = listSpread;\n    return length;\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token);\n      if (and) and.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['buffer']}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    });\n  }\n\n  /**\n   * @type {CompileContext['enter']}\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children;\n    siblings.push(node);\n    this.stack.push(node);\n    this.tokenStack.push([token, errorHandler || undefined]);\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    };\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token);\n      exit.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['exit']}\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop();\n    const open = this.tokenStack.pop();\n    if (!open) {\n      throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n        start: token.start,\n        end: token.end\n      }) + '): it’s not open');\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0]);\n      } else {\n        const handler = open[1] || defaultOnError;\n        handler.call(this, token, open[0]);\n      }\n    }\n    node.position.end = point(token.end);\n  }\n\n  /**\n   * @type {CompileContext['resume']}\n   */\n  function resume() {\n    return toString(this.stack.pop());\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2];\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n      this.data.expectingFirstListItemValue = undefined;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.lang = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.meta = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return;\n    this.buffer();\n    this.data.flowCodeInside = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n    this.data.flowCodeInside = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.label = label;\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length;\n      node.depth = depth;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = node.children;\n    let tail = siblings[siblings.length - 1];\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text();\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we’ll add `end` later.\n        end: undefined\n      };\n      siblings.push(tail);\n    }\n    this.stack.push(tail);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop();\n    tail.value += this.sliceSerialize(token);\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1];\n    // If we’re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1];\n      tail.position.end = point(token.end);\n      this.data.atHardBreak = undefined;\n      return;\n    }\n    if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n      onenterdata.call(this, token);\n      onexitdata.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token);\n    const ancestor = this.stack[this.stack.length - 2];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string);\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1];\n    const value = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // Assume a reference.\n    this.data.inReference = true;\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children;\n      node.children = children;\n    } else {\n      node.alt = value;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label;\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n    this.data.referenceType = 'full';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token);\n    const type = this.data.characterReferenceType;\n    /** @type {string} */\n    let value;\n    if (type) {\n      value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n      this.data.characterReferenceType = undefined;\n    } else {\n      const result = decodeNamedCharacterReference(data);\n      value = result;\n    }\n    const tail = this.stack[this.stack.length - 1];\n    tail.value += value;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreference(token) {\n    const tail = this.stack.pop();\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = this.sliceSerialize(token);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = 'mailto:' + this.sliceSerialize(token);\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    };\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    };\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    };\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    };\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    };\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    };\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    };\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    };\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    };\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    };\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    };\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    };\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    };\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    };\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1;\n  while (++index < extensions.length) {\n    const value = extensions[index];\n    if (Array.isArray(value)) {\n      configure(combined, value);\n    } else {\n      extension(combined, value);\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key;\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'transforms':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'enter':\n        case 'exit':\n          {\n            const right = extension[key];\n            if (right) {\n              Object.assign(combined[key], right);\n            }\n            break;\n          }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n      start: left.start,\n      end: left.end\n    }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is open');\n  } else {\n    throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is still open');\n  }\n}","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node’s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn’t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n          typeof value.name === 'string'\n          ? value.name\n          : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n *   Info on the match.\n * @property {number} index\n *   The index of the search at which the result was found.\n * @property {string} input\n *   A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n *   All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n *   Pattern to find.\n *\n *   Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n *   Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n *   Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n *   Thing to replace with.\n *\n * @callback ReplaceFunction\n *   Callback called when a search matches.\n * @param {...any} parameters\n *   The parameters are the result of corresponding search expression:\n *\n *   * `value` (`string`) — whole match\n *   * `...capture` (`Array<string>`) — matches from regex capture groups\n *   * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n *   Thing to replace with.\n *\n *   * when `null`, `undefined`, `''`, remove the match\n *   * …or when `false`, do not replace at all\n *   * …or when `string`, replace with a text node of that value\n *   * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n *   Normalized find and replace.\n *\n * @typedef {Array<Pair>} Pairs\n *   All find and replaced.\n *\n * @typedef Options\n *   Configuration.\n * @property {Test | null | undefined} [ignore]\n *   Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n *   Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n *   Patterns to find.\n * @param {Options | null | undefined} [options]\n *   Configuration (when `find` is not `Find`).\n * @returns {undefined}\n *   Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n  const settings = options || {}\n  const ignored = convert(settings.ignore || [])\n  const pairs = toPairs(list)\n  let pairIndex = -1\n\n  while (++pairIndex < pairs.length) {\n    visitParents(tree, 'text', visitor)\n  }\n\n  /** @type {BuildVisitor<Root, 'text'>} */\n  function visitor(node, parents) {\n    let index = -1\n    /** @type {Parents | undefined} */\n    let grandparent\n\n    while (++index < parents.length) {\n      const parent = parents[index]\n      /** @type {Array<Nodes> | undefined} */\n      const siblings = grandparent ? grandparent.children : undefined\n\n      if (\n        ignored(\n          parent,\n          siblings ? siblings.indexOf(parent) : undefined,\n          grandparent\n        )\n      ) {\n        return\n      }\n\n      grandparent = parent\n    }\n\n    if (grandparent) {\n      return handler(node, parents)\n    }\n  }\n\n  /**\n   * Handle a text node which is not in an ignored parent.\n   *\n   * @param {Text} node\n   *   Text node.\n   * @param {Array<Parents>} parents\n   *   Parents.\n   * @returns {VisitorResult}\n   *   Result.\n   */\n  function handler(node, parents) {\n    const parent = parents[parents.length - 1]\n    const find = pairs[pairIndex][0]\n    const replace = pairs[pairIndex][1]\n    let start = 0\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children\n    const index = siblings.indexOf(node)\n    let change = false\n    /** @type {Array<PhrasingContent>} */\n    let nodes = []\n\n    find.lastIndex = 0\n\n    let match = find.exec(node.value)\n\n    while (match) {\n      const position = match.index\n      /** @type {RegExpMatchObject} */\n      const matchObject = {\n        index: match.index,\n        input: match.input,\n        stack: [...parents, node]\n      }\n      let value = replace(...match, matchObject)\n\n      if (typeof value === 'string') {\n        value = value.length > 0 ? {type: 'text', value} : undefined\n      }\n\n      // It wasn’t a match after all.\n      if (value === false) {\n        // False acts as if there was no match.\n        // So we need to reset `lastIndex`, which currently being at the end of\n        // the current match, to the beginning.\n        find.lastIndex = position + 1\n      } else {\n        if (start !== position) {\n          nodes.push({\n            type: 'text',\n            value: node.value.slice(start, position)\n          })\n        }\n\n        if (Array.isArray(value)) {\n          nodes.push(...value)\n        } else if (value) {\n          nodes.push(value)\n        }\n\n        start = position + match[0].length\n        change = true\n      }\n\n      if (!find.global) {\n        break\n      }\n\n      match = find.exec(node.value)\n    }\n\n    if (change) {\n      if (start < node.value.length) {\n        nodes.push({type: 'text', value: node.value.slice(start)})\n      }\n\n      parent.children.splice(index, 1, ...nodes)\n    } else {\n      nodes = [node]\n    }\n\n    return index + nodes.length\n  }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n *   Schema.\n * @returns {Pairs}\n *   Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n  /** @type {Pairs} */\n  const result = []\n\n  if (!Array.isArray(tupleOrList)) {\n    throw new TypeError('Expected find and replace tuple or list of tuples')\n  }\n\n  /** @type {FindAndReplaceList} */\n  // @ts-expect-error: correct.\n  const list =\n    !tupleOrList[0] || Array.isArray(tupleOrList[0])\n      ? tupleOrList\n      : [tupleOrList]\n\n  let index = -1\n\n  while (++index < list.length) {\n    const tuple = list[index]\n    result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n  }\n\n  return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n *   Find.\n * @returns {RegExp}\n *   Expression.\n */\nfunction toExpression(find) {\n  return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n *   Replace.\n * @returns {ReplaceFunction}\n *   Function.\n */\nfunction toFunction(replace) {\n  return typeof replace === 'function'\n    ? replace\n    : function () {\n        return replace\n      }\n}\n","import { findAndReplace } from \"mdast-util-find-and-replace\"\n\n// This regex matches:\n//   \"http\"\n//   an optional \"s\"\n//   two / characters\n//   The subdomains and hostname: Any word or numeric character or \"-\" one or more times followed by a period\n//   The TLD: Any word or numeric character or \"-\" one or more times (the TLD is optional, and URLs like localhost are also valid)\n//   The port: A colon followed by one or more digits (optional)\n//   The path, query string and fragment: A forward slash followed by any word or numeric character (unicode classes so umlauts like ö match\n//       as well as any of the following: .+?:%&=~#) zero or more times. Note that we exclude space even though that is valid in a URL but it tends\n//       to make the match too greedy.\n//       We match the same subgroup [\\p{L}\\p{N}_\\-.\\+/?:%&=~#] twice, once with a * and then excactly once but without interpuncation characters .?:\n//       This is to make sure that we don't match trailing punctuation as part of the URL (\"This is an http://example.com.\" - note that the leading\n//       period should not be part of the URL)\n//       Finally, the very last part is a lone forward slash which would not be matched by the previous subgroup.\nexport const urlRegex =\n    /https?:\\/\\/([\\w-]+\\.)*[\\w-]+(:\\d+)?((\\/[\\p{L}\\p{N}_\\-.+/?:%&=~#]*[\\p{L}\\p{N}_\\-+/%&=~#])|\\/)?/gu\n\nexport function remarkPlainLinks() {\n    const turnIntoLink = (value: string) => {\n        return {\n            type: \"link\" as const,\n            url: value,\n            children: [\n                {\n                    type: \"text\" as const,\n                    value: value,\n                },\n            ],\n        }\n    }\n    return (tree: any) => {\n        findAndReplace(tree, [[urlRegex, turnIntoLink]])\n    }\n}\n","/* eslint-disable react-refresh/only-export-components */\nimport * as _ from \"lodash-es\"\nimport { CSSProperties } from \"react\"\nimport * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    excludeUndefined,\n    imemo,\n    Bounds,\n    FontFamily,\n} from \"@ourworldindata/utils\"\nimport { DetailsMarker } from \"@ourworldindata/types\"\nimport { TextWrap } from \"../TextWrap/TextWrap.js\"\nimport { fromMarkdown } from \"mdast-util-from-markdown\"\nimport type { Content, Root } from \"mdast\"\nimport { match } from \"ts-pattern\"\nimport { urlRegex } from \"../markdown/remarkPlainLinks.js\"\nimport * as R from \"remeda\"\n\nconst SUPERSCRIPT_NUMERALS = {\n    \"0\": \"\\u2070\",\n    \"1\": \"\\u00b9\",\n    \"2\": \"\\u00b2\",\n    \"3\": \"\\u00b3\",\n    \"4\": \"\\u2074\",\n    \"5\": \"\\u2075\",\n    \"6\": \"\\u2076\",\n    \"7\": \"\\u2077\",\n    \"8\": \"\\u2078\",\n    \"9\": \"\\u2079\",\n}\n\nexport interface IRFontParams {\n    fontSize?: number\n    fontWeight?: number\n    fontFamily?: FontFamily\n    isItalic?: boolean\n}\n\nexport interface IRBreakpoint {\n    tokenIndex: number\n    tokenStartOffset: number\n    breakOffset: number\n}\n\nexport interface IRToken {\n    width: number\n    getBreakpointBefore(targetWidth: number): IRBreakpoint | undefined\n    toHTML(key?: React.Key): React.ReactElement | undefined\n    toSVG(key?: React.Key): React.ReactElement | undefined\n    toPlaintext(): string | undefined\n}\n\nexport class IRText implements IRToken {\n    constructor(\n        public text: string,\n        public fontParams?: IRFontParams\n    ) {}\n    @imemo get width(): number {\n        return Bounds.forText(this.text, this.fontParams).width\n    }\n    @imemo get height(): number {\n        return this.fontParams?.fontSize || 13\n    }\n    getBreakpointBefore(): undefined {\n        return undefined\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return <span key={key}>{this.text}</span>\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return <React.Fragment key={key}>{this.text}</React.Fragment>\n    }\n    toPlaintext(): string {\n        return this.text\n    }\n}\n\nexport class IRWhitespace implements IRToken {\n    constructor(public fontParams?: IRFontParams) {}\n    @imemo get width(): number {\n        return Bounds.forText(\" \", this.fontParams).width\n    }\n    getBreakpointBefore(): IRBreakpoint {\n        // Have to give it some `breakOffset` because we designate locations\n        // to split based on it, and `0` leads to being exactly in between tokens.\n        return { tokenIndex: 0, tokenStartOffset: 0, breakOffset: 0.0001 }\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return <span key={key}> </span>\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return <React.Fragment key={key}> </React.Fragment>\n    }\n    toPlaintext(): string {\n        return \" \"\n    }\n}\n\nexport class IRLineBreak implements IRToken {\n    get width(): number {\n        return 0\n    }\n    getBreakpointBefore(): undefined {\n        return undefined\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return <br key={key} />\n    }\n    toSVG(): undefined {\n        // We have to deal with this special case in\n        // whatever procedure does text reflow.\n        return undefined\n    }\n    toPlaintext(): string {\n        return \"\\n\"\n    }\n}\n\nexport abstract class IRElement implements IRToken {\n    constructor(\n        public children: IRToken[],\n        public fontParams?: IRFontParams\n    ) {}\n\n    @imemo get width(): number {\n        return getLineWidth(this.children)\n    }\n\n    getBreakpointBefore(targetWidth: number): IRBreakpoint | undefined {\n        return getBreakpointBefore(this.children, targetWidth)\n    }\n\n    splitBefore(maxWidth: number): {\n        before: IRToken | undefined\n        after: IRToken | undefined\n    } {\n        const { before, after } = splitLineAtBreakpoint(this.children, maxWidth)\n        return {\n            // do not create tokens without children\n            before: before.length ? this.getClone(before) : undefined,\n            after: after.length ? this.getClone(after) : undefined,\n        }\n    }\n\n    splitOnLineBreaks(): IRToken[][] {\n        const lines = splitAllOnNewline(this.children)\n        if (lines.length > 1) {\n            return lines.map((tokens) =>\n                // Do not create a clone without children.\n                // There aren't any children in a line when the first or last\n                // token is a newline.\n                tokens.length ? [this.getClone(tokens)] : []\n            )\n        }\n        // Do not create copies of element\n        // if there are no newlines inside.\n        return [[this]]\n    }\n\n    abstract getClone(children: IRToken[]): IRElement\n    abstract toHTML(key?: React.Key): React.ReactElement\n    abstract toSVG(key?: React.Key): React.ReactElement\n\n    toPlaintext(): string {\n        return lineToPlaintext(this.children)\n    }\n}\n\nexport class IRBold extends IRElement {\n    getClone(children: IRToken[]): IRBold {\n        return new IRBold(children, this.fontParams)\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return (\n            <strong key={key}>\n                {this.children.map((child, i) => child.toHTML(i))}\n            </strong>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return (\n            <tspan key={key} style={{ fontWeight: 700 }}>\n                {this.children.map((child, i) => child.toSVG(i))}\n            </tspan>\n        )\n    }\n}\n\nexport class IRSpan extends IRElement {\n    getClone(children: IRToken[]): IRSpan {\n        return new IRSpan(children, this.fontParams)\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return (\n            <span key={key}>\n                {this.children.map((child, i) => child.toHTML(i))}\n            </span>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return (\n            <tspan key={key}>\n                {this.children.map((child, i) => child.toSVG(i))}\n            </tspan>\n        )\n    }\n}\n\nexport class IRSuperscript implements IRToken {\n    constructor(\n        public text: string,\n        public fontParams?: IRFontParams\n    ) {}\n    @imemo get width(): number {\n        return Bounds.forText(this.text, { fontSize: this.height / 2 }).width\n    }\n    @imemo get height(): number {\n        return this.fontParams?.fontSize || 16\n    }\n    getBreakpointBefore(): undefined {\n        return undefined\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return <sup key={key}>{this.text}</sup>\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        // replace numerals with literals, for everything else let the font-feature handle it\n        const style = { fontFeatureSettings: '\"sups\"' }\n        const text = this.text.replace(/./g, (c) =>\n            _.get(SUPERSCRIPT_NUMERALS, c, c)\n        )\n        return (\n            <React.Fragment key={key}>\n                <tspan style={style}>{text}</tspan>\n            </React.Fragment>\n        )\n    }\n    toPlaintext(): string {\n        return this.text\n    }\n}\n\nexport class IRItalic extends IRElement {\n    getClone(children: IRToken[]): IRItalic {\n        return new IRItalic(children, this.fontParams)\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return (\n            <em key={key}>\n                {this.children.map((child, i) => child.toHTML(i))}\n            </em>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return (\n            <tspan key={key} style={{ fontStyle: \"italic\" }}>\n                {this.children.map((child, i) => child.toSVG(i))}\n            </tspan>\n        )\n    }\n}\n\nexport class IRLink extends IRElement {\n    constructor(\n        public href: string,\n        children: IRToken[],\n        fontParams?: IRFontParams\n    ) {\n        super(children, fontParams)\n    }\n    getClone(children: IRToken[]): IRLink {\n        return new IRLink(this.href, children, this.fontParams)\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return (\n            <a key={key} href={this.href}>\n                {this.children.map((child, i) => child.toHTML(i))}\n            </a>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return (\n            <a\n                key={key}\n                href={this.href}\n                style={{ textDecoration: \"underline\" }}\n            >\n                {this.children.map((child, i) => child.toSVG(i))}\n            </a>\n        )\n    }\n}\n\nexport class IRDetailOnDemand extends IRElement {\n    constructor(\n        public term: string,\n        children: IRToken[],\n        fontParams?: IRFontParams\n    ) {\n        super(children, fontParams)\n    }\n    getClone(children: IRToken[]): IRDetailOnDemand {\n        return new IRDetailOnDemand(this.term, children, this.fontParams)\n    }\n    toHTML(key?: React.Key): React.ReactElement {\n        return (\n            <span\n                key={key}\n                className=\"dod-span\"\n                data-id={this.term}\n                tabIndex={0}\n            >\n                {this.children.map((child, i) => child.toHTML(i))}\n            </span>\n        )\n    }\n    toSVG(key?: React.Key): React.ReactElement {\n        return (\n            <tspan key={key} className=\"dod-span\" data-id={this.term}>\n                {this.children.map((child, i) => child.toSVG(i))}\n            </tspan>\n        )\n    }\n}\n\nfunction splitAllOnNewline(tokens: IRToken[]): IRToken[][] {\n    if (!tokens.length) return []\n    let currentLine: IRToken[] = []\n    const lines: IRToken[][] = [currentLine]\n    const unproccessed: IRToken[] = [...tokens]\n    while (unproccessed.length > 0) {\n        const token = unproccessed.shift()!\n        if (token instanceof IRElement) {\n            const [firstLine, ...otherLines] = token.splitOnLineBreaks()\n            if (firstLine) currentLine.push(...firstLine)\n            if (otherLines.length) {\n                lines.push(...otherLines)\n                currentLine = R.last(lines)!\n            }\n        } else if (token instanceof IRLineBreak) {\n            currentLine = []\n            lines.push(currentLine)\n        } else {\n            currentLine.push(token)\n        }\n    }\n    return lines\n}\n\nexport function splitLineAtBreakpoint(\n    tokens: IRToken[],\n    breakWidth: number\n): { before: IRToken[]; after: IRToken[] } {\n    let i = 0\n    let offset = 0\n    // finding the token where the split should be\n    // NOTE: the token may not be splittable, which is why we need an exact\n    // `breakWidth` provided, not the line width.\n    while (i < tokens.length - 1 && offset + tokens[i].width < breakWidth) {\n        offset += tokens[i].width\n        i++\n    }\n    const token = tokens[i]\n    if (token instanceof IRElement) {\n        const { before, after } = token.splitBefore(breakWidth - offset)\n        return {\n            before: excludeUndefined([...tokens.slice(0, i), before]),\n            after: excludeUndefined([after, ...tokens.slice(i + 1)]),\n        }\n    } else {\n        return { before: tokens.slice(0, i), after: trimLeft(tokens.slice(i)) }\n    }\n}\n\nfunction trimLeft(tokens: IRToken[]): IRToken[] {\n    let i = 0\n    while (i < tokens.length && tokens[i] instanceof IRWhitespace) {\n        i++\n    }\n    return tokens.slice(i)\n}\n\n// Even though it says \"before\", it may return a breakpoint after, because\n// there is no earlier breakpoint in the line.\nexport function getBreakpointBefore(\n    tokens: IRToken[],\n    maxWidth: number\n): IRBreakpoint | undefined {\n    let tokenStartOffset = 0\n    let prevBreakpoint: IRBreakpoint | undefined = undefined\n    for (let index = 0; index < tokens.length; index++) {\n        const token = tokens[index]\n        const candidate = token.getBreakpointBefore(maxWidth - tokenStartOffset)\n        if (candidate !== undefined) {\n            if (\n                prevBreakpoint &&\n                candidate.breakOffset + tokenStartOffset > maxWidth\n            ) {\n                break\n            }\n            prevBreakpoint = {\n                tokenStartOffset,\n                tokenIndex: index,\n                breakOffset: candidate.breakOffset + tokenStartOffset,\n            }\n        }\n        tokenStartOffset += token.width\n    }\n    return prevBreakpoint\n}\n\nexport function getLineWidth(tokens: IRToken[]): number {\n    return _.sum(tokens.map((token) => token.width))\n}\n\n// useful for debugging\nexport function lineToPlaintext(tokens: IRToken[]): string {\n    return tokens.map((t) => t.toPlaintext()).join(\"\")\n}\n\nexport const isTextToken = (token: IRToken): token is IRText | IRWhitespace =>\n    token instanceof IRText || token instanceof IRWhitespace\n\n/**\n * Merges adjacent text tokens, because the way we render text in React is otherwise\n * not very compatible with Google Translate, breaking our site in weird ways when\n * translated.\n * This is to be run _just before_ rendering to HTML, because it loses some\n * information and is not easily reversible.\n * See also https://github.com/owid/owid-grapher/issues/1785\n */\nexport const recursiveMergeTextTokens = (\n    tokens: IRToken[],\n    fontParams?: IRFontParams\n): IRToken[] => {\n    if (tokens.length === 0) return []\n\n    // merge adjacent text tokens into one\n    const mergedTextTokens: IRToken[] = tokens.reduce((acc, token) => {\n        if (isTextToken(token)) {\n            const l = R.last(acc)\n            if (l && isTextToken(l)) {\n                // replace last value in acc with merged text token\n                acc.pop()\n                return [\n                    ...acc,\n                    new IRText(\n                        l.toPlaintext() + token.toPlaintext(),\n                        fontParams\n                    ),\n                ]\n            }\n        }\n        return [...acc, token]\n    }, [] as IRToken[])\n\n    // recursively enter non-text tokens, and merge their children\n    return mergedTextTokens.map((token) => {\n        if (token instanceof IRElement) {\n            return token.getClone(\n                recursiveMergeTextTokens(token.children, fontParams)\n            )\n        }\n        return token\n    })\n}\n\nexport function splitIntoLines(\n    tokens: IRToken[],\n    maxWidth: number\n): IRToken[][] {\n    const processedLines: IRToken[][] = []\n    const unprocessedLines: IRToken[][] = splitAllOnNewline(tokens)\n    while (unprocessedLines.length) {\n        const currentLine = unprocessedLines.shift()!\n        if (getLineWidth(currentLine) <= maxWidth) {\n            processedLines.push(currentLine)\n        } else {\n            const breakpoint = getBreakpointBefore(currentLine, maxWidth)\n            if (!breakpoint) {\n                processedLines.push(currentLine)\n            } else {\n                const { before, after } = splitLineAtBreakpoint(\n                    currentLine,\n                    breakpoint.breakOffset\n                )\n                processedLines.push(before)\n                unprocessedLines.unshift(after)\n            }\n        }\n    }\n    return processedLines\n}\n\nexport const sumTextWrapHeights = (\n    elements: MarkdownTextWrap[] | TextWrap[],\n    spacer: number = 0\n): number =>\n    _.sum(elements.map((element) => element.height)) +\n    (elements.length - 1) * spacer\n\ntype MarkdownTextWrapOptions = {\n    maxWidth?: number\n    fontFamily?: FontFamily\n    fontSize: number\n    fontWeight?: number\n    lineHeight?: number\n    style?: CSSProperties\n    detailsOrderedByReference?: string[]\n}\n\ntype MarkdownTextWrapProps = { text: string } & MarkdownTextWrapOptions\n\ntype TextFragment = { text: string; bold?: boolean }\n\nexport class MarkdownTextWrap extends React.Component<MarkdownTextWrapProps> {\n    constructor(props: MarkdownTextWrapProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static fromFragments({\n        main,\n        secondary,\n        newLine = \"continue-line\",\n        textWrapProps,\n    }: {\n        main: TextFragment\n        secondary: TextFragment\n        newLine?: \"continue-line\" | \"always\" | \"avoid-wrap\"\n        textWrapProps: Omit<MarkdownTextWrapOptions, \"fontWeight\">\n    }) {\n        const mainMarkdownText = maybeBoldMarkdownText(main)\n        const secondaryMarkdownText = maybeBoldMarkdownText(secondary)\n\n        const combinedTextContinued = [\n            mainMarkdownText,\n            secondaryMarkdownText,\n        ].join(\" \")\n        const combinedTextNewLine = [\n            mainMarkdownText,\n            secondaryMarkdownText,\n        ].join(\"\\n\")\n\n        if (newLine === \"always\") {\n            return new MarkdownTextWrap({\n                text: combinedTextNewLine,\n                ...textWrapProps,\n            })\n        }\n\n        if (newLine === \"continue-line\") {\n            return new MarkdownTextWrap({\n                text: combinedTextContinued,\n                ...textWrapProps,\n            })\n        }\n\n        // If newLine is set to 'avoid-wrap', we first try to fit the secondary\n        // text on the same line as the main text. If it doesn't fit, we place\n        // it on a new line.\n        const mainTextWrap = new MarkdownTextWrap({ ...main, ...textWrapProps })\n        const secondaryTextFitsOnSameLine = canAppendTextToLastLine({\n            existingTextWrap: mainTextWrap,\n            textToAppend: secondaryMarkdownText,\n        })\n\n        if (secondaryTextFitsOnSameLine) {\n            return new MarkdownTextWrap({\n                text: combinedTextContinued,\n                ...textWrapProps,\n            })\n        } else {\n            return new MarkdownTextWrap({\n                text: combinedTextNewLine,\n                ...textWrapProps,\n            })\n        }\n    }\n\n    @computed get maxWidth(): number {\n        return this.props.maxWidth ?? Infinity\n    }\n    @computed get lineHeight(): number {\n        return this.props.lineHeight ?? 1.1\n    }\n    @computed get fontSize(): number {\n        return this.props.fontSize\n    }\n    @computed get fontParams(): IRFontParams {\n        return {\n            fontFamily: this.props.fontFamily,\n            fontSize: this.props.fontSize,\n            fontWeight: this.props.fontWeight,\n        }\n    }\n    @computed get text(): string {\n        // NOTE: ❗Here we deviate from the normal markdown spec. We replace \\n with <SPACE><SPACE>\\n to make sure that single \\n are treated as\n        // actual line breaks but only if none of the other markdown line break rules apply.\n        // This is a bit different to how markdown usually works but we have a substantial\n        // amount of legacy charts that use newlines in this way and it seems that it is\n        // better to support this simple case than to do a data migration of many chart subtitles.\n        const baseText = this.props.text\n        // This replace is a bit funky - we want to make sure that single \\n are treated as\n        // actual line breaks but only if none of the other markdown line break rules apply.\n        // These are:\n        // - \\n\\n is always a new paragraph\n        // - Two spaces before \\n is a line break (this rule is not entirely checked as we only check for a single space)\n        // - A backslash before \\n is a line break\n        // The code below normalizes all cases to <SPACE><SPACE>\\n which will lead to them surviving the markdown parsing\n        let text = baseText.trim()\n        text = text.replaceAll(\"\\n\\n\", \"@@LINEBREAK@@\")\n        text = text.replaceAll(\"\\\\\\n\", \"@@LINEBREAK@@\")\n        text = text.replaceAll(\"  \\n\", \"@@LINEBREAK@@\")\n        text = text.replaceAll(\"\\n\", \"  \\n\")\n        text = text.replaceAll(\"@@LINEBREAK@@\", \"  \\n\")\n        return text\n    }\n    @computed get detailsOrderedByReference(): string[] {\n        return this.props.detailsOrderedByReference || []\n    }\n\n    @computed get plaintext(): string {\n        return this.htmlLines.map(lineToPlaintext).join(\"\\n\")\n    }\n\n    @computed get tokensFromMarkdown(): IRToken[] {\n        const tokens = convertMarkdownToIRTokens(this.text, this.fontParams)\n        return tokens\n    }\n\n    @computed get htmlLines(): IRToken[][] {\n        const tokens = this.tokensFromMarkdown\n        const lines = splitIntoLines(tokens, this.maxWidth)\n        return lines.map((line) =>\n            recursiveMergeTextTokens(line, this.fontParams)\n        )\n    }\n\n    @computed get svgLines(): IRToken[][] {\n        const tokens = this.tokensFromMarkdown\n        const lines = splitIntoLines(tokens, this.maxWidth)\n        return lines\n    }\n\n    @computed get svgLinesWithDodReferenceNumbers(): IRToken[][] {\n        const references = this.detailsOrderedByReference\n        const tokens = this.tokensFromMarkdown\n        const tokensWithReferenceNumbers = appendReferenceNumbers(\n            tokens,\n            references\n        )\n        return splitIntoLines(tokensWithReferenceNumbers, this.maxWidth)\n    }\n\n    @computed get width(): number {\n        const { htmlLines } = this\n        const lineLengths = htmlLines.map((tokens) =>\n            _.sumBy(tokens, (token) => token.width)\n        )\n        return _.max(lineLengths) ?? 0\n    }\n\n    @computed get singleLineHeight(): number {\n        return this.fontSize * this.lineHeight\n    }\n\n    @computed get lastLineWidth(): number {\n        return _.sumBy(R.last(this.htmlLines), (token) => token.width) ?? 0\n    }\n\n    @computed get height(): number {\n        const { htmlLines } = this\n        if (htmlLines.length === 0) return 0\n        return htmlLines.length * this.singleLineHeight\n    }\n\n    @computed get style(): any {\n        return {\n            ...this.fontParams,\n            ...this.props.style,\n            lineHeight: this.lineHeight,\n        }\n    }\n\n    renderHTML() {\n        const { htmlLines } = this\n        if (htmlLines.length === 0) return null\n        return (\n            <span style={this.style} className=\"markdown-text-wrap\">\n                {htmlLines.map((line, i) => {\n                    const plaintextLine = line\n                        .map((token) => token.toPlaintext())\n                        .join(\"\")\n                    return (\n                        <MarkdownTextWrapLine\n                            key={`${plaintextLine}-${i}`}\n                            line={line}\n                        />\n                    )\n                })}\n            </span>\n        )\n    }\n\n    renderSVG(\n        x: number,\n        y: number,\n        {\n            textProps,\n            detailsMarker = \"superscript\",\n            id,\n        }: {\n            textProps?: React.SVGProps<SVGTextElement>\n            detailsMarker?: DetailsMarker\n            id?: string\n        } = {}\n    ) {\n        const { fontSize, lineHeight } = this\n        const lines =\n            detailsMarker === \"superscript\"\n                ? this.svgLinesWithDodReferenceNumbers\n                : this.svgLines\n        if (lines.length === 0) return <></>\n\n        // Magic number set through experimentation.\n        // The HTML and SVG renderers need to position lines identically.\n        // This number was tweaked until the overlaid HTML and SVG outputs\n        // overlap.\n        const HEIGHT_CORRECTION_FACTOR = 0.74\n\n        const textHeight = fontSize * HEIGHT_CORRECTION_FACTOR\n        const containerHeight = lineHeight * fontSize\n        const yOffset =\n            y + (containerHeight - (containerHeight - textHeight) / 2)\n\n        const getLineY = (lineIndex: number) =>\n            yOffset + lineHeight * fontSize * lineIndex\n\n        return (\n            <g id={id} className=\"markdown-text-wrap\">\n                <text\n                    x={x.toFixed(1)}\n                    y={yOffset.toFixed(1)}\n                    style={this.style}\n                    {...textProps}\n                >\n                    {lines.map((line, lineIndex) => (\n                        <tspan\n                            key={lineIndex}\n                            x={x}\n                            y={getLineY(lineIndex).toFixed(1)}\n                        >\n                            {line.map((token, tokenIndex) =>\n                                token.toSVG(tokenIndex)\n                            )}\n                        </tspan>\n                    ))}\n                </text>\n                {/* SVG doesn't support dotted underlines, so we draw them manually */}\n                {detailsMarker === \"underline\" &&\n                    lines.map((line, lineIndex) => {\n                        const y = (getLineY(lineIndex) + 2).toFixed(1)\n                        let currWidth = 0\n                        return line.map((token) => {\n                            const underline =\n                                token instanceof IRDetailOnDemand ? (\n                                    <line\n                                        className=\"dod-underline\"\n                                        x1={x + currWidth}\n                                        y1={y}\n                                        x2={x + currWidth + token.width}\n                                        y2={y}\n                                        stroke=\"currentColor\"\n                                        strokeWidth={1}\n                                        strokeDasharray={1}\n                                        // important for rotated text\n                                        transform={textProps?.transform}\n                                    />\n                                ) : null\n                            currWidth += token.width\n                            return underline\n                        })\n                    })}\n            </g>\n        )\n    }\n\n    // An alias method that allows MarkdownTextWrap to be\n    // instantiated via JSX for HTML rendering\n    // <MarkdownTextWrap ... />\n    override render(): React.ReactElement | null {\n        return this.renderHTML()\n    }\n}\n\nfunction MarkdownTextWrapLine({\n    line,\n}: {\n    line: IRToken[]\n}): React.ReactElement {\n    return (\n        <span className=\"markdown-text-wrap__line\">\n            {line.length ? line.map((token, i) => token.toHTML(i)) : <br />}\n        </span>\n    )\n}\n\nexport function convertMarkdownToIRTokens(\n    markdown: string,\n    fontParams?: IRFontParams\n): IRToken[] {\n    const ast: Root = fromMarkdown(markdown)\n    const children = ast.children.flatMap((item) =>\n        convertMarkdownNodeToIRTokens(item, fontParams)\n    )\n    // ensure that there are no leading or trailing line breaks\n    return R.dropLastWhile(\n        R.dropWhile(children, (token) => token instanceof IRLineBreak),\n        (token) => token instanceof IRLineBreak\n    )\n}\n\n// When using mdast types version 4 this should be typed as:\n// node: RootContentMap[keyof RootContentMap]\nfunction convertMarkdownNodeToIRTokens(\n    node: Content,\n    fontParams: IRFontParams = {}\n): IRToken[] {\n    const converted = match(node)\n        .with(\n            {\n                type: \"blockquote\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"break\",\n            },\n            (_) => {\n                return [new IRLineBreak()]\n            }\n        )\n        .with(\n            {\n                type: \"code\",\n            },\n            (item) => {\n                return [new IRText(item.value, fontParams)]\n            }\n        )\n        .with(\n            {\n                type: \"emphasis\",\n            },\n            (item) => {\n                return [\n                    new IRItalic(\n                        item.children.flatMap((child) =>\n                            convertMarkdownNodeToIRTokens(child, {\n                                ...fontParams,\n                                isItalic: true,\n                            })\n                        )\n                    ),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"heading\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"html\",\n            },\n            (item) => {\n                return [new IRText(item.value, fontParams)]\n            }\n        )\n        .with(\n            {\n                type: \"image\",\n            },\n            (item) => {\n                return [new IRText(item.alt ?? \"\", fontParams)]\n            }\n        )\n        .with(\n            {\n                type: \"inlineCode\",\n            },\n            (item) => {\n                return [new IRText(item.value, fontParams)]\n            }\n        )\n        .with(\n            {\n                type: \"link\",\n            },\n            (item) => {\n                if (item.url.startsWith(\"#dod:\")) {\n                    const term = item.url.replace(\"#dod:\", \"\")\n                    return [\n                        new IRDetailOnDemand(\n                            term,\n                            item.children.flatMap((child) =>\n                                convertMarkdownNodeToIRTokens(child, fontParams)\n                            ),\n                            fontParams\n                        ),\n                    ]\n                } else\n                    return [\n                        new IRLink(\n                            item.url,\n                            item.children.flatMap((child) =>\n                                convertMarkdownNodeToIRTokens(child, fontParams)\n                            )\n                        ),\n                    ]\n            }\n        )\n        .with(\n            {\n                type: \"list\",\n            },\n            (item) => {\n                if (item.ordered)\n                    return item.children.flatMap((child, index) => [\n                        new IRLineBreak(),\n                        new IRText(`${index + 1}) `, fontParams),\n                        ...convertMarkdownNodeToIRTokens(child, fontParams),\n                    ])\n                else\n                    return item.children.flatMap((child) => [\n                        new IRLineBreak(),\n                        new IRText(`• `, fontParams),\n                        ...convertMarkdownNodeToIRTokens(child, fontParams),\n                    ])\n            }\n        )\n        .with(\n            {\n                type: \"listItem\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"paragraph\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"strong\",\n            },\n            (item) => {\n                return [\n                    new IRBold(\n                        item.children.flatMap((child) =>\n                            convertMarkdownNodeToIRTokens(child, {\n                                ...fontParams,\n                                fontWeight: 700,\n                            })\n                        )\n                    ),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"text\",\n            },\n            (item) => {\n                const splitted = item.value.split(/\\s+/)\n                const tokens = splitted.flatMap((text, i) => {\n                    const textNode = new IRText(text, fontParams)\n                    const node = text.match(urlRegex)\n                        ? new IRLink(text, [textNode], fontParams)\n                        : textNode\n                    if (i < splitted.length - 1) {\n                        return [node, new IRWhitespace(fontParams)]\n                    } else return [node]\n                })\n                return tokens\n            }\n        )\n        .with(\n            {\n                type: \"thematicBreak\",\n            },\n            (_) => {\n                return [new IRText(\"---\", fontParams)]\n            }\n        )\n        .with(\n            {\n                type: \"delete\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        // Now lets finish this with blocks for FootnoteDefinition, Definition, ImageReference, LinkReference, FootnoteReference, and Table\n        .with(\n            {\n                type: \"footnoteDefinition\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"definition\",\n            },\n            (item) => {\n                return [\n                    new IRText(`${item.identifier}: ${item.label}`, fontParams),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"imageReference\",\n            },\n            (item) => {\n                return [\n                    new IRText(`${item.identifier}: ${item.label}`, fontParams),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"linkReference\",\n            },\n            (item) => {\n                return [\n                    new IRText(`${item.identifier}: ${item.label}`, fontParams),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"footnoteReference\",\n            },\n            (item) => {\n                return [\n                    new IRText(`${item.identifier}: ${item.label}`, fontParams),\n                ]\n            }\n        )\n        .with(\n            {\n                type: \"table\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"tableCell\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        // and now TableRow and Yaml\n        .with(\n            {\n                type: \"tableRow\",\n            },\n            (item) => {\n                return item.children.flatMap((child) =>\n                    convertMarkdownNodeToIRTokens(child, fontParams)\n                )\n            }\n        )\n        .with(\n            {\n                type: \"yaml\",\n            },\n            (item) => {\n                return [new IRText(item.value, fontParams)]\n            }\n        )\n        .exhaustive()\n    return converted\n}\n\nfunction appendReferenceNumbers(\n    tokens: IRToken[],\n    references: string[]\n): IRToken[] {\n    function traverse(token: IRToken, callback: (token: IRToken) => any): any {\n        if (token instanceof IRElement) {\n            token.children.flatMap((child) => traverse(child, callback))\n        }\n        return callback(token)\n    }\n\n    const appendedTokens: IRToken[] = _.cloneDeep(tokens).flatMap((token) =>\n        traverse(token, (token: IRToken) => {\n            if (token instanceof IRDetailOnDemand) {\n                const referenceIndex =\n                    references.findIndex((term) => term === token.term) + 1\n                if (referenceIndex === 0) return token\n                token.children.push(\n                    new IRSuperscript(String(referenceIndex), token.fontParams)\n                )\n            }\n            return token\n        })\n    )\n\n    return appendedTokens\n}\n\nexport function canAppendTextToLastLine({\n    existingTextWrap,\n    textToAppend,\n    reservedWidth = 0,\n}: {\n    existingTextWrap: TextWrap | MarkdownTextWrap\n    textToAppend: string\n    /** Width to reserve for non-text elements (e.g. icons) */\n    reservedWidth?: number\n}): boolean {\n    const { maxWidth, lastLineWidth, fontSize, props } = existingTextWrap\n\n    const spaceWidth = Bounds.forText(\" \", { fontSize }).width\n    const availableWidthInLastLine =\n        maxWidth - lastLineWidth - spaceWidth - reservedWidth - 10 // 10px wiggle room\n\n    if (availableWidthInLastLine <= 0) return false\n\n    const secondaryTextWrap = new MarkdownTextWrap({\n        ...props,\n        text: textToAppend,\n        maxWidth: availableWidthInLastLine,\n    })\n\n    return secondaryTextWrap.svgLines.length === 1\n}\n\nfunction maybeBoldMarkdownText({\n    text,\n    bold,\n}: {\n    text: string\n    bold?: boolean\n}): string {\n    return bold ? `**${text}**` : text\n}\n\nexport function toPlaintext(markdown: string): string {\n    return new MarkdownTextWrap({\n        text: markdown,\n        fontSize: 10, // doesn't matter, but is a mandatory field\n    }).plaintext\n}\n","/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n","/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n *   Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @returns {boolean}\n *   Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n  return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? contReJsx : contRe\n  return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n *   Identifier to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? nameReJsx : nameRe\n  return re.test(name)\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n *   Thing to check (`Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n *   whose `value` field is checked.\n */\nexport function whitespace(thing) {\n  return typeof thing === 'object'\n    ? thing.type === 'text'\n      ? empty(thing.value)\n      : false\n    : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n  return value.replace(re, '') === ''\n}\n","/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n  /**\n   * @param {SchemaType['property']} property\n   *   Property.\n   * @param {SchemaType['normal']} normal\n   *   Normal.\n   * @param {Space | undefined} [space]\n   *   Space.\n   * @returns\n   *   Schema.\n   */\n  constructor(property, normal, space) {\n    this.normal = normal\n    this.property = property\n\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n *   Definitions.\n * @param {Space | undefined} [space]\n *   Space.\n * @returns {Schema}\n *   Schema.\n */\nexport function merge(definitions, space) {\n  /** @type {Record<string, Info>} */\n  const property = {}\n  /** @type {Record<string, string>} */\n  const normal = {}\n\n  for (const definition of definitions) {\n    Object.assign(property, definition.property)\n    Object.assign(normal, definition.normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n *   An attribute-like or property-like name.\n * @returns {string}\n *   Value that can be used to look up the properly cased property on a\n *   `Schema`.\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n  /**\n   * @param {string} property\n   *   Property.\n   * @param {string} attribute\n   *   Attribute.\n   * @returns\n   *   Info.\n   */\n  constructor(property, attribute) {\n    this.attribute = attribute\n    this.property = property\n  }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n  Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   *   Property.\n   * @param {string} attribute\n   *   Attribute.\n   * @param {number | null | undefined} [mask]\n   *   Mask.\n   * @param {Space | undefined} [space]\n   *   Space.\n   * @returns\n   *   Info.\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n *   Key type.\n * @param {DefinedInfo} values\n *   Info.\n * @param {Key} key\n *   Key.\n * @param {DefinedInfo[Key]} value\n *   Value.\n * @returns {undefined}\n *   Nothing.\n */\nfunction mark(values, key, value) {\n  if (value) {\n    values[key] = value\n  }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n *   Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n *   Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n *   Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n *   Property names to their types.\n * @property {Space | undefined} [space]\n *   Space.\n * @property {Transform} transform\n *   Transform a property name.\n */\n\n/**\n * @callback Transform\n *   Transform.\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} property\n *   Property.\n * @returns {string}\n *   Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n *   Definition.\n * @returns {Schema}\n *   Schema.\n */\nexport function create(definition) {\n  /** @type {Record<string, Info>} */\n  const properties = {}\n  /** @type {Record<string, string>} */\n  const normals = {}\n\n  for (const [property, value] of Object.entries(definition.properties)) {\n    const info = new DefinedInfo(\n      property,\n      definition.transform(definition.attributes || {}, property),\n      value,\n      definition.space\n    )\n\n    if (\n      definition.mustUseProperty &&\n      definition.mustUseProperty.includes(property)\n    ) {\n      info.mustUseProperty = true\n    }\n\n    properties[property] = info\n\n    normals[normalize(property)] = property\n    normals[normalize(info.attribute)] = property\n  }\n\n  return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  },\n  transform(_, property) {\n    return property === 'role'\n      ? property\n      : 'aria-' + property.slice(4).toLowerCase()\n  }\n})\n","/**\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} attribute\n *   Attribute.\n * @returns {string}\n *   Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n *   Attributes.\n * @param {string} property\n *   Property.\n * @returns {string}\n *   Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n  booleanish,\n  boolean,\n  commaSeparated,\n  number,\n  overloadedBoolean,\n  spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: null,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: overloadedBoolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootClonable: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n    writingSuggestions: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  },\n  space: 'html',\n  transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n  boolean,\n  commaOrSpaceSeparated,\n  commaSeparated,\n  number,\n  spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  },\n  space: 'svg',\n  transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  },\n  space: 'xlink',\n  transform(_, property) {\n    return 'xlink:' + property.slice(5).toLowerCase()\n  }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  properties: {xmlnsXLink: null, xmlns: null},\n  space: 'xmlns',\n  transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n  properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n  space: 'xml',\n  transform(_, property) {\n    return 'xml:' + property.slice(3).toLowerCase()\n  }\n})\n","/**\n * Special cases for React (`Record<string, string>`).\n *\n * `hast` is close to `React` but differs in a couple of cases.\n * To get a React property from a hast property,\n * check if it is in `hastToReact`.\n * If it is, use the corresponding value;\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n *   Schema;\n *   either the `html` or `svg` export.\n * @param {string} value\n *   An attribute-like or property-like name;\n *   it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n *   Info.\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let property = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n *   Value.\n * @returns {string}\n *   Kebab.\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n *   Value.\n * @returns {string}\n *   Camel.\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\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","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = StyleToObject;\nvar inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\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 */\nfunction StyleToObject(style, iterator) {\n    var styleObject = null;\n    if (!style || typeof style !== 'string') {\n        return styleObject;\n    }\n    var declarations = (0, inline_style_parser_1.default)(style);\n    var hasIterator = typeof iterator === 'function';\n    declarations.forEach(function (declaration) {\n        if (declaration.type !== 'declaration') {\n            return;\n        }\n        var property = declaration.property, value = declaration.value;\n        if (hasIterator) {\n            iterator(property, value, declaration);\n        }\n        else if (value) {\n            styleObject = styleObject || {};\n            styleObject[property] = value;\n        }\n    });\n    return styleObject;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.camelCase = void 0;\nvar CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9_-]+$/;\nvar HYPHEN_REGEX = /-([a-z])/g;\nvar NO_HYPHEN_REGEX = /^[^-]+$/;\nvar VENDOR_PREFIX_REGEX = /^-(webkit|moz|ms|o|khtml)-/;\nvar MS_VENDOR_PREFIX_REGEX = /^-(ms)-/;\n/**\n * Checks whether to skip camelCase.\n */\nvar skipCamelCase = function (property) {\n    return !property ||\n        NO_HYPHEN_REGEX.test(property) ||\n        CUSTOM_PROPERTY_REGEX.test(property);\n};\n/**\n * Replacer that capitalizes first character.\n */\nvar capitalize = function (match, character) {\n    return character.toUpperCase();\n};\n/**\n * Replacer that removes beginning hyphen of vendor prefix property.\n */\nvar trimHyphen = function (match, prefix) { return \"\".concat(prefix, \"-\"); };\n/**\n * CamelCases a CSS property.\n */\nvar camelCase = function (property, options) {\n    if (options === void 0) { options = {}; }\n    if (skipCamelCase(property)) {\n        return property;\n    }\n    property = property.toLowerCase();\n    if (options.reactCompat) {\n        // `-ms` vendor prefix should not be capitalized\n        property = property.replace(MS_VENDOR_PREFIX_REGEX, trimHyphen);\n    }\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    return property.replace(HYPHEN_REGEX, capitalize);\n};\nexports.camelCase = camelCase;\n//# sourceMappingURL=utilities.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar style_to_object_1 = __importDefault(require(\"style-to-object\"));\nvar utilities_1 = require(\"./utilities\");\n/**\n * Parses CSS inline style to JavaScript object (camelCased).\n */\nfunction StyleToJS(style, options) {\n    var output = {};\n    if (!style || typeof style !== 'string') {\n        return output;\n    }\n    (0, style_to_object_1.default)(style, function (property, value) {\n        // skip CSS comment\n        if (property && value) {\n            output[(0, utilities_1.camelCase)(property, options)] = value;\n        }\n    });\n    return output;\n}\nStyleToJS.default = StyleToJS;\nmodule.exports = StyleToJS;\n//# sourceMappingURL=index.js.map","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {Node | NodeLike | null | undefined} [node]\n   * @returns {Point | undefined}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    if (\n      typeof point.line === 'number' &&\n      point.line > 0 &&\n      typeof point.column === 'number' &&\n      point.column > 0\n    ) {\n      return {\n        line: point.line,\n        column: point.column,\n        offset:\n          typeof point.offset === 'number' && point.offset > -1\n            ? point.offset\n            : undefined\n      }\n    }\n  }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n *   Node.\n * @returns {Position | undefined}\n *   Position.\n */\nexport function position(node) {\n  const start = pointStart(node)\n  const end = pointEnd(node)\n\n  if (start && end) {\n    return {start, end}\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n *   Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n *   Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n *   Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n *   Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n *   Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Options | null | undefined} [options]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // eslint-disable-next-line complexity\n  constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n    super()\n\n    if (typeof optionsOrParentOrPlace === 'string') {\n      origin = optionsOrParentOrPlace\n      optionsOrParentOrPlace = undefined\n    }\n\n    /** @type {string} */\n    let reason = ''\n    /** @type {Options} */\n    let options = {}\n    let legacyCause = false\n\n    if (optionsOrParentOrPlace) {\n      // Point.\n      if (\n        'line' in optionsOrParentOrPlace &&\n        'column' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Position.\n      else if (\n        'start' in optionsOrParentOrPlace &&\n        'end' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Node.\n      else if ('type' in optionsOrParentOrPlace) {\n        options = {\n          ancestors: [optionsOrParentOrPlace],\n          place: optionsOrParentOrPlace.position\n        }\n      }\n      // Options.\n      else {\n        options = {...optionsOrParentOrPlace}\n      }\n    }\n\n    if (typeof causeOrReason === 'string') {\n      reason = causeOrReason\n    }\n    // Error.\n    else if (!options.cause && causeOrReason) {\n      legacyCause = true\n      reason = causeOrReason.message\n      options.cause = causeOrReason\n    }\n\n    if (!options.ruleId && !options.source && typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        options.ruleId = origin\n      } else {\n        options.source = origin.slice(0, index)\n        options.ruleId = origin.slice(index + 1)\n      }\n    }\n\n    if (!options.place && options.ancestors && options.ancestors) {\n      const parent = options.ancestors[options.ancestors.length - 1]\n\n      if (parent) {\n        options.place = parent.position\n      }\n    }\n\n    const start =\n      options.place && 'start' in options.place\n        ? options.place.start\n        : options.place\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * Stack of ancestor nodes surrounding the message.\n     *\n     * @type {Array<Node> | undefined}\n     */\n    this.ancestors = options.ancestors || undefined\n\n    /**\n     * Original error cause of the message.\n     *\n     * @type {Error | undefined}\n     */\n    this.cause = options.cause || undefined\n\n    /**\n     * Starting column of message.\n     *\n     * @type {number | undefined}\n     */\n    this.column = start ? start.column : undefined\n\n    /**\n     * State of problem.\n     *\n     * * `true` — error, file not usable\n     * * `false` — warning, change may be needed\n     * * `undefined` — change likely not needed\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal = undefined\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | undefined}\n     */\n    this.file\n\n    // Field from `Error`.\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = reason\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | undefined}\n     */\n    this.line = start ? start.line : undefined\n\n    // Field from `Error`.\n    /**\n     * Serialized positional info of message.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(options.place) || '1:1'\n\n    /**\n     * Place of message.\n     *\n     * @type {Point | Position | undefined}\n     */\n    this.place = options.place || undefined\n\n    /**\n     * Reason for message, should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | undefined}\n     */\n    this.ruleId = options.ruleId || undefined\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | undefined}\n     */\n    this.source = options.source || undefined\n\n    // Field from `Error`.\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack =\n      legacyCause && options.cause && typeof options.cause.stack === 'string'\n        ? options.cause.stack\n        : ''\n\n    // The following fields are “well known”.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that’s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | undefined}\n     */\n    this.actual\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | undefined}\n     */\n    this.expected\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | undefined}\n     */\n    this.note\n\n    /**\n     * Link to docs for the message.\n     *\n     * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | undefined}\n     */\n    this.url\n    /* eslint-enable no-unused-expressions */\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","/**\n * @import {Identifier, Literal, MemberExpression} from 'estree'\n * @import {Jsx, JsxDev, Options, Props} from 'hast-util-to-jsx-runtime'\n * @import {Element, Nodes, Parents, Root, Text} from 'hast'\n * @import {MdxFlowExpressionHast, MdxTextExpressionHast} from 'mdast-util-mdx-expression'\n * @import {MdxJsxFlowElementHast, MdxJsxTextElementHast} from 'mdast-util-mdx-jsx'\n * @import {MdxjsEsmHast} from 'mdast-util-mdxjs-esm'\n * @import {Position} from 'unist'\n * @import {Child, Create, Field, JsxElement, State, Style} from './types.js'\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {name as isIdentifierName} from 'estree-util-is-identifier-name'\nimport {whitespace} from 'hast-util-whitespace'\nimport {find, hastToReact, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport styleToJs from 'style-to-js'\nimport {pointStart} from 'unist-util-position'\nimport {VFileMessage} from 'vfile-message'\n\n// To do: next major: `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/** @type {Map<string, number>} */\nconst emptyMap = new Map()\n\nconst cap = /[A-Z]/g\n\n// `react-dom` triggers a warning for *any* white space in tables.\n// To follow GFM, `mdast-util-to-hast` injects line endings between elements.\n// Other tools might do so too, but they don’t do here, so we remove all of\n// that.\n\n// See: <https://github.com/facebook/react/pull/7081>.\n// See: <https://github.com/facebook/react/pull/7515>.\n// See: <https://github.com/remarkjs/remark-react/issues/64>.\n// See: <https://github.com/rehypejs/rehype-react/pull/29>.\n// See: <https://github.com/rehypejs/rehype-react/pull/32>.\n// See: <https://github.com/rehypejs/rehype-react/pull/45>.\nconst tableElements = new Set(['table', 'tbody', 'thead', 'tfoot', 'tr'])\n\nconst tableCellElement = new Set(['td', 'th'])\n\nconst docs = 'https://github.com/syntax-tree/hast-util-to-jsx-runtime'\n\n/**\n * Transform a hast tree to preact, react, solid, svelte, vue, etc.,\n * with an automatic JSX runtime.\n *\n * @param {Nodes} tree\n *   Tree to transform.\n * @param {Options} options\n *   Configuration (required).\n * @returns {JsxElement}\n *   JSX element.\n */\n\nexport function toJsxRuntime(tree, options) {\n  if (!options || options.Fragment === undefined) {\n    throw new TypeError('Expected `Fragment` in options')\n  }\n\n  const filePath = options.filePath || undefined\n  /** @type {Create} */\n  let create\n\n  if (options.development) {\n    if (typeof options.jsxDEV !== 'function') {\n      throw new TypeError(\n        'Expected `jsxDEV` in options when `development: true`'\n      )\n    }\n\n    create = developmentCreate(filePath, options.jsxDEV)\n  } else {\n    if (typeof options.jsx !== 'function') {\n      throw new TypeError('Expected `jsx` in production options')\n    }\n\n    if (typeof options.jsxs !== 'function') {\n      throw new TypeError('Expected `jsxs` in production options')\n    }\n\n    create = productionCreate(filePath, options.jsx, options.jsxs)\n  }\n\n  /** @type {State} */\n  const state = {\n    Fragment: options.Fragment,\n    ancestors: [],\n    components: options.components || {},\n    create,\n    elementAttributeNameCase: options.elementAttributeNameCase || 'react',\n    evaluater: options.createEvaluater ? options.createEvaluater() : undefined,\n    filePath,\n    ignoreInvalidStyle: options.ignoreInvalidStyle || false,\n    passKeys: options.passKeys !== false,\n    passNode: options.passNode || false,\n    schema: options.space === 'svg' ? svg : html,\n    stylePropertyNameCase: options.stylePropertyNameCase || 'dom',\n    tableCellAlignToStyle: options.tableCellAlignToStyle !== false\n  }\n\n  const result = one(state, tree, undefined)\n\n  // JSX element.\n  if (result && typeof result !== 'string') {\n    return result\n  }\n\n  // Text node or something that turned into nothing.\n  return state.create(\n    tree,\n    state.Fragment,\n    {children: result || undefined},\n    undefined\n  )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Nodes} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction one(state, node, key) {\n  if (node.type === 'element') {\n    return element(state, node, key)\n  }\n\n  if (node.type === 'mdxFlowExpression' || node.type === 'mdxTextExpression') {\n    return mdxExpression(state, node)\n  }\n\n  if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n    return mdxJsxElement(state, node, key)\n  }\n\n  if (node.type === 'mdxjsEsm') {\n    return mdxEsm(state, node)\n  }\n\n  if (node.type === 'root') {\n    return root(state, node, key)\n  }\n\n  if (node.type === 'text') {\n    return text(state, node)\n  }\n}\n\n/**\n * Handle element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction element(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.tagName.toLowerCase() === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type = findComponentFromName(state, node.tagName, false)\n  const props = createElementProps(state, node)\n  let children = createChildren(state, node)\n\n  if (tableElements.has(node.tagName)) {\n    children = children.filter(function (child) {\n      return typeof child === 'string' ? !whitespace(child) : true\n    })\n  }\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle MDX expression.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxFlowExpressionHast | MdxTextExpressionHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxExpression(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    const program = node.data.estree\n    const expression = program.body[0]\n    assert(expression.type === 'ExpressionStatement')\n\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateExpression(expression.expression)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX ESM.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxjsEsmHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxEsm(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateProgram(node.data.estree)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX JSX.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxJsxElement(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.name === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type =\n    node.name === null\n      ? state.Fragment\n      : findComponentFromName(state, node.name, true)\n  const props = createJsxElementProps(state, node)\n  const children = createChildren(state, node)\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle root.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Root} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction root(state, node, key) {\n  /** @type {Props} */\n  const props = {}\n\n  addChildren(props, createChildren(state, node))\n\n  return state.create(node, state.Fragment, props, key)\n}\n\n/**\n * Handle text.\n *\n * @param {State} _\n *   Info passed around.\n * @param {Text} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction text(_, node) {\n  return node.value\n}\n\n/**\n * Add `node` to props.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Props} props\n *   Props.\n * @param {unknown} type\n *   Type.\n * @param {Element | MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Node.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addNode(state, props, type, node) {\n  // If this is swapped out for a component:\n  if (typeof type !== 'string' && type !== state.Fragment && state.passNode) {\n    props.node = node\n  }\n}\n\n/**\n * Add children to props.\n *\n * @param {Props} props\n *   Props.\n * @param {Array<Child>} children\n *   Children.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addChildren(props, children) {\n  if (children.length > 0) {\n    const value = children.length > 1 ? children : children[0]\n\n    if (value) {\n      props.children = value\n    }\n  }\n}\n\n/**\n * @param {string | undefined} _\n *   Path to file.\n * @param {Jsx} jsx\n *   Dynamic.\n * @param {Jsx} jsxs\n *   Static.\n * @returns {Create}\n *   Create a production element.\n */\nfunction productionCreate(_, jsx, jsxs) {\n  return create\n  /** @type {Create} */\n  function create(_, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const fn = isStaticChildren ? jsxs : jsx\n    return key ? fn(type, props, key) : fn(type, props)\n  }\n}\n\n/**\n * @param {string | undefined} filePath\n *   Path to file.\n * @param {JsxDev} jsxDEV\n *   Development.\n * @returns {Create}\n *   Create a development element.\n */\nfunction developmentCreate(filePath, jsxDEV) {\n  return create\n  /** @type {Create} */\n  function create(node, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const point = pointStart(node)\n    return jsxDEV(\n      type,\n      props,\n      key,\n      isStaticChildren,\n      {\n        columnNumber: point ? point.column - 1 : undefined,\n        fileName: filePath,\n        lineNumber: point ? point.line : undefined\n      },\n      undefined\n    )\n  }\n}\n\n/**\n * Create props from an element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current element.\n * @returns {Props}\n *   Props.\n */\nfunction createElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n  /** @type {string | undefined} */\n  let alignValue\n  /** @type {string} */\n  let prop\n\n  for (prop in node.properties) {\n    if (prop !== 'children' && own.call(node.properties, prop)) {\n      const result = createProperty(state, prop, node.properties[prop])\n\n      if (result) {\n        const [key, value] = result\n\n        if (\n          state.tableCellAlignToStyle &&\n          key === 'align' &&\n          typeof value === 'string' &&\n          tableCellElement.has(node.tagName)\n        ) {\n          alignValue = value\n        } else {\n          props[key] = value\n        }\n      }\n    }\n  }\n\n  if (alignValue) {\n    // Assume style is an object.\n    const style = /** @type {Style} */ (props.style || (props.style = {}))\n    style[state.stylePropertyNameCase === 'css' ? 'text-align' : 'textAlign'] =\n      alignValue\n  }\n\n  return props\n}\n\n/**\n * Create props from a JSX element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current JSX element.\n * @returns {Props}\n *   Props.\n */\nfunction createJsxElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n\n  for (const attribute of node.attributes) {\n    if (attribute.type === 'mdxJsxExpressionAttribute') {\n      if (attribute.data && attribute.data.estree && state.evaluater) {\n        const program = attribute.data.estree\n        const expression = program.body[0]\n        assert(expression.type === 'ExpressionStatement')\n        const objectExpression = expression.expression\n        assert(objectExpression.type === 'ObjectExpression')\n        const property = objectExpression.properties[0]\n        assert(property.type === 'SpreadElement')\n\n        Object.assign(\n          props,\n          state.evaluater.evaluateExpression(property.argument)\n        )\n      } else {\n        crashEstree(state, node.position)\n      }\n    } else {\n      // For JSX, the author is responsible of passing in the correct values.\n      const name = attribute.name\n      /** @type {unknown} */\n      let value\n\n      if (attribute.value && typeof attribute.value === 'object') {\n        if (\n          attribute.value.data &&\n          attribute.value.data.estree &&\n          state.evaluater\n        ) {\n          const program = attribute.value.data.estree\n          const expression = program.body[0]\n          assert(expression.type === 'ExpressionStatement')\n          value = state.evaluater.evaluateExpression(expression.expression)\n        } else {\n          crashEstree(state, node.position)\n        }\n      } else {\n        value = attribute.value === null ? true : attribute.value\n      }\n\n      // Assume a prop.\n      props[name] = /** @type {Props[keyof Props]} */ (value)\n    }\n  }\n\n  return props\n}\n\n/**\n * Create children.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Parents} node\n *   Current element.\n * @returns {Array<Child>}\n *   Children.\n */\nfunction createChildren(state, node) {\n  /** @type {Array<Child>} */\n  const children = []\n  let index = -1\n  /** @type {Map<string, number>} */\n  // Note: test this when Solid doesn’t want to merge my upcoming PR.\n  /* c8 ignore next */\n  const countsByName = state.passKeys ? new Map() : emptyMap\n\n  while (++index < node.children.length) {\n    const child = node.children[index]\n    /** @type {string | undefined} */\n    let key\n\n    if (state.passKeys) {\n      const name =\n        child.type === 'element'\n          ? child.tagName\n          : child.type === 'mdxJsxFlowElement' ||\n              child.type === 'mdxJsxTextElement'\n            ? child.name\n            : undefined\n\n      if (name) {\n        const count = countsByName.get(name) || 0\n        key = name + '-' + count\n        countsByName.set(name, count + 1)\n      }\n    }\n\n    const result = one(state, child, key)\n    if (result !== undefined) children.push(result)\n  }\n\n  return children\n}\n\n/**\n * Handle a property.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} prop\n *   Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n *   hast property value.\n * @returns {Field | undefined}\n *   Field for runtime, optional.\n */\nfunction createProperty(state, prop, value) {\n  const info = find(state.schema, prop)\n\n  // Ignore nullish and `NaN` values.\n  if (\n    value === null ||\n    value === undefined ||\n    (typeof value === 'number' && Number.isNaN(value))\n  ) {\n    return\n  }\n\n  if (Array.isArray(value)) {\n    // Accept `array`.\n    // Most props are space-separated.\n    value = info.commaSeparated ? commas(value) : spaces(value)\n  }\n\n  // React only accepts `style` as object.\n  if (info.property === 'style') {\n    let styleObject =\n      typeof value === 'object' ? value : parseStyle(state, String(value))\n\n    if (state.stylePropertyNameCase === 'css') {\n      styleObject = transformStylesToCssCasing(styleObject)\n    }\n\n    return ['style', styleObject]\n  }\n\n  return [\n    state.elementAttributeNameCase === 'react' && info.space\n      ? hastToReact[info.property] || info.property\n      : info.attribute,\n    value\n  ]\n}\n\n/**\n * Parse a CSS declaration to an object.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} value\n *   CSS declarations.\n * @returns {Style}\n *   Properties.\n * @throws\n *   Throws `VFileMessage` when CSS cannot be parsed.\n */\nfunction parseStyle(state, value) {\n  try {\n    return styleToJs(value, {reactCompat: true})\n  } catch (error) {\n    if (state.ignoreInvalidStyle) {\n      return {}\n    }\n\n    const cause = /** @type {Error} */ (error)\n    const message = new VFileMessage('Cannot parse `style` attribute', {\n      ancestors: state.ancestors,\n      cause,\n      ruleId: 'style',\n      source: 'hast-util-to-jsx-runtime'\n    })\n    message.file = state.filePath || undefined\n    message.url = docs + '#cannot-parse-style-attribute'\n\n    throw message\n  }\n}\n\n/**\n * Create a JSX name from a string.\n *\n * @param {State} state\n *   To do.\n * @param {string} name\n *   Name.\n * @param {boolean} allowExpression\n *   Allow member expressions and identifiers.\n * @returns {unknown}\n *   To do.\n */\nfunction findComponentFromName(state, name, allowExpression) {\n  /** @type {Identifier | Literal | MemberExpression} */\n  let result\n\n  if (!allowExpression) {\n    result = {type: 'Literal', value: name}\n  } else if (name.includes('.')) {\n    const identifiers = name.split('.')\n    let index = -1\n    /** @type {Identifier | Literal | MemberExpression | undefined} */\n    let node\n\n    while (++index < identifiers.length) {\n      /** @type {Identifier | Literal} */\n      const prop = isIdentifierName(identifiers[index])\n        ? {type: 'Identifier', name: identifiers[index]}\n        : {type: 'Literal', value: identifiers[index]}\n      node = node\n        ? {\n            type: 'MemberExpression',\n            object: node,\n            property: prop,\n            computed: Boolean(index && prop.type === 'Literal'),\n            optional: false\n          }\n        : prop\n    }\n\n    assert(node, 'always a result')\n    result = node\n  } else {\n    result =\n      isIdentifierName(name) && !/^[a-z]/.test(name)\n        ? {type: 'Identifier', name}\n        : {type: 'Literal', value: name}\n  }\n\n  // Only literals can be passed in `components` currently.\n  // No identifiers / member expressions.\n  if (result.type === 'Literal') {\n    const name = /** @type {string | number} */ (result.value)\n    return own.call(state.components, name) ? state.components[name] : name\n  }\n\n  // Assume component.\n  if (state.evaluater) {\n    return state.evaluater.evaluateExpression(result)\n  }\n\n  crashEstree(state)\n}\n\n/**\n * @param {State} state\n * @param {Position | undefined} [place]\n * @returns {never}\n */\nfunction crashEstree(state, place) {\n  const message = new VFileMessage(\n    'Cannot handle MDX estrees without `createEvaluater`',\n    {\n      ancestors: state.ancestors,\n      place,\n      ruleId: 'mdx-estree',\n      source: 'hast-util-to-jsx-runtime'\n    }\n  )\n  message.file = state.filePath || undefined\n  message.url = docs + '#cannot-handle-mdx-estrees-without-createevaluater'\n\n  throw message\n}\n\n/**\n * Transform a DOM casing style object to a CSS casing style object.\n *\n * @param {Style} domCasing\n * @returns {Style}\n */\nfunction transformStylesToCssCasing(domCasing) {\n  /** @type {Style} */\n  const cssCasing = {}\n  /** @type {string} */\n  let from\n\n  for (from in domCasing) {\n    if (own.call(domCasing, from)) {\n      cssCasing[transformStyleToCssCasing(from)] = domCasing[from]\n    }\n  }\n\n  return cssCasing\n}\n\n/**\n * Transform a DOM casing style field to a CSS casing style field.\n *\n * @param {string} from\n * @returns {string}\n */\nfunction transformStyleToCssCasing(from) {\n  let to = from.replace(cap, toDash)\n  // Handle `ms-xxx` -> `-ms-xxx`.\n  if (to.slice(0, 3) === 'ms-') to = '-' + to\n  return to\n}\n\n/**\n * Make `$0` dash cased.\n *\n * @param {string} $0\n *   Capitalized ASCII leter.\n * @returns {string}\n *   Dash and lower letter.\n */\nfunction toDash($0) {\n  return '-' + $0.toLowerCase()\n}\n","/**\n * HTML URL properties.\n *\n * Each key is a property name and each value is a list of tag names it applies\n * to or `null` if it applies to all elements.\n *\n * @type {Record<string, Array<string> | null>}\n */\nexport const urlAttributes = {\n  action: ['form'],\n  cite: ['blockquote', 'del', 'ins', 'q'],\n  data: ['object'],\n  formAction: ['button', 'input'],\n  href: ['a', 'area', 'base', 'link'],\n  icon: ['menuitem'],\n  itemId: null,\n  manifest: ['html'],\n  ping: ['a', 'area'],\n  poster: ['video'],\n  src: [\n    'audio',\n    'embed',\n    'iframe',\n    'img',\n    'input',\n    'script',\n    'source',\n    'track',\n    'video'\n  ]\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkParse(options) {\n  /** @type {Processor} */\n  // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n  const self = this\n\n  self.parser = parser\n\n  /**\n   * @type {Parser}\n   */\n  function parser(doc) {\n    return fromMarkdown(doc, {\n      ...self.data('settings'),\n      ...options,\n      // Note: these options are not in the readme.\n      // The goal is for them to be set by plugins on `data` instead of being\n      // passed by users.\n      extensions: self.data('micromarkExtensions') || [],\n      mdastExtensions: self.data('fromMarkdownExtensions') || []\n    })\n  }\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Blockquote} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {Break} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Code} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  /** @type {Properties} */\n  const properties = {}\n  // Someone can write `js&#x20;python&#x9;ruby`.\n  const language = node.lang ? node.lang.split(/\\s+/) : []\n\n  // GH/CM still drop the non-first languages.\n  if (language.length > 0) {\n    properties.className = ['language-' + language[0]]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Delete} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Emphasis} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {FootnoteReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Heading} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Html} from 'mdast'\n * @import {State} from '../state.js'\n * @import {Raw} from '../../index.js'\n */\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @import {ElementContent} from 'hast'\n * @import {Reference, Nodes} from 'mdast'\n * @import {State} from './state.js'\n */\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Extract<Nodes, Reference>} node\n *   Reference node (image, link).\n * @returns {Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return [{type: 'text', value: '![' + node.alt + suffix}]\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ImageReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Image} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Text} from 'hast'\n * @import {InlineCode} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {LinkReference} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {Link} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ListItem, Parents} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {List} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Paragraph} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Parents as HastParents, Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Strong} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Table} from 'mdast'\n * @import {Element} from 'hast'\n * @import {State} from '../state.js'\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element, ElementContent, Properties} from 'hast'\n * @import {Parents, TableRow} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {TableCell} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","/**\n * @import {Element as HastElement, Text as HastText} from 'hast'\n * @import {Text as MdastText} from 'mdast'\n * @import {State} from '../state.js'\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Element} from 'hast'\n * @import {ThematicBreak} from 'mdast'\n * @import {State} from '../state.js'\n */\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @import {Handlers} from '../state.js'\n */\n\nimport {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {Handlers}\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  // @ts-expect-error: root is different, but hard to type.\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  return undefined\n}\n","export const VOID       = -1;\nexport const PRIMITIVE  = 0;\nexport const ARRAY      = 1;\nexport const OBJECT     = 2;\nexport const DATE       = 3;\nexport const REGEXP     = 4;\nexport const MAP        = 5;\nexport const SET        = 6;\nexport const ERROR      = 7;\nexport const BIGINT     = 8;\n// export const SYMBOL = 9;\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n      case VOID:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n      case 'ArrayBuffer':\n        return as(new Uint8Array(value).buffer, value);\n      case 'DataView': {\n        const { buffer } = new Uint8Array(value);\n        return as(new DataView(buffer), value);\n      }\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n    case 'DataView':\n      return [ARRAY, asString];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n          case 'undefined':\n            return as([VOID], value);\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type) {\n          let spread = value;\n          if (type === 'DataView') {\n            spread = new Uint8Array(value.buffer);\n          }\n          else if (type === 'ArrayBuffer') {\n            spread = new Uint8Array(value);\n          }\n          return as([type, [...spread]], value);\n        }\n\n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  /* c8 ignore start */\n  (any, options) => (\n    options && ('json' in options || 'lossy' in options) ?\n      deserialize(serialize(any, options)) : structuredClone(any)\n  ) :\n  (any, options) => deserialize(serialize(any, options));\n  /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","/**\n * @import {ElementContent, Element} from 'hast'\n * @import {State} from './state.js'\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n *   Generate content for the backreference dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n *   Content for the backreference when linking back from definitions to their\n *   reference.\n *\n * @callback FootnoteBackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n *   Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n  /** @type {Array<ElementContent>} */\n  const result = [{type: 'text', value: '↩'}]\n\n  if (rereferenceIndex > 1) {\n    result.push({\n      type: 'element',\n      tagName: 'sup',\n      properties: {},\n      children: [{type: 'text', value: String(rereferenceIndex)}]\n    })\n  }\n\n  return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const footnoteBackContent =\n    state.options.footnoteBackContent || defaultFootnoteBackContent\n  const footnoteBackLabel =\n    state.options.footnoteBackLabel || defaultFootnoteBackLabel\n  const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n  const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n  const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let referenceIndex = -1\n\n  while (++referenceIndex < state.footnoteOrder.length) {\n    const definition = state.footnoteById.get(\n      state.footnoteOrder[referenceIndex]\n    )\n\n    if (!definition) {\n      continue\n    }\n\n    const content = state.all(definition)\n    const id = String(definition.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let rereferenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n    const counts = state.footnoteCounts.get(id)\n\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (counts !== undefined && ++rereferenceIndex <= counts) {\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      let children =\n        typeof footnoteBackContent === 'string'\n          ? footnoteBackContent\n          : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n      if (typeof children === 'string') {\n        children = {type: 'text', value: children}\n      }\n\n      backReferences.push({\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n          dataFootnoteBackref: '',\n          ariaLabel:\n            typeof footnoteBackLabel === 'string'\n              ? footnoteBackLabel\n              : footnoteBackLabel(referenceIndex, rereferenceIndex),\n          className: ['data-footnote-backref']\n        },\n        children: Array.isArray(children) ? children : [children]\n      })\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(definition, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: footnoteLabelTagName,\n        properties: {\n          ...structuredClone(footnoteLabelProperties),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n","/**\n * @import {\n *   ElementContent as HastElementContent,\n *   Element as HastElement,\n *   Nodes as HastNodes,\n *   Properties as HastProperties,\n *   RootContent as HastRootContent,\n *   Text as HastText\n * } from 'hast'\n * @import {\n *   Definition as MdastDefinition,\n *   FootnoteDefinition as MdastFootnoteDefinition,\n *   Nodes as MdastNodes,\n *   Parents as MdastParents\n * } from 'mdast'\n * @import {VFile} from 'vfile'\n * @import {\n *   FootnoteBackContentTemplate,\n *   FootnoteBackLabelTemplate\n * } from './footer.js'\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   <p id=\"x\"></p>\n *   <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n *   ```\n *\n *   The above example shows that elements are made available by browsers, by\n *   their ID, on the `window` object.\n *   This is a security risk because you might be expecting some other variable\n *   at that place.\n *   It can also break polyfills.\n *   Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n *   Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n *   Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackContent(_, rereferenceIndex) {\n *     const result = [{type: 'text', value: '↩'}]\n *\n *     if (rereferenceIndex > 1) {\n *       result.push({\n *         type: 'element',\n *         tagName: 'sup',\n *         properties: {},\n *         children: [{type: 'text', value: String(rereferenceIndex)}]\n *       })\n *     }\n *\n *     return result\n *   }\n *   ```\n *\n *   This content is used in the `a` element of each backreference (the `↩`\n *   links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n *   Label to describe the backreference back to references (default:\n *   `defaultFootnoteBackLabel`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n *    return (\n *      'Back to reference ' +\n *      (referenceIndex + 1) +\n *      (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n *    )\n *   }\n *   ```\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is used in the `ariaLabel` property on each backreference\n *   (the `↩` links).\n *   It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (default: `{className:\n *   ['sr-only']}`).\n *\n *   Change it to show the label and add other properties.\n *\n *   This label is typically hidden visually (assuming an `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass an empty string.\n *   You can also add different properties.\n *\n *   > **Note**: `id: 'footnote-label'` is always added, because footnote\n *   > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n *   Change it to match your document structure.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed)\n *   (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes (optional).\n *\n * @typedef State\n *   Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n *   Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n *   Transform an mdast node to hast.\n * @property {Options} options\n *   Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n *   Copy a node’s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || emptyOptions\n  /** @type {Map<string, MdastDefinition>} */\n  const definitionById = new Map()\n  /** @type {Map<string, MdastFootnoteDefinition>} */\n  const footnoteById = new Map()\n  /** @type {Map<string, number>} */\n  const footnoteCounts = new Map()\n  /** @type {Handlers} */\n  // @ts-expect-error: the root handler returns a root.\n  // Hard to type.\n  const handlers = {...defaultHandlers, ...settings.handlers}\n\n  /** @type {State} */\n  const state = {\n    all,\n    applyData,\n    definitionById,\n    footnoteById,\n    footnoteCounts,\n    footnoteOrder: [],\n    handlers,\n    one,\n    options: settings,\n    patch,\n    wrap\n  }\n\n  visit(tree, function (node) {\n    if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n      const map = node.type === 'definition' ? definitionById : footnoteById\n      const id = String(node.identifier).toUpperCase()\n\n      // Mimick CM behavior of link definitions.\n      // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n      if (!map.has(id)) {\n        // @ts-expect-error: node type matches map.\n        map.set(id, node)\n      }\n    }\n  })\n\n  return state\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {Array<HastElementContent> | HastElementContent | undefined}\n   *   Resulting hast node.\n   */\n  function one(node, parent) {\n    const type = node.type\n    const handle = state.handlers[type]\n\n    if (own.call(state.handlers, type) && handle) {\n      return handle(state, node, parent)\n    }\n\n    if (state.options.passThrough && state.options.passThrough.includes(type)) {\n      if ('children' in node) {\n        const {children, ...shallow} = node\n        const result = structuredClone(shallow)\n        // @ts-expect-error: TS doesn’t understand…\n        result.children = state.all(node)\n        // @ts-expect-error: TS doesn’t understand…\n        return result\n      }\n\n      // @ts-expect-error: it’s custom.\n      return structuredClone(node)\n    }\n\n    const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n    return unknown(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function all(parent) {\n    /** @type {Array<HastElementContent>} */\n    const values = []\n\n    if ('children' in parent) {\n      const nodes = parent.children\n      let index = -1\n      while (++index < nodes.length) {\n        const result = state.one(nodes[index], parent)\n\n        // To do: see if we van clean this? Can we merge texts?\n        if (result) {\n          if (index && nodes[index - 1].type === 'break') {\n            if (!Array.isArray(result) && result.type === 'text') {\n              result.value = trimMarkdownSpaceStart(result.value)\n            }\n\n            if (!Array.isArray(result) && result.type === 'element') {\n              const head = result.children[0]\n\n              if (head && head.type === 'text') {\n                head.value = trimMarkdownSpaceStart(head.value)\n              }\n            }\n          }\n\n          if (Array.isArray(result)) {\n            values.push(...result)\n          } else {\n            values.push(result)\n          }\n        }\n      }\n    }\n\n    return values\n  }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {undefined}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {HastElement | Type}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {HastElement | Type} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent of `hName` is to create an element, but likely also to keep\n      // the content around (otherwise: pass `hChildren`).\n      else {\n        /** @type {Array<HastElementContent>} */\n        // @ts-expect-error: assume no doctypes in `root`.\n        const children = 'children' in result ? result.children : [result]\n        result = {type: 'element', tagName: hName, properties: {}, children}\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      Object.assign(result.properties, structuredClone(hProperties))\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastElement | HastText}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastElement | HastText} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: state.all(node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n *   Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<HastText | Type>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n  let index = 0\n  let code = value.charCodeAt(index)\n\n  while (code === 9 || code === 32) {\n    index++\n    code = value.charCodeAt(index)\n  }\n\n  return value.slice(index)\n}\n","/**\n * @import {Nodes as HastNodes} from 'hast'\n * @import {Nodes as MdastNodes} from 'mdast'\n * @import {Options} from './state.js'\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {HastNodes}\n *   hast tree.\n */\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, undefined)\n  const foot = footer(state)\n  /** @type {HastNodes} */\n  const result = Array.isArray(node)\n    ? {type: 'root', children: node}\n    : node || {type: 'root', children: []}\n\n  if (foot) {\n    // If there’s a footer, there were definitions, meaning block\n    // content.\n    // So `result` is a parent node.\n    assert('children' in result)\n    result.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  return result\n}\n","/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit<ToHastOptions, 'file'>} Options\n *\n * @callback TransformBridge\n *   Bridge-mode.\n *\n *   Runs the destination with the new hast tree.\n *   Discards result.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {Promise<undefined>}\n *   Nothing.\n *\n * @callback TransformMutate\n *  Mutate-mode.\n *\n *  Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {HastRoot}\n *   Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given,\n *   runs the (rehype) plugins used on it with a hast tree,\n *   then discards the result (*bridge mode*)\n * * otherwise,\n *   returns a hast tree,\n *   the plugins used after `remarkRehype` are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**:\n * > It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n *   output the raw HTML.\n *   This is typically discouraged as noted by the option name but is useful if\n *   you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n *   into standard hast nodes (`element`, `text`, etc);\n *   this is a heavy task as it needs a full HTML parser,\n *   but it is the only way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark,\n * which we follow by default.\n * They are supported by GitHub,\n * so footnotes can be enabled in markdown with `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes,\n * which is hidden for sighted users but shown to assistive technology.\n * When your page is not in English,\n * you must define translated values.\n *\n * Back references use ARIA attributes,\n * but the section label itself uses a heading that is hidden with an\n * `sr-only` class.\n * To show it to sighted users,\n * define different attributes in `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem,\n * as it links footnote calls to footnote definitions on the page through `id`\n * attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value`\n *   (and doesn’t have `data.hName`, `data.hProperties`, or `data.hChildren`,\n *   see later),\n *   create a hast `text` node\n * * otherwise,\n *   create a `<div>` element (which could be changed with `data.hName`),\n *   with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @overload\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge | TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n *   Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n *   When a processor was given,\n *   configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n *   Transform.\n */\nexport default function remarkRehype(destination, options) {\n  if (destination && 'run' in destination) {\n    /**\n     * @type {TransformBridge}\n     */\n    return async function (tree, file) {\n      // Cast because root in -> root out.\n      const hastTree = /** @type {HastRoot} */ (\n        toHast(tree, {file, ...options})\n      )\n      await destination.run(hastTree, file)\n    }\n  }\n\n  /**\n   * @type {TransformMutate}\n   */\n  return function (tree, file) {\n    // Cast because root in -> root out.\n    // To do: in the future, disallow ` || options` fallback.\n    // With `unified-engine`, `destination` can be `undefined` but\n    // `options` will be the file set.\n    // We should not pass that as `options`.\n    return /** @type {HastRoot} */ (\n      toHast(tree, {file, ...(destination || options)})\n    )\n  }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n *   Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n *   Ware.\n *\n * @typedef Pipeline\n *   Pipeline.\n * @property {Run} run\n *   Run the pipeline.\n * @property {Use} use\n *   Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n *\n *   Calls `done` on completion with either an error or the output of the\n *   last middleware.\n *\n *   > 👉 **Note**: as the length of input defines whether async functions get a\n *   > `next` function,\n *   > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n *   Pipeline.\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we’re done.\n     *\n     * @param {Error | null | undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n *   returns a promise that is rejected,\n *   or calls the given `done` function with an error,\n *   `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n *   that value is the main output value\n * * if `middleware` calls `done`,\n *   all non-nullish values except for the first one (the error) overwrite the\n *   output values\n *\n * @param {Middleware} middleware\n *   Function to wrap.\n * @param {Callback} callback\n *   Callback called with the output of `middleware`.\n * @returns {Run}\n *   Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result && result.then && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   *\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | null | undefined} [extname]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, extname) {\n  if (extname !== undefined && typeof extname !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (\n    extname === undefined ||\n    extname.length === 0 ||\n    extname.length > path.length\n  ) {\n    while (index--) {\n      if (path.codePointAt(index) === 47 /* `/` */) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now.\n        if (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (extname === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extnameIndex = extname.length - 1\n\n  while (index--) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\n        // We saw the first non-path separator, remember this index in case\n        // we need it if the extension ends up not matching.\n        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extnameIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n          if (extnameIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extnameIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.codePointAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.codePointAt(0) === 47 /* `/` */\n      ? '//'\n      : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find.\n  let preDotState = 0\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.codePointAt(index)\n\n    if (code === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\n      } else if (preDotState !== 1) {\n        preDotState = 1\n      }\n    } else if (startDot > -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension.\n      preDotState = -1\n    }\n  }\n\n  if (\n    startDot < 0 ||\n    end < 0 ||\n    // We saw a non-dot character immediately before the dot.\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly `..`.\n    (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n  ) {\n    return ''\n  }\n\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.codePointAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.codePointAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n          result.codePointAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n  return Boolean(\n    fileUrlOrPath !== null &&\n      typeof fileUrlOrPath === 'object' &&\n      'href' in fileUrlOrPath &&\n      fileUrlOrPath.href &&\n      'protocol' in fileUrlOrPath &&\n      fileUrlOrPath.protocol &&\n      // @ts-expect-error: indexing is fine.\n      fileUrlOrPath.auth === undefined\n  )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.codePointAt(index) === 37 /* `%` */ &&\n      pathname.codePointAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.codePointAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n])\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Uint8Array` — `{value: options}`\n   * *   `URL` — `{path: options}`\n   * *   `VFile` — shallow copies its data over to the new file\n   * *   `object` — all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else if (typeof value === 'string' || isUint8Array(value)) {\n      options = {value}\n    } else {\n      options = value\n    }\n\n    /* eslint-disable no-unused-expressions */\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n    // the empty string will be overridden in the next block.\n    this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n    /**\n     * Place to store custom info (default: `{}`).\n     *\n     * It’s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of file paths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are “well-known”.\n    // As in, used in several tools.\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const field = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        field in options &&\n        options[field] !== undefined &&\n        options[field] !== null\n      ) {\n        // @ts-expect-error: TS doesn’t understand basic reality.\n        this[field] = field === 'history' ? [...options[field]] : options[field]\n      }\n    }\n\n    /** @type {string} */\n    let field\n\n    // Set non-path related properties.\n    for (field in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(field)) {\n        // @ts-expect-error: fine to set other things.\n        this[field] = options[field]\n      }\n    }\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   *\n   * @returns {string | undefined}\n   *   Basename.\n   */\n  get basename() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path)\n      : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} basename\n   *   Basename.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = minpath.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   *\n   * @returns {string | undefined}\n   *   Dirname.\n   */\n  get dirname() {\n    return typeof this.path === 'string'\n      ? minpath.dirname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} dirname\n   *   Dirname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = minpath.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   *\n   * @returns {string | undefined}\n   *   Extname.\n   */\n  get extname() {\n    return typeof this.path === 'string'\n      ? minpath.extname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} extname\n   *   Extname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.codePointAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   *   Path.\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {URL | string} path\n   *   Path.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * @returns {string | undefined}\n   *   Stem.\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} stem\n   *   Stem.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  // Normal prototypal methods.\n  /**\n   * Create a fatal message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `true` (error; file not usable)\n   * and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Never.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n\n  /**\n   * Create an info message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `undefined` (info; change\n   * likely not needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = undefined\n\n    return message\n  }\n\n  /**\n   * Create a message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `false` (warning; change may be\n   * needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(causeOrReason, optionsOrParentOrPlace, origin) {\n    const message = new VFileMessage(\n      // @ts-expect-error: the overloads are fine.\n      causeOrReason,\n      optionsOrParentOrPlace,\n      origin\n    )\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * > **Note**: which encodings are supported depends on the engine.\n   * > For info on Node.js, see:\n   * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n   *\n   * @param {string | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it’s a `Uint8Array`\n   *   (default: `'utf-8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    if (this.value === undefined) {\n      return ''\n    }\n\n    if (typeof this.value === 'string') {\n      return this.value\n    }\n\n    const decoder = new TextDecoder(encoding || undefined)\n    return decoder.decode(this.value)\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {undefined}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(minpath.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","export const CallableInstance =\n  /**\n   * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n   */\n  (\n    /** @type {unknown} */\n    (\n      /**\n       * @this {Function}\n       * @param {string | symbol} property\n       * @returns {(...parameters: Array<unknown>) => unknown}\n       */\n      function (property) {\n        const self = this\n        const constr = self.constructor\n        const proto = /** @type {Record<string | symbol, Function>} */ (\n          // Prototypes do exist.\n          // type-coverage:ignore-next-line\n          constr.prototype\n        )\n        const value = proto[property]\n        /** @type {(...parameters: Array<unknown>) => unknown} */\n        const apply = function () {\n          return value.apply(apply, arguments)\n        }\n\n        Object.setPrototypeOf(apply, proto)\n\n        // Not needed for us in `unified`: we only call this on the `copy`\n        // function,\n        // and we don't need to add its fields (`length`, `name`)\n        // over.\n        // See also: GH-246.\n        // const names = Object.getOwnPropertyNames(value)\n        //\n        // for (const p of names) {\n        //   const descriptor = Object.getOwnPropertyDescriptor(value, p)\n        //   if (descriptor) Object.defineProperty(apply, p, descriptor)\n        // }\n\n        return apply\n      }\n    )\n  )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n *   Acceptable results from compilers.\n *\n *   To register custom results, add them to\n *   {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n *   The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n *   A **compiler** handles the compiling of a syntax tree to something else\n *   (in most cases, text) (TypeScript type).\n *\n *   It is used in the stringify phase and called with a {@linkcode Node}\n *   and {@linkcode VFile} representation of the document to compile.\n *   It should return the textual representation of the given tree (typically\n *   `string`).\n *\n *   > **Note**: unified typically compiles by serializing: most compilers\n *   > return `string` (or `Uint8Array`).\n *   > Some compilers, such as the one configured with\n *   > [`rehype-react`][rehype-react], return other values (in this case, a\n *   > React tree).\n *   > If you’re using a compiler that doesn’t serialize, expect different\n *   > result values.\n *   >\n *   > To register custom results in TypeScript, add them to\n *   > {@linkcode CompileResultMap}.\n *\n *   [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n *   Tree to compile.\n * @param {VFile} file\n *   File associated with `tree`.\n * @returns {Result}\n *   New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n *   something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the parser yields (default: `Node`)\n * @callback Parser\n *   A **parser** handles the parsing of text to a syntax tree.\n *\n *   It is used in the parse phase and is called with a `string` and\n *   {@linkcode VFile} of the document to parse.\n *   It must return the syntax tree representation of the given file\n *   ({@linkcode Node}).\n * @param {string} document\n *   Document to parse.\n * @param {VFile} file\n *   File associated with `document`.\n * @returns {Tree}\n *   Node representing the given file.\n */\n\n/**\n * @typedef {(\n *   Plugin<Array<any>, any, any> |\n *   PluginTuple<Array<any>, any, any> |\n *   Preset\n * )} Pluggable\n *   Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n *   List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n//  <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n *   Value that is expected as input (default: `Node`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=Input]\n *   Value that is yielded as output (default: `Input`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   (this: Processor, ...parameters: PluginParameters) =>\n *     Input extends string ? // Parser.\n *        Output extends Node | undefined ? undefined | void : never :\n *     Output extends CompileResults ? // Compiler.\n *        Input extends Node | undefined ? undefined | void : never :\n *     Transformer<\n *       Input extends Node ? Input : Node,\n *       Output extends Node ? Output : Node\n *     > | undefined | void\n * )} Plugin\n *   Single plugin.\n *\n *   Plugins configure the processors they are applied on in the following\n *   ways:\n *\n *   *   they change the processor, such as the parser, the compiler, or by\n *       configuring data\n *   *   they specify how to handle trees and files\n *\n *   In practice, they are functions that can receive options and configure the\n *   processor (`this`).\n *\n *   > **Note**: plugins are called when the processor is *frozen*, not when\n *   > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n *   Value that is expected as input (optional).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=undefined] (optional).\n *   Value that is yielded as output.\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   [\n *     plugin: Plugin<TupleParameters, Input, Output>,\n *     ...parameters: TupleParameters\n *   ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n *   Sharable configuration.\n *\n *   They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n *   List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n *   Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n *   The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n *   Callback called when the process is done.\n *\n *   Called with either an error or a result.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {File | undefined} [file]\n *   Processed file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n *   Callback called when transformers are done.\n *\n *   Called with either an error or results.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {Tree | undefined} [tree]\n *   Transformed tree (optional).\n * @param {VFile | undefined} [file]\n *   File (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n *   Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n *   Callback passed to transforms.\n *\n *   If the signature of a `transformer` accepts a third argument, the\n *   transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n *   Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n *   New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n *   New, changed, file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n *   Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n *   Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n *   Transformers handle syntax trees and files.\n *\n *   They are functions that are called each time a syntax tree and file are\n *   passed through the run phase.\n *   When an error occurs in them (either because it’s thrown, returned,\n *   rejected, or passed to `next`), the process stops.\n *\n *   The run phase is handled by [`trough`][trough], see its documentation for\n *   the exact semantics of these functions.\n *\n *   > **Note**: you should likely ignore `next`: don’t accept it.\n *   > it supports callback-style async work.\n *   > But promises are likely easier to reason about.\n *\n *   [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n *   Tree to handle.\n * @param {VFile} file\n *   File to handle.\n * @param {TransformCallback<Output>} next\n *   Callback.\n * @returns {(\n *   Promise<Output | undefined | void> |\n *   Promise<never> | // For some reason this is needed separately.\n *   Output |\n *   Error |\n *   undefined |\n *   void\n * )}\n *   If you accept `next`, nothing.\n *   Otherwise:\n *\n *   *   `Error` — fatal error to stop the process\n *   *   `Promise<undefined>` or `undefined` — the next transformer keeps using\n *       same tree\n *   *   `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n *   Output of `parse`.\n * @template {Node | undefined} HeadTree\n *   Input for `run`.\n * @template {Node | undefined} TailTree\n *   Output for `run`.\n * @template {Node | undefined} CompileTree\n *   Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n *   Output of `stringify`.\n * @template {Node | string | undefined} Input\n *   Input of plugin.\n * @template Output\n *   Output of plugin (optional).\n * @typedef {(\n *   Input extends string\n *     ? Output extends Node | undefined\n *       ? // Parser.\n *         Processor<\n *           Output extends undefined ? ParseTree : Output,\n *           HeadTree,\n *           TailTree,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Output extends CompileResults\n *     ? Input extends Node | undefined\n *       ? // Compiler.\n *         Processor<\n *           ParseTree,\n *           HeadTree,\n *           TailTree,\n *           Input extends undefined ? CompileTree : Input,\n *           Output extends undefined ? CompileResult : Output\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Input extends Node | undefined\n *     ? Output extends Node | undefined\n *       ? // Transform.\n *         Processor<\n *           ParseTree,\n *           HeadTree extends undefined ? Input : HeadTree,\n *           Output extends undefined ? TailTree : Output,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : // Unknown.\n *       Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n *   Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n *   Node type that the transformer yields.\n * @typedef {(\n *   Result extends Value | undefined ?\n *     VFile :\n *     VFile & {result: Result}\n *   )} VFileWithOutput\n *   Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n *   If a result that is not acceptable on a `VFile` is used, that will\n *   be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n *   Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n *   Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n *   Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n *   Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n *   Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n  /**\n   * Create a processor.\n   */\n  constructor() {\n    // If `Processor()` is called (w/o new), `copy` is called instead.\n    super('copy')\n\n    /**\n     * Compiler to use (deprecated).\n     *\n     * @deprecated\n     *   Use `compiler` instead.\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.Compiler = undefined\n\n    /**\n     * Parser to use (deprecated).\n     *\n     * @deprecated\n     *   Use `parser` instead.\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.Parser = undefined\n\n    // Note: the following fields are considered private.\n    // However, they are needed for tests, and TSC generates an untyped\n    // `private freezeIndex` field for, which trips `type-coverage` up.\n    // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n    /**\n     * Internal list of configured plugins.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Array<PluginTuple<Array<unknown>>>}\n     */\n    this.attachers = []\n\n    /**\n     * Compiler to use.\n     *\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.compiler = undefined\n\n    /**\n     * Internal state to track where we are while freezing.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {number}\n     */\n    this.freezeIndex = -1\n\n    /**\n     * Internal state to track whether we’re frozen.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {boolean | undefined}\n     */\n    this.frozen = undefined\n\n    /**\n     * Internal state.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Data}\n     */\n    this.namespace = {}\n\n    /**\n     * Parser to use.\n     *\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.parser = undefined\n\n    /**\n     * Internal list of configured transformers.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Pipeline}\n     */\n    this.transformers = trough()\n  }\n\n  /**\n   * Copy a processor.\n   *\n   * @deprecated\n   *   This is a private internal method and should not be used.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   New *unfrozen* processor ({@linkcode Processor}) that is\n   *   configured to work the same as its ancestor.\n   *   When the descendant processor is configured in the future it does not\n   *   affect the ancestral processor.\n   */\n  copy() {\n    // Cast as the type parameters will be the same after attaching.\n    const destination =\n      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n        new Processor()\n      )\n    let index = -1\n\n    while (++index < this.attachers.length) {\n      const attacher = this.attachers[index]\n      destination.use(...attacher)\n    }\n\n    destination.data(extend(true, {}, this.namespace))\n\n    return destination\n  }\n\n  /**\n   * Configure the processor with info available to all plugins.\n   * Information is stored in an object.\n   *\n   * Typically, options can be given to a specific plugin, but sometimes it\n   * makes sense to have information shared with several plugins.\n   * For example, a list of HTML elements that are self-closing, which is\n   * needed during all phases.\n   *\n   * > **Note**: setting information cannot occur on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * > **Note**: to register custom data in TypeScript, augment the\n   * > {@linkcode Data} interface.\n   *\n   * @example\n   *   This example show how to get and set info:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   const processor = unified().data('alpha', 'bravo')\n   *\n   *   processor.data('alpha') // => 'bravo'\n   *\n   *   processor.data() // => {alpha: 'bravo'}\n   *\n   *   processor.data({charlie: 'delta'})\n   *\n   *   processor.data() // => {charlie: 'delta'}\n   *   ```\n   *\n   * @template {keyof Data} Key\n   *\n   * @overload\n   * @returns {Data}\n   *\n   * @overload\n   * @param {Data} dataset\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Key} key\n   * @returns {Data[Key]}\n   *\n   * @overload\n   * @param {Key} key\n   * @param {Data[Key]} value\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @param {Data | Key} [key]\n   *   Key to get or set, or entire dataset to set, or nothing to get the\n   *   entire dataset (optional).\n   * @param {Data[Key]} [value]\n   *   Value to set (optional).\n   * @returns {unknown}\n   *   The current processor when setting, the value at `key` when getting, or\n   *   the entire dataset when getting without key.\n   */\n  data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', this.frozen)\n        this.namespace[key] = value\n        return this\n      }\n\n      // Get `key`.\n      return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', this.frozen)\n      this.namespace = key\n      return this\n    }\n\n    // Get space.\n    return this.namespace\n  }\n\n  /**\n   * Freeze a processor.\n   *\n   * Frozen processors are meant to be extended and not to be configured\n   * directly.\n   *\n   * When a processor is frozen it cannot be unfrozen.\n   * New processors working the same way can be created by calling the\n   * processor.\n   *\n   * It’s possible to freeze processors explicitly by calling `.freeze()`.\n   * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n   * `.stringify()`, `.process()`, or `.processSync()` are called.\n   *\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   The current processor.\n   */\n  freeze() {\n    if (this.frozen) {\n      return this\n    }\n\n    // Cast so that we can type plugins easier.\n    // Plugins are supposed to be usable on different processors, not just on\n    // this exact processor.\n    const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n    while (++this.freezeIndex < this.attachers.length) {\n      const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      const transformer = attacher.call(self, ...options)\n\n      if (typeof transformer === 'function') {\n        this.transformers.use(transformer)\n      }\n    }\n\n    this.frozen = true\n    this.freezeIndex = Number.POSITIVE_INFINITY\n\n    return this\n  }\n\n  /**\n   * Parse text to a syntax tree.\n   *\n   * > **Note**: `parse` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `parse` performs the parse phase, not the run phase or other\n   * > phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   file to parse (optional); typically `string` or `VFile`; any value\n   *   accepted as `x` in `new VFile(x)`.\n   * @returns {ParseTree extends undefined ? Node : ParseTree}\n   *   Syntax tree representing `file`.\n   */\n  parse(file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const parser = this.parser || this.Parser\n    assertParser('parse', parser)\n    return parser(String(realFile), realFile)\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * > **Note**: `process` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `process` performs the parse, run, and stringify phases.\n   *\n   * @overload\n   * @param {Compatible | undefined} file\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<VFileWithOutput<CompileResult>>}\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`]; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n   *   Callback (optional).\n   * @returns {Promise<VFile> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise a promise, rejected with a fatal error or resolved with the\n   *   processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  process(file, done) {\n    const self = this\n\n    this.freeze()\n    assertParser('process', this.parser || this.Parser)\n    assertCompiler('process', this.compiler || this.Compiler)\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n     * @param {(error: Error | undefined) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      const realFile = vfile(file)\n      // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n      // input of the first transform).\n      const parseTree =\n        /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n          /** @type {unknown} */ (self.parse(realFile))\n        )\n\n      self.run(parseTree, realFile, function (error, tree, file) {\n        if (error || !tree || !file) {\n          return realDone(error)\n        }\n\n        // Assume `TailTree` (the output of the last transform) matches\n        // `CompileTree` (the input of the compiler).\n        const compileTree =\n          /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n            /** @type {unknown} */ (tree)\n          )\n\n        const compileResult = self.stringify(compileTree, file)\n\n        if (looksLikeAValue(compileResult)) {\n          file.value = compileResult\n        } else {\n          file.result = compileResult\n        }\n\n        realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n      })\n\n      /**\n       * @param {Error | undefined} error\n       * @param {VFileWithOutput<CompileResult> | undefined} [file]\n       * @returns {undefined}\n       */\n      function realDone(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `processSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `processSync` performs the parse, run, and stringify phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @returns {VFileWithOutput<CompileResult>}\n   *   The processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  processSync(file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {VFileWithOutput<CompileResult> | undefined} */\n    let result\n\n    this.freeze()\n    assertParser('processSync', this.parser || this.Parser)\n    assertCompiler('processSync', this.compiler || this.Compiler)\n\n    this.process(file, realDone)\n    assertDone('processSync', 'process', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n\n    return result\n\n    /**\n     * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n     */\n    function realDone(error, file) {\n      complete = true\n      bail(error)\n      result = file\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * > **Note**: `run` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `run` performs the run phase, not other phases.\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} file\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {(\n   *   RunCallback<TailTree extends undefined ? Node : TailTree> |\n   *   Compatible\n   * )} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n   *   Callback (optional).\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise, a promise rejected with a fatal error or resolved with the\n   *   transformed tree.\n   */\n  run(tree, file, done) {\n    assertNode(tree)\n    this.freeze()\n\n    const transformers = this.transformers\n\n    if (!done && typeof file === 'function') {\n      done = file\n      file = undefined\n    }\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {(\n     *   ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n     *   undefined\n     * )} resolve\n     * @param {(error: Error) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      assert(\n        typeof file !== 'function',\n        '`file` can’t be a `done` anymore, we checked'\n      )\n      const realFile = vfile(file)\n      transformers.run(tree, realFile, realDone)\n\n      /**\n       * @param {Error | undefined} error\n       * @param {Node} outputTree\n       * @param {VFile} file\n       * @returns {undefined}\n       */\n      function realDone(error, outputTree, file) {\n        const resultingTree =\n          /** @type {TailTree extends undefined ? Node : TailTree} */ (\n            outputTree || tree\n          )\n\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(resultingTree)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, resultingTree, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `runSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `runSync` performs the run phase, not other phases.\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {TailTree extends undefined ? Node : TailTree}\n   *   Transformed tree.\n   */\n  runSync(tree, file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n    let result\n\n    this.run(tree, file, realDone)\n\n    assertDone('runSync', 'run', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n    return result\n\n    /**\n     * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n     */\n    function realDone(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * Compile a syntax tree.\n   *\n   * > **Note**: `stringify` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `stringify` performs the stringify phase, not the run phase\n   * > or other phases.\n   *\n   * @param {CompileTree extends undefined ? Node : CompileTree} tree\n   *   Tree to compile.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {CompileResult extends undefined ? Value : CompileResult}\n   *   Textual representation of the tree (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most compilers\n   *   > return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  stringify(tree, file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const compiler = this.compiler || this.Compiler\n    assertCompiler('stringify', compiler)\n    assertNode(tree)\n\n    return compiler(tree, realFile)\n  }\n\n  /**\n   * Configure the processor to use a plugin, a list of usable values, or a\n   * preset.\n   *\n   * If the processor is already using a plugin, the previous plugin\n   * configuration is changed based on the options that are passed in.\n   * In other words, the plugin is not added a second time.\n   *\n   * > **Note**: `use` cannot be called on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * @example\n   *   There are many ways to pass plugins to `.use()`.\n   *   This example gives an overview:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   unified()\n   *     // Plugin with options:\n   *     .use(pluginA, {x: true, y: true})\n   *     // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n   *     .use(pluginA, {y: false, z: true})\n   *     // Plugins:\n   *     .use([pluginB, pluginC])\n   *     // Two plugins, the second with options:\n   *     .use([pluginD, [pluginE, {}]])\n   *     // Preset with plugins and settings:\n   *     .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n   *     // Settings only:\n   *     .use({settings: {position: false}})\n   *   ```\n   *\n   * @template {Array<unknown>} [Parameters=[]]\n   * @template {Node | string | undefined} [Input=undefined]\n   * @template [Output=Input]\n   *\n   * @overload\n   * @param {Preset | null | undefined} [preset]\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {PluggableList} list\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Plugin<Parameters, Input, Output>} plugin\n   * @param {...(Parameters | [boolean])} parameters\n   * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n   *\n   * @param {PluggableList | Plugin | Preset | null | undefined} value\n   *   Usable value.\n   * @param {...unknown} parameters\n   *   Parameters, when a plugin is given as a usable value.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   Current processor.\n   */\n  use(value, ...parameters) {\n    const attachers = this.attachers\n    const namespace = this.namespace\n\n    assertUnfrozen('use', this.frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, parameters)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    return this\n\n    /**\n     * @param {Pluggable} value\n     * @returns {undefined}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value, [])\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...parameters] =\n            /** @type {PluginTuple<Array<unknown>>} */ (value)\n          addPlugin(plugin, parameters)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {undefined}\n     */\n    function addPreset(result) {\n      if (!('plugins' in result) && !('settings' in result)) {\n        throw new Error(\n          'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n        )\n      }\n\n      addList(result.plugins)\n\n      if (result.settings) {\n        namespace.settings = extend(true, namespace.settings, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList | null | undefined} plugins\n     * @returns {undefined}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {Array<unknown>} parameters\n     * @returns {undefined}\n     */\n    function addPlugin(plugin, parameters) {\n      let index = -1\n      let entryIndex = -1\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entryIndex = index\n          break\n        }\n      }\n\n      if (entryIndex === -1) {\n        attachers.push([plugin, ...parameters])\n      }\n      // Only set if there was at least a `primary` value, otherwise we’d change\n      // `arguments.length`.\n      else if (parameters.length > 0) {\n        let [primary, ...rest] = parameters\n        const currentPrimary = attachers[entryIndex][1]\n        if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n          primary = extend(true, currentPrimary, primary)\n        }\n\n        attachers[entryIndex] = [plugin, primary, ...rest]\n      }\n    }\n  }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n *   This example shows how a new processor can be created (from `remark`) and linked\n *   to **stdin**(4) and **stdout**(4).\n *\n *   ```js\n *   import process from 'node:process'\n *   import concatStream from 'concat-stream'\n *   import {remark} from 'remark'\n *\n *   process.stdin.pipe(\n *     concatStream(function (buf) {\n *       process.stdout.write(String(remark().processSync(buf)))\n *     })\n *   )\n *   ```\n *\n * @returns\n *   New *unfrozen* processor (`processor`).\n *\n *   This processor is configured to work the same as its ancestor.\n *   When the descendant processor is configured in the future it does not\n *   affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n  return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","/**\n * @import {Element, Nodes, Parents, Root} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {ComponentType, JSX, ReactElement, ReactNode} from 'react'\n * @import {Options as RemarkRehypeOptions} from 'remark-rehype'\n * @import {BuildVisitor} from 'unist-util-visit'\n * @import {PluggableList, Processor} from 'unified'\n */\n\n/**\n * @callback AllowElement\n *   Filter elements.\n * @param {Readonly<Element>} element\n *   Element to check.\n * @param {number} index\n *   Index of `element` in `parent`.\n * @param {Readonly<Parents> | undefined} parent\n *   Parent of `element`.\n * @returns {boolean | null | undefined}\n *   Whether to allow `element` (default: `false`).\n */\n\n/**\n * @typedef ExtraProps\n *   Extra fields we pass.\n * @property {Element | undefined} [node]\n *   passed when `passNode` is on.\n */\n\n/**\n * @typedef {{\n *   [Key in keyof JSX.IntrinsicElements]?: ComponentType<JSX.IntrinsicElements[Key] & ExtraProps> | keyof JSX.IntrinsicElements\n * }} Components\n *   Map tag names to components.\n */\n\n/**\n * @typedef Deprecation\n *   Deprecation.\n * @property {string} from\n *   Old field.\n * @property {string} id\n *   ID in readme.\n * @property {keyof Options} [to]\n *   New field.\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n *   Filter elements (optional);\n *   `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray<string> | null | undefined} [allowedElements]\n *   Tag names to allow (default: all tag names);\n *   cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n *   Markdown.\n * @property {Components | null | undefined} [components]\n *   Map tag names to components.\n * @property {ReadonlyArray<string> | null | undefined} [disallowedElements]\n *   Tag names to disallow (default: `[]`);\n *   cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n *   List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n *   List of remark plugins to use.\n * @property {Readonly<RemarkRehypeOptions> | null | undefined} [remarkRehypeOptions]\n *   Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n *   Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n *   Extract (unwrap) what’s in disallowed elements (default: `false`);\n *   normally when say `strong` is not allowed, it and it’s children are dropped,\n *   with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n *   Change URLs (default: `defaultUrlTransform`)\n */\n\n/**\n * @typedef HooksOptionsOnly\n *   Configuration specifically for {@linkcode MarkdownHooks}.\n * @property {ReactNode | null | undefined} [fallback]\n *   Content to render while the processor processing the markdown (optional).\n */\n\n/**\n * @typedef {Options & HooksOptionsOnly} HooksOptions\n *   Configuration for {@linkcode MarkdownHooks};\n *   extends the regular {@linkcode Options} with a `fallback` prop.\n */\n\n/**\n * @callback UrlTransform\n *   Transform all URLs.\n * @param {string} url\n *   URL.\n * @param {string} key\n *   Property name (example: `'href'`).\n * @param {Readonly<Element>} node\n *   Node.\n * @returns {string | null | undefined}\n *   Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport {useEffect, useState} from 'react'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n  'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly<RemarkRehypeOptions>} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray<Readonly<Deprecation>>} */\nconst deprecations = [\n  {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {\n    from: 'allowNode',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowElement'\n  },\n  {\n    from: 'allowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowedElements'\n  },\n  {from: 'className', id: 'remove-classname'},\n  {\n    from: 'disallowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'disallowedElements'\n  },\n  {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n  {\n    from: 'includeNodeIndex',\n    id: 'change-includenodeindex-to-includeelementindex'\n  },\n  {from: 'linkTarget', id: 'remove-linktarget'},\n  {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n  {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n  {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n  {from: 'source', id: 'change-source-to-children', to: 'children'},\n  {from: 'sourcePos', id: '#remove-sourcepos'},\n  {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n  {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * This is a synchronous component.\n * When using async plugins,\n * see {@linkcode MarkdownAsync} or {@linkcode MarkdownHooks}.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {ReactElement}\n *   React element.\n */\nexport function Markdown(options) {\n  const processor = createProcessor(options)\n  const file = createFile(options)\n  return post(processor.runSync(processor.parse(file), file), options)\n}\n\n/**\n * Component to render markdown with support for async plugins\n * through async/await.\n *\n * Components returning promises are supported on the server.\n * For async support on the client,\n * see {@linkcode MarkdownHooks}.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {Promise<ReactElement>}\n *   Promise to a React element.\n */\nexport async function MarkdownAsync(options) {\n  const processor = createProcessor(options)\n  const file = createFile(options)\n  const tree = await processor.run(processor.parse(file), file)\n  return post(tree, options)\n}\n\n/**\n * Component to render markdown with support for async plugins through hooks.\n *\n * This uses `useEffect` and `useState` hooks.\n * Hooks run on the client and do not immediately render something.\n * For async support on the server,\n * see {@linkcode MarkdownAsync}.\n *\n * @param {Readonly<HooksOptions>} options\n *   Props.\n * @returns {ReactNode}\n *   React node.\n */\nexport function MarkdownHooks(options) {\n  const processor = createProcessor(options)\n  const [error, setError] = useState(\n    /** @type {Error | undefined} */ (undefined)\n  )\n  const [tree, setTree] = useState(/** @type {Root | undefined} */ (undefined))\n\n  useEffect(\n    function () {\n      let cancelled = false\n      const file = createFile(options)\n\n      processor.run(processor.parse(file), file, function (error, tree) {\n        if (!cancelled) {\n          setError(error)\n          setTree(tree)\n        }\n      })\n\n      /**\n       * @returns {undefined}\n       *   Nothing.\n       */\n      return function () {\n        cancelled = true\n      }\n    },\n    [\n      options.children,\n      options.rehypePlugins,\n      options.remarkPlugins,\n      options.remarkRehypeOptions\n    ]\n  )\n\n  if (error) throw error\n\n  return tree ? post(tree, options) : options.fallback\n}\n\n/**\n * Set up the `unified` processor.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {Processor<MdastRoot, MdastRoot, Root, undefined, undefined>}\n *   Result.\n */\nfunction createProcessor(options) {\n  const rehypePlugins = options.rehypePlugins || emptyPlugins\n  const remarkPlugins = options.remarkPlugins || emptyPlugins\n  const remarkRehypeOptions = options.remarkRehypeOptions\n    ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n    : emptyRemarkRehypeOptions\n\n  const processor = unified()\n    .use(remarkParse)\n    .use(remarkPlugins)\n    .use(remarkRehype, remarkRehypeOptions)\n    .use(rehypePlugins)\n\n  return processor\n}\n\n/**\n * Set up the virtual file.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {VFile}\n *   Result.\n */\nfunction createFile(options) {\n  const children = options.children || ''\n  const file = new VFile()\n\n  if (typeof children === 'string') {\n    file.value = children\n  } else {\n    unreachable(\n      'Unexpected value `' +\n        children +\n        '` for `children` prop, expected `string`'\n    )\n  }\n\n  return file\n}\n\n/**\n * Process the result from unified some more.\n *\n * @param {Nodes} tree\n *   Tree.\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {ReactElement}\n *   React element.\n */\nfunction post(tree, options) {\n  const allowedElements = options.allowedElements\n  const allowElement = options.allowElement\n  const components = options.components\n  const disallowedElements = options.disallowedElements\n  const skipHtml = options.skipHtml\n  const unwrapDisallowed = options.unwrapDisallowed\n  const urlTransform = options.urlTransform || defaultUrlTransform\n\n  for (const deprecation of deprecations) {\n    if (Object.hasOwn(options, deprecation.from)) {\n      unreachable(\n        'Unexpected `' +\n          deprecation.from +\n          '` prop, ' +\n          (deprecation.to\n            ? 'use `' + deprecation.to + '` instead'\n            : 'remove it') +\n          ' (see <' +\n          changelog +\n          '#' +\n          deprecation.id +\n          '> for more info)'\n      )\n    }\n  }\n\n  if (allowedElements && disallowedElements) {\n    unreachable(\n      'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n    )\n  }\n\n  visit(tree, transform)\n\n  return toJsxRuntime(tree, {\n    Fragment,\n    components,\n    ignoreInvalidStyle: true,\n    jsx,\n    jsxs,\n    passKeys: true,\n    passNode: true\n  })\n\n  /** @type {BuildVisitor<Root>} */\n  function transform(node, index, parent) {\n    if (node.type === 'raw' && parent && typeof index === 'number') {\n      if (skipHtml) {\n        parent.children.splice(index, 1)\n      } else {\n        parent.children[index] = {type: 'text', value: node.value}\n      }\n\n      return index\n    }\n\n    if (node.type === 'element') {\n      /** @type {string} */\n      let key\n\n      for (key in urlAttributes) {\n        if (\n          Object.hasOwn(urlAttributes, key) &&\n          Object.hasOwn(node.properties, key)\n        ) {\n          const value = node.properties[key]\n          const test = urlAttributes[key]\n          if (test === null || test.includes(node.tagName)) {\n            node.properties[key] = urlTransform(String(value || ''), key, node)\n          }\n        }\n      }\n    }\n\n    if (node.type === 'element') {\n      let remove = allowedElements\n        ? !allowedElements.includes(node.tagName)\n        : disallowedElements\n          ? disallowedElements.includes(node.tagName)\n          : false\n\n      if (!remove && allowElement && typeof index === 'number') {\n        remove = !allowElement(node, index, parent)\n      }\n\n      if (remove && parent && typeof index === 'number') {\n        if (unwrapDisallowed && node.children) {\n          parent.children.splice(index, 1, ...node.children)\n        } else {\n          parent.children.splice(index, 1)\n        }\n\n        return index\n      }\n    }\n  }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n *   URL.\n * @returns {string}\n *   Safe URL.\n */\nexport function defaultUrlTransform(value) {\n  // Same as:\n  // <https://github.com/micromark/micromark/blob/929275e/packages/micromark-util-sanitize-uri/dev/index.js#L34>\n  // But without the `encode` part.\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n\n  if (\n    // If there is no protocol, it’s relative.\n    colon === -1 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash !== -1 && colon > slash) ||\n    (questionMark !== -1 && colon > questionMark) ||\n    (numberSign !== -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    safeProtocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n\n  return ''\n}\n","import * as React from \"react\"\nimport Markdown, {\n    type Options as MarkdownOptions,\n    type Components as MarkdownComponents,\n} from \"react-markdown\"\nimport { remarkPlainLinks } from \"./markdown/remarkPlainLinks.js\"\nimport { visit } from \"unist-util-visit\"\nimport type { Plugin } from \"unified\"\nimport type { Root } from \"hast\"\n\ntype SimpleMarkdownTextProps = {\n    text: string\n    useParagraphs?: boolean // by default, text is wrapped in <p> tags\n}\n\nconst transformDodLinks: Plugin<[], Root> = () => {\n    return function (tree) {\n        visit(tree, \"element\", function (node) {\n            if (node.tagName === \"a\")\n                if (\n                    node.properties &&\n                    typeof node.properties.href === \"string\" &&\n                    node.properties.href.startsWith(\"#dod:\")\n                ) {\n                    // use a regex to split the #dod: part from the term of the href. Use a named capture group\n                    // to capture the term\n                    const match = node.properties.href.match(/#dod:(?<term>.+)/)\n                    if (match) {\n                        node.tagName = \"span\"\n                        node.properties.class = \"dod-span\"\n                        node.properties[\"data-id\"] = match.groups?.term\n                        node.properties[\"aria-expanded\"] = \"false\"\n                        node.properties[\"tabindex\"] = 0\n                        delete node.properties.href\n                    }\n                }\n        })\n    }\n}\n\n// NOTE: We currently don't need to render markdown in React. We should be able\n// to render it only during baking/on the server and pass the HTML as string.\n// This way we could reduce the bundle size by not including a markdown library\n// and improve performance.\nexport class SimpleMarkdownText extends React.Component<SimpleMarkdownTextProps> {\n    get useParagraphs(): boolean {\n        return this.props.useParagraphs ?? true\n    }\n\n    get markdownCustomComponents(): MarkdownComponents | undefined {\n        if (!this.useParagraphs) {\n            // \"unwrap\" the text by rendering <p /> as a react fragment\n            return {\n                p: ({ children }) => (\n                    <React.Fragment>{children}</React.Fragment>\n                ),\n            }\n        }\n\n        return undefined\n    }\n\n    override render(): React.ReactElement | null {\n        const options: Omit<MarkdownOptions, \"children\"> = {\n            rehypePlugins: [transformDodLinks],\n            remarkPlugins: [remarkPlainLinks],\n            components: this.markdownCustomComponents,\n        }\n        return <Markdown {...options}>{this.props.text}</Markdown>\n    }\n}\n\n// TODO: remove this component once all backported indicators\n// etc have switched from HTML to markdown for their sources\nexport const HtmlOrSimpleMarkdownText = (props: {\n    text: string\n}): React.ReactElement => {\n    // check the text for closing a, li or p tags. If\n    // one is found, render using dangerouslySetInnerHTML,\n    // otherwise use SimpleMarkdownText\n    const { text } = props\n    const htmlRegex = /<\\/(a|li|p)>/\n    const match = text.match(htmlRegex)\n    if (match) {\n        return <span dangerouslySetInnerHTML={{ __html: text }} />\n    } else {\n        return <SimpleMarkdownText text={text} />\n    }\n}\n","import {\n    OwidGdoc,\n    ContentGraphLinkType,\n    OwidGdocType,\n} from \"@ourworldindata/types\"\nimport {\n    spansToUnformattedPlainText,\n    gdocUrlRegex,\n    Span,\n    Url,\n    detailOnDemandRegex,\n    guidedChartRegex,\n} from \"@ourworldindata/utils\"\nimport urlSlug from \"url-slug\"\nimport { P, match } from \"ts-pattern\"\n\nexport function getLinkType(urlString: string): ContentGraphLinkType {\n    const url = Url.fromURL(urlString)\n    if (url.isGoogleDoc) {\n        return ContentGraphLinkType.Gdoc\n    }\n    if (url.isGrapher) {\n        return ContentGraphLinkType.Grapher\n    }\n    if (url.isExplorer) {\n        return ContentGraphLinkType.Explorer\n    }\n    if (url.isDod) {\n        return ContentGraphLinkType.Dod\n    }\n    if (url.isGuidedChart) {\n        return ContentGraphLinkType.GuidedChart\n    }\n    return ContentGraphLinkType.Url\n}\n\nexport function checkIsInternalLink(url: string): boolean {\n    return [\"gdoc\", \"grapher\", \"explorer\"].includes(getLinkType(url))\n}\n\nexport function getUrlTarget(urlString: string): string {\n    const url = Url.fromURL(urlString)\n    if (url.isGoogleDoc) {\n        const gdocsMatch = urlString.match(gdocUrlRegex)\n        if (gdocsMatch) {\n            const [_, gdocId] = gdocsMatch\n            return gdocId\n        }\n    }\n    if (url.isDod) {\n        const dodMatch = urlString.match(detailOnDemandRegex)\n        if (dodMatch) {\n            const [_, dodId] = dodMatch\n            return dodId\n        }\n    }\n    if (url.isGuidedChart) {\n        const guidedChartMatch = urlString.match(guidedChartRegex)\n        if (guidedChartMatch) {\n            const [_, guidedChartId] = guidedChartMatch\n            return guidedChartId\n        }\n    }\n    if ((url.isGrapher || url.isExplorer) && url.slug) {\n        return url.slug\n    }\n    return urlString\n}\n\nexport function convertHeadingTextToId(headingText: Span[]): string {\n    return urlSlug(spansToUnformattedPlainText(headingText))\n}\n\nexport function getPrefixedGdocPath(\n    prefix: string,\n    gdoc: { slug: string; content: { type?: OwidGdocType } }\n): string {\n    return match(gdoc)\n        .with(\n            {\n                content: { type: OwidGdocType.Homepage },\n            },\n            () => prefix\n        )\n        .with(\n            {\n                content: {\n                    type: P.union(\n                        OwidGdocType.Article,\n                        OwidGdocType.TopicPage,\n                        OwidGdocType.LinearTopicPage,\n                        OwidGdocType.AboutPage,\n                        OwidGdocType.Announcement\n                    ),\n                },\n            },\n            () => `${prefix}/${gdoc.slug}`\n        )\n        .with(\n            {\n                content: { type: OwidGdocType.Profile },\n            },\n            () => `${prefix}/profile/${gdoc.slug}`\n        )\n        .with(\n            {\n                content: { type: OwidGdocType.DataInsight },\n            },\n            () => `${prefix}/data-insights/${gdoc.slug}`\n        )\n        .with(\n            {\n                content: { type: OwidGdocType.Author },\n            },\n            () => `${prefix}/team/${gdoc.slug}`\n        )\n        .with(\n            {\n                content: {\n                    type: P.optional(P.union(OwidGdocType.Fragment)),\n                },\n            },\n            () => \"\"\n        )\n        .exhaustive()\n}\n\nexport const getBakePath = (\n    bakedSiteDir: string,\n    gdoc: { slug: string; content: { type?: OwidGdocType } }\n): string => {\n    return getPrefixedGdocPath(bakedSiteDir, gdoc)\n}\n\nexport const getCanonicalUrl = (\n    baseUrl: string,\n    gdoc: { slug: string; content: { type?: OwidGdocType } }\n): string => {\n    return getPrefixedGdocPath(baseUrl, gdoc)\n}\n\nexport const getCanonicalPath = (slug: string, type: OwidGdocType): string => {\n    return getCanonicalUrl(\"\", {\n        slug,\n        content: {\n            type,\n        },\n    })\n}\n\nexport function getPageTitle(gdoc: OwidGdoc) {\n    return match(gdoc)\n        .with(\n            {\n                content: {\n                    type: OwidGdocType.Homepage,\n                },\n            },\n            // <Head> uses the default title of \"Our World in Data\" when pageTitle is undefined\n            // Otherwise we'd get \" - Our World in Data\" appended to whatever title we return here\n            () => undefined\n        )\n        .with(\n            {\n                content: {\n                    type: P.union(\n                        OwidGdocType.Article,\n                        OwidGdocType.TopicPage,\n                        OwidGdocType.LinearTopicPage,\n                        OwidGdocType.AboutPage,\n                        OwidGdocType.DataInsight,\n                        OwidGdocType.Author,\n                        OwidGdocType.Announcement\n                    ),\n                },\n            },\n            (match) => match.content.title\n        )\n        .with(\n            {\n                content: { type: OwidGdocType.Profile },\n            },\n            (match) => {\n                const entityName = match.content.instantiatedEntity?.name\n                const isCountry = match.content.instantiatedEntity?.isCountry\n                const profileType = isCountry ? \"Country\" : \"Region\"\n                // e.g. \"Energy Country Profile\"\n                const profileTitle = `${match.content.title} ${profileType} Profile`\n\n                return entityName\n                    ? `${entityName} - ${profileTitle}`\n                    : ` ${profileTitle}`\n            }\n        )\n        .with(\n            {\n                content: {\n                    type: P.optional(P.union(OwidGdocType.Fragment, undefined)),\n                },\n            },\n            () => undefined\n        )\n        .exhaustive()\n}\n","/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\nconst prefix = \"fas\";\nconst fa0 = {\n  prefix: 'fas',\n  iconName: '0',\n  icon: [320, 512, [], \"30\", \"M0 192C0 103.6 71.6 32 160 32s160 71.6 160 160l0 128c0 88.4-71.6 160-160 160S0 408.4 0 320L0 192zM160 96c-53 0-96 43-96 96l0 128c0 53 43 96 96 96s96-43 96-96l0-128c0-53-43-96-96-96z\"]\n};\nconst fa1 = {\n  prefix: 'fas',\n  iconName: '1',\n  icon: [256, 512, [], \"31\", \"M160 64c0-11.8-6.5-22.6-16.9-28.2s-23-5-32.8 1.6l-96 64C-.5 111.2-4.4 131 5.4 145.8s29.7 18.7 44.4 8.9L96 123.8 96 416l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-352z\"]\n};\nconst fa2 = {\n  prefix: 'fas',\n  iconName: '2',\n  icon: [320, 512, [], \"32\", \"M142.9 96c-21.5 0-42.2 8.5-57.4 23.8L54.6 150.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L40.2 74.5C67.5 47.3 104.4 32 142.9 32C223 32 288 97 288 177.1c0 38.5-15.3 75.4-42.5 102.6L109.3 416 288 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L200.2 234.5c15.2-15.2 23.8-35.9 23.8-57.4c0-44.8-36.3-81.1-81.1-81.1z\"]\n};\nconst fa3 = {\n  prefix: 'fas',\n  iconName: '3',\n  icon: [320, 512, [], \"33\", \"M0 64C0 46.3 14.3 32 32 32l240 0c13.2 0 25 8.1 29.8 20.4s1.5 26.3-8.2 35.2L162.3 208l21.7 0c75.1 0 136 60.9 136 136s-60.9 136-136 136l-78.6 0C63 480 24.2 456 5.3 418.1l-1.9-3.8c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l1.9 3.8c8.1 16.3 24.8 26.5 42.9 26.5l78.6 0c39.8 0 72-32.2 72-72s-32.2-72-72-72L80 272c-13.2 0-25-8.1-29.8-20.4s-1.5-26.3 8.2-35.2L189.7 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nconst fa4 = {\n  prefix: 'fas',\n  iconName: '4',\n  icon: [384, 512, [], \"34\", \"M189 77.6c7.5-16 .7-35.1-15.3-42.6s-35.1-.7-42.6 15.3L3 322.4c-4.7 9.9-3.9 21.5 1.9 30.8S21 368 32 368l224 0 0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-144c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L82.4 304 189 77.6z\"]\n};\nconst fa5 = {\n  prefix: 'fas',\n  iconName: '5',\n  icon: [320, 512, [], \"35\", \"M32.5 58.3C35.3 43.1 48.5 32 64 32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L90.7 96 70.3 208 184 208c75.1 0 136 60.9 136 136s-60.9 136-136 136l-83.5 0c-39.4 0-75.4-22.3-93-57.5l-4.1-8.2c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l4.1 8.2c6.8 13.6 20.6 22.1 35.8 22.1l83.5 0c39.8 0 72-32.2 72-72s-32.2-72-72-72L32 272c-9.5 0-18.5-4.2-24.6-11.5s-8.6-16.9-6.9-26.2l32-176z\"]\n};\nconst fa6 = {\n  prefix: 'fas',\n  iconName: '6',\n  icon: [320, 512, [], \"36\", \"M232.4 84.7c11.4-13.5 9.7-33.7-3.8-45.1s-33.7-9.7-45.1 3.8L38.6 214.7C14.7 242.9 1.1 278.4 .1 315.2c0 1.4-.1 2.9-.1 4.3l0 .5c0 88.4 71.6 160 160 160s160-71.6 160-160c0-85.5-67.1-155.4-151.5-159.8l63.9-75.6zM256 320A96 96 0 1 1 64 320a96 96 0 1 1 192 0z\"]\n};\nconst fa7 = {\n  prefix: 'fas',\n  iconName: '7',\n  icon: [320, 512, [], \"37\", \"M0 64C0 46.3 14.3 32 32 32l256 0c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-224 384c-8.9 15.3-28.5 20.4-43.8 11.5s-20.4-28.5-11.5-43.8L232.3 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nconst fa8 = {\n  prefix: 'fas',\n  iconName: '8',\n  icon: [320, 512, [], \"38\", \"M304 160c0-70.7-57.3-128-128-128l-32 0C73.3 32 16 89.3 16 160c0 34.6 13.7 66 36 89C20.5 272.3 0 309.8 0 352c0 70.7 57.3 128 128 128l64 0c70.7 0 128-57.3 128-128c0-42.2-20.5-79.7-52-103c22.3-23 36-54.4 36-89zM176.1 288l15.9 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64s28.7-64 64-64l15.9 0c0 0 .1 0 .1 0l32 0c0 0 .1 0 .1 0zm0-64c0 0 0 0 0 0l-32 0c0 0 0 0 0 0c-35.3 0-64-28.7-64-64c0-35.3 28.7-64 64-64l32 0c35.3 0 64 28.7 64 64c0 35.3-28.6 64-64 64z\"]\n};\nconst fa9 = {\n  prefix: 'fas',\n  iconName: '9',\n  icon: [320, 512, [], \"39\", \"M64 192a96 96 0 1 0 192 0A96 96 0 1 0 64 192zm87.5 159.8C67.1 347.4 0 277.5 0 192C0 103.6 71.6 32 160 32s160 71.6 160 160c0 2.6-.1 5.3-.2 7.9c-1.7 35.7-15.2 70-38.4 97.4l-145 171.4c-11.4 13.5-31.6 15.2-45.1 3.8s-15.2-31.6-3.8-45.1l63.9-75.6z\"]\n};\nconst faFillDrip = {\n  prefix: 'fas',\n  iconName: 'fill-drip',\n  icon: [576, 512, [], \"f576\", \"M41.4 9.4C53.9-3.1 74.1-3.1 86.6 9.4L168 90.7l53.1-53.1c28.1-28.1 73.7-28.1 101.8 0L474.3 189.1c28.1 28.1 28.1 73.7 0 101.8L283.9 481.4c-37.5 37.5-98.3 37.5-135.8 0L30.6 363.9c-37.5-37.5-37.5-98.3 0-135.8L122.7 136 41.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zm176 221.3L168 181.3 75.9 273.4c-4.2 4.2-7 9.3-8.4 14.6l319.2 0 42.3-42.3c3.1-3.1 3.1-8.2 0-11.3L277.7 82.9c-3.1-3.1-8.2-3.1-11.3 0L213.3 136l49.4 49.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0zM512 512c-35.3 0-64-28.7-64-64c0-25.2 32.6-79.6 51.2-108.7c6-9.4 19.5-9.4 25.5 0C543.4 368.4 576 422.8 576 448c0 35.3-28.7 64-64 64z\"]\n};\nconst faArrowsToCircle = {\n  prefix: 'fas',\n  iconName: 'arrows-to-circle',\n  icon: [640, 512, [], \"e4bd\", \"M9.4 9.4C21.9-3.1 42.1-3.1 54.6 9.4L160 114.7 160 96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96c0 4.3-.9 8.5-2.4 12.2c-1.6 3.7-3.8 7.3-6.9 10.3l-.1 .1c-3.1 3-6.6 5.3-10.3 6.9c-3.8 1.6-7.9 2.4-12.2 2.4l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.7 0L9.4 54.6C-3.1 42.1-3.1 21.9 9.4 9.4zM256 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM114.7 352L96 352c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0s0 0 0 0l.1 0c8.8 0 16.7 3.6 22.5 9.3l.1 .1c3 3.1 5.3 6.6 6.9 10.3c1.6 3.8 2.4 7.9 2.4 12.2l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.7L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L114.7 352zM416 96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 18.7L585.4 9.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L525.3 160l18.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-8.8 0-16.8-3.6-22.6-9.3l-.1-.1c-3-3.1-5.3-6.6-6.9-10.3s-2.4-7.8-2.4-12.2l0-.1s0 0 0 0l0-96zM525.3 352L630.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L480 397.3l0 18.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96s0 0 0 0l0-.1c0-4.3 .9-8.4 2.4-12.2c1.6-3.8 3.9-7.3 6.9-10.4c5.8-5.8 13.7-9.3 22.5-9.4l.1 0s0 0 0 0l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.7 0z\"]\n};\nconst faCircleChevronRight = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-right',\n  icon: [512, 512, [\"chevron-circle-right\"], \"f138\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM241 377c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l87-87-87-87c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L345 239c9.4 9.4 9.4 24.6 0 33.9L241 377z\"]\n};\nconst faChevronCircleRight = faCircleChevronRight;\nconst faAt = {\n  prefix: 'fas',\n  iconName: 'at',\n  icon: [512, 512, [61946], \"40\", \"M256 64C150 64 64 150 64 256s86 192 192 192c17.7 0 32 14.3 32 32s-14.3 32-32 32C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256l0 32c0 53-43 96-96 96c-29.3 0-55.6-13.2-73.2-33.9C320 371.1 289.5 384 256 384c-70.7 0-128-57.3-128-128s57.3-128 128-128c27.9 0 53.7 8.9 74.7 24.1c5.7-5 13.1-8.1 21.3-8.1c17.7 0 32 14.3 32 32l0 80 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32c0-106-86-192-192-192zm64 192a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faTrashCan = {\n  prefix: 'fas',\n  iconName: 'trash-can',\n  icon: [448, 512, [61460, \"trash-alt\"], \"f2ed\", \"M135.2 17.7C140.6 6.8 151.7 0 163.8 0L284.2 0c12.1 0 23.2 6.8 28.6 17.7L320 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 7.2-14.3zM32 128l384 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-320zm96 64c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224c0-8.8-7.2-16-16-16z\"]\n};\nconst faTrashAlt = faTrashCan;\nconst faTextHeight = {\n  prefix: 'fas',\n  iconName: 'text-height',\n  icon: [576, 512, [], \"f034\", \"M64 128l0-32 64 0 0 320-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-320 64 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48c0-26.5-21.5-48-48-48L160 32 48 32C21.5 32 0 53.5 0 80l0 48c0 17.7 14.3 32 32 32s32-14.3 32-32zM502.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 192-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0 0-192 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"]\n};\nconst faUserXmark = {\n  prefix: 'fas',\n  iconName: 'user-xmark',\n  icon: [640, 512, [\"user-times\"], \"f235\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM471 143c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faUserTimes = faUserXmark;\nconst faStethoscope = {\n  prefix: 'fas',\n  iconName: 'stethoscope',\n  icon: [576, 512, [129658], \"f0f1\", \"M142.4 21.9c5.6 16.8-3.5 34.9-20.2 40.5L96 71.1 96 192c0 53 43 96 96 96s96-43 96-96l0-120.9-26.1-8.7c-16.8-5.6-25.8-23.7-20.2-40.5s23.7-25.8 40.5-20.2l26.1 8.7C334.4 19.1 352 43.5 352 71.1L352 192c0 77.2-54.6 141.6-127.3 156.7C231 404.6 278.4 448 336 448c61.9 0 112-50.1 112-112l0-70.7c-28.3-12.3-48-40.5-48-73.3c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 70.7c0 97.2-78.8 176-176 176c-92.9 0-168.9-71.9-175.5-163.1C87.2 334.2 32 269.6 32 192L32 71.1c0-27.5 17.6-52 43.8-60.7l26.1-8.7c16.8-5.6 34.9 3.5 40.5 20.2zM480 224a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faMessage = {\n  prefix: 'fas',\n  iconName: 'message',\n  icon: [512, 512, [\"comment-alt\"], \"f27a\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 35.3 28.7 64 64 64l96 0 0 80c0 6.1 3.4 11.6 8.8 14.3s11.9 2.1 16.8-1.5L309.3 416 448 416c35.3 0 64-28.7 64-64l0-288c0-35.3-28.7-64-64-64L64 0z\"]\n};\nconst faCommentAlt = faMessage;\nconst faInfo = {\n  prefix: 'fas',\n  iconName: 'info',\n  icon: [192, 512, [], \"f129\", \"M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 224 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-192-32 0c-17.7 0-32-14.3-32-32z\"]\n};\nconst faDownLeftAndUpRightToCenter = {\n  prefix: 'fas',\n  iconName: 'down-left-and-up-right-to-center',\n  icon: [512, 512, [\"compress-alt\"], \"f422\", \"M439 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39L439 7zM72 272l144 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39L73 505c-9.4 9.4-24.6 9.4-33.9 0L7 473c-9.4-9.4-9.4-24.6 0-33.9l87-87L55 313c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8z\"]\n};\nconst faCompressAlt = faDownLeftAndUpRightToCenter;\nconst faExplosion = {\n  prefix: 'fas',\n  iconName: 'explosion',\n  icon: [576, 512, [], \"e4e9\", \"M499.6 11.3c6.7-10.7 20.5-14.5 31.7-8.5s15.8 19.5 10.6 31L404.8 338.6c2.2 2.3 4.3 4.7 6.3 7.1l97.2-54.7c10.5-5.9 23.6-3.1 30.9 6.4s6.3 23-2.2 31.5l-87 87-71.4 0c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64l-79.6 0L42.3 363.7c-9.7-6.7-13.1-19.6-7.9-30.3s17.4-15.9 28.7-12.4l97.2 30.4c3-3.9 6.1-7.7 9.4-11.3L107.4 236.3c-6.1-10.1-3.9-23.1 5.1-30.7s22.2-7.5 31.1 .1L246 293.6c1.5-.4 3-.8 4.5-1.1l13.6-142.7c1.2-12.3 11.5-21.7 23.9-21.7s22.7 9.4 23.9 21.7l13.5 141.9L499.6 11.3zM64 448s0 0 0 0l448 0s0 0 0 0l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0zM288 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24z\"]\n};\nconst faFileLines = {\n  prefix: 'fas',\n  iconName: 'file-lines',\n  icon: [384, 512, [128441, 128462, 61686, \"file-alt\", \"file-text\"], \"f15c\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM112 256l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faFileAlt = faFileLines;\nconst faFileText = faFileLines;\nconst faWaveSquare = {\n  prefix: 'fas',\n  iconName: 'wave-square',\n  icon: [640, 512, [], \"f83e\", \"M128 64c0-17.7 14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 352 96 0 0-160c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0 0 160c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-352-96 0 0 160c0 17.7-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0 0-160z\"]\n};\nconst faRing = {\n  prefix: 'fas',\n  iconName: 'ring',\n  icon: [512, 512, [], \"f70b\", \"M64 208c0 7.8 4.4 18.7 17.1 30.3C126.5 214.1 188.9 200 256 200s129.5 14.1 174.9 38.3C443.6 226.7 448 215.8 448 208c0-12.3-10.8-32-47.9-50.6C364.9 139.8 314 128 256 128s-108.9 11.8-144.1 29.4C74.8 176 64 195.7 64 208zm192 40c-47 0-89.3 7.6-122.9 19.7C166.3 280.2 208.8 288 256 288s89.7-7.8 122.9-20.3C345.3 255.6 303 248 256 248zM0 208c0-49.6 39.4-85.8 83.3-107.8C129.1 77.3 190.3 64 256 64s126.9 13.3 172.7 36.2c43.9 22 83.3 58.2 83.3 107.8l0 96c0 49.6-39.4 85.8-83.3 107.8C382.9 434.7 321.7 448 256 448s-126.9-13.3-172.7-36.2C39.4 389.8 0 353.6 0 304l0-96z\"]\n};\nconst faBuildingUn = {\n  prefix: 'fas',\n  iconName: 'building-un',\n  icon: [384, 512, [], \"e4d9\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM237.3 71.1l34.7 52L272 80c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52 0 43.2c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM112 80l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faDiceThree = {\n  prefix: 'fas',\n  iconName: 'dice-three',\n  icon: [448, 512, [9858], \"f527\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faCalendarDays = {\n  prefix: 'fas',\n  iconName: 'calendar-days',\n  icon: [448, 512, [\"calendar-alt\"], \"f073\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zm64 80l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm128 0l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM64 400l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faCalendarAlt = faCalendarDays;\nconst faAnchorCircleCheck = {\n  prefix: 'fas',\n  iconName: 'anchor-circle-check',\n  icon: [640, 512, [], \"e4aa\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2L320 448l0-80 0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faBuildingCircleArrowRight = {\n  prefix: 'fas',\n  iconName: 'building-circle-arrow-right',\n  icon: [640, 512, [], \"e4d1\", \"M0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 184.2c-39.1 32.3-64 81.1-64 135.8c0 49.5 20.4 94.2 53.3 126.2C364.5 505.1 351.1 512 336 512l-96 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-96 0c-26.5 0-48-21.5-48-48L0 48zM80 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm112-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM64 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L80 96c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm96 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm140.7-67.3c-6.2 6.2-6.2 16.4 0 22.6L521.4 352 432 352c-8.8 0-16 7.2-16 16s7.2 16 16 16l89.4 0-28.7 28.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56-56c6.2-6.2 6.2-16.4 0-22.6l-56-56c-6.2-6.2-16.4-6.2-22.6 0z\"]\n};\nconst faVolleyball = {\n  prefix: 'fas',\n  iconName: 'volleyball',\n  icon: [512, 512, [127952, \"volleyball-ball\"], \"f45f\", \"M511.8 267.4c-26.1 8.7-53.4 13.8-81 15.1c9.2-105.3-31.5-204.2-103.2-272.4C434.1 41.1 512 139.5 512 256c0 3.8-.1 7.6-.2 11.4zm-3.9 34.7c-5.8 32-17.6 62-34.2 88.7c-97.5 48.5-217.7 42.6-311.9-24.5c23.7-36.2 55.4-67.7 94.5-91.8c79.9 43.2 170.1 50.8 251.6 27.6zm-236-55.5c-2.5-90.9-41.1-172.7-101.9-231.7C196.8 5.2 225.8 0 256 0c2.7 0 5.3 0 7.9 .1c90.8 60.2 145.7 167.2 134.7 282.3c-43.1-2.4-86.4-14.1-126.8-35.9zM138 28.8c20.6 18.3 38.7 39.4 53.7 62.6C95.9 136.1 30.6 220.8 7.3 316.9C2.5 297.4 0 277 0 256C0 157.2 56 71.5 138 28.8zm69.6 90.5c19.5 38.6 31 81.9 32.3 127.7C162.5 294.6 110.9 368.9 90.2 451C66 430.4 45.6 405.4 30.4 377.2c6.7-108.7 71.9-209.9 177.1-257.9zM256 512c-50.7 0-98-14.7-137.8-40.2c5.6-27 14.8-53.1 27.4-77.7C232.2 454.6 338.1 468.8 433 441c-46 44-108.3 71-177 71z\"]\n};\nconst faVolleyballBall = faVolleyball;\nconst faArrowsUpToLine = {\n  prefix: 'fas',\n  iconName: 'arrows-up-to-line',\n  icon: [576, 512, [], \"e4c2\", \"M32 96l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64S14.3 96 32 96zM9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 237.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96zm320 45.3c12.5 12.5 32.8 12.5 45.3 0L416 237.3 416 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3z\"]\n};\nconst faSortDown = {\n  prefix: 'fas',\n  iconName: 'sort-down',\n  icon: [320, 512, [\"sort-desc\"], \"f0dd\", \"M182.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l256 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128z\"]\n};\nconst faSortDesc = faSortDown;\nconst faCircleMinus = {\n  prefix: 'fas',\n  iconName: 'circle-minus',\n  icon: [512, 512, [\"minus-circle\"], \"f056\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM184 232l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faMinusCircle = faCircleMinus;\nconst faDoorOpen = {\n  prefix: 'fas',\n  iconName: 'door-open',\n  icon: [576, 512, [], \"f52b\", \"M320 32c0-9.9-4.5-19.2-12.3-25.2S289.8-1.4 280.2 1l-179.9 45C79 51.3 64 70.5 64 92.5L64 448l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 192 0 32 0 0-32 0-448zM256 256c0 17.7-10.7 32-24 32s-24-14.3-24-32s10.7-32 24-32s24 14.3 24 32zm96-128l96 0 0 352c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-320c0-35.3-28.7-64-64-64l-96 0 0 64z\"]\n};\nconst faRightFromBracket = {\n  prefix: 'fas',\n  iconName: 'right-from-bracket',\n  icon: [512, 512, [\"sign-out-alt\"], \"f2f5\", \"M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"]\n};\nconst faSignOutAlt = faRightFromBracket;\nconst faAtom = {\n  prefix: 'fas',\n  iconName: 'atom',\n  icon: [512, 512, [9883], \"f5d2\", \"M256 398.8c-11.8 5.1-23.4 9.7-34.9 13.5c16.7 33.8 31 35.7 34.9 35.7s18.1-1.9 34.9-35.7c-11.4-3.9-23.1-8.4-34.9-13.5zM446 256c33 45.2 44.3 90.9 23.6 128c-20.2 36.3-62.5 49.3-115.2 43.2c-22 52.1-55.6 84.8-98.4 84.8s-76.4-32.7-98.4-84.8c-52.7 6.1-95-6.8-115.2-43.2C21.7 346.9 33 301.2 66 256c-33-45.2-44.3-90.9-23.6-128c20.2-36.3 62.5-49.3 115.2-43.2C179.6 32.7 213.2 0 256 0s76.4 32.7 98.4 84.8c52.7-6.1 95 6.8 115.2 43.2c20.7 37.1 9.4 82.8-23.6 128zm-65.8 67.4c-1.7 14.2-3.9 28-6.7 41.2c31.8 1.4 38.6-8.7 40.2-11.7c2.3-4.2 7-17.9-11.9-48.1c-6.8 6.3-14 12.5-21.6 18.6zm-6.7-175.9c2.8 13.1 5 26.9 6.7 41.2c7.6 6.1 14.8 12.3 21.6 18.6c18.9-30.2 14.2-44 11.9-48.1c-1.6-2.9-8.4-13-40.2-11.7zM290.9 99.7C274.1 65.9 259.9 64 256 64s-18.1 1.9-34.9 35.7c11.4 3.9 23.1 8.4 34.9 13.5c11.8-5.1 23.4-9.7 34.9-13.5zm-159 88.9c1.7-14.3 3.9-28 6.7-41.2c-31.8-1.4-38.6 8.7-40.2 11.7c-2.3 4.2-7 17.9 11.9 48.1c6.8-6.3 14-12.5 21.6-18.6zM110.2 304.8C91.4 335 96 348.7 98.3 352.9c1.6 2.9 8.4 13 40.2 11.7c-2.8-13.1-5-26.9-6.7-41.2c-7.6-6.1-14.8-12.3-21.6-18.6zM336 256a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zm-80-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSoap = {\n  prefix: 'fas',\n  iconName: 'soap',\n  icon: [512, 512, [129532], \"e06e\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM416 32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 160c0 27.6-11.7 52.5-30.4 70.1C422.1 275.7 448 310.8 448 352c0 53-43 96-96 96l-192 0c-53 0-96-43-96-96s43-96 96-96l88.4 0c-15.2-17-24.4-39.4-24.4-64L96 192c-53 0-96 43-96 96L0 416c0 53 43 96 96 96l320 0c53 0 96-43 96-96l0-128c0-53-43-96-96-96zM160 288c-35.3 0-64 28.7-64 64s28.7 64 64 64l192 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0-160 0z\"]\n};\nconst faIcons = {\n  prefix: 'fas',\n  iconName: 'icons',\n  icon: [512, 512, [\"heart-music-camera-bolt\"], \"f86d\", \"M500.3 7.3C507.7 13.3 512 22.4 512 32l0 144c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48l0-57L352 90.2 352 208c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48l0-96c0-15.3 10.8-28.4 25.7-31.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM74.7 304l11.8-17.8c5.9-8.9 15.9-14.2 26.6-14.2l61.7 0c10.7 0 20.7 5.3 26.6 14.2L213.3 304l26.7 0c26.5 0 48 21.5 48 48l0 112c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 352c0-26.5 21.5-48 48-48l26.7 0zM192 408a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM478.7 278.3L440.3 368l55.7 0c6.7 0 12.6 4.1 15 10.4s.6 13.3-4.4 17.7l-128 112c-5.6 4.9-13.9 5.3-19.9 .9s-8.2-12.4-5.3-19.2L391.7 400 336 400c-6.7 0-12.6-4.1-15-10.4s-.6-13.3 4.4-17.7l128-112c5.6-4.9 13.9-5.3 19.9-.9s8.2 12.4 5.3 19.2zm-339-59.2c-6.5 6.5-17 6.5-23 0L19.9 119.2c-28-29-26.5-76.9 5-103.9c27-23.5 68.4-19 93.4 6.5l10 10.5 9.5-10.5c25-25.5 65.9-30 93.9-6.5c31 27 32.5 74.9 4.5 103.9l-96.4 99.9z\"]\n};\nconst faHeartMusicCameraBolt = faIcons;\nconst faMicrophoneLinesSlash = {\n  prefix: 'fas',\n  iconName: 'microphone-lines-slash',\n  icon: [640, 512, [\"microphone-alt-slash\"], \"f539\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24 0 16c0 21.2-5.1 41.1-14.2 58.7L416 300.8l0-44.8-57.1 0-34.5-27c2.9-3.1 7-5 11.6-5l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0c0-53-43-96-96-96s-96 43-96 96l0 54.3L38.8 5.1zm362.5 407l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128l0-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c20.4-2.8 39.7-9.1 57.3-18.2z\"]\n};\nconst faMicrophoneAltSlash = faMicrophoneLinesSlash;\nconst faBridgeCircleCheck = {\n  prefix: 'fas',\n  iconName: 'bridge-circle-check',\n  icon: [640, 512, [], \"e4c9\", \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32l40 0 0 64-72 0 0 128c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2l0-72.2-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM488 96l0 64-80 0 0-64 80 0zM360 96l0 64-80 0 0-64 80 0zM232 96l0 64-80 0 0-64 80 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faPumpMedical = {\n  prefix: 'fas',\n  iconName: 'pump-medical',\n  icon: [448, 512, [], \"e06a\", \"M128 32l0 96 128 0 0-32 60.1 0c4.2 0 8.3 1.7 11.3 4.7l33.9 33.9c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L372.7 55.4c-15-15-35.4-23.4-56.6-23.4L256 32c0-17.7-14.3-32-32-32L160 0c-17.7 0-32 14.3-32 32zM117.4 160c-33.3 0-61 25.5-63.8 58.7L35 442.7C31.9 480 61.3 512 98.8 512l186.4 0c37.4 0 66.9-32 63.8-69.3l-18.7-224c-2.8-33.2-30.5-58.7-63.8-58.7l-149.1 0zM216 280l0 32 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-32c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faFingerprint = {\n  prefix: 'fas',\n  iconName: 'fingerprint',\n  icon: [512, 512, [], \"f577\", \"M48 256C48 141.1 141.1 48 256 48c63.1 0 119.6 28.1 157.8 72.5c8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8C403.3 34.6 333.7 0 256 0C114.6 0 0 114.6 0 256l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40zm458.5-52.9c-2.7-13-15.5-21.3-28.4-18.5s-21.3 15.5-18.5 28.4c2.9 13.9 4.5 28.3 4.5 43.1l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c0-18.1-1.9-35.8-5.5-52.9zM256 80c-19 0-37.4 3-54.5 8.6c-15.2 5-18.7 23.7-8.3 35.9c7.1 8.3 18.8 10.8 29.4 7.9c10.6-2.9 21.8-4.4 33.4-4.4c70.7 0 128 57.3 128 128l0 24.9c0 25.2-1.5 50.3-4.4 75.3c-1.7 14.6 9.4 27.8 24.2 27.8c11.8 0 21.9-8.6 23.3-20.3c3.3-27.4 5-55 5-82.7l0-24.9c0-97.2-78.8-176-176-176zM150.7 148.7c-9.1-10.6-25.3-11.4-33.9-.4C93.7 178 80 215.4 80 256l0 24.9c0 24.2-2.6 48.4-7.8 71.9C68.8 368.4 80.1 384 96.1 384c10.5 0 19.9-7 22.2-17.3c6.4-28.1 9.7-56.8 9.7-85.8l0-24.9c0-27.2 8.5-52.4 22.9-73.1c7.2-10.4 8-24.6-.2-34.2zM256 160c-53 0-96 43-96 96l0 24.9c0 35.9-4.6 71.5-13.8 106.1c-3.8 14.3 6.7 29 21.5 29c9.5 0 17.9-6.2 20.4-15.4c10.5-39 15.9-79.2 15.9-119.7l0-24.9c0-28.7 23.3-52 52-52s52 23.3 52 52l0 24.9c0 36.3-3.5 72.4-10.4 107.9c-2.7 13.9 7.7 27.2 21.8 27.2c10.2 0 19-7 21-17c7.7-38.8 11.6-78.3 11.6-118.1l0-24.9c0-53-43-96-96-96zm24 96c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24.9c0 59.9-11 119.3-32.5 175.2l-5.9 15.3c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8l5.9-15.3C267.9 411.9 280 346.7 280 280.9l0-24.9z\"]\n};\nconst faHandPointRight = {\n  prefix: 'fas',\n  iconName: 'hand-point-right',\n  icon: [512, 512, [], \"f0a4\", \"M480 96c17.7 0 32 14.3 32 32s-14.3 32-32 32l-208 0 0-64 208 0zM320 288c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm64-64c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0c17.7 0 32 14.3 32 32zM288 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm-88-96l.6 0c-5.4 9.4-8.6 20.3-8.6 32c0 13.2 4 25.4 10.8 35.6C177.9 364.3 160 388.1 160 416c0 11.7 3.1 22.6 8.6 32l-8.6 0C71.6 448 0 376.4 0 288l0-61.7c0-42.4 16.9-83.1 46.9-113.1l11.6-11.6C82.5 77.5 115.1 64 149 64l27 0c35.3 0 64 28.7 64 64l0 88c0 22.1-17.9 40-40 40s-40-17.9-40-40l0-56c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 56c0 39.8 32.2 72 72 72z\"]\n};\nconst faMagnifyingGlassLocation = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-location',\n  icon: [512, 512, [\"search-location\"], \"f689\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM288 176c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 48.8 46.5 111.6 68.6 138.6c6 7.3 16.8 7.3 22.7 0c22.1-27 68.6-89.8 68.6-138.6zm-112 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faSearchLocation = faMagnifyingGlassLocation;\nconst faForwardStep = {\n  prefix: 'fas',\n  iconName: 'forward-step',\n  icon: [320, 512, [\"step-forward\"], \"f051\", \"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416L0 96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4l192 160L256 241l0-145c0-17.7 14.3-32 32-32s32 14.3 32 32l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-145-11.5 9.6-192 160z\"]\n};\nconst faStepForward = faForwardStep;\nconst faFaceSmileBeam = {\n  prefix: 'fas',\n  iconName: 'face-smile-beam',\n  icon: [512, 512, [128522, \"smile-beam\"], \"f5b8\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zm53.5-96.7s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faSmileBeam = faFaceSmileBeam;\nconst faFlagCheckered = {\n  prefix: 'fas',\n  iconName: 'flag-checkered',\n  icon: [448, 512, [127937], \"f11e\", \"M32 0C49.7 0 64 14.3 64 32l0 16 69-17.2c38.1-9.5 78.3-5.1 113.5 12.5c46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1l0 279.7c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4c-37.9-19-81.3-23.7-122.5-13.4L64 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-80 0-66L0 64 0 32C0 14.3 14.3 0 32 0zM64 187.1l64-13.9 0 65.5L64 252.6 64 318l48.8-12.2c5.1-1.3 10.1-2.4 15.2-3.3l0-63.9 38.9-8.4c8.3-1.8 16.7-2.5 25.1-2.1l0-64c13.6 .4 27.2 2.6 40.4 6.4l23.6 6.9 0 66.7-41.7-12.3c-7.3-2.1-14.8-3.4-22.3-3.8l0 71.4c21.8 1.9 43.3 6.7 64 14.4l0-69.8 22.7 6.7c13.5 4 27.3 6.4 41.3 7.4l0-64.2c-7.8-.8-15.6-2.3-23.2-4.5l-40.8-12 0-62c-13-3.8-25.8-8.8-38.2-15c-8.2-4.1-16.9-7-25.8-8.8l0 72.4c-13-.4-26 .8-38.7 3.6L128 173.2 128 98 64 114l0 73.1zM320 335.7c16.8 1.5 33.9-.7 50-6.8l14-5.2 0-71.7-7.9 1.8c-18.4 4.3-37.3 5.7-56.1 4.5l0 77.4zm64-149.4l0-70.8c-20.9 6.1-42.4 9.1-64 9.1l0 69.4c13.9 1.4 28 .5 41.7-2.6l22.3-5.2z\"]\n};\nconst faFootball = {\n  prefix: 'fas',\n  iconName: 'football',\n  icon: [512, 512, [127944, \"football-ball\"], \"f44e\", \"M247.5 25.4c-13.5 3.3-26.4 7.2-38.6 11.7C142.9 61.6 96.7 103.6 66 153.6C47.8 183.4 35.1 215.9 26.9 249L264.5 486.6c13.5-3.3 26.4-7.2 38.6-11.7c66-24.5 112.2-66.5 142.9-116.5c18.3-29.8 30.9-62.3 39.1-95.3L247.5 25.4zM495.2 205.3c6.1-56.8 1.4-112.2-7.7-156.4c-2.7-12.9-13-22.9-26.1-25.1c-58.2-9.7-109.9-12-155.6-7.9L495.2 205.3zM206.1 496L16.8 306.7c-6.1 56.8-1.4 112.2 7.7 156.4c2.7 12.9 13 22.9 26.1 25.1c58.2 9.7 109.9 12 155.6 7.9zm54.6-331.3c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6zm-48 48c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6zm-48 48c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6z\"]\n};\nconst faFootballBall = faFootball;\nconst faSchoolCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'school-circle-exclamation',\n  icon: [640, 512, [], \"e56c\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l272 0s0 0 0 0l-64 0 0-96c0-35.3 28.7-64 64-64l.3 0 .5 0c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8L640 144c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm0 128l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faCrop = {\n  prefix: 'fas',\n  iconName: 'crop',\n  icon: [512, 512, [], \"f125\", \"M448 109.3l54.6-54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L402.7 64 160 64l0 64 178.7 0L128 338.7 128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l224 0 0-64-178.7 0L384 173.3 384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-274.7z\"]\n};\nconst faAnglesDown = {\n  prefix: 'fas',\n  iconName: 'angles-down',\n  icon: [448, 512, [\"angle-double-down\"], \"f103\", \"M246.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L224 402.7 361.4 265.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-160 160zm160-352l-160 160c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L224 210.7 361.4 73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3z\"]\n};\nconst faAngleDoubleDown = faAnglesDown;\nconst faUsersRectangle = {\n  prefix: 'fas',\n  iconName: 'users-rectangle',\n  icon: [640, 512, [], \"e594\", \"M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l448 0c53 0 96-43 96-96l0-320c0-53-43-96-96-96L96 0zM64 96c0-17.7 14.3-32 32-32l448 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32L64 96zm159.8 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM96 309.3c0 14.7 11.9 26.7 26.7 26.7l56.1 0c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4l-69.3 0C119.9 256 96 279.9 96 309.3zM461.2 336l56.1 0c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3l-69.3 0c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6zM372 289c-3.9-.7-7.9-1-12-1l-80 0c-4.1 0-8.1 .3-12 1c-26 4.4-47.3 22.7-55.9 47c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24c-8.6-24.3-29.9-42.6-55.9-47zM512 176a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\"]\n};\nconst faPeopleRoof = {\n  prefix: 'fas',\n  iconName: 'people-roof',\n  icon: [640, 512, [], \"e537\", \"M335.5 4l288 160c15.4 8.6 21 28.1 12.4 43.5s-28.1 21-43.5 12.4L320 68.6 47.5 220c-15.4 8.6-34.9 3-43.5-12.4s-3-34.9 12.4-43.5L304.5 4c9.7-5.4 21.4-5.4 31.1 0zM320 160a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM144 256a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm312 40a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM226.9 491.4L200 441.5l0 38.5c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32l0-38.5L61.1 491.4c-6.3 11.7-20.8 16-32.5 9.8s-16-20.8-9.8-32.5l37.9-70.3c15.3-28.5 45.1-46.3 77.5-46.3l19.5 0c16.3 0 31.9 4.5 45.4 12.6l33.6-62.3c15.3-28.5 45.1-46.3 77.5-46.3l19.5 0c32.4 0 62.1 17.8 77.5 46.3l33.6 62.3c13.5-8.1 29.1-12.6 45.4-12.6l19.5 0c32.4 0 62.1 17.8 77.5 46.3l37.9 70.3c6.3 11.7 1.9 26.2-9.8 32.5s-26.2 1.9-32.5-9.8L552 441.5l0 38.5c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32l0-38.5-26.9 49.9c-6.3 11.7-20.8 16-32.5 9.8s-16-20.8-9.8-32.5l36.3-67.5c-1.7-1.7-3.2-3.6-4.3-5.8L376 345.5l0 54.5c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32l0-54.5-26.9 49.9c-1.2 2.2-2.6 4.1-4.3 5.8l36.3 67.5c6.3 11.7 1.9 26.2-9.8 32.5s-26.2 1.9-32.5-9.8z\"]\n};\nconst faPeopleLine = {\n  prefix: 'fas',\n  iconName: 'people-line',\n  icon: [640, 512, [], \"e534\", \"M360 72a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM144 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416zM496 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM200 313.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-36.3-67.5c1.7-1.7 3.2-3.6 4.3-5.8L264 217.5l0 54.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-54.5 26.9 49.9c1.2 2.2 2.6 4.1 4.3 5.8l-36.3 67.5c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L440 313.5l0 38.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-16.3 0-31.9 4.5-45.4 12.6l-33.6-62.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3l-33.6 62.3c-13.5-8.1-29.1-12.6-45.4-12.6l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3L18.9 340.6c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L88 313.5 88 352c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5z\"]\n};\nconst faBeerMugEmpty = {\n  prefix: 'fas',\n  iconName: 'beer-mug-empty',\n  icon: [512, 512, [\"beer\"], \"f0fc\", \"M32 64c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32l0 32 51.2 0c42.4 0 76.8 34.4 76.8 76.8l0 102.1c0 30.4-17.9 57.9-45.6 70.2L384 381.7l0 34.3c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64L32 64zM384 311.6l56.4-25.1c4.6-2.1 7.6-6.6 7.6-11.7l0-102.1c0-7.1-5.7-12.8-12.8-12.8L384 160l0 151.6zM160 144c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224zm64 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224zm64 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 224c0 8.8 7.2 16 16 16s16-7.2 16-16l0-224z\"]\n};\nconst faBeer = faBeerMugEmpty;\nconst faDiagramPredecessor = {\n  prefix: 'fas',\n  iconName: 'diagram-predecessor',\n  icon: [512, 512, [], \"e477\", \"M448 416l0-64L64 352l0 64 384 0zm0 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64zM288 160c0 35.3-28.7 64-64 64L64 224c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l144 0 16 0 144 0c44.2 0 80 35.8 80 80l0 16 38.1 0c21.4 0 32.1 25.9 17 41L433 239c-9.4 9.4-24.6 9.4-33.9 0L329 169c-15.1-15.1-4.4-41 17-41l38.1 0 0-16c0-8.8-7.2-16-16-16l-80 0 0 64z\"]\n};\nconst faArrowUpLong = {\n  prefix: 'fas',\n  iconName: 'arrow-up-long',\n  icon: [384, 512, [\"long-arrow-up\"], \"f176\", \"M214.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-370.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128z\"]\n};\nconst faLongArrowUp = faArrowUpLong;\nconst faFireFlameSimple = {\n  prefix: 'fas',\n  iconName: 'fire-flame-simple',\n  icon: [384, 512, [\"burn\"], \"f46a\", \"M372.5 256.5l-.7-1.9C337.8 160.8 282 76.5 209.1 8.5l-3.3-3C202.1 2 197.1 0 192 0s-10.1 2-13.8 5.5l-3.3 3C102 76.5 46.2 160.8 12.2 254.6l-.7 1.9C3.9 277.3 0 299.4 0 321.6C0 426.7 86.8 512 192 512s192-85.3 192-190.4c0-22.2-3.9-44.2-11.5-65.1zm-90.8 49.5c4.1 9.3 6.2 19.4 6.2 29.5c0 53-43 96.5-96 96.5s-96-43.5-96-96.5c0-10.1 2.1-20.3 6.2-29.5l1.9-4.3c15.8-35.4 37.9-67.7 65.3-95.1l8.9-8.9c3.6-3.6 8.5-5.6 13.6-5.6s10 2 13.6 5.6l8.9 8.9c27.4 27.4 49.6 59.7 65.3 95.1l1.9 4.3z\"]\n};\nconst faBurn = faFireFlameSimple;\nconst faPerson = {\n  prefix: 'fas',\n  iconName: 'person',\n  icon: [320, 512, [129485, \"male\"], \"f183\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0z\"]\n};\nconst faMale = faPerson;\nconst faLaptop = {\n  prefix: 'fas',\n  iconName: 'laptop',\n  icon: [640, 512, [128187], \"f109\", \"M128 32C92.7 32 64 60.7 64 96l0 256 64 0 0-256 384 0 0 256 64 0 0-256c0-35.3-28.7-64-64-64L128 32zM19.2 384C8.6 384 0 392.6 0 403.2C0 445.6 34.4 480 76.8 480l486.4 0c42.4 0 76.8-34.4 76.8-76.8c0-10.6-8.6-19.2-19.2-19.2L19.2 384z\"]\n};\nconst faFileCsv = {\n  prefix: 'fas',\n  iconName: 'file-csv',\n  icon: [512, 512, [], \"f6dd\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 144-208 0c-35.3 0-64 28.7-64 64l0 144-48 0c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM200 352l16 0c22.1 0 40 17.9 40 40l0 8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-8c0-4.4-3.6-8-8-8l-16 0c-4.4 0-8 3.6-8 8l0 80c0 4.4 3.6 8 8 8l16 0c4.4 0 8-3.6 8-8l0-8c0-8.8 7.2-16 16-16s16 7.2 16 16l0 8c0 22.1-17.9 40-40 40l-16 0c-22.1 0-40-17.9-40-40l0-80c0-22.1 17.9-40 40-40zm133.1 0l34.9 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-34.9 0c-7.2 0-13.1 5.9-13.1 13.1c0 5.2 3 9.9 7.8 12l37.4 16.6c16.3 7.2 26.8 23.4 26.8 41.2c0 24.9-20.2 45.1-45.1 45.1L304 512c-8.8 0-16-7.2-16-16s7.2-16 16-16l42.9 0c7.2 0 13.1-5.9 13.1-13.1c0-5.2-3-9.9-7.8-12l-37.4-16.6c-16.3-7.2-26.8-23.4-26.8-41.2c0-24.9 20.2-45.1 45.1-45.1zm98.9 0c8.8 0 16 7.2 16 16l0 31.6c0 23 5.5 45.6 16 66c10.5-20.3 16-42.9 16-66l0-31.6c0-8.8 7.2-16 16-16s16 7.2 16 16l0 31.6c0 34.7-10.3 68.7-29.6 97.6l-5.1 7.7c-3 4.5-8 7.1-13.3 7.1s-10.3-2.7-13.3-7.1l-5.1-7.7c-19.3-28.9-29.6-62.9-29.6-97.6l0-31.6c0-8.8 7.2-16 16-16z\"]\n};\nconst faMenorah = {\n  prefix: 'fas',\n  iconName: 'menorah',\n  icon: [640, 512, [], \"f676\", \"M20.8 7.4C22.8 2.9 27.1 0 32 0s9.2 2.9 11.2 7.4L61.3 49.7c1.8 4.1 2.7 8.6 2.7 13.1L64 64c0 17.7-14.3 32-32 32S0 81.7 0 64l0-1.2c0-4.5 .9-8.9 2.7-13.1L20.8 7.4zm96 0C118.8 2.9 123.1 0 128 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L116.8 7.4zm77.8 42.4L212.8 7.4C214.8 2.9 219.1 0 224 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM308.8 7.4C310.8 2.9 315.1 0 320 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L308.8 7.4zm77.8 42.4L404.8 7.4C406.8 2.9 411.1 0 416 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM500.8 7.4C502.8 2.9 507.1 0 512 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1L500.8 7.4zm77.8 42.4L596.8 7.4C598.8 2.9 603.1 0 608 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1zM32 128c17.7 0 32 14.3 32 32l0 128c0 17.7 14.3 32 32 32l192 0 0-160c0-17.7 14.3-32 32-32s32 14.3 32 32l0 160 192 0c17.7 0 32-14.3 32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 128c0 53-43 96-96 96l-192 0 0 64 128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l128 0 0-64L96 384c-53 0-96-43-96-96L0 160c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32zm192 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96 0 32-64 0 0-32 0-96c0-17.7 14.3-32 32-32z\"]\n};\nconst faTruckPlane = {\n  prefix: 'fas',\n  iconName: 'truck-plane',\n  icon: [640, 512, [], \"e58f\", \"M200 0c-30.6 0-56 54.7-56 86.1l0 106.5L7.8 274.3C2.9 277.2 0 282.4 0 288l0 64c0 5.1 2.4 9.8 6.4 12.8s9.3 3.9 14.1 2.5l123.4-37 0 81.2-50 40c-3.8 3-6 7.6-6 12.5l0 32c0 5.1 2.5 10 6.6 13s9.5 3.8 14.4 2.2L200 480.9 290.4 511c-1.6-4.7-2.4-9.8-2.4-15l0-32.6c-18.2-10.5-30.7-29.7-31.9-51.8l-.1-.1 0-3.5 0-82.5L256 184l0-1.1s0 0 0 0l0-96.9C256 54.7 231.5 0 200 0zm88 176l0 224c0 20.9 13.4 38.7 32 45.3l0 42.7c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-40 160 0 0 40c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-42.7c18.6-6.6 32-24.4 32-45.3l0-224c0-26.5-21.5-48-48-48l-256 0c-26.5 0-48 21.5-48 48zm79.8 78.7c3.3-8.7 11.2-14.7 20.5-14.7l151.4 0c9.2 0 17.2 6 20.5 14.7L576 304l-224 0 15.8-49.3zM568 352a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM336 376a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faRecordVinyl = {\n  prefix: 'fas',\n  iconName: 'record-vinyl',\n  icon: [512, 512, [], \"f8d9\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm0 224a128 128 0 1 0 0-256 128 128 0 1 0 0 256zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faFaceGrinStars = {\n  prefix: 'fas',\n  iconName: 'face-grin-stars',\n  icon: [512, 512, [129321, \"grin-stars\"], \"f587\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm407.4 75.5c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM160 120c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L160 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L226.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6zm192 0c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L352 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L418.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6z\"]\n};\nconst faGrinStars = faFaceGrinStars;\nconst faBong = {\n  prefix: 'fas',\n  iconName: 'bong',\n  icon: [448, 512, [], \"f55c\", \"M160 208.5c0 29.1-15.6 53.9-37.2 67.8c-17.2 11.1-31.5 26.1-41.7 43.7l221.8 0c-10.2-17.6-24.5-32.6-41.7-43.7c-21.6-13.9-37.2-38.7-37.2-67.8L224 64l-64 0 0 144.5zM288 64l0 144.5c0 5.7 3.1 10.9 7.9 14c11.2 7.2 21.5 15.5 30.9 24.8L366.1 208l-7-7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l24 24 24 24c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-7-7-43.3 43.3C374 314.1 384 347.9 384 384c0 39.4-11.9 76.1-32.2 106.5c-9.6 14.4-26.5 21.5-43.8 21.5L76.1 512c-17.3 0-34.2-7.1-43.8-21.5C11.9 460.1 0 423.4 0 384c0-67.8 35.1-127.3 88.1-161.5c4.8-3.1 7.9-8.3 7.9-14L96 64C78.3 64 64 49.7 64 32S78.3 0 96 0l16 0L272 0l16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"]\n};\nconst faSpaghettiMonsterFlying = {\n  prefix: 'fas',\n  iconName: 'spaghetti-monster-flying',\n  icon: [640, 512, [\"pastafarianism\"], \"f67b\", \"M208 64a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 0c0 16.2-6 31.1-16 42.3l15.6 31.2c18.7-6 39.9-9.5 64.4-9.5s45.8 3.5 64.4 9.5L400 106.3C390 95.1 384 80.2 384 64c0-35.3 28.7-64 64-64s64 28.7 64 64s-28.7 64-64 64c-1.7 0-3.4-.1-5.1-.2L427.8 158c21.1 13.6 37.7 30.2 51.4 46.4c7.1 8.3 13.5 16.6 19.3 24l1.4 1.8c6.3 8.1 11.6 14.8 16.7 20.4C527.3 262.3 532.7 264 536 264c2.5 0 4.3-.6 7.1-3.3c3.7-3.5 7.1-8.8 12.5-17.4l.6-.9c4.6-7.4 11-17.6 19.4-25.7c9.7-9.3 22.9-16.7 40.4-16.7c13.3 0 24 10.7 24 24s-10.7 24-24 24c-2.5 0-4.3 .6-7.1 3.3c-3.7 3.5-7.1 8.8-12.5 17.4l-.6 .9c-4.6 7.4-11 17.6-19.4 25.7c-9.7 9.3-22.9 16.7-40.4 16.7c-18.5 0-32.9-8.5-44.3-18.6c-3.1 4-6.6 8.3-10.5 12.7c1.4 4.3 2.8 8.5 4 12.5c.9 3 1.8 5.8 2.6 8.6c3 9.8 5.5 18.2 8.6 25.9c3.9 9.8 7.4 15.4 10.8 18.5c2.6 2.4 5.9 4.3 12.8 4.3c8.7 0 16.9-4.2 33.7-13.2c15-8 35.7-18.8 62.3-18.8c13.3 0 24 10.7 24 24s-10.7 24-24 24c-13.4 0-24.7 5.2-39.7 13.2c-1 .6-2.1 1.1-3.2 1.7C559.9 414 541.4 424 520 424c-18.4 0-33.6-6.1-45.5-17.2c-11.1-10.3-17.9-23.7-22.7-36c-3.6-9-6.7-19.1-9.5-28.5c-16.4 12.3-36.1 23.6-58.9 31.3c3.6 10.8 8.4 23.5 14.4 36.2c7.5 15.9 16.2 30.4 25.8 40.5C433 460.5 441.2 464 448 464c13.3 0 24 10.7 24 24s-10.7 24-24 24c-25.2 0-45-13.5-59.5-28.8c-14.5-15.4-25.7-34.9-34.2-53c-8-17-14.1-33.8-18.3-46.9c-5.2 .4-10.6 .6-16 .6s-10.8-.2-16-.6c-4.2 13-10.3 29.9-18.3 46.9c-8.5 18.1-19.8 37.6-34.2 53C237 498.5 217.2 512 192 512c-13.3 0-24-10.7-24-24s10.7-24 24-24c6.8 0 15-3.5 24.5-13.7c9.5-10.1 18.3-24.6 25.8-40.5c5.9-12.6 10.7-25.4 14.4-36.2c-22.8-7.7-42.5-19-58.9-31.3c-2.9 9.4-6 19.5-9.5 28.5c-4.8 12.2-11.6 25.6-22.7 36C153.6 417.9 138.4 424 120 424c-21.4 0-39.9-10-53.1-17.1c0 0 0 0 0 0c-1.1-.6-2.2-1.2-3.2-1.7c-15-8-26.3-13.2-39.7-13.2c-13.3 0-24-10.7-24-24s10.7-24 24-24c26.6 0 47.3 10.8 62.3 18.8c16.8 9 25 13.2 33.7 13.2c6.8 0 10.2-1.9 12.8-4.3c3.4-3.2 7-8.8 10.8-18.5c3-7.7 5.6-16.1 8.6-25.9c.8-2.7 1.7-5.6 2.6-8.6c1.2-4 2.6-8.2 4-12.5c-3.9-4.5-7.4-8.8-10.5-12.7C136.9 303.5 122.5 312 104 312c-17.5 0-30.7-7.4-40.4-16.7c-8.4-8.1-14.8-18.3-19.4-25.7l-.6-.9c-5.4-8.6-8.8-13.9-12.5-17.4c-2.8-2.7-4.6-3.3-7.1-3.3c-13.3 0-24-10.7-24-24s10.7-24 24-24c17.5 0 30.7 7.4 40.4 16.7c8.4 8.1 14.8 18.3 19.4 25.7l.6 .9c5.4 8.6 8.8 13.9 12.5 17.4c2.8 2.7 4.6 3.3 7.1 3.3c3.3 0 8.7-1.7 19.4-13.4c5.1-5.6 10.4-12.3 16.7-20.4l1.4-1.8c5.8-7.4 12.2-15.7 19.3-24c13.8-16.2 30.3-32.8 51.4-46.4l-15.1-30.2c-1.7 .1-3.4 .2-5.1 .2c-35.3 0-64-28.7-64-64s28.7-64 64-64s64 28.7 64 64zm208 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faPastafarianism = faSpaghettiMonsterFlying;\nconst faArrowDownUpAcrossLine = {\n  prefix: 'fas',\n  iconName: 'arrow-down-up-across-line',\n  icon: [576, 512, [], \"e4af\", \"M137.4 502.6c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7 192 288l352 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0 0-114.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L384 109.3 384 224l-192 0-64 0-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 114.7L86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96zM128 192l64 0 0-128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 128zM448 320l-64 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128z\"]\n};\nconst faSpoon = {\n  prefix: 'fas',\n  iconName: 'spoon',\n  icon: [512, 512, [129348, 61873, \"utensil-spoon\"], \"f2e5\", \"M245.8 220.9c-14.5-17.6-21.8-39.2-21.8-60.8C224 80 320 0 416 0c53 0 96 43 96 96c0 96-80 192-160.2 192c-21.6 0-43.2-7.3-60.8-21.8L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L245.8 220.9z\"]\n};\nconst faUtensilSpoon = faSpoon;\nconst faJarWheat = {\n  prefix: 'fas',\n  iconName: 'jar-wheat',\n  icon: [320, 512, [], \"e517\", \"M32 32C32 14.3 46.3 0 64 0L256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64l192 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 160zm112 0l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8C64 198 90 224 122.2 224l21.8 0 32 0 21.8 0c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8L208 160c-19.1 0-36.3 8.4-48 21.7c-11.7-13.3-28.9-21.7-48-21.7zm48 117.7c-11.7-13.3-28.9-21.7-48-21.7l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8C64 294 90 320 122.2 320l21.8 0 32 0 21.8 0c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8L208 256c-19.1 0-36.3 8.4-48 21.7zM112 352l-42.2 0c-3.2 0-5.8 2.6-5.8 5.8C64 390 90 416 122.2 416l21.8 0 0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32 21.8 0c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8L208 352c-19.1 0-36.3 8.4-48 21.7c-11.7-13.3-28.9-21.7-48-21.7z\"]\n};\nconst faEnvelopesBulk = {\n  prefix: 'fas',\n  iconName: 'envelopes-bulk',\n  icon: [640, 512, [\"mail-bulk\"], \"f674\", \"M128 0C110.3 0 96 14.3 96 32l0 192 96 0 0-32c0-35.3 28.7-64 64-64l224 0 0-96c0-17.7-14.3-32-32-32L128 0zM256 160c-17.7 0-32 14.3-32 32l0 32 96 0c35.3 0 64 28.7 64 64l0 128 192 0c17.7 0 32-14.3 32-32l0-192c0-17.7-14.3-32-32-32l-320 0zm240 64l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM64 256c-17.7 0-32 14.3-32 32l0 13L187.1 415.9c1.4 1 3.1 1.6 4.9 1.6s3.5-.6 4.9-1.6L352 301l0-13c0-17.7-14.3-32-32-32L64 256zm288 84.8L216 441.6c-6.9 5.1-15.3 7.9-24 7.9s-17-2.8-24-7.9L32 340.8 32 480c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32l0-139.2z\"]\n};\nconst faMailBulk = faEnvelopesBulk;\nconst faFileCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'file-circle-exclamation',\n  icon: [576, 512, [], \"e4eb\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nconst faCircleH = {\n  prefix: 'fas',\n  iconName: 'circle-h',\n  icon: [512, 512, [9405, \"hospital-symbol\"], \"f47e\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM368 152l0 104 0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-80-128 0 0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24s24 10.7 24 24l0 80 128 0 0-80c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faHospitalSymbol = faCircleH;\nconst faPager = {\n  prefix: 'fas',\n  iconName: 'pager',\n  icon: [512, 512, [128223], \"f815\", \"M0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zm64 32l0 64c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L96 128c-17.7 0-32 14.3-32 32zM80 320c-13.3 0-24 10.7-24 24s10.7 24 24 24l56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0zm136 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0z\"]\n};\nconst faAddressBook = {\n  prefix: 'fas',\n  iconName: 'address-book',\n  icon: [512, 512, [62138, \"contact-book\"], \"f2b9\", \"M96 0C60.7 0 32 28.7 32 64l0 384c0 35.3 28.7 64 64 64l288 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L96 0zM208 288l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64zM496 192c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64z\"]\n};\nconst faContactBook = faAddressBook;\nconst faStrikethrough = {\n  prefix: 'fas',\n  iconName: 'strikethrough',\n  icon: [512, 512, [], \"f0cc\", \"M161.3 144c3.2-17.2 14-30.1 33.7-38.6c21.1-9 51.8-12.3 88.6-6.5c11.9 1.9 48.8 9.1 60.1 12c17.1 4.5 34.6-5.6 39.2-22.7s-5.6-34.6-22.7-39.2c-14.3-3.8-53.6-11.4-66.6-13.4c-44.7-7-88.3-4.2-123.7 10.9c-36.5 15.6-64.4 44.8-71.8 87.3c-.1 .6-.2 1.1-.2 1.7c-2.8 23.9 .5 45.6 10.1 64.6c4.5 9 10.2 16.9 16.7 23.9L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-209.9 0-.4-.1-1.1-.3c-36-10.8-65.2-19.6-85.2-33.1c-9.3-6.3-15-12.6-18.2-19.1c-3.1-6.1-5.2-14.6-3.8-27.4zM348.9 337.2c2.7 6.5 4.4 15.8 1.9 30.1c-3 17.6-13.8 30.8-33.9 39.4c-21.1 9-51.7 12.3-88.5 6.5c-18-2.9-49.1-13.5-74.4-22.1c-5.6-1.9-11-3.7-15.9-5.4c-16.8-5.6-34.9 3.5-40.5 20.3s3.5 34.9 20.3 40.5c3.6 1.2 7.9 2.7 12.7 4.3c0 0 0 0 0 0s0 0 0 0c24.9 8.5 63.6 21.7 87.6 25.6c0 0 0 0 0 0l.2 0c44.7 7 88.3 4.2 123.7-10.9c36.5-15.6 64.4-44.8 71.8-87.3c3.6-21 2.7-40.4-3.1-58.1l-75.7 0c7 5.6 11.4 11.2 13.9 17.2z\"]\n};\nconst faK = {\n  prefix: 'fas',\n  iconName: 'k',\n  icon: [320, 512, [107], \"4b\", \"M311 86.3c12.3-12.7 12-32.9-.7-45.2s-32.9-12-45.2 .7l-155.2 160L64 249 64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 328 0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-107 64.7-66.7 133 192c10.1 14.5 30 18.1 44.5 8.1s18.1-30 8.1-44.5L174.1 227.4 311 86.3z\"]\n};\nconst faLandmarkFlag = {\n  prefix: 'fas',\n  iconName: 'landmark-flag',\n  icon: [512, 512, [], \"e51c\", \"M272 0l80 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-80 0 0 32 192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L48 192c-17.7 0-32-14.3-32-32s14.3-32 32-32l192 0 0-112c0-8.8 7.2-16 16-16l16 0zM64 224l64 0 0 192 40 0 0-192 64 0 0 192 48 0 0-192 64 0 0 192 40 0 0-192 64 0 0 196.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512L32 512c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1L64 224z\"]\n};\nconst faPencil = {\n  prefix: 'fas',\n  iconName: 'pencil',\n  icon: [512, 512, [9999, 61504, \"pencil-alt\"], \"f303\", \"M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1 0 32c0 8.8 7.2 16 16 16l32 0zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faPencilAlt = faPencil;\nconst faBackward = {\n  prefix: 'fas',\n  iconName: 'backward',\n  icon: [512, 512, [9194], \"f04a\", \"M459.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29l0-320c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4L288 214.3l0 41.7 0 41.7L459.5 440.6zM256 352l0-96 0-128 0-32c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160C4.2 237.5 0 246.5 0 256s4.2 18.5 11.5 24.6l192 160c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29l0-64z\"]\n};\nconst faCaretRight = {\n  prefix: 'fas',\n  iconName: 'caret-right',\n  icon: [256, 512, [], \"f0da\", \"M246.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 256c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l128-128z\"]\n};\nconst faComments = {\n  prefix: 'fas',\n  iconName: 'comments',\n  icon: [640, 512, [128490, 61670], \"f086\", \"M208 352c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176c0 38.6 14.7 74.3 39.6 103.4c-3.5 9.4-8.7 17.7-14.2 24.7c-4.8 6.2-9.7 11-13.3 14.3c-1.8 1.6-3.3 2.9-4.3 3.7c-.5 .4-.9 .7-1.1 .8l-.2 .2s0 0 0 0s0 0 0 0C1 327.2-1.4 334.4 .8 340.9S9.1 352 16 352c21.8 0 43.8-5.6 62.1-12.5c9.2-3.5 17.8-7.4 25.2-11.4C134.1 343.3 169.8 352 208 352zM448 176c0 112.3-99.1 196.9-216.5 207C255.8 457.4 336.4 512 432 512c38.2 0 73.9-8.7 104.7-23.9c7.5 4 16 7.9 25.2 11.4c18.3 6.9 40.3 12.5 62.1 12.5c6.9 0 13.1-4.5 15.2-11.1c2.1-6.6-.2-13.8-5.8-17.9c0 0 0 0 0 0s0 0 0 0l-.2-.2c-.2-.2-.6-.4-1.1-.8c-1-.8-2.5-2-4.3-3.7c-3.6-3.3-8.5-8.1-13.3-14.3c-5.5-7-10.7-15.4-14.2-24.7c24.9-29 39.6-64.7 39.6-103.4c0-92.8-84.9-168.9-192.6-175.5c.4 5.1 .6 10.3 .6 15.5z\"]\n};\nconst faPaste = {\n  prefix: 'fas',\n  iconName: 'paste',\n  icon: [512, 512, [\"file-clipboard\"], \"f0ea\", \"M160 0c-23.7 0-44.4 12.9-55.4 32L48 32C21.5 32 0 53.5 0 80L0 400c0 26.5 21.5 48 48 48l144 0 0-272c0-44.2 35.8-80 80-80l48 0 0-16c0-26.5-21.5-48-48-48l-56.6 0C204.4 12.9 183.7 0 160 0zM272 128c-26.5 0-48 21.5-48 48l0 272 0 16c0 26.5 21.5 48 48 48l192 0c26.5 0 48-21.5 48-48l0-220.1c0-12.7-5.1-24.9-14.1-33.9l-67.9-67.9c-9-9-21.2-14.1-33.9-14.1L320 128l-48 0zM160 40a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faFileClipboard = faPaste;\nconst faCodePullRequest = {\n  prefix: 'fas',\n  iconName: 'code-pull-request',\n  icon: [512, 512, [], \"e13c\", \"M305.8 2.1C314.4 5.9 320 14.5 320 24l0 40 16 0c70.7 0 128 57.3 128 128l0 166.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3L400 192c0-35.3-28.7-64-64-64l-16 0 0 40c0 9.5-5.6 18.1-14.2 21.9s-18.8 2.3-25.8-4.1l-80-72c-5.1-4.6-7.9-11-7.9-17.8s2.9-13.3 7.9-17.8l80-72c7-6.3 17.2-7.9 25.8-4.1zM104 80A24 24 0 1 0 56 80a24 24 0 1 0 48 0zm8 73.3l0 205.3c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-205.3C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80c0 32.8-19.7 61-48 73.3zM104 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm328 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faClipboardList = {\n  prefix: 'fas',\n  iconName: 'clipboard-list',\n  icon: [384, 512, [], \"f46d\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM72 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zM72 368a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm88 0c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faTruckRampBox = {\n  prefix: 'fas',\n  iconName: 'truck-ramp-box',\n  icon: [640, 512, [\"truck-loading\"], \"f4de\", \"M640 0l0 400c0 61.9-50.1 112-112 112c-61 0-110.5-48.7-112-109.3L48.4 502.9c-17.1 4.6-34.6-5.4-39.3-22.5s5.4-34.6 22.5-39.3L352 353.8 352 64c0-35.3 28.7-64 64-64L640 0zM576 400a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM23.1 207.7c-4.6-17.1 5.6-34.6 22.6-39.2l46.4-12.4 20.7 77.3c2.3 8.5 11.1 13.6 19.6 11.3l30.9-8.3c8.5-2.3 13.6-11.1 11.3-19.6l-20.7-77.3 46.4-12.4c17.1-4.6 34.6 5.6 39.2 22.6l41.4 154.5c4.6 17.1-5.6 34.6-22.6 39.2L103.7 384.9c-17.1 4.6-34.6-5.6-39.2-22.6L23.1 207.7z\"]\n};\nconst faTruckLoading = faTruckRampBox;\nconst faUserCheck = {\n  prefix: 'fas',\n  iconName: 'user-check',\n  icon: [640, 512, [], \"f4fc\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM625 177L497 305c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L591 143c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faVialVirus = {\n  prefix: 'fas',\n  iconName: 'vial-virus',\n  icon: [512, 512, [], \"e597\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l0 288c0 53 43 96 96 96c28.6 0 54.2-12.5 71.8-32.3c.1-14.2 5.6-28.3 16.4-39.1c.2-.2 .1-.6-.2-.6c-30.9 0-56-25.1-56-56s25.1-56 56-56c.3 0 .4-.4 .2-.6c-21.9-21.9-21.9-57.3 0-79.2c2.4-2.4 5-4.6 7.8-6.5L224 96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0L96 32 32 32zM96 192l0-96 64 0 0 96-64 0zM216 376c28.8 0 43.2 34.8 22.9 55.2c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0c20.4-20.4 55.2-5.9 55.2 22.9c0 13.3 10.7 24 24 24s24-10.7 24-24c0-28.8 34.8-43.2 55.2-22.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9C444.8 410.8 459.2 376 488 376c13.3 0 24-10.7 24-24s-10.7-24-24-24c-28.8 0-43.2-34.8-22.9-55.2c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0C410.8 259.2 376 244.8 376 216c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 28.8-34.8 43.2-55.2 22.9c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9c20.4 20.4 5.9 55.2-22.9 55.2c-13.3 0-24 10.7-24 24s10.7 24 24 24zm104-88a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm40 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faSheetPlastic = {\n  prefix: 'fas',\n  iconName: 'sheet-plastic',\n  icon: [384, 512, [], \"e571\", \"M0 448c0 35.3 28.7 64 64 64l160 0 0-128c0-17.7 14.3-32 32-32l128 0 0-288c0-35.3-28.7-64-64-64L64 0C28.7 0 0 28.7 0 64L0 448zM171.3 75.3l-96 96c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l96-96c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zm96 32l-160 160c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l160-160c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zM384 384l-128 0 0 128L384 384z\"]\n};\nconst faBlog = {\n  prefix: 'fas',\n  iconName: 'blog',\n  icon: [512, 512, [], \"f781\", \"M192 32c0 17.7 14.3 32 32 32c123.7 0 224 100.3 224 224c0 17.7 14.3 32 32 32s32-14.3 32-32C512 128.9 383.1 0 224 0c-17.7 0-32 14.3-32 32zm0 96c0 17.7 14.3 32 32 32c70.7 0 128 57.3 128 128c0 17.7 14.3 32 32 32s32-14.3 32-32c0-106-86-192-192-192c-17.7 0-32 14.3-32 32zM96 144c0-26.5-21.5-48-48-48S0 117.5 0 144L0 368c0 79.5 64.5 144 144 144s144-64.5 144-144s-64.5-144-144-144l-16 0 0 96 16 0c26.5 0 48 21.5 48 48s-21.5 48-48 48s-48-21.5-48-48l0-224z\"]\n};\nconst faUserNinja = {\n  prefix: 'fas',\n  iconName: 'user-ninja',\n  icon: [448, 512, [129399], \"f504\", \"M224 256c-57.2 0-105.6-37.5-122-89.3c-1.1 1.3-2.2 2.6-3.5 3.8c-15.8 15.8-38.8 20.7-53.6 22.1c-8.1 .8-14.6-5.7-13.8-13.8c1.4-14.7 6.3-37.8 22.1-53.6c5.8-5.8 12.6-10.1 19.6-13.4c-7-3.2-13.8-7.6-19.6-13.4C37.4 82.7 32.6 59.7 31.1 44.9c-.8-8.1 5.7-14.6 13.8-13.8c14.7 1.4 37.8 6.3 53.6 22.1c4.8 4.8 8.7 10.4 11.7 16.1C131.4 28.2 174.4 0 224 0c70.7 0 128 57.3 128 128s-57.3 128-128 128zM0 482.3C0 399.5 56.4 330 132.8 309.9c6-1.6 12.2 .9 15.9 5.8l62.5 83.3c6.4 8.5 19.2 8.5 25.6 0l62.5-83.3c3.7-4.9 9.9-7.4 15.9-5.8C391.6 330 448 399.5 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM160 96c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L160 96z\"]\n};\nconst faPersonArrowUpFromLine = {\n  prefix: 'fas',\n  iconName: 'person-arrow-up-from-line',\n  icon: [640, 512, [], \"e539\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 352l0-96 16 0 0 96-16 0zm-64 0l-88 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l120 0 80 0 376 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-344 0 0-191.1 28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6l-29.7 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 448zM598.6 121.4l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L464 141.3 464 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-242.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\"]\n};\nconst faScrollTorah = {\n  prefix: 'fas',\n  iconName: 'scroll-torah',\n  icon: [640, 512, [\"torah\"], \"f6a0\", \"M96 480L96 32C96 14.3 74.5 0 48 0S0 14.3 0 32L0 480c0 17.7 21.5 32 48 32s48-14.3 48-32zM512 32L128 32l0 448 384 0 0-448zM592 0c-26.5 0-48 14.3-48 32l0 448c0 17.7 21.5 32 48 32s48-14.3 48-32l0-448c0-17.7-21.5-32-48-32zM196 313.7c0-3.2 .9-6.4 2.5-9.2L226.7 256l-28.3-48.5c-1.6-2.8-2.5-6-2.5-9.2c0-10.1 8.2-18.3 18.3-18.3l56.7 0 31.4-53.9c3.6-6.3 10.3-10.1 17.6-10.1s13.9 3.8 17.6 10.1L369 180l56.7 0c10.1 0 18.3 8.2 18.3 18.3c0 3.2-.9 6.4-2.5 9.2L413.3 256l28.3 48.5c1.6 2.8 2.5 6 2.5 9.2c0 10.1-8.2 18.3-18.3 18.3L369 332l-31.4 53.9c-3.6 6.3-10.3 10.1-17.6 10.1s-13.9-3.8-17.6-10.1L271 332l-56.7 0c-10.1 0-18.3-8.2-18.3-18.3zm124 54.7L341.2 332l-42.4 0L320 368.4zM254.5 256l30.3 52 70.4 0 30.3-52-30.3-52-70.4 0-30.3 52zm144.9 23.8L383 308l32.8 0-16.4-28.2zM415.8 204L383 204l16.4 28.2L415.8 204zM320 143.6L298.8 180l42.4 0L320 143.6zM224.2 204l16.4 28.2L257 204l-32.8 0zM257 308l-16.4-28.2L224.2 308l32.8 0z\"]\n};\nconst faTorah = faScrollTorah;\nconst faBroomBall = {\n  prefix: 'fas',\n  iconName: 'broom-ball',\n  icon: [576, 512, [\"quidditch\", \"quidditch-broom-ball\"], \"f458\", \"M566.6 9.4c12.5 12.5 12.5 32.8 0 45.3l-192 192 34.7 34.7c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6l-29.1 0L256 211.7l0-29.1c0-12.5 10.1-22.6 22.6-22.6c6 0 11.8 2.4 16 6.6l34.7 34.7 192-192c12.5-12.5 32.8-12.5 45.3 0zm-344 225.5L341.1 353.4c3.7 42.7-11.7 85.2-42.3 115.8C271.4 496.6 234.2 512 195.5 512L22.1 512C9.9 512 0 502.1 0 489.9c0-6.3 2.7-12.3 7.3-16.5L133.7 359.7c4.2-3.7-.4-10.4-5.4-7.9L77.2 377.4c-6.1 3-13.2-1.4-13.2-8.2c0-31.5 12.5-61.7 34.8-84l8-8c30.6-30.6 73.1-45.9 115.8-42.3zM464 352a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faQuidditch = faBroomBall;\nconst faQuidditchBroomBall = faBroomBall;\nconst faToggleOff = {\n  prefix: 'fas',\n  iconName: 'toggle-off',\n  icon: [576, 512, [], \"f204\", \"M384 128c70.7 0 128 57.3 128 128s-57.3 128-128 128l-192 0c-70.7 0-128-57.3-128-128s57.3-128 128-128l192 0zM576 256c0-106-86-192-192-192L192 64C86 64 0 150 0 256S86 448 192 448l192 0c106 0 192-86 192-192zM192 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"]\n};\nconst faBoxArchive = {\n  prefix: 'fas',\n  iconName: 'box-archive',\n  icon: [512, 512, [\"archive\"], \"f187\", \"M32 32l448 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96L0 64C0 46.3 14.3 32 32 32zm0 128l448 0 0 256c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64l0-256zm128 80c0 8.8 7.2 16 16 16l160 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-160 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faArchive = faBoxArchive;\nconst faPersonDrowning = {\n  prefix: 'fas',\n  iconName: 'person-drowning',\n  icon: [576, 512, [], \"e545\", \"M192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32.2c0 54.1 23.5 104 62.2 138.3l-21 146.7c7.8 2.1 15.5 3.3 22.8 3.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c12.4 8.5 26.1 14.8 39.7 18l17.7-97.6c10.7-1.2 21.3-3.1 31.9-5.5l105-23.9c17.2-3.9 28-21.1 24.1-38.3s-21.1-28-38.3-24.1L400 216.6c-41 9.3-83.7 7.5-123.7-5.2c-50.2-16-84.3-62.6-84.3-115.3L192 64zM320 192a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM306.5 389.9c-11.1-7.9-25.9-7.9-37 0C247 405.4 219.5 416 192 416c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 469.7 159 480 192 480c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 405.2 410.9 416 384 416c-27.5 0-55-10.6-77.5-26.1z\"]\n};\nconst faArrowDown91 = {\n  prefix: 'fas',\n  iconName: 'arrow-down-9-1',\n  icon: [576, 512, [\"sort-numeric-desc\", \"sort-numeric-down-alt\"], \"f886\", \"M160 480c9 0 17.5-3.8 23.6-10.4l88-96c11.9-13 11.1-33.3-2-45.2s-33.3-11.1-45.2 2L192 365.7 192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 301.7L95.6 330.4c-11.9-13-32.2-13.9-45.2-2s-13.9 32.2-2 45.2l88 96C142.5 476.2 151 480 160 480zM450.7 294c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2 0 51.6-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l48 0 48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-96c0-10.3-4.9-19.9-13.3-26zM418.3 91a32 32 0 1 1 27.4 57.9A32 32 0 1 1 418.3 91zM405.1 203.8l-6.8 9.2c-10.5 14.2-7.5 34.2 6.7 44.8s34.2 7.5 44.8-6.7l48.8-65.8c14-18.9 21.5-41.7 21.5-65.2c0-48.6-39.4-88-88-88s-88 39.4-88 88c0 39.2 25.6 72.4 61.1 83.8z\"]\n};\nconst faSortNumericDesc = faArrowDown91;\nconst faSortNumericDownAlt = faArrowDown91;\nconst faFaceGrinTongueSquint = {\n  prefix: 'fas',\n  iconName: 'face-grin-tongue-squint',\n  icon: [512, 512, [128541, \"grin-tongue-squint\"], \"f58a\", \"M0 256C0 368.9 73.1 464.7 174.5 498.8C165.3 484 160 466.6 160 448l0-47.3c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6l0 46.9c0 18.6-5.3 36-14.5 50.8C438.9 464.7 512 368.9 512 256C512 114.6 397.4 0 256 0S0 114.6 0 256zM116 141.1c0-9 9.6-14.7 17.5-10.5l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6zm262.5-10.5c7.9-4.2 17.5 1.5 17.5 10.5c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9zM320 448l0-45.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 45.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faGrinTongueSquint = faFaceGrinTongueSquint;\nconst faSprayCan = {\n  prefix: 'fas',\n  iconName: 'spray-can',\n  icon: [512, 512, [], \"f5bd\", \"M128 0l64 0c17.7 0 32 14.3 32 32l0 96L96 128l0-96c0-17.7 14.3-32 32-32zM0 256c0-53 43-96 96-96l128 0c53 0 96 43 96 96l0 208c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 256zm240 80A80 80 0 1 0 80 336a80 80 0 1 0 160 0zM256 64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM384 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM448 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM384 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faTruckMonster = {\n  prefix: 'fas',\n  iconName: 'truck-monster',\n  icon: [640, 512, [], \"f63b\", \"M288 64l0 64 128 0L368 64l-80 0zM419.2 25.6L496 128l80 0c17.7 0 32 14.3 32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32c-29.2-38.9-75.7-64-128-64s-98.8 25.1-128 64l-64 0c-29.2-38.9-75.7-64-128-64s-98.8 25.1-128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l160 0 0-80c0-26.5 21.5-48 48-48l96 0c20.1 0 39.1 9.5 51.2 25.6zM152 256l16 0c12.1 0 22.1 8.9 23.8 20.6c7.6 2.2 14.9 5.3 21.7 9c9.4-7 22.8-6.3 31.3 2.3l11.3 11.3c8.6 8.6 9.3 21.9 2.3 31.3c3.7 6.8 6.8 14.1 9 21.7c11.6 1.7 20.6 11.7 20.6 23.8l0 16c0 12.1-8.9 22.1-20.6 23.8c-2.2 7.6-5.3 14.9-9 21.7c7 9.4 6.3 22.8-2.3 31.3l-11.3 11.3c-8.6 8.6-21.9 9.3-31.3 2.2c-6.8 3.7-14.1 6.8-21.7 9C190.1 503.1 180.1 512 168 512l-16 0c-12.1 0-22.1-8.9-23.8-20.6c-7.6-2.2-14.9-5.3-21.7-9c-9.4 7.1-22.8 6.3-31.3-2.2L63.8 468.9c-8.6-8.6-9.3-21.9-2.3-31.3c-3.7-6.9-6.8-14.1-9-21.8C40.9 414.1 32 404.1 32 392l0-16c0-12.1 8.9-22.1 20.6-23.8c2.2-7.6 5.3-14.9 9-21.8c-7-9.4-6.3-22.8 2.3-31.3l11.3-11.3c8.6-8.6 21.9-9.3 31.3-2.3c6.8-3.7 14.1-6.8 21.7-9c1.7-11.6 11.7-20.6 23.8-20.6zm8 176a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM448.2 276.6c1.7-11.6 11.7-20.6 23.8-20.6l16 0c12.1 0 22.1 8.9 23.8 20.6c7.6 2.2 14.9 5.3 21.8 9c9.4-7 22.8-6.3 31.3 2.3l11.3 11.3c8.6 8.6 9.3 21.9 2.2 31.3c3.7 6.8 6.8 14.1 9 21.7c11.6 1.7 20.6 11.7 20.6 23.8l0 16c0 12.1-8.9 22.1-20.6 23.8c-2.2 7.6-5.3 14.9-9 21.7c7 9.4 6.3 22.8-2.2 31.3l-11.3 11.3c-8.6 8.6-21.9 9.3-31.3 2.2c-6.9 3.7-14.1 6.8-21.8 9C510.1 503.1 500.1 512 488 512l-16 0c-12.1 0-22.1-8.9-23.8-20.6c-7.6-2.2-14.9-5.3-21.7-9c-9.4 7.1-22.8 6.3-31.3-2.2l-11.3-11.3c-8.6-8.6-9.3-21.9-2.2-31.3c-3.7-6.9-6.8-14.1-9-21.8C360.9 414.1 352 404.1 352 392l0-16c0-12.1 8.9-22.1 20.6-23.8c2.2-7.6 5.3-14.9 9-21.8c-7-9.4-6.3-22.8 2.2-31.3l11.3-11.3c8.6-8.6 21.9-9.3 31.3-2.3c6.8-3.7 14.1-6.8 21.7-9zM528 384a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faW = {\n  prefix: 'fas',\n  iconName: 'w',\n  icon: [576, 512, [119], \"57\", \"M20.8 34c16.5-6.2 35 2.2 41.2 18.7l110.2 294L257.3 55c4-13.7 16.5-23 30.7-23s26.7 9.4 30.7 23l85.1 291.7L514 52.8c6.2-16.5 24.6-24.9 41.2-18.7s24.9 24.7 18.7 41.2l-144 384c-4.8 12.9-17.4 21.3-31.2 20.7s-25.7-9.8-29.5-23L288 178.3 206.7 457c-3.9 13.2-15.8 22.5-29.5 23s-26.3-7.8-31.2-20.7L2 75.2C-4.2 58.7 4.2 40.2 20.8 34z\"]\n};\nconst faEarthAfrica = {\n  prefix: 'fas',\n  iconName: 'earth-africa',\n  icon: [512, 512, [127757, \"globe-africa\"], \"f57c\", \"M177.8 63.2l10 17.4c2.8 4.8 4.2 10.3 4.2 15.9l0 41.4c0 3.9 1.6 7.7 4.3 10.4c6.2 6.2 16.5 5.7 22-1.2l13.6-17c4.7-5.9 12.9-7.7 19.6-4.3l15.2 7.6c3.4 1.7 7.2 2.6 11 2.6c6.5 0 12.8-2.6 17.4-7.2l3.9-3.9c2.9-2.9 7.3-3.6 11-1.8l29.2 14.6c7.8 3.9 12.6 11.8 12.6 20.5c0 10.5-7.1 19.6-17.3 22.2l-35.4 8.8c-7.4 1.8-15.1 1.5-22.4-.9l-32-10.7c-3.3-1.1-6.7-1.7-10.2-1.7c-7 0-13.8 2.3-19.4 6.5L176 212c-10.1 7.6-16 19.4-16 32l0 28c0 26.5 21.5 48 48 48l32 0c8.8 0 16 7.2 16 16l0 48c0 17.7 14.3 32 32 32c10.1 0 19.6-4.7 25.6-12.8l25.6-34.1c8.3-11.1 12.8-24.6 12.8-38.4l0-12.1c0-3.9 2.6-7.3 6.4-8.2l5.3-1.3c11.9-3 20.3-13.7 20.3-26c0-7.1-2.8-13.9-7.8-18.9l-33.5-33.5c-3.7-3.7-3.7-9.7 0-13.4c5.7-5.7 14.1-7.7 21.8-5.1l14.1 4.7c12.3 4.1 25.7-1.5 31.5-13c3.5-7 11.2-10.8 18.9-9.2l27.4 5.5C432 112.4 351.5 48 256 48c-27.7 0-54 5.4-78.2 15.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faGlobeAfrica = faEarthAfrica;\nconst faRainbow = {\n  prefix: 'fas',\n  iconName: 'rainbow',\n  icon: [640, 512, [127752], \"f75b\", \"M320 96C178.6 96 64 210.6 64 352l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96C0 175.3 143.3 32 320 32s320 143.3 320 320l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96C576 210.6 461.4 96 320 96zm0 192c-35.3 0-64 28.7-64 64l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-70.7 57.3-128 128-128s128 57.3 128 128l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-35.3-28.7-64-64-64zM160 352l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-123.7 100.3-224 224-224s224 100.3 224 224l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-88.4-71.6-160-160-160s-160 71.6-160 160z\"]\n};\nconst faCircleNotch = {\n  prefix: 'fas',\n  iconName: 'circle-notch',\n  icon: [512, 512, [], \"f1ce\", \"M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8C121.8 95.6 64 169.1 64 256c0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1c-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256c0 141.4-114.6 256-256 256S0 397.4 0 256C0 140 77.1 42.1 182.9 10.6c16.9-5 34.8 4.6 39.8 21.5z\"]\n};\nconst faTabletScreenButton = {\n  prefix: 'fas',\n  iconName: 'tablet-screen-button',\n  icon: [448, 512, [\"tablet-alt\"], \"f3fa\", \"M0 64C0 28.7 28.7 0 64 0L384 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM256 448a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 64L64 64l0 320 320 0 0-320z\"]\n};\nconst faTabletAlt = faTabletScreenButton;\nconst faPaw = {\n  prefix: 'fas',\n  iconName: 'paw',\n  icon: [512, 512, [], \"f1b0\", \"M226.5 92.9c14.3 42.9-.3 86.2-32.6 96.8s-70.1-15.6-84.4-58.5s.3-86.2 32.6-96.8s70.1 15.6 84.4 58.5zM100.4 198.6c18.9 32.4 14.3 70.1-10.2 84.1s-59.7-.9-78.5-33.3S-2.7 179.3 21.8 165.3s59.7 .9 78.5 33.3zM69.2 401.2C121.6 259.9 214.7 224 256 224s134.4 35.9 186.8 177.2c3.6 9.7 5.2 20.1 5.2 30.5l0 1.6c0 25.8-20.9 46.7-46.7 46.7c-11.5 0-22.9-1.4-34-4.2l-88-22c-15.3-3.8-31.3-3.8-46.6 0l-88 22c-11.1 2.8-22.5 4.2-34 4.2C84.9 480 64 459.1 64 433.3l0-1.6c0-10.4 1.6-20.8 5.2-30.5zM421.8 282.7c-24.5-14-29.1-51.7-10.2-84.1s54-47.3 78.5-33.3s29.1 51.7 10.2 84.1s-54 47.3-78.5 33.3zM310.1 189.7c-32.3-10.6-46.9-53.9-32.6-96.8s52.1-69.1 84.4-58.5s46.9 53.9 32.6 96.8s-52.1 69.1-84.4 58.5z\"]\n};\nconst faCloud = {\n  prefix: 'fas',\n  iconName: 'cloud',\n  icon: [640, 512, [9729], \"f0c2\", \"M0 336c0 79.5 64.5 144 144 144l368 0c70.7 0 128-57.3 128-128c0-61.9-44-113.6-102.4-125.4c4.1-10.7 6.4-22.4 6.4-34.6c0-53-43-96-96-96c-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32C167.6 32 96 103.6 96 192c0 2.7 .1 5.4 .2 8.1C40.2 219.8 0 273.2 0 336z\"]\n};\nconst faTrowelBricks = {\n  prefix: 'fas',\n  iconName: 'trowel-bricks',\n  icon: [512, 512, [], \"e58a\", \"M240.8 4.8C250.3 10.6 256 20.9 256 32l0 72 89 0c3.6-13.8 16.1-24 31-24l88 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-88 0c-14.9 0-27.4-10.2-31-24l-89 0 0 72c0 11.1-5.7 21.4-15.2 27.2s-21.2 6.4-31.1 1.4l-192-96C6.8 151.2 0 140.1 0 128s6.8-23.2 17.7-28.6l192-96c9.9-5 21.7-4.4 31.1 1.4zM288 256c0-17.7 14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-64zM32 384l96 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm192 0l256 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32z\"]\n};\nconst faFaceFlushed = {\n  prefix: 'fas',\n  iconName: 'face-flushed',\n  icon: [512, 512, [128563, \"flushed\"], \"f579\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM176 384c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16zm-16-88a72 72 0 1 0 0-144 72 72 0 1 0 0 144zm264-72a72 72 0 1 0 -144 0 72 72 0 1 0 144 0zm-288 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm192 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faFlushed = faFaceFlushed;\nconst faHospitalUser = {\n  prefix: 'fas',\n  iconName: 'hospital-user',\n  icon: [576, 512, [], \"f80d\", \"M48 0C21.5 0 0 21.5 0 48L0 256l144 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L0 288l0 64 144 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L0 384l0 80c0 26.5 21.5 48 48 48l217.9 0c-6.3-10.2-9.9-22.2-9.9-35.1c0-46.9 25.8-87.8 64-109.2l0-95.9L320 48c0-26.5-21.5-48-48-48L48 0zM152 64l16 0c8.8 0 16 7.2 16 16l0 24 24 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-24 0 0 24c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-24-24 0c-8.8 0-16-7.2-16-16l0-16c0-8.8 7.2-16 16-16l24 0 0-24c0-8.8 7.2-16 16-16zM512 272a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM288 477.1c0 19.3 15.6 34.9 34.9 34.9l218.2 0c19.3 0 34.9-15.6 34.9-34.9c0-51.4-41.7-93.1-93.1-93.1l-101.8 0c-51.4 0-93.1 41.7-93.1 93.1z\"]\n};\nconst faTentArrowLeftRight = {\n  prefix: 'fas',\n  iconName: 'tent-arrow-left-right',\n  icon: [576, 512, [], \"e57f\", \"M488.1 6.2c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9L489.5 72 86.5 72l33.5-30.2c9.9-8.9 10.7-24 1.8-33.9S97.8-2.7 87.9 6.2l-80 72C2.9 82.7 0 89.2 0 96s2.9 13.3 7.9 17.8l80 72c9.9 8.9 25 8.1 33.9-1.8s8.1-25-1.8-33.9L86.5 120l402.9 0-33.5 30.2c-9.9 8.9-10.7 24-1.8 33.9s24 10.7 33.9 1.8l80-72c5.1-4.6 7.9-11 7.9-17.8s-2.9-13.3-7.9-17.8l-80-72zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"]\n};\nconst faGavel = {\n  prefix: 'fas',\n  iconName: 'gavel',\n  icon: [512, 512, [\"legal\"], \"f0e3\", \"M318.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-120 120c-12.5 12.5-12.5 32.8 0 45.3l16 16c12.5 12.5 32.8 12.5 45.3 0l4-4L325.4 293.4l-4 4c-12.5 12.5-12.5 32.8 0 45.3l16 16c12.5 12.5 32.8 12.5 45.3 0l120-120c12.5-12.5 12.5-32.8 0-45.3l-16-16c-12.5-12.5-32.8-12.5-45.3 0l-4 4L330.6 74.6l4-4c12.5-12.5 12.5-32.8 0-45.3l-16-16zm-152 288c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l48 48c12.5 12.5 32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-1.4-1.4L272 285.3 226.7 240 168 298.7l-1.4-1.4z\"]\n};\nconst faLegal = faGavel;\nconst faBinoculars = {\n  prefix: 'fas',\n  iconName: 'binoculars',\n  icon: [512, 512, [], \"f1e5\", \"M128 32l32 0c17.7 0 32 14.3 32 32l0 32L96 96l0-32c0-17.7 14.3-32 32-32zm64 96l0 320c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32l0-59.1c0-34.6 9.4-68.6 27.2-98.3C40.9 267.8 49.7 242.4 53 216L60.5 156c2-16 15.6-28 31.8-28l99.8 0zm227.8 0c16.1 0 29.8 12 31.8 28L459 216c3.3 26.4 12.1 51.8 25.8 74.6c17.8 29.7 27.2 63.7 27.2 98.3l0 59.1c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-320 99.8 0zM320 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 32-96 0 0-32zm-32 64l0 160-64 0 0-160 64 0z\"]\n};\nconst faMicrophoneSlash = {\n  prefix: 'fas',\n  iconName: 'microphone-slash',\n  icon: [640, 512, [], \"f131\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 21.2-5.1 41.1-14.2 58.7L416 300.8 416 96c0-53-43-96-96-96s-96 43-96 96l0 54.3L38.8 5.1zM344 430.4c20.4-2.8 39.7-9.1 57.3-18.2l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128l0-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6z\"]\n};\nconst faBoxTissue = {\n  prefix: 'fas',\n  iconName: 'box-tissue',\n  icon: [512, 512, [], \"e05b\", \"M92.5 0L208 0c40 0 52 24 64 48s24 48 64 48l85.2 0C436 96 448 108 448 122.8c0 3.4-.7 6.8-1.9 10L409.6 224 384 288l-256 0-16-64L64.9 35.4c-.6-2.3-.9-4.6-.9-6.9C64 12.8 76.8 0 92.5 0zM79 224l16 64-15 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 256 0 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-13.5 0 25.6-64 19.9 0c26.5 0 48 21.5 48 48l0 112L0 384 0 272c0-26.5 21.5-48 48-48l31 0zM0 416l512 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48l0-48z\"]\n};\nconst faMotorcycle = {\n  prefix: 'fas',\n  iconName: 'motorcycle',\n  icon: [640, 512, [127949], \"f21c\", \"M280 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l57.7 0 16.4 30.3L256 192l-45.3-45.3c-12-12-28.3-18.7-45.3-18.7L64 128c-17.7 0-32 14.3-32 32l0 32 96 0c88.4 0 160 71.6 160 160c0 11-1.1 21.7-3.2 32l70.4 0c-2.1-10.3-3.2-21-3.2-32c0-52.2 25-98.6 63.7-127.8l15.4 28.6C402.4 276.3 384 312 384 352c0 70.7 57.3 128 128 128s128-57.3 128-128s-57.3-128-128-128c-13.5 0-26.5 2.1-38.7 6L418.2 128l61.8 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32l-20.4 0c-7.5 0-14.7 2.6-20.5 7.4L391.7 78.9l-14-26c-7-12.9-20.5-21-35.2-21L280 32zM462.7 311.2l28.2 52.2c6.3 11.7 20.9 16 32.5 9.7s16-20.9 9.7-32.5l-28.2-52.2c2.3-.3 4.7-.4 7.1-.4c35.3 0 64 28.7 64 64s-28.7 64-64 64s-64-28.7-64-64c0-15.5 5.5-29.7 14.7-40.8zM187.3 376c-9.5 23.5-32.5 40-59.3 40c-35.3 0-64-28.7-64-64s28.7-64 64-64c26.9 0 49.9 16.5 59.3 40l66.4 0C242.5 268.8 190.5 224 128 224C57.3 224 0 281.3 0 352s57.3 128 128 128c62.5 0 114.5-44.8 125.8-104l-66.4 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faBellConcierge = {\n  prefix: 'fas',\n  iconName: 'bell-concierge',\n  icon: [512, 512, [128718, \"concierge-bell\"], \"f562\", \"M216 64c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0 0 33.3C119.6 157.2 32 252.4 32 368l448 0c0-115.6-87.6-210.8-200-222.7l0-33.3 16 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0-40 0zM24 400c-13.3 0-24 10.7-24 24s10.7 24 24 24l464 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 400z\"]\n};\nconst faConciergeBell = faBellConcierge;\nconst faPenRuler = {\n  prefix: 'fas',\n  iconName: 'pen-ruler',\n  icon: [512, 512, [\"pencil-ruler\"], \"f5ae\", \"M469.3 19.3l23.4 23.4c25 25 25 65.5 0 90.5l-56.4 56.4L322.3 75.7l56.4-56.4c25-25 65.5-25 90.5 0zM44.9 353.2L299.7 98.3 413.7 212.3 158.8 467.1c-6.7 6.7-15.1 11.6-24.2 14.2l-104 29.7c-8.4 2.4-17.4 .1-23.6-6.1s-8.5-15.2-6.1-23.6l29.7-104c2.6-9.2 7.5-17.5 14.2-24.2zM249.4 103.4L103.4 249.4 16 161.9c-18.7-18.7-18.7-49.1 0-67.9L94.1 16c18.7-18.7 49.1-18.7 67.9 0l19.8 19.8c-.3 .3-.7 .6-1 .9l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l64-64c.3-.3 .6-.7 .9-1l45.1 45.1zM408.6 262.6l45.1 45.1c-.3 .3-.7 .6-1 .9l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l64-64c.3-.3 .6-.7 .9-1L496 350.1c18.7 18.7 18.7 49.1 0 67.9L417.9 496c-18.7 18.7-49.1 18.7-67.9 0l-87.4-87.4L408.6 262.6z\"]\n};\nconst faPencilRuler = faPenRuler;\nconst faPeopleArrows = {\n  prefix: 'fas',\n  iconName: 'people-arrows',\n  icon: [640, 512, [\"people-arrows-left-right\"], \"e068\", \"M64 64a64 64 0 1 1 128 0A64 64 0 1 1 64 64zM25.9 233.4C29.3 191.9 64 160 105.6 160l44.8 0c27 0 51 13.4 65.5 34.1c-2.7 1.9-5.2 4-7.5 6.3l-64 64c-21.9 21.9-21.9 57.3 0 79.2L192 391.2l0 72.8c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-115.7c-26.5-9.5-44.7-35.8-42.2-65.6l4.1-49.3zM448 64a64 64 0 1 1 128 0A64 64 0 1 1 448 64zM431.6 200.4c-2.3-2.3-4.9-4.4-7.5-6.3c14.5-20.7 38.6-34.1 65.5-34.1l44.8 0c41.6 0 76.3 31.9 79.7 73.4l4.1 49.3c2.5 29.8-15.7 56.1-42.2 65.6L576 464c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-72.8 47.6-47.6c21.9-21.9 21.9-57.3 0-79.2l-64-64zM272 240l0 32 96 0 0-32c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l64 64c9.4 9.4 9.4 24.6 0 33.9l-64 64c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2l0-32-96 0 0 32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2z\"]\n};\nconst faPeopleArrowsLeftRight = faPeopleArrows;\nconst faMarsAndVenusBurst = {\n  prefix: 'fas',\n  iconName: 'mars-and-venus-burst',\n  icon: [640, 512, [], \"e523\", \"M504 0c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l39 39-22.2 22.2C475.9 78.4 439.6 64 400 64c-88.4 0-160 71.6-160 160c0 80.2 59.1 146.7 136.1 158.2c0 .6-.1 1.2-.1 1.8l0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .4 0 .3 0 .4 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3 0 .3-24 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l24 0 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .2 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1 0 .1c0 0 0 .1 0 .1s0 .1 0 .1l0 .1c0 0 0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 .1 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 .1s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0l24 0-24 0c0 13.3 10.7 24 24 24s24-10.7 24-24l-24 0 24 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0 0 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1s0-.1 0-.1l0-.1c0 0 0-.1 0-.1s0-.1 0-.1l0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.1 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 0-.2 24 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-24 0 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.3 0-.4 0-.3 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4 0-.4c0-.6 0-1.2-.1-1.8c77-11.6 136.1-78 136.1-158.2c0-31.4-9-60.7-24.7-85.4L560 113.9l39 39c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L504 0zM400 128a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.1 3.8 9.9 5.1 15.2 3.6C223.6 310.8 208 269.2 208 224c0-60.8 28.3-115 72.4-150.2L220.3 92.1l-29.4-74z\"]\n};\nconst faSquareCaretRight = {\n  prefix: 'fas',\n  iconName: 'square-caret-right',\n  icon: [448, 512, [\"caret-square-right\"], \"f152\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM320 256c0 6.7-2.8 13-7.7 17.6l-112 104c-7 6.5-17.2 8.2-25.9 4.4s-14.4-12.5-14.4-22l0-208c0-9.5 5.7-18.2 14.4-22s18.9-2.1 25.9 4.4l112 104c4.9 4.5 7.7 10.9 7.7 17.6z\"]\n};\nconst faCaretSquareRight = faSquareCaretRight;\nconst faScissors = {\n  prefix: 'fas',\n  iconName: 'scissors',\n  icon: [512, 512, [9984, 9986, 9988, \"cut\"], \"f0c4\", \"M256 192l-39.5-39.5c4.9-12.6 7.5-26.2 7.5-40.5C224 50.1 173.9 0 112 0S0 50.1 0 112s50.1 112 112 112c14.3 0 27.9-2.7 40.5-7.5L192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5C50.1 288 0 338.1 0 400s50.1 112 112 112s112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6c-28.3-28.3-74.1-28.3-102.4 0L256 192zm22.6 150.6L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0c7.1-7.1 7.1-18.5 0-25.6L342.6 278.6l-64 64zM64 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm48 240a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faCut = faScissors;\nconst faSunPlantWilt = {\n  prefix: 'fas',\n  iconName: 'sun-plant-wilt',\n  icon: [640, 512, [], \"e57a\", \"M160 0c-6.3 0-12 3.7-14.6 9.5L120.6 64.9 63.9 43.2c-5.9-2.3-12.6-.8-17 3.6s-5.9 11.1-3.6 17l21.7 56.7L9.5 145.4C3.7 148 0 153.7 0 160s3.7 12 9.5 14.6l55.4 24.8L43.2 256.1c-2.3 5.9-.8 12.6 3.6 17s11.1 5.9 17 3.6l56.7-21.7 24.8 55.4c2.6 5.8 8.3 9.5 14.6 9.5s12-3.7 14.6-9.5l24.8-55.4 56.7 21.7c5.9 2.3 12.6 .8 17-3.6s5.9-11.1 3.6-17l-21.7-56.7 55.4-24.8c5.8-2.6 9.5-8.3 9.5-14.6s-3.7-12-9.5-14.6l-55.4-24.8 21.7-56.7c2.3-5.9 .8-12.6-3.6-17s-11.1-5.9-17-3.6L199.4 64.9 174.6 9.5C172 3.7 166.3 0 160 0zm0 96a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm312 16c0-17.7 14.3-32 32-32s32 14.3 32 32l0 53.4c-14.8 7.7-24 23.1-24 44.6c0 16.8 16 44 37.4 67.2c5.8 6.2 15.5 6.2 21.2 0C624 318 640 290.7 640 274c0-21.5-9.2-37-24-44.6l0-53.4c0-44.2-35.8-80-80-80s-80 35.8-80 80l0 22.7c-9.8-4.3-20.6-6.7-32-6.7c-44.2 0-80 35.8-80 80l0 21.4c-14.8 7.7-24 23.1-24 44.6c0 16.8 16 44 37.4 67.2c5.8 6.2 15.5 6.2 21.2 0C400 382 416 354.7 416 338c0-21.5-9.2-37-24-44.6l0-21.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 8 0 168L32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-104 0 0-168 0-8 0-96z\"]\n};\nconst faToiletsPortable = {\n  prefix: 'fas',\n  iconName: 'toilets-portable',\n  icon: [576, 512, [], \"e584\", \"M32 0L224 0c17.7 0 32 14.3 32 32l0 32L0 64 0 32C0 14.3 14.3 0 32 0zM0 96l24 0 208 0 24 0 0 24 0 368c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8L48 480l0 8c0 13.3-10.7 24-24 24s-24-10.7-24-24L0 120 0 96zM192 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16zM352 0L544 0c17.7 0 32 14.3 32 32l0 32L320 64l0-32c0-17.7 14.3-32 32-32zM320 96l24 0 208 0 24 0 0 24 0 368c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8-160 0 0 8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-368 0-24zM512 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8-7.2-16-16-16z\"]\n};\nconst faHockeyPuck = {\n  prefix: 'fas',\n  iconName: 'hockey-puck',\n  icon: [512, 512, [], \"f453\", \"M256 256C114.6 256 0 213 0 160s114.6-96 256-96s256 43 256 96s-114.6 96-256 96zm192.3 1.8c24.7-9.3 46.9-21 63.7-35.6L512 352c0 53-114.6 96-256 96S0 405 0 352L0 222.3c16.8 14.6 39 26.3 63.7 35.6C114.5 276.9 182.5 288 256 288s141.5-11.1 192.3-30.2z\"]\n};\nconst faTable = {\n  prefix: 'fas',\n  iconName: 'table',\n  icon: [512, 512, [], \"f0ce\", \"M64 256l0-96 160 0 0 96L64 256zm0 64l160 0 0 96L64 416l0-96zm224 96l0-96 160 0 0 96-160 0zM448 256l-160 0 0-96 160 0 0 96zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"]\n};\nconst faMagnifyingGlassArrowRight = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-arrow-right',\n  icon: [512, 512, [], \"e521\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM241 119c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31L120 184c-13.3 0-24 10.7-24 24s10.7 24 24 24l118.1 0-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9l-72-72z\"]\n};\nconst faTachographDigital = {\n  prefix: 'fas',\n  iconName: 'tachograph-digital',\n  icon: [640, 512, [\"digital-tachograph\"], \"f566\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l512 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm32 64l224 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L96 256c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zM64 368c0-8.8 7.2-16 16-16l256 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 384c-8.8 0-16-7.2-16-16zm320 0c0-8.8 7.2-16 16-16l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16zM80 288a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faDigitalTachograph = faTachographDigital;\nconst faUsersSlash = {\n  prefix: 'fas',\n  iconName: 'users-slash',\n  icon: [640, 512, [], \"e073\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L440.6 320l178.1 0c11.8 0 21.3-9.6 21.3-21.3C640 239.8 592.2 192 533.3 192l-42.7 0c-15.9 0-31 3.5-44.6 9.7c1.3 7.2 1.9 14.7 1.9 22.3c0 30.2-10.5 58-28 79.9l-25.2-19.7C408.1 267.7 416 246.8 416 224c0-53-43-96-96-96c-31.1 0-58.7 14.8-76.3 37.7l-40.6-31.8c13-14.2 20.9-33.1 20.9-53.9c0-44.2-35.8-80-80-80C116.3 0 91.9 14.1 77.5 35.5L38.8 5.1zM106.7 192C47.8 192 0 239.8 0 298.7C0 310.4 9.6 320 21.3 320l213.3 0c.2 0 .4 0 .7 0c-20.6-18.2-35.2-42.8-40.8-70.8L121.8 192l-15.2 0zM261.3 352C187.7 352 128 411.7 128 485.3c0 14.7 11.9 26.7 26.7 26.7l330.7 0c10.5 0 19.5-6 23.9-14.8L324.9 352l-63.6 0zM512 160A80 80 0 1 0 512 0a80 80 0 1 0 0 160z\"]\n};\nconst faClover = {\n  prefix: 'fas',\n  iconName: 'clover',\n  icon: [448, 512, [], \"e139\", \"M216.6 49.9C205.1 38.5 189.5 32 173.3 32C139.4 32 112 59.4 112 93.3l0 4.9c0 12 3.3 23.7 9.4 34l18.8 31.3c1.1 1.8 1.2 3.1 1 4.2c-.2 1.2-.8 2.5-2 3.6s-2.4 1.8-3.6 2c-1 .2-2.4 .1-4.2-1l-31.3-18.8c-10.3-6.2-22-9.4-34-9.4l-4.9 0C27.4 144 0 171.4 0 205.3c0 16.2 6.5 31.8 17.9 43.3l1.2 1.2c3.4 3.4 3.4 9 0 12.4l-1.2 1.2C6.5 274.9 0 290.5 0 306.7C0 340.6 27.4 368 61.3 368l4.9 0c12 0 23.7-3.3 34-9.4l31.3-18.8c1.8-1.1 3.1-1.2 4.2-1c1.2 .2 2.5 .8 3.6 2s1.8 2.4 2 3.6c.2 1 .1 2.4-1 4.2l-18.8 31.3c-6.2 10.3-9.4 22-9.4 34l0 4.9c0 33.8 27.4 61.3 61.3 61.3c16.2 0 31.8-6.5 43.3-17.9l1.2-1.2c3.4-3.4 9-3.4 12.4 0l1.2 1.2c11.5 11.5 27.1 17.9 43.3 17.9c33.8 0 61.3-27.4 61.3-61.3l0-4.9c0-12-3.3-23.7-9.4-34l-18.8-31.3c-1.1-1.8-1.2-3.1-1-4.2c.2-1.2 .8-2.5 2-3.6s2.4-1.8 3.6-2c1-.2 2.4-.1 4.2 1l31.3 18.8c10.3 6.2 22 9.4 34 9.4l4.9 0c33.8 0 61.3-27.4 61.3-61.3c0-16.2-6.5-31.8-17.9-43.3l-1.2-1.2c-3.4-3.4-3.4-9 0-12.4l1.2-1.2c11.5-11.5 17.9-27.1 17.9-43.3c0-33.8-27.4-61.3-61.3-61.3l-4.9 0c-12 0-23.7 3.3-34 9.4l-31.3 18.8c-1.8 1.1-3.1 1.2-4.2 1c-1.2-.2-2.5-.8-3.6-2s-1.8-2.4-2-3.6c-.2-1-.1-2.4 1-4.2l18.8-31.3c6.2-10.3 9.4-22 9.4-34l0-4.9C336 59.4 308.6 32 274.7 32c-16.2 0-31.8 6.5-43.3 17.9l-1.2 1.2c-3.4 3.4-9 3.4-12.4 0l-1.2-1.2z\"]\n};\nconst faReply = {\n  prefix: 'fas',\n  iconName: 'reply',\n  icon: [512, 512, [61714, \"mail-reply\"], \"f3e5\", \"M205 34.8c11.5 5.1 19 16.6 19 29.2l0 64 112 0c97.2 0 176 78.8 176 176c0 113.3-81.5 163.9-100.2 174.1c-2.5 1.4-5.3 1.9-8.1 1.9c-10.9 0-19.7-8.9-19.7-19.7c0-7.5 4.3-14.4 9.8-19.5c9.4-8.8 22.2-26.4 22.2-56.7c0-53-43-96-96-96l-96 0 0 64c0 12.6-7.4 24.1-19 29.2s-25 3-34.4-5.4l-160-144C3.9 225.7 0 217.1 0 208s3.9-17.7 10.6-23.8l160-144c9.4-8.5 22.9-10.6 34.4-5.4z\"]\n};\nconst faMailReply = faReply;\nconst faStarAndCrescent = {\n  prefix: 'fas',\n  iconName: 'star-and-crescent',\n  icon: [512, 512, [9770], \"f699\", \"M0 256C0 114.6 114.6 0 256 0c33 0 64.6 6.3 93.6 17.7c7.4 2.9 11.5 10.7 9.8 18.4s-8.8 13-16.7 12.4c-4.8-.3-9.7-.5-14.6-.5c-114.9 0-208 93.1-208 208s93.1 208 208 208c4.9 0 9.8-.2 14.6-.5c7.9-.5 15 4.7 16.7 12.4s-2.4 15.5-9.8 18.4C320.6 505.7 289 512 256 512C114.6 512 0 397.4 0 256zM375.4 137.4c3.5-7.1 13.7-7.1 17.2 0l31.5 63.8c1.4 2.8 4.1 4.8 7.2 5.3l70.4 10.2c7.9 1.1 11 10.8 5.3 16.4l-50.9 49.6c-2.3 2.2-3.3 5.4-2.8 8.5l12 70.1c1.3 7.8-6.9 13.8-13.9 10.1l-63-33.1c-2.8-1.5-6.1-1.5-8.9 0l-63 33.1c-7 3.7-15.3-2.3-13.9-10.1l12-70.1c.5-3.1-.5-6.3-2.8-8.5L261 233.1c-5.7-5.6-2.6-15.2 5.3-16.4l70.4-10.2c3.1-.5 5.8-2.4 7.2-5.3l31.5-63.8z\"]\n};\nconst faHouseFire = {\n  prefix: 'fas',\n  iconName: 'house-fire',\n  icon: [640, 512, [], \"e50c\", \"M288 350.1l0 1.9-32 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L447.3 128.1c-12.3-1-25 3-34.8 11.7c-35.4 31.6-65.6 67.7-87.3 102.8C304.3 276.5 288 314.9 288 350.1zM480 512c-88.4 0-160-71.6-160-160c0-76.7 62.5-144.7 107.2-179.4c5-3.9 10.9-5.8 16.8-5.8c7.9-.1 16 3.1 22 9.2l46 46 11.3-11.3c11.7-11.7 30.6-12.7 42.3-1C624.5 268 640 320.2 640 352c0 88.4-71.6 160-160 160zm64-111.8c0-36.5-37-73-54.8-88.4c-5.4-4.7-13.1-4.7-18.5 0C453 327.1 416 363.6 416 400.2c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faSquareMinus = {\n  prefix: 'fas',\n  iconName: 'square-minus',\n  icon: [448, 512, [61767, \"minus-square\"], \"f146\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm88 200l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faMinusSquare = faSquareMinus;\nconst faHelicopter = {\n  prefix: 'fas',\n  iconName: 'helicopter',\n  icon: [640, 512, [128641], \"f533\", \"M128 32c0-17.7 14.3-32 32-32L544 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L384 64l0 64 32 0c88.4 0 160 71.6 160 160l0 64c0 17.7-14.3 32-32 32l-160 0-64 0c-20.1 0-39.1-9.5-51.2-25.6l-71.4-95.2c-3.5-4.7-8.3-8.3-13.7-10.5L47.2 198.1c-9.5-3.8-16.7-12-19.2-22L5 83.9C2.4 73.8 10.1 64 20.5 64L48 64c10.1 0 19.6 4.7 25.6 12.8L112 128l208 0 0-64L160 64c-17.7 0-32-14.3-32-32zM384 320l128 0 0-32c0-53-43-96-96-96l-32 0 0 128zM630.6 425.4c12.5 12.5 12.5 32.8 0 45.3l-3.9 3.9c-24 24-56.6 37.5-90.5 37.5L256 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l280.2 0c17 0 33.3-6.7 45.3-18.7l3.9-3.9c12.5-12.5 32.8-12.5 45.3 0z\"]\n};\nconst faCompass = {\n  prefix: 'fas',\n  iconName: 'compass',\n  icon: [512, 512, [129517], \"f14e\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm50.7-186.9L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faSquareCaretDown = {\n  prefix: 'fas',\n  iconName: 'square-caret-down',\n  icon: [448, 512, [\"caret-square-down\"], \"f150\", \"M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z\"]\n};\nconst faCaretSquareDown = faSquareCaretDown;\nconst faFileCircleQuestion = {\n  prefix: 'fas',\n  iconName: 'file-circle-question',\n  icon: [576, 512, [], \"e4ef\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM368 321.6l0 6.4c0 8.8 7.2 16 16 16s16-7.2 16-16l0-6.4c0-5.3 4.3-9.6 9.6-9.6l40.5 0c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2l0 14.8c0 8.8 7.2 16 16 16s16-7.2 16-16l0-5.1 23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9l-40.5 0c-23 0-41.6 18.6-41.6 41.6z\"]\n};\nconst faLaptopCode = {\n  prefix: 'fas',\n  iconName: 'laptop-code',\n  icon: [640, 512, [], \"f5fc\", \"M64 96c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 256-64 0 0-256L128 96l0 256-64 0L64 96zM0 403.2C0 392.6 8.6 384 19.2 384l601.6 0c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8L76.8 480C34.4 480 0 445.6 0 403.2zM281 209l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-48-48c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM393 175l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"]\n};\nconst faSwatchbook = {\n  prefix: 'fas',\n  iconName: 'swatchbook',\n  icon: [512, 512, [], \"f5c3\", \"M0 32C0 14.3 14.3 0 32 0L160 0c17.7 0 32 14.3 32 32l0 384c0 53-43 96-96 96s-96-43-96-96L0 32zM223.6 425.9c.3-3.3 .4-6.6 .4-9.9l0-262 75.4-75.4c12.5-12.5 32.8-12.5 45.3 0l90.5 90.5c12.5 12.5 12.5 32.8 0 45.3L223.6 425.9zM182.8 512l192-192L480 320c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-297.2 0zM128 64L64 64l0 64 64 0 0-64zM64 192l0 64 64 0 0-64-64 0zM96 440a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faPrescriptionBottle = {\n  prefix: 'fas',\n  iconName: 'prescription-bottle',\n  icon: [384, 512, [], \"f485\", \"M0 32C0 14.3 14.3 0 32 0L352 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64L0 32zm32 96l320 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-32 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L32 384l0-64 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L32 288l0-64 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L32 192l0-64z\"]\n};\nconst faBars = {\n  prefix: 'fas',\n  iconName: 'bars',\n  icon: [448, 512, [\"navicon\"], \"f0c9\", \"M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faNavicon = faBars;\nconst faPeopleGroup = {\n  prefix: 'fas',\n  iconName: 'people-group',\n  icon: [640, 512, [], \"e533\", \"M72 88a56 56 0 1 1 112 0A56 56 0 1 1 72 88zM64 245.7C54 256.9 48 271.8 48 288s6 31.1 16 42.3l0-84.7zm144.4-49.3C178.7 222.7 160 261.2 160 304c0 34.3 12 65.8 32 90.5l0 21.5c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-26.8C26.2 371.2 0 332.7 0 288c0-61.9 50.1-112 112-112l32 0c24 0 46.2 7.5 64.4 20.3zM448 416l0-21.5c20-24.7 32-56.2 32-90.5c0-42.8-18.7-81.3-48.4-107.7C449.8 183.5 472 176 496 176l32 0c61.9 0 112 50.1 112 112c0 44.7-26.2 83.2-64 101.2l0 26.8c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32zm8-328a56 56 0 1 1 112 0A56 56 0 1 1 456 88zM576 245.7l0 84.7c10-11.3 16-26.1 16-42.3s-6-31.1-16-42.3zM320 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM240 304c0 16.2 6 31 16 42.3l0-84.7c-10 11.3-16 26.1-16 42.3zm144-42.3l0 84.7c10-11.3 16-26.1 16-42.3s-6-31.1-16-42.3zM448 304c0 44.7-26.2 83.2-64 101.2l0 42.8c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-42.8c-37.8-18-64-56.5-64-101.2c0-61.9 50.1-112 112-112l32 0c61.9 0 112 50.1 112 112z\"]\n};\nconst faHourglassEnd = {\n  prefix: 'fas',\n  iconName: 'hourglass-end',\n  icon: [384, 512, [8987, \"hourglass-3\"], \"f253\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 256 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 0 64 0 32 0zM96 75l0-11 192 0 0 11c0 25.5-10.1 49.9-28.1 67.9L192 210.7l-67.9-67.9C106.1 124.9 96 100.4 96 75z\"]\n};\nconst faHourglass3 = faHourglassEnd;\nconst faHeartCrack = {\n  prefix: 'fas',\n  iconName: 'heart-crack',\n  icon: [512, 512, [128148, \"heart-broken\"], \"f7a9\", \"M119.4 44.1c23.3-3.9 46.8-1.9 68.6 5.3l49.8 77.5-75.4 75.4c-1.5 1.5-2.4 3.6-2.3 5.8s1 4.2 2.6 5.7l112 104c2.9 2.7 7.4 2.9 10.5 .3s3.8-7 1.7-10.4l-60.4-98.1 90.7-75.6c2.6-2.1 3.5-5.7 2.4-8.8L296.8 61.8c28.5-16.7 62.4-23.2 95.7-17.6C461.5 55.6 512 115.2 512 185.1l0 5.8c0 41.5-17.2 81.2-47.6 109.5L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9L47.6 300.4C17.2 272.1 0 232.4 0 190.9l0-5.8c0-69.9 50.5-129.5 119.4-141z\"]\n};\nconst faHeartBroken = faHeartCrack;\nconst faSquareUpRight = {\n  prefix: 'fas',\n  iconName: 'square-up-right',\n  icon: [448, 512, [8599, \"external-link-square-alt\"], \"f360\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM160 160c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l40 40-71 71C114 302 112 306.9 112 312s2 10 5.7 13.7l36.7 36.7c3.6 3.6 8.5 5.7 13.7 5.7s10-2 13.7-5.7l71-71 40 40c4.6 4.6 11.5 5.9 17.4 3.5s9.9-8.3 9.9-14.8l0-144c0-8.8-7.2-16-16-16l-144 0z\"]\n};\nconst faExternalLinkSquareAlt = faSquareUpRight;\nconst faFaceKissBeam = {\n  prefix: 'fas',\n  iconName: 'face-kiss-beam',\n  icon: [512, 512, [128537, \"kiss-beam\"], \"f597\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm48.7-198.3c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 443.1 257.4 448 240 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1 .3-.2 .6-.4c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.4-.3-.5-.3-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zm-87.1-84.9s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faKissBeam = faFaceKissBeam;\nconst faFilm = {\n  prefix: 'fas',\n  iconName: 'film',\n  icon: [512, 512, [127902], \"f008\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM48 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM48 240l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM48 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L64 96c-8.8 0-16 7.2-16 16zM416 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM160 128l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L192 96c-17.7 0-32 14.3-32 32zm32 160c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-128 0z\"]\n};\nconst faRulerHorizontal = {\n  prefix: 'fas',\n  iconName: 'ruler-horizontal',\n  icon: [640, 512, [], \"f547\", \"M0 336c0 26.5 21.5 48 48 48l544 0c26.5 0 48-21.5 48-48l0-160c0-26.5-21.5-48-48-48l-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0c-26.5 0-48 21.5-48 48L0 336z\"]\n};\nconst faPeopleRobbery = {\n  prefix: 'fas',\n  iconName: 'people-robbery',\n  icon: [576, 512, [], \"e536\", \"M488.2 59.1C478.1 99.6 441.7 128 400 128s-78.1-28.4-88.2-68.9L303 24.2C298.8 7.1 281.4-3.3 264.2 1S236.7 22.6 241 39.8l8.7 34.9c11 44 40.2 79.6 78.3 99.6L328 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-305.7c38.1-20 67.3-55.6 78.3-99.6L559 39.8c4.3-17.1-6.1-34.5-23.3-38.8S501.2 7.1 497 24.2l-8.7 34.9zM400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM80 96A48 48 0 1 0 80 0a48 48 0 1 0 0 96zm-8 32c-35.3 0-64 28.7-64 64l0 96 0 .6L8 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-227.3 13 20.5c5.9 9.2 16.1 14.9 27 14.9l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-30.4 0-37.4-58.9C157.6 142 132.1 128 104.7 128L72 128z\"]\n};\nconst faLightbulb = {\n  prefix: 'fas',\n  iconName: 'lightbulb',\n  icon: [384, 512, [128161], \"f0eb\", \"M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zM112 176c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-61.9 50.1-112 112-112c8.8 0 16 7.2 16 16s-7.2 16-16 16c-44.2 0-80 35.8-80 80z\"]\n};\nconst faCaretLeft = {\n  prefix: 'fas',\n  iconName: 'caret-left',\n  icon: [256, 512, [], \"f0d9\", \"M9.4 278.6c-12.5-12.5-12.5-32.8 0-45.3l128-128c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 256c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-128-128z\"]\n};\nconst faCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'circle-exclamation',\n  icon: [512, 512, [\"exclamation-circle\"], \"f06a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faExclamationCircle = faCircleExclamation;\nconst faSchoolCircleXmark = {\n  prefix: 'fas',\n  iconName: 'school-circle-xmark',\n  icon: [640, 512, [], \"e56d\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l272 0s0 0 0 0l-64 0 0-96c0-35.3 28.7-64 64-64l.3 0 .5 0c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8L640 144c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm0 128l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm22.6-144l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L518.6 368z\"]\n};\nconst faArrowRightFromBracket = {\n  prefix: 'fas',\n  iconName: 'arrow-right-from-bracket',\n  icon: [512, 512, [\"sign-out\"], \"f08b\", \"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 192 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128zM160 96c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 32C43 32 0 75 0 128L0 384c0 53 43 96 96 96l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l64 0z\"]\n};\nconst faSignOut = faArrowRightFromBracket;\nconst faCircleChevronDown = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-down',\n  icon: [512, 512, [\"chevron-circle-down\"], \"f13a\", \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM135 241c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l87 87 87-87c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 345c-9.4 9.4-24.6 9.4-33.9 0L135 241z\"]\n};\nconst faChevronCircleDown = faCircleChevronDown;\nconst faUnlockKeyhole = {\n  prefix: 'fas',\n  iconName: 'unlock-keyhole',\n  icon: [448, 512, [\"unlock-alt\"], \"f13e\", \"M224 64c-44.2 0-80 35.8-80 80l0 48 240 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256c0-35.3 28.7-64 64-64l16 0 0-48C80 64.5 144.5 0 224 0c57.5 0 107 33.7 130.1 82.3c7.6 16 .8 35.1-15.2 42.6s-35.1 .8-42.6-15.2C283.4 82.6 255.9 64 224 64zm32 320c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0z\"]\n};\nconst faUnlockAlt = faUnlockKeyhole;\nconst faCloudShowersHeavy = {\n  prefix: 'fas',\n  iconName: 'cloud-showers-heavy',\n  icon: [512, 512, [], \"f740\", \"M96 320c-53 0-96-43-96-96c0-42.5 27.6-78.6 65.9-91.2C64.7 126.1 64 119.1 64 112C64 50.1 114.1 0 176 0c43.1 0 80.5 24.3 99.2 60c14.7-17.1 36.5-28 60.8-28c44.2 0 80 35.8 80 80c0 5.5-.6 10.8-1.6 16c.5 0 1.1 0 1.6 0c53 0 96 43 96 96s-43 96-96 96L96 320zM81.5 353.9c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6S-3.3 490.7 1.9 478.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6zm120 0c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6zm244.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6s17.8 19.3 12.6 31.5zM313.5 353.9c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6z\"]\n};\nconst faHeadphonesSimple = {\n  prefix: 'fas',\n  iconName: 'headphones-simple',\n  icon: [512, 512, [\"headphones-alt\"], \"f58f\", \"M256 80C141.1 80 48 173.1 48 288l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24L0 288C0 146.6 114.6 32 256 32s256 114.6 256 256l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-104c0-114.9-93.1-208-208-208zM80 352c0-35.3 28.7-64 64-64l16 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-16 0c-35.3 0-64-28.7-64-64l0-64zm288-64c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-16 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l16 0z\"]\n};\nconst faHeadphonesAlt = faHeadphonesSimple;\nconst faSitemap = {\n  prefix: 'fas',\n  iconName: 'sitemap',\n  icon: [576, 512, [], \"f0e8\", \"M208 80c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-8 0 0 40 152 0c30.9 0 56 25.1 56 56l0 32 8 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-64 0c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48l8 0 0-32c0-4.4-3.6-8-8-8l-152 0 0 40 8 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-64 0c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48l8 0 0-40-152 0c-4.4 0-8 3.6-8 8l0 32 8 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-64 0c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48l8 0 0-32c0-30.9 25.1-56 56-56l152 0 0-40-8 0c-26.5 0-48-21.5-48-48l0-64z\"]\n};\nconst faCircleDollarToSlot = {\n  prefix: 'fas',\n  iconName: 'circle-dollar-to-slot',\n  icon: [512, 512, [\"donate\"], \"f4b9\", \"M326.7 403.7c-22.1 8-45.9 12.3-70.7 12.3s-48.7-4.4-70.7-12.3l-.8-.3c-30-11-56.8-28.7-78.6-51.4C70 314.6 48 263.9 48 208C48 93.1 141.1 0 256 0S464 93.1 464 208c0 55.9-22 106.6-57.9 144c-1 1-2 2.1-3 3.1c-21.4 21.4-47.4 38.1-76.3 48.6zM256 91.9c-11.1 0-20.1 9-20.1 20.1l0 6c-5.6 1.2-10.9 2.9-15.9 5.1c-15 6.8-27.9 19.4-31.1 37.7c-1.8 10.2-.8 20 3.4 29c4.2 8.8 10.7 15 17.3 19.5c11.6 7.9 26.9 12.5 38.6 16l2.2 .7c13.9 4.2 23.4 7.4 29.3 11.7c2.5 1.8 3.4 3.2 3.7 4c.3 .8 .9 2.6 .2 6.7c-.6 3.5-2.5 6.4-8 8.8c-6.1 2.6-16 3.9-28.8 1.9c-6-1-16.7-4.6-26.2-7.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-2.2-.7-4.3-1.5-6.4-2.1c-10.5-3.5-21.8 2.2-25.3 12.7s2.2 21.8 12.7 25.3c1.2 .4 2.7 .9 4.4 1.5c7.9 2.7 20.3 6.9 29.8 9.1l0 6.4c0 11.1 9 20.1 20.1 20.1s20.1-9 20.1-20.1l0-5.5c5.3-1 10.5-2.5 15.4-4.6c15.7-6.7 28.4-19.7 31.6-38.7c1.8-10.4 1-20.3-3-29.4c-3.9-9-10.2-15.6-16.9-20.5c-12.2-8.8-28.3-13.7-40.4-17.4l-.8-.2c-14.2-4.3-23.8-7.3-29.9-11.4c-2.6-1.8-3.4-3-3.6-3.5c-.2-.3-.7-1.6-.1-5c.3-1.9 1.9-5.2 8.2-8.1c6.4-2.9 16.4-4.5 28.6-2.6c4.3 .7 17.9 3.3 21.7 4.3c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-4.4-1.2-14.4-3.2-21-4.4l0-6.3c0-11.1-9-20.1-20.1-20.1zM48 352l16 0c19.5 25.9 44 47.7 72.2 64L64 416l0 32 192 0 192 0 0-32-72.2 0c28.2-16.3 52.8-38.1 72.2-64l16 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48l0-64c0-26.5 21.5-48 48-48z\"]\n};\nconst faDonate = faCircleDollarToSlot;\nconst faMemory = {\n  prefix: 'fas',\n  iconName: 'memory',\n  icon: [576, 512, [], \"f538\", \"M64 64C28.7 64 0 92.7 0 128l0 7.4c0 6.8 4.4 12.6 10.1 16.3C23.3 160.3 32 175.1 32 192s-8.7 31.7-21.9 40.3C4.4 236 0 241.8 0 248.6L0 320l576 0 0-71.4c0-6.8-4.4-12.6-10.1-16.3C552.7 223.7 544 208.9 544 192s8.7-31.7 21.9-40.3c5.7-3.7 10.1-9.5 10.1-16.3l0-7.4c0-35.3-28.7-64-64-64L64 64zM576 352L0 352l0 64c0 17.7 14.3 32 32 32l48 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 96 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 96 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 96 0 0-32c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32 48 0c17.7 0 32-14.3 32-32l0-64zM192 160l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faRoadSpikes = {\n  prefix: 'fas',\n  iconName: 'road-spikes',\n  icon: [640, 512, [], \"e568\", \"M64 116.8c0-15.8 20.5-22 29.3-8.9L192 256l0-139.2c0-15.8 20.5-22 29.3-8.9L320 256l0-139.2c0-15.8 20.5-22 29.3-8.9L448 256l0-139.2c0-15.8 20.5-22 29.3-8.9L606.8 302.2c14.2 21.3-1.1 49.7-26.6 49.7L512 352l-64 0-64 0-64 0-64 0-64 0L64 352l0-235.2zM32 384l576 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faFireBurner = {\n  prefix: 'fas',\n  iconName: 'fire-burner',\n  icon: [640, 512, [], \"e4f1\", \"M345.7 48.3L358 34.5c5.4-6.1 13.3-8.8 20.9-8.9c7.2 0 14.3 2.6 19.9 7.8c19.7 18.3 39.8 43.2 55 70.6C469 131.2 480 162.2 480 192.2C480 280.8 408.7 352 320 352c-89.6 0-160-71.3-160-159.8c0-37.3 16-73.4 36.8-104.5c20.9-31.3 47.5-59 70.9-80.2C273.4 2.3 280.7-.2 288 0c14.1 .3 23.8 11.4 32.7 21.6c0 0 0 0 0 0c2 2.3 4 4.6 6 6.7l19 19.9zM384 240.2c0-36.5-37-73-54.8-88.4c-5.4-4.7-13.1-4.7-18.5 0C293 167.1 256 203.6 256 240.2c0 35.3 28.7 64 64 64s64-28.7 64-64zM32 288c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 64 448 0 0-64c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 96c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l0-96zM320 480a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm160-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM192 480a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faFlag = {\n  prefix: 'fas',\n  iconName: 'flag',\n  icon: [448, 512, [127988, 61725], \"f024\", \"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32L0 64 0 368 0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 64.3-16.1c41.1-10.3 84.6-5.5 122.5 13.4c44.2 22.1 95.5 24.8 141.7 7.4l34.7-13c12.5-4.7 20.8-16.6 20.8-30l0-247.7c0-23-24.2-38-44.8-27.7l-9.6 4.8c-46.3 23.2-100.8 23.2-147.1 0c-35.1-17.6-75.4-22-113.5-12.5L64 48l0-16z\"]\n};\nconst faHanukiah = {\n  prefix: 'fas',\n  iconName: 'hanukiah',\n  icon: [640, 512, [128334], \"f6e6\", \"M314.2 3.3C309.1 12.1 296 36.6 296 56c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7C324.6 1.2 322.4 0 320 0s-4.6 1.2-5.8 3.3zm-288 48C21.1 60.1 8 84.6 8 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7C36.6 49.2 34.4 48 32 48s-4.6 1.2-5.8 3.3zM88 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C101.1 60.1 88 84.6 88 104zm82.2-52.7C165.1 60.1 152 84.6 152 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM216 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C229.1 60.1 216 84.6 216 104zM394.2 51.3C389.1 60.1 376 84.6 376 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM440 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C453.1 60.1 440 84.6 440 104zm82.2-52.7C517.1 60.1 504 84.6 504 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM584 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C597.1 60.1 584 84.6 584 104zM112 160c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm160 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16l0 96 0 16 32 0 0-16 0-96c0-8.8-7.2-16-16-16zM352 144c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176L96 320c-17.7 0-32-14.3-32-32l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 53 43 96 96 96l192 0 0 64-128 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-128 0 0-64 192 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32l-192 0 0-176z\"]\n};\nconst faFeather = {\n  prefix: 'fas',\n  iconName: 'feather',\n  icon: [512, 512, [129718], \"f52d\", \"M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57 68 0c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330l0 55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z\"]\n};\nconst faVolumeLow = {\n  prefix: 'fas',\n  iconName: 'volume-low',\n  icon: [448, 512, [128264, \"volume-down\"], \"f027\", \"M301.1 34.8C312.6 40 320 51.4 320 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352 64 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM412.6 181.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5z\"]\n};\nconst faVolumeDown = faVolumeLow;\nconst faCommentSlash = {\n  prefix: 'fas',\n  iconName: 'comment-slash',\n  icon: [640, 512, [], \"f4b3\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L512.9 376.7C552.2 340.2 576 292.3 576 240C576 125.1 461.4 32 320 32c-67.7 0-129.3 21.4-175.1 56.3L38.8 5.1zm385.2 425L82.9 161.3C70.7 185.6 64 212.2 64 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9c37 0 72.3-6.4 104.1-17.9z\"]\n};\nconst faCloudSunRain = {\n  prefix: 'fas',\n  iconName: 'cloud-sun-rain',\n  icon: [640, 512, [127782], \"f743\", \"M294.2 1.2c5.1 2.1 8.7 6.7 9.6 12.1l10.4 62.4c-23.3 10.8-42.9 28.4-56 50.3c-14.6-9-31.8-14.1-50.2-14.1c-53 0-96 43-96 96c0 35.5 19.3 66.6 48 83.2c.8 31.8 13.2 60.7 33.1 82.7l-56 39.2c-4.5 3.2-10.3 3.8-15.4 1.6s-8.7-6.7-9.6-12.1L98.1 317.9 13.4 303.8c-5.4-.9-10-4.5-12.1-9.6s-1.5-10.9 1.6-15.4L52.5 208 2.9 137.2c-3.2-4.5-3.8-10.3-1.6-15.4s6.7-8.7 12.1-9.6L98.1 98.1l14.1-84.7c.9-5.4 4.5-10 9.6-12.1s10.9-1.5 15.4 1.6L208 52.5 278.8 2.9c4.5-3.2 10.3-3.8 15.4-1.6zM208 144c13.8 0 26.7 4.4 37.1 11.9c-1.2 4.1-2.2 8.3-3 12.6c-37.9 14.6-67.2 46.6-77.8 86.4C151.8 243.1 144 226.5 144 208c0-35.3 28.7-64 64-64zm69.4 276c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm74.5-116.1c0 44.2-35.8 80-80 80l-271.9 0c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"]\n};\nconst faCompress = {\n  prefix: 'fas',\n  iconName: 'compress',\n  icon: [448, 512, [], \"f066\", \"M160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 320c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0z\"]\n};\nconst faWheatAwn = {\n  prefix: 'fas',\n  iconName: 'wheat-awn',\n  icon: [512, 512, [\"wheat-alt\"], \"e2cd\", \"M505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L383 95c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l88-88zM305.5 27.3c-6.2-6.2-16.4-6.2-22.6 0L271.5 38.6c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8L101.8 231c-6.2-6.2-16.4-6.2-22.6 0L67.9 242.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.9-68.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0L486.5 231c6.2-6.2 6.2-16.4 0-22.6L475.2 197c-5.2-5.2-10.6-9.8-16.4-13.9L505 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-59.4 59.4c-20.6-4.4-42-3.7-62.3 2.1c6.1-21.3 6.6-43.8 1.4-65.3L409 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L329.1 52.9c-3.7-5-7.8-9.8-12.4-14.3L305.5 27.3z\"]\n};\nconst faWheatAlt = faWheatAwn;\nconst faAnkh = {\n  prefix: 'fas',\n  iconName: 'ankh',\n  icon: [320, 512, [9765], \"f644\", \"M96 128c0-35.3 28.7-64 64-64s64 28.7 64 64c0 41.6-20.7 76.6-46.6 104.1c-5.9 6.2-11.8 11.8-17.4 16.7c-5.6-4.9-11.5-10.5-17.4-16.7C116.7 204.6 96 169.6 96 128zM160 0C89.3 0 32 57.3 32 128c0 52.4 21.5 95.5 46.8 128L32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-46.8 0c25.4-32.5 46.8-75.6 46.8-128C288 57.3 230.7 0 160 0z\"]\n};\nconst faHandsHoldingChild = {\n  prefix: 'fas',\n  iconName: 'hands-holding-child',\n  icon: [640, 512, [], \"e4fa\", \"M320 0a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm44.7 164.3L375.8 253c1.6 13.2-7.7 25.1-20.8 26.8s-25.1-7.7-26.8-20.8l-4.4-35-7.6 0-4.4 35c-1.6 13.2-13.6 22.5-26.8 20.8s-22.5-13.6-20.8-26.8l11.1-88.8L255.5 181c-10.1 8.6-25.3 7.3-33.8-2.8s-7.3-25.3 2.8-33.8l27.9-23.6C271.3 104.8 295.3 96 320 96s48.7 8.8 67.6 24.7l27.9 23.6c10.1 8.6 11.4 23.7 2.8 33.8s-23.7 11.4-33.8 2.8l-19.8-16.7zM40 64c22.1 0 40 17.9 40 40l0 40 0 80 0 40.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1c12.9-8.6 14.7-26.9 3.7-37.8l-15.2-15.2-32-32c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l32 32 15.2 15.2c0 0 0 0 0 0l25.3 25.3c21 21 32.8 49.5 32.8 79.2l0 78.9c0 26.5-21.5 48-48 48l-66.7 0c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5L0 224l0-64 0-56C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40l0 56 0 64 0 101.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7L400 512c-26.5 0-48-21.5-48-48l0-78.9c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3c0 0 0 0 0 0l15.2-15.2 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32-15.2 15.2c-11 11-9.2 29.2 3.7 37.8c9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3l0-40.2 0-80 0-40c0-22.1 17.9-40 40-40z\"]\n};\nconst faAsterisk = {\n  prefix: 'fas',\n  iconName: 'asterisk',\n  icon: [384, 512, [10033, 61545], \"2a\", \"M192 32c17.7 0 32 14.3 32 32l0 135.5 111.5-66.9c15.2-9.1 34.8-4.2 43.9 11s4.2 34.8-11 43.9L254.2 256l114.3 68.6c15.2 9.1 20.1 28.7 11 43.9s-28.7 20.1-43.9 11L224 312.5 224 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-135.5L48.5 379.4c-15.2 9.1-34.8 4.2-43.9-11s-4.2-34.8 11-43.9L129.8 256 15.5 187.4c-15.2-9.1-20.1-28.7-11-43.9s28.7-20.1 43.9-11L160 199.5 160 64c0-17.7 14.3-32 32-32z\"]\n};\nconst faSquareCheck = {\n  prefix: 'fas',\n  iconName: 'square-check',\n  icon: [448, 512, [9745, 9989, 61510, \"check-square\"], \"f14a\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faCheckSquare = faSquareCheck;\nconst faPesetaSign = {\n  prefix: 'fas',\n  iconName: 'peseta-sign',\n  icon: [384, 512, [], \"e221\", \"M64 32C46.3 32 32 46.3 32 64l0 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 96 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 96 0c77.4 0 142-55 156.8-128l3.2 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-3.2 0C334 87 269.4 32 192 32L64 32zM282.5 160L96 160l0-64 96 0c41.8 0 77.4 26.7 90.5 64zM96 224l186.5 0c-13.2 37.3-48.7 64-90.5 64l-96 0 0-64z\"]\n};\nconst faHeading = {\n  prefix: 'fas',\n  iconName: 'heading',\n  icon: [448, 512, [\"header\"], \"f1dc\", \"M0 64C0 46.3 14.3 32 32 32l48 0 48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 112 224 0 0-112-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0 48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 144 0 176 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-144-224 0 0 144 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-176L48 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nconst faHeader = faHeading;\nconst faGhost = {\n  prefix: 'fas',\n  iconName: 'ghost',\n  icon: [384, 512, [128123], \"f6e2\", \"M40.1 467.1l-11.2 9c-3.2 2.5-7.1 3.9-11.1 3.9C8 480 0 472 0 462.2L0 192C0 86 86 0 192 0S384 86 384 192l0 270.2c0 9.8-8 17.8-17.8 17.8c-4 0-7.9-1.4-11.1-3.9l-11.2-9c-13.4-10.7-32.8-9-44.1 3.9L269.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6l-26.6-30.5c-12.7-14.6-35.4-14.6-48.2 0L141.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6L84.2 471c-11.3-12.9-30.7-14.6-44.1-3.9zM160 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faList = {\n  prefix: 'fas',\n  iconName: 'list',\n  icon: [512, 512, [\"list-squares\"], \"f03a\", \"M40 48C26.7 48 16 58.7 16 72l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24L40 48zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zM16 232l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24zM40 368c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0z\"]\n};\nconst faListSquares = faList;\nconst faSquarePhoneFlip = {\n  prefix: 'fas',\n  iconName: 'square-phone-flip',\n  icon: [448, 512, [\"phone-square-alt\"], \"f87b\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zm-90.7 96.7c-9.7-2.6-19.9 2.3-23.7 11.6l-20 48c-3.4 8.2-1 17.6 5.8 23.2L280 231.7c-16.6 35.2-45.1 63.7-80.3 80.3l-20.2-24.7c-5.6-6.8-15-9.2-23.2-5.8l-48 20c-9.3 3.9-14.2 14-11.6 23.7l12 44C111.1 378 119 384 128 384c123.7 0 224-100.3 224-224c0-9-6-16.9-14.7-19.3l-44-12z\"]\n};\nconst faPhoneSquareAlt = faSquarePhoneFlip;\nconst faCartPlus = {\n  prefix: 'fas',\n  iconName: 'cart-plus',\n  icon: [576, 512, [], \"f217\", \"M0 24C0 10.7 10.7 0 24 0L69.5 0c22 0 41.5 12.8 50.6 32l411 0c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3l-288.5 0 5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5L488 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-288.3 0c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5L24 48C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM252 160c0 11 9 20 20 20l44 0 0 44c0 11 9 20 20 20s20-9 20-20l0-44 44 0c11 0 20-9 20-20s-9-20-20-20l-44 0 0-44c0-11-9-20-20-20s-20 9-20 20l0 44-44 0c-11 0-20 9-20 20z\"]\n};\nconst faGamepad = {\n  prefix: 'fas',\n  iconName: 'gamepad',\n  icon: [640, 512, [], \"f11b\", \"M192 64C86 64 0 150 0 256S86 448 192 448l256 0c106 0 192-86 192-192s-86-192-192-192L192 64zM496 168a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM392 304a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM168 200c0-13.3 10.7-24 24-24s24 10.7 24 24l0 32 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-32z\"]\n};\nconst faCircleDot = {\n  prefix: 'fas',\n  iconName: 'circle-dot',\n  icon: [512, 512, [128280, \"dot-circle\"], \"f192\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-352a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faDotCircle = faCircleDot;\nconst faFaceDizzy = {\n  prefix: 'fas',\n  iconName: 'face-dizzy',\n  icon: [512, 512, [\"dizzy\"], \"f567\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-224a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM100.7 132.7c6.2-6.2 16.4-6.2 22.6 0L160 169.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L182.6 192l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L160 214.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L137.4 192l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6zm192 0c6.2-6.2 16.4-6.2 22.6 0L352 169.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L374.6 192l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L352 214.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L329.4 192l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6z\"]\n};\nconst faDizzy = faFaceDizzy;\nconst faEgg = {\n  prefix: 'fas',\n  iconName: 'egg',\n  icon: [384, 512, [129370], \"f7fb\", \"M192 496C86 496 0 394 0 288C0 176 64 16 192 16s192 160 192 272c0 106-86 208-192 208zM154.8 134c6.5-6 7-16.1 1-22.6s-16.1-7-22.6-1c-23.9 21.8-41.1 52.7-52.3 84.2C69.7 226.1 64 259.7 64 288c0 8.8 7.2 16 16 16s16-7.2 16-16c0-24.5 5-54.4 15.1-82.8c10.1-28.5 25-54.1 43.7-71.2z\"]\n};\nconst faHouseMedicalCircleXmark = {\n  prefix: 'fas',\n  iconName: 'house-medical-circle-xmark',\n  icon: [640, 512, [], \"e513\", \"M320 368c0 59.5 29.5 112.1 74.8 144l-266.7 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64L320 256l0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm22.6 144l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L496 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L473.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L496 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L518.6 368z\"]\n};\nconst faCampground = {\n  prefix: 'fas',\n  iconName: 'campground',\n  icon: [576, 512, [9978], \"f6bb\", \"M377 52c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5L288 60.8 249 12c-11-13.8-31.2-16-45-5s-16 31.2-5 45l48 60L12.3 405.4C4.3 415.4 0 427.7 0 440.4L0 464c0 26.5 21.5 48 48 48l240 0 240 0c26.5 0 48-21.5 48-48l0-23.6c0-12.7-4.3-25.1-12.3-35L329 112l48-60zM288 448l-119.5 0L288 291.7 407.5 448 288 448z\"]\n};\nconst faFolderPlus = {\n  prefix: 'fas',\n  iconName: 'folder-plus',\n  icon: [512, 512, [], \"f65e\", \"M512 416c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l128 0c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8l160 0c35.3 0 64 28.7 64 64l0 256zM232 376c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64 64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-64 0 0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64-64 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l64 0 0 64z\"]\n};\nconst faFutbol = {\n  prefix: 'fas',\n  iconName: 'futbol',\n  icon: [512, 512, [9917, \"futbol-ball\", \"soccer-ball\"], \"f1e3\", \"M417.3 360.1l-71.6-4.8c-5.2-.3-10.3 1.1-14.5 4.2s-7.2 7.4-8.4 12.5l-17.6 69.6C289.5 445.8 273 448 256 448s-33.5-2.2-49.2-6.4L189.2 372c-1.3-5-4.3-9.4-8.4-12.5s-9.3-4.5-14.5-4.2l-71.6 4.8c-17.6-27.2-28.5-59.2-30.4-93.6L125 228.3c4.4-2.8 7.6-7 9.2-11.9s1.4-10.2-.5-15l-26.7-66.6C128 109.2 155.3 89 186.7 76.9l55.2 46c4 3.3 9 5.1 14.1 5.1s10.2-1.8 14.1-5.1l55.2-46c31.3 12.1 58.7 32.3 79.6 57.9l-26.7 66.6c-1.9 4.8-2.1 10.1-.5 15s4.9 9.1 9.2 11.9l60.7 38.2c-1.9 34.4-12.8 66.4-30.4 93.6zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm14.1-325.7c-8.4-6.1-19.8-6.1-28.2 0L194 221c-8.4 6.1-11.9 16.9-8.7 26.8l18.3 56.3c3.2 9.9 12.4 16.6 22.8 16.6l59.2 0c10.4 0 19.6-6.7 22.8-16.6l18.3-56.3c3.2-9.9-.3-20.7-8.7-26.8l-47.9-34.8z\"]\n};\nconst faFutbolBall = faFutbol;\nconst faSoccerBall = faFutbol;\nconst faPaintbrush = {\n  prefix: 'fas',\n  iconName: 'paintbrush',\n  icon: [576, 512, [128396, \"paint-brush\"], \"f1fc\", \"M339.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L568.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S517.7-4.4 499.1 9.6L262.4 187.2c-24 18-38.2 46.1-38.4 76.1L339.3 367.1zm-19.6 25.4l-116-104.4C143.9 290.3 96 339.6 96 400c0 3.9 .2 7.8 .6 11.6C98.4 429.1 86.4 448 68.8 448L64 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z\"]\n};\nconst faPaintBrush = faPaintbrush;\nconst faLock = {\n  prefix: 'fas',\n  iconName: 'lock',\n  icon: [448, 512, [128274], \"f023\", \"M144 144l0 48 160 0 0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192l0-48C80 64.5 144.5 0 224 0s144 64.5 144 144l0 48 16 0c35.3 0 64 28.7 64 64l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256c0-35.3 28.7-64 64-64l16 0z\"]\n};\nconst faGasPump = {\n  prefix: 'fas',\n  iconName: 'gas-pump',\n  icon: [512, 512, [9981], \"f52f\", \"M32 64C32 28.7 60.7 0 96 0L256 0c35.3 0 64 28.7 64 64l0 192 8 0c48.6 0 88 39.4 88 88l0 32c0 13.3 10.7 24 24 24s24-10.7 24-24l0-154c-27.6-7.1-48-32.2-48-62l0-64L384 64c-8.8-8.8-8.8-23.2 0-32s23.2-8.8 32 0l77.3 77.3c12 12 18.7 28.3 18.7 45.3l0 13.5 0 24 0 32 0 152c0 39.8-32.2 72-72 72s-72-32.2-72-72l0-32c0-22.1-17.9-40-40-40l-8 0 0 144c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 64zM96 80l0 96c0 8.8 7.2 16 16 16l128 0c8.8 0 16-7.2 16-16l0-96c0-8.8-7.2-16-16-16L112 64c-8.8 0-16 7.2-16 16z\"]\n};\nconst faHotTubPerson = {\n  prefix: 'fas',\n  iconName: 'hot-tub-person',\n  icon: [512, 512, [\"hot-tub\"], \"f593\", \"M272 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 5.2c0 34 14.4 66.4 39.7 89.2l16.4 14.8c15.2 13.7 23.8 33.1 23.8 53.5l0 13.2c0 13.3 10.7 24 24 24s24-10.7 24-24l0-13.2c0-34-14.4-66.4-39.7-89.2L295.8 82.8C280.7 69.1 272 49.7 272 29.2l0-5.2zM0 320l0 16L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-128c0-35.3-28.7-64-64-64l-170.7 0c-13.8 0-27.3-4.5-38.4-12.8l-85.3-64C137 166.7 116.8 160 96 160c-53 0-96 43-96 96l0 64zm128 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16zm80-16c8.8 0 16 7.2 16 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16zm112 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16zm80-16c8.8 0 16 7.2 16 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16zM360 0c-13.3 0-24 10.7-24 24l0 5.2c0 34 14.4 66.4 39.7 89.2l16.4 14.8c15.2 13.7 23.8 33.1 23.8 53.5l0 13.2c0 13.3 10.7 24 24 24s24-10.7 24-24l0-13.2c0-34-14.4-66.4-39.7-89.2L407.8 82.8C392.7 69.1 384 49.7 384 29.2l0-5.2c0-13.3-10.7-24-24-24zM64 128A64 64 0 1 0 64 0a64 64 0 1 0 0 128z\"]\n};\nconst faHotTub = faHotTubPerson;\nconst faMapLocation = {\n  prefix: 'fas',\n  iconName: 'map-location',\n  icon: [576, 512, [\"map-marked\"], \"f59f\", \"M302.8 312C334.9 271.9 408 174.6 408 120C408 53.7 354.3 0 288 0S168 53.7 168 120c0 54.6 73.1 151.9 105.2 192c7.7 9.6 22 9.6 29.6 0zM416 503l144.9-58c9.1-3.6 15.1-12.5 15.1-22.3L576 152c0-17-17.1-28.6-32.9-22.3l-116 46.4c-.5 1.2-1 2.5-1.5 3.7c-2.9 6.8-6.1 13.7-9.6 20.6L416 503zM15.1 187.3C6 191 0 199.8 0 209.6L0 480.4c0 17 17.1 28.6 32.9 22.3L160 451.8l0-251.4c-3.5-6.9-6.7-13.8-9.6-20.6c-5.6-13.2-10.4-27.4-12.8-41.5l-122.6 49zM384 255c-20.5 31.3-42.3 59.6-56.2 77c-20.5 25.6-59.1 25.6-79.6 0c-13.9-17.4-35.7-45.7-56.2-77l0 194.4 192 54.9L384 255z\"]\n};\nconst faMapMarked = faMapLocation;\nconst faHouseFloodWater = {\n  prefix: 'fas',\n  iconName: 'house-flood-water',\n  icon: [576, 512, [], \"e50e\", \"M306.8 6.1C295.6-2 280.4-2 269.2 6.1l-176 128c-11.2 8.2-15.9 22.6-11.6 35.8S98.1 192 112 192l16 0 0 73c1.7 1 3.3 2 4.9 3.1c18 12.4 40.1 20.3 59.2 20.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c1.5-1 3-2 4.5-2.9l-.3-73.2 16.6 0c13.9 0 26.1-8.9 30.4-22.1s-.4-27.6-11.6-35.8l-176-128zM269.5 309.9C247 325.4 219.5 336 192 336c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 389.7 159 400 192 400c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 325.2 410.9 336 384 336c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0zM384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448z\"]\n};\nconst faTree = {\n  prefix: 'fas',\n  iconName: 'tree',\n  icon: [448, 512, [127794], \"f1bb\", \"M210.6 5.9L62 169.4c-3.9 4.2-6 9.8-6 15.5C56 197.7 66.3 208 79.1 208l24.9 0L30.6 281.4c-4.2 4.2-6.6 10-6.6 16C24 309.9 34.1 320 46.6 320L80 320 5.4 409.5C1.9 413.7 0 419 0 424.5c0 13 10.5 23.5 23.5 23.5L192 448l0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 168.5 0c13 0 23.5-10.5 23.5-23.5c0-5.5-1.9-10.8-5.4-15L368 320l33.4 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L344 208l24.9 0c12.7 0 23.1-10.3 23.1-23.1c0-5.7-2.1-11.3-6-15.5L237.4 5.9C234 2.1 229.1 0 224 0s-10 2.1-13.4 5.9z\"]\n};\nconst faBridgeLock = {\n  prefix: 'fas',\n  iconName: 'bridge-lock',\n  icon: [640, 512, [], \"e4cc\", \"M32 64c0-17.7 14.3-32 32-32l512 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-40 0 0 64-8 0c-61.9 0-112 50.1-112 112l0 24.6c-9.9 5.8-18.2 14.1-23.8 24.1c-17.6-20-43.4-32.7-72.2-32.7c-53 0-96 43-96 96l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64c0-53-43-96-96-96l0-128 72 0 0-64L64 96C46.3 96 32 81.7 32 64zM408 96l0 64 80 0 0-64-80 0zm-48 64l0-64-80 0 0 64 80 0zM152 96l0 64 80 0 0-64-80 0zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faSackDollar = {\n  prefix: 'fas',\n  iconName: 'sack-dollar',\n  icon: [512, 512, [128176], \"f81d\", \"M320 96L192 96 144.6 24.9C137.5 14.2 145.1 0 157.9 0L354.1 0c12.8 0 20.4 14.2 13.3 24.9L320 96zM192 128l128 0c3.8 2.5 8.1 5.3 13 8.4C389.7 172.7 512 250.9 512 416c0 53-43 96-96 96L96 512c-53 0-96-43-96-96C0 250.9 122.3 172.7 179 136.4c0 0 0 0 0 0s0 0 0 0c4.8-3.1 9.2-5.9 13-8.4zm84 88c0-11-9-20-20-20s-20 9-20 20l0 14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1c0 0 0 0 0 0s0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4l0 14.6c0 11 9 20 20 20s20-9 20-20l0-13.8c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15c0 0 0 0 0 0l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7l0-13.9z\"]\n};\nconst faPenToSquare = {\n  prefix: 'fas',\n  iconName: 'pen-to-square',\n  icon: [512, 512, [\"edit\"], \"f044\", \"M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 64z\"]\n};\nconst faEdit = faPenToSquare;\nconst faCarSide = {\n  prefix: 'fas',\n  iconName: 'car-side',\n  icon: [640, 512, [128663], \"f5e4\", \"M171.3 96L224 96l0 96-112.7 0 30.4-75.9C146.5 104 158.2 96 171.3 96zM272 192l0-96 81.2 0c9.7 0 18.9 4.4 25 12l67.2 84L272 192zm256.2 1L428.2 68c-18.2-22.8-45.8-36-75-36L171.3 32c-39.3 0-74.6 23.9-89.1 60.3L40.6 196.4C16.8 205.8 0 228.9 0 256L0 368c0 17.7 14.3 32 32 32l33.3 0c7.6 45.4 47.1 80 94.7 80s87.1-34.6 94.7-80l130.7 0c7.6 45.4 47.1 80 94.7 80s87.1-34.6 94.7-80l33.3 0c17.7 0 32-14.3 32-32l0-48c0-65.2-48.8-119-111.8-127zM434.7 368a48 48 0 1 1 90.5 32 48 48 0 1 1 -90.5-32zM160 336a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faShareNodes = {\n  prefix: 'fas',\n  iconName: 'share-nodes',\n  icon: [448, 512, [\"share-alt\"], \"f1e0\", \"M352 224c53 0 96-43 96-96s-43-96-96-96s-96 43-96 96c0 4 .2 8 .7 11.9l-94.1 47C145.4 170.2 121.9 160 96 160c-53 0-96 43-96 96s43 96 96 96c25.9 0 49.4-10.2 66.6-26.9l94.1 47c-.5 3.9-.7 7.8-.7 11.9c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-25.9 0-49.4 10.2-66.6 26.9l-94.1-47c.5-3.9 .7-7.8 .7-11.9s-.2-8-.7-11.9l94.1-47C302.6 213.8 326.1 224 352 224z\"]\n};\nconst faShareAlt = faShareNodes;\nconst faHeartCircleMinus = {\n  prefix: 'fas',\n  iconName: 'heart-circle-minus',\n  icon: [576, 512, [], \"e4ff\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l128 0c8.8 0 16 7.2 16 16z\"]\n};\nconst faHourglassHalf = {\n  prefix: 'fas',\n  iconName: 'hourglass-half',\n  icon: [384, 512, [\"hourglass-2\"], \"f252\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 256 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 0 64 0 32 0zM96 75l0-11 192 0 0 11c0 19-5.6 37.4-16 53L112 128c-10.3-15.6-16-34-16-53zm16 309c3.5-5.3 7.6-10.3 12.1-14.9L192 301.3l67.9 67.9c4.6 4.6 8.6 9.6 12.1 14.9L112 384z\"]\n};\nconst faHourglass2 = faHourglassHalf;\nconst faMicroscope = {\n  prefix: 'fas',\n  iconName: 'microscope',\n  icon: [512, 512, [128300], \"f610\", \"M160 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32c17.7 0 32 14.3 32 32l0 224c0 17.7-14.3 32-32 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32c-17.7 0-32-14.3-32-32l0-224c0-17.7 14.3-32 32-32zM32 448l288 0c70.7 0 128-57.3 128-128s-57.3-128-128-128l0-64c106 0 192 86 192 192c0 49.2-18.5 94-48.9 128l16.9 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32zm80-64l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faSink = {\n  prefix: 'fas',\n  iconName: 'sink',\n  icon: [512, 512, [], \"e06d\", \"M288 96c0-17.7 14.3-32 32-32s32 14.3 32 32s14.3 32 32 32s32-14.3 32-32c0-53-43-96-96-96s-96 43-96 96l0 192-64 0 0-24c0-30.9-25.1-56-56-56l-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c4.4 0 8 3.6 8 8l0 24-80 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l224 0 224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 0-24c0-4.4 3.6-8 8-8l56 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-56 0c-30.9 0-56 25.1-56 56l0 24-64 0 0-192zM480 416l0-32L32 384l0 32c0 53 43 96 96 96l256 0c53 0 96-43 96-96z\"]\n};\nconst faBagShopping = {\n  prefix: 'fas',\n  iconName: 'bag-shopping',\n  icon: [448, 512, [\"shopping-bag\"], \"f290\", \"M160 112c0-35.3 28.7-64 64-64s64 28.7 64 64l0 48-128 0 0-48zm-48 48l-64 0c-26.5 0-48 21.5-48 48L0 416c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-208c0-26.5-21.5-48-48-48l-64 0 0-48C336 50.1 285.9 0 224 0S112 50.1 112 112l0 48zm24 48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm152 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faShoppingBag = faBagShopping;\nconst faArrowDownZA = {\n  prefix: 'fas',\n  iconName: 'arrow-down-z-a',\n  icon: [576, 512, [\"sort-alpha-desc\", \"sort-alpha-down-alt\"], \"f881\", \"M183.6 469.6C177.5 476.2 169 480 160 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L128 365.7 128 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 64c0-17.7 14.3-32 32-32l128 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L429.3 160l50.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L402.7 96 352 96c-17.7 0-32-14.3-32-32zm96 192c12.1 0 23.2 6.8 28.6 17.7l64 128 16 32c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3L460.2 448l-88.4 0-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l16-32 64-128c5.4-10.8 16.5-17.7 28.6-17.7zM395.8 400l40.4 0L416 359.6 395.8 400z\"]\n};\nconst faSortAlphaDesc = faArrowDownZA;\nconst faSortAlphaDownAlt = faArrowDownZA;\nconst faMitten = {\n  prefix: 'fas',\n  iconName: 'mitten',\n  icon: [448, 512, [], \"f7b5\", \"M352 384L64 384 5.4 178.9C1.8 166.4 0 153.4 0 140.3C0 62.8 62.8 0 140.3 0l3.4 0c66 0 123.5 44.9 139.5 108.9l31.4 125.8 17.6-20.1C344.8 200.2 362.9 192 382 192l2.8 0c34.9 0 63.3 28.3 63.3 63.3c0 15.9-6 31.2-16.8 42.9L352 384zM32 448c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L64 512c-17.7 0-32-14.3-32-32l0-32z\"]\n};\nconst faPersonRays = {\n  prefix: 'fas',\n  iconName: 'person-rays',\n  icon: [512, 512, [], \"e54d\", \"M208 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1-28.6 47.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L328 256.9 328 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM7 7C16.4-2.3 31.6-2.3 41 7l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 41C-2.3 31.6-2.3 16.4 7 7zM471 7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L471 7zM7 505c-9.4-9.4-9.4-24.6 0-33.9l80-80c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L41 505c-9.4 9.4-24.6 9.4-33.9 0zm464 0l-80-80c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0z\"]\n};\nconst faUsers = {\n  prefix: 'fas',\n  iconName: 'users',\n  icon: [640, 512, [], \"f0c0\", \"M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192l42.7 0c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0L21.3 320C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7l42.7 0C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3l-213.3 0zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352l117.3 0C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7l-330.7 0c-14.7 0-26.7-11.9-26.7-26.7z\"]\n};\nconst faEyeSlash = {\n  prefix: 'fas',\n  iconName: 'eye-slash',\n  icon: [640, 512, [], \"f070\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z\"]\n};\nconst faFlaskVial = {\n  prefix: 'fas',\n  iconName: 'flask-vial',\n  icon: [640, 512, [], \"e4f3\", \"M175 389.4c-9.8 16-15 34.3-15 53.1c-10 3.5-20.8 5.5-32 5.5c-53 0-96-43-96-96L32 64C14.3 64 0 49.7 0 32S14.3 0 32 0L96 0l64 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 245.9-49 79.6zM96 64l0 96 64 0 0-96L96 64zM352 0L480 0l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 150.9L629.7 406.2c6.7 10.9 10.3 23.5 10.3 36.4c0 38.3-31.1 69.4-69.4 69.4l-309.2 0c-38.3 0-69.4-31.1-69.4-69.4c0-12.8 3.6-25.4 10.3-36.4L320 214.9 320 64c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0zm32 64l0 160c0 5.9-1.6 11.7-4.7 16.8L330.5 320l171 0-48.8-79.2c-3.1-5-4.7-10.8-4.7-16.8l0-160-64 0z\"]\n};\nconst faHand = {\n  prefix: 'fas',\n  iconName: 'hand',\n  icon: [512, 512, [129306, 9995, \"hand-paper\"], \"f256\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 272c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64l19.2 0c97.2 0 176-78.8 176-176l0-208c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208z\"]\n};\nconst faHandPaper = faHand;\nconst faOm = {\n  prefix: 'fas',\n  iconName: 'om',\n  icon: [512, 512, [128329], \"f679\", \"M379.3 4.7c-6.2-6.2-16.4-6.2-22.6 0l-16 16c-6.2 6.2-6.2 16.4 0 22.6l16 16c6.2 6.2 16.4 6.2 22.6 0l16-16c6.2-6.2 6.2-16.4 0-22.6l-16-16zM281 66.7c-2.2-1.5-4.9-2.5-7.7-2.7c-.6 0-1.3-.1-1.9 0c-3.9 .2-7.4 1.7-10.1 4.2c-.9 .8-1.6 1.7-2.3 2.6c-1.7 2.4-2.7 5.3-2.9 8.5c0 .7 0 1.4 0 2.1c.2 2.2 .9 4.3 1.9 6.2l.3 .6c.3 .6 .8 1.4 1.4 2.4c1.2 2 2.9 4.8 5.1 8.2c4.4 6.7 11.1 15.5 20 24.4C302.4 141.1 330.3 160 368 160c31.2 0 56.6-10.4 73.9-20.2c8.7-5 15.6-9.9 20.4-13.8c2.4-1.9 4.3-3.6 5.7-4.9c.7-.6 1.3-1.2 1.7-1.6l.6-.5 .1-.1 .1-.1s0 0 0 0s0 0 0 0c5.9-5.8 9.5-13.9 9.5-22.8c0-17.7-14.3-32-32-32c-8.7 0-16.7 3.5-22.4 9.2c-.1 .1-.2 .2-.5 .4c-.5 .5-1.5 1.3-2.8 2.4c-2.7 2.2-6.8 5.2-12.1 8.2C399.4 90.4 384.8 96 368 96c-20.8 0-42.4-7-59.5-14.6c-8.4-3.7-15.4-7.5-20.3-10.3c-2.4-1.4-4.3-2.5-5.6-3.3c-.6-.4-1.1-.7-1.4-.9l-.3-.2zM115.2 169.6c8-6 17.9-9.6 28.8-9.6c26.5 0 48 21.5 48 48s-21.5 48-48 48l-34.2 0c-7.6 0-13.8 6.2-13.8 13.8c0 1.5 .2 2.9 .7 4.4l8 24c4.4 13.1 16.6 21.9 30.4 21.9l8.9 0 16 0c35.3 0 64 28.7 64 64s-28.7 64-64 64c-50.8 0-82.7-21.5-102.2-42.8c-9.9-10.8-16.6-21.6-20.9-29.7c-2.1-4-3.6-7.3-4.5-9.6c-.5-1.1-.8-2-1-2.5l-.2-.5c-.3-.9-.7-1.8-1.1-2.6c-1.2-2.2-2.8-4-4.7-5.4c-1.9-1.4-4.1-2.3-6.5-2.8c-1.4-.3-2.9-.3-4.4-.2c-2.5 .2-4.8 1-6.8 2.3c-1.1 .7-2.2 1.5-3.1 2.5c-2.4 2.5-4.1 5.8-4.5 9.5c-.1 .6-.1 1.1-.1 1.7c0 0 0 0 0 0c0 .8 .1 1.7 .2 2.5l0 .1c0 .3 .1 .8 .2 1.3c.2 1.1 .4 2.7 .8 4.6c.8 3.9 2 9.4 3.9 15.9c3.8 13 10.3 30.4 21.3 48C48.7 476.2 89.4 512 160 512c70.7 0 128-57.3 128-128c0-23.3-6.2-45.2-17.1-64l22.6 0c25.5 0 49.9-10.1 67.9-28.1l26.5-26.5c6-6 14.1-9.4 22.6-9.4l5.5 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32c-25.7 0-41.4-12.5-51.2-25.6c-5-6.7-8.4-13.4-10.5-18.6c-1.1-2.5-1.8-4.6-2.2-6c-.2-.7-.4-1.2-.5-1.5l-.1-.2c-.3-1.3-.8-2.6-1.5-3.8c-1.1-2-2.6-3.8-4.4-5.1c-2.7-2-6-3.2-9.6-3.2l-.2 0c-8 .1-14.6 6.1-15.6 13.9c0 0 0 0 0 0c0 .3-.1 .6-.2 1.1c-.1 .9-.3 2.1-.4 3.6c-.3 3-.6 7.3-.6 12.4c0 10.1 1.1 23.9 5.8 38.1c4.8 14.3 13.4 29.3 28.6 40.7C368.7 473.3 389.3 480 416 480c53 0 96-43 96-96l0-96c0-53-43-96-96-96l-5.5 0c-25.5 0-49.9 10.1-67.9 28.1l-26.5 26.5c-6 6-14.1 9.4-22.6 9.4l-48.3 0c6.9-14.5 10.8-30.8 10.8-48c0-61.9-50.1-112-112-112c-25.2 0-48.5 8.3-67.2 22.4c-14.1 10.6-17 30.7-6.4 44.8s30.7 17 44.8 6.4z\"]\n};\nconst faWorm = {\n  prefix: 'fas',\n  iconName: 'worm',\n  icon: [512, 512, [], \"e599\", \"M256 96c0-53 43-96 96-96l38.4 0C439.9 0 480 40.1 480 89.6l0 86.4 0 16 0 184c0 75.1-60.9 136-136 136s-136-60.9-136-136l0-80c0-22.1-17.9-40-40-40s-40 17.9-40 40l0 168c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-168c0-75.1 60.9-136 136-136s136 60.9 136 136l0 80c0 22.1 17.9 40 40 40s40-17.9 40-40l0-184-32 0c-53 0-96-43-96-96zm144-8a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nconst faHouseCircleXmark = {\n  prefix: 'fas',\n  iconName: 'house-circle-xmark',\n  icon: [640, 512, [], \"e50b\", \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0 .7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faPlug = {\n  prefix: 'fas',\n  iconName: 'plug',\n  icon: [384, 512, [128268], \"f1e6\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2C297 398 352 333.4 352 256l0-32c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z\"]\n};\nconst faChevronUp = {\n  prefix: 'fas',\n  iconName: 'chevron-up',\n  icon: [512, 512, [], \"f077\", \"M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z\"]\n};\nconst faHandSpock = {\n  prefix: 'fas',\n  iconName: 'hand-spock',\n  icon: [576, 512, [128406], \"f259\", \"M246.9 23.7C242.3 6.6 224.8-3.5 207.7 1.1s-27.2 22.1-22.6 39.2L238 237.8c2.5 9.2-4.5 18.2-14 18.2c-6.4 0-12-4.2-13.9-10.3L166.6 102.7c-5.1-16.9-23-26.4-39.9-21.3s-26.4 23-21.3 39.9l62.8 206.4c2.4 7.9-7.2 13.8-13.2 8.1L99.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L156.8 448c43.1 41.1 100.4 64 160 64l10.9 0 8.2 0c.1 0 .1-.1 .1-.1s.1-.1 .1-.1c58.3-3.5 108.6-43.2 125.3-99.7l81.2-275c5-16.9-4.7-34.7-21.6-39.8s-34.7 4.7-39.8 21.6L443.5 247.1c-1.6 5.3-6.4 8.9-12 8.9c-7.9 0-13.8-7.3-12.2-15.1l36-170.3c3.7-17.3-7.4-34.3-24.7-37.9s-34.3 7.4-37.9 24.7L355.1 235.1c-2.6 12.2-13.3 20.9-25.8 20.9c-11.9 0-22.4-8-25.4-19.5l-57-212.8z\"]\n};\nconst faStopwatch = {\n  prefix: 'fas',\n  iconName: 'stopwatch',\n  icon: [448, 512, [9201], \"f2f2\", \"M176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 34.4C92.3 113.8 16 200 16 304c0 114.9 93.1 208 208 208s208-93.1 208-208c0-41.8-12.3-80.7-33.5-113.2l24.1-24.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L355.7 143c-28.1-23-62.2-38.8-99.7-44.6L256 64l16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L224 0 176 0zm72 192l0 128c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-128c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faFaceKiss = {\n  prefix: 'fas',\n  iconName: 'face-kiss',\n  icon: [512, 512, [128535, \"kiss\"], \"f596\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm48.7-198.3c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 443.1 257.4 448 240 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1 .3-.2 .6-.4c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.4-.3-.5-.3-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faKiss = faFaceKiss;\nconst faBridgeCircleXmark = {\n  prefix: 'fas',\n  iconName: 'bridge-circle-xmark',\n  icon: [640, 512, [], \"e4cb\", \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32l40 0 0 64-72 0 0 128c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2l0-72.2-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM488 96l0 64-80 0 0-64 80 0zM360 96l0 64-80 0 0-64 80 0zM232 96l0 64-80 0 0-64 80 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faFaceGrinTongue = {\n  prefix: 'fas',\n  iconName: 'face-grin-tongue',\n  icon: [512, 512, [128539, \"grin-tongue\"], \"f589\", \"M0 256C0 368.9 73.1 464.7 174.5 498.8C165.3 484 160 466.6 160 448l0-47.3c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6l0 46.9c0 18.6-5.3 36-14.5 50.8C438.9 464.7 512 368.9 512 256C512 114.6 397.4 0 256 0S0 114.6 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 448l0-45.4c0-14.7-11.9-26.6-26.6-26.6l-2 0c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9l-2 0c-14.7 0-26.6 11.9-26.6 26.6l0 45.4c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faGrinTongue = faFaceGrinTongue;\nconst faChessBishop = {\n  prefix: 'fas',\n  iconName: 'chess-bishop',\n  icon: [320, 512, [9821], \"f43a\", \"M128 0C110.3 0 96 14.3 96 32c0 16.1 11.9 29.4 27.4 31.7C78.4 106.8 8 190 8 288c0 47.4 30.8 72.3 56 84.7L64 400l192 0 0-27.3c25.2-12.5 56-37.4 56-84.7c0-37.3-10.2-72.4-25.3-104.1l-99.4 99.4c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L270.8 154.6c-23.2-38.1-51.8-69.5-74.2-90.9C212.1 61.4 224 48.1 224 32c0-17.7-14.3-32-32-32L128 0zM48 432L6.6 473.4c-4.2 4.2-6.6 10-6.6 16C0 501.9 10.1 512 22.6 512l274.7 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L272 432 48 432z\"]\n};\nconst faFaceGrinWink = {\n  prefix: 'fas',\n  iconName: 'face-grin-wink',\n  icon: [512, 512, [\"grin-wink\"], \"f58c\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zm-16.9-79.2c-17.6-23.5-52.8-23.5-70.4 0c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faGrinWink = faFaceGrinWink;\nconst faEarDeaf = {\n  prefix: 'fas',\n  iconName: 'ear-deaf',\n  icon: [512, 512, [\"deaf\", \"deafness\", \"hard-of-hearing\"], \"f2a4\", \"M502.6 54.6l-40 40c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l40-40c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm-320 320l-128 128c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM240 128c-57.6 0-105.1 43.6-111.3 99.5c-1.9 17.6-17.8 30.2-35.3 28.3s-30.2-17.8-28.3-35.3C74.8 132.5 149.4 64 240 64c97.2 0 176 78.8 176 176c0 46-17.7 87.9-46.6 119.3c-12 13-17.4 24.8-17.4 34.7l0 6.1c0 61.9-50.1 112-112 112c-17.7 0-32-14.3-32-32s14.3-32 32-32c26.5 0 48-21.5 48-48l0-6.1c0-32.9 17.4-59.6 34.4-78c18.4-20 29.6-46.6 29.6-75.9c0-61.9-50.1-112-112-112zm0 80c-17.7 0-32 14.3-32 32c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-17.7-14.3-32-32-32z\"]\n};\nconst faDeaf = faEarDeaf;\nconst faDeafness = faEarDeaf;\nconst faHardOfHearing = faEarDeaf;\nconst faRoadCircleCheck = {\n  prefix: 'fas',\n  iconName: 'road-circle-check',\n  icon: [640, 512, [], \"e564\", \"M213.2 32L288 32l0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 74.8 0c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8l0-42.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32l0 64L86.6 480C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM352 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L480 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faDiceFive = {\n  prefix: 'fas',\n  iconName: 'dice-five',\n  icon: [448, 512, [9860], \"f523\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM96 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSquareRss = {\n  prefix: 'fas',\n  iconName: 'square-rss',\n  icon: [448, 512, [\"rss-square\"], \"f143\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM96 136c0-13.3 10.7-24 24-24c137 0 248 111 248 248c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-110.5-89.5-200-200-200c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24c83.9 0 152 68.1 152 152c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4-46.6-104-104-104c-13.3 0-24-10.7-24-24zm0 120a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faRssSquare = faSquareRss;\nconst faLandMineOn = {\n  prefix: 'fas',\n  iconName: 'land-mine-on',\n  icon: [640, 512, [], \"e51b\", \"M344 24l0 144c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-144c0-13.3 10.7-24 24-24s24 10.7 24 24zM192 320c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32l0 32-256 0 0-32zm-77.3 90.5c8.1-16.3 24.8-26.5 42.9-26.5l324.7 0c18.2 0 34.8 10.3 42.9 26.5l27.6 55.2C563.5 487 548 512 524.2 512l-408.4 0c-23.8 0-39.3-25-28.6-46.3l27.6-55.2zM36.3 138.3c7.5-10.9 22.5-13.6 33.4-6.1l104 72c10.9 7.5 13.6 22.5 6.1 33.4s-22.5 13.6-33.4 6.1l-104-72c-10.9-7.5-13.6-22.5-6.1-33.4zm534.1-6.1c10.9-7.5 25.8-4.8 33.4 6.1s4.8 25.8-6.1 33.4l-104 72c-10.9 7.5-25.8 4.8-33.4-6.1s-4.8-25.8 6.1-33.4l104-72z\"]\n};\nconst faICursor = {\n  prefix: 'fas',\n  iconName: 'i-cursor',\n  icon: [256, 512, [], \"f246\", \"M.1 29.3C-1.4 47 11.7 62.4 29.3 63.9l8 .7C70.5 67.3 96 95 96 128.3L96 224l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 95.7c0 33.3-25.5 61-58.7 63.8l-8 .7C11.7 449.6-1.4 465 .1 482.7s16.9 30.7 34.5 29.2l8-.7c34.1-2.8 64.2-18.9 85.4-42.9c21.2 24 51.2 40 85.4 42.9l8 .7c17.6 1.5 33.1-11.6 34.5-29.2s-11.6-33.1-29.2-34.5l-8-.7C185.5 444.7 160 417 160 383.7l0-95.7 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-95.7c0-33.3 25.5-61 58.7-63.8l8-.7c17.6-1.5 30.7-16.9 29.2-34.5S239-1.4 221.3 .1l-8 .7C179.2 3.6 149.2 19.7 128 43.7c-21.2-24-51.2-40-85.4-42.9l-8-.7C17-1.4 1.6 11.7 .1 29.3z\"]\n};\nconst faStamp = {\n  prefix: 'fas',\n  iconName: 'stamp',\n  icon: [512, 512, [], \"f5bf\", \"M312 201.8c0-17.4 9.2-33.2 19.9-47C344.5 138.5 352 118.1 352 96c0-53-43-96-96-96s-96 43-96 96c0 22.1 7.5 42.5 20.1 58.8c10.7 13.8 19.9 29.6 19.9 47c0 29.9-24.3 54.2-54.2 54.2L112 256C50.1 256 0 306.1 0 368c0 20.9 13.4 38.7 32 45.3L32 464c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-50.7c18.6-6.6 32-24.4 32-45.3c0-61.9-50.1-112-112-112l-33.8 0c-29.9 0-54.2-24.3-54.2-54.2zM416 416l0 32L96 448l0-32 320 0z\"]\n};\nconst faStairs = {\n  prefix: 'fas',\n  iconName: 'stairs',\n  icon: [576, 512, [], \"e289\", \"M384 64c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32l-96 0 0 96c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0 0-96c0-17.7 14.3-32 32-32l96 0 0-96c0-17.7 14.3-32 32-32l96 0 0-96z\"]\n};\nconst faI = {\n  prefix: 'fas',\n  iconName: 'i',\n  icon: [320, 512, [105], \"49\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l96 0 0 320-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0 0-320 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L160 32 32 32z\"]\n};\nconst faHryvniaSign = {\n  prefix: 'fas',\n  iconName: 'hryvnia-sign',\n  icon: [384, 512, [8372, \"hryvnia\"], \"f6f2\", \"M121.9 116.2C138.3 103.1 158.7 96 179.6 96L223 96c27.1 0 49 21.9 49 49c0 11.5-4 22.4-11.1 31L32 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l123.5 0-50.6 28.9c-1.7 1-3.4 2-5.1 3.1L32 272c-17.7 0-32 14.3-32 32s14.3 32 32 32l20.3 0c-2.8 9.9-4.3 20.4-4.3 31c0 62.4 50.6 113 113 113l43.4 0c35.5 0 70-12.1 97.7-34.3L308 441c13.8-11 16-31.2 5-45s-31.2-16-45-5l-5.9 4.7c-16.4 13.1-36.7 20.2-57.7 20.2L161 416c-27.1 0-49-21.9-49-49c0-11.5 4-22.4 11.1-31L352 336c17.7 0 32-14.3 32-32s-14.3-32-32-32l-123.5 0 50.6-28.9c1.7-1 3.4-2 5.1-3.1l67.8 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-20.3 0c2.8-10 4.3-20.4 4.3-31c0-62.4-50.6-113-113-113l-43.4 0c-35.5 0-70 12.1-97.7 34.3L76 71c-13.8 11-16 31.2-5 45s31.2 16 45 5l5.9-4.7z\"]\n};\nconst faHryvnia = faHryvniaSign;\nconst faPills = {\n  prefix: 'fas',\n  iconName: 'pills',\n  icon: [576, 512, [], \"f484\", \"M112 96c-26.5 0-48 21.5-48 48l0 112 96 0 0-112c0-26.5-21.5-48-48-48zM0 144C0 82.1 50.1 32 112 32s112 50.1 112 112l0 224c0 61.9-50.1 112-112 112S0 429.9 0 368L0 144zM554.9 399.4c-7.1 12.3-23.7 13.1-33.8 3.1L333.5 214.9c-10-10-9.3-26.7 3.1-33.8C360 167.7 387.1 160 416 160c88.4 0 160 71.6 160 160c0 28.9-7.7 56-21.1 79.4zm-59.5 59.5C472 472.3 444.9 480 416 480c-88.4 0-160-71.6-160-160c0-28.9 7.7-56 21.1-79.4c7.1-12.3 23.7-13.1 33.8-3.1L498.5 425.1c10 10 9.3 26.7-3.1 33.8z\"]\n};\nconst faFaceGrinWide = {\n  prefix: 'fas',\n  iconName: 'face-grin-wide',\n  icon: [512, 512, [128515, \"grin-alt\"], \"f581\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM208 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64zm128 64c-17.7 0-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64s-14.3 64-32 64z\"]\n};\nconst faGrinAlt = faFaceGrinWide;\nconst faTooth = {\n  prefix: 'fas',\n  iconName: 'tooth',\n  icon: [448, 512, [129463], \"f5c9\", \"M186.1 52.1C169.3 39.1 148.7 32 127.5 32C74.7 32 32 74.7 32 127.5l0 6.2c0 15.8 3.7 31.3 10.7 45.5l23.5 47.1c4.5 8.9 7.6 18.4 9.4 28.2l36.7 205.8c2 11.2 11.6 19.4 22.9 19.8s21.4-7.4 24-18.4l28.9-121.3C192.2 323.7 207 312 224 312s31.8 11.7 35.8 28.3l28.9 121.3c2.6 11.1 12.7 18.8 24 18.4s20.9-8.6 22.9-19.8l36.7-205.8c1.8-9.8 4.9-19.3 9.4-28.2l23.5-47.1c7.1-14.1 10.7-29.7 10.7-45.5l0-2.1c0-55-44.6-99.6-99.6-99.6c-24.1 0-47.4 8.8-65.6 24.6l-3.2 2.8 19.5 15.2c7 5.4 8.2 15.5 2.8 22.5s-15.5 8.2-22.5 2.8l-24.4-19-37-28.8z\"]\n};\nconst faV = {\n  prefix: 'fas',\n  iconName: 'v',\n  icon: [384, 512, [118], \"56\", \"M19.7 34.5c16.3-6.8 35 .9 41.8 17.2L192 364.8 322.5 51.7c6.8-16.3 25.5-24 41.8-17.2s24 25.5 17.2 41.8l-160 384c-5 11.9-16.6 19.7-29.5 19.7s-24.6-7.8-29.5-19.7L2.5 76.3c-6.8-16.3 .9-35 17.2-41.8z\"]\n};\nconst faBangladeshiTakaSign = {\n  prefix: 'fas',\n  iconName: 'bangladeshi-taka-sign',\n  icon: [384, 512, [], \"e2e6\", \"M36 32.3C18.4 30.1 2.4 42.5 .2 60S10.5 93.6 28 95.8l7.9 1c16 2 28 15.6 28 31.8L64 160l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 160c0 53 43 96 96 96l32 0c106 0 192-86 192-192l0-32c0-53-43-96-96-96l-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0c17.7 0 32 14.3 32 32l0 32c0 70.7-57.3 128-128 128l-32 0c-17.7 0-32-14.3-32-32l0-160 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-31.5c0-48.4-36.1-89.3-84.1-95.3l-7.9-1z\"]\n};\nconst faBicycle = {\n  prefix: 'fas',\n  iconName: 'bicycle',\n  icon: [640, 512, [128690], \"f206\", \"M312 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l25.7 0 34.6 64-149.4 0-27.4-38C191 99.7 183.7 96 176 96l-56 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l43.7 0 22.1 30.7-26.6 53.1c-10-2.5-20.5-3.8-31.2-3.8C57.3 224 0 281.3 0 352s57.3 128 128 128c65.3 0 119.1-48.9 127-112l49 0c8.5 0 16.3-4.5 20.7-11.8l84.8-143.5 21.7 40.1C402.4 276.3 384 312 384 352c0 70.7 57.3 128 128 128s128-57.3 128-128s-57.3-128-128-128c-13.5 0-26.5 2.1-38.7 6L375.4 48.8C369.8 38.4 359 32 347.2 32L312 32zM458.6 303.7l32.3 59.7c6.3 11.7 20.9 16 32.5 9.7s16-20.9 9.7-32.5l-32.3-59.7c3.6-.6 7.4-.9 11.2-.9c39.8 0 72 32.2 72 72s-32.2 72-72 72s-72-32.2-72-72c0-18.6 7-35.5 18.6-48.3zM133.2 368l65 0c-7.3 32.1-36 56-70.2 56c-39.8 0-72-32.2-72-72s32.2-72 72-72c1.7 0 3.4 .1 5.1 .2l-24.2 48.5c-9 18.1 4.1 39.4 24.3 39.4zm33.7-48l50.7-101.3 72.9 101.2-.1 .1-123.5 0zm90.6-128l108.5 0L317 274.8 257.4 192z\"]\n};\nconst faStaffSnake = {\n  prefix: 'fas',\n  iconName: 'staff-snake',\n  icon: [384, 512, [\"rod-asclepius\", \"rod-snake\", \"staff-aesculapius\"], \"e579\", \"M222.6 43.2l-.1 4.8L288 48c53 0 96 43 96 96s-43 96-96 96l-40 0 0-80 40 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-40 0-28 0-4.5 144 40.5 0c53 0 96 43 96 96s-43 96-96 96l-16 0 0-80 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-43 0-3.1 99.5L208.5 495l0 1c-.3 8.9-7.6 16-16.5 16s-16.2-7.1-16.5-16l0-1-1-31L136 464c-22.1 0-40-17.9-40-40s17.9-40 40-40l36 0-1-32-19 0c-53 0-96-43-96-96c0-47.6 34.6-87.1 80-94.7l0 94.7c0 8.8 7.2 16 16 16l16.5 0L164 128l-28 0-13.4 0c-9 18.9-28.3 32-50.6 32l-16 0c-30.9 0-56-25.1-56-56S25.1 48 56 48l8 0 8 0 89.5 0-.1-4.8L161 32c0-.7 0-1.3 0-1.9c.5-16.6 14.1-30 31-30s30.5 13.4 31 30c0 .6 0 1.3 0 1.9l-.4 11.2zM64 112a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faRodAsclepius = faStaffSnake;\nconst faRodSnake = faStaffSnake;\nconst faStaffAesculapius = faStaffSnake;\nconst faHeadSideCoughSlash = {\n  prefix: 'fas',\n  iconName: 'head-side-cough-slash',\n  icon: [640, 512, [], \"e062\", \"M448 325.8l44 34.5c8.1 1.4 14.8 6.8 18 14.1L552.9 408c10.6 .4 19.5 7.6 22.2 17.4l39.1 30.6c.6 0 1.2-.1 1.8-.1c11.1 0 20.4 7.5 23.2 17.8l-3.9 0c6.2 8.5 6.4 20.4-.4 29c-8.2 10.4-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2S28.4-3.1 38.8 5.1L89.6 44.9C127 16.7 173.5 0 224 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8L448 320s0 0 0 0l0 5.8zM0 224.2c0-38.7 9.8-75.1 27.1-106.9L341.8 365.3l-2.5 .3c-11 1.4-19.2 10.7-19.2 21.8c0 11.6 9 21.2 20.6 21.9l62 3.9 43 33.9C439.3 466.2 421.2 480 400 480l-80 0 0 8c0 13.3-10.7 24-24 24l-40 0s0 0 0 0L96 512c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM616 360a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm-64-48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faTruckMedical = {\n  prefix: 'fas',\n  iconName: 'truck-medical',\n  icon: [640, 512, [128657, \"ambulance\"], \"f0f9\", \"M0 48C0 21.5 21.5 0 48 0L368 0c26.5 0 48 21.5 48 48l0 48 50.7 0c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3l0 18.7 0 32 0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 48zM416 256l128 0 0-18.7L466.7 160 416 160l0 96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM176 80l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faAmbulance = faTruckMedical;\nconst faWheatAwnCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'wheat-awn-circle-exclamation',\n  icon: [640, 512, [], \"e598\", \"M505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L383 95c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l88-88zM305.5 27.3c-6.2-6.2-16.4-6.2-22.6 0L271.5 38.6c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8L101.8 231c-6.2-6.2-16.4-6.2-22.6 0L67.9 242.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.9-68.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c22.5 22.5 53.3 31.5 82.4 27c0-1 0-2.1 0-3.1c0-33.1 9.1-64.1 25-90.6c-15.5-8.7-32.5-13.8-49.8-15.5l31.9-31.9 12.2 12.2c6 6 12.6 11.1 19.7 15.2c27.5-34 67.3-57.5 112.6-63.8c-4.1-3.8-8.4-7.3-12.9-10.5L505 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-59.4 59.4c-20.6-4.4-42-3.7-62.3 2.1c6.1-21.3 6.6-43.8 1.4-65.3L409 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L329.1 52.9c-3.7-5-7.8-9.8-12.4-14.3L305.5 27.3zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faSnowman = {\n  prefix: 'fas',\n  iconName: 'snowman',\n  icon: [512, 512, [9731, 9924], \"f7d0\", \"M341.1 140.6c-2 3.9-1.6 8.6 1.2 12c7 8.5 12.9 18.1 17.2 28.4L408 160.2l0-40.2c0-13.3 10.7-24 24-24s24 10.7 24 24l0 19.6 22.5-9.7c12.2-5.2 26.3 .4 31.5 12.6s-.4 26.3-12.6 31.5l-56 24-73.6 31.5c-.5 9.5-2.1 18.6-4.8 27.3c-1.2 3.8-.1 8 2.8 10.8C396.7 296.9 416 338.2 416 384c0 44.7-18.3 85-47.8 114.1c-9.9 9.7-23.7 13.9-37.5 13.9l-149.3 0c-13.9 0-27.7-4.2-37.5-13.9C114.3 469 96 428.7 96 384c0-45.8 19.3-87.1 50.1-116.3c2.9-2.8 4-6.9 2.8-10.8c-2.7-8.7-4.3-17.9-4.8-27.3L70.5 198.1l-56-24C2.4 168.8-3.3 154.7 1.9 142.5s19.3-17.8 31.5-12.6L56 139.6 56 120c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40.2L152.6 181c4.3-10.3 10.1-19.9 17.2-28.4c2.8-3.4 3.3-8.1 1.2-12C164 127.2 160 112.1 160 96c0-53 43-96 96-96s96 43 96 96c0 16.1-4 31.2-10.9 44.6zM224 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm48 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-16 80a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm16 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM288 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-48 24l0 3.2c0 3.2 .8 6.3 2.3 9l9 16.9c.9 1.7 2.7 2.8 4.7 2.8s3.8-1.1 4.7-2.8l9-16.9c1.5-2.8 2.3-5.9 2.3-9l0-3.2c0-8.8-7.2-16-16-16s-16 7.2-16 16z\"]\n};\nconst faMortarPestle = {\n  prefix: 'fas',\n  iconName: 'mortar-pestle',\n  icon: [512, 512, [], \"f5a7\", \"M504.3 11.1C493.3-1.6 474.5-3.7 461 6.2L252.3 160l144.9 0L502.6 54.6c11.8-11.8 12.6-30.8 1.6-43.5zM32 192c-17.7 0-32 14.3-32 32s14.3 32 32 32c0 82.5 43.4 147.7 123.9 176.2c-11.1 13.9-19.4 30.3-23.9 48.1C127.6 497.4 142.3 512 160 512l192 0c17.7 0 32.4-14.6 28.1-31.7c-4.5-17.8-12.8-34.1-23.9-48.1C436.6 403.7 480 338.5 480 256c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 192z\"]\n};\nconst faRoadBarrier = {\n  prefix: 'fas',\n  iconName: 'road-barrier',\n  icon: [640, 512, [], \"e562\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-181.7L149.2 96 64 96l0-32c0-17.7-14.3-32-32-32zM405.2 96l-74.3 0-5.4 10.7L234.8 288l74.3 0 5.4-10.7L405.2 96zM362.8 288l74.3 0 5.4-10.7L533.2 96l-74.3 0-5.4 10.7L362.8 288zM202.8 96l-5.4 10.7L106.8 288l74.3 0 5.4-10.7L277.2 96l-74.3 0zm288 192l85.2 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 53.7L490.8 288z\"]\n};\nconst faSchool = {\n  prefix: 'fas',\n  iconName: 'school',\n  icon: [640, 512, [127979], \"f549\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l208 0 0-96c0-35.3 28.7-64 64-64s64 28.7 64 64l0 96 208 0c26.5 0 48-21.5 48-48l0-320c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm400 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64zM96 320l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm400 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64zM232 176a88 88 0 1 1 176 0 88 88 0 1 1 -176 0zm88-48c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16z\"]\n};\nconst faIgloo = {\n  prefix: 'fas',\n  iconName: 'igloo',\n  icon: [576, 512, [], \"f7ae\", \"M320 33.8L320 160 48.5 160C100.2 82.8 188.1 32 288 32c10.8 0 21.5 .6 32 1.8zM352 160l0-120.9C424.9 55.7 487.2 99.8 527.5 160L352 160zM29.9 192L96 192l0 128L0 320c0-46 10.8-89.4 29.9-128zM192 320l-64 0 0-128 320 0 0 128-64 0 0 32 192 0 0 80c0 26.5-21.5 48-48 48l-176 0 0-128c0-35.3-28.7-64-64-64s-64 28.7-64 64l0 128L48 480c-26.5 0-48-21.5-48-48l0-80 192 0 0-32zm288 0l0-128 66.1 0c19.2 38.6 29.9 82 29.9 128l-96 0z\"]\n};\nconst faJoint = {\n  prefix: 'fas',\n  iconName: 'joint',\n  icon: [640, 512, [], \"f595\", \"M448 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11c0 55.2 21.9 108.1 60.9 147.1l21 21c9 9 14.1 21.2 14.1 33.9l0 11c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11c0-29.7-11.8-58.2-32.8-79.2l-21-21C463.2 117.8 448 81.2 448 43l0-11zM576 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11c0-55.2-21.9-108.1-60.9-147.1l-21-21c-9-9-14.1-21.2-14.1-33.9l0-11c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11c0 29.7 11.8 58.2 32.8 79.2l21 21c27 27 42.2 63.6 42.2 101.8l0 11zM229.8 360c-4.7-2.3-10-2.7-15.2-2c-37.8 5.6-75.2 14.3-106.9 22.8C81.3 388 58.3 395.1 42 400.4c-8.2 2.7-14.7 4.9-19.2 6.5c-2.3 .8-4 1.4-5.2 1.8l-1.3 .5C6.8 412.5 0 421.4 0 432s6.8 19.5 16.3 22.7l1.3 .5c1.2 .4 3 1.1 5.2 1.8c4.5 1.6 11 3.8 19.2 6.5c16.3 5.4 39.2 12.5 65.7 19.6C160.3 497.3 228.8 512 288 512l67.3 0c4.1 0 6.3-5.1 3.6-8.3L256.5 380.8c-7.4-8.9-16.5-15.9-26.7-20.8zM445 512l19 0 51.3 0c4.1 0 6.3-5.1 3.6-8.3L416.5 380.8C401.3 362.5 378.8 352 355 352l-19 0-48 0c-1.1 0-2.3 0-3.4 0c-4.1 0-6.2 5.1-3.5 8.3L383.5 483.2C398.7 501.5 421.2 512 445 512zm-3.9-151.7L543.5 483.2c14.6 17.5 35.9 27.9 58.6 28.7c21.1-1.1 37.9-18.6 37.9-39.9l0-80c0-22.1-17.9-40-40-40l-155.3 0c-4.1 0-6.3 5.1-3.6 8.3z\"]\n};\nconst faAngleRight = {\n  prefix: 'fas',\n  iconName: 'angle-right',\n  icon: [320, 512, [8250], \"f105\", \"M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z\"]\n};\nconst faHorse = {\n  prefix: 'fas',\n  iconName: 'horse',\n  icon: [576, 512, [128014], \"f6f0\", \"M448 238.1l0-78.1 16 0 9.8 19.6c12.5 25.1 42.2 36.4 68.3 26c20.5-8.2 33.9-28 33.9-50.1L576 80c0-19.1-8.4-36.3-21.7-48l5.7 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L480 0 448 0C377.3 0 320 57.3 320 128l-96 0-20.8 0-54.4 0c-30.7 0-57.6 16.3-72.5 40.8C33.2 174.5 0 211.4 0 256l0 56c0 13.3 10.7 24 24 24s24-10.7 24-24l0-56c0-13.4 6.6-25.2 16.7-32.5c1.6 13 6.3 25.4 13.6 36.4l28.2 42.4c8.3 12.4 6.4 28.7-1.2 41.6c-16.5 28-20.6 62.2-10 93.9l17.5 52.4c4.4 13.1 16.6 21.9 30.4 21.9l33.7 0c21.8 0 37.3-21.4 30.4-42.1l-20.8-62.5c-2.1-6.4-.5-13.4 4.3-18.2l12.7-12.7c13.2-13.2 20.6-31.1 20.6-49.7c0-2.3-.1-4.6-.3-6.9l84 24c4.1 1.2 8.2 2.1 12.3 2.8L320 480c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-164.3c19.2-19.2 31.5-45.7 32-75.7c0 0 0 0 0 0l0-1.9zM496 64a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faQ = {\n  prefix: 'fas',\n  iconName: 'q',\n  icon: [448, 512, [113], \"51\", \"M64 256c0 88.4 71.6 160 160 160c28.9 0 56-7.7 79.4-21.1l-72-86.4c-11.3-13.6-9.5-33.8 4.1-45.1s33.8-9.5 45.1 4.1l70.9 85.1C371.9 325.8 384 292.3 384 256c0-88.4-71.6-160-160-160S64 167.6 64 256zM344.9 444.6C310 467 268.5 480 224 480C100.3 480 0 379.7 0 256S100.3 32 224 32s224 100.3 224 224c0 56.1-20.6 107.4-54.7 146.7l47.3 56.8c11.3 13.6 9.5 33.8-4.1 45.1s-33.8 9.5-45.1-4.1l-46.6-55.9z\"]\n};\nconst faG = {\n  prefix: 'fas',\n  iconName: 'g',\n  icon: [448, 512, [103], \"47\", \"M224 96C135.6 96 64 167.6 64 256s71.6 160 160 160c77.4 0 142-55 156.8-128L256 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l144 0c25.8 0 49.6 21.4 47.2 50.6C437.8 389.6 341.4 480 224 480C100.3 480 0 379.7 0 256S100.3 32 224 32c57.4 0 109.7 21.6 149.3 57c13.2 11.8 14.3 32 2.5 45.2s-32 14.3-45.2 2.5C302.3 111.4 265 96 224 96z\"]\n};\nconst faNotesMedical = {\n  prefix: 'fas',\n  iconName: 'notes-medical',\n  icon: [512, 512, [], \"f481\", \"M96 352L96 96c0-35.3 28.7-64 64-64l256 0c35.3 0 64 28.7 64 64l0 197.5c0 17-6.7 33.3-18.7 45.3l-58.5 58.5c-12 12-28.3 18.7-45.3 18.7L160 416c-35.3 0-64-28.7-64-64zM272 128c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0zm24 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-160 0C60.9 512 0 451.1 0 376L0 152c0-13.3 10.7-24 24-24s24 10.7 24 24l0 224c0 48.6 39.4 88 88 88l160 0z\"]\n};\nconst faTemperatureHalf = {\n  prefix: 'fas',\n  iconName: 'temperature-half',\n  icon: [320, 512, [127777, \"temperature-2\", \"thermometer-2\", \"thermometer-half\"], \"f2c9\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3L144 208c0-8.8 7.2-16 16-16s16 7.2 16 16l0 114.7c18.6 6.6 32 24.4 32 45.3z\"]\n};\nconst faTemperature2 = faTemperatureHalf;\nconst faThermometer2 = faTemperatureHalf;\nconst faThermometerHalf = faTemperatureHalf;\nconst faDongSign = {\n  prefix: 'fas',\n  iconName: 'dong-sign',\n  icon: [384, 512, [], \"e169\", \"M288 32c-17.7 0-32 14.3-32 32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 49.1c-18.8-10.9-40.7-17.1-64-17.1c-70.7 0-128 57.3-128 128s57.3 128 128 128c24.5 0 47.4-6.9 66.8-18.8c5 11.1 16.2 18.8 29.2 18.8c17.7 0 32-14.3 32-32l0-96 0-160c17.7 0 32-14.3 32-32s-14.3-32-32-32c0-17.7-14.3-32-32-32zM128 288a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448z\"]\n};\nconst faCapsules = {\n  prefix: 'fas',\n  iconName: 'capsules',\n  icon: [576, 512, [], \"f46b\", \"M64 144c0-26.5 21.5-48 48-48s48 21.5 48 48l0 112-96 0 0-112zM0 144L0 368c0 61.9 50.1 112 112 112s112-50.1 112-112l0-178.4c1.8 19.1 8.2 38 19.8 54.8L372.3 431.7c35.5 51.7 105.3 64.3 156 28.1s63-107.5 27.5-159.2L427.3 113.3C391.8 61.5 321.9 49 271.3 85.2c-28 20-44.3 50.8-47.3 83l0-24.2c0-61.9-50.1-112-112-112S0 82.1 0 144zm296.6 64.2c-16-23.3-10-55.3 11.9-71c21.2-15.1 50.5-10.3 66 12.2l67 97.6L361.6 303l-65-94.8zM491 407.7c-.8 .6-1.6 1.1-2.4 1.6l4-2.8c-.5 .4-1 .8-1.6 1.2z\"]\n};\nconst faPooStorm = {\n  prefix: 'fas',\n  iconName: 'poo-storm',\n  icon: [448, 512, [\"poo-bolt\"], \"f75a\", \"M236.9 .2c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.3c2.8 8.2 4.3 16.9 4.3 26.1c0 21.7-8.5 37.2-21.9 47.6c-13.8 10.8-34 17-57.8 17L128 112c-35.3 0-64 28.7-64 64c0 12.2 3.4 23.5 9.3 33.2C31.7 216.2 0 252.4 0 296c0 40.9 28 75.4 65.8 85.2c-5.3-18.5 1-38.5 16.2-50.7l160-128c17.6-14.1 42.6-14 60.2 .2s22.8 38.6 12.8 58.8L285.7 320l18.3 0c20.4 0 38.5 12.9 45.3 32.1c3.7 10.6 3.5 21.8 0 31.9l10.7 0c48.6 0 88-39.4 88-88c0-43.6-31.7-79.8-73.3-86.8c5.9-9.7 9.3-21.1 9.3-33.2c0-35.3-28.7-64-64-64l-1.4 0c.9-5.4 1.4-10.9 1.4-16.6c0-48.7-36.1-88.9-83.1-95.2zm45.1 227.4c-5.8-4.7-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7l70.1 0L129.7 488.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7l-70.1 0 52.4-104.8c3.4-6.7 1.6-14.9-4.3-19.6z\"]\n};\nconst faPooBolt = faPooStorm;\nconst faFaceFrownOpen = {\n  prefix: 'fas',\n  iconName: 'face-frown-open',\n  icon: [512, 512, [128550, \"frown-open\"], \"f57a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-122 174.5c-12.4 5.2-26.5-4.1-21.1-16.4c16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4c-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8z\"]\n};\nconst faFrownOpen = faFaceFrownOpen;\nconst faHandPointUp = {\n  prefix: 'fas',\n  iconName: 'hand-point-up',\n  icon: [384, 512, [9757], \"f0a6\", \"M32 32C32 14.3 46.3 0 64 0S96 14.3 96 32l0 208-64 0L32 32zM224 192c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-64-64c17.7 0 32 14.3 32 32l0 48c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-48c0-17.7 14.3-32 32-32zm160 96c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6l0 8.6c0 88.4-71.6 160-160 160l-61.7 0c-42.4 0-83.1-16.9-113.1-46.9L37.5 453.5C13.5 429.5 0 396.9 0 363l0-27c0-35.3 28.7-64 64-64l88 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72z\"]\n};\nconst faMoneyBill = {\n  prefix: 'fas',\n  iconName: 'money-bill',\n  icon: [576, 512, [], \"f0d6\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm64 320l-64 0 0-64c35.3 0 64 28.7 64 64zM64 192l0-64 64 0c0 35.3-28.7 64-64 64zM448 384c0-35.3 28.7-64 64-64l0 64-64 0zm64-192c-35.3 0-64-28.7-64-64l64 0 0 64zM288 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faBookmark = {\n  prefix: 'fas',\n  iconName: 'bookmark',\n  icon: [384, 512, [128278, 61591], \"f02e\", \"M0 48V487.7C0 501.1 10.9 512 24.3 512c5 0 9.9-1.5 14-4.4L192 400 345.7 507.6c4.1 2.9 9 4.4 14 4.4c13.4 0 24.3-10.9 24.3-24.3V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48z\"]\n};\nconst faAlignJustify = {\n  prefix: 'fas',\n  iconName: 'align-justify',\n  icon: [448, 512, [], \"f039\", \"M448 64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l384 0c17.7 0 32-14.3 32-32zm0 256c0-17.7-14.3-32-32-32L32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32zM0 192c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160c-17.7 0-32 14.3-32 32zM448 448c0-17.7-14.3-32-32-32L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32z\"]\n};\nconst faUmbrellaBeach = {\n  prefix: 'fas',\n  iconName: 'umbrella-beach',\n  icon: [576, 512, [127958], \"f5ca\", \"M346.3 271.8l-60.1-21.9L214 448 32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-261.9 0 64.1-176.2zm121.1-.2l-3.3 9.1 67.7 24.6c18.1 6.6 38-4.2 39.6-23.4c6.5-78.5-23.9-155.5-80.8-208.5c2 8 3.2 16.3 3.4 24.8l.2 6c1.8 57-7.3 113.8-26.8 167.4zM462 99.1c-1.1-34.4-22.5-64.8-54.4-77.4c-.9-.4-1.9-.7-2.8-1.1c-33-11.7-69.8-2.4-93.1 23.8l-4 4.5C272.4 88.3 245 134.2 226.8 184l-3.3 9.1L434 269.7l3.3-9.1c18.1-49.8 26.6-102.5 24.9-155.5l-.2-6zM107.2 112.9c-11.1 15.7-2.8 36.8 15.3 43.4l71 25.8 3.3-9.1c19.5-53.6 49.1-103 87.1-145.5l4-4.5c6.2-6.9 13.1-13 20.5-18.2c-79.6 2.5-154.7 42.2-201.2 108z\"]\n};\nconst faHelmetUn = {\n  prefix: 'fas',\n  iconName: 'helmet-un',\n  icon: [512, 512, [], \"e503\", \"M479.5 224C471.2 98.9 367.2 0 240 0C107.5 0 0 107.5 0 240l0 56.3C0 344.8 39.2 384 87.7 384L200 384l14.9 0L343.5 505.4c4.5 4.2 10.4 6.6 16.5 6.6l96 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-86.5 0-1.5-1.5L368 288l80 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-.5 0zM320 417.2l-78-73.7L274.4 288l45.6 0 0 129.2zM285.3 103.1l34.7 52 0-43.2c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52 0 43.2c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM160 112l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faBullseye = {\n  prefix: 'fas',\n  iconName: 'bullseye',\n  icon: [512, 512, [], \"f140\", \"M448 256A192 192 0 1 0 64 256a192 192 0 1 0 384 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 80a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zM224 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faBacon = {\n  prefix: 'fas',\n  iconName: 'bacon',\n  icon: [576, 512, [129363], \"f7e5\", \"M439.2 1.2c11.2-3.2 23.2-.1 31.4 8.1L518 56.7l-26.5 7.9c-58 16.6-98.1 39.6-129.6 67.4c-31.2 27.5-53.2 59.1-75.1 90.9l-2.3 3.3C241.6 288.7 195 356.6 72.8 417.7L37.9 435.2 9.4 406.6c-7.3-7.3-10.6-17.6-9-27.8s8.1-18.9 17.3-23.5C136.1 296.2 180.9 231 223.3 169.3l2.3-3.4c21.8-31.8 44.9-64.9 77.7-93.9c33.4-29.5 75.8-53.6 135.9-70.8zM61.8 459l25.4-12.7c129.5-64.7 179.9-138.1 223.8-202l2.2-3.3c22.1-32.1 42.1-60.5 69.9-85.1c27.5-24.3 63.4-45.2 117.3-60.6c0 0 0 0 0 0l.2-.1 43.1-12.9 23 23c8 8 11.2 19.7 8.3 30.7s-11.3 19.6-22.2 22.7c-51.9 14.8-85.6 34.7-111.1 57.2c-26.1 23-45.1 49.9-67.3 82.1l-2.2 3.2C327.8 365.9 275.5 442 142.3 508.6c-12.3 6.2-27.2 3.7-36.9-6L61.8 459z\"]\n};\nconst faHandPointDown = {\n  prefix: 'fas',\n  iconName: 'hand-point-down',\n  icon: [384, 512, [], \"f0a7\", \"M32 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-208-64 0 0 208zM224 320c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64zm-64 64c17.7 0 32-14.3 32-32l0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 17.7 14.3 32 32 32zm160-96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64zm-96-88l0 .6c9.4-5.4 20.3-8.6 32-8.6c13.2 0 25.4 4 35.6 10.8c8.7-24.9 32.5-42.8 60.4-42.8c11.7 0 22.6 3.1 32 8.6l0-8.6C384 71.6 312.4 0 224 0L162.3 0C119.8 0 79.1 16.9 49.1 46.9L37.5 58.5C13.5 82.5 0 115.1 0 149l0 27c0 35.3 28.7 64 64 64l88 0c22.1 0 40-17.9 40-40s-17.9-40-40-40l-56 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l56 0c39.8 0 72 32.2 72 72z\"]\n};\nconst faArrowUpFromBracket = {\n  prefix: 'fas',\n  iconName: 'arrow-up-from-bracket',\n  icon: [448, 512, [], \"e09a\", \"M246.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 109.3 192 320c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 53 43 96 96 96l256 0c53 0 96-43 96-96l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7-14.3 32-32 32L96 448c-17.7 0-32-14.3-32-32l0-64z\"]\n};\nconst faFolder = {\n  prefix: 'fas',\n  iconName: 'folder',\n  icon: [512, 512, [128193, 128447, 61716, \"folder-blank\"], \"f07b\", \"M64 480H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H288c-10.1 0-19.6-4.7-25.6-12.8L243.2 57.6C231.1 41.5 212.1 32 192 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64z\"]\n};\nconst faFolderBlank = faFolder;\nconst faFileWaveform = {\n  prefix: 'fas',\n  iconName: 'file-waveform',\n  icon: [448, 512, [\"file-medical-alt\"], \"f478\", \"M96 0C60.7 0 32 28.7 32 64l0 224 112 0c6.1 0 11.6 3.4 14.3 8.8L176 332.2l49.7-99.4c2.7-5.4 8.3-8.8 14.3-8.8s11.6 3.4 14.3 8.8L281.9 288l70.1 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-80 0c-6.1 0-11.6-3.4-14.3-8.8L240 275.8l-49.7 99.4c-2.7 5.4-8.3 8.8-14.3 8.8s-11.6-3.4-14.3-8.8L134.1 320 32 320l0 128c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L256 0 96 0zM288 0l0 128 128 0L288 0z\"]\n};\nconst faFileMedicalAlt = faFileWaveform;\nconst faRadiation = {\n  prefix: 'fas',\n  iconName: 'radiation',\n  icon: [512, 512, [], \"f7b9\", \"M216 186.7c-23.9 13.8-40 39.7-40 69.3L32 256C14.3 256-.2 241.6 2 224.1C10.7 154 47.8 92.7 101.3 52c14.1-10.7 33.8-5.3 42.7 10l72 124.7zM256 336c14.6 0 28.2-3.9 40-10.7l72 124.8c8.8 15.3 3.7 35.1-12.6 41.9c-30.6 12.9-64.2 20-99.4 20s-68.9-7.1-99.4-20c-16.3-6.9-21.4-26.6-12.6-41.9l72-124.8c11.8 6.8 25.4 10.7 40 10.7zm224-80l-144 0c0-29.6-16.1-55.5-40-69.3L368 62c8.8-15.3 28.6-20.7 42.7-10c53.6 40.7 90.6 102 99.4 172.1c2.2 17.5-12.4 31.9-30 31.9zM256 208a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faChartSimple = {\n  prefix: 'fas',\n  iconName: 'chart-simple',\n  icon: [448, 512, [], \"e473\", \"M160 80c0-26.5 21.5-48 48-48l32 0c26.5 0 48 21.5 48 48l0 352c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-352zM0 272c0-26.5 21.5-48 48-48l32 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48L0 272zM368 96l32 0c26.5 0 48 21.5 48 48l0 288c0 26.5-21.5 48-48 48l-32 0c-26.5 0-48-21.5-48-48l0-288c0-26.5 21.5-48 48-48z\"]\n};\nconst faMarsStroke = {\n  prefix: 'fas',\n  iconName: 'mars-stroke',\n  icon: [512, 512, [9894], \"f229\", \"M376 0c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l33.4 33.4L370.3 96.4 345 71c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l25.4 25.4L307.8 159c-28.4-19.5-62.7-31-99.8-31c-97.2 0-176 78.8-176 176s78.8 176 176 176s176-78.8 176-176c0-37-11.4-71.4-31-99.8l28.6-28.6L407 201c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-25.4-25.4 22.1-22.1L471 153c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L376 0zm88 48s0 0 0 0s0 0 0 0s0 0 0 0zM96 304a112 112 0 1 1 224 0A112 112 0 1 1 96 304z\"]\n};\nconst faVial = {\n  prefix: 'fas',\n  iconName: 'vial',\n  icon: [512, 512, [129514], \"f492\", \"M342.6 9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4L28.1 342.6C10.1 360.6 0 385 0 410.5L0 416c0 53 43 96 96 96l5.5 0c25.5 0 49.9-10.1 67.9-28.1L448 205.3l9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-32-32-96-96-32-32zM205.3 256L352 109.3 402.7 160l-96 96-101.5 0z\"]\n};\nconst faGauge = {\n  prefix: 'fas',\n  iconName: 'gauge',\n  icon: [512, 512, [\"dashboard\", \"gauge-med\", \"tachometer-alt-average\"], \"f624\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-26.9-16.5-49.9-40-59.3L280 88c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 204.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64s64-28.7 64-64zM144 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm-16 80a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM400 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faDashboard = faGauge;\nconst faGaugeMed = faGauge;\nconst faTachometerAltAverage = faGauge;\nconst faWandMagicSparkles = {\n  prefix: 'fas',\n  iconName: 'wand-magic-sparkles',\n  icon: [576, 512, [\"magic-wand-sparkles\"], \"e2ca\", \"M234.7 42.7L197 56.8c-3 1.1-5 4-5 7.2s2 6.1 5 7.2l37.7 14.1L248.8 123c1.1 3 4 5 7.2 5s6.1-2 7.2-5l14.1-37.7L315 71.2c3-1.1 5-4 5-7.2s-2-6.1-5-7.2L277.3 42.7 263.2 5c-1.1-3-4-5-7.2-5s-6.1 2-7.2 5L234.7 42.7zM46.1 395.4c-18.7 18.7-18.7 49.1 0 67.9l34.6 34.6c18.7 18.7 49.1 18.7 67.9 0L529.9 116.5c18.7-18.7 18.7-49.1 0-67.9L495.3 14.1c-18.7-18.7-49.1-18.7-67.9 0L46.1 395.4zM484.6 82.6l-105 105-23.3-23.3 105-105 23.3 23.3zM7.5 117.2C3 118.9 0 123.2 0 128s3 9.1 7.5 10.8L64 160l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L128 160l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L128 96 106.8 39.5C105.1 35 100.8 32 96 32s-9.1 3-10.8 7.5L64 96 7.5 117.2zm352 256c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L416 416l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L480 416l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L480 352l-21.2-56.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L416 352l-56.5 21.2z\"]\n};\nconst faMagicWandSparkles = faWandMagicSparkles;\nconst faE = {\n  prefix: 'fas',\n  iconName: 'e',\n  icon: [320, 512, [101], \"45\", \"M64 32C28.7 32 0 60.7 0 96L0 256 0 416c0 35.3 28.7 64 64 64l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 416l0-128 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 224 64 96l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32z\"]\n};\nconst faPenClip = {\n  prefix: 'fas',\n  iconName: 'pen-clip',\n  icon: [512, 512, [\"pen-alt\"], \"f305\", \"M453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-52.1 52.1s0 0 0 0l-1-1s0 0 0 0l-16-16-96-96-17-17 52.1-52.1c25-25 65.5-25 90.5 0zM241 114.9c-9.4-9.4-24.6-9.4-33.9 0L105 217c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L173.1 81c28.1-28.1 73.7-28.1 101.8 0L288 94.1l17 17 96 96 16 16 1 1-17 17L229.5 412.5c-48 48-109.2 80.8-175.8 94.1l-25 5c-7.9 1.6-16-.9-21.7-6.6s-8.1-13.8-6.6-21.7l5-25c13.3-66.6 46.1-127.8 94.1-175.8L254.1 128 241 114.9z\"]\n};\nconst faPenAlt = faPenClip;\nconst faBridgeCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'bridge-circle-exclamation',\n  icon: [640, 512, [], \"e4ca\", \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32l40 0 0 64-72 0 0 128c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2l0-72.2-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM488 96l0 64-80 0 0-64 80 0zM360 96l0 64-80 0 0-64 80 0zM232 96l0 64-80 0 0-64 80 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faUser = {\n  prefix: 'fas',\n  iconName: 'user',\n  icon: [448, 512, [128100, 62144], \"f007\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0z\"]\n};\nconst faSchoolCircleCheck = {\n  prefix: 'fas',\n  iconName: 'school-circle-check',\n  icon: [640, 512, [], \"e56b\", \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l272 0s0 0 0 0l-64 0 0-96c0-35.3 28.7-64 64-64l.3 0 .5 0c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8L640 144c0-26.5-21.5-48-48-48L473.7 96 337.8 5.4zM96 192l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zm0 128l32 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16c0-8.8-7.2-16-16-16zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-99.3-43.3c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7z\"]\n};\nconst faDumpster = {\n  prefix: 'fas',\n  iconName: 'dumpster',\n  icon: [576, 512, [], \"f793\", \"M49.7 32c-10.5 0-19.8 6.9-22.9 16.9L.9 133c-.6 2-.9 4.1-.9 6.1C0 150.7 9.3 160 20.9 160l94 0L140.5 32 49.7 32zM272 160l0-128-98.9 0L147.5 160 272 160zm32 0l124.5 0L402.9 32 304 32l0 128zm157.1 0l94 0c11.5 0 20.9-9.3 20.9-20.9c0-2.1-.3-4.1-.9-6.1L549.2 48.9C546.1 38.9 536.8 32 526.3 32l-90.8 0 25.6 128zM32 192l4 32-4 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l12 0L64 448c0 17.7 14.3 32 32 32s32-14.3 32-32l320 0c0 17.7 14.3 32 32 32s32-14.3 32-32l20-160 12 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-4 0 4-32L32 192z\"]\n};\nconst faVanShuttle = {\n  prefix: 'fas',\n  iconName: 'van-shuttle',\n  icon: [640, 512, [128656, \"shuttle-van\"], \"f5b6\", \"M64 104l0 88 96 0 0-96L72 96c-4.4 0-8 3.6-8 8zm482 88L465.1 96 384 96l0 96 162 0zm-226 0l0-96-96 0 0 96 96 0zM592 384l-16 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 104C0 64.2 32.2 32 72 32l120 0 160 0 113.1 0c18.9 0 36.8 8.3 49 22.8L625 186.5c9.7 11.5 15 26.1 15 41.2L640 336c0 26.5-21.5 48-48 48zm-64 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM160 432a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faShuttleVan = faVanShuttle;\nconst faBuildingUser = {\n  prefix: 'fas',\n  iconName: 'building-user',\n  icon: [640, 512, [], \"e4da\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 89.9 0c-6.3-10.2-9.9-22.2-9.9-35.1c0-46.9 25.8-87.8 64-109.2l0-95.9L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM576 272a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM352 477.1c0 19.3 15.6 34.9 34.9 34.9l218.2 0c19.3 0 34.9-15.6 34.9-34.9c0-51.4-41.7-93.1-93.1-93.1l-101.8 0c-51.4 0-93.1 41.7-93.1 93.1z\"]\n};\nconst faSquareCaretLeft = {\n  prefix: 'fas',\n  iconName: 'square-caret-left',\n  icon: [448, 512, [\"caret-square-left\"], \"f191\", \"M0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416zM128 256c0-6.7 2.8-13 7.7-17.6l112-104c7-6.5 17.2-8.2 25.9-4.4s14.4 12.5 14.4 22l0 208c0 9.5-5.7 18.2-14.4 22s-18.9 2.1-25.9-4.4l-112-104c-4.9-4.5-7.7-10.9-7.7-17.6z\"]\n};\nconst faCaretSquareLeft = faSquareCaretLeft;\nconst faHighlighter = {\n  prefix: 'fas',\n  iconName: 'highlighter',\n  icon: [576, 512, [], \"f591\", \"M315 315l158.4-215L444.1 70.6 229 229 315 315zm-187 5s0 0 0 0l0-71.7c0-15.3 7.2-29.6 19.5-38.6L420.6 8.4C428 2.9 437 0 446.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L334.4 396.5c-9 12.3-23.4 19.5-38.6 19.5L224 416l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L128 320zM7 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7L24 512c-13.3 0-24-10.7-24-24l0-4.7c0-6.4 2.5-12.5 7-17z\"]\n};\nconst faKey = {\n  prefix: 'fas',\n  iconName: 'key',\n  icon: [512, 512, [128273], \"f084\", \"M336 352c97.2 0 176-78.8 176-176S433.2 0 336 0S160 78.8 160 176c0 18.7 2.9 36.8 8.3 53.7L7 391c-4.5 4.5-7 10.6-7 17l0 80c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-40 40 0c13.3 0 24-10.7 24-24l0-40 40 0c6.4 0 12.5-2.5 17-7l33.3-33.3c16.9 5.4 35 8.3 53.7 8.3zM376 96a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\"]\n};\nconst faBullhorn = {\n  prefix: 'fas',\n  iconName: 'bullhorn',\n  icon: [512, 512, [128226, 128363], \"f0a1\", \"M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75l-8.7 0-32 0-96 0c-35.3 0-64 28.7-64 64l0 96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-128 8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-147.6c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4L480 32zm-64 76.7L416 240l0 131.3C357.2 317.8 280.5 288 200.7 288l-8.7 0 0-96 8.7 0c79.8 0 156.5-29.8 215.3-83.3z\"]\n};\nconst faGlobe = {\n  prefix: 'fas',\n  iconName: 'globe',\n  icon: [512, 512, [127760], \"f0ac\", \"M352 256c0 22.2-1.2 43.6-3.3 64l-185.3 0c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64l185.3 0c2.2 20.4 3.3 41.8 3.3 64zm28.8-64l123.1 0c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64l-123.1 0c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32l-116.7 0c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0l-176.6 0c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0L18.6 160C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192l123.1 0c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64L8.1 320C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6l176.6 0c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352l116.7 0zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6l116.7 0z\"]\n};\nconst faSynagogue = {\n  prefix: 'fas',\n  iconName: 'synagogue',\n  icon: [640, 512, [128333], \"f69b\", \"M309.8 3.7c5.9-4.9 14.6-4.9 20.5 0l121 100.8C469.5 119.7 480 142.2 480 166l0 114.1L480 512l-16 0-112 0 0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96-112 0-16 0 0-231.9L160 166c0-23.7 10.5-46.3 28.8-61.5L309.8 3.7zM512 512l0-267.5 28.1-31.2c3-3.4 7.4-5.3 11.9-5.3s8.9 1.9 11.9 5.3l63.8 70.9c7.9 8.8 12.3 20.3 12.3 32.1L640 448c0 35.3-28.7 64-64 64l-64 0zM128 244.5L128 512l-64 0c-35.3 0-64-28.7-64-64L0 316.3c0-11.9 4.4-23.3 12.3-32.1l63.8-70.9c3-3.4 7.4-5.3 11.9-5.3s8.9 1.9 11.9 5.3L128 244.5zM327 124.3c-3.1-5.4-10.9-5.4-13.9 0l-15.9 28.1-32.3-.3c-6.2-.1-10.1 6.7-7 12.1L274.3 192l-16.4 27.8c-3.2 5.4 .7 12.1 7 12.1l32.3-.3L313 259.7c3.1 5.4 10.9 5.4 13.9 0l15.9-28.1 32.3 .3c6.2 .1 10.1-6.7 7-12.1L365.7 192l16.4-27.8c3.2-5.4-.7-12.1-7-12.1l-32.3 .3L327 124.3z\"]\n};\nconst faPersonHalfDress = {\n  prefix: 'fas',\n  iconName: 'person-half-dress',\n  icon: [320, 512, [], \"e548\", \"M160 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm8 352l0-224 6.9 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128s0 0 0 0zM58.2 182.3c19.9-33.1 55.3-53.5 93.8-54.3l0 256s0 0 0 0l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-17.8 0c-10.9 0-18.6-10.7-15.2-21.1L93.3 248.1 59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l53.6-89.2z\"]\n};\nconst faRoadBridge = {\n  prefix: 'fas',\n  iconName: 'road-bridge',\n  icon: [640, 512, [], \"e563\", \"M352 0L608 0c17.7 0 32 14.3 32 32l0 448c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-448c0-17.7 14.3-32 32-32zM480 200c-13.3 0-24 10.7-24 24l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24zm24 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64zM480 40c-13.3 0-24 10.7-24 24l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24zM32 96l256 0 0 64-40 0 0 64 40 0 0 96c-53 0-96 43-96 96l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64c0-53-43-96-96-96l0-96 72 0 0-64-40 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm168 64l-80 0 0 64 80 0 0-64z\"]\n};\nconst faLocationArrow = {\n  prefix: 'fas',\n  iconName: 'location-arrow',\n  icon: [448, 512, [], \"f124\", \"M429.6 92.1c4.9-11.9 2.1-25.6-7-34.7s-22.8-11.9-34.7-7l-352 144c-14.2 5.8-22.2 20.8-19.3 35.8s16.1 25.8 31.4 25.8l176 0 0 176c0 15.3 10.8 28.4 25.8 31.4s30-5.1 35.8-19.3l144-352z\"]\n};\nconst faC = {\n  prefix: 'fas',\n  iconName: 'c',\n  icon: [384, 512, [99], \"43\", \"M329.1 142.9c-62.5-62.5-155.8-62.5-218.3 0s-62.5 163.8 0 226.3s155.8 62.5 218.3 0c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3c-87.5 87.5-221.3 87.5-308.8 0s-87.5-229.3 0-316.8s221.3-87.5 308.8 0c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z\"]\n};\nconst faTabletButton = {\n  prefix: 'fas',\n  iconName: 'tablet-button',\n  icon: [448, 512, [], \"f10a\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM224 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faBuildingLock = {\n  prefix: 'fas',\n  iconName: 'building-lock',\n  icon: [576, 512, [], \"e4d6\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 88.6 0c-5.4-9.4-8.6-20.3-8.6-32l0-128c0-23.7 12.9-44.4 32-55.4l0-24.6c0-30.5 12.2-58.2 32-78.4L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM464 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faPizzaSlice = {\n  prefix: 'fas',\n  iconName: 'pizza-slice',\n  icon: [512, 512, [], \"f818\", \"M169.7 .9c-22.8-1.6-41.9 14-47.5 34.7L110.4 80c.5 0 1.1 0 1.6 0c176.7 0 320 143.3 320 320c0 .5 0 1.1 0 1.6l44.4-11.8c20.8-5.5 36.3-24.7 34.7-47.5C498.5 159.5 352.5 13.5 169.7 .9zM399.8 410.2c.1-3.4 .2-6.8 .2-10.2c0-159.1-128.9-288-288-288c-3.4 0-6.8 .1-10.2 .2L.5 491.9c-1.5 5.5 .1 11.4 4.1 15.4s9.9 5.6 15.4 4.1L399.8 410.2zM176 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM96 384a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faMoneyBillWave = {\n  prefix: 'fas',\n  iconName: 'money-bill-wave',\n  icon: [576, 512, [], \"f53a\", \"M0 112.5L0 422.3c0 18 10.1 35 27 41.3c87 32.5 174 10.3 261-11.9c79.8-20.3 159.6-40.7 239.3-18.9c23 6.3 48.7-9.5 48.7-33.4l0-309.9c0-18-10.1-35-27-41.3C462 15.9 375 38.1 288 60.3C208.2 80.6 128.4 100.9 48.7 79.1C25.6 72.8 0 88.6 0 112.5zM288 352c-44.2 0-80-43-80-96s35.8-96 80-96s80 43 80 96s-35.8 96-80 96zM64 352c35.3 0 64 28.7 64 64l-64 0 0-64zm64-208c0 35.3-28.7 64-64 64l0-64 64 0zM512 304l0 64-64 0c0-35.3 28.7-64 64-64zM448 96l64 0 0 64c-35.3 0-64-28.7-64-64z\"]\n};\nconst faChartArea = {\n  prefix: 'fas',\n  iconName: 'chart-area',\n  icon: [512, 512, [\"area-chart\"], \"f1fe\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 400c0 44.2 35.8 80 80 80l400 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 416c-8.8 0-16-7.2-16-16L64 64zm96 288l288 0c17.7 0 32-14.3 32-32l0-68.2c0-7.6-2.7-15-7.7-20.8l-65.8-76.8c-12.1-14.2-33.7-15-46.9-1.8l-21 21c-10 10-26.4 9.2-35.4-1.6l-39.2-47c-12.6-15.1-35.7-15.4-48.7-.6L135.9 215c-5.1 5.8-7.9 13.3-7.9 21.1l0 84c0 17.7 14.3 32 32 32z\"]\n};\nconst faAreaChart = faChartArea;\nconst faHouseFlag = {\n  prefix: 'fas',\n  iconName: 'house-flag',\n  icon: [640, 512, [], \"e50d\", \"M480 0c-17.7 0-32 14.3-32 32l0 160 0 320 64 0 0-320 112 0c8.8 0 16-7.2 16-16l0-128c0-8.8-7.2-16-16-16L512 32c0-17.7-14.3-32-32-32zM416 159L276.8 39.7c-12-10.3-29.7-10.3-41.7 0l-224 192C1 240.4-2.7 254.5 2 267.1S18.6 288 32 288l32 0 0 192c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-96c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 96c0 17.7 14.3 32 32 32l64.7 0 .2 0-1 0 0-353z\"]\n};\nconst faPersonCircleMinus = {\n  prefix: 'fas',\n  iconName: 'person-circle-minus',\n  icon: [576, 512, [], \"e540\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zm136 16a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16z\"]\n};\nconst faBan = {\n  prefix: 'fas',\n  iconName: 'ban',\n  icon: [512, 512, [128683, \"cancel\"], \"f05e\", \"M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faCancel = faBan;\nconst faCameraRotate = {\n  prefix: 'fas',\n  iconName: 'camera-rotate',\n  icon: [640, 512, [], \"e0d8\", \"M213.1 64.8L202.7 96 128 96c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-74.7 0L426.9 64.8C420.4 45.2 402.1 32 381.4 32L258.6 32c-20.7 0-39 13.2-45.5 32.8zM448 256c0 8.8-7.2 16-16 16l-76.7 0c-6.2 0-11.3-5.1-11.3-11.3c0-3 1.2-5.9 3.3-8L371 229c-13.6-13.4-31.9-21-51-21c-19.2 0-37.7 7.6-51.3 21.3L249 249c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l19.7-19.7C257.4 172.7 288 160 320 160c31.8 0 62.4 12.6 85 35l23.7-23.7c2.1-2.1 5-3.3 8-3.3c6.2 0 11.3 5.1 11.3 11.3l0 76.7zM192 320c0-8.8 7.2-16 16-16l76.7 0c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8L269 347c13.6 13.4 31.9 21 51 21c19.2 0 37.7-7.6 51.3-21.3L391 327c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-19.7 19.7C382.6 403.3 352 416 320 416c-31.8 0-62.4-12.6-85-35l-23.7 23.7c-2.1 2.1-5 3.3-8 3.3c-6.2 0-11.3-5.1-11.3-11.3l0-76.7z\"]\n};\nconst faSprayCanSparkles = {\n  prefix: 'fas',\n  iconName: 'spray-can-sparkles',\n  icon: [512, 512, [\"air-freshener\"], \"f5d0\", \"M96 32l0 96 128 0 0-96c0-17.7-14.3-32-32-32L128 0C110.3 0 96 14.3 96 32zm0 128c-53 0-96 43-96 96L0 464c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-208c0-53-43-96-96-96L96 160zm64 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM384 48c0-1.4-1-3-2.2-3.6L352 32 339.6 2.2C339 1 337.4 0 336 0s-3 1-3.6 2.2L320 32 290.2 44.4C289 45 288 46.6 288 48c0 1.4 1 3 2.2 3.6L320 64l12.4 29.8C333 95 334.6 96 336 96s3-1 3.6-2.2L352 64l29.8-12.4C383 51 384 49.4 384 48zm76.4 45.8C461 95 462.6 96 464 96s3-1 3.6-2.2L480 64l29.8-12.4C511 51 512 49.4 512 48c0-1.4-1-3-2.2-3.6L480 32 467.6 2.2C467 1 465.4 0 464 0s-3 1-3.6 2.2L448 32 418.2 44.4C417 45 416 46.6 416 48c0 1.4 1 3 2.2 3.6L448 64l12.4 29.8zm7.2 100.4c-.6-1.2-2.2-2.2-3.6-2.2s-3 1-3.6 2.2L448 224l-29.8 12.4c-1.2 .6-2.2 2.2-2.2 3.6c0 1.4 1 3 2.2 3.6L448 256l12.4 29.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L480 256l29.8-12.4c1.2-.6 2.2-2.2 2.2-3.6c0-1.4-1-3-2.2-3.6L480 224l-12.4-29.8zM448 144c0-1.4-1-3-2.2-3.6L416 128 403.6 98.2C403 97 401.4 96 400 96s-3 1-3.6 2.2L384 128l-29.8 12.4c-1.2 .6-2.2 2.2-2.2 3.6c0 1.4 1 3 2.2 3.6L384 160l12.4 29.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L416 160l29.8-12.4c1.2-.6 2.2-2.2 2.2-3.6z\"]\n};\nconst faAirFreshener = faSprayCanSparkles;\nconst faStar = {\n  prefix: 'fas',\n  iconName: 'star',\n  icon: [576, 512, [11088, 61446], \"f005\", \"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"]\n};\nconst faRepeat = {\n  prefix: 'fas',\n  iconName: 'repeat',\n  icon: [512, 512, [128257], \"f363\", \"M0 224c0 17.7 14.3 32 32 32s32-14.3 32-32c0-53 43-96 96-96l160 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9S320 19.1 320 32l0 32L160 64C71.6 64 0 135.6 0 224zm512 64c0-17.7-14.3-32-32-32s-32 14.3-32 32c0 53-43 96-96 96l-160 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-32 160 0c88.4 0 160-71.6 160-160z\"]\n};\nconst faCross = {\n  prefix: 'fas',\n  iconName: 'cross',\n  icon: [384, 512, [128327, 10013], \"f654\", \"M176 0c-26.5 0-48 21.5-48 48l0 80-80 0c-26.5 0-48 21.5-48 48l0 32c0 26.5 21.5 48 48 48l80 0 0 208c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-208 80 0c26.5 0 48-21.5 48-48l0-32c0-26.5-21.5-48-48-48l-80 0 0-80c0-26.5-21.5-48-48-48L176 0z\"]\n};\nconst faBox = {\n  prefix: 'fas',\n  iconName: 'box',\n  icon: [448, 512, [128230], \"f466\", \"M50.7 58.5L0 160l208 0 0-128L93.7 32C75.5 32 58.9 42.3 50.7 58.5zM240 160l208 0L397.3 58.5C389.1 42.3 372.5 32 354.3 32L240 32l0 128zm208 32L0 192 0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-224z\"]\n};\nconst faVenusMars = {\n  prefix: 'fas',\n  iconName: 'venus-mars',\n  icon: [640, 512, [9892], \"f228\", \"M176 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM352 176c0 86.3-62.1 158.1-144 173.1l0 34.9 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-34.9C62.1 334.1 0 262.3 0 176C0 78.8 78.8 0 176 0s176 78.8 176 176zM271.9 360.6c19.3-10.1 36.9-23.1 52.1-38.4c20 18.5 46.7 29.8 76.1 29.8c61.9 0 112-50.1 112-112s-50.1-112-112-112c-7.2 0-14.3 .7-21.1 2c-4.9-21.5-13-41.7-24-60.2C369.3 66 384.4 64 400 64c37 0 71.4 11.4 99.8 31l20.6-20.6L487 41c-6.9-6.9-8.9-17.2-5.2-26.2S494.3 0 504 0L616 0c13.3 0 24 10.7 24 24l0 112c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-33.4-33.4L545 140.2c19.5 28.4 31 62.7 31 99.8c0 97.2-78.8 176-176 176c-50.5 0-96-21.3-128.1-55.4z\"]\n};\nconst faArrowPointer = {\n  prefix: 'fas',\n  iconName: 'arrow-pointer',\n  icon: [320, 512, [\"mouse-pointer\"], \"f245\", \"M0 55.2L0 426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320l118.1 0c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z\"]\n};\nconst faMousePointer = faArrowPointer;\nconst faMaximize = {\n  prefix: 'fas',\n  iconName: 'maximize',\n  icon: [512, 512, [\"expand-arrows-alt\"], \"f31e\", \"M200 32L56 32C42.7 32 32 42.7 32 56l0 144c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l40-40 79 79-79 79L73 295c-6.9-6.9-17.2-8.9-26.2-5.2S32 302.3 32 312l0 144c0 13.3 10.7 24 24 24l144 0c9.7 0 18.5-5.8 22.2-14.8s1.7-19.3-5.2-26.2l-40-40 79-79 79 79-40 40c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8l144 0c13.3 0 24-10.7 24-24l0-144c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2l-40 40-79-79 79-79 40 40c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-144c0-13.3-10.7-24-24-24L312 32c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l40 40-79 79-79-79 40-40c6.9-6.9 8.9-17.2 5.2-26.2S209.7 32 200 32z\"]\n};\nconst faExpandArrowsAlt = faMaximize;\nconst faChargingStation = {\n  prefix: 'fas',\n  iconName: 'charging-station',\n  icon: [576, 512, [], \"f5e7\", \"M96 0C60.7 0 32 28.7 32 64l0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-144 16 0c22.1 0 40 17.9 40 40l0 32c0 39.8 32.2 72 72 72s72-32.2 72-72l0-123.7c32.5-10.2 56-40.5 56-76.3l0-32c0-8.8-7.2-16-16-16l-16 0 0-48c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-32 0 0-48c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-16 0c-8.8 0-16 7.2-16 16l0 32c0 35.8 23.5 66.1 56 76.3L472 376c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32c0-48.6-39.4-88-88-88l-16 0 0-192c0-35.3-28.7-64-64-64L96 0zM216.9 82.7c6 4 8.5 11.5 6.3 18.3l-25 74.9 57.8 0c6.7 0 12.7 4.2 15 10.4s.5 13.3-4.6 17.7l-112 96c-5.5 4.7-13.4 5.1-19.3 1.1s-8.5-11.5-6.3-18.3l25-74.9L96 208c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7l112-96c5.5-4.7 13.4-5.1 19.3-1.1z\"]\n};\nconst faShapes = {\n  prefix: 'fas',\n  iconName: 'shapes',\n  icon: [512, 512, [\"triangle-circle-square\"], \"f61f\", \"M315.4 15.5C309.7 5.9 299.2 0 288 0s-21.7 5.9-27.4 15.5l-96 160c-5.9 9.9-6.1 22.2-.4 32.2s16.3 16.2 27.8 16.2l192 0c11.5 0 22.2-6.2 27.8-16.2s5.5-22.3-.4-32.2l-96-160zM288 312l0 144c0 22.1 17.9 40 40 40l144 0c22.1 0 40-17.9 40-40l0-144c0-22.1-17.9-40-40-40l-144 0c-22.1 0-40 17.9-40 40zM128 512a128 128 0 1 0 0-256 128 128 0 1 0 0 256z\"]\n};\nconst faTriangleCircleSquare = faShapes;\nconst faShuffle = {\n  prefix: 'fas',\n  iconName: 'shuffle',\n  icon: [512, 512, [128256, \"random\"], \"f074\", \"M403.8 34.4c12-5 25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-32-32 0c-10.1 0-19.6 4.7-25.6 12.8L284 229.3 244 176l31.2-41.6C293.3 110.2 321.8 96 352 96l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6zM164 282.7L204 336l-31.2 41.6C154.7 401.8 126.2 416 96 416l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c10.1 0 19.6-4.7 25.6-12.8L164 282.7zm274.6 188c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-32-32 0c-30.2 0-58.7-14.2-76.8-38.4L121.6 172.8c-6-8.1-15.5-12.8-25.6-12.8l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c30.2 0 58.7 14.2 76.8 38.4L326.4 339.2c6 8.1 15.5 12.8 25.6 12.8l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64z\"]\n};\nconst faRandom = faShuffle;\nconst faPersonRunning = {\n  prefix: 'fas',\n  iconName: 'person-running',\n  icon: [448, 512, [127939, \"running\"], \"f70c\", \"M320 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM125.7 175.5c9.9-9.9 23.4-15.5 37.5-15.5c1.9 0 3.8 .1 5.6 .3L137.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9-25.4 88.8c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l28.7-100.4c5.9-20.6-2.6-42.6-20.7-53.9L238 299l30.9-82.4 5.1 12.3C289 264.7 323.9 288 362.7 288l21.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-21.3 0c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3L57.4 153.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l23.1-23.1zM91.2 352L32 352c-17.7 0-32 14.3-32 32s14.3 32 32 32l69.6 0c19 0 36.2-11.2 43.9-28.5L157 361.6l-9.5-6c-17.5-10.9-30.5-26.8-37.9-44.9L91.2 352z\"]\n};\nconst faRunning = faPersonRunning;\nconst faMobileRetro = {\n  prefix: 'fas',\n  iconName: 'mobile-retro',\n  icon: [320, 512, [], \"e527\", \"M0 64C0 28.7 28.7 0 64 0L256 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm64 96l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L96 128c-17.7 0-32 14.3-32 32zM80 352a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56-56a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56-56a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM128 48c-8.8 0-16 7.2-16 16s7.2 16 16 16l64 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0z\"]\n};\nconst faGripLinesVertical = {\n  prefix: 'fas',\n  iconName: 'grip-lines-vertical',\n  icon: [192, 512, [], \"f7a5\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32L64 64zm128 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384z\"]\n};\nconst faSpider = {\n  prefix: 'fas',\n  iconName: 'spider',\n  icon: [512, 512, [128375], \"f717\", \"M158.4 32.6c4.8-12.4-1.4-26.3-13.8-31s-26.3 1.4-31 13.8L81.1 100c-7.9 20.7-3 44.1 12.7 59.7l57.4 57.4L70.8 190.3c-2.4-.8-4.3-2.7-5.1-5.1L46.8 128.4C42.6 115.8 29 109 16.4 113.2S-3 131 1.2 143.6l18.9 56.8c5.6 16.7 18.7 29.8 35.4 35.4L116.1 256 55.6 276.2c-16.7 5.6-29.8 18.7-35.4 35.4L1.2 368.4C-3 381 3.8 394.6 16.4 398.8s26.2-2.6 30.4-15.2l18.9-56.8c.8-2.4 2.7-4.3 5.1-5.1l80.4-26.8L93.7 352.3C78.1 368 73.1 391.4 81.1 412l32.5 84.6c4.8 12.4 18.6 18.5 31 13.8s18.5-18.6 13.8-31l-32.5-84.6c-1.1-3-.4-6.3 1.8-8.5L160 353.9c1 52.1 43.6 94.1 96 94.1s95-41.9 96-94.1l32.3 32.3c2.2 2.2 2.9 5.6 1.8 8.5l-32.5 84.6c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8L430.9 412c7.9-20.7 3-44.1-12.7-59.7l-57.4-57.4 80.4 26.8c2.4 .8 4.3 2.7 5.1 5.1l18.9 56.8c4.2 12.6 17.8 19.4 30.4 15.2s19.4-17.8 15.2-30.4l-18.9-56.8c-5.6-16.7-18.7-29.8-35.4-35.4L395.9 256l60.5-20.2c16.7-5.6 29.8-18.7 35.4-35.4l18.9-56.8c4.2-12.6-2.6-26.2-15.2-30.4s-26.2 2.6-30.4 15.2l-18.9 56.8c-.8 2.4-2.7 4.3-5.1 5.1l-80.4 26.8 57.4-57.4c15.6-15.6 20.6-39 12.7-59.7L398.4 15.4C393.6 3 379.8-3.2 367.4 1.6s-18.5 18.6-13.8 31l32.5 84.6c1.1 3 .4 6.3-1.8 8.5L336 174.1l0-14.1c0-31.8-18.6-59.3-45.5-72.2c-9.1-4.4-18.5 3.3-18.5 13.4l0 10.8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-10.8c0-10.1-9.4-17.7-18.5-13.4C194.6 100.7 176 128.2 176 160l0 14.1-48.3-48.3c-2.2-2.2-2.9-5.6-1.8-8.5l32.5-84.6z\"]\n};\nconst faHandsBound = {\n  prefix: 'fas',\n  iconName: 'hands-bound',\n  icon: [640, 512, [], \"e4f9\", \"M96 32C96 14.3 81.7 0 64 0S32 14.3 32 32l0 64 0 59.1 0 .7L32 192l0 21.9c0 14.2 5.1 27.9 14.3 38.7L131.6 352l-3.6 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 128 0 64 0 128 0 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-3.6 0 85.3-99.5c9.2-10.8 14.3-24.5 14.3-38.7l0-21.9 0-36.2 0-.7L608 96l0-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64 0 48.8-69.3 92.4c-5.7 7.6-16.1 9.6-24.2 4.8c-9.7-5.7-12.1-18.7-5.1-27.5L473 180c10.8-13.5 8.9-33.3-4.4-44.5s-33-9.8-44.5 3.2l-46.7 52.5C361 209.7 352 233.4 352 258.1l0 61.9 0 32-64 0 0-32 0-61.9c0-24.6-9-48.4-25.4-66.8l-46.7-52.5c-11.5-13-31.3-14.4-44.5-3.2s-15.2 30.9-4.4 44.5l27.6 34.5c7 8.8 4.7 21.8-5.1 27.5c-8.1 4.8-18.6 2.7-24.2-4.8L96 144.8 96 96l0-64zm64 448l0 32 128 0 0-32 64 0 0 32 128 0 0-32 32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0-128 0-64 0-128 0-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0z\"]\n};\nconst faFileInvoiceDollar = {\n  prefix: 'fas',\n  iconName: 'file-invoice-dollar',\n  icon: [384, 512, [], \"f571\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM64 80c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 96c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16zm128 72c8.8 0 16 7.2 16 16l0 17.3c8.5 1.2 16.7 3.1 24.1 5.1c8.5 2.3 13.6 11 11.3 19.6s-11 13.6-19.6 11.3c-11.1-3-22-5.2-32.1-5.3c-8.4-.1-17.4 1.8-23.6 5.5c-5.7 3.4-8.1 7.3-8.1 12.8c0 3.7 1.3 6.5 7.3 10.1c6.9 4.1 16.6 7.1 29.2 10.9l.5 .1s0 0 0 0s0 0 0 0c11.3 3.4 25.3 7.6 36.3 14.6c12.1 7.6 22.4 19.7 22.7 38.2c.3 19.3-9.6 33.3-22.9 41.6c-7.7 4.8-16.4 7.6-25.1 9.1l0 17.1c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-17.8c-11.2-2.1-21.7-5.7-30.9-8.9c0 0 0 0 0 0c-2.1-.7-4.2-1.4-6.2-2.1c-8.4-2.8-12.9-11.9-10.1-20.2s11.9-12.9 20.2-10.1c2.5 .8 4.8 1.6 7.1 2.4c0 0 0 0 0 0s0 0 0 0s0 0 0 0c13.6 4.6 24.6 8.4 36.3 8.7c9.1 .3 17.9-1.7 23.7-5.3c5.1-3.2 7.9-7.3 7.8-14c-.1-4.6-1.8-7.8-7.7-11.6c-6.8-4.3-16.5-7.4-29-11.2l-1.6-.5s0 0 0 0c-11-3.3-24.3-7.3-34.8-13.7c-12-7.2-22.6-18.9-22.7-37.3c-.1-19.4 10.8-32.8 23.8-40.5c7.5-4.4 15.8-7.2 24.1-8.7l0-17.3c0-8.8 7.2-16 16-16z\"]\n};\nconst faPlaneCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'plane-circle-exclamation',\n  icon: [640, 512, [], \"e556\", \"M256 0c-35 0-64 59.5-64 93.7l0 84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9l0 65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8l0 42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3l0-84.6C320 59.5 292 0 256 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faXRay = {\n  prefix: 'fas',\n  iconName: 'x-ray',\n  icon: [512, 512, [], \"f497\", \"M0 64C0 46.3 14.3 32 32 32l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 320c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 96C14.3 96 0 81.7 0 64zM256 96c-8.8 0-16 7.2-16 16l0 32-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 48-112 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l112 0 0 70.6L189.1 307c-5.2-2-10.6-3-16.2-3l-2.1 0c-23.6 0-42.8 19.2-42.8 42.8c0 9.6 3.2 18.9 9.1 26.4l18.2 23.2c9.7 12.4 24.6 19.6 40.3 19.6l120.8 0c15.7 0 30.6-7.2 40.3-19.6l18.2-23.2c5.9-7.5 9.1-16.8 9.1-26.4c0-23.6-19.2-42.8-42.8-42.8l-2.2 0c-5.5 0-11 1-16.2 3L272 326.6l0-70.6 112 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-112 0 0-48 80 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-80 0 0-32c0-8.8-7.2-16-16-16zM208 352a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm80 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nconst faSpellCheck = {\n  prefix: 'fas',\n  iconName: 'spell-check',\n  icon: [576, 512, [], \"f891\", \"M112 0C99.1 0 87.4 7.8 82.5 19.7l-66.7 160-13.3 32c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L66.7 224l90.7 0 5.1 12.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8l-13.3-32-66.7-160C136.6 7.8 124.9 0 112 0zm18.7 160l-37.3 0L112 115.2 130.7 160zM256 32l0 96 0 96c0 17.7 14.3 32 32 32l80 0c44.2 0 80-35.8 80-80c0-23.1-9.8-43.8-25.4-58.4c6-11.2 9.4-24 9.4-37.6c0-44.2-35.8-80-80-80L288 0c-17.7 0-32 14.3-32 32zm96 64l-32 0 0-32 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-32 64l32 0 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0-32zM566.6 310.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L352 434.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l192-192z\"]\n};\nconst faSlash = {\n  prefix: 'fas',\n  iconName: 'slash',\n  icon: [640, 512, [], \"f715\", \"M5.1 9.2C13.3-1.2 28.4-3.1 38.8 5.1l592 464c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2z\"]\n};\nconst faComputerMouse = {\n  prefix: 'fas',\n  iconName: 'computer-mouse',\n  icon: [384, 512, [128433, \"mouse\"], \"f8cc\", \"M0 192l176 0L176 0 160 0C71.6 0 0 71.6 0 160l0 32zm0 32L0 352c0 88.4 71.6 160 160 160l64 0c88.4 0 160-71.6 160-160l0-128-192 0L0 224zm384-32l0-32C384 71.6 312.4 0 224 0L208 0l0 192 176 0z\"]\n};\nconst faMouse = faComputerMouse;\nconst faArrowRightToBracket = {\n  prefix: 'fas',\n  iconName: 'arrow-right-to-bracket',\n  icon: [512, 512, [\"sign-in\"], \"f090\", \"M352 96l64 0c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c53 0 96-43 96-96l0-256c0-53-43-96-96-96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm-9.4 182.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L242.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"]\n};\nconst faSignIn = faArrowRightToBracket;\nconst faShopSlash = {\n  prefix: 'fas',\n  iconName: 'shop-slash',\n  icon: [640, 512, [\"store-alt-slash\"], \"e070\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-54.8-43L576 224l-64 0 0 152L384 275.7l0-51.7-64 0 0 1.5L277.2 192l325.9 0c20.3 0 36.8-16.5 36.8-36.8c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0L121.7 0c-16 0-31 8-39.9 21.4L74.1 32.8 38.8 5.1zM36.8 192l85 0L21 112.5 6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM320 384l-192 0 0-160-64 0 0 160 0 80c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-65.5-64-50.4 0 35.9z\"]\n};\nconst faStoreAltSlash = faShopSlash;\nconst faServer = {\n  prefix: 'fas',\n  iconName: 'server',\n  icon: [512, 512, [], \"f233\", \"M64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 32zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 288zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faVirusCovidSlash = {\n  prefix: 'fas',\n  iconName: 'virus-covid-slash',\n  icon: [640, 512, [], \"e4a9\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c11.4-19.5 19.1-41.4 22.3-64.7l33.6 0 0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 16-33.6 0c-4.2-30.7-16.3-58.8-34.1-82.3L484 125.9l11.3 11.3c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L472.7 46.7c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L450.1 92l-23.8 23.8C402.8 97.9 374.7 85.8 344 81.6L344 48l16 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L280 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0 0 33.6c-30.7 4.2-58.8 16.3-82.3 34.1L189.9 92l11.3-11.3c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L134.1 79.8 38.8 5.1zM149.2 213.5c-1.5 6-2.7 12.2-3.5 18.5L112 232l0-16c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16 33.6 0c4.2 30.7 16.3 58.8 34.1 82.3L156 386.1l-11.3-11.3c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l56.6 56.6c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L189.9 420l23.8-23.8c23.5 17.9 51.7 29.9 82.3 34.1l0 33.6-16 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-16 0 0-33.6c20.4-2.8 39.7-9.1 57.3-18.2L149.2 213.5z\"]\n};\nconst faShopLock = {\n  prefix: 'fas',\n  iconName: 'shop-lock',\n  icon: [640, 512, [], \"e4a5\", \"M36.8 192l412.8 0c20.2-19.8 47.9-32 78.4-32c30.5 0 58.1 12.2 78.3 31.9c18.9-1.6 33.7-17.4 33.7-36.7c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0L121.7 0c-16 0-31 8-39.9 21.4L6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM384 224l-64 0 0 160-192 0 0-160-64 0 0 160 0 80c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-80 0-32 0-128zm144 16c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faHourglassStart = {\n  prefix: 'fas',\n  iconName: 'hourglass-start',\n  icon: [384, 512, [\"hourglass-1\"], \"f251\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l0 11c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437l0 11c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 256 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-11c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1l0-11c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 0 64 0 32 0zM288 437l0 11L96 448l0-11c0-25.5 10.1-49.9 28.1-67.9L192 301.3l67.9 67.9c18 18 28.1 42.4 28.1 67.9z\"]\n};\nconst faHourglass1 = faHourglassStart;\nconst faBlenderPhone = {\n  prefix: 'fas',\n  iconName: 'blender-phone',\n  icon: [576, 512, [], \"f6b6\", \"M224 352L196.8 52.3C194.2 24.2 216.3 0 244.6 0L534.1 0c21.1 0 36.4 20.1 30.9 40.4L558.5 64 400 64c-8.8 0-16 7.2-16 16s7.2 16 16 16l149.8 0-17.5 64L400 160c-8.8 0-16 7.2-16 16s7.2 16 16 16l123.6 0-17.5 64L400 256c-8.8 0-16 7.2-16 16s7.2 16 16 16l97.5 0L480 352l-256 0zm-16 32l288 0c26.5 0 48 21.5 48 48l0 32c0 26.5-21.5 48-48 48l-288 0c-26.5 0-48-21.5-48-48l0-32c0-26.5 21.5-48 48-48zm144 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM147.5 30.7c10.8 6.7 15.3 21 10.6 33.4l-22 57.8c-4.2 10.9-14.5 17.6-25.3 16.4l-33.3-3.6c-13.6 42.2-13.6 88.4 0 130.7l33.3-3.6c10.9-1.2 21.2 5.5 25.3 16.4l22 57.8c4.7 12.4 .2 26.7-10.6 33.4l-44 27.2c-9.7 6-21.9 4.2-29.8-4.3C-24.6 286-24.6 114 73.7 7.8C81.6-.7 93.8-2.5 103.5 3.5l44 27.2z\"]\n};\nconst faBuildingWheat = {\n  prefix: 'fas',\n  iconName: 'building-wheat',\n  icon: [640, 512, [], \"e4db\", \"M0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48l-96 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-96 0c-26.5 0-48-21.5-48-48L0 48zM80 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm112-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM64 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L80 96c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm384 80l0 16c0 44.2-35.8 80-80 80l-16 0 0-16c0-44.2 35.8-80 80-80l16 0zm0 128c0 44.2-35.8 80-80 80l-16 0 0-16c0-44.2 35.8-80 80-80l16 0 0 16zm0 112c0 44.2-35.8 80-80 80l-16 0 0-16c0-44.2 35.8-80 80-80l16 0 0 16zM512 496l0 16-16 0c-44.2 0-80-35.8-80-80l0-16 16 0c44.2 0 80 35.8 80 80zm0-96l-16 0c-44.2 0-80-35.8-80-80l0-16 16 0c44.2 0 80 35.8 80 80l0 16zm0-128l0 16-16 0c-44.2 0-80-35.8-80-80l0-16 16 0c44.2 0 80 35.8 80 80zM528 32c13.3 0 24 10.7 24 24l0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-104c0-13.3 10.7-24 24-24zm96 64l0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32c0-13.3 10.7-24 24-24s24 10.7 24 24zM456 72c13.3 0 24 10.7 24 24l0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32c0-13.3 10.7-24 24-24z\"]\n};\nconst faPersonBreastfeeding = {\n  prefix: 'fas',\n  iconName: 'person-breastfeeding',\n  icon: [448, 512, [], \"e53a\", \"M224 0a80 80 0 1 1 0 160A80 80 0 1 1 224 0zM436.8 382.8L373.5 462c-16.6 20.7-46.8 24.1-67.5 7.5c-17.6-14.1-22.7-38.1-13.5-57.7l-.8-.1c-38.9-5.6-74.3-25.1-99.7-54.8l0-36.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 .8 0 1.6 .1 2.4l101.4 50.7c23.7 11.9 33.3 40.7 21.5 64.4s-40.7 33.3-64.4 21.5L27.2 427.3c-1.1-.5-2.2-1.1-3.3-1.7c-4.9-2.8-9.2-6.4-12.6-10.6c-4.6-5.4-7.8-11.7-9.6-18.4c-3.3-12-1.9-25.2 4.8-36.6c.6-1.1 1.3-2.2 2-3.2L75.6 256.1c26.7-40.1 71.7-64.1 119.8-64.1l75.2 0c46.5 0 90.1 22.5 117.2 60.3l50.7 70.9c2.2 3 4 6.1 5.5 9.4c2.9 6.7 4.3 13.8 4 20.8c-.3 10.6-4.2 21-11.2 29.4zM320 332a44 44 0 1 0 -88 0 44 44 0 1 0 88 0z\"]\n};\nconst faRightToBracket = {\n  prefix: 'fas',\n  iconName: 'right-to-bracket',\n  icon: [512, 512, [\"sign-in-alt\"], \"f2f6\", \"M217.9 105.9L340.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L217.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1L32 320c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM352 416l64 0c17.7 0 32-14.3 32-32l0-256c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c53 0 96 43 96 96l0 256c0 53-43 96-96 96l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faSignInAlt = faRightToBracket;\nconst faVenus = {\n  prefix: 'fas',\n  iconName: 'venus',\n  icon: [384, 512, [9792], \"f221\", \"M80 176a112 112 0 1 1 224 0A112 112 0 1 1 80 176zM224 349.1c81.9-15 144-86.8 144-173.1C368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144 173.1l0 34.9-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-34.9z\"]\n};\nconst faPassport = {\n  prefix: 'fas',\n  iconName: 'passport',\n  icon: [448, 512, [], \"f5ab\", \"M0 64C0 28.7 28.7 0 64 0L384 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM183 278.8c-27.9-13.2-48.4-39.4-53.7-70.8l39.1 0c1.6 30.4 7.7 53.8 14.6 70.8zm41.3 9.2l-.3 0-.3 0c-2.4-3.5-5.7-8.9-9.1-16.5c-6-13.6-12.4-34.3-14.2-63.5l47.1 0c-1.8 29.2-8.1 49.9-14.2 63.5c-3.4 7.6-6.7 13-9.1 16.5zm40.7-9.2c6.8-17.1 12.9-40.4 14.6-70.8l39.1 0c-5.3 31.4-25.8 57.6-53.7 70.8zM279.6 176c-1.6-30.4-7.7-53.8-14.6-70.8c27.9 13.2 48.4 39.4 53.7 70.8l-39.1 0zM223.7 96l.3 0 .3 0c2.4 3.5 5.7 8.9 9.1 16.5c6 13.6 12.4 34.3 14.2 63.5l-47.1 0c1.8-29.2 8.1-49.9 14.2-63.5c3.4-7.6 6.7-13 9.1-16.5zM183 105.2c-6.8 17.1-12.9 40.4-14.6 70.8l-39.1 0c5.3-31.4 25.8-57.6 53.7-70.8zM352 192A128 128 0 1 0 96 192a128 128 0 1 0 256 0zM112 384c-8.8 0-16 7.2-16 16s7.2 16 16 16l224 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-224 0z\"]\n};\nconst faThumbtackSlash = {\n  prefix: 'fas',\n  iconName: 'thumbtack-slash',\n  icon: [640, 512, [\"thumb-tack-slash\"], \"e68f\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L481.4 352c9.8-.4 18.9-5.3 24.6-13.3c6-8.3 7.7-19.1 4.4-28.8l-1-3c-13.8-41.5-42.8-74.8-79.5-94.7L418.5 64 448 64c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l29.5 0-6.1 79.5L38.8 5.1zM324.9 352L177.1 235.6c-20.9 18.9-37.2 43.3-46.5 71.3l-1 3c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3l164.9 0zM288 384l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96-64 0z\"]\n};\nconst faThumbTackSlash = faThumbtackSlash;\nconst faHeartPulse = {\n  prefix: 'fas',\n  iconName: 'heart-pulse',\n  icon: [512, 512, [\"heartbeat\"], \"f21e\", \"M228.3 469.1L47.6 300.4c-4.2-3.9-8.2-8.1-11.9-12.4l87 0c22.6 0 43-13.6 51.7-34.5l10.5-25.2 49.3 109.5c3.8 8.5 12.1 14 21.4 14.1s17.8-5 22-13.3L320 253.7l1.7 3.4c9.5 19 28.9 31 50.1 31l104.5 0c-3.7 4.3-7.7 8.5-11.9 12.4L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9zM503.7 240l-132 0c-3 0-5.8-1.7-7.2-4.4l-23.2-46.3c-4.1-8.1-12.4-13.3-21.5-13.3s-17.4 5.1-21.5 13.3l-41.4 82.8L205.9 158.2c-3.9-8.7-12.7-14.3-22.2-14.1s-18.1 5.9-21.8 14.8l-31.8 76.3c-1.2 3-4.2 4.9-7.4 4.9L16 240c-2.6 0-5 .4-7.3 1.1C3 225.2 0 208.2 0 190.9l0-5.8c0-69.9 50.5-129.5 119.4-141C165 36.5 211.4 51.4 244 84l12 12 12-12c32.6-32.6 79-47.5 124.6-39.9C461.5 55.6 512 115.2 512 185.1l0 5.8c0 16.9-2.8 33.5-8.3 49.1z\"]\n};\nconst faHeartbeat = faHeartPulse;\nconst faPeopleCarryBox = {\n  prefix: 'fas',\n  iconName: 'people-carry-box',\n  icon: [640, 512, [\"people-carry\"], \"f4ce\", \"M80 48a48 48 0 1 1 96 0A48 48 0 1 1 80 48zm64 193.7l0 65.1 51 51c7.1 7.1 11.8 16.2 13.4 26.1l15.2 90.9c2.9 17.4-8.9 33.9-26.3 36.8s-33.9-8.9-36.8-26.3l-14.3-85.9L66.8 320C54.8 308 48 291.7 48 274.7l0-88.1c0-32.4 26.2-58.6 58.6-58.6c24.1 0 46.5 12 59.9 32l47.4 71.1 10.1 5 0-76.2c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 76.2 10.1-5L473.5 160c13.3-20 35.8-32 59.9-32c32.4 0 58.6 26.2 58.6 58.6l0 88.1c0 17-6.7 33.3-18.7 45.3l-79.4 79.4-14.3 85.9c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l15.2-90.9c1.6-9.9 6.3-19 13.4-26.1l51-51 0-65.1-19 28.5c-4.6 7-11 12.6-18.5 16.3l-59.6 29.8c-2.4 1.3-4.9 2.2-7.6 2.8c-2.6 .6-5.3 .9-7.9 .8l-126.7 0c-2.5 .1-5-.2-7.5-.7c-2.9-.6-5.6-1.6-8.1-3l-59.5-29.8c-7.5-3.7-13.8-9.4-18.5-16.3l-19-28.5zM2.3 468.1L50.1 348.6l49.2 49.2-37.6 94c-6.6 16.4-25.2 24.4-41.6 17.8S-4.3 484.5 2.3 468.1zM512 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm77.9 348.6l47.8 119.5c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8l-37.6-94 49.2-49.2z\"]\n};\nconst faPeopleCarry = faPeopleCarryBox;\nconst faTemperatureHigh = {\n  prefix: 'fas',\n  iconName: 'temperature-high',\n  icon: [512, 512, [], \"f769\", \"M416 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 128A96 96 0 1 0 416 0a96 96 0 1 0 0 192zM96 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C217.8 332.6 224 349.5 224 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9C88.9 308.4 96 293.8 96 276.5L96 112zM144 0C82.1 0 32 50.2 32 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C11.2 304.2 0 334.8 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L256 112C256 50.2 205.9 0 144 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3L160 112c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 210.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48z\"]\n};\nconst faMicrochip = {\n  prefix: 'fas',\n  iconName: 'microchip',\n  icon: [512, 512, [], \"f2db\", \"M176 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c-35.3 0-64 28.7-64 64l-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 56-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0 0 56-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0c0 35.3 28.7 64 64 64l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40 56 0 0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40 56 0 0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c35.3 0 64-28.7 64-64l40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0 0-56 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0 0-56 40 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-40 0c0-35.3-28.7-64-64-64l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40-56 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40-56 0 0-40zM160 128l192 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32l0-192c0-17.7 14.3-32 32-32zm192 32l-192 0 0 192 192 0 0-192z\"]\n};\nconst faCrown = {\n  prefix: 'fas',\n  iconName: 'crown',\n  icon: [576, 512, [128081], \"f521\", \"M309 106c11.4-7 19-19.7 19-34c0-22.1-17.9-40-40-40s-40 17.9-40 40c0 14.4 7.6 27 19 34L209.7 220.6c-9.1 18.2-32.7 23.4-48.6 10.7L72 160c5-6.7 8-15 8-24c0-22.1-17.9-40-40-40S0 113.9 0 136s17.9 40 40 40c.2 0 .5 0 .7 0L86.4 427.4c5.5 30.4 32 52.6 63 52.6l277.2 0c30.9 0 57.4-22.1 63-52.6L535.3 176c.2 0 .5 0 .7 0c22.1 0 40-17.9 40-40s-17.9-40-40-40s-40 17.9-40 40c0 9 3 17.3 8 24l-89.1 71.3c-15.9 12.7-39.5 7.5-48.6-10.7L309 106z\"]\n};\nconst faWeightHanging = {\n  prefix: 'fas',\n  iconName: 'weight-hanging',\n  icon: [512, 512, [], \"f5cd\", \"M224 96a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm122.5 32c3.5-10 5.5-20.8 5.5-32c0-53-43-96-96-96s-96 43-96 96c0 11.2 1.9 22 5.5 32L120 128c-22 0-41.2 15-46.6 36.4l-72 288c-3.6 14.3-.4 29.5 8.7 41.2S33.2 512 48 512l416 0c14.8 0 28.7-6.8 37.8-18.5s12.3-26.8 8.7-41.2l-72-288C433.2 143 414 128 392 128l-45.5 0z\"]\n};\nconst faXmarksLines = {\n  prefix: 'fas',\n  iconName: 'xmarks-lines',\n  icon: [640, 512, [], \"e59a\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416zM7 167c-9.4 9.4-9.4 24.6 0 33.9l55 55L7 311c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55L41 167c-9.4-9.4-24.6-9.4-33.9 0zM265 167c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55zM455 167c-9.4 9.4-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55c-9.4-9.4-24.6-9.4-33.9 0z\"]\n};\nconst faFilePrescription = {\n  prefix: 'fas',\n  iconName: 'file-prescription',\n  icon: [384, 512, [], \"f572\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM104 196l72 0c33.1 0 60 26.9 60 60c0 25.5-15.9 47.2-38.3 55.9l43 40.3 33.8-31c8.1-7.5 20.8-6.9 28.3 1.2s6.9 20.8-1.2 28.3L270 379.7l31.7 29.7c8.1 7.6 8.5 20.2 .9 28.3s-20.2 8.5-28.3 .9l-33.9-31.8-34.9 32c-8.1 7.5-20.8 6.9-28.3-1.2s-6.9-20.8 1.2-28.3l32.6-29.9-64.8-60.8c-.9-.8-1.6-1.7-2.3-2.6l-20 0 0 44c0 11-9 20-20 20s-20-9-20-20l0-64 0-80c0-11 9-20 20-20zm72 80c11 0 20-9 20-20s-9-20-20-20l-52 0 0 40 52 0z\"]\n};\nconst faWeightScale = {\n  prefix: 'fas',\n  iconName: 'weight-scale',\n  icon: [512, 512, [\"weight\"], \"f496\", \"M128 176a128 128 0 1 1 256 0 128 128 0 1 1 -256 0zM391.8 64C359.5 24.9 310.7 0 256 0S152.5 24.9 120.2 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-56.2 0zM296 224c0-10.6-4.1-20.2-10.9-27.4l33.6-78.3c3.5-8.1-.3-17.5-8.4-21s-17.5 .3-21 8.4L255.7 184c-22 .1-39.7 18-39.7 40c0 22.1 17.9 40 40 40s40-17.9 40-40z\"]\n};\nconst faWeight = faWeightScale;\nconst faUserGroup = {\n  prefix: 'fas',\n  iconName: 'user-group',\n  icon: [640, 512, [128101, \"user-friends\"], \"f500\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM609.3 512l-137.8 0c5.4-9.4 8.6-20.3 8.6-32l0-8c0-60.7-27.1-115.2-69.8-151.8c2.4-.1 4.7-.2 7.1-.2l61.4 0C567.8 320 640 392.2 640 481.3c0 17-13.8 30.7-30.7 30.7zM432 256c-31 0-59-12.6-79.3-32.9C372.4 196.5 384 163.6 384 128c0-26.8-6.6-52.1-18.3-74.3C384.3 40.1 407.2 32 432 32c61.9 0 112 50.1 112 112s-50.1 112-112 112z\"]\n};\nconst faUserFriends = faUserGroup;\nconst faArrowUpAZ = {\n  prefix: 'fas',\n  iconName: 'arrow-up-a-z',\n  icon: [576, 512, [\"sort-alpha-up\"], \"f15e\", \"M183.6 42.4C177.5 35.8 169 32 160 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L128 146.3 128 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 320c0 17.7 14.3 32 32 32l50.7 0-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0 73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-128 0c-17.7 0-32 14.3-32 32zM416 32c-12.1 0-23.2 6.8-28.6 17.7l-64 128-16 32c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3 88.4 0 7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-16-32-64-128C439.2 38.8 428.1 32 416 32zM395.8 176L416 135.6 436.2 176l-40.4 0z\"]\n};\nconst faSortAlphaUp = faArrowUpAZ;\nconst faChessKnight = {\n  prefix: 'fas',\n  iconName: 'chess-knight',\n  icon: [448, 512, [9822], \"f441\", \"M96 48L82.7 61.3C70.7 73.3 64 89.5 64 106.5l0 132.4c0 10.7 5.3 20.7 14.2 26.6l10.6 7c14.3 9.6 32.7 10.7 48.1 3l3.2-1.6c2.6-1.3 5-2.8 7.3-4.5l49.4-37c6.6-5 15.7-5 22.3 0c10.2 7.7 9.9 23.1-.7 30.3L90.4 350C73.9 361.3 64 380 64 400l320 0 28.9-159c2.1-11.3 3.1-22.8 3.1-34.3l0-14.7C416 86 330 0 224 0L83.8 0C72.9 0 64 8.9 64 19.8c0 7.5 4.2 14.3 10.9 17.7L96 48zm24 68a20 20 0 1 1 40 0 20 20 0 1 1 -40 0zM22.6 473.4c-4.2 4.2-6.6 10-6.6 16C16 501.9 26.1 512 38.6 512l370.7 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L384 432 64 432 22.6 473.4z\"]\n};\nconst faFaceLaughSquint = {\n  prefix: 'fas',\n  iconName: 'face-laugh-squint',\n  icon: [512, 512, [\"laugh-squint\"], \"f59b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zm36.7-199.4l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 125.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"]\n};\nconst faLaughSquint = faFaceLaughSquint;\nconst faWheelchair = {\n  prefix: 'fas',\n  iconName: 'wheelchair',\n  icon: [512, 512, [], \"f193\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM120.5 247.2c12.4-4.7 18.7-18.5 14-30.9s-18.5-18.7-30.9-14C43.1 225.1 0 283.5 0 352c0 88.4 71.6 160 160 160c61.2 0 114.3-34.3 141.2-84.7c6.2-11.7 1.8-26.2-9.9-32.5s-26.2-1.8-32.5 9.9C240 440 202.8 464 160 464C98.1 464 48 413.9 48 352c0-47.9 30.1-88.8 72.5-104.8zM259.8 176l-1.9-9.7c-4.5-22.3-24-38.3-46.8-38.3c-30.1 0-52.7 27.5-46.8 57l23.1 115.5c6 29.9 32.2 51.4 62.8 51.4l5.1 0c.4 0 .8 0 1.3 0l94.1 0c6.7 0 12.6 4.1 15 10.4L402 459.2c6 16.1 23.8 24.6 40.1 19.1l48-16c16.8-5.6 25.8-23.7 20.2-40.5s-23.7-25.8-40.5-20.2l-18.7 6.2-25.5-68c-11.7-31.2-41.6-51.9-74.9-51.9l-68.5 0-9.6-48 63.4 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-76.2 0z\"]\n};\nconst faCircleArrowUp = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-up',\n  icon: [512, 512, [\"arrow-circle-up\"], \"f0aa\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM385 215c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-71-71L280 392c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-214.1-71 71c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 103c9.4-9.4 24.6-9.4 33.9 0L385 215z\"]\n};\nconst faArrowCircleUp = faCircleArrowUp;\nconst faToggleOn = {\n  prefix: 'fas',\n  iconName: 'toggle-on',\n  icon: [576, 512, [], \"f205\", \"M192 64C86 64 0 150 0 256S86 448 192 448l192 0c106 0 192-86 192-192s-86-192-192-192L192 64zm192 96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faPersonWalking = {\n  prefix: 'fas',\n  iconName: 'person-walking',\n  icon: [320, 512, [128694, \"walking\"], \"f554\", \"M160 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM126.5 199.3c-1 .4-1.9 .8-2.9 1.2l-8 3.5c-16.4 7.3-29 21.2-34.7 38.2l-2.6 7.8c-5.6 16.8-23.7 25.8-40.5 20.2s-25.8-23.7-20.2-40.5l2.6-7.8c11.4-34.1 36.6-61.9 69.4-76.5l8-3.5c20.8-9.2 43.3-14 66.1-14c44.6 0 84.8 26.8 101.9 67.9L281 232.7l21.4 10.7c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L247 287.3c-10.3-5.2-18.4-13.8-22.8-24.5l-9.6-23-19.3 65.5 49.5 54c5.4 5.9 9.2 13 11.2 20.8l23 92.1c4.3 17.1-6.1 34.5-23.3 38.8s-34.5-6.1-38.8-23.3l-22-88.1-70.7-77.1c-14.8-16.1-20.3-38.6-14.7-59.7l16.9-63.5zM68.7 398l25-62.4c2.1 3 4.5 5.8 7 8.6l40.7 44.4-14.5 36.2c-2.4 6-6 11.5-10.6 16.1L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L68.7 398z\"]\n};\nconst faWalking = faPersonWalking;\nconst faL = {\n  prefix: 'fas',\n  iconName: 'l',\n  icon: [320, 512, [108], \"4c\", \"M64 32c17.7 0 32 14.3 32 32l0 352 192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 480c-17.7 0-32-14.3-32-32L32 64c0-17.7 14.3-32 32-32z\"]\n};\nconst faFire = {\n  prefix: 'fas',\n  iconName: 'fire',\n  icon: [448, 512, [128293], \"f06d\", \"M159.3 5.4c7.8-7.3 19.9-7.2 27.7 .1c27.6 25.9 53.5 53.8 77.7 84c11-14.4 23.5-30.1 37-42.9c7.9-7.4 20.1-7.4 28 .1c34.6 33 63.9 76.6 84.5 118c20.3 40.8 33.8 82.5 33.8 111.9C448 404.2 348.2 512 224 512C98.4 512 0 404.1 0 276.5c0-38.4 17.8-85.3 45.4-131.7C73.3 97.7 112.7 48.6 159.3 5.4zM225.7 416c25.3 0 47.7-7 68.8-21c42.1-29.4 53.4-88.2 28.1-134.4c-4.5-9-16-9.6-22.5-2l-25.2 29.3c-6.6 7.6-18.5 7.4-24.7-.5c-16.5-21-46-58.5-62.8-79.8c-6.3-8-18.3-8.1-24.7-.1c-33.8 42.5-50.8 69.3-50.8 99.4C112 375.4 162.6 416 225.7 416z\"]\n};\nconst faBedPulse = {\n  prefix: 'fas',\n  iconName: 'bed-pulse',\n  icon: [640, 512, [\"procedures\"], \"f487\", \"M483.2 9.6L524 64l92 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-104 0c-7.6 0-14.7-3.6-19.2-9.6L468.7 70.3l-47 99.9c-3.7 7.8-11.3 13.1-19.9 13.7s-16.9-3.4-21.7-10.6L339.2 112 216 112c-13.3 0-24-10.7-24-24s10.7-24 24-24l136 0c8 0 15.5 4 20 10.7l24.4 36.6 45.9-97.5C445.9 6.2 453.2 1 461.6 .1s16.6 2.7 21.6 9.5zM320 160l12.7 0 20.7 31.1c11.2 16.8 30.6 26.3 50.7 24.8s37.9-13.7 46.5-32L461.9 160l82.1 0c53 0 96 43 96 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-224 0-32 0L64 448l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 96C0 78.3 14.3 64 32 64s32 14.3 32 32l0 256 224 0 0-160c0-17.7 14.3-32 32-32zm-144 0a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faProcedures = faBedPulse;\nconst faShuttleSpace = {\n  prefix: 'fas',\n  iconName: 'shuttle-space',\n  icon: [640, 512, [\"space-shuttle\"], \"f197\", \"M130 480c40.6 0 80.4-11 115.2-31.9L352 384l-224 0 0 96 2 0zM352 128L245.2 63.9C210.4 43 170.6 32 130 32l-2 0 0 96 224 0zM96 128l0-96L80 32C53.5 32 32 53.5 32 80l0 48 8 0c-22.1 0-40 17.9-40 40l0 16L0 328l0 16c0 22.1 17.9 40 40 40l-8 0 0 48c0 26.5 21.5 48 48 48l16 0 0-96 8 0c26.2 0 49.4-12.6 64-32l288 0c69.3 0 135-22.7 179.2-81.6c6.4-8.5 6.4-20.3 0-28.8C591 182.7 525.3 160 456 160l-288 0c-14.6-19.4-37.8-32-64-32l-8 0zM512 243.6l0 24.9c0 19.6-15.9 35.6-35.6 35.6c-2.5 0-4.4-2-4.4-4.4l0-87.1c0-2.5 2-4.4 4.4-4.4c19.6 0 35.6 15.9 35.6 35.6z\"]\n};\nconst faSpaceShuttle = faShuttleSpace;\nconst faFaceLaugh = {\n  prefix: 'fas',\n  iconName: 'face-laugh',\n  icon: [512, 512, [\"laugh\"], \"f599\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faLaugh = faFaceLaugh;\nconst faFolderOpen = {\n  prefix: 'fas',\n  iconName: 'folder-open',\n  icon: [576, 512, [128194, 128449, 61717], \"f07c\", \"M88.7 223.8L0 375.8 0 96C0 60.7 28.7 32 64 32l117.5 0c17 0 33.3 6.7 45.3 18.7l26.5 26.5c12 12 28.3 18.7 45.3 18.7L416 96c35.3 0 64 28.7 64 64l0 32-336 0c-22.8 0-43.8 12.1-55.3 31.8zm27.6 16.1C122.1 230 132.6 224 144 224l400 0c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-112 192C453.9 474 443.4 480 432 480L32 480c-11.5 0-22-6.1-27.7-16.1s-5.7-22.2 .1-32.1l112-192z\"]\n};\nconst faHeartCirclePlus = {\n  prefix: 'fas',\n  iconName: 'heart-circle-plus',\n  icon: [576, 512, [], \"e500\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208l0 48 48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faCodeFork = {\n  prefix: 'fas',\n  iconName: 'code-fork',\n  icon: [448, 512, [], \"e13b\", \"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3l0 38.7c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-38.7C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 38.7c0 53-43 96-96 96l-48 0 0 70.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-70.7-48 0c-53 0-96-43-96-96l0-38.7C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm208 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM248 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nconst faCity = {\n  prefix: 'fas',\n  iconName: 'city',\n  icon: [640, 512, [127961], \"f64f\", \"M480 48c0-26.5-21.5-48-48-48L336 0c-26.5 0-48 21.5-48 48l0 48-64 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-64 0 0-72c0-13.3-10.7-24-24-24S64 10.7 64 24l0 72L48 96C21.5 96 0 117.5 0 144l0 96L0 464c0 26.5 21.5 48 48 48l256 0 32 0 96 0 160 0c26.5 0 48-21.5 48-48l0-224c0-26.5-21.5-48-48-48l-112 0 0-144zm96 320l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM240 416l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16zM128 400c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32zM560 256c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zM256 176l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM112 160c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zM256 304c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32zM112 320l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16zm304-48l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16zM400 64c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0zm16 112l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16z\"]\n};\nconst faMicrophoneLines = {\n  prefix: 'fas',\n  iconName: 'microphone-lines',\n  icon: [384, 512, [127897, \"microphone-alt\"], \"f3c9\", \"M96 96l0 160c0 53 43 96 96 96s96-43 96-96l-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-32-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0c0-53-43-96-96-96S96 43 96 96zM320 240l0 16c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c85.8-11.7 152-85.3 152-174.4l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24z\"]\n};\nconst faMicrophoneAlt = faMicrophoneLines;\nconst faPepperHot = {\n  prefix: 'fas',\n  iconName: 'pepper-hot',\n  icon: [512, 512, [127798], \"f816\", \"M428.3 3c11.6-6.4 26.2-2.3 32.6 9.3l4.8 8.7c19.3 34.7 19.8 75.7 3.4 110C495.8 159.6 512 197.9 512 240c0 18.5-3.1 36.3-8.9 52.8c-6.1 17.3-28.5 16.3-36.8-.1l-11.7-23.4c-4.1-8.1-12.4-13.3-21.5-13.3L360 256c-13.3 0-24-10.7-24-24l0-80c0-13.3-10.7-24-24-24l-17.1 0c-21.3 0-30-23.9-10.8-32.9C304.7 85.4 327.7 80 352 80c28.3 0 54.8 7.3 77.8 20.2c5.5-18.2 3.7-38.4-6-55.8L419 35.7c-6.4-11.6-2.3-26.2 9.3-32.6zM171.2 345.5L264 160l40 0 0 80c0 26.5 21.5 48 48 48l76.2 0 23.9 47.8C372.3 443.9 244.3 512 103.2 512l-58.8 0C19.9 512 0 492.1 0 467.6c0-20.8 14.5-38.8 34.8-43.3l49.8-11.1c37.6-8.4 69.5-33.2 86.7-67.7z\"]\n};\nconst faUnlock = {\n  prefix: 'fas',\n  iconName: 'unlock',\n  icon: [448, 512, [128275], \"f09c\", \"M144 144c0-44.2 35.8-80 80-80c31.9 0 59.4 18.6 72.3 45.7c7.6 16 26.7 22.8 42.6 15.2s22.8-26.7 15.2-42.6C331 33.7 281.5 0 224 0C144.5 0 80 64.5 80 144l0 48-16 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-240 0 0-48z\"]\n};\nconst faColonSign = {\n  prefix: 'fas',\n  iconName: 'colon-sign',\n  icon: [384, 512, [], \"e140\", \"M255 39.8c4.3-17.1-6.1-34.5-23.3-38.8S197.2 7.1 193 24.2L181.9 68.6C96.1 87.8 32 164.4 32 256c0 58.1 25.8 110.2 66.7 145.4L81 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l13-52.1c9 3.4 18.4 6.2 28 8.2L177 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l10.4-41.4c33.4-4.4 64.1-17.4 89.8-36.7c14.1-10.6 17-30.7 6.4-44.8s-30.7-17-44.8-6.4c-10.2 7.7-21.7 13.9-34 18.3L321 160c9.4-.3 18.5-4.7 24.6-12.8c10.6-14.1 7.8-34.2-6.4-44.8c-1.1-.8-2.2-1.6-3.3-2.4L351 39.8c4.3-17.1-6.1-34.5-23.3-38.8S293.2 7.1 289 24.2L277.2 71.5c-9.3-2.7-18.8-4.6-28.6-5.9L255 39.8zM163.2 143.3L117.3 326.8C103.9 306.5 96 282.2 96 256c0-48.7 27.2-91 67.2-112.7zm8.6 229.5l61.1-244.6c9.9 .7 19.5 2.5 28.7 5.3l-62 248.1c-9.7-1.9-19-4.8-27.8-8.8z\"]\n};\nconst faHeadset = {\n  prefix: 'fas',\n  iconName: 'headset',\n  icon: [512, 512, [], \"f590\", \"M256 48C141.1 48 48 141.1 48 256l0 40c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-40C0 114.6 114.6 0 256 0S512 114.6 512 256l0 144.1c0 48.6-39.4 88-88.1 88L313.6 488c-8.3 14.3-23.8 24-41.6 24l-32 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l32 0c17.8 0 33.3 9.7 41.6 24l110.4 .1c22.1 0 40-17.9 40-40L464 256c0-114.9-93.1-208-208-208zM144 208l16 0c17.7 0 32 14.3 32 32l0 112c0 17.7-14.3 32-32 32l-16 0c-35.3 0-64-28.7-64-64l0-48c0-35.3 28.7-64 64-64zm224 0c35.3 0 64 28.7 64 64l0 48c0 35.3-28.7 64-64 64l-16 0c-17.7 0-32-14.3-32-32l0-112c0-17.7 14.3-32 32-32l16 0z\"]\n};\nconst faStoreSlash = {\n  prefix: 'fas',\n  iconName: 'store-slash',\n  icon: [640, 512, [], \"e071\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-86.8-68 0-17.1 0-131.4c-4 1-8 1.8-12.3 2.3c0 0 0 0-.1 0c-5.3 .7-10.7 1.1-16.2 1.1c-12.4 0-24.3-1.9-35.4-5.3l0 100.3L301.2 210.7c7-4.4 13.3-9.7 18.8-15.7c15.9 17.6 39.1 29 65.2 29c26.2 0 49.3-11.4 65.2-29c16 17.6 39.1 29 65.2 29c4.1 0 8.1-.3 12.1-.8c55.5-7.4 81.8-72.5 52.1-119.4L522.3 13.1C517.2 5 508.1 0 498.4 0L141.6 0c-9.7 0-18.8 5-23.9 13.1l-22.7 36L38.8 5.1zm73.4 218.1c4 .5 8.1 .8 12.1 .8c11 0 21.4-2 31-5.6L48.9 134.5c-6.1 40.6 19.5 82.8 63.3 88.7zM160 384l0-133.4c-11.2 3.5-23.2 5.4-35.6 5.4c-5.5 0-11-.4-16.3-1.1l-.1 0c-4.1-.6-8.1-1.3-12-2.3L96 384l0 64c0 35.3 28.7 64 64 64l320 0c12.9 0 24.8-3.8 34.9-10.3L365.5 384 160 384z\"]\n};\nconst faRoadCircleXmark = {\n  prefix: 'fas',\n  iconName: 'road-circle-xmark',\n  icon: [640, 512, [], \"e566\", \"M213.2 32L288 32l0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 74.8 0c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8l0-42.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32l0 64L86.6 480C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm22.6 144l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L496 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L473.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L496 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L518.6 368z\"]\n};\nconst faUserMinus = {\n  prefix: 'fas',\n  iconName: 'user-minus',\n  icon: [640, 512, [], \"f503\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM472 200l144 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-144 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faMarsStrokeUp = {\n  prefix: 'fas',\n  iconName: 'mars-stroke-up',\n  icon: [320, 512, [9896, \"mars-stroke-v\"], \"f22a\", \"M148.7 4.7c6.2-6.2 16.4-6.2 22.6 0l64 64c4.6 4.6 5.9 11.5 3.5 17.4s-8.3 9.9-14.8 9.9l-40 0 0 24 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 24c0 .6 0 1.2-.1 1.8c77 11.6 136.1 78 136.1 158.2c0 88.4-71.6 160-160 160S0 440.4 0 352c0-80.2 59.1-146.7 136.1-158.2c0-.6-.1-1.2-.1-1.8l0-24-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-24L96 96c-6.5 0-12.3-3.9-14.8-9.9s-1.1-12.9 3.5-17.4l64-64zM256 352A96 96 0 1 0 64 352a96 96 0 1 0 192 0z\"]\n};\nconst faMarsStrokeV = faMarsStrokeUp;\nconst faChampagneGlasses = {\n  prefix: 'fas',\n  iconName: 'champagne-glasses',\n  icon: [640, 512, [129346, \"glass-cheers\"], \"f79f\", \"M155.6 17.3C163 3 179.9-3.6 195 1.9L320 47.5l125-45.6c15.1-5.5 32 1.1 39.4 15.4l78.8 152.9c28.8 55.8 10.3 122.3-38.5 156.6L556.1 413l41-15c16.6-6 35 2.5 41 19.1s-2.5 35-19.1 41l-71.1 25.9L476.8 510c-16.6 6.1-35-2.5-41-19.1s2.5-35 19.1-41l41-15-31.3-86.2c-59.4 5.2-116.2-34-130-95.2L320 188.8l-14.6 64.7c-13.8 61.3-70.6 100.4-130 95.2l-31.3 86.2 41 15c16.6 6 25.2 24.4 19.1 41s-24.4 25.2-41 19.1L92.2 484.1 21.1 458.2c-16.6-6.1-25.2-24.4-19.1-41s24.4-25.2 41-19.1l41 15 31.3-86.2C66.5 292.5 48.1 226 76.9 170.2L155.6 17.3zm44 54.4l-27.2 52.8L261.6 157l13.1-57.9L199.6 71.7zm240.9 0L365.4 99.1 378.5 157l89.2-32.5L440.5 71.7z\"]\n};\nconst faGlassCheers = faChampagneGlasses;\nconst faClipboard = {\n  prefix: 'fas',\n  iconName: 'clipboard',\n  icon: [384, 512, [128203], \"f328\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM112 192l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faHouseCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'house-circle-exclamation',\n  icon: [640, 512, [], \"e50a\", \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0 .7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faFileArrowUp = {\n  prefix: 'fas',\n  iconName: 'file-arrow-up',\n  icon: [384, 512, [\"file-upload\"], \"f574\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM216 408c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-102.1-31 31c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l72-72c9.4-9.4 24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-31-31L216 408z\"]\n};\nconst faFileUpload = faFileArrowUp;\nconst faWifi = {\n  prefix: 'fas',\n  iconName: 'wifi',\n  icon: [640, 512, [\"wifi-3\", \"wifi-strong\"], \"f1eb\", \"M54.2 202.9C123.2 136.7 216.8 96 320 96s196.8 40.7 265.8 106.9c12.8 12.2 33 11.8 45.2-.9s11.8-33-.9-45.2C549.7 79.5 440.4 32 320 32S90.3 79.5 9.8 156.7C-2.9 169-3.3 189.2 8.9 202s32.5 13.2 45.2 .9zM320 256c56.8 0 108.6 21.1 148.2 56c13.3 11.7 33.5 10.4 45.2-2.8s10.4-33.5-2.8-45.2C459.8 219.2 393 192 320 192s-139.8 27.2-190.5 72c-13.3 11.7-14.5 31.9-2.8 45.2s31.9 14.5 45.2 2.8c39.5-34.9 91.3-56 148.2-56zm64 160a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faWifi3 = faWifi;\nconst faWifiStrong = faWifi;\nconst faBath = {\n  prefix: 'fas',\n  iconName: 'bath',\n  icon: [512, 512, [128705, \"bathtub\"], \"f2cd\", \"M96 77.3c0-7.3 5.9-13.3 13.3-13.3c3.5 0 6.9 1.4 9.4 3.9l14.9 14.9C130 91.8 128 101.7 128 112c0 19.9 7.2 38 19.2 52c-5.3 9.2-4 21.1 3.8 29c9.4 9.4 24.6 9.4 33.9 0L289 89c9.4-9.4 9.4-24.6 0-33.9c-7.9-7.9-19.8-9.1-29-3.8C246 39.2 227.9 32 208 32c-10.3 0-20.2 2-29.2 5.5L163.9 22.6C149.4 8.1 129.7 0 109.3 0C66.6 0 32 34.6 32 77.3L32 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 256 96 77.3zM32 352l0 16c0 28.4 12.4 54 32 71.6L64 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-16 256 0 0 16c0 17.7 14.3 32 32 32s32-14.3 32-32l0-40.4c19.6-17.6 32-43.1 32-71.6l0-16L32 352z\"]\n};\nconst faBathtub = faBath;\nconst faUnderline = {\n  prefix: 'fas',\n  iconName: 'underline',\n  icon: [448, 512, [], \"f0cd\", \"M16 64c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 128c0 53 43 96 96 96s96-43 96-96l0-128-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 128c0 88.4-71.6 160-160 160s-160-71.6-160-160L64 96 48 96C30.3 96 16 81.7 16 64zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32z\"]\n};\nconst faUserPen = {\n  prefix: 'fas',\n  iconName: 'user-pen',\n  icon: [640, 512, [\"user-edit\"], \"f4ff\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l293.1 0c-3.1-8.8-3.7-18.4-1.4-27.8l15-60.1c2.8-11.3 8.6-21.5 16.8-29.7l40.3-40.3c-32.1-31-75.7-50.1-123.9-50.1l-91.4 0zm435.5-68.3c-15.6-15.6-40.9-15.6-56.6 0l-29.4 29.4 71 71 29.4-29.4c15.6-15.6 15.6-40.9 0-56.6l-14.4-14.4zM375.9 417c-4.1 4.1-7 9.2-8.4 14.9l-15 60.1c-1.4 5.5 .2 11.2 4.2 15.2s9.7 5.6 15.2 4.2l60.1-15c5.6-1.4 10.8-4.3 14.9-8.4L576.1 358.7l-71-71L375.9 417z\"]\n};\nconst faUserEdit = faUserPen;\nconst faSignature = {\n  prefix: 'fas',\n  iconName: 'signature',\n  icon: [640, 512, [], \"f5b7\", \"M192 128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 7.8c0 27.7-2.4 55.3-7.1 82.5l-84.4 25.3c-40.6 12.2-68.4 49.6-68.4 92l0 71.9c0 40 32.5 72.5 72.5 72.5c26 0 50-13.9 62.9-36.5l13.9-24.3c26.8-47 46.5-97.7 58.4-150.5l94.4-28.3-12.5 37.5c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-83.6 0 18-53.9c3.8-11.3 .9-23.8-7.4-32.4s-20.7-11.8-32.2-8.4L316.4 198.1c2.4-20.7 3.6-41.4 3.6-62.3l0-7.8c0-53-43-96-96-96s-96 43-96 96l0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32zm-9.2 177l49-14.7c-10.4 33.8-24.5 66.4-42.1 97.2l-13.9 24.3c-1.5 2.6-4.3 4.3-7.4 4.3c-4.7 0-8.5-3.8-8.5-8.5l0-71.9c0-14.1 9.3-26.6 22.8-30.7zM24 368c-13.3 0-24 10.7-24 24s10.7 24 24 24l40.3 0c-.2-2.8-.3-5.6-.3-8.5L64 368l-40 0zm592 48c13.3 0 24-10.7 24-24s-10.7-24-24-24l-310.1 0c-6.7 16.3-14.2 32.3-22.3 48L616 416z\"]\n};\nconst faStroopwafel = {\n  prefix: 'fas',\n  iconName: 'stroopwafel',\n  icon: [512, 512, [], \"f551\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM312.6 63.7c-6.2-6.2-16.4-6.2-22.6 0L256 97.6 222.1 63.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l33.9 33.9-45.3 45.3-56.6-56.6c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l56.6 56.6-45.3 45.3L86.3 199.4c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L97.6 256 63.7 289.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l33.9-33.9 45.3 45.3-56.6 56.6c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56.6-56.6 45.3 45.3-33.9 33.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L256 414.4l33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 45.3-45.3 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 45.3-45.3 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L414.4 256l33.9-33.9c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-33.9 33.9-45.3-45.3 56.6-56.6c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-56.6 56.6-45.3-45.3 33.9-33.9c6.2-6.2 6.2-16.4 0-22.6zM142.9 256l45.3-45.3L233.4 256l-45.3 45.3L142.9 256zm67.9 67.9L256 278.6l45.3 45.3L256 369.1l-45.3-45.3zM278.6 256l45.3-45.3L369.1 256l-45.3 45.3L278.6 256zm22.6-67.9L256 233.4l-45.3-45.3L256 142.9l45.3 45.3z\"]\n};\nconst faBold = {\n  prefix: 'fas',\n  iconName: 'bold',\n  icon: [384, 512, [], \"f032\", \"M0 64C0 46.3 14.3 32 32 32l48 0 16 0 128 0c70.7 0 128 57.3 128 128c0 31.3-11.3 60.1-30 82.3c37.1 22.4 62 63.1 62 109.7c0 70.7-57.3 128-128 128L96 480l-16 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-160L48 96 32 96C14.3 96 0 81.7 0 64zM224 224c35.3 0 64-28.7 64-64s-28.7-64-64-64L112 96l0 128 112 0zM112 288l0 128 144 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0-112 0z\"]\n};\nconst faAnchorLock = {\n  prefix: 'fas',\n  iconName: 'anchor-lock',\n  icon: [640, 512, [], \"e4ad\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8 0 15.9-.6 23.6-1.7c-4.8-9-7.6-19.3-7.6-30.3l0-33.3c-5.2 .9-10.5 1.3-16 1.3l-48 0 0-208 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM528 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faBuildingNgo = {\n  prefix: 'fas',\n  iconName: 'building-ngo',\n  icon: [384, 512, [], \"e4d7\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM168 64l48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 64 16 0 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 24c0 13.3-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24l0-88c0-8.8 7.2-16 16-16zM304 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32c0-8.8-7.2-16-16-16zm-48 16c0-26.5 21.5-48 48-48s48 21.5 48 48l0 32c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-32zM61.3 71.1l34.7 52L96 80c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4L64 132.8 64 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4z\"]\n};\nconst faManatSign = {\n  prefix: 'fas',\n  iconName: 'manat-sign',\n  icon: [384, 512, [], \"e1d5\", \"M192 32c-17.7 0-32 14.3-32 32l0 34.7C69.2 113.9 0 192.9 0 288L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-59.6 40.8-109.8 96-124l0 284c0 17.7 14.3 32 32 32s32-14.3 32-32l0-284c55.2 14.2 96 64.3 96 124l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-95.1-69.2-174.1-160-189.3L224 64c0-17.7-14.3-32-32-32z\"]\n};\nconst faNotEqual = {\n  prefix: 'fas',\n  iconName: 'not-equal',\n  icon: [448, 512, [], \"f53e\", \"M369.8 37.4c14.7 9.8 18.7 29.7 8.9 44.4L337.1 144l62.9 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-105.5 0-64 96L400 304c17.7 0 32 14.3 32 32s-14.3 32-32 32l-212.2 0-65.2 97.7c-9.8 14.7-29.7 18.7-44.4 8.9s-18.7-29.7-8.9-44.4L110.9 368 48 368c-17.7 0-32-14.3-32-32s14.3-32 32-32l105.5 0 64-96L48 208c-17.7 0-32-14.3-32-32s14.3-32 32-32l212.2 0 65.2-97.7c9.8-14.7 29.7-18.7 44.4-8.9z\"]\n};\nconst faBorderTopLeft = {\n  prefix: 'fas',\n  iconName: 'border-top-left',\n  icon: [448, 512, [\"border-style\"], \"f853\", \"M0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-336c0-8.8 7.2-16 16-16l336 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32C35.8 32 0 67.8 0 112L0 448zm160 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm-96 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm0 32a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faBorderStyle = faBorderTopLeft;\nconst faMapLocationDot = {\n  prefix: 'fas',\n  iconName: 'map-location-dot',\n  icon: [576, 512, [\"map-marked-alt\"], \"f5a0\", \"M408 120c0 54.6-73.1 151.9-105.2 192c-7.7 9.6-22 9.6-29.6 0C241.1 271.9 168 174.6 168 120C168 53.7 221.7 0 288 0s120 53.7 120 120zm8 80.4c3.5-6.9 6.7-13.8 9.6-20.6c.5-1.2 1-2.5 1.5-3.7l116-46.4C558.9 123.4 576 135 576 152l0 270.8c0 9.8-6 18.6-15.1 22.3L416 503l0-302.6zM137.6 138.3c2.4 14.1 7.2 28.3 12.8 41.5c2.9 6.8 6.1 13.7 9.6 20.6l0 251.4L32.9 502.7C17.1 509 0 497.4 0 480.4L0 209.6c0-9.8 6-18.6 15.1-22.3l122.6-49zM327.8 332c13.9-17.4 35.7-45.7 56.2-77l0 249.3L192 449.4 192 255c20.5 31.3 42.3 59.6 56.2 77c20.5 25.6 59.1 25.6 79.6 0zM288 152a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nconst faMapMarkedAlt = faMapLocationDot;\nconst faJedi = {\n  prefix: 'fas',\n  iconName: 'jedi',\n  icon: [576, 512, [], \"f669\", \"M246 315.7l-21.2-31.9c-2.1-3.2-1.7-7.4 1-10.1s6.9-3.1 10.1-1l29.5 19.7c2.1 1.4 4.9 0 5-2.6L279.7 8c.1-4.5 3.8-8 8.3-8s8.1 3.5 8.3 8l9.4 281.9c.1 2.5 2.9 3.9 5 2.6l29.5-19.7c3.2-2.1 7.4-1.7 10.1 1s3.1 6.9 1 10.1L330 315.7c-1.3 1.9-.2 4.5 2 4.9l37.6 7.5c3.7 .7 6.4 4 6.4 7.8s-2.7 7.1-6.4 7.8L332 351.4c-2.2 .4-3.3 3-2 4.9l21.2 31.9c2.1 3.2 1.7 7.4-1 10.1s-6.9 3.1-10.1 1l-26.3-17.6c-2.2-1.4-5.1 .2-5 2.8l2.1 61.5C370.6 435.2 416 382.9 416 320c0-37-15.7-70.4-40.8-93.7c-7-6.5-6.5-18.6 1-24.4C410.1 175.5 432 134.3 432 88c0-16.8-2.9-33-8.2-48c-4.6-13 10.2-30 21.4-22c53.5 38 92.7 94.8 107.8 160.7c.5 2.1-.2 4.3-1.7 5.9l-28.4 28.4c-4 4-1.2 10.9 4.5 10.9l26 0c3.4 0 6.2 2.6 6.3 6c.1 3.3 .2 6.6 .2 10c0 17.5-1.7 34.7-4.8 51.3c-.2 1.2-.9 2.4-1.7 3.3l-46.5 46.5c-4 4-1.2 10.9 4.5 10.9l14.6 0c4.6 0 7.7 4.8 5.7 9C487.2 450.5 394.8 512 288 512S88.8 450.5 44.3 361c-2.1-4.2 1-9 5.7-9l14.6 0c5.7 0 8.6-6.9 4.5-10.9L22.6 294.6c-.9-.9-1.5-2-1.7-3.3C17.7 274.7 16 257.5 16 240c0-3.3 .1-6.7 .2-10c.1-3.4 2.9-6 6.3-6l26 0c5.7 0 8.6-6.9 4.5-10.9L24.6 184.6c-1.5-1.5-2.2-3.8-1.7-5.9C38.1 112.8 77.3 56 130.8 18c11.3-8 26 8.9 21.4 22c-5.3 15-8.2 31.2-8.2 48c0 46.3 21.9 87.5 55.8 113.9c7.5 5.8 8 17.9 1 24.4C175.7 249.6 160 283 160 320c0 62.9 45.4 115.2 105.1 126l2.1-61.5c.1-2.6-2.8-4.2-5-2.8l-26.3 17.6c-3.2 2.1-7.4 1.7-10.1-1s-3.1-6.9-1-10.1L246 356.3c1.3-1.9 .2-4.5-2-4.9l-37.6-7.5c-3.7-.7-6.4-4-6.4-7.8s2.7-7.1 6.4-7.8l37.6-7.5c2.2-.4 3.3-3 2-4.9z\"]\n};\nconst faSquarePollVertical = {\n  prefix: 'fas',\n  iconName: 'square-poll-vertical',\n  icon: [448, 512, [\"poll\"], \"f681\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 192c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zm64-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 192c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-192zM320 288c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32z\"]\n};\nconst faPoll = faSquarePollVertical;\nconst faMugHot = {\n  prefix: 'fas',\n  iconName: 'mug-hot',\n  icon: [512, 512, [9749], \"f7b6\", \"M88 0C74.7 0 64 10.7 64 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C120.5 112.3 128 119.9 128 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C119.5 47.7 112 40.1 112 24c0-13.3-10.7-24-24-24zM32 192c-17.7 0-32 14.3-32 32L0 416c0 53 43 96 96 96l192 0c53 0 96-43 96-96l16 0c61.9 0 112-50.1 112-112s-50.1-112-112-112l-48 0L32 192zm352 64l16 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-16 0 0-96zM224 24c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C232.5 112.3 240 119.9 240 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C231.5 47.7 224 40.1 224 24z\"]\n};\nconst faCarBattery = {\n  prefix: 'fas',\n  iconName: 'car-battery',\n  icon: [512, 512, [\"battery-car\"], \"f5df\", \"M80 96c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l96 0c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l16 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 160c0-35.3 28.7-64 64-64l16 0zm304 96c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 32-32 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0 0 32c0 8.8 7.2 16 16 16s16-7.2 16-16l0-32 32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0-32zM80 240c0 8.8 7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faBatteryCar = faCarBattery;\nconst faGift = {\n  prefix: 'fas',\n  iconName: 'gift',\n  icon: [512, 512, [127873], \"f06b\", \"M190.5 68.8L225.3 128l-1.3 0-72 0c-22.1 0-40-17.9-40-40s17.9-40 40-40l2.2 0c14.9 0 28.8 7.9 36.3 20.8zM64 88c0 14.4 3.5 28 9.6 40L32 128c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l448 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-41.6 0c6.1-12 9.6-25.6 9.6-40c0-48.6-39.4-88-88-88l-2.2 0c-31.9 0-61.5 16.9-77.7 44.4L256 85.5l-24.1-41C215.7 16.9 186.1 0 154.2 0L152 0C103.4 0 64 39.4 64 88zm336 0c0 22.1-17.9 40-40 40l-72 0-1.3 0 34.8-59.2C329.1 55.9 342.9 48 357.8 48l2.2 0c22.1 0 40 17.9 40 40zM32 288l0 176c0 26.5 21.5 48 48 48l144 0 0-224L32 288zM288 512l144 0c26.5 0 48-21.5 48-48l0-176-192 0 0 224z\"]\n};\nconst faDiceTwo = {\n  prefix: 'fas',\n  iconName: 'dice-two',\n  icon: [448, 512, [9857], \"f528\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM352 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faChessQueen = {\n  prefix: 'fas',\n  iconName: 'chess-queen',\n  icon: [512, 512, [9819], \"f445\", \"M256 0a56 56 0 1 1 0 112A56 56 0 1 1 256 0zM134.1 143.8c3.3-13 15-23.8 30.2-23.8c12.3 0 22.6 7.2 27.7 17c12 23.2 36.2 39 64 39s52-15.8 64-39c5.1-9.8 15.4-17 27.7-17c15.3 0 27 10.8 30.2 23.8c7 27.8 32.2 48.3 62.1 48.3c10.8 0 21-2.7 29.8-7.4c8.4-4.4 18.9-4.5 27.6 .9c13 8 17.1 25 9.2 38L399.7 400 384 400l-40.4 0-175.1 0L128 400l-15.7 0L5.4 223.6c-7.9-13-3.8-30 9.2-38c8.7-5.3 19.2-5.3 27.6-.9c8.9 4.7 19 7.4 29.8 7.4c29.9 0 55.1-20.5 62.1-48.3zM256 224s0 0 0 0s0 0 0 0s0 0 0 0zM112 432l288 0 41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6L86.6 512C74.1 512 64 501.9 64 489.4c0-6 2.4-11.8 6.6-16L112 432z\"]\n};\nconst faGlasses = {\n  prefix: 'fas',\n  iconName: 'glasses',\n  icon: [576, 512, [], \"f530\", \"M118.6 80c-11.5 0-21.4 7.9-24 19.1L57 260.3c20.5-6.2 48.3-12.3 78.7-12.3c32.3 0 61.8 6.9 82.8 13.5c10.6 3.3 19.3 6.7 25.4 9.2c3.1 1.3 5.5 2.4 7.3 3.2c.9 .4 1.6 .7 2.1 1l.6 .3 .2 .1c0 0 .1 0 .1 0c0 0 0 0 0 0s0 0 0 0L247.9 288s0 0 0 0l6.3-12.7c5.8 2.9 10.4 7.3 13.5 12.7l40.6 0c3.1-5.3 7.7-9.8 13.5-12.7l6.3 12.7s0 0 0 0c-6.3-12.7-6.3-12.7-6.3-12.7s0 0 0 0s0 0 0 0c0 0 .1 0 .1 0l.2-.1 .6-.3c.5-.2 1.2-.6 2.1-1c1.8-.8 4.2-1.9 7.3-3.2c6.1-2.6 14.8-5.9 25.4-9.2c21-6.6 50.4-13.5 82.8-13.5c30.4 0 58.2 6.1 78.7 12.3L481.4 99.1c-2.6-11.2-12.6-19.1-24-19.1c-3.1 0-6.2 .6-9.2 1.8L416.9 94.3c-12.3 4.9-26.3-1.1-31.2-13.4s1.1-26.3 13.4-31.2l31.3-12.5c8.6-3.4 17.7-5.2 27-5.2c33.8 0 63.1 23.3 70.8 56.2l43.9 188c1.7 7.3 2.9 14.7 3.5 22.1c.3 1.9 .5 3.8 .5 5.7l0 6.7 0 41.3 0 16c0 61.9-50.1 112-112 112l-44.3 0c-59.4 0-108.5-46.4-111.8-105.8L306.6 352l-37.2 0-1.2 22.2C264.9 433.6 215.8 480 156.3 480L112 480C50.1 480 0 429.9 0 368l0-16 0-41.3L0 304c0-1.9 .2-3.8 .5-5.7c.6-7.4 1.8-14.8 3.5-22.1l43.9-188C55.5 55.3 84.8 32 118.6 32c9.2 0 18.4 1.8 27 5.2l31.3 12.5c12.3 4.9 18.3 18.9 13.4 31.2s-18.9 18.3-31.2 13.4L127.8 81.8c-2.9-1.2-6-1.8-9.2-1.8zM64 325.4L64 368c0 26.5 21.5 48 48 48l44.3 0c25.5 0 46.5-19.9 47.9-45.3l2.5-45.6c-2.3-.8-4.9-1.7-7.5-2.5c-17.2-5.4-39.9-10.5-63.6-10.5c-23.7 0-46.2 5.1-63.2 10.5c-3.1 1-5.9 1.9-8.5 2.9zM512 368l0-42.6c-2.6-.9-5.5-1.9-8.5-2.9c-17-5.4-39.5-10.5-63.2-10.5c-23.7 0-46.4 5.1-63.6 10.5c-2.7 .8-5.2 1.7-7.5 2.5l2.5 45.6c1.4 25.4 22.5 45.3 47.9 45.3l44.3 0c26.5 0 48-21.5 48-48z\"]\n};\nconst faChessBoard = {\n  prefix: 'fas',\n  iconName: 'chess-board',\n  icon: [448, 512, [], \"f43c\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm64 64l0 64 64 0 0-64 64 0 0 64 64 0 0-64 64 0 0 64-64 0 0 64 64 0 0 64-64 0 0 64 64 0 0 64-64 0 0-64-64 0 0 64-64 0 0-64-64 0 0 64-64 0 0-64 64 0 0-64-64 0 0-64 64 0 0-64-64 0 0-64 64 0zm64 128l64 0 0-64-64 0 0 64zm0 64l0-64-64 0 0 64 64 0zm64 0l-64 0 0 64 64 0 0-64zm0 0l64 0 0-64-64 0 0 64z\"]\n};\nconst faBuildingCircleCheck = {\n  prefix: 'fas',\n  iconName: 'building-circle-check',\n  icon: [640, 512, [], \"e4d2\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faPersonChalkboard = {\n  prefix: 'fas',\n  iconName: 'person-chalkboard',\n  icon: [640, 512, [], \"e53d\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-288 56 0 64 0 16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-64 192 0 0 192-192 0 0-32-64 0 0 48c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-224c0-26.5-21.5-48-48-48L368 0c-26.5 0-48 21.5-48 48l0 80-76.9 0-65.9 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 480c0 17.7 14.3 32 32 32s32-14.3 32-32z\"]\n};\nconst faMarsStrokeRight = {\n  prefix: 'fas',\n  iconName: 'mars-stroke-right',\n  icon: [640, 512, [9897, \"mars-stroke-h\"], \"f22b\", \"M208 368a112 112 0 1 0 0-224 112 112 0 1 0 0 224zm174.4-88C370.7 365.8 297.1 432 208 432c-97.2 0-176-78.8-176-176s78.8-176 176-176c89.1 0 162.7 66.2 174.4 152l33.6 0 0-56c0-13.3 10.7-24 24-24s24 10.7 24 24l0 56 32 0 0-56c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2l0-56-32 0 0 56c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-56-33.6 0z\"]\n};\nconst faMarsStrokeH = faMarsStrokeRight;\nconst faHandBackFist = {\n  prefix: 'fas',\n  iconName: 'hand-back-fist',\n  icon: [448, 512, [\"hand-rock\"], \"f255\", \"M144 0C117.5 0 96 21.5 96 48l0 48 0 28.5L96 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-26.7-9 7.5C40.4 169 32 187 32 206L32 244c0 38 16.9 74 46.1 98.3L128 384l0 96c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-105.3c46.9-19 80-65 80-118.7l0-80 0-16 0-16c0-26.5-21.5-48-48-48c-12.4 0-23.6 4.7-32.1 12.3C350 83.5 329.3 64 304 64c-12.4 0-23.6 4.7-32.1 12.3C270 51.5 249.3 32 224 32c-12.4 0-23.6 4.7-32.1 12.3C190 19.5 169.3 0 144 0z\"]\n};\nconst faHandRock = faHandBackFist;\nconst faSquareCaretUp = {\n  prefix: 'fas',\n  iconName: 'square-caret-up',\n  icon: [448, 512, [\"caret-square-up\"], \"f151\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 160c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9s-12.5 14.4-22 14.4l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z\"]\n};\nconst faCaretSquareUp = faSquareCaretUp;\nconst faCloudShowersWater = {\n  prefix: 'fas',\n  iconName: 'cloud-showers-water',\n  icon: [576, 512, [], \"e4e4\", \"M224 0c38.6 0 71.9 22.8 87.2 55.7C325.7 41.1 345.8 32 368 32c38.7 0 71 27.5 78.4 64l1.6 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-320 0c-35.3 0-64-28.7-64-64s28.7-64 64-64c0-53 43-96 96-96zM140.6 292.3l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2s15.1 21.6 8.2 32.9zm327.8-32.9c11.4 6.8 15 21.6 8.2 32.9l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2zM252.6 292.3l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2s15.1 21.6 8.2 32.9zm103.8-32.9c11.4 6.8 15 21.6 8.2 32.9l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faChartBar = {\n  prefix: 'fas',\n  iconName: 'chart-bar',\n  icon: [512, 512, [\"bar-chart\"], \"f080\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 64l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 96l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faBarChart = faChartBar;\nconst faHandsBubbles = {\n  prefix: 'fas',\n  iconName: 'hands-bubbles',\n  icon: [576, 512, [\"hands-wash\"], \"e05e\", \"M416 64a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM160 464a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM32 160l.1 72.6c.1 52.2 24 101 64 133.1c-.1-1.9-.1-3.8-.1-5.7l0-8c0-71.8 37-138.6 97.9-176.7l60.2-37.6c8.6-5.4 17.9-8.4 27.3-9.4l45.9-79.5c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8l-78 135.1c-3.3 5.7-10.7 7.7-16.4 4.4s-7.7-10.7-4.4-16.4l62-107.4c6.6-11.5 2.7-26.2-8.8-32.8S214 5 207.4 16.5l-68 117.8s0 0 0 0s0 0 0 0l-43.3 75L96 160c0-17.7-14.4-32-32-32s-32 14.4-32 32zM332.1 88.5L307.5 131c13.9 4.5 26.4 13.7 34.7 27c.9 1.5 1.8 2.9 2.5 4.4l28.9-50c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zm46.4 63.7l-26.8 46.4c-.6 6-2.1 11.8-4.3 17.4l4.7 0 13.3 0s0 0 0 0l31.8 0 23-39.8c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zM315.1 175c-9.4-15-29.1-19.5-44.1-10.2l-60.2 37.6C159.3 234.7 128 291.2 128 352l0 8c0 8.9 .8 17.6 2.2 26.1c35.4 8.2 61.8 40 61.8 77.9c0 6.3-.7 12.5-2.1 18.4C215.1 501 246.3 512 280 512l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-92 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l124 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-124 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l156 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-156 0c-6.6 0-12-5.4-12-12s5.4-12 12-12l124 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-136 0s0 0 0 0s0 0 0 0l-93.2 0L305 219.1c15-9.4 19.5-29.1 10.2-44.1z\"]\n};\nconst faHandsWash = faHandsBubbles;\nconst faLessThanEqual = {\n  prefix: 'fas',\n  iconName: 'less-than-equal',\n  icon: [448, 512, [], \"f537\", \"M395.9 93.7c16.4-6.6 24.4-25.2 17.8-41.6s-25.2-24.4-41.6-17.8l-320 128C40 167.1 32 178.9 32 192s8 24.9 20.1 29.7l320 128c16.4 6.6 35-1.4 41.6-17.8s-1.4-35-17.8-41.6L150.2 192 395.9 93.7zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416z\"]\n};\nconst faTrain = {\n  prefix: 'fas',\n  iconName: 'train',\n  icon: [448, 512, [128646], \"f238\", \"M96 0C43 0 0 43 0 96L0 352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512l39.7 0c8.5 0 16.6-3.4 22.6-9.4L160 448l128 0 54.6 54.6c6 6 14.1 9.4 22.6 9.4l39.7 0c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9l0-256c0-53-43-96-96-96L96 0zM64 96c0-17.7 14.3-32 32-32l256 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32L96 224c-17.7 0-32-14.3-32-32l0-96zM224 288a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faEyeLowVision = {\n  prefix: 'fas',\n  iconName: 'eye-low-vision',\n  icon: [640, 512, [\"low-vision\"], \"f2a8\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223 149.5c48.6-44.3 123-50.8 179.3-11.7c60.8 42.4 78.9 123.2 44.2 186.9L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3L223 149.5zm223.1 298L83.1 161.5c-11 14.4-20.5 28.7-28.4 42.2l339 265.7c18.7-5.5 36.2-13 52.6-21.8zM34.5 268.3c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c3.1 0 6.1-.1 9.2-.2L33.1 247.8c-1.8 6.8-1.3 14 1.4 20.5z\"]\n};\nconst faLowVision = faEyeLowVision;\nconst faCrow = {\n  prefix: 'fas',\n  iconName: 'crow',\n  icon: [640, 512, [], \"f520\", \"M456 0c-48.6 0-88 39.4-88 88l0 29.2L12.5 390.6c-14 10.8-16.6 30.9-5.9 44.9s30.9 16.6 44.9 5.9L126.1 384l133.1 0 46.6 113.1c5 12.3 19.1 18.1 31.3 13.1s18.1-19.1 13.1-31.3L311.1 384l40.9 0c1.1 0 2.1 0 3.2 0l46.6 113.2c5 12.3 19.1 18.1 31.3 13.1s18.1-19.1 13.1-31.3l-42-102C484.9 354.1 544 280 544 192l0-64 0-8 80.5-20.1c8.6-2.1 13.8-10.8 11.6-19.4C629 52 603.4 32 574 32l-50.1 0C507.7 12.5 483.3 0 456 0zm0 64a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faSailboat = {\n  prefix: 'fas',\n  iconName: 'sailboat',\n  icon: [576, 512, [], \"e445\", \"M256 16c0-7 4.5-13.2 11.2-15.3s13.9 .4 17.9 6.1l224 320c3.4 4.9 3.8 11.3 1.1 16.6s-8.2 8.6-14.2 8.6l-224 0c-8.8 0-16-7.2-16-16l0-320zM212.1 96.5c7 1.9 11.9 8.2 11.9 15.5l0 224c0 8.8-7.2 16-16 16L80 352c-5.7 0-11-3-13.8-8s-2.9-11-.1-16l128-224c3.6-6.3 11-9.4 18-7.5zM5.7 404.3C2.8 394.1 10.5 384 21.1 384l533.8 0c10.6 0 18.3 10.1 15.4 20.3l-4 14.3C550.7 473.9 500.4 512 443 512L133 512C75.6 512 25.3 473.9 9.7 418.7l-4-14.3z\"]\n};\nconst faWindowRestore = {\n  prefix: 'fas',\n  iconName: 'window-restore',\n  icon: [512, 512, [], \"f2d2\", \"M432 64L208 64c-8.8 0-16 7.2-16 16l0 16-64 0 0-16c0-44.2 35.8-80 80-80L432 0c44.2 0 80 35.8 80 80l0 224c0 44.2-35.8 80-80 80l-16 0 0-64 16 0c8.8 0 16-7.2 16-16l0-224c0-8.8-7.2-16-16-16zM0 192c0-35.3 28.7-64 64-64l256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192zm64 32c0 17.7 14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 192c-17.7 0-32 14.3-32 32z\"]\n};\nconst faSquarePlus = {\n  prefix: 'fas',\n  iconName: 'square-plus',\n  icon: [448, 512, [61846, \"plus-square\"], \"f0fe\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM200 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"]\n};\nconst faPlusSquare = faSquarePlus;\nconst faToriiGate = {\n  prefix: 'fas',\n  iconName: 'torii-gate',\n  icon: [512, 512, [9961], \"f6a1\", \"M0 80c0 26.5 21.5 48 48 48l16 0 0 64 64 0 0-64 96 0 0 64 64 0 0-64 96 0 0 64 64 0 0-64 16 0c26.5 0 48-21.5 48-48l0-66.6C512 6 506 0 498.6 0c-1.7 0-3.4 .3-5 1l-49 19.6C425.7 28.1 405.5 32 385.2 32L126.8 32c-20.4 0-40.5-3.9-59.4-11.4L18.4 1c-1.6-.6-3.3-1-5-1C6 0 0 6 0 13.4L0 80zM64 288l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 256 0 0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0z\"]\n};\nconst faFrog = {\n  prefix: 'fas',\n  iconName: 'frog',\n  icon: [576, 512, [], \"f52e\", \"M368 32c41.7 0 75.9 31.8 79.7 72.5l85.6 26.3c25.4 7.8 42.8 31.3 42.8 57.9c0 21.8-11.7 41.9-30.7 52.7L400.8 323.5 493.3 416l50.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-8.5 0-16.6-3.4-22.6-9.4L346.9 360.2c11.7-36 3.2-77.1-25.4-105.7c-40.6-40.6-106.3-40.6-146.9-.1L101 324.4c-6.4 6.1-6.7 16.2-.6 22.6s16.2 6.6 22.6 .6l73.8-70.2 .1-.1 .1-.1c3.5-3.5 7.3-6.6 11.3-9.2c27.9-18.5 65.9-15.4 90.5 9.2c24.7 24.7 27.7 62.9 9 90.9c-2.6 3.8-5.6 7.5-9 10.9L261.8 416l90.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 480c-35.3 0-64-28.7-64-64C0 249.6 127 112.9 289.3 97.5C296.2 60.2 328.8 32 368 32zm0 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faBucket = {\n  prefix: 'fas',\n  iconName: 'bucket',\n  icon: [448, 512, [], \"e4cf\", \"M96 152l0 8-48 0 0-8C48 68.1 116.1 0 200 0l48 0c83.9 0 152 68.1 152 152l0 8-48 0 0-8c0-57.4-46.6-104-104-104l-48 0C142.6 48 96 94.6 96 152zM0 224c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-5.1 0L388.5 469c-2.6 24.4-23.2 43-47.7 43l-233.6 0c-24.6 0-45.2-18.5-47.7-43L37.1 256 32 256c-17.7 0-32-14.3-32-32z\"]\n};\nconst faImage = {\n  prefix: 'fas',\n  iconName: 'image',\n  icon: [512, 512, [], \"f03e\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM323.8 202.5c-4.5-6.6-11.9-10.5-19.8-10.5s-15.4 3.9-19.8 10.5l-87 127.6L170.7 297c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6l96 0 32 0 208 0c8.9 0 17.1-4.9 21.2-12.8s3.6-17.4-1.4-24.7l-120-176zM112 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faMicrophone = {\n  prefix: 'fas',\n  iconName: 'microphone',\n  icon: [384, 512, [], \"f130\", \"M192 0C139 0 96 43 96 96l0 160c0 53 43 96 96 96s96-43 96-96l0-160c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 89.1 66.2 162.7 152 174.4l0 33.6-48 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l72 0 72 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0 0-33.6c85.8-11.7 152-85.3 152-174.4l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40z\"]\n};\nconst faCow = {\n  prefix: 'fas',\n  iconName: 'cow',\n  icon: [640, 512, [128004], \"f6c8\", \"M96 224l0 32 0 160c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-88.2c9.9 6.6 20.6 12 32 16.1l0 24.2c0 8.8 7.2 16 16 16s16-7.2 16-16l0-16.9c5.3 .6 10.6 .9 16 .9s10.7-.3 16-.9l0 16.9c0 8.8 7.2 16 16 16s16-7.2 16-16l0-24.2c11.4-4 22.1-9.4 32-16.1l0 88.2c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-160 32 32 0 49.5c0 9.5 2.8 18.7 8.1 26.6L530 427c8.8 13.1 23.5 21 39.3 21c22.5 0 41.9-15.9 46.3-38l20.3-101.6c2.6-13-.3-26.5-8-37.3l-3.9-5.5 0-81.6c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 14.4-52.9-74.1C496 86.5 452.4 64 405.9 64L272 64l-16 0-64 0-48 0C77.7 64 24 117.7 24 184l0 54C9.4 249.8 0 267.8 0 288l0 17.6c0 8 6.4 14.4 14.4 14.4C46.2 320 72 294.2 72 262.4l0-6.4 0-32 0-40c0-24.3 12.1-45.8 30.5-58.9C98.3 135.9 96 147.7 96 160l0 64zM560 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM166.6 166.6c-4.2-4.2-6.6-10-6.6-16c0-12.5 10.1-22.6 22.6-22.6l178.7 0c12.5 0 22.6 10.1 22.6 22.6c0 6-2.4 11.8-6.6 16l-23.4 23.4C332.2 211.8 302.7 224 272 224s-60.2-12.2-81.9-33.9l-23.4-23.4z\"]\n};\nconst faCaretUp = {\n  prefix: 'fas',\n  iconName: 'caret-up',\n  icon: [320, 512, [], \"f0d8\", \"M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\"]\n};\nconst faScrewdriver = {\n  prefix: 'fas',\n  iconName: 'screwdriver',\n  icon: [512, 512, [129691], \"f54a\", \"M465 7c-8.5-8.5-22-9.4-31.6-2.1l-104 80c-5.9 4.5-9.4 11.6-9.4 19l0 54.1-85.6 85.6c6.7 4.2 13 9.3 18.8 15.1s10.9 12.2 15.1 18.8L353.9 192l54.1 0c7.5 0 14.5-3.5 19-9.4l80-104c7.4-9.6 6.5-23.1-2.1-31.6L465 7zM121.4 281.4l-112 112c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l112-112c30.2-30.2 30.2-79.1 0-109.3s-79.1-30.2-109.3 0z\"]\n};\nconst faFolderClosed = {\n  prefix: 'fas',\n  iconName: 'folder-closed',\n  icon: [512, 512, [], \"e185\", \"M448 480L64 480c-35.3 0-64-28.7-64-64L0 192l512 0 0 224c0 35.3-28.7 64-64 64zm64-320L0 160 0 96C0 60.7 28.7 32 64 32l128 0c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8l160 0c35.3 0 64 28.7 64 64z\"]\n};\nconst faHouseTsunami = {\n  prefix: 'fas',\n  iconName: 'house-tsunami',\n  icon: [576, 512, [], \"e515\", \"M80.8 136.5C104.9 93.8 152.6 64 209 64c16.9 0 33.1 2.7 48.2 7.7c16.8 5.5 34.9-3.6 40.4-20.4s-3.6-34.9-20.4-40.4C255.8 3.8 232.8 0 209 0C95.2 0 0 88 0 200c0 91.6 53.5 172.1 142.2 194.1c13.4 3.8 27.5 5.9 42.2 5.9c.7 0 1.4 0 2.1-.1c1.8 0 3.7 .1 5.5 .1c0 0 0 0 0 0c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 325.2 410.9 336 384 336c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0c-22.4 15.5-49.9 26.1-77.4 26.1c0 0-.1 0-.1 0c-12.4 0-24-1.5-34.9-4.3C121.6 320.2 96 287 96 248c0-48.5 39.5-88 88.4-88c13.5 0 26.1 3 37.5 8.3c16 7.5 35.1 .6 42.5-15.5s.6-35.1-15.5-42.5C229.3 101.1 207.4 96 184.4 96c-40 0-76.4 15.4-103.6 40.5zm252-18.1c-8.1 6-12.8 15.5-12.8 25.6l0 121c1.6 1 3.3 2 4.8 3.1c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c5.8 1.4 11.2 3.4 16.2 6.2c.7-2.7 1.1-5.5 1.1-8.4l-.4-144c0-10-4.7-19.4-12.7-25.5l-95.5-72c-11.4-8.6-27.1-8.6-38.5 0l-96 72zM384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448z\"]\n};\nconst faSquareNfi = {\n  prefix: 'fas',\n  iconName: 'square-nfi',\n  icon: [448, 512, [], \"e576\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm75.7 64.6C68.8 162.5 64 168.8 64 176l0 160c0 8.8 7.2 16 16 16s16-7.2 16-16l0-102.2 66.3 110.5c3.7 6.2 11.1 9.1 18 7.2s11.7-8.2 11.7-15.4l0-160c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 102.2L93.7 167.8c-3.7-6.2-11.1-9.1-18-7.2zM224 176l0 64 0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-32 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16zm160 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 160c0 8.8 7.2 16 16 16s16-7.2 16-16l0-160z\"]\n};\nconst faArrowUpFromGroundWater = {\n  prefix: 'fas',\n  iconName: 'arrow-up-from-ground-water',\n  icon: [576, 512, [], \"e4b5\", \"M288 352c17.7 0 32-14.3 32-32l0-210.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3 256 320c0 17.7 14.3 32 32 32zm-18.5 69.9C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0zM192 192L48 192c-26.5 0-48 21.5-48 48L0 425c5.3-3.1 11.2-5.4 17.5-6.9c13.1-3.1 26.7-9.8 37.3-18.6c22.2-18.7 54.3-20.1 78.1-3.4c18 12.4 40.1 20.3 59.1 20.3L192 192zm384 48c0-26.5-21.5-48-48-48l-144 0 0 224.5s0 0 0 0c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.4 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c6.3 1.5 12.1 3.8 17.5 6.9l0-185z\"]\n};\nconst faMartiniGlass = {\n  prefix: 'fas',\n  iconName: 'martini-glass',\n  icon: [512, 512, [127864, \"glass-martini-alt\"], \"f57b\", \"M32 0C19.1 0 7.4 7.8 2.4 19.8s-2.2 25.7 6.9 34.9L224 269.3 224 448l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-178.7L502.6 54.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 0 480 0L32 0zM173.3 128l-64-64 293.5 0-64 64-165.5 0z\"]\n};\nconst faGlassMartiniAlt = faMartiniGlass;\nconst faSquareBinary = {\n  prefix: 'fas',\n  iconName: 'square-binary',\n  icon: [448, 512, [], \"e69b\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm144 4c-24.3 0-44 19.7-44 44l0 48c0 24.3 19.7 44 44 44l32 0c24.3 0 44-19.7 44-44l0-48c0-24.3-19.7-44-44-44l-32 0zm-4 44c0-2.2 1.8-4 4-4l32 0c2.2 0 4 1.8 4 4l0 48c0 2.2-1.8 4-4 4l-32 0c-2.2 0-4-1.8-4-4l0-48zm140-44c-11 0-20 9-20 20c0 9.7 6.9 17.7 16 19.6l0 76.4c0 11 9 20 20 20s20-9 20-20l0-96c0-11-9-20-20-20l-16 0zM132 296c0 9.7 6.9 17.7 16 19.6l0 76.4c0 11 9 20 20 20s20-9 20-20l0-96c0-11-9-20-20-20l-16 0c-11 0-20 9-20 20zm96 24l0 48c0 24.3 19.7 44 44 44l32 0c24.3 0 44-19.7 44-44l0-48c0-24.3-19.7-44-44-44l-32 0c-24.3 0-44 19.7-44 44zm44-4l32 0c2.2 0 4 1.8 4 4l0 48c0 2.2-1.8 4-4 4l-32 0c-2.2 0-4-1.8-4-4l0-48c0-2.2 1.8-4 4-4z\"]\n};\nconst faRotateLeft = {\n  prefix: 'fas',\n  iconName: 'rotate-left',\n  icon: [512, 512, [\"rotate-back\", \"rotate-backward\", \"undo-alt\"], \"f2ea\", \"M48.5 224L40 224c-13.3 0-24-10.7-24-24L16 72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2L98.6 96.6c87.6-86.5 228.7-86.2 315.8 1c87.5 87.5 87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3c-62.2-62.2-162.7-62.5-225.3-1L185 183c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8L48.5 224z\"]\n};\nconst faRotateBack = faRotateLeft;\nconst faRotateBackward = faRotateLeft;\nconst faUndoAlt = faRotateLeft;\nconst faTableColumns = {\n  prefix: 'fas',\n  iconName: 'table-columns',\n  icon: [512, 512, [\"columns\"], \"f0db\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm64 64l0 256 160 0 0-256L64 160zm384 0l-160 0 0 256 160 0 0-256z\"]\n};\nconst faColumns = faTableColumns;\nconst faLemon = {\n  prefix: 'fas',\n  iconName: 'lemon',\n  icon: [448, 512, [127819], \"f094\", \"M448 96c0-35.3-28.7-64-64-64c-6.6 0-13 1-19 2.9c-22.5 7-48.1 14.9-71 9c-75.2-19.1-156.4 11-213.7 68.3S-7.2 250.8 11.9 326c5.8 22.9-2 48.4-9 71C1 403 0 409.4 0 416c0 35.3 28.7 64 64 64c6.6 0 13-1 19.1-2.9c22.5-7 48.1-14.9 71-9c75.2 19.1 156.4-11 213.7-68.3s87.5-138.5 68.3-213.7c-5.8-22.9 2-48.4 9-71c1.9-6 2.9-12.4 2.9-19.1zM212.5 127.4c-54.6 16-101.1 62.5-117.1 117.1C92.9 253 84 257.8 75.5 255.4S62.2 244 64.6 235.5c19.1-65.1 73.7-119.8 138.9-138.9c8.5-2.5 17.4 2.4 19.9 10.9s-2.4 17.4-10.9 19.9z\"]\n};\nconst faHeadSideMask = {\n  prefix: 'fas',\n  iconName: 'head-side-mask',\n  icon: [576, 512, [], \"e063\", \"M32 224.2c0-22.2 3.2-43.6 9.2-63.9L262.2 321c-4 9.5-6.2 20-6.2 31l0 160-128 0c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C48.6 322.4 32 274.1 32 224.2zm248.3 70.4L53 129.3C88.7 53 166.2 0 256 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c5.4 6.7 8.6 14.8 9.4 23.2L336 272c-21.7 0-41.3 8.6-55.7 22.6zM336 304l198 0s0 0 0 0l10 0-19.7 64L368 368c-8.8 0-16 7.2-16 16s7.2 16 16 16l146.5 0-9.8 32L368 432c-8.8 0-16 7.2-16 16s7.2 16 16 16l126.8 0-.9 2.8c-8.3 26.9-33.1 45.2-61.2 45.2L288 512l0-160c0-14 6-26.7 15.6-35.4c0 0 0 0 0 0c8.5-7.8 19.9-12.6 32.4-12.6zm48-80a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faHandshake = {\n  prefix: 'fas',\n  iconName: 'handshake',\n  icon: [640, 512, [], \"f2b5\", \"M323.4 85.2l-96.8 78.4c-16.1 13-19.2 36.4-7 53.1c12.9 17.8 38 21.3 55.3 7.8l99.3-77.2c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L512 316.8 512 128l-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2zm22.8 124.4l-51.7 40.2C263 274.4 217.3 268 193.7 235.6c-22.2-30.5-16.6-73.1 12.7-96.8l83.2-67.3c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-72 48 0 224 28.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c4.5-4.9 7.8-10.6 9.9-16.5c19.4 13 45.8 10.3 62.1-7.5c17.9-19.5 16.6-49.9-2.9-67.8l-134.2-123zM16 128c-8.8 0-16 7.2-16 16L0 352c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-224-80 0zM48 320a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM544 128l0 224c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-208c0-8.8-7.2-16-16-16l-80 0zm32 208a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nconst faGem = {\n  prefix: 'fas',\n  iconName: 'gem',\n  icon: [512, 512, [128142], \"f3a5\", \"M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8l240 0c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z\"]\n};\nconst faDolly = {\n  prefix: 'fas',\n  iconName: 'dolly',\n  icon: [576, 512, [\"dolly-box\"], \"f472\", \"M0 32C0 14.3 14.3 0 32 0l72.9 0c27.5 0 52 17.6 60.7 43.8L257.7 320c30.1 .5 56.8 14.9 74 37l202.1-67.4c16.8-5.6 34.9 3.5 40.5 20.2s-3.5 34.9-20.2 40.5L352 417.7c-.9 52.2-43.5 94.3-96 94.3c-53 0-96-43-96-96c0-30.8 14.5-58.2 37-75.8L104.9 64 32 64C14.3 64 0 49.7 0 32zM244.8 134.5c-5.5-16.8 3.7-34.9 20.5-40.3L311 79.4l19.8 60.9 60.9-19.8L371.8 59.6l45.7-14.8c16.8-5.5 34.9 3.7 40.3 20.5l49.4 152.2c5.5 16.8-3.7 34.9-20.5 40.3L334.5 307.2c-16.8 5.5-34.9-3.7-40.3-20.5L244.8 134.5z\"]\n};\nconst faDollyBox = faDolly;\nconst faSmoking = {\n  prefix: 'fas',\n  iconName: 'smoking',\n  icon: [640, 512, [128684], \"f48d\", \"M448 32l0 11c0 38.2 15.2 74.8 42.2 101.8l21 21c21 21 32.8 49.5 32.8 79.2l0 11c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-11c0-12.7-5.1-24.9-14.1-33.9l-21-21C405.9 151.1 384 98.1 384 43l0-11c0-17.7 14.3-32 32-32s32 14.3 32 32zM576 256l0-11c0-38.2-15.2-74.8-42.2-101.8l-21-21c-21-21-32.8-49.5-32.8-79.2l0-11c0-17.7 14.3-32 32-32s32 14.3 32 32l0 11c0 12.7 5.1 24.9 14.1 33.9l21 21c39 39 60.9 91.9 60.9 147.1l0 11c0 17.7-14.3 32-32 32s-32-14.3-32-32zM0 416c0-35.3 28.7-64 64-64l352 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32L64 512c-35.3 0-64-28.7-64-64l0-32zm224 0l0 32 160 0 0-32-160 0zm288-64c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32z\"]\n};\nconst faMinimize = {\n  prefix: 'fas',\n  iconName: 'minimize',\n  icon: [512, 512, [\"compress-arrows-alt\"], \"f78c\", \"M456 224l-144 0c-13.3 0-24-10.7-24-24l0-144c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l40 40L442.3 5.7C446 2 450.9 0 456 0s10 2 13.7 5.7l36.7 36.7C510 46 512 50.9 512 56s-2 10-5.7 13.7L433 143l40 40c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8zm0 64c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-40 40 73.4 73.4c3.6 3.6 5.7 8.5 5.7 13.7s-2 10-5.7 13.7l-36.7 36.7C466 510 461.1 512 456 512s-10-2-13.7-5.7L369 433l-40 40c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2l0-144c0-13.3 10.7-24 24-24l144 0zm-256 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-40-40L69.7 506.3C66 510 61.1 512 56 512s-10-2-13.7-5.7L5.7 469.7C2 466 0 461.1 0 456s2-10 5.7-13.7L79 369 39 329c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8l144 0zM56 224c-9.7 0-18.5-5.8-22.2-14.8s-1.7-19.3 5.2-26.2l40-40L5.7 69.7C2 66 0 61.1 0 56s2-10 5.7-13.7L42.3 5.7C46 2 50.9 0 56 0s10 2 13.7 5.7L143 79l40-40c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 144c0 13.3-10.7 24-24 24L56 224z\"]\n};\nconst faCompressArrowsAlt = faMinimize;\nconst faMonument = {\n  prefix: 'fas',\n  iconName: 'monument',\n  icon: [384, 512, [], \"f5a6\", \"M180.7 4.7c6.2-6.2 16.4-6.2 22.6 0l80 80c2.5 2.5 4.1 5.8 4.6 9.3l40.2 322L55.9 416 96.1 94c.4-3.5 2-6.8 4.6-9.3l80-80zM152 272c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0zM32 448l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faSnowplow = {\n  prefix: 'fas',\n  iconName: 'snowplow',\n  icon: [640, 512, [], \"f7d2\", \"M298.9 64l68.6 160L256 224l-64-64 0-96 106.9 0zM445.1 242.7l-87.4-204C347.6 15.3 324.5 0 298.9 0L176 0c-26.5 0-48 21.5-48 48l0 112-32 0c-17.7 0-32 14.3-32 32l0 106.8C26.2 316.8 0 355.3 0 400c0 61.9 50.1 112 112 112l256 0c61.9 0 112-50.1 112-112c0-17.2-3.9-33.5-10.8-48l42.8 0 0 50.7c0 17 6.7 33.3 18.7 45.3l54.6 54.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L576 402.7l0-82.7 0-84.8L633 164c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5l-57 71.2c-9.1 11.3-14 25.4-14 40l0 52.8-64 0 0-31.3c.1-2.4-.2-4.8-.6-7.1s-1.2-4.7-2.2-6.8zM368 352c26.5 0 48 21.5 48 48s-21.5 48-48 48l-256 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l256 0zM144 400a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm216 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-56-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM200 424a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faAnglesRight = {\n  prefix: 'fas',\n  iconName: 'angles-right',\n  icon: [512, 512, [187, \"angle-double-right\"], \"f101\", \"M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"]\n};\nconst faAngleDoubleRight = faAnglesRight;\nconst faCannabis = {\n  prefix: 'fas',\n  iconName: 'cannabis',\n  icon: [512, 512, [], \"f55f\", \"M256 0c5.3 0 10.3 2.7 13.3 7.1c15.8 23.5 36.7 63.7 49.2 109c7.2 26.4 11.8 55.2 10.4 84c11.5-8.8 23.7-16.7 35.8-23.6c41-23.3 84.4-36.9 112.2-42.5c5.2-1 10.7 .6 14.4 4.4s5.4 9.2 4.4 14.5c-5.6 27.7-19.3 70.9-42.7 111.7c-9.1 15.9-19.9 31.7-32.4 46.3c27.8 6.6 52.4 17.3 67.2 25.5c5.1 2.8 8.2 8.2 8.2 14s-3.2 11.2-8.2 14c-15.2 8.4-40.9 19.5-69.8 26.1c-20.2 4.6-42.9 7.2-65.2 4.6l8.3 33.1c1.5 6.1-.6 12.4-5.5 16.4s-11.6 4.6-17.2 1.9L280 417.2l0 70.8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-70.8-58.5 29.1c-5.6 2.8-12.3 2.1-17.2-1.9s-7-10.3-5.5-16.4l8.3-33.1c-22.2 2.6-45 0-65.2-4.6c-28.9-6.6-54.6-17.6-69.8-26.1c-5.1-2.8-8.2-8.2-8.2-14s3.2-11.2 8.2-14c14.8-8.2 39.4-18.8 67.2-25.5C78.9 296.3 68.1 280.5 59 264.6c-23.4-40.8-37.1-84-42.7-111.7c-1.1-5.2 .6-10.7 4.4-14.5s9.2-5.4 14.4-4.4c27.9 5.5 71.2 19.2 112.2 42.5c12.1 6.9 24.3 14.7 35.8 23.6c-1.4-28.7 3.1-57.6 10.4-84c12.5-45.3 33.4-85.5 49.2-109c3-4.4 8-7.1 13.3-7.1z\"]\n};\nconst faCirclePlay = {\n  prefix: 'fas',\n  iconName: 'circle-play',\n  icon: [512, 512, [61469, \"play-circle\"], \"f144\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c-7.6 4.2-12.3 12.3-12.3 20.9l0 176c0 8.7 4.7 16.7 12.3 20.9s16.8 4.1 24.3-.5l144-88c7.1-4.4 11.5-12.1 11.5-20.5s-4.4-16.1-11.5-20.5l-144-88c-7.4-4.5-16.7-4.7-24.3-.5z\"]\n};\nconst faPlayCircle = faCirclePlay;\nconst faTablets = {\n  prefix: 'fas',\n  iconName: 'tablets',\n  icon: [640, 512, [], \"f490\", \"M614.3 247c-5.2 7.9-16.2 8.5-22.9 1.8L391.2 48.6c-6.7-6.7-6.2-17.8 1.8-22.9C418.1 9.4 447.9 0 480 0c88.4 0 160 71.6 160 160c0 32.1-9.4 61.9-25.7 87zM567 294.3c-25 16.3-54.9 25.7-87 25.7c-88.4 0-160-71.6-160-160c0-32.1 9.4-61.9 25.7-87c5.2-7.9 16.2-8.5 22.9-1.8L568.8 271.4c6.7 6.7 6.2 17.8-1.8 22.9zM301.5 368c9.5 0 16.9 8.2 15 17.5C301.1 457.8 236.9 512 160 512S18.9 457.8 3.5 385.5c-2-9.3 5.5-17.5 15-17.5l283.1 0zm0-32L18.5 336c-9.5 0-16.9-8.2-15-17.5C18.9 246.2 83.1 192 160 192s141.1 54.2 156.5 126.5c2 9.3-5.5 17.5-15 17.5z\"]\n};\nconst faEthernet = {\n  prefix: 'fas',\n  iconName: 'ethernet',\n  icon: [512, 512, [], \"f796\", \"M0 224L0 416c0 17.7 14.3 32 32 32l64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0 0-112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 64 0c17.7 0 32-14.3 32-32l0-192c0-17.7-14.3-32-32-32l-32 0 0-32c0-17.7-14.3-32-32-32l-32 0 0-32c0-17.7-14.3-32-32-32L160 64c-17.7 0-32 14.3-32 32l0 32-32 0c-17.7 0-32 14.3-32 32l0 32-32 0c-17.7 0-32 14.3-32 32z\"]\n};\nconst faEuroSign = {\n  prefix: 'fas',\n  iconName: 'euro-sign',\n  icon: [320, 512, [8364, \"eur\", \"euro\"], \"f153\", \"M48.1 240c-.1 2.7-.1 5.3-.1 8l0 16c0 2.7 0 5.3 .1 8L32 272c-17.7 0-32 14.3-32 32s14.3 32 32 32l28.3 0C89.9 419.9 170 480 264 480l24 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-24 0c-57.9 0-108.2-32.4-133.9-80L256 336c17.7 0 32-14.3 32-32s-14.3-32-32-32l-143.8 0c-.1-2.6-.2-5.3-.2-8l0-16c0-2.7 .1-5.4 .2-8L256 240c17.7 0 32-14.3 32-32s-14.3-32-32-32l-125.9 0c25.7-47.6 76-80 133.9-80l24 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-24 0C170 32 89.9 92.1 60.3 176L32 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l16.1 0z\"]\n};\nconst faEur = faEuroSign;\nconst faEuro = faEuroSign;\nconst faChair = {\n  prefix: 'fas',\n  iconName: 'chair',\n  icon: [448, 512, [129681], \"f6c0\", \"M248 48l0 208 48 0 0-197.3c23.9 13.8 40 39.7 40 69.3l0 128 48 0 0-128C384 57.3 326.7 0 256 0L192 0C121.3 0 64 57.3 64 128l0 128 48 0 0-128c0-29.6 16.1-55.5 40-69.3L152 256l48 0 0-208 48 0zM48 288c-12.1 0-23.2 6.8-28.6 17.7l-16 32c-5 9.9-4.4 21.7 1.4 31.1S20.9 384 32 384l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 256 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c11.1 0 21.4-5.7 27.2-15.2s6.4-21.2 1.4-31.1l-16-32C423.2 294.8 412.1 288 400 288L48 288z\"]\n};\nconst faCircleCheck = {\n  prefix: 'fas',\n  iconName: 'circle-check',\n  icon: [512, 512, [61533, \"check-circle\"], \"f058\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faCheckCircle = faCircleCheck;\nconst faCircleStop = {\n  prefix: 'fas',\n  iconName: 'circle-stop',\n  icon: [512, 512, [62094, \"stop-circle\"], \"f28d\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 160l128 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32z\"]\n};\nconst faStopCircle = faCircleStop;\nconst faCompassDrafting = {\n  prefix: 'fas',\n  iconName: 'compass-drafting',\n  icon: [512, 512, [\"drafting-compass\"], \"f568\", \"M352 96c0 14.3-3.1 27.9-8.8 40.2L396 227.4c-23.7 25.3-54.2 44.1-88.5 53.6L256 192c0 0 0 0 0 0s0 0 0 0l-68 117.5c21.5 6.8 44.3 10.5 68.1 10.5c70.7 0 133.8-32.7 174.9-84c11.1-13.8 31.2-16 45-5s16 31.2 5 45C428.1 341.8 347 384 256 384c-35.4 0-69.4-6.4-100.7-18.1L98.7 463.7C94 471.8 87 478.4 78.6 482.6L23.2 510.3c-5 2.5-10.9 2.2-15.6-.7S0 501.5 0 496l0-55.4c0-8.4 2.2-16.7 6.5-24.1l60-103.7C53.7 301.6 41.8 289.3 31.2 276c-11.1-13.8-8.8-33.9 5-45s33.9-8.8 45 5c5.7 7.1 11.8 13.8 18.2 20.1l69.4-119.9c-5.6-12.2-8.8-25.8-8.8-40.2c0-53 43-96 96-96s96 43 96 96zm21 297.9c32.6-12.8 62.5-30.8 88.9-52.9l43.7 75.5c4.2 7.3 6.5 15.6 6.5 24.1l0 55.4c0 5.5-2.9 10.7-7.6 13.6s-10.6 3.2-15.6 .7l-55.4-27.7c-8.4-4.2-15.4-10.8-20.1-18.9L373 393.9zM256 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faDraftingCompass = faCompassDrafting;\nconst faPlateWheat = {\n  prefix: 'fas',\n  iconName: 'plate-wheat',\n  icon: [512, 512, [], \"e55a\", \"M176 32c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80l0-16c0-8.8 7.2-16 16-16zM56 64l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM24 136l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 184c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 96c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zM272 48c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80l0-16zM400 32c44.2 0 80 35.8 80 80l0 16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80l0-16c0-8.8 7.2-16 16-16zm80 160l0 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 176c8.8 0 16 7.2 16 16l0 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80zm-96 16l0 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM3.5 347.6C1.6 332.9 13 320 27.8 320l456.4 0c14.8 0 26.2 12.9 24.4 27.6C502.3 397.8 464.2 437 416 446l0 2c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-2c-48.2-9-86.3-48.2-92.5-98.4z\"]\n};\nconst faIcicles = {\n  prefix: 'fas',\n  iconName: 'icicles',\n  icon: [512, 512, [], \"f7ad\", \"M75.8 304.8L1 35.7c-.7-2.5-1-5-1-7.5C0 12.6 12.6 0 28.2 0H482.4C498.8 0 512 13.2 512 29.6c0 1.6-.1 3.3-.4 4.9L434.6 496.1c-1.5 9.2-9.5 15.9-18.8 15.9c-9.2 0-17.1-6.6-18.7-15.6L336 160 307.2 303.9c-1.9 9.3-10.1 16.1-19.6 16.1c-9.2 0-17.2-6.2-19.4-15.1L240 192 210.6 368.2c-1.5 9.1-9.4 15.8-18.6 15.8s-17.1-6.7-18.6-15.8L144 192 115.9 304.3c-2.3 9.2-10.6 15.7-20.1 15.7c-9.3 0-17.5-6.2-20-15.2z\"]\n};\nconst faPersonShelter = {\n  prefix: 'fas',\n  iconName: 'person-shelter',\n  icon: [512, 512, [], \"e54f\", \"M271.9 4.2c-9.8-5.6-21.9-5.6-31.8 0l-224 128C6.2 137.9 0 148.5 0 160L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.4L256 68.9 448 178.6 448 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-320c0-11.5-6.2-22.1-16.1-27.8l-224-128zM256 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zm-8 280l0-88 16 0 0 88c0 13.3 10.7 24 24 24s24-10.7 24-24l0-174.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3l-37.9 70.3c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L200 313.5 200 488c0 13.3 10.7 24 24 24s24-10.7 24-24z\"]\n};\nconst faNeuter = {\n  prefix: 'fas',\n  iconName: 'neuter',\n  icon: [384, 512, [9906], \"f22c\", \"M80 176a112 112 0 1 1 224 0A112 112 0 1 1 80 176zM224 349.1c81.9-15 144-86.8 144-173.1C368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144 173.1L160 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-130.9z\"]\n};\nconst faIdBadge = {\n  prefix: 'fas',\n  iconName: 'id-badge',\n  icon: [384, 512, [], \"f2c1\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zm96 320l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L96 416c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM144 64l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faMarker = {\n  prefix: 'fas',\n  iconName: 'marker',\n  icon: [512, 512, [], \"f5a1\", \"M481 31C445.1-4.8 386.9-4.8 351 31l-15 15L322.9 33C294.8 4.9 249.2 4.9 221.1 33L135 119c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L255 66.9c9.4-9.4 24.6-9.4 33.9 0L302.1 80 186.3 195.7 316.3 325.7 481 161c35.9-35.9 35.9-94.1 0-129.9zM293.7 348.3L163.7 218.3 99.5 282.5c-48 48-80.8 109.2-94.1 175.8l-5 25c-1.6 7.9 .9 16 6.6 21.7s13.8 8.1 21.7 6.6l25-5c66.6-13.3 127.8-46.1 175.8-94.1l64.2-64.2z\"]\n};\nconst faFaceLaughBeam = {\n  prefix: 'fas',\n  iconName: 'face-laugh-beam',\n  icon: [512, 512, [128513, \"laugh-beam\"], \"f59a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM217.6 212.8s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faLaughBeam = faFaceLaughBeam;\nconst faHelicopterSymbol = {\n  prefix: 'fas',\n  iconName: 'helicopter-symbol',\n  icon: [512, 512, [], \"e502\", \"M445.3 224l64.7 0C495.6 108.2 403.8 16.4 288 2l0 64.7C368.4 80.1 431.9 143.6 445.3 224zM510 288l-64.7 0C431.9 368.4 368.4 431.9 288 445.3l0 64.7c115.8-14.4 207.6-106.2 222-222zM2 288C16.4 403.8 108.2 495.6 224 510l0-64.7C143.6 431.9 80.1 368.4 66.7 288L2 288zm0-64l64.7 0C80.1 143.6 143.6 80.1 224 66.7L224 2C108.2 16.4 16.4 108.2 2 224zm206-64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 96 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-96 0 0-64z\"]\n};\nconst faUniversalAccess = {\n  prefix: 'fas',\n  iconName: 'universal-access',\n  icon: [512, 512, [], \"f29a\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm161.5-86.1c-12.2-5.2-26.3 .4-31.5 12.6s.4 26.3 12.6 31.5l11.9 5.1c17.3 7.4 35.2 12.9 53.6 16.3l0 50.1c0 4.3-.7 8.6-2.1 12.6l-28.7 86.1c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l24.4-73.2c1.3-3.8 4.8-6.4 8.8-6.4s7.6 2.6 8.8 6.4l24.4 73.2c4.2 12.6 17.8 19.4 30.4 15.2s19.4-17.8 15.2-30.4l-28.7-86.1c-1.4-4.1-2.1-8.3-2.1-12.6l0-50.1c18.4-3.5 36.3-8.9 53.6-16.3l11.9-5.1c12.2-5.2 17.8-19.3 12.6-31.5s-19.3-17.8-31.5-12.6L338.7 175c-26.1 11.2-54.2 17-82.7 17s-56.5-5.8-82.7-17l-11.9-5.1zM256 160a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nconst faCircleChevronUp = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-up',\n  icon: [512, 512, [\"chevron-circle-up\"], \"f139\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM377 271c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-87-87-87 87c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 167c9.4-9.4 24.6-9.4 33.9 0L377 271z\"]\n};\nconst faChevronCircleUp = faCircleChevronUp;\nconst faLariSign = {\n  prefix: 'fas',\n  iconName: 'lari-sign',\n  icon: [384, 512, [], \"e1c8\", \"M144 32c17.7 0 32 14.3 32 32l0 32.7c5.3-.4 10.6-.7 16-.7s10.7 .2 16 .7L208 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 49.4c54.9 25.2 95.8 75.5 108.2 136.2c3.5 17.3-7.7 34.2-25 37.7s-34.2-7.7-37.7-25c-6.1-29.9-22.5-55.9-45.4-74.3l0 67.9c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-95c-5.2-.7-10.6-1-16-1s-10.8 .3-16 1l0 95c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-67.9C82.7 211.5 64 247.6 64 288c0 70.7 57.3 128 128 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l16.9 0C18.5 382 0 337.2 0 288c0-77.5 45.9-144.3 112-174.6L112 64c0-17.7 14.3-32 32-32z\"]\n};\nconst faVolcano = {\n  prefix: 'fas',\n  iconName: 'volcano',\n  icon: [512, 512, [127755], \"f770\", \"M160 144c-35.3 0-64-28.7-64-64s28.7-64 64-64c15.7 0 30 5.6 41.2 15C212.4 12.4 232.7 0 256 0s43.6 12.4 54.8 31C322 21.6 336.3 16 352 16c35.3 0 64 28.7 64 64s-28.7 64-64 64c-14.7 0-28.3-5-39.1-13.3l-32 48C275.3 187 266 192 256 192s-19.3-5-24.9-13.3l-32-48C188.3 139 174.7 144 160 144zM144 352l48.4-24.2c10.2-5.1 21.6-7.8 33-7.8c19.6 0 38.4 7.8 52.2 21.6l32.5 32.5c6.3 6.3 14.9 9.9 23.8 9.9c11.3 0 21.8-5.6 28-15l9.7-14.6-58.9-66.3c-9.1-10.2-22.2-16.1-35.9-16.1l-41.8 0c-13.7 0-26.8 5.9-35.9 16.1l-59.9 67.4L144 352zm19.4-95.8c18.2-20.5 44.3-32.2 71.8-32.2l41.8 0c27.4 0 53.5 11.7 71.8 32.2l150.2 169c8.5 9.5 13.2 21.9 13.2 34.7c0 28.8-23.4 52.2-52.2 52.2L52.2 512C23.4 512 0 488.6 0 459.8c0-12.8 4.7-25.1 13.2-34.7l150.2-169z\"]\n};\nconst faPersonWalkingDashedLineArrowRight = {\n  prefix: 'fas',\n  iconName: 'person-walking-dashed-line-arrow-right',\n  icon: [640, 512, [], \"e553\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM550.6 153.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L530.7 224 384 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l146.7 0-25.4 25.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3l-80-80zM392 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48c0-13.3-10.7-24-24-24zm24 152c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16zM392 320c-13.3 0-24 10.7-24 24l0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16c0-13.3-10.7-24-24-24zm24 120c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48z\"]\n};\nconst faSterlingSign = {\n  prefix: 'fas',\n  iconName: 'sterling-sign',\n  icon: [320, 512, [163, \"gbp\", \"pound-sign\"], \"f154\", \"M112 160.4c0-35.5 28.8-64.4 64.4-64.4c6.9 0 13.8 1.1 20.4 3.3l81.2 27.1c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L217 38.6c-13.1-4.4-26.8-6.6-40.6-6.6C105.5 32 48 89.5 48 160.4L48 224l-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 44.5c0 17.4-4.7 34.5-13.7 49.4L4.6 431.5c-5.9 9.9-6.1 22.2-.4 32.2S20.5 480 32 480l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L88.5 416l.7-1.1C104.1 390 112 361.5 112 332.5l0-44.5 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-63.6z\"]\n};\nconst faGbp = faSterlingSign;\nconst faPoundSign = faSterlingSign;\nconst faViruses = {\n  prefix: 'fas',\n  iconName: 'viruses',\n  icon: [640, 512, [], \"e076\", \"M192 0c13.3 0 24 10.7 24 24l0 13.5c0 35.6 43.1 53.5 68.3 28.3l9.5-9.5c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-9.5 9.5C293 124.9 310.9 168 346.5 168l13.5 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-13.5 0c-35.6 0-53.5 43.1-28.3 68.3l9.5 9.5c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-9.5-9.5C259.1 293 216 310.9 216 346.5l0 13.5c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-13.5c0-35.6-43.1-53.5-68.3-28.3l-9.5 9.5c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l9.5-9.5C91 259.1 73.1 216 37.5 216L24 216c-13.3 0-24-10.7-24-24s10.7-24 24-24l13.5 0c35.6 0 53.5-43.1 28.3-68.3l-9.5-9.5c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l9.5 9.5C124.9 91 168 73.1 168 37.5L168 24c0-13.3 10.7-24 24-24zm48 224a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-48-64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm320 80c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C574.5 312.1 591 352 624 352c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0C551.9 446.5 512 463 512 496c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C417.5 423.9 401 384 368 384c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C440.1 289.5 480 273 480 240c0-8.8 7.2-16 16-16s16 7.2 16 16zm0 112a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faSquarePersonConfined = {\n  prefix: 'fas',\n  iconName: 'square-person-confined',\n  icon: [448, 512, [], \"e577\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm96 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm80 104c0-30.9 25.1-56 56-56s56 25.1 56 56l0 102.1c0 36.4-29.5 65.9-65.9 65.9c-17.5 0-34.3-6.9-46.6-19.3L184.8 342l-28.1 56.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l48-96c4.6-9.2 13.3-15.6 23.5-17.3s20.5 1.7 27.8 9L240 306.7l0-58.7z\"]\n};\nconst faUserTie = {\n  prefix: 'fas',\n  iconName: 'user-tie',\n  icon: [448, 512, [], \"f508\", \"M96 128a128 128 0 1 0 256 0A128 128 0 1 0 96 128zm94.5 200.2l18.6 31L175.8 483.1l-36-146.9c-2-8.1-9.8-13.4-17.9-11.3C51.9 342.4 0 405.8 0 481.3c0 17 13.8 30.7 30.7 30.7l131.7 0c0 0 0 0 .1 0l5.5 0 112 0 5.5 0c0 0 0 0 .1 0l131.7 0c17 0 30.7-13.8 30.7-30.7c0-75.5-51.9-138.9-121.9-156.4c-8.1-2-15.9 3.3-17.9 11.3l-36 146.9L238.9 359.2l18.6-31c6.4-10.7-1.3-24.2-13.7-24.2L224 304l-19.7 0c-12.4 0-20.1 13.6-13.7 24.2z\"]\n};\nconst faArrowDownLong = {\n  prefix: 'fas',\n  iconName: 'arrow-down-long',\n  icon: [384, 512, [\"long-arrow-down\"], \"f175\", \"M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7L86.6 329.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128z\"]\n};\nconst faLongArrowDown = faArrowDownLong;\nconst faTentArrowDownToLine = {\n  prefix: 'fas',\n  iconName: 'tent-arrow-down-to-line',\n  icon: [640, 512, [], \"e57e\", \"M241.8 111.9c8.9 9.9 8.1 25-1.8 33.9l-80 72c-9.1 8.2-23 8.2-32.1 0l-80-72c-9.9-8.9-10.7-24-1.8-33.9s24-10.7 33.9-1.8l39.9 36L120 24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 122.1 39.9-36c9.9-8.9 25-8.1 33.9 1.8zm122.8 22.6c11.5-8.7 27.3-8.7 38.8 0l168 128c6.6 5 11 12.5 12.3 20.7l24 160 .7 4.7c17.5 .2 31.6 14.4 31.6 32c0 17.7-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l127.6 0 .7-4.7 24-160c1.2-8.2 5.6-15.7 12.3-20.7l168-128zM384 448l80 0L402.7 325.5c-1.7-3.4-5.1-5.5-8.8-5.5c-5.5 0-9.9 4.4-9.9 9.9L384 448z\"]\n};\nconst faCertificate = {\n  prefix: 'fas',\n  iconName: 'certificate',\n  icon: [512, 512, [], \"f0a3\", \"M211 7.3C205 1 196-1.4 187.6 .8s-14.9 8.9-17.1 17.3L154.7 80.6l-62-17.5c-8.4-2.4-17.4 0-23.5 6.1s-8.5 15.1-6.1 23.5l17.5 62L18.1 170.6c-8.4 2.1-15 8.7-17.3 17.1S1 205 7.3 211l46.2 45L7.3 301C1 307-1.4 316 .8 324.4s8.9 14.9 17.3 17.1l62.5 15.8-17.5 62c-2.4 8.4 0 17.4 6.1 23.5s15.1 8.5 23.5 6.1l62-17.5 15.8 62.5c2.1 8.4 8.7 15 17.1 17.3s17.3-.2 23.4-6.4l45-46.2 45 46.2c6.1 6.2 15 8.7 23.4 6.4s14.9-8.9 17.1-17.3l15.8-62.5 62 17.5c8.4 2.4 17.4 0 23.5-6.1s8.5-15.1 6.1-23.5l-17.5-62 62.5-15.8c8.4-2.1 15-8.7 17.3-17.1s-.2-17.4-6.4-23.4l-46.2-45 46.2-45c6.2-6.1 8.7-15 6.4-23.4s-8.9-14.9-17.3-17.1l-62.5-15.8 17.5-62c2.4-8.4 0-17.4-6.1-23.5s-15.1-8.5-23.5-6.1l-62 17.5L341.4 18.1c-2.1-8.4-8.7-15-17.1-17.3S307 1 301 7.3L256 53.5 211 7.3z\"]\n};\nconst faReplyAll = {\n  prefix: 'fas',\n  iconName: 'reply-all',\n  icon: [576, 512, [\"mail-reply-all\"], \"f122\", \"M209.4 39.5c-9.1-9.6-24.3-10-33.9-.9L33.8 173.2c-19.9 18.9-19.9 50.7 0 69.6L175.5 377.4c9.6 9.1 24.8 8.7 33.9-.9s8.7-24.8-.9-33.9L66.8 208 208.5 73.4c9.6-9.1 10-24.3 .9-33.9zM352 64c0-12.6-7.4-24.1-19-29.2s-25-3-34.4 5.4l-160 144c-6.7 6.1-10.6 14.7-10.6 23.8s3.9 17.7 10.6 23.8l160 144c9.4 8.5 22.9 10.6 34.4 5.4s19-16.6 19-29.2l0-64 32 0c53 0 96 43 96 96c0 30.4-12.8 47.9-22.2 56.7c-5.5 5.1-9.8 12-9.8 19.5c0 10.9 8.8 19.7 19.7 19.7c2.8 0 5.6-.6 8.1-1.9C494.5 467.9 576 417.3 576 304c0-97.2-78.8-176-176-176l-48 0 0-64z\"]\n};\nconst faMailReplyAll = faReplyAll;\nconst faSuitcase = {\n  prefix: 'fas',\n  iconName: 'suitcase',\n  icon: [512, 512, [129523], \"f0f2\", \"M176 56l0 40 160 0 0-40c0-4.4-3.6-8-8-8L184 48c-4.4 0-8 3.6-8 8zM128 96l0-40c0-30.9 25.1-56 56-56L328 0c30.9 0 56 25.1 56 56l0 40 0 32 0 352-256 0 0-352 0-32zM64 96l32 0 0 384-32 0c-35.3 0-64-28.7-64-64L0 160c0-35.3 28.7-64 64-64zM448 480l-32 0 0-384 32 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64z\"]\n};\nconst faPersonSkating = {\n  prefix: 'fas',\n  iconName: 'person-skating',\n  icon: [448, 512, [\"skating\"], \"f7c5\", \"M352 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM128 128c0-17.7 14.3-32 32-32l159.4 0c43.6 0 64.6 53.4 32.8 83.1l-74.4 69.4 60.2 60.2c9 9 14.1 21.2 14.1 33.9l0 73.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-66.7-77.9-77.8c-26.6-26.6-24.6-70.3 4.3-94.4l20.4-17L160 160c-17.7 0-32-14.3-32-32zM81.4 353.4l86.9-86.9c4.6 10 11 19.3 19.3 27.5l21.8 21.8-82.7 82.7c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3zm322.5 95.1c8.6 2.1 13.8 10.8 11.6 19.4l-.4 1.7c-6.2 24.9-28.6 42.4-54.3 42.4L272 512c-8.8 0-16-7.2-16-16s7.2-16 16-16l88.8 0c11 0 20.6-7.5 23.3-18.2l.4-1.7c2.1-8.6 10.8-13.8 19.4-11.6zM135.2 478.3l-6.2 3.1c-21.6 10.8-47.6 6.6-64.6-10.5L4.7 411.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l59.6 59.6c7.3 7.3 18.5 9.1 27.7 4.5l6.2-3.1c7.9-4 17.5-.7 21.5 7.2s.7 17.5-7.2 21.5z\"]\n};\nconst faSkating = faPersonSkating;\nconst faFilterCircleDollar = {\n  prefix: 'fas',\n  iconName: 'filter-circle-dollar',\n  icon: [576, 512, [\"funnel-dollar\"], \"f662\", \"M3.9 22.9C10.5 8.9 24.5 0 40 0L472 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L396.4 195.6C316.2 212.1 256 283 256 368c0 27.4 6.3 53.4 17.5 76.5c-1.6-.8-3.2-1.8-4.7-2.9l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 65.3C-.7 53.4-2.8 36.8 3.9 22.9zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm120.8-32.6c.6-.9 1.8-2.1 4.2-3.4c5.1-2.7 12.5-4.1 18.7-4c8.2 .1 17.1 1.8 26.4 4.1c8.6 2.1 17.3-3.1 19.4-11.7s-3.1-17.3-11.7-19.4c-5.6-1.4-11.6-2.7-17.9-3.7l0-9.4c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 9.5c-6.1 1.2-12.3 3.2-18 6.3c-11.8 6.3-23 18.4-21.8 37.2c1 16 11.7 25.3 21.6 30.7c8.8 4.7 19.7 7.8 28.6 10.3l1.8 .5c10.3 2.9 17.9 5.2 23.2 8.3c4.5 2.7 4.7 4.2 4.7 5.6c.1 2.4-.5 3.7-1 4.5c-.6 1-1.8 2.2-4 3.3c-4.7 2.5-11.8 3.8-18.5 3.6c-9.5-.3-18.5-3.1-29.9-6.8c-1.9-.6-3.8-1.2-5.8-1.8c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20c1.6 .5 3.3 1 5 1.6c0 0 0 0 0 0s0 0 0 0c7 2.3 15.1 4.8 23.7 6.6l0 11.4c0 8.8 7.2 16 16 16s16-7.2 16-16l0-10.8c6.2-1.1 12.5-3.1 18.3-6.2c12.1-6.5 22.3-18.7 21.7-36.9c-.5-16.2-10.3-26.3-20.5-32.3c-9.4-5.6-21.2-8.9-30.5-11.5l-.2 0c-10.4-2.9-18.3-5.2-23.9-8.2c-4.8-2.6-4.8-4-4.8-4.5c0 0 0 0 0-.1c-.1-1.9 .3-2.9 .8-3.6z\"]\n};\nconst faFunnelDollar = faFilterCircleDollar;\nconst faCameraRetro = {\n  prefix: 'fas',\n  iconName: 'camera-retro',\n  icon: [512, 512, [128247], \"f083\", \"M220.6 121.2L271.1 96 448 96l0 96-114.8 0c-21.9-15.1-48.5-24-77.2-24s-55.2 8.9-77.2 24L64 192l0-64 128 0c9.9 0 19.7-2.3 28.6-6.8zM0 128L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L271.1 32c-9.9 0-19.7 2.3-28.6 6.8L192 64l-32 0 0-16c0-8.8-7.2-16-16-16L80 32c-8.8 0-16 7.2-16 16l0 16C28.7 64 0 92.7 0 128zM168 304a88 88 0 1 1 176 0 88 88 0 1 1 -176 0z\"]\n};\nconst faCircleArrowDown = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-down',\n  icon: [512, 512, [\"arrow-circle-down\"], \"f0ab\", \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM127 297c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l71 71L232 120c0-13.3 10.7-24 24-24s24 10.7 24 24l0 214.1 71-71c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 409c-9.4 9.4-24.6 9.4-33.9 0L127 297z\"]\n};\nconst faArrowCircleDown = faCircleArrowDown;\nconst faFileImport = {\n  prefix: 'fas',\n  iconName: 'file-import',\n  icon: [512, 512, [\"arrow-right-to-file\"], \"f56f\", \"M128 64c0-35.3 28.7-64 64-64L352 0l0 128c0 17.7 14.3 32 32 32l128 0 0 288c0 35.3-28.7 64-64 64l-256 0c-35.3 0-64-28.7-64-64l0-112 174.1 0-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39L128 288l0-224zm0 224l0 48L24 336c-13.3 0-24-10.7-24-24s10.7-24 24-24l104 0zM512 128l-128 0L384 0 512 128z\"]\n};\nconst faArrowRightToFile = faFileImport;\nconst faSquareArrowUpRight = {\n  prefix: 'fas',\n  iconName: 'square-arrow-up-right',\n  icon: [448, 512, [\"external-link-square\"], \"f14c\", \"M384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM160 144c-13.3 0-24 10.7-24 24s10.7 24 24 24l94.1 0L119 327c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l135-135L288 328c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24l-152 0z\"]\n};\nconst faExternalLinkSquare = faSquareArrowUpRight;\nconst faBoxOpen = {\n  prefix: 'fas',\n  iconName: 'box-open',\n  icon: [640, 512, [], \"f49e\", \"M58.9 42.1c3-6.1 9.6-9.6 16.3-8.7L320 64 564.8 33.4c6.7-.8 13.3 2.7 16.3 8.7l41.7 83.4c9 17.9-.6 39.6-19.8 45.1L439.6 217.3c-13.9 4-28.8-1.9-36.2-14.3L320 64 236.6 203c-7.4 12.4-22.3 18.3-36.2 14.3L37.1 170.6c-19.3-5.5-28.8-27.2-19.8-45.1L58.9 42.1zM321.1 128l54.9 91.4c14.9 24.8 44.6 36.6 72.5 28.6L576 211.6l0 167c0 22-15 41.2-36.4 46.6l-204.1 51c-10.2 2.6-20.9 2.6-31 0l-204.1-51C79 419.7 64 400.5 64 378.5l0-167L191.6 248c27.8 8 57.6-3.8 72.5-28.6L318.9 128l2.2 0z\"]\n};\nconst faScroll = {\n  prefix: 'fas',\n  iconName: 'scroll',\n  icon: [576, 512, [128220], \"f70e\", \"M0 80l0 48c0 17.7 14.3 32 32 32l16 0 48 0 0-80c0-26.5-21.5-48-48-48S0 53.5 0 80zM112 32c10 13.4 16 30 16 48l0 304c0 35.3 28.7 64 64 64s64-28.7 64-64l0-5.3c0-32.4 26.3-58.7 58.7-58.7L480 320l0-192c0-53-43-96-96-96L112 32zM464 480c61.9 0 112-50.1 112-112c0-8.8-7.2-16-16-16l-245.3 0c-14.7 0-26.7 11.9-26.7 26.7l0 5.3c0 53-43 96-96 96l176 0 96 0z\"]\n};\nconst faSpa = {\n  prefix: 'fas',\n  iconName: 'spa',\n  icon: [576, 512, [], \"f5bb\", \"M183.1 235.3c33.7 20.7 62.9 48.1 85.8 80.5c7 9.9 13.4 20.3 19.1 31c5.7-10.8 12.1-21.1 19.1-31c22.9-32.4 52.1-59.8 85.8-80.5C437.6 207.8 490.1 192 546 192l9.9 0c11.1 0 20.1 9 20.1 20.1C576 360.1 456.1 480 308.1 480L288 480l-20.1 0C119.9 480 0 360.1 0 212.1C0 201 9 192 20.1 192l9.9 0c55.9 0 108.4 15.8 153.1 43.3zM301.5 37.6c15.7 16.9 61.1 71.8 84.4 164.6c-38 21.6-71.4 50.8-97.9 85.6c-26.5-34.8-59.9-63.9-97.9-85.6c23.2-92.8 68.6-147.7 84.4-164.6C278 33.9 282.9 32 288 32s10 1.9 13.5 5.6z\"]\n};\nconst faLocationPinLock = {\n  prefix: 'fas',\n  iconName: 'location-pin-lock',\n  icon: [512, 512, [], \"e51f\", \"M215.7 499.2c11-13.8 25.1-31.7 40.3-52.3l0-94.8c0-23.7 12.9-44.4 32-55.4l0-24.6c0-55.6 40.5-101.7 93.6-110.5C367 70 287.7 0 192 0C86 0 0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faPause = {\n  prefix: 'fas',\n  iconName: 'pause',\n  icon: [320, 512, [9208], \"f04c\", \"M48 64C21.5 64 0 85.5 0 112L0 400c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48L48 64zm192 0c-26.5 0-48 21.5-48 48l0 288c0 26.5 21.5 48 48 48l32 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48l-32 0z\"]\n};\nconst faHillAvalanche = {\n  prefix: 'fas',\n  iconName: 'hill-avalanche',\n  icon: [576, 512, [], \"e507\", \"M439.7 401.9c34.2 23.1 81.1 19.5 111.4-10.8c34.4-34.4 34.4-90.1 0-124.4c-27.8-27.8-69.5-33.1-102.6-16c-11.8 6.1-16.4 20.6-10.3 32.3s20.6 16.4 32.3 10.3c15.1-7.8 34-5.3 46.6 7.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-81.7-81.7C401.2 261.3 416 236.4 416 208c0-33.9-21.1-62.9-50.9-74.5c1.9-6.8 2.9-14 2.9-21.5c0-44.2-35.8-80-80-80c-27.3 0-51.5 13.7-65.9 34.6C216.3 46.6 197.9 32 176 32c-26.5 0-48 21.5-48 48c0 4 .5 7.9 1.4 11.6L439.7 401.9zM480 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM68.3 87C43.1 61.8 0 79.7 0 115.3L0 432c0 44.2 35.8 80 80 80l316.7 0c35.6 0 53.5-43.1 28.3-68.3L68.3 87z\"]\n};\nconst faTemperatureEmpty = {\n  prefix: 'fas',\n  iconName: 'temperature-empty',\n  icon: [320, 512, [\"temperature-0\", \"thermometer-0\", \"thermometer-empty\"], \"f2cb\", \"M112 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C233.8 332.6 240 349.5 240 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5L112 112zM160 0C98.1 0 48 50.2 48 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C27.2 304.2 16 334.8 16 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L272 112C272 50.2 221.9 0 160 0zm0 416a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faTemperature0 = faTemperatureEmpty;\nconst faThermometer0 = faTemperatureEmpty;\nconst faThermometerEmpty = faTemperatureEmpty;\nconst faBomb = {\n  prefix: 'fas',\n  iconName: 'bomb',\n  icon: [512, 512, [128163], \"f1e2\", \"M459.1 52.4L442.6 6.5C440.7 2.6 436.5 0 432.1 0s-8.5 2.6-10.4 6.5L405.2 52.4l-46 16.8c-4.3 1.6-7.3 5.9-7.2 10.4c0 4.5 3 8.7 7.2 10.2l45.7 16.8 16.8 45.8c1.5 4.4 5.8 7.5 10.4 7.5s8.9-3.1 10.4-7.5l16.5-45.8 45.7-16.8c4.2-1.5 7.2-5.7 7.2-10.2c0-4.6-3-8.9-7.2-10.4L459.1 52.4zm-132.4 53c-12.5-12.5-32.8-12.5-45.3 0l-2.9 2.9C256.5 100.3 232.7 96 208 96C93.1 96 0 189.1 0 304S93.1 512 208 512s208-93.1 208-208c0-24.7-4.3-48.5-12.2-70.5l2.9-2.9c12.5-12.5 12.5-32.8 0-45.3l-80-80zM200 192c-57.4 0-104 46.6-104 104l0 8c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-8c0-75.1 60.9-136 136-136l8 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-8 0z\"]\n};\nconst faRegistered = {\n  prefix: 'fas',\n  iconName: 'registered',\n  icon: [512, 512, [174], \"f25d\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM160 152c0-13.3 10.7-24 24-24l88 0c44.2 0 80 35.8 80 80c0 28-14.4 52.7-36.3 67l34.1 75.1c5.5 12.1 .1 26.3-11.9 31.8s-26.3 .1-31.8-11.9L268.9 288 208 288l0 72c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-96 0-112zm48 88l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0 64z\"]\n};\nconst faAddressCard = {\n  prefix: 'fas',\n  iconName: 'address-card',\n  icon: [576, 512, [62140, \"contact-card\", \"vcard\"], \"f2bb\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm80 256l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L80 384c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm256-32l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faContactCard = faAddressCard;\nconst faVcard = faAddressCard;\nconst faScaleUnbalancedFlip = {\n  prefix: 'fas',\n  iconName: 'scale-unbalanced-flip',\n  icon: [640, 512, [\"balance-scale-right\"], \"f516\", \"M117.9 62.4c-16.8-5.6-25.8-23.7-20.2-40.5s23.7-25.8 40.5-20.2l113 37.7C265 15.8 290.7 0 320 0c44.2 0 80 35.8 80 80c0 3-.2 5.9-.5 8.8l122.6 40.9c16.8 5.6 25.8 23.7 20.2 40.5s-23.7 25.8-40.5 20.2L366.4 145.2c-4.5 3.2-9.3 5.9-14.4 8.2L352 480c0 17.7-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0 0-294.7c-21-9.2-37.2-27-44.2-49l-125.9-42zM200.4 288L128 163.8 55.6 288l144.9 0zM128 384C65.1 384 12.8 350 2 305.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C243.2 350 190.9 384 128 384zm382.8-92.2L438.4 416l144.9 0L510.8 291.8zm126 141.3C626 478 573.7 512 510.8 512s-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1z\"]\n};\nconst faBalanceScaleRight = faScaleUnbalancedFlip;\nconst faSubscript = {\n  prefix: 'fas',\n  iconName: 'subscript',\n  icon: [512, 512, [], \"f12c\", \"M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l15.3 0 89.6 128L47.3 384 32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-15.3 0L215.1 256l89.6-128 15.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64L32 64zM480 320c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 361.5 404.3 368 416 368l0 80c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-128z\"]\n};\nconst faDiamondTurnRight = {\n  prefix: 'fas',\n  iconName: 'diamond-turn-right',\n  icon: [512, 512, [\"directions\"], \"f5eb\", \"M227.7 11.7c15.6-15.6 40.9-15.6 56.6 0l216 216c15.6 15.6 15.6 40.9 0 56.6l-216 216c-15.6 15.6-40.9 15.6-56.6 0l-216-216c-15.6-15.6-15.6-40.9 0-56.6l216-216zm87.6 137c-4.6-4.6-11.5-5.9-17.4-3.5s-9.9 8.3-9.9 14.8l0 56-64 0c-35.3 0-64 28.7-64 64l0 48c0 13.3 10.7 24 24 24s24-10.7 24-24l0-48c0-8.8 7.2-16 16-16l64 0 0 56c0 6.5 3.9 12.3 9.9 14.8s12.9 1.1 17.4-3.5l80-80c6.2-6.2 6.2-16.4 0-22.6l-80-80z\"]\n};\nconst faDirections = faDiamondTurnRight;\nconst faBurst = {\n  prefix: 'fas',\n  iconName: 'burst',\n  icon: [512, 512, [], \"e4dc\", \"M37.6 4.2C28-2.3 15.2-1.1 7 7s-9.4 21-2.8 30.5l112 163.3L16.6 233.2C6.7 236.4 0 245.6 0 256s6.7 19.6 16.6 22.8l103.1 33.4L66.8 412.8c-4.9 9.3-3.2 20.7 4.3 28.1s18.8 9.2 28.1 4.3l100.6-52.9 33.4 103.1c3.2 9.9 12.4 16.6 22.8 16.6s19.6-6.7 22.8-16.6l33.4-103.1 100.6 52.9c9.3 4.9 20.7 3.2 28.1-4.3s9.2-18.8 4.3-28.1L392.3 312.2l103.1-33.4c9.9-3.2 16.6-12.4 16.6-22.8s-6.7-19.6-16.6-22.8L388.9 198.7l25.7-70.4c3.2-8.8 1-18.6-5.6-25.2s-16.4-8.8-25.2-5.6l-70.4 25.7L278.8 16.6C275.6 6.7 266.4 0 256 0s-19.6 6.7-22.8 16.6l-32.3 99.6L37.6 4.2z\"]\n};\nconst faHouseLaptop = {\n  prefix: 'fas',\n  iconName: 'house-laptop',\n  icon: [640, 512, [\"laptop-house\"], \"e066\", \"M218.3 8.5c12.3-11.3 31.2-11.3 43.4 0l208 192c6.7 6.2 10.3 14.8 10.3 23.5l-144 0c-19.1 0-36.3 8.4-48 21.7l0-37.7c0-8.8-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l64 0 0 128-160 0c-26.5 0-48-21.5-48-48l0-112-32 0c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8.1-35.2l208-192zM352 304l0 144 192 0 0-144-192 0zm-48-16c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32l0 160 32 0c8.8 0 16 7.2 16 16c0 26.5-21.5 48-48 48l-48 0-192 0-48 0c-26.5 0-48-21.5-48-48c0-8.8 7.2-16 16-16l32 0 0-160z\"]\n};\nconst faLaptopHouse = faHouseLaptop;\nconst faFaceTired = {\n  prefix: 'fas',\n  iconName: 'face-tired',\n  icon: [512, 512, [128555, \"tired\"], \"f5c8\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.7 328.7c22-22 53.9-40.7 91.3-40.7s69.3 18.7 91.3 40.7c11.1 11.1 20.1 23.4 26.4 35.4c6.2 11.7 10.3 24.4 10.3 35.9c0 5.2-2.6 10.2-6.9 13.2s-9.8 3.7-14.7 1.8l-20.5-7.7c-26.9-10.1-55.5-15.3-84.3-15.3l-3.2 0c-28.8 0-57.3 5.2-84.3 15.3L149.6 415c-4.9 1.8-10.4 1.2-14.7-1.8s-6.9-7.9-6.9-13.2c0-11.6 4.2-24.2 10.3-35.9c6.3-12 15.3-24.3 26.4-35.4zm-31.2-182l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"]\n};\nconst faTired = faFaceTired;\nconst faMoneyBills = {\n  prefix: 'fas',\n  iconName: 'money-bills',\n  icon: [640, 512, [], \"e1f3\", \"M96 96l0 224c0 35.3 28.7 64 64 64l416 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L160 32c-35.3 0-64 28.7-64 64zm64 160c35.3 0 64 28.7 64 64l-64 0 0-64zM224 96c0 35.3-28.7 64-64 64l0-64 64 0zM576 256l0 64-64 0c0-35.3 28.7-64 64-64zM512 96l64 0 0 64c-35.3 0-64-28.7-64-64zM288 208a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120L0 360c0 66.3 53.7 120 120 120l400 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-400 0c-39.8 0-72-32.2-72-72l0-240z\"]\n};\nconst faSmog = {\n  prefix: 'fas',\n  iconName: 'smog',\n  icon: [640, 512, [], \"f75f\", \"M32 144c0 79.5 64.5 144 144 144l123.3 0c22.6 19.9 52.2 32 84.7 32s62.1-12.1 84.7-32l27.3 0c61.9 0 112-50.1 112-112s-50.1-112-112-112c-10.7 0-21 1.5-30.8 4.3C443.8 27.7 401.1 0 352 0c-32.6 0-62.4 12.2-85.1 32.3C242.1 12.1 210.5 0 176 0C96.5 0 32 64.5 32 144zM616 368l-336 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-64 96l-112 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-192 0L24 464c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0c13.3 0 24-10.7 24-24s-10.7-24-24-24zM224 392c0-13.3-10.7-24-24-24L96 368c-13.3 0-24 10.7-24 24s10.7 24 24 24l104 0c13.3 0 24-10.7 24-24z\"]\n};\nconst faCrutch = {\n  prefix: 'fas',\n  iconName: 'crutch',\n  icon: [512, 512, [], \"f7f7\", \"M297.4 9.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0zm-96 144l-34.8 34.8c-12.9 12.9-21.9 29.2-25.8 47.1L116.8 342.9c-1.3 5.9-4.3 11.4-8.6 15.7L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l98.8-98.8c4.3-4.3 9.7-7.3 15.7-8.6l107.6-23.9c17.8-4 34.1-12.9 47.1-25.8l34.7-34.7c0 0 .1-.1 .1-.1s.1-.1 .1-.1l74.6-74.6-45.3-45.3L336 242.7 269.3 176l52.1-52.1L276.1 78.6l-74.7 74.7zM224 221.3L290.7 288l-12.2 12.2c-4.3 4.3-9.7 7.3-15.7 8.6l-76.7 17 17-76.7c1.3-5.9 4.3-11.4 8.6-15.7L224 221.3z\"]\n};\nconst faFontAwesome = {\n  prefix: 'fas',\n  iconName: 'font-awesome',\n  icon: [512, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M91.7 96C106.3 86.8 116 70.5 116 52C116 23.3 92.7 0 64 0S12 23.3 12 52c0 16.7 7.8 31.5 20 41l0 3 0 352 0 64 64 0 0-64 373.6 0c14.6 0 26.4-11.8 26.4-26.4c0-3.7-.8-7.3-2.3-10.7L432 272l61.7-138.9c1.5-3.4 2.3-7 2.3-10.7c0-14.6-11.8-26.4-26.4-26.4L91.7 96z\"]\n};\nconst faFontAwesomeFlag = faFontAwesome;\nconst faFontAwesomeLogoFull = faFontAwesome;\nconst faCloudArrowUp = {\n  prefix: 'fas',\n  iconName: 'cloud-arrow-up',\n  icon: [640, 512, [62338, \"cloud-upload\", \"cloud-upload-alt\"], \"f0ee\", \"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128l-368 0zm79-217c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L296 392c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0l-80 80z\"]\n};\nconst faCloudUpload = faCloudArrowUp;\nconst faCloudUploadAlt = faCloudArrowUp;\nconst faPalette = {\n  prefix: 'fas',\n  iconName: 'palette',\n  icon: [512, 512, [127912], \"f53f\", \"M512 256c0 .9 0 1.8 0 2.7c-.4 36.5-33.6 61.3-70.1 61.3L344 320c-26.5 0-48 21.5-48 48c0 3.4 .4 6.7 1 9.9c2.1 10.2 6.5 20 10.8 29.9c6.1 13.8 12.1 27.5 12.1 42c0 31.8-21.6 60.7-53.4 62c-3.5 .1-7 .2-10.6 .2C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faArrowsTurnRight = {\n  prefix: 'fas',\n  iconName: 'arrows-turn-right',\n  icon: [448, 512, [], \"e4c0\", \"M297.4 9.4c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L338.7 160 128 160c-35.3 0-64 28.7-64 64l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32C0 153.3 57.3 96 128 96l210.7 0L297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zm-96 256c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 416 96 416c-17.7 0-32 14.3-32 32l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-53 43-96 96-96l146.7 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\"]\n};\nconst faVest = {\n  prefix: 'fas',\n  iconName: 'vest',\n  icon: [448, 512, [], \"e085\", \"M207.1 237.4L151.2 69.7C168.6 79.7 192.6 88 224 88s55.4-8.3 72.8-18.3L226.5 280.6c-1.6 4.9-2.5 10-2.5 15.2L224 464c0 26.5 21.5 48 48 48l128 0c26.5 0 48-21.5 48-48l0-193.5c0-9.5-2.8-18.7-8.1-26.6l-47.9-71.8c-5.3-7.9-8.1-17.1-8.1-26.6l0-17.5 0-73.7 0-6.3c0-26.5-21.5-48-48-48l-4.5 0c-.2 0-.4 0-.6 0c-.4 0-.8 0-1.2 0C311 0 295.7 9.7 285.7 18.8C276.4 27.2 257.2 40 224 40s-52.4-12.8-61.7-21.2C152.3 9.7 137 0 118.3 0c-.4 0-.8 0-1.2 0c-.2 0-.4 0-.6 0L112 0C85.5 0 64 21.5 64 48l0 6.3L64 128l0 17.5c0 9.5-2.8 18.7-8.1 26.6L8.1 243.9C2.8 251.8 0 261.1 0 270.5L0 464c0 26.5 21.5 48 48 48l128 0c9.9 0 19-3 26.7-8.1C195.9 492.2 192 478.5 192 464l0-168.2c0-8.6 1.4-17.1 4.1-25.3l11-33.1zM347.3 356.7l48 48c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-48-48c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0zm-294.6 48l48-48c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-48 48c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6z\"]\n};\nconst faFerry = {\n  prefix: 'fas',\n  iconName: 'ferry',\n  icon: [576, 512, [], \"e4ea\", \"M224 0L352 0c17.7 0 32 14.3 32 32l75.1 0c20.6 0 31.6 24.3 18.1 39.8L456 96 120 96 98.8 71.8C85.3 56.3 96.3 32 116.9 32L192 32c0-17.7 14.3-32 32-32zM96 128l384 0c17.7 0 32 14.3 32 32l0 123.5c0 13.3-4.2 26.3-11.9 37.2l-51.4 71.9c-1.9 1.1-3.7 2.2-5.5 3.5c-15.5 10.7-34 18-51 19.9l-16.5 0c-17.1-1.8-35-9-50.8-19.9c-22.1-15.5-51.6-15.5-73.7 0c-14.8 10.2-32.5 18-50.6 19.9l-16.6 0c-17-1.8-35.6-9.2-51-19.9c-1.8-1.3-3.7-2.4-5.6-3.5L75.9 320.7C68.2 309.8 64 296.8 64 283.5L64 160c0-17.7 14.3-32 32-32zm32 64l0 96 320 0 0-96-320 0zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.3-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faArrowsDownToPeople = {\n  prefix: 'fas',\n  iconName: 'arrows-down-to-people',\n  icon: [640, 512, [], \"e4b9\", \"M144 0c-13.3 0-24 10.7-24 24l0 118.1L97 119c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23L168 24c0-13.3-10.7-24-24-24zM360 200a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM184 296a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm312 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM200 441.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-36.3-67.5c1.7-1.7 3.2-3.6 4.3-5.8L264 345.5l0 54.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-54.5 26.9 49.9c1.2 2.2 2.6 4.1 4.3 5.8l-36.3 67.5c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L440 441.5l0 38.5c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5 26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-16.3 0-31.9 4.5-45.4 12.6l-33.6-62.3c-15.3-28.5-45.1-46.3-77.5-46.3l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3l-33.6 62.3c-13.5-8.1-29.1-12.6-45.4-12.6l-19.5 0c-32.4 0-62.1 17.8-77.5 46.3L18.9 468.6c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L88 441.5 88 480c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32l0-38.5zM415 153l64 64c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23L520 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 118.1-23-23c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9z\"]\n};\nconst faSeedling = {\n  prefix: 'fas',\n  iconName: 'seedling',\n  icon: [512, 512, [127793, \"sprout\"], \"f4d8\", \"M512 32c0 113.6-84.6 207.5-194.2 222c-7.1-53.4-30.6-101.6-65.3-139.3C290.8 46.3 364 0 448 0l32 0c17.7 0 32 14.3 32 32zM0 96C0 78.3 14.3 64 32 64l32 0c123.7 0 224 100.3 224 224l0 32 0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160C100.3 320 0 219.7 0 96z\"]\n};\nconst faSprout = faSeedling;\nconst faLeftRight = {\n  prefix: 'fas',\n  iconName: 'left-right',\n  icon: [512, 512, [8596, \"arrows-alt-h\"], \"f337\", \"M504.3 273.6c4.9-4.5 7.7-10.9 7.7-17.6s-2.8-13-7.7-17.6l-112-104c-7-6.5-17.2-8.2-25.9-4.4s-14.4 12.5-14.4 22l0 56-192 0 0-56c0-9.5-5.7-18.2-14.4-22s-18.9-2.1-25.9 4.4l-112 104C2.8 243 0 249.3 0 256s2.8 13 7.7 17.6l112 104c7 6.5 17.2 8.2 25.9 4.4s14.4-12.5 14.4-22l0-56 192 0 0 56c0 9.5 5.7 18.2 14.4 22s18.9 2.1 25.9-4.4l112-104z\"]\n};\nconst faArrowsAltH = faLeftRight;\nconst faBoxesPacking = {\n  prefix: 'fas',\n  iconName: 'boxes-packing',\n  icon: [640, 512, [], \"e4c7\", \"M256 48c0-26.5 21.5-48 48-48L592 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48l-210.7 0c1.8-5 2.7-10.4 2.7-16l0-242.7c18.6-6.6 32-24.4 32-45.3l0-32c0-26.5-21.5-48-48-48l-112 0 0-80zM571.3 347.3c6.2-6.2 6.2-16.4 0-22.6l-64-64c-6.2-6.2-16.4-6.2-22.6 0l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L480 310.6 480 432c0 8.8 7.2 16 16 16s16-7.2 16-16l0-121.4 36.7 36.7c6.2 6.2 16.4 6.2 22.6 0zM0 176c0-8.8 7.2-16 16-16l352 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16L16 224c-8.8 0-16-7.2-16-16l0-32zm352 80l0 224c0 17.7-14.3 32-32 32L64 512c-17.7 0-32-14.3-32-32l0-224 320 0zM144 320c-8.8 0-16 7.2-16 16s7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0z\"]\n};\nconst faCircleArrowLeft = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-left',\n  icon: [512, 512, [\"arrow-circle-left\"], \"f0a8\", \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM215 127c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-71 71L392 232c13.3 0 24 10.7 24 24s-10.7 24-24 24l-214.1 0 71 71c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L103 273c-9.4-9.4-9.4-24.6 0-33.9L215 127z\"]\n};\nconst faArrowCircleLeft = faCircleArrowLeft;\nconst faGroupArrowsRotate = {\n  prefix: 'fas',\n  iconName: 'group-arrows-rotate',\n  icon: [512, 512, [], \"e4f6\", \"M201.1 71.9c16.9-5 26.6-22.9 21.5-39.8s-22.9-26.6-39.8-21.5c-21.5 6.4-41.8 15.5-60.6 27C114.3 34 105.4 32 96 32C60.7 32 32 60.7 32 96c0 9.4 2 18.3 5.6 26.3c-11.5 18.7-20.6 39-27 60.6c-5 16.9 4.6 34.8 21.5 39.8s34.8-4.6 39.8-21.5c4.3-14.6 10.4-28.5 17.9-41.4c2 .2 4.1 .3 6.1 .3c35.3 0 64-28.7 64-64c0-2.1-.1-4.1-.3-6.1c12.9-7.5 26.8-13.6 41.4-17.9zm128-61.3c-16.9-5-34.8 4.6-39.8 21.5s4.6 34.8 21.5 39.8c14.6 4.3 28.5 10.4 41.4 17.9c-.2 2-.3 4.1-.3 6.1c0 35.3 28.7 64 64 64c2.1 0 4.1-.1 6.2-.3c7.5 12.9 13.6 26.8 17.9 41.4c5 16.9 22.9 26.6 39.8 21.5s26.6-22.9 21.5-39.8c-6.4-21.5-15.5-41.8-27-60.6c3.6-8 5.6-16.9 5.6-26.3c0-35.3-28.7-64-64-64c-9.4 0-18.3 2-26.3 5.6c-18.7-11.5-39-20.6-60.6-27zM71.9 310.9c-5-16.9-22.9-26.6-39.8-21.5s-26.6 22.9-21.5 39.8c6.4 21.5 15.5 41.8 27 60.6C34 397.7 32 406.6 32 416c0 35.3 28.7 64 64 64c9.4 0 18.3-2 26.3-5.6c18.7 11.5 39 20.6 60.6 27c16.9 5 34.8-4.6 39.8-21.5s-4.6-34.8-21.5-39.8c-14.6-4.3-28.5-10.4-41.4-17.9c.2-2 .3-4.1 .3-6.2c0-35.3-28.7-64-64-64c-2.1 0-4.1 .1-6.2 .3c-7.5-12.9-13.6-26.8-17.9-41.4zm429.4 18.3c5-16.9-4.6-34.8-21.5-39.8s-34.8 4.6-39.8 21.5c-4.3 14.6-10.4 28.5-17.9 41.4c-2-.2-4.1-.3-6.2-.3c-35.3 0-64 28.7-64 64c0 2.1 .1 4.1 .3 6.2c-12.9 7.5-26.8 13.6-41.4 17.9c-16.9 5-26.6 22.9-21.5 39.8s22.9 26.6 39.8 21.5c21.5-6.4 41.8-15.5 60.6-27c8 3.6 16.9 5.6 26.3 5.6c35.3 0 64-28.7 64-64c0-9.4-2-18.3-5.6-26.3c11.5-18.7 20.6-39 27-60.6zM192.8 256.8c0-15.6 5.6-29.9 14.9-41.1L223 231c6.6 6.6 17.8 1.9 17.8-7.4l0-60.5c0-5.7-4.7-10.4-10.4-10.4l-60.5 0c-9.3 0-13.9 11.2-7.4 17.8l11.2 11.2c-17.9 19.8-28.9 46.2-28.9 75.1c0 43.6 24.9 81.3 61.1 99.8c11.8 6 26.3 1.4 32.3-10.4s1.4-26.3-10.4-32.3c-20.8-10.6-34.9-32.2-34.9-57zm93.1-58.6c20.8 10.6 34.9 32.2 34.9 57c0 15.6-5.6 29.9-14.9 41.1L290.6 281c-6.6-6.6-17.8-1.9-17.8 7.4l0 60.5c0 5.7 4.7 10.4 10.4 10.4l60.5 0c9.3 0 13.9-11.2 7.4-17.8l-11.2-11.2c17.9-19.8 28.9-46.2 28.9-75.1c0-43.6-24.9-81.3-61.1-99.8c-11.8-6-26.3-1.4-32.3 10.4s-1.4 26.3 10.4 32.3z\"]\n};\nconst faBowlFood = {\n  prefix: 'fas',\n  iconName: 'bowl-food',\n  icon: [512, 512, [], \"e4c6\", \"M0 192c0-35.3 28.7-64 64-64c.5 0 1.1 0 1.6 0C73 91.5 105.3 64 144 64c15 0 29 4.1 40.9 11.2C198.2 49.6 225.1 32 256 32s57.8 17.6 71.1 43.2C339 68.1 353 64 368 64c38.7 0 71 27.5 78.4 64c.5 0 1.1 0 1.6 0c35.3 0 64 28.7 64 64c0 11.7-3.1 22.6-8.6 32L8.6 224C3.1 214.6 0 203.7 0 192zm0 91.4C0 268.3 12.3 256 27.4 256l457.1 0c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28l-231.5 0c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4z\"]\n};\nconst faCandyCane = {\n  prefix: 'fas',\n  iconName: 'candy-cane',\n  icon: [512, 512, [], \"f786\", \"M348.8 131.5c3.7-2.3 7.9-3.5 12.2-3.5c12.7 0 23 10.3 23 23l0 5.6c0 9.9-5.1 19.1-13.5 24.3L30.1 393.7C.1 412.5-9 451.9 9.7 481.9s58.2 39.1 88.2 20.4L438.4 289.5c45.8-28.6 73.6-78.8 73.6-132.8l0-5.6C512 67.6 444.4 0 361 0c-28.3 0-56 8-80.1 23L254.1 39.7c-30 18.7-39.1 58.2-20.4 88.2s58.2 39.1 88.2 20.4l26.8-16.8zM298.4 49.8c9.2-5.7 19.1-10.1 29.4-13.1L348 97.5c-5.7 1.4-11.2 3.7-16.3 6.8l-12.6 7.9L298.4 49.8zm88.5 52.7l46.2-46.2c8.5 6.5 16.1 14.1 22.6 22.6l-46.2 46.2c-5.1-9.6-13-17.5-22.6-22.6zm28.9 59.3l61.6 20.5c-2.2 10.5-5.8 20.7-10.5 30.2l-62-20.7c6.2-8.8 10.1-19.1 11-30.1zm-86.1 82.5l60.4 37.7-30.2 18.9-60.4-37.7 30.2-18.9zm-107.2 67l60.4 37.7-30.2 18.9-60.4-37.7 30.2-18.9zM119.3 375.7l60.4 37.7-30.2 18.9L89.1 394.6l30.2-18.9z\"]\n};\nconst faArrowDownWideShort = {\n  prefix: 'fas',\n  iconName: 'arrow-down-wide-short',\n  icon: [576, 512, [\"sort-amount-asc\", \"sort-amount-down\"], \"f160\", \"M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L320 96z\"]\n};\nconst faSortAmountAsc = faArrowDownWideShort;\nconst faSortAmountDown = faArrowDownWideShort;\nconst faCloudBolt = {\n  prefix: 'fas',\n  iconName: 'cloud-bolt',\n  icon: [512, 512, [127785, \"thunderstorm\"], \"f76c\", \"M0 224c0 53 43 96 96 96l47.2 0L290 202.5c17.6-14.1 42.6-14 60.2 .2s22.8 38.6 12.8 58.8L333.7 320l18.3 0 64 0c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0c1.1-5.2 1.6-10.5 1.6-16c0-44.2-35.8-80-80-80c-24.3 0-46.1 10.9-60.8 28C256.5 24.3 219.1 0 176 0C114.1 0 64 50.1 64 112c0 7.1 .7 14.1 1.9 20.8C27.6 145.4 0 181.5 0 224zm330.1 3.6c-5.8-4.7-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7l70.1 0L177.7 488.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7l-70.1 0 52.4-104.8c3.4-6.7 1.6-14.9-4.2-19.6z\"]\n};\nconst faThunderstorm = faCloudBolt;\nconst faTextSlash = {\n  prefix: 'fas',\n  iconName: 'text-slash',\n  icon: [640, 512, [\"remove-format\"], \"f87d\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L355.7 253.5 400.2 96 503 96 497 120.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l11-44.1C577.6 61.3 554.7 32 523.5 32L376.1 32l-.3 0L204.5 32c-22 0-41.2 15-46.6 36.4l-6.3 25.2L38.8 5.1zm168 131.7c.1-.3 .2-.7 .3-1L217 96l116.7 0L301.3 210.8l-94.5-74.1zM243.3 416L192 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-42.2 0 17.6-62.1L272.9 311 243.3 416z\"]\n};\nconst faRemoveFormat = faTextSlash;\nconst faFaceSmileWink = {\n  prefix: 'fas',\n  iconName: 'face-smile-wink',\n  icon: [512, 512, [128521, \"smile-wink\"], \"f4da\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm156.4 25.6c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2c-17.6-23.5-52.8-23.5-70.4 0z\"]\n};\nconst faSmileWink = faFaceSmileWink;\nconst faFileWord = {\n  prefix: 'fas',\n  iconName: 'file-word',\n  icon: [384, 512, [], \"f1c2\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM111 257.1l26.8 89.2 31.6-90.3c3.4-9.6 12.5-16.1 22.7-16.1s19.3 6.4 22.7 16.1l31.6 90.3L273 257.1c3.8-12.7 17.2-19.9 29.9-16.1s19.9 17.2 16.1 29.9l-48 160c-3 10-12 16.9-22.4 17.1s-19.8-6.2-23.2-16.1L192 336.6l-33.3 95.3c-3.4 9.8-12.8 16.3-23.2 16.1s-19.5-7.1-22.4-17.1l-48-160c-3.8-12.7 3.4-26.1 16.1-29.9s26.1 3.4 29.9 16.1z\"]\n};\nconst faFilePowerpoint = {\n  prefix: 'fas',\n  iconName: 'file-powerpoint',\n  icon: [384, 512, [], \"f1c4\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM136 240l68 0c42 0 76 34 76 76s-34 76-76 76l-44 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-56 0-104c0-13.3 10.7-24 24-24zm68 104c15.5 0 28-12.5 28-28s-12.5-28-28-28l-44 0 0 56 44 0z\"]\n};\nconst faArrowsLeftRight = {\n  prefix: 'fas',\n  iconName: 'arrows-left-right',\n  icon: [512, 512, [\"arrows-h\"], \"f07e\", \"M406.6 374.6l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224l-293.5 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288l293.5 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"]\n};\nconst faArrowsH = faArrowsLeftRight;\nconst faHouseLock = {\n  prefix: 'fas',\n  iconName: 'house-lock',\n  icon: [640, 512, [], \"e510\", \"M384 480c0 11.7 3.1 22.6 8.6 32l-.6 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L490.7 166.3C447.2 181.7 416 223.2 416 272l0 24.6c-19.1 11.1-32 31.7-32 55.4l0 128zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faCloudArrowDown = {\n  prefix: 'fas',\n  iconName: 'cloud-arrow-down',\n  icon: [640, 512, [62337, \"cloud-download\", \"cloud-download-alt\"], \"f0ed\", \"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128l-368 0zm79-167l80 80c9.4 9.4 24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-39 39L344 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 134.1-39-39c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9z\"]\n};\nconst faCloudDownload = faCloudArrowDown;\nconst faCloudDownloadAlt = faCloudArrowDown;\nconst faChildren = {\n  prefix: 'fas',\n  iconName: 'children',\n  icon: [640, 512, [], \"e4e1\", \"M160 0a64 64 0 1 1 0 128A64 64 0 1 1 160 0zM88 480l0-80-17.8 0c-10.9 0-18.6-10.7-15.2-21.1l31.1-93.4L57.5 323.3c-10.7 14.1-30.8 16.8-44.8 6.2s-16.8-30.7-6.2-44.8L65.4 207c22.4-29.6 57.5-47 94.6-47s72.2 17.4 94.6 47l58.9 77.7c10.7 14.1 7.9 34.2-6.2 44.8s-34.2 7.9-44.8-6.2l-28.6-37.8L265 378.9c3.5 10.4-4.3 21.1-15.2 21.1L232 400l0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-80-16 0 0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32zM480 0a64 64 0 1 1 0 128A64 64 0 1 1 480 0zm-8 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-179.5L395.1 321c-9.4 15-29.2 19.4-44.1 10s-19.4-29.2-10-44.1l51.7-82.1c17.6-27.9 48.3-44.9 81.2-44.9l12.3 0c33 0 63.7 16.9 81.2 44.9L619.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L552 300.5 552 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0z\"]\n};\nconst faChalkboard = {\n  prefix: 'fas',\n  iconName: 'chalkboard',\n  icon: [576, 512, [\"blackboard\"], \"f51b\", \"M96 32C60.7 32 32 60.7 32 96l0 288 64 0L96 96l384 0 0 288 64 0 0-288c0-35.3-28.7-64-64-64L96 32zM224 384l0 32L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-128 0 0-32c0-17.7-14.3-32-32-32l-128 0c-17.7 0-32 14.3-32 32z\"]\n};\nconst faBlackboard = faChalkboard;\nconst faUserLargeSlash = {\n  prefix: 'fas',\n  iconName: 'user-large-slash',\n  icon: [640, 512, [\"user-alt-slash\"], \"f4fa\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L381.9 274c48.5-23.2 82.1-72.7 82.1-130C464 64.5 399.5 0 320 0C250.4 0 192.4 49.3 178.9 114.9L38.8 5.1zM545.5 512L528 512 284.3 320l-59 0C136.2 320 64 392.2 64 481.3c0 17 13.8 30.7 30.7 30.7l450.6 0 .3 0z\"]\n};\nconst faUserAltSlash = faUserLargeSlash;\nconst faEnvelopeOpen = {\n  prefix: 'fas',\n  iconName: 'envelope-open',\n  icon: [512, 512, [62135], \"f2b6\", \"M64 208.1L256 65.9 448 208.1l0 47.4L289.5 373c-9.7 7.2-21.4 11-33.5 11s-23.8-3.9-33.5-11L64 255.5l0-47.4zM256 0c-12.1 0-23.8 3.9-33.5 11L25.9 156.7C9.6 168.8 0 187.8 0 208.1L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-239.9c0-20.3-9.6-39.4-25.9-51.4L289.5 11C279.8 3.9 268.1 0 256 0z\"]\n};\nconst faHandshakeSimpleSlash = {\n  prefix: 'fas',\n  iconName: 'handshake-simple-slash',\n  icon: [640, 512, [\"handshake-alt-slash\"], \"e05f\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-135-105.8c-1.1-11.4-6.3-22.3-15.3-30.7l-134.2-123-23.4 18.2-26-20.3 77.2-60.1c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L550.2 352l41.8 0c26.5 0 48-21.5 48-48l0-128c0-26.5-21.5-48-48-48l-76 0-4 0-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2l-89.7 72.6-25.8-20.3 81.8-66.2c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-35.5 23.7L38.8 5.1zM0 176L0 304c0 26.5 21.5 48 48 48l108.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c.8-.8 1.5-1.7 2.2-2.6L41.2 128.5C17.9 131.8 0 151.8 0 176z\"]\n};\nconst faHandshakeAltSlash = faHandshakeSimpleSlash;\nconst faMattressPillow = {\n  prefix: 'fas',\n  iconName: 'mattress-pillow',\n  icon: [640, 512, [], \"e525\", \"M256 64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l192 0 0-384zm32 384l288 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L288 64l0 384zM64 160c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-192z\"]\n};\nconst faGuaraniSign = {\n  prefix: 'fas',\n  iconName: 'guarani-sign',\n  icon: [384, 512, [], \"e19a\", \"M192 0c-17.7 0-32 14.3-32 32l0 34.7C69.2 81.9 0 160.9 0 256s69.2 174.1 160 189.3l0 34.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-34.7c90.8-15.2 160-94.2 160-189.3c0-17.7-14.3-32-32-32l-128 0 0-92c22.1 5.7 41.8 17.1 57.6 32.6c12.6 12.4 32.9 12.2 45.3-.4s12.2-32.9-.5-45.3C299 92 263.5 73.3 224 66.7L224 32c0-17.7-14.3-32-32-32zM160 132L160 380c-55.2-14.2-96-64.3-96-124s40.8-109.8 96-124zM224 380l0-92 92 0c-11.6 45-47 80.4-92 92z\"]\n};\nconst faArrowsRotate = {\n  prefix: 'fas',\n  iconName: 'arrows-rotate',\n  icon: [512, 512, [128472, \"refresh\", \"sync\"], \"f021\", \"M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160 352 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l111.5 0c0 0 0 0 0 0l.4 0c17.7 0 32-14.3 32-32l0-112c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1L16 432c0 17.7 14.3 32 32 32s32-14.3 32-32l0-35.1 17.6 17.5c0 0 0 0 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.8c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352l34.4 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L48.4 288c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z\"]\n};\nconst faRefresh = faArrowsRotate;\nconst faSync = faArrowsRotate;\nconst faFireExtinguisher = {\n  prefix: 'fas',\n  iconName: 'fire-extinguisher',\n  icon: [512, 512, [129519], \"f134\", \"M500.3 7.3C507.7 13.3 512 22.4 512 32l0 96c0 9.6-4.3 18.7-11.7 24.7s-17.2 8.5-26.6 6.6l-160-32C301.5 124.9 292 115.7 289 104l-65 0 0 34.8c37.8 18 64 56.5 64 101.2l0 144L64 384l0-144c0-44.7 26.2-83.2 64-101.2l0-28.8c-36.2 11.1-66 36.9-82.3 70.5c-5.8 11.9-20.2 16.9-32.1 11.1S-3.3 171.4 2.5 159.5C26.7 109.8 72.7 72.6 128 60.4L128 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 24 65 0c3-11.7 12.5-20.9 24.7-23.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM288 416l0 32c0 35.3-28.7 64-64 64l-96 0c-35.3 0-64-28.7-64-64l0-32 224 0zM176 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faCruzeiroSign = {\n  prefix: 'fas',\n  iconName: 'cruzeiro-sign',\n  icon: [448, 512, [], \"e152\", \"M96 256c0-88.4 71.6-160 160-160c41 0 78.3 15.4 106.7 40.7c13.2 11.8 33.4 10.7 45.2-2.5s10.7-33.4-2.5-45.2c-39.6-35.5-92-57-149.3-57C132.3 32 32 132.3 32 256s100.3 224 224 224c57.4 0 109.7-21.6 149.3-57c13.2-11.8 14.3-32 2.5-45.2s-32-14.3-45.2-2.5C334.3 400.6 297 416 256 416l0-96 0-8.7c0-12.8 10.4-23.3 23.3-23.3c4.6 0 9.1 1.4 12.9 3.9l10.1 6.7c14.7 9.8 34.6 5.8 44.4-8.9s5.8-34.6-8.9-44.4l-10.1-6.7c-14.3-9.6-31.2-14.7-48.4-14.7c-12.4 0-24.2 2.6-34.9 7.3c-5.5-4.5-12.6-7.3-20.3-7.3c-17.7 0-32 14.3-32 32l0 55.3 0 8.7 0 82.7C135.5 378 96 321.6 96 256z\"]\n};\nconst faGreaterThanEqual = {\n  prefix: 'fas',\n  iconName: 'greater-than-equal',\n  icon: [448, 512, [], \"f532\", \"M52.1 93.7C35.7 87.1 27.7 68.5 34.3 52.1s25.2-24.4 41.6-17.8l320 128C408 167.1 416 178.9 416 192s-8 24.9-20.1 29.7l-320 128c-16.4 6.6-35-1.4-41.6-17.8s1.4-35 17.8-41.6L297.8 192 52.1 93.7zM416 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0z\"]\n};\nconst faShieldHalved = {\n  prefix: 'fas',\n  iconName: 'shield-halved',\n  icon: [512, 512, [\"shield-alt\"], \"f3ed\", \"M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8l0 378.1C394 378 431.1 230.1 432 141.4L256 66.8s0 0 0 0z\"]\n};\nconst faShieldAlt = faShieldHalved;\nconst faBookAtlas = {\n  prefix: 'fas',\n  iconName: 'book-atlas',\n  icon: [448, 512, [\"atlas\"], \"f558\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zM247.4 283.8c-3.7 3.7-6.2 4.2-7.4 4.2s-3.7-.5-7.4-4.2c-3.8-3.7-8-10-11.8-18.9c-6.2-14.5-10.8-34.3-12.2-56.9l63 0c-1.5 22.6-6 42.4-12.2 56.9c-3.8 8.9-8 15.2-11.8 18.9zm42.7-9.9c7.3-18.3 12-41.1 13.4-65.9l31.1 0c-4.7 27.9-21.4 51.7-44.5 65.9zm0-163.8c23.2 14.2 39.9 38 44.5 65.9l-31.1 0c-1.4-24.7-6.1-47.5-13.4-65.9zM368 192a128 128 0 1 0 -256 0 128 128 0 1 0 256 0zM145.3 208l31.1 0c1.4 24.7 6.1 47.5 13.4 65.9c-23.2-14.2-39.9-38-44.5-65.9zm31.1-32l-31.1 0c4.7-27.9 21.4-51.7 44.5-65.9c-7.3 18.3-12 41.1-13.4 65.9zm56.1-75.8c3.7-3.7 6.2-4.2 7.4-4.2s3.7 .5 7.4 4.2c3.8 3.7 8 10 11.8 18.9c6.2 14.5 10.8 34.3 12.2 56.9l-63 0c1.5-22.6 6-42.4 12.2-56.9c3.8-8.9 8-15.2 11.8-18.9z\"]\n};\nconst faAtlas = faBookAtlas;\nconst faVirus = {\n  prefix: 'fas',\n  iconName: 'virus',\n  icon: [512, 512, [], \"e074\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11.5c0 49.9-60.3 74.9-95.6 39.6L120.2 75C107.7 62.5 87.5 62.5 75 75s-12.5 32.8 0 45.3l8.2 8.2C118.4 163.7 93.4 224 43.5 224L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l11.5 0c49.9 0 74.9 60.3 39.6 95.6L75 391.8c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l8.2-8.2c35.3-35.3 95.6-10.3 95.6 39.6l0 11.5c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11.5c0-49.9 60.3-74.9 95.6-39.6l8.2 8.2c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-8.2-8.2c-35.3-35.3-10.3-95.6 39.6-95.6l11.5 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-11.5 0c-49.9 0-74.9-60.3-39.6-95.6l8.2-8.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-8.2 8.2C348.3 118.4 288 93.4 288 43.5L288 32zM176 224a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm128 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faEnvelopeCircleCheck = {\n  prefix: 'fas',\n  iconName: 'envelope-circle-check',\n  icon: [640, 512, [], \"e4e8\", \"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0l57.4-43c23.9-59.8 79.7-103.3 146.3-109.8l13.9-10.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176 0 384c0 35.3 28.7 64 64 64l296.2 0C335.1 417.6 320 378.5 320 336c0-5.6 .3-11.1 .8-16.6l-26.4 19.8zM640 336a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 353.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faLayerGroup = {\n  prefix: 'fas',\n  iconName: 'layer-group',\n  icon: [576, 512, [], \"f5fd\", \"M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 209.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2zm-152 198.2l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z\"]\n};\nconst faArrowsToDot = {\n  prefix: 'fas',\n  iconName: 'arrows-to-dot',\n  icon: [512, 512, [], \"e4be\", \"M256 0c17.7 0 32 14.3 32 32l0 32 32 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-64 64c-12.5 12.5-32.8 12.5-45.3 0l-64-64c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l32 0 0-32c0-17.7 14.3-32 32-32zM169.4 393.4l64-64c12.5-12.5 32.8-12.5 45.3 0l64 64c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9zM32 224l32 0 0-32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c12.5 12.5 12.5 32.8 0 45.3l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3l64-64c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 32 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-64-64zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faArchway = {\n  prefix: 'fas',\n  iconName: 'archway',\n  icon: [512, 512, [], \"f557\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 64 0 0-128c0-53 43-96 96-96s96 43 96 96l0 128 64 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-288L32 128l0 288z\"]\n};\nconst faHeartCircleCheck = {\n  prefix: 'fas',\n  iconName: 'heart-circle-check',\n  icon: [576, 512, [], \"e4fd\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L416 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faHouseChimneyCrack = {\n  prefix: 'fas',\n  iconName: 'house-chimney-crack',\n  icon: [576, 512, [\"house-damage\"], \"f6f1\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-122.1 0L288 448l80.8-67.3c7.8-6.5 7.6-18.6-.4-24.9L250.6 263.2c-14.6-11.5-33.8 7-22.8 22L288 368l-85.5 71.2c-6.1 5-7.5 13.8-3.5 20.5L230.4 512l-102.3 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7 416 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 121 52.8 46.4c8 7 12 15 11 24z\"]\n};\nconst faHouseDamage = faHouseChimneyCrack;\nconst faFileZipper = {\n  prefix: 'fas',\n  iconName: 'file-zipper',\n  icon: [384, 512, [\"file-archive\"], \"f1c6\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM96 48c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm-6.3 71.8c3.7-14 16.4-23.8 30.9-23.8l14.8 0c14.5 0 27.2 9.7 30.9 23.8l23.5 88.2c1.4 5.4 2.1 10.9 2.1 16.4c0 35.2-28.8 63.7-64 63.7s-64-28.5-64-63.7c0-5.5 .7-11.1 2.1-16.4l23.5-88.2zM112 336c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0z\"]\n};\nconst faFileArchive = faFileZipper;\nconst faSquare = {\n  prefix: 'fas',\n  iconName: 'square',\n  icon: [448, 512, [9632, 9723, 9724, 61590], \"f0c8\", \"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96z\"]\n};\nconst faMartiniGlassEmpty = {\n  prefix: 'fas',\n  iconName: 'martini-glass-empty',\n  icon: [512, 512, [\"glass-martini\"], \"f000\", \"M32 0C19.1 0 7.4 7.8 2.4 19.8s-2.2 25.7 6.9 34.9L224 269.3 224 448l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-178.7L502.6 54.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 0 480 0L32 0zM256 210.7L109.3 64l293.5 0L256 210.7z\"]\n};\nconst faGlassMartini = faMartiniGlassEmpty;\nconst faCouch = {\n  prefix: 'fas',\n  iconName: 'couch',\n  icon: [640, 512, [], \"f4b8\", \"M64 160C64 89.3 121.3 32 192 32l256 0c70.7 0 128 57.3 128 128l0 33.6c-36.5 7.4-64 39.7-64 78.4l0 48-384 0 0-48c0-38.7-27.5-71-64-78.4L64 160zM544 272c0-20.9 13.4-38.7 32-45.3c5-1.8 10.4-2.7 16-2.7c26.5 0 48 21.5 48 48l0 176c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32L96 448c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32L0 272c0-26.5 21.5-48 48-48c5.6 0 11 1 16 2.7c18.6 6.6 32 24.4 32 45.3l0 48 0 32 32 0 384 0 32 0 0-32 0-48z\"]\n};\nconst faCediSign = {\n  prefix: 'fas',\n  iconName: 'cedi-sign',\n  icon: [384, 512, [], \"e0df\", \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 34.7C101.2 81.9 32 160.9 32 256s69.2 174.1 160 189.3l0 34.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-34.7c30.9-5.2 59.2-17.7 83.2-35.8c14.1-10.6 17-30.7 6.4-44.8s-30.7-17-44.8-6.4c-13.2 9.9-28.3 17.3-44.8 21.6L256 132c16.4 4.2 31.6 11.6 44.8 21.6c14.1 10.6 34.2 7.8 44.8-6.4s7.8-34.2-6.4-44.8c-24-18-52.4-30.6-83.2-35.8L256 32zM192 132L192 380c-55.2-14.2-96-64.3-96-124s40.8-109.8 96-124z\"]\n};\nconst faItalic = {\n  prefix: 'fas',\n  iconName: 'italic',\n  icon: [384, 512, [], \"f033\", \"M128 64c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-58.7 0L160 416l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l58.7 0L224 96l-64 0c-17.7 0-32-14.3-32-32z\"]\n};\nconst faTableCellsColumnLock = {\n  prefix: 'fas',\n  iconName: 'table-cells-column-lock',\n  icon: [640, 512, [], \"e678\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 65.1c-37.8 5.4-69.4 29.6-85.2 62.9L360 224l0 64 56 0 0 8.6c-19.1 11.1-32 31.7-32 55.4l-24 0 0 64 24 0 0 64L64 480c-35.3 0-64-28.7-64-64L0 96zm208 0l0 64 88 0 0-64-88 0zm240 0l-88 0 0 64 88 0 0-64zM208 224l0 64 88 0 0-64-88 0zm0 128l0 64 88 0 0-64-88 0zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faChurch = {\n  prefix: 'fas',\n  iconName: 'church',\n  icon: [640, 512, [9962], \"f51d\", \"M344 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 24-32 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l32 0 0 46.4L183.3 210c-14.5 8.7-23.3 24.3-23.3 41.2L160 512l96 0 0-96c0-35.3 28.7-64 64-64s64 28.7 64 64l0 96 96 0 0-260.8c0-16.9-8.8-32.5-23.3-41.2L344 142.4 344 96l32 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-32 0 0-24zM24.9 330.3C9.5 338.8 0 354.9 0 372.4L0 464c0 26.5 21.5 48 48 48l80 0 0-238.4L24.9 330.3zM592 512c26.5 0 48-21.5 48-48l0-91.6c0-17.5-9.5-33.6-24.9-42.1L512 273.6 512 512l80 0z\"]\n};\nconst faCommentsDollar = {\n  prefix: 'fas',\n  iconName: 'comments-dollar',\n  icon: [640, 512, [], \"f653\", \"M416 176c0 97.2-93.1 176-208 176c-38.2 0-73.9-8.7-104.7-23.9c-7.5 4-16 7.9-25.2 11.4C59.8 346.4 37.8 352 16 352c-6.9 0-13.1-4.5-15.2-11.1s.2-13.8 5.8-17.9c0 0 0 0 0 0s0 0 0 0l.2-.2c.2-.2 .6-.4 1.1-.8c1-.8 2.5-2 4.3-3.7c3.6-3.3 8.5-8.1 13.3-14.3c5.5-7 10.7-15.4 14.2-24.7C14.7 250.3 0 214.6 0 176C0 78.8 93.1 0 208 0S416 78.8 416 176zM231.5 383C348.9 372.9 448 288.3 448 176c0-5.2-.2-10.4-.6-15.5C555.1 167.1 640 243.2 640 336c0 38.6-14.7 74.3-39.6 103.4c3.5 9.4 8.7 17.7 14.2 24.7c4.8 6.2 9.7 11 13.3 14.3c1.8 1.6 3.3 2.9 4.3 3.7c.5 .4 .9 .7 1.1 .8l.2 .2s0 0 0 0s0 0 0 0c5.6 4.1 7.9 11.3 5.8 17.9c-2.1 6.6-8.3 11.1-15.2 11.1c-21.8 0-43.8-5.6-62.1-12.5c-9.2-3.5-17.8-7.4-25.2-11.4C505.9 503.3 470.2 512 432 512c-95.6 0-176.2-54.6-200.5-129zM228 72c0-11-9-20-20-20s-20 9-20 20l0 14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1c0 0 0 0 0 0s0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4l0 14.6c0 11 9 20 20 20s20-9 20-20l0-13.8c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7L228 72z\"]\n};\nconst faDemocrat = {\n  prefix: 'fas',\n  iconName: 'democrat',\n  icon: [640, 512, [], \"f747\", \"M64 32c0-8.9 3.8-20.9 6.2-27.3C71.2 1.8 74 0 77 0c1.9 0 3.8 .7 5.2 2.1L128 45.7 173.8 2.1C175.2 .7 177.1 0 179 0c3 0 5.8 1.8 6.8 4.7c2.4 6.5 6.2 18.4 6.2 27.3c0 26.5-21.9 42-29.5 46.6l76.2 72.6c6 5.7 13.9 8.8 22.1 8.8L480 160l32 0c40.3 0 78.2 19 102.4 51.2l19.2 25.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4l-19.2-25.6c-5.3-7-11.8-12.8-19.2-17l0 87.4-352 0-40.4-94.3c-3.9-9.2-15.3-12.6-23.6-7l-42.1 28c-9.1 6.1-19.7 9.3-30.7 9.3l-2 0C23.9 256 0 232.1 0 202.7c0-12.1 4.1-23.8 11.7-33.3L87.6 74.6C78.1 67.4 64 53.2 64 32zM448 352l96 0 0 64 0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64-160 0 0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64 0-64 96 0 160 0zM260.9 210.9c-.9-1.8-2.8-2.9-4.8-2.9s-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.3-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5zM368.1 208c-2 0-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.4-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5c-.9-1.8-2.8-2.9-4.8-2.9zm116.8 2.9c-.9-1.8-2.8-2.9-4.8-2.9s-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.4-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5z\"]\n};\nconst faZ = {\n  prefix: 'fas',\n  iconName: 'z',\n  icon: [384, 512, [122], \"5a\", \"M0 64C0 46.3 14.3 32 32 32l320 0c12.4 0 23.7 7.2 29 18.4s3.6 24.5-4.4 34.1L100.3 416 352 416c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-12.4 0-23.7-7.2-29-18.4s-3.6-24.5 4.4-34.1L283.7 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nconst faPersonSkiing = {\n  prefix: 'fas',\n  iconName: 'person-skiing',\n  icon: [512, 512, [9975, \"skiing\"], \"f7c9\", \"M380.7 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM2.7 268.9c6.1-11.8 20.6-16.3 32.4-10.2L232.7 361.3l46.2-69.2-75.1-75.1c-14.6-14.6-20.4-33.9-18.4-52.1l108.8 52 39.3 39.3c16.2 16.2 18.7 41.5 6 60.6L289.8 391l128.7 66.8c13.6 7.1 29.8 7.2 43.6 .3l15.2-7.6c11.9-5.9 26.3-1.1 32.2 10.7s1.1 26.3-10.7 32.2l-15.2 7.6c-27.5 13.7-59.9 13.5-87.2-.7L12.9 301.3C1.2 295.2-3.4 280.7 2.7 268.9zM118.9 65.6L137 74.2l8.7-17.4c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-8.5 16.9 54.7 26.2c1.5-.7 3.1-1.4 4.7-2.1l83.4-33.4c34.2-13.7 72.8 4.2 84.5 39.2l17.1 51.2 52.1 26.1c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-58.1-29c-11.4-5.7-20-15.7-24.1-27.8l-5.8-17.3-27.3 12.1-6.8 3-6.7-3.2L151.5 116.7l-9.2 18.4c-4 7.9-13.6 11.1-21.5 7.2s-11.1-13.6-7.2-21.5l9-18-17.6-8.4c-8-3.8-11.3-13.4-7.5-21.3s13.4-11.3 21.3-7.5z\"]\n};\nconst faSkiing = faPersonSkiing;\nconst faRoadLock = {\n  prefix: 'fas',\n  iconName: 'road-lock',\n  icon: [640, 512, [], \"e567\", \"M288 32l-74.8 0c-27.1 0-51.3 17.1-60.3 42.6L35.1 407.2c-2.1 5.9-3.1 12-3.1 18.2C32 455.5 56.5 480 86.6 480L288 480l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64 32 0 0-128c0-23.7 12.9-44.4 32-55.4l0-24.6c0-58.3 44.6-106.2 101.5-111.5L487.1 74.6C478 49.1 453.9 32 426.8 32L352 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm64 192l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32zm176 16c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faA = {\n  prefix: 'fas',\n  iconName: 'a',\n  icon: [384, 512, [97], \"41\", \"M221.5 51.7C216.6 39.8 204.9 32 192 32s-24.6 7.8-29.5 19.7l-120 288-40 96c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L93.3 384l197.3 0 31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8l-40-96-120-288zM264 320l-144 0 72-172.8L264 320z\"]\n};\nconst faTemperatureArrowDown = {\n  prefix: 'fas',\n  iconName: 'temperature-arrow-down',\n  icon: [576, 512, [\"temperature-down\"], \"e03f\", \"M128 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C249.8 332.6 256 349.5 256 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5L128 112zM176 0C114.1 0 64 50.1 64 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C43.2 304.2 32 334.8 32 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L288 112C288 50.1 237.9 0 176 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3l0-50.7c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 50.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48zm336-64l-32 0 0-288c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 288-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c6 6 14.1 9.4 22.6 9.4s16.6-3.4 22.6-9.4l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8z\"]\n};\nconst faTemperatureDown = faTemperatureArrowDown;\nconst faFeatherPointed = {\n  prefix: 'fas',\n  iconName: 'feather-pointed',\n  icon: [512, 512, [\"feather-alt\"], \"f56b\", \"M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l74.8-74.8c7.4 4.6 15.3 8.2 23.8 10.5C200.3 452.8 270 454.5 338 409.4c12.2-8.1 5.8-25.4-8.8-25.4l-16.1 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l97.7-29.3c3.4-1 6.4-3.1 8.4-6.1c4.4-6.4 8.6-12.9 12.6-19.6c6.2-10.3-1.5-23-13.5-23l-38.6 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l80.9-24.3c4.6-1.4 8.4-4.8 10.2-9.3C494.5 163 507.8 86.1 511.9 36.8c.8-9.9-3-19.6-10-26.6s-16.7-10.8-26.6-10C391.5 7 228.5 40.5 137.4 131.6C57.3 211.7 56.7 302.3 71.3 356.4c2.1 7.9 12 9.6 17.8 3.8L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z\"]\n};\nconst faFeatherAlt = faFeatherPointed;\nconst faP = {\n  prefix: 'fas',\n  iconName: 'p',\n  icon: [320, 512, [112], \"50\", \"M0 96C0 60.7 28.7 32 64 32l96 0c88.4 0 160 71.6 160 160s-71.6 160-160 160l-96 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 320 0 96zM64 288l96 0c53 0 96-43 96-96s-43-96-96-96L64 96l0 192z\"]\n};\nconst faSnowflake = {\n  prefix: 'fas',\n  iconName: 'snowflake',\n  icon: [448, 512, [10052, 10054], \"f2dc\", \"M224 0c17.7 0 32 14.3 32 32l0 30.1 15-15c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-49 49 0 70.3 61.4-35.8 17.7-66.1c3.4-12.8 16.6-20.4 29.4-17s20.4 16.6 17 29.4l-5.2 19.3 23.6-13.8c15.3-8.9 34.9-3.7 43.8 11.5s3.8 34.9-11.5 43.8l-25.3 14.8 21.7 5.8c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17l-67.7-18.1L287.5 256l60.9 35.5 67.7-18.1c12.8-3.4 26 4.2 29.4 17s-4.2 26-17 29.4l-21.7 5.8 25.3 14.8c15.3 8.9 20.4 28.5 11.5 43.8s-28.5 20.4-43.8 11.5l-23.6-13.8 5.2 19.3c3.4 12.8-4.2 26-17 29.4s-26-4.2-29.4-17l-17.7-66.1L256 311.7l0 70.3 49 49c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-15-15 0 30.1c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-30.1-15 15c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l49-49 0-70.3-61.4 35.8-17.7 66.1c-3.4 12.8-16.6 20.4-29.4 17s-20.4-16.6-17-29.4l5.2-19.3L48.1 395.6c-15.3 8.9-34.9 3.7-43.8-11.5s-3.7-34.9 11.5-43.8l25.3-14.8-21.7-5.8c-12.8-3.4-20.4-16.6-17-29.4s16.6-20.4 29.4-17l67.7 18.1L160.5 256 99.6 220.5 31.9 238.6c-12.8 3.4-26-4.2-29.4-17s4.2-26 17-29.4l21.7-5.8L15.9 171.6C.6 162.7-4.5 143.1 4.4 127.9s28.5-20.4 43.8-11.5l23.6 13.8-5.2-19.3c-3.4-12.8 4.2-26 17-29.4s26 4.2 29.4 17l17.7 66.1L192 200.3l0-70.3L143 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l15 15L192 32c0-17.7 14.3-32 32-32z\"]\n};\nconst faNewspaper = {\n  prefix: 'fas',\n  iconName: 'newspaper',\n  icon: [512, 512, [128240], \"f1ea\", \"M96 96c0-35.3 28.7-64 64-64l288 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L80 480c-44.2 0-80-35.8-80-80L0 128c0-17.7 14.3-32 32-32s32 14.3 32 32l0 272c0 8.8 7.2 16 16 16s16-7.2 16-16L96 96zm64 24l0 80c0 13.3 10.7 24 24 24l112 0c13.3 0 24-10.7 24-24l0-80c0-13.3-10.7-24-24-24L184 96c-13.3 0-24 10.7-24 24zm208-8c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0c-8.8 0-16 7.2-16 16zM160 304c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-256 0c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16l256 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-256 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faRectangleAd = {\n  prefix: 'fas',\n  iconName: 'rectangle-ad',\n  icon: [576, 512, [\"ad\"], \"f641\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM229.5 173.3l72 144c5.9 11.9 1.1 26.3-10.7 32.2s-26.3 1.1-32.2-10.7L253.2 328l-90.3 0-5.4 10.7c-5.9 11.9-20.3 16.7-32.2 10.7s-16.7-20.3-10.7-32.2l72-144c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3zM208 237.7L186.8 280l42.3 0L208 237.7zM392 256a24 24 0 1 0 0 48 24 24 0 1 0 0-48zm24-43.9l0-28.1c0-13.3 10.7-24 24-24s24 10.7 24 24l0 96 0 48c0 13.3-10.7 24-24 24c-6.6 0-12.6-2.7-17-7c-9.4 4.5-19.9 7-31 7c-39.8 0-72-32.2-72-72s32.2-72 72-72c8.4 0 16.5 1.4 24 4.1z\"]\n};\nconst faAd = faRectangleAd;\nconst faCircleArrowRight = {\n  prefix: 'fas',\n  iconName: 'circle-arrow-right',\n  icon: [512, 512, [\"arrow-circle-right\"], \"f0a9\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM297 385c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l71-71L120 280c-13.3 0-24-10.7-24-24s10.7-24 24-24l214.1 0-71-71c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L409 239c9.4 9.4 9.4 24.6 0 33.9L297 385z\"]\n};\nconst faArrowCircleRight = faCircleArrowRight;\nconst faFilterCircleXmark = {\n  prefix: 'fas',\n  iconName: 'filter-circle-xmark',\n  icon: [576, 512, [], \"e17b\", \"M3.9 22.9C10.5 8.9 24.5 0 40 0L472 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L396.4 195.6C316.2 212.1 256 283 256 368c0 27.4 6.3 53.4 17.5 76.5c-1.6-.8-3.2-1.8-4.7-2.9l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 65.3C-.7 53.4-2.8 36.8 3.9 22.9zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"]\n};\nconst faLocust = {\n  prefix: 'fas',\n  iconName: 'locust',\n  icon: [576, 512, [], \"e520\", \"M312 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l16 0c98.7 0 180.6 71.4 197 165.4c-9-3.5-18.8-5.4-29-5.4l-64.2 0-41.8-97.5c-3.4-7.9-10.8-13.4-19.3-14.4s-17 2.7-22.1 9.6l-40.9 55.5-21.7-50.7c-3.3-7.8-10.5-13.2-18.9-14.3s-16.7 2.3-22 8.9l-240 304c-8.2 10.4-6.4 25.5 4 33.7s25.5 6.4 33.7-4l79.4-100.5 43 16.4-40.5 55c-7.9 10.7-5.6 25.7 5.1 33.6s25.7 5.6 33.6-5.1L215.1 400l74.5 0-29.3 42.3c-7.5 10.9-4.8 25.8 6.1 33.4s25.8 4.8 33.4-6.1L348 400l80.4 0 38.8 67.9c6.6 11.5 21.2 15.5 32.7 8.9s15.5-21.2 8.9-32.7L483.6 400l12.4 0c44.1 0 79.8-35.7 80-79.7c0-.1 0-.2 0-.3l0-40C576 143 465 32 328 32l-16 0zm50.5 168l17.1 40L333 240l29.5-40zm-87.7 38.1l-1.4 1.9-48.2 0 32.7-41.5 16.9 39.5zM88.8 240C57.4 240 32 265.4 32 296.8c0 15.5 6.3 30 16.9 40.4L126.7 240l-37.9 0zM496 288a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faSort = {\n  prefix: 'fas',\n  iconName: 'sort',\n  icon: [320, 512, [\"unsorted\"], \"f0dc\", \"M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8L32 224c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8l256 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z\"]\n};\nconst faUnsorted = faSort;\nconst faListOl = {\n  prefix: 'fas',\n  iconName: 'list-ol',\n  icon: [512, 512, [\"list-1-2\", \"list-numeric\"], \"f0cb\", \"M24 56c0-13.3 10.7-24 24-24l32 0c13.3 0 24 10.7 24 24l0 120 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-96-8 0C34.7 80 24 69.3 24 56zM86.7 341.2c-6.5-7.4-18.3-6.9-24 1.2L51.5 357.9c-7.7 10.8-22.7 13.3-33.5 5.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2 72.3-35.6 99.2-4.9c21.3 24.4 20.8 60.9-1.1 84.7L86.8 432l33.2 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-88 0c-9.5 0-18.2-5.6-22-14.4s-2.1-18.9 4.3-25.9l72-78c5.3-5.8 5.4-14.6 .3-20.5zM224 64l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faList12 = faListOl;\nconst faListNumeric = faListOl;\nconst faPersonDressBurst = {\n  prefix: 'fas',\n  iconName: 'person-dress-burst',\n  icon: [640, 512, [], \"e544\", \"M528 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM390.2 384l17.8 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 16 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 17.8 0c10.9 0 18.6-10.7 15.2-21.1L546.7 248.1l33.9 56.3c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-53.6-89.2c-20.2-33.7-56.7-54.3-96-54.3l-11.6 0c-39.3 0-75.7 20.6-96 54.3l-53.6 89.2c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9l33.9-56.3L375 362.9c-3.5 10.4 4.3 21.1 15.2 21.1zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 50.5-7.8 24.4-40.5-55.2-38L315 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74z\"]\n};\nconst faMoneyCheckDollar = {\n  prefix: 'fas',\n  iconName: 'money-check-dollar',\n  icon: [576, 512, [\"money-check-alt\"], \"f53d\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zM272 192l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zM256 304c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16zM164 152l0 13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9l0 13.8c0 11-9 20-20 20s-20-9-20-20l0-14.6c-10.3-2.2-20-5.5-28.2-8.4c0 0 0 0 0 0s0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5l0-14c0-11 9-20 20-20s20 9 20 20z\"]\n};\nconst faMoneyCheckAlt = faMoneyCheckDollar;\nconst faVectorSquare = {\n  prefix: 'fas',\n  iconName: 'vector-square',\n  icon: [448, 512, [], \"f5cb\", \"M368 80l32 0 0 32-32 0 0-32zM352 32c-17.7 0-32 14.3-32 32L128 64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64l0 64c0 17.7 14.3 32 32 32l0 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l192 0c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-192c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0zM96 160c17.7 0 32-14.3 32-32l192 0c0 17.7 14.3 32 32 32l0 192c-17.7 0-32 14.3-32 32l-192 0c0-17.7-14.3-32-32-32l0-192zM48 400l32 0 0 32-32 0 0-32zm320 32l0-32 32 0 0 32-32 0zM48 112l0-32 32 0 0 32-32 0z\"]\n};\nconst faBreadSlice = {\n  prefix: 'fas',\n  iconName: 'bread-slice',\n  icon: [512, 512, [], \"f7ec\", \"M256 32C192 32 0 64 0 192c0 35.3 28.7 64 64 64V432c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V256c35.3 0 64-28.7 64-64C512 64 320 32 256 32z\"]\n};\nconst faLanguage = {\n  prefix: 'fas',\n  iconName: 'language',\n  icon: [640, 512, [], \"f1ab\", \"M0 128C0 92.7 28.7 64 64 64l192 0 48 0 16 0 256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64l-256 0-16 0-48 0L64 448c-35.3 0-64-28.7-64-64L0 128zm320 0l0 256 256 0 0-256-256 0zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1 73.6 0 8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276l-38 0 19-42.8zM448 164c11 0 20 9 20 20l0 4 44 0 16 0c11 0 20 9 20 20s-9 20-20 20l-2 0-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45L448 228l-72 0c-11 0-20-9-20-20s9-20 20-20l52 0 0-4c0-11 9-20 20-20z\"]\n};\nconst faFaceKissWinkHeart = {\n  prefix: 'fas',\n  iconName: 'face-kiss-wink-heart',\n  icon: [512, 512, [128536, \"kiss-wink-heart\"], \"f598\", \"M498 339.7c9.1-26.2 14-54.4 14-83.7C512 114.6 397.4 0 256 0S0 114.6 0 256S114.6 512 256 512c35.4 0 69.1-7.2 99.7-20.2c-4.8-5.5-8.5-12.2-10.4-19.7l-22.9-89.3c-10-39 11.8-80.9 51.8-92.1c37.2-10.4 73.8 10.1 87.5 44c12.7-1.6 25.1 .4 36.2 5zM296 332c0 6.9-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C258.7 443.1 241.4 448 224 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.6-.4-.3-.2-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm194.8 57.6c-17.6-23.5-52.8-23.5-70.4 0c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2zM434 352.3c-6-23.2-28.8-37-51.1-30.8s-35.4 30.1-29.5 53.4l22.9 89.3c2.2 8.7 11.2 13.9 19.8 11.4l84.9-23.8c22.2-6.2 35.4-30.1 29.5-53.4s-28.8-37-51.1-30.8l-20.2 5.6-5.4-21z\"]\n};\nconst faKissWinkHeart = faFaceKissWinkHeart;\nconst faFilter = {\n  prefix: 'fas',\n  iconName: 'filter',\n  icon: [512, 512, [], \"f0b0\", \"M3.9 54.9C10.5 40.9 24.5 32 40 32l432 0c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9 320 448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6l0-79.1L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z\"]\n};\nconst faQuestion = {\n  prefix: 'fas',\n  iconName: 'question',\n  icon: [320, 512, [10067, 10068, 61736], \"3f\", \"M80 160c0-35.3 28.7-64 64-64l32 0c35.3 0 64 28.7 64 64l0 3.6c0 21.8-11.1 42.1-29.4 53.8l-42.2 27.1c-25.2 16.2-40.4 44.1-40.4 74l0 1.4c0 17.7 14.3 32 32 32s32-14.3 32-32l0-1.4c0-8.2 4.2-15.8 11-20.2l42.2-27.1c36.6-23.6 58.8-64.1 58.8-107.7l0-3.6c0-70.7-57.3-128-128-128l-32 0C73.3 32 16 89.3 16 160c0 17.7 14.3 32 32 32s32-14.3 32-32zm80 320a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nconst faFileSignature = {\n  prefix: 'fas',\n  iconName: 'file-signature',\n  icon: [576, 512, [], \"f573\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-19.3c-2.7 1.1-5.4 2-8.2 2.7l-60.1 15c-3 .7-6 1.2-9 1.4c-.9 .1-1.8 .2-2.7 .2l-64 0c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 381l-9.8 32.8c-6.1 20.3-24.8 34.2-46 34.2L80 448c-8.8 0-16-7.2-16-16s7.2-16 16-16l8.2 0c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.8 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8 8.9 0c-3.1-8.8-3.7-18.4-1.4-27.8l15-60.1c2.8-11.3 8.6-21.5 16.8-29.7L384 203.6l0-43.6-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM549.8 139.7c-15.6-15.6-40.9-15.6-56.6 0l-29.4 29.4 71 71 29.4-29.4c15.6-15.6 15.6-40.9 0-56.6l-14.4-14.4zM311.9 321c-4.1 4.1-7 9.2-8.4 14.9l-15 60.1c-1.4 5.5 .2 11.2 4.2 15.2s9.7 5.6 15.2 4.2l60.1-15c5.6-1.4 10.8-4.3 14.9-8.4L512.1 262.7l-71-71L311.9 321z\"]\n};\nconst faUpDownLeftRight = {\n  prefix: 'fas',\n  iconName: 'up-down-left-right',\n  icon: [512, 512, [\"arrows-alt\"], \"f0b2\", \"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 96-96 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-32 96 0 0 96-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0 0-96 96 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 32-96 0 0-96 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"]\n};\nconst faArrowsAlt = faUpDownLeftRight;\nconst faHouseChimneyUser = {\n  prefix: 'fas',\n  iconName: 'house-chimney-user',\n  icon: [576, 512, [], \"e065\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L512 185l0-121c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32l0 36.7L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 160.4c0 35.3 28.7 64 64 64l320.4 0c35.5 0 64.2-28.8 64-64.3l-.7-160.2 32 0zM288 160a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM176 400c0-44.2 35.8-80 80-80l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faHandHoldingHeart = {\n  prefix: 'fas',\n  iconName: 'hand-holding-heart',\n  icon: [576, 512, [], \"f4be\", \"M163.9 136.9c-29.4-29.8-29.4-78.2 0-108s77-29.8 106.4 0l17.7 18 17.7-18c29.4-29.8 77-29.8 106.4 0s29.4 78.2 0 108L310.5 240.1c-6.2 6.3-14.3 9.4-22.5 9.4s-16.3-3.1-22.5-9.4L163.9 136.9zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 512 32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"]\n};\nconst faPuzzlePiece = {\n  prefix: 'fas',\n  iconName: 'puzzle-piece',\n  icon: [512, 512, [129513], \"f12e\", \"M192 104.8c0-9.2-5.8-17.3-13.2-22.8C167.2 73.3 160 61.3 160 48c0-26.5 28.7-48 64-48s64 21.5 64 48c0 13.3-7.2 25.3-18.8 34c-7.4 5.5-13.2 13.6-13.2 22.8c0 12.8 10.4 23.2 23.2 23.2l56.8 0c26.5 0 48 21.5 48 48l0 56.8c0 12.8 10.4 23.2 23.2 23.2c9.2 0 17.3-5.8 22.8-13.2c8.7-11.6 20.7-18.8 34-18.8c26.5 0 48 28.7 48 64s-21.5 64-48 64c-13.3 0-25.3-7.2-34-18.8c-5.5-7.4-13.6-13.2-22.8-13.2c-12.8 0-23.2 10.4-23.2 23.2L384 464c0 26.5-21.5 48-48 48l-56.8 0c-12.8 0-23.2-10.4-23.2-23.2c0-9.2 5.8-17.3 13.2-22.8c11.6-8.7 18.8-20.7 18.8-34c0-26.5-28.7-48-64-48s-64 21.5-64 48c0 13.3 7.2 25.3 18.8 34c7.4 5.5 13.2 13.6 13.2 22.8c0 12.8-10.4 23.2-23.2 23.2L48 512c-26.5 0-48-21.5-48-48L0 343.2C0 330.4 10.4 320 23.2 320c9.2 0 17.3 5.8 22.8 13.2C54.7 344.8 66.7 352 80 352c26.5 0 48-28.7 48-64s-21.5-64-48-64c-13.3 0-25.3 7.2-34 18.8C40.5 250.2 32.4 256 23.2 256C10.4 256 0 245.6 0 232.8L0 176c0-26.5 21.5-48 48-48l120.8 0c12.8 0 23.2-10.4 23.2-23.2z\"]\n};\nconst faMoneyCheck = {\n  prefix: 'fas',\n  iconName: 'money-check',\n  icon: [576, 512, [], \"f53c\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm48 160l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zM96 336c0-8.8 7.2-16 16-16l352 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-352 0c-8.8 0-16-7.2-16-16zM376 160l80 0c13.3 0 24 10.7 24 24l0 48c0 13.3-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24z\"]\n};\nconst faStarHalfStroke = {\n  prefix: 'fas',\n  iconName: 'star-half-stroke',\n  icon: [576, 512, [\"star-half-alt\"], \"f5c0\", \"M288 376.4l.1-.1 26.4 14.1 85.2 45.5-16.5-97.6-4.8-28.7 20.7-20.5 70.1-69.3-96.1-14.2-29.3-4.3-12.9-26.6L288.1 86.9l-.1 .3 0 289.2zm175.1 98.3c2 12-3 24.2-12.9 31.3s-23 8-33.8 2.3L288.1 439.8 159.8 508.3C149 514 135.9 513.1 126 506s-14.9-19.3-12.9-31.3L137.8 329 33.6 225.9c-8.6-8.5-11.7-21.2-7.9-32.7s13.7-19.9 25.7-21.7L195 150.3 259.4 18c5.4-11 16.5-18 28.8-18s23.4 7 28.8 18l64.3 132.3 143.6 21.2c12 1.8 22 10.2 25.7 21.7s.7 24.2-7.9 32.7L438.5 329l24.6 145.7z\"]\n};\nconst faStarHalfAlt = faStarHalfStroke;\nconst faCode = {\n  prefix: 'fas',\n  iconName: 'code',\n  icon: [640, 512, [], \"f121\", \"M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z\"]\n};\nconst faWhiskeyGlass = {\n  prefix: 'fas',\n  iconName: 'whiskey-glass',\n  icon: [512, 512, [129347, \"glass-whiskey\"], \"f7a0\", \"M32 32c-9.3 0-18.1 4-24.2 11.1S-1 59.4 .3 68.6l50 342.9c5.7 39.3 39.4 68.5 79.2 68.5l253 0c39.7 0 73.4-29.1 79.2-68.5l50-342.9c1.3-9.2-1.4-18.5-7.5-25.5S489.3 32 480 32L32 32zM87.7 224L69 96l374 0L424.3 224 87.7 224z\"]\n};\nconst faGlassWhiskey = faWhiskeyGlass;\nconst faBuildingCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'building-circle-exclamation',\n  icon: [640, 512, [], \"e4d3\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faMagnifyingGlassChart = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-chart',\n  icon: [512, 512, [], \"e522\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zm-312 8l0 64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80-96l0 160c0 13.3 10.7 24 24 24s24-10.7 24-24l0-160c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80 64l0 96c0 13.3 10.7 24 24 24s24-10.7 24-24l0-96c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nconst faArrowUpRightFromSquare = {\n  prefix: 'fas',\n  iconName: 'arrow-up-right-from-square',\n  icon: [512, 512, [\"external-link\"], \"f08e\", \"M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l82.7 0L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3l0 82.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-17.7-14.3-32-32-32L320 0zM80 32C35.8 32 0 67.8 0 112L0 432c0 44.2 35.8 80 80 80l320 0c44.2 0 80-35.8 80-80l0-112c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16l0-320c0-8.8 7.2-16 16-16l112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z\"]\n};\nconst faExternalLink = faArrowUpRightFromSquare;\nconst faCubesStacked = {\n  prefix: 'fas',\n  iconName: 'cubes-stacked',\n  icon: [448, 512, [], \"e4e6\", \"M192 64l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32zM82.7 207c-15.3 8.8-20.5 28.4-11.7 43.7l32 55.4c8.8 15.3 28.4 20.5 43.7 11.7l55.4-32c15.3-8.8 20.5-28.4 11.7-43.7l-32-55.4c-8.8-15.3-28.4-20.5-43.7-11.7L82.7 207zM288 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0zm64 160c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0zM160 384l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32zM32 352c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-64 0z\"]\n};\nconst faWonSign = {\n  prefix: 'fas',\n  iconName: 'won-sign',\n  icon: [512, 512, [8361, \"krw\", \"won\"], \"f159\", \"M62.4 53.9C56.8 37.1 38.6 28.1 21.9 33.6S-3.9 57.4 1.6 74.1L51.6 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l40.9 0 56.7 170.1c4.5 13.5 17.4 22.4 31.6 21.9s26.4-10.4 29.8-24.2L233 288l46 0L321 455.8c3.4 13.8 15.6 23.7 29.8 24.2s27.1-8.4 31.6-21.9L439.1 288l40.9 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-19.6 0 50-149.9c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2L392.9 224l-64 0L287 56.2C283.5 42 270.7 32 256 32s-27.5 10-31 24.2L183 224l-64 0L62.4 53.9zm78 234.1l26.6 0-11.4 45.6L140.4 288zM249 224l7-28.1 7 28.1-14 0zm96 64l26.6 0-15.2 45.6L345 288z\"]\n};\nconst faKrw = faWonSign;\nconst faWon = faWonSign;\nconst faVirusCovid = {\n  prefix: 'fas',\n  iconName: 'virus-covid',\n  icon: [512, 512, [], \"e4a8\", \"M192 24c0-13.3 10.7-24 24-24l80 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0 0 33.6c30.7 4.2 58.8 16.3 82.3 34.1L386.1 92 374.8 80.6c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l56.6 56.6c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L420 125.9l-23.8 23.8c17.9 23.5 29.9 51.7 34.1 82.3l33.6 0 0-16c0-13.3 10.7-24 24-24s24 10.7 24 24l0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-33.6 0c-4.2 30.7-16.3 58.8-34.1 82.3L420 386.1l11.3-11.3c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-56.6 56.6c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L386.1 420l-23.8-23.8c-23.5 17.9-51.7 29.9-82.3 34.1l0 33.6 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-33.6c-30.7-4.2-58.8-16.3-82.3-34.1L125.9 420l11.3 11.3c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L46.7 408.7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L92 386.1l23.8-23.8C97.9 338.8 85.8 310.7 81.6 280L48 280l0 16c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-80c0-13.3 10.7-24 24-24s24 10.7 24 24l0 16 33.6 0c4.2-30.7 16.3-58.8 34.1-82.3L92 125.9 80.6 137.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l56.6-56.6c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L125.9 92l23.8 23.8c23.5-17.9 51.7-29.9 82.3-34.1L232 48l-16 0c-13.3 0-24-10.7-24-24zm48 200a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm64 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faAustralSign = {\n  prefix: 'fas',\n  iconName: 'austral-sign',\n  icon: [448, 512, [], \"e0a9\", \"M253.5 51.7C248.6 39.8 236.9 32 224 32s-24.6 7.8-29.5 19.7L122.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0L82.7 320 32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l24 0L34.5 435.7c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L125.3 384l197.3 0 31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8L392 384l24 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0L352 288l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-90.7 0L253.5 51.7zM256 224l-64 0 32-76.8L256 224zm-90.7 64l117.3 0L296 320l-144 0 13.3-32z\"]\n};\nconst faF = {\n  prefix: 'fas',\n  iconName: 'f',\n  icon: [320, 512, [102], \"46\", \"M64 32C28.7 32 0 60.7 0 96L0 256 0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 224 64 96l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32z\"]\n};\nconst faLeaf = {\n  prefix: 'fas',\n  iconName: 'leaf',\n  icon: [512, 512, [], \"f06c\", \"M272 96c-78.6 0-145.1 51.5-167.7 122.5c33.6-17 71.5-26.5 111.7-26.5l88 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0-72 0s0 0 0 0c-16.6 0-32.7 1.9-48.3 5.4c-25.9 5.9-49.9 16.4-71.4 30.7c0 0 0 0 0 0C38.3 298.8 0 364.9 0 440l0 16c0 13.3 10.7 24 24 24s24-10.7 24-24l0-16c0-48.7 20.7-92.5 53.8-123.2C121.6 392.3 190.3 448 272 448l1 0c132.1-.7 239-130.9 239-291.4c0-42.6-7.5-83.1-21.1-119.6c-2.6-6.9-12.7-6.6-16.2-.1C455.9 72.1 418.7 96 376 96L272 96z\"]\n};\nconst faRoad = {\n  prefix: 'fas',\n  iconName: 'road',\n  icon: [576, 512, [128739], \"f018\", \"M256 32l-74.8 0c-27.1 0-51.3 17.1-60.3 42.6L3.1 407.2C1.1 413 0 419.2 0 425.4C0 455.5 24.5 480 54.6 480L256 480l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64 201.4 0c30.2 0 54.6-24.5 54.6-54.6c0-6.2-1.1-12.4-3.1-18.2L455.1 74.6C446 49.1 421.9 32 394.8 32L320 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm64 192l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faTaxi = {\n  prefix: 'fas',\n  iconName: 'taxi',\n  icon: [512, 512, [128662, \"cab\"], \"f1ba\", \"M192 0c-17.7 0-32 14.3-32 32l0 32 0 .2c-38.6 2.2-72.3 27.3-85.2 64.1L39.6 228.8C16.4 238.4 0 261.3 0 288L0 432l0 48c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-48 320 0 0 48c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-48 0-144c0-26.7-16.4-49.6-39.6-59.2L437.2 128.3c-12.9-36.8-46.6-62-85.2-64.1l0-.2 0-32c0-17.7-14.3-32-32-32L192 0zM165.4 128l181.2 0c13.6 0 25.7 8.6 30.2 21.4L402.9 224l-293.8 0 26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zM96 288a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm288 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faCab = faTaxi;\nconst faPersonCirclePlus = {\n  prefix: 'fas',\n  iconName: 'person-circle-plus',\n  icon: [576, 512, [], \"e541\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-48z\"]\n};\nconst faChartPie = {\n  prefix: 'fas',\n  iconName: 'chart-pie',\n  icon: [576, 512, [\"pie-chart\"], \"f200\", \"M304 240l0-223.4c0-9 7-16.6 16-16.6C443.7 0 544 100.3 544 224c0 9-7.6 16-16.6 16L304 240zM32 272C32 150.7 122.1 50.3 239 34.3c9.2-1.3 17 6.1 17 15.4L256 288 412.5 444.5c6.7 6.7 6.2 17.7-1.5 23.1C371.8 495.6 323.8 512 272 512C139.5 512 32 404.6 32 272zm526.4 16c9.3 0 16.6 7.8 15.4 17c-7.7 55.9-34.6 105.6-73.9 142.3c-6 5.6-15.4 5.2-21.2-.7L320 288l238.4 0z\"]\n};\nconst faPieChart = faChartPie;\nconst faBoltLightning = {\n  prefix: 'fas',\n  iconName: 'bolt-lightning',\n  icon: [384, 512, [], \"e0b7\", \"M0 256L28.5 28c2-16 15.6-28 31.8-28H228.9c15 0 27.1 12.1 27.1 27.1c0 3.2-.6 6.5-1.7 9.5L208 160H347.3c20.2 0 36.7 16.4 36.7 36.7c0 7.4-2.2 14.6-6.4 20.7l-192.2 281c-5.9 8.6-15.6 13.7-25.9 13.7h-2.9c-15.7 0-28.5-12.8-28.5-28.5c0-2.3 .3-4.6 .9-6.9L176 288H32c-17.7 0-32-14.3-32-32z\"]\n};\nconst faSackXmark = {\n  prefix: 'fas',\n  iconName: 'sack-xmark',\n  icon: [512, 512, [], \"e56a\", \"M192 96l128 0 47.4-71.1C374.5 14.2 366.9 0 354.1 0L157.9 0c-12.8 0-20.4 14.2-13.3 24.9L192 96zm128 32l-128 0c-3.8 2.5-8.1 5.3-13 8.4c0 0 0 0 0 0s0 0 0 0C122.3 172.7 0 250.9 0 416c0 53 43 96 96 96l320 0c53 0 96-43 96-96c0-165.1-122.3-243.3-179-279.6c-4.8-3.1-9.2-5.9-13-8.4zM289.9 336l47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47z\"]\n};\nconst faFileExcel = {\n  prefix: 'fas',\n  iconName: 'file-excel',\n  icon: [384, 512, [], \"f1c3\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM155.7 250.2L192 302.1l36.3-51.9c7.6-10.9 22.6-13.5 33.4-5.9s13.5 22.6 5.9 33.4L221.3 344l46.4 66.2c7.6 10.9 5 25.8-5.9 33.4s-25.8 5-33.4-5.9L192 385.8l-36.3 51.9c-7.6 10.9-22.6 13.5-33.4 5.9s-13.5-22.6-5.9-33.4L162.7 344l-46.4-66.2c-7.6-10.9-5-25.8 5.9-33.4s25.8-5 33.4 5.9z\"]\n};\nconst faFileContract = {\n  prefix: 'fas',\n  iconName: 'file-contract',\n  icon: [384, 512, [], \"f56c\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM80 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm54.2 253.8c-6.1 20.3-24.8 34.2-46 34.2L80 416c-8.8 0-16-7.2-16-16s7.2-16 16-16l8.2 0c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.7 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8 54.1 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 349l-9.8 32.8z\"]\n};\nconst faFishFins = {\n  prefix: 'fas',\n  iconName: 'fish-fins',\n  icon: [576, 512, [], \"e4f2\", \"M275.2 38.4c-10.6-8-25-8.5-36.3-1.5S222 57.3 224.6 70.3l9.7 48.6c-19.4 9-36.9 19.9-52.4 31.5c-15.3 11.5-29 23.9-40.7 36.3L48.1 132.4c-12.5-7.3-28.4-5.3-38.6 4.9S-3 163.3 4.2 175.9L50 256 4.2 336.1c-7.2 12.6-5 28.4 5.3 38.6s26.1 12.2 38.6 4.9l93.1-54.3c11.8 12.3 25.4 24.8 40.7 36.3c15.5 11.6 33 22.5 52.4 31.5l-9.7 48.6c-2.6 13 3.1 26.3 14.3 33.3s25.6 6.5 36.3-1.5l77.6-58.2c54.9-4 101.5-27 137.2-53.8c39.2-29.4 67.2-64.7 81.6-89.5c5.8-9.9 5.8-22.2 0-32.1c-14.4-24.8-42.5-60.1-81.6-89.5c-35.8-26.8-82.3-49.8-137.2-53.8L275.2 38.4zM384 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faBuildingFlag = {\n  prefix: 'fas',\n  iconName: 'building-flag',\n  icon: [640, 512, [], \"e4d5\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM448 0c-17.7 0-32 14.3-32 32l0 480 64 0 0-320 144 0c8.8 0 16-7.2 16-16l0-128c0-8.8-7.2-16-16-16L480 32c0-17.7-14.3-32-32-32z\"]\n};\nconst faFaceGrinBeam = {\n  prefix: 'fas',\n  iconName: 'face-grin-beam',\n  icon: [512, 512, [128516, \"grin-beam\"], \"f582\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zm-170.5-84s0 0 0 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0zm160 0c0 0 0 0 0 0l-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0z\"]\n};\nconst faGrinBeam = faFaceGrinBeam;\nconst faObjectUngroup = {\n  prefix: 'fas',\n  iconName: 'object-ungroup',\n  icon: [640, 512, [], \"f248\", \"M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7 0 64 0c23.7 0 44.4 12.9 55.4 32l209.1 0C339.6 12.9 360.3 0 384 0c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4l0 113.1c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-209.1 0c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-113.1zM119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4l0 113.1c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-113.1c-9.7-5.6-17.8-13.7-23.4-23.4L119.4 96zm192 384c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-40.6 64 0 0 40.6c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-113.1c-9.7-5.6-17.8-13.7-23.4-23.4l-46 0c-5.4-15.4-14.6-28.9-26.5-39.6l0-24.4 72.6 0c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4l0 113.1c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-209.1 0z\"]\n};\nconst faPoop = {\n  prefix: 'fas',\n  iconName: 'poop',\n  icon: [512, 512, [], \"f619\", \"M254.4 6.6c3.5-4.3 9-6.5 14.5-5.7C315.8 7.2 352 47.4 352 96c0 11.2-1.9 22-5.5 32l5.5 0c35.3 0 64 28.7 64 64c0 19.1-8.4 36.3-21.7 48l13.7 0c39.8 0 72 32.2 72 72c0 23.2-11 43.8-28 57c34.1 5.7 60 35.3 60 71c0 39.8-32.2 72-72 72L72 512c-39.8 0-72-32.2-72-72c0-35.7 25.9-65.3 60-71c-17-13.2-28-33.8-28-57c0-39.8 32.2-72 72-72l13.7 0C104.4 228.3 96 211.1 96 192c0-35.3 28.7-64 64-64l16.2 0c44.1-.1 79.8-35.9 79.8-80c0-9.2-1.5-17.9-4.3-26.1c-1.8-5.2-.8-11.1 2.8-15.4z\"]\n};\nconst faLocationPin = {\n  prefix: 'fas',\n  iconName: 'location-pin',\n  icon: [384, 512, [\"map-marker\"], \"f041\", \"M384 192c0 87.4-117 243-168.3 307.2c-12.3 15.3-35.1 15.3-47.4 0C117 435 0 279.4 0 192C0 86 86 0 192 0S384 86 384 192z\"]\n};\nconst faMapMarker = faLocationPin;\nconst faKaaba = {\n  prefix: 'fas',\n  iconName: 'kaaba',\n  icon: [576, 512, [128331], \"f66b\", \"M60 120l228 71.2L516 120 288 48.8 60 120zM278.5 1.5c6.2-1.9 12.9-1.9 19.1 0l256 80C566.9 85.6 576 98 576 112l0 16s0 0 0 0l0 21.2L292.8 237.7c-3.1 1-6.4 1-9.5 0L0 149.2 0 128l0-16C0 98 9.1 85.6 22.5 81.5l256-80zm23.9 266.8L576 182.8l0 46.5-52.8 16.5c-8.4 2.6-13.1 11.6-10.5 20s11.6 13.1 20 10.5L576 262.8 576 400c0 14-9.1 26.4-22.5 30.5l-256 80c-6.2 1.9-12.9 1.9-19.1 0l-256-80C9.1 426.4 0 414 0 400L0 262.8l43.2 13.5c8.4 2.6 17.4-2.1 20-10.5s-2.1-17.4-10.5-20L0 229.2l0-46.5 273.7 85.5c9.3 2.9 19.3 2.9 28.6 0zm-185.5-2.6c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20l64 20c8.4 2.6 17.4-2.1 20-10.5s-2.1-17.4-10.5-20l-64-20zm352 30.5c8.4-2.6 13.1-11.6 10.5-20s-11.6-13.1-20-10.5l-64 20c-8.4 2.6-13.1 11.6-10.5 20s11.6 13.1 20 10.5l64-20zm-224 9.5c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20l38.5 12c9.3 2.9 19.3 2.9 28.6 0l38.5-12c8.4-2.6 13.1-11.6 10.5-20s-11.6-13.1-20-10.5l-38.5 12c-3.1 1-6.4 1-9.5 0l-38.5-12z\"]\n};\nconst faToiletPaper = {\n  prefix: 'fas',\n  iconName: 'toilet-paper',\n  icon: [640, 512, [129531], \"f71e\", \"M444.2 0C397.2 49.6 384 126.5 384 192c0 158.8-27.3 247-42.7 283.9c-10 24-33.2 36.1-55.4 36.1L48 512c-11.5 0-22.2-6.2-27.8-16.2s-5.6-22.3 .4-32.2c9.8-17.7 15.4-38.2 20.5-57.7C52.3 362.8 64 293.5 64 192C64 86 107 0 160 0L444.2 0zM512 384c-53 0-96-86-96-192S459 0 512 0s96 86 96 192s-43 192-96 192zm0-128c17.7 0 32-28.7 32-64s-14.3-64-32-64s-32 28.7-32 64s14.3 64 32 64zM144 208a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm64 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm80-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faHelmetSafety = {\n  prefix: 'fas',\n  iconName: 'helmet-safety',\n  icon: [576, 512, [\"hard-hat\", \"hat-hard\"], \"f807\", \"M256 32c-17.7 0-32 14.3-32 32l0 2.3 0 99.6c0 5.6-4.5 10.1-10.1 10.1c-3.6 0-7-1.9-8.8-5.1L157.1 87C83 123.5 32 199.8 32 288l0 64 512 0 0-66.4c-.9-87.2-51.7-162.4-125.1-198.6l-48 83.9c-1.8 3.2-5.2 5.1-8.8 5.1c-5.6 0-10.1-4.5-10.1-10.1l0-99.6 0-2.3c0-17.7-14.3-32-32-32l-64 0zM16.6 384C7.4 384 0 391.4 0 400.6c0 4.7 2 9.2 5.8 11.9C27.5 428.4 111.8 480 288 480s260.5-51.6 282.2-67.5c3.8-2.8 5.8-7.2 5.8-11.9c0-9.2-7.4-16.6-16.6-16.6L16.6 384z\"]\n};\nconst faHardHat = faHelmetSafety;\nconst faHatHard = faHelmetSafety;\nconst faEject = {\n  prefix: 'fas',\n  iconName: 'eject',\n  icon: [448, 512, [9167], \"f052\", \"M224 32c13.5 0 26.3 5.6 35.4 15.6l176 192c12.9 14 16.2 34.3 8.6 51.8S419 320 400 320L48 320c-19 0-36.3-11.2-43.9-28.7s-4.3-37.7 8.6-51.8l176-192C197.7 37.6 210.5 32 224 32zM0 432c0-26.5 21.5-48 48-48l352 0c26.5 0 48 21.5 48 48s-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48z\"]\n};\nconst faCircleRight = {\n  prefix: 'fas',\n  iconName: 'circle-right',\n  icon: [512, 512, [61838, \"arrow-alt-circle-right\"], \"f35a\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zm395.3 11.3l-112 112c-4.6 4.6-11.5 5.9-17.4 3.5s-9.9-8.3-9.9-14.8l0-64-96 0c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32l96 0 0-64c0-6.5 3.9-12.3 9.9-14.8s12.9-1.1 17.4 3.5l112 112c6.2 6.2 6.2 16.4 0 22.6z\"]\n};\nconst faArrowAltCircleRight = faCircleRight;\nconst faPlaneCircleCheck = {\n  prefix: 'fas',\n  iconName: 'plane-circle-check',\n  icon: [640, 512, [], \"e555\", \"M256 0c-35 0-64 59.5-64 93.7l0 84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9l0 65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8l0 42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3l0-84.6C320 59.5 292 0 256 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faFaceRollingEyes = {\n  prefix: 'fas',\n  iconName: 'face-rolling-eyes',\n  icon: [512, 512, [128580, \"meh-rolling-eyes\"], \"f5a5\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 368l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm32-144c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C208.5 175.6 224 198 224 224zm128 64c-35.3 0-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C400.5 175.6 416 198 416 224c0 35.3-28.7 64-64 64z\"]\n};\nconst faMehRollingEyes = faFaceRollingEyes;\nconst faObjectGroup = {\n  prefix: 'fas',\n  iconName: 'object-group',\n  icon: [576, 512, [], \"f247\", \"M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7 0 64 0c23.7 0 44.4 12.9 55.4 32l337.1 0C467.6 12.9 488.3 0 512 0c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4l0 273.1c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-337.1 0c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-273.1zM456.6 96L119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4l0 273.1c9.7 5.6 17.8 13.7 23.4 23.4l337.1 0c5.6-9.7 13.7-17.8 23.4-23.4l0-273.1c-9.7-5.6-17.8-13.7-23.4-23.4zM128 160c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-96zM256 320l32 0c35.3 0 64-28.7 64-64l0-32 64 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32l0-32z\"]\n};\nconst faChartLine = {\n  prefix: 'fas',\n  iconName: 'chart-line',\n  icon: [512, 512, [\"line-chart\"], \"f201\", \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 400c0 44.2 35.8 80 80 80l400 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 416c-8.8 0-16-7.2-16-16L64 64zm406.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L320 210.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L240 221.3l57.4 57.4c12.5 12.5 32.8 12.5 45.3 0l128-128z\"]\n};\nconst faLineChart = faChartLine;\nconst faMaskVentilator = {\n  prefix: 'fas',\n  iconName: 'mask-ventilator',\n  icon: [640, 512, [], \"e524\", \"M159.1 176C139.4 219.2 128 264.7 128 300.8c0 15.9 2.2 31.4 6.3 46l-31.8-7.9C70.5 330.9 48 302.1 48 269l0-85c0-4.4 3.6-8 8-8l103.1 0zm26-48L56 128c-30.9 0-56 25.1-56 56l0 85c0 55.1 37.5 103.1 90.9 116.4l71.3 17.8c22.7 30.5 55.4 54.1 93.8 66.6l0-76.6c-19.7-16.4-32-40.3-32-66.9c0-49.5 43-134.4 96-134.4c52.5 0 96 84.9 96 134.4c0 26.7-12.4 50.4-32 66.8l0 76.6c38-12.6 70.6-36 93.5-66.4l71.6-17.9C602.5 372.1 640 324.1 640 269l0-85c0-30.9-25.1-56-56-56l-129.5 0C419.7 73.8 372.1 32 320 32c-52.6 0-100.2 41.8-134.9 96zm295.6 48L584 176c4.4 0 8 3.6 8 8l0 85c0 33-22.5 61.8-54.5 69.9l-31.8 8c4.2-14.7 6.4-30.1 6.4-46.1c0-36.1-11.6-81.6-31.3-124.8zM288 320l0 192 64 0 0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nconst faArrowRight = {\n  prefix: 'fas',\n  iconName: 'arrow-right',\n  icon: [448, 512, [8594], \"f061\", \"M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z\"]\n};\nconst faSignsPost = {\n  prefix: 'fas',\n  iconName: 'signs-post',\n  icon: [512, 512, [\"map-signs\"], \"f277\", \"M224 32L64 32C46.3 32 32 46.3 32 64l0 64c0 17.7 14.3 32 32 32l377.4 0c4.2 0 8.3-1.7 11.3-4.7l48-48c6.2-6.2 6.2-16.4 0-22.6l-48-48c-3-3-7.1-4.7-11.3-4.7L288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32zM480 256c0-17.7-14.3-32-32-32l-160 0 0-32-64 0 0 32L70.6 224c-4.2 0-8.3 1.7-11.3 4.7l-48 48c-6.2 6.2-6.2 16.4 0 22.6l48 48c3 3 7.1 4.7 11.3 4.7L448 352c17.7 0 32-14.3 32-32l0-64zM288 480l0-96-64 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32z\"]\n};\nconst faMapSigns = faSignsPost;\nconst faCashRegister = {\n  prefix: 'fas',\n  iconName: 'cash-register',\n  icon: [512, 512, [], \"f788\", \"M64 0C46.3 0 32 14.3 32 32l0 64c0 17.7 14.3 32 32 32l80 0 0 32-57 0c-31.6 0-58.5 23.1-63.3 54.4L1.1 364.1C.4 368.8 0 373.6 0 378.4L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-69.6c0-4.8-.4-9.6-1.1-14.4L488.2 214.4C483.5 183.1 456.6 160 425 160l-217 0 0-32 80 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L64 0zM96 48l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L96 80c-8.8 0-16-7.2-16-16s7.2-16 16-16zM64 432c0-8.8 7.2-16 16-16l352 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16zm48-168a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm120-24a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM160 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM328 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM256 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM424 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM352 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48z\"]\n};\nconst faPersonCircleQuestion = {\n  prefix: 'fas',\n  iconName: 'person-circle-question',\n  icon: [576, 512, [], \"e542\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM368 321.6l0 6.4c0 8.8 7.2 16 16 16s16-7.2 16-16l0-6.4c0-5.3 4.3-9.6 9.6-9.6l40.5 0c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2l0 14.8c0 8.8 7.2 16 16 16s16-7.2 16-16l0-5.1 23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9l-40.5 0c-23 0-41.6 18.6-41.6 41.6z\"]\n};\nconst faH = {\n  prefix: 'fas',\n  iconName: 'h',\n  icon: [384, 512, [104], \"48\", \"M320 256l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224 0-160c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 128L64 192 64 64c0-17.7-14.3-32-32-32S0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 256 0z\"]\n};\nconst faTarp = {\n  prefix: 'fas',\n  iconName: 'tarp',\n  icon: [576, 512, [], \"e57b\", \"M576 128c0-35.3-28.7-64-64-64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l352 0 0-128c0-17.7 14.3-32 32-32l128 0 0-160zM448 448L576 320l-128 0 0 128zM96 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faScrewdriverWrench = {\n  prefix: 'fas',\n  iconName: 'screwdriver-wrench',\n  icon: [512, 512, [\"tools\"], \"f7d9\", \"M78.6 5C69.1-2.4 55.6-1.5 47 7L7 47c-8.5 8.5-9.4 22-2.1 31.6l80 104c4.5 5.9 11.6 9.4 19 9.4l54.1 0 109 109c-14.7 29-10 65.4 14.3 89.6l112 112c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-112-112c-24.2-24.2-60.6-29-89.6-14.3l-109-109 0-54.1c0-7.5-3.5-14.5-9.4-19L78.6 5zM19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L233.7 374.3c-7.8-20.9-9-43.6-3.6-65.1l-61.7-61.7L19.9 396.1zM512 144c0-10.5-1.1-20.7-3.2-30.5c-2.4-11.2-16.1-14.1-24.2-6l-63.9 63.9c-3 3-7.1 4.7-11.3 4.7L352 176c-8.8 0-16-7.2-16-16l0-57.4c0-4.2 1.7-8.3 4.7-11.3l63.9-63.9c8.1-8.1 5.2-21.8-6-24.2C388.7 1.1 378.5 0 368 0C288.5 0 224 64.5 224 144l0 .8 85.3 85.3c36-9.1 75.8 .5 104 28.7L429 274.5c49-23 83-72.8 83-130.5zM56 432a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faTools = faScrewdriverWrench;\nconst faArrowsToEye = {\n  prefix: 'fas',\n  iconName: 'arrows-to-eye',\n  icon: [640, 512, [], \"e4bf\", \"M15 15C24.4 5.7 39.6 5.7 49 15l63 63L112 40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 96c0 13.3-10.7 24-24 24l-96 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l38.1 0L15 49C5.7 39.6 5.7 24.4 15 15zM133.5 243.9C158.6 193.6 222.7 112 320 112s161.4 81.6 186.5 131.9c3.8 7.6 3.8 16.5 0 24.2C481.4 318.4 417.3 400 320 400s-161.4-81.6-186.5-131.9c-3.8-7.6-3.8-16.5 0-24.2zM320 320a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM591 15c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-63 63 38.1 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-96 0c-13.3 0-24-10.7-24-24l0-96c0-13.3 10.7-24 24-24s24 10.7 24 24l0 38.1 63-63zM15 497c-9.4-9.4-9.4-24.6 0-33.9l63-63L40 400c-13.3 0-24-10.7-24-24s10.7-24 24-24l96 0c13.3 0 24 10.7 24 24l0 96c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-38.1L49 497c-9.4 9.4-24.6 9.4-33.9 0zm576 0l-63-63 0 38.1c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-96c0-13.3 10.7-24 24-24l96 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-38.1 0 63 63c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0z\"]\n};\nconst faPlugCircleBolt = {\n  prefix: 'fas',\n  iconName: 'plug-circle-bolt',\n  icon: [576, 512, [], \"e55b\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356l35.6 0c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380 376 380c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"]\n};\nconst faHeart = {\n  prefix: 'fas',\n  iconName: 'heart',\n  icon: [512, 512, [128153, 128154, 128155, 128156, 128420, 129293, 129294, 129505, 9829, 10084, 61578], \"f004\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z\"]\n};\nconst faMarsAndVenus = {\n  prefix: 'fas',\n  iconName: 'mars-and-venus',\n  icon: [512, 512, [9893], \"f224\", \"M337.8 14.8C341.5 5.8 350.3 0 360 0L472 0c13.3 0 24 10.7 24 24l0 112c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-24.7 24.7C407 163.3 416 192.6 416 224c0 80.2-59 146.6-136 158.2l0 25.8 24 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-24 0 0 32c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-32-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l24 0 0-25.8C155 370.6 96 304.2 96 224c0-88.4 71.6-160 160-160c39.6 0 75.9 14.4 103.8 38.2L382.1 80 343 41c-6.9-6.9-8.9-17.2-5.2-26.2zM448 48s0 0 0 0s0 0 0 0s0 0 0 0zM352 224a96 96 0 1 0 -192 0 96 96 0 1 0 192 0z\"]\n};\nconst faHouseUser = {\n  prefix: 'fas',\n  iconName: 'house-user',\n  icon: [576, 512, [\"home-user\"], \"e1b0\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-320.4 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24zM352 224a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zm-96 96c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80l-64 0z\"]\n};\nconst faHomeUser = faHouseUser;\nconst faDumpsterFire = {\n  prefix: 'fas',\n  iconName: 'dumpster-fire',\n  icon: [640, 512, [], \"f794\", \"M49.7 32l90.8 0L114.9 160l-94 0C9.3 160 0 150.7 0 139.1c0-2.1 .3-4.1 .9-6.1L26.8 48.9C29.9 38.9 39.2 32 49.7 32zM272 160l-124.5 0L173.1 32 272 32l0 128zm32 0l0-128 98.9 0 14.4 72.1c-1.7 1.1-3.3 2.4-4.8 3.8c-18.4 16.4-35.4 34-50.5 52.1l-58 0zm209.9-23.7c-1.7 1.6-3.4 3.2-5 4.8C498 129.6 486.7 118.6 475 108c-7.6-6.9-17-10.8-26.6-11.8L435.5 32l90.8 0c10.5 0 19.8 6.9 22.9 16.9L575.1 133c.2 .7 .4 1.4 .5 2.1c-17.8-15-44.3-14.6-61.7 1.2zM325.2 210.7C304.3 244.5 288 282.9 288 318.1c0 49.3 18.6 95.2 49.6 129.9L128 448c0 17.7-14.3 32-32 32s-32-14.3-32-32L44 288l-12 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l4 0-4-32 305.5 0c-4.4 6.2-8.5 12.5-12.3 18.7zm180.6-34.5L518 162.5c5.4-6.1 13.3-8.8 20.9-8.9c7.2 0 14.3 2.6 19.9 7.8c19.7 18.3 39.8 43.2 55 70.6C629 259.2 640 290.2 640 320.2C640 408.8 568.7 480 480 480c-89.6 0-160-71.3-160-159.8c0-37.3 16-73.4 36.8-104.5c20.9-31.3 47.5-59 70.9-80.2c5.7-5.2 13.1-7.7 20.3-7.5c14.1 .3 23.8 11.4 32.7 21.6c0 0 0 0 0 0c2 2.3 4 4.6 6 6.7l19 19.9zM544 368.2c0-36.5-37-73-54.8-88.4c-5.4-4.7-13.1-4.7-18.5 0C453 295.1 416 331.6 416 368.2c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faHouseCrack = {\n  prefix: 'fas',\n  iconName: 'house-crack',\n  icon: [576, 512, [], \"e3b1\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 160.4c0 35.3 28.7 64 64 64l102.3 0-31.3-52.2c-4.1-6.8-2.6-15.5 3.5-20.5L288 368l-60.2-82.8c-10.9-15 8.2-33.5 22.8-22l117.9 92.6c8 6.3 8.2 18.4 .4 24.9L288 448l38.4 64 122.1 0c35.5 0 64.2-28.8 64-64.3l-.7-160.2 32 0z\"]\n};\nconst faMartiniGlassCitrus = {\n  prefix: 'fas',\n  iconName: 'martini-glass-citrus',\n  icon: [576, 512, [\"cocktail\"], \"f561\", \"M432 240c53 0 96-43 96-96s-43-96-96-96c-35.5 0-66.6 19.3-83.2 48l-52.6 0C316 40.1 369.3 0 432 0c79.5 0 144 64.5 144 144s-64.5 144-144 144c-27.7 0-53.5-7.8-75.5-21.3l35.4-35.4c12.2 5.6 25.8 8.7 40.1 8.7zM1.8 142.8C5.5 133.8 14.3 128 24 128l368 0c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-177 177L232 464l64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-88 0-88 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-118.1L7 169c-6.9-6.9-8.9-17.2-5.2-26.2z\"]\n};\nconst faCocktail = faMartiniGlassCitrus;\nconst faFaceSurprise = {\n  prefix: 'fas',\n  iconName: 'face-surprise',\n  icon: [512, 512, [128558, \"surprise\"], \"f5c2\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM256 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faSurprise = faFaceSurprise;\nconst faBottleWater = {\n  prefix: 'fas',\n  iconName: 'bottle-water',\n  icon: [320, 512, [], \"e4c5\", \"M120 0l80 0c13.3 0 24 10.7 24 24l0 40L96 64l0-40c0-13.3 10.7-24 24-24zM32 167.5c0-19.5 10-37.6 26.6-47.9l15.8-9.9C88.7 100.7 105.2 96 122.1 96l75.8 0c16.9 0 33.4 4.7 47.7 13.7l15.8 9.9C278 129.9 288 148 288 167.5c0 17-7.5 32.3-19.4 42.6C280.6 221.7 288 238 288 256c0 19.1-8.4 36.3-21.7 48c13.3 11.7 21.7 28.9 21.7 48s-8.4 36.3-21.7 48c13.3 11.7 21.7 28.9 21.7 48c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64c0-19.1 8.4-36.3 21.7-48C40.4 388.3 32 371.1 32 352s8.4-36.3 21.7-48C40.4 292.3 32 275.1 32 256c0-18 7.4-34.3 19.4-45.9C39.5 199.7 32 184.5 32 167.5zM96 240c0 8.8 7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0c-8.8 0-16 7.2-16 16zm16 112c-8.8 0-16 7.2-16 16s7.2 16 16 16l96 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-96 0z\"]\n};\nconst faCirclePause = {\n  prefix: 'fas',\n  iconName: 'circle-pause',\n  icon: [512, 512, [62092, \"pause-circle\"], \"f28b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM224 192l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faPauseCircle = faCirclePause;\nconst faToiletPaperSlash = {\n  prefix: 'fas',\n  iconName: 'toilet-paper-slash',\n  icon: [640, 512, [], \"e072\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-109.7-86C569.9 374 608 291.9 608 192C608 86 565 0 512 0s-96 86-96 192c0 49.1 9.2 93.9 24.4 127.9l-59-46.2c1.6-24.8 2.6-52 2.6-81.6c0-65.5 13.2-142.4 60.2-192L160 0c-24.8 0-47.4 18.8-64.4 49.6L38.8 5.1zM367.3 385.4L66.5 148.4C64.9 162.4 64 177 64 192c0 101.5-11.7 170.8-23 213.9c-5.1 19.4-10.7 39.9-20.5 57.7c-5.9 9.9-6.1 22.1-.4 32.2S36.5 512 48 512l237.9 0c22.3 0 45.4-12.1 55.4-36.1c7.4-17.7 17.5-47.2 26-90.6zM544 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64z\"]\n};\nconst faAppleWhole = {\n  prefix: 'fas',\n  iconName: 'apple-whole',\n  icon: [448, 512, [127822, 127823, \"apple-alt\"], \"f5d1\", \"M224 112c-8.8 0-16-7.2-16-16l0-16c0-44.2 35.8-80 80-80l16 0c8.8 0 16 7.2 16 16l0 16c0 44.2-35.8 80-80 80l-16 0zM0 288c0-76.3 35.7-160 112-160c27.3 0 59.7 10.3 82.7 19.3c18.8 7.3 39.9 7.3 58.7 0c22.9-8.9 55.4-19.3 82.7-19.3c76.3 0 112 83.7 112 160c0 128-80 224-160 224c-16.5 0-38.1-6.6-51.5-11.3c-8.1-2.8-16.9-2.8-25 0c-13.4 4.7-35 11.3-51.5 11.3C80 512 0 416 0 288z\"]\n};\nconst faAppleAlt = faAppleWhole;\nconst faKitchenSet = {\n  prefix: 'fas',\n  iconName: 'kitchen-set',\n  icon: [576, 512, [], \"e51a\", \"M240 144A96 96 0 1 0 48 144a96 96 0 1 0 192 0zm44.4 32C269.9 240.1 212.5 288 144 288C64.5 288 0 223.5 0 144S64.5 0 144 0c68.5 0 125.9 47.9 140.4 112l71.8 0c8.8-9.8 21.6-16 35.8-16l104 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-104 0c-14.2 0-27-6.2-35.8-16l-71.8 0zM144 80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c13.3 0 24 10.7 24 24l0 8 96 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-240 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l96 0 0-8c0-13.3 10.7-24 24-24zM288 464l0-112 224 0 0 112c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48zM48 320l80 0 16 0 32 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-16 0c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-80c0-8.8 7.2-16 16-16zm128 64c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0 32 16 0zM24 464l176 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faR = {\n  prefix: 'fas',\n  iconName: 'r',\n  icon: [320, 512, [114], \"52\", \"M64 32C28.7 32 0 60.7 0 96L0 288 0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 95.3 0L261.8 466.4c10.1 14.5 30.1 18 44.6 7.9s18-30.1 7.9-44.6L230.1 309.5C282.8 288.1 320 236.4 320 176c0-79.5-64.5-144-144-144L64 32zM176 256L64 256 64 96l112 0c44.2 0 80 35.8 80 80s-35.8 80-80 80z\"]\n};\nconst faTemperatureQuarter = {\n  prefix: 'fas',\n  iconName: 'temperature-quarter',\n  icon: [320, 512, [\"temperature-1\", \"thermometer-1\", \"thermometer-quarter\"], \"f2ca\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3l0-50.7c0-8.8 7.2-16 16-16s16 7.2 16 16l0 50.7c18.6 6.6 32 24.4 32 45.3z\"]\n};\nconst faTemperature1 = faTemperatureQuarter;\nconst faThermometer1 = faTemperatureQuarter;\nconst faThermometerQuarter = faTemperatureQuarter;\nconst faCube = {\n  prefix: 'fas',\n  iconName: 'cube',\n  icon: [512, 512, [], \"f1b2\", \"M234.5 5.7c13.9-5 29.1-5 43.1 0l192 68.6C495 83.4 512 107.5 512 134.6l0 242.9c0 27-17 51.2-42.5 60.3l-192 68.6c-13.9 5-29.1 5-43.1 0l-192-68.6C17 428.6 0 404.5 0 377.4L0 134.6c0-27 17-51.2 42.5-60.3l192-68.6zM256 66L82.3 128 256 190l173.7-62L256 66zm32 368.6l160-57.1 0-188L288 246.6l0 188z\"]\n};\nconst faBitcoinSign = {\n  prefix: 'fas',\n  iconName: 'bitcoin-sign',\n  icon: [320, 512, [], \"e0b4\", \"M48 32C48 14.3 62.3 0 80 0s32 14.3 32 32l0 32 32 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32c0 1.5-.1 3.1-.3 4.5C254.1 82.2 288 125.1 288 176c0 24.2-7.7 46.6-20.7 64.9c31.7 19.8 52.7 55 52.7 95.1c0 61.9-50.1 112-112 112l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-6.3 0C18.7 448 0 429.3 0 406.3L0 288l0-22.3L0 224 0 101.6C0 80.8 16.8 64 37.6 64L48 64l0-32zM64 224l112 0c26.5 0 48-21.5 48-48s-21.5-48-48-48L64 128l0 96zm112 64L64 288l0 96 144 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-32 0z\"]\n};\nconst faShieldDog = {\n  prefix: 'fas',\n  iconName: 'shield-dog',\n  icon: [512, 512, [], \"e573\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160.9 286.2c4.8 1.2 9.9 1.8 15.1 1.8c35.3 0 64-28.7 64-64l0-64 44.2 0c12.1 0 23.2 6.8 28.6 17.7L320 192l64 0c8.8 0 16 7.2 16 16l0 32c0 44.2-35.8 80-80 80l-48 0 0 50.7c0 7.3-5.9 13.3-13.3 13.3c-1.8 0-3.6-.4-5.2-1.1l-98.7-42.3c-6.6-2.8-10.8-9.3-10.8-16.4c0-2.8 .6-5.5 1.9-8l15-30zM160 160l40 0 8 0 0 32 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-48c0-8.8 7.2-16 16-16zm128 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faSolarPanel = {\n  prefix: 'fas',\n  iconName: 'solar-panel',\n  icon: [640, 512, [], \"f5ba\", \"M122.2 0C91.7 0 65.5 21.5 59.5 51.4L8.3 307.4C.4 347 30.6 384 71 384l217 0 0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64 217 0c40.4 0 70.7-36.9 62.8-76.6l-51.2-256C574.5 21.5 548.3 0 517.8 0L122.2 0zM260.9 64l118.2 0 10.4 104-139 0L260.9 64zM202.3 168l-100.8 0L122.2 64l90.4 0L202.3 168zM91.8 216l105.6 0L187.1 320 71 320 91.8 216zm153.9 0l148.6 0 10.4 104-169.4 0 10.4-104zm196.8 0l105.6 0L569 320l-116 0L442.5 216zm96-48l-100.8 0L427.3 64l90.4 0 31.4-6.3L517.8 64l20.8 104z\"]\n};\nconst faLockOpen = {\n  prefix: 'fas',\n  iconName: 'lock-open',\n  icon: [576, 512, [], \"f3c1\", \"M352 144c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48C576 64.5 511.5 0 432 0S288 64.5 288 144l0 48L64 192c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-32 0 0-48z\"]\n};\nconst faElevator = {\n  prefix: 'fas',\n  iconName: 'elevator',\n  icon: [512, 512, [], \"e16d\", \"M132.7 4.7l-64 64c-4.6 4.6-5.9 11.5-3.5 17.4s8.3 9.9 14.8 9.9l128 0c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-64-64c-6.2-6.2-16.4-6.2-22.6 0zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 128zm96 96a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM80 400c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 16c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-16zm192 0c0-26.5 21.5-48 48-48l64 0c26.5 0 48 21.5 48 48l0 16c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-16zm32-128a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM356.7 91.3c6.2 6.2 16.4 6.2 22.6 0l64-64c4.6-4.6 5.9-11.5 3.5-17.4S438.5 0 432 0L304 0c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l64 64z\"]\n};\nconst faMoneyBillTransfer = {\n  prefix: 'fas',\n  iconName: 'money-bill-transfer',\n  icon: [640, 512, [], \"e528\", \"M535 41c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l64 64c4.5 4.5 7 10.6 7 17s-2.5 12.5-7 17l-64 64c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23L384 112c-13.3 0-24-10.7-24-24s10.7-24 24-24l174.1 0L535 41zM105 377l-23 23L256 400c13.3 0 24 10.7 24 24s-10.7 24-24 24L81.9 448l23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 441c-4.5-4.5-7-10.6-7-17s2.5-12.5 7-17l64-64c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM96 64l241.9 0c-3.7 7.2-5.9 15.3-5.9 24c0 28.7 23.3 52 52 52l117.4 0c-4 17 .6 35.5 13.8 48.8c20.3 20.3 53.2 20.3 73.5 0L608 169.5 608 384c0 35.3-28.7 64-64 64l-241.9 0c3.7-7.2 5.9-15.3 5.9-24c0-28.7-23.3-52-52-52l-117.4 0c4-17-.6-35.5-13.8-48.8c-20.3-20.3-53.2-20.3-73.5 0L32 342.5 32 128c0-35.3 28.7-64 64-64zm64 64l-64 0 0 64c35.3 0 64-28.7 64-64zM544 320c-35.3 0-64 28.7-64 64l64 0 0-64zM320 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"]\n};\nconst faMoneyBillTrendUp = {\n  prefix: 'fas',\n  iconName: 'money-bill-trend-up',\n  icon: [512, 512, [], \"e529\", \"M470.7 9.4c3 3.1 5.3 6.6 6.9 10.3s2.4 7.8 2.4 12.2c0 0 0 .1 0 .1c0 0 0 0 0 0l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.7L310.6 214.6c-11.8 11.8-30.8 12.6-43.5 1.7L176 138.1 84.8 216.3c-13.4 11.5-33.6 9.9-45.1-3.5s-9.9-33.6 3.5-45.1l112-96c12-10.3 29.7-10.3 41.7 0l89.5 76.7L370.7 64 352 64c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0s0 0 0 0c8.8 0 16.8 3.6 22.6 9.3l.1 .1zM0 304c0-26.5 21.5-48 48-48l416 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 304zM48 416l0 48 48 0c0-26.5-21.5-48-48-48zM96 304l-48 0 0 48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48l48 0 0-48zM416 304c0 26.5 21.5 48 48 48l0-48-48 0zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faHouseFloodWaterCircleArrowRight = {\n  prefix: 'fas',\n  iconName: 'house-flood-water-circle-arrow-right',\n  icon: [640, 512, [], \"e50f\", \"M288 144A144 144 0 1 0 0 144a144 144 0 1 0 288 0zM140.7 76.7c6.2-6.2 16.4-6.2 22.6 0l56 56c6.2 6.2 6.2 16.4 0 22.6l-56 56c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L169.4 160 80 160c-8.8 0-16-7.2-16-16s7.2-16 16-16l89.4 0L140.7 99.3c-6.2-6.2-6.2-16.4 0-22.6zM320 144c0 57.3-27.4 108.2-69.8 140.3c11.8-3.6 23-9.4 33-16.2c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.4 78.1 3.4c2.1 1.7 4.2 3.3 6.5 4.9l-.3-84.4 16.6 0c13.9 0 26.1-8.9 30.4-22.1s-.4-27.6-11.6-35.8l-176-128C407.6-2 392.4-2 381.2 6.1L301 64.4c12.1 23.9 19 50.9 19 79.6zm18.5 165.9c-11.1-7.9-25.9-7.9-37 0C279 325.4 251.5 336 224 336c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C158.5 389.7 191 400 224 400c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.6 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7c0 0 0 0 0 0C471.4 325.2 442.9 336 416 336c-27.5 0-55-10.6-77.5-26.1zm0 112c-11.1-7.9-25.9-7.9-37 0C279 437.4 251.5 448 224 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C158.5 501.7 191 512 224 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.6 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C471.4 437.2 442.9 448 416 448c-27.5 0-55-10.6-77.5-26.1z\"]\n};\nconst faSquarePollHorizontal = {\n  prefix: 'fas',\n  iconName: 'square-poll-horizontal',\n  icon: [448, 512, [\"poll-h\"], \"f682\", \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM256 160c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32zm64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l192 0zM192 352c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faPollH = faSquarePollHorizontal;\nconst faCircle = {\n  prefix: 'fas',\n  iconName: 'circle',\n  icon: [512, 512, [128308, 128309, 128992, 128993, 128994, 128995, 128996, 9679, 9898, 9899, 11044, 61708, 61915], \"f111\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512z\"]\n};\nconst faBackwardFast = {\n  prefix: 'fas',\n  iconName: 'backward-fast',\n  icon: [512, 512, [9198, \"fast-backward\"], \"f049\", \"M493.6 445c-11.2 5.3-24.5 3.6-34.1-4.4L288 297.7 288 416c0 12.4-7.2 23.7-18.4 29s-24.5 3.6-34.1-4.4L64 297.7 64 416c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 96C0 78.3 14.3 64 32 64s32 14.3 32 32l0 118.3L235.5 71.4c9.5-7.9 22.8-9.7 34.1-4.4S288 83.6 288 96l0 118.3L459.5 71.4c9.5-7.9 22.8-9.7 34.1-4.4S512 83.6 512 96l0 320c0 12.4-7.2 23.7-18.4 29z\"]\n};\nconst faFastBackward = faBackwardFast;\nconst faRecycle = {\n  prefix: 'fas',\n  iconName: 'recycle',\n  icon: [512, 512, [9842, 9850, 9851], \"f1b8\", \"M174.7 45.1C192.2 17 223 0 256 0s63.8 17 81.3 45.1l38.6 61.7 27-15.6c8.4-4.9 18.9-4.2 26.6 1.7s11.1 15.9 8.6 25.3l-23.4 87.4c-3.4 12.8-16.6 20.4-29.4 17l-87.4-23.4c-9.4-2.5-16.3-10.4-17.6-20s3.4-19.1 11.8-23.9l28.4-16.4L283 79c-5.8-9.3-16-15-27-15s-21.2 5.7-27 15l-17.5 28c-9.2 14.8-28.6 19.5-43.6 10.5c-15.3-9.2-20.2-29.2-10.7-44.4l17.5-28zM429.5 251.9c15-9 34.4-4.3 43.6 10.5l24.4 39.1c9.4 15.1 14.4 32.4 14.6 50.2c.3 53.1-42.7 96.4-95.8 96.4L320 448l0 32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 32 96.2 0c17.6 0 31.9-14.4 31.8-32c0-5.9-1.7-11.7-4.8-16.7l-24.4-39.1c-9.5-15.2-4.7-35.2 10.7-44.4zm-364.6-31L36 204.2c-8.4-4.9-13.1-14.3-11.8-23.9s8.2-17.5 17.6-20l87.4-23.4c12.8-3.4 26 4.2 29.4 17L182 241.2c2.5 9.4-.9 19.3-8.6 25.3s-18.2 6.6-26.6 1.7l-26.5-15.3L68.8 335.3c-3.1 5-4.8 10.8-4.8 16.7c-.1 17.6 14.2 32 31.8 32l32.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32.2 0C42.7 448-.3 404.8 0 351.6c.1-17.8 5.1-35.1 14.6-50.2l50.3-80.5z\"]\n};\nconst faUserAstronaut = {\n  prefix: 'fas',\n  iconName: 'user-astronaut',\n  icon: [448, 512, [], \"f4fb\", \"M370.7 96.1C346.1 39.5 289.7 0 224 0S101.9 39.5 77.3 96.1C60.9 97.5 48 111.2 48 128l0 64c0 16.8 12.9 30.5 29.3 31.9C101.9 280.5 158.3 320 224 320s122.1-39.5 146.7-96.1c16.4-1.4 29.3-15.1 29.3-31.9l0-64c0-16.8-12.9-30.5-29.3-31.9zM336 144l0 16c0 53-43 96-96 96l-32 0c-53 0-96-43-96-96l0-16c0-26.5 21.5-48 48-48l128 0c26.5 0 48 21.5 48 48zM189.3 162.7l-6-21.2c-.9-3.3-3.9-5.5-7.3-5.5s-6.4 2.2-7.3 5.5l-6 21.2-21.2 6c-3.3 .9-5.5 3.9-5.5 7.3s2.2 6.4 5.5 7.3l21.2 6 6 21.2c.9 3.3 3.9 5.5 7.3 5.5s6.4-2.2 7.3-5.5l6-21.2 21.2-6c3.3-.9 5.5-3.9 5.5-7.3s-2.2-6.4-5.5-7.3l-21.2-6zM112.7 316.5C46.7 342.6 0 407 0 482.3C0 498.7 13.3 512 29.7 512l98.3 0 0-64c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 64 98.3 0c16.4 0 29.7-13.3 29.7-29.7c0-75.3-46.7-139.7-112.7-165.8C303.9 338.8 265.5 352 224 352s-79.9-13.2-111.3-35.5zM176 448c-8.8 0-16 7.2-16 16l0 48 32 0 0-48c0-8.8-7.2-16-16-16zm96 32a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faPlaneSlash = {\n  prefix: 'fas',\n  iconName: 'plane-slash',\n  icon: [640, 512, [], \"e069\", \"M514.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-73.8 0L630.8 469.1c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2S28.4-3.1 38.8 5.1L238.1 161.3 197.8 20.4C194.9 10.2 202.6 0 213.2 0l56.2 0c11.5 0 22.1 6.2 27.8 16.1L397.7 192l116.6 0zM41.5 128.7l321 252.9L297.2 495.9c-5.7 10-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.2-15.4-20.4l49-171.6L144 320l-43.2 57.6c-3 4-7.8 6.4-12.8 6.4l-42 0c-7.8 0-14-6.3-14-14c0-1.3 .2-2.6 .5-3.9L64 256 32.5 145.9c-.4-1.3-.5-2.6-.5-3.9c0-6.2 4-11.4 9.5-13.3z\"]\n};\nconst faTrademark = {\n  prefix: 'fas',\n  iconName: 'trademark',\n  icon: [640, 512, [8482], \"f25c\", \"M345.6 108.8c-8.3-11-22.7-15.5-35.7-11.2S288 114.2 288 128l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160 86.4 115.2c6 8.1 15.5 12.8 25.6 12.8s19.6-4.7 25.6-12.8L576 224l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-256c0-13.8-8.8-26-21.9-30.4s-27.5 .1-35.7 11.2L464 266.7 345.6 108.8zM0 128c0 17.7 14.3 32 32 32l64 0 0 224c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 96C14.3 96 0 110.3 0 128z\"]\n};\nconst faBasketball = {\n  prefix: 'fas',\n  iconName: 'basketball',\n  icon: [512, 512, [127936, \"basketball-ball\"], \"f434\", \"M86.6 64l85.2 85.2C194.5 121.7 208 86.4 208 48c0-14.7-2-28.9-5.7-42.4C158.6 15 119 35.5 86.6 64zM64 86.6C35.5 119 15 158.6 5.6 202.3C19.1 206 33.3 208 48 208c38.4 0 73.7-13.5 101.3-36.1L64 86.6zM256 0c-7.3 0-14.6 .3-21.8 .9C238 16 240 31.8 240 48c0 47.3-17.1 90.5-45.4 124L256 233.4 425.4 64C380.2 24.2 320.9 0 256 0zM48 240c-16.2 0-32-2-47.1-5.8C.3 241.4 0 248.7 0 256c0 64.9 24.2 124.2 64 169.4L233.4 256 172 194.6C138.5 222.9 95.3 240 48 240zm463.1 37.8c.6-7.2 .9-14.5 .9-21.8c0-64.9-24.2-124.2-64-169.4L278.6 256 340 317.4c33.4-28.3 76.7-45.4 124-45.4c16.2 0 32 2 47.1 5.8zm-4.7 31.9C492.9 306 478.7 304 464 304c-38.4 0-73.7 13.5-101.3 36.1L448 425.4c28.5-32.3 49.1-71.9 58.4-115.7zM340.1 362.7C317.5 390.3 304 425.6 304 464c0 14.7 2 28.9 5.7 42.4C353.4 497 393 476.5 425.4 448l-85.2-85.2zM317.4 340L256 278.6 86.6 448c45.1 39.8 104.4 64 169.4 64c7.3 0 14.6-.3 21.8-.9C274 496 272 480.2 272 464c0-47.3 17.1-90.5 45.4-124z\"]\n};\nconst faBasketballBall = faBasketball;\nconst faSatelliteDish = {\n  prefix: 'fas',\n  iconName: 'satellite-dish',\n  icon: [512, 512, [128225], \"f7c0\", \"M192 32c0-17.7 14.3-32 32-32C383.1 0 512 128.9 512 288c0 17.7-14.3 32-32 32s-32-14.3-32-32C448 164.3 347.7 64 224 64c-17.7 0-32-14.3-32-32zM60.6 220.6L164.7 324.7l28.4-28.4c-.7-2.6-1.1-5.4-1.1-8.3c0-17.7 14.3-32 32-32s32 14.3 32 32s-14.3 32-32 32c-2.9 0-5.6-.4-8.3-1.1l-28.4 28.4L291.4 451.4c14.5 14.5 11.8 38.8-7.3 46.3C260.5 506.9 234.9 512 208 512C93.1 512 0 418.9 0 304c0-26.9 5.1-52.5 14.4-76.1c7.5-19 31.8-21.8 46.3-7.3zM224 96c106 0 192 86 192 192c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-70.7-57.3-128-128-128c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faCircleUp = {\n  prefix: 'fas',\n  iconName: 'circle-up',\n  icon: [512, 512, [61467, \"arrow-alt-circle-up\"], \"f35b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm11.3-395.3l112 112c4.6 4.6 5.9 11.5 3.5 17.4s-8.3 9.9-14.8 9.9l-64 0 0 96c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-96-64 0c-6.5 0-12.3-3.9-14.8-9.9s-1.1-12.9 3.5-17.4l112-112c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faArrowAltCircleUp = faCircleUp;\nconst faMobileScreenButton = {\n  prefix: 'fas',\n  iconName: 'mobile-screen-button',\n  icon: [384, 512, [\"mobile-alt\"], \"f3cd\", \"M16 64C16 28.7 44.7 0 80 0L304 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L80 512c-35.3 0-64-28.7-64-64L16 64zM224 448a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM304 64L80 64l0 320 224 0 0-320z\"]\n};\nconst faMobileAlt = faMobileScreenButton;\nconst faVolumeHigh = {\n  prefix: 'fas',\n  iconName: 'volume-high',\n  icon: [640, 512, [128266, \"volume-up\"], \"f028\", \"M533.6 32.5C598.5 85.2 640 165.8 640 256s-41.5 170.7-106.4 223.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C557.5 398.2 592 331.2 592 256s-34.5-142.2-88.7-186.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM473.1 107c43.2 35.2 70.9 88.9 70.9 149s-27.7 113.8-70.9 149c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C475.3 341.3 496 301.1 496 256s-20.7-85.3-53.2-111.8c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zm-60.5 74.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM301.1 34.8C312.6 40 320 51.4 320 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352 64 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3z\"]\n};\nconst faVolumeUp = faVolumeHigh;\nconst faUsersRays = {\n  prefix: 'fas',\n  iconName: 'users-rays',\n  icon: [640, 512, [], \"e593\", \"M41 7C31.6-2.3 16.4-2.3 7 7S-2.3 31.6 7 41l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L41 7zM599 7L527 79c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0zM7 505c9.4 9.4 24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L7 471c-9.4 9.4-9.4 24.6 0 33.9zm592 0c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-72-72c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM212.1 336c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24c-.5-1.4-1-2.7-1.6-4c-9.4-22.3-29.8-38.9-54.3-43c-3.9-.7-7.9-1-12-1l-80 0c-4.1 0-8.1 .3-12 1c-.8 .1-1.7 .3-2.5 .5c-24.9 5.1-45.1 23-53.4 46.5zM175.8 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-26.5 32C119.9 256 96 279.9 96 309.3c0 14.7 11.9 26.7 26.7 26.7l56.1 0c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4l-69.3 0zm368 80c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3l-69.3 0c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6l56.1 0zM464 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faWallet = {\n  prefix: 'fas',\n  iconName: 'wallet',\n  icon: [512, 512, [], \"f555\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L80 128c-8.8 0-16-7.2-16-16s7.2-16 16-16l368 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L64 32zM416 272a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faClipboardCheck = {\n  prefix: 'fas',\n  iconName: 'clipboard-check',\n  icon: [384, 512, [], \"f46c\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM305 273L177 401c-9.4 9.4-24.6 9.4-33.9 0L79 337c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L271 239c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"]\n};\nconst faFileAudio = {\n  prefix: 'fas',\n  iconName: 'file-audio',\n  icon: [384, 512, [], \"f1c7\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zm2 226.3c37.1 22.4 62 63.1 62 109.7s-24.9 87.3-62 109.7c-7.6 4.6-17.4 2.1-22-5.4s-2.1-17.4 5.4-22C269.4 401.5 288 370.9 288 336s-18.6-65.5-46.5-82.3c-7.6-4.6-10-14.4-5.4-22s14.4-10 22-5.4zm-91.9 30.9c6 2.5 9.9 8.3 9.9 14.8l0 128c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5L113.4 376 80 376c-8.8 0-16-7.2-16-16l0-48c0-8.8 7.2-16 16-16l33.4 0 35.3-35.3c4.6-4.6 11.5-5.9 17.4-3.5zm51 34.9c6.6-5.9 16.7-5.3 22.6 1.3C249.8 304.6 256 319.6 256 336s-6.2 31.4-16.3 42.7c-5.9 6.6-16 7.1-22.6 1.3s-7.1-16-1.3-22.6c5.1-5.7 8.1-13.1 8.1-21.3s-3.1-15.7-8.1-21.3c-5.9-6.6-5.3-16.7 1.3-22.6z\"]\n};\nconst faBurger = {\n  prefix: 'fas',\n  iconName: 'burger',\n  icon: [512, 512, [\"hamburger\"], \"f805\", \"M61.1 224C45 224 32 211 32 194.9c0-1.9 .2-3.7 .6-5.6C37.9 168.3 78.8 32 256 32s218.1 136.3 223.4 157.3c.5 1.9 .6 3.7 .6 5.6c0 16.1-13 29.1-29.1 29.1L61.1 224zM144 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm240 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zM272 96a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM16 304c0-26.5 21.5-48 48-48l384 0c26.5 0 48 21.5 48 48s-21.5 48-48 48L64 352c-26.5 0-48-21.5-48-48zm16 96c0-8.8 7.2-16 16-16l416 0c8.8 0 16 7.2 16 16l0 16c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64l0-16z\"]\n};\nconst faHamburger = faBurger;\nconst faWrench = {\n  prefix: 'fas',\n  iconName: 'wrench',\n  icon: [512, 512, [128295], \"f0ad\", \"M352 320c88.4 0 160-71.6 160-160c0-15.3-2.2-30.1-6.2-44.2c-3.1-10.8-16.4-13.2-24.3-5.3l-76.8 76.8c-3 3-7.1 4.7-11.3 4.7L336 192c-8.8 0-16-7.2-16-16l0-57.4c0-4.2 1.7-8.3 4.7-11.3l76.8-76.8c7.9-7.9 5.4-21.2-5.3-24.3C382.1 2.2 367.3 0 352 0C263.6 0 192 71.6 192 160c0 19.1 3.4 37.5 9.5 54.5L19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L297.5 310.5c17 6.2 35.4 9.5 54.5 9.5zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faBugs = {\n  prefix: 'fas',\n  iconName: 'bugs',\n  icon: [576, 512, [], \"e4d0\", \"M164.5 107.4l33.4-73.5c5.5-12.1 .1-26.3-11.9-31.8s-26.3-.1-31.8 11.9L128 71.7 101.9 14.1C96.4 2 82.1-3.3 70.1 2.1S52.7 21.9 58.1 33.9l33.4 73.5c-10.2 7.1-18.2 17-22.9 28.6l-17 0-4.1-20.7c-2.6-13-15.2-21.4-28.2-18.8S-2.1 111.7 .5 124.7l8 40C10.7 175.9 20.6 184 32 184l32 0 0 23.3-37.8 9.5c-9.5 2.4-16.6 10.2-17.9 19.9l-8 56c-1.9 13.1 7.2 25.3 20.4 27.2s25.3-7.2 27.2-20.4l5.7-40 18.4-4.6C82.7 274.6 103.8 288 128 288s45.3-13.4 56.1-33.2l18.4 4.6 5.7 40c1.9 13.1 14 22.2 27.2 20.4s22.2-14 20.4-27.2l-8-56c-1.4-9.7-8.5-17.5-17.9-19.9L192 207.3l0-23.3 32 0c11.4 0 21.3-8.1 23.5-19.3l8-40c2.6-13-5.8-25.6-18.8-28.2s-25.6 5.8-28.2 18.8L204.3 136l-17 0c-4.7-11.6-12.7-21.5-22.9-28.6zM496 286.5l65.6-47c10.8-7.7 13.3-22.7 5.6-33.5s-22.7-13.3-33.5-5.6l-51.4 36.8 6.1-62.9c1.3-13.2-8.4-24.9-21.6-26.2s-24.9 8.4-26.2 21.6L432.8 250c-12.3 1-24.2 5.6-34.1 13.3L384 254.8l6.8-20c4.2-12.6-2.5-26.2-15-30.4s-26.2 2.5-30.4 15l-13.1 38.6c-3.7 10.8 .8 22.8 10.7 28.5l27.7 16L359 322.7 321.5 312c-9.4-2.7-19.5 .6-25.5 8.3l-34.9 44.5c-8.2 10.4-6.4 25.5 4.1 33.7s25.5 6.4 33.7-4.1l25-31.8 18.2 5.2c-.5 22.6 11 44.7 32 56.8s45.9 11 65.2-.7l13.6 13.2-15.1 37.5c-4.9 12.3 1 26.3 13.3 31.2s26.3-1 31.2-13.3L503.5 440c3.6-9.1 1.4-19.4-5.6-26.2l-28-27.1 11.6-20.1 27.7 16c9.9 5.7 22.5 3.7 30-4.9L566.2 347c8.7-10 7.8-25.1-2.2-33.9s-25.1-7.8-33.9 2.2l-13.9 15.9-14.7-8.5c1.7-12.4-.2-25-5.5-36.2z\"]\n};\nconst faRupeeSign = {\n  prefix: 'fas',\n  iconName: 'rupee-sign',\n  icon: [448, 512, [8360, \"rupee\"], \"f156\", \"M0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320 64 320l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 288 0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80L64 96l0 160zm256.5 16.4c-.9 6 0 8.7 .4 9.8c.4 1.1 1.4 2.6 4.2 4.9c7.2 5.7 18.7 10 37.9 16.8l1.3 .5c16 5.6 38.7 13.6 55.7 28.1c9.5 8.1 17.9 18.6 23.1 32.3c5.1 13.7 6.1 28.5 3.8 44c-4.2 28.1-20.5 49.3-43.8 60.9c-22.1 11-48.1 12.5-73.2 8l-.2 0s0 0 0 0c-9.3-1.8-20.5-5.7-29.3-9c-6-2.3-12.6-4.9-17.7-6.9c0 0 0 0 0 0c-2.5-1-4.6-1.8-6.3-2.5c-16.5-6.4-24.6-25-18.2-41.4s24.9-24.6 41.4-18.2c2.6 1 5.2 2 7.9 3.1c0 0 0 0 0 0c4.8 1.9 9.8 3.9 15.4 6c8.8 3.3 15.3 5.4 18.7 6c15.7 2.8 26.7 .8 32.9-2.3c5-2.5 8-6 9.1-13c1-6.9 .2-10.5-.5-12.3c-.6-1.7-1.8-3.6-4.5-5.9c-6.9-5.8-18.2-10.4-36.9-17l-3-1.1c-15.5-5.4-37-13-53.3-25.9c-9.5-7.5-18.3-17.6-23.7-31c-5.5-13.4-6.6-28-4.4-43.2c8.4-57.1 67-78 116.9-68.9c6.9 1.3 27.3 5.8 35.4 8.4c16.9 5.2 26.3 23.2 21.1 40.1s-23.2 26.3-40.1 21.1c-4.7-1.4-22.3-5.5-27.9-6.5c-14.6-2.7-25.8-.4-32.6 3.2c-6.3 3.3-8.9 7.6-9.5 12z\"]\n};\nconst faRupee = faRupeeSign;\nconst faFileImage = {\n  prefix: 'fas',\n  iconName: 'file-image',\n  icon: [384, 512, [128443], \"f1c5\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM64 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm152 32c5.3 0 10.2 2.6 13.2 6.9l88 128c3.4 4.9 3.7 11.3 1 16.5s-8.2 8.6-14.2 8.6l-88 0-40 0-48 0-48 0c-5.8 0-11.1-3.1-13.9-8.1s-2.8-11.2 .2-16.1l48-80c2.9-4.8 8.1-7.8 13.7-7.8s10.8 2.9 13.7 7.8l12.8 21.4 48.3-70.2c3-4.3 7.9-6.9 13.2-6.9z\"]\n};\nconst faCircleQuestion = {\n  prefix: 'fas',\n  iconName: 'circle-question',\n  icon: [512, 512, [62108, \"question-circle\"], \"f059\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faQuestionCircle = faCircleQuestion;\nconst faPlaneDeparture = {\n  prefix: 'fas',\n  iconName: 'plane-departure',\n  icon: [640, 512, [128747], \"f5b0\", \"M381 114.9L186.1 41.8c-16.7-6.2-35.2-5.3-51.1 2.7L89.1 67.4C78 73 77.2 88.5 87.6 95.2l146.9 94.5L136 240 77.8 214.1c-8.7-3.9-18.8-3.7-27.3 .6L18.3 230.8c-9.3 4.7-11.8 16.8-5 24.7l73.1 85.3c6.1 7.1 15 11.2 24.3 11.2l137.7 0c5 0 9.9-1.2 14.3-3.4L535.6 212.2c46.5-23.3 82.5-63.3 100.8-112C645.9 75 627.2 48 600.2 48l-57.4 0c-20.2 0-40.2 4.8-58.2 14L381 114.9zM0 480c0 17.7 14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448c-17.7 0-32 14.3-32 32z\"]\n};\nconst faHandshakeSlash = {\n  prefix: 'fas',\n  iconName: 'handshake-slash',\n  icon: [640, 512, [], \"e060\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-135-105.8c-1.1-11.4-6.3-22.3-15.3-30.7l-134.2-123-23.4 18.2-26-20.3 77.2-60.1c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L512 316.8 512 128l-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2l-89.7 72.6-25.8-20.3 81.8-66.2c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-35.5 23.7L38.8 5.1zM96 171.6L40.6 128 0 128 0 352c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-180.4zM413.6 421.9L128 196.9 128 352l28.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c.8-.8 1.5-1.7 2.2-2.6zM48 320a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM544 128l0 224c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-224-96 0zm32 208a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nconst faBookBookmark = {\n  prefix: 'fas',\n  iconName: 'book-bookmark',\n  icon: [448, 512, [], \"e0bb\", \"M0 96C0 43 43 0 96 0l96 0 0 190.7c0 13.4 15.5 20.9 26 12.5L272 160l54 43.2c10.5 8.4 26 .9 26-12.5L352 0l32 0 32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32z\"]\n};\nconst faCodeBranch = {\n  prefix: 'fas',\n  iconName: 'code-branch',\n  icon: [448, 512, [], \"f126\", \"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3l0 87.8c18.8-10.9 40.7-17.1 64-17.1l96 0c35.3 0 64-28.7 64-64l0-6.7C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3l0 6.7c0 70.7-57.3 128-128 128l-96 0c-35.3 0-64 28.7-64 64l0 6.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3l0-6.7 0-198.7C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm232 0a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM80 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faHatCowboy = {\n  prefix: 'fas',\n  iconName: 'hat-cowboy',\n  icon: [640, 512, [], \"f8c0\", \"M320 64c14.4 0 22.3-7 30.8-14.4C360.4 41.1 370.7 32 392 32c49.3 0 84.4 152.2 97.9 221.9C447.8 272.1 390.9 288 320 288s-127.8-15.9-169.9-34.1C163.6 184.2 198.7 32 248 32c21.3 0 31.6 9.1 41.2 17.6C297.7 57 305.6 64 320 64zM111.1 270.7c47.2 24.5 117.5 49.3 209 49.3s161.8-24.8 208.9-49.3c24.8-12.9 49.8-28.3 70.1-47.7c7.9-7.9 20.2-9.2 29.6-3.3c9.5 5.9 13.5 17.9 9.9 28.5c-13.5 37.7-38.4 72.3-66.1 100.6C523.7 398.9 443.6 448 320 448s-203.6-49.1-252.5-99.2C39.8 320.4 14.9 285.8 1.4 248.1c-3.6-10.6 .4-22.6 9.9-28.5c9.5-5.9 21.7-4.5 29.6 3.3c20.4 19.4 45.3 34.8 70.1 47.7z\"]\n};\nconst faBridge = {\n  prefix: 'fas',\n  iconName: 'bridge',\n  icon: [576, 512, [], \"e4c8\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l40 0 0 64L0 160 0 288c53 0 96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96s96 43 96 96l0 64c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-64c0-53 43-96 96-96l0-128-72 0 0-64 40 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM456 96l0 64-80 0 0-64 80 0zM328 96l0 64-80 0 0-64 80 0zM200 96l0 64-80 0 0-64 80 0z\"]\n};\nconst faPhoneFlip = {\n  prefix: 'fas',\n  iconName: 'phone-flip',\n  icon: [512, 512, [128381, \"phone-alt\"], \"f879\", \"M347.1 24.6c7.7-18.6 28-28.5 47.4-23.2l88 24C499.9 30.2 512 46 512 64c0 247.4-200.6 448-448 448c-18 0-33.8-12.1-38.6-29.5l-24-88c-5.3-19.4 4.6-39.7 23.2-47.4l96-40c16.3-6.8 35.2-2.1 46.3 11.6L207.3 368c70.4-33.3 127.4-90.3 160.7-160.7L318.7 167c-13.7-11.2-18.4-30-11.6-46.3l40-96z\"]\n};\nconst faPhoneAlt = faPhoneFlip;\nconst faTruckFront = {\n  prefix: 'fas',\n  iconName: 'truck-front',\n  icon: [512, 512, [], \"e2b7\", \"M0 80C0 35.8 35.8 0 80 0L432 0c44.2 0 80 35.8 80 80l0 288c0 26.2-12.6 49.4-32 64l0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-256 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48C12.6 417.4 0 394.2 0 368L0 80zm129.9 72.2L112 224l288 0-17.9-71.8C378.5 138 365.7 128 351 128l-190 0c-14.7 0-27.5 10-31 24.2zM128 320a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faCat = {\n  prefix: 'fas',\n  iconName: 'cat',\n  icon: [576, 512, [128008], \"f6be\", \"M320 192l17.1 0c22.1 38.3 63.5 64 110.9 64c11 0 21.8-1.4 32-4l0 4 0 32 0 192c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-140.8L280 448l56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-144 0c-53 0-96-43-96-96l0-223.5c0-16.1-12-29.8-28-31.8l-7.9-1c-17.5-2.2-30-18.2-27.8-35.7s18.2-30 35.7-27.8l7.9 1c48 6 84.1 46.8 84.1 95.3l0 85.3c34.4-51.7 93.2-85.8 160-85.8zm160 26.5s0 0 0 0c-10 3.5-20.8 5.5-32 5.5c-28.4 0-54-12.4-71.6-32c0 0 0 0 0 0c-3.7-4.1-7-8.5-9.9-13.2C357.3 164 352 146.6 352 128c0 0 0 0 0 0l0-96 0-20 0-1.3C352 4.8 356.7 .1 362.6 0l.2 0c3.3 0 6.4 1.6 8.4 4.2c0 0 0 0 0 .1L384 21.3l27.2 36.3L416 64l64 0 4.8-6.4L512 21.3 524.8 4.3c0 0 0 0 0-.1c2-2.6 5.1-4.2 8.4-4.2l.2 0C539.3 .1 544 4.8 544 10.7l0 1.3 0 20 0 96c0 17.3-4.6 33.6-12.6 47.6c-11.3 19.8-29.6 35.2-51.4 42.9zM432 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faAnchorCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'anchor-circle-exclamation',\n  icon: [640, 512, [], \"e4ab\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2L320 448l0-80 0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faTruckField = {\n  prefix: 'fas',\n  iconName: 'truck-field',\n  icon: [640, 512, [], \"e58d\", \"M32 96c0-35.3 28.7-64 64-64l224 0c23.7 0 44.4 12.9 55.4 32l51.8 0c25.3 0 48.2 14.9 58.5 38l52.8 118.8c.5 1.1 .9 2.1 1.3 3.2l4.2 0c35.3 0 64 28.7 64 64l0 32c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-32c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32l0-32zM384 224l85.9 0-42.7-96L384 128l0 96zM160 432a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faRoute = {\n  prefix: 'fas',\n  iconName: 'route',\n  icon: [512, 512, [], \"f4d7\", \"M512 96c0 50.2-59.1 125.1-84.6 155c-3.8 4.4-9.4 6.1-14.5 5L320 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c53 0 96 43 96 96s-43 96-96 96l-276.4 0c8.7-9.9 19.3-22.6 30-36.8c6.3-8.4 12.8-17.6 19-27.2L416 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0c-53 0-96-43-96-96s43-96 96-96l39.8 0c-21-31.5-39.8-67.7-39.8-96c0-53 43-96 96-96s96 43 96 96zM117.1 489.1c-3.8 4.3-7.2 8.1-10.1 11.3l-1.8 2-.2-.2c-6 4.6-14.6 4-20-1.8C59.8 473 0 402.5 0 352c0-53 43-96 96-96s96 43 96 96c0 30-21.1 67-43.5 97.9c-10.7 14.7-21.7 28-30.8 38.5l-.6 .7zM128 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faClipboardQuestion = {\n  prefix: 'fas',\n  iconName: 'clipboard-question',\n  icon: [384, 512, [], \"e4e3\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM105.8 229.3c7.9-22.3 29.1-37.3 52.8-37.3l58.3 0c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L216 328.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24l0-13.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1l-58.3 0c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM160 416a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faPanorama = {\n  prefix: 'fas',\n  iconName: 'panorama',\n  icon: [640, 512, [], \"e209\", \"M45.6 32C20.4 32 0 52.4 0 77.6L0 434.4C0 459.6 20.4 480 45.6 480c5.1 0 10-.8 14.7-2.4C74.6 472.8 177.6 440 320 440s245.4 32.8 259.6 37.6c4.7 1.6 9.7 2.4 14.7 2.4c25.2 0 45.6-20.4 45.6-45.6l0-356.7C640 52.4 619.6 32 594.4 32c-5 0-10 .8-14.7 2.4C565.4 39.2 462.4 72 320 72S74.6 39.2 60.4 34.4C55.6 32.8 50.7 32 45.6 32zM96 160a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm272 0c7.9 0 15.4 3.9 19.8 10.5L512.3 353c5.4 8 5.6 18.4 .4 26.5s-14.7 12.3-24.2 10.7C442.7 382.4 385.2 376 320 376c-65.6 0-123.4 6.5-169.3 14.4c-9.8 1.7-19.7-2.9-24.7-11.5s-4.3-19.4 1.9-27.2L197.3 265c4.6-5.7 11.4-9 18.7-9s14.2 3.3 18.7 9l26.4 33.1 87-127.6c4.5-6.6 11.9-10.5 19.8-10.5z\"]\n};\nconst faCommentMedical = {\n  prefix: 'fas',\n  iconName: 'comment-medical',\n  icon: [512, 512, [], \"f7f5\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM224 160c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faTeethOpen = {\n  prefix: 'fas',\n  iconName: 'teeth-open',\n  icon: [576, 512, [], \"f62f\", \"M96 32C43 32 0 75 0 128l0 64c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-64c0-53-43-96-96-96L96 32zM224 96c26.5 0 48 21.5 48 48l0 56c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-56c0-26.5 21.5-48 48-48zm80 48c0-26.5 21.5-48 48-48s48 21.5 48 48l0 56c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-56zM96 128c26.5 0 48 21.5 48 48l0 24c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-24c0-26.5 21.5-48 48-48zm336 48c0-26.5 21.5-48 48-48s48 21.5 48 48l0 24c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-24zM96 480l384 0c53 0 96-43 96-96l0-32c0-35.3-28.7-64-64-64L64 288c-35.3 0-64 28.7-64 64l0 32c0 53 43 96 96 96zm0-64c-26.5 0-48-21.5-48-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48zm80-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48s-48-21.5-48-48zm176 48c-26.5 0-48-21.5-48-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48zm80-48l0-24c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 24c0 26.5-21.5 48-48 48s-48-21.5-48-48z\"]\n};\nconst faFileCircleMinus = {\n  prefix: 'fas',\n  iconName: 'file-circle-minus',\n  icon: [576, 512, [], \"e4ed\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16l-128 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l128 0c8.8 0 16-7.2 16-16z\"]\n};\nconst faTags = {\n  prefix: 'fas',\n  iconName: 'tags',\n  icon: [512, 512, [], \"f02c\", \"M345 39.1L472.8 168.4c52.4 53 52.4 138.2 0 191.2L360.8 472.9c-9.3 9.4-24.5 9.5-33.9 .2s-9.5-24.5-.2-33.9L438.6 325.9c33.9-34.3 33.9-89.4 0-123.7L310.9 72.9c-9.3-9.4-9.2-24.6 .2-33.9s24.6-9.2 33.9 .2zM0 229.5L0 80C0 53.5 21.5 32 48 32l149.5 0c17 0 33.3 6.7 45.3 18.7l168 168c25 25 25 65.5 0 90.5L277.3 442.7c-25 25-65.5 25-90.5 0l-168-168C6.7 262.7 0 246.5 0 229.5zM144 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faWineGlass = {\n  prefix: 'fas',\n  iconName: 'wine-glass',\n  icon: [320, 512, [127863], \"f4e3\", \"M32.1 29.3C33.5 12.8 47.4 0 64 0L256 0c16.6 0 30.5 12.8 31.9 29.3l14 168.4c6 72-42.5 135.2-109.9 150.6l0 99.6 48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-80 0-80 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0 0-99.6C60.6 333 12.1 269.8 18.1 197.8l14-168.4zm56 98.7l143.8 0-5.3-64L93.4 64l-5.3 64z\"]\n};\nconst faForwardFast = {\n  prefix: 'fas',\n  iconName: 'forward-fast',\n  icon: [512, 512, [9197, \"fast-forward\"], \"f050\", \"M18.4 445c11.2 5.3 24.5 3.6 34.1-4.4L224 297.7 224 416c0 12.4 7.2 23.7 18.4 29s24.5 3.6 34.1-4.4L448 297.7 448 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-320c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 118.3L276.5 71.4c-9.5-7.9-22.8-9.7-34.1-4.4S224 83.6 224 96l0 118.3L52.5 71.4c-9.5-7.9-22.8-9.7-34.1-4.4S0 83.6 0 96L0 416c0 12.4 7.2 23.7 18.4 29z\"]\n};\nconst faFastForward = faForwardFast;\nconst faFaceMehBlank = {\n  prefix: 'fas',\n  iconName: 'face-meh-blank',\n  icon: [512, 512, [128566, \"meh-blank\"], \"f5a4\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm208.4-48a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm128 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faMehBlank = faFaceMehBlank;\nconst faSquareParking = {\n  prefix: 'fas',\n  iconName: 'square-parking',\n  icon: [448, 512, [127359, \"parking\"], \"f540\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM192 256l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0 0 64zm48 64l-48 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64 0-120c0-22.1 17.9-40 40-40l72 0c53 0 96 43 96 96s-43 96-96 96z\"]\n};\nconst faParking = faSquareParking;\nconst faHouseSignal = {\n  prefix: 'fas',\n  iconName: 'house-signal',\n  icon: [576, 512, [], \"e012\", \"M357.7 8.5c-12.3-11.3-31.2-11.3-43.4 0l-208 192c-9.4 8.6-12.7 22-8.5 34c87.1 25.3 155.6 94.2 180.3 181.6L464 416c26.5 0 48-21.5 48-48l0-112 32 0c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8.1-35.2l-208-192zM288 208c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16l0-64zM24 256c-13.3 0-24 10.7-24 24s10.7 24 24 24c101.6 0 184 82.4 184 184c0 13.3 10.7 24 24 24s24-10.7 24-24c0-128.1-103.9-232-232-232zm8 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM0 376c0 13.3 10.7 24 24 24c48.6 0 88 39.4 88 88c0 13.3 10.7 24 24 24s24-10.7 24-24c0-75.1-60.9-136-136-136c-13.3 0-24 10.7-24 24z\"]\n};\nconst faBarsProgress = {\n  prefix: 'fas',\n  iconName: 'bars-progress',\n  icon: [512, 512, [\"tasks-alt\"], \"f828\", \"M448 160l-128 0 0-32 128 0 0 32zM48 64C21.5 64 0 85.5 0 112l0 64c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48L48 64zM448 352l0 32-256 0 0-32 256 0zM48 288c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48L48 288z\"]\n};\nconst faTasksAlt = faBarsProgress;\nconst faFaucetDrip = {\n  prefix: 'fas',\n  iconName: 'faucet-drip',\n  icon: [512, 512, [128688], \"e006\", \"M224 0c17.7 0 32 14.3 32 32l0 12 96-12c17.7 0 32 14.3 32 32s-14.3 32-32 32L256 84l-31-3.9-1-.1-1 .1L192 84 96 96C78.3 96 64 81.7 64 64s14.3-32 32-32l96 12 0-12c0-17.7 14.3-32 32-32zM0 224c0-17.7 14.3-32 32-32l96 0 22.6-22.6c6-6 14.1-9.4 22.6-9.4l18.7 0 0-43.8 32-4 32 4 0 43.8 18.7 0c8.5 0 16.6 3.4 22.6 9.4L320 192l32 0c88.4 0 160 71.6 160 160c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s-14.3-32-32-32l-36.1 0c-20.2 29-53.9 48-91.9 48s-71.7-19-91.9-48L32 320c-17.7 0-32-14.3-32-32l0-64zM436.8 423.4c1.9-4.5 6.3-7.4 11.2-7.4s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1l18.2-42.4z\"]\n};\nconst faCartFlatbed = {\n  prefix: 'fas',\n  iconName: 'cart-flatbed',\n  icon: [640, 512, [\"dolly-flatbed\"], \"f474\", \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64l16 0c8.8 0 16 7.2 16 16l0 288c0 44.2 35.8 80 80 80l18.7 0c-1.8 5-2.7 10.4-2.7 16c0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16l197.5 0c-1.8 5-2.7 10.4-2.7 16c0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16l66.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-464 0c-8.8 0-16-7.2-16-16l0-288C128 35.8 92.2 0 48 0L32 0zM192 80l0 192c0 26.5 21.5 48 48 48l320 0c26.5 0 48-21.5 48-48l0-192c0-26.5-21.5-48-48-48l-96 0 0 144c0 5.9-3.2 11.3-8.5 14.1s-11.5 2.5-16.4-.8L400 163.2l-39.1 26.1c-4.9 3.3-11.2 3.6-16.4 .8s-8.5-8.2-8.5-14.1l0-144-96 0c-26.5 0-48 21.5-48 48z\"]\n};\nconst faDollyFlatbed = faCartFlatbed;\nconst faBanSmoking = {\n  prefix: 'fas',\n  iconName: 'ban-smoking',\n  icon: [512, 512, [128685, \"smoking-ban\"], \"f54d\", \"M99.5 144.8L178.7 224l96 96 92.5 92.5C335.9 434.9 297.5 448 256 448C150 448 64 362 64 256c0-41.5 13.1-79.9 35.5-111.2zM333.3 288l-32-32 82.7 0 0 32-50.7 0zm32 32l34.7 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-130.7 0L144.8 99.5C176.1 77.1 214.5 64 256 64c106 0 192 86 192 192c0 41.5-13.1 79.9-35.5 111.2L365.3 320zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM272 96c-8.8 0-16 7.2-16 16c0 26.5 21.5 48 48 48l32 0c8.8 0 16 7.2 16 16s7.2 16 16 16s16-7.2 16-16c0-26.5-21.5-48-48-48l-32 0c-8.8 0-16-7.2-16-16s-7.2-16-16-16zM229.5 320l-96-96L112 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l117.5 0z\"]\n};\nconst faSmokingBan = faBanSmoking;\nconst faTerminal = {\n  prefix: 'fas',\n  iconName: 'terminal',\n  icon: [576, 512, [], \"f120\", \"M9.4 86.6C-3.1 74.1-3.1 53.9 9.4 41.4s32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L178.7 256 9.4 86.6zM256 416l288 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-288 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faMobileButton = {\n  prefix: 'fas',\n  iconName: 'mobile-button',\n  icon: [384, 512, [], \"f10b\", \"M80 0C44.7 0 16 28.7 16 64l0 384c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L80 0zM192 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faHouseMedicalFlag = {\n  prefix: 'fas',\n  iconName: 'house-medical-flag',\n  icon: [640, 512, [], \"e514\", \"M480 0c17.7 0 32 14.3 32 32l112 0c8.8 0 16 7.2 16 16l0 128c0 8.8-7.2 16-16 16l-112 0 0 320-64 0 0-320 0-160c0-17.7 14.3-32 32-32zM276.8 39.7L416 159l0 353 1 0-.2 0L96 512c-17.7 0-32-14.3-32-32l0-192-32 0c-13.4 0-25.4-8.3-30-20.9s-1-26.7 9.2-35.4l224-192c12-10.3 29.7-10.3 41.7 0zM224 208l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faBasketShopping = {\n  prefix: 'fas',\n  iconName: 'basket-shopping',\n  icon: [576, 512, [\"shopping-basket\"], \"f291\", \"M253.3 35.1c6.1-11.8 1.5-26.3-10.2-32.4s-26.3-1.5-32.4 10.2L117.6 192 32 192c-17.7 0-32 14.3-32 32s14.3 32 32 32L83.9 463.5C91 492 116.6 512 146 512L430 512c29.4 0 55-20 62.1-48.5L544 256c17.7 0 32-14.3 32-32s-14.3-32-32-32l-85.6 0L365.3 12.9C359.2 1.2 344.7-3.4 332.9 2.7s-16.3 20.6-10.2 32.4L404.3 192l-232.6 0L253.3 35.1zM192 304l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16zm96-16c8.8 0 16 7.2 16 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16zm128 16l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faShoppingBasket = faBasketShopping;\nconst faTape = {\n  prefix: 'fas',\n  iconName: 'tape',\n  icon: [576, 512, [], \"f4db\", \"M380.8 416c41.5-40.7 67.2-97.3 67.2-160C448 132.3 347.7 32 224 32S0 132.3 0 256S100.3 480 224 480l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-163.2 0zM224 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm64 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faBusSimple = {\n  prefix: 'fas',\n  iconName: 'bus-simple',\n  icon: [448, 512, [\"bus-alt\"], \"f55e\", \"M224 0C348.8 0 448 35.2 448 80l0 16 0 320c0 17.7-14.3 32-32 32l0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-192 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32c-17.7 0-32-14.3-32-32L0 96 0 80C0 35.2 99.2 0 224 0zM64 128l0 128c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L96 96c-17.7 0-32 14.3-32 32zM80 400a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm288 0a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faBusAlt = faBusSimple;\nconst faEye = {\n  prefix: 'fas',\n  iconName: 'eye',\n  icon: [576, 512, [128065], \"f06e\", \"M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z\"]\n};\nconst faFaceSadCry = {\n  prefix: 'fas',\n  iconName: 'face-sad-cry',\n  icon: [512, 512, [128557, \"sad-cry\"], \"f5b3\", \"M352 493.4c-29.6 12-62.1 18.6-96 18.6s-66.4-6.6-96-18.6L160 288c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 189.8C51.5 433.5 0 350.8 0 256C0 114.6 114.6 0 256 0S512 114.6 512 256c0 94.8-51.5 177.5-128 221.8L384 288c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 205.4zM195.2 233.6c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2c17.6-23.5 52.8-23.5 70.4 0zm121.6 0c17.6-23.5 52.8-23.5 70.4 0c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2zM208 336l0 32c0 26.5 21.5 48 48 48s48-21.5 48-48l0-32c0-26.5-21.5-48-48-48s-48 21.5-48 48z\"]\n};\nconst faSadCry = faFaceSadCry;\nconst faAudioDescription = {\n  prefix: 'fas',\n  iconName: 'audio-description',\n  icon: [576, 512, [], \"f29e\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM213.5 173.3l72 144c5.9 11.9 1.1 26.3-10.7 32.2s-26.3 1.1-32.2-10.7l-9.4-18.9-82.2 0-9.4 18.9c-5.9 11.9-20.3 16.7-32.2 10.7s-16.7-20.3-10.7-32.2l72-144c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3zm-.4 106.6L192 237.7l-21.1 42.2 42.2 0zM304 184c0-13.3 10.7-24 24-24l56 0c53 0 96 43 96 96s-43 96-96 96l-56 0c-13.3 0-24-10.7-24-24l0-144zm48 24l0 96 32 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-32 0z\"]\n};\nconst faPersonMilitaryToPerson = {\n  prefix: 'fas',\n  iconName: 'person-military-to-person',\n  icon: [512, 512, [], \"e54c\", \"M71 12.5c-8.6 1-15 8.2-15 16.8c0 9.3 7.5 16.8 16.7 16.9l111.4 0c8.8-.1 15.9-7.2 15.9-16L200 16c0-9.5-8.3-17-17.8-15.9L71 12.5zM189.5 78.1l-122.9 0C64.9 83.8 64 89.8 64 96c0 35.3 28.7 64 64 64s64-28.7 64-64c0-6.2-.9-12.2-2.5-17.9zM32 256l0 32c0 17.7 14.3 32 32 32l128 0c1.8 0 3.5-.1 5.2-.4L53 208.6C40.1 220.3 32 237.2 32 256zm190.2 42.5c1.1-3.3 1.8-6.8 1.8-10.5l0-32c0-35.3-28.7-64-64-64l-64 0c-3.7 0-7.4 .3-10.9 .9L222.2 298.5zM384 160a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-35.3 0-64 28.7-64 64l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32c0-35.3-28.7-64-64-64l-64 0zM215.8 450.1c5.2-4.6 8.2-11.1 8.2-18.1s-3-13.5-8.2-18.1l-64-56c-7.1-6.2-17.1-7.7-25.7-3.8S112 366.6 112 376l0 32-88 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l88 0 0 32c0 9.4 5.5 18 14.1 21.9s18.6 2.4 25.7-3.8l64-56zM288 431.9c0 6.9 2.9 13.5 8.1 18.1l64 56.4c7.1 6.2 17.1 7.8 25.7 3.9s14.1-12.4 14.1-21.9l0-32.4 88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0 0-32c0-9.4-5.5-18-14.1-21.9s-18.6-2.4-25.7 3.8l-64 56c-5.2 4.5-8.2 11.1-8.2 18z\"]\n};\nconst faFileShield = {\n  prefix: 'fas',\n  iconName: 'file-shield',\n  icon: [576, 512, [], \"e4f0\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 47-92.8 37.1c-21.3 8.5-35.2 29.1-35.2 52c0 56.6 18.9 148 94.2 208.3c-9 4.8-19.3 7.6-30.2 7.6L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm39.1 97.7c5.7-2.3 12.1-2.3 17.8 0l120 48C570 277.4 576 286.2 576 296c0 63.3-25.9 168.8-134.8 214.2c-5.9 2.5-12.6 2.5-18.5 0C313.9 464.8 288 359.3 288 296c0-9.8 6-18.6 15.1-22.3l120-48zM527.4 312L432 273.8l0 187.8c68.2-33 91.5-99 95.4-149.7z\"]\n};\nconst faUserSlash = {\n  prefix: 'fas',\n  iconName: 'user-slash',\n  icon: [640, 512, [], \"f506\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L353.3 251.6C407.9 237 448 187.2 448 128C448 57.3 390.7 0 320 0C250.2 0 193.5 55.8 192 125.2L38.8 5.1zM264.3 304.3C170.5 309.4 96 387.2 96 482.3c0 16.4 13.3 29.7 29.7 29.7l388.6 0c3.9 0 7.6-.7 11-2.1l-261-205.6z\"]\n};\nconst faPen = {\n  prefix: 'fas',\n  iconName: 'pen',\n  icon: [512, 512, [128394], \"f304\", \"M362.7 19.3L314.3 67.7 444.3 197.7l48.4-48.4c25-25 25-65.5 0-90.5L453.3 19.3c-25-25-65.5-25-90.5 0zm-71 71L58.6 323.5c-10.4 10.4-18 23.3-22.2 37.4L1 481.2C-1.5 489.7 .8 498.8 7 505s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L421.7 220.3 291.7 90.3z\"]\n};\nconst faTowerObservation = {\n  prefix: 'fas',\n  iconName: 'tower-observation',\n  icon: [512, 512, [], \"e586\", \"M241.7 3.4c9-4.5 19.6-4.5 28.6 0l160 80c15.8 7.9 22.2 27.1 14.3 42.9C439 137.5 427.7 144 416 144l0 80c0 17.7-14.3 32-32 32l-4.9 0 32 192 68.9 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-95.5 0c-.4 0-.8 0-1.1 0l-254.8 0c-.4 0-.8 0-1.1 0L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 32-192-4.9 0c-17.7 0-32-14.3-32-32l0-80c-11.7 0-23-6.5-28.6-17.7c-7.9-15.8-1.5-35 14.3-42.9l160-80zM314.5 448L256 399.2 197.5 448l117 0zM197.8 256l-4.7 28.3L256 336.8l62.9-52.5L314.2 256l-116.5 0zm-13.9 83.2l-11.2 67L218.5 368l-34.6-28.8zM293.5 368l45.8 38.1-11.2-67L293.5 368zM176 128c-8.8 0-16 7.2-16 16s7.2 16 16 16l160 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-160 0z\"]\n};\nconst faFileCode = {\n  prefix: 'fas',\n  iconName: 'file-code',\n  icon: [384, 512, [], \"f1c9\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM153 289l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L71 337c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM265 255l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"]\n};\nconst faSignal = {\n  prefix: 'fas',\n  iconName: 'signal',\n  icon: [640, 512, [128246, \"signal-5\", \"signal-perfect\"], \"f012\", \"M576 0c17.7 0 32 14.3 32 32l0 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-448c0-17.7 14.3-32 32-32zM448 96c17.7 0 32 14.3 32 32l0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352c0-17.7 14.3-32 32-32zM352 224l0 256c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32s32 14.3 32 32zM192 288c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32zM96 416l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faSignal5 = faSignal;\nconst faSignalPerfect = faSignal;\nconst faBus = {\n  prefix: 'fas',\n  iconName: 'bus',\n  icon: [576, 512, [128653], \"f207\", \"M288 0C422.4 0 512 35.2 512 80l0 16 0 32c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l0 160c0 17.7-14.3 32-32 32l0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-192 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32c-17.7 0-32-14.3-32-32l0-160c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32c0 0 0 0 0 0l0-32s0 0 0 0l0-16C64 35.2 153.6 0 288 0zM128 160l0 96c0 17.7 14.3 32 32 32l112 0 0-160-112 0c-17.7 0-32 14.3-32 32zM304 288l112 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-112 0 0 160zM144 400a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm288 0a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM384 80c0-8.8-7.2-16-16-16L208 64c-8.8 0-16 7.2-16 16s7.2 16 16 16l160 0c8.8 0 16-7.2 16-16z\"]\n};\nconst faHeartCircleXmark = {\n  prefix: 'fas',\n  iconName: 'heart-circle-xmark',\n  icon: [576, 512, [], \"e501\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L454.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L432 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L409.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L432 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faHouseChimney = {\n  prefix: 'fas',\n  iconName: 'house-chimney',\n  icon: [576, 512, [63499, \"home-lg\"], \"e3af\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L512 185l0-121c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32l0 36.7L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 64 0 24c0 22.1 17.9 40 40 40l24 0 32.5 0c1.4 0 2.8 0 4.2-.1c1.1 .1 2.2 .1 3.3 .1l16 0c22.1 0 40-17.9 40-40l0-16.2c.3-2.6 .5-5.3 .5-8.1l-.7-160.2 32 0z\"]\n};\nconst faHomeLg = faHouseChimney;\nconst faWindowMaximize = {\n  prefix: 'fas',\n  iconName: 'window-maximize',\n  icon: [512, 512, [128470], \"f2d0\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM96 96l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L96 160c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faFaceFrown = {\n  prefix: 'fas',\n  iconName: 'face-frown',\n  icon: [512, 512, [9785, \"frown\"], \"f119\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.3 388.7c-2.6 8.4-11.6 13.2-20 10.5s-13.2-11.6-10.5-20C145.2 326.1 196.3 288 256 288s110.8 38.1 127.3 91.3c2.6 8.4-2.1 17.4-10.5 20s-17.4-2.1-20-10.5C340.5 349.4 302.1 320 256 320s-84.5 29.4-96.7 68.7zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faFrown = faFaceFrown;\nconst faPrescription = {\n  prefix: 'fas',\n  iconName: 'prescription',\n  icon: [448, 512, [], \"f5b1\", \"M32 0C14.3 0 0 14.3 0 32L0 192l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 50.7 0 128 128L137.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 397.3 393.4 502.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L333.3 352 438.6 246.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 306.7l-85.8-85.8C251.4 209.1 288 164.8 288 112C288 50.1 237.9 0 176 0L32 0zM176 160L64 160l0-96 112 0c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nconst faShop = {\n  prefix: 'fas',\n  iconName: 'shop',\n  icon: [640, 512, [\"store-alt\"], \"f54f\", \"M36.8 192l566.3 0c20.3 0 36.8-16.5 36.8-36.8c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0L121.7 0c-16 0-31 8-39.9 21.4L6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM64 224l0 160 0 80c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-80 0-160-64 0 0 160-192 0 0-160-64 0zm448 0l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32l0-256-64 0z\"]\n};\nconst faStoreAlt = faShop;\nconst faFloppyDisk = {\n  prefix: 'fas',\n  iconName: 'floppy-disk',\n  icon: [448, 512, [128190, 128426, \"save\"], \"f0c7\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-242.7c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32L64 32zm0 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L96 224c-17.7 0-32-14.3-32-32l0-64zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faSave = faFloppyDisk;\nconst faVihara = {\n  prefix: 'fas',\n  iconName: 'vihara',\n  icon: [640, 512, [], \"f6a7\", \"M281 22L305.8 4.7c1.3-.9 2.7-1.8 4.1-2.4C313.1 .7 316.6 0 320 0s6.9 .7 10.1 2.2c1.4 .7 2.8 1.5 4.1 2.4L359 22C393 45.8 430.8 63.5 470.8 74.4l23 6.3c1.8 .5 3.6 1.1 5.2 2c3.2 1.7 5.9 4 8.1 6.8c3.8 4.9 5.6 11.3 4.7 17.8c-.4 2.8-1.2 5.4-2.5 7.8c-1.7 3.2-4 5.9-6.8 8.1c-4.3 3.2-9.6 5.1-15.1 4.9l-7.5 0 0 56.1 6.4 5.1 5.2 4.1c21.1 16.7 45 29.6 70.5 38.1l28.9 9.6c1.6 .5 3.2 1.2 4.6 2c3.1 1.7 5.8 4.1 7.8 6.9s3.5 6.1 4.1 9.6c.5 2.7 .6 5.5 .1 8.3s-1.4 5.4-2.7 7.8c-1.7 3.1-4.1 5.8-6.9 7.8s-6.1 3.5-9.6 4.1c-1.6 .3-3.3 .4-5 .4L544 288l0 65.9c20.5 22.8 47.4 39.2 77.4 46.7C632 403 640 412.6 640 424c0 13.3-10.7 24-24 24l-40 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-160 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-160 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-40 0c-13.3 0-24-10.7-24-24c0-11.4 8-21 18.6-23.4c30-7.6 56.9-23.9 77.4-46.7L96 288l-39.4 0c-1.7 0-3.4-.1-5-.4c-3.5-.7-6.8-2.1-9.6-4.1s-5.2-4.7-7-7.8c-1.3-2.4-2.3-5-2.7-7.8s-.4-5.6 .1-8.3c.7-3.5 2.1-6.8 4.1-9.6s4.7-5.2 7.8-6.9c1.4-.8 3-1.5 4.6-2l28.9-9.6c25.5-8.5 49.4-21.4 70.5-38.1l5.2-4.1 6.4-5.1 0-8.1 0-48-7.5 0c-5.5 .1-10.8-1.7-15.1-4.9c-2.8-2.1-5.1-4.8-6.8-8.1c-1.2-2.4-2.1-5-2.5-7.8c-.9-6.5 .9-12.8 4.7-17.8c2.1-2.8 4.8-5.1 8.1-6.8c1.6-.8 3.4-1.5 5.2-2l23-6.3C209.2 63.5 247 45.8 281 22zM416 128l-96 0-96 0 0 64 72 0 48 0 72 0 0-64zM160 288l0 64 136 0 24 0 24 0 136 0 0-64-136 0-24 0s0 0 0 0l-24 0-136 0z\"]\n};\nconst faScaleUnbalanced = {\n  prefix: 'fas',\n  iconName: 'scale-unbalanced',\n  icon: [640, 512, [\"balance-scale-left\"], \"f515\", \"M522.1 62.4c16.8-5.6 25.8-23.7 20.2-40.5S518.6-3.9 501.9 1.6l-113 37.7C375 15.8 349.3 0 320 0c-44.2 0-80 35.8-80 80c0 3 .2 5.9 .5 8.8L117.9 129.6c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l135.5-45.2c4.5 3.2 9.3 5.9 14.4 8.2L288 480c0 17.7 14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-294.7c21-9.2 37.2-27 44.2-49l125.9-42zM439.6 288L512 163.8 584.4 288l-144.9 0zM512 384c62.9 0 115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L536.1 109.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L392.7 273.1c-5.7 9.8-9.3 21.1-6.7 32.1C396.8 350 449.1 384 512 384zM129.2 291.8L201.6 416 56.7 416l72.4-124.2zM3.2 433.1C14 478 66.3 512 129.2 512s115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L153.2 237.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L9.9 401.1c-5.7 9.8-9.3 21.1-6.7 32.1z\"]\n};\nconst faBalanceScaleLeft = faScaleUnbalanced;\nconst faSortUp = {\n  prefix: 'fas',\n  iconName: 'sort-up',\n  icon: [320, 512, [\"sort-asc\"], \"f0de\", \"M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\"]\n};\nconst faSortAsc = faSortUp;\nconst faCommentDots = {\n  prefix: 'fas',\n  iconName: 'comment-dots',\n  icon: [512, 512, [128172, 62075, \"commenting\"], \"f4ad\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM128 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faCommenting = faCommentDots;\nconst faPlantWilt = {\n  prefix: 'fas',\n  iconName: 'plant-wilt',\n  icon: [512, 512, [], \"e5aa\", \"M288 120c0-30.9 25.1-56 56-56s56 25.1 56 56l0 13c-29.3 10-48 34.5-48 70.1c0 27.9 25.3 74.8 66 111.6c3.8 3.5 8.9 5.3 14 5.3s10.2-1.8 14-5.3c40.7-36.8 66-83.7 66-111.6c0-35.6-18.7-60.2-48-70.1l0-13C464 53.7 410.3 0 344 0S224 53.7 224 120l0 21.8C207.3 133 188.2 128 168 128c-66.3 0-120 53.7-120 120l0 13c-29.3 10-48 34.5-48 70.1C0 359 25.3 405.9 66 442.7c3.8 3.5 8.9 5.3 14 5.3s10.2-1.8 14-5.3c40.7-36.8 66-83.7 66-111.6c0-35.6-18.7-60.2-48-70.1l0-13c0-30.9 25.1-56 56-56s56 25.1 56 56l0 32 0 200c0 17.7 14.3 32 32 32s32-14.3 32-32l0-200 0-32 0-128z\"]\n};\nconst faDiamond = {\n  prefix: 'fas',\n  iconName: 'diamond',\n  icon: [512, 512, [9830], \"f219\", \"M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z\"]\n};\nconst faFaceGrinSquint = {\n  prefix: 'fas',\n  iconName: 'face-grin-squint',\n  icon: [512, 512, [128518, \"grin-squint\"], \"f585\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM133.5 146.7l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"]\n};\nconst faGrinSquint = faFaceGrinSquint;\nconst faHandHoldingDollar = {\n  prefix: 'fas',\n  iconName: 'hand-holding-dollar',\n  icon: [576, 512, [\"hand-holding-usd\"], \"f4c0\", \"M312 24l0 10.5c6.4 1.2 12.6 2.7 18.2 4.2c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17c-10.9-2.9-21.1-4.9-30.2-5c-7.3-.1-14.7 1.7-19.4 4.4c-2.1 1.3-3.1 2.4-3.5 3c-.3 .5-.7 1.2-.7 2.8c0 .3 0 .5 0 .6c.2 .2 .9 1.2 3.3 2.6c5.8 3.5 14.4 6.2 27.4 10.1l.9 .3s0 0 0 0c11.1 3.3 25.9 7.8 37.9 15.3c13.7 8.6 26.1 22.9 26.4 44.9c.3 22.5-11.4 38.9-26.7 48.5c-6.7 4.1-13.9 7-21.3 8.8l0 10.6c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-11.4c-9.5-2.3-18.2-5.3-25.6-7.8c-2.1-.7-4.1-1.4-6-2c-12.6-4.2-19.4-17.8-15.2-30.4s17.8-19.4 30.4-15.2c2.6 .9 5 1.7 7.3 2.5c13.6 4.6 23.4 7.9 33.9 8.3c8 .3 15.1-1.6 19.2-4.1c1.9-1.2 2.8-2.2 3.2-2.9c.4-.6 .9-1.8 .8-4.1l0-.2c0-1 0-2.1-4-4.6c-5.7-3.6-14.3-6.4-27.1-10.3l-1.9-.6c-10.8-3.2-25-7.5-36.4-14.4c-13.5-8.1-26.5-22-26.6-44.1c-.1-22.9 12.9-38.6 27.7-47.4c6.4-3.8 13.3-6.4 20.2-8.2L264 24c0-13.3 10.7-24 24-24s24 10.7 24 24zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 512 32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"]\n};\nconst faHandHoldingUsd = faHandHoldingDollar;\nconst faChartDiagram = {\n  prefix: 'fas',\n  iconName: 'chart-diagram',\n  icon: [512, 512, [], \"e695\", \"M80 32C53.5 32 32 53.5 32 80s21.5 48 48 48l152 0 0 40-48 48-56 0c-48.6 0-88 39.4-88 88l0 48-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-48c0-22.1 17.9-40 40-40l56 0 48 48 0 40-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-40 48-48 56 0c22.1 0 40 17.9 40 40l0 48-8 0c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-8 0 0-48c0-48.6-39.4-88-88-88l-56 0-48-48 0-40 152 0c26.5 0 48-21.5 48-48s-21.5-48-48-48L80 32z\"]\n};\nconst faBacterium = {\n  prefix: 'fas',\n  iconName: 'bacterium',\n  icon: [512, 512, [], \"e05a\", \"M423.1 30.6c3.6-12.7-3.7-26-16.5-29.7s-26 3.7-29.7 16.5l-4.2 14.7c-9.8-.4-19.9 .5-29.9 2.8c-12.1 2.8-23.7 5.9-34.9 9.4l-5.9-13.7c-5.2-12.2-19.3-17.8-31.5-12.6s-17.8 19.3-12.6 31.5l4.9 11.3c-22 9.4-42 20.1-60.2 31.8L196 82.7c-7.4-11-22.3-14-33.3-6.7s-14 22.3-6.7 33.3l7.8 11.6c-18 15-33.7 30.8-47.3 47.1L103 157.3c-10.4-8.3-25.5-6.6-33.7 3.7s-6.6 25.5 3.7 33.7l15 12c-2.1 3.2-4.1 6.5-6 9.7c-9.4 15.7-17 31-23.2 45.3l-9.9-3.9c-12.3-4.9-26.3 1.1-31.2 13.4s1.1 26.3 13.4 31.2l11.6 4.6c-.3 1.1-.6 2.1-.9 3.1c-3.5 12.5-5.7 23.2-7.1 31.3c-.7 4.1-1.2 7.5-1.6 10.3c-.2 1.4-.3 2.6-.4 3.6l-.1 1.4-.1 .6 0 .3 0 .1c0 0 0 .1 39.2 3.7c0 0 0 0 0 0l-39.2-3.6c-.5 5-.6 10-.4 14.9l-14.7 4.2C4.7 380.6-2.7 393.8 .9 406.6s16.9 20.1 29.7 16.5l13.8-3.9c10.6 20.7 27.6 37.8 48.5 48.5l-3.9 13.7c-3.6 12.7 3.7 26 16.5 29.7s26-3.7 29.7-16.5l4.2-14.7c23.8 1 46.3-5.5 65.1-17.6L215 473c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-10.6-10.6c9.1-14.1 15.1-30.5 17-48.3l.1-.8c.3-1.7 1-5.1 2.3-9.8l.2-.8 12.6 5.4c12.2 5.2 26.3-.4 31.5-12.6s-.4-26.3-12.6-31.5l-11.3-4.8c9.9-14.9 24.9-31.6 48.6-46l2.1 7.5c3.6 12.7 16.9 20.1 29.7 16.5s20.1-16.9 16.5-29.7L371 259.2c6.9-2.2 14.3-4.3 22.2-6.1c12.9-3 24.7-8 35.2-14.8L439 249c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-10.6-10.6c12.2-19 18.6-41.6 17.6-65.1l14.7-4.2c12.7-3.6 20.1-16.9 16.5-29.7s-16.9-20.1-29.7-16.5l-13.7 3.9c-10.8-21.2-28-38-48.5-48.5l3.9-13.8zM92.1 363.3s0 0 0 0L144 368l-51.9-4.7zM112 320a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM240 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faHandPointer = {\n  prefix: 'fas',\n  iconName: 'hand-pointer',\n  icon: [448, 512, [], \"f25a\", \"M128 40c0-22.1 17.9-40 40-40s40 17.9 40 40l0 148.2c8.5-7.6 19.7-12.2 32-12.2c20.6 0 38.2 13 45 31.2c8.8-9.3 21.2-15.2 35-15.2c25.3 0 46 19.5 47.9 44.3c8.5-7.7 19.8-12.3 32.1-12.3c26.5 0 48 21.5 48 48l0 48 0 16 0 48c0 70.7-57.3 128-128 128l-16 0-64 0-.1 0-5.2 0c-5 0-9.9-.3-14.7-1c-55.3-5.6-106.2-34-140-79L8 336c-13.3-17.7-9.7-42.7 8-56s42.7-9.7 56 8l56 74.7L128 40zM240 304c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96zm48-16c-8.8 0-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16s16-7.2 16-16l0-96z\"]\n};\nconst faDrumSteelpan = {\n  prefix: 'fas',\n  iconName: 'drum-steelpan',\n  icon: [576, 512, [], \"f56a\", \"M288 32c159.1 0 288 48 288 128l0 192c0 80-128.9 128-288 128S0 432 0 352L0 160C0 80 128.9 32 288 32zM528 160c0-9.9-8-29.9-55-49.8c-18.6-7.9-40.9-14.4-66-19.4l-27.8 43.6c-7.3 11.5-11.2 24.8-11.2 38.4c0 17.5 6.4 34.4 18.1 47.5l9.8 11c29.8-5.2 55.9-12.5 77.2-21.5c47.1-19.9 55-39.9 55-49.8zM349.2 237.3c-8-26.2-32.4-45.3-61.2-45.3s-53.3 19.1-61.2 45.3c19.4 1.7 39.9 2.7 61.2 2.7s41.8-.9 61.2-2.7zM169 90.8c-25.2 5-47.4 11.6-66 19.4C56 130.1 48 150.1 48 160s8 29.9 55 49.8c21.3 9 47.4 16.3 77.2 21.5l9.8-11c11.6-13.1 18.1-30 18.1-47.5c0-13.6-3.9-26.9-11.2-38.4L169 90.8zm56.3-8C224.5 87 224 91.5 224 96c0 35.3 28.7 64 64 64s64-28.7 64-64c0-4.5-.5-9-1.4-13.2C330.8 81 309.8 80 288 80s-42.8 1-62.6 2.8z\"]\n};\nconst faHandScissors = {\n  prefix: 'fas',\n  iconName: 'hand-scissors',\n  icon: [512, 512, [], \"f257\", \"M40 208c-22.1 0-40 17.9-40 40s17.9 40 40 40l180.2 0c-7.6 8.5-12.2 19.7-12.2 32c0 25.3 19.5 46 44.3 47.9c-7.7 8.5-12.3 19.8-12.3 32.1c0 26.5 21.5 48 48 48l32 0 64 0c70.7 0 128-57.3 128-128l0-113.1c0-40.2-16-78.8-44.4-107.3C444.8 76.8 413.9 64 381.7 64L336 64c-21.3 0-39.3 13.9-45.6 33.1l74.5 23.7c8.4 2.7 13.1 11.7 10.4 20.1s-11.7 13.1-20.1 10.4L288 129.9c0 0 0 .1 0 .1L84 65.8C62.9 59.2 40.5 70.9 33.8 92s5.1 43.5 26.2 50.2L269.5 208 40 208z\"]\n};\nconst faHandsPraying = {\n  prefix: 'fas',\n  iconName: 'hands-praying',\n  icon: [640, 512, [\"praying-hands\"], \"f684\", \"M351.2 4.8c3.2-2 6.6-3.3 10-4.1c4.7-1 9.6-.9 14.1 .1c7.7 1.8 14.8 6.5 19.4 13.6L514.6 194.2c8.8 13.1 13.4 28.6 13.4 44.4l0 73.5c0 6.9 4.4 13 10.9 15.2l79.2 26.4C631.2 358 640 370.2 640 384l0 96c0 9.9-4.6 19.3-12.5 25.4s-18.1 8.1-27.7 5.5L431 465.9c-56-14.9-95-65.7-95-123.7L336 224c0-17.7 14.3-32 32-32s32 14.3 32 32l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-84.9c0-7-1.8-13.8-5.3-19.8L340.3 48.1c-1.7-3-2.9-6.1-3.6-9.3c-1-4.7-1-9.6 .1-14.1c1.9-8 6.8-15.2 14.3-19.9zm-62.4 0c7.5 4.6 12.4 11.9 14.3 19.9c1.1 4.6 1.2 9.4 .1 14.1c-.7 3.2-1.9 6.3-3.6 9.3L213.3 199.3c-3.5 6-5.3 12.9-5.3 19.8l0 84.9c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-17.7 14.3-32 32-32s32 14.3 32 32l0 118.2c0 58-39 108.7-95 123.7l-168.7 45c-9.6 2.6-19.9 .5-27.7-5.5S0 490 0 480l0-96c0-13.8 8.8-26 21.9-30.4l79.2-26.4c6.5-2.2 10.9-8.3 10.9-15.2l0-73.5c0-15.8 4.7-31.2 13.4-44.4L245.2 14.5c4.6-7.1 11.7-11.8 19.4-13.6c4.6-1.1 9.4-1.2 14.1-.1c3.5 .8 6.9 2.1 10 4.1z\"]\n};\nconst faPrayingHands = faHandsPraying;\nconst faArrowRotateRight = {\n  prefix: 'fas',\n  iconName: 'arrow-rotate-right',\n  icon: [512, 512, [8635, \"arrow-right-rotate\", \"arrow-rotate-forward\", \"redo\"], \"f01e\", \"M386.3 160L336 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0s-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3s163.8-62.5 226.3 0L386.3 160z\"]\n};\nconst faArrowRightRotate = faArrowRotateRight;\nconst faArrowRotateForward = faArrowRotateRight;\nconst faRedo = faArrowRotateRight;\nconst faWebAwesome = {\n  prefix: 'fas',\n  iconName: 'web-awesome',\n  icon: [640, 512, [], \"e682\", \"M372.2 52c0 20.9-12.4 39-30.2 47.2L448 192l104.4-20.9c-5.3-7.7-8.4-17.1-8.4-27.1c0-26.5 21.5-48 48-48s48 21.5 48 48c0 26-20.6 47.1-46.4 48L481 442.3c-10.3 23-33.2 37.7-58.4 37.7l-205.2 0c-25.2 0-48-14.8-58.4-37.7L46.4 192C20.6 191.1 0 170 0 144c0-26.5 21.5-48 48-48s48 21.5 48 48c0 10.1-3.1 19.4-8.4 27.1L192 192 298.1 99.1c-17.7-8.3-30-26.3-30-47.1c0-28.7 23.3-52 52-52s52 23.3 52 52z\"]\n};\nconst faBiohazard = {\n  prefix: 'fas',\n  iconName: 'biohazard',\n  icon: [576, 512, [9763], \"f780\", \"M173.2 0c-1.8 0-3.5 .7-4.8 2C138.5 32.3 120 74 120 120c0 26.2 6 50.9 16.6 73c-22 2.4-43.8 9.1-64.2 20.5C37.9 232.8 13.3 262.4 .4 296c-.7 1.7-.5 3.7 .5 5.2c2.2 3.7 7.4 4.3 10.6 1.3C64.2 254.3 158 245.1 205 324s-8.1 153.1-77.6 173.2c-4.2 1.2-6.3 5.9-4.1 9.6c1 1.6 2.6 2.7 4.5 3c36.5 5.9 75.2 .1 109.7-19.2c20.4-11.4 37.4-26.5 50.5-43.8c13.1 17.3 30.1 32.4 50.5 43.8c34.5 19.3 73.3 25.2 109.7 19.2c1.9-.3 3.5-1.4 4.5-3c2.2-3.7 .1-8.4-4.1-9.6C379.1 477.1 324 403 371 324s140.7-69.8 193.5-21.4c3.2 2.9 8.4 2.3 10.6-1.3c1-1.6 1.1-3.5 .5-5.2c-12.9-33.6-37.5-63.2-72.1-82.5c-20.4-11.4-42.2-18.1-64.2-20.5C450 170.9 456 146.2 456 120c0-46-18.5-87.7-48.4-118c-1.3-1.3-3-2-4.8-2c-5 0-8.4 5.2-6.7 9.9C421.7 80.5 385.6 176 288 176S154.3 80.5 179.9 9.9c1.7-4.7-1.6-9.9-6.7-9.9zM240 272a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM181.7 417.6c6.3-11.8 9.8-25.1 8.6-39.8c-19.5-18-34-41.4-41.2-67.8c-12.5-8.1-26.2-11.8-40-12.4c-9-.4-18.1 .6-27.1 2.7c7.8 57.1 38.7 106.8 82.9 139.4c6.8-6.7 12.6-14.1 16.8-22.1zM288 64c-28.8 0-56.3 5.9-81.2 16.5c2 8.3 5 16.2 9 23.5c6.8 12.4 16.7 23.1 30.1 30.3c13.3-4.1 27.5-6.3 42.2-6.3s28.8 2.2 42.2 6.3c13.4-7.2 23.3-17.9 30.1-30.3c4-7.3 7-15.2 9-23.5C344.3 69.9 316.8 64 288 64zM426.9 310c-7.2 26.4-21.7 49.7-41.2 67.8c-1.2 14.7 2.2 28.1 8.6 39.8c4.3 8 10 15.4 16.8 22.1c44.3-32.6 75.2-82.3 82.9-139.4c-9-2.2-18.1-3.1-27.1-2.7c-13.8 .6-27.5 4.4-40 12.4z\"]\n};\nconst faLocationCrosshairs = {\n  prefix: 'fas',\n  iconName: 'location-crosshairs',\n  icon: [512, 512, [\"location\"], \"f601\", \"M256 0c17.7 0 32 14.3 32 32l0 34.7C368.4 80.1 431.9 143.6 445.3 224l34.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-34.7 0C431.9 368.4 368.4 431.9 288 445.3l0 34.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.7C143.6 431.9 80.1 368.4 66.7 288L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l34.7 0C80.1 143.6 143.6 80.1 224 66.7L224 32c0-17.7 14.3-32 32-32zM128 256a128 128 0 1 0 256 0 128 128 0 1 0 -256 0zm128-80a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faLocation = faLocationCrosshairs;\nconst faMarsDouble = {\n  prefix: 'fas',\n  iconName: 'mars-double',\n  icon: [640, 512, [9891], \"f227\", \"M312 32c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l33.4 33.4L275.8 159c-28.4-19.5-62.7-31-99.8-31C78.8 128 0 206.8 0 304s78.8 176 176 176s176-78.8 176-176c0-37-11.4-71.4-31-99.8l52.6-52.6L407 185c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L312 32zm88 48s0 0 0 0s0 0 0 0s0 0 0 0zM64 304a112 112 0 1 1 224 0A112 112 0 1 1 64 304zM368 480c97.2 0 176-78.8 176-176c0-37-11.4-71.4-31-99.8l52.6-52.6L599 185c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2l0-112c0-13.3-10.7-24-24-24L504 32c-9.7 0-18.5 5.8-22.2 14.8c-1.2 2.9-1.8 6-1.8 9l0 .2 0 .2c0 6.2 2.5 12.2 7 16.8l33.4 33.4L480 146.7l0 21.3c0 22.6-13.6 43.1-34.6 51.7c-.8 .3-1.7 .7-2.5 1C465.7 241.2 480 270.9 480 304c0 61.9-50.1 112-112 112c-5.4 0-10.8-.4-16-1.1c-12.9 20.4-29.1 38.3-48.1 53.1c19.8 7.8 41.4 12 64 12z\"]\n};\nconst faChildDress = {\n  prefix: 'fas',\n  iconName: 'child-dress',\n  icon: [320, 512, [], \"e59c\", \"M224 64A64 64 0 1 0 96 64a64 64 0 1 0 128 0zM88 400l0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 16 0 0 80c0 17.7 14.3 32 32 32s32-14.3 32-32l0-80 17.8 0c10.9 0 18.6-10.7 15.2-21.1l-31.1-93.4 28.6 37.8c10.7 14.1 30.8 16.8 44.8 6.2s16.8-30.7 6.2-44.8L254.6 207c-22.4-29.6-57.5-47-94.6-47s-72.2 17.4-94.6 47L6.5 284.7c-10.7 14.1-7.9 34.2 6.2 44.8s34.2 7.9 44.8-6.2l28.7-37.8L55 378.9C51.6 389.3 59.3 400 70.2 400L88 400z\"]\n};\nconst faUsersBetweenLines = {\n  prefix: 'fas',\n  iconName: 'users-between-lines',\n  icon: [640, 512, [], \"e591\", \"M0 24C0 10.7 10.7 0 24 0L616 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 48C10.7 48 0 37.3 0 24zM0 488c0-13.3 10.7-24 24-24l592 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 512c-13.3 0-24-10.7-24-24zM83.2 160a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 320c0-35.3 28.7-64 64-64l96 0c12.2 0 23.7 3.4 33.4 9.4c-37.2 15.1-65.6 47.2-75.8 86.6L64 352c-17.7 0-32-14.3-32-32zm461.6 32c-10.3-40.1-39.6-72.6-77.7-87.4c9.4-5.5 20.4-8.6 32.1-8.6l96 0c35.3 0 64 28.7 64 64c0 17.7-14.3 32-32 32l-82.4 0zM391.2 290.4c32.1 7.4 58.1 30.9 68.9 61.6c3.5 10 5.5 20.8 5.5 32c0 17.7-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32c0-11.2 1.9-22 5.5-32c10.5-29.7 35.3-52.8 66.1-60.9c7.8-2.1 16-3.1 24.5-3.1l96 0c7.4 0 14.7 .8 21.6 2.4zm44-130.4a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM321.6 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faLungsVirus = {\n  prefix: 'fas',\n  iconName: 'lungs-virus',\n  icon: [640, 512, [], \"e067\", \"M320 0c17.7 0 32 14.3 32 32l0 124.2c-8.5-7.6-19.7-12.2-32-12.2s-23.5 4.6-32 12.2L288 32c0-17.7 14.3-32 32-32zM444.5 195.5c-16.4-16.4-41.8-18.5-60.5-6.1l0-24.1C384 127 415 96 453.3 96c21.7 0 42.8 10.2 55.8 28.8c15.4 22.1 44.3 65.4 71 116.9c26.5 50.9 52.4 112.5 59.6 170.3c.2 1.3 .2 2.6 .2 4l0 7c0 49.1-39.8 89-89 89c-7.3 0-14.5-.9-21.6-2.7l-72.7-18.2c-20.9-5.2-38.7-17.1-51.5-32.9c14 1.5 28.5-3 39.2-13.8l-22.6-22.6 22.6 22.6c18.7-18.7 18.7-49.1 0-67.9c-1.1-1.1-1.4-2-1.5-2.5c-.1-.8-.1-1.8 .4-2.9s1.2-1.9 1.8-2.3c.5-.3 1.3-.8 2.9-.8c26.5 0 48-21.5 48-48s-21.5-48-48-48c-1.6 0-2.4-.4-2.9-.8c-.6-.4-1.3-1.2-1.8-2.3s-.5-2.2-.4-2.9c.1-.6 .4-1.4 1.5-2.5c18.7-18.7 18.7-49.1 0-67.9zM421.8 421.8c-6.2 6.2-16.4 6.2-22.6 0C375.9 398.5 336 415 336 448c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C241.5 375.9 225 336 192 336c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C264.1 241.5 304 225 304 192c0-8.8 7.2-16 16-16s16 7.2 16 16c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C398.5 264.1 415 304 448 304c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6zM183.3 491.2l-72.7 18.2c-7.1 1.8-14.3 2.7-21.6 2.7c-49.1 0-89-39.8-89-89l0-7c0-1.3 .1-2.7 .2-4c7.2-57.9 33.1-119.4 59.6-170.3c26.8-51.5 55.6-94.8 71-116.9c13-18.6 34-28.8 55.8-28.8C225 96 256 127 256 165.3l0 24.1c-18.6-12.4-44-10.3-60.5 6.1c-18.7 18.7-18.7 49.1 0 67.9c1.1 1.1 1.4 2 1.5 2.5c.1 .8 .1 1.8-.4 2.9s-1.2 1.9-1.8 2.3c-.5 .3-1.3 .8-2.9 .8c-26.5 0-48 21.5-48 48s21.5 48 48 48c1.6 0 2.4 .4 2.9 .8c.6 .4 1.3 1.2 1.8 2.3s.5 2.2 .4 2.9c-.1 .6-.4 1.4-1.5 2.5c-18.7 18.7-18.7 49.1 0 67.9c10.7 10.7 25.3 15.3 39.2 13.8c-12.8 15.9-30.6 27.7-51.5 32.9zM296 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm72 32a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faFaceGrinTears = {\n  prefix: 'fas',\n  iconName: 'face-grin-tears',\n  icon: [640, 512, [128514, \"grin-tears\"], \"f588\", \"M548.6 371.4C506.4 454.8 419.9 512 320 512s-186.4-57.2-228.6-140.6c4.5-2.9 8.7-6.3 12.7-10.3c8.1-8.1 13.2-18.6 16.5-26.6c3.6-8.8 6.5-18.4 8.8-27.5c4.6-18.2 7.7-37 9.3-48.2c3.9-26.5-18.8-49.2-45.2-45.4c-6.8 .9-16.2 2.4-26.6 4.4C85.3 94.5 191.6 0 320 0S554.7 94.5 573.2 217.7c-10.3-2-19.8-3.5-26.6-4.4c-26.5-3.9-49.2 18.8-45.2 45.4c1.6 11.3 4.6 30 9.3 48.2c2.3 9.1 5.2 18.8 8.8 27.5c3.3 8.1 8.4 18.5 16.5 26.6c3.9 3.9 8.2 7.4 12.7 10.3zM107 254.1c-3.1 21.5-11.4 70.2-25.5 84.4c-.9 1-1.9 1.8-2.9 2.7C60 356.7 32 355.5 14.3 337.7c-18.7-18.7-19.1-48.8-.7-67.2c8.6-8.6 30.1-15.1 50.5-19.6c13-2.8 25.5-4.8 33.9-6c5.4-.8 9.9 3.7 9 9zm454.5 87.1c-.8-.6-1.5-1.3-2.3-2c-.2-.2-.5-.4-.7-.7c-14.1-14.1-22.5-62.9-25.5-84.4c-.8-5.4 3.7-9.9 9-9c1 .1 2.2 .3 3.3 .5c8.2 1.2 19.2 3 30.6 5.5c20.4 4.4 41.9 10.9 50.5 19.6c18.4 18.4 18 48.5-.7 67.2c-17.7 17.7-45.7 19-64.2 3.4zm-90.1-9.7c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM281.6 228.8s0 0 0 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C190.7 188.4 184 206.1 184 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0zm160 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C350.7 188.4 344 206.1 344 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0c0 0 0 0 0 0z\"]\n};\nconst faGrinTears = faFaceGrinTears;\nconst faPhone = {\n  prefix: 'fas',\n  iconName: 'phone',\n  icon: [512, 512, [128222, 128379], \"f095\", \"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\"]\n};\nconst faCalendarXmark = {\n  prefix: 'fas',\n  iconName: 'calendar-xmark',\n  icon: [448, 512, [\"calendar-times\"], \"f273\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zM305 305c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47z\"]\n};\nconst faCalendarTimes = faCalendarXmark;\nconst faChildReaching = {\n  prefix: 'fas',\n  iconName: 'child-reaching',\n  icon: [384, 512, [], \"e59d\", \"M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4L112 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-258.4c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z\"]\n};\nconst faHeadSideVirus = {\n  prefix: 'fas',\n  iconName: 'head-side-virus',\n  icon: [512, 512, [], \"e064\", \"M0 224.2C0 100.6 100.2 0 224 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8L448 320l0 64c0 35.3-28.7 64-64 64l-64 0 0 32c0 17.7-14.3 32-32 32L96 512c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM224 64c-8.8 0-16 7.2-16 16c0 33-39.9 49.5-63.2 26.2c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6C145.5 152.1 129 192 96 192c-8.8 0-16 7.2-16 16s7.2 16 16 16c33 0 49.5 39.9 26.2 63.2c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0C168.1 286.5 208 303 208 336c0 8.8 7.2 16 16 16s16-7.2 16-16c0-33 39.9-49.5 63.2-26.2c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6C302.5 263.9 319 224 352 224c8.8 0 16-7.2 16-16s-7.2-16-16-16c-33 0-49.5-39.9-26.2-63.2c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0C279.9 129.5 240 113 240 80c0-8.8-7.2-16-16-16zm-24 96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40 80a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nconst faUserGear = {\n  prefix: 'fas',\n  iconName: 'user-gear',\n  icon: [640, 512, [\"user-cog\"], \"f4fe\", \"M224 0a128 128 0 1 1 0 256A128 128 0 1 1 224 0zM178.3 304l91.4 0c11.8 0 23.4 1.2 34.5 3.3c-2.1 18.5 7.4 35.6 21.8 44.8c-16.6 10.6-26.7 31.6-20 53.3c4 12.9 9.4 25.5 16.4 37.6s15.2 23.1 24.4 33c15.7 16.9 39.6 18.4 57.2 8.7l0 .9c0 9.2 2.7 18.5 7.9 26.3L29.7 512C13.3 512 0 498.7 0 482.3C0 383.8 79.8 304 178.3 304zM436 218.2c0-7 4.5-13.3 11.3-14.8c10.5-2.4 21.5-3.7 32.7-3.7s22.2 1.3 32.7 3.7c6.8 1.5 11.3 7.8 11.3 14.8l0 30.6c7.9 3.4 15.4 7.7 22.3 12.8l24.9-14.3c6.1-3.5 13.7-2.7 18.5 2.4c7.6 8.1 14.3 17.2 20.1 27.2s10.3 20.4 13.5 31c2.1 6.7-1.1 13.7-7.2 17.2l-25 14.4c.4 4 .7 8.1 .7 12.3s-.2 8.2-.7 12.3l25 14.4c6.1 3.5 9.2 10.5 7.2 17.2c-3.3 10.6-7.8 21-13.5 31s-12.5 19.1-20.1 27.2c-4.8 5.1-12.5 5.9-18.5 2.4l-24.9-14.3c-6.9 5.1-14.3 9.4-22.3 12.8l0 30.6c0 7-4.5 13.3-11.3 14.8c-10.5 2.4-21.5 3.7-32.7 3.7s-22.2-1.3-32.7-3.7c-6.8-1.5-11.3-7.8-11.3-14.8l0-30.5c-8-3.4-15.6-7.7-22.5-12.9l-24.7 14.3c-6.1 3.5-13.7 2.7-18.5-2.4c-7.6-8.1-14.3-17.2-20.1-27.2s-10.3-20.4-13.5-31c-2.1-6.7 1.1-13.7 7.2-17.2l24.8-14.3c-.4-4.1-.7-8.2-.7-12.4s.2-8.3 .7-12.4L343.8 325c-6.1-3.5-9.2-10.5-7.2-17.2c3.3-10.6 7.7-21 13.5-31s12.5-19.1 20.1-27.2c4.8-5.1 12.4-5.9 18.5-2.4l24.8 14.3c6.9-5.1 14.5-9.4 22.5-12.9l0-30.5zm92.1 133.5a48.1 48.1 0 1 0 -96.1 0 48.1 48.1 0 1 0 96.1 0z\"]\n};\nconst faUserCog = faUserGear;\nconst faArrowUp19 = {\n  prefix: 'fas',\n  iconName: 'arrow-up-1-9',\n  icon: [576, 512, [\"sort-numeric-up\"], \"f163\", \"M450.7 38c8.3 6 13.3 15.7 13.3 26l0 96 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-51.6-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zM160 32c9 0 17.5 3.8 23.6 10.4l88 96c11.9 13 11.1 33.3-2 45.2s-33.3 11.1-45.2-2L192 146.3 192 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-301.7L95.6 181.6c-11.9 13-32.2 13.9-45.2 2s-13.9-32.2-2-45.2l88-96C142.5 35.8 151 32 160 32zM445.7 364.9A32 32 0 1 0 418.3 307a32 32 0 1 0 27.4 57.9zm-40.7 54.9C369.6 408.4 344 375.2 344 336c0-48.6 39.4-88 88-88s88 39.4 88 88c0 23.5-7.5 46.3-21.5 65.2L449.7 467c-10.5 14.2-30.6 17.2-44.8 6.7s-17.2-30.6-6.7-44.8l6.8-9.2z\"]\n};\nconst faSortNumericUp = faArrowUp19;\nconst faDoorClosed = {\n  prefix: 'fas',\n  iconName: 'door-closed',\n  icon: [576, 512, [128682], \"f52a\", \"M96 64c0-35.3 28.7-64 64-64L416 0c35.3 0 64 28.7 64 64l0 384 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-112 0-288 0L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0L96 64zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faShieldVirus = {\n  prefix: 'fas',\n  iconName: 'shield-virus',\n  icon: [512, 512, [], \"e06c\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM256 112c8.8 0 16 7.2 16 16c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C334.5 200.1 351 240 384 240c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0C311.9 334.5 272 351 272 384c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C177.5 311.9 161 272 128 272c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C200.1 177.5 240 161 240 128c0-8.8 7.2-16 16-16zM232 256a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm72 32a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faDiceSix = {\n  prefix: 'fas',\n  iconName: 'dice-six',\n  icon: [448, 512, [9861], \"f526\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faMosquitoNet = {\n  prefix: 'fas',\n  iconName: 'mosquito-net',\n  icon: [640, 512, [], \"e52c\", \"M168.8 462.3c-7.9-4-11.1-13.6-7.2-21.5L192 380.2l0-44.2c0-4.2 1.7-8.3 4.7-11.3L256 265.4l0-23.1L139.2 344C87.8 395.3 0 358.9 0 286.3c0-41.1 30.6-75.8 71.4-80.9l159.9-23.9-49.6-41.3c-5.1-4.2-7-11.1-4.9-17.4l13.9-41.7-29-58.1c-4-7.9-.7-17.5 7.2-21.5s17.5-.7 21.5 7.2l32 64c1.9 3.8 2.2 8.2 .9 12.2l-12.5 37.6L256 160.5l0-22.6c0-14.9 10.1-27.3 23.8-31l0-43.3c0-4.5 3.7-8.2 8.2-8.2s8.2 3.7 8.2 8.2l0 43.3c13.7 3.6 23.8 16.1 23.8 31l0 22.6 45.4-37.8L352.8 85.1c-1.3-4-1-8.4 .9-12.2l32-64c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-29 58.1 13.9 41.7c2.1 6.2 .1 13.1-4.9 17.4l-49.6 41.3 159.9 23.9c22.5 2.8 41.8 14.6 54.7 31.4c-2.7 2.6-5.2 5.4-7.3 8.6c-8.6-12.9-23.3-21.5-40-21.5s-31.4 8.5-40 21.5c-8.6-12.9-23.3-21.5-40-21.5c-21.7 0-40 14.3-45.9 34.1c-10.7 3.2-19.8 10.1-25.9 19.2l-40.2-35 0 23.1 32.4 32.4c-.3 2-.4 4.1-.4 6.2c0 16.7 8.5 31.4 21.5 40c-4 2.6-7.5 5.9-10.6 9.5L320 310.6l0 50c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-50-32 32 0 41.4c0 2.5-.6 4.9-1.7 7.2l-32 64c-4 7.9-13.6 11.1-21.5 7.2zM512 256c8.8 0 16 7.2 16 16l0 16 48 0 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 16 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0 0 48 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0 0 48 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-16-48 0 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-16-48 0 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-16-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 0-48-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 0-48-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 16 48 0 0-16c0-8.8 7.2-16 16-16zm16 112l48 0 0-48-48 0 0 48zm0 80l48 0 0-48-48 0 0 48zM448 320l0 48 48 0 0-48-48 0zm0 80l0 48 48 0 0-48-48 0z\"]\n};\nconst faFileFragment = {\n  prefix: 'fas',\n  iconName: 'file-fragment',\n  icon: [384, 512, [], \"e697\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 288c0 35.3-28.7 64-64 64l-128 0 0-128c0-35.3-28.7-64-64-64L0 320 0 64zm384 64l-128 0L256 0 384 128zM32 352l96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32z\"]\n};\nconst faBridgeWater = {\n  prefix: 'fas',\n  iconName: 'bridge-water',\n  icon: [576, 512, [], \"e4ce\", \"M0 96C0 78.3 14.3 64 32 64l512 0c17.7 0 32 14.3 32 32l0 35.6c0 15.7-12.7 28.4-28.4 28.4c-37.3 0-67.6 30.2-67.6 67.6l0 124.9c-12.9 0-25.8 3.9-36.8 11.7c-18 12.4-40.1 20.3-59.2 20.3c0 0 0 0 0 0l0-.5 0-128c0-53-43-96-96-96s-96 43-96 96l0 128 0 .5c-19 0-41.2-7.9-59.1-20.3c-11.1-7.8-24-11.7-36.9-11.7l0-124.9C96 190.2 65.8 160 28.4 160C12.7 160 0 147.3 0 131.6L0 96zM306.5 389.9C329 405.4 356.5 416 384 416c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 469.7 417 480 384 480c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 405.2 165.1 416 192 416c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faPersonBooth = {\n  prefix: 'fas',\n  iconName: 'person-booth',\n  icon: [576, 512, [], \"f756\", \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 160 64 0 0-160zm320 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-448zM224 512c17.7 0 32-14.3 32-32l0-160-64 0 0 160c0 17.7 14.3 32 32 32zM320 0c-9.3 0-18.1 4-24.2 11s-8.8 16.3-7.5 25.5l31.2 218.6L288.6 409.7c-3.5 17.3 7.8 34.2 25.1 37.7s34.2-7.8 37.7-25.1l.7-3.6c1.3 16.4 15.1 29.4 31.9 29.4c17.7 0 32-14.3 32-32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32L320 0zM112 80A48 48 0 1 0 16 80a48 48 0 1 0 96 0zm0 261.3l0-72.1 4.7 4.7c9 9 21.2 14.1 33.9 14.1l73.4 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-66.7 0-41.6-41.6c-14.3-14.3-33.8-22.4-54-22.4C27.6 160 0 187.6 0 221.6l0 55.7 0 .9L0 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 42.7L96 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-58.7c0-10.4-3.4-20.5-9.6-28.8L112 341.3z\"]\n};\nconst faTextWidth = {\n  prefix: 'fas',\n  iconName: 'text-width',\n  icon: [448, 512, [], \"f035\", \"M64 128l0-32 128 0 0 128-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-128 128 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-48c0-26.5-21.5-48-48-48L224 32 48 32C21.5 32 0 53.5 0 80l0 48c0 17.7 14.3 32 32 32s32-14.3 32-32zM9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-32 192 0 0 32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 32-192 0 0-32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64z\"]\n};\nconst faHatWizard = {\n  prefix: 'fas',\n  iconName: 'hat-wizard',\n  icon: [512, 512, [], \"f6e8\", \"M64 416L168.6 180.7c15.3-34.4 40.3-63.5 72-83.7l146.9-94c3-1.9 6.5-2.9 10-2.9C407.7 0 416 8.3 416 18.6l0 1.6c0 2.6-.5 5.1-1.4 7.5L354.8 176.9c-1.9 4.7-2.8 9.7-2.8 14.7c0 5.5 1.2 11 3.4 16.1L448 416l-207.1 0 11.8-35.4 40.4-13.5c6.5-2.2 10.9-8.3 10.9-15.2s-4.4-13-10.9-15.2l-40.4-13.5-13.5-40.4C237 276.4 230.9 272 224 272s-13 4.4-15.2 10.9l-13.5 40.4-40.4 13.5C148.4 339 144 345.1 144 352s4.4 13 10.9 15.2l40.4 13.5L207.1 416 64 416zM279.6 141.5c-1.1-3.3-4.1-5.5-7.6-5.5s-6.5 2.2-7.6 5.5l-6.7 20.2-20.2 6.7c-3.3 1.1-5.5 4.1-5.5 7.6s2.2 6.5 5.5 7.6l20.2 6.7 6.7 20.2c1.1 3.3 4.1 5.5 7.6 5.5s6.5-2.2 7.6-5.5l6.7-20.2 20.2-6.7c3.3-1.1 5.5-4.1 5.5-7.6s-2.2-6.5-5.5-7.6l-20.2-6.7-6.7-20.2zM32 448l448 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faPenFancy = {\n  prefix: 'fas',\n  iconName: 'pen-fancy',\n  icon: [512, 512, [128395, 10002], \"f5ac\", \"M373.5 27.1C388.5 9.9 410.2 0 433 0c43.6 0 79 35.4 79 79c0 22.8-9.9 44.6-27.1 59.6L277.7 319l-10.3-10.3-64-64L193 234.3 373.5 27.1zM170.3 256.9l10.4 10.4 64 64 10.4 10.4-19.2 83.4c-3.9 17.1-16.9 30.7-33.8 35.4L24.3 510.3l95.4-95.4c2.6 .7 5.4 1.1 8.3 1.1c17.7 0 32-14.3 32-32s-14.3-32-32-32s-32 14.3-32 32c0 2.9 .4 5.6 1.1 8.3L1.7 487.6 51.5 310c4.7-16.9 18.3-29.9 35.4-33.8l83.4-19.2z\"]\n};\nconst faPersonDigging = {\n  prefix: 'fas',\n  iconName: 'person-digging',\n  icon: [576, 512, [\"digging\"], \"f85e\", \"M208 64a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM9.8 214.8c5.1-12.2 19.1-18 31.4-12.9L60.7 210l22.9-38.1C99.9 144.6 129.3 128 161 128c51.4 0 97 32.9 113.3 81.7l34.6 103.7 79.3 33.1 34.2-45.6c6.4-8.5 16.6-13.3 27.2-12.8s20.3 6.4 25.8 15.5l96 160c5.9 9.9 6.1 22.2 .4 32.2s-16.3 16.2-27.8 16.2l-256 0c-11.1 0-21.4-5.7-27.2-15.2s-6.4-21.2-1.4-31.1l16-32c5.4-10.8 16.5-17.7 28.6-17.7l32 0 22.5-30L22.8 246.2c-12.2-5.1-18-19.1-12.9-31.4zm82.8 91.8l112 48c11.8 5 19.4 16.6 19.4 29.4l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-74.9-60.6-26-37 111c-5.6 16.8-23.7 25.8-40.5 20.2S-3.9 486.6 1.6 469.9l48-144 11-33 32 13.7z\"]\n};\nconst faDigging = faPersonDigging;\nconst faTrash = {\n  prefix: 'fas',\n  iconName: 'trash',\n  icon: [448, 512, [], \"f1f8\", \"M135.2 17.7L128 32 32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0-7.2-14.3C307.4 6.8 296.3 0 284.2 0L163.8 0c-12.1 0-23.2 6.8-28.6 17.7zM416 128L32 128 53.2 467c1.6 25.3 22.6 45 47.9 45l245.8 0c25.3 0 46.3-19.7 47.9-45L416 128z\"]\n};\nconst faGaugeSimple = {\n  prefix: 'fas',\n  iconName: 'gauge-simple',\n  icon: [512, 512, [\"gauge-simple-med\", \"tachometer-average\"], \"f629\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-26.9-16.5-49.9-40-59.3L280 88c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 204.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faGaugeSimpleMed = faGaugeSimple;\nconst faTachometerAverage = faGaugeSimple;\nconst faBookMedical = {\n  prefix: 'fas',\n  iconName: 'book-medical',\n  icon: [448, 512, [], \"f7e6\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zM208 112l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faPoo = {\n  prefix: 'fas',\n  iconName: 'poo',\n  icon: [512, 512, [128169], \"f2fe\", \"M268.9 .9c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.4c2.8 8.2 4.3 16.9 4.3 26.1c0 44.1-35.7 79.9-79.8 80L160 128c-35.3 0-64 28.7-64 64c0 19.1 8.4 36.3 21.7 48L104 240c-39.8 0-72 32.2-72 72c0 23.2 11 43.8 28 57c-34.1 5.7-60 35.3-60 71c0 39.8 32.2 72 72 72l368 0c39.8 0 72-32.2 72-72c0-35.7-25.9-65.3-60-71c17-13.2 28-33.8 28-57c0-39.8-32.2-72-72-72l-13.7 0c13.3-11.7 21.7-28.9 21.7-48c0-35.3-28.7-64-64-64l-5.5 0c3.5-10 5.5-20.8 5.5-32c0-48.6-36.2-88.8-83.1-95.1zM192 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm64 108.3c0 2.4-.7 4.8-2.2 6.7c-8.2 10.5-39.5 45-93.8 45s-85.6-34.6-93.8-45c-1.5-1.9-2.2-4.3-2.2-6.7c0-6.8 5.5-12.3 12.3-12.3l167.4 0c6.8 0 12.3 5.5 12.3 12.3z\"]\n};\nconst faQuoteRight = {\n  prefix: 'fas',\n  iconName: 'quote-right',\n  icon: [448, 512, [8221, \"quote-right-alt\"], \"f10e\", \"M448 296c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72zm-256 0c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72z\"]\n};\nconst faQuoteRightAlt = faQuoteRight;\nconst faShirt = {\n  prefix: 'fas',\n  iconName: 'shirt',\n  icon: [640, 512, [128085, \"t-shirt\", \"tshirt\"], \"f553\", \"M211.8 0c7.8 0 14.3 5.7 16.7 13.2C240.8 51.9 277.1 80 320 80s79.2-28.1 91.5-66.8C413.9 5.7 420.4 0 428.2 0l12.6 0c22.5 0 44.2 7.9 61.5 22.3L628.5 127.4c6.6 5.5 10.7 13.5 11.4 22.1s-2.1 17.1-7.8 23.6l-56 64c-11.4 13.1-31.2 14.6-44.6 3.5L480 197.7 480 448c0 35.3-28.7 64-64 64l-192 0c-35.3 0-64-28.7-64-64l0-250.3-51.5 42.9c-13.3 11.1-33.1 9.6-44.6-3.5l-56-64c-5.7-6.5-8.5-15-7.8-23.6s4.8-16.6 11.4-22.1L137.7 22.3C155 7.9 176.7 0 199.2 0l12.6 0z\"]\n};\nconst faTShirt = faShirt;\nconst faTshirt = faShirt;\nconst faCubes = {\n  prefix: 'fas',\n  iconName: 'cubes',\n  icon: [576, 512, [], \"f1b3\", \"M290.8 48.6l78.4 29.7L288 109.5 206.8 78.3l78.4-29.7c1.8-.7 3.8-.7 5.7 0zM136 92.5l0 112.2c-1.3 .4-2.6 .8-3.9 1.3l-96 36.4C14.4 250.6 0 271.5 0 294.7L0 413.9c0 22.2 13.1 42.3 33.5 51.3l96 42.2c14.4 6.3 30.7 6.3 45.1 0L288 457.5l113.5 49.9c14.4 6.3 30.7 6.3 45.1 0l96-42.2c20.3-8.9 33.5-29.1 33.5-51.3l0-119.1c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-1.3-.5-2.6-.9-3.9-1.3l0-112.2c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-12.8-4.8-26.9-4.8-39.7 0l-96 36.4C150.4 48.4 136 69.3 136 92.5zM392 210.6l-82.4 31.2 0-89.2L392 121l0 89.6zM154.8 250.9l78.4 29.7L152 311.7 70.8 280.6l78.4-29.7c1.8-.7 3.8-.7 5.7 0zm18.8 204.4l0-100.5L256 323.2l0 95.9-82.4 36.2zM421.2 250.9c1.8-.7 3.8-.7 5.7 0l78.4 29.7L424 311.7l-81.2-31.1 78.4-29.7zM523.2 421.2l-77.6 34.1 0-100.5L528 323.2l0 90.7c0 3.2-1.9 6-4.8 7.3z\"]\n};\nconst faDivide = {\n  prefix: 'fas',\n  iconName: 'divide',\n  icon: [448, 512, [10135, 247], \"f529\", \"M272 96a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 320a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 288c17.7 0 32-14.3 32-32s-14.3-32-32-32L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l352 0z\"]\n};\nconst faTengeSign = {\n  prefix: 'fas',\n  iconName: 'tenge-sign',\n  icon: [384, 512, [8376, \"tenge\"], \"f7d7\", \"M0 64C0 46.3 14.3 32 32 32l320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM0 192c0-17.7 14.3-32 32-32l160 0 160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0 0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-224L32 224c-17.7 0-32-14.3-32-32z\"]\n};\nconst faTenge = faTengeSign;\nconst faHeadphones = {\n  prefix: 'fas',\n  iconName: 'headphones',\n  icon: [512, 512, [127911], \"f025\", \"M256 80C149.9 80 62.4 159.4 49.6 262c9.4-3.8 19.6-6 30.4-6c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48c-44.2 0-80-35.8-80-80l0-16 0-48 0-48C0 146.6 114.6 32 256 32s256 114.6 256 256l0 48 0 48 0 16c0 44.2-35.8 80-80 80c-26.5 0-48-21.5-48-48l0-128c0-26.5 21.5-48 48-48c10.8 0 21 2.1 30.4 6C449.6 159.4 362.1 80 256 80z\"]\n};\nconst faHandsHolding = {\n  prefix: 'fas',\n  iconName: 'hands-holding',\n  icon: [640, 512, [], \"f4c2\", \"M80 104c0-22.1-17.9-40-40-40S0 81.9 0 104l0 56 0 64L0 325.5c0 25.5 10.1 49.9 28.1 67.9L128 493.3c12 12 28.3 18.7 45.3 18.7l66.7 0c26.5 0 48-21.5 48-48l0-78.9c0-29.7-11.8-58.2-32.8-79.2l-25.3-25.3c0 0 0 0 0 0l-15.2-15.2-32-32c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l32 32 15.2 15.2c11 11 9.2 29.2-3.7 37.8c-9.7 6.5-22.7 5.2-31-3.1L98.7 309.5c-12-12-18.7-28.3-18.7-45.3L80 224l0-80 0-40zm480 0l0 40 0 80 0 40.2c0 17-6.7 33.3-18.7 45.3l-51.1 51.1c-8.3 8.3-21.3 9.6-31 3.1c-12.9-8.6-14.7-26.9-3.7-37.8l15.2-15.2 32-32c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-32 32-15.2 15.2c0 0 0 0 0 0l-25.3 25.3c-21 21-32.8 49.5-32.8 79.2l0 78.9c0 26.5 21.5 48 48 48l66.7 0c17 0 33.3-6.7 45.3-18.7l99.9-99.9c18-18 28.1-42.4 28.1-67.9L640 224l0-64 0-56c0-22.1-17.9-40-40-40s-40 17.9-40 40z\"]\n};\nconst faHandsClapping = {\n  prefix: 'fas',\n  iconName: 'hands-clapping',\n  icon: [512, 512, [], \"e1a8\", \"M336 16l0 64c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16zm-98.7 7.1l32 48c4.9 7.4 2.9 17.3-4.4 22.2s-17.3 2.9-22.2-4.4l-32-48c-4.9-7.4-2.9-17.3 4.4-22.2s17.3-2.9 22.2 4.4zM135 119c9.4-9.4 24.6-9.4 33.9 0L292.7 242.7c10.1 10.1 27.3 2.9 27.3-11.3l0-39.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 153.6c0 57.1-30 110-78.9 139.4c-64 38.4-145.8 28.3-198.5-24.4L7 361c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l53 53c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L23 265c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l93 93c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L55 185c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l117 117c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1l-93-93c-9.4-9.4-9.4-24.6 0-33.9zM433.1 484.9c-24.2 14.5-50.9 22.1-77.7 23.1c48.1-39.6 76.6-99 76.6-162.4l0-98.1c8.2-.1 16-6.4 16-16l0-39.4c0-17.7 14.3-32 32-32s32 14.3 32 32l0 153.6c0 57.1-30 110-78.9 139.4zM424.9 18.7c7.4 4.9 9.3 14.8 4.4 22.2l-32 48c-4.9 7.4-14.8 9.3-22.2 4.4s-9.3-14.8-4.4-22.2l32-48c4.9-7.4 14.8-9.3 22.2-4.4z\"]\n};\nconst faRepublican = {\n  prefix: 'fas',\n  iconName: 'republican',\n  icon: [640, 512, [], \"f75e\", \"M0 192C0 103.6 71.6 32 160 32l224 0c88.4 0 160 71.6 160 160l0 64L0 256l0-64zm415.9-64c-2.4 0-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L466 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6c-1.1-2.1-3.3-3.4-5.7-3.4zm-138.3 3.4c-1.1-2.1-3.3-3.4-5.7-3.4s-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L322 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6zM127.9 128c-2.4 0-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L178 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6c-1.1-2.1-3.3-3.4-5.7-3.4zm.1 160l192 0 96 0 32 0 64 0 32 0 0 32 0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48c0-17.7 14.3-32 32-32s32 14.3 32 32l0 48c0 44.2-35.8 80-80 80s-80-35.8-80-80l0-48-32 0 0 32 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64-192 0 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64 0-96 128 0z\"]\n};\nconst faArrowLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-left',\n  icon: [448, 512, [8592], \"f060\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\"]\n};\nconst faPersonCircleXmark = {\n  prefix: 'fas',\n  iconName: 'person-circle-xmark',\n  icon: [576, 512, [], \"e543\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"]\n};\nconst faRuler = {\n  prefix: 'fas',\n  iconName: 'ruler',\n  icon: [512, 512, [128207], \"f545\", \"M177.9 494.1c-18.7 18.7-49.1 18.7-67.9 0L17.9 401.9c-18.7-18.7-18.7-49.1 0-67.9l50.7-50.7 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 50.7-50.7c18.7-18.7 49.1-18.7 67.9 0l92.1 92.1c18.7 18.7 18.7 49.1 0 67.9L177.9 494.1z\"]\n};\nconst faAlignLeft = {\n  prefix: 'fas',\n  iconName: 'align-left',\n  icon: [448, 512, [], \"f036\", \"M288 64c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l224 0c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32L32 352c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 224c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faDiceD6 = {\n  prefix: 'fas',\n  iconName: 'dice-d6',\n  icon: [448, 512, [], \"f6d1\", \"M201 10.3c14.3-7.8 31.6-7.8 46 0L422.3 106c5.1 2.8 8.3 8.2 8.3 14s-3.2 11.2-8.3 14L231.7 238c-4.8 2.6-10.5 2.6-15.3 0L25.7 134c-5.1-2.8-8.3-8.2-8.3-14s3.2-11.2 8.3-14L201 10.3zM23.7 170l176 96c5.1 2.8 8.3 8.2 8.3 14l0 216c0 5.6-3 10.9-7.8 13.8s-10.9 3-15.8 .3L25 423.1C9.6 414.7 0 398.6 0 381L0 184c0-5.6 3-10.9 7.8-13.8s10.9-3 15.8-.3zm400.7 0c5-2.7 11-2.6 15.8 .3s7.8 8.1 7.8 13.8l0 197c0 17.6-9.6 33.7-25 42.1L263.7 510c-5 2.7-11 2.6-15.8-.3s-7.8-8.1-7.8-13.8l0-216c0-5.9 3.2-11.2 8.3-14l176-96z\"]\n};\nconst faRestroom = {\n  prefix: 'fas',\n  iconName: 'restroom',\n  icon: [640, 512, [], \"f7bd\", \"M80 48a48 48 0 1 1 96 0A48 48 0 1 1 80 48zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-154.8c-8.1 9.2-21.1 13.2-33.5 9.4c-16.9-5.3-26.3-23.2-21-40.1l30.9-99.1C44.9 155.3 82 128 124 128l8 0c42 0 79.1 27.3 91.6 67.4l30.9 99.1c5.3 16.9-4.1 34.8-21 40.1c-12.4 3.9-25.4-.2-33.5-9.4L200 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM320 0c13.3 0 24 10.7 24 24l0 464c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-464c0-13.3 10.7-24 24-24zM464 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM440 480l0-96-17.8 0c-10.9 0-18.6-10.7-15.2-21.1l9-26.9c-3.2 0-6.4-.5-9.5-1.5c-16.9-5.3-26.3-23.2-21-40.1l29.7-95.2C428.4 156.9 467.6 128 512 128s83.6 28.9 96.8 71.2l29.7 95.2c5.3 16.9-4.1 34.8-21 40.1c-3.2 1-6.4 1.5-9.5 1.5l9 26.9c3.5 10.4-4.3 21.1-15.2 21.1L584 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32z\"]\n};\nconst faJ = {\n  prefix: 'fas',\n  iconName: 'j',\n  icon: [320, 512, [106], \"4a\", \"M288 32c17.7 0 32 14.3 32 32l0 256c0 88.4-71.6 160-160 160S0 408.4 0 320l0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32c0 53 43 96 96 96s96-43 96-96l0-256c0-17.7 14.3-32 32-32z\"]\n};\nconst faUsersViewfinder = {\n  prefix: 'fas',\n  iconName: 'users-viewfinder',\n  icon: [640, 512, [], \"e595\", \"M48 48l88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L32 0C14.3 0 0 14.3 0 32L0 136c0 13.3 10.7 24 24 24s24-10.7 24-24l0-88zM175.8 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-26.5 32C119.9 256 96 279.9 96 309.3c0 14.7 11.9 26.7 26.7 26.7l56.1 0c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4l-69.3 0zm368 80c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3l-69.3 0c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6l56.1 0zm-89.4 0c-8.6-24.3-29.9-42.6-55.9-47c-3.9-.7-7.9-1-12-1l-80 0c-4.1 0-8.1 .3-12 1c-26 4.4-47.3 22.7-55.9 47c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24zM464 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80-32a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM504 48l88 0 0 88c0 13.3 10.7 24 24 24s24-10.7 24-24l0-104c0-17.7-14.3-32-32-32L504 0c-13.3 0-24 10.7-24 24s10.7 24 24 24zM48 464l0-88c0-13.3-10.7-24-24-24s-24 10.7-24 24L0 480c0 17.7 14.3 32 32 32l104 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0zm456 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l104 0c17.7 0 32-14.3 32-32l0-104c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 88-88 0z\"]\n};\nconst faFileVideo = {\n  prefix: 'fas',\n  iconName: 'file-video',\n  icon: [384, 512, [], \"f1c8\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM64 288c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-96zM300.9 397.9L256 368l0-64 44.9-29.9c2-1.3 4.4-2.1 6.8-2.1c6.8 0 12.3 5.5 12.3 12.3l0 103.4c0 6.8-5.5 12.3-12.3 12.3c-2.4 0-4.8-.7-6.8-2.1z\"]\n};\nconst faUpRightFromSquare = {\n  prefix: 'fas',\n  iconName: 'up-right-from-square',\n  icon: [512, 512, [\"external-link-alt\"], \"f35d\", \"M352 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9L370.7 96 201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 141.3l41.4 41.4c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-128c0-17.7-14.3-32-32-32L352 0zM80 32C35.8 32 0 67.8 0 112L0 432c0 44.2 35.8 80 80 80l320 0c44.2 0 80-35.8 80-80l0-112c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16L80 448c-8.8 0-16-7.2-16-16l0-320c0-8.8 7.2-16 16-16l112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z\"]\n};\nconst faExternalLinkAlt = faUpRightFromSquare;\nconst faTableCells = {\n  prefix: 'fas',\n  iconName: 'table-cells',\n  icon: [512, 512, [\"th\"], \"f00a\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm88 64l0 64-88 0 0-64 88 0zm56 0l88 0 0 64-88 0 0-64zm240 0l0 64-88 0 0-64 88 0zM64 224l88 0 0 64-88 0 0-64zm232 0l0 64-88 0 0-64 88 0zm64 0l88 0 0 64-88 0 0-64zM152 352l0 64-88 0 0-64 88 0zm56 0l88 0 0 64-88 0 0-64zm240 0l0 64-88 0 0-64 88 0z\"]\n};\nconst faTh = faTableCells;\nconst faFilePdf = {\n  prefix: 'fas',\n  iconName: 'file-pdf',\n  icon: [512, 512, [], \"f1c1\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 144-208 0c-35.3 0-64 28.7-64 64l0 144-48 0c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM176 352l32 0c30.9 0 56 25.1 56 56s-25.1 56-56 56l-16 0 0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48 0-80c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24l-16 0 0 48 16 0zm96-80l32 0c26.5 0 48 21.5 48 48l0 64c0 26.5-21.5 48-48 48l-32 0c-8.8 0-16-7.2-16-16l0-128c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-16 0 0 96 16 0zm80-112c0-8.8 7.2-16 16-16l48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 32 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64 0-64z\"]\n};\nconst faBookBible = {\n  prefix: 'fas',\n  iconName: 'book-bible',\n  icon: [448, 512, [\"bible\"], \"f647\", \"M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l288 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L384 0 96 0zm0 384l256 0 0 64L96 448c-17.7 0-32-14.3-32-32s14.3-32 32-32zM208 80c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 112c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-112-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faBible = faBookBible;\nconst faO = {\n  prefix: 'fas',\n  iconName: 'o',\n  icon: [448, 512, [111], \"4f\", \"M224 96a160 160 0 1 0 0 320 160 160 0 1 0 0-320zM448 256A224 224 0 1 1 0 256a224 224 0 1 1 448 0z\"]\n};\nconst faSuitcaseMedical = {\n  prefix: 'fas',\n  iconName: 'suitcase-medical',\n  icon: [512, 512, [\"medkit\"], \"f0fa\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40 0 32 0 352 256 0 0-352 0-32 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zM96 96L64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l32 0L96 96zM416 480l32 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-32 0 0 384zM224 208c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faMedkit = faSuitcaseMedical;\nconst faUserSecret = {\n  prefix: 'fas',\n  iconName: 'user-secret',\n  icon: [448, 512, [128373], \"f21b\", \"M224 16c-6.7 0-10.8-2.8-15.5-6.1C201.9 5.4 194 0 176 0c-30.5 0-52 43.7-66 89.4C62.7 98.1 32 112.2 32 128c0 14.3 25 27.1 64.6 35.9c-.4 4-.6 8-.6 12.1c0 17 3.3 33.2 9.3 48l-59.9 0C38 224 32 230 32 237.4c0 1.7 .3 3.4 1 5l38.8 96.9C28.2 371.8 0 423.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7c0-58.5-28.2-110.4-71.7-143L415 242.4c.6-1.6 1-3.3 1-5c0-7.4-6-13.4-13.4-13.4l-59.9 0c6-14.8 9.3-31 9.3-48c0-4.1-.2-8.1-.6-12.1C391 155.1 416 142.3 416 128c0-15.8-30.7-29.9-78-38.6C324 43.7 302.5 0 272 0c-18 0-25.9 5.4-32.5 9.9c-4.8 3.3-8.8 6.1-15.5 6.1zm56 208l-12.4 0c-16.5 0-31.1-10.6-36.3-26.2c-2.3-7-12.2-7-14.5 0c-5.2 15.6-19.9 26.2-36.3 26.2L168 224c-22.1 0-40-17.9-40-40l0-14.4c28.2 4.1 61 6.4 96 6.4s67.8-2.3 96-6.4l0 14.4c0 22.1-17.9 40-40 40zm-88 96l16 32L176 480 128 288l64 32zm128-32L272 480 240 352l16-32 64-32z\"]\n};\nconst faOtter = {\n  prefix: 'fas',\n  iconName: 'otter',\n  icon: [640, 512, [129446], \"f700\", \"M181.5 197.1l12.9 6.4c5.9 3 12.4 4.5 19.1 4.5c23.5 0 42.6-19.1 42.6-42.6l0-21.4c0-35.3-28.7-64-64-64l-64 0c-35.3 0-64 28.7-64 64l0 21.4c0 23.5 19.1 42.6 42.6 42.6c6.6 0 13.1-1.5 19.1-4.5l12.9-6.4 8.4-4.2L135.1 185c-4.5-3-7.1-8-7.1-13.3l0-3.7c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24l0 3.7c0 5.3-2.7 10.3-7.1 13.3l-11.8 7.9 8.4 4.2zm-8.6 49.4L160 240l-12.9 6.4c-12.6 6.3-26.5 9.6-40.5 9.6c-3.6 0-7.1-.2-10.6-.6l0 .6c0 35.3 28.7 64 64 64l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l160 0 0-48 0-16c0-23.7 12.9-44.4 32-55.4c9.4-5.4 20.3-8.6 32-8.6l0-16c0-26.5 21.5-48 48-48c8.8 0 16 7.2 16 16l0 32 0 16 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-99.7c0-48.2-30.8-91-76.6-106.3l-8.5-2.8c-8-2.7-12.6-11.1-10.4-19.3s10.3-13.2 18.6-11.6l19.9 4C576 86.1 640 164.2 640 254.9l0 1.1s0 0 0 0c0 123.7-100.3 224-224 224l-1.1 0L256 480l-.6 0C132 480 32 380 32 256.6l0-.6 0-39.2c-10.1-14.6-16-32.3-16-51.4L16 144l0-1.4C6.7 139.3 0 130.5 0 120c0-13.3 10.7-24 24-24l2.8 0C44.8 58.2 83.3 32 128 32l64 0c44.7 0 83.2 26.2 101.2 64l2.8 0c13.3 0 24 10.7 24 24c0 10.5-6.7 19.3-16 22.6l0 1.4 0 21.4c0 1.4 0 2.8-.1 4.3c12-6.2 25.7-9.6 40.1-9.6l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-13.3 0-24 10.7-24 24l0 8 56.4 0c-15.2 17-24.4 39.4-24.4 64l-32 0c-42.3 0-78.2-27.4-91-65.3c-5.1 .9-10.3 1.3-15.6 1.3c-14.1 0-27.9-3.3-40.5-9.6zM96 128a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm112 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"]\n};\nconst faPersonDress = {\n  prefix: 'fas',\n  iconName: 'person-dress',\n  icon: [320, 512, [\"female\"], \"f182\", \"M160 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM88 384l-17.8 0c-10.9 0-18.6-10.7-15.2-21.1L93.3 248.1 59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l53.6-89.2c20.3-33.7 56.7-54.3 96-54.3l11.6 0c39.3 0 75.7 20.6 96 54.3l53.6 89.2c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9l-33.9-56.3L265 362.9c3.5 10.4-4.3 21.1-15.2 21.1L232 384l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-16 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96z\"]\n};\nconst faFemale = faPersonDress;\nconst faCommentDollar = {\n  prefix: 'fas',\n  iconName: 'comment-dollar',\n  icon: [512, 512, [], \"f651\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zm20-312l0 13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9l0 13.8c0 11-9 20-20 20s-20-9-20-20l0-14.6c-10.3-2.2-20-5.5-28.2-8.4c0 0 0 0 0 0s0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c0 0 0 0 0 0c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5l0-14c0-11 9-20 20-20s20 9 20 20z\"]\n};\nconst faBusinessTime = {\n  prefix: 'fas',\n  iconName: 'business-time',\n  icon: [640, 512, [\"briefcase-clock\"], \"f64a\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40L64 96C28.7 96 0 124.7 0 160l0 96 192 0 160 0 8.2 0c32.3-39.1 81.1-64 135.8-64c5.4 0 10.7 .2 16 .7l0-32.7c0-35.3-28.7-64-64-64l-64 0 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zM320 352l-96 0c-17.7 0-32-14.3-32-32l0-32L0 288 0 416c0 35.3 28.7 64 64 64l296.2 0C335.1 449.6 320 410.5 320 368c0-5.4 .2-10.7 .7-16l-.7 0zm320 16a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zM496 288c8.8 0 16 7.2 16 16l0 48 32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16z\"]\n};\nconst faBriefcaseClock = faBusinessTime;\nconst faTableCellsLarge = {\n  prefix: 'fas',\n  iconName: 'table-cells-large',\n  icon: [512, 512, [\"th-large\"], \"f009\", \"M448 96l0 128-160 0 0-128 160 0zm0 192l0 128-160 0 0-128 160 0zM224 224L64 224 64 96l160 0 0 128zM64 288l160 0 0 128L64 416l0-128zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"]\n};\nconst faThLarge = faTableCellsLarge;\nconst faBookTanakh = {\n  prefix: 'fas',\n  iconName: 'book-tanakh',\n  icon: [448, 512, [\"tanakh\"], \"f827\", \"M352 0c53 0 96 43 96 96l0 320c0 53-43 96-96 96L64 512l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0L64 0 352 0zm0 384L96 384l0 64 256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zM138.7 208l13.9 24-27.7 0 13.9-24zm-13.9-24L97.1 232c-6.2 10.7 1.5 24 13.9 24l55.4 0 27.7 48c6.2 10.7 21.6 10.7 27.7 0l27.7-48 55.4 0c12.3 0 20-13.3 13.9-24l-27.7-48 27.7-48c6.2-10.7-1.5-24-13.9-24l-55.4 0L221.9 64c-6.2-10.7-21.6-10.7-27.7 0l-27.7 48L111 112c-12.3 0-20 13.3-13.9 24l27.7 48zm27.7 0l27.7-48 55.4 0 27.7 48-27.7 48-55.4 0-27.7-48zm0-48l-13.9 24-13.9-24 27.7 0zm41.6-24L208 88l13.9 24-27.7 0zm69.3 24l27.7 0-13.9 24-13.9-24zm13.9 72l13.9 24-27.7 0 13.9-24zm-55.4 48L208 280l-13.9-24 27.7 0z\"]\n};\nconst faTanakh = faBookTanakh;\nconst faPhoneVolume = {\n  prefix: 'fas',\n  iconName: 'phone-volume',\n  icon: [512, 512, [\"volume-control-phone\"], \"f2a0\", \"M280 0C408.1 0 512 103.9 512 232c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-101.6-82.4-184-184-184c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm-32-72c0-13.3 10.7-24 24-24c75.1 0 136 60.9 136 136c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6-39.4-88-88-88c-13.3 0-24-10.7-24-24zM117.5 1.4c19.4-5.3 39.7 4.6 47.4 23.2l40 96c6.8 16.3 2.1 35.2-11.6 46.3L144 207.3c33.3 70.4 90.3 127.4 160.7 160.7L345 318.7c11.2-13.7 30-18.4 46.3-11.6l96 40c18.6 7.7 28.5 28 23.2 47.4l-24 88C481.8 499.9 466 512 448 512C200.6 512 0 311.4 0 64C0 46 12.1 30.2 29.5 25.4l88-24z\"]\n};\nconst faVolumeControlPhone = faPhoneVolume;\nconst faHatCowboySide = {\n  prefix: 'fas',\n  iconName: 'hat-cowboy-side',\n  icon: [640, 512, [], \"f8c1\", \"M152.7 135.9l-10.4 57.2c6.8-.7 13.6-1.1 20.5-1.1l10.7 0c39.4 0 77.8 12.1 110.1 34.7L562.4 421.8l35.1 24.6c24.4-6 42.5-28.1 42.5-54.4c0-75.8-94.7-126.6-134.6-144.7L474 83.9C468.2 53.8 441.8 32 411.1 32l-2.7 0c-5.6 0-11.1 .7-16.5 2.2L199.2 85.5c-23.9 6.4-42 26-46.5 50.4zM0 384c0 35.3 28.7 64 64 64l480 0L265.3 252.9c-26.9-18.8-58.9-28.9-91.8-28.9l-10.7 0c-60.6 0-116 34.2-143.1 88.4L13.5 325C4.6 342.7 0 362.3 0 382.2L0 384z\"]\n};\nconst faClipboardUser = {\n  prefix: 'fas',\n  iconName: 'clipboard-user',\n  icon: [384, 512, [], \"f7f3\", \"M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM128 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 432c0-44.2 35.8-80 80-80l64 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16L96 448c-8.8 0-16-7.2-16-16z\"]\n};\nconst faChild = {\n  prefix: 'fas',\n  iconName: 'child',\n  icon: [320, 512, [], \"f1ae\", \"M96 64a64 64 0 1 1 128 0A64 64 0 1 1 96 64zm48 320l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-192.2L59.1 321c-9.4 15-29.2 19.4-44.1 10S-4.5 301.9 4.9 287l39.9-63.3C69.7 184 113.2 160 160 160s90.3 24 115.2 63.6L315.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L240 287.8 240 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-32 0z\"]\n};\nconst faLiraSign = {\n  prefix: 'fas',\n  iconName: 'lira-sign',\n  icon: [320, 512, [8356], \"f195\", \"M112 160.4c0-35.5 28.8-64.4 64.4-64.4c6.9 0 13.8 1.1 20.4 3.3l81.2 27.1c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L217 38.6c-13.1-4.4-26.8-6.6-40.6-6.6C105.5 32 48 89.5 48 160.4L48 192l-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 32-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l14 0c-2.2 10.5-6.1 20.6-11.7 29.9L4.6 431.5c-5.9 9.9-6.1 22.2-.4 32.2S20.5 480 32 480l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L88.5 416l.7-1.1c11.6-19.3 18.9-40.7 21.6-62.9L224 352c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-32 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-31.6z\"]\n};\nconst faSatellite = {\n  prefix: 'fas',\n  iconName: 'satellite',\n  icon: [512, 512, [128752], \"f7bf\", \"M233 7c-9.4-9.4-24.6-9.4-33.9 0l-96 96c-9.4 9.4-9.4 24.6 0 33.9l89.4 89.4-15.5 15.5C152.3 230.4 124.9 224 96 224c-31.7 0-61.5 7.7-87.8 21.2c-9 4.7-10.3 16.7-3.1 23.8L112.7 376.7 96.3 393.1c-2.6-.7-5.4-1.1-8.3-1.1c-17.7 0-32 14.3-32 32s14.3 32 32 32s32-14.3 32-32c0-2.9-.4-5.6-1.1-8.3l16.4-16.4L242.9 506.9c7.2 7.2 19.2 5.9 23.8-3.1C280.3 477.5 288 447.7 288 416c0-28.9-6.4-56.3-17.8-80.9l15.5-15.5L375 409c9.4 9.4 24.6 9.4 33.9 0l96-96c9.4-9.4 9.4-24.6 0-33.9l-89.4-89.4 55-55c12.5-12.5 12.5-32.8 0-45.3l-48-48c-12.5-12.5-32.8-12.5-45.3 0l-55 55L233 7zm159 351l-72.4-72.4 62.1-62.1L454.1 296 392 358.1zM226.3 192.4L153.9 120 216 57.9l72.4 72.4-62.1 62.1z\"]\n};\nconst faPlaneLock = {\n  prefix: 'fas',\n  iconName: 'plane-lock',\n  icon: [640, 512, [], \"e558\", \"M192 93.7C192 59.5 221 0 256 0c36 0 64 59.5 64 93.7l0 84.6 101.8 58.2C418 247.6 416 259.6 416 272l0 24.6c-17.9 10.4-30.3 29.1-31.8 50.9L320 329.1l0 70.9 57.6 43.2c4 3 6.4 7.8 6.4 12.8l0 24 0 18c0 7.8-6.3 14-14 14c-1.3 0-2.6-.2-3.9-.5L256 480 145.9 511.5c-1.3 .4-2.6 .5-3.9 .5c-7.8 0-14-6.3-14-14l0-42c0-5 2.4-9.8 6.4-12.8L192 400l0-70.9-171.6 49C10.2 381.1 0 373.4 0 362.8l0-65.5c0-5.7 3.1-11 8.1-13.9L192 178.3l0-84.6zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faTag = {\n  prefix: 'fas',\n  iconName: 'tag',\n  icon: [448, 512, [127991], \"f02b\", \"M0 80L0 229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7L48 32C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faComment = {\n  prefix: 'fas',\n  iconName: 'comment',\n  icon: [512, 512, [128489, 61669], \"f075\", \"M512 240c0 114.9-114.6 208-256 208c-37.1 0-72.3-6.4-104.1-17.9c-11.9 8.7-31.3 20.6-54.3 30.6C73.6 471.1 44.7 480 16 480c-6.5 0-12.3-3.9-14.8-9.9c-2.5-6-1.1-12.8 3.4-17.4c0 0 0 0 0 0s0 0 0 0s0 0 0 0c0 0 0 0 0 0l.3-.3c.3-.3 .7-.7 1.3-1.4c1.1-1.2 2.8-3.1 4.9-5.7c4.1-5 9.6-12.4 15.2-21.6c10-16.6 19.5-38.4 21.4-62.9C17.7 326.8 0 285.1 0 240C0 125.1 114.6 32 256 32s256 93.1 256 208z\"]\n};\nconst faCakeCandles = {\n  prefix: 'fas',\n  iconName: 'cake-candles',\n  icon: [448, 512, [127874, \"birthday-cake\", \"cake\"], \"f1fd\", \"M86.4 5.5L61.8 47.6C58 54.1 56 61.6 56 69.2L56 72c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L105.6 5.5C103.6 2.1 100 0 96 0s-7.6 2.1-9.6 5.5zm128 0L189.8 47.6c-3.8 6.5-5.8 14-5.8 21.6l0 2.8c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L233.6 5.5C231.6 2.1 228 0 224 0s-7.6 2.1-9.6 5.5zM317.8 47.6c-3.8 6.5-5.8 14-5.8 21.6l0 2.8c0 22.1 17.9 40 40 40s40-17.9 40-40l0-2.8c0-7.6-2-15-5.8-21.6L361.6 5.5C359.6 2.1 356 0 352 0s-7.6 2.1-9.6 5.5L317.8 47.6zM128 176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c-35.3 0-64 28.7-64 64l0 71c8.3 5.2 18.1 9 28.8 9c13.5 0 27.2-6.1 38.4-13.4c5.4-3.5 9.9-7.1 13-9.7c1.5-1.3 2.7-2.4 3.5-3.1c.4-.4 .7-.6 .8-.8l.1-.1s0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0c3.1-3.2 7.4-4.9 11.9-4.8s8.6 2.1 11.6 5.4c0 0 0 0 0 0s0 0 0 0l.1 .1c.1 .1 .4 .4 .7 .7c.7 .7 1.7 1.7 3.1 3c2.8 2.6 6.8 6.1 11.8 9.5c10.2 7.1 23 13.1 36.3 13.1s26.1-6 36.3-13.1c5-3.5 9-6.9 11.8-9.5c1.4-1.3 2.4-2.3 3.1-3c.3-.3 .6-.6 .7-.7l.1-.1c3-3.5 7.4-5.4 12-5.4s9 2 12 5.4l.1 .1c.1 .1 .4 .4 .7 .7c.7 .7 1.7 1.7 3.1 3c2.8 2.6 6.8 6.1 11.8 9.5c10.2 7.1 23 13.1 36.3 13.1s26.1-6 36.3-13.1c5-3.5 9-6.9 11.8-9.5c1.4-1.3 2.4-2.3 3.1-3c.3-.3 .6-.6 .7-.7l.1-.1c2.9-3.4 7.1-5.3 11.6-5.4s8.7 1.6 11.9 4.8c0 0 0 0 0 0s0 0 0 0s0 0 0 0l.1 .1c.2 .2 .4 .4 .8 .8c.8 .7 1.9 1.8 3.5 3.1c3.1 2.6 7.5 6.2 13 9.7c11.2 7.3 24.9 13.4 38.4 13.4c10.7 0 20.5-3.9 28.8-9l0-71c0-35.3-28.7-64-64-64l0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48-64 0 0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48-64 0 0-48zM448 394.6c-8.5 3.3-18.2 5.4-28.8 5.4c-22.5 0-42.4-9.9-55.8-18.6c-4.1-2.7-7.8-5.4-10.9-7.8c-2.8 2.4-6.1 5-9.8 7.5C329.8 390 310.6 400 288 400s-41.8-10-54.6-18.9c-3.5-2.4-6.7-4.9-9.4-7.2c-2.7 2.3-5.9 4.7-9.4 7.2C201.8 390 182.6 400 160 400s-41.8-10-54.6-18.9c-3.7-2.6-7-5.2-9.8-7.5c-3.1 2.4-6.8 5.1-10.9 7.8C71.2 390.1 51.3 400 28.8 400c-10.6 0-20.3-2.2-28.8-5.4L0 480c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32l0-85.4z\"]\n};\nconst faBirthdayCake = faCakeCandles;\nconst faCake = faCakeCandles;\nconst faEnvelope = {\n  prefix: 'fas',\n  iconName: 'envelope',\n  icon: [512, 512, [128386, 9993, 61443], \"f0e0\", \"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48L48 64zM0 176L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-208L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z\"]\n};\nconst faAnglesUp = {\n  prefix: 'fas',\n  iconName: 'angles-up',\n  icon: [448, 512, [\"angle-double-up\"], \"f102\", \"M246.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 109.3 361.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160zm160 352l-160-160c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 301.3 361.4 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\"]\n};\nconst faAngleDoubleUp = faAnglesUp;\nconst faPaperclip = {\n  prefix: 'fas',\n  iconName: 'paperclip',\n  icon: [448, 512, [128206], \"f0c6\", \"M364.2 83.8c-24.4-24.4-64-24.4-88.4 0l-184 184c-42.1 42.1-42.1 110.3 0 152.4s110.3 42.1 152.4 0l152-152c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6l-152 152c-64 64-167.6 64-231.6 0s-64-167.6 0-231.6l184-184c46.3-46.3 121.3-46.3 167.6 0s46.3 121.3 0 167.6l-176 176c-28.6 28.6-75 28.6-103.6 0s-28.6-75 0-103.6l144-144c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6l-144 144c-6.7 6.7-6.7 17.7 0 24.4s17.7 6.7 24.4 0l176-176c24.4-24.4 24.4-64 0-88.4z\"]\n};\nconst faArrowRightToCity = {\n  prefix: 'fas',\n  iconName: 'arrow-right-to-city',\n  icon: [640, 512, [], \"e4b3\", \"M288 48c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 144 40 0 0-72c0-13.3 10.7-24 24-24s24 10.7 24 24l0 72 24 0c26.5 0 48 21.5 48 48l0 224c0 26.5-21.5 48-48 48l-160 0-96 0c-26.5 0-48-21.5-48-48l0-416zm64 32l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM352 272l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm176-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM512 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM166.6 153.4l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L146.7 288 32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l114.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z\"]\n};\nconst faRibbon = {\n  prefix: 'fas',\n  iconName: 'ribbon',\n  icon: [448, 512, [127895], \"f4d6\", \"M333.2 322.8s0 0 0 0l-133.9-146s0 0 0 0L146 118.6c7.8-5.1 37-22.6 78-22.6s70.2 17.4 78 22.6L245.7 180l85.6 93.4 27.4-29.8c16.3-17.7 25.3-40.9 25.3-65l0-29.5c0-19-5.6-37.5-16.1-53.3L327.8 35.6C312.9 13.4 287.9 0 261.2 0l-76 0c-25.8 0-50.1 12.5-65.1 33.5L81.9 87C70.3 103.2 64 122.8 64 142.8L64 164c0 23.2 8.4 45.6 23.6 63.1l56 64.2s0 0 0 0l83.3 95.6s0 0 0 0l91.8 105.3c10 11.5 26.8 14.3 40 6.8l54.5-31.1c17.8-10.2 21.6-34.3 7.7-49.4l-87.7-95.7zM205.2 410.6l-83.3-95.6L27.1 418.5c-13.9 15.1-10.1 39.2 7.7 49.4l55.1 31.5c13 7.4 29.3 4.9 39.4-6.1l75.9-82.6z\"]\n};\nconst faLungs = {\n  prefix: 'fas',\n  iconName: 'lungs',\n  icon: [640, 512, [129729], \"f604\", \"M320 0c17.7 0 32 14.3 32 32l0 132.1c0 16.4 8.4 31.7 22.2 40.5l9.8 6.2 0-45.5C384 127 415 96 453.3 96c21.7 0 42.8 10.2 55.8 28.8c15.4 22.1 44.3 65.4 71 116.9c26.5 50.9 52.4 112.5 59.6 170.3c.2 1.3 .2 2.6 .2 4l0 7c0 49.1-39.8 89-89 89c-7.3 0-14.5-.9-21.6-2.7l-72.7-18.2C414 480.5 384 442.1 384 398l0-73 90.5 57.6c7.5 4.7 17.3 2.5 22.1-4.9s2.5-17.3-4.9-22.1L384 287.1l0-.4-44.1-28.1c-7.3-4.6-13.9-10.1-19.9-16.1c-5.9 6-12.6 11.5-19.9 16.1L256 286.7 161.2 347l-13.5 8.6c0 0 0 0-.1 0c-7.4 4.8-9.6 14.6-4.8 22.1c4.7 7.5 14.6 9.7 22.1 4.9l91.1-58 0 73.4c0 44.1-30 82.5-72.7 93.1l-72.7 18.2c-7.1 1.8-14.3 2.7-21.6 2.7c-49.1 0-89-39.8-89-89l0-7c0-1.3 .1-2.7 .2-4c7.2-57.9 33.1-119.4 59.6-170.3c26.8-51.5 55.6-94.8 71-116.9c13-18.6 34-28.8 55.8-28.8C225 96 256 127 256 165.3l0 45.5 9.8-6.2c13.8-8.8 22.2-24.1 22.2-40.5L288 32c0-17.7 14.3-32 32-32z\"]\n};\nconst faArrowUp91 = {\n  prefix: 'fas',\n  iconName: 'arrow-up-9-1',\n  icon: [576, 512, [\"sort-numeric-up-alt\"], \"f887\", \"M160 32c9 0 17.5 3.8 23.6 10.4l88 96c11.9 13 11.1 33.3-2 45.2s-33.3 11.1-45.2-2L192 146.3 192 448c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-301.7L95.6 181.6c-11.9 13-32.2 13.9-45.2 2s-13.9-32.2-2-45.2l88-96C142.5 35.8 151 32 160 32zM450.7 294c8.3 6 13.3 15.7 13.3 26l0 96 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-48 0-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-51.6-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zm-5-145.1A32 32 0 1 0 418.3 91a32 32 0 1 0 27.4 57.9zm-40.7 54.9C369.6 192.4 344 159.2 344 120c0-48.6 39.4-88 88-88s88 39.4 88 88c0 23.5-7.5 46.3-21.5 65.2L449.7 251c-10.5 14.2-30.6 17.2-44.8 6.7s-17.2-30.6-6.7-44.8l6.8-9.2z\"]\n};\nconst faSortNumericUpAlt = faArrowUp91;\nconst faLitecoinSign = {\n  prefix: 'fas',\n  iconName: 'litecoin-sign',\n  icon: [384, 512, [], \"e1d3\", \"M128 64c0-17.7-14.3-32-32-32S64 46.3 64 64l0 149.6L23.2 225.2c-17 4.9-26.8 22.6-22 39.6s22.6 26.8 39.6 22L64 280.1 64 448c0 17.7 14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-224 0 0-154.1 136.8-39.1c17-4.9 26.8-22.6 22-39.6s-22.6-26.8-39.6-22L128 195.3 128 64z\"]\n};\nconst faBorderNone = {\n  prefix: 'fas',\n  iconName: 'border-none',\n  icon: [448, 512, [], \"f850\", \"M32 480a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm96-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-384a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM320 416a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-320a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM224 480a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0-448a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM416 416a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-384a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM32 96a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM416 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM32 288a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm192 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm192 64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM32 320a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM416 192a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM32 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm192 64a32 32 0 1 1 0-64 32 32 0 1 1 0 64z\"]\n};\nconst faCircleNodes = {\n  prefix: 'fas',\n  iconName: 'circle-nodes',\n  icon: [512, 512, [], \"e4e2\", \"M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9c0-44.2-35.8-80-80-80c-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128c-44.2 0-80 35.8-80 80s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2c0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z\"]\n};\nconst faParachuteBox = {\n  prefix: 'fas',\n  iconName: 'parachute-box',\n  icon: [512, 512, [], \"f4cd\", \"M383.5 192c.3-5.3 .5-10.6 .5-16c0-51-15.9-96-40.2-127.6C319.5 16.9 288.2 0 256 0s-63.5 16.9-87.8 48.4C143.9 80 128 125 128 176c0 5.4 .2 10.7 .5 16L240 192l0 128-32 0c-7 0-13.7 1.5-19.7 4.2L68.2 192l28.3 0c-.3-5.3-.5-10.6-.5-16c0-64 22.2-121.2 57.1-159.3C62 49.3 18.6 122.6 4.2 173.6C1.5 183.1 9 192 18.9 192l6 0L165.2 346.3c-3.3 6.5-5.2 13.9-5.2 21.7l0 96c0 26.5 21.5 48 48 48l96 0c26.5 0 48-21.5 48-48l0-96c0-7.8-1.9-15.2-5.2-21.7L487.1 192l6 0c9.9 0 17.4-8.9 14.7-18.4C493.4 122.6 450 49.3 358.9 16.7C393.8 54.8 416 112.1 416 176c0 5.4-.2 10.7-.5 16l28.3 0L323.7 324.2c-6-2.7-12.7-4.2-19.7-4.2l-32 0 0-128 111.5 0z\"]\n};\nconst faIndent = {\n  prefix: 'fas',\n  iconName: 'indent',\n  icon: [448, 512, [], \"f03c\", \"M0 64C0 46.3 14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3L0 176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z\"]\n};\nconst faTruckFieldUn = {\n  prefix: 'fas',\n  iconName: 'truck-field-un',\n  icon: [640, 512, [], \"e58e\", \"M96 32C60.7 32 32 60.7 32 96l0 32c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l0 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-32c0-35.3-28.7-64-64-64l-4.2 0c-.4-1.1-.9-2.1-1.3-3.2L485.7 102c-10.3-23.1-33.2-38-58.5-38l-51.8 0C364.4 44.9 343.7 32 320 32L96 32zm288 96l43.2 0 42.7 96L384 224l0-96zM112 384a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM253.3 135.1l34.7 52 0-43.2c0-8.8 7.2-16 16-16s16 7.2 16 16l0 96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52 0 43.2c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM128 144l0 64c0 8.8 7.2 16 16 16s16-7.2 16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faHourglass = {\n  prefix: 'fas',\n  iconName: 'hourglass',\n  icon: [384, 512, [9203, 62032, \"hourglass-empty\"], \"f254\", \"M0 32C0 14.3 14.3 0 32 0L64 0 320 0l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 11c0 42.4-16.9 83.1-46.9 113.1L237.3 256l67.9 67.9c30 30 46.9 70.7 46.9 113.1l0 11c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L64 512l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-11c0-42.4 16.9-83.1 46.9-113.1L146.7 256 78.9 188.1C48.9 158.1 32 117.4 32 75l0-11C14.3 64 0 49.7 0 32zM96 64l0 11c0 25.5 10.1 49.9 28.1 67.9L192 210.7l67.9-67.9c18-18 28.1-42.4 28.1-67.9l0-11L96 64zm0 384l192 0 0-11c0-25.5-10.1-49.9-28.1-67.9L192 301.3l-67.9 67.9c-18 18-28.1 42.4-28.1 67.9l0 11z\"]\n};\nconst faHourglassEmpty = faHourglass;\nconst faMountain = {\n  prefix: 'fas',\n  iconName: 'mountain',\n  icon: [512, 512, [127956], \"f6fc\", \"M256 32c12.5 0 24.1 6.4 30.8 17L503.4 394.4c5.6 8.9 8.6 19.2 8.6 29.7c0 30.9-25 55.9-55.9 55.9L55.9 480C25 480 0 455 0 424.1c0-10.5 3-20.8 8.6-29.7L225.2 49c6.6-10.6 18.3-17 30.8-17zm65 192L256 120.4 176.9 246.5l18.3 24.4c6.4 8.5 19.2 8.5 25.6 0l25.6-34.1c6-8.1 15.5-12.8 25.6-12.8l49 0z\"]\n};\nconst faUserDoctor = {\n  prefix: 'fas',\n  iconName: 'user-doctor',\n  icon: [448, 512, [\"user-md\"], \"f0f0\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-96 55.2C54 332.9 0 401.3 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c16.4 0 29.7-13.3 29.7-29.7c0-81-54-149.4-128-171.1l0 50.8c27.6 7.1 48 32.2 48 62l0 40c0 8.8-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l0-24c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 24c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16l0-40c0-29.8 20.4-54.9 48-62l0-57.1c-6-.6-12.1-.9-18.3-.9l-91.4 0c-6.2 0-12.3 .3-18.3 .9l0 65.4c23.1 6.9 40 28.3 40 53.7c0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.4 16.9-46.8 40-53.7l0-59.1zM144 448a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faUserMd = faUserDoctor;\nconst faCircleInfo = {\n  prefix: 'fas',\n  iconName: 'circle-info',\n  icon: [512, 512, [\"info-circle\"], \"f05a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faInfoCircle = faCircleInfo;\nconst faCloudMeatball = {\n  prefix: 'fas',\n  iconName: 'cloud-meatball',\n  icon: [512, 512, [], \"f73b\", \"M0 224c0 53 43 96 96 96l44.7 0c9.5-23.5 32.5-40 59.3-40c2 0 3.9 .1 5.8 .3C217.6 265.5 235.7 256 256 256s38.4 9.5 50.2 24.3c1.9-.2 3.9-.3 5.8-.3c26.9 0 49.9 16.5 59.3 40l44.7 0c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0c1.1-5.2 1.6-10.5 1.6-16c0-44.2-35.8-80-80-80c-24.3 0-46.1 10.9-60.8 28C256.5 24.3 219.1 0 176 0C114.1 0 64 50.1 64 112c0 7.1 .7 14.1 1.9 20.8C27.6 145.4 0 181.5 0 224zm288 96c0-17.7-14.3-32-32-32s-32 14.3-32 32c0 1 .1 2.1 .1 3.1c-.7-.8-1.4-1.6-2.1-2.3c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3c.7 .7 1.5 1.4 2.3 2.1c-1-.1-2.1-.1-3.1-.1c-17.7 0-32 14.3-32 32s14.3 32 32 32c1 0 2.1-.1 3.1-.1c-.8 .7-1.6 1.3-2.3 2.1c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0c.7-.7 1.4-1.5 2.1-2.3c-.1 1-.1 2.1-.1 3.1c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1-.1-2.1-.1-3.1c.7 .8 1.3 1.6 2.1 2.3c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3c-.7-.7-1.5-1.4-2.3-2.1c1 .1 2.1 .1 3.1 .1c17.7 0 32-14.3 32-32s-14.3-32-32-32c-1 0-2.1 .1-3.1 .1c.8-.7 1.6-1.3 2.3-2.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-.7 .7-1.4 1.5-2.1 2.3c.1-1 .1-2.1 .1-3.1zM48 448a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm416 0a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faCamera = {\n  prefix: 'fas',\n  iconName: 'camera',\n  icon: [512, 512, [62258, \"camera-alt\"], \"f030\", \"M149.1 64.8L138.7 96 64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-74.7 0L362.9 64.8C356.4 45.2 338.1 32 317.4 32L194.6 32c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faCameraAlt = faCamera;\nconst faSquareVirus = {\n  prefix: 'fas',\n  iconName: 'square-virus',\n  icon: [448, 512, [], \"e578\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM223.8 93.7c13.3 0 24 10.7 24 24c0 29.3 35.4 43.9 56.1 23.2c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-20.7 20.7-6 56.1 23.2 56.1c13.3 0 24 10.7 24 24s-10.7 24-24 24c-29.3 0-43.9 35.4-23.2 56.1c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-20.7-20.7-56.1-6-56.1 23.2c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-29.3-35.4-43.9-56.1-23.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9c20.7-20.7 6-56.1-23.2-56.1c-13.3 0-24-10.7-24-24s10.7-24 24-24c29.3 0 43.9-35.4 23.2-56.1c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0c20.7 20.7 56.1 6 56.1-23.2c0-13.3 10.7-24 24-24zM192 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm88 32a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nconst faMeteor = {\n  prefix: 'fas',\n  iconName: 'meteor',\n  icon: [512, 512, [9732], \"f753\", \"M493.7 .9L299.4 75.6l2.3-29.3c1-12.8-12.8-21.5-24-15.1L101.3 133.4C38.6 169.7 0 236.6 0 309C0 421.1 90.9 512 203 512c72.4 0 139.4-38.6 175.7-101.3L480.8 234.3c6.5-11.1-2.2-25-15.1-24l-29.3 2.3L511.1 18.3c.6-1.5 .9-3.2 .9-4.8C512 6 506 0 498.5 0c-1.7 0-3.3 .3-4.8 .9zM192 192a128 128 0 1 1 0 256 128 128 0 1 1 0-256zm0 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm16 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faCarOn = {\n  prefix: 'fas',\n  iconName: 'car-on',\n  icon: [512, 512, [], \"e4dd\", \"M280 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24s24-10.7 24-24l0-80zM185.8 224l140.3 0c6.8 0 12.8 4.3 15.1 10.6L360.3 288l-208.6 0 19.1-53.4c2.3-6.4 8.3-10.6 15.1-10.6zm-75.3-10.9L82.2 292.4C62.1 300.9 48 320.8 48 344l0 40 0 64 0 32c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-32 256 0 0 32c0 17.7 14.3 32 32 32l16 0c17.7 0 32-14.3 32-32l0-32 0-64 0-40c0-23.2-14.1-43.1-34.2-51.6l-28.3-79.3C390.1 181.3 360 160 326.2 160l-140.3 0c-33.8 0-64 21.3-75.3 53.1zM128 344a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm232 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM39 39c-9.4 9.4-9.4 24.6 0 33.9l48 48c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L73 39c-9.4-9.4-24.6-9.4-33.9 0zm400 0L391 87c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0z\"]\n};\nconst faSleigh = {\n  prefix: 'fas',\n  iconName: 'sleigh',\n  icon: [640, 512, [], \"f7cc\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l0 160c0 53 43 96 96 96l0 32 64 0 0-32 192 0 0 32 64 0 0-32c53 0 96-43 96-96l0-96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0-32 0c-17.7 0-32 14.3-32 32l0 41.3c0 30.2-24.5 54.7-54.7 54.7c-75.5 0-145.6-38.9-185.6-102.9l-4.3-6.9C174.2 67.6 125 37.6 70.7 32.7c-2.2-.5-4.4-.7-6.7-.7l-9 0L32 32zM640 384c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 8c0 13.3-10.7 24-24 24L64 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l488 0c48.6 0 88-39.4 88-88l0-8z\"]\n};\nconst faArrowDown19 = {\n  prefix: 'fas',\n  iconName: 'arrow-down-1-9',\n  icon: [576, 512, [\"sort-numeric-asc\", \"sort-numeric-down\"], \"f162\", \"M450.7 38c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2 0 51.6-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l48 0 48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-16 0 0-96c0-10.3-4.9-19.9-13.3-26zM160 480c9 0 17.5-3.8 23.6-10.4l88-96c11.9-13 11.1-33.3-2-45.2s-33.3-11.1-45.2 2L192 365.7 192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 301.7L95.6 330.4c-11.9-13-32.2-13.9-45.2-2s-13.9 32.2-2 45.2l88 96C142.5 476.2 151 480 160 480zM418.3 307a32 32 0 1 1 27.4 57.9A32 32 0 1 1 418.3 307zM405.1 419.8l-6.8 9.2c-10.5 14.2-7.5 34.2 6.7 44.8s34.2 7.5 44.8-6.7l48.8-65.8c14-18.9 21.5-41.7 21.5-65.2c0-48.6-39.4-88-88-88s-88 39.4-88 88c0 39.2 25.6 72.4 61.1 83.8z\"]\n};\nconst faSortNumericAsc = faArrowDown19;\nconst faSortNumericDown = faArrowDown19;\nconst faHandHoldingDroplet = {\n  prefix: 'fas',\n  iconName: 'hand-holding-droplet',\n  icon: [576, 512, [\"hand-holding-water\"], \"f4c1\", \"M275.5 6.6C278.3 2.5 283 0 288 0s9.7 2.5 12.5 6.6L366.8 103C378 119.3 384 138.6 384 158.3l0 1.7c0 53-43 96-96 96s-96-43-96-96l0-1.7c0-19.8 6-39 17.2-55.3L275.5 6.6zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 512 32 512c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"]\n};\nconst faHandHoldingWater = faHandHoldingDroplet;\nconst faWater = {\n  prefix: 'fas',\n  iconName: 'water',\n  icon: [576, 512, [], \"f773\", \"M269.5 69.9c11.1-7.9 25.9-7.9 37 0C329 85.4 356.5 96 384 96c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 149.7 417 160 384 160c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4C42.8 92.6 61 83.5 75.3 71.6c11.1-9.5 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 85.2 165.1 96 192 96c27.5 0 55-10.6 77.5-26.1zm37 288C329 373.4 356.5 384 384 384c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 437.7 417 448 384 448c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 373.2 165.1 384 192 384c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0zm0-144C329 229.4 356.5 240 384 240c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 293.7 417 304 384 304c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.5 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 229.2 165.1 240 192 240c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faCalendarCheck = {\n  prefix: 'fas',\n  iconName: 'calendar-check',\n  icon: [448, 512, [], \"f274\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zM329 305c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-95 95-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L329 305z\"]\n};\nconst faBraille = {\n  prefix: 'fas',\n  iconName: 'braille',\n  icon: [640, 512, [], \"f2a1\", \"M0 96a64 64 0 1 1 128 0A64 64 0 1 1 0 96zM224 272a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM80 416a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zm240 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 192a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM224 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM352 96a64 64 0 1 1 128 0A64 64 0 1 1 352 96zm240 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0A64 64 0 1 1 512 96zm64 176a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm16 224a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM416 272a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm16 224a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"]\n};\nconst faPrescriptionBottleMedical = {\n  prefix: 'fas',\n  iconName: 'prescription-bottle-medical',\n  icon: [384, 512, [\"prescription-bottle-alt\"], \"f486\", \"M0 32C0 14.3 14.3 0 32 0L352 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64L0 32zm32 96l320 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-320zM160 240l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faPrescriptionBottleAlt = faPrescriptionBottleMedical;\nconst faLandmark = {\n  prefix: 'fas',\n  iconName: 'landmark',\n  icon: [512, 512, [127963], \"f66f\", \"M240.1 4.2c9.8-5.6 21.9-5.6 31.8 0l171.8 98.1L448 104l0 .9 47.9 27.4c12.6 7.2 18.8 22 15.1 36s-16.4 23.8-30.9 23.8L32 192c-14.5 0-27.2-9.8-30.9-23.8s2.5-28.8 15.1-36L64 104.9l0-.9 4.4-1.6L240.1 4.2zM64 224l64 0 0 192 40 0 0-192 64 0 0 192 48 0 0-192 64 0 0 192 40 0 0-192 64 0 0 196.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512L32 512c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1L64 224z\"]\n};\nconst faTruck = {\n  prefix: 'fas',\n  iconName: 'truck',\n  icon: [640, 512, [128666, 9951], \"f0d1\", \"M48 0C21.5 0 0 21.5 0 48L0 368c0 26.5 21.5 48 48 48l16 0c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64 0-32 0-18.7c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7L416 96l0-48c0-26.5-21.5-48-48-48L48 0zM416 160l50.7 0L544 237.3l0 18.7-128 0 0-96zM112 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faCrosshairs = {\n  prefix: 'fas',\n  iconName: 'crosshairs',\n  icon: [512, 512, [], \"f05b\", \"M256 0c17.7 0 32 14.3 32 32l0 10.4c93.7 13.9 167.7 88 181.6 181.6l10.4 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-10.4 0c-13.9 93.7-88 167.7-181.6 181.6l0 10.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-10.4C130.3 455.7 56.3 381.7 42.4 288L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l10.4 0C56.3 130.3 130.3 56.3 224 42.4L224 32c0-17.7 14.3-32 32-32zM107.4 288c12.5 58.3 58.4 104.1 116.6 116.6l0-20.6c0-17.7 14.3-32 32-32s32 14.3 32 32l0 20.6c58.3-12.5 104.1-58.4 116.6-116.6L384 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l20.6 0C392.1 165.7 346.3 119.9 288 107.4l0 20.6c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-20.6C165.7 119.9 119.9 165.7 107.4 224l20.6 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-20.6 0zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faPersonCane = {\n  prefix: 'fas',\n  iconName: 'person-cane',\n  icon: [448, 512, [], \"e53c\", \"M272 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm-8 187.3l47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7l-35.9 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-244.7zM352 376c0-4.4 3.6-8 8-8s8 3.6 8 8l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-30.9-25.1-56-56-56s-56 25.1-56 56l0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8z\"]\n};\nconst faTent = {\n  prefix: 'fas',\n  iconName: 'tent',\n  icon: [576, 512, [], \"e57d\", \"M269.4 6C280.5-2 295.5-2 306.6 6l224 160c7.4 5.3 12.2 13.5 13.2 22.5l32 288c1 9-1.9 18.1-8 24.9s-14.7 10.7-23.8 10.7l-80 0-28.2 0c-12.1 0-23.2-6.8-28.6-17.7L306.7 293.5c-1.7-3.4-5.1-5.5-8.8-5.5c-5.5 0-9.9 4.4-9.9 9.9L288 480c0 17.7-14.3 32-32 32l-16 0L32 512c-9.1 0-17.8-3.9-23.8-10.7s-9-15.8-8-24.9l32-288c1-9 5.8-17.2 13.2-22.5L269.4 6z\"]\n};\nconst faVestPatches = {\n  prefix: 'fas',\n  iconName: 'vest-patches',\n  icon: [448, 512, [], \"e086\", \"M151.2 69.7l55.9 167.7-11 33.1c-2.7 8.2-4.1 16.7-4.1 25.3L192 464c0 14.5 3.9 28.2 10.7 39.9C195 509 185.9 512 176 512L48 512c-26.5 0-48-21.5-48-48L0 270.5c0-9.5 2.8-18.7 8.1-26.6l47.9-71.8c5.3-7.9 8.1-17.1 8.1-26.6L64 128l0-73.7L64 48C64 21.5 85.5 0 112 0l4.5 0c.2 0 .4 0 .6 0c.4 0 .8 0 1.2 0c18.8 0 34.1 9.7 44.1 18.8C171.6 27.2 190.8 40 224 40s52.4-12.8 61.7-21.2C295.7 9.7 311 0 329.7 0c.4 0 .8 0 1.2 0c.2 0 .4 0 .6 0L336 0c26.5 0 48 21.5 48 48l0 6.3 0 73.7 0 17.5c0 9.5 2.8 18.7 8.1 26.6l47.9 71.8c5.3 7.9 8.1 17.1 8.1 26.6L448 464c0 26.5-21.5 48-48 48l-128 0c-26.5 0-48-21.5-48-48l0-168.2c0-5.2 .8-10.3 2.5-15.2L296.8 69.7C279.4 79.7 255.4 88 224 88s-55.4-8.3-72.8-18.3zM96 456a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM63.5 255.5c-4.7 4.7-4.7 12.3 0 17L79 288 63.5 303.5c-4.7 4.7-4.7 12.3 0 17s12.3 4.7 17 0L96 305l15.5 15.5c4.7 4.7 12.3 4.7 17 0s4.7-12.3 0-17L113 288l15.5-15.5c4.7-4.7 4.7-12.3 0-17s-12.3-4.7-17 0L96 271 80.5 255.5c-4.7-4.7-12.3-4.7-17 0zM304 280l0 8 0 32c0 8.8 7.2 16 16 16l32 0 8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0 0-8c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nconst faCheckDouble = {\n  prefix: 'fas',\n  iconName: 'check-double',\n  icon: [448, 512, [], \"f560\", \"M342.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 178.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l80 80c12.5 12.5 32.8 12.5 45.3 0l160-160zm96 128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 402.7 54.6 297.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l256-256z\"]\n};\nconst faArrowDownAZ = {\n  prefix: 'fas',\n  iconName: 'arrow-down-a-z',\n  icon: [576, 512, [\"sort-alpha-asc\", \"sort-alpha-down\"], \"f15d\", \"M183.6 469.6C177.5 476.2 169 480 160 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L128 365.7 128 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 320c0-17.7 14.3-32 32-32l128 0c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L429.3 416l50.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L402.7 352 352 352c-17.7 0-32-14.3-32-32zM416 32c12.1 0 23.2 6.8 28.6 17.7l64 128 16 32c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3L460.2 224l-88.4 0-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l16-32 64-128C392.8 38.8 403.9 32 416 32zM395.8 176l40.4 0L416 135.6 395.8 176z\"]\n};\nconst faSortAlphaAsc = faArrowDownAZ;\nconst faSortAlphaDown = faArrowDownAZ;\nconst faMoneyBillWheat = {\n  prefix: 'fas',\n  iconName: 'money-bill-wheat',\n  icon: [512, 512, [], \"e52a\", \"M176 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80c0-8.8 7.2-16 16-16zM56 16l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L56 64C42.7 64 32 53.3 32 40s10.7-24 24-24zM24 88l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L24 136c-13.3 0-24-10.7-24-24S10.7 88 24 88zm8 96c0-13.3 10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zM272 16c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80zM400 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80c0-8.8 7.2-16 16-16zm80 144c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 128c8.8 0 16 7.2 16 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-96 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM0 304c0-26.5 21.5-48 48-48l416 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 304zM48 416l0 48 48 0c0-26.5-21.5-48-48-48zM96 304l-48 0 0 48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48l48 0 0-48zM416 304c0 26.5 21.5 48 48 48l0-48-48 0zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faCookie = {\n  prefix: 'fas',\n  iconName: 'cookie',\n  icon: [512, 512, [127850], \"f563\", \"M247.2 17c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9l-14.6-82.8c-3.9-22.1-14.6-42.3-30.7-57.9L388.9 57.5c-16.1-15.6-36.6-25.6-58.7-28.7L247.2 17zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faArrowRotateLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-rotate-left',\n  icon: [512, 512, [8634, \"arrow-left-rotate\", \"arrow-rotate-back\", \"arrow-rotate-backward\", \"undo\"], \"f0e2\", \"M125.7 160l50.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L48 224c-17.7 0-32-14.3-32-32L16 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 51.2L97.6 97.6c87.5-87.5 229.3-87.5 316.8 0s87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3s-163.8-62.5-226.3 0L125.7 160z\"]\n};\nconst faArrowLeftRotate = faArrowRotateLeft;\nconst faArrowRotateBack = faArrowRotateLeft;\nconst faArrowRotateBackward = faArrowRotateLeft;\nconst faUndo = faArrowRotateLeft;\nconst faHardDrive = {\n  prefix: 'fas',\n  iconName: 'hard-drive',\n  icon: [512, 512, [128436, \"hdd\"], \"f0a0\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 184.4c-17-15.2-39.4-24.4-64-24.4L64 256c-24.6 0-47 9.2-64 24.4L0 96zM64 288l384 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64zM320 416a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm128-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faHdd = faHardDrive;\nconst faFaceGrinSquintTears = {\n  prefix: 'fas',\n  iconName: 'face-grin-squint-tears',\n  icon: [512, 512, [129315, \"grin-squint-tears\"], \"f586\", \"M426.8 14.2C446-5 477.5-4.6 497.1 14.9s20 51 .7 70.3c-6.8 6.8-21.4 12.4-37.4 16.7c-16.3 4.4-34.1 7.5-46.3 9.3c-1.6 .2-3.1 .5-4.6 .6c-4.9 .8-9.1-2.8-9.5-7.4c-.1-.7 0-1.4 .1-2.1c1.6-11.2 4.6-29.6 9-47c.3-1.3 .7-2.6 1-3.9c4.3-15.9 9.8-30.5 16.7-37.4zm-44.7 19c-1.5 4.8-2.9 9.6-4.1 14.3c-4.8 18.9-8 38.5-9.7 50.3c-4 26.8 18.9 49.7 45.7 45.8c11.9-1.6 31.5-4.8 50.4-9.7c4.7-1.2 9.5-2.5 14.3-4.1C534.2 227.5 520.2 353.8 437 437c-83.2 83.2-209.5 97.2-307.2 41.8c1.5-4.8 2.8-9.6 4-14.3c4.8-18.9 8-38.5 9.7-50.3c4-26.8-18.9-49.7-45.7-45.8c-11.9 1.6-31.5 4.8-50.4 9.7c-4.7 1.2-9.5 2.5-14.3 4.1C-22.2 284.5-8.2 158.2 75 75C158.2-8.3 284.5-22.2 382.2 33.2zM51.5 410.1c18.5-5 38.8-8.3 50.9-10c.4-.1 .7-.1 1-.1c5.1-.2 9.2 4.3 8.4 9.6c-1.7 12.1-5 32.4-10 50.9C97.6 476.4 92 491 85.2 497.8C66 517 34.5 516.6 14.9 497.1s-20-51-.7-70.3c6.8-6.8 21.4-12.4 37.4-16.7zM416.9 209c-4.7-11.9-20.8-11-26.8 .3c-19 35.5-45 70.8-77.5 103.3S244.8 371.1 209.3 390c-11.3 6-12.2 22.1-.3 26.8c57.6 22.9 125.8 11 172.3-35.5s58.4-114.8 35.5-172.3zM87.1 285.1c2 2 4.6 3.2 7.3 3.4l56.1 5.1 5.1 56.1c.3 2.8 1.5 5.4 3.4 7.3c6.3 6.3 17.2 3.6 19.8-4.9l29.7-97.4c3.5-11.6-7.3-22.5-19-19L92 265.3c-8.6 2.6-11.3 13.4-4.9 19.8zM265.3 92l-29.7 97.4c-3.5 11.6 7.3 22.5 19 19l97.4-29.7c8.6-2.6 11.3-13.4 4.9-19.8c-2-2-4.6-3.2-7.3-3.4l-56.1-5.1-5.1-56.1c-.3-2.8-1.5-5.4-3.4-7.3c-6.3-6.3-17.2-3.6-19.8 4.9z\"]\n};\nconst faGrinSquintTears = faFaceGrinSquintTears;\nconst faDumbbell = {\n  prefix: 'fas',\n  iconName: 'dumbbell',\n  icon: [640, 512, [], \"f44b\", \"M96 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 160 0 64 0 160c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64-32 0c-17.7 0-32-14.3-32-32l0-64c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l32 0 0-64zm448 0l0 64 32 0c17.7 0 32 14.3 32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 64c0 17.7-14.3 32-32 32l-32 0 0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-160 0-64 0-160c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32zM416 224l0 64-192 0 0-64 192 0z\"]\n};\nconst faRectangleList = {\n  prefix: 'fas',\n  iconName: 'rectangle-list',\n  icon: [576, 512, [\"list-alt\"], \"f022\", \"M0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32-128a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96-248c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0z\"]\n};\nconst faListAlt = faRectangleList;\nconst faTarpDroplet = {\n  prefix: 'fas',\n  iconName: 'tarp-droplet',\n  icon: [576, 512, [], \"e57c\", \"M288 160c-35.3 0-64-26.9-64-60c0-24 33.7-70.1 52.2-93.5c6.1-7.7 17.5-7.7 23.6 0C318.3 29.9 352 76 352 100c0 33.1-28.7 60-64 60zM64 128l133.5 0c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64L512 128c35.3 0 64 28.7 64 64l0 160-128 0c-17.7 0-32 14.3-32 32l0 128L64 512c-35.3 0-64-28.7-64-64L0 192c0-35.3 28.7-64 64-64zM448 512l0-128 128 0L448 512zM96 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faHouseMedicalCircleCheck = {\n  prefix: 'fas',\n  iconName: 'house-medical-circle-check',\n  icon: [640, 512, [], \"e511\", \"M320 368c0 59.5 29.5 112.1 74.8 144l-266.7 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64L320 256l0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zm32 0a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L480 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faPersonSkiingNordic = {\n  prefix: 'fas',\n  iconName: 'person-skiing-nordic',\n  icon: [576, 512, [\"skiing-nordic\"], \"f7ca\", \"M336 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM227.2 160c1.9 0 3.8 .1 5.6 .3L201.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9L291.3 464l-88.5 0 41.1-88.1-32.4-20.3c-7.8-4.9-14.7-10.7-20.6-17.3L132.2 464l-32.4 0 54.2-257.6c4.6-1.5 9-4.1 12.7-7.8l23.1-23.1c9.9-9.9 23.4-15.5 37.5-15.5zM121.4 198.6c.4 .4 .8 .8 1.3 1.2L67 464l-43 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l135.3 0c.5 0 .9 0 1.4 0l158.6 0c.5 0 1 0 1.4 0L504 512c39.8 0 72-32.2 72-72l0-8c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 8c0 13.3-10.7 24-24 24l-69.4 0 27.6-179.3c10.5-5.2 17.8-16.1 17.8-28.7c0-17.7-14.3-32-32-32l-21.3 0c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3l-23.1 23.1c-12.5 12.5-12.5 32.8 0 45.3zm308 89.4L402.3 464l-44.4 0 21.6-75.6c5.9-20.6-2.6-42.6-20.7-53.9L302 299l30.9-82.4 5.1 12.3C353 264.7 387.9 288 426.7 288l2.7 0z\"]\n};\nconst faSkiingNordic = faPersonSkiingNordic;\nconst faCalendarPlus = {\n  prefix: 'fas',\n  iconName: 'calendar-plus',\n  icon: [448, 512, [], \"f271\", \"M96 32l0 32L48 64C21.5 64 0 85.5 0 112l0 48 448 0 0-48c0-26.5-21.5-48-48-48l-48 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32L160 64l0-32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192L0 192 0 464c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-272zM224 248c13.3 0 24 10.7 24 24l0 56 56 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-56 0 0 56c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-56-56 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l56 0 0-56c0-13.3 10.7-24 24-24z\"]\n};\nconst faPlaneArrival = {\n  prefix: 'fas',\n  iconName: 'plane-arrival',\n  icon: [640, 512, [128748], \"f5af\", \"M.3 166.9L0 68C0 57.7 9.5 50.1 19.5 52.3l35.6 7.9c10.6 2.3 19.2 9.9 23 20L96 128l127.3 37.6L181.8 20.4C178.9 10.2 186.6 0 197.2 0l40.1 0c11.6 0 22.2 6.2 27.9 16.3l109 193.8 107.2 31.7c15.9 4.7 30.8 12.5 43.7 22.8l34.4 27.6c24 19.2 18.1 57.3-10.7 68.2c-41.2 15.6-86.2 18.1-128.8 7L121.7 289.8c-11.1-2.9-21.2-8.7-29.3-16.9L9.5 189.4c-5.9-6-9.3-14.1-9.3-22.5zM32 448l576 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32zm96-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128-16a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faCircleLeft = {\n  prefix: 'fas',\n  iconName: 'circle-left',\n  icon: [512, 512, [61840, \"arrow-alt-circle-left\"], \"f359\", \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM116.7 244.7l112-112c4.6-4.6 11.5-5.9 17.4-3.5s9.9 8.3 9.9 14.8l0 64 96 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32l-96 0 0 64c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5l-112-112c-6.2-6.2-6.2-16.4 0-22.6z\"]\n};\nconst faArrowAltCircleLeft = faCircleLeft;\nconst faTrainSubway = {\n  prefix: 'fas',\n  iconName: 'train-subway',\n  icon: [448, 512, [\"subway\"], \"f239\", \"M96 0C43 0 0 43 0 96L0 352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512l39.7 0c8.5 0 16.6-3.4 22.6-9.4L160 448l128 0 54.6 54.6c6 6 14.1 9.4 22.6 9.4l39.7 0c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9l0-256c0-53-43-96-96-96L96 0zM64 128c0-17.7 14.3-32 32-32l80 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-80 0c-17.7 0-32-14.3-32-32l0-96zM272 96l80 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-80 0c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zM64 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm288-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSubway = faTrainSubway;\nconst faChartGantt = {\n  prefix: 'fas',\n  iconName: 'chart-gantt',\n  icon: [512, 512, [], \"e0e4\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32zm96 64l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm160 96l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faIndianRupeeSign = {\n  prefix: 'fas',\n  iconName: 'indian-rupee-sign',\n  icon: [320, 512, [\"indian-rupee\", \"inr\"], \"e1bc\", \"M0 64C0 46.3 14.3 32 32 32l64 0 16 0 176 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-56.2 0c9.6 14.4 16.7 30.6 20.7 48l35.6 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-35.6 0c-13.2 58.3-61.9 103.2-122.2 110.9L274.6 422c14.4 10.3 17.7 30.3 7.4 44.6s-30.3 17.7-44.6 7.4L13.4 314C2.1 306-2.7 291.5 1.5 278.2S18.1 256 32 256l80 0c32.8 0 61-19.7 73.3-48L32 208c-17.7 0-32-14.3-32-32s14.3-32 32-32l153.3 0C173 115.7 144.8 96 112 96L96 96 32 96C14.3 96 0 81.7 0 64z\"]\n};\nconst faIndianRupee = faIndianRupeeSign;\nconst faInr = faIndianRupeeSign;\nconst faCropSimple = {\n  prefix: 'fas',\n  iconName: 'crop-simple',\n  icon: [512, 512, [\"crop-alt\"], \"f565\", \"M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32l0 32L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l32 0 0 256c0 35.3 28.7 64 64 64l224 0 0-64-224 0 0-352zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-256c0-35.3-28.7-64-64-64L160 64l0 64 224 0 0 352z\"]\n};\nconst faCropAlt = faCropSimple;\nconst faMoneyBill1 = {\n  prefix: 'fas',\n  iconName: 'money-bill-1',\n  icon: [576, 512, [\"money-bill-alt\"], \"f3d1\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm64 320l-64 0 0-64c35.3 0 64 28.7 64 64zM64 192l0-64 64 0c0 35.3-28.7 64-64 64zM448 384c0-35.3 28.7-64 64-64l0 64-64 0zm64-192c-35.3 0-64-28.7-64-64l64 0 0 64zM176 256a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zm76-48c0 9.7 6.9 17.7 16 19.6l0 48.4-4 0c-11 0-20 9-20 20s9 20 20 20l24 0 24 0c11 0 20-9 20-20s-9-20-20-20l-4 0 0-68c0-11-9-20-20-20l-16 0c-11 0-20 9-20 20z\"]\n};\nconst faMoneyBillAlt = faMoneyBill1;\nconst faLeftLong = {\n  prefix: 'fas',\n  iconName: 'left-long',\n  icon: [512, 512, [\"long-arrow-alt-left\"], \"f30a\", \"M177.5 414c-8.8 3.8-19 2-26-4.6l-144-136C2.7 268.9 0 262.6 0 256s2.7-12.9 7.5-17.4l144-136c7-6.6 17.2-8.4 26-4.6s14.5 12.5 14.5 22l0 72 288 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-288 0 0 72c0 9.6-5.7 18.2-14.5 22z\"]\n};\nconst faLongArrowAltLeft = faLeftLong;\nconst faDna = {\n  prefix: 'fas',\n  iconName: 'dna',\n  icon: [448, 512, [129516], \"f471\", \"M416 0c17.7 0 32 14.3 32 32c0 59.8-30.3 107.5-69.4 146.6c-28 28-62.5 53.5-97.3 77.4l-2.5 1.7c-11.9 8.1-23.8 16.1-35.5 23.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0l-1.6 1c-6 4-11.9 7.9-17.8 11.9c-20.9 14-40.8 27.7-59.3 41.5l118.5 0c-9.8-7.4-20.1-14.7-30.7-22.1l7-4.7 3-2c15.1-10.1 30.9-20.6 46.7-31.6c25 18.1 48.9 37.3 69.4 57.7C417.7 372.5 448 420.2 448 480c0 17.7-14.3 32-32 32s-32-14.3-32-32L64 480c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-59.8 30.3-107.5 69.4-146.6c28-28 62.5-53.5 97.3-77.4c-34.8-23.9-69.3-49.3-97.3-77.4C30.3 139.5 0 91.8 0 32C0 14.3 14.3 0 32 0S64 14.3 64 32l320 0c0-17.7 14.3-32 32-32zM338.6 384l-229.2 0c-10.1 10.6-18.6 21.3-25.5 32l280.2 0c-6.8-10.7-15.3-21.4-25.5-32zM109.4 128l229.2 0c10.1-10.7 18.6-21.3 25.5-32L83.9 96c6.8 10.7 15.3 21.3 25.5 32zm55.4 48c18.4 13.8 38.4 27.5 59.3 41.5c20.9-14 40.8-27.7 59.3-41.5l-118.5 0z\"]\n};\nconst faVirusSlash = {\n  prefix: 'fas',\n  iconName: 'virus-slash',\n  icon: [640, 512, [], \"e075\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-154.3-121c-2-30.1 20.8-60.1 56-60.1l11.5 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-11.5 0c-49.9 0-74.9-60.3-39.6-95.6l8.2-8.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-8.2 8.2C412.3 118.4 352 93.4 352 43.5L352 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 11.5c0 49.9-60.3 74.9-95.6 39.6L184.2 75c-12.5-12.5-32.8-12.5-45.3 0c-1.6 1.6-3.1 3.4-4.3 5.3L38.8 5.1zm225.8 177c6.9-3.9 14.9-6.1 23.4-6.1c26.5 0 48 21.5 48 48c0 4.4-.6 8.7-1.7 12.7l-69.7-54.6zM402 412.7L144.7 210c-9.5 8.5-22.2 14-37.2 14L96 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l11.5 0c49.9 0 74.9 60.3 39.6 95.6l-8.2 8.2c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l8.2-8.2c35.3-35.3 95.6-10.3 95.6 39.6l0 11.5c0 17.7 14.3 32 32 32s32-14.3 32-32l0-11.5c0-31.2 23.6-52.7 50-55.7z\"]\n};\nconst faMinus = {\n  prefix: 'fas',\n  iconName: 'minus',\n  icon: [448, 512, [8211, 8722, 10134, \"subtract\"], \"f068\", \"M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faSubtract = faMinus;\nconst faChess = {\n  prefix: 'fas',\n  iconName: 'chess',\n  icon: [512, 512, [], \"f439\", \"M144 16c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 16L96 32c-8.8 0-16 7.2-16 16s7.2 16 16 16l16 0 0 32L60.2 96C49.1 96 40 105.1 40 116.2c0 2.5 .5 4.9 1.3 7.3L73.8 208 72 208c-13.3 0-24 10.7-24 24s10.7 24 24 24l4 0L60 384l136 0L180 256l4 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-1.8 0 32.5-84.5c.9-2.3 1.3-4.8 1.3-7.3c0-11.2-9.1-20.2-20.2-20.2L144 96l0-32 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-16 0 0-16zM48 416L4.8 473.6C1.7 477.8 0 482.8 0 488c0 13.3 10.7 24 24 24l208 0c13.3 0 24-10.7 24-24c0-5.2-1.7-10.2-4.8-14.4L208 416 48 416zm288 0l-43.2 57.6c-3.1 4.2-4.8 9.2-4.8 14.4c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24c0-5.2-1.7-10.2-4.8-14.4L464 416l-128 0zM304 208l0 51.9c0 7.8 2.8 15.3 8 21.1L339.2 312 337 384l125.5 0-3.3-72 28.3-30.8c5.4-5.9 8.5-13.6 8.5-21.7l0-51.5c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 16-24 0 0-16c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 16-24 0 0-16c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16zm80 96c0-8.8 7.2-16 16-16s16 7.2 16 16l0 32-32 0 0-32z\"]\n};\nconst faArrowLeftLong = {\n  prefix: 'fas',\n  iconName: 'arrow-left-long',\n  icon: [512, 512, [\"long-arrow-left\"], \"f177\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288 480 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-370.7 0 73.4-73.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-128 128z\"]\n};\nconst faLongArrowLeft = faArrowLeftLong;\nconst faPlugCircleCheck = {\n  prefix: 'fas',\n  iconName: 'plug-circle-check',\n  icon: [576, 512, [], \"e55c\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L416 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faStreetView = {\n  prefix: 'fas',\n  iconName: 'street-view',\n  icon: [512, 512, [], \"f21d\", \"M320 64A64 64 0 1 0 192 64a64 64 0 1 0 128 0zm-96 96c-35.3 0-64 28.7-64 64l0 48c0 17.7 14.3 32 32 32l1.8 0 11.1 99.5c1.8 16.2 15.5 28.5 31.8 28.5l38.7 0c16.3 0 30-12.3 31.8-28.5L318.2 304l1.8 0c17.7 0 32-14.3 32-32l0-48c0-35.3-28.7-64-64-64l-64 0zM132.3 394.2c13-2.4 21.7-14.9 19.3-27.9s-14.9-21.7-27.9-19.3c-32.4 5.9-60.9 14.2-82 24.8c-10.5 5.3-20.3 11.7-27.8 19.6C6.4 399.5 0 410.5 0 424c0 21.4 15.5 36.1 29.1 45c14.7 9.6 34.3 17.3 56.4 23.4C130.2 504.7 190.4 512 256 512s125.8-7.3 170.4-19.6c22.1-6.1 41.8-13.8 56.4-23.4c13.7-8.9 29.1-23.6 29.1-45c0-13.5-6.4-24.5-14-32.6c-7.5-7.9-17.3-14.3-27.8-19.6c-21-10.6-49.5-18.9-82-24.8c-13-2.4-25.5 6.3-27.9 19.3s6.3 25.5 19.3 27.9c30.2 5.5 53.7 12.8 69 20.5c3.2 1.6 5.8 3.1 7.9 4.5c3.6 2.4 3.6 7.2 0 9.6c-8.8 5.7-23.1 11.8-43 17.3C374.3 457 318.5 464 256 464s-118.3-7-157.7-17.9c-19.9-5.5-34.2-11.6-43-17.3c-3.6-2.4-3.6-7.2 0-9.6c2.1-1.4 4.8-2.9 7.9-4.5c15.3-7.7 38.8-14.9 69-20.5z\"]\n};\nconst faFrancSign = {\n  prefix: 'fas',\n  iconName: 'franc-sign',\n  icon: [320, 512, [], \"e18f\", \"M80 32C62.3 32 48 46.3 48 64l0 160 0 96-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 0-64 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-96 176 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32z\"]\n};\nconst faVolumeOff = {\n  prefix: 'fas',\n  iconName: 'volume-off',\n  icon: [320, 512, [], \"f026\", \"M320 64c0-12.6-7.4-24-18.9-29.2s-25-3.1-34.4 5.3L131.8 160 64 160c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l67.8 0L266.7 471.9c9.4 8.4 22.9 10.4 34.4 5.3S320 460.6 320 448l0-384z\"]\n};\nconst faHandsAslInterpreting = {\n  prefix: 'fas',\n  iconName: 'hands-asl-interpreting',\n  icon: [640, 512, [\"american-sign-language-interpreting\", \"asl-interpreting\", \"hands-american-sign-language-interpreting\"], \"f2a3\", \"M156.6 46.3c7.9-15.8 1.5-35-14.3-42.9s-35-1.5-42.9 14.3L13.5 189.4C4.6 207.2 0 226.8 0 246.7L0 256c0 70.7 57.3 128 128 128l72 0 8 0 0-.3c35.2-2.7 65.4-22.8 82.1-51.7c8.8-15.3 3.6-34.9-11.7-43.7s-34.9-3.6-43.7 11.7c-7 12-19.9 20-34.7 20c-22.1 0-40-17.9-40-40s17.9-40 40-40c14.8 0 27.7 8 34.7 20c8.8 15.3 28.4 20.5 43.7 11.7s20.5-28.4 11.7-43.7c-12.8-22.1-33.6-39.1-58.4-47.1l80.8-22c17-4.6 27.1-22.2 22.5-39.3s-22.2-27.1-39.3-22.5L194.9 124.6l81.6-68c13.6-11.3 15.4-31.5 4.1-45.1S249.1-3.9 235.5 7.4L133.6 92.3l23-46zM483.4 465.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l85.9-171.7c8.9-17.8 13.5-37.4 13.5-57.2l0-9.3c0-70.7-57.3-128-128-128l-72 0-8 0 0 .3c-35.2 2.7-65.4 22.8-82.1 51.7c-8.9 15.3-3.6 34.9 11.7 43.7s34.9 3.6 43.7-11.7c7-12 19.9-20 34.7-20c22.1 0 40 17.9 40 40s-17.9 40-40 40c-14.8 0-27.7-8-34.7-20c-8.9-15.3-28.4-20.5-43.7-11.7s-20.5 28.4-11.7 43.7c12.8 22.1 33.6 39.1 58.4 47.1l-80.8 22c-17.1 4.7-27.1 22.2-22.5 39.3s22.2 27.1 39.3 22.5l100.7-27.5-81.6 68c-13.6 11.3-15.4 31.5-4.1 45.1s31.5 15.4 45.1 4.1l101.9-84.9-23 46z\"]\n};\nconst faAmericanSignLanguageInterpreting = faHandsAslInterpreting;\nconst faAslInterpreting = faHandsAslInterpreting;\nconst faHandsAmericanSignLanguageInterpreting = faHandsAslInterpreting;\nconst faGear = {\n  prefix: 'fas',\n  iconName: 'gear',\n  icon: [512, 512, [9881, \"cog\"], \"f013\", \"M495.9 166.6c3.2 8.7 .5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6c-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2c-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8c-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4L83.1 425.9c-8.8 2.8-18.6 .3-24.5-6.8c-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3c-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4C64.6 273.1 64 264.6 64 256s.6-17.1 1.7-25.4L22.4 191.2c-6.9-6.2-9.6-15.9-6.4-24.6c4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2c5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8c8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\"]\n};\nconst faCog = faGear;\nconst faDropletSlash = {\n  prefix: 'fas',\n  iconName: 'droplet-slash',\n  icon: [640, 512, [\"tint-slash\"], \"f5c7\", \"M320 512c53.2 0 101.4-21.6 136.1-56.6l-298.3-235C140 257.1 128 292.3 128 320c0 106 86 192 192 192zM505.2 370.7c4.4-16.2 6.8-33.1 6.8-50.7c0-91.2-130.2-262.3-166.6-308.3C339.4 4.2 330.5 0 320.9 0l-1.8 0c-9.6 0-18.5 4.2-24.5 11.7C277.8 33 240.7 81.3 205.8 136L38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L505.2 370.7zM224 336c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faTintSlash = faDropletSlash;\nconst faMosque = {\n  prefix: 'fas',\n  iconName: 'mosque',\n  icon: [640, 512, [128332], \"f678\", \"M400 0c5 0 9.8 2.4 12.8 6.4c34.7 46.3 78.1 74.9 133.5 111.5c0 0 0 0 0 0s0 0 0 0c5.2 3.4 10.5 7 16 10.6c28.9 19.2 45.7 51.7 45.7 86.1c0 28.6-11.3 54.5-29.8 73.4l-356.4 0c-18.4-19-29.8-44.9-29.8-73.4c0-34.4 16.7-66.9 45.7-86.1c5.4-3.6 10.8-7.1 16-10.6c0 0 0 0 0 0s0 0 0 0C309.1 81.3 352.5 52.7 387.2 6.4c3-4 7.8-6.4 12.8-6.4zM288 512l0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-48 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l416 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-48 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-64 0 0-58c0-19-8.4-37-23-49.2L400 384l-25 20.8C360.4 417 352 435 352 454l0 58-64 0zM70.4 5.2c5.7-4.3 13.5-4.3 19.2 0l16 12C139.8 42.9 160 83.2 160 126l0 2L0 128l0-2C0 83.2 20.2 42.9 54.4 17.2l16-12zM0 160l160 0 0 136.6c-19.1 11.1-32 31.7-32 55.4l0 128c0 9.6 2.1 18.6 5.8 26.8c-6.6 3.4-14 5.2-21.8 5.2l-64 0c-26.5 0-48-21.5-48-48L0 176l0-16z\"]\n};\nconst faMosquito = {\n  prefix: 'fas',\n  iconName: 'mosquito',\n  icon: [640, 512, [], \"e52b\", \"M463.7 505.9c9.8-8.9 10.7-24.3 2.1-34.3l-42.1-49 0-54.7c0-5.5-1.8-10.8-5.1-15.1L352 266.3l0-.3L485.4 387.8C542.4 447.6 640 405.2 640 320.6c0-47.9-34-88.3-79.4-94.2l-153-23.9 40.8-40.9c7.8-7.8 9.4-20.1 3.9-29.8L428.5 90.1l38.2-50.9c8-10.6 6.1-25.9-4.3-34.1s-25.2-6.3-33.2 4.4l-48 63.9c-5.9 7.9-6.6 18.6-1.7 27.2L402.2 140 352 190.3l0-38.2c0-14.9-10.2-27.4-24-31l0-57.2c0-4.4-3.6-8-8-8s-8 3.6-8 8l0 57.2c-13.8 3.6-24 16.1-24 31l0 38.1L237.8 140l22.6-39.5c4.9-8.6 4.2-19.3-1.7-27.2l-48-63.9c-8-10.6-22.8-12.6-33.2-4.4s-12.2 23.5-4.3 34.1l38.2 50.9-23.9 41.7c-5.5 9.7-3.9 22 3.9 29.8l40.8 40.9-153 23.9C34 232.3 0 272.7 0 320.6c0 84.6 97.6 127 154.6 67.1L288 266l0 .3-66.5 86.4c-3.3 4.3-5.1 9.6-5.1 15.1l0 54.7-42.1 49c-8.6 10.1-7.7 25.5 2.1 34.3s24.7 7.9 33.4-2.1l48-55.9c3.8-4.4 5.9-10.2 5.9-16.1l0-55.4L288 344.7l0 63.1c0 17.7 14.3 32 32 32s32-14.3 32-32l0-63.1 24.3 31.6 0 55.4c0 5.9 2.1 11.7 5.9 16.1l48 55.9c8.6 10.1 23.6 11 33.4 2.1z\"]\n};\nconst faStarOfDavid = {\n  prefix: 'fas',\n  iconName: 'star-of-david',\n  icon: [512, 512, [10017], \"f69a\", \"M404.2 309.5L383.1 344l42.3 0-21.1-34.5zM371.4 256l-54-88-122.8 0-54 88 54 88 122.8 0 54-88zm65.7 0l53.4 87c3.6 5.9 5.5 12.7 5.5 19.6c0 20.7-16.8 37.4-37.4 37.4l-109.8 0-56.2 91.5C284.8 504.3 270.9 512 256 512s-28.8-7.7-36.6-20.5L163.3 400 53.4 400C32.8 400 16 383.2 16 362.6c0-6.9 1.9-13.7 5.5-19.6l53.4-87L21.5 169c-3.6-5.9-5.5-12.7-5.5-19.6C16 128.8 32.8 112 53.4 112l109.8 0 56.2-91.5C227.2 7.7 241.1 0 256 0s28.8 7.7 36.6 20.5L348.7 112l109.8 0c20.7 0 37.4 16.8 37.4 37.4c0 6.9-1.9 13.7-5.5 19.6l-53.4 87zm-54-88l21.1 34.5L425.4 168l-42.3 0zM283 112L256 68l-27 44 54 0zM128.9 168l-42.3 0 21.1 34.5L128.9 168zM107.8 309.5L86.6 344l42.3 0-21.1-34.5zM229 400l27 44 27-44-54 0z\"]\n};\nconst faPersonMilitaryRifle = {\n  prefix: 'fas',\n  iconName: 'person-military-rifle',\n  icon: [512, 512, [], \"e54b\", \"M160 39c0-13 10-23.8 22.9-24.9L334.7 1.4C344 .7 352 8 352 17.4L352 48c0 8.8-7.2 16-16 16L185 64c-13.8 0-25-11.2-25-25zm17.6 57l156.8 0c1 5.2 1.6 10.5 1.6 16c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-5.5 .6-10.8 1.6-16zm228 364.3L352 369.7 352 480c0 1.3-.1 2.5-.2 3.8L177.5 234.9c16.6-7.1 34.6-10.9 53.3-10.9l50.4 0c15.9 0 31.3 2.8 45.8 7.9L421.9 67.7c-7.7-4.4-10.3-14.2-5.9-21.9s14.2-10.3 21.9-5.9l13.9 8 13.9 8c7.7 4.4 10.3 14.2 5.9 21.9L416 173.9l1.6 .9c15.3 8.8 20.6 28.4 11.7 43.7L392.6 282c2 2.8 3.9 5.8 5.7 8.8l76.1 128.8c11.2 19 4.9 43.5-14.1 54.8s-43.5 4.9-54.8-14.1zM320 512l-128 0c-17.7 0-32-14.3-32-32l0-110.3-53.6 90.6c-11.2 19-35.8 25.3-54.8 14.1s-25.3-35.8-14.1-54.8l76.1-128.8c9.4-15.8 21.7-29.3 36-40L331.1 510c-3.5 1.3-7.2 2-11.1 2zM296 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faCartShopping = {\n  prefix: 'fas',\n  iconName: 'cart-shopping',\n  icon: [576, 512, [128722, \"shopping-cart\"], \"f07a\", \"M0 24C0 10.7 10.7 0 24 0L69.5 0c22 0 41.5 12.8 50.6 32l411 0c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3l-288.5 0 5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5L488 336c13.3 0 24 10.7 24 24s-10.7 24-24 24l-288.3 0c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5L24 48C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faShoppingCart = faCartShopping;\nconst faVials = {\n  prefix: 'fas',\n  iconName: 'vials',\n  icon: [512, 512, [], \"f493\", \"M0 64C0 46.3 14.3 32 32 32l56 0 48 0 56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 304c0 44.2-35.8 80-80 80s-80-35.8-80-80L32 96C14.3 96 0 81.7 0 64zM136 96L88 96l0 160 48 0 0-160zM288 64c0-17.7 14.3-32 32-32l56 0 48 0 56 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 304c0 44.2-35.8 80-80 80s-80-35.8-80-80l0-304c-17.7 0-32-14.3-32-32zM424 96l-48 0 0 160 48 0 0-160z\"]\n};\nconst faPlugCirclePlus = {\n  prefix: 'fas',\n  iconName: 'plug-circle-plus',\n  icon: [576, 512, [], \"e55f\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208l0 48 48 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faPlaceOfWorship = {\n  prefix: 'fas',\n  iconName: 'place-of-worship',\n  icon: [640, 512, [], \"f67f\", \"M224 109.3l0 108.3L183.3 242c-14.5 8.7-23.3 24.3-23.3 41.2L160 512l96 0 0-96c0-35.3 28.7-64 64-64s64 28.7 64 64l0 96 96 0 0-228.8c0-16.9-8.8-32.5-23.3-41.2L416 217.6l0-108.3c0-8.5-3.4-16.6-9.4-22.6L331.3 11.3c-6.2-6.2-16.4-6.2-22.6 0L233.4 86.6c-6 6-9.4 14.1-9.4 22.6zM24.9 330.3C9.5 338.8 0 354.9 0 372.4L0 464c0 26.5 21.5 48 48 48l80 0 0-238.4L24.9 330.3zM592 512c26.5 0 48-21.5 48-48l0-91.6c0-17.5-9.5-33.6-24.9-42.1L512 273.6 512 512l80 0z\"]\n};\nconst faGripVertical = {\n  prefix: 'fas',\n  iconName: 'grip-vertical',\n  icon: [320, 512, [], \"f58e\", \"M40 352l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zm192 0l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zM40 320c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0zM232 192l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zM40 160c-22.1 0-40-17.9-40-40L0 72C0 49.9 17.9 32 40 32l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0zM232 32l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40z\"]\n};\nconst faHexagonNodes = {\n  prefix: 'fas',\n  iconName: 'hexagon-nodes',\n  icon: [448, 512, [], \"e699\", \"M248 106.6c18.9-9 32-28.3 32-50.6c0-30.9-25.1-56-56-56s-56 25.1-56 56c0 22.3 13.1 41.6 32 50.6l0 98.8c-2.8 1.3-5.5 2.9-8 4.7l-80.1-45.8c1.6-20.8-8.6-41.6-27.9-52.8C57.2 96 23 105.2 7.5 132S1.2 193 28 208.5c1.3 .8 2.6 1.5 4 2.1l0 90.8c-1.3 .6-2.7 1.3-4 2.1C1.2 319-8 353.2 7.5 380S57.2 416 84 400.5c19.3-11.1 29.4-32 27.8-52.8l50.5-28.9c-11.5-11.2-19.9-25.6-23.8-41.7L88 306.1c-2.6-1.8-5.2-3.3-8-4.7l0-90.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-.1 1.4-.2 2.8-.2 4.3c0 22.3 13.1 41.6 32 50.6l0 98.8c-18.9 9-32 28.3-32 50.6c0 30.9 25.1 56 56 56s56-25.1 56-56c0-22.3-13.1-41.6-32-50.6l0-98.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-1.6 20.8 8.6 41.6 27.8 52.8c26.8 15.5 61 6.3 76.5-20.5s6.3-61-20.5-76.5c-1.3-.8-2.7-1.5-4-2.1l0-90.8c1.4-.6 2.7-1.3 4-2.1c26.8-15.5 36-49.7 20.5-76.5S390.8 96 364 111.5c-19.3 11.1-29.4 32-27.8 52.8l-50.6 28.9c11.5 11.2 19.9 25.6 23.8 41.7L360 205.9c2.6 1.8 5.2 3.3 8 4.7l0 90.8c-2.8 1.3-5.5 2.9-8 4.6l-80.1-45.8c.1-1.4 .2-2.8 .2-4.3c0-22.3-13.1-41.6-32-50.6l0-98.8z\"]\n};\nconst faArrowTurnUp = {\n  prefix: 'fas',\n  iconName: 'arrow-turn-up',\n  icon: [384, 512, [\"level-up\"], \"f148\", \"M32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c53 0 96-43 96-96l0-306.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 416c0 17.7-14.3 32-32 32l-96 0z\"]\n};\nconst faLevelUp = faArrowTurnUp;\nconst faU = {\n  prefix: 'fas',\n  iconName: 'u',\n  icon: [384, 512, [117], \"55\", \"M32 32c17.7 0 32 14.3 32 32l0 224c0 70.7 57.3 128 128 128s128-57.3 128-128l0-224c0-17.7 14.3-32 32-32s32 14.3 32 32l0 224c0 106-86 192-192 192S0 394 0 288L0 64C0 46.3 14.3 32 32 32z\"]\n};\nconst faSquareRootVariable = {\n  prefix: 'fas',\n  iconName: 'square-root-variable',\n  icon: [576, 512, [\"square-root-alt\"], \"f698\", \"M282.6 78.1c8-27.3 33-46.1 61.4-46.1l200 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L344 96 238.7 457c-3.6 12.3-14.1 21.2-26.8 22.8s-25.1-4.6-31.5-15.6L77.6 288 32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l45.6 0c22.8 0 43.8 12.1 55.3 31.8l65.2 111.8L282.6 78.1zM393.4 233.4c12.5-12.5 32.8-12.5 45.3 0L480 274.7l41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L525.3 320l41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L480 365.3l-41.4 41.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 320l-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\"]\n};\nconst faSquareRootAlt = faSquareRootVariable;\nconst faClock = {\n  prefix: 'fas',\n  iconName: 'clock',\n  icon: [512, 512, [128339, \"clock-four\"], \"f017\", \"M256 0a256 256 0 1 1 0 512A256 256 0 1 1 256 0zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"]\n};\nconst faClockFour = faClock;\nconst faBackwardStep = {\n  prefix: 'fas',\n  iconName: 'backward-step',\n  icon: [320, 512, [\"step-backward\"], \"f048\", \"M267.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29l0-320c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160L64 241 64 96c0-17.7-14.3-32-32-32S0 78.3 0 96L0 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-145 11.5 9.6 192 160z\"]\n};\nconst faStepBackward = faBackwardStep;\nconst faPallet = {\n  prefix: 'fas',\n  iconName: 'pallet',\n  icon: [640, 512, [], \"f482\", \"M32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 64-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 224 0 224 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-64 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0-224 0L96 320l-64 0zm96 64l160 0 0 64-160 0 0-64zm224 0l160 0 0 64-160 0 0-64z\"]\n};\nconst faFaucet = {\n  prefix: 'fas',\n  iconName: 'faucet',\n  icon: [512, 512, [], \"e005\", \"M192 96l0 12L96 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l96-12 31-3.9 1-.1 1 .1 31 3.9 96 12c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 12 0-12c0-17.7-14.3-32-32-32s-32 14.3-32 32zM32 256c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l100.1 0c20.2 29 53.9 48 91.9 48s71.7-19 91.9-48l36.1 0c17.7 0 32 14.3 32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32c0-88.4-71.6-160-160-160l-32 0-22.6-22.6c-6-6-14.1-9.4-22.6-9.4L256 224l0-43.8-32-4-32 4 0 43.8-18.7 0c-8.5 0-16.6 3.4-22.6 9.4L128 256l-96 0z\"]\n};\nconst faBaseballBatBall = {\n  prefix: 'fas',\n  iconName: 'baseball-bat-ball',\n  icon: [512, 512, [], \"f432\", \"M424 0c-12.4 0-24.2 4.9-33 13.7L233.5 171.2c-10.5 10.5-19.8 22.1-27.7 34.6L132.7 321.6c-7.3 11.5-15.8 22.2-25.5 31.9L69.9 390.7l51.3 51.3 37.3-37.3c9.6-9.6 20.3-18.2 31.9-25.5l115.8-73.1c12.5-7.9 24.1-17.2 34.6-27.7L498.3 121c8.7-8.7 13.7-20.6 13.7-33s-4.9-24.2-13.7-33L457 13.7C448.2 4.9 436.4 0 424 0zm88 432a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM15 399c-9.4 9.4-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L49 399c-9.4-9.4-24.6-9.4-33.9 0z\"]\n};\nconst faS = {\n  prefix: 'fas',\n  iconName: 's',\n  icon: [320, 512, [115], \"53\", \"M99.1 105.4C79 114 68.2 127.2 65.2 144.8c-2.4 14.1-.7 23.2 2 29.4c2.8 6.3 7.9 12.4 16.7 18.6c19.2 13.4 48.3 22.1 84.9 32.5c1 .3 1.9 .6 2.9 .8c32.7 9.3 72 20.6 100.9 40.7c15.7 10.9 29.9 25.5 38.6 45.1c8.8 19.8 10.8 42 6.6 66.3c-7.3 42.5-35.3 71.7-71.8 87.3c-35.4 15.2-79.1 17.9-123.7 10.9l-.2 0s0 0 0 0c-24-3.9-62.7-17.1-87.6-25.6c-4.8-1.7-9.2-3.1-12.8-4.3C5.1 440.8-3.9 422.7 1.6 405.9s23.7-25.8 40.5-20.3c4.9 1.6 10.2 3.4 15.9 5.4c25.4 8.6 56.4 19.2 74.4 22.1c36.8 5.7 67.5 2.5 88.5-6.5c20.1-8.6 30.8-21.8 33.9-39.4c2.4-14.1 .7-23.2-2-29.4c-2.8-6.3-7.9-12.4-16.7-18.6c-19.2-13.4-48.3-22.1-84.9-32.5c-1-.3-1.9-.6-2.9-.8c-32.7-9.3-72-20.6-100.9-40.7c-15.7-10.9-29.9-25.5-38.6-45.1c-8.8-19.8-10.8-42-6.6-66.3l31.5 5.5L2.1 133.9C9.4 91.4 37.4 62.2 73.9 46.6c35.4-15.2 79.1-17.9 123.7-10.9c13 2 52.4 9.6 66.6 13.4c17.1 4.5 27.2 22.1 22.7 39.2s-22.1 27.2-39.2 22.7c-11.2-3-48.1-10.2-60.1-12l4.9-31.5-4.9 31.5c-36.9-5.8-67.5-2.5-88.6 6.5z\"]\n};\nconst faTimeline = {\n  prefix: 'fas',\n  iconName: 'timeline',\n  icon: [640, 512, [], \"e29c\", \"M128 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32 97.3c28.3-12.3 48-40.5 48-73.3c0-44.2-35.8-80-80-80S48 51.8 48 96c0 32.8 19.7 61 48 73.3L96 224l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0 0 54.7c-28.3 12.3-48 40.5-48 73.3c0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3l0-54.7 256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-54.7c28.3-12.3 48-40.5 48-73.3c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 32.8 19.7 61 48 73.3l0 54.7-320 0 0-54.7zM488 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM320 392a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faKeyboard = {\n  prefix: 'fas',\n  iconName: 'keyboard',\n  icon: [576, 512, [9000], \"f11c\", \"M64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64L64 64zm16 64l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80-176c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM160 336c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16l0-32zM272 128l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM256 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM368 128l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM352 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM464 128l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM448 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16z\"]\n};\nconst faCaretDown = {\n  prefix: 'fas',\n  iconName: 'caret-down',\n  icon: [320, 512, [], \"f0d7\", \"M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z\"]\n};\nconst faHouseChimneyMedical = {\n  prefix: 'fas',\n  iconName: 'house-chimney-medical',\n  icon: [576, 512, [\"clinic-medical\"], \"f7f2\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-320.4 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7 416 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 121 52.8 46.4c8 7 12 15 11 24zM272 192c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16l-32 0z\"]\n};\nconst faClinicMedical = faHouseChimneyMedical;\nconst faTemperatureThreeQuarters = {\n  prefix: 'fas',\n  iconName: 'temperature-three-quarters',\n  icon: [320, 512, [\"temperature-3\", \"thermometer-3\", \"thermometer-three-quarters\"], \"f2c8\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3L144 144c0-8.8 7.2-16 16-16s16 7.2 16 16l0 178.7c18.6 6.6 32 24.4 32 45.3z\"]\n};\nconst faTemperature3 = faTemperatureThreeQuarters;\nconst faThermometer3 = faTemperatureThreeQuarters;\nconst faThermometerThreeQuarters = faTemperatureThreeQuarters;\nconst faMobileScreen = {\n  prefix: 'fas',\n  iconName: 'mobile-screen',\n  icon: [384, 512, [\"mobile-android-alt\"], \"f3cf\", \"M16 64C16 28.7 44.7 0 80 0L304 0c35.3 0 64 28.7 64 64l0 384c0 35.3-28.7 64-64 64L80 512c-35.3 0-64-28.7-64-64L16 64zM144 448c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16zM304 64L80 64l0 320 224 0 0-320z\"]\n};\nconst faMobileAndroidAlt = faMobileScreen;\nconst faPlaneUp = {\n  prefix: 'fas',\n  iconName: 'plane-up',\n  icon: [512, 512, [], \"e22d\", \"M192 93.7C192 59.5 221 0 256 0c36 0 64 59.5 64 93.7l0 66.3L497.8 278.5c8.9 5.9 14.2 15.9 14.2 26.6l0 56.7c0 10.9-10.7 18.6-21.1 15.2L320 320l0 80 57.6 43.2c4 3 6.4 7.8 6.4 12.8l0 42c0 7.8-6.3 14-14 14c-1.3 0-2.6-.2-3.9-.5L256 480 145.9 511.5c-1.3 .4-2.6 .5-3.9 .5c-7.8 0-14-6.3-14-14l0-42c0-5 2.4-9.8 6.4-12.8L192 400l0-80L21.1 377C10.7 380.4 0 372.7 0 361.8l0-56.7c0-10.7 5.3-20.7 14.2-26.6L192 160l0-66.3z\"]\n};\nconst faPiggyBank = {\n  prefix: 'fas',\n  iconName: 'piggy-bank',\n  icon: [576, 512, [], \"f4d3\", \"M400 96l0 .7c-5.3-.4-10.6-.7-16-.7L256 96c-16.5 0-32.5 2.1-47.8 6c-.1-2-.2-4-.2-6c0-53 43-96 96-96s96 43 96 96zm-16 32c3.5 0 7 .1 10.4 .3c4.2 .3 8.4 .7 12.6 1.3C424.6 109.1 450.8 96 480 96l11.5 0c10.4 0 18 9.8 15.5 19.9l-13.8 55.2c15.8 14.8 28.7 32.8 37.5 52.9l13.3 0c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-32 0c-9.1 12.1-19.9 22.9-32 32l0 64c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-32-128 0 0 32c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-64c-34.9-26.2-58.7-66.3-63.2-112L68 304c-37.6 0-68-30.4-68-68s30.4-68 68-68l4 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-4 0c-11 0-20 9-20 20s9 20 20 20l31.2 0c12.1-59.8 57.7-107.5 116.3-122.8c12.9-3.4 26.5-5.2 40.5-5.2l128 0zm64 136a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nconst faBatteryHalf = {\n  prefix: 'fas',\n  iconName: 'battery-half',\n  icon: [576, 512, [\"battery-3\"], \"f242\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm208 96L96 192l0 128 192 0 0-128z\"]\n};\nconst faBattery3 = faBatteryHalf;\nconst faMountainCity = {\n  prefix: 'fas',\n  iconName: 'mountain-city',\n  icon: [640, 512, [], \"e52e\", \"M336 0c-26.5 0-48 21.5-48 48l0 92.1 71.4 118.4c2.5-1.6 5.4-2.5 8.6-2.5l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-3.5 0 73.8 122.4c12.4 20.6 12.9 46.3 1.2 67.3c-.4 .8-.9 1.6-1.4 2.3L592 512c26.5 0 48-21.5 48-48l0-224c0-26.5-21.5-48-48-48l-24 0 0-72c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 72-40 0 0-144c0-26.5-21.5-48-48-48L336 0zm32 64l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM352 176c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm160 96c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM224 188.9L283.8 288 223 288l-48 64-24.6-41.2L224 188.9zm29.4-44.2C247.1 134.3 236 128 224 128s-23.1 6.3-29.4 16.7L5.1 458.9c-6.5 10.8-6.7 24.3-.7 35.3S22 512 34.5 512l379.1 0c12.5 0 24-6.8 30.1-17.8s5.8-24.5-.7-35.3L253.4 144.7z\"]\n};\nconst faCoins = {\n  prefix: 'fas',\n  iconName: 'coins',\n  icon: [512, 512, [], \"f51e\", \"M512 80c0 18-14.3 34.6-38.4 48c-29.1 16.1-72.5 27.5-122.3 30.9c-3.7-1.8-7.4-3.5-11.3-5C300.6 137.4 248.2 128 192 128c-8.3 0-16.4 .2-24.5 .6l-1.1-.6C142.3 114.6 128 98 128 80c0-44.2 86-80 192-80S512 35.8 512 80zM160.7 161.1c10.2-.7 20.7-1.1 31.3-1.1c62.2 0 117.4 12.3 152.5 31.4C369.3 204.9 384 221.7 384 240c0 4-.7 7.9-2.1 11.7c-4.6 13.2-17 25.3-35 35.5c0 0 0 0 0 0c-.1 .1-.3 .1-.4 .2c0 0 0 0 0 0s0 0 0 0c-.3 .2-.6 .3-.9 .5c-35 19.4-90.8 32-153.6 32c-59.6 0-112.9-11.3-148.2-29.1c-1.9-.9-3.7-1.9-5.5-2.9C14.3 274.6 0 258 0 240c0-34.8 53.4-64.5 128-75.4c10.5-1.5 21.4-2.7 32.7-3.5zM416 240c0-21.9-10.6-39.9-24.1-53.4c28.3-4.4 54.2-11.4 76.2-20.5c16.3-6.8 31.5-15.2 43.9-25.5l0 35.4c0 19.3-16.5 37.1-43.8 50.9c-14.6 7.4-32.4 13.7-52.4 18.5c.1-1.8 .2-3.5 .2-5.3zm-32 96c0 18-14.3 34.6-38.4 48c-1.8 1-3.6 1.9-5.5 2.9C304.9 404.7 251.6 416 192 416c-62.8 0-118.6-12.6-153.6-32C14.3 370.6 0 354 0 336l0-35.4c12.5 10.3 27.6 18.7 43.9 25.5C83.4 342.6 135.8 352 192 352s108.6-9.4 148.1-25.9c7.8-3.2 15.3-6.9 22.4-10.9c6.1-3.4 11.8-7.2 17.2-11.2c1.5-1.1 2.9-2.3 4.3-3.4l0 3.4 0 5.7 0 26.3zm32 0l0-32 0-25.9c19-4.2 36.5-9.5 52.1-16c16.3-6.8 31.5-15.2 43.9-25.5l0 35.4c0 10.5-5 21-14.9 30.9c-16.3 16.3-45 29.7-81.3 38.4c.1-1.7 .2-3.5 .2-5.3zM192 448c56.2 0 108.6-9.4 148.1-25.9c16.3-6.8 31.5-15.2 43.9-25.5l0 35.4c0 44.2-86 80-192 80S0 476.2 0 432l0-35.4c12.5 10.3 27.6 18.7 43.9 25.5C83.4 438.6 135.8 448 192 448z\"]\n};\nconst faKhanda = {\n  prefix: 'fas',\n  iconName: 'khanda',\n  icon: [512, 512, [9772], \"f66d\", \"M245.8 3.7c5.9-4.9 14.6-4.9 20.5 0l48 40c5.9 4.9 7.5 13.2 3.8 19.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0s0 0 0 0l-.1 .1-.3 .6c-.3 .5-.7 1.3-1.2 2.3c-1 2-2.6 5-4.4 8.6c-.5 .9-.9 1.9-1.4 2.9C344.9 97.4 368 134 368 176s-23.1 78.6-57.3 97.8c.5 1 1 2 1.4 2.9c1.8 3.7 3.3 6.6 4.4 8.6c.5 1 .9 1.8 1.2 2.3l.3 .6 .1 .1s0 0 0 0s0 0 0 0c3.6 6.7 2 15-3.8 19.9L272 343.5l0 19.8 35.6-24.5 41.1-28.2c42.8-29.4 68.4-78 68.4-130c0-31.1-9.2-61.6-26.5-87.5l-2.8-4.2c-4-6-3.5-14 1.3-19.5s12.7-7 19.2-3.7L401.1 80c7.2-14.3 7.2-14.3 7.2-14.3s0 0 0 0s0 0 0 0l.1 0 .3 .2 1 .5c.8 .4 2 1.1 3.5 1.9c2.9 1.7 7 4.1 11.8 7.3c9.6 6.4 22.5 16.1 35.4 29c25.7 25.7 52.7 65.6 52.7 119.3c0 53.1-26.4 100.5-51.2 133.6c-12.6 16.7-25.1 30.3-34.5 39.7c-4.7 4.7-8.7 8.4-11.5 10.9c-1.4 1.3-2.5 2.2-3.3 2.9l-.9 .8-.3 .2-.1 .1c0 0 0 0 0 0s0 0 0 0L401.1 400l10.2 12.3c-5.1 4.3-12.4 4.9-18.2 1.6l-75.6-43-32.7 22.5 45.5 31.3c1.8-.4 3.7-.7 5.7-.7c13.3 0 24 10.7 24 24s-10.7 24-24 24c-12.2 0-22.3-9.1-23.8-21L272 423.4l0 28.9c9.6 5.5 16 15.9 16 27.7c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-11.8 6.4-22.2 16-27.7l0-28.1-40.3 27.7C197.8 463.3 187.9 472 176 472c-13.3 0-24-10.7-24-24s10.7-24 24-24c2.2 0 4.4 .3 6.5 .9l45.8-31.5-32.7-22.5-75.6 43c-5.8 3.3-13 2.7-18.2-1.6L112 400c-10.2 12.3-10.2 12.3-10.3 12.3s0 0 0 0s0 0 0 0l-.1-.1-.3-.2-.9-.8c-.8-.7-1.9-1.7-3.3-2.9c-2.8-2.5-6.7-6.2-11.5-10.9c-9.4-9.4-21.9-23-34.5-39.7C26.4 324.5 0 277.1 0 224c0-53.7 26.9-93.6 52.7-119.3c12.9-12.9 25.8-22.6 35.4-29C93 72.5 97 70 99.9 68.4c1.5-.8 2.6-1.5 3.5-1.9l1-.5 .3-.2 .1 0c0 0 0 0 0 0s0 0 0 0L112 80l-7.2-14.3c6.5-3.2 14.3-1.7 19.2 3.7s5.3 13.4 1.3 19.5l-2.8 4.2C105.2 119 96 149.5 96 180.6c0 51.9 25.6 100.6 68.4 130l41.1 28.2L240 362.6l0-19.1-42.2-35.2c-5.9-4.9-7.5-13.2-3.8-19.9c0 0 0 0 0 0s0 0 0 0s0 0 0 0l.1-.1 .3-.6c.3-.5 .7-1.3 1.2-2.3c1-2 2.6-5 4.4-8.6c.5-.9 .9-1.9 1.4-2.9C167.1 254.6 144 218 144 176s23.1-78.6 57.3-97.8c-.5-1-1-2-1.4-2.9c-1.8-3.7-3.3-6.6-4.4-8.6c-.5-1-.9-1.8-1.2-2.3l-.3-.6-.1-.1s0 0 0 0s0 0 0 0s0 0 0 0c-3.6-6.7-2-15 3.8-19.9l48-40zM220.2 122.9c-17 11.5-28.2 31-28.2 53.1s11.2 41.6 28.2 53.1C227 210.2 232 190.9 232 176s-5-34.2-11.8-53.1zm71.5 106.2c17-11.5 28.2-31 28.2-53.1s-11.2-41.6-28.2-53.1C285 141.8 280 161.1 280 176s5 34.2 11.8 53.1z\"]\n};\nconst faSliders = {\n  prefix: 'fas',\n  iconName: 'sliders',\n  icon: [512, 512, [\"sliders-h\"], \"f1de\", \"M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z\"]\n};\nconst faSlidersH = faSliders;\nconst faFolderTree = {\n  prefix: 'fas',\n  iconName: 'folder-tree',\n  icon: [576, 512, [], \"f802\", \"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32l0 96L0 384c0 35.3 28.7 64 64 64l192 0 0-64L64 384l0-224 192 0 0-64L64 96l0-64zM288 192c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l-98.7 0c-8.5 0-16.6-3.4-22.6-9.4L409.4 9.4c-6-6-14.1-9.4-22.6-9.4L320 0c-17.7 0-32 14.3-32 32l0 160zm0 288c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l-98.7 0c-8.5 0-16.6-3.4-22.6-9.4l-13.3-13.3c-6-6-14.1-9.4-22.6-9.4L320 288c-17.7 0-32 14.3-32 32l0 160z\"]\n};\nconst faNetworkWired = {\n  prefix: 'fas',\n  iconName: 'network-wired',\n  icon: [640, 512, [], \"f6ff\", \"M256 64l128 0 0 64-128 0 0-64zM240 0c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48l48 0 0 32L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0 0 32-48 0c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48l160 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0-32 256 0 0 32-48 0c-26.5 0-48 21.5-48 48l0 96c0 26.5 21.5 48 48 48l160 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0-32 96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-256 0 0-32 48 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48L240 0zM96 448l0-64 128 0 0 64L96 448zm320-64l128 0 0 64-128 0 0-64z\"]\n};\nconst faMapPin = {\n  prefix: 'fas',\n  iconName: 'map-pin',\n  icon: [320, 512, [128205], \"f276\", \"M16 144a144 144 0 1 1 288 0A144 144 0 1 1 16 144zM160 80c8.8 0 16-7.2 16-16s-7.2-16-16-16c-53 0-96 43-96 96c0 8.8 7.2 16 16 16s16-7.2 16-16c0-35.3 28.7-64 64-64zM128 480l0-162.9c10.4 1.9 21.1 2.9 32 2.9s21.6-1 32-2.9L192 480c0 17.7-14.3 32-32 32s-32-14.3-32-32z\"]\n};\nconst faHamsa = {\n  prefix: 'fas',\n  iconName: 'hamsa',\n  icon: [512, 512, [], \"f665\", \"M34.6 288L80 288c8.8 0 16-7.2 16-16L96 72c0-22.1 17.9-40 40-40s40 17.9 40 40l0 132c0 11 9 20 20 20s20-9 20-20l0-164c0-22.1 17.9-40 40-40s40 17.9 40 40l0 164c0 11 9 20 20 20s20-9 20-20l0-132c0-22.1 17.9-40 40-40s40 17.9 40 40l0 200c0 8.8 7.2 16 16 16l45.4 0c19.1 0 34.6 15.5 34.6 34.6c0 8.6-3.2 16.9-9 23.3L416.6 441c-41.1 45.2-99.4 71-160.6 71s-119.4-25.8-160.6-71L9 345.9c-5.8-6.4-9-14.7-9-23.3C0 303.5 15.5 288 34.6 288zM256 288c-38.4 0-76.8 35.8-90.6 50.2c-3.6 3.7-5.4 8.7-5.4 13.8s1.8 10.1 5.4 13.8C179.2 380.2 217.6 416 256 416s76.8-35.8 90.6-50.2c3.6-3.7 5.4-8.7 5.4-13.8s-1.8-10.1-5.4-13.8C332.8 323.8 294.4 288 256 288zm0 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faCentSign = {\n  prefix: 'fas',\n  iconName: 'cent-sign',\n  icon: [384, 512, [], \"e3f5\", \"M224 0c17.7 0 32 14.3 32 32l0 34.7c30.9 5.2 59.2 17.7 83.2 35.8c14.1 10.6 17 30.7 6.4 44.8s-30.7 17-44.8 6.4C279.4 137.5 252.9 128 224 128c-70.7 0-128 57.3-128 128s57.3 128 128 128c28.9 0 55.4-9.5 76.8-25.6c14.1-10.6 34.2-7.8 44.8 6.4s7.8 34.2-6.4 44.8c-24 18-52.4 30.6-83.2 35.8l0 34.7c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.7C101.2 430.1 32 351.1 32 256s69.2-174.1 160-189.3L192 32c0-17.7 14.3-32 32-32z\"]\n};\nconst faFlask = {\n  prefix: 'fas',\n  iconName: 'flask',\n  icon: [448, 512, [], \"f0c3\", \"M288 0L160 0 128 0C110.3 0 96 14.3 96 32s14.3 32 32 32l0 132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6C0 480.9 31.1 512 69.4 512l309.2 0c38.3 0 69.4-31.1 69.4-69.4c0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5L320 64c17.7 0 32-14.3 32-32s-14.3-32-32-32L288 0zM192 196.8L192 64l64 0 0 132.8c0 23.7 6.6 46.9 19 67.1L309.5 320l-171 0L173 263.9c12.4-20.2 19-43.4 19-67.1z\"]\n};\nconst faPersonPregnant = {\n  prefix: 'fas',\n  iconName: 'person-pregnant',\n  icon: [384, 512, [], \"e31e\", \"M192 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM120 383c-13.8-3.6-24-16.1-24-31l0-55.1-4.6 7.6c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c15-24.9 40.3-41.5 68.7-45.6c4.1-.6 8.2-1 12.5-1l1.1 0 12.5 0 2.4 0c1.4 0 2.8 .1 4.1 .3c35.7 2.9 65.4 29.3 72.1 65l6.1 32.5c44.3 8.6 77.7 47.5 77.7 94.3l0 32c0 17.7-14.3 32-32 32l-16 0-40 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-8 0-8 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-97z\"]\n};\nconst faWandSparkles = {\n  prefix: 'fas',\n  iconName: 'wand-sparkles',\n  icon: [512, 512, [], \"f72b\", \"M464 6.1c9.5-8.5 24-8.1 33 .9l8 8c9 9 9.4 23.5 .9 33l-85.8 95.9c-2.6 2.9-4.1 6.7-4.1 10.7l0 21.4c0 8.8-7.2 16-16 16l-15.8 0c-4.6 0-8.9 1.9-11.9 5.3L100.7 500.9C94.3 508 85.3 512 75.8 512c-8.8 0-17.3-3.5-23.5-9.8L9.7 459.7C3.5 453.4 0 445 0 436.2c0-9.5 4-18.5 11.1-24.8l111.6-99.8c3.4-3 5.3-7.4 5.3-11.9l0-27.6c0-8.8 7.2-16 16-16l34.6 0c3.9 0 7.7-1.5 10.7-4.1L464 6.1zM432 288c3.6 0 6.7 2.4 7.7 5.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8-14.8 51.7c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8l-14.8-51.7-51.7-14.8c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8 14.8-51.7c1-3.4 4.1-5.8 7.7-5.8zM87.7 69.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8L87.7 218.2c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8L57.5 166.5 5.8 151.7c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8L72.3 69.8c1-3.4 4.1-5.8 7.7-5.8s6.7 2.4 7.7 5.8zM208 0c3.7 0 6.9 2.5 7.8 6.1l6.8 27.3 27.3 6.8c3.6 .9 6.1 4.1 6.1 7.8s-2.5 6.9-6.1 7.8l-27.3 6.8-6.8 27.3c-.9 3.6-4.1 6.1-7.8 6.1s-6.9-2.5-7.8-6.1l-6.8-27.3-27.3-6.8c-3.6-.9-6.1-4.1-6.1-7.8s2.5-6.9 6.1-7.8l27.3-6.8 6.8-27.3c.9-3.6 4.1-6.1 7.8-6.1z\"]\n};\nconst faEllipsisVertical = {\n  prefix: 'fas',\n  iconName: 'ellipsis-vertical',\n  icon: [128, 512, [\"ellipsis-v\"], \"f142\", \"M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z\"]\n};\nconst faEllipsisV = faEllipsisVertical;\nconst faTicket = {\n  prefix: 'fas',\n  iconName: 'ticket',\n  icon: [576, 512, [127903], \"f145\", \"M64 64C28.7 64 0 92.7 0 128l0 64c0 8.8 7.4 15.7 15.7 18.6C34.5 217.1 48 235 48 256s-13.5 38.9-32.3 45.4C7.4 304.3 0 311.2 0 320l0 64c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-64c0-8.8-7.4-15.7-15.7-18.6C541.5 294.9 528 277 528 256s13.5-38.9 32.3-45.4c8.3-2.9 15.7-9.8 15.7-18.6l0-64c0-35.3-28.7-64-64-64L64 64zm64 112l0 160c0 8.8 7.2 16 16 16l288 0c8.8 0 16-7.2 16-16l0-160c0-8.8-7.2-16-16-16l-288 0c-8.8 0-16 7.2-16 16zM96 160c0-17.7 14.3-32 32-32l320 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-320 0c-17.7 0-32-14.3-32-32l0-192z\"]\n};\nconst faPowerOff = {\n  prefix: 'fas',\n  iconName: 'power-off',\n  icon: [512, 512, [9211], \"f011\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 224c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224zM143.5 120.6c13.6-11.3 15.4-31.5 4.1-45.1s-31.5-15.4-45.1-4.1C49.7 115.4 16 181.8 16 256c0 132.5 107.5 240 240 240s240-107.5 240-240c0-74.2-33.8-140.6-86.6-184.6c-13.6-11.3-33.8-9.4-45.1 4.1s-9.4 33.8 4.1 45.1c38.9 32.3 63.5 81 63.5 135.4c0 97.2-78.8 176-176 176s-176-78.8-176-176c0-54.4 24.7-103.1 63.5-135.4z\"]\n};\nconst faRightLong = {\n  prefix: 'fas',\n  iconName: 'right-long',\n  icon: [512, 512, [\"long-arrow-alt-right\"], \"f30b\", \"M334.5 414c8.8 3.8 19 2 26-4.6l144-136c4.8-4.5 7.5-10.8 7.5-17.4s-2.7-12.9-7.5-17.4l-144-136c-7-6.6-17.2-8.4-26-4.6s-14.5 12.5-14.5 22l0 72L32 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l288 0 0 72c0 9.6 5.7 18.2 14.5 22z\"]\n};\nconst faLongArrowAltRight = faRightLong;\nconst faFlagUsa = {\n  prefix: 'fas',\n  iconName: 'flag-usa',\n  icon: [448, 512, [], \"f74d\", \"M32 0C49.7 0 64 14.3 64 32l0 16 69-17.2c38.1-9.5 78.3-5.1 113.5 12.5c46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1l0 36.1-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-20.3-9-41.8-14.7-63.6-16.9l0 32.2c17.4 2.1 34.4 6.7 50.6 13.9l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 136.3l0 62-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3L64 203.1l0 32.7 70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 232.3l0 62-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3L64 299.1l0 32.7 70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 328.3l0 33.5c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4c-37.9-19-81.3-23.7-122.5-13.4L64 400l0 80c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64 0-70.5 0-32.7 0-63.3 0-32.7 0-63.3 0-32.7L0 64 0 32C0 14.3 14.3 0 32 0zm80 96A16 16 0 1 0 80 96a16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-32 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faLaptopFile = {\n  prefix: 'fas',\n  iconName: 'laptop-file',\n  icon: [640, 512, [], \"e51d\", \"M128 0C92.7 0 64 28.7 64 64l0 224-44.8 0C8.6 288 0 296.6 0 307.2C0 349.6 34.4 384 76.8 384L320 384l0-96-192 0 0-224 320 0 0 32 64 0 0-32c0-35.3-28.7-64-64-64L128 0zM512 128l-112 0c-26.5 0-48 21.5-48 48l0 288c0 26.5 21.5 48 48 48l192 0c26.5 0 48-21.5 48-48l0-208-96 0c-17.7 0-32-14.3-32-32l0-96zm32 0l0 96 96 0-96-96z\"]\n};\nconst faTty = {\n  prefix: 'fas',\n  iconName: 'tty',\n  icon: [512, 512, [\"teletype\"], \"f1e4\", \"M38.3 241.3L15.1 200.6c-9.2-16.2-8.4-36.5 4.5-50C61.4 106.8 144.7 48 256 48s194.6 58.8 236.4 102.6c12.9 13.5 13.7 33.8 4.5 50l-23.1 40.7c-7.5 13.2-23.3 19.3-37.8 14.6l-81.1-26.6c-13.1-4.3-22-16.6-22-30.4l0-54.8c-49.6-18.1-104-18.1-153.6 0l0 54.8c0 13.8-8.9 26.1-22 30.4L76.1 255.8c-14.5 4.7-30.3-1.4-37.8-14.6zM32 336c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm0 96c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM144 320l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm16 80l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM128 432c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16l0-32z\"]\n};\nconst faTeletype = faTty;\nconst faDiagramNext = {\n  prefix: 'fas',\n  iconName: 'diagram-next',\n  icon: [512, 512, [], \"e476\", \"M512 160c0 35.3-28.7 64-64 64l-168 0 0 64 46.1 0c21.4 0 32.1 25.9 17 41L273 399c-9.4 9.4-24.6 9.4-33.9 0L169 329c-15.1-15.1-4.4-41 17-41l46.1 0 0-64L64 224c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 64zM448 416l0-64-82.7 0 .4-.4c18.4-18.4 20.4-43.7 11-63.6l71.3 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l71.3 0c-9.4 19.9-7.4 45.2 11 63.6l.4 .4L64 352l0 64 146.7 0 5.7 5.7c21.9 21.9 57.3 21.9 79.2 0l5.7-5.7L448 416z\"]\n};\nconst faPersonRifle = {\n  prefix: 'fas',\n  iconName: 'person-rifle',\n  icon: [576, 512, [], \"e54e\", \"M265.2 192c25.4 0 49.8 7.1 70.8 19.9L336 512l-192 0 0-174.3L90.4 428.3c-11.2 19-35.8 25.3-54.8 14.1s-25.3-35.8-14.1-54.8L97.7 258.8c24.5-41.4 69-66.8 117.1-66.8l50.4 0zM160 80a80 80 0 1 1 160 0A80 80 0 1 1 160 80zM448 0c8.8 0 16 7.2 16 16l0 116.3c9.6 5.5 16 15.9 16 27.7l0 109.3 16-5.3 0-56c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16l0 84.5c0 6.9-4.4 13-10.9 15.2L480 325.3l0 26.7 48 0c8.8 0 16 7.2 16 16l0 16c0 8.8-7.2 16-16 16l-44 0 23 92.1c2.5 10.1-5.1 19.9-15.5 19.9L432 512c-8.8 0-16-7.2-16-16l0-96-16 0c-17.7 0-32-14.3-32-32l0-144c0-17.7 14.3-32 32-32l0-32c0-11.8 6.4-22.2 16-27.7L416 32c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 16 0z\"]\n};\nconst faHouseMedicalCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'house-medical-circle-exclamation',\n  icon: [640, 512, [], \"e512\", \"M320 368c0 59.5 29.5 112.1 74.8 144l-266.7 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64L320 256l0-48c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nconst faClosedCaptioning = {\n  prefix: 'fas',\n  iconName: 'closed-captioning',\n  icon: [576, 512, [], \"f20a\", \"M0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM200 208c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48s21.5-48 48-48zm144 48c0-26.5 21.5-48 48-48c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48z\"]\n};\nconst faPersonHiking = {\n  prefix: 'fas',\n  iconName: 'person-hiking',\n  icon: [384, 512, [\"hiking\"], \"f6ec\", \"M192 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm51.3 182.7L224.2 307l49.7 49.7c9 9 14.1 21.2 14.1 33.9l0 89.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-82.7-73.9-73.9c-15.8-15.8-22.2-38.6-16.9-60.3l20.4-84c8.3-34.1 42.7-54.9 76.7-46.4c19 4.8 35.6 16.4 46.4 32.7L305.1 208l30.9 0 0-24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 55.8c0 .1 0 .2 0 .2s0 .2 0 .2L384 488c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-216-39.4 0c-16 0-31-8-39.9-21.4l-13.3-20zM81.1 471.9L117.3 334c3 4.2 6.4 8.2 10.1 11.9l41.9 41.9L142.9 488.1c-4.5 17.1-22 27.3-39.1 22.8s-27.3-22-22.8-39.1zm55.5-346L101.4 266.5c-3 12.1-14.9 19.9-27.2 17.9l-47.9-8c-14-2.3-22.9-16.3-19.2-30L31.9 155c9.5-34.8 41.1-59 77.2-59l4.2 0c15.6 0 27.1 14.7 23.3 29.8z\"]\n};\nconst faHiking = faPersonHiking;\nconst faVenusDouble = {\n  prefix: 'fas',\n  iconName: 'venus-double',\n  icon: [640, 512, [9890], \"f226\", \"M192 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM368 176c0 86.3-62.1 158.1-144 173.1l0 34.9 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-34.9C78.1 334.1 16 262.3 16 176C16 78.8 94.8 0 192 0s176 78.8 176 176zM344 318c14.6-15.6 26.8-33.4 36-53c18.8 14.4 42.4 23 68 23c61.9 0 112-50.1 112-112s-50.1-112-112-112c-25.6 0-49.1 8.6-68 23c-9.3-19.5-21.5-37.4-36-53C373.1 12.6 409.1 0 448 0c97.2 0 176 78.8 176 176c0 86.3-62.1 158.1-144 173.1l0 34.9 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0 0-34.9c-26.6-4.9-51.1-15.7-72-31.1z\"]\n};\nconst faImages = {\n  prefix: 'fas',\n  iconName: 'images',\n  icon: [576, 512, [], \"f302\", \"M160 32c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64l352 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L160 32zM396 138.7l96 144c4.9 7.4 5.4 16.8 1.2 24.6S480.9 320 472 320l-144 0-48 0-80 0c-9.2 0-17.6-5.3-21.6-13.6s-2.9-18.2 2.9-25.4l64-80c4.6-5.7 11.4-9 18.7-9s14.2 3.3 18.7 9l17.3 21.6 56-84C360.5 132 368 128 376 128s15.5 4 20 10.7zM192 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120L0 344c0 75.1 60.9 136 136 136l320 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-320 0c-48.6 0-88-39.4-88-88l0-224z\"]\n};\nconst faCalculator = {\n  prefix: 'fas',\n  iconName: 'calculator',\n  icon: [384, 512, [128425], \"f1ec\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM96 64l192 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L96 160c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32zm32 160a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM96 352a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM64 416c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32zM192 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm32 64a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm64-64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm32 64a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM288 448a32 32 0 1 1 0-64 32 32 0 1 1 0 64z\"]\n};\nconst faPeoplePulling = {\n  prefix: 'fas',\n  iconName: 'people-pulling',\n  icon: [576, 512, [], \"e535\", \"M80 96A48 48 0 1 0 80 0a48 48 0 1 0 0 96zM64 128c-35.3 0-64 28.7-64 64L0 320c0 17.7 14.3 32 32 32c9.8 0 18.5-4.4 24.4-11.2L80.4 485.3c2.9 17.4 19.4 29.2 36.8 26.3s29.2-19.4 26.3-36.8L123.1 352l15.7 0 30 134.9c3.8 17.3 20.9 28.1 38.2 24.3s28.1-20.9 24.3-38.2l-57.3-258 116.3 53.8c.5 .3 1.1 .5 1.6 .7c8.6 3.6 18 3.1 25.9-.7c3.4-1.6 6.6-3.9 9.3-6.7c3.1-3.2 5.5-7 7.1-11.4c.1-.3 .2-.7 .3-1l2.5-7.5c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L537 232.7l-15.3-36.8C504.5 154.8 464.3 128 419.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-24.4 10.9-44.6 29-58.1 51.6L157.3 136.9C144.7 131 130.9 128 117 128l-53 0zM464 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM349.7 335.6l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L372.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6z\"]\n};\nconst faN = {\n  prefix: 'fas',\n  iconName: 'n',\n  icon: [384, 512, [110], \"4e\", \"M21.1 33.9c12.7-4.6 26.9-.7 35.5 9.6L320 359.6 320 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 384c0 13.5-8.4 25.5-21.1 30.1s-26.9 .7-35.5-9.6L64 152.4 64 448c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 64C0 50.5 8.4 38.5 21.1 33.9z\"]\n};\nconst faCableCar = {\n  prefix: 'fas',\n  iconName: 'cable-car',\n  icon: [512, 512, [128673, 57551, \"tram\"], \"f7da\", \"M288 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM160 56a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM32 288c0-35.3 28.7-64 64-64l136 0 0-66.5-203.1 42c-13 2.7-25.7-5.7-28.4-18.6s5.7-25.7 18.6-28.4l232-48 232-48c13-2.7 25.7 5.7 28.4 18.6s-5.7 25.7-18.6 28.4L280 147.5l0 76.5 136 0c35.3 0 64 28.7 64 64l0 160c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-160zm64 0c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-64 0zm112 16l0 64c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-64 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-64 0z\"]\n};\nconst faTram = faCableCar;\nconst faCloudRain = {\n  prefix: 'fas',\n  iconName: 'cloud-rain',\n  icon: [512, 512, [127783, 9926], \"f73d\", \"M96 320c-53 0-96-43-96-96c0-42.5 27.6-78.6 65.9-91.2C64.7 126.1 64 119.1 64 112C64 50.1 114.1 0 176 0c43.1 0 80.5 24.3 99.2 60c14.7-17.1 36.5-28 60.8-28c44.2 0 80 35.8 80 80c0 5.5-.6 10.8-1.6 16c.5 0 1.1 0 1.6 0c53 0 96 43 96 96s-43 96-96 96L96 320zm-6.8 52c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3l0 3c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-3c0-8.5 2.1-16.9 6.2-24.3L89.2 372zm160 0c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3l0 3c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-3c0-8.5 2.1-16.9 6.2-24.3L249.2 372zm124.9 64.6L409.2 372c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3l0 3c0 26.5-21.5 48-48 48s-48-21.5-48-48l0-3c0-8.5 2.1-16.9 6.2-24.3z\"]\n};\nconst faBuildingCircleXmark = {\n  prefix: 'fas',\n  iconName: 'building-circle-xmark',\n  icon: [640, 512, [], \"e4d4\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8L384 48c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faShip = {\n  prefix: 'fas',\n  iconName: 'ship',\n  icon: [576, 512, [128674], \"f21a\", \"M192 32c0-17.7 14.3-32 32-32L352 0c17.7 0 32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 128 44.4 14.8c23.1 7.7 29.5 37.5 11.5 53.9l-101 92.6c-16.2 9.4-34.7 15.1-50.9 15.1c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-16.2 0-34.7-5.7-50.9-15.1l-101-92.6c-18-16.5-11.6-46.2 11.5-53.9L96 240l0-128c0-26.5 21.5-48 48-48l48 0 0-32zM160 218.7l107.8-35.9c13.1-4.4 27.3-4.4 40.5 0L416 218.7l0-90.7-256 0 0 90.7zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faArrowsDownToLine = {\n  prefix: 'fas',\n  iconName: 'arrows-down-to-line',\n  icon: [576, 512, [], \"e4b8\", \"M544 416L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zm22.6-137.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L480 274.7 480 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7-41.4-41.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96zm-320-45.3c-12.5-12.5-32.8-12.5-45.3 0L160 274.7 160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7L54.6 233.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3z\"]\n};\nconst faDownload = {\n  prefix: 'fas',\n  iconName: 'download',\n  icon: [512, 512, [], \"f019\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 242.7-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7 288 32zM64 352c-35.3 0-64 28.7-64 64l0 32c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-32c0-35.3-28.7-64-64-64l-101.5 0-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352 64 352zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faFaceGrin = {\n  prefix: 'fas',\n  iconName: 'face-grin',\n  icon: [512, 512, [128512, \"grin\"], \"f580\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faGrin = faFaceGrin;\nconst faDeleteLeft = {\n  prefix: 'fas',\n  iconName: 'delete-left',\n  icon: [576, 512, [9003, \"backspace\"], \"f55a\", \"M576 128c0-35.3-28.7-64-64-64L205.3 64c-17 0-33.3 6.7-45.3 18.7L9.4 233.4c-6 6-9.4 14.1-9.4 22.6s3.4 16.6 9.4 22.6L160 429.3c12 12 28.3 18.7 45.3 18.7L512 448c35.3 0 64-28.7 64-64l0-256zM271 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faBackspace = faDeleteLeft;\nconst faEyeDropper = {\n  prefix: 'fas',\n  iconName: 'eye-dropper',\n  icon: [512, 512, [\"eye-dropper-empty\", \"eyedropper\"], \"f1fb\", \"M341.6 29.2L240.1 130.8l-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4L482.8 170.4c39-39 39-102.2 0-141.1s-102.2-39-141.1 0zM55.4 323.3c-15 15-23.4 35.4-23.4 56.6l0 42.4L5.4 462.2c-8.5 12.7-6.8 29.6 4 40.4s27.7 12.5 40.4 4L89.7 480l42.4 0c21.2 0 41.6-8.4 56.6-23.4L309.4 335.9l-45.3-45.3L143.4 411.3c-3 3-7.1 4.7-11.3 4.7L96 416l0-36.1c0-4.2 1.7-8.3 4.7-11.3L221.4 247.9l-45.3-45.3L55.4 323.3z\"]\n};\nconst faEyeDropperEmpty = faEyeDropper;\nconst faEyedropper = faEyeDropper;\nconst faFileCircleCheck = {\n  prefix: 'fas',\n  iconName: 'file-circle-check',\n  icon: [576, 512, [], \"e5a0\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faForward = {\n  prefix: 'fas',\n  iconName: 'forward',\n  icon: [512, 512, [9193], \"f04e\", \"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416L0 96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4L224 214.3l0 41.7 0 41.7L52.5 440.6zM256 352l0-96 0-128 0-32c0-12.4 7.2-23.7 18.4-29s24.5-3.6 34.1 4.4l192 160c7.3 6.1 11.5 15.1 11.5 24.6s-4.2 18.5-11.5 24.6l-192 160c-9.5 7.9-22.8 9.7-34.1 4.4s-18.4-16.6-18.4-29l0-64z\"]\n};\nconst faMobile = {\n  prefix: 'fas',\n  iconName: 'mobile',\n  icon: [384, 512, [128241, \"mobile-android\", \"mobile-phone\"], \"f3ce\", \"M80 0C44.7 0 16 28.7 16 64l0 384c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L80 0zm80 432l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faMobileAndroid = faMobile;\nconst faMobilePhone = faMobile;\nconst faFaceMeh = {\n  prefix: 'fas',\n  iconName: 'face-meh',\n  icon: [512, 512, [128528, \"meh\"], \"f11a\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM160 336l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faMeh = faFaceMeh;\nconst faAlignCenter = {\n  prefix: 'fas',\n  iconName: 'align-center',\n  icon: [448, 512, [], \"f037\", \"M352 64c0-17.7-14.3-32-32-32L128 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32zm96 128c0-17.7-14.3-32-32-32L32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32zM0 448c0 17.7 14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416c-17.7 0-32 14.3-32 32zM352 320c0-17.7-14.3-32-32-32l-192 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32z\"]\n};\nconst faBookSkull = {\n  prefix: 'fas',\n  iconName: 'book-skull',\n  icon: [448, 512, [\"book-dead\"], \"f6b7\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zM320 112c0-35.3-35.8-64-80-64s-80 28.7-80 64c0 20.9 12.6 39.5 32 51.2l0 12.8c0 8.8 7.2 16 16 16l64 0c8.8 0 16-7.2 16-16l0-12.8c19.4-11.7 32-30.3 32-51.2zM208 96a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM134.3 209.3c-8.1-3.5-17.5 .3-21 8.4s.3 17.5 8.4 21L199.4 272l-77.7 33.3c-8.1 3.5-11.9 12.9-8.4 21s12.9 11.9 21 8.4L240 289.4l105.7 45.3c8.1 3.5 17.5-.3 21-8.4s-.3-17.5-8.4-21L280.6 272l77.7-33.3c8.1-3.5 11.9-12.9 8.4-21s-12.9-11.9-21-8.4L240 254.6 134.3 209.3z\"]\n};\nconst faBookDead = faBookSkull;\nconst faIdCard = {\n  prefix: 'fas',\n  iconName: 'id-card',\n  icon: [576, 512, [62147, \"drivers-license\"], \"f2c2\", \"M0 96l576 0c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96zm0 32L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-288L0 128zM64 405.3c0-29.5 23.9-53.3 53.3-53.3l117.3 0c29.5 0 53.3 23.9 53.3 53.3c0 5.9-4.8 10.7-10.7 10.7L74.7 416c-5.9 0-10.7-4.8-10.7-10.7zM176 192a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm176 16c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faDriversLicense = faIdCard;\nconst faOutdent = {\n  prefix: 'fas',\n  iconName: 'outdent',\n  icon: [448, 512, [\"dedent\"], \"f03b\", \"M0 64C0 46.3 14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32zM.2 268.6c-8.2-6.4-8.2-18.9 0-25.3l101.9-79.3c10.5-8.2 25.8-.7 25.8 12.6l0 158.6c0 13.3-15.3 20.8-25.8 12.6L.2 268.6z\"]\n};\nconst faDedent = faOutdent;\nconst faHeartCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'heart-circle-exclamation',\n  icon: [576, 512, [], \"e4fe\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faHouse = {\n  prefix: 'fas',\n  iconName: 'house',\n  icon: [576, 512, [127968, 63498, 63500, \"home\", \"home-alt\", \"home-lg-alt\"], \"f015\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c0 2.7-.2 5.4-.5 8.1l0 16.2c0 22.1-17.9 40-40 40l-16 0c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1L416 512l-24 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z\"]\n};\nconst faHome = faHouse;\nconst faHomeAlt = faHouse;\nconst faHomeLgAlt = faHouse;\nconst faCalendarWeek = {\n  prefix: 'fas',\n  iconName: 'calendar-week',\n  icon: [448, 512, [], \"f784\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zm80 64c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l288 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16L80 256z\"]\n};\nconst faLaptopMedical = {\n  prefix: 'fas',\n  iconName: 'laptop-medical',\n  icon: [640, 512, [], \"f812\", \"M64 96c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 256-64 0 0-256L128 96l0 256-64 0L64 96zM0 403.2C0 392.6 8.6 384 19.2 384l601.6 0c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8L76.8 480C34.4 480 0 445.6 0 403.2zM288 160c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faB = {\n  prefix: 'fas',\n  iconName: 'b',\n  icon: [320, 512, [98], \"42\", \"M64 32C28.7 32 0 60.7 0 96L0 256 0 416c0 35.3 28.7 64 64 64l128 0c70.7 0 128-57.3 128-128c0-46.5-24.8-87.3-62-109.7c18.7-22.3 30-51 30-82.3c0-70.7-57.3-128-128-128L64 32zm96 192l-96 0L64 96l96 0c35.3 0 64 28.7 64 64s-28.7 64-64 64zM64 288l96 0 32 0c35.3 0 64 28.7 64 64s-28.7 64-64 64L64 416l0-128z\"]\n};\nconst faFileMedical = {\n  prefix: 'fas',\n  iconName: 'file-medical',\n  icon: [384, 512, [], \"f477\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM160 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faDiceOne = {\n  prefix: 'fas',\n  iconName: 'dice-one',\n  icon: [448, 512, [9856], \"f525\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faKiwiBird = {\n  prefix: 'fas',\n  iconName: 'kiwi-bird',\n  icon: [576, 512, [], \"f535\", \"M291.2 388.4c31.2-18.8 64.7-36.4 101.1-36.4l55.7 0c4.6 0 9.1-.2 13.6-.7l85.3 121.9c4 5.7 11.3 8.2 17.9 6.1s11.2-8.3 11.2-15.3l0-240c0-70.7-57.3-128-128-128l-55.7 0c-36.4 0-69.9-17.6-101.1-36.4C262.3 42.1 228.3 32 192 32C86 32 0 118 0 224c0 71.1 38.6 133.1 96 166.3L96 456c0 13.3 10.7 24 24 24s24-10.7 24-24l0-46c15.3 3.9 31.4 6 48 6c5.4 0 10.7-.2 16-.7l0 40.7c0 13.3 10.7 24 24 24s24-10.7 24-24l0-50.9c12.4-4.4 24.2-10 35.2-16.7zM448 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faArrowRightArrowLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-right-arrow-left',\n  icon: [448, 512, [8644, \"exchange\"], \"f0ec\", \"M438.6 150.6c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.7 96 32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l306.7 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96zm-333.3 352c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 416 416 416c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96z\"]\n};\nconst faExchange = faArrowRightArrowLeft;\nconst faRotateRight = {\n  prefix: 'fas',\n  iconName: 'rotate-right',\n  icon: [512, 512, [\"redo-alt\", \"rotate-forward\"], \"f2f9\", \"M463.5 224l8.5 0c13.3 0 24-10.7 24-24l0-128c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8l119.5 0z\"]\n};\nconst faRedoAlt = faRotateRight;\nconst faRotateForward = faRotateRight;\nconst faUtensils = {\n  prefix: 'fas',\n  iconName: 'utensils',\n  icon: [448, 512, [127860, 61685, \"cutlery\"], \"f2e7\", \"M416 0C400 0 288 32 288 176l0 112c0 35.3 28.7 64 64 64l32 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 0-112 0-208c0-17.7-14.3-32-32-32zM64 16C64 7.8 57.9 1 49.7 .1S34.2 4.6 32.4 12.5L2.1 148.8C.7 155.1 0 161.5 0 167.9c0 45.9 35.1 83.6 80 87.7L80 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224.4c44.9-4.1 80-41.8 80-87.7c0-6.4-.7-12.8-2.1-19.1L191.6 12.5c-1.8-8-9.3-13.3-17.4-12.4S160 7.8 160 16l0 134.2c0 5.4-4.4 9.8-9.8 9.8c-5.1 0-9.3-3.9-9.8-9L127.9 14.6C127.2 6.3 120.3 0 112 0s-15.2 6.3-15.9 14.6L83.7 151c-.5 5.1-4.7 9-9.8 9c-5.4 0-9.8-4.4-9.8-9.8L64 16zm48.3 152l-.3 0-.3 0 .3-.7 .3 .7z\"]\n};\nconst faCutlery = faUtensils;\nconst faArrowUpWideShort = {\n  prefix: 'fas',\n  iconName: 'arrow-up-wide-short',\n  icon: [576, 512, [\"sort-amount-up\"], \"f161\", \"M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 480l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nconst faSortAmountUp = faArrowUpWideShort;\nconst faMillSign = {\n  prefix: 'fas',\n  iconName: 'mill-sign',\n  icon: [384, 512, [], \"e1ed\", \"M302.1 42.8c5.9-16.6-2.7-35-19.4-40.9s-35 2.7-40.9 19.4L208 116.1c-5.7 4-11.1 8.5-16 13.5C171.7 108.9 143.3 96 112 96c-19.5 0-37.8 5-53.7 13.7C52.5 101.4 42.9 96 32 96C14.3 96 0 110.3 0 128l0 80L0 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-208c0-26.5 21.5-48 48-48s48 21.5 48 48l0 42.5L81.9 469.2c-5.9 16.6 2.7 35 19.4 40.9s35-2.7 40.9-19.4l21.4-60C168.9 441 179.6 448 192 448c17.7 0 32-14.3 32-32l0-154.5 35.7-100c3.9-1 8.1-1.6 12.3-1.6c26.5 0 48 21.5 48 48l0 208c0 17.7 14.3 32 32 32s32-14.3 32-32l0-208c0-58.2-44.3-106-101.1-111.5l19.2-53.8z\"]\n};\nconst faBowlRice = {\n  prefix: 'fas',\n  iconName: 'bowl-rice',\n  icon: [512, 512, [], \"e2eb\", \"M176 56c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm24 48l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM56 176l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM0 283.4C0 268.3 12.3 256 27.4 256l457.1 0c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28l-231.5 0c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4zM224 200c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-96 0c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-24-96l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm216 96c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-24-96l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm120 96c0-13.3 10.7-24 24-24l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24zm-24-96l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zM296 32l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faSkull = {\n  prefix: 'fas',\n  iconName: 'skull',\n  icon: [512, 512, [128128], \"f54c\", \"M416 398.9c58.5-41.1 96-104.1 96-174.9C512 100.3 397.4 0 256 0S0 100.3 0 224c0 70.7 37.5 133.8 96 174.9c0 .4 0 .7 0 1.1l0 64c0 26.5 21.5 48 48 48l48 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 64 0 0-48c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 48 0c26.5 0 48-21.5 48-48l0-64c0-.4 0-.7 0-1.1zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm256-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faTowerBroadcast = {\n  prefix: 'fas',\n  iconName: 'tower-broadcast',\n  icon: [576, 512, [\"broadcast-tower\"], \"f519\", \"M80.3 44C69.8 69.9 64 98.2 64 128s5.8 58.1 16.3 84c6.6 16.4-1.3 35-17.7 41.7s-35-1.3-41.7-17.7C7.4 202.6 0 166.1 0 128S7.4 53.4 20.9 20C27.6 3.6 46.2-4.3 62.6 2.3S86.9 27.6 80.3 44zM555.1 20C568.6 53.4 576 89.9 576 128s-7.4 74.6-20.9 108c-6.6 16.4-25.3 24.3-41.7 17.7S489.1 228.4 495.7 212c10.5-25.9 16.3-54.2 16.3-84s-5.8-58.1-16.3-84C489.1 27.6 497 9 513.4 2.3s35 1.3 41.7 17.7zM352 128c0 23.7-12.9 44.4-32 55.4L320 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-296.6c-19.1-11.1-32-31.7-32-55.4c0-35.3 28.7-64 64-64s64 28.7 64 64zM170.6 76.8C163.8 92.4 160 109.7 160 128s3.8 35.6 10.6 51.2c7.1 16.2-.3 35.1-16.5 42.1s-35.1-.3-42.1-16.5c-10.3-23.6-16-49.6-16-76.8s5.7-53.2 16-76.8c7.1-16.2 25.9-23.6 42.1-16.5s23.6 25.9 16.5 42.1zM464 51.2c10.3 23.6 16 49.6 16 76.8s-5.7 53.2-16 76.8c-7.1 16.2-25.9 23.6-42.1 16.5s-23.6-25.9-16.5-42.1c6.8-15.6 10.6-32.9 10.6-51.2s-3.8-35.6-10.6-51.2c-7.1-16.2 .3-35.1 16.5-42.1s35.1 .3 42.1 16.5z\"]\n};\nconst faBroadcastTower = faTowerBroadcast;\nconst faTruckPickup = {\n  prefix: 'fas',\n  iconName: 'truck-pickup',\n  icon: [640, 512, [128763], \"f63c\", \"M368.6 96l76.8 96L288 192l0-96 80.6 0zM224 80l0 112L64 192c-17.7 0-32 14.3-32 32l0 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l33.1 0c-.7 5.2-1.1 10.6-1.1 16c0 61.9 50.1 112 112 112s112-50.1 112-112c0-5.4-.4-10.8-1.1-16l66.3 0c-.7 5.2-1.1 10.6-1.1 16c0 61.9 50.1 112 112 112s112-50.1 112-112c0-5.4-.4-10.8-1.1-16l33.1 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c0-17.7-14.3-32-32-32l-48.6 0L418.6 56c-12.1-15.2-30.5-24-50-24L272 32c-26.5 0-48 21.5-48 48zm0 288a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm288 0a48 48 0 1 1 -96 0 48 48 0 1 1 96 0z\"]\n};\nconst faUpLong = {\n  prefix: 'fas',\n  iconName: 'up-long',\n  icon: [320, 512, [\"long-arrow-alt-up\"], \"f30c\", \"M318 177.5c3.8-8.8 2-19-4.6-26l-136-144C172.9 2.7 166.6 0 160 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26S14.4 192 24 192l72 0 0 288c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-288 72 0c9.6 0 18.2-5.7 22-14.5z\"]\n};\nconst faLongArrowAltUp = faUpLong;\nconst faStop = {\n  prefix: 'fas',\n  iconName: 'stop',\n  icon: [384, 512, [9209], \"f04d\", \"M0 128C0 92.7 28.7 64 64 64H320c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z\"]\n};\nconst faCodeMerge = {\n  prefix: 'fas',\n  iconName: 'code-merge',\n  icon: [448, 512, [], \"f387\", \"M80 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32.4 97.2c28-12.4 47.6-40.5 47.6-73.2c0-44.2-35.8-80-80-80S0 35.8 0 80c0 32.8 19.7 61 48 73.3l0 205.3C19.7 371 0 399.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3l0-86.6c26.7 20.1 60 32 96 32l86.7 0c12.3 28.3 40.5 48 73.3 48c44.2 0 80-35.8 80-80s-35.8-80-80-80c-32.8 0-61 19.7-73.3 48L208 240c-49.9 0-91-38.1-95.6-86.8zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM344 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faUpload = {\n  prefix: 'fas',\n  iconName: 'upload',\n  icon: [512, 512, [], \"f093\", \"M288 109.3L288 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-242.7-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352l128 0c0 35.3 28.7 64 64 64s64-28.7 64-64l128 0c35.3 0 64 28.7 64 64l0 32c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64l0-32c0-35.3 28.7-64 64-64zM432 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faHurricane = {\n  prefix: 'fas',\n  iconName: 'hurricane',\n  icon: [384, 512, [], \"f751\", \"M0 208C0 104.4 75.7 18.5 174.9 2.6C184 1.2 192 8.6 192 17.9l0 63.3c0 8.4 6.5 15.3 14.7 16.5C307 112.5 384 199 384 303.4c0 103.6-75.7 189.5-174.9 205.4c-9.2 1.5-17.1-5.9-17.1-15.2l0-63.3c0-8.4-6.5-15.3-14.7-16.5C77 398.9 0 312.4 0 208zm288 48A96 96 0 1 0 96 256a96 96 0 1 0 192 0zm-96-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faMound = {\n  prefix: 'fas',\n  iconName: 'mound',\n  icon: [576, 512, [], \"e52d\", \"M144.1 179.2C173.8 127.7 228.6 96 288 96s114.2 31.7 143.9 83.2L540.4 368c12.3 21.3-3.1 48-27.7 48H63.3c-24.6 0-40-26.6-27.7-48L144.1 179.2z\"]\n};\nconst faToiletPortable = {\n  prefix: 'fas',\n  iconName: 'toilet-portable',\n  icon: [320, 512, [], \"e583\", \"M0 32L0 64l320 0 0-32c0-17.7-14.3-32-32-32L32 0C14.3 0 0 14.3 0 32zM24 96L0 96l0 24L0 488c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8 224 0 0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-368 0-24-24 0L24 96zM256 240l0 64c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-64c0-8.8 7.2-16 16-16s16 7.2 16 16z\"]\n};\nconst faCompactDisc = {\n  prefix: 'fas',\n  iconName: 'compact-disc',\n  icon: [512, 512, [128191, 128192, 128440], \"f51f\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 32a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm-96-32a96 96 0 1 0 192 0 96 96 0 1 0 -192 0zM96 240c0-35 17.5-71.1 45.2-98.8S205 96 240 96c8.8 0 16-7.2 16-16s-7.2-16-16-16c-45.4 0-89.2 22.3-121.5 54.5S64 194.6 64 240c0 8.8 7.2 16 16 16s16-7.2 16-16z\"]\n};\nconst faFileArrowDown = {\n  prefix: 'fas',\n  iconName: 'file-arrow-down',\n  icon: [384, 512, [\"file-download\"], \"f56d\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM216 232l0 102.1 31-31c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-72 72c-9.4 9.4-24.6 9.4-33.9 0l-72-72c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l31 31L168 232c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faFileDownload = faFileArrowDown;\nconst faCaravan = {\n  prefix: 'fas',\n  iconName: 'caravan',\n  icon: [640, 512, [], \"f8ff\", \"M0 112C0 67.8 35.8 32 80 32l336 0c88.4 0 160 71.6 160 160l0 160 32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0-288 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-44.2 0-80-35.8-80-80L0 112zM320 352l128 0 0-96-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l32 0 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 192zM96 128c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32L96 128zm96 336a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faShieldCat = {\n  prefix: 'fas',\n  iconName: 'shield-cat',\n  icon: [512, 512, [], \"e572\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160 154.4c0-5.8 4.7-10.4 10.4-10.4l.2 0c3.4 0 6.5 1.6 8.5 4.3l40 53.3c3 4 7.8 6.4 12.8 6.4l48 0c5 0 9.8-2.4 12.8-6.4l40-53.3c2-2.7 5.2-4.3 8.5-4.3l.2 0c5.8 0 10.4 4.7 10.4 10.4L352 272c0 53-43 96-96 96s-96-43-96-96l0-117.6zM216 288a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm96-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faBolt = {\n  prefix: 'fas',\n  iconName: 'bolt',\n  icon: [448, 512, [9889, \"zap\"], \"f0e7\", \"M349.4 44.6c5.9-13.7 1.5-29.7-10.6-38.5s-28.6-8-39.9 1.8l-256 224c-10 8.8-13.6 22.9-8.9 35.3S50.7 288 64 288l111.5 0L98.6 467.4c-5.9 13.7-1.5 29.7 10.6 38.5s28.6 8 39.9-1.8l256-224c10-8.8 13.6-22.9 8.9-35.3s-16.6-20.7-30-20.7l-111.5 0L349.4 44.6z\"]\n};\nconst faZap = faBolt;\nconst faGlassWater = {\n  prefix: 'fas',\n  iconName: 'glass-water',\n  icon: [384, 512, [], \"e4f4\", \"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3l166.6 0c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0L32 0zM73 156.5L66.4 64l251.3 0L311 156.5l-24.2 12.1c-19.4 9.7-42.2 9.7-61.6 0c-20.9-10.4-45.5-10.4-66.4 0c-19.4 9.7-42.2 9.7-61.6 0L73 156.5z\"]\n};\nconst faOilWell = {\n  prefix: 'fas',\n  iconName: 'oil-well',\n  icon: [576, 512, [], \"e532\", \"M528.3 61.3c-11.4-42.7-55.3-68-98-56.6L414.9 8.8C397.8 13.4 387.7 31 392.3 48l24.5 91.4L308.5 167.5l-6.3-18.1C297.7 136.6 285.6 128 272 128s-25.7 8.6-30.2 21.4l-13.6 39L96 222.6 96 184c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 264-16 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-137.3 0L340 257.5l-62.2 16.1L305.3 352l-66.6 0L265 277l-74.6 19.3L137.3 448 96 448l0-159.2 337.4-87.5 25.2 94c4.6 17.1 22.1 27.2 39.2 22.6l15.5-4.1c42.7-11.4 68-55.3 56.6-98L528.3 61.3zM205.1 448l11.2-32 111.4 0 11.2 32-133.8 0z\"]\n};\nconst faVault = {\n  prefix: 'fas',\n  iconName: 'vault',\n  icon: [576, 512, [], \"e2c5\", \"M64 0C28.7 0 0 28.7 0 64L0 416c0 35.3 28.7 64 64 64l16 0 16 32 64 0 16-32 224 0 16 32 64 0 16-32 16 0c35.3 0 64-28.7 64-64l0-352c0-35.3-28.7-64-64-64L64 0zM224 320a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-240a160 160 0 1 1 0 320 160 160 0 1 1 0-320zM480 221.3L480 336c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-114.7c-18.6-6.6-32-24.4-32-45.3c0-26.5 21.5-48 48-48s48 21.5 48 48c0 20.9-13.4 38.7-32 45.3z\"]\n};\nconst faMars = {\n  prefix: 'fas',\n  iconName: 'mars',\n  icon: [448, 512, [9794], \"f222\", \"M289.8 46.8c3.7-9 12.5-14.8 22.2-14.8l112 0c13.3 0 24 10.7 24 24l0 112c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-33.4-33.4L321 204.2c19.5 28.4 31 62.7 31 99.8c0 97.2-78.8 176-176 176S0 401.2 0 304s78.8-176 176-176c37 0 71.4 11.4 99.8 31l52.6-52.6L295 73c-6.9-6.9-8.9-17.2-5.2-26.2zM400 80s0 0 0 0s0 0 0 0s0 0 0 0zM176 416a112 112 0 1 0 0-224 112 112 0 1 0 0 224z\"]\n};\nconst faToilet = {\n  prefix: 'fas',\n  iconName: 'toilet',\n  icon: [448, 512, [128701], \"f7d8\", \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48l8 0 0 148.9c-1.9 1.4-3.8 2.9-5.6 4.4C10.9 214.5 0 232.9 0 256c0 46.9 14.3 84.1 37 112.5c14.2 17.7 31.1 31.3 48.5 41.8L65.6 469.9c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3l256 0c10.3 0 19.9-4.9 26-13.3s7.7-19.1 4.4-28.8l-19.8-59.5c17.4-10.5 34.3-24.1 48.5-41.8c22.7-28.4 37-65.5 37-112.5c0-23.1-10.9-41.5-26.4-54.6c-1.8-1.5-3.7-3-5.6-4.4L416 48l8 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 0zM384 256.3c0 1-.3 2.6-3.8 5.6c-4.8 4.1-14 9-29.3 13.4C320.5 284 276.1 288 224 288s-96.5-4-126.9-12.8c-15.3-4.4-24.5-9.3-29.3-13.4c-3.5-3-3.8-4.6-3.8-5.6l0-.3c0 0 0-.1 0-.1c0-1 0-2.5 3.8-5.8c4.8-4.1 14-9 29.3-13.4C127.5 228 171.9 224 224 224s96.5 4 126.9 12.8c15.3 4.4 24.5 9.3 29.3 13.4c3.8 3.2 3.8 4.8 3.8 5.8c0 0 0 .1 0 .1l0 .3zM328.2 384l-.2 .5 0-.5 .2 0zM112 64l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faPlaneCircleXmark = {\n  prefix: 'fas',\n  iconName: 'plane-circle-xmark',\n  icon: [640, 512, [], \"e557\", \"M256 0c-35 0-64 59.5-64 93.7l0 84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9l0 65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8l0 42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3l0-84.6C320 59.5 292 0 256 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faYenSign = {\n  prefix: 'fas',\n  iconName: 'yen-sign',\n  icon: [320, 512, [165, \"cny\", \"jpy\", \"rmb\", \"yen\"], \"f157\", \"M58.6 46.3C48.8 31.5 29 27.6 14.2 37.4S-4.4 67 5.4 81.8L100.2 224 48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0 0 32-80 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 0-32 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-52.2 0L314.6 81.8c9.8-14.7 5.8-34.6-8.9-44.4s-34.6-5.8-44.4 8.9L160 198.3 58.6 46.3z\"]\n};\nconst faCny = faYenSign;\nconst faJpy = faYenSign;\nconst faRmb = faYenSign;\nconst faYen = faYenSign;\nconst faRubleSign = {\n  prefix: 'fas',\n  iconName: 'ruble-sign',\n  icon: [384, 512, [8381, \"rouble\", \"rub\", \"ruble\"], \"f158\", \"M96 32C78.3 32 64 46.3 64 64l0 192-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0 0-32 112 0c79.5 0 144-64.5 144-144s-64.5-144-144-144L96 32zM240 256l-112 0 0-160 112 0c44.2 0 80 35.8 80 80s-35.8 80-80 80z\"]\n};\nconst faRouble = faRubleSign;\nconst faRub = faRubleSign;\nconst faRuble = faRubleSign;\nconst faSun = {\n  prefix: 'fas',\n  iconName: 'sun',\n  icon: [512, 512, [9728], \"f185\", \"M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\"]\n};\nconst faGuitar = {\n  prefix: 'fas',\n  iconName: 'guitar',\n  icon: [512, 512, [], \"f7a6\", \"M465 7c-9.4-9.4-24.6-9.4-33.9 0L383 55c-2.4 2.4-4.3 5.3-5.5 8.5l-15.4 41-77.5 77.6c-45.1-29.4-99.3-30.2-131 1.6c-11 11-18 24.6-21.4 39.6c-3.7 16.6-19.1 30.7-36.1 31.6c-25.6 1.3-49.3 10.7-67.3 28.6C-16 328.4-7.6 409.4 47.5 464.5s136.1 63.5 180.9 18.7c17.9-17.9 27.4-41.7 28.6-67.3c.9-17 15-32.3 31.6-36.1c15-3.4 28.6-10.5 39.6-21.4c31.8-31.8 31-85.9 1.6-131l77.6-77.6 41-15.4c3.2-1.2 6.1-3.1 8.5-5.5l48-48c9.4-9.4 9.4-24.6 0-33.9L465 7zM208 256a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faFaceLaughWink = {\n  prefix: 'fas',\n  iconName: 'face-laugh-wink',\n  icon: [512, 512, [\"laugh-wink\"], \"f59c\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1l275.2 0c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm156.4 25.6c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2c-17.6-23.5-52.8-23.5-70.4 0z\"]\n};\nconst faLaughWink = faFaceLaughWink;\nconst faHorseHead = {\n  prefix: 'fas',\n  iconName: 'horse-head',\n  icon: [640, 512, [], \"f7ab\", \"M64 464l0-147.1c0-108.4 68.3-205.1 170.5-241.3L404.2 15.5C425.6 7.9 448 23.8 448 46.4c0 11-5.5 21.2-14.6 27.3L400 96c48.1 0 91.2 29.8 108.1 74.9l48.6 129.5c11.8 31.4 4.1 66.8-19.6 90.5c-16 16-37.8 25.1-60.5 25.1l-3.4 0c-26.1 0-50.9-11.6-67.6-31.7l-32.3-38.7c-11.7 4.1-24.2 6.4-37.3 6.4c0 0 0 0-.1 0c0 0 0 0 0 0c-6.3 0-12.5-.5-18.6-1.5c-3.6-.6-7.2-1.4-10.7-2.3c0 0 0 0 0 0c-28.9-7.8-53.1-26.8-67.8-52.2c-4.4-7.6-14.2-10.3-21.9-5.8s-10.3 14.2-5.8 21.9c24 41.5 68.3 70 119.3 71.9l47.2 70.8c4 6.1 6.2 13.2 6.2 20.4c0 20.3-16.5 36.8-36.8 36.8L112 512c-26.5 0-48-21.5-48-48zM392 224a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"]\n};\nconst faBoreHole = {\n  prefix: 'fas',\n  iconName: 'bore-hole',\n  icon: [512, 512, [], \"e4c3\", \"M256 0c-17.7 0-32 14.3-32 32l0 264.6c-19.1 11.1-32 31.7-32 55.4c0 35.3 28.7 64 64 64s64-28.7 64-64c0-23.7-12.9-44.4-32-55.4L288 32c0-17.7-14.3-32-32-32zM48 128c-26.5 0-48 21.5-48 48L0 464c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-288c0-26.5-21.5-48-48-48l-80 0c-17.7 0-32 14.3-32 32l0 192c0 53-43 96-96 96s-96-43-96-96l0-192c0-17.7-14.3-32-32-32l-80 0z\"]\n};\nconst faIndustry = {\n  prefix: 'fas',\n  iconName: 'industry',\n  icon: [576, 512, [], \"f275\", \"M64 32C46.3 32 32 46.3 32 64l0 240 0 48 0 80c0 26.5 21.5 48 48 48l416 0c26.5 0 48-21.5 48-48l0-128 0-151.8c0-18.2-19.4-29.7-35.4-21.1L352 215.4l0-63.2c0-18.2-19.4-29.7-35.4-21.1L160 215.4 160 64c0-17.7-14.3-32-32-32L64 32z\"]\n};\nconst faCircleDown = {\n  prefix: 'fas',\n  iconName: 'circle-down',\n  icon: [512, 512, [61466, \"arrow-alt-circle-down\"], \"f358\", \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM244.7 395.3l-112-112c-4.6-4.6-5.9-11.5-3.5-17.4s8.3-9.9 14.8-9.9l64 0 0-96c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 96 64 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-112 112c-6.2 6.2-16.4 6.2-22.6 0z\"]\n};\nconst faArrowAltCircleDown = faCircleDown;\nconst faArrowsTurnToDots = {\n  prefix: 'fas',\n  iconName: 'arrows-turn-to-dots',\n  icon: [512, 512, [], \"e4c1\", \"M249.4 25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L269.3 96 416 96c53 0 96 43 96 96l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-17.7-14.3-32-32-32l-146.7 0 25.4 25.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3l80-80zm13.3 256l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 416 96 416c-17.7 0-32 14.3-32 32l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32c0-53 43-96 96-96l146.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0zM384 384a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 192A64 64 0 1 1 64 64a64 64 0 1 1 0 128z\"]\n};\nconst faFlorinSign = {\n  prefix: 'fas',\n  iconName: 'florin-sign',\n  icon: [384, 512, [], \"e184\", \"M314.7 32c-38.8 0-73.7 23.3-88.6 59.1L170.7 224 64 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0L98.9 396.3c-5 11.9-16.6 19.7-29.5 19.7L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l37.3 0c38.8 0 73.7-23.3 88.6-59.1L213.3 288 320 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-80 0 45.1-108.3c5-11.9 16.6-19.7 29.5-19.7L352 96c17.7 0 32-14.3 32-32s-14.3-32-32-32l-37.3 0z\"]\n};\nconst faArrowDownShortWide = {\n  prefix: 'fas',\n  iconName: 'arrow-down-short-wide',\n  icon: [576, 512, [\"sort-amount-desc\", \"sort-amount-down-alt\"], \"f884\", \"M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7 96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 301.7 32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faSortAmountDesc = faArrowDownShortWide;\nconst faSortAmountDownAlt = faArrowDownShortWide;\nconst faLessThan = {\n  prefix: 'fas',\n  iconName: 'less-than',\n  icon: [384, 512, [62774], \"3c\", \"M380.6 81.7c7.9 15.8 1.5 35-14.3 42.9L103.6 256 366.3 387.4c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-320-160C6.8 279.2 0 268.1 0 256s6.8-23.2 17.7-28.6l320-160c15.8-7.9 35-1.5 42.9 14.3z\"]\n};\nconst faAngleDown = {\n  prefix: 'fas',\n  iconName: 'angle-down',\n  icon: [448, 512, [8964], \"f107\", \"M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"]\n};\nconst faCarTunnel = {\n  prefix: 'fas',\n  iconName: 'car-tunnel',\n  icon: [512, 512, [], \"e4de\", \"M256 0C114.6 0 0 114.6 0 256L0 448c0 35.3 28.7 64 64 64l42.8 0c-6.6-5.9-10.8-14.4-10.8-24l0-112c0-20.8 11.3-38.9 28.1-48.6l21-64.7c7.5-23.1 29-38.7 53.3-38.7l115.2 0c24.3 0 45.8 15.6 53.3 38.7l21 64.7c16.8 9.7 28.2 27.8 28.2 48.6l0 112c0 9.6-4.2 18.1-10.8 24l42.8 0c35.3 0 64-28.7 64-64l0-192C512 114.6 397.4 0 256 0zM362.8 512c-6.6-5.9-10.8-14.4-10.8-24l0-40-192 0 0 40c0 9.6-4.2 18.1-10.8 24l213.7 0zM190.8 277.5L177 320l158 0-13.8-42.5c-1.1-3.3-4.1-5.5-7.6-5.5l-115.2 0c-3.5 0-6.5 2.2-7.6 5.5zM168 408a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm200-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"]\n};\nconst faHeadSideCough = {\n  prefix: 'fas',\n  iconName: 'head-side-cough',\n  icon: [640, 512, [], \"e061\", \"M0 224.2C0 100.6 100.2 0 224 0l24 0c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8L448 320s0 0 0 0l0 32L339.2 365.6c-11 1.4-19.2 10.7-19.2 21.8c0 11.6 9 21.2 20.6 21.9L448 416l0 16c0 26.5-21.5 48-48 48l-80 0 0 8c0 13.3-10.7 24-24 24l-40 0s0 0 0 0L96 512c-17.7 0-32-14.3-32-32l0-72.7c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zm352-.2a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM464 384a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm152-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM592 480a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM552 312a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM552 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faGripLines = {\n  prefix: 'fas',\n  iconName: 'grip-lines',\n  icon: [448, 512, [], \"f7a4\", \"M32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 288zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z\"]\n};\nconst faThumbsDown = {\n  prefix: 'fas',\n  iconName: 'thumbs-down',\n  icon: [512, 512, [128078, 61576], \"f165\", \"M313.4 479.1c26-5.2 42.9-30.5 37.7-56.5l-2.3-11.4c-5.3-26.7-15.1-52.1-28.8-75.2l144 0c26.5 0 48-21.5 48-48c0-18.5-10.5-34.6-25.9-42.6C497 236.6 504 223.1 504 208c0-23.4-16.8-42.9-38.9-47.1c4.4-7.3 6.9-15.8 6.9-24.9c0-21.3-13.9-39.4-33.1-45.6c.7-3.3 1.1-6.8 1.1-10.4c0-26.5-21.5-48-48-48l-97.5 0c-19 0-37.5 5.6-53.3 16.1L202.7 73.8C176 91.6 160 121.6 160 153.7l0 38.3 0 48 0 24.9c0 29.2 13.3 56.7 36 75l7.4 5.9c26.5 21.2 44.6 51 51.2 84.2l2.3 11.4c5.2 26 30.5 42.9 56.5 37.7zM32 384l64 0c17.7 0 32-14.3 32-32l0-224c0-17.7-14.3-32-32-32L32 96C14.3 96 0 110.3 0 128L0 352c0 17.7 14.3 32 32 32z\"]\n};\nconst faUserLock = {\n  prefix: 'fas',\n  iconName: 'user-lock',\n  icon: [640, 512, [], \"f502\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l362.8 0c-5.4-9.4-8.6-20.3-8.6-32l0-128c0-2.1 .1-4.2 .3-6.3c-31-26-71-41.7-114.6-41.7l-91.4 0zM528 240c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faArrowRightLong = {\n  prefix: 'fas',\n  iconName: 'arrow-right-long',\n  icon: [512, 512, [\"long-arrow-right\"], \"f178\", \"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l370.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"]\n};\nconst faLongArrowRight = faArrowRightLong;\nconst faAnchorCircleXmark = {\n  prefix: 'fas',\n  iconName: 'anchor-circle-xmark',\n  icon: [640, 512, [], \"e4ac\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2L320 448l0-80 0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faEllipsis = {\n  prefix: 'fas',\n  iconName: 'ellipsis',\n  icon: [448, 512, [\"ellipsis-h\"], \"f141\", \"M8 256a56 56 0 1 1 112 0A56 56 0 1 1 8 256zm160 0a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm216-56a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"]\n};\nconst faEllipsisH = faEllipsis;\nconst faChessPawn = {\n  prefix: 'fas',\n  iconName: 'chess-pawn',\n  icon: [320, 512, [9823], \"f443\", \"M215.5 224c29.2-18.4 48.5-50.9 48.5-88c0-57.4-46.6-104-104-104S56 78.6 56 136c0 37.1 19.4 69.6 48.5 88L96 224c-17.7 0-32 14.3-32 32c0 16.5 12.5 30 28.5 31.8L80 400l160 0L227.5 287.8c16-1.8 28.5-15.3 28.5-31.8c0-17.7-14.3-32-32-32l-8.5 0zM22.6 473.4c-4.2 4.2-6.6 10-6.6 16C16 501.9 26.1 512 38.6 512l242.7 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L256 432 64 432 22.6 473.4z\"]\n};\nconst faKitMedical = {\n  prefix: 'fas',\n  iconName: 'kit-medical',\n  icon: [576, 512, [\"first-aid\"], \"f479\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l32 0L96 32 64 32zm64 0l0 448 320 0 0-448L128 32zM512 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-32 0 0 448 32 0zM256 176c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faFirstAid = faKitMedical;\nconst faPersonThroughWindow = {\n  prefix: 'fas',\n  iconName: 'person-through-window',\n  icon: [640, 512, [], \"e5a9\", \"M64 64l224 0 0 9.8c0 39-23.7 74-59.9 88.4C167.6 186.5 128 245 128 310.2l0 73.8s0 0 0 0l-64 0L64 64zm288 0l224 0 0 320-67.7 0-3.7-4.5-75.2-90.2c-9.1-10.9-22.6-17.3-36.9-17.3l-71.1 0-41-63.1c-.3-.5-.6-1-1-1.4c44.7-29 72.5-79 72.5-133.6l0-9.8zm73 320l-45.8 0 42.7 64L592 448c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 400c0 26.5 21.5 48 48 48l260.2 0 33.2 49.8c9.8 14.7 29.7 18.7 44.4 8.9s18.7-29.7 8.9-44.4L310.5 336l74.6 0 40 48zm-159.5 0L192 384s0 0 0 0l0-73.8c0-10.2 1.6-20.1 4.7-29.5L265.5 384zM192 128a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faToolbox = {\n  prefix: 'fas',\n  iconName: 'toolbox',\n  icon: [512, 512, [129520], \"f552\", \"M176 88l0 40 160 0 0-40c0-4.4-3.6-8-8-8L184 80c-4.4 0-8 3.6-8 8zm-48 40l0-40c0-30.9 25.1-56 56-56l144 0c30.9 0 56 25.1 56 56l0 40 28.1 0c12.7 0 24.9 5.1 33.9 14.1l51.9 51.9c9 9 14.1 21.2 14.1 33.9l0 92.1-128 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32-128 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32L0 320l0-92.1c0-12.7 5.1-24.9 14.1-33.9l51.9-51.9c9-9 21.2-14.1 33.9-14.1l28.1 0zM0 416l0-64 128 0c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0 0 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64z\"]\n};\nconst faHandsHoldingCircle = {\n  prefix: 'fas',\n  iconName: 'hands-holding-circle',\n  icon: [640, 512, [], \"e4fb\", \"M320 0a128 128 0 1 1 0 256A128 128 0 1 1 320 0zM40 64c22.1 0 40 17.9 40 40l0 40 0 80 0 40.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1c12.9-8.6 14.7-26.9 3.7-37.8l-15.2-15.2-32-32c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l32 32 15.2 15.2c0 0 0 0 0 0l25.3 25.3c21 21 32.8 49.5 32.8 79.2l0 78.9c0 26.5-21.5 48-48 48l-66.7 0c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5L0 224l0-64 0-56C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40l0 56 0 64 0 101.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7L400 512c-26.5 0-48-21.5-48-48l0-78.9c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3c0 0 0 0 0 0l15.2-15.2 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32-15.2 15.2c-11 11-9.2 29.2 3.7 37.8c9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3l0-40.2 0-80 0-40c0-22.1 17.9-40 40-40z\"]\n};\nconst faBug = {\n  prefix: 'fas',\n  iconName: 'bug',\n  icon: [512, 512, [], \"f188\", \"M256 0c53 0 96 43 96 96l0 3.6c0 15.7-12.7 28.4-28.4 28.4l-135.1 0c-15.7 0-28.4-12.7-28.4-28.4l0-3.6c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4l112 0c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5l64.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6L272 240c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 239.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64.3 0c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z\"]\n};\nconst faCreditCard = {\n  prefix: 'fas',\n  iconName: 'credit-card',\n  icon: [576, 512, [128179, 62083, \"credit-card-alt\"], \"f09d\", \"M64 32C28.7 32 0 60.7 0 96l0 32 576 0 0-32c0-35.3-28.7-64-64-64L64 32zM576 224L0 224 0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-192zM112 352l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm112 16c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faCreditCardAlt = faCreditCard;\nconst faCar = {\n  prefix: 'fas',\n  iconName: 'car',\n  icon: [512, 512, [128664, \"automobile\"], \"f1b9\", \"M135.2 117.4L109.1 192l293.8 0-26.1-74.6C372.3 104.6 360.2 96 346.6 96L165.4 96c-13.6 0-25.7 8.6-30.2 21.4zM39.6 196.8L74.8 96.3C88.3 57.8 124.6 32 165.4 32l181.2 0c40.8 0 77.1 25.8 90.6 64.3l35.2 100.5c23.2 9.6 39.6 32.5 39.6 59.2l0 144 0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48L96 400l0 48c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-48L0 256c0-26.7 16.4-49.6 39.6-59.2zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faAutomobile = faCar;\nconst faHandHoldingHand = {\n  prefix: 'fas',\n  iconName: 'hand-holding-hand',\n  icon: [576, 512, [], \"e4f7\", \"M7.8 207.7c-13.1-17.8-9.3-42.8 8.5-55.9L142.9 58.5C166.2 41.3 194.5 32 223.5 32L384 32l160 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-36.8 0-44.9 36c-22.7 18.2-50.9 28-80 28L304 224l-16 0-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-120.6 0L63.7 216.2c-17.8 13.1-42.8 9.3-55.9-8.5zM382.4 160c0 0 0 0 0 0l.9 0c-.3 0-.6 0-.9 0zM568.2 304.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 453.5c-23.4 17.2-51.6 26.5-80.7 26.5L192 480 32 480c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l36.8 0 44.9-36c22.7-18.2 50.9-28 80-28l78.3 0 16 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l120.6 0 119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 352c0 0 0 0 0 0l-.9 0c.3 0 .6 0 .9 0z\"]\n};\nconst faBookOpenReader = {\n  prefix: 'fas',\n  iconName: 'book-open-reader',\n  icon: [512, 512, [\"book-reader\"], \"f5da\", \"M160 96a96 96 0 1 1 192 0A96 96 0 1 1 160 96zm80 152l0 264-48.4-24.2c-20.9-10.4-43.5-17-66.8-19.3l-96-9.6C12.5 457.2 0 443.5 0 427L0 224c0-17.7 14.3-32 32-32l30.3 0c63.6 0 125.6 19.6 177.7 56zm32 264l0-264c52.1-36.4 114.1-56 177.7-56l30.3 0c17.7 0 32 14.3 32 32l0 203c0 16.4-12.5 30.2-28.8 31.8l-96 9.6c-23.2 2.3-45.9 8.9-66.8 19.3L272 512z\"]\n};\nconst faBookReader = faBookOpenReader;\nconst faMountainSun = {\n  prefix: 'fas',\n  iconName: 'mountain-sun',\n  icon: [640, 512, [], \"e52f\", \"M560 160A80 80 0 1 0 560 0a80 80 0 1 0 0 160zM55.9 512l325.2 0 75 0 122.8 0c33.8 0 61.1-27.4 61.1-61.1c0-11.2-3.1-22.2-8.9-31.8l-132-216.3C495 196.1 487.8 192 480 192s-15 4.1-19.1 10.7l-48.2 79L286.8 81c-6.6-10.6-18.3-17-30.8-17s-24.1 6.4-30.8 17L8.6 426.4C3 435.3 0 445.6 0 456.1C0 487 25 512 55.9 512z\"]\n};\nconst faArrowsLeftRightToLine = {\n  prefix: 'fas',\n  iconName: 'arrows-left-right-to-line',\n  icon: [640, 512, [], \"e4ba\", \"M32 64c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 96C0 78.3 14.3 64 32 64zm214.6 73.4c12.5 12.5 12.5 32.8 0 45.3L205.3 224l229.5 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 288l-229.5 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0zM640 96l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-320c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faDiceD20 = {\n  prefix: 'fas',\n  iconName: 'dice-d20',\n  icon: [512, 512, [], \"f6cf\", \"M48.7 125.8l53.2 31.9c7.8 4.7 17.8 2 22.2-5.9L201.6 12.1c3-5.4-.9-12.1-7.1-12.1c-1.6 0-3.2 .5-4.6 1.4L47.9 98.8c-9.6 6.6-9.2 20.9 .8 26.9zM16 171.7l0 123.5c0 8 10.4 11 14.7 4.4l60-92c5-7.6 2.6-17.8-5.2-22.5L40.2 158C29.6 151.6 16 159.3 16 171.7zM310.4 12.1l77.6 139.6c4.4 7.9 14.5 10.6 22.2 5.9l53.2-31.9c10-6 10.4-20.3 .8-26.9L322.1 1.4c-1.4-.9-3-1.4-4.6-1.4c-6.2 0-10.1 6.7-7.1 12.1zM496 171.7c0-12.4-13.6-20.1-24.2-13.7l-45.3 27.2c-7.8 4.7-10.1 14.9-5.2 22.5l60 92c4.3 6.7 14.7 3.6 14.7-4.4l0-123.5zm-49.3 246L286.1 436.6c-8.1 .9-14.1 7.8-14.1 15.9l0 52.8c0 3.7 3 6.8 6.8 6.8c.8 0 1.6-.1 2.4-.4l172.7-64c6.1-2.2 10.1-8 10.1-14.5c0-9.3-8.1-16.5-17.3-15.4zM233.2 512c3.7 0 6.8-3 6.8-6.8l0-52.6c0-8.1-6.1-14.9-14.1-15.9l-160.6-19c-9.2-1.1-17.3 6.1-17.3 15.4c0 6.5 4 12.3 10.1 14.5l172.7 64c.8 .3 1.6 .4 2.4 .4zM41.7 382.9l170.9 20.2c7.8 .9 13.4-7.5 9.5-14.3l-85.7-150c-5.9-10.4-20.7-10.8-27.3-.8L30.2 358.2c-6.5 9.9-.3 23.3 11.5 24.7zm439.6-24.8L402.9 238.1c-6.5-10-21.4-9.6-27.3 .8L290.2 388.5c-3.9 6.8 1.6 15.2 9.5 14.3l170.1-20c11.8-1.4 18-14.7 11.5-24.6zm-216.9 11l78.4-137.2c6.1-10.7-1.6-23.9-13.9-23.9l-145.7 0c-12.3 0-20 13.3-13.9 23.9l78.4 137.2c3.7 6.4 13 6.4 16.7 0zM174.4 176l163.2 0c12.2 0 19.9-13.1 14-23.8l-80-144c-2.8-5.1-8.2-8.2-14-8.2l-3.2 0c-5.8 0-11.2 3.2-14 8.2l-80 144c-5.9 10.7 1.8 23.8 14 23.8z\"]\n};\nconst faTruckDroplet = {\n  prefix: 'fas',\n  iconName: 'truck-droplet',\n  icon: [640, 512, [], \"e58c\", \"M0 48C0 21.5 21.5 0 48 0L368 0c26.5 0 48 21.5 48 48l0 48 50.7 0c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3l0 18.7 0 32 0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 48zM416 256l128 0 0-18.7L466.7 160 416 160l0 96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM208 272c39.8 0 72-29.6 72-66c0-27-39.4-82.9-59.9-110.3c-6.1-8.2-18.1-8.2-24.2 0C175.4 123 136 179 136 206c0 36.5 32.2 66 72 66z\"]\n};\nconst faFileCircleXmark = {\n  prefix: 'fas',\n  iconName: 'file-circle-xmark',\n  icon: [576, 512, [], \"e5a1\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"]\n};\nconst faTemperatureArrowUp = {\n  prefix: 'fas',\n  iconName: 'temperature-arrow-up',\n  icon: [576, 512, [\"temperature-up\"], \"e040\", \"M128 112c0-26.5 21.5-48 48-48s48 21.5 48 48l0 164.5c0 17.3 7.1 31.9 15.3 42.5C249.8 332.6 256 349.5 256 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5L128 112zM176 0C114.1 0 64 50.1 64 112l0 164.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C43.2 304.2 32 334.8 32 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6L288 112C288 50.1 237.9 0 176 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3L192 112c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 210.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48zM480 160l32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 288c0 17.7 14.3 32 32 32s32-14.3 32-32l0-288z\"]\n};\nconst faTemperatureUp = faTemperatureArrowUp;\nconst faMedal = {\n  prefix: 'fas',\n  iconName: 'medal',\n  icon: [512, 512, [127941], \"f5a2\", \"M4.1 38.2C1.4 34.2 0 29.4 0 24.6C0 11 11 0 24.6 0L133.9 0c11.2 0 21.7 5.9 27.4 15.5l68.5 114.1c-48.2 6.1-91.3 28.6-123.4 61.9L4.1 38.2zm503.7 0L405.6 191.5c-32.1-33.3-75.2-55.8-123.4-61.9L350.7 15.5C356.5 5.9 366.9 0 378.1 0L487.4 0C501 0 512 11 512 24.6c0 4.8-1.4 9.6-4.1 13.6zM80 336a176 176 0 1 1 352 0A176 176 0 1 1 80 336zm184.4-94.9c-3.4-7-13.3-7-16.8 0l-22.4 45.4c-1.4 2.8-4 4.7-7 5.1L168 298.9c-7.7 1.1-10.7 10.5-5.2 16l36.3 35.4c2.2 2.2 3.2 5.2 2.7 8.3l-8.6 49.9c-1.3 7.6 6.7 13.5 13.6 9.9l44.8-23.6c2.7-1.4 6-1.4 8.7 0l44.8 23.6c6.9 3.6 14.9-2.2 13.6-9.9l-8.6-49.9c-.5-3 .5-6.1 2.7-8.3l36.3-35.4c5.6-5.4 2.5-14.8-5.2-16l-50.1-7.3c-3-.4-5.7-2.4-7-5.1l-22.4-45.4z\"]\n};\nconst faBed = {\n  prefix: 'fas',\n  iconName: 'bed',\n  icon: [640, 512, [128716], \"f236\", \"M32 32c17.7 0 32 14.3 32 32l0 256 224 0 0-160c0-17.7 14.3-32 32-32l224 0c53 0 96 43 96 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-32-224 0-32 0L64 416l0 32c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 64C0 46.3 14.3 32 32 32zm144 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faSquareH = {\n  prefix: 'fas',\n  iconName: 'square-h',\n  icon: [448, 512, [\"h-square\"], \"f0fd\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM336 152l0 104 0 104c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-80-128 0 0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24s24 10.7 24 24l0 80 128 0 0-80c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faHSquare = faSquareH;\nconst faPodcast = {\n  prefix: 'fas',\n  iconName: 'podcast',\n  icon: [448, 512, [], \"f2ce\", \"M319.4 372c48.5-31.3 80.6-85.9 80.6-148c0-97.2-78.8-176-176-176S48 126.8 48 224c0 62.1 32.1 116.6 80.6 148c1.2 17.3 4 38 7.2 57.1l.2 1C56 395.8 0 316.5 0 224C0 100.3 100.3 0 224 0S448 100.3 448 224c0 92.5-56 171.9-136 206.1l.2-1.1c3.1-19.2 6-39.8 7.2-57zm-2.3-38.1c-1.6-5.7-3.9-11.1-7-16.2c-5.8-9.7-13.5-17-21.9-22.4c19.5-17.6 31.8-43 31.8-71.3c0-53-43-96-96-96s-96 43-96 96c0 28.3 12.3 53.8 31.8 71.3c-8.4 5.4-16.1 12.7-21.9 22.4c-3.1 5.1-5.4 10.5-7 16.2C99.8 307.5 80 268 80 224c0-79.5 64.5-144 144-144s144 64.5 144 144c0 44-19.8 83.5-50.9 109.9zM224 312c32.9 0 64 8.6 64 43.8c0 33-12.9 104.1-20.6 132.9c-5.1 19-24.5 23.4-43.4 23.4s-38.2-4.4-43.4-23.4c-7.8-28.5-20.6-99.7-20.6-132.8c0-35.1 31.1-43.8 64-43.8zm0-144a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"]\n};\nconst faTemperatureFull = {\n  prefix: 'fas',\n  iconName: 'temperature-full',\n  icon: [320, 512, [\"temperature-4\", \"thermometer-4\", \"thermometer-full\"], \"f2c7\", \"M160 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L208 112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L48 112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3L144 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 210.7c18.6 6.6 32 24.4 32 45.3z\"]\n};\nconst faTemperature4 = faTemperatureFull;\nconst faThermometer4 = faTemperatureFull;\nconst faThermometerFull = faTemperatureFull;\nconst faBell = {\n  prefix: 'fas',\n  iconName: 'bell',\n  icon: [448, 512, [128276, 61602], \"f0f3\", \"M224 0c-17.7 0-32 14.3-32 32l0 19.2C119 66 64 130.6 64 208l0 18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S19.4 416 32 416l384 0c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C401.3 319.2 384 273.9 384 226.8l0-18.8c0-77.4-55-142-128-156.8L256 32c0-17.7-14.3-32-32-32zm45.3 493.3c12-12 18.7-28.3 18.7-45.3l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z\"]\n};\nconst faSuperscript = {\n  prefix: 'fas',\n  iconName: 'superscript',\n  icon: [512, 512, [], \"f12b\", \"M480 32c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 73.5 404.3 80 416 80l0 80c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-128zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l15.3 0 89.6 128L47.3 384 32 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-15.3 0L215.1 256l89.6-128 15.3 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64L32 64z\"]\n};\nconst faPlugCircleXmark = {\n  prefix: 'fas',\n  iconName: 'plug-circle-xmark',\n  icon: [576, 512, [], \"e560\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L454.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L432 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L409.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L432 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faStarOfLife = {\n  prefix: 'fas',\n  iconName: 'star-of-life',\n  icon: [512, 512, [], \"f621\", \"M208 32c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 140.9 122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7L352 256l122 70.4c15.3 8.8 20.6 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7L304 339.1 304 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-140.9L86 409.6c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86 102.4l122 70.4L208 32z\"]\n};\nconst faPhoneSlash = {\n  prefix: 'fas',\n  iconName: 'phone-slash',\n  icon: [640, 512, [], \"f3dd\", \"M228.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C76.1 30.2 64 46 64 64c0 107.4 37.8 206 100.8 283.1L9.2 469.1c-10.4 8.2-12.3 23.3-4.1 33.7s23.3 12.3 33.7 4.1l592-464c10.4-8.2 12.3-23.3 4.1-33.7s-23.3-12.3-33.7-4.1L253 278c-17.8-21.5-32.9-45.2-45-70.7L257.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96zm96.8 319l-91.3 72C310.7 476 407.1 512 512 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L368.7 368c-15-7.1-29.3-15.2-43-24.3z\"]\n};\nconst faPaintRoller = {\n  prefix: 'fas',\n  iconName: 'paint-roller',\n  icon: [512, 512, [], \"f5aa\", \"M0 64C0 28.7 28.7 0 64 0L352 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64L64 192c-35.3 0-64-28.7-64-64L0 64zM160 352c0-17.7 14.3-32 32-32l0-16c0-44.2 35.8-80 80-80l144 0c17.7 0 32-14.3 32-32l0-32 0-90.5c37.3 13.2 64 48.7 64 90.5l0 32c0 53-43 96-96 96l-144 0c-8.8 0-16 7.2-16 16l0 16c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-128z\"]\n};\nconst faHandshakeAngle = {\n  prefix: 'fas',\n  iconName: 'handshake-angle',\n  icon: [640, 512, [\"hands-helping\"], \"f4c4\", \"M544 248l0 3.3 69.7-69.7c21.9-21.9 21.9-57.3 0-79.2L535.6 24.4c-21.9-21.9-57.3-21.9-79.2 0L416.3 64.5c-2.7-.3-5.5-.5-8.3-.5L296 64c-37.1 0-67.6 28-71.6 64l-.4 0 0 120c0 22.1 17.9 40 40 40s40-17.9 40-40l0-72c0 0 0-.1 0-.1l0-15.9 16 0 136 0c0 0 0 0 .1 0l7.9 0c44.2 0 80 35.8 80 80l0 8zM336 192l0 56c0 39.8-32.2 72-72 72s-72-32.2-72-72l0-118.6c-35.9 6.2-65.8 32.3-76 68.2L99.5 255.2 26.3 328.4c-21.9 21.9-21.9 57.3 0 79.2l78.1 78.1c21.9 21.9 57.3 21.9 79.2 0l37.7-37.7c.9 0 1.8 .1 2.7 .1l160 0c26.5 0 48-21.5 48-48c0-5.6-1-11-2.7-16l2.7 0c26.5 0 48-21.5 48-48c0-12.8-5-24.4-13.2-33c25.7-5 45.1-27.6 45.2-54.8l0-.4c-.1-30.8-25.1-55.8-56-55.8c0 0 0 0 0 0l-120 0z\"]\n};\nconst faHandsHelping = faHandshakeAngle;\nconst faLocationDot = {\n  prefix: 'fas',\n  iconName: 'location-dot',\n  icon: [384, 512, [\"map-marker-alt\"], \"f3c5\", \"M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faMapMarkerAlt = faLocationDot;\nconst faFile = {\n  prefix: 'fas',\n  iconName: 'file',\n  icon: [384, 512, [128196, 128459, 61462], \"f15b\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 288c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128z\"]\n};\nconst faGreaterThan = {\n  prefix: 'fas',\n  iconName: 'greater-than',\n  icon: [384, 512, [62769], \"3e\", \"M3.4 81.7c-7.9 15.8-1.5 35 14.3 42.9L280.5 256 17.7 387.4C1.9 395.3-4.5 414.5 3.4 430.3s27.1 22.2 42.9 14.3l320-160c10.8-5.4 17.7-16.5 17.7-28.6s-6.8-23.2-17.7-28.6l-320-160c-15.8-7.9-35-1.5-42.9 14.3z\"]\n};\nconst faPersonSwimming = {\n  prefix: 'fas',\n  iconName: 'person-swimming',\n  icon: [576, 512, [127946, \"swimmer\"], \"f5c4\", \"M309.5 178.4L447.9 297.1c-1.6 .9-3.2 2-4.8 3c-18 12.4-40.1 20.3-59.2 20.3c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-10.1 0-21.1-2.2-31.9-6.2C163.1 193.2 262.2 96 384 96l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-26.9 0-52.3 6.6-74.5 18.4zM160 160A64 64 0 1 1 32 160a64 64 0 1 1 128 0zM306.5 325.9C329 341.4 356.5 352 384 352c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 405.7 417 416 384 416c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 341.2 165.1 352 192 352c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faSwimmer = faPersonSwimming;\nconst faArrowDown = {\n  prefix: 'fas',\n  iconName: 'arrow-down',\n  icon: [384, 512, [8595], \"f063\", \"M169.4 470.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 370.8 224 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 306.7L54.6 265.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"]\n};\nconst faDroplet = {\n  prefix: 'fas',\n  iconName: 'droplet',\n  icon: [384, 512, [128167, \"tint\"], \"f043\", \"M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0l1.8 0c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z\"]\n};\nconst faTint = faDroplet;\nconst faEraser = {\n  prefix: 'fas',\n  iconName: 'eraser',\n  icon: [576, 512, [], \"f12d\", \"M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7L288 480l9.4 0L512 480c17.7 0 32-14.3 32-32s-14.3-32-32-32l-124.1 0L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416l-9.4 0-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z\"]\n};\nconst faEarthAmericas = {\n  prefix: 'fas',\n  iconName: 'earth-americas',\n  icon: [512, 512, [127758, \"earth\", \"earth-america\", \"globe-americas\"], \"f57d\", \"M57.7 193l9.4 16.4c8.3 14.5 21.9 25.2 38 29.8L163 255.7c17.2 4.9 29 20.6 29 38.5l0 39.9c0 11 6.2 21 16 25.9s16 14.9 16 25.9l0 39c0 15.6 14.9 26.9 29.9 22.6c16.1-4.6 28.6-17.5 32.7-33.8l2.8-11.2c4.2-16.9 15.2-31.4 30.3-40l8.1-4.6c15-8.5 24.2-24.5 24.2-41.7l0-8.3c0-12.7-5.1-24.9-14.1-33.9l-3.9-3.9c-9-9-21.2-14.1-33.9-14.1L257 256c-11.1 0-22.1-2.9-31.8-8.4l-34.5-19.7c-4.3-2.5-7.6-6.5-9.2-11.2c-3.2-9.6 1.1-20 10.2-24.5l5.9-3c6.6-3.3 14.3-3.9 21.3-1.5l23.2 7.7c8.2 2.7 17.2-.4 21.9-7.5c4.7-7 4.2-16.3-1.2-22.8l-13.6-16.3c-10-12-9.9-29.5 .3-41.3l15.7-18.3c8.8-10.3 10.2-25 3.5-36.7l-2.4-4.2c-3.5-.2-6.9-.3-10.4-.3C163.1 48 84.4 108.9 57.7 193zM464 256c0-36.8-9.6-71.4-26.4-101.5L412 164.8c-15.7 6.3-23.8 23.8-18.5 39.8l16.9 50.7c3.5 10.4 12 18.3 22.6 20.9l29.1 7.3c1.2-9 1.8-18.2 1.8-27.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faEarth = faEarthAmericas;\nconst faEarthAmerica = faEarthAmericas;\nconst faGlobeAmericas = faEarthAmericas;\nconst faPersonBurst = {\n  prefix: 'fas',\n  iconName: 'person-burst',\n  icon: [640, 512, [], \"e53b\", \"M480 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-223.1 28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6l-29.7 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L408 256.9 408 480c0 17.7 14.3 32 32 32s32-14.3 32-32zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 50.5-7.8 24.3-40.5-55.2-38L315 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74z\"]\n};\nconst faDove = {\n  prefix: 'fas',\n  iconName: 'dove',\n  icon: [512, 512, [128330], \"f4ba\", \"M160.8 96.5c14 17 31 30.9 49.5 42.2c25.9 15.8 53.7 25.9 77.7 31.6l0-31.5C265.8 108.5 250 71.5 248.6 28c-.4-11.3-7.5-21.5-18.4-24.4c-7.6-2-15.8-.2-21 5.8c-13.3 15.4-32.7 44.6-48.4 87.2zM320 144l0 30.6s0 0 0 0l0 1.3s0 0 0 0l0 32.1c-60.8-5.1-185-43.8-219.3-157.2C97.4 40 87.9 32 76.6 32c-7.9 0-15.3 3.9-18.8 11C46.8 65.9 32 112.1 32 176c0 116.9 80.1 180.5 118.4 202.8L11.8 416.6C6.7 418 2.6 421.8 .9 426.8s-.8 10.6 2.3 14.8C21.7 466.2 77.3 512 160 512c3.6 0 7.2-1.2 10-3.5L245.6 448l74.4 0c88.4 0 160-71.6 160-160l0-160 29.9-44.9c1.3-2 2.1-4.4 2.1-6.8c0-6.8-5.5-12.3-12.3-12.3L400 64c-44.2 0-80 35.8-80 80zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faBatteryEmpty = {\n  prefix: 'fas',\n  iconName: 'battery-empty',\n  icon: [576, 512, [\"battery-0\"], \"f244\", \"M80 160c-8.8 0-16 7.2-16 16l0 160c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-160c0-8.8-7.2-16-16-16L80 160zM0 176c0-44.2 35.8-80 80-80l384 0c44.2 0 80 35.8 80 80l0 16c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l0 16c0 44.2-35.8 80-80 80L80 416c-44.2 0-80-35.8-80-80L0 176z\"]\n};\nconst faBattery0 = faBatteryEmpty;\nconst faSocks = {\n  prefix: 'fas',\n  iconName: 'socks',\n  icon: [512, 512, [129510], \"f696\", \"M175.2 476.6c-9.7-18-15.2-38.7-15.2-60.6c0-40.3 19-78.2 51.2-102.4l64-48c8.1-6 12.8-15.5 12.8-25.6l0-144L128 96l0 144c0 20.1-9.5 39.1-25.6 51.2l-64 48C14.2 357.3 0 385.8 0 416c0 53 43 96 96 96c20.8 0 41-6.7 57.6-19.2l21.6-16.2zM128 64l160 0 0-16c0-14.5 3.9-28.2 10.7-39.9C291 3 281.9 0 272 0L176 0c-26.5 0-48 21.5-48 48l0 16zM320 96l0 144c0 20.1-9.5 39.1-25.6 51.2l-64 48C206.2 357.3 192 385.8 192 416c0 53 43 96 96 96c20.8 0 41-6.7 57.6-19.2l115.2-86.4C493 382.2 512 344.3 512 304l0-208L320 96zM512 64l0-16c0-26.5-21.5-48-48-48L368 0c-26.5 0-48 21.5-48 48l0 16 192 0z\"]\n};\nconst faInbox = {\n  prefix: 'fas',\n  iconName: 'inbox',\n  icon: [512, 512, [], \"f01c\", \"M121 32C91.6 32 66 52 58.9 80.5L1.9 308.4C.6 313.5 0 318.7 0 323.9L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-92.1c0-5.2-.6-10.4-1.9-15.5l-57-227.9C446 52 420.4 32 391 32L121 32zm0 64l270 0 48 192-51.2 0c-12.1 0-23.2 6.8-28.6 17.7l-14.3 28.6c-5.4 10.8-16.5 17.7-28.6 17.7l-120.4 0c-12.1 0-23.2-6.8-28.6-17.7l-14.3-28.6c-5.4-10.8-16.5-17.7-28.6-17.7L73 288 121 96z\"]\n};\nconst faSection = {\n  prefix: 'fas',\n  iconName: 'section',\n  icon: [256, 512, [], \"e447\", \"M64.9 96C67.1 84.4 73.7 76.2 86 70.6c13.8-6.2 34.8-8.9 61.2-4.5c8.8 1.4 36.1 7.1 44.1 9.3c17 4.8 34.7-5.1 39.5-22.2s-5.1-34.7-22.2-39.5c-11.1-3.1-41-9.2-50.9-10.8C123-2.7 88.3-.6 59.7 12.3C29.9 25.8 7.5 50.9 1.6 86.5c-.1 .5-.2 1.1-.2 1.6c-2.2 19.7 .3 37.9 8.1 54.1c7.7 16.1 19.4 28 32 36.9c.6 .5 1.3 .9 2 1.4C22.3 194.2 6.5 215.1 1.7 243c-.1 .6-.2 1.1-.2 1.7c-2.3 19.3 .4 37.1 8.4 53c7.9 15.6 19.8 27 32.3 35.5c22.4 15.2 51.9 24 75.4 31c0 0 0 0 0 0l3.7 1.1c27.2 8.2 46.9 14.6 59.4 23.8c5.5 4 8.2 7.6 9.5 10.9c1.3 3.2 2.6 8.6 .9 18.1c-1.7 10.1-7.7 18-20.7 23.5c-14 6-35.4 8.5-62 4.4c-12.8-2.1-35.1-9.7-54.1-16.2c0 0 0 0 0 0c-4.3-1.5-8.5-2.9-12.3-4.2C25.3 420 7.2 429.1 1.6 445.8s3.5 34.9 20.3 40.5c2.6 .8 5.7 1.9 9.2 3.1c18.6 6.3 48.5 16.6 67.3 19.6c0 0 0 0 0 0l.2 0c34.5 5.4 68.8 3.4 97.2-8.7c29.4-12.6 52.5-36.5 58.5-71.5c3.3-19.3 1.9-37.4-5-53.9c-6.3-15-16.4-26.4-27.6-35.2c16.5-13.9 28.5-33.2 32.6-58.2c3.2-19.8 1.9-38.3-4.8-55.1c-6.7-16.8-17.8-29.4-30.2-39c-22.8-17.6-53.6-27.4-77.7-35l-1.4-.5c-27.4-8.7-47.8-15.3-61.5-25c-6.1-4.4-9.5-8.5-11.4-12.4c-1.8-3.7-3.2-9.3-2.3-18.5zm76.7 208.5l-.6-.2-1.4-.4c-27.4-8.2-47.9-14.5-61.7-23.8c-6.2-4.2-9.3-7.9-11-11.3c-1.5-3-2.9-7.7-2.1-15.7c1.9-9.7 7.9-17.3 20.5-22.7c14-6 35.4-8.5 62.1-4.3l16.4 2.6c6.3 2.9 11.7 6 16.2 9.5c5.5 4.2 8.4 8.2 10 12.2c1.6 4 2.8 10.4 1.1 20.9c-2.4 14.7-12.8 26.4-37.1 31l-12.4 2.3z\"]\n};\nconst faGaugeHigh = {\n  prefix: 'fas',\n  iconName: 'gauge-high',\n  icon: [512, 512, [62461, \"tachometer-alt\", \"tachometer-alt-fast\"], \"f625\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faTachometerAlt = faGaugeHigh;\nconst faTachometerAltFast = faGaugeHigh;\nconst faEnvelopeOpenText = {\n  prefix: 'fas',\n  iconName: 'envelope-open-text',\n  icon: [512, 512, [], \"f658\", \"M215.4 96L144 96l-36.2 0L96 96l0 8.8L96 144l0 40.4 0 89L.2 202.5c1.6-18.1 10.9-34.9 25.7-45.8L48 140.3 48 96c0-26.5 21.5-48 48-48l76.6 0 49.9-36.9C232.2 3.9 243.9 0 256 0s23.8 3.9 33.5 11L339.4 48 416 48c26.5 0 48 21.5 48 48l0 44.3 22.1 16.4c14.8 10.9 24.1 27.7 25.7 45.8L416 273.4l0-89 0-40.4 0-39.2 0-8.8-11.8 0L368 96l-71.4 0-81.3 0zM0 448L0 242.1 217.6 403.3c11.1 8.2 24.6 12.7 38.4 12.7s27.3-4.4 38.4-12.7L512 242.1 512 448s0 0 0 0c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64c0 0 0 0 0 0zM176 160l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faHospital = {\n  prefix: 'fas',\n  iconName: 'hospital',\n  icon: [640, 512, [127973, 62589, \"hospital-alt\", \"hospital-wide\"], \"f0f8\", \"M192 48c0-26.5 21.5-48 48-48L400 0c26.5 0 48 21.5 48 48l0 464-80 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-80 0 0-464zM48 96l112 0 0 416L48 512c-26.5 0-48-21.5-48-48L0 320l80 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L0 288l0-64 80 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L0 192l0-48c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48l0 48-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 144c0 26.5-21.5 48-48 48l-112 0 0-416 112 0zM312 64c-8.8 0-16 7.2-16 16l0 24-24 0c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l24 0 0 24c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-24 24 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-24 0 0-24c0-8.8-7.2-16-16-16l-16 0z\"]\n};\nconst faHospitalAlt = faHospital;\nconst faHospitalWide = faHospital;\nconst faWineBottle = {\n  prefix: 'fas',\n  iconName: 'wine-bottle',\n  icon: [512, 512, [], \"f72f\", \"M393.4 9.4c12.5-12.5 32.8-12.5 45.3 0l64 64c12.5 12.5 12.5 32.8 0 45.3c-11.8 11.8-30.7 12.5-43.2 1.9l-9.5 9.5-48.8 48.8c-9.2 9.2-11.5 22.9-8.6 35.6c9.4 40.9-1.9 85.6-33.8 117.5L197.3 493.3c-25 25-65.5 25-90.5 0l-88-88c-25-25-25-65.5 0-90.5L180.2 153.3c31.9-31.9 76.6-43.1 117.5-33.8c12.6 2.9 26.4 .5 35.5-8.6l48.8-48.8 9.5-9.5c-10.6-12.6-10-31.4 1.9-43.2zM99.3 347.3l65.4 65.4c6.2 6.2 16.4 6.2 22.6 0l97.4-97.4c6.2-6.2 6.2-16.4 0-22.6l-65.4-65.4c-6.2-6.2-16.4-6.2-22.6 0L99.3 324.7c-6.2 6.2-6.2 16.4 0 22.6z\"]\n};\nconst faChessRook = {\n  prefix: 'fas',\n  iconName: 'chess-rook',\n  icon: [448, 512, [9820], \"f447\", \"M32 192L32 48c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 40c0 4.4 3.6 8 8 8l32 0c4.4 0 8-3.6 8-8l0-40c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 40c0 4.4 3.6 8 8 8l32 0c4.4 0 8-3.6 8-8l0-40c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16l0 144c0 10.1-4.7 19.6-12.8 25.6L352 256l16 144L80 400 96 256 44.8 217.6C36.7 211.6 32 202.1 32 192zm176 96l32 0c8.8 0 16-7.2 16-16l0-48c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 48c0 8.8 7.2 16 16 16zM22.6 473.4L64 432l320 0 41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6L38.6 512C26.1 512 16 501.9 16 489.4c0-6 2.4-11.8 6.6-16z\"]\n};\nconst faBarsStaggered = {\n  prefix: 'fas',\n  iconName: 'bars-staggered',\n  icon: [512, 512, [\"reorder\", \"stream\"], \"f550\", \"M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM64 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L96 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faReorder = faBarsStaggered;\nconst faStream = faBarsStaggered;\nconst faDharmachakra = {\n  prefix: 'fas',\n  iconName: 'dharmachakra',\n  icon: [512, 512, [9784], \"f655\", \"M337.8 205.7l48.6-42.5c13.8 19.3 23.4 41.9 27.4 66.2l-64.4 4.3c-2.4-10.1-6.4-19.5-11.6-28zm140.1 19.5c-5.3-38.8-20.6-74.5-43.2-104.3l.8-.7C449 108.4 449.7 87.6 437 75s-33.4-12-45.2 1.5l-.7 .8c-29.8-22.6-65.5-37.9-104.3-43.2l.1-1.1c1.2-17.9-13-33-30.9-33s-32.1 15.2-30.9 33l.1 1.1c-38.8 5.3-74.5 20.6-104.3 43.2l-.7-.8C108.4 63 87.6 62.3 75 75s-12 33.4 1.5 45.2l.8 .7c-22.6 29.8-37.9 65.5-43.2 104.3l-1.1-.1c-17.9-1.2-33 13-33 30.9s15.2 32.1 33 30.9l1.1-.1c5.3 38.8 20.6 74.5 43.2 104.3l-.8 .7C63 403.6 62.3 424.4 75 437s33.4 12 45.2-1.5l.7-.8c29.8 22.6 65.5 37.9 104.3 43.2l-.1 1.1c-1.2 17.9 13 33 30.9 33s32.1-15.2 30.9-33l-.1-1.1c38.8-5.3 74.5-20.6 104.3-43.2l.7 .8c11.8 13.5 32.5 14.2 45.2 1.5s12-33.4-1.5-45.2l-.8-.7c22.6-29.8 37.9-65.5 43.2-104.3l1.1 .1c17.9 1.2 33-13 33-30.9s-15.2-32.1-33-30.9l-1.1 .1zM163.2 125.6c19.3-13.8 41.9-23.4 66.2-27.5l4.3 64.4c-10 2.4-19.5 6.4-28 11.6l-42.5-48.6zm-65 103.8c4.1-24.4 13.7-46.9 27.5-66.2l48.6 42.5c-5.3 8.5-9.2 18-11.6 28l-64.4-4.3zm27.5 119.4c-13.8-19.3-23.4-41.9-27.5-66.2l64.4-4.3c2.4 10 6.4 19.5 11.6 28l-48.6 42.5zm103.8 65c-24.4-4.1-46.9-13.7-66.2-27.4l42.5-48.6c8.5 5.3 18 9.2 28 11.6l-4.3 64.4zm119.4-27.4c-19.3 13.8-41.9 23.4-66.2 27.4l-4.3-64.4c10-2.4 19.5-6.4 28-11.6l42.5 48.6zm65-103.8c-4.1 24.4-13.7 46.9-27.4 66.2l-48.6-42.5c5.3-8.5 9.2-18 11.6-28l64.4 4.3zm-65-156.9l-42.5 48.6c-8.5-5.3-18-9.2-28-11.6l4.3-64.4c24.4 4.1 46.9 13.7 66.2 27.5zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faHotdog = {\n  prefix: 'fas',\n  iconName: 'hotdog',\n  icon: [512, 512, [127789], \"f80f\", \"M488.6 23.4c31.2 31.2 31.2 81.9 0 113.1l-352 352c-31.2 31.2-81.9 31.2-113.1 0s-31.2-81.9 0-113.1l352-352c31.2-31.2 81.9-31.2 113.1 0zM443.3 92.7c-6.2-6.2-16.4-6.2-22.6 0c-12.5 12.5-23.8 15.1-37.5 17.6l-2.5 .4c-13.8 2.5-31.6 5.6-48 22c-16.7 16.7-20.9 36-24.1 50.9c0 0 0 0 0 0s0 0 0 0l-.2 1c-3.4 15.6-6 26.4-15.7 36.1s-20.5 12.3-36.1 15.7l-1 .2c-14.9 3.2-34.2 7.4-50.9 24.1s-20.9 36-24.1 50.9l-.2 1c-3.4 15.6-6 26.4-15.7 36.1c-9.2 9.2-18 10.8-32.7 13.4c0 0 0 0 0 0l-.9 .2c-15.6 2.8-34.9 6.9-54.4 26.4c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0c12.5-12.5 23.8-15.1 37.5-17.6l2.5-.4c13.8-2.5 31.6-5.6 48-22c16.7-16.7 20.9-36 24.1-50.9l.2-1c3.4-15.6 6-26.4 15.7-36.1s20.5-12.3 36.1-15.7l1-.2c14.9-3.2 34.2-7.4 50.9-24.1s20.9-36 24.1-50.9l.2-1c3.4-15.6 6-26.4 15.7-36.1c9.2-9.2 18-10.8 32.7-13.4l.9-.2c15.6-2.8 34.9-6.9 54.4-26.4c6.2-6.2 6.2-16.4 0-22.6zM191.2 479.2l288-288L495 207c10.9 10.9 17 25.6 17 41s-6.1 30.1-17 41L289 495c-10.9 10.9-25.6 17-41 17s-30.1-6.1-41-17l-15.8-15.8zM17 305C6.1 294.1 0 279.4 0 264s6.1-30.1 17-41L223 17C233.9 6.1 248.6 0 264 0s30.1 6.1 41 17l15.8 15.8-288 288L17 305z\"]\n};\nconst faPersonWalkingWithCane = {\n  prefix: 'fas',\n  iconName: 'person-walking-with-cane',\n  icon: [512, 512, [\"blind\"], \"f29d\", \"M176 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8.4 32c-36.4 0-69.6 20.5-85.9 53.1L35.4 273.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3L128 231.6l0 43.2c0 17 6.7 33.3 18.7 45.3L224 397.3l0 82.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-89.4c0-12.7-5.1-24.9-14.1-33.9L224 306.7l0-93.4 70.4 93.9c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8L268.8 166.4C250.7 142.2 222.2 128 192 128l-24.4 0zM128.3 346.8L97 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l22-88.2-52.8-52.8zM450.8 505.1c5 7.3 15 9.1 22.3 4s9.1-15 4-22.3L358.9 316.1c-2.8 3.8-6.1 7.3-10.1 10.3c-5 3.8-10.5 6.4-16.2 7.9L450.8 505.1z\"]\n};\nconst faBlind = faPersonWalkingWithCane;\nconst faDrum = {\n  prefix: 'fas',\n  iconName: 'drum',\n  icon: [512, 512, [129345], \"f569\", \"M501.2 76.1c11.1-7.3 14.2-22.1 6.9-33.2s-22.1-14.2-33.2-6.9L370.2 104.5C335.8 98.7 297 96 256 96C114.6 96 0 128 0 208L0 368c0 31.3 27.4 58.8 72 78.7L72 344c0-13.3 10.7-24 24-24s24 10.7 24 24l0 119.4c33 8.9 71.1 14.5 112 16.1L232 376c0-13.3 10.7-24 24-24s24 10.7 24 24l0 103.5c40.9-1.6 79-7.2 112-16.1L392 344c0-13.3 10.7-24 24-24s24 10.7 24 24l0 102.7c44.6-19.9 72-47.4 72-78.7l0-160c0-41.1-30.2-69.5-78.8-87.4l67.9-44.5zM307.4 145.6l-64.6 42.3c-11.1 7.3-14.2 22.1-6.9 33.2s22.1 14.2 33.2 6.9l111.1-72.8c14.7 3.2 27.9 7 39.4 11.5C458.4 181.8 464 197.4 464 208c0 .8-2.7 17.2-46 35.9C379.1 260.7 322 272 256 272s-123.1-11.3-162-28.1C50.7 225.2 48 208.8 48 208c0-10.6 5.6-26.2 44.4-41.3C130.6 151.9 187.8 144 256 144c18 0 35.1 .5 51.4 1.6z\"]\n};\nconst faIceCream = {\n  prefix: 'fas',\n  iconName: 'ice-cream',\n  icon: [448, 512, [127848], \"f810\", \"M367.1 160c.6-5.3 .9-10.6 .9-16C368 64.5 303.5 0 224 0S80 64.5 80 144c0 5.4 .3 10.7 .9 16l-.9 0c-26.5 0-48 21.5-48 48s21.5 48 48 48l53.5 0 181 0 53.5 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-.9 0zM96 288L200.8 497.7c4.4 8.8 13.3 14.3 23.2 14.3s18.8-5.5 23.2-14.3L352 288 96 288z\"]\n};\nconst faHeartCircleBolt = {\n  prefix: 'fas',\n  iconName: 'heart-circle-bolt',\n  icon: [576, 512, [], \"e4fc\", \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6l0-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1l0 5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356l35.6 0c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380 376 380c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"]\n};\nconst faFax = {\n  prefix: 'fas',\n  iconName: 'fax',\n  icon: [512, 512, [128224, 128439], \"f1ac\", \"M128 64l0 96 64 0 0-96 194.7 0L416 93.3l0 66.7 64 0 0-66.7c0-17-6.7-33.3-18.7-45.3L432 18.7C420 6.7 403.7 0 386.7 0L192 0c-35.3 0-64 28.7-64 64zM0 160L0 480c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32zm480 32l-352 0 0 288c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-256c0-17.7-14.3-32-32-32zM256 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM224 416a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faParagraph = {\n  prefix: 'fas',\n  iconName: 'paragraph',\n  icon: [448, 512, [182], \"f1dd\", \"M192 32l64 0 160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352-32 0 0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96-32 0c-88.4 0-160-71.6-160-160s71.6-160 160-160z\"]\n};\nconst faCheckToSlot = {\n  prefix: 'fas',\n  iconName: 'check-to-slot',\n  icon: [576, 512, [\"vote-yea\"], \"f772\", \"M96 80c0-26.5 21.5-48 48-48l288 0c26.5 0 48 21.5 48 48l0 304L96 384 96 80zm313 47c-9.4-9.4-24.6-9.4-33.9 0l-111 111-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L409 161c9.4-9.4 9.4-24.6 0-33.9zM0 336c0-26.5 21.5-48 48-48l16 0 0 128 448 0 0-128 16 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48L48 480c-26.5 0-48-21.5-48-48l0-96z\"]\n};\nconst faVoteYea = faCheckToSlot;\nconst faStarHalf = {\n  prefix: 'fas',\n  iconName: 'star-half',\n  icon: [576, 512, [61731], \"f089\", \"M288 0c-12.2 .1-23.3 7-28.6 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3L288 439.8 288 0zM429.9 512c1.1 .1 2.1 .1 3.2 0l-3.2 0z\"]\n};\nconst faBoxesStacked = {\n  prefix: 'fas',\n  iconName: 'boxes-stacked',\n  icon: [576, 512, [62625, \"boxes\", \"boxes-alt\"], \"f468\", \"M248 0L208 0c-26.5 0-48 21.5-48 48l0 112c0 35.3 28.7 64 64 64l128 0c35.3 0 64-28.7 64-64l0-112c0-26.5-21.5-48-48-48L328 0l0 80c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-80zM64 256c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-128c0-35.3-28.7-64-64-64l-40 0 0 80c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-80-40 0zM352 512l160 0c35.3 0 64-28.7 64-64l0-128c0-35.3-28.7-64-64-64l-40 0 0 80c0 8.8-7.2 16-16 16l-48 0c-8.8 0-16-7.2-16-16l0-80-40 0c-15 0-28.8 5.1-39.7 13.8c4.9 10.4 7.7 22 7.7 34.2l0 160c0 12.2-2.8 23.8-7.7 34.2C323.2 506.9 337 512 352 512z\"]\n};\nconst faBoxes = faBoxesStacked;\nconst faBoxesAlt = faBoxesStacked;\nconst faLink = {\n  prefix: 'fas',\n  iconName: 'link',\n  icon: [640, 512, [128279, \"chain\"], \"f0c1\", \"M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z\"]\n};\nconst faChain = faLink;\nconst faEarListen = {\n  prefix: 'fas',\n  iconName: 'ear-listen',\n  icon: [512, 512, [\"assistive-listening-systems\"], \"f2a2\", \"M398.3 3.4c-15.8-7.9-35-1.5-42.9 14.3c-7.9 15.8-1.5 34.9 14.2 42.9l.4 .2c.4 .2 1.1 .6 2.1 1.2c2 1.2 5 3 8.7 5.6c7.5 5.2 17.6 13.2 27.7 24.2C428.5 113.4 448 146 448 192c0 17.7 14.3 32 32 32s32-14.3 32-32c0-66-28.5-113.4-56.5-143.7C441.6 33.2 427.7 22.2 417.3 15c-5.3-3.7-9.7-6.4-13-8.3c-1.6-1-3-1.7-4-2.2c-.5-.3-.9-.5-1.2-.7l-.4-.2-.2-.1c0 0 0 0-.1 0c0 0 0 0 0 0L384 32 398.3 3.4zM128.7 227.5c6.2-56 53.7-99.5 111.3-99.5c61.9 0 112 50.1 112 112c0 29.3-11.2 55.9-29.6 75.9c-17 18.4-34.4 45.1-34.4 78l0 6.1c0 26.5-21.5 48-48 48c-17.7 0-32 14.3-32 32s14.3 32 32 32c61.9 0 112-50.1 112-112l0-6.1c0-9.8 5.4-21.7 17.4-34.7C398.3 327.9 416 286 416 240c0-97.2-78.8-176-176-176C149.4 64 74.8 132.5 65.1 220.5c-1.9 17.6 10.7 33.4 28.3 35.3s33.4-10.7 35.3-28.3zM32 512a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM192 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0zM208 240c0-17.7 14.3-32 32-32s32 14.3 32 32c0 13.3 10.7 24 24 24s24-10.7 24-24c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 13.3 10.7 24 24 24s24-10.7 24-24z\"]\n};\nconst faAssistiveListeningSystems = faEarListen;\nconst faTreeCity = {\n  prefix: 'fas',\n  iconName: 'tree-city',\n  icon: [640, 512, [], \"e587\", \"M288 48c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 144 40 0 0-72c0-13.3 10.7-24 24-24s24 10.7 24 24l0 72 24 0c26.5 0 48 21.5 48 48l0 224c0 26.5-21.5 48-48 48l-160 0-96 0c-26.5 0-48-21.5-48-48l0-416zm64 32l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM352 272l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm176-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM512 368l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM224 160c0 6-1 11-2 16c20 14 34 38 34 64c0 45-36 80-80 80l-16 0 0 160c0 18-15 32-32 32c-18 0-32-14-32-32l0-160-16 0c-45 0-80-35-80-80c0-26 13-50 33-64c-1-5-1-10-1-16c0-53 42-96 96-96c53 0 96 43 96 96z\"]\n};\nconst faPlay = {\n  prefix: 'fas',\n  iconName: 'play',\n  icon: [384, 512, [9654], \"f04b\", \"M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80L0 432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z\"]\n};\nconst faFont = {\n  prefix: 'fas',\n  iconName: 'font',\n  icon: [448, 512, [], \"f031\", \"M254 52.8C249.3 40.3 237.3 32 224 32s-25.3 8.3-30 20.8L57.8 416 32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-1.8 0 18-48 159.6 0 18 48-1.8 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-25.8 0L254 52.8zM279.8 304l-111.6 0L224 155.1 279.8 304z\"]\n};\nconst faTableCellsRowLock = {\n  prefix: 'fas',\n  iconName: 'table-cells-row-lock',\n  icon: [640, 512, [], \"e67a\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 65.1c-37.8 5.4-69.4 29.6-85.2 62.9L360 224l0 64 56 0 0 8.6c-19.1 11.1-32 31.7-32 55.4l-24 0 0 64 24 0 0 64L64 480c-35.3 0-64-28.7-64-64L0 96zM64 224l0 64 88 0 0-64-88 0zm232 0l-88 0 0 64 88 0 0-64zM152 352l-88 0 0 64 88 0 0-64zm56 0l0 64 88 0 0-64-88 0zM528 240c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faRupiahSign = {\n  prefix: 'fas',\n  iconName: 'rupiah-sign',\n  icon: [512, 512, [], \"e23d\", \"M0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320 64 320l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 288 0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80L64 96l0 160zm256-96l80 0c61.9 0 112 50.1 112 112s-50.1 112-112 112l-48 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128 0-160c0-17.7 14.3-32 32-32zm80 160c26.5 0 48-21.5 48-48s-21.5-48-48-48l-48 0 0 96 48 0z\"]\n};\nconst faMagnifyingGlass = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass',\n  icon: [512, 512, [128269, \"search\"], \"f002\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z\"]\n};\nconst faSearch = faMagnifyingGlass;\nconst faTableTennisPaddleBall = {\n  prefix: 'fas',\n  iconName: 'table-tennis-paddle-ball',\n  icon: [512, 512, [127955, \"ping-pong-paddle-ball\", \"table-tennis\"], \"f45d\", \"M416 288c-50.1 0-93.6 28.8-114.6 70.8L68.9 126.3l.6-.6 60.1-60.1c87.5-87.5 229.3-87.5 316.8 0c67.1 67.1 82.7 166.3 46.8 248.3C471.8 297.6 445 288 416 288zM49.3 151.9L290.1 392.7c-1.4 7.5-2.1 15.3-2.1 23.3c0 23.2 6.2 44.9 16.9 63.7c-3 .2-6.1 .3-9.2 .3l-2.7 0c-33.9 0-66.5-13.5-90.5-37.5l-9.8-9.8c-13.1-13.1-34.6-12.4-46.8 1.7L88.2 501c-5.8 6.7-14.2 10.7-23 11s-17.5-3.1-23.8-9.4l-32-32C3.1 464.3-.3 455.7 0 446.9s4.3-17.2 11-23l66.6-57.7c14-12.2 14.8-33.7 1.7-46.8l-9.8-9.8C45.5 285.5 32 252.9 32 219l0-2.7c0-22.8 6.1-44.9 17.3-64.3zM416 320a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"]\n};\nconst faPingPongPaddleBall = faTableTennisPaddleBall;\nconst faTableTennis = faTableTennisPaddleBall;\nconst faPersonDotsFromLine = {\n  prefix: 'fas',\n  iconName: 'person-dots-from-line',\n  icon: [576, 512, [\"diagnoses\"], \"f470\", \"M288 176A88 88 0 1 0 288 0a88 88 0 1 0 0 176zM78.7 372.9c15-12.5 50-34.4 97.3-50.1L176 432l224 0 0-109.3c47.3 15.8 82.3 37.7 97.3 50.1c20.4 17 50.6 14.2 67.6-6.1s14.2-50.6-6.1-67.6c-12-10-30.1-22.5-53.2-35C497.2 278.4 481.7 288 464 288c-26.5 0-48-21.5-48-48c0-4.3 .6-8.4 1.6-12.4C379.1 215.9 335.3 208 288 208c-60.2 0-114.9 12.9-160 29.9c0 .7 0 1.4 0 2.1c0 26.5-21.5 48-48 48c-11.8 0-22.7-4.3-31-11.4c-13.1 8.1-23.7 15.9-31.7 22.5c-20.4 17-23.1 47.2-6.1 67.6s47.2 23.1 67.6 6.1zM24 464c-13.3 0-24 10.7-24 24s10.7 24 24 24l528 0c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 464zM224 280a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM96 240a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm368 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faDiagnoses = faPersonDotsFromLine;\nconst faTrashCanArrowUp = {\n  prefix: 'fas',\n  iconName: 'trash-can-arrow-up',\n  icon: [448, 512, [\"trash-restore-alt\"], \"f82a\", \"M163.8 0L284.2 0c12.1 0 23.2 6.8 28.6 17.7L320 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 7.2-14.3C140.6 6.8 151.7 0 163.8 0zM32 128l384 0 0 320c0 35.3-28.7 64-64 64L96 512c-35.3 0-64-28.7-64-64l0-320zm192 64c-6.4 0-12.5 2.5-17 7l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L200 408c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-4.5-4.5-10.6-7-17-7z\"]\n};\nconst faTrashRestoreAlt = faTrashCanArrowUp;\nconst faNairaSign = {\n  prefix: 'fas',\n  iconName: 'naira-sign',\n  icon: [448, 512, [], \"e1f6\", \"M122.6 46.3c-7.8-11.7-22.4-17-35.9-12.9S64 49.9 64 64l0 192-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 100.2 0 97.2 145.8c7.8 11.7 22.4 17 35.9 12.9s22.7-16.5 22.7-30.6l0-128 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0 0-192c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 192-57.5 0L122.6 46.3zM305.1 320l14.9 0 0 22.3L305.1 320zM185.5 256L128 256l0-86.3L185.5 256z\"]\n};\nconst faCartArrowDown = {\n  prefix: 'fas',\n  iconName: 'cart-arrow-down',\n  icon: [576, 512, [], \"f218\", \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48l45.5 0c3.8 0 7.1 2.7 7.9 6.5l51.6 271c6.5 34 36.2 58.5 70.7 58.5L488 384c13.3 0 24-10.7 24-24s-10.7-24-24-24l-288.3 0c-11.5 0-21.4-8.2-23.6-19.5L170.7 288l288.5 0c32.6 0 61.1-21.8 69.5-53.3l41-152.3C576.6 57 557.4 32 531.1 32L360 32l0 102.1 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-64 64c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l23 23L312 32 120.1 32C111 12.8 91.6 0 69.5 0L24 0zM176 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm336-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faWalkieTalkie = {\n  prefix: 'fas',\n  iconName: 'walkie-talkie',\n  icon: [384, 512, [], \"f8ef\", \"M112 24c0-13.3-10.7-24-24-24S64 10.7 64 24l0 72L48 96C21.5 96 0 117.5 0 144L0 300.1c0 12.7 5.1 24.9 14.1 33.9l3.9 3.9c9 9 14.1 21.2 14.1 33.9L32 464c0 26.5 21.5 48 48 48l224 0c26.5 0 48-21.5 48-48l0-92.1c0-12.7 5.1-24.9 14.1-33.9l3.9-3.9c9-9 14.1-21.2 14.1-33.9L384 144c0-26.5-21.5-48-48-48l-16 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l-32 0c0-17.7-14.3-32-32-32s-32 14.3-32 32l-48 0 0-72zm0 136l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faFilePen = {\n  prefix: 'fas',\n  iconName: 'file-pen',\n  icon: [576, 512, [128221, \"file-edit\"], \"f31c\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 125.7-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\"]\n};\nconst faFileEdit = faFilePen;\nconst faReceipt = {\n  prefix: 'fas',\n  iconName: 'receipt',\n  icon: [384, 512, [129534], \"f543\", \"M14 2.2C22.5-1.7 32.5-.3 39.6 5.8L80 40.4 120.4 5.8c9-7.7 22.3-7.7 31.2 0L192 40.4 232.4 5.8c9-7.7 22.3-7.7 31.2 0L304 40.4 344.4 5.8c7.1-6.1 17.1-7.5 25.6-3.6s14 12.4 14 21.8l0 464c0 9.4-5.5 17.9-14 21.8s-18.5 2.5-25.6-3.6L304 471.6l-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L192 471.6l-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L80 471.6 39.6 506.2c-7.1 6.1-17.1 7.5-25.6 3.6S0 497.4 0 488L0 24C0 14.6 5.5 6.1 14 2.2zM96 144c-8.8 0-16 7.2-16 16s7.2 16 16 16l192 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L96 144zM80 352c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L96 336c-8.8 0-16 7.2-16 16zM96 240c-8.8 0-16 7.2-16 16s7.2 16 16 16l192 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L96 240z\"]\n};\nconst faSquarePen = {\n  prefix: 'fas',\n  iconName: 'square-pen',\n  icon: [448, 512, [\"pen-square\", \"pencil-square\"], \"f14b\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM325.8 139.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-21.4 21.4-71-71 21.4-21.4c15.6-15.6 40.9-15.6 56.6 0zM119.9 289L225.1 183.8l71 71L190.9 359.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\"]\n};\nconst faPenSquare = faSquarePen;\nconst faPencilSquare = faSquarePen;\nconst faSuitcaseRolling = {\n  prefix: 'fas',\n  iconName: 'suitcase-rolling',\n  icon: [384, 512, [], \"f5c1\", \"M144 56c0-4.4 3.6-8 8-8l80 0c4.4 0 8 3.6 8 8l0 72-96 0 0-72zm176 72l-32 0 0-72c0-30.9-25.1-56-56-56L152 0C121.1 0 96 25.1 96 56l0 72-32 0c-35.3 0-64 28.7-64 64L0 416c0 35.3 28.7 64 64 64c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0c0 17.7 14.3 32 32 32s32-14.3 32-32c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64zM112 224l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 128l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faPersonCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'person-circle-exclamation',\n  icon: [576, 512, [], \"e53f\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nconst faChevronDown = {\n  prefix: 'fas',\n  iconName: 'chevron-down',\n  icon: [512, 512, [], \"f078\", \"M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\"]\n};\nconst faBatteryFull = {\n  prefix: 'fas',\n  iconName: 'battery-full',\n  icon: [576, 512, [128267, \"battery\", \"battery-5\"], \"f240\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm368 96L96 192l0 128 352 0 0-128z\"]\n};\nconst faBattery = faBatteryFull;\nconst faBattery5 = faBatteryFull;\nconst faSkullCrossbones = {\n  prefix: 'fas',\n  iconName: 'skull-crossbones',\n  icon: [448, 512, [128369, 9760], \"f714\", \"M368 128c0 44.4-25.4 83.5-64 106.4l0 21.6c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-21.6c-38.6-23-64-62.1-64-106.4C80 57.3 144.5 0 224 0s144 57.3 144 128zM168 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm144-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM3.4 273.7c7.9-15.8 27.1-22.2 42.9-14.3L224 348.2l177.7-88.8c15.8-7.9 35-1.5 42.9 14.3s1.5 35-14.3 42.9L295.6 384l134.8 67.4c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L224 419.8 46.3 508.6c-15.8 7.9-35 1.5-42.9-14.3s-1.5-35 14.3-42.9L152.4 384 17.7 316.6C1.9 308.7-4.5 289.5 3.4 273.7z\"]\n};\nconst faCodeCompare = {\n  prefix: 'fas',\n  iconName: 'code-compare',\n  icon: [512, 512, [], \"e13a\", \"M320 488c0 9.5-5.6 18.1-14.2 21.9s-18.8 2.3-25.8-4.1l-80-72c-5.1-4.6-7.9-11-7.9-17.8s2.9-13.3 7.9-17.8l80-72c7-6.3 17.2-7.9 25.8-4.1s14.2 12.4 14.2 21.9l0 40 16 0c35.3 0 64-28.7 64-64l0-166.7C371.7 141 352 112.8 352 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3L464 320c0 70.7-57.3 128-128 128l-16 0 0 40zM456 80a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM192 24c0-9.5 5.6-18.1 14.2-21.9s18.8-2.3 25.8 4.1l80 72c5.1 4.6 7.9 11 7.9 17.8s-2.9 13.3-7.9 17.8l-80 72c-7 6.3-17.2 7.9-25.8 4.1s-14.2-12.4-14.2-21.9l0-40-16 0c-35.3 0-64 28.7-64 64l0 166.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3L48 192c0-70.7 57.3-128 128-128l16 0 0-40zM56 432a24 24 0 1 0 48 0 24 24 0 1 0 -48 0z\"]\n};\nconst faListUl = {\n  prefix: 'fas',\n  iconName: 'list-ul',\n  icon: [512, 512, [\"list-dots\"], \"f0ca\", \"M64 144a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zM64 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48-208a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faListDots = faListUl;\nconst faSchoolLock = {\n  prefix: 'fas',\n  iconName: 'school-lock',\n  icon: [640, 512, [], \"e56f\", \"M302.2 5.4c10.7-7.2 24.8-7.2 35.5 0L473.7 96 592 96c26.5 0 48 21.5 48 48l0 128c0-61.9-50.1-112-112-112s-112 50.1-112 112l0 24.6c-19.1 11.1-32 31.7-32 55.4l-63.7 0-.3 0c-35.3 0-64 28.7-64 64l0 96 64 0s0 0 0 0L48 512c-26.5 0-48-21.5-48-48L0 144c0-26.5 21.5-48 48-48l118.3 0L302.2 5.4zM80 208l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm0 128l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm240-72a88 88 0 1 0 0-176 88 88 0 1 0 0 176zm16-120l0 16 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16s16 7.2 16 16zm192 96c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80l0 48c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48z\"]\n};\nconst faTowerCell = {\n  prefix: 'fas',\n  iconName: 'tower-cell',\n  icon: [576, 512, [], \"e585\", \"M62.6 2.3C46.2-4.3 27.6 3.6 20.9 20C7.4 53.4 0 89.9 0 128s7.4 74.6 20.9 108c6.6 16.4 25.3 24.3 41.7 17.7S86.9 228.4 80.3 212C69.8 186.1 64 157.8 64 128s5.8-58.1 16.3-84C86.9 27.6 79 9 62.6 2.3zm450.8 0C497 9 489.1 27.6 495.7 44C506.2 69.9 512 98.2 512 128s-5.8 58.1-16.3 84c-6.6 16.4 1.3 35 17.7 41.7s35-1.3 41.7-17.7c13.5-33.4 20.9-69.9 20.9-108s-7.4-74.6-20.9-108C548.4 3.6 529.8-4.3 513.4 2.3zM340.1 165.2c7.5-10.5 11.9-23.3 11.9-37.2c0-35.3-28.7-64-64-64s-64 28.7-64 64c0 13.9 4.4 26.7 11.9 37.2L98.9 466.8c-7.3 16.1-.2 35.1 15.9 42.4s35.1 .2 42.4-15.9L177.7 448l220.6 0 20.6 45.2c7.3 16.1 26.3 23.2 42.4 15.9s23.2-26.3 15.9-42.4L340.1 165.2zM369.2 384l-162.4 0 14.5-32 133.3 0 14.5 32zM288 205.3L325.6 288l-75.2 0L288 205.3zM163.3 73.6c5.3-12.1-.2-26.3-12.4-31.6s-26.3 .2-31.6 12.4C109.5 77 104 101.9 104 128s5.5 51 15.3 73.6c5.3 12.1 19.5 17.7 31.6 12.4s17.7-19.5 12.4-31.6C156 165.8 152 147.4 152 128s4-37.8 11.3-54.4zM456.7 54.4c-5.3-12.1-19.5-17.7-31.6-12.4s-17.7 19.5-12.4 31.6C420 90.2 424 108.6 424 128s-4 37.8-11.3 54.4c-5.3 12.1 .2 26.3 12.4 31.6s26.3-.2 31.6-12.4C466.5 179 472 154.1 472 128s-5.5-51-15.3-73.6z\"]\n};\nconst faDownLong = {\n  prefix: 'fas',\n  iconName: 'down-long',\n  icon: [320, 512, [\"long-arrow-alt-down\"], \"f309\", \"M2 334.5c-3.8 8.8-2 19 4.6 26l136 144c4.5 4.8 10.8 7.5 17.4 7.5s12.9-2.7 17.4-7.5l136-144c6.6-7 8.4-17.2 4.6-26s-12.5-14.5-22-14.5l-72 0 0-288c0-17.7-14.3-32-32-32L128 0C110.3 0 96 14.3 96 32l0 288-72 0c-9.6 0-18.2 5.7-22 14.5z\"]\n};\nconst faLongArrowAltDown = faDownLong;\nconst faRankingStar = {\n  prefix: 'fas',\n  iconName: 'ranking-star',\n  icon: [640, 512, [], \"e561\", \"M353.8 54.1L330.2 6.3c-3.9-8.3-16.1-8.6-20.4 0L286.2 54.1l-52.3 7.5c-9.3 1.4-13.3 12.9-6.4 19.8l38 37-9 52.1c-1.4 9.3 8.2 16.5 16.8 12.2l46.9-24.8 46.6 24.4c8.6 4.3 18.3-2.9 16.8-12.2l-9-52.1 38-36.6c6.8-6.8 2.9-18.3-6.4-19.8l-52.3-7.5zM256 256c-17.7 0-32 14.3-32 32l0 192c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-192c0-17.7-14.3-32-32-32l-128 0zM32 320c-17.7 0-32 14.3-32 32L0 480c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L32 320zm416 96l0 64c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l-128 0c-17.7 0-32 14.3-32 32z\"]\n};\nconst faChessKing = {\n  prefix: 'fas',\n  iconName: 'chess-king',\n  icon: [448, 512, [9818], \"f43f\", \"M224 0c17.7 0 32 14.3 32 32l0 16 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 48 152 0c22.1 0 40 17.9 40 40c0 5.3-1 10.5-3.1 15.4L368 400 80 400 3.1 215.4C1 210.5 0 205.3 0 200c0-22.1 17.9-40 40-40l152 0 0-48-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-16c0-17.7 14.3-32 32-32zM38.6 473.4L80 432l288 0 41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6L54.6 512C42.1 512 32 501.9 32 489.4c0-6 2.4-11.8 6.6-16z\"]\n};\nconst faPersonHarassing = {\n  prefix: 'fas',\n  iconName: 'person-harassing',\n  icon: [576, 512, [], \"e549\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM59.4 304.5L88 256.9 88 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-244.7 47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7l-35.9 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9zM480 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM464 344l0 58.7-41.4-41.4c-7.3-7.3-17.6-10.6-27.8-9s-18.9 8.1-23.5 17.3l-48 96c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3L408.8 438l54.7 54.7c12.4 12.4 29.1 19.3 46.6 19.3c36.4 0 65.9-29.5 65.9-65.9L576 344c0-30.9-25.1-56-56-56s-56 25.1-56 56zM288 48c0 8.8 7.2 16 16 16l56 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-56 0c-8.8 0-16 7.2-16 16zm-.8 49.7c-7.9-4-17.5-.7-21.5 7.2s-.7 17.5 7.2 21.5l48 24c7.9 4 17.5 .7 21.5-7.2s.7-17.5-7.2-21.5l-48-24z\"]\n};\nconst faBrazilianRealSign = {\n  prefix: 'fas',\n  iconName: 'brazilian-real-sign',\n  icon: [512, 512, [], \"e46c\", \"M400 0c17.7 0 32 14.3 32 32l0 18.2c12.5 2.3 24.7 6.4 36.2 12.1l10.1 5.1c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-10.2-5.1c-9.9-5-20.9-7.5-32-7.5l-1.7 0c-29.8 0-53.9 24.1-53.9 53.9c0 22 13.4 41.8 33.9 50l52 20.8c44.7 17.9 74.1 61.2 74.1 109.4l0 3.4c0 51.2-33.6 94.6-80 109.2l0 21.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-19.4c-15-3.5-29.4-9.7-42.3-18.3l-23.4-15.6c-14.7-9.8-18.7-29.7-8.9-44.4s29.7-18.7 44.4-8.9L361.2 389c10.8 7.2 23.4 11 36.3 11c27.9 0 50.5-22.6 50.5-50.5l0-3.4c0-22-13.4-41.8-33.9-50l-52-20.8C317.3 257.4 288 214.1 288 165.9C288 114 321.5 70 368 54.2L368 32c0-17.7 14.3-32 32-32zM0 64C0 46.3 14.3 32 32 32l80 0c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320 64 320l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 288 0 64zM64 256l48 0c44.2 0 80-35.8 80-80s-35.8-80-80-80L64 96l0 160z\"]\n};\nconst faLandmarkDome = {\n  prefix: 'fas',\n  iconName: 'landmark-dome',\n  icon: [512, 512, [\"landmark-alt\"], \"f752\", \"M248 0l16 0c13.3 0 24 10.7 24 24l0 10.7C368.4 48.1 431.9 111.6 445.3 192l2.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 256c-17.7 0-32-14.3-32-32s14.3-32 32-32l2.7 0C80.1 111.6 143.6 48.1 224 34.7L224 24c0-13.3 10.7-24 24-24zM64 288l64 0 0 128 40 0 0-128 64 0 0 128 48 0 0-128 64 0 0 128 40 0 0-128 64 0 0 132.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512L32 512c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1L64 288z\"]\n};\nconst faLandmarkAlt = faLandmarkDome;\nconst faArrowUp = {\n  prefix: 'fas',\n  iconName: 'arrow-up',\n  icon: [384, 512, [8593], \"f062\", \"M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z\"]\n};\nconst faTv = {\n  prefix: 'fas',\n  iconName: 'tv',\n  icon: [640, 512, [63717, \"television\", \"tv-alt\"], \"f26c\", \"M64 64l0 288 512 0 0-288L64 64zM0 64C0 28.7 28.7 0 64 0L576 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 416c-35.3 0-64-28.7-64-64L0 64zM128 448l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-384 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faTelevision = faTv;\nconst faTvAlt = faTv;\nconst faShrimp = {\n  prefix: 'fas',\n  iconName: 'shrimp',\n  icon: [512, 512, [129424], \"e448\", \"M64 32C28.7 32 0 60.7 0 96s28.7 64 64 64l1 0c3.7 88.9 77 160 167 160l56 0 0-192-24 0L88.8 128 64 128c-17.7 0-32-14.3-32-32s14.3-32 32-32l400 0c8.8 0 16-7.2 16-16s-7.2-16-16-16L64 32zM224 456c0 13.3 10.7 24 24 24l72 0 0-72.2-64.1-22.4c-12.5-4.4-26.2 2.2-30.6 14.7s2.2 26.2 14.7 30.6l4.5 1.6C233 433.9 224 443.9 224 456zm128 23.3c36.4-3.3 69.5-17.6 96.1-39.6l-86.5-34.6c-3 1.8-6.2 3.2-9.6 4.3l0 69.9zM472.6 415c24.6-30.3 39.4-68.9 39.4-111c0-12.3-1.3-24.3-3.7-35.9L382.8 355.1c.8 3.4 1.2 7 1.2 10.6c0 4.6-.7 9-1.9 13.1L472.6 415zM336 128l-16 0 0 192 18.3 0c9.9 0 19.1 3.2 26.6 8.5l133.5-92.4C471.8 172.6 409.1 128 336 128zM168 192a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faListCheck = {\n  prefix: 'fas',\n  iconName: 'list-check',\n  icon: [512, 512, [\"tasks\"], \"f0ae\", \"M152.1 38.2c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 113C-2.3 103.6-2.3 88.4 7 79s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zm0 160c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 273c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zM224 96c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32zm0 160c0-17.7 14.3-32 32-32l224 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32zM160 416c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-288 0c-17.7 0-32-14.3-32-32zM48 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faTasks = faListCheck;\nconst faJugDetergent = {\n  prefix: 'fas',\n  iconName: 'jug-detergent',\n  icon: [384, 512, [], \"e519\", \"M96 24c0-13.3 10.7-24 24-24l80 0c13.3 0 24 10.7 24 24l0 24 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L88 96C74.7 96 64 85.3 64 72s10.7-24 24-24l8 0 0-24zM0 256c0-70.7 57.3-128 128-128l128 0c70.7 0 128 57.3 128 128l0 192c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 256zm256 0l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nconst faCircleUser = {\n  prefix: 'fas',\n  iconName: 'circle-user',\n  icon: [512, 512, [62142, \"user-circle\"], \"f2bd\", \"M399 384.2C376.9 345.8 335.4 320 288 320l-64 0c-47.4 0-88.9 25.8-111 64.2c35.2 39.2 86.2 63.8 143 63.8s107.8-24.7 143-63.8zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 16a72 72 0 1 0 0-144 72 72 0 1 0 0 144z\"]\n};\nconst faUserCircle = faCircleUser;\nconst faUserShield = {\n  prefix: 'fas',\n  iconName: 'user-shield',\n  icon: [640, 512, [], \"f505\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c1.8 0 3.5-.2 5.3-.5c-76.3-55.1-99.8-141-103.1-200.2c-16.1-4.8-33.1-7.3-50.7-7.3l-91.4 0zm308.8-78.3l-120 48C358 277.4 352 286.2 352 296c0 63.3 25.9 168.8 134.8 214.2c5.9 2.5 12.6 2.5 18.5 0C614.1 464.8 640 359.3 640 296c0-9.8-6-18.6-15.1-22.3l-120-48c-5.7-2.3-12.1-2.3-17.8 0zM591.4 312c-3.9 50.7-27.2 116.7-95.4 149.7l0-187.8L591.4 312z\"]\n};\nconst faWind = {\n  prefix: 'fas',\n  iconName: 'wind',\n  icon: [512, 512, [], \"f72e\", \"M288 32c0 17.7 14.3 32 32 32l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l320 0c53 0 96-43 96-96s-43-96-96-96L320 0c-17.7 0-32 14.3-32 32zm64 352c0 17.7 14.3 32 32 32l32 0c53 0 96-43 96-96s-43-96-96-96L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32 14.3-32 32zM128 512l32 0c53 0 96-43 96-96s-43-96-96-96L32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nconst faCarBurst = {\n  prefix: 'fas',\n  iconName: 'car-burst',\n  icon: [640, 512, [\"car-crash\"], \"f5e1\", \"M176 8c-6.6 0-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6l35.3-32.5 9.5-35.4 10.4-38.6c8-29.9 30.5-52.1 57.9-60.9l41-59.2c11.3-16.3 26.4-28.9 43.5-37.2c-.4-.6-.8-1.2-1.3-1.8c-4.1-5.1-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74C188.4 12 182.6 8 176 8zM367.7 161.5l135.6 36.3c6.5 1.8 11.3 7.4 11.8 14.2l4.6 56.5-201.5-54 32.2-46.6c3.8-5.6 10.8-8.1 17.3-6.4zm-69.9-30l-47.9 69.3c-21.6 3-40.3 18.6-46.3 41l-10.4 38.6-16.6 61.8-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9 247.3 66.3-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9L595 388l10.4-38.6c6-22.4-2.5-45.2-19.6-58.7l-6.8-84c-2.7-33.7-26.4-62-59-70.8L384.2 99.7c-32.7-8.8-67.3 4-86.5 31.8zm-17 131a24 24 0 1 1 -12.4 46.4 24 24 0 1 1 12.4-46.4zm217.9 83.2A24 24 0 1 1 545 358.1a24 24 0 1 1 -46.4-12.4z\"]\n};\nconst faCarCrash = faCarBurst;\nconst faY = {\n  prefix: 'fas',\n  iconName: 'y',\n  icon: [384, 512, [121], \"59\", \"M58 45.4C47.8 31 27.8 27.7 13.4 38S-4.3 68.2 6 82.6L160 298.3 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-149.7L378 82.6c10.3-14.4 6.9-34.4-7.4-44.6S336.2 31 326 45.4L192 232.9 58 45.4z\"]\n};\nconst faPersonSnowboarding = {\n  prefix: 'fas',\n  iconName: 'person-snowboarding',\n  icon: [512, 512, [127938, \"snowboarding\"], \"f7ce\", \"M209.7 3.4c15.8-7.9 35-1.5 42.9 14.3l25 50 42.4 8.5c19.5 3.9 37.8 12.3 53.5 24.5l126.1 98.1c14 10.9 16.5 31 5.6 44.9s-31 16.5-44.9 5.6l-72.1-56.1-71.5 31.8 33.1 27.6c23.2 19.3 33.5 50 26.7 79.4l-17.4 75.2c-2.2 9.4-8.2 16.8-16.1 21l86.5 33.1c4.6 1.8 9.4 2.6 14.3 2.6l28.2 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-28.2 0c-10.8 0-21.4-2-31.5-5.8L60.1 371.3c-11.5-4.4-22-11.2-30.8-20L7 329c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.4 22.4c4 4 8.7 7.1 14 9.1l22.4 8.6c-.8-1.6-1.5-3.2-2.1-4.9c-5.6-16.8 3.5-34.9 20.2-40.5L192 264.9l0-53.2c0-24.2 13.7-46.4 35.4-57.2l45.2-22.6-7.5-1.5c-19.4-3.9-35.9-16.5-44.7-34.1l-25-50c-7.9-15.8-1.5-35 14.3-42.9zM139 350.1l159 60.9c-2.1-5.6-2.6-11.9-1.1-18.2l17.4-75.2c1.4-5.9-.7-12-5.3-15.9l-52.8-44 0 18.8c0 20.7-13.2 39-32.8 45.5L139 350.1zM432 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faSnowboarding = faPersonSnowboarding;\nconst faTruckFast = {\n  prefix: 'fas',\n  iconName: 'truck-fast',\n  icon: [640, 512, [\"shipping-fast\"], \"f48b\", \"M112 0C85.5 0 64 21.5 64 48l0 48L16 96c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 208 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L64 160l-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l16 0 176 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L64 224l-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 144 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L64 288l0 128c0 53 43 96 96 96s96-43 96-96l128 0c0 53 43 96 96 96s96-43 96-96l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64 0-32 0-18.7c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7L416 96l0-48c0-26.5-21.5-48-48-48L112 0zM544 237.3l0 18.7-128 0 0-96 50.7 0L544 237.3zM160 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm272 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nconst faShippingFast = faTruckFast;\nconst faFish = {\n  prefix: 'fas',\n  iconName: 'fish',\n  icon: [576, 512, [128031], \"f578\", \"M180.5 141.5C219.7 108.5 272.6 80 336 80s116.3 28.5 155.5 61.5c39.1 33 66.9 72.4 81 99.8c4.7 9.2 4.7 20.1 0 29.3c-14.1 27.4-41.9 66.8-81 99.8C452.3 403.5 399.4 432 336 432s-116.3-28.5-155.5-61.5c-16.2-13.7-30.5-28.5-42.7-43.1L48.1 379.6c-12.5 7.3-28.4 5.3-38.7-4.9S-3 348.7 4.2 336.1L50 256 4.2 175.9c-7.2-12.6-5-28.4 5.3-38.6s26.1-12.2 38.7-4.9l89.7 52.3c12.2-14.6 26.5-29.4 42.7-43.1zM448 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faUserGraduate = {\n  prefix: 'fas',\n  iconName: 'user-graduate',\n  icon: [448, 512, [], \"f501\", \"M219.3 .5c3.1-.6 6.3-.6 9.4 0l200 40C439.9 42.7 448 52.6 448 64s-8.1 21.3-19.3 23.5L352 102.9l0 57.1c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-57.1L48 93.3l0 65.1 15.7 78.4c.9 4.7-.3 9.6-3.3 13.3s-7.6 5.9-12.4 5.9l-32 0c-4.8 0-9.3-2.1-12.4-5.9s-4.3-8.6-3.3-13.3L16 158.4l0-71.8C6.5 83.3 0 74.3 0 64C0 52.6 8.1 42.7 19.3 40.5l200-40zM111.9 327.7c10.5-3.4 21.8 .4 29.4 8.5l71 75.5c6.3 6.7 17 6.7 23.3 0l71-75.5c7.6-8.1 18.9-11.9 29.4-8.5C401 348.6 448 409.4 448 481.3c0 17-13.8 30.7-30.7 30.7L30.7 512C13.8 512 0 498.2 0 481.3c0-71.9 47-132.7 111.9-153.6z\"]\n};\nconst faCircleHalfStroke = {\n  prefix: 'fas',\n  iconName: 'circle-half-stroke',\n  icon: [512, 512, [9680, \"adjust\"], \"f042\", \"M448 256c0-106-86-192-192-192l0 384c106 0 192-86 192-192zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faAdjust = faCircleHalfStroke;\nconst faClapperboard = {\n  prefix: 'fas',\n  iconName: 'clapperboard',\n  icon: [512, 512, [], \"e131\", \"M448 32l-86.1 0-1 1-127 127 92.1 0 1-1L453.8 32.3c-1.9-.2-3.8-.3-5.8-.3zm64 128l0-64c0-15.1-5.3-29.1-14-40l-104 104L512 160zM294.1 32l-92.1 0-1 1L73.9 160l92.1 0 1-1 127-127zM64 32C28.7 32 0 60.7 0 96l0 64 6.1 0 1-1 127-127L64 32zM512 192L0 192 0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-224z\"]\n};\nconst faCircleRadiation = {\n  prefix: 'fas',\n  iconName: 'circle-radiation',\n  icon: [512, 512, [9762, \"radiation-alt\"], \"f7ba\", \"M256 64a192 192 0 1 1 0 384 192 192 0 1 1 0-384zm0 448A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM200 256c0-20.7 11.3-38.8 28-48.5l-36-62.3c-8.8-15.3-28.7-20.8-42-9c-25.6 22.6-43.9 53.3-50.9 88.1C95.7 241.5 110.3 256 128 256l72 0zm28 48.5l-36 62.4c-8.8 15.3-3.6 35.2 13.1 40.8c16 5.4 33.1 8.3 50.9 8.3s34.9-2.9 50.9-8.3c16.7-5.6 21.9-25.5 13.1-40.8l-36-62.4c-8.2 4.8-17.8 7.5-28 7.5s-19.8-2.7-28-7.5zM312 256l72 0c17.7 0 32.3-14.5 28.8-31.8c-7-34.8-25.3-65.5-50.9-88.1c-13.2-11.7-33.1-6.3-42 9l-36 62.3c16.7 9.7 28 27.8 28 48.5zm-56 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faRadiationAlt = faCircleRadiation;\nconst faBaseball = {\n  prefix: 'fas',\n  iconName: 'baseball',\n  icon: [512, 512, [129358, 9918, \"baseball-ball\"], \"f433\", \"M62.7 223.4c-4.8 .4-9.7 .6-14.7 .6c-15.6 0-30.8-2-45.2-5.9C19.2 107.1 107.1 19.2 218.1 2.8C222 17.2 224 32.4 224 48c0 4.9-.2 9.8-.6 14.7c-.7 8.8 5.8 16.5 14.6 17.3s16.5-5.8 17.3-14.6c.5-5.7 .7-11.5 .7-17.3c0-16.5-1.9-32.6-5.6-47.9c1.8 0 3.7-.1 5.6-.1C397.4 0 512 114.6 512 256c0 1.9 0 3.7-.1 5.6c-15.4-3.6-31.4-5.6-47.9-5.6c-5.8 0-11.6 .2-17.3 .7c-8.8 .7-15.4 8.5-14.6 17.3s8.5 15.4 17.3 14.6c4.8-.4 9.7-.6 14.7-.6c15.6 0 30.8 2 45.2 5.9C492.8 404.9 404.9 492.8 293.9 509.2C290 494.8 288 479.6 288 464c0-4.9 .2-9.8 .6-14.7c.7-8.8-5.8-16.5-14.6-17.3s-16.5 5.8-17.3 14.6c-.5 5.7-.7 11.5-.7 17.3c0 16.5 1.9 32.6 5.6 47.9c-1.8 0-3.7 .1-5.6 .1C114.6 512 0 397.4 0 256c0-1.9 0-3.7 .1-5.6C15.4 254.1 31.5 256 48 256c5.8 0 11.6-.2 17.3-.7c8.8-.7 15.4-8.5 14.6-17.3s-8.5-15.4-17.3-14.6zM121.3 208c-8 3.7-11.6 13.2-7.9 21.2s13.2 11.6 21.2 7.9c45.2-20.8 81.7-57.2 102.5-102.5c3.7-8 .2-17.5-7.9-21.2s-17.5-.2-21.2 7.9c-17.6 38.3-48.5 69.2-86.7 86.7zm277.2 74.7c-3.7-8-13.2-11.6-21.2-7.9c-45.2 20.8-81.7 57.2-102.5 102.5c-3.7 8-.2 17.5 7.9 21.2s17.5 .2 21.2-7.9c17.6-38.3 48.5-69.2 86.7-86.7c8-3.7 11.6-13.2 7.9-21.2z\"]\n};\nconst faBaseballBall = faBaseball;\nconst faJetFighterUp = {\n  prefix: 'fas',\n  iconName: 'jet-fighter-up',\n  icon: [512, 512, [], \"e518\", \"M270.7 9.7C268.2 3.8 262.4 0 256 0s-12.2 3.8-14.7 9.7L197.2 112.6c-3.4 8-5.2 16.5-5.2 25.2l0 77-144 84L48 280c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 56 0 32 0 24c0 13.3 10.7 24 24 24s24-10.7 24-24l0-8 144 0 0 32.7L133.5 468c-3.5 3-5.5 7.4-5.5 12l0 16c0 8.8 7.2 16 16 16l96 0 0-64c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64 96 0c8.8 0 16-7.2 16-16l0-16c0-4.6-2-9-5.5-12L320 416.7l0-32.7 144 0 0 8c0 13.3 10.7 24 24 24s24-10.7 24-24l0-24 0-32 0-56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 18.8-144-84 0-77c0-8.7-1.8-17.2-5.2-25.2L270.7 9.7z\"]\n};\nconst faDiagramProject = {\n  prefix: 'fas',\n  iconName: 'diagram-project',\n  icon: [576, 512, [\"project-diagram\"], \"f542\", \"M0 80C0 53.5 21.5 32 48 32l96 0c26.5 0 48 21.5 48 48l0 16 192 0 0-16c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-16-192 0 0 16c0 1.7-.1 3.4-.3 5L272 288l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96c0-1.7 .1-3.4 .3-5L144 224l-96 0c-26.5 0-48-21.5-48-48L0 80z\"]\n};\nconst faProjectDiagram = faDiagramProject;\nconst faCopy = {\n  prefix: 'fas',\n  iconName: 'copy',\n  icon: [448, 512, [], \"f0c5\", \"M208 0L332.1 0c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9L448 336c0 26.5-21.5 48-48 48l-192 0c-26.5 0-48-21.5-48-48l0-288c0-26.5 21.5-48 48-48zM48 128l80 0 0 64-64 0 0 256 192 0 0-32 64 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 176c0-26.5 21.5-48 48-48z\"]\n};\nconst faVolumeXmark = {\n  prefix: 'fas',\n  iconName: 'volume-xmark',\n  icon: [576, 512, [\"volume-mute\", \"volume-times\"], \"f6a9\", \"M301.1 34.8C312.6 40 320 51.4 320 64l0 384c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352 64 352c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l67.8 0L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM425 167l55 55 55-55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-55 55 55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-55-55-55 55c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l55-55-55-55c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"]\n};\nconst faVolumeMute = faVolumeXmark;\nconst faVolumeTimes = faVolumeXmark;\nconst faHandSparkles = {\n  prefix: 'fas',\n  iconName: 'hand-sparkles',\n  icon: [640, 512, [], \"e05d\", \"M320 0c17.7 0 32 14.3 32 32l0 208c0 8.8 7.2 16 16 16s16-7.2 16-16l0-176c0-17.7 14.3-32 32-32s32 14.3 32 32l0 176c0 8.8 7.2 16 16 16s16-7.2 16-16l0-112c0-17.7 14.3-32 32-32s32 14.3 32 32l0 195.1c-11.9 4.8-21.3 14.9-25 27.8l-8.9 31.2L478.9 391C460.6 396.3 448 413 448 432c0 18.9 12.5 35.6 30.6 40.9C448.4 497.4 409.9 512 368 512l-19.2 0c-59.6 0-116.9-22.9-160-64L76.4 341c-16-15.2-16.6-40.6-1.4-56.6s40.6-16.6 56.6-1.4l60.5 57.6c0-1.5-.1-3.1-.1-4.6l0-272c0-17.7 14.3-32 32-32s32 14.3 32 32l0 176c0 8.8 7.2 16 16 16s16-7.2 16-16l0-208c0-17.7 14.3-32 32-32zm-7.3 326.6c-1.1-3.9-4.7-6.6-8.7-6.6s-7.6 2.7-8.7 6.6L288 352l-25.4 7.3c-3.9 1.1-6.6 4.7-6.6 8.7s2.7 7.6 6.6 8.7L288 384l7.3 25.4c1.1 3.9 4.7 6.6 8.7 6.6s7.6-2.7 8.7-6.6L320 384l25.4-7.3c3.9-1.1 6.6-4.7 6.6-8.7s-2.7-7.6-6.6-8.7L320 352l-7.3-25.4zM104 120l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L104 168 90.2 216.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L56 168 7.7 154.2C3.1 152.9 0 148.7 0 144s3.1-8.9 7.7-10.2L56 120 69.8 71.7C71.1 67.1 75.3 64 80 64s8.9 3.1 10.2 7.7L104 120zM584 408l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L584 456l-13.8 48.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L536 456l-48.3-13.8c-4.6-1.3-7.7-5.5-7.7-10.2s3.1-8.9 7.7-10.2L536 408l13.8-48.3c1.3-4.6 5.5-7.7 10.2-7.7s8.9 3.1 10.2 7.7L584 408z\"]\n};\nconst faGrip = {\n  prefix: 'fas',\n  iconName: 'grip',\n  icon: [448, 512, [\"grip-horizontal\"], \"f58d\", \"M128 136c0-22.1-17.9-40-40-40L40 96C17.9 96 0 113.9 0 136l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm32-192l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM288 328c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm32-192l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM448 328c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48z\"]\n};\nconst faGripHorizontal = faGrip;\nconst faShareFromSquare = {\n  prefix: 'fas',\n  iconName: 'share-from-square',\n  icon: [576, 512, [61509, \"share-square\"], \"f14d\", \"M352 224l-46.5 0c-45 0-81.5 36.5-81.5 81.5c0 22.3 10.3 34.3 19.2 40.5c6.8 4.7 12.8 12 12.8 20.3c0 9.8-8 17.8-17.8 17.8l-2.5 0c-2.4 0-4.8-.4-7.1-1.4C210.8 374.8 128 333.4 128 240c0-79.5 64.5-144 144-144l80 0 0-61.3C352 15.5 367.5 0 386.7 0c8.6 0 16.8 3.2 23.2 8.9L548.1 133.3c7.6 6.8 11.9 16.5 11.9 26.7s-4.3 19.9-11.9 26.7l-139 125.1c-5.9 5.3-13.5 8.2-21.4 8.2l-3.7 0c-17.7 0-32-14.3-32-32l0-64zM80 96c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-48c0-17.7 14.3-32 32-32s32 14.3 32 32l0 48c0 44.2-35.8 80-80 80L80 512c-44.2 0-80-35.8-80-80L0 112C0 67.8 35.8 32 80 32l48 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 96z\"]\n};\nconst faShareSquare = faShareFromSquare;\nconst faChildCombatant = {\n  prefix: 'fas',\n  iconName: 'child-combatant',\n  icon: [576, 512, [\"child-rifle\"], \"e4e0\", \"M176 128A64 64 0 1 0 176 0a64 64 0 1 0 0 128zm-8 352l0-128 16 0 0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-179.5L260.9 321c9.4 15 29.2 19.4 44.1 10s19.4-29.2 10-44.1l-51.7-82.1c-17.6-27.9-48.3-44.9-81.2-44.9l-12.3 0c-33 0-63.7 16.9-81.2 44.9L36.9 287c-9.4 15-4.9 34.7 10 44.1s34.7 4.9 44.1-10L104 300.5 104 480c0 17.7 14.3 32 32 32s32-14.3 32-32zM448 0L432 0 416 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l0 100.3c-9.6 5.5-16 15.9-16 27.7l0 32c-17.7 0-32 14.3-32 32l0 144c0 17.7 14.3 32 32 32l16 0 0 96c0 8.8 7.2 16 16 16l59.5 0c10.4 0 18-9.8 15.5-19.9L484 400l44 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-48 0 0-26.7 53.1-17.7c6.5-2.2 10.9-8.3 10.9-15.2l0-84.5c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16l0 56-16 5.3L480 160c0-11.8-6.4-22.2-16-27.7L464 16c0-8.8-7.2-16-16-16z\"]\n};\nconst faChildRifle = faChildCombatant;\nconst faGun = {\n  prefix: 'fas',\n  iconName: 'gun',\n  icon: [576, 512, [], \"e19b\", \"M528 56c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 8L32 64C14.3 64 0 78.3 0 96L0 208c0 17.7 14.3 32 32 32l10 0c20.8 0 36.1 19.6 31 39.8L33 440.2c-2.4 9.6-.2 19.7 5.8 27.5S54.1 480 64 480l96 0c14.7 0 27.5-10 31-24.2L217 352l104.5 0c23.7 0 44.8-14.9 52.7-37.2L400.9 240l31.1 0c8.5 0 16.6-3.4 22.6-9.4L477.3 208l66.7 0c17.7 0 32-14.3 32-32l0-80c0-17.7-14.3-32-32-32l-16 0 0-8zM321.4 304L229 304l16-64 105 0-21 58.7c-1.1 3.2-4.2 5.3-7.5 5.3zM80 128l384 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 160c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faSquarePhone = {\n  prefix: 'fas',\n  iconName: 'square-phone',\n  icon: [448, 512, [\"phone-square\"], \"f098\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm90.7 96.7c9.7-2.6 19.9 2.3 23.7 11.6l20 48c3.4 8.2 1 17.6-5.8 23.2L168 231.7c16.6 35.2 45.1 63.7 80.3 80.3l20.2-24.7c5.6-6.8 15-9.2 23.2-5.8l48 20c9.3 3.9 14.2 14 11.6 23.7l-12 44C336.9 378 329 384 320 384C196.3 384 96 283.7 96 160c0-9 6-16.9 14.7-19.3l44-12z\"]\n};\nconst faPhoneSquare = faSquarePhone;\nconst faPlus = {\n  prefix: 'fas',\n  iconName: 'plus',\n  icon: [448, 512, [10133, 61543, \"add\"], \"2b\", \"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 144L48 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l144 0 0 144c0 17.7 14.3 32 32 32s32-14.3 32-32l0-144 144 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-144 0 0-144z\"]\n};\nconst faAdd = faPlus;\nconst faExpand = {\n  prefix: 'fas',\n  iconName: 'expand',\n  icon: [448, 512, [], \"f065\", \"M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z\"]\n};\nconst faComputer = {\n  prefix: 'fas',\n  iconName: 'computer',\n  icon: [640, 512, [], \"e4e5\", \"M384 96l0 224L64 320 64 96l320 0zM64 32C28.7 32 0 60.7 0 96L0 320c0 35.3 28.7 64 64 64l117.3 0-10.7 32L96 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-74.7 0-10.7-32L384 384c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L64 32zm464 0c-26.5 0-48 21.5-48 48l0 352c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48l-64 0zm16 64l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm-16 80c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faXmark = {\n  prefix: 'fas',\n  iconName: 'xmark',\n  icon: [384, 512, [128473, 10005, 10006, 10060, 215, \"close\", \"multiply\", \"remove\", \"times\"], \"f00d\", \"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z\"]\n};\nconst faClose = faXmark;\nconst faMultiply = faXmark;\nconst faRemove = faXmark;\nconst faTimes = faXmark;\nconst faArrowsUpDownLeftRight = {\n  prefix: 'fas',\n  iconName: 'arrows-up-down-left-right',\n  icon: [512, 512, [\"arrows\"], \"f047\", \"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l9.4-9.4L224 224l-114.7 0 9.4-9.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4L224 288l0 114.7-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-9.4 9.4L288 288l114.7 0-9.4 9.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4L288 224l0-114.7 9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64z\"]\n};\nconst faArrows = faArrowsUpDownLeftRight;\nconst faChalkboardUser = {\n  prefix: 'fas',\n  iconName: 'chalkboard-user',\n  icon: [640, 512, [\"chalkboard-teacher\"], \"f51c\", \"M160 64c0-35.3 28.7-64 64-64L576 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64l-239.2 0c-11.8-25.5-29.9-47.5-52.4-64l99.6 0 0-32c0-17.7 14.3-32 32-32l64 0c17.7 0 32 14.3 32 32l0 32 64 0 0-288L224 64l0 49.1C205.2 102.2 183.3 96 160 96l0-32zm0 64a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM133.3 352l53.3 0C260.3 352 320 411.7 320 485.3c0 14.7-11.9 26.7-26.7 26.7L26.7 512C11.9 512 0 500.1 0 485.3C0 411.7 59.7 352 133.3 352z\"]\n};\nconst faChalkboardTeacher = faChalkboardUser;\nconst faPesoSign = {\n  prefix: 'fas',\n  iconName: 'peso-sign',\n  icon: [384, 512, [], \"e222\", \"M64 32C46.3 32 32 46.3 32 64l0 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 64 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 80 0c68.4 0 127.7-39 156.8-96l19.2 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-.7 0c.5-5.3 .7-10.6 .7-16s-.2-10.7-.7-16l.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-19.2 0C303.7 71 244.4 32 176 32L64 32zm190.4 96L96 128l0-32 80 0c30.5 0 58.2 12.2 78.4 32zM96 192l190.9 0c.7 5.2 1.1 10.6 1.1 16s-.4 10.8-1.1 16L96 224l0-32zm158.4 96c-20.2 19.8-47.9 32-78.4 32l-80 0 0-32 158.4 0z\"]\n};\nconst faBuildingShield = {\n  prefix: 'fas',\n  iconName: 'building-shield',\n  icon: [576, 512, [], \"e4d8\", \"M0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 159-42.4 17L304 224l-32 0c-8.8 0-16 7.2-16 16l0 32 0 24.2 0 7.8c0 .9 .1 1.7 .2 2.6c2.3 58.1 24.1 144.8 98.7 201.5c-5.8 2.5-12.2 3.9-18.9 3.9l-96 0 0-80c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 80-96 0c-26.5 0-48-21.5-48-48L0 48zM80 224c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM64 112l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16L80 96c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm80 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM423.1 225.7c5.7-2.3 12.1-2.3 17.8 0l120 48C570 277.4 576 286.2 576 296c0 63.3-25.9 168.8-134.8 214.2c-5.9 2.5-12.6 2.5-18.5 0C313.9 464.8 288 359.3 288 296c0-9.8 6-18.6 15.1-22.3l120-48zM527.4 312L432 273.8l0 187.8c68.2-33 91.5-99 95.4-149.7z\"]\n};\nconst faBaby = {\n  prefix: 'fas',\n  iconName: 'baby',\n  icon: [448, 512, [], \"f77c\", \"M152 88a72 72 0 1 1 144 0A72 72 0 1 1 152 88zM39.7 144.5c13-17.9 38-21.8 55.9-8.8L131.8 162c26.8 19.5 59.1 30 92.2 30s65.4-10.5 92.2-30l36.2-26.4c17.9-13 42.9-9 55.9 8.8s9 42.9-8.8 55.9l-36.2 26.4c-13.6 9.9-28.1 18.2-43.3 25l0 36.3-192 0 0-36.3c-15.2-6.7-29.7-15.1-43.3-25L48.5 200.3c-17.9-13-21.8-38-8.8-55.9zm89.8 184.8l60.6 53-26 37.2 24.3 24.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-48-48C70 438.6 68.1 417 79.2 401.1l50.2-71.8zm128.5 53l60.6-53 50.2 71.8c11.1 15.9 9.2 37.5-4.5 51.2l-48 48c-15.6 15.6-40.9 15.6-56.6 0s-15.6-40.9 0-56.6L284 419.4l-26-37.2z\"]\n};\nconst faUsersLine = {\n  prefix: 'fas',\n  iconName: 'users-line',\n  icon: [640, 512, [], \"e592\", \"M211.2 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM32 256c0 17.7 14.3 32 32 32l85.6 0c10.1-39.4 38.6-71.5 75.8-86.6c-9.7-6-21.2-9.4-33.4-9.4l-96 0c-35.3 0-64 28.7-64 64zm461.6 32l82.4 0c17.7 0 32-14.3 32-32c0-35.3-28.7-64-64-64l-96 0c-11.7 0-22.7 3.1-32.1 8.6c38.1 14.8 67.4 47.3 77.7 87.4zM391.2 226.4c-6.9-1.6-14.2-2.4-21.6-2.4l-96 0c-8.5 0-16.7 1.1-24.5 3.1c-30.8 8.1-55.6 31.1-66.1 60.9c-3.5 10-5.5 20.8-5.5 32c0 17.7 14.3 32 32 32l224 0c17.7 0 32-14.3 32-32c0-11.2-1.9-22-5.5-32c-10.8-30.7-36.8-54.2-68.9-61.6zM563.2 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM321.6 192a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l576 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416z\"]\n};\nconst faQuoteLeft = {\n  prefix: 'fas',\n  iconName: 'quote-left',\n  icon: [448, 512, [8220, \"quote-left-alt\"], \"f10d\", \"M0 216C0 149.7 53.7 96 120 96l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-30.9 0-56 25.1-56 56l0 8 64 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64l0-32 0-32 0-72zm256 0c0-66.3 53.7-120 120-120l8 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-8 0c-30.9 0-56 25.1-56 56l0 8 64 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64l-64 0c-35.3 0-64-28.7-64-64l0-32 0-32 0-72z\"]\n};\nconst faQuoteLeftAlt = faQuoteLeft;\nconst faTractor = {\n  prefix: 'fas',\n  iconName: 'tractor',\n  icon: [640, 512, [128668], \"f722\", \"M96 64c0-35.3 28.7-64 64-64L266.3 0c26.2 0 49.7 15.9 59.4 40.2L373.7 160 480 160l0-33.8c0-24.8 5.8-49.3 16.9-71.6l2.5-5c7.9-15.8 27.1-22.2 42.9-14.3s22.2 27.1 14.3 42.9l-2.5 5c-6.7 13.3-10.1 28-10.1 42.9l0 33.8 56 0c22.1 0 40 17.9 40 40l0 45.4c0 16.5-8.5 31.9-22.6 40.7l-43.3 27.1c-14.2-5.9-29.8-9.2-46.1-9.2c-39.3 0-74.1 18.9-96 48l-80 0c0 17.7-14.3 32-32 32l-8.2 0c-1.7 4.8-3.7 9.5-5.8 14.1l5.8 5.8c12.5 12.5 12.5 32.8 0 45.3l-22.6 22.6c-12.5 12.5-32.8 12.5-45.3 0l-5.8-5.8c-4.6 2.2-9.3 4.1-14.1 5.8l0 8.2c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-8.2c-4.8-1.7-9.5-3.7-14.1-5.8l-5.8 5.8c-12.5 12.5-32.8 12.5-45.3 0L40.2 449.1c-12.5-12.5-12.5-32.8 0-45.3l5.8-5.8c-2.2-4.6-4.1-9.3-5.8-14.1L32 384c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32l8.2 0c1.7-4.8 3.7-9.5 5.8-14.1l-5.8-5.8c-12.5-12.5-12.5-32.8 0-45.3l22.6-22.6c9-9 21.9-11.5 33.1-7.6l0-.6 0-32 0-96zm170.3 0L160 64l0 96 32 0 112.7 0L266.3 64zM176 256a80 80 0 1 0 0 160 80 80 0 1 0 0-160zM528 448a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0 64c-48.6 0-88-39.4-88-88c0-29.8 14.8-56.1 37.4-72c14.3-10.1 31.8-16 50.6-16c2.7 0 5.3 .1 7.9 .3c44.9 4 80.1 41.7 80.1 87.7c0 48.6-39.4 88-88 88z\"]\n};\nconst faTrashArrowUp = {\n  prefix: 'fas',\n  iconName: 'trash-arrow-up',\n  icon: [448, 512, [\"trash-restore\"], \"f829\", \"M163.8 0L284.2 0c12.1 0 23.2 6.8 28.6 17.7L320 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64S14.3 32 32 32l96 0 7.2-14.3C140.6 6.8 151.7 0 163.8 0zM32 128l384 0L394.8 467c-1.6 25.3-22.6 45-47.9 45l-245.8 0c-25.3 0-46.3-19.7-47.9-45L32 128zm192 64c-6.4 0-12.5 2.5-17 7l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39L200 408c0 13.3 10.7 24 24 24s24-10.7 24-24l0-134.1 39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-4.5-4.5-10.6-7-17-7z\"]\n};\nconst faTrashRestore = faTrashArrowUp;\nconst faArrowDownUpLock = {\n  prefix: 'fas',\n  iconName: 'arrow-down-up-lock',\n  icon: [640, 512, [], \"e4b0\", \"M150.6 502.6l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 402.7 160 288l256 0 0-16c0-17.2 3.9-33.5 10.8-48L352 224l0-114.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-6-6-14.1-9.4-22.6-9.4s-16.6 3.4-22.6 9.4l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 109.3 288 224l-128 0-64 0-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 114.7L54.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0zM160 192l0-128c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 128 64 0zM288 320l0 128c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128-64 0zm240-80c17.7 0 32 14.3 32 32l0 48-64 0 0-48c0-17.7 14.3-32 32-32zm-80 32l0 48c-17.7 0-32 14.3-32 32l0 128c0 17.7 14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-128c0-17.7-14.3-32-32-32l0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"]\n};\nconst faLinesLeaning = {\n  prefix: 'fas',\n  iconName: 'lines-leaning',\n  icon: [384, 512, [], \"e51e\", \"M190.4 74.1c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2l-128 384c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l128-384zm70.9-41.7c-17.4-2.9-33.9 8.9-36.8 26.3l-64 384c-2.9 17.4 8.9 33.9 26.3 36.8s33.9-8.9 36.8-26.3l64-384c2.9-17.4-8.9-33.9-26.3-36.8zM352 32c-17.7 0-32 14.3-32 32l0 384c0 17.7 14.3 32 32 32s32-14.3 32-32l0-384c0-17.7-14.3-32-32-32z\"]\n};\nconst faRulerCombined = {\n  prefix: 'fas',\n  iconName: 'ruler-combined',\n  icon: [512, 512, [], \"f546\", \"M.2 468.9C2.7 493.1 23.1 512 48 512l96 0 320 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-48c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 368l0 96c0 1.7 .1 3.3 .2 4.9z\"]\n};\nconst faCopyright = {\n  prefix: 'fas',\n  iconName: 'copyright',\n  icon: [512, 512, [169], \"f1f9\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM199.4 312.6c31.2 31.2 81.9 31.2 113.1 0c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-50 50-131 50-181 0s-50-131 0-181s131-50 181 0c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-31.2-31.2-81.9-31.2-113.1 0s-31.2 81.9 0 113.1z\"]\n};\nconst faEquals = {\n  prefix: 'fas',\n  iconName: 'equals',\n  icon: [448, 512, [62764], \"3d\", \"M48 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l352 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L48 128zm0 192c-17.7 0-32 14.3-32 32s14.3 32 32 32l352 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L48 320z\"]\n};\nconst faBlender = {\n  prefix: 'fas',\n  iconName: 'blender',\n  icon: [512, 512, [], \"f517\", \"M0 64C0 28.7 28.7 0 64 0l64 0 32 0L470.1 0c21.1 0 36.4 20.1 30.9 40.4L494.5 64 336 64c-8.8 0-16 7.2-16 16s7.2 16 16 16l149.8 0-17.5 64L336 160c-8.8 0-16 7.2-16 16s7.2 16 16 16l123.6 0-17.5 64L336 256c-8.8 0-16 7.2-16 16s7.2 16 16 16l97.5 0L416 352l-256 0-8.7-96L64 256c-35.3 0-64-28.7-64-64L0 64zM145.5 192L133.8 64 64 64l0 128 81.5 0zM144 384l288 0c26.5 0 48 21.5 48 48l0 32c0 26.5-21.5 48-48 48l-288 0c-26.5 0-48-21.5-48-48l0-32c0-26.5 21.5-48 48-48zm144 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faTeeth = {\n  prefix: 'fas',\n  iconName: 'teeth',\n  icon: [576, 512, [], \"f62e\", \"M0 128C0 75 43 32 96 32l384 0c53 0 96 43 96 96l0 256c0 53-43 96-96 96L96 480c-53 0-96-43-96-96L0 128zm176 48l0 56c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-56c0-26.5-21.5-48-48-48s-48 21.5-48 48zm176-48c-26.5 0-48 21.5-48 48l0 56c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-56c0-26.5-21.5-48-48-48zM48 208l0 24c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-24c0-26.5-21.5-48-48-48s-48 21.5-48 48zM96 384c26.5 0 48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24c0 26.5 21.5 48 48 48zm80-48c0 26.5 21.5 48 48 48s48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24zm176 48c26.5 0 48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24c0 26.5 21.5 48 48 48zm80-176l0 24c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-24c0-26.5-21.5-48-48-48s-48 21.5-48 48zm48 176c26.5 0 48-21.5 48-48l0-24c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24l0 24c0 26.5 21.5 48 48 48z\"]\n};\nconst faShekelSign = {\n  prefix: 'fas',\n  iconName: 'shekel-sign',\n  icon: [448, 512, [8362, \"ils\", \"shekel\", \"sheqel\", \"sheqel-sign\"], \"f20b\", \"M32 32C14.3 32 0 46.3 0 64L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32L64 96l128 0c35.3 0 64 28.7 64 64l0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-160c0-70.7-57.3-128-128-128L32 32zM320 480c70.7 0 128-57.3 128-128l0-288c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 288c0 35.3-28.7 64-64 64l-128 0 0-224c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l160 0z\"]\n};\nconst faIls = faShekelSign;\nconst faShekel = faShekelSign;\nconst faSheqel = faShekelSign;\nconst faSheqelSign = faShekelSign;\nconst faMap = {\n  prefix: 'fas',\n  iconName: 'map',\n  icon: [576, 512, [128506, 62072], \"f279\", \"M384 476.1L192 421.2l0-385.3L384 90.8l0 385.3zm32-1.2l0-386.5L543.1 37.5c15.8-6.3 32.9 5.3 32.9 22.3l0 334.8c0 9.8-6 18.6-15.1 22.3L416 474.8zM15.1 95.1L160 37.2l0 386.5L32.9 474.5C17.1 480.8 0 469.2 0 452.2L0 117.4c0-9.8 6-18.6 15.1-22.3z\"]\n};\nconst faRocket = {\n  prefix: 'fas',\n  iconName: 'rocket',\n  icon: [512, 512, [], \"f135\", \"M156.6 384.9L125.7 354c-8.5-8.5-11.5-20.8-7.7-32.2c3-8.9 7-20.5 11.8-33.8L24 288c-8.6 0-16.6-4.6-20.9-12.1s-4.2-16.7 .2-24.1l52.5-88.5c13-21.9 36.5-35.3 61.9-35.3l82.3 0c2.4-4 4.8-7.7 7.2-11.3C289.1-4.1 411.1-8.1 483.9 5.3c11.6 2.1 20.6 11.2 22.8 22.8c13.4 72.9 9.3 194.8-111.4 276.7c-3.5 2.4-7.3 4.8-11.3 7.2l0 82.3c0 25.4-13.4 49-35.3 61.9l-88.5 52.5c-7.4 4.4-16.6 4.5-24.1 .2s-12.1-12.2-12.1-20.9l0-107.2c-14.1 4.9-26.4 8.9-35.7 11.9c-11.2 3.6-23.4 .5-31.8-7.8zM384 168a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nconst faPhotoFilm = {\n  prefix: 'fas',\n  iconName: 'photo-film',\n  icon: [640, 512, [\"photo-video\"], \"f87c\", \"M256 0L576 0c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-320 0c-35.3 0-64-28.7-64-64l0-224c0-35.3 28.7-64 64-64zM476 106.7C471.5 100 464 96 456 96s-15.5 4-20 10.7l-56 84L362.7 169c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6l80 0 48 0 144 0c8.9 0 17-4.9 21.2-12.7s3.7-17.3-1.2-24.6l-96-144zM336 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM64 128l96 0 0 256 0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32 160 0 0 64c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 192c0-35.3 28.7-64 64-64zm8 64c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0zm0 104c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0zm0 104c-8.8 0-16 7.2-16 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0zm336 16l0 16c0 8.8 7.2 16 16 16l16 0c8.8 0 16-7.2 16-16l0-16c0-8.8-7.2-16-16-16l-16 0c-8.8 0-16 7.2-16 16z\"]\n};\nconst faPhotoVideo = faPhotoFilm;\nconst faFolderMinus = {\n  prefix: 'fas',\n  iconName: 'folder-minus',\n  icon: [512, 512, [], \"f65d\", \"M448 480L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l128 0c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8l160 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64zM184 272c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nconst faHexagonNodesBolt = {\n  prefix: 'fas',\n  iconName: 'hexagon-nodes-bolt',\n  icon: [576, 512, [], \"e69a\", \"M248 106.6c18.9-9 32-28.3 32-50.6c0-30.9-25.1-56-56-56s-56 25.1-56 56c0 22.3 13.1 41.6 32 50.6l0 98.8c-2.8 1.3-5.5 2.9-8 4.7l-80.1-45.8c1.6-20.8-8.6-41.6-27.9-52.8C57.2 96 23 105.2 7.5 132S1.2 193 28 208.5c1.3 .8 2.6 1.5 4 2.1l0 90.8c-1.3 .6-2.7 1.3-4 2.1C1.2 319-8 353.2 7.5 380S57.2 416 84 400.5c19.3-11.1 29.4-32 27.8-52.8l50.5-28.9c-11.5-11.2-19.9-25.6-23.8-41.7L88 306.1c-2.6-1.8-5.2-3.3-8-4.7l0-90.8c2.8-1.3 5.5-2.9 8-4.7l80.1 45.8c-.1 1.4-.2 2.8-.2 4.3c0 22.3 13.1 41.6 32 50.6l0 98.8c-18.9 9-32 28.3-32 50.6c0 30.9 25.1 56 56 56c30.7 0 55.6-24.7 56-55.2c-7.5-12.9-13.5-26.8-17.6-41.5c-4.2-4-9.1-7.3-14.4-9.9l0-98.8c2.8-1.3 5.5-2.9 8-4.7l10.5 6c5.5-15.3 13.1-29.5 22.4-42.5l-9.1-5.2c.1-1.4 .2-2.8 .2-4.3c0-22.3-13.1-41.6-32-50.6l0-98.8zM440.5 132C425 105.2 390.8 96 364 111.5c-19.3 11.1-29.4 32-27.8 52.8l-50.6 28.9c11.5 11.2 19.9 25.6 23.8 41.7L360 205.9c.4 .3 .8 .6 1.3 .9c21.7-9.5 45.6-14.8 70.8-14.8c2 0 4 0 5.9 .1c12.1-17.3 13.8-40.6 2.6-60.1zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356l35.6 0c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380 376 380c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"]\n};\nconst faStore = {\n  prefix: 'fas',\n  iconName: 'store',\n  icon: [576, 512, [], \"f54e\", \"M547.6 103.8L490.3 13.1C485.2 5 476.1 0 466.4 0L109.6 0C99.9 0 90.8 5 85.7 13.1L28.3 103.8c-29.6 46.8-3.4 111.9 51.9 119.4c4 .5 8.1 .8 12.1 .8c26.1 0 49.3-11.4 65.2-29c15.9 17.6 39.1 29 65.2 29c26.1 0 49.3-11.4 65.2-29c15.9 17.6 39.1 29 65.2 29c26.2 0 49.3-11.4 65.2-29c16 17.6 39.1 29 65.2 29c4.1 0 8.1-.3 12.1-.8c55.5-7.4 81.8-72.5 52.1-119.4zM499.7 254.9c0 0 0 0-.1 0c-5.3 .7-10.7 1.1-16.2 1.1c-12.4 0-24.3-1.9-35.4-5.3L448 384l-320 0 0-133.4c-11.2 3.5-23.2 5.4-35.6 5.4c-5.5 0-11-.4-16.3-1.1l-.1 0c-4.1-.6-8.1-1.3-12-2.3L64 384l0 64c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-64 0-131.4c-4 1-8 1.8-12.3 2.3z\"]\n};\nconst faArrowTrendUp = {\n  prefix: 'fas',\n  iconName: 'arrow-trend-up',\n  icon: [576, 512, [], \"e098\", \"M384 160c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-82.7L342.6 374.6c-12.5 12.5-32.8 12.5-45.3 0L192 269.3 54.6 406.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160c12.5-12.5 32.8-12.5 45.3 0L320 306.7 466.7 160 384 160z\"]\n};\nconst faPlugCircleMinus = {\n  prefix: 'fas',\n  iconName: 'plug-circle-minus',\n  icon: [576, 512, [], \"e55e\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l128 0c8.8 0 16 7.2 16 16z\"]\n};\nconst faSignHanging = {\n  prefix: 'fas',\n  iconName: 'sign-hanging',\n  icon: [512, 512, [\"sign\"], \"f4d9\", \"M96 0c17.7 0 32 14.3 32 32l0 32 352 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-352 0 0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352-32 0C14.3 128 0 113.7 0 96S14.3 64 32 64l32 0 0-32C64 14.3 78.3 0 96 0zm96 160l256 0c17.7 0 32 14.3 32 32l0 160c0 17.7-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32z\"]\n};\nconst faSign = faSignHanging;\nconst faBezierCurve = {\n  prefix: 'fas',\n  iconName: 'bezier-curve',\n  icon: [640, 512, [], \"f55b\", \"M296 136l0-48 48 0 0 48-48 0zM288 32c-26.5 0-48 21.5-48 48l0 4L121.6 84C111.2 62.7 89.3 48 64 48C28.7 48 0 76.7 0 112s28.7 64 64 64c25.3 0 47.2-14.7 57.6-36l66.9 0c-58.9 39.6-98.9 105-104 180L80 320c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-3.3 0c5.9-67 48.5-123.4 107.5-149.1c8.6 12.7 23.2 21.1 39.8 21.1l64 0c16.6 0 31.1-8.4 39.8-21.1c59 25.7 101.6 82.1 107.5 149.1l-3.3 0c-26.5 0-48 21.5-48 48l0 64c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-64c0-26.5-21.5-48-48-48l-4.5 0c-5-75-45.1-140.4-104-180l66.9 0c10.4 21.3 32.3 36 57.6 36c35.3 0 64-28.7 64-64s-28.7-64-64-64c-25.3 0-47.2 14.7-57.6 36L400 84l0-4c0-26.5-21.5-48-48-48l-64 0zM88 376l48 0 0 48-48 0 0-48zm416 48l0-48 48 0 0 48-48 0z\"]\n};\nconst faBellSlash = {\n  prefix: 'fas',\n  iconName: 'bell-slash',\n  icon: [640, 512, [128277, 61943], \"f1f6\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-90.2-70.7c.2-.4 .4-.9 .6-1.3c5.2-11.5 3.1-25-5.3-34.4l-7.4-8.3C497.3 319.2 480 273.9 480 226.8l0-18.8c0-77.4-55-142-128-156.8L352 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 19.2c-42.6 8.6-79 34.2-102 69.3L38.8 5.1zM406.2 416L160 222.1l0 4.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S115.4 416 128 416l278.2 0zm-40.9 77.3c12-12 18.7-28.3 18.7-45.3l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z\"]\n};\nconst faTablet = {\n  prefix: 'fas',\n  iconName: 'tablet',\n  icon: [448, 512, [\"tablet-android\"], \"f3fb\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64L64 0zM176 432l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faTabletAndroid = faTablet;\nconst faSchoolFlag = {\n  prefix: 'fas',\n  iconName: 'school-flag',\n  icon: [576, 512, [], \"e56e\", \"M288 0L400 0c8.8 0 16 7.2 16 16l0 64c0 8.8-7.2 16-16 16l-79.3 0 89.6 64L512 160c35.3 0 64 28.7 64 64l0 224c0 35.3-28.7 64-64 64l-176 0 0-112c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 112L64 512c-35.3 0-64-28.7-64-64L0 224c0-35.3 28.7-64 64-64l101.7 0L256 95.5 256 32c0-17.7 14.3-32 32-32zm48 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM80 224c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0zm368 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM80 352c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0zm384 0c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-64c0-8.8-7.2-16-16-16l-32 0z\"]\n};\nconst faFill = {\n  prefix: 'fas',\n  iconName: 'fill',\n  icon: [512, 512, [], \"f575\", \"M86.6 9.4C74.1-3.1 53.9-3.1 41.4 9.4s-12.5 32.8 0 45.3L122.7 136 30.6 228.1c-37.5 37.5-37.5 98.3 0 135.8L148.1 481.4c37.5 37.5 98.3 37.5 135.8 0L474.3 290.9c28.1-28.1 28.1-73.7 0-101.8L322.9 37.7c-28.1-28.1-73.7-28.1-101.8 0L168 90.7 86.6 9.4zM168 181.3l49.4 49.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L213.3 136l53.1-53.1c3.1-3.1 8.2-3.1 11.3 0L429.1 234.3c3.1 3.1 3.1 8.2 0 11.3L386.7 288 67.5 288c1.4-5.4 4.2-10.4 8.4-14.6L168 181.3z\"]\n};\nconst faAngleUp = {\n  prefix: 'fas',\n  iconName: 'angle-up',\n  icon: [448, 512, [8963], \"f106\", \"M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z\"]\n};\nconst faDrumstickBite = {\n  prefix: 'fas',\n  iconName: 'drumstick-bite',\n  icon: [512, 512, [], \"f6d7\", \"M160 265.2c0 8.5-3.4 16.6-9.4 22.6l-26.8 26.8c-12.3 12.3-32.5 11.4-49.4 7.2C69.8 320.6 65 320 60 320c-33.1 0-60 26.9-60 60s26.9 60 60 60c6.3 0 12 5.7 12 12c0 33.1 26.9 60 60 60s60-26.9 60-60c0-5-.6-9.8-1.8-14.5c-4.2-16.9-5.2-37.1 7.2-49.4l26.8-26.8c6-6 14.1-9.4 22.6-9.4l89.2 0c6.3 0 12.4-.3 18.5-1c11.9-1.2 16.4-15.5 10.8-26c-8.5-15.8-13.3-33.8-13.3-53c0-61.9 50.1-112 112-112c8 0 15.7 .8 23.2 2.4c11.7 2.5 24.1-5.9 22-17.6C494.5 62.5 422.5 0 336 0C238.8 0 160 78.8 160 176l0 89.2z\"]\n};\nconst faHollyBerry = {\n  prefix: 'fas',\n  iconName: 'holly-berry',\n  icon: [512, 512, [], \"f7aa\", \"M256 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM276.8 383.8c1 .1 2.1 .2 3.2 .2c39.8 0 72 32.2 72 72l0 22.7c0 16.4 16 27.9 31.6 22.8l12.8-4.3c18-6 37.3-6.5 55.6-1.5l19.4 5.3c17.9 4.9 34.4-11.6 29.5-29.5L495.6 452c-5-18.3-4.4-37.6 1.5-55.6l4.3-12.8c5.2-15.5-6.4-31.6-22.8-31.6c-34.6 0-62.7-28.1-62.7-62.7l0-32c0-16.4-16-27.9-31.6-22.8l-12.8 4.3c-18 6-37.3 6.5-55.6 1.5l-29.6-8.1c-2.9-.8-5.9-1-8.7-.7c4.2 9.7 5.8 20.8 3.7 32.3L275 298.7c-1.5 8.4-1.4 17 .5 25.3l5.3 23.9c2.8 12.7 1.1 25.2-4 35.9zM127.6 234.5c-15.5-5.2-31.6 6.4-31.6 22.8l0 32C96 323.9 67.9 352 33.3 352c-16.4 0-27.9 16-22.8 31.6l4.3 12.8c6 18 6.5 37.3 1.5 55.6l-5.3 19.4C6.2 489.4 22.6 505.8 40.5 501L60 495.6c18.3-5 37.6-4.5 55.6 1.5l12.8 4.3c15.5 5.2 31.6-6.4 31.6-22.8l0-32c0-34.6 28.1-62.7 62.7-62.7c16.4 0 27.9-16 22.8-31.6l-4.3-12.8c-6-18-6.5-37.3-1.5-55.6l5.3-19.4c4.9-17.9-11.6-34.4-29.5-29.5L196 240.4c-18.3 5-37.6 4.4-55.6-1.5l-12.8-4.3zM384 144a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"]\n};\nconst faChevronLeft = {\n  prefix: 'fas',\n  iconName: 'chevron-left',\n  icon: [320, 512, [9001], \"f053\", \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z\"]\n};\nconst faBacteria = {\n  prefix: 'fas',\n  iconName: 'bacteria',\n  icon: [640, 512, [], \"e059\", \"M304.9 .7c-9.6-2.7-19.5 2.8-22.3 12.4l-4.3 15.2c-8.3-.6-16.8 0-25.2 1.9c-7.3 1.7-14.3 3.5-21.1 5.5l-5.5-12.7c-3.9-9.1-14.5-13.4-23.6-9.5s-13.4 14.5-9.5 23.6l4.4 10.4c-16.6 6.7-31.7 14.4-45.4 22.8L147 62c-5.5-8.3-16.7-10.5-25-5s-10.5 16.7-5 25l6 9c-13.7 11-25.5 22.8-35.8 34.9l-10-8c-7.8-6.2-19.1-5-25.3 2.8s-5 19.1 2.8 25.3L65.9 155c-1.8 2.8-3.5 5.7-5.1 8.5c-6.6 11.4-11.8 22.6-16 33l-8-3.2c-9.2-3.7-19.7 .8-23.4 10s.8 19.7 10 23.4l10.4 4.2c-.2 .8-.4 1.5-.5 2.3c-2.2 9.3-3.4 17.3-4.1 23.4c-.4 3.1-.6 5.7-.8 7.8c-.1 1.1-.1 2-.2 2.8l-.1 1.1 0 .5 0 .2 0 .1c0 0 0 .1 29.1 1c0 0 0 0-.1 0L28 269.3c-.1 3.1 0 6.1 .2 9.1l-15.2 4.3C3.5 285.4-2 295.4 .7 304.9s12.7 15.1 22.3 12.4l15.6-4.5c7.6 13.6 18.9 25 32.6 32.6L66.7 361c-2.7 9.6 2.8 19.5 12.4 22.3s19.5-2.8 22.3-12.4l4.3-15.2c1.2 .1 2.4 .2 3.6 .2c15.6 .5 30.3-3.3 43-10.2l9 9c7 7 18.4 7 25.5 0s7-18.4 0-25.5l-7.2-7.2c9.3-12.6 15.2-27.8 16.3-44.5l7.1 3c9.1 3.9 19.7-.3 23.6-9.5s-.3-19.7-9.5-23.6l-8.6-3.7c6.4-9.9 17.3-22.4 36.9-33.3l1.3 4.4c2.7 9.6 12.7 15.1 22.3 12.4s15.1-12.7 12.4-22.3l-2.3-8.1c3.8-1.1 7.7-2.1 11.9-3.1c11.6-2.7 22.1-7.7 31.1-14.4l7.2 7.2c7 7 18.4 7 25.5 0s7-18.4 0-25.5l-9-9c7.6-13.9 11.3-30.1 10.1-46.6l15.2-4.3c9.6-2.7 15.1-12.7 12.4-22.3S370.6 64 361 66.7l-15.6 4.5c-7.7-13.9-19.1-25.1-32.6-32.6l4.5-15.6c2.7-9.6-2.8-19.5-12.4-22.3zM112 272l-48-1.5c0 0 0 0 0 0c11.7 .4 27.3 .9 48 1.6zm16-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-48a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM322.7 489c-2.7 9.6 2.8 19.5 12.4 22.3s19.5-2.8 22.2-12.4l4.3-15.2c8.3 .6 16.8 0 25.2-1.9c7.3-1.7 14.3-3.5 21.1-5.5l5.5 12.7c3.9 9.1 14.5 13.4 23.6 9.5s13.4-14.5 9.5-23.6l-4.4-10.4c16.6-6.7 31.7-14.4 45.4-22.8L493 450c5.5 8.3 16.7 10.5 25 5s10.5-16.7 5-25l-6-9c13.7-11 25.5-22.8 35.8-34.9l10 8c7.8 6.2 19.1 5 25.3-2.8s5-19.1-2.8-25.3L574.1 357c1.8-2.8 3.5-5.7 5.1-8.5c6.6-11.4 11.8-22.6 16-33l8 3.2c9.2 3.7 19.7-.8 23.4-10s-.8-19.7-10-23.4l-10.4-4.2c.2-.8 .4-1.5 .5-2.3c2.2-9.3 3.4-17.3 4.1-23.4c.4-3.1 .6-5.7 .8-7.8c.1-1.1 .1-2 .2-2.8l.1-1.1 0-.5 0-.2 0-.1c0 0 0-.1-29.1-1c0 0 0 0 .1 0l29.1 .9c.1-3.1 0-6.1-.2-9.1l15.2-4.3c9.6-2.7 15.1-12.7 12.4-22.3s-12.7-15.1-22.3-12.4l-15.6 4.5c-7.6-13.6-18.9-25-32.6-32.6l4.5-15.6c2.7-9.6-2.8-19.5-12.4-22.3s-19.5 2.8-22.3 12.4l-4.3 15.2c-1.2-.1-2.4-.2-3.6-.2c-15.6-.5-30.3 3.3-43 10.2l-9-9c-7-7-18.4-7-25.5 0s-7 18.4 0 25.5l7.2 7.2c-9.3 12.6-15.2 27.8-16.3 44.5l-7.1-3c-9.1-3.9-19.7 .3-23.6 9.5s.3 19.7 9.5 23.6l8.6 3.7c-6.4 9.9-17.3 22.4-36.9 33.3l-1.3-4.4c-2.7-9.6-12.7-15.1-22.3-12.4s-15.1 12.7-12.4 22.3l2.3 8.1c-3.8 1.1-7.7 2.1-11.9 3.1c-11.6 2.7-22.1 7.7-31.1 14.4l-7.2-7.2c-7-7-18.4-7-25.5 0s-7 18.4 0 25.5l9 9c-7.6 13.9-11.3 30.1-10.1 46.6l-15.2 4.3c-9.6 2.7-15.1 12.7-12.4 22.2s12.7 15.1 22.3 12.4l15.6-4.5c7.7 13.9 19.1 25.1 32.6 32.6L322.7 489zM576 241.5c0 0 0 0 0 0c-11.7-.4-27.3-.9-48-1.6l48 1.5zM448 384a32 32 0 1 1 -64 0 32 32 0 1 1 64 0z\"]\n};\nconst faHandLizard = {\n  prefix: 'fas',\n  iconName: 'hand-lizard',\n  icon: [512, 512, [], \"f258\", \"M0 112C0 85.5 21.5 64 48 64l112 0 80 0 46.5 0c36.8 0 71.2 18 92.1 48.2l113.5 164c13 18.7 19.9 41 19.9 63.8l0 12 0 16 0 48c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32l0-13.8L273.9 352 240 352l-80 0-48 0c-26.5 0-48-21.5-48-48s21.5-48 48-48l48 0 80 0c26.5 0 48-21.5 48-48s-21.5-48-48-48l-80 0L48 160c-26.5 0-48-21.5-48-48z\"]\n};\nconst faNotdef = {\n  prefix: 'fas',\n  iconName: 'notdef',\n  icon: [384, 512, [], \"e1fe\", \"M64 390.3L153.5 256 64 121.7l0 268.6zM102.5 448l179.1 0L192 313.7 102.5 448zm128-192L320 390.3l0-268.6L230.5 256zM281.5 64L102.5 64 192 198.3 281.5 64zM0 48C0 21.5 21.5 0 48 0L336 0c26.5 0 48 21.5 48 48l0 416c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 48z\"]\n};\nconst faDisease = {\n  prefix: 'fas',\n  iconName: 'disease',\n  icon: [512, 512, [], \"f7fa\", \"M236.4 61.4L227 75.5c-21.3 32-59.4 48.5-97.3 42.1l-59.6-9.9C33.4 101.6 0 129.9 .1 167.1c0 15.9 6.4 31.2 17.6 42.5l29.2 29.2c11 11 17.2 25.9 17.2 41.5c0 15.8-6.4 30.9-17.7 42L33.3 335.1C22.2 345.9 16 360.7 16 376.2c0 36.8 34.1 64.2 70.1 56.2l62.3-13.8c7.7-1.7 15.7-2.6 23.6-2.6l10 0c27.2 0 53.7 9.3 75 26.3L287.8 467c10.5 8.4 23.6 13 37 13c32.7 0 59.3-26.5 59.3-59.3l0-25.2c0-34.9 21.4-66.2 53.9-78.8l36.9-14.3c22.4-8.7 37.2-30.3 37.2-54.3c0-28.1-20.1-52.3-47.8-57.3l-28-5.1c-36.5-6.7-65.4-34.5-73.6-70.7l-7.1-31.5C348.9 53.4 322.1 32 291.3 32c-22 0-42.6 11-54.9 29.4zM160 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm0 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faBriefcaseMedical = {\n  prefix: 'fas',\n  iconName: 'briefcase-medical',\n  icon: [512, 512, [], \"f469\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40L64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-64 0 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zm96 152c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faGenderless = {\n  prefix: 'fas',\n  iconName: 'genderless',\n  icon: [384, 512, [], \"f22d\", \"M192 144a112 112 0 1 1 0 224 112 112 0 1 1 0-224zm0 288a176 176 0 1 0 0-352 176 176 0 1 0 0 352z\"]\n};\nconst faChevronRight = {\n  prefix: 'fas',\n  iconName: 'chevron-right',\n  icon: [320, 512, [9002], \"f054\", \"M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"]\n};\nconst faRetweet = {\n  prefix: 'fas',\n  iconName: 'retweet',\n  icon: [576, 512, [], \"f079\", \"M272 416c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0c-17.7 0-32-14.3-32-32l0-128 32 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 128c0 53 43 96 96 96l112 0zM304 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l112 0c17.7 0 32 14.3 32 32l0 128-32 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0 0-128c0-53-43-96-96-96L304 96z\"]\n};\nconst faCarRear = {\n  prefix: 'fas',\n  iconName: 'car-rear',\n  icon: [512, 512, [\"car-alt\"], \"f5de\", \"M165.4 96l181.2 0c13.6 0 25.7 8.6 30.2 21.4L402.9 192l-293.8 0 26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zm-90.6 .3L39.6 196.8C16.4 206.4 0 229.3 0 256l0 80c0 23.7 12.9 44.4 32 55.4L32 448c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-48 256 0 0 48c0 17.7 14.3 32 32 32l32 0c17.7 0 32-14.3 32-32l0-56.6c19.1-11.1 32-31.7 32-55.4l0-80c0-26.7-16.4-49.6-39.6-59.2L437.2 96.3C423.7 57.8 387.4 32 346.6 32L165.4 32c-40.8 0-77.1 25.8-90.6 64.3zM208 272l96 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zM48 280c0-13.3 10.7-24 24-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24zm360-24l32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"]\n};\nconst faCarAlt = faCarRear;\nconst faPumpSoap = {\n  prefix: 'fas',\n  iconName: 'pump-soap',\n  icon: [448, 512, [], \"e06b\", \"M128 32l0 96 128 0 0-32 60.1 0c4.2 0 8.3 1.7 11.3 4.7l33.9 33.9c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L372.7 55.4c-15-15-35.4-23.4-56.6-23.4L256 32c0-17.7-14.3-32-32-32L160 0c-17.7 0-32 14.3-32 32zM117.4 160c-33.3 0-61 25.5-63.8 58.7L35 442.7C31.9 480 61.3 512 98.8 512l186.4 0c37.4 0 66.9-32 63.8-69.3l-18.7-224c-2.8-33.2-30.5-58.7-63.8-58.7l-149.1 0zM256 360c0 35.3-28.7 56-64 56s-64-20.7-64-56c0-32.5 37-80.9 50.9-97.9c3.2-3.9 8.1-6.1 13.1-6.1s9.9 2.2 13.1 6.1C219 279.1 256 327.5 256 360z\"]\n};\nconst faVideoSlash = {\n  prefix: 'fas',\n  iconName: 'video-slash',\n  icon: [640, 512, [], \"f4e2\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-86.4-67.7 13.8 9.2c9.8 6.5 22.4 7.2 32.9 1.6s16.9-16.4 16.9-28.2l0-256c0-11.8-6.5-22.6-16.9-28.2s-23-5-32.9 1.6l-96 64L448 174.9l0 17.1 0 128 0 5.8-32-25.1L416 128c0-35.3-28.7-64-64-64L113.9 64 38.8 5.1zM407 416.7L32.3 121.5c-.2 2.1-.3 4.3-.3 6.5l0 256c0 35.3 28.7 64 64 64l256 0c23.4 0 43.9-12.6 55-31.3z\"]\n};\nconst faBatteryQuarter = {\n  prefix: 'fas',\n  iconName: 'battery-quarter',\n  icon: [576, 512, [\"battery-2\"], \"f243\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm112 96l-96 0 0 128 96 0 0-128z\"]\n};\nconst faBattery2 = faBatteryQuarter;\nconst faRadio = {\n  prefix: 'fas',\n  iconName: 'radio',\n  icon: [512, 512, [128251], \"f8d7\", \"M494.8 47c12.7-3.7 20-17.1 16.3-29.8S494-2.8 481.2 1L51.7 126.9c-9.4 2.7-17.9 7.3-25.1 13.2C10.5 151.7 0 170.6 0 192l0 4L0 304 0 448c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-229.5 0L494.8 47zM368 240a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM80 256c0-8.8 7.2-16 16-16l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16zM64 320c0-8.8 7.2-16 16-16l128 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 336c-8.8 0-16-7.2-16-16zm16 64c0-8.8 7.2-16 16-16l96 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-96 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faBabyCarriage = {\n  prefix: 'fas',\n  iconName: 'baby-carriage',\n  icon: [512, 512, [\"carriage-baby\"], \"f77d\", \"M256 192L.1 192C2.7 117.9 41.3 52.9 99 14.1c13.3-8.9 30.8-4.3 39.9 8.8L256 192zm128-32c0-35.3 28.7-64 64-64l32 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0 0 64c0 25.2-5.8 50.2-17 73.5s-27.8 44.5-48.6 62.3s-45.5 32-72.7 41.6S253.4 416 224 416s-58.5-5-85.7-14.6s-51.9-23.8-72.7-41.6s-37.3-39-48.6-62.3S0 249.2 0 224l224 0 160 0 0-64zM80 416a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm240 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nconst faCarriageBaby = faBabyCarriage;\nconst faTrafficLight = {\n  prefix: 'fas',\n  iconName: 'traffic-light',\n  icon: [320, 512, [128678], \"f637\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 88.4 71.6 160 160 160s160-71.6 160-160l0-288c0-35.3-28.7-64-64-64L64 0zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z\"]\n};\nconst faThermometer = {\n  prefix: 'fas',\n  iconName: 'thermometer',\n  icon: [512, 512, [], \"f491\", \"M96 382.1l0-88.8c0-14.9 5.9-29.1 16.4-39.6l27.3-27.3 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 45.5-45.5C355.2 10.9 381.4 0 408.8 0C465.8 0 512 46.2 512 103.2c0 27.4-10.9 53.6-30.2 73L258.3 399.6c-10.5 10.5-24.7 16.4-39.6 16.4l-88.8 0L41 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l89-89z\"]\n};\nconst faVrCardboard = {\n  prefix: 'fas',\n  iconName: 'vr-cardboard',\n  icon: [640, 512, [], \"f729\", \"M576 64L64 64C28.7 64 0 92.7 0 128L0 384c0 35.3 28.7 64 64 64l120.4 0c24.2 0 46.4-13.7 57.2-35.4l32-64c8.8-17.5 26.7-28.6 46.3-28.6s37.5 11.1 46.3 28.6l32 64c10.8 21.7 33 35.4 57.2 35.4L576 448c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64zM96 240a64 64 0 1 1 128 0A64 64 0 1 1 96 240zm384-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faHandMiddleFinger = {\n  prefix: 'fas',\n  iconName: 'hand-middle-finger',\n  icon: [448, 512, [128405], \"f806\", \"M232 0c-22.1 0-40 17.9-40 40l0 164.2c-8.5-7.6-19.7-12.2-32-12.2c-26.5 0-48 21.5-48 48l0 7 0 73c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-55.7c-2 1.4-3.9 3-5.8 4.5L55 284.8C40.4 297 32 315 32 334L32 372c0 38 16.9 74 46.1 98.3l5.4 4.5c28.8 24 65 37.1 102.4 37.1L304 512c70.7 0 128-57.3 128-128l0-64 0-32c0-26.5-21.5-48-48-48c-12.4 0-23.6 4.7-32.1 12.3C350 227.5 329.3 208 304 208c-12.3 0-23.5 4.6-32 12.2L272 40c0-22.1-17.9-40-40-40z\"]\n};\nconst faPercent = {\n  prefix: 'fas',\n  iconName: 'percent',\n  icon: [384, 512, [62101, 62785, \"percentage\"], \"25\", \"M374.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-320 320c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l320-320zM128 128A64 64 0 1 0 0 128a64 64 0 1 0 128 0zM384 384a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"]\n};\nconst faPercentage = faPercent;\nconst faTruckMoving = {\n  prefix: 'fas',\n  iconName: 'truck-moving',\n  icon: [640, 512, [], \"f4df\", \"M64 32C28.7 32 0 60.7 0 96L0 304l0 80 0 16c0 44.2 35.8 80 80 80c26.2 0 49.4-12.6 64-32c14.6 19.4 37.8 32 64 32c44.2 0 80-35.8 80-80c0-5.5-.6-10.8-1.6-16L416 384l33.6 0c-1 5.2-1.6 10.5-1.6 16c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16l1.6 0c17.7 0 32-14.3 32-32l0-64 0-16 0-10.3c0-9.2-3.2-18.2-9-25.3l-58.8-71.8c-10.6-13-26.5-20.5-43.3-20.5L480 144l0-48c0-35.3-28.7-64-64-64L64 32zM585 256l-105 0 0-64 48.8 0c2.4 0 4.7 1.1 6.2 2.9L585 256zM528 368a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM176 400a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM80 368a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faGlassWaterDroplet = {\n  prefix: 'fas',\n  iconName: 'glass-water-droplet',\n  icon: [384, 512, [], \"e4f5\", \"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3l166.6 0c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0L32 0zM83 297.5L66.4 64l251.3 0L301 297.5 288 304c-20.1 10.1-43.9 10.1-64 0s-43.9-10.1-64 0s-43.9 10.1-64 0l-13-6.5zM256 196c0-24-33.7-70.1-52.2-93.5c-6.1-7.7-17.5-7.7-23.6 0C161.7 125.9 128 172 128 196c0 33.1 28.7 60 64 60s64-26.9 64-60z\"]\n};\nconst faDisplay = {\n  prefix: 'fas',\n  iconName: 'display',\n  icon: [576, 512, [], \"e163\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 35.3 28.7 64 64 64l176 0-10.7 32L160 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-69.3 0L336 416l176 0c35.3 0 64-28.7 64-64l0-288c0-35.3-28.7-64-64-64L64 0zM512 64l0 288L64 352 64 64l448 0z\"]\n};\nconst faFaceSmile = {\n  prefix: 'fas',\n  iconName: 'face-smile',\n  icon: [512, 512, [128578, \"smile\"], \"f118\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSmile = faFaceSmile;\nconst faThumbtack = {\n  prefix: 'fas',\n  iconName: 'thumbtack',\n  icon: [384, 512, [128204, 128392, \"thumb-tack\"], \"f08d\", \"M32 32C32 14.3 46.3 0 64 0L320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-29.5 0 11.4 148.2c36.7 19.9 65.7 53.2 79.5 94.7l1 3c3.3 9.8 1.6 20.5-4.4 28.8s-15.7 13.3-26 13.3L32 352c-10.3 0-19.9-4.9-26-13.3s-7.7-19.1-4.4-28.8l1-3c13.8-41.5 42.8-74.8 79.5-94.7L93.5 64 64 64C46.3 64 32 49.7 32 32zM160 384l64 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96z\"]\n};\nconst faThumbTack = faThumbtack;\nconst faTrophy = {\n  prefix: 'fas',\n  iconName: 'trophy',\n  icon: [576, 512, [127942], \"f091\", \"M400 0L176 0c-26.5 0-48.1 21.8-47.1 48.2c.2 5.3 .4 10.6 .7 15.8L24 64C10.7 64 0 74.7 0 88c0 92.6 33.5 157 78.5 200.7c44.3 43.1 98.3 64.8 138.1 75.8c23.4 6.5 39.4 26 39.4 45.6c0 20.9-17 37.9-37.9 37.9L192 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l192 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-26.1 0C337 448 320 431 320 410.1c0-19.6 15.9-39.2 39.4-45.6c39.9-11 93.9-32.7 138.2-75.8C542.5 245 576 180.6 576 88c0-13.3-10.7-24-24-24L446.4 64c.3-5.2 .5-10.4 .7-15.8C448.1 21.8 426.5 0 400 0zM48.9 112l84.4 0c9.1 90.1 29.2 150.3 51.9 190.6c-24.9-11-50.8-26.5-73.2-48.3c-32-31.1-58-76-63-142.3zM464.1 254.3c-22.4 21.8-48.3 37.3-73.2 48.3c22.7-40.3 42.8-100.5 51.9-190.6l84.4 0c-5.1 66.3-31.1 111.2-63 142.3z\"]\n};\nconst faPersonPraying = {\n  prefix: 'fas',\n  iconName: 'person-praying',\n  icon: [448, 512, [128720, \"pray\"], \"f683\", \"M352 64A64 64 0 1 0 224 64a64 64 0 1 0 128 0zM232.7 264l22.9 31.5c6.5 8.9 16.3 14.7 27.2 16.1s21.9-1.7 30.4-8.7l88-72c17.1-14 19.6-39.2 5.6-56.3s-39.2-19.6-56.3-5.6l-55.2 45.2-26.2-36C253.6 156.7 228.6 144 202 144c-30.9 0-59.2 17.1-73.6 44.4L79.8 280.9c-20.2 38.5-9.4 85.9 25.6 111.8L158.6 432 72 432c-22.1 0-40 17.9-40 40s17.9 40 40 40l208 0c17.3 0 32.6-11.1 38-27.5s-.3-34.4-14.2-44.7L187.7 354l45-90z\"]\n};\nconst faPray = faPersonPraying;\nconst faHammer = {\n  prefix: 'fas',\n  iconName: 'hammer',\n  icon: [576, 512, [128296], \"f6e3\", \"M413.5 237.5c-28.2 4.8-58.2-3.6-80-25.4l-38.1-38.1C280.4 159 272 138.8 272 117.6l0-12.1L192.3 62c-5.3-2.9-8.6-8.6-8.3-14.7s3.9-11.5 9.5-14l47.2-21C259.1 4.2 279 0 299.2 0l18.1 0c36.7 0 72 14 98.7 39.1l44.6 42c24.2 22.8 33.2 55.7 26.6 86L503 183l8-8c9.4-9.4 24.6-9.4 33.9 0l24 24c9.4 9.4 9.4 24.6 0 33.9l-88 88c-9.4 9.4-24.6 9.4-33.9 0l-24-24c-9.4-9.4-9.4-24.6 0-33.9l8-8-17.5-17.5zM27.4 377.1L260.9 182.6c3.5 4.9 7.5 9.6 11.8 14l38.1 38.1c6 6 12.4 11.2 19.2 15.7L134.9 484.6c-14.5 17.4-36 27.4-58.6 27.4C34.1 512 0 477.8 0 435.7c0-22.6 10.1-44.1 27.4-58.6z\"]\n};\nconst faHandPeace = {\n  prefix: 'fas',\n  iconName: 'hand-peace',\n  icon: [512, 512, [9996], \"f25b\", \"M224 0c17.7 0 32 14.3 32 32l0 208-64 0 0-208c0-17.7 14.3-32 32-32zm96 160c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm64 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zM93.3 51.2L175.9 240l-69.9 0L34.7 76.8C27.6 60.6 35 41.8 51.2 34.7s35.1 .3 42.1 16.5zm27 221.3l-.2-.5 69.9 0 26.1 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6l0 8.6c0 88.4-71.6 160-160 160l-61.7 0c-42.4 0-83.1-16.9-113.1-46.9l-11.6-11.6C77.5 429.5 64 396.9 64 363l0-27c0-32.7 24.6-59.7 56.3-63.5z\"]\n};\nconst faRotate = {\n  prefix: 'fas',\n  iconName: 'rotate',\n  icon: [512, 512, [128260, \"sync-alt\"], \"f2f1\", \"M142.9 142.9c-17.5 17.5-30.1 38-37.8 59.8c-5.9 16.7-24.2 25.4-40.8 19.5s-25.4-24.2-19.5-40.8C55.6 150.7 73.2 122 97.6 97.6c87.2-87.2 228.3-87.5 315.8-1L455 55c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2l0 128c0 13.3-10.7 24-24 24l-8.4 0c0 0 0 0 0 0L344 224c-9.7 0-18.5-5.8-22.2-14.8s-1.7-19.3 5.2-26.2l41.1-41.1c-62.6-61.5-163.1-61.2-225.3 1zM16 312c0-13.3 10.7-24 24-24l7.6 0 .7 0L168 288c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-41.1 41.1c62.6 61.5 163.1 61.2 225.3-1c17.5-17.5 30.1-38 37.8-59.8c5.9-16.7 24.2-25.4 40.8-19.5s25.4 24.2 19.5 40.8c-10.8 30.6-28.4 59.3-52.9 83.8c-87.2 87.2-228.3 87.5-315.8 1L57 457c-6.9 6.9-17.2 8.9-26.2 5.2S16 449.7 16 440l0-119.6 0-.7 0-7.6z\"]\n};\nconst faSyncAlt = faRotate;\nconst faSpinner = {\n  prefix: 'fas',\n  iconName: 'spinner',\n  icon: [512, 512, [], \"f110\", \"M304 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 416a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM48 304a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm464-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM142.9 437A48 48 0 1 0 75 369.1 48 48 0 1 0 142.9 437zm0-294.2A48 48 0 1 0 75 75a48 48 0 1 0 67.9 67.9zM369.1 437A48 48 0 1 0 437 369.1 48 48 0 1 0 369.1 437z\"]\n};\nconst faRobot = {\n  prefix: 'fas',\n  iconName: 'robot',\n  icon: [640, 512, [129302], \"f544\", \"M320 0c17.7 0 32 14.3 32 32l0 64 120 0c39.8 0 72 32.2 72 72l0 272c0 39.8-32.2 72-72 72l-304 0c-39.8 0-72-32.2-72-72l0-272c0-39.8 32.2-72 72-72l120 0 0-64c0-17.7 14.3-32 32-32zM208 384c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zM264 256a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm152 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM48 224l16 0 0 192-16 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-16 0 0-192 16 0z\"]\n};\nconst faPeace = {\n  prefix: 'fas',\n  iconName: 'peace',\n  icon: [512, 512, [9774], \"f67c\", \"M224 445.3l0-121.8-94.3 77.1c26.1 22.8 58.5 38.7 94.3 44.7zM89.2 351.1L224 240.8l0-174.2C133.2 81.9 64 160.9 64 256c0 34.6 9.2 67.1 25.2 95.1zm293.1 49.5L288 323.5l0 121.8c35.7-6 68.1-21.9 94.3-44.7zm40.6-49.5c16-28 25.2-60.5 25.2-95.1c0-95.1-69.2-174.1-160-189.3l0 174.2L422.8 351.1zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"]\n};\nconst faGears = {\n  prefix: 'fas',\n  iconName: 'gears',\n  icon: [640, 512, [\"cogs\"], \"f085\", \"M308.5 135.3c7.1-6.3 9.9-16.2 6.2-25c-2.3-5.3-4.8-10.5-7.6-15.5L304 89.4c-3-5-6.3-9.9-9.8-14.6c-5.7-7.6-15.7-10.1-24.7-7.1l-28.2 9.3c-10.7-8.8-23-16-36.2-20.9L199 27.1c-1.9-9.3-9.1-16.7-18.5-17.8C173.9 8.4 167.2 8 160.4 8l-.7 0c-6.8 0-13.5 .4-20.1 1.2c-9.4 1.1-16.6 8.6-18.5 17.8L115 56.1c-13.3 5-25.5 12.1-36.2 20.9L50.5 67.8c-9-3-19-.5-24.7 7.1c-3.5 4.7-6.8 9.6-9.9 14.6l-3 5.3c-2.8 5-5.3 10.2-7.6 15.6c-3.7 8.7-.9 18.6 6.2 25l22.2 19.8C32.6 161.9 32 168.9 32 176s.6 14.1 1.7 20.9L11.5 216.7c-7.1 6.3-9.9 16.2-6.2 25c2.3 5.3 4.8 10.5 7.6 15.6l3 5.2c3 5.1 6.3 9.9 9.9 14.6c5.7 7.6 15.7 10.1 24.7 7.1l28.2-9.3c10.7 8.8 23 16 36.2 20.9l6.1 29.1c1.9 9.3 9.1 16.7 18.5 17.8c6.7 .8 13.5 1.2 20.4 1.2s13.7-.4 20.4-1.2c9.4-1.1 16.6-8.6 18.5-17.8l6.1-29.1c13.3-5 25.5-12.1 36.2-20.9l28.2 9.3c9 3 19 .5 24.7-7.1c3.5-4.7 6.8-9.5 9.8-14.6l3.1-5.4c2.8-5 5.3-10.2 7.6-15.5c3.7-8.7 .9-18.6-6.2-25l-22.2-19.8c1.1-6.8 1.7-13.8 1.7-20.9s-.6-14.1-1.7-20.9l22.2-19.8zM112 176a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM504.7 500.5c6.3 7.1 16.2 9.9 25 6.2c5.3-2.3 10.5-4.8 15.5-7.6l5.4-3.1c5-3 9.9-6.3 14.6-9.8c7.6-5.7 10.1-15.7 7.1-24.7l-9.3-28.2c8.8-10.7 16-23 20.9-36.2l29.1-6.1c9.3-1.9 16.7-9.1 17.8-18.5c.8-6.7 1.2-13.5 1.2-20.4s-.4-13.7-1.2-20.4c-1.1-9.4-8.6-16.6-17.8-18.5L583.9 307c-5-13.3-12.1-25.5-20.9-36.2l9.3-28.2c3-9 .5-19-7.1-24.7c-4.7-3.5-9.6-6.8-14.6-9.9l-5.3-3c-5-2.8-10.2-5.3-15.6-7.6c-8.7-3.7-18.6-.9-25 6.2l-19.8 22.2c-6.8-1.1-13.8-1.7-20.9-1.7s-14.1 .6-20.9 1.7l-19.8-22.2c-6.3-7.1-16.2-9.9-25-6.2c-5.3 2.3-10.5 4.8-15.6 7.6l-5.2 3c-5.1 3-9.9 6.3-14.6 9.9c-7.6 5.7-10.1 15.7-7.1 24.7l9.3 28.2c-8.8 10.7-16 23-20.9 36.2L315.1 313c-9.3 1.9-16.7 9.1-17.8 18.5c-.8 6.7-1.2 13.5-1.2 20.4s.4 13.7 1.2 20.4c1.1 9.4 8.6 16.6 17.8 18.5l29.1 6.1c5 13.3 12.1 25.5 20.9 36.2l-9.3 28.2c-3 9-.5 19 7.1 24.7c4.7 3.5 9.5 6.8 14.6 9.8l5.4 3.1c5 2.8 10.2 5.3 15.5 7.6c8.7 3.7 18.6 .9 25-6.2l19.8-22.2c6.8 1.1 13.8 1.7 20.9 1.7s14.1-.6 20.9-1.7l19.8 22.2zM464 304a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faCogs = faGears;\nconst faWarehouse = {\n  prefix: 'fas',\n  iconName: 'warehouse',\n  icon: [640, 512, [], \"f494\", \"M0 488L0 171.3c0-26.2 15.9-49.7 40.2-59.4L308.1 4.8c7.6-3.1 16.1-3.1 23.8 0L599.8 111.9c24.3 9.7 40.2 33.3 40.2 59.4L640 488c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24l0-264c0-17.7-14.3-32-32-32l-384 0c-17.7 0-32 14.3-32 32l0 264c0 13.3-10.7 24-24 24l-48 0c-13.3 0-24-10.7-24-24zm488 24l-336 0c-13.3 0-24-10.7-24-24l0-56 384 0 0 56c0 13.3-10.7 24-24 24zM128 400l0-64 384 0 0 64-384 0zm0-96l0-80 384 0 0 80-384 0z\"]\n};\nconst faArrowUpRightDots = {\n  prefix: 'fas',\n  iconName: 'arrow-up-right-dots',\n  icon: [576, 512, [], \"e4b7\", \"M160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l50.7 0L9.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3l0 50.7c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128c0-17.7-14.3-32-32-32L160 0zM576 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM448 208a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 384a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm128 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM272 384a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM144 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM576 336a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm-48-80a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"]\n};\nconst faSplotch = {\n  prefix: 'fas',\n  iconName: 'splotch',\n  icon: [512, 512, [], \"f5bc\", \"M208.5 62.3l28.1-36.9C248.8 9.4 267.8 0 288 0c28.5 0 53.6 18.7 61.8 46l17.8 59.4c10.3 34.4 36.1 62 69.8 74.6l39.8 14.9c20.9 7.9 34.8 27.9 34.8 50.2c0 16.9-7.9 32.8-21.5 42.9l-67.3 50.5c-24.3 18.2-37.2 47.9-33.8 78.1l2.5 22.7c4.3 38.7-26 72.6-65 72.6c-14.8 0-29.3-5.1-40.8-14.3l-55.4-44.3c-4.5-3.6-9.3-6.7-14.5-9.2c-15.8-7.9-33.7-10.4-51-7.3L82.4 451.9C47.8 458.2 16 431.6 16 396.5c0-13.2 4.7-26 13.1-36.2l11.2-13.4c14.6-17.4 22.6-39.4 22.6-62.1c0-18.8-5.5-37.2-15.8-53L8.8 173.5C3.1 164.7 0 154.4 0 143.9c0-33.4 30.1-58.8 63-53.2l51.3 8.7c35.9 6.1 72.2-8.2 94.2-37.1z\"]\n};\nconst faFaceGrinHearts = {\n  prefix: 'fas',\n  iconName: 'face-grin-hearts',\n  icon: [512, 512, [128525, \"grin-hearts\"], \"f584\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM199.3 129.1c17.8 4.8 28.4 23.1 23.6 40.8l-17.4 65c-2.3 8.5-11.1 13.6-19.6 11.3l-65.1-17.4c-17.8-4.8-28.4-23.1-23.6-40.8s23.1-28.4 40.8-23.6l16.1 4.3 4.3-16.1c4.8-17.8 23.1-28.4 40.8-23.6zm154.3 23.6l4.3 16.1 16.1-4.3c17.8-4.8 36.1 5.8 40.8 23.6s-5.8 36.1-23.6 40.8l-65.1 17.4c-8.5 2.3-17.3-2.8-19.6-11.3l-17.4-65c-4.8-17.8 5.8-36.1 23.6-40.8s36.1 5.8 40.9 23.6z\"]\n};\nconst faGrinHearts = faFaceGrinHearts;\nconst faDiceFour = {\n  prefix: 'fas',\n  iconName: 'dice-four',\n  icon: [448, 512, [9859], \"f524\", \"M0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM352 160a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faSimCard = {\n  prefix: 'fas',\n  iconName: 'sim-card',\n  icon: [384, 512, [], \"f7c4\", \"M64 0L242.7 0c17 0 33.3 6.7 45.3 18.7L365.3 96c12 12 18.7 28.3 18.7 45.3L384 448c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64C0 28.7 28.7 0 64 0zM96 192c-17.7 0-32 14.3-32 32l0 32 64 0 0-64-32 0zM64 352l80 0 96 0 80 0 0-64-80 0-96 0-80 0 0 64zM320 224c0-17.7-14.3-32-32-32l-32 0 0 64 64 0 0-32zM160 192l0 64 64 0 0-64-64 0zM288 448c17.7 0 32-14.3 32-32l0-32-64 0 0 64 32 0zM160 384l0 64 64 0 0-64-64 0zM64 416c0 17.7 14.3 32 32 32l32 0 0-64-64 0 0 32z\"]\n};\nconst faTransgender = {\n  prefix: 'fas',\n  iconName: 'transgender',\n  icon: [512, 512, [9895, \"transgender-alt\"], \"f225\", \"M112 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-31 31L112 78.1l7-7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-7 7 15.2 15.2C187.7 107.6 220.5 96 256 96s68.3 11.6 94.9 31.2l68.8-68.8-31-31c-4.6-4.6-5.9-11.5-3.5-17.4s8.3-9.9 14.8-9.9l96 0c8.8 0 16 7.2 16 16l0 96c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5l-31-31-68.8 68.8C404.4 187.7 416 220.5 416 256c0 80.2-59 146.6-136 158.2l0 17.8 16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0 0 8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8-16 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l16 0 0-17.8C155 402.6 96 336.2 96 256c0-35.5 11.6-68.3 31.2-94.9L112 145.9l-7 7c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l7-7L58.3 92.3l-31 31c-4.6 4.6-11.5 5.9-17.4 3.5S0 118.5 0 112L0 16C0 7.2 7.2 0 16 0l96 0zM352 256a96 96 0 1 0 -192 0 96 96 0 1 0 192 0z\"]\n};\nconst faTransgenderAlt = faTransgender;\nconst faMercury = {\n  prefix: 'fas',\n  iconName: 'mercury',\n  icon: [384, 512, [9791], \"f223\", \"M72.1 7C85.8-4 106-1.8 117 12c17.6 22 44.7 36 75 36s57.3-14 75-36c11.1-13.8 31.2-16 45-5s16 31.2 5 45c-7.8 9.7-16.6 18.4-26.4 26.1C337.3 109.7 368 163.3 368 224c0 89.1-66.2 162.7-152 174.4l0 25.6 32 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0 0 16c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-16-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l32 0 0-25.6C82.2 386.7 16 313.1 16 224c0-60.7 30.7-114.3 77.5-145.9C83.7 70.5 74.9 61.7 67.1 52c-11.1-13.8-8.8-33.9 5-45zM80 224a112 112 0 1 0 224 0A112 112 0 1 0 80 224z\"]\n};\nconst faArrowTurnDown = {\n  prefix: 'fas',\n  iconName: 'arrow-turn-down',\n  icon: [384, 512, [\"level-down\"], \"f149\", \"M32 64C14.3 64 0 49.7 0 32S14.3 0 32 0l96 0c53 0 96 43 96 96l0 306.7 73.4-73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-128 128c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 402.7 160 96c0-17.7-14.3-32-32-32L32 64z\"]\n};\nconst faLevelDown = faArrowTurnDown;\nconst faPersonFallingBurst = {\n  prefix: 'fas',\n  iconName: 'person-falling-burst',\n  icon: [640, 512, [], \"e547\", \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 9.8c0 39-23.7 74-59.9 88.4C71.6 154.5 32 213 32 278.2L32 352c0 17.7 14.3 32 32 32s32-14.3 32-32l0-73.8c0-10 1.6-19.8 4.5-29L261.1 497.4c9.6 14.8 29.4 19.1 44.3 9.5s19.1-29.4 9.5-44.3L222.6 320l1.4 0 80 0 38.4 51.2c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8l-43.2-57.6C341.3 263.1 327.1 256 312 256l-71.5 0-56.8-80.2-.2-.3c44.7-29 72.5-79 72.5-133.6l0-9.8zM96 80A48 48 0 1 0 0 80a48 48 0 1 0 96 0zM464 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 78.7-12.2c6.5-1 11.7-5.9 13.1-12.2s-1.1-13-6.5-16.7l-65.6-45.1L603 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L508.3 92.1l-29.4-74C476.4 12 470.6 8 464 8s-12.4 4-14.9 10.1l-29.4 74L343.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1-65.6 45.1c-5.4 3.7-8 10.3-6.5 16.7c.1 .3 .1 .6 .2 .8l19.4 0c20.1 0 39.2 7.5 53.8 20.8l18.4 2.9L383 265.3l36.2 48.3c2.1 2.8 3.9 5.7 5.5 8.6L464 286.1z\"]\n};\nconst faAward = {\n  prefix: 'fas',\n  iconName: 'award',\n  icon: [384, 512, [], \"f559\", \"M173.8 5.5c11-7.3 25.4-7.3 36.4 0L228 17.2c6 3.9 13 5.8 20.1 5.4l21.3-1.3c13.2-.8 25.6 6.4 31.5 18.2l9.6 19.1c3.2 6.4 8.4 11.5 14.7 14.7L344.5 83c11.8 5.9 19 18.3 18.2 31.5l-1.3 21.3c-.4 7.1 1.5 14.2 5.4 20.1l11.8 17.8c7.3 11 7.3 25.4 0 36.4L366.8 228c-3.9 6-5.8 13-5.4 20.1l1.3 21.3c.8 13.2-6.4 25.6-18.2 31.5l-19.1 9.6c-6.4 3.2-11.5 8.4-14.7 14.7L301 344.5c-5.9 11.8-18.3 19-31.5 18.2l-21.3-1.3c-7.1-.4-14.2 1.5-20.1 5.4l-17.8 11.8c-11 7.3-25.4 7.3-36.4 0L156 366.8c-6-3.9-13-5.8-20.1-5.4l-21.3 1.3c-13.2 .8-25.6-6.4-31.5-18.2l-9.6-19.1c-3.2-6.4-8.4-11.5-14.7-14.7L39.5 301c-11.8-5.9-19-18.3-18.2-31.5l1.3-21.3c.4-7.1-1.5-14.2-5.4-20.1L5.5 210.2c-7.3-11-7.3-25.4 0-36.4L17.2 156c3.9-6 5.8-13 5.4-20.1l-1.3-21.3c-.8-13.2 6.4-25.6 18.2-31.5l19.1-9.6C65 70.2 70.2 65 73.4 58.6L83 39.5c5.9-11.8 18.3-19 31.5-18.2l21.3 1.3c7.1 .4 14.2-1.5 20.1-5.4L173.8 5.5zM272 192a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM1.3 441.8L44.4 339.3c.2 .1 .3 .2 .4 .4l9.6 19.1c11.7 23.2 36 37.3 62 35.8l21.3-1.3c.2 0 .5 0 .7 .2l17.8 11.8c5.1 3.3 10.5 5.9 16.1 7.7l-37.6 89.3c-2.3 5.5-7.4 9.2-13.3 9.7s-11.6-2.2-14.8-7.2L74.4 455.5l-56.1 8.3c-5.7 .8-11.4-1.5-15-6s-4.3-10.7-2.1-16zm248 60.4L211.7 413c5.6-1.8 11-4.3 16.1-7.7l17.8-11.8c.2-.1 .4-.2 .7-.2l21.3 1.3c26 1.5 50.3-12.6 62-35.8l9.6-19.1c.1-.2 .2-.3 .4-.4l43.2 102.5c2.2 5.3 1.4 11.4-2.1 16s-9.3 6.9-15 6l-56.1-8.3-32.2 49.2c-3.2 5-8.9 7.7-14.8 7.2s-11-4.3-13.3-9.7z\"]\n};\nconst faTicketSimple = {\n  prefix: 'fas',\n  iconName: 'ticket-simple',\n  icon: [576, 512, [\"ticket-alt\"], \"f3ff\", \"M0 128C0 92.7 28.7 64 64 64l448 0c35.3 0 64 28.7 64 64l0 64c0 8.8-7.4 15.7-15.7 18.6C541.5 217.1 528 235 528 256s13.5 38.9 32.3 45.4c8.3 2.9 15.7 9.8 15.7 18.6l0 64c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64l0-64c0-8.8 7.4-15.7 15.7-18.6C34.5 294.9 48 277 48 256s-13.5-38.9-32.3-45.4C7.4 207.7 0 200.8 0 192l0-64z\"]\n};\nconst faTicketAlt = faTicketSimple;\nconst faBuilding = {\n  prefix: 'fas',\n  iconName: 'building',\n  icon: [384, 512, [127970, 61687], \"f1ad\", \"M48 0C21.5 0 0 21.5 0 48L0 464c0 26.5 21.5 48 48 48l96 0 0-80c0-26.5 21.5-48 48-48s48 21.5 48 48l0 80 96 0c26.5 0 48-21.5 48-48l0-416c0-26.5-21.5-48-48-48L48 0zM64 240c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zm112-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM80 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32zM272 96l32 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16z\"]\n};\nconst faAnglesLeft = {\n  prefix: 'fas',\n  iconName: 'angles-left',\n  icon: [512, 512, [171, \"angle-double-left\"], \"f100\", \"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z\"]\n};\nconst faAngleDoubleLeft = faAnglesLeft;\nconst faQrcode = {\n  prefix: 'fas',\n  iconName: 'qrcode',\n  icon: [448, 512, [], \"f029\", \"M0 80C0 53.5 21.5 32 48 32l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48L0 80zM64 96l0 64 64 0 0-64L64 96zM0 336c0-26.5 21.5-48 48-48l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96zm64 16l0 64 64 0 0-64-64 0zM304 32l96 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-96 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zm80 64l-64 0 0 64 64 0 0-64zM256 304c0-8.8 7.2-16 16-16l64 0c8.8 0 16 7.2 16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s7.2-16 16-16s16 7.2 16 16l0 96c0 8.8-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s-7.2-16-16-16s-16 7.2-16 16l0 64c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-160zM368 480a16 16 0 1 1 0-32 16 16 0 1 1 0 32zm64 0a16 16 0 1 1 0-32 16 16 0 1 1 0 32z\"]\n};\nconst faClockRotateLeft = {\n  prefix: 'fas',\n  iconName: 'clock-rotate-left',\n  icon: [512, 512, [\"history\"], \"f1da\", \"M75 75L41 41C25.9 25.9 0 36.6 0 57.9L0 168c0 13.3 10.7 24 24 24l110.1 0c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24l0 104c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65 0-94.1c0-13.3-10.7-24-24-24z\"]\n};\nconst faHistory = faClockRotateLeft;\nconst faFaceGrinBeamSweat = {\n  prefix: 'fas',\n  iconName: 'face-grin-beam-sweat',\n  icon: [512, 512, [128517, \"grin-beam-sweat\"], \"f583\", \"M476.8 126.3c-4.1 1.1-8.4 1.7-12.8 1.7c-26.5 0-48-21-48-47c0-5 1.8-11.3 4.6-18.1c.3-.7 .6-1.4 .9-2.1c9-20.2 26.5-44.9 36-57.5c3.2-4.4 9.6-4.4 12.8 0C483.4 20.6 512 61 512 81c0 21.7-14.9 39.8-35.2 45.3zM256 0c51.4 0 99.3 15.2 139.4 41.2c-1.5 3.1-3 6.2-4.3 9.3c-3.4 8-7.1 19-7.1 30.5c0 44.3 36.6 79 80 79c9.6 0 18.8-1.7 27.4-4.8c13.3 30.9 20.6 65 20.6 100.8c0 141.4-114.6 256-256 256S0 397.4 0 256S114.6 0 256 0zM383.8 317.8C345.3 329.4 301.9 336 256 336s-89.3-6.6-127.8-18.2c-12.3-3.7-24.3 7-19.2 18.7c24.5 56.9 81.1 96.7 147 96.7s122.5-39.8 147-96.7c5.1-11.8-6.9-22.4-19.2-18.7zm-166.2-89s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C126.7 188.4 120 206.1 120 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0c0 0 0 0 0 0zm160 0s0 0 0 0s0 0 0 0s0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C286.7 188.4 280 206.1 280 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8c0 0 0 0 0 0s0 0 0 0c0 0 0 0 0 0l.2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2c0 0 0 0 0 0z\"]\n};\nconst faGrinBeamSweat = faFaceGrinBeamSweat;\nconst faFileExport = {\n  prefix: 'fas',\n  iconName: 'file-export',\n  icon: [576, 512, [\"arrow-right-from-file\"], \"f56e\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 128-168 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l168 0 0 112c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 64zM384 336l0-48 110.1 0-39-39c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l39-39L384 336zm0-208l-128 0L256 0 384 128z\"]\n};\nconst faArrowRightFromFile = faFileExport;\nconst faShield = {\n  prefix: 'fas',\n  iconName: 'shield',\n  icon: [512, 512, [128737, \"shield-blank\"], \"f132\", \"M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0z\"]\n};\nconst faShieldBlank = faShield;\nconst faArrowUpShortWide = {\n  prefix: 'fas',\n  iconName: 'arrow-up-short-wide',\n  icon: [576, 512, [\"sort-amount-up-alt\"], \"f885\", \"M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-32 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-160 0zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32l224 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-224 0z\"]\n};\nconst faSortAmountUpAlt = faArrowUpShortWide;\nconst faCommentNodes = {\n  prefix: 'fas',\n  iconName: 'comment-nodes',\n  icon: [640, 512, [], \"e696\", \"M256 448c10.8 0 21.5-.5 32-1.6c.3-15.8 4.4-31.7 12.9-46.4c16-27.7 43.7-44.4 73.2-47.5l16.7-29.2c-4.3-11-6.7-22.9-6.7-35.4c0-53 43-96 96-96c9.1 0 17.8 1.3 26.2 3.6C481.1 102.1 378.6 32 256 32C114.6 32 0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.2 .3-.4 .5-.6 .7c-.3 .3-.5 .5-.6 .7l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zm72.6-32c-17.7 30.6-7.2 69.7 23.4 87.4s69.7 7.2 87.4-23.4c1.5-2.6 2.8-5.3 3.9-8l73.3 0c1.1 2.7 2.4 5.4 3.9 8c17.7 30.6 56.8 41.1 87.4 23.4s41.1-56.8 23.4-87.4c-13.4-23.2-39.1-34.8-64-31.4l-17.6-30.7c-11 11.7-25 20.6-40.6 25.6l16.5 28.9c-3.8 4.8-6.8 10-9 15.6l-73.4 0c-2.2-5.6-5.3-10.8-9-15.6l33-57.7c4.1 .8 8.4 1.3 12.8 1.3c35.3 0 64-28.7 64-64s-28.7-64-64-64s-64 28.7-64 64c0 13.4 4.1 25.8 11.2 36.1l-34.6 60.5c-25-3.4-50.6 8.3-64 31.4z\"]\n};\nconst faHouseMedical = {\n  prefix: 'fas',\n  iconName: 'house-medical',\n  icon: [576, 512, [], \"e3b2\", \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 160.4c0 35.3 28.7 64 64 64l320.4 0c35.5 0 64.2-28.8 64-64.3l-.7-160.2 32 0zM256 208c0-8.8 7.2-16 16-16l32 0c8.8 0 16 7.2 16 16l0 48 48 0c8.8 0 16 7.2 16 16l0 32c0 8.8-7.2 16-16 16l-48 0 0 48c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-48-48 0c-8.8 0-16-7.2-16-16l0-32c0-8.8 7.2-16 16-16l48 0 0-48z\"]\n};\nconst faGolfBallTee = {\n  prefix: 'fas',\n  iconName: 'golf-ball-tee',\n  icon: [384, 512, [\"golf-ball\"], \"f450\", \"M384 192c0 66.8-34.1 125.6-85.8 160L85.8 352C34.1 317.6 0 258.8 0 192C0 86 86 0 192 0S384 86 384 192zM242.1 256.6c0 18.5-15 33.5-33.5 33.5c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4zm-52.3-49.3c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4c0 18.5-15 33.5-33.5 33.5zm113.5-17.5c0 18.5-15 33.5-33.5 33.5c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4zM96 416c0-17.7 14.3-32 32-32l64 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0c-8.8 0-16 7.2-16 16l0 16c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-16c0-8.8-7.2-16-16-16l-16 0c-17.7 0-32-14.3-32-32z\"]\n};\nconst faGolfBall = faGolfBallTee;\nconst faCircleChevronLeft = {\n  prefix: 'fas',\n  iconName: 'circle-chevron-left',\n  icon: [512, 512, [\"chevron-circle-left\"], \"f137\", \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM271 135c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-87 87 87 87c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L167 273c-9.4-9.4-9.4-24.6 0-33.9L271 135z\"]\n};\nconst faChevronCircleLeft = faCircleChevronLeft;\nconst faHouseChimneyWindow = {\n  prefix: 'fas',\n  iconName: 'house-chimney-window',\n  icon: [576, 512, [], \"e00d\", \"M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c.2 35.5-28.5 64.3-64 64.3l-320.4 0c-35.3 0-64-28.7-64-64l0-160.4-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7 416 64c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 121 52.8 46.4c8 7 12 15 11 24zM248 192c-13.3 0-24 10.7-24 24l0 80c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-80c0-13.3-10.7-24-24-24l-80 0z\"]\n};\nconst faPenNib = {\n  prefix: 'fas',\n  iconName: 'pen-nib',\n  icon: [512, 512, [10001], \"f5ad\", \"M368.4 18.3L312.7 74.1 437.9 199.3l55.7-55.7c21.9-21.9 21.9-57.3 0-79.2L447.6 18.3c-21.9-21.9-57.3-21.9-79.2 0zM288 94.6l-9.2 2.8L134.7 140.6c-19.9 6-35.7 21.2-42.3 41L3.8 445.8c-3.8 11.3-1 23.9 7.3 32.4L164.7 324.7c-3-6.3-4.7-13.3-4.7-20.7c0-26.5 21.5-48 48-48s48 21.5 48 48s-21.5 48-48 48c-7.4 0-14.4-1.7-20.7-4.7L33.7 500.9c8.6 8.3 21.1 11.2 32.4 7.3l264.3-88.6c19.7-6.6 35-22.4 41-42.3l43.2-144.1 2.7-9.2L288 94.6z\"]\n};\nconst faTentArrowTurnLeft = {\n  prefix: 'fas',\n  iconName: 'tent-arrow-turn-left',\n  icon: [576, 512, [], \"e580\", \"M120.1 41.8c9.9-8.9 10.7-24 1.8-33.9S97.8-2.7 87.9 6.2l-80 72C2.9 82.7 0 89.2 0 96s2.9 13.3 7.9 17.8l80 72c9.9 8.9 25 8.1 33.9-1.8s8.1-25-1.8-33.9L86.5 120 456 120c39.8 0 72 32.2 72 72l0 40c0 13.3 10.7 24 24 24s24-10.7 24-24l0-40c0-66.3-53.7-120-120-120L86.5 72l33.5-30.2zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"]\n};\nconst faTents = {\n  prefix: 'fas',\n  iconName: 'tents',\n  icon: [640, 512, [], \"e582\", \"M396.6 6.5L235.8 129.1c9.6 1.8 18.9 5.8 27 12l168 128c13.2 10.1 22 24.9 24.5 41.4l6.2 41.5L608 352c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128c-11.5-8.7-27.3-8.7-38.8 0zm-153.2 160c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S22.7 512 32 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"]\n};\nconst faWandMagic = {\n  prefix: 'fas',\n  iconName: 'wand-magic',\n  icon: [512, 512, [\"magic\"], \"f0d0\", \"M14.1 463.3c-18.7-18.7-18.7-49.1 0-67.9L395.4 14.1c18.7-18.7 49.1-18.7 67.9 0l34.6 34.6c18.7 18.7 18.7 49.1 0 67.9L116.5 497.9c-18.7 18.7-49.1 18.7-67.9 0L14.1 463.3zM347.6 187.6l105-105L429.4 59.3l-105 105 23.3 23.3z\"]\n};\nconst faMagic = faWandMagic;\nconst faDog = {\n  prefix: 'fas',\n  iconName: 'dog',\n  icon: [576, 512, [128021], \"f6d3\", \"M309.6 158.5L332.7 19.8C334.6 8.4 344.5 0 356.1 0c7.5 0 14.5 3.5 19 9.5L392 32l52.1 0c12.7 0 24.9 5.1 33.9 14.1L496 64l56 0c13.3 0 24 10.7 24 24l0 24c0 44.2-35.8 80-80 80l-32 0-16 0-21.3 0-5.1 30.5-112-64zM416 256.1L416 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-115.2c-24 12.3-51.2 19.2-80 19.2s-56-6.9-80-19.2L160 480c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-230.2c-28.8-10.9-51.4-35.3-59.2-66.5L1 167.8c-4.3-17.1 6.1-34.5 23.3-38.8s34.5 6.1 38.8 23.3l3.9 15.5C70.5 182 83.3 192 98 192l30 0 16 0 159.8 0L416 256.1zM464 80a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"]\n};\nconst faCarrot = {\n  prefix: 'fas',\n  iconName: 'carrot',\n  icon: [512, 512, [129365], \"f787\", \"M346.7 6C337.6 17 320 42.3 320 72c0 40 15.3 55.3 40 80s40 40 80 40c29.7 0 55-17.6 66-26.7c4-3.3 6-8.2 6-13.3s-2-10-6-13.2c-11.4-9.1-38.3-26.8-74-26.8c-32 0-40 8-40 8s8-8 8-40c0-35.7-17.7-62.6-26.8-74C370 2 365.1 0 360 0s-10 2-13.3 6zM244.6 136c-40 0-77.1 18.1-101.7 48.2l60.5 60.5c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-55.3-55.3 0 .1L2.2 477.9C-2 487-.1 497.8 7 505s17.9 9 27.1 4.8l134.7-62.4-52.1-52.1c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L199.7 433l100.2-46.4c46.4-21.5 76.2-68 76.2-119.2C376 194.8 317.2 136 244.6 136z\"]\n};\nconst faMoon = {\n  prefix: 'fas',\n  iconName: 'moon',\n  icon: [384, 512, [127769, 9214], \"f186\", \"M223.5 32C100 32 0 132.3 0 256S100 480 223.5 480c60.6 0 115.5-24.2 155.8-63.4c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-9.8 1.7-19.8 2.6-30.1 2.6c-96.9 0-175.5-78.8-175.5-176c0-65.8 36-123.1 89.3-153.3c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-6.3-.5-12.6-.8-19-.8z\"]\n};\nconst faWineGlassEmpty = {\n  prefix: 'fas',\n  iconName: 'wine-glass-empty',\n  icon: [320, 512, [\"wine-glass-alt\"], \"f5ce\", \"M64 0C47.4 0 33.5 12.8 32.1 29.3l-14 168.4c-6 72 42.5 135.2 109.9 150.6l0 99.6-48 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l80 0 80 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0 0-99.6c67.4-15.4 115.9-78.6 109.9-150.6l-14-168.4C286.5 12.8 272.6 0 256 0L64 0zM81.9 203.1L93.4 64l133.1 0 11.6 139.1C242 248.8 205.9 288 160 288s-82-39.2-78.1-84.9z\"]\n};\nconst faWineGlassAlt = faWineGlassEmpty;\nconst faCheese = {\n  prefix: 'fas',\n  iconName: 'cheese',\n  icon: [512, 512, [], \"f7ef\", \"M512 240.2l0 15.8L0 256c0-20 10-38.7 26.6-49.8L274.9 40.7c8.6-5.7 18.6-8.7 28.9-8.7C418.8 32 512 125.2 512 240.2zm0 47.8l0 128c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 288l512 0z\"]\n};\nconst faYinYang = {\n  prefix: 'fas',\n  iconName: 'yin-yang',\n  icon: [512, 512, [9775], \"f6ad\", \"M256 64c53 0 96 43 96 96s-43 96-96 96s-96 43-96 96s43 96 96 96C150 448 64 362 64 256S150 64 256 64zm0 448A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm32-352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"]\n};\nconst faMusic = {\n  prefix: 'fas',\n  iconName: 'music',\n  icon: [512, 512, [127925], \"f001\", \"M499.1 6.3c8.1 6 12.9 15.6 12.9 25.7l0 72 0 264c0 44.2-43 80-96 80s-96-35.8-96-80s43-80 96-80c11.2 0 22 1.6 32 4.6L448 147 192 223.8 192 432c0 44.2-43 80-96 80s-96-35.8-96-80s43-80 96-80c11.2 0 22 1.6 32 4.6L128 200l0-72c0-14.1 9.3-26.6 22.8-30.7l320-96c9.7-2.9 20.2-1.1 28.3 5z\"]\n};\nconst faCodeCommit = {\n  prefix: 'fas',\n  iconName: 'code-commit',\n  icon: [640, 512, [], \"f386\", \"M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l131.2 0C178 151 242.6 96 320 96s142 55 156.8 128L608 224c17.7 0 32 14.3 32 32s-14.3 32-32 32l-131.2 0z\"]\n};\nconst faTemperatureLow = {\n  prefix: 'fas',\n  iconName: 'temperature-low',\n  icon: [512, 512, [], \"f76b\", \"M448 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 96a96 96 0 1 1 192 0A96 96 0 1 1 320 96zM144 64c-26.5 0-48 21.5-48 48l0 164.5c0 17.3-7.1 31.9-15.3 42.5C70.2 332.6 64 349.5 64 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5L192 112c0-26.5-21.5-48-48-48zM32 112C32 50.2 82.1 0 144 0s112 50.1 112 112l0 164.4c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S0 447.5 0 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6L32 112zM192 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3l0-50.7c0-8.8 7.2-16 16-16s16 7.2 16 16l0 50.7c18.6 6.6 32 24.4 32 45.3z\"]\n};\nconst faPersonBiking = {\n  prefix: 'fas',\n  iconName: 'person-biking',\n  icon: [640, 512, [128692, \"biking\"], \"f84a\", \"M400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm27.2 64l-61.8-48.8c-17.3-13.6-41.7-13.8-59.1-.3l-83.1 64.2c-30.7 23.8-28.5 70.8 4.3 91.6L288 305.1 288 416c0 17.7 14.3 32 32 32s32-14.3 32-32l0-128c0-10.7-5.3-20.7-14.2-26.6L295 232.9l60.3-48.5L396 217c5.7 4.5 12.7 7 20 7l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-52.8 0zM56 384a72 72 0 1 1 144 0A72 72 0 1 1 56 384zm200 0A128 128 0 1 0 0 384a128 128 0 1 0 256 0zm184 0a72 72 0 1 1 144 0 72 72 0 1 1 -144 0zm200 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\"]\n};\nconst faBiking = faPersonBiking;\nconst faBroom = {\n  prefix: 'fas',\n  iconName: 'broom',\n  icon: [576, 512, [129529], \"f51a\", \"M566.6 54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192-34.7-34.7c-4.2-4.2-10-6.6-16-6.6c-12.5 0-22.6 10.1-22.6 22.6l0 29.1L364.3 320l29.1 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16l-34.7-34.7 192-192zM341.1 353.4L222.6 234.9c-42.7-3.7-85.2 11.7-115.8 42.3l-8 8C76.5 307.5 64 337.7 64 369.2c0 6.8 7.1 11.2 13.2 8.2l51.1-25.5c5-2.5 9.5 4.1 5.4 7.9L7.3 473.4C2.7 477.6 0 483.6 0 489.9C0 502.1 9.9 512 22.1 512l173.3 0c38.8 0 75.9-15.4 103.4-42.8c30.6-30.6 45.9-73.1 42.3-115.8z\"]\n};\nconst faShieldHeart = {\n  prefix: 'fas',\n  iconName: 'shield-heart',\n  icon: [512, 512, [], \"e574\", \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM144 221.3c0-33.8 27.4-61.3 61.3-61.3c16.2 0 31.8 6.5 43.3 17.9l7.4 7.4 7.4-7.4c11.5-11.5 27.1-17.9 43.3-17.9c33.8 0 61.3 27.4 61.3 61.3c0 16.2-6.5 31.8-17.9 43.3l-82.7 82.7c-6.2 6.2-16.4 6.2-22.6 0l-82.7-82.7c-11.5-11.5-17.9-27.1-17.9-43.3z\"]\n};\nconst faGopuram = {\n  prefix: 'fas',\n  iconName: 'gopuram',\n  icon: [512, 512, [], \"f664\", \"M120 0c13.3 0 24 10.7 24 24l0 8 40 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 48 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 40 0 0-8c0-13.3 10.7-24 24-24s24 10.7 24 24l0 8 0 32 0 64c17.7 0 32 14.3 32 32l0 64c17.7 0 32 14.3 32 32l0 96c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32l-64 0 0-160-32 0 0-128-32 0 0-96-32 0 0 96 32 0 0 128 32 0 0 160-80 0 0-48c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 48-80 0 0-160 32 0 0-128 32 0 0-96-32 0 0 96-32 0 0 128-32 0 0 160-64 0c-17.7 0-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32l0-96c0-17.7 14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l0-64 0-32 0-8c0-13.3 10.7-24 24-24zM256 272c-17.7 0-32 14.3-32 32l0 48 64 0 0-48c0-17.7-14.3-32-32-32zm-32-80l0 32 64 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nconst faEarthOceania = {\n  prefix: 'fas',\n  iconName: 'earth-oceania',\n  icon: [512, 512, [\"globe-oceania\"], \"e47b\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM208.6 357.3l-39-13.5c-6.5-2.2-13.6-2.3-20.1-.3l-15.3 4.9c-18.5 5.9-38.5-2.4-47.5-19.5l-3.3-6.2c-10.6-20.1-2.3-45 18.2-54.7l35.3-16.8c2.3-1.1 4.4-2.8 5.9-4.8l5.3-7c7.2-9.6 18.6-15.3 30.6-15.3s23.4 5.7 30.6 15.3l4.6 6.1c2 2.6 4.9 4.5 8.1 5.1c7.8 1.6 15.7-1.5 20.4-7.9l10.4-14.2c2-2.8 5.3-4.4 8.7-4.4c4.4 0 8.4 2.7 10 6.8l10.1 25.9c2.8 7.2 6.7 14 11.5 20.2L311 299.8c5.8 7.4 9 16.6 9 26s-3.2 18.6-9 26L299 367.2c-8.3 10.6-21 16.8-34.4 16.8c-8.4 0-16.6-2.4-23.7-7l-25.4-16.4c-2.2-1.4-4.5-2.5-6.9-3.4zm65.2-214.8L296 164.7c10.1 10.1 2.9 27.3-11.3 27.3l-29.9 0c-5.6 0-11.1-1.2-16.2-3.4l-42.8-19c-14.3-6.3-11.9-27.3 3.4-30.3l38.5-7.7c13.1-2.6 26.7 1.5 36.1 10.9zM248 432c0-8.8 7.2-16 16-16l16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-16 0c-8.8 0-16-7.2-16-16zM431.2 298.9l8 24c2.8 8.4-1.7 17.4-10.1 20.2s-17.4-1.7-20.2-10.1l-8-24c-2.8-8.4 1.7-17.4 10.1-20.2s17.4 1.7 20.2 10.1zm-19.9 80.4l-32 32c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l32-32c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"]\n};\nconst faGlobeOceania = faEarthOceania;\nconst faSquareXmark = {\n  prefix: 'fas',\n  iconName: 'square-xmark',\n  icon: [448, 512, [10062, \"times-square\", \"xmark-square\"], \"f2d3\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm79 143c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faTimesSquare = faSquareXmark;\nconst faXmarkSquare = faSquareXmark;\nconst faHashtag = {\n  prefix: 'fas',\n  iconName: 'hashtag',\n  icon: [448, 512, [62098], \"23\", \"M181.3 32.4c17.4 2.9 29.2 19.4 26.3 36.8L197.8 128l95.1 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4 26.3 36.8L357.8 128l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0L325.8 320l58.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-68.9 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7-95.1 0-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2 384 32 384c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 21.3-128L64 192c-17.7 0-32-14.3-32-32s14.3-32 32-32l68.9 0 11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3zM187.1 192L165.8 320l95.1 0 21.3-128-95.1 0z\"]\n};\nconst faUpRightAndDownLeftFromCenter = {\n  prefix: 'fas',\n  iconName: 'up-right-and-down-left-from-center',\n  icon: [512, 512, [\"expand-alt\"], \"f424\", \"M344 0L488 0c13.3 0 24 10.7 24 24l0 144c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87L327 41c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512L24 512c-13.3 0-24-10.7-24-24L0 344c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8z\"]\n};\nconst faExpandAlt = faUpRightAndDownLeftFromCenter;\nconst faOilCan = {\n  prefix: 'fas',\n  iconName: 'oil-can',\n  icon: [640, 512, [], \"f613\", \"M320 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 32-80 0-48 0-48 0c-26.5 0-48 21.5-48 48l0 64.8c0 19 11.2 36.2 28.5 43.9l67.5 30L96 368c0 26.5 21.5 48 48 48l259.1 0c18.4 0 35.8-7.9 48-21.7L633.5 187.7c12.3-13.9-.3-35.4-18.4-31.5L448 192l-50.5-25.2c-8.9-4.4-18.7-6.8-28.6-6.8L288 160l0-32 32 0zM96 208l0 86.1L48 272.8 48 208l48 0z\"]\n};\nconst faT = {\n  prefix: 'fas',\n  iconName: 't',\n  icon: [384, 512, [116], \"54\", \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96l128 0 0 352c0 17.7 14.3 32 32 32s32-14.3 32-32l0-352 128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 32 32 32z\"]\n};\nconst faHippo = {\n  prefix: 'fas',\n  iconName: 'hippo',\n  icon: [640, 512, [129435], \"f6ed\", \"M407 47c9.4-9.4 24.6-9.4 33.9 0l17.2 17.2c1.9-.1 3.9-.2 5.8-.2l32 0c11.2 0 21.9 2.3 31.6 6.5L543 55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L564 101.9c7.6 12.2 12 26.7 12 42.1c0 10.2 7.4 18.8 16.7 23c27.9 12.5 47.3 40.5 47.3 73c0 26.2-12.6 49.4-32 64l0 32c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-16-64 0 0 16c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-17.6c-11.8-2.4-22.7-7.4-32-14.4c-1.5-1.1-2.9-2.3-4.3-3.5c-17-14.7-27.7-36.4-27.7-60.5c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 44.7 26.2 83.2 64 101.2l0 10.8c0 17.7 14.3 32 32 32l32 0 0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-76c-19.8 7.7-41.4 12-64 12s-44.2-4.3-64-12l0 76c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-118.9L45.9 369.7c-5.4 12.1-19.6 17.6-31.7 12.2S-3.3 362.4 2.1 350.3L24 300.9c5.3-11.9 8-24.7 8-37.7C32 155.7 117.2 68 223.8 64.1l.2-.1 7.2 0L256 64l32 0c41.7 0 83.4 12.1 117.2 25.7c1.7-1.8 3.5-3.6 5.3-5.2L407 81c-9.4-9.4-9.4-24.6 0-33.9zm73 185a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm88 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM480 144a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"]\n};\nconst faChartColumn = {\n  prefix: 'fas',\n  iconName: 'chart-column',\n  icon: [512, 512, [], \"e0e3\", \"M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zM160 224c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm128-64l0 160c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-160c0-17.7 14.3-32 32-32s32 14.3 32 32zm64 32c17.7 0 32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96c0-17.7 14.3-32 32-32zM480 96l0 224c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-224c0-17.7 14.3-32 32-32s32 14.3 32 32z\"]\n};\nconst faInfinity = {\n  prefix: 'fas',\n  iconName: 'infinity',\n  icon: [640, 512, [8734, 9854], \"f534\", \"M0 241.1C0 161 65 96 145.1 96c38.5 0 75.4 15.3 102.6 42.5L320 210.7l72.2-72.2C419.5 111.3 456.4 96 494.9 96C575 96 640 161 640 241.1l0 29.7C640 351 575 416 494.9 416c-38.5 0-75.4-15.3-102.6-42.5L320 301.3l-72.2 72.2C220.5 400.7 183.6 416 145.1 416C65 416 0 351 0 270.9l0-29.7zM274.7 256l-72.2-72.2c-15.2-15.2-35.9-23.8-57.4-23.8C100.3 160 64 196.3 64 241.1l0 29.7c0 44.8 36.3 81.1 81.1 81.1c21.5 0 42.2-8.5 57.4-23.8L274.7 256zm90.5 0l72.2 72.2c15.2 15.2 35.9 23.8 57.4 23.8c44.8 0 81.1-36.3 81.1-81.1l0-29.7c0-44.8-36.3-81.1-81.1-81.1c-21.5 0-42.2 8.5-57.4 23.8L365.3 256z\"]\n};\nconst faVialCircleCheck = {\n  prefix: 'fas',\n  iconName: 'vial-circle-check',\n  icon: [512, 512, [], \"e596\", \"M0 64C0 46.3 14.3 32 32 32l64 0 64 0 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 170.8c-20.2 28.6-32 63.5-32 101.2c0 25.2 5.3 49.1 14.8 70.8C189.5 463.7 160.6 480 128 480c-53 0-96-43-96-96L32 96C14.3 96 0 81.7 0 64zM96 96l0 96 64 0 0-96L96 96zM224 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L352 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faPersonArrowDownToLine = {\n  prefix: 'fas',\n  iconName: 'person-arrow-down-to-line',\n  icon: [640, 512, [], \"e538\", \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 352l0-96 16 0 0 96-16 0zm-64 0l-88 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l120 0 80 0 376 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-344 0 0-191.1 28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6l-29.7 0c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9 120 448zM464 64l0 242.7-25.4-25.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l80 80c12.5 12.5 32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L528 306.7 528 64c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nconst faVoicemail = {\n  prefix: 'fas',\n  iconName: 'voicemail',\n  icon: [640, 512, [], \"f897\", \"M144 320a80 80 0 1 1 0-160 80 80 0 1 1 0 160zm119.8 0c15.3-22.9 24.2-50.4 24.2-80c0-79.5-64.5-144-144-144S0 160.5 0 240s64.5 144 144 144l352 0c79.5 0 144-64.5 144-144s-64.5-144-144-144s-144 64.5-144 144c0 29.6 8.9 57.1 24.2 80l-112.5 0zM496 160a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"]\n};\nconst faFan = {\n  prefix: 'fas',\n  iconName: 'fan',\n  icon: [512, 512, [], \"f863\", \"M258.6 0c-1.7 0-3.4 .1-5.1 .5C168 17 115.6 102.3 130.5 189.3c2.9 17 8.4 32.9 15.9 47.4L32 224l-2.6 0C13.2 224 0 237.2 0 253.4c0 1.7 .1 3.4 .5 5.1C17 344 102.3 396.4 189.3 381.5c17-2.9 32.9-8.4 47.4-15.9L224 480l0 2.6c0 16.2 13.2 29.4 29.4 29.4c1.7 0 3.4-.1 5.1-.5C344 495 396.4 409.7 381.5 322.7c-2.9-17-8.4-32.9-15.9-47.4L480 288l2.6 0c16.2 0 29.4-13.2 29.4-29.4c0-1.7-.1-3.4-.5-5.1C495 168 409.7 115.6 322.7 130.5c-17 2.9-32.9 8.4-47.4 15.9L288 32l0-2.6C288 13.2 274.8 0 258.6 0zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faPersonWalkingLuggage = {\n  prefix: 'fas',\n  iconName: 'person-walking-luggage',\n  icon: [576, 512, [], \"e554\", \"M432 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM347.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L505 232.7l-15.3-36.8C472.5 154.8 432.3 128 387.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L340.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM256 274.1c-7.7-4.4-17.4-1.8-21.9 5.9l-32 55.4L147.7 304c-15.3-8.8-34.9-3.6-43.7 11.7L40 426.6c-8.8 15.3-3.6 34.9 11.7 43.7l55.4 32c15.3 8.8 34.9 3.6 43.7-11.7l64-110.9c1.5-2.6 2.6-5.2 3.3-8L261.9 296c4.4-7.7 1.8-17.4-5.9-21.9z\"]\n};\nconst faUpDown = {\n  prefix: 'fas',\n  iconName: 'up-down',\n  icon: [256, 512, [8597, 11021, \"arrows-alt-v\"], \"f338\", \"M145.6 7.7C141 2.8 134.7 0 128 0s-13 2.8-17.6 7.7l-104 112c-6.5 7-8.2 17.2-4.4 25.9S14.5 160 24 160l56 0 0 192-56 0c-9.5 0-18.2 5.7-22 14.4s-2.1 18.9 4.4 25.9l104 112c4.5 4.9 10.9 7.7 17.6 7.7s13-2.8 17.6-7.7l104-112c6.5-7 8.2-17.2 4.4-25.9s-12.5-14.4-22-14.4l-56 0 0-192 56 0c9.5 0 18.2-5.7 22-14.4s2.1-18.9-4.4-25.9l-104-112z\"]\n};\nconst faArrowsAltV = faUpDown;\nconst faCloudMoonRain = {\n  prefix: 'fas',\n  iconName: 'cloud-moon-rain',\n  icon: [576, 512, [], \"f73c\", \"M481.2 0C417 0 363.5 46.5 353.7 107.6c35.4 17.6 60.2 53.3 62.1 95.1c23.2 11 42 29.7 53.1 52.7c4 .4 8.1 .6 12.3 .6c34.9 0 66.7-13.8 89.9-36.1c5.1-4.9 6.4-12.5 3.2-18.7s-10.1-9.7-17-8.6c-4.9 .8-10 1.3-15.2 1.3c-49 0-88.4-39.3-88.4-87.4c0-32.6 18-61.1 44.9-76.1c6.1-3.4 9.3-10.5 7.8-17.4s-7.3-12-14.3-12.6c-3.6-.3-7.3-.5-10.9-.5zM367.9 383.9c44.2 0 80-35.8 80-80c0-39.3-28.4-72.1-65.8-78.7c1.2-5.6 1.9-11.3 1.9-17.2c0-44.2-35.8-80-80-80c-17 0-32.8 5.3-45.8 14.4C241.3 114.6 210.8 96 176 96c-53 0-96 43-96 96l0 1.3c-45.4 7.6-80 47.1-80 94.6c0 53 43 96 96 96l271.9 0zM85.4 420.1c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3z\"]\n};\nconst faCalendar = {\n  prefix: 'fas',\n  iconName: 'calendar',\n  icon: [448, 512, [128197, 128198], \"f133\", \"M96 32l0 32L48 64C21.5 64 0 85.5 0 112l0 48 448 0 0-48c0-26.5-21.5-48-48-48l-48 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32L160 64l0-32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192L0 192 0 464c0 26.5 21.5 48 48 48l352 0c26.5 0 48-21.5 48-48l0-272z\"]\n};\nconst faTrailer = {\n  prefix: 'fas',\n  iconName: 'trailer',\n  icon: [640, 512, [], \"e041\", \"M48 32C21.5 32 0 53.5 0 80L0 336c0 26.5 21.5 48 48 48l17.1 0c7.8-54.3 54.4-96 110.9-96s103.1 41.7 110.9 96L488 384l8 0 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-240c0-26.5-21.5-48-48-48L48 32zM80 96c8.8 0 16 7.2 16 16l0 131.2c-11.4 5.9-22.2 12.9-32 21L64 112c0-8.8 7.2-16 16-16zm96 128c-5.4 0-10.7 .2-16 .7L160 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112.7c-5.3-.5-10.6-.7-16-.7zm80 19.2L256 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 152.2c-9.8-8.1-20.6-15.2-32-21zM368 96c8.8 0 16 7.2 16 16l0 192c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-192c0-8.8 7.2-16 16-16zm112 16l0 192c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-192c0-8.8 7.2-16 16-16s16 7.2 16 16zM176 480a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-112a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faBahai = {\n  prefix: 'fas',\n  iconName: 'bahai',\n  icon: [576, 512, [\"haykal\"], \"f666\", \"M288 0c14.5 0 27.2 9.7 30.9 23.8l23.9 89.6 75.9-53.3c11.9-8.3 27.8-7.6 39 1.7s14.6 24.9 8.4 38.1l-39.3 84 92.4 8c14.4 1.2 26.2 12 28.8 26.3s-4.9 28.5-18 34.6l-84.1 39.1 65.7 65.5c10.3 10.2 12.4 26.1 5.1 38.7s-22 18.7-36 14.9L391 386.8l8.2 92.4c1.3 14.4-7.3 27.9-20.9 32.9s-28.9 .1-37.2-11.7l-53.1-76-53.1 76c-8.3 11.9-23.6 16.7-37.2 11.7s-22.2-18.5-20.9-32.9l8.2-92.4L95.4 410.9c-14 3.8-28.8-2.3-36-14.9s-5.2-28.4 5.1-38.7l65.7-65.5L46 252.7c-13.1-6.1-20.5-20.3-18-34.6s14.3-25.1 28.8-26.3l92.4-8-39.3-84c-6.1-13.1-2.7-28.8 8.4-38.1s27.1-10 39-1.7l75.9 53.3 23.9-89.6C260.8 9.7 273.5 0 288 0zm0 156.2l-4.8 18c-2.7 10.1-10.2 18.2-20 21.8s-20.8 2.1-29.3-3.9l-15.2-10.7 7.9 16.8c4.4 9.5 4 20.5-1.3 29.6s-14.5 15-25 15.9l-18.5 1.6 16.8 7.8c9.5 4.4 16.2 13.2 18 23.5s-1.5 20.8-8.9 28.2l-13.2 13.1 17.9-4.8c10.1-2.7 20.9-.3 28.9 6.4s12.2 16.9 11.3 27.3l-1.6 18.5 10.6-15.2c6-8.6 15.8-13.7 26.2-13.7s20.2 5.1 26.2 13.7l10.6 15.2-1.6-18.5c-.9-10.4 3.3-20.6 11.3-27.3s18.8-9.1 28.9-6.4l17.9 4.8-13.2-13.1c-7.4-7.4-10.7-17.9-8.9-28.2s8.5-19.1 18-23.5l16.8-7.8-18.5-1.6c-10.4-.9-19.7-6.8-25-15.9s-5.7-20.1-1.3-29.6l7.9-16.8-15.2 10.7c-8.6 6-19.5 7.5-29.3 3.9s-17.3-11.7-20-21.8l-4.8-18z\"]\n};\nconst faHaykal = faBahai;\nconst faSdCard = {\n  prefix: 'fas',\n  iconName: 'sd-card',\n  icon: [384, 512, [], \"f7c2\", \"M320 0L141.3 0C124.3 0 108 6.7 96 18.7L18.7 96C6.7 108 0 124.3 0 141.3L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384c0-35.3-28.7-64-64-64zM160 88l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24zm80 0l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24zm80 0l0 48c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-48c0-13.3 10.7-24 24-24s24 10.7 24 24z\"]\n};\nconst faDragon = {\n  prefix: 'fas',\n  iconName: 'dragon',\n  icon: [640, 512, [128009], \"f6d5\", \"M352 124.5l-51.9-13c-6.5-1.6-11.3-7.1-12-13.8s2.8-13.1 8.7-16.1l40.8-20.4L294.4 28.8c-5.5-4.1-7.8-11.3-5.6-17.9S297.1 0 304 0L416 0l32 0 16 0c30.2 0 58.7 14.2 76.8 38.4l57.6 76.8c6.2 8.3 9.6 18.4 9.6 28.8c0 26.5-21.5 48-48 48l-21.5 0c-17 0-33.3-6.7-45.3-18.7L480 160l-32 0 0 21.5c0 24.8 12.8 47.9 33.8 61.1l106.6 66.6c32.1 20.1 51.6 55.2 51.6 93.1C640 462.9 590.9 512 530.2 512L496 512l-64 0L32.3 512c-3.3 0-6.6-.4-9.6-1.4C13.5 507.8 6 501 2.4 492.1C1 488.7 .2 485.2 0 481.4c-.2-3.7 .3-7.3 1.3-10.7c2.8-9.2 9.6-16.7 18.6-20.4c3-1.2 6.2-2 9.5-2.2L433.3 412c8.3-.7 14.7-7.7 14.7-16.1c0-4.3-1.7-8.4-4.7-11.4l-44.4-44.4c-30-30-46.9-70.7-46.9-113.1l0-45.5 0-57zM512 72.3c0-.1 0-.2 0-.3s0-.2 0-.3l0 .6zm-1.3 7.4L464.3 68.1c-.2 1.3-.3 2.6-.3 3.9c0 13.3 10.7 24 24 24c10.6 0 19.5-6.8 22.7-16.3zM130.9 116.5c16.3-14.5 40.4-16.2 58.5-4.1l130.6 87 0 27.5c0 32.8 8.4 64.8 24 93l-232 0c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7L171 232.3 18.4 255.8c-7 1.1-13.9-2.6-16.9-9s-1.5-14.1 3.8-18.8L130.9 116.5z\"]\n};\nconst faShoePrints = {\n  prefix: 'fas',\n  iconName: 'shoe-prints',\n  icon: [640, 512, [], \"f54b\", \"M416 0C352.3 0 256 32 256 32l0 128c48 0 76 16 104 32s56 32 104 32c56.4 0 176-16 176-96S512 0 416 0zM128 96c0 35.3 28.7 64 64 64l32 0 0-128-32 0c-35.3 0-64 28.7-64 64zM288 512c96 0 224-48 224-128s-119.6-96-176-96c-48 0-76 16-104 32s-56 32-104 32l0 128s96.3 32 160 32zM0 416c0 35.3 28.7 64 64 64l32 0 0-128-32 0c-35.3 0-64 28.7-64 64z\"]\n};\nconst faCirclePlus = {\n  prefix: 'fas',\n  iconName: 'circle-plus',\n  icon: [512, 512, [\"plus-circle\"], \"f055\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"]\n};\nconst faPlusCircle = faCirclePlus;\nconst faFaceGrinTongueWink = {\n  prefix: 'fas',\n  iconName: 'face-grin-tongue-wink',\n  icon: [512, 512, [128540, \"grin-tongue-wink\"], \"f58b\", \"M174.5 498.8C73.1 464.7 0 368.9 0 256C0 114.6 114.6 0 256 0S512 114.6 512 256c0 112.9-73.1 208.7-174.5 242.8C346.7 484 352 466.6 352 448l0-46.9c24.3-17.5 43.6-41.6 55.4-69.6c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c11.7 27.8 30.8 51.7 54.8 69.2l0 47.3c0 18.6 5.3 36 14.5 50.8zm20.7-265.2c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2c17.6-23.5 52.8-23.5 70.4 0zM336 272a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM320 402.6l0 45.4c0 35.3-28.7 64-64 64s-64-28.7-64-64l0-45.4c0-14.7 11.9-26.6 26.6-26.6l2 0c11.3 0 21.1 7.9 23.6 18.9c2.8 12.6 20.8 12.6 23.6 0c2.5-11.1 12.3-18.9 23.6-18.9l2 0c14.7 0 26.6 11.9 26.6 26.6zM336 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faGrinTongueWink = faFaceGrinTongueWink;\nconst faHandHolding = {\n  prefix: 'fas',\n  iconName: 'hand-holding',\n  icon: [576, 512, [], \"f4bd\", \"M559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416 272 416c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0-16 0-78.3 0c-29.1 0-57.3 9.9-80 28L68.8 384 32 384c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l160 0 160.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-367-8.2c.3 0 .6 0 .9 0c0 0 0 0 0 0c-.3 0-.6 0-.9 0z\"]\n};\nconst faPlugCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'plug-circle-exclamation',\n  icon: [576, 512, [], \"e55d\", \"M96 0C78.3 0 64 14.3 64 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32l0 96 64 0 0-96c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c0 77.4 55 142 128 156.8l0 67.2c0 17.7 14.3 32 32 32s32-14.3 32-32l0-67.2c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32L32 160zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16l0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80c0-8.8 7.2-16 16-16z\"]\n};\nconst faLinkSlash = {\n  prefix: 'fas',\n  iconName: 'link-slash',\n  icon: [640, 512, [\"chain-broken\", \"chain-slash\", \"unlink\"], \"f127\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L489.3 358.2l90.5-90.5c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114l-96 96-31.9-25C430.9 239.6 420.1 175.1 377 132c-52.2-52.3-134.5-56.2-191.3-11.7L38.8 5.1zM239 162c30.1-14.9 67.7-9.9 92.8 15.3c20 20 27.5 48.3 21.7 74.5L239 162zM406.6 416.4L220.9 270c-2.1 39.8 12.2 80.1 42.2 110c38.9 38.9 94.4 51 143.6 36.3zm-290-228.5L60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5l61.8-61.8-50.6-39.9z\"]\n};\nconst faChainBroken = faLinkSlash;\nconst faChainSlash = faLinkSlash;\nconst faUnlink = faLinkSlash;\nconst faClone = {\n  prefix: 'fas',\n  iconName: 'clone',\n  icon: [512, 512, [], \"f24d\", \"M288 448L64 448l0-224 64 0 0-64-64 0c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l224 0c35.3 0 64-28.7 64-64l0-64-64 0 0 64zm-64-96l224 0c35.3 0 64-28.7 64-64l0-224c0-35.3-28.7-64-64-64L224 0c-35.3 0-64 28.7-64 64l0 224c0 35.3 28.7 64 64 64z\"]\n};\nconst faPersonWalkingArrowLoopLeft = {\n  prefix: 'fas',\n  iconName: 'person-walking-arrow-loop-left',\n  icon: [640, 512, [], \"e551\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zm347.7 119c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L461.3 384l18.7 0c88.4 0 160-71.6 160-160s-71.6-160-160-160L352 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c53 0 96 43 96 96s-43 96-96 96l-18.7 0 25.4-25.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3l80 80z\"]\n};\nconst faArrowUpZA = {\n  prefix: 'fas',\n  iconName: 'arrow-up-z-a',\n  icon: [576, 512, [\"sort-alpha-up-alt\"], \"f882\", \"M183.6 42.4C177.5 35.8 169 32 160 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L128 146.3 128 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-301.7 32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 64c0 17.7 14.3 32 32 32l50.7 0-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l128 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-50.7 0 73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L352 32c-17.7 0-32 14.3-32 32zm96 192c-12.1 0-23.2 6.8-28.6 17.7l-64 128-16 32c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3 88.4 0 7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-16-32-64-128C439.2 262.8 428.1 256 416 256zM395.8 400L416 359.6 436.2 400l-40.4 0z\"]\n};\nconst faSortAlphaUpAlt = faArrowUpZA;\nconst faFireFlameCurved = {\n  prefix: 'fas',\n  iconName: 'fire-flame-curved',\n  icon: [384, 512, [\"fire-alt\"], \"f7e4\", \"M153.6 29.9l16-21.3C173.6 3.2 180 0 186.7 0C198.4 0 208 9.6 208 21.3V43.5c0 13.1 5.4 25.7 14.9 34.7L307.6 159C356.4 205.6 384 270.2 384 337.7C384 434 306 512 209.7 512H192C86 512 0 426 0 320v-3.8c0-48.8 19.4-95.6 53.9-130.1l3.5-3.5c4.2-4.2 10-6.6 16-6.6C85.9 176 96 186.1 96 198.6V288c0 35.3 28.7 64 64 64s64-28.7 64-64v-3.9c0-18-7.2-35.3-19.9-48l-38.6-38.6c-24-24-37.5-56.7-37.5-90.7c0-27.7 9-54.8 25.6-76.9z\"]\n};\nconst faFireAlt = faFireFlameCurved;\nconst faTornado = {\n  prefix: 'fas',\n  iconName: 'tornado',\n  icon: [448, 512, [127786], \"f76f\", \"M0 32L0 45.6C0 62.7 1.7 79.6 5 96l352.8 0c3.2-6.9 7.5-13.3 13-18.8l38.6-38.6c4.2-4.2 6.6-10 6.6-16C416 10.1 405.9 0 393.4 0L32 0C14.3 0 0 14.3 0 32zm352.2 96L13.6 128c12.2 35.9 32.3 68.7 58.8 96L412 224l-47.2-62.9c-7.3-9.7-11.6-21.2-12.6-33.1zm-226 138.2l116.4 68.5c8.2 4.8 15.8 10.7 22.5 17.3L445 352c2-9.8 3-19.9 3-30.1c0-23-5.3-45.5-15.3-65.9l-322.5 0c5.2 3.6 10.5 7 16 10.2zM288 384c10.3 21.4 13.8 45.5 9.9 69l-5.9 35.7c-2 12.2 7.4 23.4 19.8 23.4c5.3 0 10.4-2.1 14.2-5.9l78.2-78.2c12.8-12.8 23.1-27.7 30.4-43.9L288 384z\"]\n};\nconst faFileCirclePlus = {\n  prefix: 'fas',\n  iconName: 'file-circle-plus',\n  icon: [576, 512, [58606], \"e494\", \"M0 64C0 28.7 28.7 0 64 0L224 0l0 128c0 17.7 14.3 32 32 32l128 0 0 38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7L64 512c-35.3 0-64-28.7-64-64L0 64zm384 64l-128 0L256 0 384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-48z\"]\n};\nconst faBookQuran = {\n  prefix: 'fas',\n  iconName: 'book-quran',\n  icon: [448, 512, [\"quran\"], \"f687\", \"M352 0c53 0 96 43 96 96l0 320c0 53-43 96-96 96L64 512l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c-17.7 0-32-14.3-32-32L0 32C0 14.3 14.3 0 32 0L64 0 352 0zm0 384L96 384l0 64 256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zM274.1 150.2l-8.9 21.4-23.1 1.9c-5.7 .5-8 7.5-3.7 11.2L256 199.8l-5.4 22.6c-1.3 5.5 4.7 9.9 9.6 6.9L280 217.2l19.8 12.1c4.9 3 10.9-1.4 9.6-6.9L304 199.8l17.6-15.1c4.3-3.7 2-10.8-3.7-11.2l-23.1-1.9-8.9-21.4c-2.2-5.3-9.6-5.3-11.8 0zM96 192c0 70.7 57.3 128 128 128c25.6 0 49.5-7.5 69.5-20.5c3.2-2.1 4.5-6.2 3.1-9.7s-5.2-5.6-9-4.8c-6.1 1.2-12.5 1.9-19 1.9c-52.4 0-94.9-42.5-94.9-94.9s42.5-94.9 94.9-94.9c6.5 0 12.8 .7 19 1.9c3.8 .8 7.5-1.3 9-4.8s.2-7.6-3.1-9.7C273.5 71.5 249.6 64 224 64C153.3 64 96 121.3 96 192z\"]\n};\nconst faQuran = faBookQuran;\nconst faAnchor = {\n  prefix: 'fas',\n  iconName: 'anchor',\n  icon: [576, 512, [9875], \"f13d\", \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80L224 176c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 208-48 0c-53 0-96-43-96-96l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 88.4 71.6 160 160 160l80 0 80 0c88.4 0 160-71.6 160-160l0-6.1 7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-56-56c-9.4-9.4-24.6-9.4-33.9 0l-56 56c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7 0 6.1c0 53-43 96-96 96l-48 0 0-208 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-10.9 0z\"]\n};\nconst faBorderAll = {\n  prefix: 'fas',\n  iconName: 'border-all',\n  icon: [448, 512, [], \"f84c\", \"M384 96l0 128-128 0 0-128 128 0zm0 192l0 128-128 0 0-128 128 0zM192 224L64 224 64 96l128 0 0 128zM64 288l128 0 0 128L64 416l0-128zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32z\"]\n};\nconst faFaceAngry = {\n  prefix: 'fas',\n  iconName: 'face-angry',\n  icon: [512, 512, [128544, \"angry\"], \"f556\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM338.7 395.9c6.6-5.9 7.1-16 1.2-22.6C323.8 355.4 295.7 336 256 336s-67.8 19.4-83.9 37.3c-5.9 6.6-5.4 16.7 1.2 22.6s16.7 5.4 22.6-1.2c11.7-13 31.6-26.7 60.1-26.7s48.4 13.7 60.1 26.7c5.9 6.6 16 7.1 22.6 1.2zM176.4 272c17.7 0 32-14.3 32-32c0-1.5-.1-3-.3-4.4l10.9 3.6c8.4 2.8 17.4-1.7 20.2-10.1s-1.7-17.4-10.1-20.2l-96-32c-8.4-2.8-17.4 1.7-20.2 10.1s1.7 17.4 10.1 20.2l30.7 10.2c-5.8 5.8-9.3 13.8-9.3 22.6c0 17.7 14.3 32 32 32zm192-32c0-8.9-3.6-17-9.5-22.8l30.2-10.1c8.4-2.8 12.9-11.9 10.1-20.2s-11.9-12.9-20.2-10.1l-96 32c-8.4 2.8-12.9 11.9-10.1 20.2s11.9 12.9 20.2 10.1l11.7-3.9c-.2 1.5-.3 3.1-.3 4.7c0 17.7 14.3 32 32 32s32-14.3 32-32z\"]\n};\nconst faAngry = faFaceAngry;\nconst faCookieBite = {\n  prefix: 'fas',\n  iconName: 'cookie-bite',\n  icon: [512, 512, [], \"f564\", \"M257.5 27.6c-.8-5.4-4.9-9.8-10.3-10.6c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9c-.9-5.3-5.3-9.3-10.6-10.1c-51.5-8.2-92.8-47.1-104.5-97.4c-1.8-7.6-8-13.4-15.7-14.6c-54.6-8.7-97.7-52-106.2-106.8zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faArrowTrendDown = {\n  prefix: 'fas',\n  iconName: 'arrow-trend-down',\n  icon: [576, 512, [], \"e097\", \"M384 352c-17.7 0-32 14.3-32 32s14.3 32 32 32l160 0c17.7 0 32-14.3 32-32l0-160c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 82.7L342.6 137.4c-12.5-12.5-32.8-12.5-45.3 0L192 242.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0L320 205.3 466.7 352 384 352z\"]\n};\nconst faRss = {\n  prefix: 'fas',\n  iconName: 'rss',\n  icon: [448, 512, [\"feed\"], \"f09e\", \"M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faFeed = faRss;\nconst faDrawPolygon = {\n  prefix: 'fas',\n  iconName: 'draw-polygon',\n  icon: [448, 512, [], \"f5ee\", \"M96 151.4l0 209.1c9.7 5.6 17.8 13.7 23.4 23.4l209.1 0c0-.1 .1-.2 .1-.3l-4.5-7.9-32-56s0 0 0 0c-1.4 .1-2.8 .1-4.2 .1c-35.3 0-64-28.7-64-64s28.7-64 64-64c1.4 0 2.8 0 4.2 .1c0 0 0 0 0 0l32-56 4.5-7.9-.1-.3-209.1 0c-5.6 9.7-13.7 17.8-23.4 23.4zM384.3 352c35.2 .2 63.7 28.7 63.7 64c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32l-209.1 0c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4l0-209.1C12.9 140.4 0 119.7 0 96C0 60.7 28.7 32 64 32c23.7 0 44.4 12.9 55.4 32l209.1 0c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 35.3-28.5 63.8-63.7 64l-4.5 7.9-32 56-2.3 4c4.2 8.5 6.5 18 6.5 28.1s-2.3 19.6-6.5 28.1l2.3 4 32 56 4.5 7.9z\"]\n};\nconst faScaleBalanced = {\n  prefix: 'fas',\n  iconName: 'scale-balanced',\n  icon: [640, 512, [9878, \"balance-scale\"], \"f24e\", \"M384 32l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L398.4 96c-5.2 25.8-22.9 47.1-46.4 57.3L352 448l160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l160 0 0-294.7c-23.5-10.3-41.2-31.6-46.4-57.3L128 96c-17.7 0-32-14.3-32-32s14.3-32 32-32l128 0c14.6-19.4 37.8-32 64-32s49.4 12.6 64 32zm55.6 288l144.9 0L512 195.8 439.6 320zM512 416c-62.9 0-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C627.2 382 574.9 416 512 416zM126.8 195.8L54.4 320l144.9 0L126.8 195.8zM.9 337.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C242 382 189.7 416 126.8 416S11.7 382 .9 337.1z\"]\n};\nconst faBalanceScale = faScaleBalanced;\nconst faGaugeSimpleHigh = {\n  prefix: 'fas',\n  iconName: 'gauge-simple-high',\n  icon: [512, 512, [61668, \"tachometer\", \"tachometer-fast\"], \"f62a\", \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-15.9-5.8-30.4-15.3-41.6l76.6-147.4c6.1-11.8 1.5-26.3-10.2-32.4s-26.2-1.5-32.4 10.2L262.1 288.3c-2-.2-4-.3-6.1-.3c-35.3 0-64 28.7-64 64s28.7 64 64 64s64-28.7 64-64z\"]\n};\nconst faTachometer = faGaugeSimpleHigh;\nconst faTachometerFast = faGaugeSimpleHigh;\nconst faShower = {\n  prefix: 'fas',\n  iconName: 'shower',\n  icon: [512, 512, [128703], \"f2cc\", \"M64 131.9C64 112.1 80.1 96 99.9 96c9.5 0 18.6 3.8 25.4 10.5l16.2 16.2c-21 38.9-17.4 87.5 10.9 123L151 247c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L345 121c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-1.3 1.3c-35.5-28.3-84.2-31.9-123-10.9L170.5 61.3C151.8 42.5 126.4 32 99.9 32C44.7 32 0 76.7 0 131.9L0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-316.1zM256 352a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm32-32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faDesktop = {\n  prefix: 'fas',\n  iconName: 'desktop',\n  icon: [576, 512, [128421, 61704, \"desktop-alt\"], \"f390\", \"M64 0C28.7 0 0 28.7 0 64L0 352c0 35.3 28.7 64 64 64l176 0-10.7 32L160 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-69.3 0L336 416l176 0c35.3 0 64-28.7 64-64l0-288c0-35.3-28.7-64-64-64L64 0zM512 64l0 224L64 288 64 64l448 0z\"]\n};\nconst faDesktopAlt = faDesktop;\nconst faM = {\n  prefix: 'fas',\n  iconName: 'm',\n  icon: [448, 512, [109], \"4d\", \"M22.7 33.4c13.5-4.1 28.1 1.1 35.9 12.9L224 294.3 389.4 46.3c7.8-11.7 22.4-17 35.9-12.9S448 49.9 448 64l0 384c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-278.3L250.6 369.8c-5.9 8.9-15.9 14.2-26.6 14.2s-20.7-5.3-26.6-14.2L64 169.7 64 448c0 17.7-14.3 32-32 32s-32-14.3-32-32L0 64C0 49.9 9.2 37.5 22.7 33.4z\"]\n};\nconst faTableList = {\n  prefix: 'fas',\n  iconName: 'table-list',\n  icon: [512, 512, [\"th-list\"], \"f00b\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm64 0l0 64 64 0 0-64L64 96zm384 0L192 96l0 64 256 0 0-64zM64 224l0 64 64 0 0-64-64 0zm384 0l-256 0 0 64 256 0 0-64zM64 352l0 64 64 0 0-64-64 0zm384 0l-256 0 0 64 256 0 0-64z\"]\n};\nconst faThList = faTableList;\nconst faCommentSms = {\n  prefix: 'fas',\n  iconName: 'comment-sms',\n  icon: [512, 512, [\"sms\"], \"f7cd\", \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3c0 0 0 0 0 0c0 0 0 0 0 0s0 0 0 0s0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM96 212.8c0-20.3 16.5-36.8 36.8-36.8l19.2 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-19.2 0c-2.7 0-4.8 2.2-4.8 4.8c0 1.6 .8 3.1 2.2 4l29.4 19.6c10.3 6.8 16.4 18.3 16.4 30.7c0 20.3-16.5 36.8-36.8 36.8L112 304c-8.8 0-16-7.2-16-16s7.2-16 16-16l27.2 0c2.7 0 4.8-2.2 4.8-4.8c0-1.6-.8-3.1-2.2-4l-29.4-19.6C102.2 236.7 96 225.2 96 212.8zM372.8 176l19.2 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-19.2 0c-2.7 0-4.8 2.2-4.8 4.8c0 1.6 .8 3.1 2.2 4l29.4 19.6c10.2 6.8 16.4 18.3 16.4 30.7c0 20.3-16.5 36.8-36.8 36.8L352 304c-8.8 0-16-7.2-16-16s7.2-16 16-16l27.2 0c2.7 0 4.8-2.2 4.8-4.8c0-1.6-.8-3.1-2.2-4l-29.4-19.6c-10.2-6.8-16.4-18.3-16.4-30.7c0-20.3 16.5-36.8 36.8-36.8zm-152 6.4L256 229.3l35.2-46.9c4.1-5.5 11.3-7.8 17.9-5.6s10.9 8.3 10.9 15.2l0 96c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48-19.2 25.6c-3 4-7.8 6.4-12.8 6.4s-9.8-2.4-12.8-6.4L224 240l0 48c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-96c0-6.9 4.4-13 10.9-15.2s13.7 .1 17.9 5.6z\"]\n};\nconst faSms = faCommentSms;\nconst faBook = {\n  prefix: 'fas',\n  iconName: 'book',\n  icon: [448, 512, [128212], \"f02d\", \"M96 0C43 0 0 43 0 96L0 416c0 53 43 96 96 96l288 0 32 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l0-64c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L384 0 96 0zm0 384l256 0 0 64L96 448c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16zm16 48l192 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-192 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faUserPlus = {\n  prefix: 'fas',\n  iconName: 'user-plus',\n  icon: [640, 512, [], \"f234\", \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304l91.4 0C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7L29.7 512C13.3 512 0 498.7 0 482.3zM504 312l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"]\n};\nconst faCheck = {\n  prefix: 'fas',\n  iconName: 'check',\n  icon: [448, 512, [10003, 10004], \"f00c\", \"M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z\"]\n};\nconst faBatteryThreeQuarters = {\n  prefix: 'fas',\n  iconName: 'battery-three-quarters',\n  icon: [576, 512, [\"battery-4\"], \"f241\", \"M464 160c8.8 0 16 7.2 16 16l0 160c0 8.8-7.2 16-16 16L80 352c-8.8 0-16-7.2-16-16l0-160c0-8.8 7.2-16 16-16l384 0zM80 96C35.8 96 0 131.8 0 176L0 336c0 44.2 35.8 80 80 80l384 0c44.2 0 80-35.8 80-80l0-16c17.7 0 32-14.3 32-32l0-64c0-17.7-14.3-32-32-32l0-16c0-44.2-35.8-80-80-80L80 96zm272 96L96 192l0 128 256 0 0-128z\"]\n};\nconst faBattery4 = faBatteryThreeQuarters;\nconst faHouseCircleCheck = {\n  prefix: 'fas',\n  iconName: 'house-circle-check',\n  icon: [640, 512, [], \"e509\", \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1l32 0 0 69.7c-.1 .9-.1 1.8-.1 2.8l0 112c0 22.1 17.9 40 40 40l16 0c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2l31.9 0 24 0c22.1 0 40-17.9 40-40l0-24 0-64c0-17.7 14.3-32 32-32l64 0 .7 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"]\n};\nconst faAngleLeft = {\n  prefix: 'fas',\n  iconName: 'angle-left',\n  icon: [320, 512, [8249], \"f104\", \"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\"]\n};\nconst faDiagramSuccessor = {\n  prefix: 'fas',\n  iconName: 'diagram-successor',\n  icon: [512, 512, [], \"e47a\", \"M512 416l0-64c0-35.3-28.7-64-64-64L64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64zM64 160l0-64 144 0 16 0 0 64L64 160zm224 0l0-64 80 0c8.8 0 16 7.2 16 16l0 16-38.1 0c-21.4 0-32.1 25.9-17 41L399 239c9.4 9.4 24.6 9.4 33.9 0L503 169c15.1-15.1 4.4-41-17-41L448 128l0-16c0-44.2-35.8-80-80-80L224 32l-16 0L64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64z\"]\n};\nconst faTruckArrowRight = {\n  prefix: 'fas',\n  iconName: 'truck-arrow-right',\n  icon: [640, 512, [], \"e58b\", \"M0 48C0 21.5 21.5 0 48 0L368 0c26.5 0 48 21.5 48 48l0 48 50.7 0c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3l0 18.7 0 32 0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0c0 53-43 96-96 96s-96-43-96-96l-128 0c0 53-43 96-96 96s-96-43-96-96l-16 0c-26.5 0-48-21.5-48-48L0 48zM416 256l128 0 0-18.7L466.7 160 416 160l0 96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM257 95c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39L96 168c-13.3 0-24 10.7-24 24s10.7 24 24 24l166.1 0-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9L257 95z\"]\n};\nconst faArrowsSplitUpAndLeft = {\n  prefix: 'fas',\n  iconName: 'arrows-split-up-and-left',\n  icon: [512, 512, [], \"e4bc\", \"M246.6 150.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L352 109.3 352 384c0 35.3 28.7 64 64 64l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-70.7 0-128-57.3-128-128c0-35.3-28.7-64-64-64l-114.7 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L109.3 256 224 256c23.3 0 45.2 6.2 64 17.1l0-163.9-41.4 41.4z\"]\n};\nconst faHandFist = {\n  prefix: 'fas',\n  iconName: 'hand-fist',\n  icon: [448, 512, [9994, \"fist-raised\"], \"f6de\", \"M192 0c17.7 0 32 14.3 32 32l0 112-64 0 0-112c0-17.7 14.3-32 32-32zM64 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 80-64 0 0-80zm192 0c0-17.7 14.3-32 32-32s32 14.3 32 32l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96zm96 64c0-17.7 14.3-32 32-32s32 14.3 32 32l0 64c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-64zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6l0 8.6c0 52.3-25.1 98.8-64 128l0 96c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-78.4c-17.3-7.9-33.2-18.8-46.9-32.5L69.5 357.5C45.5 333.5 32 300.9 32 267l0-27c0-35.3 28.7-64 64-64l88 0c22.1 0 40 17.9 40 40s-17.9 40-40 40l-56 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l56 0c39.8 0 72-32.2 72-72z\"]\n};\nconst faFistRaised = faHandFist;\nconst faCloudMoon = {\n  prefix: 'fas',\n  iconName: 'cloud-moon',\n  icon: [640, 512, [], \"f6c3\", \"M495.8 0c5.5 0 10.9 .2 16.3 .7c7 .6 12.8 5.7 14.3 12.5s-1.6 13.9-7.7 17.3c-44.4 25.2-74.4 73-74.4 127.8c0 81 65.5 146.6 146.2 146.6c8.6 0 17-.7 25.1-2.1c6.9-1.2 13.8 2.2 17 8.5s1.9 13.8-3.1 18.7c-34.5 33.6-81.7 54.4-133.6 54.4c-9.3 0-18.4-.7-27.4-1.9c-11.2-22.6-29.8-40.9-52.6-51.7c-2.7-58.5-50.3-105.3-109.2-106.7c-1.7-10.4-2.6-21-2.6-31.8C304 86.1 389.8 0 495.8 0zM447.9 431.9c0 44.2-35.8 80-80 80L96 511.9c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"]\n};\nconst faBriefcase = {\n  prefix: 'fas',\n  iconName: 'briefcase',\n  icon: [512, 512, [128188], \"f0b1\", \"M184 48l144 0c4.4 0 8 3.6 8 8l0 40L176 96l0-40c0-4.4 3.6-8 8-8zm-56 8l0 40L64 96C28.7 96 0 124.7 0 160l0 96 192 0 128 0 192 0 0-96c0-35.3-28.7-64-64-64l-64 0 0-40c0-30.9-25.1-56-56-56L184 0c-30.9 0-56 25.1-56 56zM512 288l-192 0 0 32c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-32L0 288 0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-128z\"]\n};\nconst faPersonFalling = {\n  prefix: 'fas',\n  iconName: 'person-falling',\n  icon: [512, 512, [], \"e546\", \"M288 0c17.7 0 32 14.3 32 32l0 9.8c0 54.6-27.9 104.6-72.5 133.6l.2 .3L304.5 256l87.5 0c15.1 0 29.3 7.1 38.4 19.2l43.2 57.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4L384 320l-96 0-1.4 0 92.3 142.6c9.6 14.8 5.4 34.6-9.5 44.3s-34.6 5.4-44.3-9.5L164.5 249.2c-2.9 9.2-4.5 19-4.5 29l0 73.8c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-73.8c0-65.1 39.6-123.7 100.1-147.9C232.3 115.8 256 80.8 256 41.8l0-9.8c0-17.7 14.3-32 32-32zM112 32a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"]\n};\nconst faImagePortrait = {\n  prefix: 'fas',\n  iconName: 'image-portrait',\n  icon: [384, 512, [\"portrait\"], \"f3e0\", \"M384 64c0-35.3-28.7-64-64-64L64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-384zM128 192a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 356.6c0-37.9 30.7-68.6 68.6-68.6l86.9 0c37.9 0 68.6 30.7 68.6 68.6c0 15.1-12.3 27.4-27.4 27.4l-169.1 0C92.3 384 80 371.7 80 356.6z\"]\n};\nconst faPortrait = faImagePortrait;\nconst faUserTag = {\n  prefix: 'fas',\n  iconName: 'user-tag',\n  icon: [640, 512, [], \"f507\", \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512l388.6 0c10 0 18.8-4.9 24.2-12.5l-99.2-99.2c-14.9-14.9-23.3-35.1-23.3-56.1l0-33c-15.9-4.7-32.8-7.2-50.3-7.2l-91.4 0zM384 224c-17.7 0-32 14.3-32 32l0 82.7c0 17 6.7 33.3 18.7 45.3L478.1 491.3c18.7 18.7 49.1 18.7 67.9 0l73.4-73.4c18.7-18.7 18.7-49.1 0-67.9L512 242.7c-12-12-28.3-18.7-45.3-18.7L384 224zm24 80a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"]\n};\nconst faRug = {\n  prefix: 'fas',\n  iconName: 'rug',\n  icon: [640, 512, [], \"e569\", \"M24 64l32 0 24 0 0 24 0 88 0 80 0 80 0 88 0 24-24 0-32 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-40-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-32-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-32-8 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-40-8 0C10.7 112 0 101.3 0 88S10.7 64 24 64zm88 0l416 0 0 384-416 0 0-384zM640 88c0 13.3-10.7 24-24 24l-8 0 0 40 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 32 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 32 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-8 0 0 40 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-32 0-24 0 0-24 0-88 0-80 0-80 0-88 0-24 24 0 32 0c13.3 0 24 10.7 24 24z\"]\n};\nconst faEarthEurope = {\n  prefix: 'fas',\n  iconName: 'earth-europe',\n  icon: [512, 512, [\"globe-europe\"], \"f7a2\", \"M266.3 48.3L232.5 73.6c-5.4 4-8.5 10.4-8.5 17.1l0 9.1c0 6.8 5.5 12.3 12.3 12.3c2.4 0 4.8-.7 6.8-2.1l41.8-27.9c2-1.3 4.4-2.1 6.8-2.1l1 0c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8l-19.9 19.9c-5.8 5.8-12.9 10.2-20.7 12.8l-26.5 8.8c-5.8 1.9-9.6 7.3-9.6 13.4c0 3.7-1.5 7.3-4.1 10l-17.9 17.9c-6.4 6.4-9.9 15-9.9 24l0 4.3c0 16.4 13.6 29.7 29.9 29.7c11 0 21.2-6.2 26.1-16l4-8.1c2.4-4.8 7.4-7.9 12.8-7.9c4.5 0 8.7 2.1 11.4 5.7l16.3 21.7c2.1 2.9 5.5 4.5 9.1 4.5c8.4 0 13.9-8.9 10.1-16.4l-1.1-2.3c-3.5-7 0-15.5 7.5-18l21.2-7.1c7.6-2.5 12.7-9.6 12.7-17.6c0-10.3 8.3-18.6 18.6-18.6l29.4 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-20.7 0c-7.2 0-14.2 2.9-19.3 8l-4.7 4.7c-2.1 2.1-3.3 5-3.3 8c0 6.2 5.1 11.3 11.3 11.3l11.3 0c6 0 11.8 2.4 16 6.6l6.5 6.5c1.8 1.8 2.8 4.3 2.8 6.8s-1 5-2.8 6.8l-7.5 7.5C386 262 384 266.9 384 272s2 10 5.7 13.7L408 304c10.2 10.2 24.1 16 38.6 16l7.3 0c6.5-20.2 10-41.7 10-64c0-111.4-87.6-202.4-197.7-207.7zm172 307.9c-3.7-2.6-8.2-4.1-13-4.1c-6 0-11.8-2.4-16-6.6L396 332c-7.7-7.7-18-12-28.9-12c-9.7 0-19.2-3.5-26.6-9.8L314 287.4c-11.6-9.9-26.4-15.4-41.7-15.4l-20.9 0c-12.6 0-25 3.7-35.5 10.7L188.5 301c-17.8 11.9-28.5 31.9-28.5 53.3l0 3.2c0 17 6.7 33.3 18.7 45.3l16 16c8.5 8.5 20 13.3 32 13.3l21.3 0c13.3 0 24 10.7 24 24c0 2.5 .4 5 1.1 7.3c71.3-5.8 132.5-47.6 165.2-107.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM187.3 100.7c-6.2-6.2-16.4-6.2-22.6 0l-32 32c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l32-32c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faGlobeEurope = faEarthEurope;\nconst faCartFlatbedSuitcase = {\n  prefix: 'fas',\n  iconName: 'cart-flatbed-suitcase',\n  icon: [640, 512, [\"luggage-cart\"], \"f59d\", \"M0 32C0 14.3 14.3 0 32 0L48 0c44.2 0 80 35.8 80 80l0 288c0 8.8 7.2 16 16 16l464 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-66.7 0c1.8 5 2.7 10.4 2.7 16c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16l-197.5 0c1.8 5 2.7 10.4 2.7 16c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16L144 448c-44.2 0-80-35.8-80-80L64 80c0-8.8-7.2-16-16-16L32 64C14.3 64 0 49.7 0 32zM432 96l0-40c0-4.4-3.6-8-8-8l-80 0c-4.4 0-8 3.6-8 8l0 40 96 0zM288 96l0-40c0-30.9 25.1-56 56-56l80 0c30.9 0 56 25.1 56 56l0 40 0 224-192 0 0-224zM512 320l0-224 16 0c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48l-16 0zM240 96l16 0 0 224-16 0c-26.5 0-48-21.5-48-48l0-128c0-26.5 21.5-48 48-48z\"]\n};\nconst faLuggageCart = faCartFlatbedSuitcase;\nconst faRectangleXmark = {\n  prefix: 'fas',\n  iconName: 'rectangle-xmark',\n  icon: [512, 512, [62164, \"rectangle-times\", \"times-rectangle\", \"window-close\"], \"f410\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faRectangleTimes = faRectangleXmark;\nconst faTimesRectangle = faRectangleXmark;\nconst faWindowClose = faRectangleXmark;\nconst faBahtSign = {\n  prefix: 'fas',\n  iconName: 'baht-sign',\n  icon: [320, 512, [], \"e0ac\", \"M144 0c-17.7 0-32 14.3-32 32l0 32L37.6 64C16.8 64 0 80.8 0 101.6L0 224l0 41.7L0 288 0 406.3c0 23 18.7 41.7 41.7 41.7l70.3 0 0 32c0 17.7 14.3 32 32 32s32-14.3 32-32l0-32 32 0c61.9 0 112-50.1 112-112c0-40.1-21.1-75.3-52.7-95.1C280.3 222.6 288 200.2 288 176c0-61.9-50.1-112-112-112l0-32c0-17.7-14.3-32-32-32zM112 128l0 96-48 0 0-96 48 0zm64 96l0-96c26.5 0 48 21.5 48 48s-21.5 48-48 48zm-64 64l0 96-48 0 0-96 48 0zm64 96l0-96 32 0c26.5 0 48 21.5 48 48s-21.5 48-48 48l-32 0z\"]\n};\nconst faBookOpen = {\n  prefix: 'fas',\n  iconName: 'book-open',\n  icon: [576, 512, [128214, 128366], \"f518\", \"M249.6 471.5c10.8 3.8 22.4-4.1 22.4-15.5l0-377.4c0-4.2-1.6-8.4-5-11C247.4 52 202.4 32 144 32C93.5 32 46.3 45.3 18.1 56.1C6.8 60.5 0 71.7 0 83.8L0 454.1c0 11.9 12.8 20.2 24.1 16.5C55.6 460.1 105.5 448 144 448c33.9 0 79 14 105.6 23.5zm76.8 0C353 462 398.1 448 432 448c38.5 0 88.4 12.1 119.9 22.6c11.3 3.8 24.1-4.6 24.1-16.5l0-370.3c0-12.1-6.8-23.3-18.1-27.6C529.7 45.3 482.5 32 432 32c-58.4 0-103.4 20-123 35.6c-3.3 2.6-5 6.8-5 11L304 456c0 11.4 11.7 19.3 22.4 15.5z\"]\n};\nconst faBookJournalWhills = {\n  prefix: 'fas',\n  iconName: 'book-journal-whills',\n  icon: [448, 512, [\"journal-whills\"], \"f66a\", \"M0 96C0 43 43 0 96 0L384 0l32 0c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32l0 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0L96 512c-53 0-96-43-96-96L0 96zM64 416c0 17.7 14.3 32 32 32l256 0 0-64L96 384c-17.7 0-32 14.3-32 32zm90.4-234.4l-21.2-21.2c-3 10.1-5.1 20.6-5.1 31.6c0 .2 0 .5 .1 .8s.1 .5 .1 .8L165.2 226c2.5 2.1 3.4 5.8 2.3 8.9c-1.3 3-4.1 5.1-7.5 5.1c-1.9-.1-3.8-.8-5.2-2l-23.6-20.6C142.8 267 186.9 304 240 304s97.3-37 108.9-86.6L325.3 238c-1.4 1.2-3.3 2-5.3 2c-2.2-.1-4.4-1.1-6-2.8c-1.2-1.5-1.9-3.4-2-5.2c.1-2.2 1.1-4.4 2.8-6l37.1-32.5c0-.3 0-.5 .1-.8s.1-.5 .1-.8c0-11-2.1-21.5-5.1-31.6l-21.2 21.2c-3.1 3.1-8.1 3.1-11.3 0s-3.1-8.1 0-11.2l26.4-26.5c-8.2-17-20.5-31.7-35.9-42.6c-2.7-1.9-6.2 1.4-5 4.5c8.5 22.4 3.6 48-13 65.6c-3.2 3.4-3.6 8.9-.9 12.7c9.8 14 12.7 31.9 7.5 48.5c-5.9 19.4-22 34.1-41.9 38.3l-1.4-34.3 12.6 8.6c.6 .4 1.5 .6 2.3 .6c1.5 0 2.7-.8 3.5-2s.6-2.8-.1-4L260 225.4l18-3.6c1.8-.4 3.1-2.1 3.1-4s-1.4-3.5-3.1-3.9l-18-3.7 8.5-14.3c.8-1.2 .9-2.9 .1-4.1s-2-2-3.5-2l-.1 0c-.7 .1-1.5 .3-2.1 .7l-14.1 9.6L244 87.9c-.1-2.2-1.9-3.9-4-3.9s-3.9 1.6-4 3.9l-4.6 110.8-12-8.1c-1.5-1.1-3.6-.9-5 .4s-1.6 3.4-.8 5l8.6 14.3-18 3.7c-1.8 .4-3.1 2-3.1 3.9s1.4 3.6 3.1 4l18 3.8-8.6 14.2c-.2 .6-.5 1.4-.5 2c0 1.1 .5 2.1 1.2 3c.8 .6 1.8 1 2.8 1c.7 0 1.6-.2 2.2-.6l10.4-7.1-1.4 32.8c-19.9-4.1-36-18.9-41.9-38.3c-5.1-16.6-2.2-34.4 7.6-48.5c2.7-3.9 2.3-9.3-.9-12.7c-16.6-17.5-21.6-43.1-13.1-65.5c1.2-3.1-2.3-6.4-5-4.5c-15.3 10.9-27.6 25.6-35.8 42.6l26.4 26.5c3.1 3.1 3.1 8.1 0 11.2s-8.1 3.1-11.2 0z\"]\n};\nconst faJournalWhills = faBookJournalWhills;\nconst faHandcuffs = {\n  prefix: 'fas',\n  iconName: 'handcuffs',\n  icon: [640, 512, [], \"e4f8\", \"M240 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM192 48a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm-32 80c17.7 0 32 14.3 32 32l8 0c13.3 0 24 10.7 24 24l0 16c0 1.7-.2 3.4-.5 5.1C280.3 229.6 320 286.2 320 352c0 88.4-71.6 160-160 160S0 440.4 0 352c0-65.8 39.7-122.4 96.5-146.9c-.4-1.6-.5-3.3-.5-5.1l0-16c0-13.3 10.7-24 24-24l8 0c0-17.7 14.3-32 32-32zm0 320a96 96 0 1 0 0-192 96 96 0 1 0 0 192zm192-96c0-25.9-5.1-50.5-14.4-73.1c16.9-32.9 44.8-59.1 78.9-73.9c-.4-1.6-.5-3.3-.5-5.1l0-16c0-13.3 10.7-24 24-24l8 0c0-17.7 14.3-32 32-32s32 14.3 32 32l8 0c13.3 0 24 10.7 24 24l0 16c0 1.7-.2 3.4-.5 5.1C600.3 229.6 640 286.2 640 352c0 88.4-71.6 160-160 160c-62 0-115.8-35.3-142.4-86.9c9.3-22.5 14.4-47.2 14.4-73.1zm224 0a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zM368 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm80 48a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faTriangleExclamation = {\n  prefix: 'fas',\n  iconName: 'triangle-exclamation',\n  icon: [512, 512, [9888, \"exclamation-triangle\", \"warning\"], \"f071\", \"M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"]\n};\nconst faExclamationTriangle = faTriangleExclamation;\nconst faWarning = faTriangleExclamation;\nconst faDatabase = {\n  prefix: 'fas',\n  iconName: 'database',\n  icon: [448, 512, [], \"f1c0\", \"M448 80l0 48c0 44.2-100.3 80-224 80S0 172.2 0 128L0 80C0 35.8 100.3 0 224 0S448 35.8 448 80zM393.2 214.7c20.8-7.4 39.9-16.9 54.8-28.6L448 288c0 44.2-100.3 80-224 80S0 332.2 0 288L0 186.1c14.9 11.8 34 21.2 54.8 28.6C99.7 230.7 159.5 240 224 240s124.3-9.3 169.2-25.3zM0 346.1c14.9 11.8 34 21.2 54.8 28.6C99.7 390.7 159.5 400 224 400s124.3-9.3 169.2-25.3c20.8-7.4 39.9-16.9 54.8-28.6l0 85.9c0 44.2-100.3 80-224 80S0 476.2 0 432l0-85.9z\"]\n};\nconst faShare = {\n  prefix: 'fas',\n  iconName: 'share',\n  icon: [512, 512, [\"mail-forward\"], \"f064\", \"M307 34.8c-11.5 5.1-19 16.6-19 29.2l0 64-112 0C78.8 128 0 206.8 0 304C0 417.3 81.5 467.9 100.2 478.1c2.5 1.4 5.3 1.9 8.1 1.9c10.9 0 19.7-8.9 19.7-19.7c0-7.5-4.3-14.4-9.8-19.5C108.8 431.9 96 414.4 96 384c0-53 43-96 96-96l96 0 0 64c0 12.6 7.4 24.1 19 29.2s25 3 34.4-5.4l160-144c6.7-6.1 10.6-14.7 10.6-23.8s-3.8-17.7-10.6-23.8l-160-144c-9.4-8.5-22.9-10.6-34.4-5.4z\"]\n};\nconst faMailForward = faShare;\nconst faBottleDroplet = {\n  prefix: 'fas',\n  iconName: 'bottle-droplet',\n  icon: [320, 512, [], \"e4c4\", \"M96 0C82.7 0 72 10.7 72 24s10.7 24 24 24c4.4 0 8 3.6 8 8l0 64.9c0 12.2-7.2 23.1-17.2 30.1C53.7 174.1 32 212.5 32 256l0 192c0 35.3 28.7 64 64 64l128 0c35.3 0 64-28.7 64-64l0-192c0-43.5-21.7-81.9-54.8-105c-10-7-17.2-17.9-17.2-30.1L216 56c0-4.4 3.6-8 8-8c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0s0 0 0 0s0 0 0 0L104 0s0 0 0 0s0 0 0 0L96 0zm64 382c-26.5 0-48-20.1-48-45c0-16.8 22.1-48.1 36.3-66.4c6-7.8 17.5-7.8 23.5 0C185.9 288.9 208 320.2 208 337c0 24.9-21.5 45-48 45z\"]\n};\nconst faMaskFace = {\n  prefix: 'fas',\n  iconName: 'mask-face',\n  icon: [640, 512, [], \"e1d7\", \"M320 64c-27.2 0-53.8 8-76.4 23.1l-37.1 24.8c-15.8 10.5-34.3 16.1-53.3 16.1l-9.2 0-16 0-72 0c-30.9 0-56 25.1-56 56l0 85c0 55.1 37.5 103.1 90.9 116.4l108 27C233.8 435 275.4 448 320 448s86.2-13 121.1-35.5l108-27C602.5 372.1 640 324.1 640 269l0-85c0-30.9-25.1-56-56-56l-72 0-16 0-9.2 0c-19 0-37.5-5.6-53.3-16.1L396.4 87.1C373.8 72 347.2 64 320 64zM132.3 346.3l-29.8-7.4C70.5 330.9 48 302.1 48 269l0-85c0-4.4 3.6-8 8-8l40 0 0 48c0 45.1 13.4 87.2 36.3 122.3zm405.1-7.4l-29.8 7.4c23-35.2 36.3-77.2 36.3-122.3l0-48 40 0c4.4 0 8 3.6 8 8l0 85c0 33-22.5 61.8-54.5 69.9zM192 208c0-8.8 7.2-16 16-16l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16zm16 48l224 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-224 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 80c0-8.8 7.2-16 16-16l160 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-160 0c-8.8 0-16-7.2-16-16z\"]\n};\nconst faHillRockslide = {\n  prefix: 'fas',\n  iconName: 'hill-rockslide',\n  icon: [576, 512, [], \"e508\", \"M252.4 103.8l27 48c2.8 5 8.2 8.2 13.9 8.2l53.3 0c5.8 0 11.1-3.1 13.9-8.2l27-48c2.7-4.9 2.7-10.8 0-15.7l-27-48c-2.8-5-8.2-8.2-13.9-8.2l-53.3 0c-5.8 0-11.1 3.1-13.9 8.2l-27 48c-2.7 4.9-2.7 10.8 0 15.7zM68.3 87C43.1 61.8 0 79.7 0 115.3L0 432c0 44.2 35.8 80 80 80l316.7 0c35.6 0 53.5-43.1 28.3-68.3L68.3 87zM504.2 403.6c4.9 2.7 10.8 2.7 15.7 0l48-27c5-2.8 8.2-8.2 8.2-13.9l0-53.3c0-5.8-3.1-11.1-8.2-13.9l-48-27c-4.9-2.7-10.8-2.7-15.7 0l-48 27c-5 2.8-8.2 8.2-8.2 13.9l0 53.3c0 5.8 3.1 11.1 8.2 13.9l48 27zM192 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faRightLeft = {\n  prefix: 'fas',\n  iconName: 'right-left',\n  icon: [512, 512, [\"exchange-alt\"], \"f362\", \"M32 96l320 0 0-64c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l96 96c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-96 96c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6l0-64L32 160c-17.7 0-32-14.3-32-32s14.3-32 32-32zM480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32l-320 0 0 64c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-96-96c-6-6-9.4-14.1-9.4-22.6s3.4-16.6 9.4-22.6l96-96c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 64 320 0z\"]\n};\nconst faExchangeAlt = faRightLeft;\nconst faPaperPlane = {\n  prefix: 'fas',\n  iconName: 'paper-plane',\n  icon: [512, 512, [61913], \"f1d8\", \"M498.1 5.6c10.1 7 15.4 19.1 13.5 31.2l-64 416c-1.5 9.7-7.4 18.2-16 23s-18.9 5.4-28 1.6L284 427.7l-68.5 74.1c-8.9 9.7-22.9 12.9-35.2 8.1S160 493.2 160 480l0-83.6c0-4 1.5-7.8 4.2-10.8L331.8 202.8c5.8-6.3 5.6-16-.4-22s-15.7-6.4-22-.7L106 360.8 17.7 316.6C7.1 311.3 .3 300.7 0 288.9s5.9-22.8 16.1-28.7l448-256c10.7-6.1 23.9-5.5 34 1.4z\"]\n};\nconst faRoadCircleExclamation = {\n  prefix: 'fas',\n  iconName: 'road-circle-exclamation',\n  icon: [640, 512, [], \"e565\", \"M213.2 32L288 32l0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 74.8 0c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8l0-42.8c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32l0 64L86.6 480C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16l0 80c0 8.8 7.2 16 16 16s16-7.2 16-16l0-80c0-8.8-7.2-16-16-16z\"]\n};\nconst faDungeon = {\n  prefix: 'fas',\n  iconName: 'dungeon',\n  icon: [512, 512, [], \"f6d9\", \"M336.6 156.5c1.3 1.1 2.7 2.2 3.9 3.3c9.3 8.2 23 10.5 33.4 3.6l67.6-45.1c11.4-7.6 14.2-23.2 5.1-33.4C430 66.6 410.9 50.6 389.7 37.6c-11.9-7.3-26.9-1.4-32.1 11.6l-30.5 76.2c-4.5 11.1 .2 23.6 9.5 31.2zM328 36.8c5.1-12.8-1.6-27.4-15-30.5C294.7 2.2 275.6 0 256 0s-38.7 2.2-57 6.4C185.5 9.4 178.8 24 184 36.8l30.3 75.8c4.5 11.3 16.8 17.2 29 16c4.2-.4 8.4-.6 12.7-.6s8.6 .2 12.7 .6c12.1 1.2 24.4-4.7 29-16L328 36.8zM65.5 85c-9.1 10.2-6.3 25.8 5.1 33.4l67.6 45.1c10.3 6.9 24.1 4.6 33.4-3.6c1.3-1.1 2.6-2.3 4-3.3c9.3-7.5 13.9-20.1 9.5-31.2L154.4 49.2c-5.2-12.9-20.3-18.8-32.1-11.6C101.1 50.6 82 66.6 65.5 85zm314 137.1c.9 3.3 1.7 6.6 2.3 10c2.5 13 13 23.9 26.2 23.9l80 0c13.3 0 24.1-10.8 22.9-24c-2.5-27.2-9.3-53.2-19.7-77.3c-5.5-12.9-21.4-16.6-33.1-8.9l-68.6 45.7c-9.8 6.5-13.2 19.2-10 30.5zM53.9 145.8c-11.6-7.8-27.6-4-33.1 8.9C10.4 178.8 3.6 204.8 1.1 232c-1.2 13.2 9.6 24 22.9 24l80 0c13.3 0 23.8-10.8 26.2-23.9c.6-3.4 1.4-6.7 2.3-10c3.1-11.4-.2-24-10-30.5L53.9 145.8zM104 288l-80 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24zm304 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-80 0zM24 416c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-80 0zm384 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l80 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-80 0zM272 192c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 272c0 8.8 7.2 16 16 16s16-7.2 16-16l0-272zm-64 32c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 240c0 8.8 7.2 16 16 16s16-7.2 16-16l0-240zm128 0c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 240c0 8.8 7.2 16 16 16s16-7.2 16-16l0-240z\"]\n};\nconst faAlignRight = {\n  prefix: 'fas',\n  iconName: 'align-right',\n  icon: [448, 512, [], \"f038\", \"M448 64c0 17.7-14.3 32-32 32L192 96c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32l-224 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l224 0c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 224c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z\"]\n};\nconst faMoneyBill1Wave = {\n  prefix: 'fas',\n  iconName: 'money-bill-1-wave',\n  icon: [576, 512, [\"money-bill-wave-alt\"], \"f53b\", \"M0 112.5L0 422.3c0 18 10.1 35 27 41.3c87 32.5 174 10.3 261-11.9c79.8-20.3 159.6-40.7 239.3-18.9c23 6.3 48.7-9.5 48.7-33.4l0-309.9c0-18-10.1-35-27-41.3C462 15.9 375 38.1 288 60.3C208.2 80.6 128.4 100.9 48.7 79.1C25.6 72.8 0 88.6 0 112.5zM128 416l-64 0 0-64c35.3 0 64 28.7 64 64zM64 224l0-64 64 0c0 35.3-28.7 64-64 64zM448 352c0-35.3 28.7-64 64-64l0 64-64 0zm64-192c-35.3 0-64-28.7-64-64l64 0 0 64zM384 256c0 61.9-43 112-96 112s-96-50.1-96-112s43-112 96-112s96 50.1 96 112zM252 208c0 9.7 6.9 17.7 16 19.6l0 48.4-4 0c-11 0-20 9-20 20s9 20 20 20l24 0 24 0c11 0 20-9 20-20s-9-20-20-20l-4 0 0-68c0-11-9-20-20-20l-16 0c-11 0-20 9-20 20z\"]\n};\nconst faMoneyBillWaveAlt = faMoneyBill1Wave;\nconst faLifeRing = {\n  prefix: 'fas',\n  iconName: 'life-ring',\n  icon: [512, 512, [], \"f1cd\", \"M367.2 412.5C335.9 434.9 297.5 448 256 448s-79.9-13.1-111.2-35.5l58-58c15.8 8.6 34 13.5 53.3 13.5s37.4-4.9 53.3-13.5l58 58zm90.7 .8c33.8-43.4 54-98 54-157.3s-20.2-113.9-54-157.3c9-12.5 7.9-30.1-3.4-41.3S425.8 45 413.3 54C369.9 20.2 315.3 0 256 0S142.1 20.2 98.7 54c-12.5-9-30.1-7.9-41.3 3.4S45 86.2 54 98.7C20.2 142.1 0 196.7 0 256s20.2 113.9 54 157.3c-9 12.5-7.9 30.1 3.4 41.3S86.2 467 98.7 458c43.4 33.8 98 54 157.3 54s113.9-20.2 157.3-54c12.5 9 30.1 7.9 41.3-3.4s12.4-28.8 3.4-41.3zm-45.5-46.1l-58-58c8.6-15.8 13.5-34 13.5-53.3s-4.9-37.4-13.5-53.3l58-58C434.9 176.1 448 214.5 448 256s-13.1 79.9-35.5 111.2zM367.2 99.5l-58 58c-15.8-8.6-34-13.5-53.3-13.5s-37.4 4.9-53.3 13.5l-58-58C176.1 77.1 214.5 64 256 64s79.9 13.1 111.2 35.5zM157.5 309.3l-58 58C77.1 335.9 64 297.5 64 256s13.1-79.9 35.5-111.2l58 58c-8.6 15.8-13.5 34-13.5 53.3s4.9 37.4 13.5 53.3zM208 256a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"]\n};\nconst faHands = {\n  prefix: 'fas',\n  iconName: 'hands',\n  icon: [576, 512, [\"sign-language\", \"signing\"], \"f2a7\", \"M544 160l-.1 72.6c-.1 52.2-24 101-64 133.1c.1-1.9 .1-3.8 .1-5.7l0-8c0-71.8-37-138.6-97.9-176.7l-60.2-37.6c-8.6-5.4-17.9-8.4-27.3-9.4L248.7 48.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8l78 135.1c3.3 5.7 10.7 7.7 16.4 4.4s7.7-10.7 4.4-16.4l-62-107.4c-6.6-11.5-2.7-26.2 8.8-32.8S362 5 368.6 16.5l68 117.8s0 0 0 0s0 0 0 0l43.3 75L480 160c0-17.7 14.4-32 32-32s32 14.4 32 32zM243.9 88.5L268.5 131c-13.9 4.5-26.4 13.7-34.7 27c-.9 1.4-1.7 2.9-2.5 4.4l-28.9-50c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zm-46.4 63.7l26.8 46.4c.6 6 2.1 11.8 4.3 17.4l-4.7 0-13.3 0s0 0 0 0L179 216l-23-39.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zM260.9 175c9.4-15 29.1-19.5 44.1-10.2l60.2 37.6C416.7 234.7 448 291.2 448 352l0 8c0 83.9-68.1 152-152 152l-176 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l92 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L88 440c-13.3 0-24-10.7-24-24s10.7-24 24-24l124 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L56 368c-13.3 0-24-10.7-24-24s10.7-24 24-24l156 0c6.6 0 12-5.4 12-12s-5.4-12-12-12L88 296c-13.3 0-24-10.7-24-24s10.7-24 24-24l136 0s0 0 0 0s0 0 0 0l93.2 0L271 219.1c-15-9.4-19.5-29.1-10.2-44.1z\"]\n};\nconst faSignLanguage = faHands;\nconst faSigning = faHands;\nconst faCalendarDay = {\n  prefix: 'fas',\n  iconName: 'calendar-day',\n  icon: [448, 512, [], \"f783\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zm80 64c-8.8 0-16 7.2-16 16l0 96c0 8.8 7.2 16 16 16l96 0c8.8 0 16-7.2 16-16l0-96c0-8.8-7.2-16-16-16l-96 0z\"]\n};\nconst faWaterLadder = {\n  prefix: 'fas',\n  iconName: 'water-ladder',\n  icon: [576, 512, [\"ladder-water\", \"swimming-pool\"], \"f5c5\", \"M128 127.7C128 74.9 170.9 32 223.7 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8c-17.5 0-31.7 14.2-31.7 31.7l0 96.3 192 0 0-96.3C384 74.9 426.9 32 479.7 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8c-17.5 0-31.7 14.2-31.7 31.7L448 361c-1.6 1-3.3 2-4.8 3.1c-18 12.4-40.1 20.3-59.2 20.3c0 0 0 0 0 0l0-96.5-192 0 0 96.5c-19 0-41.2-7.9-59.1-20.3c-1.6-1.1-3.2-2.2-4.9-3.1l0-233.3zM306.5 389.9C329 405.4 356.5 416 384 416c26.9 0 55.4-10.8 77.4-26.1c0 0 0 0 0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 469.7 417 480 384 480c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7c0 0 0 0 0 0C136.7 405.2 165.1 416 192 416c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"]\n};\nconst faLadderWater = faWaterLadder;\nconst faSwimmingPool = faWaterLadder;\nconst faArrowsUpDown = {\n  prefix: 'fas',\n  iconName: 'arrows-up-down',\n  icon: [320, 512, [\"arrows-v\"], \"f07d\", \"M182.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L128 109.3l0 293.5L86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7l0-293.5 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96z\"]\n};\nconst faArrowsV = faArrowsUpDown;\nconst faFaceGrimace = {\n  prefix: 'fas',\n  iconName: 'face-grimace',\n  icon: [512, 512, [128556, \"grimace\"], \"f57f\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm96-112l-8 0 0-40 55.3 0c-3.8 22.7-23.6 40-47.3 40zm47.3-56L344 344l0-40 8 0c23.8 0 43.5 17.3 47.3 40zM328 344l-64 0 0-40 64 0 0 40zm0 56l-64 0 0-40 64 0 0 40zm-80-96l0 40-64 0 0-40 64 0zm0 56l0 40-64 0 0-40 64 0zm-80-16l-55.3 0c3.8-22.7 23.6-40 47.3-40l8 0 0 40zm0 56l-8 0c-23.8 0-43.5-17.3-47.3-40l55.3 0 0 40zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faGrimace = faFaceGrimace;\nconst faWheelchairMove = {\n  prefix: 'fas',\n  iconName: 'wheelchair-move',\n  icon: [448, 512, [\"wheelchair-alt\"], \"e2ce\", \"M320 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM204.5 121.3c-5.4-2.5-11.7-1.9-16.4 1.7l-40.9 30.7c-14.1 10.6-34.2 7.7-44.8-6.4s-7.7-34.2 6.4-44.8l40.9-30.7c23.7-17.8 55.3-21 82.1-8.4l90.4 42.5c29.1 13.7 36.8 51.6 15.2 75.5L299.1 224l97.4 0c30.3 0 53 27.7 47.1 57.4L415.4 422.3c-3.5 17.3-20.3 28.6-37.7 25.1s-28.6-20.3-25.1-37.7L377 288l-70.3 0c8.6 19.6 13.3 41.2 13.3 64c0 88.4-71.6 160-160 160S0 440.4 0 352s71.6-160 160-160c11.1 0 22 1.1 32.4 3.3l54.2-54.2-42.1-19.8zM160 448a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"]\n};\nconst faWheelchairAlt = faWheelchairMove;\nconst faTurnDown = {\n  prefix: 'fas',\n  iconName: 'turn-down',\n  icon: [384, 512, [10549, \"level-down-alt\"], \"f3be\", \"M350 334.5c3.8 8.8 2 19-4.6 26l-136 144c-4.5 4.8-10.8 7.5-17.4 7.5s-12.9-2.7-17.4-7.5l-136-144c-6.6-7-8.4-17.2-4.6-26s12.5-14.5 22-14.5l88 0 0-192c0-17.7-14.3-32-32-32L32 96C14.3 96 0 81.7 0 64L0 32C0 14.3 14.3 0 32 0l80 0c70.7 0 128 57.3 128 128l0 192 88 0c9.6 0 18.2 5.7 22 14.5z\"]\n};\nconst faLevelDownAlt = faTurnDown;\nconst faPersonWalkingArrowRight = {\n  prefix: 'fas',\n  iconName: 'person-walking-arrow-right',\n  icon: [640, 512, [], \"e552\", \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM550.6 153.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L530.7 224 384 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l146.7 0-25.4 25.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3l-80-80z\"]\n};\nconst faSquareEnvelope = {\n  prefix: 'fas',\n  iconName: 'square-envelope',\n  icon: [448, 512, [\"envelope-square\"], \"f199\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM218 271.7L64.2 172.4C66 156.4 79.5 144 96 144l256 0c16.5 0 30 12.4 31.8 28.4L230 271.7c-1.8 1.2-3.9 1.8-6 1.8s-4.2-.6-6-1.8zm29.4 26.9L384 210.4 384 336c0 17.7-14.3 32-32 32L96 368c-17.7 0-32-14.3-32-32l0-125.6 136.6 88.2c7 4.5 15.1 6.9 23.4 6.9s16.4-2.4 23.4-6.9z\"]\n};\nconst faEnvelopeSquare = faSquareEnvelope;\nconst faDice = {\n  prefix: 'fas',\n  iconName: 'dice',\n  icon: [640, 512, [127922], \"f522\", \"M274.9 34.3c-28.1-28.1-73.7-28.1-101.8 0L34.3 173.1c-28.1 28.1-28.1 73.7 0 101.8L173.1 413.7c28.1 28.1 73.7 28.1 101.8 0L413.7 274.9c28.1-28.1 28.1-73.7 0-101.8L274.9 34.3zM200 224a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM96 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 376a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM352 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 120a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm96 328c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-114.3 0c11.6 36 3.1 77-25.4 105.5L320 413.8l0 34.2zM480 328a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faBowlingBall = {\n  prefix: 'fas',\n  iconName: 'bowling-ball',\n  icon: [512, 512, [], \"f436\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM240 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM208 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-64-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faBrain = {\n  prefix: 'fas',\n  iconName: 'brain',\n  icon: [512, 512, [129504], \"f5dc\", \"M184 0c30.9 0 56 25.1 56 56l0 400c0 30.9-25.1 56-56 56c-28.9 0-52.7-21.9-55.7-50.1c-5.2 1.4-10.7 2.1-16.3 2.1c-35.3 0-64-28.7-64-64c0-7.4 1.3-14.6 3.6-21.2C21.4 367.4 0 338.2 0 304c0-31.9 18.7-59.5 45.8-72.3C37.1 220.8 32 207 32 192c0-30.7 21.6-56.3 50.4-62.6C80.8 123.9 80 118 80 112c0-29.9 20.6-55.1 48.3-62.1C131.3 21.9 155.1 0 184 0zM328 0c28.9 0 52.6 21.9 55.7 49.9c27.8 7 48.3 32.1 48.3 62.1c0 6-.8 11.9-2.4 17.4c28.8 6.2 50.4 31.9 50.4 62.6c0 15-5.1 28.8-13.8 39.7C493.3 244.5 512 272.1 512 304c0 34.2-21.4 63.4-51.6 74.8c2.3 6.6 3.6 13.8 3.6 21.2c0 35.3-28.7 64-64 64c-5.6 0-11.1-.7-16.3-2.1c-3 28.2-26.8 50.1-55.7 50.1c-30.9 0-56-25.1-56-56l0-400c0-30.9 25.1-56 56-56z\"]\n};\nconst faBandage = {\n  prefix: 'fas',\n  iconName: 'bandage',\n  icon: [640, 512, [129657, \"band-aid\"], \"f462\", \"M480 416l96 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-96 0 0 320zM448 96L192 96l0 320 256 0 0-320zM64 96C28.7 96 0 124.7 0 160L0 352c0 35.3 28.7 64 64 64l96 0 0-320L64 96zM248 208a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM248 304a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faBandAid = faBandage;\nconst faCalendarMinus = {\n  prefix: 'fas',\n  iconName: 'calendar-minus',\n  icon: [448, 512, [], \"f272\", \"M128 0c17.7 0 32 14.3 32 32l0 32 128 0 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32 48 0c26.5 0 48 21.5 48 48l0 48L0 160l0-48C0 85.5 21.5 64 48 64l48 0 0-32c0-17.7 14.3-32 32-32zM0 192l448 0 0 272c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 192zM312 376c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0z\"]\n};\nconst faCircleXmark = {\n  prefix: 'fas',\n  iconName: 'circle-xmark',\n  icon: [512, 512, [61532, \"times-circle\", \"xmark-circle\"], \"f057\", \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"]\n};\nconst faTimesCircle = faCircleXmark;\nconst faXmarkCircle = faCircleXmark;\nconst faGifts = {\n  prefix: 'fas',\n  iconName: 'gifts',\n  icon: [640, 512, [], \"f79c\", \"M200.6 32C205 19.5 198.5 5.8 186 1.4S159.8 3.5 155.4 16L144.7 46.2l-9.9-29.8C130.6 3.8 117-3 104.4 1.2S85 19 89.2 31.6l8.3 25-27.4-20c-10.7-7.8-25.7-5.4-33.5 5.3s-5.4 25.7 5.3 33.5L70.2 96 48 96C21.5 96 0 117.5 0 144L0 464c0 26.5 21.5 48 48 48l152.6 0c-5.4-9.4-8.6-20.3-8.6-32l0-224c0-29.9 20.5-55 48.2-62c1.8-31 17.1-58.2 40.1-76.1C271.7 104.7 256.9 96 240 96l-22.2 0 28.3-20.6c10.7-7.8 13.1-22.8 5.3-33.5s-22.8-13.1-33.5-5.3L192.5 55.1 200.6 32zM363.5 185.5L393.1 224 344 224c-13.3 0-24-10.7-24-24c0-13.1 10.8-24 24.2-24c7.6 0 14.7 3.5 19.3 9.5zM272 200c0 8.4 1.4 16.5 4.1 24l-4.1 0c-26.5 0-48 21.5-48 48l0 80 192 0 0-96 32 0 0 96 192 0 0-80c0-26.5-21.5-48-48-48l-4.1 0c2.7-7.5 4.1-15.6 4.1-24c0-39.9-32.5-72-72.2-72c-22.4 0-43.6 10.4-57.3 28.2L432 195.8l-30.5-39.6c-13.7-17.8-35-28.2-57.3-28.2c-39.7 0-72.2 32.1-72.2 72zM224 464c0 26.5 21.5 48 48 48l144 0 0-128-192 0 0 80zm224 48l144 0c26.5 0 48-21.5 48-48l0-80-192 0 0 128zm96-312c0 13.3-10.7 24-24 24l-49.1 0 29.6-38.5c4.6-5.9 11.7-9.5 19.3-9.5c13.4 0 24.2 10.9 24.2 24z\"]\n};\nconst faHotel = {\n  prefix: 'fas',\n  iconName: 'hotel',\n  icon: [512, 512, [127976], \"f594\", \"M0 32C0 14.3 14.3 0 32 0L480 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l0 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-176 0 0-48c0-26.5-21.5-48-48-48s-48 21.5-48 48l0 48L32 512c-17.7 0-32-14.3-32-32s14.3-32 32-32L32 64C14.3 64 0 49.7 0 32zm96 80l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM240 96c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zM112 192c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zm112 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16l0 32c0 8.8 7.2 16 16 16l32 0c8.8 0 16-7.2 16-16l0-32c0-8.8-7.2-16-16-16l-32 0zM328 384c13.3 0 24.3-10.9 21-23.8c-10.6-41.5-48.2-72.2-93-72.2s-82.5 30.7-93 72.2c-3.3 12.8 7.8 23.8 21 23.8l144 0z\"]\n};\nconst faEarthAsia = {\n  prefix: 'fas',\n  iconName: 'earth-asia',\n  icon: [512, 512, [127759, \"globe-asia\"], \"f57e\", \"M51.7 295.1l31.7 6.3c7.9 1.6 16-.9 21.7-6.6l15.4-15.4c11.6-11.6 31.1-8.4 38.4 6.2l9.3 18.5c4.8 9.6 14.6 15.7 25.4 15.7c15.2 0 26.1-14.6 21.7-29.2l-6-19.9c-4.6-15.4 6.9-30.9 23-30.9l2.3 0c13.4 0 25.9-6.7 33.3-17.8l10.7-16.1c5.6-8.5 5.3-19.6-.8-27.7l-16.1-21.5c-10.3-13.7-3.3-33.5 13.4-37.7l17-4.3c7.5-1.9 13.6-7.2 16.5-14.4l16.4-40.9C303.4 52.1 280.2 48 256 48C141.1 48 48 141.1 48 256c0 13.4 1.3 26.5 3.7 39.1zm407.7 4.6c-3-.3-6-.1-9 .8l-15.8 4.4c-6.7 1.9-13.8-.9-17.5-6.7l-2-3.1c-6-9.4-16.4-15.1-27.6-15.1s-21.6 5.7-27.6 15.1l-6.1 9.5c-1.4 2.2-3.4 4.1-5.7 5.3L312 330.1c-18.1 10.1-25.5 32.4-17 51.3l5.5 12.4c8.6 19.2 30.7 28.5 50.5 21.1l2.6-1c10-3.7 21.3-2.2 29.9 4.1l1.5 1.1c37.2-29.5 64.1-71.4 74.4-119.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm144.5 92.1c-2.1 8.6 3.1 17.3 11.6 19.4l32 8c8.6 2.1 17.3-3.1 19.4-11.6s-3.1-17.3-11.6-19.4l-32-8c-8.6-2.1-17.3 3.1-19.4 11.6zm92-20c-2.1 8.6 3.1 17.3 11.6 19.4s17.3-3.1 19.4-11.6l8-32c2.1-8.6-3.1-17.3-11.6-19.4s-17.3 3.1-19.4 11.6l-8 32zM343.2 113.7c-7.9-4-17.5-.7-21.5 7.2l-16 32c-4 7.9-.7 17.5 7.2 21.5s17.5 .7 21.5-7.2l16-32c4-7.9 .7-17.5-7.2-21.5z\"]\n};\nconst faGlobeAsia = faEarthAsia;\nconst faIdCardClip = {\n  prefix: 'fas',\n  iconName: 'id-card-clip',\n  icon: [576, 512, [\"id-card-alt\"], \"f47f\", \"M256 0l64 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zM64 64l128 0 0 48c0 26.5 21.5 48 48 48l96 0c26.5 0 48-21.5 48-48l0-48 128 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 128C0 92.7 28.7 64 64 64zM176 437.3c0 5.9 4.8 10.7 10.7 10.7l202.7 0c5.9 0 10.7-4.8 10.7-10.7c0-29.5-23.9-53.3-53.3-53.3l-117.3 0c-29.5 0-53.3 23.9-53.3 53.3zM288 352a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\"]\n};\nconst faIdCardAlt = faIdCardClip;\nconst faMagnifyingGlassPlus = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-plus',\n  icon: [512, 512, [\"search-plus\"], \"f00e\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64 64 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-64 0 0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 64-64 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l64 0 0 64z\"]\n};\nconst faSearchPlus = faMagnifyingGlassPlus;\nconst faThumbsUp = {\n  prefix: 'fas',\n  iconName: 'thumbs-up',\n  icon: [512, 512, [128077, 61575], \"f164\", \"M313.4 32.9c26 5.2 42.9 30.5 37.7 56.5l-2.3 11.4c-5.3 26.7-15.1 52.1-28.8 75.2l144 0c26.5 0 48 21.5 48 48c0 18.5-10.5 34.6-25.9 42.6C497 275.4 504 288.9 504 304c0 23.4-16.8 42.9-38.9 47.1c4.4 7.3 6.9 15.8 6.9 24.9c0 21.3-13.9 39.4-33.1 45.6c.7 3.3 1.1 6.8 1.1 10.4c0 26.5-21.5 48-48 48l-97.5 0c-19 0-37.5-5.6-53.3-16.1l-38.5-25.7C176 420.4 160 390.4 160 358.3l0-38.3 0-48 0-24.9c0-29.2 13.3-56.7 36-75l7.4-5.9c26.5-21.2 44.6-51 51.2-84.2l2.3-11.4c5.2-26 30.5-42.9 56.5-37.7zM32 192l64 0c17.7 0 32 14.3 32 32l0 224c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32L0 224c0-17.7 14.3-32 32-32z\"]\n};\nconst faUserClock = {\n  prefix: 'fas',\n  iconName: 'user-clock',\n  icon: [640, 512, [], \"f4fd\", \"M224 0a128 128 0 1 1 0 256A128 128 0 1 1 224 0zM178.3 304l91.4 0c20.6 0 40.4 3.5 58.8 9.9C323 331 320 349.1 320 368c0 59.5 29.5 112.1 74.8 144L29.7 512C13.3 512 0 498.7 0 482.3C0 383.8 79.8 304 178.3 304zM352 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-80c-8.8 0-16 7.2-16 16l0 64c0 8.8 7.2 16 16 16l48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0-48c0-8.8-7.2-16-16-16z\"]\n};\nconst faHandDots = {\n  prefix: 'fas',\n  iconName: 'hand-dots',\n  icon: [512, 512, [\"allergies\"], \"f461\", \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 208c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 272c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64l19.2 0c97.2 0 176-78.8 176-176l0-208c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-176c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 176c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-208zM240 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80 16a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48-16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm-16 80a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM240 432a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm-48-48a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faAllergies = faHandDots;\nconst faFileInvoice = {\n  prefix: 'fas',\n  iconName: 'file-invoice',\n  icon: [384, 512, [], \"f570\", \"M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM80 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L80 96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 96l192 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32L96 352c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32zm0 32l0 64 192 0 0-64L96 256zM240 416l64 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"]\n};\nconst faWindowMinimize = {\n  prefix: 'fas',\n  iconName: 'window-minimize',\n  icon: [512, 512, [128469], \"f2d1\", \"M32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l448 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 416z\"]\n};\nconst faMugSaucer = {\n  prefix: 'fas',\n  iconName: 'mug-saucer',\n  icon: [640, 512, [\"coffee\"], \"f0f4\", \"M96 64c0-17.7 14.3-32 32-32l320 0 64 0c70.7 0 128 57.3 128 128s-57.3 128-128 128l-32 0c0 53-43 96-96 96l-192 0c-53 0-96-43-96-96L96 64zM480 224l32 0c35.3 0 64-28.7 64-64s-28.7-64-64-64l-32 0 0 128zM32 416l512 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"]\n};\nconst faCoffee = faMugSaucer;\nconst faBrush = {\n  prefix: 'fas',\n  iconName: 'brush',\n  icon: [384, 512, [], \"f55d\", \"M162.4 6c-1.5-3.6-5-6-8.9-6l-19 0c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6L48 0C21.5 0 0 21.5 0 48L0 224l0 22.4L0 256l9.6 0 364.8 0 9.6 0 0-9.6 0-22.4 0-176c0-26.5-21.5-48-48-48L230.5 0c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6zM0 288l0 32c0 35.3 28.7 64 64 64l64 0 0 64c0 35.3 28.7 64 64 64s64-28.7 64-64l0-64 64 0c35.3 0 64-28.7 64-64l0-32L0 288zM192 432a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"]\n};\nconst faFileHalfDashed = {\n  prefix: 'fas',\n  iconName: 'file-half-dashed',\n  icon: [384, 512, [], \"e698\", \"M64 0C28.7 0 0 28.7 0 64L0 320l384 0 0-160-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zM0 416l64 0 0-64L0 352l0 64zm288 32l-80 0 0 64 80 0 0-64zm-112 0l-80 0 0 64 80 0 0-64zM64 448L0 448c0 35.3 28.7 64 64 64l0-64zm256 0l0 64c35.3 0 64-28.7 64-64l-64 0zm64-32l0-64-64 0 0 64 64 0z\"]\n};\nconst faMask = {\n  prefix: 'fas',\n  iconName: 'mask',\n  icon: [576, 512, [], \"f6fa\", \"M288 64C64 64 0 160 0 272S80 448 176 448l8.4 0c24.2 0 46.4-13.7 57.2-35.4l23.2-46.3c4.4-8.8 13.3-14.3 23.2-14.3s18.8 5.5 23.2 14.3l23.2 46.3c10.8 21.7 33 35.4 57.2 35.4l8.4 0c96 0 176-64 176-176s-64-208-288-208zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm320-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"]\n};\nconst faMagnifyingGlassMinus = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-minus',\n  icon: [512, 512, [\"search-minus\"], \"f010\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-144 0z\"]\n};\nconst faSearchMinus = faMagnifyingGlassMinus;\nconst faRulerVertical = {\n  prefix: 'fas',\n  iconName: 'ruler-vertical',\n  icon: [256, 512, [], \"f548\", \"M0 48C0 21.5 21.5 0 48 0L208 0c26.5 0 48 21.5 48 48l0 48-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 64-80 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l80 0 0 48c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 48z\"]\n};\nconst faUserLarge = {\n  prefix: 'fas',\n  iconName: 'user-large',\n  icon: [512, 512, [\"user-alt\"], \"f406\", \"M256 288A144 144 0 1 0 256 0a144 144 0 1 0 0 288zm-94.7 32C72.2 320 0 392.2 0 481.3c0 17 13.8 30.7 30.7 30.7l450.6 0c17 0 30.7-13.8 30.7-30.7C512 392.2 439.8 320 350.7 320l-189.4 0z\"]\n};\nconst faUserAlt = faUserLarge;\nconst faTrainTram = {\n  prefix: 'fas',\n  iconName: 'train-tram',\n  icon: [448, 512, [128650], \"e5b4\", \"M86.8 48c-12.2 0-23.6 5.5-31.2 15L42.7 79C34.5 89.3 19.4 91 9 82.7S-3 59.4 5.3 49L18 33C34.7 12.2 60 0 86.8 0L361.2 0c26.7 0 52 12.2 68.7 33l12.8 16c8.3 10.4 6.6 25.5-3.8 33.7s-25.5 6.6-33.7-3.7L392.5 63c-7.6-9.5-19.1-15-31.2-15L248 48l0 48 40 0c53 0 96 43 96 96l0 160c0 30.6-14.3 57.8-36.6 75.4l65.5 65.5c7.1 7.1 2.1 19.1-7.9 19.1l-39.7 0c-8.5 0-16.6-3.4-22.6-9.4L288 448l-128 0-54.6 54.6c-6 6-14.1 9.4-22.6 9.4L43 512c-10 0-15-12.1-7.9-19.1l65.5-65.5C78.3 409.8 64 382.6 64 352l0-160c0-53 43-96 96-96l40 0 0-48L86.8 48zM160 160c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32c0-17.7-14.3-32-32-32l-128 0zm32 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"]\n};\nconst faUserNurse = {\n  prefix: 'fas',\n  iconName: 'user-nurse',\n  icon: [448, 512, [], \"f82f\", \"M96 128l0-57.8c0-13.3 8.3-25.3 20.8-30l96-36c7.2-2.7 15.2-2.7 22.5 0l96 36c12.5 4.7 20.8 16.6 20.8 30l0 57.8-.3 0c.2 2.6 .3 5.3 .3 8l0 40c0 70.7-57.3 128-128 128s-128-57.3-128-128l0-40c0-2.7 .1-5.4 .3-8l-.3 0zm48 48c0 44.2 35.8 80 80 80s80-35.8 80-80l0-16-160 0 0 16zM111.9 327.7c10.5-3.4 21.8 .4 29.4 8.5l71 75.5c6.3 6.7 17 6.7 23.3 0l71-75.5c7.6-8.1 18.9-11.9 29.4-8.5C401 348.6 448 409.4 448 481.3c0 17-13.8 30.7-30.7 30.7L30.7 512C13.8 512 0 498.2 0 481.3c0-71.9 47-132.7 111.9-153.6zM208 48l0 16-16 0c-4.4 0-8 3.6-8 8l0 16c0 4.4 3.6 8 8 8l16 0 0 16c0 4.4 3.6 8 8 8l16 0c4.4 0 8-3.6 8-8l0-16 16 0c4.4 0 8-3.6 8-8l0-16c0-4.4-3.6-8-8-8l-16 0 0-16c0-4.4-3.6-8-8-8l-16 0c-4.4 0-8 3.6-8 8z\"]\n};\nconst faSyringe = {\n  prefix: 'fas',\n  iconName: 'syringe',\n  icon: [512, 512, [128137], \"f48e\", \"M441 7l32 32 32 32c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-15-15L417.9 128l55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-72-72L295 73c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l55 55L422.1 56 407 41c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0zM210.3 155.7l61.1-61.1c.3 .3 .6 .7 1 1l16 16 56 56 56 56 16 16c.3 .3 .6 .6 1 1l-191 191c-10.5 10.5-24.7 16.4-39.6 16.4l-88.8 0L41 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l57-57 0-88.8c0-14.9 5.9-29.1 16.4-39.6l43.3-43.3 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57z\"]\n};\nconst faCloudSun = {\n  prefix: 'fas',\n  iconName: 'cloud-sun',\n  icon: [640, 512, [9925], \"f6c4\", \"M294.2 1.2c5.1 2.1 8.7 6.7 9.6 12.1l14.1 84.7 84.7 14.1c5.4 .9 10 4.5 12.1 9.6s1.5 10.9-1.6 15.4l-38.5 55c-2.2-.1-4.4-.2-6.7-.2c-23.3 0-45.1 6.2-64 17.1l0-1.1c0-53-43-96-96-96s-96 43-96 96s43 96 96 96c8.1 0 15.9-1 23.4-2.9c-36.6 18.1-63.3 53.1-69.8 94.9l-24.4 17c-4.5 3.2-10.3 3.8-15.4 1.6s-8.7-6.7-9.6-12.1L98.1 317.9 13.4 303.8c-5.4-.9-10-4.5-12.1-9.6s-1.5-10.9 1.6-15.4L52.5 208 2.9 137.2c-3.2-4.5-3.8-10.3-1.6-15.4s6.7-8.7 12.1-9.6L98.1 98.1l14.1-84.7c.9-5.4 4.5-10 9.6-12.1s10.9-1.5 15.4 1.6L208 52.5 278.8 2.9c4.5-3.2 10.3-3.8 15.4-1.6zM144 208a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM639.9 431.9c0 44.2-35.8 80-80 80l-271.9 0c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"]\n};\nconst faStopwatch20 = {\n  prefix: 'fas',\n  iconName: 'stopwatch-20',\n  icon: [448, 512, [], \"e06f\", \"M176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l16 0 0 34.4C92.3 113.8 16 200 16 304c0 114.9 93.1 208 208 208s208-93.1 208-208c0-41.8-12.3-80.7-33.5-113.2l24.1-24.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L355.7 143c-28.1-23-62.2-38.8-99.7-44.6L256 64l16 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L176 0zM288 204c28.7 0 52 23.3 52 52l0 96c0 28.7-23.3 52-52 52s-52-23.3-52-52l0-96c0-28.7 23.3-52 52-52zm-12 52l0 96c0 6.6 5.4 12 12 12s12-5.4 12-12l0-96c0-6.6-5.4-12-12-12s-12 5.4-12 12zM159.5 244c-5.4 0-10.2 3.5-11.9 8.6l-.6 1.7c-3.5 10.5-14.8 16.1-25.3 12.6s-16.1-14.8-12.6-25.3l.6-1.7c7.2-21.5 27.2-35.9 49.8-35.9c29 0 52.5 23.5 52.5 52.5l0 2.2c0 13.4-4.9 26.4-13.8 36.4l-39 43.9c-6.2 7-10 15.7-10.9 24.9l43.8 0c11 0 20 9 20 20s-9 20-20 20l-64 0c-11 0-20-9-20-20l0-15.7c0-20.6 7.5-40.4 21.2-55.8l39-43.9c2.4-2.7 3.7-6.2 3.7-9.8l0-2.2c0-6.9-5.6-12.5-12.5-12.5z\"]\n};\nconst faSquareFull = {\n  prefix: 'fas',\n  iconName: 'square-full',\n  icon: [512, 512, [128997, 128998, 128999, 129000, 129001, 129002, 129003, 11035, 11036], \"f45c\", \"M0 0H512V512H0V0z\"]\n};\nconst faMagnet = {\n  prefix: 'fas',\n  iconName: 'magnet',\n  icon: [448, 512, [129522], \"f076\", \"M0 160l0 96C0 379.7 100.3 480 224 480s224-100.3 224-224l0-96-128 0 0 96c0 53-43 96-96 96s-96-43-96-96l0-96L0 160zm0-32l128 0 0-64c0-17.7-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64l0 64zm320 0l128 0 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64z\"]\n};\nconst faJar = {\n  prefix: 'fas',\n  iconName: 'jar',\n  icon: [320, 512, [], \"e516\", \"M32 32C32 14.3 46.3 0 64 0L256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L64 64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64l192 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 512c-35.3 0-64-28.7-64-64L0 160zm96 64c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-96c0-17.7-14.3-32-32-32L96 224z\"]\n};\nconst faNoteSticky = {\n  prefix: 'fas',\n  iconName: 'note-sticky',\n  icon: [448, 512, [62026, \"sticky-note\"], \"f249\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l224 0 0-112c0-26.5 21.5-48 48-48l112 0 0-224c0-35.3-28.7-64-64-64L64 32zM448 352l-45.3 0L336 352c-8.8 0-16 7.2-16 16l0 66.7 0 45.3 32-32 64-64 32-32z\"]\n};\nconst faStickyNote = faNoteSticky;\nconst faBugSlash = {\n  prefix: 'fas',\n  iconName: 'bug-slash',\n  icon: [640, 512, [], \"e490\", \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L477.4 348.9c1.7-9.4 2.6-19 2.6-28.9l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64.3 0c-1.1-14.1-5-27.5-11.1-39.5c.7-.6 1.4-1.2 2.1-1.9l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-.7 .7-1.3 1.4-1.9 2.1C409.2 164.1 393.1 160 376 160l-112 0c-8.3 0-16.3 1-24 2.8L38.8 5.1zM320 0c-53 0-96 43-96 96l0 3.6c0 15.7 12.7 28.4 28.4 28.4l135.1 0c15.7 0 28.4-12.7 28.4-28.4l0-3.6c0-53-43-96-96-96zM160.3 256L96 256c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c0 24.6 5.5 47.8 15.4 68.6c-2.2 1.3-4.2 2.9-6 4.8l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l63.1-63.1c24.5 21.8 55.8 36.2 90.3 39.6l0-143.7L166.7 227.3c-3.4 9-5.6 18.7-6.4 28.7zM336 479.2c36.6-3.6 69.7-19.6 94.8-43.8L336 360.7l0 118.5z\"]\n};\nconst faArrowUpFromWaterPump = {\n  prefix: 'fas',\n  iconName: 'arrow-up-from-water-pump',\n  icon: [576, 512, [], \"e4b6\", \"M112 0C85.5 0 64 21.5 64 48l0 208-16 0c-26.5 0-48 21.5-48 48l0 96c0 8 2 15.6 5.4 22.2c3.8-1.7 7.8-3.1 12-4.1c13.1-3.1 26.7-9.8 37.3-18.6c22.2-18.7 54.3-20.1 78.1-3.4c18 12.4 40.1 20.3 59.2 20.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c4.2 1 8.2 2.4 12 4.1C574 415.6 576 408 576 400l0-96c0-26.5-21.5-48-48-48l-48 0 0-146.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 109.3 416 256l-128 0 0-208c0-26.5-21.5-48-48-48L112 0zM306.5 421.9c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1c0 0 0 0 0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7c0 0 0 0 0 0C439.4 437.2 410.9 448 384 448c-27.5 0-55-10.6-77.5-26.1z\"]\n};\nconst faBone = {\n  prefix: 'fas',\n  iconName: 'bone',\n  icon: [576, 512, [129460], \"f5d7\", \"M153.7 144.8c6.9 16.3 20.6 31.2 38.3 31.2l192 0c17.7 0 31.4-14.9 38.3-31.2C434.4 116.1 462.9 96 496 96c44.2 0 80 35.8 80 80c0 30.4-17 56.9-42 70.4c-3.6 1.9-6 5.5-6 9.6s2.4 7.7 6 9.6c25 13.5 42 40 42 70.4c0 44.2-35.8 80-80 80c-33.1 0-61.6-20.1-73.7-48.8C415.4 350.9 401.7 336 384 336l-192 0c-17.7 0-31.4 14.9-38.3 31.2C141.6 395.9 113.1 416 80 416c-44.2 0-80-35.8-80-80c0-30.4 17-56.9 42-70.4c3.6-1.9 6-5.5 6-9.6s-2.4-7.7-6-9.6C17 232.9 0 206.4 0 176c0-44.2 35.8-80 80-80c33.1 0 61.6 20.1 73.7 48.8z\"]\n};\nconst faTableCellsRowUnlock = {\n  prefix: 'fas',\n  iconName: 'table-cells-row-unlock',\n  icon: [640, 512, [], \"e691\", \"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 65.1c-37.8 5.4-69.4 29.6-85.2 62.9L360 224l0 64 56 0 0 8.6c-19.1 11.1-32 31.7-32 55.4l-24 0 0 64 24 0 0 64L64 480c-35.3 0-64-28.7-64-64L0 96zM64 224l0 64 88 0 0-64-88 0zm232 0l-88 0 0 64 88 0 0-64zM152 352l-88 0 0 64 88 0 0-64zm56 0l0 64 88 0 0-64-88 0zm288-80l0 48 32 0 32 0 48 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-160 0c-17.7 0-32-14.3-32-32l0-128c0-17.7 14.3-32 32-32l0-48c0-44.2 35.8-80 80-80s80 35.8 80 80l-48 0c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"]\n};\nconst faUserInjured = {\n  prefix: 'fas',\n  iconName: 'user-injured',\n  icon: [448, 512, [], \"f728\", \"M240 80l102.7 0c-7.9-19.5-20.4-36.5-36.2-49.9L240 80zm37.7-68.2C261.3 4.2 243.2 0 224 0c-53.7 0-99.7 33.1-118.7 80l81.4 0 91-68.2zM224 256c70.7 0 128-57.3 128-128c0-5.4-.3-10.8-1-16L97 112c-.7 5.2-1 10.6-1 16c0 70.7 57.3 128 128 128zM124 312.4c-9.7 3.1-19.1 7-28 11.7L96 512l147.7 0L181.5 408.2 124 312.4zm33-7.2L204.3 384l67.7 0c44.2 0 80 35.8 80 80c0 18-6 34.6-16 48l82.3 0c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304l-91.4 0c-7.2 0-14.3 .4-21.3 1.3zM0 482.3C0 498.7 13.3 512 29.7 512L64 512l0-166.6C24.9 378.1 0 427.3 0 482.3zM320 464c0-26.5-21.5-48-48-48l-48.5 0 57.1 95.2C303 507.2 320 487.6 320 464z\"]\n};\nconst faFaceSadTear = {\n  prefix: 'fas',\n  iconName: 'face-sad-tear',\n  icon: [512, 512, [128546, \"sad-tear\"], \"f5b4\", \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zm240 80c0-8.8 7.2-16 16-16c45 0 85.6 20.5 115.7 53.1c6 6.5 5.6 16.6-.9 22.6s-16.6 5.6-22.6-.9c-25-27.1-57.4-42.9-92.3-42.9c-8.8 0-16-7.2-16-16zm-80 80c-26.5 0-48-21-48-47c0-20 28.6-60.4 41.6-77.7c3.2-4.4 9.6-4.4 12.8 0C179.6 308.6 208 349 208 369c0 26-21.5 47-48 47zM367.6 208a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm-192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faSadTear = faFaceSadTear;\nconst faPlane = {\n  prefix: 'fas',\n  iconName: 'plane',\n  icon: [576, 512, [], \"f072\", \"M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.2-15.4-20.4l49-171.6L112 320 68.8 377.6c-3 4-7.8 6.4-12.8 6.4l-42 0c-7.8 0-14-6.3-14-14c0-1.3 .2-2.6 .5-3.9L32 256 .5 145.9c-.4-1.3-.5-2.6-.5-3.9c0-7.8 6.3-14 14-14l42 0c5 0 9.8 2.4 12.8 6.4L112 192l102.9 0-49-171.6C162.9 10.2 170.6 0 181.2 0l56.2 0c11.5 0 22.1 6.2 27.8 16.1L365.7 192l116.6 0z\"]\n};\nconst faTentArrowsDown = {\n  prefix: 'fas',\n  iconName: 'tent-arrows-down',\n  icon: [576, 512, [], \"e581\", \"M209.8 111.9c-8.9-9.9-24-10.7-33.9-1.8l-39.9 36L136 24c0-13.3-10.7-24-24-24S88 10.7 88 24l0 122.1-39.9-36c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9l80 72c9.1 8.2 23 8.2 32.1 0l80-72c9.9-8.9 10.7-24 1.8-33.9zm352 0c-8.9-9.9-24-10.7-33.9-1.8l-39.9 36L488 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 122.1-39.9-36c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9l80 72c9.1 8.2 23 8.2 32.1 0l80-72c9.9-8.9 10.7-24 1.8-33.9zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512l144 0 16 0c17.7 0 32-14.3 32-32l0-118.1c0-5.5 4.4-9.9 9.9-9.9c3.7 0 7.2 2.1 8.8 5.5l68.4 136.8c5.4 10.8 16.5 17.7 28.6 17.7l60.2 0 16 0c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"]\n};\nconst faExclamation = {\n  prefix: 'fas',\n  iconName: 'exclamation',\n  icon: [128, 512, [10069, 10071, 61738], \"21\", \"M96 64c0-17.7-14.3-32-32-32S32 46.3 32 64l0 256c0 17.7 14.3 32 32 32s32-14.3 32-32L96 64zM64 480a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"]\n};\nconst faArrowsSpin = {\n  prefix: 'fas',\n  iconName: 'arrows-spin',\n  icon: [512, 512, [], \"e4bb\", \"M256 96c38.4 0 73.7 13.5 101.3 36.1l-32.6 32.6c-4.6 4.6-5.9 11.5-3.5 17.4s8.3 9.9 14.8 9.9l112 0c8.8 0 16-7.2 16-16l0-112c0-6.5-3.9-12.3-9.9-14.8s-12.9-1.1-17.4 3.5l-34 34C363.4 52.6 312.1 32 256 32c-10.9 0-21.5 .8-32 2.3l0 64.9c10.3-2.1 21-3.2 32-3.2zM132.1 154.7l32.6 32.6c4.6 4.6 11.5 5.9 17.4 3.5s9.9-8.3 9.9-14.8l0-112c0-8.8-7.2-16-16-16L64 48c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l34 34C52.6 148.6 32 199.9 32 256c0 10.9 .8 21.5 2.3 32l64.9 0c-2.1-10.3-3.2-21-3.2-32c0-38.4 13.5-73.7 36.1-101.3zM477.7 224l-64.9 0c2.1 10.3 3.2 21 3.2 32c0 38.4-13.5 73.7-36.1 101.3l-32.6-32.6c-4.6-4.6-11.5-5.9-17.4-3.5s-9.9 8.3-9.9 14.8l0 112c0 8.8 7.2 16 16 16l112 0c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-34-34C459.4 363.4 480 312.1 480 256c0-10.9-.8-21.5-2.3-32zM256 416c-38.4 0-73.7-13.5-101.3-36.1l32.6-32.6c4.6-4.6 5.9-11.5 3.5-17.4s-8.3-9.9-14.8-9.9L64 320c-8.8 0-16 7.2-16 16l0 112c0 6.5 3.9 12.3 9.9 14.8s12.9 1.1 17.4-3.5l34-34C148.6 459.4 199.9 480 256 480c10.9 0 21.5-.8 32-2.3l0-64.9c-10.3 2.1-21 3.2-32 3.2z\"]\n};\nconst faPrint = {\n  prefix: 'fas',\n  iconName: 'print',\n  icon: [512, 512, [128424, 128438, 9113], \"f02f\", \"M128 0C92.7 0 64 28.7 64 64l0 96 64 0 0-96 226.7 0L384 93.3l0 66.7 64 0 0-66.7c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0L128 0zM384 352l0 32 0 64-256 0 0-64 0-16 0-16 256 0zm64 32l32 0c17.7 0 32-14.3 32-32l0-96c0-35.3-28.7-64-64-64L64 192c-35.3 0-64 28.7-64 64l0 96c0 17.7 14.3 32 32 32l32 0 0 64c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-64zM432 248a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"]\n};\nconst faTurkishLiraSign = {\n  prefix: 'fas',\n  iconName: 'turkish-lira-sign',\n  icon: [384, 512, [\"try\", \"turkish-lira\"], \"e2bb\", \"M96 32c17.7 0 32 14.3 32 32l0 35.3L247.2 65.2c17-4.9 34.7 5 39.6 22s-5 34.7-22 39.6L128 165.9l0 29.4 119.2-34.1c17-4.9 34.7 5 39.6 22s-5 34.7-22 39.6L128 261.9 128 416l63.8 0c68.2 0 124.4-53.5 127.8-121.6l.4-8c.9-17.7 15.9-31.2 33.6-30.4s31.2 15.9 30.4 33.6l-.4 8C378.5 399.8 294.1 480 191.8 480L96 480c-17.7 0-32-14.3-32-32l0-167.9-23.2 6.6c-17 4.9-34.7-5-39.6-22s5-34.7 22-39.6L64 213.6l0-29.4-23.2 6.6c-17 4.9-34.7-5-39.6-22s5-34.7 22-39.6L64 117.6 64 64c0-17.7 14.3-32 32-32z\"]\n};\nconst faTry = faTurkishLiraSign;\nconst faTurkishLira = faTurkishLiraSign;\nconst faDollarSign = {\n  prefix: 'fas',\n  iconName: 'dollar-sign',\n  icon: [320, 512, [128178, 61781, \"dollar\", \"usd\"], \"24\", \"M160 0c17.7 0 32 14.3 32 32l0 35.7c1.6 .2 3.1 .4 4.7 .7c.4 .1 .7 .1 1.1 .2l48 8.8c17.4 3.2 28.9 19.9 25.7 37.2s-19.9 28.9-37.2 25.7l-47.5-8.7c-31.3-4.6-58.9-1.5-78.3 6.2s-27.2 18.3-29 28.1c-2 10.7-.5 16.7 1.2 20.4c1.8 3.9 5.5 8.3 12.8 13.2c16.3 10.7 41.3 17.7 73.7 26.3l2.9 .8c28.6 7.6 63.6 16.8 89.6 33.8c14.2 9.3 27.6 21.9 35.9 39.5c8.5 17.9 10.3 37.9 6.4 59.2c-6.9 38-33.1 63.4-65.6 76.7c-13.7 5.6-28.6 9.2-44.4 11l0 33.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.9c-.4-.1-.9-.1-1.3-.2l-.2 0s0 0 0 0c-24.4-3.8-64.5-14.3-91.5-26.3c-16.1-7.2-23.4-26.1-16.2-42.2s26.1-23.4 42.2-16.2c20.9 9.3 55.3 18.5 75.2 21.6c31.9 4.7 58.2 2 76-5.3c16.9-6.9 24.6-16.9 26.8-28.9c1.9-10.6 .4-16.7-1.3-20.4c-1.9-4-5.6-8.4-13-13.3c-16.4-10.7-41.5-17.7-74-26.3l-2.8-.7s0 0 0 0C119.4 279.3 84.4 270 58.4 253c-14.2-9.3-27.5-22-35.8-39.6c-8.4-17.9-10.1-37.9-6.1-59.2C23.7 116 52.3 91.2 84.8 78.3c13.3-5.3 27.9-8.9 43.2-11L128 32c0-17.7 14.3-32 32-32z\"]\n};\nconst faDollar = faDollarSign;\nconst faUsd = faDollarSign;\nconst faX = {\n  prefix: 'fas',\n  iconName: 'x',\n  icon: [384, 512, [120], \"58\", \"M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z\"]\n};\nconst faMagnifyingGlassDollar = {\n  prefix: 'fas',\n  iconName: 'magnifying-glass-dollar',\n  icon: [512, 512, [\"search-dollar\"], \"f688\", \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM228 104c0-11-9-20-20-20s-20 9-20 20l0 14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1c0 0 0 0 0 0s0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4l0 14.6c0 11 9 20 20 20s20-9 20-20l0-13.8c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7l0-13.9z\"]\n};\nconst faSearchDollar = faMagnifyingGlassDollar;\nconst faUsersGear = {\n  prefix: 'fas',\n  iconName: 'users-gear',\n  icon: [640, 512, [\"users-cog\"], \"f509\", \"M144 160A80 80 0 1 0 144 0a80 80 0 1 0 0 160zm368 0A80 80 0 1 0 512 0a80 80 0 1 0 0 160zM0 298.7C0 310.4 9.6 320 21.3 320l213.3 0c.2 0 .4 0 .7 0c-26.6-23.5-43.3-57.8-43.3-96c0-7.6 .7-15 1.9-22.3c-13.6-6.3-28.7-9.7-44.6-9.7l-42.7 0C47.8 192 0 239.8 0 298.7zM320 320c24 0 45.9-8.8 62.7-23.3c2.5-3.7 5.2-7.3 8-10.7c2.7-3.3 5.7-6.1 9-8.3C410 262.3 416 243.9 416 224c0-53-43-96-96-96s-96 43-96 96s43 96 96 96zm65.4 60.2c-10.3-5.9-18.1-16.2-20.8-28.2l-103.2 0C187.7 352 128 411.7 128 485.3c0 14.7 11.9 26.7 26.7 26.7l300.6 0c-2.1-5.2-3.2-10.9-3.2-16.4l0-3c-1.3-.7-2.7-1.5-4-2.3l-2.6 1.5c-16.8 9.7-40.5 8-54.7-9.7c-4.5-5.6-8.6-11.5-12.4-17.6l-.1-.2-.1-.2-2.4-4.1-.1-.2-.1-.2c-3.4-6.2-6.4-12.6-9-19.3c-8.2-21.2 2.2-42.6 19-52.3l2.7-1.5c0-.8 0-1.5 0-2.3s0-1.5 0-2.3l-2.7-1.5zM533.3 192l-42.7 0c-15.9 0-31 3.5-44.6 9.7c1.3 7.2 1.9 14.7 1.9 22.3c0 17.4-3.5 33.9-9.7 49c2.5 .9 4.9 2 7.1 3.3l2.6 1.5c1.3-.8 2.6-1.6 4-2.3l0-3c0-19.4 13.3-39.1 35.8-42.6c7.9-1.2 16-1.9 24.2-1.9s16.3 .6 24.2 1.9c22.5 3.5 35.8 23.2 35.8 42.6l0 3c1.3 .7 2.7 1.5 4 2.3l2.6-1.5c16.8-9.7 40.5-8 54.7 9.7c2.3 2.8 4.5 5.8 6.6 8.7c-2.1-57.1-49-102.7-106.6-102.7zm91.3 163.9c6.3-3.6 9.5-11.1 6.8-18c-2.1-5.5-4.6-10.8-7.4-15.9l-2.3-4c-3.1-5.1-6.5-9.9-10.2-14.5c-4.6-5.7-12.7-6.7-19-3l-2.9 1.7c-9.2 5.3-20.4 4-29.6-1.3s-16.1-14.5-16.1-25.1l0-3.4c0-7.3-4.9-13.8-12.1-14.9c-6.5-1-13.1-1.5-19.9-1.5s-13.4 .5-19.9 1.5c-7.2 1.1-12.1 7.6-12.1 14.9l0 3.4c0 10.6-6.9 19.8-16.1 25.1s-20.4 6.6-29.6 1.3l-2.9-1.7c-6.3-3.6-14.4-2.6-19 3c-3.7 4.6-7.1 9.5-10.2 14.6l-2.3 3.9c-2.8 5.1-5.3 10.4-7.4 15.9c-2.6 6.8 .5 14.3 6.8 17.9l2.9 1.7c9.2 5.3 13.7 15.8 13.7 26.4s-4.5 21.1-13.7 26.4l-3 1.7c-6.3 3.6-9.5 11.1-6.8 17.9c2.1 5.5 4.6 10.7 7.4 15.8l2.4 4.1c3 5.1 6.4 9.9 10.1 14.5c4.6 5.7 12.7 6.7 19 3l2.9-1.7c9.2-5.3 20.4-4 29.6 1.3s16.1 14.5 16.1 25.1l0 3.4c0 7.3 4.9 13.8 12.1 14.9c6.5 1 13.1 1.5 19.9 1.5s13.4-.5 19.9-1.5c7.2-1.1 12.1-7.6 12.1-14.9l0-3.4c0-10.6 6.9-19.8 16.1-25.1s20.4-6.6 29.6-1.3l2.9 1.7c6.3 3.6 14.4 2.6 19-3c3.7-4.6 7.1-9.4 10.1-14.5l2.4-4.2c2.8-5.1 5.3-10.3 7.4-15.8c2.6-6.8-.5-14.3-6.8-17.9l-3-1.7c-9.2-5.3-13.7-15.8-13.7-26.4s4.5-21.1 13.7-26.4l3-1.7zM472 384a40 40 0 1 1 80 0 40 40 0 1 1 -80 0z\"]\n};\nconst faUsersCog = faUsersGear;\nconst faPersonMilitaryPointing = {\n  prefix: 'fas',\n  iconName: 'person-military-pointing',\n  icon: [576, 512, [], \"e54a\", \"M246.9 14.1C234 15.2 224 26 224 39c0 13.8 11.2 25 25 25l151 0c8.8 0 16-7.2 16-16l0-30.6C416 8 408 .7 398.7 1.4L246.9 14.1zM240 112c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16L241.6 96c-1 5.2-1.6 10.5-1.6 16zM72 224c-22.1 0-40 17.9-40 40s17.9 40 40 40l152 0 0 89.4L386.8 230.5c-13.3-4.3-27.3-6.5-41.6-6.5L240 224 72 224zm345.7 20.9L246.6 416 416 416l0-46.3 53.6 90.6c11.2 19 35.8 25.3 54.8 14.1s25.3-35.8 14.1-54.8L462.3 290.8c-11.2-18.9-26.6-34.5-44.6-45.9zM224 448l0 32c0 17.7 14.3 32 32 32l128 0c17.7 0 32-14.3 32-32l0-32-192 0z\"]\n};\nconst faBuildingColumns = {\n  prefix: 'fas',\n  iconName: 'building-columns',\n  icon: [512, 512, [\"bank\", \"institution\", \"museum\", \"university\"], \"f19c\", \"M243.4 2.6l-224 96c-14 6-21.8 21-18.7 35.8S16.8 160 32 160l0 8c0 13.3 10.7 24 24 24l400 0c13.3 0 24-10.7 24-24l0-8c15.2 0 28.3-10.7 31.3-25.6s-4.8-29.9-18.7-35.8l-224-96c-8-3.4-17.2-3.4-25.2 0zM128 224l-64 0 0 196.3c-.6 .3-1.2 .7-1.8 1.1l-48 32c-11.7 7.8-17 22.4-12.9 35.9S17.9 512 32 512l448 0c14.1 0 26.5-9.2 30.6-22.7s-1.1-28.1-12.9-35.9l-48-32c-.6-.4-1.2-.7-1.8-1.1L448 224l-64 0 0 192-40 0 0-192-64 0 0 192-48 0 0-192-64 0 0 192-40 0 0-192zM256 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"]\n};\nconst faBank = faBuildingColumns;\nconst faInstitution = faBuildingColumns;\nconst faMuseum = faBuildingColumns;\nconst faUniversity = faBuildingColumns;\nconst faUmbrella = {\n  prefix: 'fas',\n  iconName: 'umbrella',\n  icon: [576, 512, [], \"f0e9\", \"M288 0c17.7 0 32 14.3 32 32l0 17.7C451.8 63.4 557.7 161 573.9 285.9c2 15.6-17.3 24.4-27.8 12.7C532.1 283 504.8 272 480 272c-38.7 0-71 27.5-78.4 64.1c-1.7 8.7-8.7 15.9-17.6 15.9s-15.8-7.2-17.6-15.9C359 299.5 326.7 272 288 272s-71 27.5-78.4 64.1c-1.7 8.7-8.7 15.9-17.6 15.9s-15.8-7.2-17.6-15.9C167 299.5 134.7 272 96 272c-24.8 0-52.1 11-66.1 26.7C19.4 310.4 .1 301.5 2.1 285.9C18.3 161 124.2 63.4 256 49.7L256 32c0-17.7 14.3-32 32-32zm0 304c12.3 0 23.5 4.6 32 12.2l0 114.3c0 45-36.5 81.4-81.4 81.4c-30.8 0-59-17.4-72.8-45l-2.3-4.7c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l2.3 4.7c3 5.9 9 9.6 15.6 9.6c9.6 0 17.4-7.8 17.4-17.4l0-114.3c8.5-7.6 19.7-12.2 32-12.2z\"]\n};\nconst faTrowel = {\n  prefix: 'fas',\n  iconName: 'trowel',\n  icon: [512, 512, [], \"e589\", \"M343.9 213.4L245.3 312l65.4 65.4c7.9 7.9 11.1 19.4 8.4 30.3s-10.8 19.6-21.5 22.9l-256 80c-11.4 3.5-23.8 .5-32.2-7.9S-2.1 481.8 1.5 470.5l80-256c3.3-10.7 12-18.9 22.9-21.5s22.4 .5 30.3 8.4L200 266.7l98.6-98.6c-14.3-14.6-14.2-38 .3-52.5l95.4-95.4c26.9-26.9 70.5-26.9 97.5 0s26.9 70.5 0 97.5l-95.4 95.4c-14.5 14.5-37.9 14.6-52.5 .3z\"]\n};\nconst faD = {\n  prefix: 'fas',\n  iconName: 'd',\n  icon: [384, 512, [100], \"44\", \"M0 96C0 60.7 28.7 32 64 32l96 0c123.7 0 224 100.3 224 224s-100.3 224-224 224l-96 0c-35.3 0-64-28.7-64-64L0 96zm160 0L64 96l0 320 96 0c88.4 0 160-71.6 160-160s-71.6-160-160-160z\"]\n};\nconst faStapler = {\n  prefix: 'fas',\n  iconName: 'stapler',\n  icon: [640, 512, [], \"e5af\", \"M640 299.3l0 4.7 0 128c0 26.5-21.5 48-48 48l-80 0-64 0L64 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0 0-48L96 368c-17.7 0-32-14.3-32-32l0-116.6L33.8 214C14.2 210.5 0 193.5 0 173.7c0-8.9 2.9-17.5 8.2-24.6l35.6-47.5C76.7 57.8 128.2 32 182.9 32c27 0 53.6 6.3 77.8 18.4L586.9 213.5C619.5 229.7 640 263 640 299.3zM448 304l0-16L128 230.9l0 73.1 320 0z\"]\n};\nconst faMasksTheater = {\n  prefix: 'fas',\n  iconName: 'masks-theater',\n  icon: [640, 512, [127917, \"theater-masks\"], \"f630\", \"M74.6 373.2c41.7 36.1 108 82.5 166.1 73.7c6.1-.9 12.1-2.5 18-4.5c-9.2-12.3-17.3-24.4-24.2-35.4c-21.9-35-28.8-75.2-25.9-113.6c-20.6 4.1-39.2 13-54.7 25.4c-6.5 5.2-16.3 1.3-14.8-7c6.4-33.5 33-60.9 68.2-66.3c2.6-.4 5.3-.7 7.9-.8l19.4-131.3c2-13.8 8-32.7 25-45.9C278.2 53.2 310.5 37 363.2 32.2c-.8-.7-1.6-1.4-2.4-2.1C340.6 14.5 288.4-11.5 175.7 5.6S20.5 63 5.7 83.9C0 91.9-.8 102 .6 111.8L24.8 276.1c5.5 37.3 21.5 72.6 49.8 97.2zm87.7-219.6c4.4-3.1 10.8-2 11.8 3.3c.1 .5 .2 1.1 .3 1.6c3.2 21.8-11.6 42-33.1 45.3s-41.5-11.8-44.7-33.5c-.1-.5-.1-1.1-.2-1.6c-.6-5.4 5.2-8.4 10.3-6.7c9 3 18.8 3.9 28.7 2.4s19.1-5.3 26.8-10.8zM261.6 390c29.4 46.9 79.5 110.9 137.6 119.7s124.5-37.5 166.1-73.7c28.3-24.5 44.3-59.8 49.8-97.2l24.2-164.3c1.4-9.8 .6-19.9-5.1-27.9c-14.8-20.9-57.3-61.2-170-78.3S299.4 77.2 279.2 92.8c-7.8 6-11.5 15.4-12.9 25.2L242.1 282.3c-5.5 37.3-.4 75.8 19.6 107.7zM404.5 235.3c-7.7-5.5-16.8-9.3-26.8-10.8s-19.8-.6-28.7 2.4c-5.1 1.7-10.9-1.3-10.3-6.7c.1-.5 .1-1.1 .2-1.6c3.2-21.8 23.2-36.8 44.7-33.5s36.3 23.5 33.1 45.3c-.1 .5-.2 1.1-.3 1.6c-1 5.3-7.4 6.4-11.8 3.3zm136.2 15.5c-1 5.3-7.4 6.4-11.8 3.3c-7.7-5.5-16.8-9.3-26.8-10.8s-19.8-.6-28.7 2.4c-5.1 1.7-10.9-1.3-10.3-6.7c.1-.5 .1-1.1 .2-1.6c3.2-21.8 23.2-36.8 44.7-33.5s36.3 23.5 33.1 45.3c-.1 .5-.2 1.1-.3 1.6zM530 350.2c-19.6 44.7-66.8 72.5-116.8 64.9s-87.1-48.2-93-96.7c-1-8.3 8.9-12.1 15.2-6.7c23.9 20.8 53.6 35.3 87 40.3s66.1 .1 94.9-12.8c7.6-3.4 16 3.2 12.6 10.9z\"]\n};\nconst faTheaterMasks = faMasksTheater;\nconst faKipSign = {\n  prefix: 'fas',\n  iconName: 'kip-sign',\n  icon: [384, 512, [], \"e1c4\", \"M340.8 88.3c13.4-11.5 15-31.7 3.5-45.1s-31.7-15-45.1-3.5L128 186.4 128 64c0-17.7-14.3-32-32-32S64 46.3 64 64l0 160-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l32 0 0 160c0 17.7 14.3 32 32 32s32-14.3 32-32l0-122.4L299.2 472.3c13.4 11.5 33.6 9.9 45.1-3.5s9.9-33.6-3.5-45.1L182.5 288 352 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-169.5 0L340.8 88.3z\"]\n};\nconst faHandPointLeft = {\n  prefix: 'fas',\n  iconName: 'hand-point-left',\n  icon: [512, 512, [], \"f0a5\", \"M32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l208 0 0-64L32 96zM192 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm-64-64c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0c-17.7 0-32 14.3-32 32zm96 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm88-96l-.6 0c5.4 9.4 8.6 20.3 8.6 32c0 13.2-4 25.4-10.8 35.6c24.9 8.7 42.8 32.5 42.8 60.4c0 11.7-3.1 22.6-8.6 32l8.6 0c88.4 0 160-71.6 160-160l0-61.7c0-42.4-16.9-83.1-46.9-113.1l-11.6-11.6C429.5 77.5 396.9 64 363 64l-27 0c-35.3 0-64 28.7-64 64l0 88c0 22.1 17.9 40 40 40s40-17.9 40-40l0-56c0-8.8 7.2-16 16-16s16 7.2 16 16l0 56c0 39.8-32.2 72-72 72z\"]\n};\nconst faHandshakeSimple = {\n  prefix: 'fas',\n  iconName: 'handshake-simple',\n  icon: [640, 512, [129309, \"handshake-alt\"], \"f4c6\", \"M323.4 85.2l-96.8 78.4c-16.1 13-19.2 36.4-7 53.1c12.9 17.8 38 21.3 55.3 7.8l99.3-77.2c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L550.2 352l41.8 0c26.5 0 48-21.5 48-48l0-128c0-26.5-21.5-48-48-48l-76 0-4 0-.7 0-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2zm22.8 124.4l-51.7 40.2C263 274.4 217.3 268 193.7 235.6c-22.2-30.5-16.6-73.1 12.7-96.8l83.2-67.3c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-72 48-80 0c-26.5 0-48 21.5-48 48L0 304c0 26.5 21.5 48 48 48l108.2 0 91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c4.5-4.9 7.8-10.6 9.9-16.5c19.4 13 45.8 10.3 62.1-7.5c17.9-19.5 16.6-49.9-2.9-67.8l-134.2-123z\"]\n};\nconst faHandshakeAlt = faHandshakeSimple;\nconst faJetFighter = {\n  prefix: 'fas',\n  iconName: 'jet-fighter',\n  icon: [640, 512, [\"fighter-jet\"], \"f0fb\", \"M160 24c0-13.3 10.7-24 24-24L296 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-16 0L384 192l116.4 0c7.7 0 15.3 1.4 22.5 4.1L625 234.4c9 3.4 15 12 15 21.6s-6 18.2-15 21.6L522.9 315.9c-7.2 2.7-14.8 4.1-22.5 4.1L384 320 280 464l16 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-112 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l8 0 0-144-32 0-54.6 54.6c-6 6-14.1 9.4-22.6 9.4L64 384c-17.7 0-32-14.3-32-32l0-64c-17.7 0-32-14.3-32-32s14.3-32 32-32l0-64c0-17.7 14.3-32 32-32l18.7 0c8.5 0 16.6 3.4 22.6 9.4L160 192l32 0 0-144-8 0c-13.3 0-24-10.7-24-24zM80 240c-8.8 0-16 7.2-16 16s7.2 16 16 16l64 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-64 0z\"]\n};\nconst faFighterJet = faJetFighter;\nconst faSquareShareNodes = {\n  prefix: 'fas',\n  iconName: 'square-share-nodes',\n  icon: [448, 512, [\"share-alt-square\"], \"f1e1\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM384 160c0 35.3-28.7 64-64 64c-15.4 0-29.5-5.4-40.6-14.5L194.1 256l85.3 46.5c11-9.1 25.2-14.5 40.6-14.5c35.3 0 64 28.7 64 64s-28.7 64-64 64s-64-28.7-64-64c0-2.5 .1-4.9 .4-7.3L174.5 300c-11.7 12.3-28.2 20-46.5 20c-35.3 0-64-28.7-64-64s28.7-64 64-64c18.3 0 34.8 7.7 46.5 20l81.9-44.7c-.3-2.4-.4-4.9-.4-7.3c0-35.3 28.7-64 64-64s64 28.7 64 64z\"]\n};\nconst faShareAltSquare = faSquareShareNodes;\nconst faBarcode = {\n  prefix: 'fas',\n  iconName: 'barcode',\n  icon: [512, 512, [], \"f02a\", \"M24 32C10.7 32 0 42.7 0 56L0 456c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24L64 56c0-13.3-10.7-24-24-24L24 32zm88 0c-8.8 0-16 7.2-16 16l0 416c0 8.8 7.2 16 16 16s16-7.2 16-16l0-416c0-8.8-7.2-16-16-16zm72 0c-13.3 0-24 10.7-24 24l0 400c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-400c0-13.3-10.7-24-24-24l-16 0zm96 0c-13.3 0-24 10.7-24 24l0 400c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-400c0-13.3-10.7-24-24-24l-16 0zM448 56l0 400c0 13.3 10.7 24 24 24l16 0c13.3 0 24-10.7 24-24l0-400c0-13.3-10.7-24-24-24l-16 0c-13.3 0-24 10.7-24 24zm-64-8l0 416c0 8.8 7.2 16 16 16s16-7.2 16-16l0-416c0-8.8-7.2-16-16-16s-16 7.2-16 16z\"]\n};\nconst faPlusMinus = {\n  prefix: 'fas',\n  iconName: 'plus-minus',\n  icon: [384, 512, [], \"e43c\", \"M224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 112L48 144c-17.7 0-32 14.3-32 32s14.3 32 32 32l112 0 0 112c0 17.7 14.3 32 32 32s32-14.3 32-32l0-112 112 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-112 0 0-112zM0 480c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 448c-17.7 0-32 14.3-32 32z\"]\n};\nconst faVideo = {\n  prefix: 'fas',\n  iconName: 'video',\n  icon: [576, 512, [\"video-camera\"], \"f03d\", \"M0 128C0 92.7 28.7 64 64 64l256 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128zM559.1 99.8c10.4 5.6 16.9 16.4 16.9 28.2l0 256c0 11.8-6.5 22.6-16.9 28.2s-23 5-32.9-1.6l-96-64L416 337.1l0-17.1 0-128 0-17.1 14.2-9.5 96-64c9.8-6.5 22.4-7.2 32.9-1.6z\"]\n};\nconst faVideoCamera = faVideo;\nconst faGraduationCap = {\n  prefix: 'fas',\n  iconName: 'graduation-cap',\n  icon: [640, 512, [127891, \"mortar-board\"], \"f19d\", \"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9l0 28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5l0-24.6c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\"]\n};\nconst faMortarBoard = faGraduationCap;\nconst faHandHoldingMedical = {\n  prefix: 'fas',\n  iconName: 'hand-holding-medical',\n  icon: [576, 512, [], \"e05c\", \"M224 24l0 56-56 0c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l56 0 0 56c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-56 56 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-56 0 0-56c0-13.3-10.7-24-24-24L248 0c-13.3 0-24 10.7-24 24zM559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416 272 416c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0-16 0-78.3 0c-29.1 0-57.3 9.9-80 28L68.8 384 32 384c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l160 0 160.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-367-8.2l.9 0c0 0 0 0 0 0c-.3 0-.6 0-.9 0z\"]\n};\nconst faPersonCircleCheck = {\n  prefix: 'fas',\n  iconName: 'person-circle-check',\n  icon: [576, 512, [], \"e53e\", \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0zm136 16a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"]\n};\nconst faTurnUp = {\n  prefix: 'fas',\n  iconName: 'turn-up',\n  icon: [384, 512, [10548, \"level-up-alt\"], \"f3bf\", \"M350 177.5c3.8-8.8 2-19-4.6-26l-136-144C204.9 2.7 198.6 0 192 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26s12.5 14.5 22 14.5l88 0 0 192c0 17.7-14.3 32-32 32l-80 0c-17.7 0-32 14.3-32 32l0 32c0 17.7 14.3 32 32 32l80 0c70.7 0 128-57.3 128-128l0-192 88 0c9.6 0 18.2-5.7 22-14.5z\"]\n};\nconst faLevelUpAlt = faTurnUp;\nvar icons = {\n  fa0,\n  fa1,\n  fa2,\n  fa3,\n  fa4,\n  fa5,\n  fa6,\n  fa7,\n  fa8,\n  fa9,\n  faFillDrip,\n  faArrowsToCircle,\n  faCircleChevronRight,\n  faChevronCircleRight,\n  faAt,\n  faTrashCan,\n  faTrashAlt,\n  faTextHeight,\n  faUserXmark,\n  faUserTimes,\n  faStethoscope,\n  faMessage,\n  faCommentAlt,\n  faInfo,\n  faDownLeftAndUpRightToCenter,\n  faCompressAlt,\n  faExplosion,\n  faFileLines,\n  faFileAlt,\n  faFileText,\n  faWaveSquare,\n  faRing,\n  faBuildingUn,\n  faDiceThree,\n  faCalendarDays,\n  faCalendarAlt,\n  faAnchorCircleCheck,\n  faBuildingCircleArrowRight,\n  faVolleyball,\n  faVolleyballBall,\n  faArrowsUpToLine,\n  faSortDown,\n  faSortDesc,\n  faCircleMinus,\n  faMinusCircle,\n  faDoorOpen,\n  faRightFromBracket,\n  faSignOutAlt,\n  faAtom,\n  faSoap,\n  faIcons,\n  faHeartMusicCameraBolt,\n  faMicrophoneLinesSlash,\n  faMicrophoneAltSlash,\n  faBridgeCircleCheck,\n  faPumpMedical,\n  faFingerprint,\n  faHandPointRight,\n  faMagnifyingGlassLocation,\n  faSearchLocation,\n  faForwardStep,\n  faStepForward,\n  faFaceSmileBeam,\n  faSmileBeam,\n  faFlagCheckered,\n  faFootball,\n  faFootballBall,\n  faSchoolCircleExclamation,\n  faCrop,\n  faAnglesDown,\n  faAngleDoubleDown,\n  faUsersRectangle,\n  faPeopleRoof,\n  faPeopleLine,\n  faBeerMugEmpty,\n  faBeer,\n  faDiagramPredecessor,\n  faArrowUpLong,\n  faLongArrowUp,\n  faFireFlameSimple,\n  faBurn,\n  faPerson,\n  faMale,\n  faLaptop,\n  faFileCsv,\n  faMenorah,\n  faTruckPlane,\n  faRecordVinyl,\n  faFaceGrinStars,\n  faGrinStars,\n  faBong,\n  faSpaghettiMonsterFlying,\n  faPastafarianism,\n  faArrowDownUpAcrossLine,\n  faSpoon,\n  faUtensilSpoon,\n  faJarWheat,\n  faEnvelopesBulk,\n  faMailBulk,\n  faFileCircleExclamation,\n  faCircleH,\n  faHospitalSymbol,\n  faPager,\n  faAddressBook,\n  faContactBook,\n  faStrikethrough,\n  faK,\n  faLandmarkFlag,\n  faPencil,\n  faPencilAlt,\n  faBackward,\n  faCaretRight,\n  faComments,\n  faPaste,\n  faFileClipboard,\n  faCodePullRequest,\n  faClipboardList,\n  faTruckRampBox,\n  faTruckLoading,\n  faUserCheck,\n  faVialVirus,\n  faSheetPlastic,\n  faBlog,\n  faUserNinja,\n  faPersonArrowUpFromLine,\n  faScrollTorah,\n  faTorah,\n  faBroomBall,\n  faQuidditch,\n  faQuidditchBroomBall,\n  faToggleOff,\n  faBoxArchive,\n  faArchive,\n  faPersonDrowning,\n  faArrowDown91,\n  faSortNumericDesc,\n  faSortNumericDownAlt,\n  faFaceGrinTongueSquint,\n  faGrinTongueSquint,\n  faSprayCan,\n  faTruckMonster,\n  faW,\n  faEarthAfrica,\n  faGlobeAfrica,\n  faRainbow,\n  faCircleNotch,\n  faTabletScreenButton,\n  faTabletAlt,\n  faPaw,\n  faCloud,\n  faTrowelBricks,\n  faFaceFlushed,\n  faFlushed,\n  faHospitalUser,\n  faTentArrowLeftRight,\n  faGavel,\n  faLegal,\n  faBinoculars,\n  faMicrophoneSlash,\n  faBoxTissue,\n  faMotorcycle,\n  faBellConcierge,\n  faConciergeBell,\n  faPenRuler,\n  faPencilRuler,\n  faPeopleArrows,\n  faPeopleArrowsLeftRight,\n  faMarsAndVenusBurst,\n  faSquareCaretRight,\n  faCaretSquareRight,\n  faScissors,\n  faCut,\n  faSunPlantWilt,\n  faToiletsPortable,\n  faHockeyPuck,\n  faTable,\n  faMagnifyingGlassArrowRight,\n  faTachographDigital,\n  faDigitalTachograph,\n  faUsersSlash,\n  faClover,\n  faReply,\n  faMailReply,\n  faStarAndCrescent,\n  faHouseFire,\n  faSquareMinus,\n  faMinusSquare,\n  faHelicopter,\n  faCompass,\n  faSquareCaretDown,\n  faCaretSquareDown,\n  faFileCircleQuestion,\n  faLaptopCode,\n  faSwatchbook,\n  faPrescriptionBottle,\n  faBars,\n  faNavicon,\n  faPeopleGroup,\n  faHourglassEnd,\n  faHourglass3,\n  faHeartCrack,\n  faHeartBroken,\n  faSquareUpRight,\n  faExternalLinkSquareAlt,\n  faFaceKissBeam,\n  faKissBeam,\n  faFilm,\n  faRulerHorizontal,\n  faPeopleRobbery,\n  faLightbulb,\n  faCaretLeft,\n  faCircleExclamation,\n  faExclamationCircle,\n  faSchoolCircleXmark,\n  faArrowRightFromBracket,\n  faSignOut,\n  faCircleChevronDown,\n  faChevronCircleDown,\n  faUnlockKeyhole,\n  faUnlockAlt,\n  faCloudShowersHeavy,\n  faHeadphonesSimple,\n  faHeadphonesAlt,\n  faSitemap,\n  faCircleDollarToSlot,\n  faDonate,\n  faMemory,\n  faRoadSpikes,\n  faFireBurner,\n  faFlag,\n  faHanukiah,\n  faFeather,\n  faVolumeLow,\n  faVolumeDown,\n  faCommentSlash,\n  faCloudSunRain,\n  faCompress,\n  faWheatAwn,\n  faWheatAlt,\n  faAnkh,\n  faHandsHoldingChild,\n  faAsterisk,\n  faSquareCheck,\n  faCheckSquare,\n  faPesetaSign,\n  faHeading,\n  faHeader,\n  faGhost,\n  faList,\n  faListSquares,\n  faSquarePhoneFlip,\n  faPhoneSquareAlt,\n  faCartPlus,\n  faGamepad,\n  faCircleDot,\n  faDotCircle,\n  faFaceDizzy,\n  faDizzy,\n  faEgg,\n  faHouseMedicalCircleXmark,\n  faCampground,\n  faFolderPlus,\n  faFutbol,\n  faFutbolBall,\n  faSoccerBall,\n  faPaintbrush,\n  faPaintBrush,\n  faLock,\n  faGasPump,\n  faHotTubPerson,\n  faHotTub,\n  faMapLocation,\n  faMapMarked,\n  faHouseFloodWater,\n  faTree,\n  faBridgeLock,\n  faSackDollar,\n  faPenToSquare,\n  faEdit,\n  faCarSide,\n  faShareNodes,\n  faShareAlt,\n  faHeartCircleMinus,\n  faHourglassHalf,\n  faHourglass2,\n  faMicroscope,\n  faSink,\n  faBagShopping,\n  faShoppingBag,\n  faArrowDownZA,\n  faSortAlphaDesc,\n  faSortAlphaDownAlt,\n  faMitten,\n  faPersonRays,\n  faUsers,\n  faEyeSlash,\n  faFlaskVial,\n  faHand,\n  faHandPaper,\n  faOm,\n  faWorm,\n  faHouseCircleXmark,\n  faPlug,\n  faChevronUp,\n  faHandSpock,\n  faStopwatch,\n  faFaceKiss,\n  faKiss,\n  faBridgeCircleXmark,\n  faFaceGrinTongue,\n  faGrinTongue,\n  faChessBishop,\n  faFaceGrinWink,\n  faGrinWink,\n  faEarDeaf,\n  faDeaf,\n  faDeafness,\n  faHardOfHearing,\n  faRoadCircleCheck,\n  faDiceFive,\n  faSquareRss,\n  faRssSquare,\n  faLandMineOn,\n  faICursor,\n  faStamp,\n  faStairs,\n  faI,\n  faHryvniaSign,\n  faHryvnia,\n  faPills,\n  faFaceGrinWide,\n  faGrinAlt,\n  faTooth,\n  faV,\n  faBangladeshiTakaSign,\n  faBicycle,\n  faStaffSnake,\n  faRodAsclepius,\n  faRodSnake,\n  faStaffAesculapius,\n  faHeadSideCoughSlash,\n  faTruckMedical,\n  faAmbulance,\n  faWheatAwnCircleExclamation,\n  faSnowman,\n  faMortarPestle,\n  faRoadBarrier,\n  faSchool,\n  faIgloo,\n  faJoint,\n  faAngleRight,\n  faHorse,\n  faQ,\n  faG,\n  faNotesMedical,\n  faTemperatureHalf,\n  faTemperature2,\n  faThermometer2,\n  faThermometerHalf,\n  faDongSign,\n  faCapsules,\n  faPooStorm,\n  faPooBolt,\n  faFaceFrownOpen,\n  faFrownOpen,\n  faHandPointUp,\n  faMoneyBill,\n  faBookmark,\n  faAlignJustify,\n  faUmbrellaBeach,\n  faHelmetUn,\n  faBullseye,\n  faBacon,\n  faHandPointDown,\n  faArrowUpFromBracket,\n  faFolder,\n  faFolderBlank,\n  faFileWaveform,\n  faFileMedicalAlt,\n  faRadiation,\n  faChartSimple,\n  faMarsStroke,\n  faVial,\n  faGauge,\n  faDashboard,\n  faGaugeMed,\n  faTachometerAltAverage,\n  faWandMagicSparkles,\n  faMagicWandSparkles,\n  faE,\n  faPenClip,\n  faPenAlt,\n  faBridgeCircleExclamation,\n  faUser,\n  faSchoolCircleCheck,\n  faDumpster,\n  faVanShuttle,\n  faShuttleVan,\n  faBuildingUser,\n  faSquareCaretLeft,\n  faCaretSquareLeft,\n  faHighlighter,\n  faKey,\n  faBullhorn,\n  faGlobe,\n  faSynagogue,\n  faPersonHalfDress,\n  faRoadBridge,\n  faLocationArrow,\n  faC,\n  faTabletButton,\n  faBuildingLock,\n  faPizzaSlice,\n  faMoneyBillWave,\n  faChartArea,\n  faAreaChart,\n  faHouseFlag,\n  faPersonCircleMinus,\n  faBan,\n  faCancel,\n  faCameraRotate,\n  faSprayCanSparkles,\n  faAirFreshener,\n  faStar,\n  faRepeat,\n  faCross,\n  faBox,\n  faVenusMars,\n  faArrowPointer,\n  faMousePointer,\n  faMaximize,\n  faExpandArrowsAlt,\n  faChargingStation,\n  faShapes,\n  faTriangleCircleSquare,\n  faShuffle,\n  faRandom,\n  faPersonRunning,\n  faRunning,\n  faMobileRetro,\n  faGripLinesVertical,\n  faSpider,\n  faHandsBound,\n  faFileInvoiceDollar,\n  faPlaneCircleExclamation,\n  faXRay,\n  faSpellCheck,\n  faSlash,\n  faComputerMouse,\n  faMouse,\n  faArrowRightToBracket,\n  faSignIn,\n  faShopSlash,\n  faStoreAltSlash,\n  faServer,\n  faVirusCovidSlash,\n  faShopLock,\n  faHourglassStart,\n  faHourglass1,\n  faBlenderPhone,\n  faBuildingWheat,\n  faPersonBreastfeeding,\n  faRightToBracket,\n  faSignInAlt,\n  faVenus,\n  faPassport,\n  faThumbtackSlash,\n  faThumbTackSlash,\n  faHeartPulse,\n  faHeartbeat,\n  faPeopleCarryBox,\n  faPeopleCarry,\n  faTemperatureHigh,\n  faMicrochip,\n  faCrown,\n  faWeightHanging,\n  faXmarksLines,\n  faFilePrescription,\n  faWeightScale,\n  faWeight,\n  faUserGroup,\n  faUserFriends,\n  faArrowUpAZ,\n  faSortAlphaUp,\n  faChessKnight,\n  faFaceLaughSquint,\n  faLaughSquint,\n  faWheelchair,\n  faCircleArrowUp,\n  faArrowCircleUp,\n  faToggleOn,\n  faPersonWalking,\n  faWalking,\n  faL,\n  faFire,\n  faBedPulse,\n  faProcedures,\n  faShuttleSpace,\n  faSpaceShuttle,\n  faFaceLaugh,\n  faLaugh,\n  faFolderOpen,\n  faHeartCirclePlus,\n  faCodeFork,\n  faCity,\n  faMicrophoneLines,\n  faMicrophoneAlt,\n  faPepperHot,\n  faUnlock,\n  faColonSign,\n  faHeadset,\n  faStoreSlash,\n  faRoadCircleXmark,\n  faUserMinus,\n  faMarsStrokeUp,\n  faMarsStrokeV,\n  faChampagneGlasses,\n  faGlassCheers,\n  faClipboard,\n  faHouseCircleExclamation,\n  faFileArrowUp,\n  faFileUpload,\n  faWifi,\n  faWifi3,\n  faWifiStrong,\n  faBath,\n  faBathtub,\n  faUnderline,\n  faUserPen,\n  faUserEdit,\n  faSignature,\n  faStroopwafel,\n  faBold,\n  faAnchorLock,\n  faBuildingNgo,\n  faManatSign,\n  faNotEqual,\n  faBorderTopLeft,\n  faBorderStyle,\n  faMapLocationDot,\n  faMapMarkedAlt,\n  faJedi,\n  faSquarePollVertical,\n  faPoll,\n  faMugHot,\n  faCarBattery,\n  faBatteryCar,\n  faGift,\n  faDiceTwo,\n  faChessQueen,\n  faGlasses,\n  faChessBoard,\n  faBuildingCircleCheck,\n  faPersonChalkboard,\n  faMarsStrokeRight,\n  faMarsStrokeH,\n  faHandBackFist,\n  faHandRock,\n  faSquareCaretUp,\n  faCaretSquareUp,\n  faCloudShowersWater,\n  faChartBar,\n  faBarChart,\n  faHandsBubbles,\n  faHandsWash,\n  faLessThanEqual,\n  faTrain,\n  faEyeLowVision,\n  faLowVision,\n  faCrow,\n  faSailboat,\n  faWindowRestore,\n  faSquarePlus,\n  faPlusSquare,\n  faToriiGate,\n  faFrog,\n  faBucket,\n  faImage,\n  faMicrophone,\n  faCow,\n  faCaretUp,\n  faScrewdriver,\n  faFolderClosed,\n  faHouseTsunami,\n  faSquareNfi,\n  faArrowUpFromGroundWater,\n  faMartiniGlass,\n  faGlassMartiniAlt,\n  faSquareBinary,\n  faRotateLeft,\n  faRotateBack,\n  faRotateBackward,\n  faUndoAlt,\n  faTableColumns,\n  faColumns,\n  faLemon,\n  faHeadSideMask,\n  faHandshake,\n  faGem,\n  faDolly,\n  faDollyBox,\n  faSmoking,\n  faMinimize,\n  faCompressArrowsAlt,\n  faMonument,\n  faSnowplow,\n  faAnglesRight,\n  faAngleDoubleRight,\n  faCannabis,\n  faCirclePlay,\n  faPlayCircle,\n  faTablets,\n  faEthernet,\n  faEuroSign,\n  faEur,\n  faEuro,\n  faChair,\n  faCircleCheck,\n  faCheckCircle,\n  faCircleStop,\n  faStopCircle,\n  faCompassDrafting,\n  faDraftingCompass,\n  faPlateWheat,\n  faIcicles,\n  faPersonShelter,\n  faNeuter,\n  faIdBadge,\n  faMarker,\n  faFaceLaughBeam,\n  faLaughBeam,\n  faHelicopterSymbol,\n  faUniversalAccess,\n  faCircleChevronUp,\n  faChevronCircleUp,\n  faLariSign,\n  faVolcano,\n  faPersonWalkingDashedLineArrowRight,\n  faSterlingSign,\n  faGbp,\n  faPoundSign,\n  faViruses,\n  faSquarePersonConfined,\n  faUserTie,\n  faArrowDownLong,\n  faLongArrowDown,\n  faTentArrowDownToLine,\n  faCertificate,\n  faReplyAll,\n  faMailReplyAll,\n  faSuitcase,\n  faPersonSkating,\n  faSkating,\n  faFilterCircleDollar,\n  faFunnelDollar,\n  faCameraRetro,\n  faCircleArrowDown,\n  faArrowCircleDown,\n  faFileImport,\n  faArrowRightToFile,\n  faSquareArrowUpRight,\n  faExternalLinkSquare,\n  faBoxOpen,\n  faScroll,\n  faSpa,\n  faLocationPinLock,\n  faPause,\n  faHillAvalanche,\n  faTemperatureEmpty,\n  faTemperature0,\n  faThermometer0,\n  faThermometerEmpty,\n  faBomb,\n  faRegistered,\n  faAddressCard,\n  faContactCard,\n  faVcard,\n  faScaleUnbalancedFlip,\n  faBalanceScaleRight,\n  faSubscript,\n  faDiamondTurnRight,\n  faDirections,\n  faBurst,\n  faHouseLaptop,\n  faLaptopHouse,\n  faFaceTired,\n  faTired,\n  faMoneyBills,\n  faSmog,\n  faCrutch,\n  faFontAwesome,\n  faFontAwesomeFlag,\n  faFontAwesomeLogoFull,\n  faCloudArrowUp,\n  faCloudUpload,\n  faCloudUploadAlt,\n  faPalette,\n  faArrowsTurnRight,\n  faVest,\n  faFerry,\n  faArrowsDownToPeople,\n  faSeedling,\n  faSprout,\n  faLeftRight,\n  faArrowsAltH,\n  faBoxesPacking,\n  faCircleArrowLeft,\n  faArrowCircleLeft,\n  faGroupArrowsRotate,\n  faBowlFood,\n  faCandyCane,\n  faArrowDownWideShort,\n  faSortAmountAsc,\n  faSortAmountDown,\n  faCloudBolt,\n  faThunderstorm,\n  faTextSlash,\n  faRemoveFormat,\n  faFaceSmileWink,\n  faSmileWink,\n  faFileWord,\n  faFilePowerpoint,\n  faArrowsLeftRight,\n  faArrowsH,\n  faHouseLock,\n  faCloudArrowDown,\n  faCloudDownload,\n  faCloudDownloadAlt,\n  faChildren,\n  faChalkboard,\n  faBlackboard,\n  faUserLargeSlash,\n  faUserAltSlash,\n  faEnvelopeOpen,\n  faHandshakeSimpleSlash,\n  faHandshakeAltSlash,\n  faMattressPillow,\n  faGuaraniSign,\n  faArrowsRotate,\n  faRefresh,\n  faSync,\n  faFireExtinguisher,\n  faCruzeiroSign,\n  faGreaterThanEqual,\n  faShieldHalved,\n  faShieldAlt,\n  faBookAtlas,\n  faAtlas,\n  faVirus,\n  faEnvelopeCircleCheck,\n  faLayerGroup,\n  faArrowsToDot,\n  faArchway,\n  faHeartCircleCheck,\n  faHouseChimneyCrack,\n  faHouseDamage,\n  faFileZipper,\n  faFileArchive,\n  faSquare,\n  faMartiniGlassEmpty,\n  faGlassMartini,\n  faCouch,\n  faCediSign,\n  faItalic,\n  faTableCellsColumnLock,\n  faChurch,\n  faCommentsDollar,\n  faDemocrat,\n  faZ,\n  faPersonSkiing,\n  faSkiing,\n  faRoadLock,\n  faA,\n  faTemperatureArrowDown,\n  faTemperatureDown,\n  faFeatherPointed,\n  faFeatherAlt,\n  faP,\n  faSnowflake,\n  faNewspaper,\n  faRectangleAd,\n  faAd,\n  faCircleArrowRight,\n  faArrowCircleRight,\n  faFilterCircleXmark,\n  faLocust,\n  faSort,\n  faUnsorted,\n  faListOl,\n  faList12,\n  faListNumeric,\n  faPersonDressBurst,\n  faMoneyCheckDollar,\n  faMoneyCheckAlt,\n  faVectorSquare,\n  faBreadSlice,\n  faLanguage,\n  faFaceKissWinkHeart,\n  faKissWinkHeart,\n  faFilter,\n  faQuestion,\n  faFileSignature,\n  faUpDownLeftRight,\n  faArrowsAlt,\n  faHouseChimneyUser,\n  faHandHoldingHeart,\n  faPuzzlePiece,\n  faMoneyCheck,\n  faStarHalfStroke,\n  faStarHalfAlt,\n  faCode,\n  faWhiskeyGlass,\n  faGlassWhiskey,\n  faBuildingCircleExclamation,\n  faMagnifyingGlassChart,\n  faArrowUpRightFromSquare,\n  faExternalLink,\n  faCubesStacked,\n  faWonSign,\n  faKrw,\n  faWon,\n  faVirusCovid,\n  faAustralSign,\n  faF,\n  faLeaf,\n  faRoad,\n  faTaxi,\n  faCab,\n  faPersonCirclePlus,\n  faChartPie,\n  faPieChart,\n  faBoltLightning,\n  faSackXmark,\n  faFileExcel,\n  faFileContract,\n  faFishFins,\n  faBuildingFlag,\n  faFaceGrinBeam,\n  faGrinBeam,\n  faObjectUngroup,\n  faPoop,\n  faLocationPin,\n  faMapMarker,\n  faKaaba,\n  faToiletPaper,\n  faHelmetSafety,\n  faHardHat,\n  faHatHard,\n  faEject,\n  faCircleRight,\n  faArrowAltCircleRight,\n  faPlaneCircleCheck,\n  faFaceRollingEyes,\n  faMehRollingEyes,\n  faObjectGroup,\n  faChartLine,\n  faLineChart,\n  faMaskVentilator,\n  faArrowRight,\n  faSignsPost,\n  faMapSigns,\n  faCashRegister,\n  faPersonCircleQuestion,\n  faH,\n  faTarp,\n  faScrewdriverWrench,\n  faTools,\n  faArrowsToEye,\n  faPlugCircleBolt,\n  faHeart,\n  faMarsAndVenus,\n  faHouseUser,\n  faHomeUser,\n  faDumpsterFire,\n  faHouseCrack,\n  faMartiniGlassCitrus,\n  faCocktail,\n  faFaceSurprise,\n  faSurprise,\n  faBottleWater,\n  faCirclePause,\n  faPauseCircle,\n  faToiletPaperSlash,\n  faAppleWhole,\n  faAppleAlt,\n  faKitchenSet,\n  faR,\n  faTemperatureQuarter,\n  faTemperature1,\n  faThermometer1,\n  faThermometerQuarter,\n  faCube,\n  faBitcoinSign,\n  faShieldDog,\n  faSolarPanel,\n  faLockOpen,\n  faElevator,\n  faMoneyBillTransfer,\n  faMoneyBillTrendUp,\n  faHouseFloodWaterCircleArrowRight,\n  faSquarePollHorizontal,\n  faPollH,\n  faCircle,\n  faBackwardFast,\n  faFastBackward,\n  faRecycle,\n  faUserAstronaut,\n  faPlaneSlash,\n  faTrademark,\n  faBasketball,\n  faBasketballBall,\n  faSatelliteDish,\n  faCircleUp,\n  faArrowAltCircleUp,\n  faMobileScreenButton,\n  faMobileAlt,\n  faVolumeHigh,\n  faVolumeUp,\n  faUsersRays,\n  faWallet,\n  faClipboardCheck,\n  faFileAudio,\n  faBurger,\n  faHamburger,\n  faWrench,\n  faBugs,\n  faRupeeSign,\n  faRupee,\n  faFileImage,\n  faCircleQuestion,\n  faQuestionCircle,\n  faPlaneDeparture,\n  faHandshakeSlash,\n  faBookBookmark,\n  faCodeBranch,\n  faHatCowboy,\n  faBridge,\n  faPhoneFlip,\n  faPhoneAlt,\n  faTruckFront,\n  faCat,\n  faAnchorCircleExclamation,\n  faTruckField,\n  faRoute,\n  faClipboardQuestion,\n  faPanorama,\n  faCommentMedical,\n  faTeethOpen,\n  faFileCircleMinus,\n  faTags,\n  faWineGlass,\n  faForwardFast,\n  faFastForward,\n  faFaceMehBlank,\n  faMehBlank,\n  faSquareParking,\n  faParking,\n  faHouseSignal,\n  faBarsProgress,\n  faTasksAlt,\n  faFaucetDrip,\n  faCartFlatbed,\n  faDollyFlatbed,\n  faBanSmoking,\n  faSmokingBan,\n  faTerminal,\n  faMobileButton,\n  faHouseMedicalFlag,\n  faBasketShopping,\n  faShoppingBasket,\n  faTape,\n  faBusSimple,\n  faBusAlt,\n  faEye,\n  faFaceSadCry,\n  faSadCry,\n  faAudioDescription,\n  faPersonMilitaryToPerson,\n  faFileShield,\n  faUserSlash,\n  faPen,\n  faTowerObservation,\n  faFileCode,\n  faSignal,\n  faSignal5,\n  faSignalPerfect,\n  faBus,\n  faHeartCircleXmark,\n  faHouseChimney,\n  faHomeLg,\n  faWindowMaximize,\n  faFaceFrown,\n  faFrown,\n  faPrescription,\n  faShop,\n  faStoreAlt,\n  faFloppyDisk,\n  faSave,\n  faVihara,\n  faScaleUnbalanced,\n  faBalanceScaleLeft,\n  faSortUp,\n  faSortAsc,\n  faCommentDots,\n  faCommenting,\n  faPlantWilt,\n  faDiamond,\n  faFaceGrinSquint,\n  faGrinSquint,\n  faHandHoldingDollar,\n  faHandHoldingUsd,\n  faChartDiagram,\n  faBacterium,\n  faHandPointer,\n  faDrumSteelpan,\n  faHandScissors,\n  faHandsPraying,\n  faPrayingHands,\n  faArrowRotateRight,\n  faArrowRightRotate,\n  faArrowRotateForward,\n  faRedo,\n  faWebAwesome,\n  faBiohazard,\n  faLocationCrosshairs,\n  faLocation,\n  faMarsDouble,\n  faChildDress,\n  faUsersBetweenLines,\n  faLungsVirus,\n  faFaceGrinTears,\n  faGrinTears,\n  faPhone,\n  faCalendarXmark,\n  faCalendarTimes,\n  faChildReaching,\n  faHeadSideVirus,\n  faUserGear,\n  faUserCog,\n  faArrowUp19,\n  faSortNumericUp,\n  faDoorClosed,\n  faShieldVirus,\n  faDiceSix,\n  faMosquitoNet,\n  faFileFragment,\n  faBridgeWater,\n  faPersonBooth,\n  faTextWidth,\n  faHatWizard,\n  faPenFancy,\n  faPersonDigging,\n  faDigging,\n  faTrash,\n  faGaugeSimple,\n  faGaugeSimpleMed,\n  faTachometerAverage,\n  faBookMedical,\n  faPoo,\n  faQuoteRight,\n  faQuoteRightAlt,\n  faShirt,\n  faTShirt,\n  faTshirt,\n  faCubes,\n  faDivide,\n  faTengeSign,\n  faTenge,\n  faHeadphones,\n  faHandsHolding,\n  faHandsClapping,\n  faRepublican,\n  faArrowLeft,\n  faPersonCircleXmark,\n  faRuler,\n  faAlignLeft,\n  faDiceD6,\n  faRestroom,\n  faJ,\n  faUsersViewfinder,\n  faFileVideo,\n  faUpRightFromSquare,\n  faExternalLinkAlt,\n  faTableCells,\n  faTh,\n  faFilePdf,\n  faBookBible,\n  faBible,\n  faO,\n  faSuitcaseMedical,\n  faMedkit,\n  faUserSecret,\n  faOtter,\n  faPersonDress,\n  faFemale,\n  faCommentDollar,\n  faBusinessTime,\n  faBriefcaseClock,\n  faTableCellsLarge,\n  faThLarge,\n  faBookTanakh,\n  faTanakh,\n  faPhoneVolume,\n  faVolumeControlPhone,\n  faHatCowboySide,\n  faClipboardUser,\n  faChild,\n  faLiraSign,\n  faSatellite,\n  faPlaneLock,\n  faTag,\n  faComment,\n  faCakeCandles,\n  faBirthdayCake,\n  faCake,\n  faEnvelope,\n  faAnglesUp,\n  faAngleDoubleUp,\n  faPaperclip,\n  faArrowRightToCity,\n  faRibbon,\n  faLungs,\n  faArrowUp91,\n  faSortNumericUpAlt,\n  faLitecoinSign,\n  faBorderNone,\n  faCircleNodes,\n  faParachuteBox,\n  faIndent,\n  faTruckFieldUn,\n  faHourglass,\n  faHourglassEmpty,\n  faMountain,\n  faUserDoctor,\n  faUserMd,\n  faCircleInfo,\n  faInfoCircle,\n  faCloudMeatball,\n  faCamera,\n  faCameraAlt,\n  faSquareVirus,\n  faMeteor,\n  faCarOn,\n  faSleigh,\n  faArrowDown19,\n  faSortNumericAsc,\n  faSortNumericDown,\n  faHandHoldingDroplet,\n  faHandHoldingWater,\n  faWater,\n  faCalendarCheck,\n  faBraille,\n  faPrescriptionBottleMedical,\n  faPrescriptionBottleAlt,\n  faLandmark,\n  faTruck,\n  faCrosshairs,\n  faPersonCane,\n  faTent,\n  faVestPatches,\n  faCheckDouble,\n  faArrowDownAZ,\n  faSortAlphaAsc,\n  faSortAlphaDown,\n  faMoneyBillWheat,\n  faCookie,\n  faArrowRotateLeft,\n  faArrowLeftRotate,\n  faArrowRotateBack,\n  faArrowRotateBackward,\n  faUndo,\n  faHardDrive,\n  faHdd,\n  faFaceGrinSquintTears,\n  faGrinSquintTears,\n  faDumbbell,\n  faRectangleList,\n  faListAlt,\n  faTarpDroplet,\n  faHouseMedicalCircleCheck,\n  faPersonSkiingNordic,\n  faSkiingNordic,\n  faCalendarPlus,\n  faPlaneArrival,\n  faCircleLeft,\n  faArrowAltCircleLeft,\n  faTrainSubway,\n  faSubway,\n  faChartGantt,\n  faIndianRupeeSign,\n  faIndianRupee,\n  faInr,\n  faCropSimple,\n  faCropAlt,\n  faMoneyBill1,\n  faMoneyBillAlt,\n  faLeftLong,\n  faLongArrowAltLeft,\n  faDna,\n  faVirusSlash,\n  faMinus,\n  faSubtract,\n  faChess,\n  faArrowLeftLong,\n  faLongArrowLeft,\n  faPlugCircleCheck,\n  faStreetView,\n  faFrancSign,\n  faVolumeOff,\n  faHandsAslInterpreting,\n  faAmericanSignLanguageInterpreting,\n  faAslInterpreting,\n  faHandsAmericanSignLanguageInterpreting,\n  faGear,\n  faCog,\n  faDropletSlash,\n  faTintSlash,\n  faMosque,\n  faMosquito,\n  faStarOfDavid,\n  faPersonMilitaryRifle,\n  faCartShopping,\n  faShoppingCart,\n  faVials,\n  faPlugCirclePlus,\n  faPlaceOfWorship,\n  faGripVertical,\n  faHexagonNodes,\n  faArrowTurnUp,\n  faLevelUp,\n  faU,\n  faSquareRootVariable,\n  faSquareRootAlt,\n  faClock,\n  faClockFour,\n  faBackwardStep,\n  faStepBackward,\n  faPallet,\n  faFaucet,\n  faBaseballBatBall,\n  faS,\n  faTimeline,\n  faKeyboard,\n  faCaretDown,\n  faHouseChimneyMedical,\n  faClinicMedical,\n  faTemperatureThreeQuarters,\n  faTemperature3,\n  faThermometer3,\n  faThermometerThreeQuarters,\n  faMobileScreen,\n  faMobileAndroidAlt,\n  faPlaneUp,\n  faPiggyBank,\n  faBatteryHalf,\n  faBattery3,\n  faMountainCity,\n  faCoins,\n  faKhanda,\n  faSliders,\n  faSlidersH,\n  faFolderTree,\n  faNetworkWired,\n  faMapPin,\n  faHamsa,\n  faCentSign,\n  faFlask,\n  faPersonPregnant,\n  faWandSparkles,\n  faEllipsisVertical,\n  faEllipsisV,\n  faTicket,\n  faPowerOff,\n  faRightLong,\n  faLongArrowAltRight,\n  faFlagUsa,\n  faLaptopFile,\n  faTty,\n  faTeletype,\n  faDiagramNext,\n  faPersonRifle,\n  faHouseMedicalCircleExclamation,\n  faClosedCaptioning,\n  faPersonHiking,\n  faHiking,\n  faVenusDouble,\n  faImages,\n  faCalculator,\n  faPeoplePulling,\n  faN,\n  faCableCar,\n  faTram,\n  faCloudRain,\n  faBuildingCircleXmark,\n  faShip,\n  faArrowsDownToLine,\n  faDownload,\n  faFaceGrin,\n  faGrin,\n  faDeleteLeft,\n  faBackspace,\n  faEyeDropper,\n  faEyeDropperEmpty,\n  faEyedropper,\n  faFileCircleCheck,\n  faForward,\n  faMobile,\n  faMobileAndroid,\n  faMobilePhone,\n  faFaceMeh,\n  faMeh,\n  faAlignCenter,\n  faBookSkull,\n  faBookDead,\n  faIdCard,\n  faDriversLicense,\n  faOutdent,\n  faDedent,\n  faHeartCircleExclamation,\n  faHouse,\n  faHome,\n  faHomeAlt,\n  faHomeLgAlt,\n  faCalendarWeek,\n  faLaptopMedical,\n  faB,\n  faFileMedical,\n  faDiceOne,\n  faKiwiBird,\n  faArrowRightArrowLeft,\n  faExchange,\n  faRotateRight,\n  faRedoAlt,\n  faRotateForward,\n  faUtensils,\n  faCutlery,\n  faArrowUpWideShort,\n  faSortAmountUp,\n  faMillSign,\n  faBowlRice,\n  faSkull,\n  faTowerBroadcast,\n  faBroadcastTower,\n  faTruckPickup,\n  faUpLong,\n  faLongArrowAltUp,\n  faStop,\n  faCodeMerge,\n  faUpload,\n  faHurricane,\n  faMound,\n  faToiletPortable,\n  faCompactDisc,\n  faFileArrowDown,\n  faFileDownload,\n  faCaravan,\n  faShieldCat,\n  faBolt,\n  faZap,\n  faGlassWater,\n  faOilWell,\n  faVault,\n  faMars,\n  faToilet,\n  faPlaneCircleXmark,\n  faYenSign,\n  faCny,\n  faJpy,\n  faRmb,\n  faYen,\n  faRubleSign,\n  faRouble,\n  faRub,\n  faRuble,\n  faSun,\n  faGuitar,\n  faFaceLaughWink,\n  faLaughWink,\n  faHorseHead,\n  faBoreHole,\n  faIndustry,\n  faCircleDown,\n  faArrowAltCircleDown,\n  faArrowsTurnToDots,\n  faFlorinSign,\n  faArrowDownShortWide,\n  faSortAmountDesc,\n  faSortAmountDownAlt,\n  faLessThan,\n  faAngleDown,\n  faCarTunnel,\n  faHeadSideCough,\n  faGripLines,\n  faThumbsDown,\n  faUserLock,\n  faArrowRightLong,\n  faLongArrowRight,\n  faAnchorCircleXmark,\n  faEllipsis,\n  faEllipsisH,\n  faChessPawn,\n  faKitMedical,\n  faFirstAid,\n  faPersonThroughWindow,\n  faToolbox,\n  faHandsHoldingCircle,\n  faBug,\n  faCreditCard,\n  faCreditCardAlt,\n  faCar,\n  faAutomobile,\n  faHandHoldingHand,\n  faBookOpenReader,\n  faBookReader,\n  faMountainSun,\n  faArrowsLeftRightToLine,\n  faDiceD20,\n  faTruckDroplet,\n  faFileCircleXmark,\n  faTemperatureArrowUp,\n  faTemperatureUp,\n  faMedal,\n  faBed,\n  faSquareH,\n  faHSquare,\n  faPodcast,\n  faTemperatureFull,\n  faTemperature4,\n  faThermometer4,\n  faThermometerFull,\n  faBell,\n  faSuperscript,\n  faPlugCircleXmark,\n  faStarOfLife,\n  faPhoneSlash,\n  faPaintRoller,\n  faHandshakeAngle,\n  faHandsHelping,\n  faLocationDot,\n  faMapMarkerAlt,\n  faFile,\n  faGreaterThan,\n  faPersonSwimming,\n  faSwimmer,\n  faArrowDown,\n  faDroplet,\n  faTint,\n  faEraser,\n  faEarthAmericas,\n  faEarth,\n  faEarthAmerica,\n  faGlobeAmericas,\n  faPersonBurst,\n  faDove,\n  faBatteryEmpty,\n  faBattery0,\n  faSocks,\n  faInbox,\n  faSection,\n  faGaugeHigh,\n  faTachometerAlt,\n  faTachometerAltFast,\n  faEnvelopeOpenText,\n  faHospital,\n  faHospitalAlt,\n  faHospitalWide,\n  faWineBottle,\n  faChessRook,\n  faBarsStaggered,\n  faReorder,\n  faStream,\n  faDharmachakra,\n  faHotdog,\n  faPersonWalkingWithCane,\n  faBlind,\n  faDrum,\n  faIceCream,\n  faHeartCircleBolt,\n  faFax,\n  faParagraph,\n  faCheckToSlot,\n  faVoteYea,\n  faStarHalf,\n  faBoxesStacked,\n  faBoxes,\n  faBoxesAlt,\n  faLink,\n  faChain,\n  faEarListen,\n  faAssistiveListeningSystems,\n  faTreeCity,\n  faPlay,\n  faFont,\n  faTableCellsRowLock,\n  faRupiahSign,\n  faMagnifyingGlass,\n  faSearch,\n  faTableTennisPaddleBall,\n  faPingPongPaddleBall,\n  faTableTennis,\n  faPersonDotsFromLine,\n  faDiagnoses,\n  faTrashCanArrowUp,\n  faTrashRestoreAlt,\n  faNairaSign,\n  faCartArrowDown,\n  faWalkieTalkie,\n  faFilePen,\n  faFileEdit,\n  faReceipt,\n  faSquarePen,\n  faPenSquare,\n  faPencilSquare,\n  faSuitcaseRolling,\n  faPersonCircleExclamation,\n  faChevronDown,\n  faBatteryFull,\n  faBattery,\n  faBattery5,\n  faSkullCrossbones,\n  faCodeCompare,\n  faListUl,\n  faListDots,\n  faSchoolLock,\n  faTowerCell,\n  faDownLong,\n  faLongArrowAltDown,\n  faRankingStar,\n  faChessKing,\n  faPersonHarassing,\n  faBrazilianRealSign,\n  faLandmarkDome,\n  faLandmarkAlt,\n  faArrowUp,\n  faTv,\n  faTelevision,\n  faTvAlt,\n  faShrimp,\n  faListCheck,\n  faTasks,\n  faJugDetergent,\n  faCircleUser,\n  faUserCircle,\n  faUserShield,\n  faWind,\n  faCarBurst,\n  faCarCrash,\n  faY,\n  faPersonSnowboarding,\n  faSnowboarding,\n  faTruckFast,\n  faShippingFast,\n  faFish,\n  faUserGraduate,\n  faCircleHalfStroke,\n  faAdjust,\n  faClapperboard,\n  faCircleRadiation,\n  faRadiationAlt,\n  faBaseball,\n  faBaseballBall,\n  faJetFighterUp,\n  faDiagramProject,\n  faProjectDiagram,\n  faCopy,\n  faVolumeXmark,\n  faVolumeMute,\n  faVolumeTimes,\n  faHandSparkles,\n  faGrip,\n  faGripHorizontal,\n  faShareFromSquare,\n  faShareSquare,\n  faChildCombatant,\n  faChildRifle,\n  faGun,\n  faSquarePhone,\n  faPhoneSquare,\n  faPlus,\n  faAdd,\n  faExpand,\n  faComputer,\n  faXmark,\n  faClose,\n  faMultiply,\n  faRemove,\n  faTimes,\n  faArrowsUpDownLeftRight,\n  faArrows,\n  faChalkboardUser,\n  faChalkboardTeacher,\n  faPesoSign,\n  faBuildingShield,\n  faBaby,\n  faUsersLine,\n  faQuoteLeft,\n  faQuoteLeftAlt,\n  faTractor,\n  faTrashArrowUp,\n  faTrashRestore,\n  faArrowDownUpLock,\n  faLinesLeaning,\n  faRulerCombined,\n  faCopyright,\n  faEquals,\n  faBlender,\n  faTeeth,\n  faShekelSign,\n  faIls,\n  faShekel,\n  faSheqel,\n  faSheqelSign,\n  faMap,\n  faRocket,\n  faPhotoFilm,\n  faPhotoVideo,\n  faFolderMinus,\n  faHexagonNodesBolt,\n  faStore,\n  faArrowTrendUp,\n  faPlugCircleMinus,\n  faSignHanging,\n  faSign,\n  faBezierCurve,\n  faBellSlash,\n  faTablet,\n  faTabletAndroid,\n  faSchoolFlag,\n  faFill,\n  faAngleUp,\n  faDrumstickBite,\n  faHollyBerry,\n  faChevronLeft,\n  faBacteria,\n  faHandLizard,\n  faNotdef,\n  faDisease,\n  faBriefcaseMedical,\n  faGenderless,\n  faChevronRight,\n  faRetweet,\n  faCarRear,\n  faCarAlt,\n  faPumpSoap,\n  faVideoSlash,\n  faBatteryQuarter,\n  faBattery2,\n  faRadio,\n  faBabyCarriage,\n  faCarriageBaby,\n  faTrafficLight,\n  faThermometer,\n  faVrCardboard,\n  faHandMiddleFinger,\n  faPercent,\n  faPercentage,\n  faTruckMoving,\n  faGlassWaterDroplet,\n  faDisplay,\n  faFaceSmile,\n  faSmile,\n  faThumbtack,\n  faThumbTack,\n  faTrophy,\n  faPersonPraying,\n  faPray,\n  faHammer,\n  faHandPeace,\n  faRotate,\n  faSyncAlt,\n  faSpinner,\n  faRobot,\n  faPeace,\n  faGears,\n  faCogs,\n  faWarehouse,\n  faArrowUpRightDots,\n  faSplotch,\n  faFaceGrinHearts,\n  faGrinHearts,\n  faDiceFour,\n  faSimCard,\n  faTransgender,\n  faTransgenderAlt,\n  faMercury,\n  faArrowTurnDown,\n  faLevelDown,\n  faPersonFallingBurst,\n  faAward,\n  faTicketSimple,\n  faTicketAlt,\n  faBuilding,\n  faAnglesLeft,\n  faAngleDoubleLeft,\n  faQrcode,\n  faClockRotateLeft,\n  faHistory,\n  faFaceGrinBeamSweat,\n  faGrinBeamSweat,\n  faFileExport,\n  faArrowRightFromFile,\n  faShield,\n  faShieldBlank,\n  faArrowUpShortWide,\n  faSortAmountUpAlt,\n  faCommentNodes,\n  faHouseMedical,\n  faGolfBallTee,\n  faGolfBall,\n  faCircleChevronLeft,\n  faChevronCircleLeft,\n  faHouseChimneyWindow,\n  faPenNib,\n  faTentArrowTurnLeft,\n  faTents,\n  faWandMagic,\n  faMagic,\n  faDog,\n  faCarrot,\n  faMoon,\n  faWineGlassEmpty,\n  faWineGlassAlt,\n  faCheese,\n  faYinYang,\n  faMusic,\n  faCodeCommit,\n  faTemperatureLow,\n  faPersonBiking,\n  faBiking,\n  faBroom,\n  faShieldHeart,\n  faGopuram,\n  faEarthOceania,\n  faGlobeOceania,\n  faSquareXmark,\n  faTimesSquare,\n  faXmarkSquare,\n  faHashtag,\n  faUpRightAndDownLeftFromCenter,\n  faExpandAlt,\n  faOilCan,\n  faT,\n  faHippo,\n  faChartColumn,\n  faInfinity,\n  faVialCircleCheck,\n  faPersonArrowDownToLine,\n  faVoicemail,\n  faFan,\n  faPersonWalkingLuggage,\n  faUpDown,\n  faArrowsAltV,\n  faCloudMoonRain,\n  faCalendar,\n  faTrailer,\n  faBahai,\n  faHaykal,\n  faSdCard,\n  faDragon,\n  faShoePrints,\n  faCirclePlus,\n  faPlusCircle,\n  faFaceGrinTongueWink,\n  faGrinTongueWink,\n  faHandHolding,\n  faPlugCircleExclamation,\n  faLinkSlash,\n  faChainBroken,\n  faChainSlash,\n  faUnlink,\n  faClone,\n  faPersonWalkingArrowLoopLeft,\n  faArrowUpZA,\n  faSortAlphaUpAlt,\n  faFireFlameCurved,\n  faFireAlt,\n  faTornado,\n  faFileCirclePlus,\n  faBookQuran,\n  faQuran,\n  faAnchor,\n  faBorderAll,\n  faFaceAngry,\n  faAngry,\n  faCookieBite,\n  faArrowTrendDown,\n  faRss,\n  faFeed,\n  faDrawPolygon,\n  faScaleBalanced,\n  faBalanceScale,\n  faGaugeSimpleHigh,\n  faTachometer,\n  faTachometerFast,\n  faShower,\n  faDesktop,\n  faDesktopAlt,\n  faM,\n  faTableList,\n  faThList,\n  faCommentSms,\n  faSms,\n  faBook,\n  faUserPlus,\n  faCheck,\n  faBatteryThreeQuarters,\n  faBattery4,\n  faHouseCircleCheck,\n  faAngleLeft,\n  faDiagramSuccessor,\n  faTruckArrowRight,\n  faArrowsSplitUpAndLeft,\n  faHandFist,\n  faFistRaised,\n  faCloudMoon,\n  faBriefcase,\n  faPersonFalling,\n  faImagePortrait,\n  faPortrait,\n  faUserTag,\n  faRug,\n  faEarthEurope,\n  faGlobeEurope,\n  faCartFlatbedSuitcase,\n  faLuggageCart,\n  faRectangleXmark,\n  faRectangleTimes,\n  faTimesRectangle,\n  faWindowClose,\n  faBahtSign,\n  faBookOpen,\n  faBookJournalWhills,\n  faJournalWhills,\n  faHandcuffs,\n  faTriangleExclamation,\n  faExclamationTriangle,\n  faWarning,\n  faDatabase,\n  faShare,\n  faMailForward,\n  faBottleDroplet,\n  faMaskFace,\n  faHillRockslide,\n  faRightLeft,\n  faExchangeAlt,\n  faPaperPlane,\n  faRoadCircleExclamation,\n  faDungeon,\n  faAlignRight,\n  faMoneyBill1Wave,\n  faMoneyBillWaveAlt,\n  faLifeRing,\n  faHands,\n  faSignLanguage,\n  faSigning,\n  faCalendarDay,\n  faWaterLadder,\n  faLadderWater,\n  faSwimmingPool,\n  faArrowsUpDown,\n  faArrowsV,\n  faFaceGrimace,\n  faGrimace,\n  faWheelchairMove,\n  faWheelchairAlt,\n  faTurnDown,\n  faLevelDownAlt,\n  faPersonWalkingArrowRight,\n  faSquareEnvelope,\n  faEnvelopeSquare,\n  faDice,\n  faBowlingBall,\n  faBrain,\n  faBandage,\n  faBandAid,\n  faCalendarMinus,\n  faCircleXmark,\n  faTimesCircle,\n  faXmarkCircle,\n  faGifts,\n  faHotel,\n  faEarthAsia,\n  faGlobeAsia,\n  faIdCardClip,\n  faIdCardAlt,\n  faMagnifyingGlassPlus,\n  faSearchPlus,\n  faThumbsUp,\n  faUserClock,\n  faHandDots,\n  faAllergies,\n  faFileInvoice,\n  faWindowMinimize,\n  faMugSaucer,\n  faCoffee,\n  faBrush,\n  faFileHalfDashed,\n  faMask,\n  faMagnifyingGlassMinus,\n  faSearchMinus,\n  faRulerVertical,\n  faUserLarge,\n  faUserAlt,\n  faTrainTram,\n  faUserNurse,\n  faSyringe,\n  faCloudSun,\n  faStopwatch20,\n  faSquareFull,\n  faMagnet,\n  faJar,\n  faNoteSticky,\n  faStickyNote,\n  faBugSlash,\n  faArrowUpFromWaterPump,\n  faBone,\n  faTableCellsRowUnlock,\n  faUserInjured,\n  faFaceSadTear,\n  faSadTear,\n  faPlane,\n  faTentArrowsDown,\n  faExclamation,\n  faArrowsSpin,\n  faPrint,\n  faTurkishLiraSign,\n  faTry,\n  faTurkishLira,\n  faDollarSign,\n  faDollar,\n  faUsd,\n  faX,\n  faMagnifyingGlassDollar,\n  faSearchDollar,\n  faUsersGear,\n  faUsersCog,\n  faPersonMilitaryPointing,\n  faBuildingColumns,\n  faBank,\n  faInstitution,\n  faMuseum,\n  faUniversity,\n  faUmbrella,\n  faTrowel,\n  faD,\n  faStapler,\n  faMasksTheater,\n  faTheaterMasks,\n  faKipSign,\n  faHandPointLeft,\n  faHandshakeSimple,\n  faHandshakeAlt,\n  faJetFighter,\n  faFighterJet,\n  faSquareShareNodes,\n  faShareAltSquare,\n  faBarcode,\n  faPlusMinus,\n  faVideo,\n  faVideoCamera,\n  faGraduationCap,\n  faMortarBoard,\n  faHandHoldingMedical,\n  faPersonCircleCheck,\n  faTurnUp,\n  faLevelUpAlt\n};\n\nexport { icons as fas, prefix, fa0, fa1, fa2, fa3, fa4, fa5, fa6, fa7, fa8, fa9, faFillDrip, faArrowsToCircle, faCircleChevronRight, faChevronCircleRight, faAt, faTrashCan, faTrashAlt, faTextHeight, faUserXmark, faUserTimes, faStethoscope, faMessage, faCommentAlt, faInfo, faDownLeftAndUpRightToCenter, faCompressAlt, faExplosion, faFileLines, faFileAlt, faFileText, faWaveSquare, faRing, faBuildingUn, faDiceThree, faCalendarDays, faCalendarAlt, faAnchorCircleCheck, faBuildingCircleArrowRight, faVolleyball, faVolleyballBall, faArrowsUpToLine, faSortDown, faSortDesc, faCircleMinus, faMinusCircle, faDoorOpen, faRightFromBracket, faSignOutAlt, faAtom, faSoap, faIcons, faHeartMusicCameraBolt, faMicrophoneLinesSlash, faMicrophoneAltSlash, faBridgeCircleCheck, faPumpMedical, faFingerprint, faHandPointRight, faMagnifyingGlassLocation, faSearchLocation, faForwardStep, faStepForward, faFaceSmileBeam, faSmileBeam, faFlagCheckered, faFootball, faFootballBall, faSchoolCircleExclamation, faCrop, faAnglesDown, faAngleDoubleDown, faUsersRectangle, faPeopleRoof, faPeopleLine, faBeerMugEmpty, faBeer, faDiagramPredecessor, faArrowUpLong, faLongArrowUp, faFireFlameSimple, faBurn, faPerson, faMale, faLaptop, faFileCsv, faMenorah, faTruckPlane, faRecordVinyl, faFaceGrinStars, faGrinStars, faBong, faSpaghettiMonsterFlying, faPastafarianism, faArrowDownUpAcrossLine, faSpoon, faUtensilSpoon, faJarWheat, faEnvelopesBulk, faMailBulk, faFileCircleExclamation, faCircleH, faHospitalSymbol, faPager, faAddressBook, faContactBook, faStrikethrough, faK, faLandmarkFlag, faPencil, faPencilAlt, faBackward, faCaretRight, faComments, faPaste, faFileClipboard, faCodePullRequest, faClipboardList, faTruckRampBox, faTruckLoading, faUserCheck, faVialVirus, faSheetPlastic, faBlog, faUserNinja, faPersonArrowUpFromLine, faScrollTorah, faTorah, faBroomBall, faQuidditch, faQuidditchBroomBall, faToggleOff, faBoxArchive, faArchive, faPersonDrowning, faArrowDown91, faSortNumericDesc, faSortNumericDownAlt, faFaceGrinTongueSquint, faGrinTongueSquint, faSprayCan, faTruckMonster, faW, faEarthAfrica, faGlobeAfrica, faRainbow, faCircleNotch, faTabletScreenButton, faTabletAlt, faPaw, faCloud, faTrowelBricks, faFaceFlushed, faFlushed, faHospitalUser, faTentArrowLeftRight, faGavel, faLegal, faBinoculars, faMicrophoneSlash, faBoxTissue, faMotorcycle, faBellConcierge, faConciergeBell, faPenRuler, faPencilRuler, faPeopleArrows, faPeopleArrowsLeftRight, faMarsAndVenusBurst, faSquareCaretRight, faCaretSquareRight, faScissors, faCut, faSunPlantWilt, faToiletsPortable, faHockeyPuck, faTable, faMagnifyingGlassArrowRight, faTachographDigital, faDigitalTachograph, faUsersSlash, faClover, faReply, faMailReply, faStarAndCrescent, faHouseFire, faSquareMinus, faMinusSquare, faHelicopter, faCompass, faSquareCaretDown, faCaretSquareDown, faFileCircleQuestion, faLaptopCode, faSwatchbook, faPrescriptionBottle, faBars, faNavicon, faPeopleGroup, faHourglassEnd, faHourglass3, faHeartCrack, faHeartBroken, faSquareUpRight, faExternalLinkSquareAlt, faFaceKissBeam, faKissBeam, faFilm, faRulerHorizontal, faPeopleRobbery, faLightbulb, faCaretLeft, faCircleExclamation, faExclamationCircle, faSchoolCircleXmark, faArrowRightFromBracket, faSignOut, faCircleChevronDown, faChevronCircleDown, faUnlockKeyhole, faUnlockAlt, faCloudShowersHeavy, faHeadphonesSimple, faHeadphonesAlt, faSitemap, faCircleDollarToSlot, faDonate, faMemory, faRoadSpikes, faFireBurner, faFlag, faHanukiah, faFeather, faVolumeLow, faVolumeDown, faCommentSlash, faCloudSunRain, faCompress, faWheatAwn, faWheatAlt, faAnkh, faHandsHoldingChild, faAsterisk, faSquareCheck, faCheckSquare, faPesetaSign, faHeading, faHeader, faGhost, faList, faListSquares, faSquarePhoneFlip, faPhoneSquareAlt, faCartPlus, faGamepad, faCircleDot, faDotCircle, faFaceDizzy, faDizzy, faEgg, faHouseMedicalCircleXmark, faCampground, faFolderPlus, faFutbol, faFutbolBall, faSoccerBall, faPaintbrush, faPaintBrush, faLock, faGasPump, faHotTubPerson, faHotTub, faMapLocation, faMapMarked, faHouseFloodWater, faTree, faBridgeLock, faSackDollar, faPenToSquare, faEdit, faCarSide, faShareNodes, faShareAlt, faHeartCircleMinus, faHourglassHalf, faHourglass2, faMicroscope, faSink, faBagShopping, faShoppingBag, faArrowDownZA, faSortAlphaDesc, faSortAlphaDownAlt, faMitten, faPersonRays, faUsers, faEyeSlash, faFlaskVial, faHand, faHandPaper, faOm, faWorm, faHouseCircleXmark, faPlug, faChevronUp, faHandSpock, faStopwatch, faFaceKiss, faKiss, faBridgeCircleXmark, faFaceGrinTongue, faGrinTongue, faChessBishop, faFaceGrinWink, faGrinWink, faEarDeaf, faDeaf, faDeafness, faHardOfHearing, faRoadCircleCheck, faDiceFive, faSquareRss, faRssSquare, faLandMineOn, faICursor, faStamp, faStairs, faI, faHryvniaSign, faHryvnia, faPills, faFaceGrinWide, faGrinAlt, faTooth, faV, faBangladeshiTakaSign, faBicycle, faStaffSnake, faRodAsclepius, faRodSnake, faStaffAesculapius, faHeadSideCoughSlash, faTruckMedical, faAmbulance, faWheatAwnCircleExclamation, faSnowman, faMortarPestle, faRoadBarrier, faSchool, faIgloo, faJoint, faAngleRight, faHorse, faQ, faG, faNotesMedical, faTemperatureHalf, faTemperature2, faThermometer2, faThermometerHalf, faDongSign, faCapsules, faPooStorm, faPooBolt, faFaceFrownOpen, faFrownOpen, faHandPointUp, faMoneyBill, faBookmark, faAlignJustify, faUmbrellaBeach, faHelmetUn, faBullseye, faBacon, faHandPointDown, faArrowUpFromBracket, faFolder, faFolderBlank, faFileWaveform, faFileMedicalAlt, faRadiation, faChartSimple, faMarsStroke, faVial, faGauge, faDashboard, faGaugeMed, faTachometerAltAverage, faWandMagicSparkles, faMagicWandSparkles, faE, faPenClip, faPenAlt, faBridgeCircleExclamation, faUser, faSchoolCircleCheck, faDumpster, faVanShuttle, faShuttleVan, faBuildingUser, faSquareCaretLeft, faCaretSquareLeft, faHighlighter, faKey, faBullhorn, faGlobe, faSynagogue, faPersonHalfDress, faRoadBridge, faLocationArrow, faC, faTabletButton, faBuildingLock, faPizzaSlice, faMoneyBillWave, faChartArea, faAreaChart, faHouseFlag, faPersonCircleMinus, faBan, faCancel, faCameraRotate, faSprayCanSparkles, faAirFreshener, faStar, faRepeat, faCross, faBox, faVenusMars, faArrowPointer, faMousePointer, faMaximize, faExpandArrowsAlt, faChargingStation, faShapes, faTriangleCircleSquare, faShuffle, faRandom, faPersonRunning, faRunning, faMobileRetro, faGripLinesVertical, faSpider, faHandsBound, faFileInvoiceDollar, faPlaneCircleExclamation, faXRay, faSpellCheck, faSlash, faComputerMouse, faMouse, faArrowRightToBracket, faSignIn, faShopSlash, faStoreAltSlash, faServer, faVirusCovidSlash, faShopLock, faHourglassStart, faHourglass1, faBlenderPhone, faBuildingWheat, faPersonBreastfeeding, faRightToBracket, faSignInAlt, faVenus, faPassport, faThumbtackSlash, faThumbTackSlash, faHeartPulse, faHeartbeat, faPeopleCarryBox, faPeopleCarry, faTemperatureHigh, faMicrochip, faCrown, faWeightHanging, faXmarksLines, faFilePrescription, faWeightScale, faWeight, faUserGroup, faUserFriends, faArrowUpAZ, faSortAlphaUp, faChessKnight, faFaceLaughSquint, faLaughSquint, faWheelchair, faCircleArrowUp, faArrowCircleUp, faToggleOn, faPersonWalking, faWalking, faL, faFire, faBedPulse, faProcedures, faShuttleSpace, faSpaceShuttle, faFaceLaugh, faLaugh, faFolderOpen, faHeartCirclePlus, faCodeFork, faCity, faMicrophoneLines, faMicrophoneAlt, faPepperHot, faUnlock, faColonSign, faHeadset, faStoreSlash, faRoadCircleXmark, faUserMinus, faMarsStrokeUp, faMarsStrokeV, faChampagneGlasses, faGlassCheers, faClipboard, faHouseCircleExclamation, faFileArrowUp, faFileUpload, faWifi, faWifi3, faWifiStrong, faBath, faBathtub, faUnderline, faUserPen, faUserEdit, faSignature, faStroopwafel, faBold, faAnchorLock, faBuildingNgo, faManatSign, faNotEqual, faBorderTopLeft, faBorderStyle, faMapLocationDot, faMapMarkedAlt, faJedi, faSquarePollVertical, faPoll, faMugHot, faCarBattery, faBatteryCar, faGift, faDiceTwo, faChessQueen, faGlasses, faChessBoard, faBuildingCircleCheck, faPersonChalkboard, faMarsStrokeRight, faMarsStrokeH, faHandBackFist, faHandRock, faSquareCaretUp, faCaretSquareUp, faCloudShowersWater, faChartBar, faBarChart, faHandsBubbles, faHandsWash, faLessThanEqual, faTrain, faEyeLowVision, faLowVision, faCrow, faSailboat, faWindowRestore, faSquarePlus, faPlusSquare, faToriiGate, faFrog, faBucket, faImage, faMicrophone, faCow, faCaretUp, faScrewdriver, faFolderClosed, faHouseTsunami, faSquareNfi, faArrowUpFromGroundWater, faMartiniGlass, faGlassMartiniAlt, faSquareBinary, faRotateLeft, faRotateBack, faRotateBackward, faUndoAlt, faTableColumns, faColumns, faLemon, faHeadSideMask, faHandshake, faGem, faDolly, faDollyBox, faSmoking, faMinimize, faCompressArrowsAlt, faMonument, faSnowplow, faAnglesRight, faAngleDoubleRight, faCannabis, faCirclePlay, faPlayCircle, faTablets, faEthernet, faEuroSign, faEur, faEuro, faChair, faCircleCheck, faCheckCircle, faCircleStop, faStopCircle, faCompassDrafting, faDraftingCompass, faPlateWheat, faIcicles, faPersonShelter, faNeuter, faIdBadge, faMarker, faFaceLaughBeam, faLaughBeam, faHelicopterSymbol, faUniversalAccess, faCircleChevronUp, faChevronCircleUp, faLariSign, faVolcano, faPersonWalkingDashedLineArrowRight, faSterlingSign, faGbp, faPoundSign, faViruses, faSquarePersonConfined, faUserTie, faArrowDownLong, faLongArrowDown, faTentArrowDownToLine, faCertificate, faReplyAll, faMailReplyAll, faSuitcase, faPersonSkating, faSkating, faFilterCircleDollar, faFunnelDollar, faCameraRetro, faCircleArrowDown, faArrowCircleDown, faFileImport, faArrowRightToFile, faSquareArrowUpRight, faExternalLinkSquare, faBoxOpen, faScroll, faSpa, faLocationPinLock, faPause, faHillAvalanche, faTemperatureEmpty, faTemperature0, faThermometer0, faThermometerEmpty, faBomb, faRegistered, faAddressCard, faContactCard, faVcard, faScaleUnbalancedFlip, faBalanceScaleRight, faSubscript, faDiamondTurnRight, faDirections, faBurst, faHouseLaptop, faLaptopHouse, faFaceTired, faTired, faMoneyBills, faSmog, faCrutch, faFontAwesome, faFontAwesomeFlag, faFontAwesomeLogoFull, faCloudArrowUp, faCloudUpload, faCloudUploadAlt, faPalette, faArrowsTurnRight, faVest, faFerry, faArrowsDownToPeople, faSeedling, faSprout, faLeftRight, faArrowsAltH, faBoxesPacking, faCircleArrowLeft, faArrowCircleLeft, faGroupArrowsRotate, faBowlFood, faCandyCane, faArrowDownWideShort, faSortAmountAsc, faSortAmountDown, faCloudBolt, faThunderstorm, faTextSlash, faRemoveFormat, faFaceSmileWink, faSmileWink, faFileWord, faFilePowerpoint, faArrowsLeftRight, faArrowsH, faHouseLock, faCloudArrowDown, faCloudDownload, faCloudDownloadAlt, faChildren, faChalkboard, faBlackboard, faUserLargeSlash, faUserAltSlash, faEnvelopeOpen, faHandshakeSimpleSlash, faHandshakeAltSlash, faMattressPillow, faGuaraniSign, faArrowsRotate, faRefresh, faSync, faFireExtinguisher, faCruzeiroSign, faGreaterThanEqual, faShieldHalved, faShieldAlt, faBookAtlas, faAtlas, faVirus, faEnvelopeCircleCheck, faLayerGroup, faArrowsToDot, faArchway, faHeartCircleCheck, faHouseChimneyCrack, faHouseDamage, faFileZipper, faFileArchive, faSquare, faMartiniGlassEmpty, faGlassMartini, faCouch, faCediSign, faItalic, faTableCellsColumnLock, faChurch, faCommentsDollar, faDemocrat, faZ, faPersonSkiing, faSkiing, faRoadLock, faA, faTemperatureArrowDown, faTemperatureDown, faFeatherPointed, faFeatherAlt, faP, faSnowflake, faNewspaper, faRectangleAd, faAd, faCircleArrowRight, faArrowCircleRight, faFilterCircleXmark, faLocust, faSort, faUnsorted, faListOl, faList12, faListNumeric, faPersonDressBurst, faMoneyCheckDollar, faMoneyCheckAlt, faVectorSquare, faBreadSlice, faLanguage, faFaceKissWinkHeart, faKissWinkHeart, faFilter, faQuestion, faFileSignature, faUpDownLeftRight, faArrowsAlt, faHouseChimneyUser, faHandHoldingHeart, faPuzzlePiece, faMoneyCheck, faStarHalfStroke, faStarHalfAlt, faCode, faWhiskeyGlass, faGlassWhiskey, faBuildingCircleExclamation, faMagnifyingGlassChart, faArrowUpRightFromSquare, faExternalLink, faCubesStacked, faWonSign, faKrw, faWon, faVirusCovid, faAustralSign, faF, faLeaf, faRoad, faTaxi, faCab, faPersonCirclePlus, faChartPie, faPieChart, faBoltLightning, faSackXmark, faFileExcel, faFileContract, faFishFins, faBuildingFlag, faFaceGrinBeam, faGrinBeam, faObjectUngroup, faPoop, faLocationPin, faMapMarker, faKaaba, faToiletPaper, faHelmetSafety, faHardHat, faHatHard, faEject, faCircleRight, faArrowAltCircleRight, faPlaneCircleCheck, faFaceRollingEyes, faMehRollingEyes, faObjectGroup, faChartLine, faLineChart, faMaskVentilator, faArrowRight, faSignsPost, faMapSigns, faCashRegister, faPersonCircleQuestion, faH, faTarp, faScrewdriverWrench, faTools, faArrowsToEye, faPlugCircleBolt, faHeart, faMarsAndVenus, faHouseUser, faHomeUser, faDumpsterFire, faHouseCrack, faMartiniGlassCitrus, faCocktail, faFaceSurprise, faSurprise, faBottleWater, faCirclePause, faPauseCircle, faToiletPaperSlash, faAppleWhole, faAppleAlt, faKitchenSet, faR, faTemperatureQuarter, faTemperature1, faThermometer1, faThermometerQuarter, faCube, faBitcoinSign, faShieldDog, faSolarPanel, faLockOpen, faElevator, faMoneyBillTransfer, faMoneyBillTrendUp, faHouseFloodWaterCircleArrowRight, faSquarePollHorizontal, faPollH, faCircle, faBackwardFast, faFastBackward, faRecycle, faUserAstronaut, faPlaneSlash, faTrademark, faBasketball, faBasketballBall, faSatelliteDish, faCircleUp, faArrowAltCircleUp, faMobileScreenButton, faMobileAlt, faVolumeHigh, faVolumeUp, faUsersRays, faWallet, faClipboardCheck, faFileAudio, faBurger, faHamburger, faWrench, faBugs, faRupeeSign, faRupee, faFileImage, faCircleQuestion, faQuestionCircle, faPlaneDeparture, faHandshakeSlash, faBookBookmark, faCodeBranch, faHatCowboy, faBridge, faPhoneFlip, faPhoneAlt, faTruckFront, faCat, faAnchorCircleExclamation, faTruckField, faRoute, faClipboardQuestion, faPanorama, faCommentMedical, faTeethOpen, faFileCircleMinus, faTags, faWineGlass, faForwardFast, faFastForward, faFaceMehBlank, faMehBlank, faSquareParking, faParking, faHouseSignal, faBarsProgress, faTasksAlt, faFaucetDrip, faCartFlatbed, faDollyFlatbed, faBanSmoking, faSmokingBan, faTerminal, faMobileButton, faHouseMedicalFlag, faBasketShopping, faShoppingBasket, faTape, faBusSimple, faBusAlt, faEye, faFaceSadCry, faSadCry, faAudioDescription, faPersonMilitaryToPerson, faFileShield, faUserSlash, faPen, faTowerObservation, faFileCode, faSignal, faSignal5, faSignalPerfect, faBus, faHeartCircleXmark, faHouseChimney, faHomeLg, faWindowMaximize, faFaceFrown, faFrown, faPrescription, faShop, faStoreAlt, faFloppyDisk, faSave, faVihara, faScaleUnbalanced, faBalanceScaleLeft, faSortUp, faSortAsc, faCommentDots, faCommenting, faPlantWilt, faDiamond, faFaceGrinSquint, faGrinSquint, faHandHoldingDollar, faHandHoldingUsd, faChartDiagram, faBacterium, faHandPointer, faDrumSteelpan, faHandScissors, faHandsPraying, faPrayingHands, faArrowRotateRight, faArrowRightRotate, faArrowRotateForward, faRedo, faWebAwesome, faBiohazard, faLocationCrosshairs, faLocation, faMarsDouble, faChildDress, faUsersBetweenLines, faLungsVirus, faFaceGrinTears, faGrinTears, faPhone, faCalendarXmark, faCalendarTimes, faChildReaching, faHeadSideVirus, faUserGear, faUserCog, faArrowUp19, faSortNumericUp, faDoorClosed, faShieldVirus, faDiceSix, faMosquitoNet, faFileFragment, faBridgeWater, faPersonBooth, faTextWidth, faHatWizard, faPenFancy, faPersonDigging, faDigging, faTrash, faGaugeSimple, faGaugeSimpleMed, faTachometerAverage, faBookMedical, faPoo, faQuoteRight, faQuoteRightAlt, faShirt, faTShirt, faTshirt, faCubes, faDivide, faTengeSign, faTenge, faHeadphones, faHandsHolding, faHandsClapping, faRepublican, faArrowLeft, faPersonCircleXmark, faRuler, faAlignLeft, faDiceD6, faRestroom, faJ, faUsersViewfinder, faFileVideo, faUpRightFromSquare, faExternalLinkAlt, faTableCells, faTh, faFilePdf, faBookBible, faBible, faO, faSuitcaseMedical, faMedkit, faUserSecret, faOtter, faPersonDress, faFemale, faCommentDollar, faBusinessTime, faBriefcaseClock, faTableCellsLarge, faThLarge, faBookTanakh, faTanakh, faPhoneVolume, faVolumeControlPhone, faHatCowboySide, faClipboardUser, faChild, faLiraSign, faSatellite, faPlaneLock, faTag, faComment, faCakeCandles, faBirthdayCake, faCake, faEnvelope, faAnglesUp, faAngleDoubleUp, faPaperclip, faArrowRightToCity, faRibbon, faLungs, faArrowUp91, faSortNumericUpAlt, faLitecoinSign, faBorderNone, faCircleNodes, faParachuteBox, faIndent, faTruckFieldUn, faHourglass, faHourglassEmpty, faMountain, faUserDoctor, faUserMd, faCircleInfo, faInfoCircle, faCloudMeatball, faCamera, faCameraAlt, faSquareVirus, faMeteor, faCarOn, faSleigh, faArrowDown19, faSortNumericAsc, faSortNumericDown, faHandHoldingDroplet, faHandHoldingWater, faWater, faCalendarCheck, faBraille, faPrescriptionBottleMedical, faPrescriptionBottleAlt, faLandmark, faTruck, faCrosshairs, faPersonCane, faTent, faVestPatches, faCheckDouble, faArrowDownAZ, faSortAlphaAsc, faSortAlphaDown, faMoneyBillWheat, faCookie, faArrowRotateLeft, faArrowLeftRotate, faArrowRotateBack, faArrowRotateBackward, faUndo, faHardDrive, faHdd, faFaceGrinSquintTears, faGrinSquintTears, faDumbbell, faRectangleList, faListAlt, faTarpDroplet, faHouseMedicalCircleCheck, faPersonSkiingNordic, faSkiingNordic, faCalendarPlus, faPlaneArrival, faCircleLeft, faArrowAltCircleLeft, faTrainSubway, faSubway, faChartGantt, faIndianRupeeSign, faIndianRupee, faInr, faCropSimple, faCropAlt, faMoneyBill1, faMoneyBillAlt, faLeftLong, faLongArrowAltLeft, faDna, faVirusSlash, faMinus, faSubtract, faChess, faArrowLeftLong, faLongArrowLeft, faPlugCircleCheck, faStreetView, faFrancSign, faVolumeOff, faHandsAslInterpreting, faAmericanSignLanguageInterpreting, faAslInterpreting, faHandsAmericanSignLanguageInterpreting, faGear, faCog, faDropletSlash, faTintSlash, faMosque, faMosquito, faStarOfDavid, faPersonMilitaryRifle, faCartShopping, faShoppingCart, faVials, faPlugCirclePlus, faPlaceOfWorship, faGripVertical, faHexagonNodes, faArrowTurnUp, faLevelUp, faU, faSquareRootVariable, faSquareRootAlt, faClock, faClockFour, faBackwardStep, faStepBackward, faPallet, faFaucet, faBaseballBatBall, faS, faTimeline, faKeyboard, faCaretDown, faHouseChimneyMedical, faClinicMedical, faTemperatureThreeQuarters, faTemperature3, faThermometer3, faThermometerThreeQuarters, faMobileScreen, faMobileAndroidAlt, faPlaneUp, faPiggyBank, faBatteryHalf, faBattery3, faMountainCity, faCoins, faKhanda, faSliders, faSlidersH, faFolderTree, faNetworkWired, faMapPin, faHamsa, faCentSign, faFlask, faPersonPregnant, faWandSparkles, faEllipsisVertical, faEllipsisV, faTicket, faPowerOff, faRightLong, faLongArrowAltRight, faFlagUsa, faLaptopFile, faTty, faTeletype, faDiagramNext, faPersonRifle, faHouseMedicalCircleExclamation, faClosedCaptioning, faPersonHiking, faHiking, faVenusDouble, faImages, faCalculator, faPeoplePulling, faN, faCableCar, faTram, faCloudRain, faBuildingCircleXmark, faShip, faArrowsDownToLine, faDownload, faFaceGrin, faGrin, faDeleteLeft, faBackspace, faEyeDropper, faEyeDropperEmpty, faEyedropper, faFileCircleCheck, faForward, faMobile, faMobileAndroid, faMobilePhone, faFaceMeh, faMeh, faAlignCenter, faBookSkull, faBookDead, faIdCard, faDriversLicense, faOutdent, faDedent, faHeartCircleExclamation, faHouse, faHome, faHomeAlt, faHomeLgAlt, faCalendarWeek, faLaptopMedical, faB, faFileMedical, faDiceOne, faKiwiBird, faArrowRightArrowLeft, faExchange, faRotateRight, faRedoAlt, faRotateForward, faUtensils, faCutlery, faArrowUpWideShort, faSortAmountUp, faMillSign, faBowlRice, faSkull, faTowerBroadcast, faBroadcastTower, faTruckPickup, faUpLong, faLongArrowAltUp, faStop, faCodeMerge, faUpload, faHurricane, faMound, faToiletPortable, faCompactDisc, faFileArrowDown, faFileDownload, faCaravan, faShieldCat, faBolt, faZap, faGlassWater, faOilWell, faVault, faMars, faToilet, faPlaneCircleXmark, faYenSign, faCny, faJpy, faRmb, faYen, faRubleSign, faRouble, faRub, faRuble, faSun, faGuitar, faFaceLaughWink, faLaughWink, faHorseHead, faBoreHole, faIndustry, faCircleDown, faArrowAltCircleDown, faArrowsTurnToDots, faFlorinSign, faArrowDownShortWide, faSortAmountDesc, faSortAmountDownAlt, faLessThan, faAngleDown, faCarTunnel, faHeadSideCough, faGripLines, faThumbsDown, faUserLock, faArrowRightLong, faLongArrowRight, faAnchorCircleXmark, faEllipsis, faEllipsisH, faChessPawn, faKitMedical, faFirstAid, faPersonThroughWindow, faToolbox, faHandsHoldingCircle, faBug, faCreditCard, faCreditCardAlt, faCar, faAutomobile, faHandHoldingHand, faBookOpenReader, faBookReader, faMountainSun, faArrowsLeftRightToLine, faDiceD20, faTruckDroplet, faFileCircleXmark, faTemperatureArrowUp, faTemperatureUp, faMedal, faBed, faSquareH, faHSquare, faPodcast, faTemperatureFull, faTemperature4, faThermometer4, faThermometerFull, faBell, faSuperscript, faPlugCircleXmark, faStarOfLife, faPhoneSlash, faPaintRoller, faHandshakeAngle, faHandsHelping, faLocationDot, faMapMarkerAlt, faFile, faGreaterThan, faPersonSwimming, faSwimmer, faArrowDown, faDroplet, faTint, faEraser, faEarthAmericas, faEarth, faEarthAmerica, faGlobeAmericas, faPersonBurst, faDove, faBatteryEmpty, faBattery0, faSocks, faInbox, faSection, faGaugeHigh, faTachometerAlt, faTachometerAltFast, faEnvelopeOpenText, faHospital, faHospitalAlt, faHospitalWide, faWineBottle, faChessRook, faBarsStaggered, faReorder, faStream, faDharmachakra, faHotdog, faPersonWalkingWithCane, faBlind, faDrum, faIceCream, faHeartCircleBolt, faFax, faParagraph, faCheckToSlot, faVoteYea, faStarHalf, faBoxesStacked, faBoxes, faBoxesAlt, faLink, faChain, faEarListen, faAssistiveListeningSystems, faTreeCity, faPlay, faFont, faTableCellsRowLock, faRupiahSign, faMagnifyingGlass, faSearch, faTableTennisPaddleBall, faPingPongPaddleBall, faTableTennis, faPersonDotsFromLine, faDiagnoses, faTrashCanArrowUp, faTrashRestoreAlt, faNairaSign, faCartArrowDown, faWalkieTalkie, faFilePen, faFileEdit, faReceipt, faSquarePen, faPenSquare, faPencilSquare, faSuitcaseRolling, faPersonCircleExclamation, faChevronDown, faBatteryFull, faBattery, faBattery5, faSkullCrossbones, faCodeCompare, faListUl, faListDots, faSchoolLock, faTowerCell, faDownLong, faLongArrowAltDown, faRankingStar, faChessKing, faPersonHarassing, faBrazilianRealSign, faLandmarkDome, faLandmarkAlt, faArrowUp, faTv, faTelevision, faTvAlt, faShrimp, faListCheck, faTasks, faJugDetergent, faCircleUser, faUserCircle, faUserShield, faWind, faCarBurst, faCarCrash, faY, faPersonSnowboarding, faSnowboarding, faTruckFast, faShippingFast, faFish, faUserGraduate, faCircleHalfStroke, faAdjust, faClapperboard, faCircleRadiation, faRadiationAlt, faBaseball, faBaseballBall, faJetFighterUp, faDiagramProject, faProjectDiagram, faCopy, faVolumeXmark, faVolumeMute, faVolumeTimes, faHandSparkles, faGrip, faGripHorizontal, faShareFromSquare, faShareSquare, faChildCombatant, faChildRifle, faGun, faSquarePhone, faPhoneSquare, faPlus, faAdd, faExpand, faComputer, faXmark, faClose, faMultiply, faRemove, faTimes, faArrowsUpDownLeftRight, faArrows, faChalkboardUser, faChalkboardTeacher, faPesoSign, faBuildingShield, faBaby, faUsersLine, faQuoteLeft, faQuoteLeftAlt, faTractor, faTrashArrowUp, faTrashRestore, faArrowDownUpLock, faLinesLeaning, faRulerCombined, faCopyright, faEquals, faBlender, faTeeth, faShekelSign, faIls, faShekel, faSheqel, faSheqelSign, faMap, faRocket, faPhotoFilm, faPhotoVideo, faFolderMinus, faHexagonNodesBolt, faStore, faArrowTrendUp, faPlugCircleMinus, faSignHanging, faSign, faBezierCurve, faBellSlash, faTablet, faTabletAndroid, faSchoolFlag, faFill, faAngleUp, faDrumstickBite, faHollyBerry, faChevronLeft, faBacteria, faHandLizard, faNotdef, faDisease, faBriefcaseMedical, faGenderless, faChevronRight, faRetweet, faCarRear, faCarAlt, faPumpSoap, faVideoSlash, faBatteryQuarter, faBattery2, faRadio, faBabyCarriage, faCarriageBaby, faTrafficLight, faThermometer, faVrCardboard, faHandMiddleFinger, faPercent, faPercentage, faTruckMoving, faGlassWaterDroplet, faDisplay, faFaceSmile, faSmile, faThumbtack, faThumbTack, faTrophy, faPersonPraying, faPray, faHammer, faHandPeace, faRotate, faSyncAlt, faSpinner, faRobot, faPeace, faGears, faCogs, faWarehouse, faArrowUpRightDots, faSplotch, faFaceGrinHearts, faGrinHearts, faDiceFour, faSimCard, faTransgender, faTransgenderAlt, faMercury, faArrowTurnDown, faLevelDown, faPersonFallingBurst, faAward, faTicketSimple, faTicketAlt, faBuilding, faAnglesLeft, faAngleDoubleLeft, faQrcode, faClockRotateLeft, faHistory, faFaceGrinBeamSweat, faGrinBeamSweat, faFileExport, faArrowRightFromFile, faShield, faShieldBlank, faArrowUpShortWide, faSortAmountUpAlt, faCommentNodes, faHouseMedical, faGolfBallTee, faGolfBall, faCircleChevronLeft, faChevronCircleLeft, faHouseChimneyWindow, faPenNib, faTentArrowTurnLeft, faTents, faWandMagic, faMagic, faDog, faCarrot, faMoon, faWineGlassEmpty, faWineGlassAlt, faCheese, faYinYang, faMusic, faCodeCommit, faTemperatureLow, faPersonBiking, faBiking, faBroom, faShieldHeart, faGopuram, faEarthOceania, faGlobeOceania, faSquareXmark, faTimesSquare, faXmarkSquare, faHashtag, faUpRightAndDownLeftFromCenter, faExpandAlt, faOilCan, faT, faHippo, faChartColumn, faInfinity, faVialCircleCheck, faPersonArrowDownToLine, faVoicemail, faFan, faPersonWalkingLuggage, faUpDown, faArrowsAltV, faCloudMoonRain, faCalendar, faTrailer, faBahai, faHaykal, faSdCard, faDragon, faShoePrints, faCirclePlus, faPlusCircle, faFaceGrinTongueWink, faGrinTongueWink, faHandHolding, faPlugCircleExclamation, faLinkSlash, faChainBroken, faChainSlash, faUnlink, faClone, faPersonWalkingArrowLoopLeft, faArrowUpZA, faSortAlphaUpAlt, faFireFlameCurved, faFireAlt, faTornado, faFileCirclePlus, faBookQuran, faQuran, faAnchor, faBorderAll, faFaceAngry, faAngry, faCookieBite, faArrowTrendDown, faRss, faFeed, faDrawPolygon, faScaleBalanced, faBalanceScale, faGaugeSimpleHigh, faTachometer, faTachometerFast, faShower, faDesktop, faDesktopAlt, faM, faTableList, faThList, faCommentSms, faSms, faBook, faUserPlus, faCheck, faBatteryThreeQuarters, faBattery4, faHouseCircleCheck, faAngleLeft, faDiagramSuccessor, faTruckArrowRight, faArrowsSplitUpAndLeft, faHandFist, faFistRaised, faCloudMoon, faBriefcase, faPersonFalling, faImagePortrait, faPortrait, faUserTag, faRug, faEarthEurope, faGlobeEurope, faCartFlatbedSuitcase, faLuggageCart, faRectangleXmark, faRectangleTimes, faTimesRectangle, faWindowClose, faBahtSign, faBookOpen, faBookJournalWhills, faJournalWhills, faHandcuffs, faTriangleExclamation, faExclamationTriangle, faWarning, faDatabase, faShare, faMailForward, faBottleDroplet, faMaskFace, faHillRockslide, faRightLeft, faExchangeAlt, faPaperPlane, faRoadCircleExclamation, faDungeon, faAlignRight, faMoneyBill1Wave, faMoneyBillWaveAlt, faLifeRing, faHands, faSignLanguage, faSigning, faCalendarDay, faWaterLadder, faLadderWater, faSwimmingPool, faArrowsUpDown, faArrowsV, faFaceGrimace, faGrimace, faWheelchairMove, faWheelchairAlt, faTurnDown, faLevelDownAlt, faPersonWalkingArrowRight, faSquareEnvelope, faEnvelopeSquare, faDice, faBowlingBall, faBrain, faBandage, faBandAid, faCalendarMinus, faCircleXmark, faTimesCircle, faXmarkCircle, faGifts, faHotel, faEarthAsia, faGlobeAsia, faIdCardClip, faIdCardAlt, faMagnifyingGlassPlus, faSearchPlus, faThumbsUp, faUserClock, faHandDots, faAllergies, faFileInvoice, faWindowMinimize, faMugSaucer, faCoffee, faBrush, faFileHalfDashed, faMask, faMagnifyingGlassMinus, faSearchMinus, faRulerVertical, faUserLarge, faUserAlt, faTrainTram, faUserNurse, faSyringe, faCloudSun, faStopwatch20, faSquareFull, faMagnet, faJar, faNoteSticky, faStickyNote, faBugSlash, faArrowUpFromWaterPump, faBone, faTableCellsRowUnlock, faUserInjured, faFaceSadTear, faSadTear, faPlane, faTentArrowsDown, faExclamation, faArrowsSpin, faPrint, faTurkishLiraSign, faTry, faTurkishLira, faDollarSign, faDollar, faUsd, faX, faMagnifyingGlassDollar, faSearchDollar, faUsersGear, faUsersCog, faPersonMilitaryPointing, faBuildingColumns, faBank, faInstitution, faMuseum, faUniversity, faUmbrella, faTrowel, faD, faStapler, faMasksTheater, faTheaterMasks, faKipSign, faHandPointLeft, faHandshakeSimple, faHandshakeAlt, faJetFighter, faFighterJet, faSquareShareNodes, faShareAltSquare, faBarcode, faPlusMinus, faVideo, faVideoCamera, faGraduationCap, faMortarBoard, faHandHoldingMedical, faPersonCircleCheck, faTurnUp, faLevelUpAlt };\n","/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\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}\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && _setPrototypeOf(t, e);\n}\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\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}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _wrapRegExp() {\n  _wrapRegExp = function (e, r) {\n    return new BabelRegExp(e, void 0, r);\n  };\n  var e = RegExp.prototype,\n    r = new WeakMap();\n  function BabelRegExp(e, t, p) {\n    var o = RegExp(e, t);\n    return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype);\n  }\n  function buildGroups(e, t) {\n    var p = r.get(t);\n    return Object.keys(p).reduce(function (r, t) {\n      var o = p[t];\n      if (\"number\" == typeof o) r[t] = e[o];else {\n        for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++;\n        r[t] = e[o[i]];\n      }\n      return r;\n    }, Object.create(null));\n  }\n  return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) {\n    var t = e.exec.call(this, r);\n    if (t) {\n      t.groups = buildGroups(t, this);\n      var p = t.indices;\n      p && (p.groups = buildGroups(p, this));\n    }\n    return t;\n  }, BabelRegExp.prototype[Symbol.replace] = function (t, p) {\n    if (\"string\" == typeof p) {\n      var o = r.get(this);\n      return e[Symbol.replace].call(this, t, p.replace(/\\$<([^>]+)>/g, function (e, r) {\n        var t = o[r];\n        return \"$\" + (Array.isArray(t) ? t.join(\"$\") : t);\n      }));\n    }\n    if (\"function\" == typeof p) {\n      var i = this;\n      return e[Symbol.replace].call(this, t, function () {\n        var e = arguments;\n        return \"object\" != typeof e[e.length - 1] && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e);\n      });\n    }\n    return e[Symbol.replace].call(this, t, p);\n  }, _wrapRegExp.apply(this, arguments);\n}\n\nconst noop = () => {};\nlet _WINDOW = {};\nlet _DOCUMENT = {};\nlet _MUTATION_OBSERVER = null;\nlet _PERFORMANCE = {\n  mark: noop,\n  measure: noop\n};\ntry {\n  if (typeof window !== 'undefined') _WINDOW = window;\n  if (typeof document !== 'undefined') _DOCUMENT = document;\n  if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n  if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n} catch (e) {}\nconst {\n  userAgent = ''\n} = _WINDOW.navigator || {};\nconst WINDOW = _WINDOW;\nconst DOCUMENT = _DOCUMENT;\nconst MUTATION_OBSERVER = _MUTATION_OBSERVER;\nconst PERFORMANCE = _PERFORMANCE;\nconst IS_BROWSER = !!WINDOW.document;\nconst IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\nconst IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\nvar p = /fa(s|r|l|t|d|dr|dl|dt|b|k|kd|ss|sr|sl|st|sds|sdr|sdl|sdt)?[\\-\\ ]/,\n  g = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp Duotone|Sharp|Kit)?.*/i;\nvar S = {\n    classic: {\n      fa: \"solid\",\n      fas: \"solid\",\n      \"fa-solid\": \"solid\",\n      far: \"regular\",\n      \"fa-regular\": \"regular\",\n      fal: \"light\",\n      \"fa-light\": \"light\",\n      fat: \"thin\",\n      \"fa-thin\": \"thin\",\n      fab: \"brands\",\n      \"fa-brands\": \"brands\"\n    },\n    duotone: {\n      fa: \"solid\",\n      fad: \"solid\",\n      \"fa-solid\": \"solid\",\n      \"fa-duotone\": \"solid\",\n      fadr: \"regular\",\n      \"fa-regular\": \"regular\",\n      fadl: \"light\",\n      \"fa-light\": \"light\",\n      fadt: \"thin\",\n      \"fa-thin\": \"thin\"\n    },\n    sharp: {\n      fa: \"solid\",\n      fass: \"solid\",\n      \"fa-solid\": \"solid\",\n      fasr: \"regular\",\n      \"fa-regular\": \"regular\",\n      fasl: \"light\",\n      \"fa-light\": \"light\",\n      fast: \"thin\",\n      \"fa-thin\": \"thin\"\n    },\n    \"sharp-duotone\": {\n      fa: \"solid\",\n      fasds: \"solid\",\n      \"fa-solid\": \"solid\",\n      fasdr: \"regular\",\n      \"fa-regular\": \"regular\",\n      fasdl: \"light\",\n      \"fa-light\": \"light\",\n      fasdt: \"thin\",\n      \"fa-thin\": \"thin\"\n    }\n  },\n  A = {\n    GROUP: \"duotone-group\",\n    SWAP_OPACITY: \"swap-opacity\",\n    PRIMARY: \"primary\",\n    SECONDARY: \"secondary\"\n  },\n  P = [\"fa-classic\", \"fa-duotone\", \"fa-sharp\", \"fa-sharp-duotone\"];\nvar s = \"classic\",\n  t = \"duotone\",\n  r = \"sharp\",\n  o = \"sharp-duotone\",\n  L = [s, t, r, o];\nvar G = {\n    classic: {\n      900: \"fas\",\n      400: \"far\",\n      normal: \"far\",\n      300: \"fal\",\n      100: \"fat\"\n    },\n    duotone: {\n      900: \"fad\",\n      400: \"fadr\",\n      300: \"fadl\",\n      100: \"fadt\"\n    },\n    sharp: {\n      900: \"fass\",\n      400: \"fasr\",\n      300: \"fasl\",\n      100: \"fast\"\n    },\n    \"sharp-duotone\": {\n      900: \"fasds\",\n      400: \"fasdr\",\n      300: \"fasdl\",\n      100: \"fasdt\"\n    }\n  };\nvar lt = {\n    \"Font Awesome 6 Free\": {\n      900: \"fas\",\n      400: \"far\"\n    },\n    \"Font Awesome 6 Pro\": {\n      900: \"fas\",\n      400: \"far\",\n      normal: \"far\",\n      300: \"fal\",\n      100: \"fat\"\n    },\n    \"Font Awesome 6 Brands\": {\n      400: \"fab\",\n      normal: \"fab\"\n    },\n    \"Font Awesome 6 Duotone\": {\n      900: \"fad\",\n      400: \"fadr\",\n      normal: \"fadr\",\n      300: \"fadl\",\n      100: \"fadt\"\n    },\n    \"Font Awesome 6 Sharp\": {\n      900: \"fass\",\n      400: \"fasr\",\n      normal: \"fasr\",\n      300: \"fasl\",\n      100: \"fast\"\n    },\n    \"Font Awesome 6 Sharp Duotone\": {\n      900: \"fasds\",\n      400: \"fasdr\",\n      normal: \"fasdr\",\n      300: \"fasdl\",\n      100: \"fasdt\"\n    }\n  };\nvar pt = new Map([[\"classic\", {\n    defaultShortPrefixId: \"fas\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\", \"brands\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"sharp\", {\n    defaultShortPrefixId: \"fass\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"duotone\", {\n    defaultShortPrefixId: \"fad\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }], [\"sharp-duotone\", {\n    defaultShortPrefixId: \"fasds\",\n    defaultStyleId: \"solid\",\n    styleIds: [\"solid\", \"regular\", \"light\", \"thin\"],\n    futureStyleIds: [],\n    defaultFontWeight: 900\n  }]]),\n  xt = {\n    classic: {\n      solid: \"fas\",\n      regular: \"far\",\n      light: \"fal\",\n      thin: \"fat\",\n      brands: \"fab\"\n    },\n    duotone: {\n      solid: \"fad\",\n      regular: \"fadr\",\n      light: \"fadl\",\n      thin: \"fadt\"\n    },\n    sharp: {\n      solid: \"fass\",\n      regular: \"fasr\",\n      light: \"fasl\",\n      thin: \"fast\"\n    },\n    \"sharp-duotone\": {\n      solid: \"fasds\",\n      regular: \"fasdr\",\n      light: \"fasdl\",\n      thin: \"fasdt\"\n    }\n  };\nvar Ft = [\"fak\", \"fa-kit\", \"fakd\", \"fa-kit-duotone\"],\n  St = {\n    kit: {\n      fak: \"kit\",\n      \"fa-kit\": \"kit\"\n    },\n    \"kit-duotone\": {\n      fakd: \"kit-duotone\",\n      \"fa-kit-duotone\": \"kit-duotone\"\n    }\n  },\n  At = [\"kit\"];\nvar Ct = {\n  kit: {\n    \"fa-kit\": \"fak\"\n  },\n  \"kit-duotone\": {\n    \"fa-kit-duotone\": \"fakd\"\n  }\n};\nvar Lt = [\"fak\", \"fakd\"],\n  Wt = {\n    kit: {\n      fak: \"fa-kit\"\n    },\n    \"kit-duotone\": {\n      fakd: \"fa-kit-duotone\"\n    }\n  };\nvar Et = {\n    kit: {\n      kit: \"fak\"\n    },\n    \"kit-duotone\": {\n      \"kit-duotone\": \"fakd\"\n    }\n  };\n\nvar t$1 = {\n    GROUP: \"duotone-group\",\n    SWAP_OPACITY: \"swap-opacity\",\n    PRIMARY: \"primary\",\n    SECONDARY: \"secondary\"\n  },\n  r$1 = [\"fa-classic\", \"fa-duotone\", \"fa-sharp\", \"fa-sharp-duotone\"];\nvar bt$1 = [\"fak\", \"fa-kit\", \"fakd\", \"fa-kit-duotone\"];\nvar Yt = {\n    \"Font Awesome Kit\": {\n      400: \"fak\",\n      normal: \"fak\"\n    },\n    \"Font Awesome Kit Duotone\": {\n      400: \"fakd\",\n      normal: \"fakd\"\n    }\n  };\nvar ua = {\n    classic: {\n      \"fa-brands\": \"fab\",\n      \"fa-duotone\": \"fad\",\n      \"fa-light\": \"fal\",\n      \"fa-regular\": \"far\",\n      \"fa-solid\": \"fas\",\n      \"fa-thin\": \"fat\"\n    },\n    duotone: {\n      \"fa-regular\": \"fadr\",\n      \"fa-light\": \"fadl\",\n      \"fa-thin\": \"fadt\"\n    },\n    sharp: {\n      \"fa-solid\": \"fass\",\n      \"fa-regular\": \"fasr\",\n      \"fa-light\": \"fasl\",\n      \"fa-thin\": \"fast\"\n    },\n    \"sharp-duotone\": {\n      \"fa-solid\": \"fasds\",\n      \"fa-regular\": \"fasdr\",\n      \"fa-light\": \"fasdl\",\n      \"fa-thin\": \"fasdt\"\n    }\n  },\n  I$1 = {\n    classic: [\"fas\", \"far\", \"fal\", \"fat\", \"fad\"],\n    duotone: [\"fadr\", \"fadl\", \"fadt\"],\n    sharp: [\"fass\", \"fasr\", \"fasl\", \"fast\"],\n    \"sharp-duotone\": [\"fasds\", \"fasdr\", \"fasdl\", \"fasdt\"]\n  },\n  ga = {\n    classic: {\n      fab: \"fa-brands\",\n      fad: \"fa-duotone\",\n      fal: \"fa-light\",\n      far: \"fa-regular\",\n      fas: \"fa-solid\",\n      fat: \"fa-thin\"\n    },\n    duotone: {\n      fadr: \"fa-regular\",\n      fadl: \"fa-light\",\n      fadt: \"fa-thin\"\n    },\n    sharp: {\n      fass: \"fa-solid\",\n      fasr: \"fa-regular\",\n      fasl: \"fa-light\",\n      fast: \"fa-thin\"\n    },\n    \"sharp-duotone\": {\n      fasds: \"fa-solid\",\n      fasdr: \"fa-regular\",\n      fasdl: \"fa-light\",\n      fasdt: \"fa-thin\"\n    }\n  },\n  x = [\"fa-solid\", \"fa-regular\", \"fa-light\", \"fa-thin\", \"fa-duotone\", \"fa-brands\"],\n  Ia = [\"fa\", \"fas\", \"far\", \"fal\", \"fat\", \"fad\", \"fadr\", \"fadl\", \"fadt\", \"fab\", \"fass\", \"fasr\", \"fasl\", \"fast\", \"fasds\", \"fasdr\", \"fasdl\", \"fasdt\", ...r$1, ...x],\n  m$1 = [\"solid\", \"regular\", \"light\", \"thin\", \"duotone\", \"brands\"],\n  c$1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n  F$1 = c$1.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),\n  ma = [...Object.keys(I$1), ...m$1, \"2xs\", \"xs\", \"sm\", \"lg\", \"xl\", \"2xl\", \"beat\", \"border\", \"fade\", \"beat-fade\", \"bounce\", \"flip-both\", \"flip-horizontal\", \"flip-vertical\", \"flip\", \"fw\", \"inverse\", \"layers-counter\", \"layers-text\", \"layers\", \"li\", \"pull-left\", \"pull-right\", \"pulse\", \"rotate-180\", \"rotate-270\", \"rotate-90\", \"rotate-by\", \"shake\", \"spin-pulse\", \"spin-reverse\", \"spin\", \"stack-1x\", \"stack-2x\", \"stack\", \"ul\", t$1.GROUP, t$1.SWAP_OPACITY, t$1.PRIMARY, t$1.SECONDARY].concat(c$1.map(a => \"\".concat(a, \"x\"))).concat(F$1.map(a => \"w-\".concat(a)));\nvar wa = {\n    \"Font Awesome 5 Free\": {\n      900: \"fas\",\n      400: \"far\"\n    },\n    \"Font Awesome 5 Pro\": {\n      900: \"fas\",\n      400: \"far\",\n      normal: \"far\",\n      300: \"fal\"\n    },\n    \"Font Awesome 5 Brands\": {\n      400: \"fab\",\n      normal: \"fab\"\n    },\n    \"Font Awesome 5 Duotone\": {\n      900: \"fad\"\n    }\n  };\n\nconst NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\nconst UNITS_IN_GRID = 16;\nconst DEFAULT_CSS_PREFIX = 'fa';\nconst DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\nconst DATA_FA_I2SVG = 'data-fa-i2svg';\nconst DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\nconst DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\nconst DATA_PREFIX = 'data-prefix';\nconst DATA_ICON = 'data-icon';\nconst HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\nconst MUTATION_APPROACH_ASYNC = 'async';\nconst TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\nconst PRODUCTION = (() => {\n  try {\n    return process.env.NODE_ENV === 'production';\n  } catch (e$$1) {\n    return false;\n  }\n})();\nfunction familyProxy(obj) {\n  // Defaults to the classic family if family is not available\n  return new Proxy(obj, {\n    get(target, prop) {\n      return prop in target ? target[prop] : target[s];\n    }\n  });\n}\nconst _PREFIX_TO_STYLE = _objectSpread2({}, S);\n\n// We changed FACSSClassesToStyleId in the icons repo to be canonical and as such, \"classic\" family does not have any\n// duotone styles.  But we do still need duotone in _PREFIX_TO_STYLE below, so we are manually adding\n// {'fa-duotone': 'duotone'}\n_PREFIX_TO_STYLE[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n  'fa-duotone': 'duotone'\n}), S[s]), St['kit']), St['kit-duotone']);\nconst PREFIX_TO_STYLE = familyProxy(_PREFIX_TO_STYLE);\nconst _STYLE_TO_PREFIX = _objectSpread2({}, xt);\n\n// We changed FAStyleIdToShortPrefixId in the icons repo to be canonical and as such, \"classic\" family does not have any\n// duotone styles.  But we do still need duotone in _STYLE_TO_PREFIX below, so we are manually adding {duotone: 'fad'}\n_STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n  duotone: 'fad'\n}), _STYLE_TO_PREFIX[s]), Et['kit']), Et['kit-duotone']);\nconst STYLE_TO_PREFIX = familyProxy(_STYLE_TO_PREFIX);\nconst _PREFIX_TO_LONG_STYLE = _objectSpread2({}, ga);\n_PREFIX_TO_LONG_STYLE[s] = _objectSpread2(_objectSpread2({}, _PREFIX_TO_LONG_STYLE[s]), Wt['kit']);\nconst PREFIX_TO_LONG_STYLE = familyProxy(_PREFIX_TO_LONG_STYLE);\nconst _LONG_STYLE_TO_PREFIX = _objectSpread2({}, ua);\n_LONG_STYLE_TO_PREFIX[s] = _objectSpread2(_objectSpread2({}, _LONG_STYLE_TO_PREFIX[s]), Ct['kit']);\nconst LONG_STYLE_TO_PREFIX = familyProxy(_LONG_STYLE_TO_PREFIX);\nconst ICON_SELECTION_SYNTAX_PATTERN = p; // eslint-disable-line no-useless-escape\n\nconst LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\nconst FONT_FAMILY_PATTERN = g;\nconst _FONT_WEIGHT_TO_PREFIX = _objectSpread2({}, G);\nconst FONT_WEIGHT_TO_PREFIX = familyProxy(_FONT_WEIGHT_TO_PREFIX);\nconst ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\nconst DUOTONE_CLASSES = A;\nconst RESERVED_CLASSES = [...At, ...ma];\n\nconst initial = WINDOW.FontAwesomeConfig || {};\nfunction getAttrConfig(attr) {\n  var element = DOCUMENT.querySelector('script[' + attr + ']');\n  if (element) {\n    return element.getAttribute(attr);\n  }\n}\nfunction coerce(val) {\n  // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n  // We'll assume that this is an indication that it should be toggled to true\n  if (val === '') return true;\n  if (val === 'false') return false;\n  if (val === 'true') return true;\n  return val;\n}\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n  const attrs = [['data-family-prefix', 'familyPrefix'], ['data-css-prefix', 'cssPrefix'], ['data-family-default', 'familyDefault'], ['data-style-default', 'styleDefault'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n  attrs.forEach(_ref => {\n    let [attr, key] = _ref;\n    const val = coerce(getAttrConfig(attr));\n    if (val !== undefined && val !== null) {\n      initial[key] = val;\n    }\n  });\n}\nconst _default = {\n  styleDefault: 'solid',\n  familyDefault: s,\n  cssPrefix: DEFAULT_CSS_PREFIX,\n  replacementClass: DEFAULT_REPLACEMENT_CLASS,\n  autoReplaceSvg: true,\n  autoAddCss: true,\n  autoA11y: true,\n  searchPseudoElements: false,\n  observeMutations: true,\n  mutateApproach: 'async',\n  keepOriginalSource: true,\n  measurePerformance: false,\n  showMissingIcons: true\n};\n\n// familyPrefix is deprecated but we must still support it if present\nif (initial.familyPrefix) {\n  initial.cssPrefix = initial.familyPrefix;\n}\nconst _config = _objectSpread2(_objectSpread2({}, _default), initial);\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\nconst config = {};\nObject.keys(_default).forEach(key => {\n  Object.defineProperty(config, key, {\n    enumerable: true,\n    set: function (val) {\n      _config[key] = val;\n      _onChangeCb.forEach(cb => cb(config));\n    },\n    get: function () {\n      return _config[key];\n    }\n  });\n});\n\n// familyPrefix is deprecated as of 6.2.0 and should be removed in 7.0.0\nObject.defineProperty(config, 'familyPrefix', {\n  enumerable: true,\n  set: function (val) {\n    _config.cssPrefix = val;\n    _onChangeCb.forEach(cb => cb(config));\n  },\n  get: function () {\n    return _config.cssPrefix;\n  }\n});\nWINDOW.FontAwesomeConfig = config;\nconst _onChangeCb = [];\nfunction onChange(cb) {\n  _onChangeCb.push(cb);\n  return () => {\n    _onChangeCb.splice(_onChangeCb.indexOf(cb), 1);\n  };\n}\n\nconst d$2 = UNITS_IN_GRID;\nconst meaninglessTransform = {\n  size: 16,\n  x: 0,\n  y: 0,\n  rotate: 0,\n  flipX: false,\n  flipY: false\n};\nfunction insertCss(css) {\n  if (!css || !IS_DOM) {\n    return;\n  }\n  const style = DOCUMENT.createElement('style');\n  style.setAttribute('type', 'text/css');\n  style.innerHTML = css;\n  const headChildren = DOCUMENT.head.childNodes;\n  let beforeChild = null;\n  for (let i = headChildren.length - 1; i > -1; i--) {\n    const child = headChildren[i];\n    const tagName = (child.tagName || '').toUpperCase();\n    if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n      beforeChild = child;\n    }\n  }\n  DOCUMENT.head.insertBefore(style, beforeChild);\n  return css;\n}\nconst idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n  let size = 12;\n  let id = '';\n  while (size-- > 0) {\n    id += idPool[Math.random() * 62 | 0];\n  }\n  return id;\n}\nfunction toArray(obj) {\n  const array = [];\n  for (let i = (obj || []).length >>> 0; i--;) {\n    array[i] = obj[i];\n  }\n  return array;\n}\nfunction classArray(node) {\n  if (node.classList) {\n    return toArray(node.classList);\n  } else {\n    return (node.getAttribute('class') || '').split(' ').filter(i => i);\n  }\n}\nfunction htmlEscape(str) {\n  return \"\".concat(str).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\nfunction joinAttributes(attributes) {\n  return Object.keys(attributes || {}).reduce((acc, attributeName) => {\n    return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n  }, '').trim();\n}\nfunction joinStyles(styles) {\n  return Object.keys(styles || {}).reduce((acc, styleName) => {\n    return acc + \"\".concat(styleName, \": \").concat(styles[styleName].trim(), \";\");\n  }, '');\n}\nfunction transformIsMeaningful(transform) {\n  return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n  let {\n    transform,\n    containerWidth,\n    iconWidth\n  } = _ref;\n  const outer = {\n    transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n  };\n  const innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n  const innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n  const innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n  const inner = {\n    transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n  };\n  const path = {\n    transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n  };\n  return {\n    outer,\n    inner,\n    path\n  };\n}\nfunction transformForCss(_ref2) {\n  let {\n    transform,\n    width = UNITS_IN_GRID,\n    height = UNITS_IN_GRID,\n    startCentered = false\n  } = _ref2;\n  let val = '';\n  if (startCentered && IS_IE) {\n    val += \"translate(\".concat(transform.x / d$2 - width / 2, \"em, \").concat(transform.y / d$2 - height / 2, \"em) \");\n  } else if (startCentered) {\n    val += \"translate(calc(-50% + \".concat(transform.x / d$2, \"em), calc(-50% + \").concat(transform.y / d$2, \"em)) \");\n  } else {\n    val += \"translate(\".concat(transform.x / d$2, \"em, \").concat(transform.y / d$2, \"em) \");\n  }\n  val += \"scale(\".concat(transform.size / d$2 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d$2 * (transform.flipY ? -1 : 1), \") \");\n  val += \"rotate(\".concat(transform.rotate, \"deg) \");\n  return val;\n}\n\nvar baseStyles = \":root, :host {\\n  --fa-font-solid: normal 900 1em/1 \\\"Font Awesome 6 Free\\\";\\n  --fa-font-regular: normal 400 1em/1 \\\"Font Awesome 6 Free\\\";\\n  --fa-font-light: normal 300 1em/1 \\\"Font Awesome 6 Pro\\\";\\n  --fa-font-thin: normal 100 1em/1 \\\"Font Awesome 6 Pro\\\";\\n  --fa-font-duotone: normal 900 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n  --fa-font-duotone-regular: normal 400 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n  --fa-font-duotone-light: normal 300 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n  --fa-font-duotone-thin: normal 100 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n  --fa-font-brands: normal 400 1em/1 \\\"Font Awesome 6 Brands\\\";\\n  --fa-font-sharp-solid: normal 900 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-sharp-regular: normal 400 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-sharp-light: normal 300 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-sharp-thin: normal 100 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n  --fa-font-sharp-duotone-solid: normal 900 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n  --fa-font-sharp-duotone-regular: normal 400 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n  --fa-font-sharp-duotone-light: normal 300 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n  --fa-font-sharp-duotone-thin: normal 100 1em/1 \\\"Font Awesome 6 Sharp Duotone\\\";\\n}\\n\\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\\n  overflow: visible;\\n  box-sizing: content-box;\\n}\\n\\n.svg-inline--fa {\\n  display: var(--fa-display, inline-block);\\n  height: 1em;\\n  overflow: visible;\\n  vertical-align: -0.125em;\\n}\\n.svg-inline--fa.fa-2xs {\\n  vertical-align: 0.1em;\\n}\\n.svg-inline--fa.fa-xs {\\n  vertical-align: 0em;\\n}\\n.svg-inline--fa.fa-sm {\\n  vertical-align: -0.0714285705em;\\n}\\n.svg-inline--fa.fa-lg {\\n  vertical-align: -0.2em;\\n}\\n.svg-inline--fa.fa-xl {\\n  vertical-align: -0.25em;\\n}\\n.svg-inline--fa.fa-2xl {\\n  vertical-align: -0.3125em;\\n}\\n.svg-inline--fa.fa-pull-left {\\n  margin-right: var(--fa-pull-margin, 0.3em);\\n  width: auto;\\n}\\n.svg-inline--fa.fa-pull-right {\\n  margin-left: var(--fa-pull-margin, 0.3em);\\n  width: auto;\\n}\\n.svg-inline--fa.fa-li {\\n  width: var(--fa-li-width, 2em);\\n  top: 0.25em;\\n}\\n.svg-inline--fa.fa-fw {\\n  width: var(--fa-fw-width, 1.25em);\\n}\\n\\n.fa-layers svg.svg-inline--fa {\\n  bottom: 0;\\n  left: 0;\\n  margin: auto;\\n  position: absolute;\\n  right: 0;\\n  top: 0;\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n  display: inline-block;\\n  position: absolute;\\n  text-align: center;\\n}\\n\\n.fa-layers {\\n  display: inline-block;\\n  height: 1em;\\n  position: relative;\\n  text-align: center;\\n  vertical-align: -0.125em;\\n  width: 1em;\\n}\\n.fa-layers svg.svg-inline--fa {\\n  transform-origin: center center;\\n}\\n\\n.fa-layers-text {\\n  left: 50%;\\n  top: 50%;\\n  transform: translate(-50%, -50%);\\n  transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n  background-color: var(--fa-counter-background-color, #ff253a);\\n  border-radius: var(--fa-counter-border-radius, 1em);\\n  box-sizing: border-box;\\n  color: var(--fa-inverse, #fff);\\n  line-height: var(--fa-counter-line-height, 1);\\n  max-width: var(--fa-counter-max-width, 5em);\\n  min-width: var(--fa-counter-min-width, 1.5em);\\n  overflow: hidden;\\n  padding: var(--fa-counter-padding, 0.25em 0.5em);\\n  right: var(--fa-right, 0);\\n  text-overflow: ellipsis;\\n  top: var(--fa-top, 0);\\n  transform: scale(var(--fa-counter-scale, 0.25));\\n  transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n  bottom: var(--fa-bottom, 0);\\n  right: var(--fa-right, 0);\\n  top: auto;\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n  bottom: var(--fa-bottom, 0);\\n  left: var(--fa-left, 0);\\n  right: auto;\\n  top: auto;\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n  top: var(--fa-top, 0);\\n  right: var(--fa-right, 0);\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n  left: var(--fa-left, 0);\\n  right: auto;\\n  top: var(--fa-top, 0);\\n  transform: scale(var(--fa-layers-scale, 0.25));\\n  transform-origin: top left;\\n}\\n\\n.fa-1x {\\n  font-size: 1em;\\n}\\n\\n.fa-2x {\\n  font-size: 2em;\\n}\\n\\n.fa-3x {\\n  font-size: 3em;\\n}\\n\\n.fa-4x {\\n  font-size: 4em;\\n}\\n\\n.fa-5x {\\n  font-size: 5em;\\n}\\n\\n.fa-6x {\\n  font-size: 6em;\\n}\\n\\n.fa-7x {\\n  font-size: 7em;\\n}\\n\\n.fa-8x {\\n  font-size: 8em;\\n}\\n\\n.fa-9x {\\n  font-size: 9em;\\n}\\n\\n.fa-10x {\\n  font-size: 10em;\\n}\\n\\n.fa-2xs {\\n  font-size: 0.625em;\\n  line-height: 0.1em;\\n  vertical-align: 0.225em;\\n}\\n\\n.fa-xs {\\n  font-size: 0.75em;\\n  line-height: 0.0833333337em;\\n  vertical-align: 0.125em;\\n}\\n\\n.fa-sm {\\n  font-size: 0.875em;\\n  line-height: 0.0714285718em;\\n  vertical-align: 0.0535714295em;\\n}\\n\\n.fa-lg {\\n  font-size: 1.25em;\\n  line-height: 0.05em;\\n  vertical-align: -0.075em;\\n}\\n\\n.fa-xl {\\n  font-size: 1.5em;\\n  line-height: 0.0416666682em;\\n  vertical-align: -0.125em;\\n}\\n\\n.fa-2xl {\\n  font-size: 2em;\\n  line-height: 0.03125em;\\n  vertical-align: -0.1875em;\\n}\\n\\n.fa-fw {\\n  text-align: center;\\n  width: 1.25em;\\n}\\n\\n.fa-ul {\\n  list-style-type: none;\\n  margin-left: var(--fa-li-margin, 2.5em);\\n  padding-left: 0;\\n}\\n.fa-ul > li {\\n  position: relative;\\n}\\n\\n.fa-li {\\n  left: calc(-1 * var(--fa-li-width, 2em));\\n  position: absolute;\\n  text-align: center;\\n  width: var(--fa-li-width, 2em);\\n  line-height: inherit;\\n}\\n\\n.fa-border {\\n  border-color: var(--fa-border-color, #eee);\\n  border-radius: var(--fa-border-radius, 0.1em);\\n  border-style: var(--fa-border-style, solid);\\n  border-width: var(--fa-border-width, 0.08em);\\n  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\\n}\\n\\n.fa-pull-left {\\n  float: left;\\n  margin-right: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-pull-right {\\n  float: right;\\n  margin-left: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-beat {\\n  animation-name: fa-beat;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-bounce {\\n  animation-name: fa-bounce;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\\n}\\n\\n.fa-fade {\\n  animation-name: fa-fade;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-beat-fade {\\n  animation-name: fa-beat-fade;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-flip {\\n  animation-name: fa-flip;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-shake {\\n  animation-name: fa-shake;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin {\\n  animation-name: fa-spin;\\n  animation-delay: var(--fa-animation-delay, 0s);\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 2s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin-reverse {\\n  --fa-animation-direction: reverse;\\n}\\n\\n.fa-pulse,\\n.fa-spin-pulse {\\n  animation-name: fa-spin;\\n  animation-direction: var(--fa-animation-direction, normal);\\n  animation-duration: var(--fa-animation-duration, 1s);\\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n  animation-timing-function: var(--fa-animation-timing, steps(8));\\n}\\n\\n@media (prefers-reduced-motion: reduce) {\\n  .fa-beat,\\n.fa-bounce,\\n.fa-fade,\\n.fa-beat-fade,\\n.fa-flip,\\n.fa-pulse,\\n.fa-shake,\\n.fa-spin,\\n.fa-spin-pulse {\\n    animation-delay: -1ms;\\n    animation-duration: 1ms;\\n    animation-iteration-count: 1;\\n    transition-delay: 0s;\\n    transition-duration: 0s;\\n  }\\n}\\n@keyframes fa-beat {\\n  0%, 90% {\\n    transform: scale(1);\\n  }\\n  45% {\\n    transform: scale(var(--fa-beat-scale, 1.25));\\n  }\\n}\\n@keyframes fa-bounce {\\n  0% {\\n    transform: scale(1, 1) translateY(0);\\n  }\\n  10% {\\n    transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n  }\\n  30% {\\n    transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n  }\\n  50% {\\n    transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n  }\\n  57% {\\n    transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n  }\\n  64% {\\n    transform: scale(1, 1) translateY(0);\\n  }\\n  100% {\\n    transform: scale(1, 1) translateY(0);\\n  }\\n}\\n@keyframes fa-fade {\\n  50% {\\n    opacity: var(--fa-fade-opacity, 0.4);\\n  }\\n}\\n@keyframes fa-beat-fade {\\n  0%, 100% {\\n    opacity: var(--fa-beat-fade-opacity, 0.4);\\n    transform: scale(1);\\n  }\\n  50% {\\n    opacity: 1;\\n    transform: scale(var(--fa-beat-fade-scale, 1.125));\\n  }\\n}\\n@keyframes fa-flip {\\n  50% {\\n    transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n  }\\n}\\n@keyframes fa-shake {\\n  0% {\\n    transform: rotate(-15deg);\\n  }\\n  4% {\\n    transform: rotate(15deg);\\n  }\\n  8%, 24% {\\n    transform: rotate(-18deg);\\n  }\\n  12%, 28% {\\n    transform: rotate(18deg);\\n  }\\n  16% {\\n    transform: rotate(-22deg);\\n  }\\n  20% {\\n    transform: rotate(22deg);\\n  }\\n  32% {\\n    transform: rotate(-12deg);\\n  }\\n  36% {\\n    transform: rotate(12deg);\\n  }\\n  40%, 100% {\\n    transform: rotate(0deg);\\n  }\\n}\\n@keyframes fa-spin {\\n  0% {\\n    transform: rotate(0deg);\\n  }\\n  100% {\\n    transform: rotate(360deg);\\n  }\\n}\\n.fa-rotate-90 {\\n  transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n  transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n  transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n  transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n  transform: scale(1, -1);\\n}\\n\\n.fa-flip-both,\\n.fa-flip-horizontal.fa-flip-vertical {\\n  transform: scale(-1, -1);\\n}\\n\\n.fa-rotate-by {\\n  transform: rotate(var(--fa-rotate-angle, 0));\\n}\\n\\n.fa-stack {\\n  display: inline-block;\\n  vertical-align: middle;\\n  height: 2em;\\n  position: relative;\\n  width: 2.5em;\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n  bottom: 0;\\n  left: 0;\\n  margin: auto;\\n  position: absolute;\\n  right: 0;\\n  top: 0;\\n  z-index: var(--fa-stack-z-index, auto);\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n  height: 1em;\\n  width: 1.25em;\\n}\\n.svg-inline--fa.fa-stack-2x {\\n  height: 2em;\\n  width: 2.5em;\\n}\\n\\n.fa-inverse {\\n  color: var(--fa-inverse, #fff);\\n}\\n\\n.sr-only,\\n.fa-sr-only {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  white-space: nowrap;\\n  border-width: 0;\\n}\\n\\n.sr-only-focusable:not(:focus),\\n.fa-sr-only-focusable:not(:focus) {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  white-space: nowrap;\\n  border-width: 0;\\n}\\n\\n.svg-inline--fa .fa-primary {\\n  fill: var(--fa-primary-color, currentColor);\\n  opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa .fa-secondary {\\n  fill: var(--fa-secondary-color, currentColor);\\n  opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-primary {\\n  opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\\n  opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa mask .fa-primary,\\n.svg-inline--fa mask .fa-secondary {\\n  fill: black;\\n}\";\n\nfunction css() {\n  const dcp = DEFAULT_CSS_PREFIX;\n  const drc = DEFAULT_REPLACEMENT_CLASS;\n  const fp = config.cssPrefix;\n  const rc = config.replacementClass;\n  let s = baseStyles;\n  if (fp !== dcp || rc !== drc) {\n    const dPatt = new RegExp(\"\\\\.\".concat(dcp, \"\\\\-\"), 'g');\n    const customPropPatt = new RegExp(\"\\\\--\".concat(dcp, \"\\\\-\"), 'g');\n    const rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n    s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n  }\n  return s;\n}\nlet _cssInserted = false;\nfunction ensureCss() {\n  if (config.autoAddCss && !_cssInserted) {\n    insertCss(css());\n    _cssInserted = true;\n  }\n}\nvar InjectCSS = {\n  mixout() {\n    return {\n      dom: {\n        css,\n        insertCss: ensureCss\n      }\n    };\n  },\n  hooks() {\n    return {\n      beforeDOMElementCreation() {\n        ensureCss();\n      },\n      beforeI2svg() {\n        ensureCss();\n      }\n    };\n  }\n};\n\nconst w = WINDOW || {};\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w[NAMESPACE_IDENTIFIER];\n\nconst functions = [];\nconst listener = function () {\n  DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n  loaded = 1;\n  functions.map(fn => fn());\n};\nlet loaded = false;\nif (IS_DOM) {\n  loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n  if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n}\nfunction domready (fn) {\n  if (!IS_DOM) return;\n  loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nfunction toHtml(abstractNodes) {\n  const {\n    tag,\n    attributes = {},\n    children = []\n  } = abstractNodes;\n  if (typeof abstractNodes === 'string') {\n    return htmlEscape(abstractNodes);\n  } else {\n    return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"</\").concat(tag, \">\");\n  }\n}\n\nfunction iconFromMapping(mapping, prefix, iconName) {\n  if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n    return {\n      prefix,\n      iconName,\n      icon: mapping[prefix][iconName]\n    };\n  }\n}\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n  return function (a, b, c, d) {\n    return func.call(thisContext, a, b, c, d);\n  };\n};\n\n/**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param  {Object}   subject      The object to reduce over.\n * @param  {Function} fn           The reducer function.\n * @param  {mixed}    initialValue The initial value for the reducer, defaults to subject[0].\n * @param  {Object}   thisContext  The context for the reducer.\n * @return {mixed}                 The final result.\n */\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n  var keys = Object.keys(subject),\n    length = keys.length,\n    iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n    i,\n    key,\n    result;\n  if (initialValue === undefined) {\n    i = 1;\n    result = subject[keys[0]];\n  } else {\n    i = 0;\n    result = initialValue;\n  }\n  for (; i < length; i++) {\n    key = keys[i];\n    result = iterator(result, subject[key], key, subject);\n  }\n  return result;\n};\n\n/**\n * ucs2decode() and codePointAt() are both works of Mathias Bynens and licensed under MIT\n *\n * Copyright Mathias Bynens <https://mathiasbynens.be/>\n\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nfunction ucs2decode(string) {\n  const output = [];\n  let counter = 0;\n  const length = string.length;\n  while (counter < length) {\n    const value = string.charCodeAt(counter++);\n    if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n      const extra = string.charCodeAt(counter++);\n      if ((extra & 0xFC00) == 0xDC00) {\n        // eslint-disable-line eqeqeq\n        output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n      } else {\n        output.push(value);\n        counter--;\n      }\n    } else {\n      output.push(value);\n    }\n  }\n  return output;\n}\nfunction toHex(unicode) {\n  const decoded = ucs2decode(unicode);\n  return decoded.length === 1 ? decoded[0].toString(16) : null;\n}\nfunction codePointAt(string, index) {\n  const size = string.length;\n  let first = string.charCodeAt(index);\n  let second;\n  if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n    second = string.charCodeAt(index + 1);\n    if (second >= 0xDC00 && second <= 0xDFFF) {\n      return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n    }\n  }\n  return first;\n}\n\nfunction normalizeIcons(icons) {\n  return Object.keys(icons).reduce((acc, iconName) => {\n    const icon = icons[iconName];\n    const expanded = !!icon.icon;\n    if (expanded) {\n      acc[icon.iconName] = icon.icon;\n    } else {\n      acc[iconName] = icon;\n    }\n    return acc;\n  }, {});\n}\nfunction defineIcons(prefix, icons) {\n  let params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  const {\n    skipHooks = false\n  } = params;\n  const normalized = normalizeIcons(icons);\n  if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n    namespace.hooks.addPack(prefix, normalizeIcons(icons));\n  } else {\n    namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n  }\n\n  /**\n   * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n   * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n   * for `fas` so we'll ease the upgrade process for our users by automatically defining\n   * this as well.\n   */\n  if (prefix === 'fas') {\n    defineIcons('fa', icons);\n  }\n}\n\nconst duotonePathRe = [/*#__PURE__*/_wrapRegExp(/path d=\"([^\"]+)\".*path d=\"([^\"]+)\"/, {\n  d1: 1,\n  d2: 2\n}), /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]+)\".*d=\"([^\"]+)\".*path class=\"([^\"]+)\".*d=\"([^\"]+)\"/, {\n  cls1: 1,\n  d1: 2,\n  cls2: 3,\n  d2: 4\n}), /*#__PURE__*/_wrapRegExp(/path class=\"([^\"]+)\".*d=\"([^\"]+)\"/, {\n  cls1: 1,\n  d1: 2\n})];\n\nconst {\n  styles,\n  shims\n} = namespace;\nconst FAMILY_NAMES = Object.keys(PREFIX_TO_LONG_STYLE);\nconst PREFIXES_FOR_FAMILY = FAMILY_NAMES.reduce((acc, familyId) => {\n  acc[familyId] = Object.keys(PREFIX_TO_LONG_STYLE[familyId]);\n  return acc;\n}, {});\nlet _defaultUsablePrefix = null;\nlet _byUnicode = {};\nlet _byLigature = {};\nlet _byOldName = {};\nlet _byOldUnicode = {};\nlet _byAlias = {};\nfunction isReserved(name) {\n  return ~RESERVED_CLASSES.indexOf(name);\n}\nfunction getIconName(cssPrefix, cls) {\n  const parts = cls.split('-');\n  const prefix = parts[0];\n  const iconName = parts.slice(1).join('-');\n  if (prefix === cssPrefix && iconName !== '' && !isReserved(iconName)) {\n    return iconName;\n  } else {\n    return null;\n  }\n}\nconst build = () => {\n  const lookup = reducer => {\n    return reduce(styles, (o$$1, style, prefix) => {\n      o$$1[prefix] = reduce(style, reducer, {});\n      return o$$1;\n    }, {});\n  };\n  _byUnicode = lookup((acc, icon, iconName) => {\n    if (icon[3]) {\n      acc[icon[3]] = iconName;\n    }\n    if (icon[2]) {\n      const aliases = icon[2].filter(a$$1 => {\n        return typeof a$$1 === 'number';\n      });\n      aliases.forEach(alias => {\n        acc[alias.toString(16)] = iconName;\n      });\n    }\n    return acc;\n  });\n  _byLigature = lookup((acc, icon, iconName) => {\n    acc[iconName] = iconName;\n    if (icon[2]) {\n      const aliases = icon[2].filter(a$$1 => {\n        return typeof a$$1 === 'string';\n      });\n      aliases.forEach(alias => {\n        acc[alias] = iconName;\n      });\n    }\n    return acc;\n  });\n  _byAlias = lookup((acc, icon, iconName) => {\n    const aliases = icon[2];\n    acc[iconName] = iconName;\n    aliases.forEach(alias => {\n      acc[alias] = iconName;\n    });\n    return acc;\n  });\n\n  // If we have a Kit, we can't determine if regular is available since we\n  // could be auto-fetching it. We'll have to assume that it is available.\n  const hasRegular = 'far' in styles || config.autoFetchSvg;\n  const shimLookups = reduce(shims, (acc, shim) => {\n    const maybeNameMaybeUnicode = shim[0];\n    let prefix = shim[1];\n    const iconName = shim[2];\n    if (prefix === 'far' && !hasRegular) {\n      prefix = 'fas';\n    }\n    if (typeof maybeNameMaybeUnicode === 'string') {\n      acc.names[maybeNameMaybeUnicode] = {\n        prefix,\n        iconName\n      };\n    }\n    if (typeof maybeNameMaybeUnicode === 'number') {\n      acc.unicodes[maybeNameMaybeUnicode.toString(16)] = {\n        prefix,\n        iconName\n      };\n    }\n    return acc;\n  }, {\n    names: {},\n    unicodes: {}\n  });\n  _byOldName = shimLookups.names;\n  _byOldUnicode = shimLookups.unicodes;\n  _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault, {\n    family: config.familyDefault\n  });\n};\nonChange(c$$1 => {\n  _defaultUsablePrefix = getCanonicalPrefix(c$$1.styleDefault, {\n    family: config.familyDefault\n  });\n});\nbuild();\nfunction byUnicode(prefix, unicode) {\n  return (_byUnicode[prefix] || {})[unicode];\n}\nfunction byLigature(prefix, ligature) {\n  return (_byLigature[prefix] || {})[ligature];\n}\nfunction byAlias(prefix, alias) {\n  return (_byAlias[prefix] || {})[alias];\n}\nfunction byOldName(name) {\n  return _byOldName[name] || {\n    prefix: null,\n    iconName: null\n  };\n}\nfunction byOldUnicode(unicode) {\n  const oldUnicode = _byOldUnicode[unicode];\n  const newUnicode = byUnicode('fas', unicode);\n  return oldUnicode || (newUnicode ? {\n    prefix: 'fas',\n    iconName: newUnicode\n  } : null) || {\n    prefix: null,\n    iconName: null\n  };\n}\nfunction getDefaultUsablePrefix() {\n  return _defaultUsablePrefix;\n}\nconst emptyCanonicalIcon = () => {\n  return {\n    prefix: null,\n    iconName: null,\n    rest: []\n  };\n};\nfunction getFamilyId(values) {\n  let family = s;\n  const famProps = FAMILY_NAMES.reduce((acc, familyId) => {\n    acc[familyId] = \"\".concat(config.cssPrefix, \"-\").concat(familyId);\n    return acc;\n  }, {});\n  L.forEach(familyId => {\n    if (values.includes(famProps[familyId]) || values.some(v$$1 => PREFIXES_FOR_FAMILY[familyId].includes(v$$1))) {\n      family = familyId;\n    }\n  });\n  return family;\n}\nfunction getCanonicalPrefix(styleOrPrefix) {\n  let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  const {\n    family = s\n  } = params;\n  const style = PREFIX_TO_STYLE[family][styleOrPrefix];\n\n  // handles the exception of passing in only a family of 'duotone' with no style\n  if (family === t && !styleOrPrefix) {\n    return 'fad';\n  }\n  const prefix = STYLE_TO_PREFIX[family][styleOrPrefix] || STYLE_TO_PREFIX[family][style];\n  const defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null;\n  const result = prefix || defined || null;\n  return result;\n}\nfunction moveNonFaClassesToRest(classNames) {\n  let rest = [];\n  let iconName = null;\n  classNames.forEach(cls => {\n    const result = getIconName(config.cssPrefix, cls);\n    if (result) {\n      iconName = result;\n    } else if (cls) {\n      rest.push(cls);\n    }\n  });\n  return {\n    iconName,\n    rest\n  };\n}\nfunction sortedUniqueValues(arr) {\n  return arr.sort().filter((value, index, arr) => {\n    return arr.indexOf(value) === index;\n  });\n}\nfunction getCanonicalIcon(values) {\n  let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  const {\n    skipLookups = false\n  } = params;\n  let givenPrefix = null;\n  const faCombinedClasses = Ia.concat(bt$1);\n  const faStyleOrFamilyClasses = sortedUniqueValues(values.filter(cls => faCombinedClasses.includes(cls)));\n  const nonStyleOrFamilyClasses = sortedUniqueValues(values.filter(cls => !Ia.includes(cls)));\n  const faStyles = faStyleOrFamilyClasses.filter(cls => {\n    givenPrefix = cls;\n    return !P.includes(cls);\n  });\n  const [styleFromValues = null] = faStyles;\n  const family = getFamilyId(faStyleOrFamilyClasses);\n  const canonical = _objectSpread2(_objectSpread2({}, moveNonFaClassesToRest(nonStyleOrFamilyClasses)), {}, {\n    prefix: getCanonicalPrefix(styleFromValues, {\n      family\n    })\n  });\n  return _objectSpread2(_objectSpread2(_objectSpread2({}, canonical), getDefaultCanonicalPrefix({\n    values,\n    family,\n    styles,\n    config,\n    canonical,\n    givenPrefix\n  })), applyShimAndAlias(skipLookups, givenPrefix, canonical));\n}\nfunction applyShimAndAlias(skipLookups, givenPrefix, canonical) {\n  let {\n    prefix,\n    iconName\n  } = canonical;\n  if (skipLookups || !prefix || !iconName) {\n    return {\n      prefix,\n      iconName\n    };\n  }\n  const shim = givenPrefix === 'fa' ? byOldName(iconName) : {};\n  const aliasIconName = byAlias(prefix, iconName);\n  iconName = shim.iconName || aliasIconName || iconName;\n  prefix = shim.prefix || prefix;\n  if (prefix === 'far' && !styles['far'] && styles['fas'] && !config.autoFetchSvg) {\n    // Allow a fallback from the regular style to solid if regular is not available\n    // but only if we aren't auto-fetching SVGs\n    prefix = 'fas';\n  }\n  return {\n    prefix,\n    iconName\n  };\n}\nconst newCanonicalFamilies = L.filter(familyId => {\n  return familyId !== s || familyId !== t;\n});\nconst newCanonicalStyles = Object.keys(ga).filter(key => key !== s).map(key => Object.keys(ga[key])).flat();\nfunction getDefaultCanonicalPrefix(prefixOptions) {\n  const {\n    values,\n    family,\n    canonical,\n    givenPrefix = '',\n    styles = {},\n    config: config$$1 = {}\n  } = prefixOptions;\n  const isDuotoneFamily = family === t;\n  const valuesHasDuotone = values.includes('fa-duotone') || values.includes('fad');\n  const defaultFamilyIsDuotone = config$$1.familyDefault === 'duotone';\n  const canonicalPrefixIsDuotone = canonical.prefix === 'fad' || canonical.prefix === 'fa-duotone';\n  if (!isDuotoneFamily && (valuesHasDuotone || defaultFamilyIsDuotone || canonicalPrefixIsDuotone)) {\n    canonical.prefix = 'fad';\n  }\n  if (values.includes('fa-brands') || values.includes('fab')) {\n    canonical.prefix = 'fab';\n  }\n  if (!canonical.prefix && newCanonicalFamilies.includes(family)) {\n    const validPrefix = Object.keys(styles).find(key => newCanonicalStyles.includes(key));\n    if (validPrefix || config$$1.autoFetchSvg) {\n      const defaultPrefix = pt.get(family).defaultShortPrefixId;\n      canonical.prefix = defaultPrefix;\n      canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName;\n    }\n  }\n  if (canonical.prefix === 'fa' || givenPrefix === 'fa') {\n    // The fa prefix is not canonical. So if it has made it through until this point\n    // we will shift it to the correct prefix.\n    canonical.prefix = getDefaultUsablePrefix() || 'fas';\n  }\n  return canonical;\n}\n\nclass Library {\n  constructor() {\n    this.definitions = {};\n  }\n  add() {\n    for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n      definitions[_key] = arguments[_key];\n    }\n    const additions = definitions.reduce(this._pullDefinitions, {});\n    Object.keys(additions).forEach(key => {\n      this.definitions[key] = _objectSpread2(_objectSpread2({}, this.definitions[key] || {}), additions[key]);\n      defineIcons(key, additions[key]);\n\n      // TODO can we stop doing this? We can't get the icons by 'fa-solid' any longer so this probably needs to change\n      const longPrefix = PREFIX_TO_LONG_STYLE[s][key];\n      if (longPrefix) defineIcons(longPrefix, additions[key]);\n      build();\n    });\n  }\n  reset() {\n    this.definitions = {};\n  }\n  _pullDefinitions(additions, definition) {\n    const normalized = definition.prefix && definition.iconName && definition.icon ? {\n      0: definition\n    } : definition;\n    Object.keys(normalized).map(key => {\n      const {\n        prefix,\n        iconName,\n        icon\n      } = normalized[key];\n      const aliases = icon[2];\n      if (!additions[prefix]) additions[prefix] = {};\n      if (aliases.length > 0) {\n        aliases.forEach(alias => {\n          if (typeof alias === 'string') {\n            additions[prefix][alias] = icon;\n          }\n        });\n      }\n      additions[prefix][iconName] = icon;\n    });\n    return additions;\n  }\n}\n\nlet _plugins = [];\nlet _hooks = {};\nconst providers = {};\nconst defaultProviderKeys = Object.keys(providers);\nfunction registerPlugins(nextPlugins, _ref) {\n  let {\n    mixoutsTo: obj\n  } = _ref;\n  _plugins = nextPlugins;\n  _hooks = {};\n  Object.keys(providers).forEach(k => {\n    if (defaultProviderKeys.indexOf(k) === -1) {\n      delete providers[k];\n    }\n  });\n  _plugins.forEach(plugin => {\n    const mixout = plugin.mixout ? plugin.mixout() : {};\n    Object.keys(mixout).forEach(tk => {\n      if (typeof mixout[tk] === 'function') {\n        obj[tk] = mixout[tk];\n      }\n      if (typeof mixout[tk] === 'object') {\n        Object.keys(mixout[tk]).forEach(sk => {\n          if (!obj[tk]) {\n            obj[tk] = {};\n          }\n          obj[tk][sk] = mixout[tk][sk];\n        });\n      }\n    });\n    if (plugin.hooks) {\n      const hooks = plugin.hooks();\n      Object.keys(hooks).forEach(hook => {\n        if (!_hooks[hook]) {\n          _hooks[hook] = [];\n        }\n        _hooks[hook].push(hooks[hook]);\n      });\n    }\n    if (plugin.provides) {\n      plugin.provides(providers);\n    }\n  });\n  return obj;\n}\nfunction chainHooks(hook, accumulator) {\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n  const hookFns = _hooks[hook] || [];\n  hookFns.forEach(hookFn => {\n    accumulator = hookFn.apply(null, [accumulator, ...args]); // eslint-disable-line no-useless-call\n  });\n  return accumulator;\n}\nfunction callHooks(hook) {\n  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    args[_key2 - 1] = arguments[_key2];\n  }\n  const hookFns = _hooks[hook] || [];\n  hookFns.forEach(hookFn => {\n    hookFn.apply(null, args);\n  });\n  return undefined;\n}\nfunction callProvided() {\n  const hook = arguments[0];\n  const args = Array.prototype.slice.call(arguments, 1);\n  return providers[hook] ? providers[hook].apply(null, args) : undefined;\n}\n\nfunction findIconDefinition(iconLookup) {\n  if (iconLookup.prefix === 'fa') {\n    iconLookup.prefix = 'fas';\n  }\n  let {\n    iconName\n  } = iconLookup;\n  const prefix = iconLookup.prefix || getDefaultUsablePrefix();\n  if (!iconName) return;\n  iconName = byAlias(prefix, iconName) || iconName;\n  return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\nconst library = new Library();\nconst noAuto = () => {\n  config.autoReplaceSvg = false;\n  config.observeMutations = false;\n  callHooks('noAuto');\n};\nconst dom = {\n  i2svg: function () {\n    let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (IS_DOM) {\n      callHooks('beforeI2svg', params);\n      callProvided('pseudoElements2svg', params);\n      return callProvided('i2svg', params);\n    } else {\n      return Promise.reject(new Error('Operation requires a DOM of some kind.'));\n    }\n  },\n  watch: function () {\n    let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    const {\n      autoReplaceSvgRoot\n    } = params;\n    if (config.autoReplaceSvg === false) {\n      config.autoReplaceSvg = true;\n    }\n    config.observeMutations = true;\n    domready(() => {\n      autoReplace({\n        autoReplaceSvgRoot\n      });\n      callHooks('watch', params);\n    });\n  }\n};\nconst parse = {\n  icon: icon => {\n    if (icon === null) {\n      return null;\n    }\n    if (typeof icon === 'object' && icon.prefix && icon.iconName) {\n      return {\n        prefix: icon.prefix,\n        iconName: byAlias(icon.prefix, icon.iconName) || icon.iconName\n      };\n    }\n    if (Array.isArray(icon) && icon.length === 2) {\n      const iconName = icon[1].indexOf('fa-') === 0 ? icon[1].slice(3) : icon[1];\n      const prefix = getCanonicalPrefix(icon[0]);\n      return {\n        prefix,\n        iconName: byAlias(prefix, iconName) || iconName\n      };\n    }\n    if (typeof icon === 'string' && (icon.indexOf(\"\".concat(config.cssPrefix, \"-\")) > -1 || icon.match(ICON_SELECTION_SYNTAX_PATTERN))) {\n      const canonicalIcon = getCanonicalIcon(icon.split(' '), {\n        skipLookups: true\n      });\n      return {\n        prefix: canonicalIcon.prefix || getDefaultUsablePrefix(),\n        iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName\n      };\n    }\n    if (typeof icon === 'string') {\n      const prefix = getDefaultUsablePrefix();\n      return {\n        prefix,\n        iconName: byAlias(prefix, icon) || icon\n      };\n    }\n  }\n};\nconst api = {\n  noAuto,\n  config,\n  dom,\n  parse,\n  library,\n  findIconDefinition,\n  toHtml\n};\nconst autoReplace = function () {\n  let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  const {\n    autoReplaceSvgRoot = DOCUMENT\n  } = params;\n  if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n    node: autoReplaceSvgRoot\n  });\n};\n\nfunction domVariants(val, abstractCreator) {\n  Object.defineProperty(val, 'abstract', {\n    get: abstractCreator\n  });\n  Object.defineProperty(val, 'html', {\n    get: function () {\n      return val.abstract.map(a => toHtml(a));\n    }\n  });\n  Object.defineProperty(val, 'node', {\n    get: function () {\n      if (!IS_DOM) return;\n      const container = DOCUMENT.createElement('div');\n      container.innerHTML = val.html;\n      return container.children;\n    }\n  });\n  return val;\n}\n\nfunction asIcon (_ref) {\n  let {\n    children,\n    main,\n    mask,\n    attributes,\n    styles,\n    transform\n  } = _ref;\n  if (transformIsMeaningful(transform) && main.found && !mask.found) {\n    const {\n      width,\n      height\n    } = main;\n    const offset = {\n      x: width / height / 2,\n      y: 0.5\n    };\n    attributes['style'] = joinStyles(_objectSpread2(_objectSpread2({}, styles), {}, {\n      'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n    }));\n  }\n  return [{\n    tag: 'svg',\n    attributes,\n    children\n  }];\n}\n\nfunction asSymbol (_ref) {\n  let {\n    prefix,\n    iconName,\n    children,\n    attributes,\n    symbol\n  } = _ref;\n  const id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.cssPrefix, \"-\").concat(iconName) : symbol;\n  return [{\n    tag: 'svg',\n    attributes: {\n      style: 'display: none;'\n    },\n    children: [{\n      tag: 'symbol',\n      attributes: _objectSpread2(_objectSpread2({}, attributes), {}, {\n        id\n      }),\n      children\n    }]\n  }];\n}\n\nfunction makeInlineSvgAbstract(params) {\n  const {\n    icons: {\n      main,\n      mask\n    },\n    prefix,\n    iconName,\n    transform,\n    symbol,\n    title,\n    maskId,\n    titleId,\n    extra,\n    watchable = false\n  } = params;\n  const {\n    width,\n    height\n  } = mask.found ? mask : main;\n  const isUploadedIcon = Lt.includes(prefix);\n  const attrClass = [config.replacementClass, iconName ? \"\".concat(config.cssPrefix, \"-\").concat(iconName) : ''].filter(c$$1 => extra.classes.indexOf(c$$1) === -1).filter(c$$1 => c$$1 !== '' || !!c$$1).concat(extra.classes).join(' ');\n  let content = {\n    children: [],\n    attributes: _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n      'data-prefix': prefix,\n      'data-icon': iconName,\n      'class': attrClass,\n      'role': extra.attributes.role || 'img',\n      'xmlns': 'http://www.w3.org/2000/svg',\n      'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n    })\n  };\n  const uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n    width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n  } : {};\n  if (watchable) {\n    content.attributes[DATA_FA_I2SVG] = '';\n  }\n  if (title) {\n    content.children.push({\n      tag: 'title',\n      attributes: {\n        id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n      },\n      children: [title]\n    });\n    delete content.attributes.title;\n  }\n  const args = _objectSpread2(_objectSpread2({}, content), {}, {\n    prefix,\n    iconName,\n    main,\n    mask,\n    maskId,\n    transform,\n    symbol,\n    styles: _objectSpread2(_objectSpread2({}, uploadedIconWidthStyle), extra.styles)\n  });\n  const {\n    children,\n    attributes\n  } = mask.found && main.found ? callProvided('generateAbstractMask', args) || {\n    children: [],\n    attributes: {}\n  } : callProvided('generateAbstractIcon', args) || {\n    children: [],\n    attributes: {}\n  };\n  args.children = children;\n  args.attributes = attributes;\n  if (symbol) {\n    return asSymbol(args);\n  } else {\n    return asIcon(args);\n  }\n}\nfunction makeLayersTextAbstract(params) {\n  const {\n    content,\n    width,\n    height,\n    transform,\n    title,\n    extra,\n    watchable = false\n  } = params;\n  const attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n    'title': title\n  } : {}), {}, {\n    'class': extra.classes.join(' ')\n  });\n  if (watchable) {\n    attributes[DATA_FA_I2SVG] = '';\n  }\n  const styles = _objectSpread2({}, extra.styles);\n  if (transformIsMeaningful(transform)) {\n    styles['transform'] = transformForCss({\n      transform,\n      startCentered: true,\n      width,\n      height\n    });\n    styles['-webkit-transform'] = styles['transform'];\n  }\n  const styleString = joinStyles(styles);\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n  const val = [];\n  val.push({\n    tag: 'span',\n    attributes,\n    children: [content]\n  });\n  if (title) {\n    val.push({\n      tag: 'span',\n      attributes: {\n        class: 'sr-only'\n      },\n      children: [title]\n    });\n  }\n  return val;\n}\nfunction makeLayersCounterAbstract(params) {\n  const {\n    content,\n    title,\n    extra\n  } = params;\n  const attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n    'title': title\n  } : {}), {}, {\n    'class': extra.classes.join(' ')\n  });\n  const styleString = joinStyles(extra.styles);\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n  const val = [];\n  val.push({\n    tag: 'span',\n    attributes,\n    children: [content]\n  });\n  if (title) {\n    val.push({\n      tag: 'span',\n      attributes: {\n        class: 'sr-only'\n      },\n      children: [title]\n    });\n  }\n  return val;\n}\n\nconst {\n  styles: styles$1\n} = namespace;\nfunction asFoundIcon(icon) {\n  const width = icon[0];\n  const height = icon[1];\n  const [vectorData] = icon.slice(4);\n  let element = null;\n  if (Array.isArray(vectorData)) {\n    element = {\n      tag: 'g',\n      attributes: {\n        class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n      },\n      children: [{\n        tag: 'path',\n        attributes: {\n          class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n          fill: 'currentColor',\n          d: vectorData[0]\n        }\n      }, {\n        tag: 'path',\n        attributes: {\n          class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n          fill: 'currentColor',\n          d: vectorData[1]\n        }\n      }]\n    };\n  } else {\n    element = {\n      tag: 'path',\n      attributes: {\n        fill: 'currentColor',\n        d: vectorData\n      }\n    };\n  }\n  return {\n    found: true,\n    width,\n    height,\n    icon: element\n  };\n}\nconst missingIconResolutionMixin = {\n  found: false,\n  width: 512,\n  height: 512\n};\nfunction maybeNotifyMissing(iconName, prefix) {\n  if (!PRODUCTION && !config.showMissingIcons && iconName) {\n    console.error(\"Icon with name \\\"\".concat(iconName, \"\\\" and prefix \\\"\").concat(prefix, \"\\\" is missing.\"));\n  }\n}\nfunction findIcon(iconName, prefix) {\n  let givenPrefix = prefix;\n  if (prefix === 'fa' && config.styleDefault !== null) {\n    prefix = getDefaultUsablePrefix();\n  }\n  return new Promise((resolve, reject) => {\n    if (givenPrefix === 'fa') {\n      const shim = byOldName(iconName) || {};\n      iconName = shim.iconName || iconName;\n      prefix = shim.prefix || prefix;\n    }\n    if (iconName && prefix && styles$1[prefix] && styles$1[prefix][iconName]) {\n      const icon = styles$1[prefix][iconName];\n      return resolve(asFoundIcon(icon));\n    }\n    maybeNotifyMissing(iconName, prefix);\n    resolve(_objectSpread2(_objectSpread2({}, missingIconResolutionMixin), {}, {\n      icon: config.showMissingIcons && iconName ? callProvided('missingIconAbstract') || {} : {}\n    }));\n  });\n}\n\nconst noop$1 = () => {};\nconst p$2 = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n  mark: noop$1,\n  measure: noop$1\n};\nconst preamble = \"FA \\\"6.7.2\\\"\";\nconst begin = name => {\n  p$2.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n  return () => end(name);\n};\nconst end = name => {\n  p$2.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n  p$2.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\nvar perf = {\n  begin,\n  end\n};\n\nconst noop$2 = () => {};\nfunction isWatched(node) {\n  const i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n  return typeof i2svg === 'string';\n}\nfunction hasPrefixAndIcon(node) {\n  const prefix = node.getAttribute ? node.getAttribute(DATA_PREFIX) : null;\n  const icon = node.getAttribute ? node.getAttribute(DATA_ICON) : null;\n  return prefix && icon;\n}\nfunction hasBeenReplaced(node) {\n  return node && node.classList && node.classList.contains && node.classList.contains(config.replacementClass);\n}\nfunction getMutator() {\n  if (config.autoReplaceSvg === true) {\n    return mutators.replace;\n  }\n  const mutator = mutators[config.autoReplaceSvg];\n  return mutator || mutators.replace;\n}\nfunction createElementNS(tag) {\n  return DOCUMENT.createElementNS('http://www.w3.org/2000/svg', tag);\n}\nfunction createElement(tag) {\n  return DOCUMENT.createElement(tag);\n}\nfunction convertSVG(abstractObj) {\n  let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  const {\n    ceFn = abstractObj.tag === 'svg' ? createElementNS : createElement\n  } = params;\n  if (typeof abstractObj === 'string') {\n    return DOCUMENT.createTextNode(abstractObj);\n  }\n  const tag = ceFn(abstractObj.tag);\n  Object.keys(abstractObj.attributes || []).forEach(function (key) {\n    tag.setAttribute(key, abstractObj.attributes[key]);\n  });\n  const children = abstractObj.children || [];\n  children.forEach(function (child) {\n    tag.appendChild(convertSVG(child, {\n      ceFn\n    }));\n  });\n  return tag;\n}\nfunction nodeAsComment(node) {\n  let comment = \" \".concat(node.outerHTML, \" \");\n  /* BEGIN.ATTRIBUTION */\n  comment = \"\".concat(comment, \"Font Awesome fontawesome.com \");\n  /* END.ATTRIBUTION */\n  return comment;\n}\nconst mutators = {\n  replace: function (mutation) {\n    const node = mutation[0];\n    if (node.parentNode) {\n      mutation[1].forEach(abstract => {\n        node.parentNode.insertBefore(convertSVG(abstract), node);\n      });\n      if (node.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) {\n        let comment = DOCUMENT.createComment(nodeAsComment(node));\n        node.parentNode.replaceChild(comment, node);\n      } else {\n        node.remove();\n      }\n    }\n  },\n  nest: function (mutation) {\n    const node = mutation[0];\n    const abstract = mutation[1];\n\n    // If we already have a replaced node we do not want to continue nesting within it.\n    // Short-circuit to the standard replacement\n    if (~classArray(node).indexOf(config.replacementClass)) {\n      return mutators.replace(mutation);\n    }\n    const forSvg = new RegExp(\"\".concat(config.cssPrefix, \"-.*\"));\n    delete abstract[0].attributes.id;\n    if (abstract[0].attributes.class) {\n      const splitClasses = abstract[0].attributes.class.split(' ').reduce((acc, cls) => {\n        if (cls === config.replacementClass || cls.match(forSvg)) {\n          acc.toSvg.push(cls);\n        } else {\n          acc.toNode.push(cls);\n        }\n        return acc;\n      }, {\n        toNode: [],\n        toSvg: []\n      });\n      abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n      if (splitClasses.toNode.length === 0) {\n        node.removeAttribute('class');\n      } else {\n        node.setAttribute('class', splitClasses.toNode.join(' '));\n      }\n    }\n    const newInnerHTML = abstract.map(a => toHtml(a)).join('\\n');\n    node.setAttribute(DATA_FA_I2SVG, '');\n    node.innerHTML = newInnerHTML;\n  }\n};\nfunction performOperationSync(op) {\n  op();\n}\nfunction perform(mutations, callback) {\n  const callbackFunction = typeof callback === 'function' ? callback : noop$2;\n  if (mutations.length === 0) {\n    callbackFunction();\n  } else {\n    let frame = performOperationSync;\n    if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n      frame = WINDOW.requestAnimationFrame || performOperationSync;\n    }\n    frame(() => {\n      const mutator = getMutator();\n      const mark = perf.begin('mutate');\n      mutations.map(mutator);\n      mark();\n      callbackFunction();\n    });\n  }\n}\nlet disabled = false;\nfunction disableObservation() {\n  disabled = true;\n}\nfunction enableObservation() {\n  disabled = false;\n}\nlet mo = null;\nfunction observe(options) {\n  if (!MUTATION_OBSERVER) {\n    return;\n  }\n  if (!config.observeMutations) {\n    return;\n  }\n  const {\n    treeCallback = noop$2,\n    nodeCallback = noop$2,\n    pseudoElementsCallback = noop$2,\n    observeMutationsRoot = DOCUMENT\n  } = options;\n  mo = new MUTATION_OBSERVER(objects => {\n    if (disabled) return;\n    const defaultPrefix = getDefaultUsablePrefix();\n    toArray(objects).forEach(mutationRecord => {\n      if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n        if (config.searchPseudoElements) {\n          pseudoElementsCallback(mutationRecord.target);\n        }\n        treeCallback(mutationRecord.target);\n      }\n      if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n        pseudoElementsCallback(mutationRecord.target.parentNode);\n      }\n      if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n        if (mutationRecord.attributeName === 'class' && hasPrefixAndIcon(mutationRecord.target)) {\n          const {\n            prefix,\n            iconName\n          } = getCanonicalIcon(classArray(mutationRecord.target));\n          mutationRecord.target.setAttribute(DATA_PREFIX, prefix || defaultPrefix);\n          if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName);\n        } else if (hasBeenReplaced(mutationRecord.target)) {\n          nodeCallback(mutationRecord.target);\n        }\n      }\n    });\n  });\n  if (!IS_DOM) return;\n  mo.observe(observeMutationsRoot, {\n    childList: true,\n    attributes: true,\n    characterData: true,\n    subtree: true\n  });\n}\nfunction disconnect() {\n  if (!mo) return;\n  mo.disconnect();\n}\n\nfunction styleParser (node) {\n  const style = node.getAttribute('style');\n  let val = [];\n  if (style) {\n    val = style.split(';').reduce((acc, style) => {\n      const styles = style.split(':');\n      const prop = styles[0];\n      const value = styles.slice(1);\n      if (prop && value.length > 0) {\n        acc[prop] = value.join(':').trim();\n      }\n      return acc;\n    }, {});\n  }\n  return val;\n}\n\nfunction classParser (node) {\n  const existingPrefix = node.getAttribute('data-prefix');\n  const existingIconName = node.getAttribute('data-icon');\n  const innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n  let val = getCanonicalIcon(classArray(node));\n  if (!val.prefix) {\n    val.prefix = getDefaultUsablePrefix();\n  }\n  if (existingPrefix && existingIconName) {\n    val.prefix = existingPrefix;\n    val.iconName = existingIconName;\n  }\n  if (val.iconName && val.prefix) {\n    return val;\n  }\n  if (val.prefix && innerText.length > 0) {\n    val.iconName = byLigature(val.prefix, node.innerText) || byUnicode(val.prefix, toHex(node.innerText));\n  }\n  if (!val.iconName && config.autoFetchSvg && node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\n    val.iconName = node.firstChild.data;\n  }\n  return val;\n}\n\nfunction attributesParser (node) {\n  const extraAttributes = toArray(node.attributes).reduce((acc, attr) => {\n    if (acc.name !== 'class' && acc.name !== 'style') {\n      acc[attr.name] = attr.value;\n    }\n    return acc;\n  }, {});\n  const title = node.getAttribute('title');\n  const titleId = node.getAttribute('data-fa-title-id');\n  if (config.autoA11y) {\n    if (title) {\n      extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n    } else {\n      extraAttributes['aria-hidden'] = 'true';\n      extraAttributes['focusable'] = 'false';\n    }\n  }\n  return extraAttributes;\n}\n\nfunction blankMeta() {\n  return {\n    iconName: null,\n    title: null,\n    titleId: null,\n    prefix: null,\n    transform: meaninglessTransform,\n    symbol: false,\n    mask: {\n      iconName: null,\n      prefix: null,\n      rest: []\n    },\n    maskId: null,\n    extra: {\n      classes: [],\n      styles: {},\n      attributes: {}\n    }\n  };\n}\nfunction parseMeta(node) {\n  let parser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    styleParser: true\n  };\n  const {\n    iconName,\n    prefix,\n    rest: extraClasses\n  } = classParser(node);\n  const extraAttributes = attributesParser(node);\n  const pluginMeta = chainHooks('parseNodeAttributes', {}, node);\n  let extraStyles = parser.styleParser ? styleParser(node) : [];\n  return _objectSpread2({\n    iconName,\n    title: node.getAttribute('title'),\n    titleId: node.getAttribute('data-fa-title-id'),\n    prefix,\n    transform: meaninglessTransform,\n    mask: {\n      iconName: null,\n      prefix: null,\n      rest: []\n    },\n    maskId: null,\n    symbol: false,\n    extra: {\n      classes: extraClasses,\n      styles: extraStyles,\n      attributes: extraAttributes\n    }\n  }, pluginMeta);\n}\n\nconst {\n  styles: styles$2\n} = namespace;\nfunction generateMutation(node) {\n  const nodeMeta = config.autoReplaceSvg === 'nest' ? parseMeta(node, {\n    styleParser: false\n  }) : parseMeta(node);\n  if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n    return callProvided('generateLayersText', node, nodeMeta);\n  } else {\n    return callProvided('generateSvgReplacementMutation', node, nodeMeta);\n  }\n}\nfunction getKnownPrefixes() {\n  return [...Ft, ...Ia];\n}\nfunction onTree(root) {\n  let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  if (!IS_DOM) return Promise.resolve();\n  const htmlClassList = DOCUMENT.documentElement.classList;\n  const hclAdd = suffix => htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n  const hclRemove = suffix => htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n  const prefixes = config.autoFetchSvg ? getKnownPrefixes() : P.concat(Object.keys(styles$2));\n  if (!prefixes.includes('fa')) {\n    prefixes.push('fa');\n  }\n  const prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(p$$1 => \".\".concat(p$$1, \":not([\").concat(DATA_FA_I2SVG, \"])\"))).join(', ');\n  if (prefixesDomQuery.length === 0) {\n    return Promise.resolve();\n  }\n  let candidates = [];\n  try {\n    candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n  } catch (e$$1) {\n    // noop\n  }\n  if (candidates.length > 0) {\n    hclAdd('pending');\n    hclRemove('complete');\n  } else {\n    return Promise.resolve();\n  }\n  const mark = perf.begin('onTree');\n  const mutations = candidates.reduce((acc, node) => {\n    try {\n      const mutation = generateMutation(node);\n      if (mutation) {\n        acc.push(mutation);\n      }\n    } catch (e$$1) {\n      if (!PRODUCTION) {\n        if (e$$1.name === 'MissingIcon') {\n          console.error(e$$1);\n        }\n      }\n    }\n    return acc;\n  }, []);\n  return new Promise((resolve, reject) => {\n    Promise.all(mutations).then(resolvedMutations => {\n      perform(resolvedMutations, () => {\n        hclAdd('active');\n        hclAdd('complete');\n        hclRemove('pending');\n        if (typeof callback === 'function') callback();\n        mark();\n        resolve();\n      });\n    }).catch(e$$1 => {\n      mark();\n      reject(e$$1);\n    });\n  });\n}\nfunction onNode(node) {\n  let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  generateMutation(node).then(mutation => {\n    if (mutation) {\n      perform([mutation], callback);\n    }\n  });\n}\nfunction resolveIcons(next) {\n  return function (maybeIconDefinition) {\n    let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n    let {\n      mask\n    } = params;\n    if (mask) {\n      mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n    }\n    return next(iconDefinition, _objectSpread2(_objectSpread2({}, params), {}, {\n      mask\n    }));\n  };\n}\nconst render = function (iconDefinition) {\n  let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  const {\n    transform = meaninglessTransform,\n    symbol = false,\n    mask = null,\n    maskId = null,\n    title = null,\n    titleId = null,\n    classes = [],\n    attributes = {},\n    styles = {}\n  } = params;\n  if (!iconDefinition) return;\n  const {\n    prefix,\n    iconName,\n    icon\n  } = iconDefinition;\n  return domVariants(_objectSpread2({\n    type: 'icon'\n  }, iconDefinition), () => {\n    callHooks('beforeDOMElementCreation', {\n      iconDefinition,\n      params\n    });\n    if (config.autoA11y) {\n      if (title) {\n        attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n      } else {\n        attributes['aria-hidden'] = 'true';\n        attributes['focusable'] = 'false';\n      }\n    }\n    return makeInlineSvgAbstract({\n      icons: {\n        main: asFoundIcon(icon),\n        mask: mask ? asFoundIcon(mask.icon) : {\n          found: false,\n          width: null,\n          height: null,\n          icon: {}\n        }\n      },\n      prefix,\n      iconName,\n      transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n      symbol,\n      title,\n      maskId,\n      titleId,\n      extra: {\n        attributes,\n        styles,\n        classes\n      }\n    });\n  });\n};\nvar ReplaceElements = {\n  mixout() {\n    return {\n      icon: resolveIcons(render)\n    };\n  },\n  hooks() {\n    return {\n      mutationObserverCallbacks(accumulator) {\n        accumulator.treeCallback = onTree;\n        accumulator.nodeCallback = onNode;\n        return accumulator;\n      }\n    };\n  },\n  provides(providers$$1) {\n    providers$$1.i2svg = function (params) {\n      const {\n        node = DOCUMENT,\n        callback = () => {}\n      } = params;\n      return onTree(node, callback);\n    };\n    providers$$1.generateSvgReplacementMutation = function (node, nodeMeta) {\n      const {\n        iconName,\n        title,\n        titleId,\n        prefix,\n        transform,\n        symbol,\n        mask,\n        maskId,\n        extra\n      } = nodeMeta;\n      return new Promise((resolve, reject) => {\n        Promise.all([findIcon(iconName, prefix), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({\n          found: false,\n          width: 512,\n          height: 512,\n          icon: {}\n        })]).then(_ref => {\n          let [main, mask] = _ref;\n          resolve([node, makeInlineSvgAbstract({\n            icons: {\n              main,\n              mask\n            },\n            prefix,\n            iconName,\n            transform,\n            symbol,\n            maskId,\n            title,\n            titleId,\n            extra,\n            watchable: true\n          })]);\n        }).catch(reject);\n      });\n    };\n    providers$$1.generateAbstractIcon = function (_ref2) {\n      let {\n        children,\n        attributes,\n        main,\n        transform,\n        styles\n      } = _ref2;\n      const styleString = joinStyles(styles);\n      if (styleString.length > 0) {\n        attributes['style'] = styleString;\n      }\n      let nextChild;\n      if (transformIsMeaningful(transform)) {\n        nextChild = callProvided('generateAbstractTransformGrouping', {\n          main,\n          transform,\n          containerWidth: main.width,\n          iconWidth: main.width\n        });\n      }\n      children.push(nextChild || main.icon);\n      return {\n        children,\n        attributes\n      };\n    };\n  }\n};\n\nvar Layers = {\n  mixout() {\n    return {\n      layer(assembler) {\n        let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        const {\n          classes = []\n        } = params;\n        return domVariants({\n          type: 'layer'\n        }, () => {\n          callHooks('beforeDOMElementCreation', {\n            assembler,\n            params\n          });\n          let children = [];\n          assembler(args => {\n            Array.isArray(args) ? args.map(a => {\n              children = children.concat(a.abstract);\n            }) : children = children.concat(args.abstract);\n          });\n          return [{\n            tag: 'span',\n            attributes: {\n              class: [\"\".concat(config.cssPrefix, \"-layers\"), ...classes].join(' ')\n            },\n            children\n          }];\n        });\n      }\n    };\n  }\n};\n\nvar LayersCounter = {\n  mixout() {\n    return {\n      counter(content) {\n        let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        const {\n          title = null,\n          classes = [],\n          attributes = {},\n          styles = {}\n        } = params;\n        return domVariants({\n          type: 'counter',\n          content\n        }, () => {\n          callHooks('beforeDOMElementCreation', {\n            content,\n            params\n          });\n          return makeLayersCounterAbstract({\n            content: content.toString(),\n            title,\n            extra: {\n              attributes,\n              styles,\n              classes: [\"\".concat(config.cssPrefix, \"-layers-counter\"), ...classes]\n            }\n          });\n        });\n      }\n    };\n  }\n};\n\nvar LayersText = {\n  mixout() {\n    return {\n      text(content) {\n        let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        const {\n          transform = meaninglessTransform,\n          title = null,\n          classes = [],\n          attributes = {},\n          styles = {}\n        } = params;\n        return domVariants({\n          type: 'text',\n          content\n        }, () => {\n          callHooks('beforeDOMElementCreation', {\n            content,\n            params\n          });\n          return makeLayersTextAbstract({\n            content,\n            transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n            title,\n            extra: {\n              attributes,\n              styles,\n              classes: [\"\".concat(config.cssPrefix, \"-layers-text\"), ...classes]\n            }\n          });\n        });\n      }\n    };\n  },\n  provides(providers$$1) {\n    providers$$1.generateLayersText = function (node, nodeMeta) {\n      const {\n        title,\n        transform,\n        extra\n      } = nodeMeta;\n      let width = null;\n      let height = null;\n      if (IS_IE) {\n        const computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n        const boundingClientRect = node.getBoundingClientRect();\n        width = boundingClientRect.width / computedFontSize;\n        height = boundingClientRect.height / computedFontSize;\n      }\n      if (config.autoA11y && !title) {\n        extra.attributes['aria-hidden'] = 'true';\n      }\n      return Promise.resolve([node, makeLayersTextAbstract({\n        content: node.innerHTML,\n        width,\n        height,\n        transform,\n        title,\n        extra,\n        watchable: true\n      })]);\n    };\n  }\n};\n\nconst CLEAN_CONTENT_PATTERN = new RegExp('\\u{22}', 'ug');\nconst SECONDARY_UNICODE_RANGE = [1105920, 1112319];\nconst _FONT_FAMILY_WEIGHT_TO_PREFIX = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, {\n  FontAwesome: {\n    normal: 'fas',\n    400: 'fas'\n  }\n}), lt), wa), Yt);\nconst FONT_FAMILY_WEIGHT_TO_PREFIX = Object.keys(_FONT_FAMILY_WEIGHT_TO_PREFIX).reduce((acc, key) => {\n  acc[key.toLowerCase()] = _FONT_FAMILY_WEIGHT_TO_PREFIX[key];\n  return acc;\n}, {});\nconst FONT_FAMILY_WEIGHT_FALLBACK = Object.keys(FONT_FAMILY_WEIGHT_TO_PREFIX).reduce((acc, fontFamily) => {\n  const weights = FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamily];\n  acc[fontFamily] = weights[900] || [...Object.entries(weights)][0][1];\n  return acc;\n}, {});\nfunction hexValueFromContent(content) {\n  const cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n  const codePoint = codePointAt(cleaned, 0);\n  const isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1];\n  const isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false;\n  return {\n    value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned),\n    isSecondary: isPrependTen || isDoubled\n  };\n}\nfunction getPrefix(fontFamily, fontWeight) {\n  const fontFamilySanitized = fontFamily.replace(/^['\"]|['\"]$/g, '').toLowerCase();\n  const fontWeightInteger = parseInt(fontWeight);\n  const fontWeightSanitized = isNaN(fontWeightInteger) ? 'normal' : fontWeightInteger;\n  return (FONT_FAMILY_WEIGHT_TO_PREFIX[fontFamilySanitized] || {})[fontWeightSanitized] || FONT_FAMILY_WEIGHT_FALLBACK[fontFamilySanitized];\n}\nfunction replaceForPosition(node, position) {\n  const pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n  return new Promise((resolve, reject) => {\n    if (node.getAttribute(pendingAttribute) !== null) {\n      // This node is already being processed\n      return resolve();\n    }\n    const children = toArray(node.children);\n    const alreadyProcessedPseudoElement = children.filter(c$$1 => c$$1.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position)[0];\n    const styles = WINDOW.getComputedStyle(node, position);\n    const fontFamily = styles.getPropertyValue('font-family');\n    const fontFamilyMatch = fontFamily.match(FONT_FAMILY_PATTERN);\n    const fontWeight = styles.getPropertyValue('font-weight');\n    const content = styles.getPropertyValue('content');\n    if (alreadyProcessedPseudoElement && !fontFamilyMatch) {\n      // If we've already processed it but the current computed style does not result in a font-family,\n      // that probably means that a class name that was previously present to make the icon has been\n      // removed. So we now should delete the icon.\n      node.removeChild(alreadyProcessedPseudoElement);\n      return resolve();\n    } else if (fontFamilyMatch && content !== 'none' && content !== '') {\n      const content = styles.getPropertyValue('content');\n      let prefix = getPrefix(fontFamily, fontWeight);\n      const {\n        value: hexValue,\n        isSecondary\n      } = hexValueFromContent(content);\n      const isV4 = fontFamilyMatch[0].startsWith('FontAwesome');\n      let iconName = byUnicode(prefix, hexValue);\n      let iconIdentifier = iconName;\n      if (isV4) {\n        const iconName4 = byOldUnicode(hexValue);\n        if (iconName4.iconName && iconName4.prefix) {\n          iconName = iconName4.iconName;\n          prefix = iconName4.prefix;\n        }\n      }\n\n      // Only convert the pseudo element in this ::before/::after position into an icon if we haven't\n      // already done so with the same prefix and iconName\n      if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n        node.setAttribute(pendingAttribute, iconIdentifier);\n        if (alreadyProcessedPseudoElement) {\n          // Delete the old one, since we're replacing it with a new one\n          node.removeChild(alreadyProcessedPseudoElement);\n        }\n        const meta = blankMeta();\n        const {\n          extra\n        } = meta;\n        extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n        findIcon(iconName, prefix).then(main => {\n          const abstract = makeInlineSvgAbstract(_objectSpread2(_objectSpread2({}, meta), {}, {\n            icons: {\n              main,\n              mask: emptyCanonicalIcon()\n            },\n            prefix,\n            iconName: iconIdentifier,\n            extra,\n            watchable: true\n          }));\n          const element = DOCUMENT.createElementNS('http://www.w3.org/2000/svg', 'svg');\n          if (position === '::before') {\n            node.insertBefore(element, node.firstChild);\n          } else {\n            node.appendChild(element);\n          }\n          element.outerHTML = abstract.map(a$$1 => toHtml(a$$1)).join('\\n');\n          node.removeAttribute(pendingAttribute);\n          resolve();\n        }).catch(reject);\n      } else {\n        resolve();\n      }\n    } else {\n      resolve();\n    }\n  });\n}\nfunction replace(node) {\n  return Promise.all([replaceForPosition(node, '::before'), replaceForPosition(node, '::after')]);\n}\nfunction processable(node) {\n  return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\nfunction searchPseudoElements(root) {\n  if (!IS_DOM) return;\n  return new Promise((resolve, reject) => {\n    const operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n    const end = perf.begin('searchPseudoElements');\n    disableObservation();\n    Promise.all(operations).then(() => {\n      end();\n      enableObservation();\n      resolve();\n    }).catch(() => {\n      end();\n      enableObservation();\n      reject();\n    });\n  });\n}\nvar PseudoElements = {\n  hooks() {\n    return {\n      mutationObserverCallbacks(accumulator) {\n        accumulator.pseudoElementsCallback = searchPseudoElements;\n        return accumulator;\n      }\n    };\n  },\n  provides(providers) {\n    providers.pseudoElements2svg = function (params) {\n      const {\n        node = DOCUMENT\n      } = params;\n      if (config.searchPseudoElements) {\n        searchPseudoElements(node);\n      }\n    };\n  }\n};\n\nlet _unwatched = false;\nvar MutationObserver$1 = {\n  mixout() {\n    return {\n      dom: {\n        unwatch() {\n          disableObservation();\n          _unwatched = true;\n        }\n      }\n    };\n  },\n  hooks() {\n    return {\n      bootstrap() {\n        observe(chainHooks('mutationObserverCallbacks', {}));\n      },\n      noAuto() {\n        disconnect();\n      },\n      watch(params) {\n        const {\n          observeMutationsRoot\n        } = params;\n        if (_unwatched) {\n          enableObservation();\n        } else {\n          observe(chainHooks('mutationObserverCallbacks', {\n            observeMutationsRoot\n          }));\n        }\n      }\n    };\n  }\n};\n\nconst parseTransformString = transformString => {\n  let transform = {\n    size: 16,\n    x: 0,\n    y: 0,\n    flipX: false,\n    flipY: false,\n    rotate: 0\n  };\n  return transformString.toLowerCase().split(' ').reduce((acc, n) => {\n    const parts = n.toLowerCase().split('-');\n    const first = parts[0];\n    let rest = parts.slice(1).join('-');\n    if (first && rest === 'h') {\n      acc.flipX = true;\n      return acc;\n    }\n    if (first && rest === 'v') {\n      acc.flipY = true;\n      return acc;\n    }\n    rest = parseFloat(rest);\n    if (isNaN(rest)) {\n      return acc;\n    }\n    switch (first) {\n      case 'grow':\n        acc.size = acc.size + rest;\n        break;\n      case 'shrink':\n        acc.size = acc.size - rest;\n        break;\n      case 'left':\n        acc.x = acc.x - rest;\n        break;\n      case 'right':\n        acc.x = acc.x + rest;\n        break;\n      case 'up':\n        acc.y = acc.y - rest;\n        break;\n      case 'down':\n        acc.y = acc.y + rest;\n        break;\n      case 'rotate':\n        acc.rotate = acc.rotate + rest;\n        break;\n    }\n    return acc;\n  }, transform);\n};\nvar PowerTransforms = {\n  mixout() {\n    return {\n      parse: {\n        transform: transformString => {\n          return parseTransformString(transformString);\n        }\n      }\n    };\n  },\n  hooks() {\n    return {\n      parseNodeAttributes(accumulator, node) {\n        const transformString = node.getAttribute('data-fa-transform');\n        if (transformString) {\n          accumulator.transform = parseTransformString(transformString);\n        }\n        return accumulator;\n      }\n    };\n  },\n  provides(providers) {\n    providers.generateAbstractTransformGrouping = function (_ref) {\n      let {\n        main,\n        transform,\n        containerWidth,\n        iconWidth\n      } = _ref;\n      const outer = {\n        transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n      };\n      const innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n      const innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n      const innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n      const inner = {\n        transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n      };\n      const path = {\n        transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n      };\n      const operations = {\n        outer,\n        inner,\n        path\n      };\n      return {\n        tag: 'g',\n        attributes: _objectSpread2({}, operations.outer),\n        children: [{\n          tag: 'g',\n          attributes: _objectSpread2({}, operations.inner),\n          children: [{\n            tag: main.icon.tag,\n            children: main.icon.children,\n            attributes: _objectSpread2(_objectSpread2({}, main.icon.attributes), operations.path)\n          }]\n        }]\n      };\n    };\n  }\n};\n\nconst ALL_SPACE = {\n  x: 0,\n  y: 0,\n  width: '100%',\n  height: '100%'\n};\nfunction fillBlack(abstract) {\n  let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  if (abstract.attributes && (abstract.attributes.fill || force)) {\n    abstract.attributes.fill = 'black';\n  }\n  return abstract;\n}\nfunction deGroup(abstract) {\n  if (abstract.tag === 'g') {\n    return abstract.children;\n  } else {\n    return [abstract];\n  }\n}\nvar Masks = {\n  hooks() {\n    return {\n      parseNodeAttributes(accumulator, node) {\n        const maskData = node.getAttribute('data-fa-mask');\n        const mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(' ').map(i => i.trim()));\n        if (!mask.prefix) {\n          mask.prefix = getDefaultUsablePrefix();\n        }\n        accumulator.mask = mask;\n        accumulator.maskId = node.getAttribute('data-fa-mask-id');\n        return accumulator;\n      }\n    };\n  },\n  provides(providers) {\n    providers.generateAbstractMask = function (_ref) {\n      let {\n        children,\n        attributes,\n        main,\n        mask,\n        maskId: explicitMaskId,\n        transform\n      } = _ref;\n      const {\n        width: mainWidth,\n        icon: mainPath\n      } = main;\n      const {\n        width: maskWidth,\n        icon: maskPath\n      } = mask;\n      const trans = transformForSvg({\n        transform,\n        containerWidth: maskWidth,\n        iconWidth: mainWidth\n      });\n      const maskRect = {\n        tag: 'rect',\n        attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n          fill: 'white'\n        })\n      };\n      const maskInnerGroupChildrenMixin = mainPath.children ? {\n        children: mainPath.children.map(fillBlack)\n      } : {};\n      const maskInnerGroup = {\n        tag: 'g',\n        attributes: _objectSpread2({}, trans.inner),\n        children: [fillBlack(_objectSpread2({\n          tag: mainPath.tag,\n          attributes: _objectSpread2(_objectSpread2({}, mainPath.attributes), trans.path)\n        }, maskInnerGroupChildrenMixin))]\n      };\n      const maskOuterGroup = {\n        tag: 'g',\n        attributes: _objectSpread2({}, trans.outer),\n        children: [maskInnerGroup]\n      };\n      const maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n      const clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n      const maskTag = {\n        tag: 'mask',\n        attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n          id: maskId,\n          maskUnits: 'userSpaceOnUse',\n          maskContentUnits: 'userSpaceOnUse'\n        }),\n        children: [maskRect, maskOuterGroup]\n      };\n      const defs = {\n        tag: 'defs',\n        children: [{\n          tag: 'clipPath',\n          attributes: {\n            id: clipId\n          },\n          children: deGroup(maskPath)\n        }, maskTag]\n      };\n      children.push(defs, {\n        tag: 'rect',\n        attributes: _objectSpread2({\n          fill: 'currentColor',\n          'clip-path': \"url(#\".concat(clipId, \")\"),\n          mask: \"url(#\".concat(maskId, \")\")\n        }, ALL_SPACE)\n      });\n      return {\n        children,\n        attributes\n      };\n    };\n  }\n};\n\nvar MissingIconIndicator = {\n  provides(providers) {\n    let reduceMotion = false;\n    if (WINDOW.matchMedia) {\n      reduceMotion = WINDOW.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    }\n    providers.missingIconAbstract = function () {\n      const gChildren = [];\n      const FILL = {\n        fill: 'currentColor'\n      };\n      const ANIMATION_BASE = {\n        attributeType: 'XML',\n        repeatCount: 'indefinite',\n        dur: '2s'\n      };\n\n      // Ring\n      gChildren.push({\n        tag: 'path',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n        })\n      });\n      const OPACITY_ANIMATE = _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n        attributeName: 'opacity'\n      });\n      const dot = {\n        tag: 'circle',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          cx: '256',\n          cy: '364',\n          r: '28'\n        }),\n        children: []\n      };\n      if (!reduceMotion) {\n        dot.children.push({\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n            attributeName: 'r',\n            values: '28;14;28;28;14;28;'\n          })\n        }, {\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n            values: '1;0;1;1;0;1;'\n          })\n        });\n      }\n      gChildren.push(dot);\n      gChildren.push({\n        tag: 'path',\n        attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n          opacity: '1',\n          d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n        }),\n        children: reduceMotion ? [] : [{\n          tag: 'animate',\n          attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n            values: '1;0;0;0;0;1;'\n          })\n        }]\n      });\n      if (!reduceMotion) {\n        // Exclamation\n        gChildren.push({\n          tag: 'path',\n          attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n            opacity: '0',\n            d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n          }),\n          children: [{\n            tag: 'animate',\n            attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n              values: '0;0;1;1;0;0;'\n            })\n          }]\n        });\n      }\n      return {\n        tag: 'g',\n        attributes: {\n          'class': 'missing'\n        },\n        children: gChildren\n      };\n    };\n  }\n};\n\nvar SvgSymbols = {\n  hooks() {\n    return {\n      parseNodeAttributes(accumulator, node) {\n        const symbolData = node.getAttribute('data-fa-symbol');\n        const symbol = symbolData === null ? false : symbolData === '' ? true : symbolData;\n        accumulator['symbol'] = symbol;\n        return accumulator;\n      }\n    };\n  }\n};\n\nvar plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols];\n\nregisterPlugins(plugins, {\n  mixoutsTo: api\n});\nconst noAuto$1 = api.noAuto;\nconst config$1 = api.config;\nconst library$1 = api.library;\nconst dom$1 = api.dom;\nconst parse$1 = api.parse;\nconst findIconDefinition$1 = api.findIconDefinition;\nconst toHtml$1 = api.toHtml;\nconst icon = api.icon;\nconst layer = api.layer;\nconst text = api.text;\nconst counter = api.counter;\n\nexport { noAuto$1 as noAuto, config$1 as config, library$1 as library, dom$1 as dom, parse$1 as parse, findIconDefinition$1 as findIconDefinition, toHtml$1 as toHtml, icon, layer, text, counter, api };\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 * 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","import { parse, icon } from '@fortawesome/fontawesome-svg-core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    enumerableOnly && (symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    })), keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = null != arguments[i] ? arguments[i] : {};\n    i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n    });\n  }\n\n  return target;\n}\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  }, _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\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 _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n// Get CSS class list from a props object\nfunction classList(props) {\n  var _classes;\n\n  var beat = props.beat,\n      fade = props.fade,\n      beatFade = props.beatFade,\n      bounce = props.bounce,\n      shake = props.shake,\n      flash = props.flash,\n      spin = props.spin,\n      spinPulse = props.spinPulse,\n      spinReverse = props.spinReverse,\n      pulse = props.pulse,\n      fixedWidth = props.fixedWidth,\n      inverse = props.inverse,\n      border = props.border,\n      listItem = props.listItem,\n      flip = props.flip,\n      size = props.size,\n      rotation = props.rotation,\n      pull = props.pull; // map of CSS class names to properties\n\n  var classes = (_classes = {\n    'fa-beat': beat,\n    'fa-fade': fade,\n    'fa-beat-fade': beatFade,\n    'fa-bounce': bounce,\n    'fa-shake': shake,\n    'fa-flash': flash,\n    'fa-spin': spin,\n    'fa-spin-reverse': spinReverse,\n    'fa-spin-pulse': spinPulse,\n    'fa-pulse': pulse,\n    'fa-fw': fixedWidth,\n    'fa-inverse': inverse,\n    'fa-border': border,\n    'fa-li': listItem,\n    'fa-flip': flip === true,\n    'fa-flip-horizontal': flip === 'horizontal' || flip === 'both',\n    'fa-flip-vertical': flip === 'vertical' || flip === 'both'\n  }, _defineProperty(_classes, \"fa-\".concat(size), typeof size !== 'undefined' && size !== null), _defineProperty(_classes, \"fa-rotate-\".concat(rotation), typeof rotation !== 'undefined' && rotation !== null && rotation !== 0), _defineProperty(_classes, \"fa-pull-\".concat(pull), typeof pull !== 'undefined' && pull !== null), _defineProperty(_classes, 'fa-swap-opacity', props.swapOpacity), _classes); // map over all the keys in the classes object\n  // return an array of the keys where the value for the key is not null\n\n  return Object.keys(classes).map(function (key) {\n    return classes[key] ? key : null;\n  }).filter(function (key) {\n    return key;\n  });\n}\n\n// Camelize taken from humps\n// humps is copyright © 2012+ Dom Christie\n// Released under the MIT license.\n// Performant way to determine if object coerces to a number\nfunction _isNumerical(obj) {\n  obj = obj - 0; // eslint-disable-next-line no-self-compare\n\n  return obj === obj;\n}\n\nfunction camelize(string) {\n  if (_isNumerical(string)) {\n    return string;\n  } // eslint-disable-next-line no-useless-escape\n\n\n  string = string.replace(/[\\-_\\s]+(.)?/g, function (match, chr) {\n    return chr ? chr.toUpperCase() : '';\n  }); // Ensure 1st char is always lowercase\n\n  return string.substr(0, 1).toLowerCase() + string.substr(1);\n}\n\nvar _excluded = [\"style\"];\n\nfunction capitalize(val) {\n  return val.charAt(0).toUpperCase() + val.slice(1);\n}\n\nfunction styleToObject(style) {\n  return style.split(';').map(function (s) {\n    return s.trim();\n  }).filter(function (s) {\n    return s;\n  }).reduce(function (acc, pair) {\n    var i = pair.indexOf(':');\n    var prop = camelize(pair.slice(0, i));\n    var value = pair.slice(i + 1).trim();\n    prop.startsWith('webkit') ? acc[capitalize(prop)] = value : acc[prop] = value;\n    return acc;\n  }, {});\n}\n\nfunction convert(createElement, element) {\n  var extraProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  if (typeof element === 'string') {\n    return element;\n  }\n\n  var children = (element.children || []).map(function (child) {\n    return convert(createElement, child);\n  });\n  /* eslint-disable dot-notation */\n\n  var mixins = Object.keys(element.attributes || {}).reduce(function (acc, key) {\n    var val = element.attributes[key];\n\n    switch (key) {\n      case 'class':\n        acc.attrs['className'] = val;\n        delete element.attributes['class'];\n        break;\n\n      case 'style':\n        acc.attrs['style'] = styleToObject(val);\n        break;\n\n      default:\n        if (key.indexOf('aria-') === 0 || key.indexOf('data-') === 0) {\n          acc.attrs[key.toLowerCase()] = val;\n        } else {\n          acc.attrs[camelize(key)] = val;\n        }\n\n    }\n\n    return acc;\n  }, {\n    attrs: {}\n  });\n\n  var _extraProps$style = extraProps.style,\n      existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style,\n      remaining = _objectWithoutProperties(extraProps, _excluded);\n\n  mixins.attrs['style'] = _objectSpread2(_objectSpread2({}, mixins.attrs['style']), existingStyle);\n  /* eslint-enable */\n\n  return createElement.apply(void 0, [element.tag, _objectSpread2(_objectSpread2({}, mixins.attrs), remaining)].concat(_toConsumableArray(children)));\n}\n\nvar PRODUCTION = false;\n\ntry {\n  PRODUCTION = process.env.NODE_ENV === 'production';\n} catch (e) {}\n\nfunction log () {\n  if (!PRODUCTION && console && typeof console.error === 'function') {\n    var _console;\n\n    (_console = console).error.apply(_console, arguments);\n  }\n}\n\nfunction normalizeIconArgs(icon) {\n  // this has everything that it needs to be rendered which means it was probably imported\n  // directly from an icon svg package\n  if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName && icon.icon) {\n    return icon;\n  }\n\n  if (parse.icon) {\n    return parse.icon(icon);\n  } // if the icon is null, there's nothing to do\n\n\n  if (icon === null) {\n    return null;\n  } // if the icon is an object and has a prefix and an icon name, return it\n\n\n  if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName) {\n    return icon;\n  } // if it's an array with length of two\n\n\n  if (Array.isArray(icon) && icon.length === 2) {\n    // use the first item as prefix, second as icon name\n    return {\n      prefix: icon[0],\n      iconName: icon[1]\n    };\n  } // if it's a string, use it as the icon name\n\n\n  if (typeof icon === 'string') {\n    return {\n      prefix: 'fas',\n      iconName: icon\n    };\n  }\n}\n\n// creates an object with a key of key\n// and a value of value\n// if certain conditions are met\nfunction objectWithKey(key, value) {\n  // if the value is a non-empty array\n  // or it's not an array but it is truthy\n  // then create the object with the key and the value\n  // if not, return an empty array\n  return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {};\n}\n\nvar defaultProps = {\n  border: false,\n  className: '',\n  mask: null,\n  maskId: null,\n  fixedWidth: false,\n  inverse: false,\n  flip: false,\n  icon: null,\n  listItem: false,\n  pull: null,\n  pulse: false,\n  rotation: null,\n  size: null,\n  spin: false,\n  spinPulse: false,\n  spinReverse: false,\n  beat: false,\n  fade: false,\n  beatFade: false,\n  bounce: false,\n  shake: false,\n  symbol: false,\n  title: '',\n  titleId: null,\n  transform: null,\n  swapOpacity: false\n};\nvar FontAwesomeIcon = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var allProps = _objectSpread2(_objectSpread2({}, defaultProps), props);\n\n  var iconArgs = allProps.icon,\n      maskArgs = allProps.mask,\n      symbol = allProps.symbol,\n      className = allProps.className,\n      title = allProps.title,\n      titleId = allProps.titleId,\n      maskId = allProps.maskId;\n  var iconLookup = normalizeIconArgs(iconArgs);\n  var classes = objectWithKey('classes', [].concat(_toConsumableArray(classList(allProps)), _toConsumableArray((className || '').split(' '))));\n  var transform = objectWithKey('transform', typeof allProps.transform === 'string' ? parse.transform(allProps.transform) : allProps.transform);\n  var mask = objectWithKey('mask', normalizeIconArgs(maskArgs));\n  var renderedIcon = icon(iconLookup, _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, classes), transform), mask), {}, {\n    symbol: symbol,\n    title: title,\n    titleId: titleId,\n    maskId: maskId\n  }));\n\n  if (!renderedIcon) {\n    log('Could not find icon', iconLookup);\n    return null;\n  }\n\n  var abstract = renderedIcon.abstract;\n  var extraProps = {\n    ref: ref\n  };\n  Object.keys(allProps).forEach(function (key) {\n    // eslint-disable-next-line no-prototype-builtins\n    if (!defaultProps.hasOwnProperty(key)) {\n      extraProps[key] = allProps[key];\n    }\n  });\n  return convertCurry(abstract[0], extraProps);\n});\nFontAwesomeIcon.displayName = 'FontAwesomeIcon';\nFontAwesomeIcon.propTypes = {\n  beat: PropTypes.bool,\n  border: PropTypes.bool,\n  beatFade: PropTypes.bool,\n  bounce: PropTypes.bool,\n  className: PropTypes.string,\n  fade: PropTypes.bool,\n  flash: PropTypes.bool,\n  mask: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n  maskId: PropTypes.string,\n  fixedWidth: PropTypes.bool,\n  inverse: PropTypes.bool,\n  flip: PropTypes.oneOf([true, false, 'horizontal', 'vertical', 'both']),\n  icon: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n  listItem: PropTypes.bool,\n  pull: PropTypes.oneOf(['right', 'left']),\n  pulse: PropTypes.bool,\n  rotation: PropTypes.oneOf([0, 90, 180, 270]),\n  shake: PropTypes.bool,\n  size: PropTypes.oneOf(['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),\n  spin: PropTypes.bool,\n  spinPulse: PropTypes.bool,\n  spinReverse: PropTypes.bool,\n  symbol: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n  title: PropTypes.string,\n  titleId: PropTypes.string,\n  transform: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n  swapOpacity: PropTypes.bool\n};\nvar convertCurry = convert.bind(null, React.createElement);\n\nexport { FontAwesomeIcon };\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","import { faMinus, faPlus } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport type { ReactNode } from \"react\"\nimport cx from \"classnames\"\n\nexport const ExpandableToggle = ({\n    label,\n    content,\n    alwaysVisibleDescription,\n    isExpandedDefault = false,\n    isStacked = false,\n    hasTeaser = false,\n}: {\n    label: string\n    content?: ReactNode\n    alwaysVisibleDescription?: ReactNode\n    isExpandedDefault?: boolean\n    isStacked?: boolean\n    hasTeaser?: boolean\n}) => (\n    <details\n        className={cx(\"ExpandableToggle\", {\n            \"ExpandableToggle--stacked\": isStacked,\n            \"ExpandableToggle--teaser\": hasTeaser,\n        })}\n        open={isExpandedDefault}\n    >\n        <summary className=\"ExpandableToggle__container\">\n            <div className=\"ExpandableToggle__button\">\n                <div>\n                    <h4 className=\"ExpandableToggle__title\">{label}</h4>\n                    {alwaysVisibleDescription && (\n                        <div className=\"ExpandableToggle__description\">\n                            {alwaysVisibleDescription}\n                        </div>\n                    )}\n                </div>\n\n                {/* We show both the opened and closed icons, and use CSS to hide/show them based on the state */}\n                <FontAwesomeIcon\n                    className=\"ExpandableToggle__icon ExpandableToggle__icon--expand\"\n                    icon={faPlus}\n                />\n                <FontAwesomeIcon\n                    className=\"ExpandableToggle__icon ExpandableToggle__icon--collapse\"\n                    icon={faMinus}\n                />\n            </div>\n\n            {/* If there is a teaser, we need to place the content element inside the summary so it is visible even when the details element is closed.\n            Also, make it inert so it isn't included in the browser Cmd-F search - instead, the browser will auto-expand it when searching for content that's currently collapsed */}\n            {hasTeaser && (\n                <div className=\"ExpandableToggle__teaser\" inert>\n                    {content}\n                </div>\n            )}\n        </summary>\n        <div className=\"ExpandableToggle__content\">{content}</div>\n    </details>\n)\n","export const DATAPAGE_ABOUT_THIS_DATA_SECTION_ID = \"about-this-data\" as const\nexport const DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID =\n    \"sources-and-processing\" as const\nexport const REUSE_THIS_WORK_SECTION_ID = \"reuse-this-work\"\n","import * as React from \"react\"\nimport {\n    OwidProcessingLevel,\n    getPhraseForProcessingLevel,\n    splitSourceTextIntoFragments,\n    formatSourceDate,\n    getDateRange,\n} from \"@ourworldindata/utils\"\nimport { DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID } from \"../SharedDataPageConstants.js\"\nimport { SimpleMarkdownText } from \"../SimpleMarkdownText.js\"\n\nexport const makeSource = ({\n    attribution,\n    owidProcessingLevel,\n    isEmbeddedInADataPage,\n}: {\n    attribution?: string\n    owidProcessingLevel?: OwidProcessingLevel\n    isEmbeddedInADataPage?: boolean\n}): React.ReactNode => {\n    if (!attribution) return null\n    const isEmbedded = isEmbeddedInADataPage ?? true\n    const processingLevelPhrase =\n        getPhraseForProcessingLevel(owidProcessingLevel)\n    const hideProcessingPhase =\n        attribution.toLowerCase() === \"our world in data\"\n    return (\n        <>\n            <SimpleMarkdownText text={attribution} useParagraphs={false} />\n            {!hideProcessingPhase && (\n                <>\n                    {\" – \"}\n                    {isEmbedded ? (\n                        <a\n                            href={`#${DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID}`}\n                        >\n                            {processingLevelPhrase}\n                        </a>\n                    ) : (\n                        processingLevelPhrase\n                    )}{\" \"}\n                    by Our World in Data\n                </>\n            )}\n        </>\n    )\n}\n\nexport const makeLastUpdated = ({\n    lastUpdated,\n}: {\n    lastUpdated?: string\n}): React.ReactNode => {\n    return formatSourceDate(lastUpdated, \"MMMM D, YYYY\")\n}\n\nexport const makeNextUpdate = ({\n    nextUpdate,\n}: {\n    nextUpdate?: string\n}): React.ReactNode => {\n    return formatSourceDate(nextUpdate, \"MMMM YYYY\")\n}\n\nexport const makeDateRange = ({\n    dateRange,\n}: {\n    dateRange?: string\n}): React.ReactNode => {\n    if (!dateRange) return null\n    return getDateRange(dateRange)\n}\n\nexport const makeUnit = ({ unit }: { unit?: string }): React.ReactNode => {\n    if (!unit) return null\n    return unit\n}\n\nexport const makeUnitConversionFactor = ({\n    unitConversionFactor,\n}: {\n    unitConversionFactor?: number\n}): React.ReactNode => {\n    if (!unitConversionFactor || unitConversionFactor === 1) return null\n    return unitConversionFactor\n}\n\nexport const makeLinks = ({ link }: { link?: string }): React.ReactNode => {\n    if (!link) return null\n    const linkFragments = splitSourceTextIntoFragments(link)\n    return linkFragments.map((urlOrText, index) => {\n        const isUrl = urlOrText.startsWith(\"http\") && !urlOrText.match(/\\s/)\n        return (\n            <React.Fragment key={urlOrText}>\n                <span>\n                    {isUrl ? (\n                        <a href={urlOrText}>{urlOrText}</a>\n                    ) : (\n                        <SimpleMarkdownText\n                            text={urlOrText}\n                            useParagraphs={false}\n                        />\n                    )}\n                </span>\n                {index < linkFragments.length - 1 && <br />}\n            </React.Fragment>\n        )\n    })\n}\n","import { SimpleMarkdownText } from \"../SimpleMarkdownText.js\"\nimport { faArrowDown } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\n\nexport interface IndicatorProcessingProps {\n    descriptionProcessing: string | undefined\n}\n\nexport const IndicatorProcessing = (props: IndicatorProcessingProps) => {\n    return (\n        <div className=\"indicator-processing\">\n            <div className=\"data-processing\">\n                <p>\n                    All data and visualizations on Our World in Data rely on\n                    data sourced from one or several original data providers.\n                    Preparing this original data involves several processing\n                    steps. Depending on the data, this can include standardizing\n                    country names and world region definitions, converting\n                    units, calculating derived indicators such as per capita\n                    measures, as well as adding or adapting metadata such as the\n                    name or the description given to an indicator.\n                </p>\n                <p>\n                    At the link below you can find a detailed description of the\n                    structure of our data pipeline, including links to all the\n                    code used to prepare data across Our World in Data.\n                </p>\n            </div>\n            <a\n                href=\"https://docs.owid.io/projects/etl/\"\n                className=\"indicator-processing__link\"\n            >\n                Read about our data pipeline\n                <FontAwesomeIcon icon={faArrowDown} />\n            </a>\n            {props.descriptionProcessing && (\n                <div className=\"indicator-processing-callout\">\n                    <h5 className=\"indicator-processing-callout__title\">\n                        Notes on our processing step for this indicator\n                    </h5>\n                    <div className=\"indicator-processing-callout__content\">\n                        <SimpleMarkdownText\n                            text={props.descriptionProcessing.trim()}\n                        />\n                    </div>\n                </div>\n            )}\n        </div>\n    )\n}\n","import {createContext as $95phC$createContext} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $4e85f108e88277b8$export$b085522c77523c51 = (0, $95phC$createContext)(null);\nconst $4e85f108e88277b8$export$ebe63fadcdce34ed = (0, $95phC$createContext)(null);\nconst $4e85f108e88277b8$export$44644b8a16031b5b = (0, $95phC$createContext)(null);\nconst $4e85f108e88277b8$export$717b2c0a523a0b53 = (0, $95phC$createContext)(null);\nconst $4e85f108e88277b8$export$265015d6dc85bf21 = (0, $95phC$createContext)(null);\nconst $4e85f108e88277b8$export$d688439359537581 = (0, $95phC$createContext)({});\nconst $4e85f108e88277b8$export$b0d3ecf7112093a7 = (0, $95phC$createContext)(null);\nconst $4e85f108e88277b8$export$698f465ec27e93df = (0, $95phC$createContext)(null);\n\n\nexport {$4e85f108e88277b8$export$b085522c77523c51 as CheckboxContext, $4e85f108e88277b8$export$ebe63fadcdce34ed as ColorAreaContext, $4e85f108e88277b8$export$44644b8a16031b5b as ColorFieldContext, $4e85f108e88277b8$export$717b2c0a523a0b53 as ColorSliderContext, $4e85f108e88277b8$export$265015d6dc85bf21 as ColorWheelContext, $4e85f108e88277b8$export$d688439359537581 as HeadingContext, $4e85f108e88277b8$export$b0d3ecf7112093a7 as SelectableCollectionContext, $4e85f108e88277b8$export$698f465ec27e93df as FieldInputContext};\n//# sourceMappingURL=RSPContexts.module.js.map\n","import $HgANd$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c = typeof document !== 'undefined' ? (0, $HgANd$react).useLayoutEffect : ()=>{};\n\n\nexport {$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c as useLayoutEffect};\n//# sourceMappingURL=useLayoutEffect.module.js.map\n","import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useState as $fCAlL$useState, useRef as $fCAlL$useRef, useCallback as $fCAlL$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $1dbecbe27a04f9af$export$14d238f342723f25(defaultValue) {\n    let [value, setValue] = (0, $fCAlL$useState)(defaultValue);\n    // Keep an up to date copy of value in a ref so we can access the current value in the generator.\n    // This allows us to maintain a stable queue function.\n    let currValue = (0, $fCAlL$useRef)(value);\n    let effect = (0, $fCAlL$useRef)(null);\n    // Store the function in a ref so we can always access the current version\n    // which has the proper `value` in scope.\n    let nextRef = (0, $fCAlL$useRef)(()=>{\n        if (!effect.current) return;\n        // Run the generator to the next yield.\n        let newValue = effect.current.next();\n        // If the generator is done, reset the effect.\n        if (newValue.done) {\n            effect.current = null;\n            return;\n        }\n        // If the value is the same as the current value,\n        // then continue to the next yield. Otherwise,\n        // set the value in state and wait for the next layout effect.\n        if (currValue.current === newValue.value) nextRef.current();\n        else setValue(newValue.value);\n    });\n    (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n        currValue.current = value;\n        // If there is an effect currently running, continue to the next yield.\n        if (effect.current) nextRef.current();\n    });\n    let queue = (0, $fCAlL$useCallback)((fn)=>{\n        effect.current = fn(currValue.current);\n        nextRef.current();\n    }, [\n        nextRef\n    ]);\n    return [\n        value,\n        queue\n    ];\n}\n\n\nexport {$1dbecbe27a04f9af$export$14d238f342723f25 as useValueEffect};\n//# sourceMappingURL=useValueEffect.module.js.map\n","import $670gB$react, {useContext as $670gB$useContext, useState as $670gB$useState, useMemo as $670gB$useMemo, useLayoutEffect as $670gB$useLayoutEffect, useRef as $670gB$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rulesdir/useLayoutEffectRule\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst $b5e257d569688ac6$var$defaultContext = {\n    prefix: String(Math.round(Math.random() * 10000000000)),\n    current: 0\n};\nconst $b5e257d569688ac6$var$SSRContext = /*#__PURE__*/ (0, $670gB$react).createContext($b5e257d569688ac6$var$defaultContext);\nconst $b5e257d569688ac6$var$IsSSRContext = /*#__PURE__*/ (0, $670gB$react).createContext(false);\n// This is only used in React < 18.\nfunction $b5e257d569688ac6$var$LegacySSRProvider(props) {\n    let cur = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);\n    let counter = $b5e257d569688ac6$var$useCounter(cur === $b5e257d569688ac6$var$defaultContext);\n    let [isSSR, setIsSSR] = (0, $670gB$useState)(true);\n    let value = (0, $670gB$useMemo)(()=>({\n            // If this is the first SSRProvider, start with an empty string prefix, otherwise\n            // append and increment the counter.\n            prefix: cur === $b5e257d569688ac6$var$defaultContext ? '' : `${cur.prefix}-${counter}`,\n            current: 0\n        }), [\n        cur,\n        counter\n    ]);\n    // If on the client, and the component was initially server rendered,\n    // then schedule a layout effect to update the component after hydration.\n    if (typeof document !== 'undefined') // This if statement technically breaks the rules of hooks, but is safe\n    // because the condition never changes after mounting.\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    (0, $670gB$useLayoutEffect)(()=>{\n        setIsSSR(false);\n    }, []);\n    return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$SSRContext.Provider, {\n        value: value\n    }, /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$IsSSRContext.Provider, {\n        value: isSSR\n    }, props.children));\n}\nlet $b5e257d569688ac6$var$warnedAboutSSRProvider = false;\nfunction $b5e257d569688ac6$export$9f8ac96af4b1b2ae(props) {\n    if (typeof (0, $670gB$react)['useId'] === 'function') {\n        if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !$b5e257d569688ac6$var$warnedAboutSSRProvider) {\n            console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n            $b5e257d569688ac6$var$warnedAboutSSRProvider = true;\n        }\n        return /*#__PURE__*/ (0, $670gB$react).createElement((0, $670gB$react).Fragment, null, props.children);\n    }\n    return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$LegacySSRProvider, props);\n}\nlet $b5e257d569688ac6$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);\nlet $b5e257d569688ac6$var$componentIds = new WeakMap();\nfunction $b5e257d569688ac6$var$useCounter(isDisabled = false) {\n    let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);\n    let ref = (0, $670gB$useRef)(null);\n    // eslint-disable-next-line rulesdir/pure-render\n    if (ref.current === null && !isDisabled) {\n        var _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner, _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n        // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n        // This means our id counter will be incremented twice instead of once. This is a problem because on the\n        // server, components are only rendered once and so ids generated on the server won't match the client.\n        // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n        // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n        // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n        // To ensure that we only increment the global counter once, we store the starting id for this component in\n        // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n        // Since React runs the second render immediately after the first, this is safe.\n        // @ts-ignore\n        let currentOwner = (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = (0, $670gB$react).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === void 0 ? void 0 : (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner = _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner === void 0 ? void 0 : _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner.current;\n        if (currentOwner) {\n            let prevComponentValue = $b5e257d569688ac6$var$componentIds.get(currentOwner);\n            if (prevComponentValue == null) // On the first render, and first call to useId, store the id and state in our weak map.\n            $b5e257d569688ac6$var$componentIds.set(currentOwner, {\n                id: ctx.current,\n                state: currentOwner.memoizedState\n            });\n            else if (currentOwner.memoizedState !== prevComponentValue.state) {\n                // On the second render, the memoizedState gets reset by React.\n                // Reset the counter, and remove from the weak map so we don't\n                // do this for subsequent useId calls.\n                ctx.current = prevComponentValue.id;\n                $b5e257d569688ac6$var$componentIds.delete(currentOwner);\n            }\n        }\n        // eslint-disable-next-line rulesdir/pure-render\n        ref.current = ++ctx.current;\n    }\n    // eslint-disable-next-line rulesdir/pure-render\n    return ref.current;\n}\nfunction $b5e257d569688ac6$var$useLegacySSRSafeId(defaultId) {\n    let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);\n    // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n    // provide a warning to hint to the developer to add one.\n    if (ctx === $b5e257d569688ac6$var$defaultContext && !$b5e257d569688ac6$var$canUseDOM && process.env.NODE_ENV !== 'production') console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n    let counter = $b5e257d569688ac6$var$useCounter(!!defaultId);\n    let prefix = ctx === $b5e257d569688ac6$var$defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n    return defaultId || `${prefix}-${counter}`;\n}\nfunction $b5e257d569688ac6$var$useModernSSRSafeId(defaultId) {\n    let id = (0, $670gB$react).useId();\n    let [didSSR] = (0, $670gB$useState)($b5e257d569688ac6$export$535bd6ca7f90a273());\n    let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${$b5e257d569688ac6$var$defaultContext.prefix}`;\n    return defaultId || `${prefix}-${id}`;\n}\nconst $b5e257d569688ac6$export$619500959fc48b26 = typeof (0, $670gB$react)['useId'] === 'function' ? $b5e257d569688ac6$var$useModernSSRSafeId : $b5e257d569688ac6$var$useLegacySSRSafeId;\nfunction $b5e257d569688ac6$var$getSnapshot() {\n    return false;\n}\nfunction $b5e257d569688ac6$var$getServerSnapshot() {\n    return true;\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction $b5e257d569688ac6$var$subscribe(onStoreChange) {\n    // noop\n    return ()=>{};\n}\nfunction $b5e257d569688ac6$export$535bd6ca7f90a273() {\n    // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n    if (typeof (0, $670gB$react)['useSyncExternalStore'] === 'function') return (0, $670gB$react)['useSyncExternalStore']($b5e257d569688ac6$var$subscribe, $b5e257d569688ac6$var$getSnapshot, $b5e257d569688ac6$var$getServerSnapshot);\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    return (0, $670gB$useContext)($b5e257d569688ac6$var$IsSSRContext);\n}\n\n\nexport {$b5e257d569688ac6$export$9f8ac96af4b1b2ae as SSRProvider, $b5e257d569688ac6$export$535bd6ca7f90a273 as useIsSSR, $b5e257d569688ac6$export$619500959fc48b26 as useSSRSafeId};\n//# sourceMappingURL=SSRProvider.module.js.map\n","import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useValueEffect as $1dbecbe27a04f9af$export$14d238f342723f25} from \"./useValueEffect.mjs\";\nimport {useState as $eKkEp$useState, useRef as $eKkEp$useRef, useEffect as $eKkEp$useEffect, useCallback as $eKkEp$useCallback} from \"react\";\nimport {useSSRSafeId as $eKkEp$useSSRSafeId} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n// copied from SSRProvider.tsx to reduce exports, if needed again, consider sharing\nlet $bdb11010cef70236$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);\nlet $bdb11010cef70236$export$d41a04c74483c6ef = new Map();\n// This allows us to clean up the idsUpdaterMap when the id is no longer used.\n// Map is a strong reference, so unused ids wouldn't be cleaned up otherwise.\n// This can happen in suspended components where mount/unmount is not called.\nlet $bdb11010cef70236$var$registry;\nif (typeof FinalizationRegistry !== 'undefined') $bdb11010cef70236$var$registry = new FinalizationRegistry((heldValue)=>{\n    $bdb11010cef70236$export$d41a04c74483c6ef.delete(heldValue);\n});\nfunction $bdb11010cef70236$export$f680877a34711e37(defaultId) {\n    let [value, setValue] = (0, $eKkEp$useState)(defaultId);\n    let nextId = (0, $eKkEp$useRef)(null);\n    let res = (0, $eKkEp$useSSRSafeId)(value);\n    let cleanupRef = (0, $eKkEp$useRef)(null);\n    if ($bdb11010cef70236$var$registry) $bdb11010cef70236$var$registry.register(cleanupRef, res);\n    if ($bdb11010cef70236$var$canUseDOM) {\n        const cacheIdRef = $bdb11010cef70236$export$d41a04c74483c6ef.get(res);\n        if (cacheIdRef && !cacheIdRef.includes(nextId)) cacheIdRef.push(nextId);\n        else $bdb11010cef70236$export$d41a04c74483c6ef.set(res, [\n            nextId\n        ]);\n    }\n    (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n        let r = res;\n        return ()=>{\n            // In Suspense, the cleanup function may be not called\n            // when it is though, also remove it from the finalization registry.\n            if ($bdb11010cef70236$var$registry) $bdb11010cef70236$var$registry.unregister(cleanupRef);\n            $bdb11010cef70236$export$d41a04c74483c6ef.delete(r);\n        };\n    }, [\n        res\n    ]);\n    // This cannot cause an infinite loop because the ref is always cleaned up.\n    // eslint-disable-next-line\n    (0, $eKkEp$useEffect)(()=>{\n        let newId = nextId.current;\n        if (newId) setValue(newId);\n        return ()=>{\n            if (newId) nextId.current = null;\n        };\n    });\n    return res;\n}\nfunction $bdb11010cef70236$export$cd8c9cb68f842629(idA, idB) {\n    if (idA === idB) return idA;\n    let setIdsA = $bdb11010cef70236$export$d41a04c74483c6ef.get(idA);\n    if (setIdsA) {\n        setIdsA.forEach((ref)=>ref.current = idB);\n        return idB;\n    }\n    let setIdsB = $bdb11010cef70236$export$d41a04c74483c6ef.get(idB);\n    if (setIdsB) {\n        setIdsB.forEach((ref)=>ref.current = idA);\n        return idA;\n    }\n    return idB;\n}\nfunction $bdb11010cef70236$export$b4cc09c592e8fdb8(depArray = []) {\n    let id = $bdb11010cef70236$export$f680877a34711e37();\n    let [resolvedId, setResolvedId] = (0, $1dbecbe27a04f9af$export$14d238f342723f25)(id);\n    let updateId = (0, $eKkEp$useCallback)(()=>{\n        setResolvedId(function*() {\n            yield id;\n            yield document.getElementById(id) ? id : undefined;\n        });\n    }, [\n        id,\n        setResolvedId\n    ]);\n    (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(updateId, [\n        id,\n        updateId,\n        ...depArray\n    ]);\n    return resolvedId;\n}\n\n\nexport {$bdb11010cef70236$export$d41a04c74483c6ef as idsUpdaterMap, $bdb11010cef70236$export$f680877a34711e37 as useId, $bdb11010cef70236$export$cd8c9cb68f842629 as mergeIds, $bdb11010cef70236$export$b4cc09c592e8fdb8 as useSlotId};\n//# sourceMappingURL=useId.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /**\n * Calls all functions in the order they were chained with the same arguments.\n */ function $ff5963eb1fccf552$export$e08e3b67e392101e(...callbacks) {\n    return (...args)=>{\n        for (let callback of callbacks)if (typeof callback === 'function') callback(...args);\n    };\n}\n\n\nexport {$ff5963eb1fccf552$export$e08e3b67e392101e as chain};\n//# sourceMappingURL=chain.module.js.map\n","const $431fbd86ca7dc216$export$b204af158042fbac = (el)=>{\n    var _el_ownerDocument;\n    return (_el_ownerDocument = el === null || el === void 0 ? void 0 : el.ownerDocument) !== null && _el_ownerDocument !== void 0 ? _el_ownerDocument : document;\n};\nconst $431fbd86ca7dc216$export$f21a1ffae260145a = (el)=>{\n    if (el && 'window' in el && el.window === el) return el;\n    const doc = $431fbd86ca7dc216$export$b204af158042fbac(el);\n    return doc.defaultView || window;\n};\n/**\n * Type guard that checks if a value is a Node. Verifies the presence and type of the nodeType property.\n */ function $431fbd86ca7dc216$var$isNode(value) {\n    return value !== null && typeof value === 'object' && 'nodeType' in value && typeof value.nodeType === 'number';\n}\nfunction $431fbd86ca7dc216$export$af51f0f06c0f328a(node) {\n    return $431fbd86ca7dc216$var$isNode(node) && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && 'host' in node;\n}\n\n\nexport {$431fbd86ca7dc216$export$b204af158042fbac as getOwnerDocument, $431fbd86ca7dc216$export$f21a1ffae260145a as getOwnerWindow, $431fbd86ca7dc216$export$af51f0f06c0f328a as isShadowRoot};\n//# sourceMappingURL=domHelpers.module.js.map\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $f4e2df6bd15f8569$var$_tableNestedRows = false;\nlet $f4e2df6bd15f8569$var$_shadowDOM = false;\nfunction $f4e2df6bd15f8569$export$d9d8a0f82de49530() {\n    $f4e2df6bd15f8569$var$_tableNestedRows = true;\n}\nfunction $f4e2df6bd15f8569$export$1b00cb14a96194e6() {\n    return $f4e2df6bd15f8569$var$_tableNestedRows;\n}\nfunction $f4e2df6bd15f8569$export$12b151d9882e9985() {\n    $f4e2df6bd15f8569$var$_shadowDOM = true;\n}\nfunction $f4e2df6bd15f8569$export$98658e8c59125e6a() {\n    return $f4e2df6bd15f8569$var$_shadowDOM;\n}\n\n\nexport {$f4e2df6bd15f8569$export$d9d8a0f82de49530 as enableTableNestedRows, $f4e2df6bd15f8569$export$1b00cb14a96194e6 as tableNestedRows, $f4e2df6bd15f8569$export$12b151d9882e9985 as enableShadowDOM, $f4e2df6bd15f8569$export$98658e8c59125e6a as shadowDOM};\n//# sourceMappingURL=module.js.map\n","import {isShadowRoot as $431fbd86ca7dc216$export$af51f0f06c0f328a} from \"./domHelpers.mjs\";\nimport {shadowDOM as $lcSu5$shadowDOM} from \"@react-stately/flags\";\n\n// Source: https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/DOMFunctions.ts#L16\n\n\nfunction $d4ee10de306f2510$export$4282f70798064fe0(node, otherNode) {\n    if (!(0, $lcSu5$shadowDOM)()) return otherNode && node ? node.contains(otherNode) : false;\n    if (!node || !otherNode) return false;\n    let currentNode = otherNode;\n    while(currentNode !== null){\n        if (currentNode === node) return true;\n        if (currentNode.tagName === 'SLOT' && currentNode.assignedSlot) // Element is slotted\n        currentNode = currentNode.assignedSlot.parentNode;\n        else if ((0, $431fbd86ca7dc216$export$af51f0f06c0f328a)(currentNode)) // Element is in shadow root\n        currentNode = currentNode.host;\n        else currentNode = currentNode.parentNode;\n    }\n    return false;\n}\nconst $d4ee10de306f2510$export$cd4e5573fbe2b576 = (doc = document)=>{\n    var _activeElement_shadowRoot;\n    if (!(0, $lcSu5$shadowDOM)()) return doc.activeElement;\n    let activeElement = doc.activeElement;\n    while(activeElement && 'shadowRoot' in activeElement && ((_activeElement_shadowRoot = activeElement.shadowRoot) === null || _activeElement_shadowRoot === void 0 ? void 0 : _activeElement_shadowRoot.activeElement))activeElement = activeElement.shadowRoot.activeElement;\n    return activeElement;\n};\nfunction $d4ee10de306f2510$export$e58f029f0fbfdb29(event) {\n    if ((0, $lcSu5$shadowDOM)() && event.target.shadowRoot) {\n        if (event.composedPath) return event.composedPath()[0];\n    }\n    return event.target;\n}\n\n\nexport {$d4ee10de306f2510$export$4282f70798064fe0 as nodeContains, $d4ee10de306f2510$export$cd4e5573fbe2b576 as getActiveElement, $d4ee10de306f2510$export$e58f029f0fbfdb29 as getEventTarget};\n//# sourceMappingURL=DOMFunctions.module.js.map\n","import {nodeContains as $d4ee10de306f2510$export$4282f70798064fe0} from \"./DOMFunctions.mjs\";\nimport {shadowDOM as $bJKXg$shadowDOM} from \"@react-stately/flags\";\n\n// https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/ShadowTreeWalker.ts\n\n\nclass $dfc540311bf7f109$export$63eb3ababa9c55c4 {\n    get currentNode() {\n        return this._currentNode;\n    }\n    set currentNode(node) {\n        if (!(0, $d4ee10de306f2510$export$4282f70798064fe0)(this.root, node)) throw new Error('Cannot set currentNode to a node that is not contained by the root node.');\n        const walkers = [];\n        let curNode = node;\n        let currentWalkerCurrentNode = node;\n        this._currentNode = node;\n        while(curNode && curNode !== this.root)if (curNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n            const shadowRoot = curNode;\n            const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n                acceptNode: this._acceptNode\n            });\n            walkers.push(walker);\n            walker.currentNode = currentWalkerCurrentNode;\n            this._currentSetFor.add(walker);\n            curNode = currentWalkerCurrentNode = shadowRoot.host;\n        } else curNode = curNode.parentNode;\n        const walker = this._doc.createTreeWalker(this.root, this.whatToShow, {\n            acceptNode: this._acceptNode\n        });\n        walkers.push(walker);\n        walker.currentNode = currentWalkerCurrentNode;\n        this._currentSetFor.add(walker);\n        this._walkerStack = walkers;\n    }\n    get doc() {\n        return this._doc;\n    }\n    firstChild() {\n        let currentNode = this.currentNode;\n        let newNode = this.nextNode();\n        if (!(0, $d4ee10de306f2510$export$4282f70798064fe0)(currentNode, newNode)) {\n            this.currentNode = currentNode;\n            return null;\n        }\n        if (newNode) this.currentNode = newNode;\n        return newNode;\n    }\n    lastChild() {\n        let walker = this._walkerStack[0];\n        let newNode = walker.lastChild();\n        if (newNode) this.currentNode = newNode;\n        return newNode;\n    }\n    nextNode() {\n        const nextNode = this._walkerStack[0].nextNode();\n        if (nextNode) {\n            const shadowRoot = nextNode.shadowRoot;\n            if (shadowRoot) {\n                var _this_filter;\n                let nodeResult;\n                if (typeof this.filter === 'function') nodeResult = this.filter(nextNode);\n                else if ((_this_filter = this.filter) === null || _this_filter === void 0 ? void 0 : _this_filter.acceptNode) nodeResult = this.filter.acceptNode(nextNode);\n                if (nodeResult === NodeFilter.FILTER_ACCEPT) {\n                    this.currentNode = nextNode;\n                    return nextNode;\n                }\n                // _acceptNode should have added new walker for this shadow,\n                // go in recursively.\n                let newNode = this.nextNode();\n                if (newNode) this.currentNode = newNode;\n                return newNode;\n            }\n            if (nextNode) this.currentNode = nextNode;\n            return nextNode;\n        } else {\n            if (this._walkerStack.length > 1) {\n                this._walkerStack.shift();\n                let newNode = this.nextNode();\n                if (newNode) this.currentNode = newNode;\n                return newNode;\n            } else return null;\n        }\n    }\n    previousNode() {\n        const currentWalker = this._walkerStack[0];\n        if (currentWalker.currentNode === currentWalker.root) {\n            if (this._currentSetFor.has(currentWalker)) {\n                this._currentSetFor.delete(currentWalker);\n                if (this._walkerStack.length > 1) {\n                    this._walkerStack.shift();\n                    let newNode = this.previousNode();\n                    if (newNode) this.currentNode = newNode;\n                    return newNode;\n                } else return null;\n            }\n            return null;\n        }\n        const previousNode = currentWalker.previousNode();\n        if (previousNode) {\n            const shadowRoot = previousNode.shadowRoot;\n            if (shadowRoot) {\n                var _this_filter;\n                let nodeResult;\n                if (typeof this.filter === 'function') nodeResult = this.filter(previousNode);\n                else if ((_this_filter = this.filter) === null || _this_filter === void 0 ? void 0 : _this_filter.acceptNode) nodeResult = this.filter.acceptNode(previousNode);\n                if (nodeResult === NodeFilter.FILTER_ACCEPT) {\n                    if (previousNode) this.currentNode = previousNode;\n                    return previousNode;\n                }\n                // _acceptNode should have added new walker for this shadow,\n                // go in recursively.\n                let newNode = this.lastChild();\n                if (newNode) this.currentNode = newNode;\n                return newNode;\n            }\n            if (previousNode) this.currentNode = previousNode;\n            return previousNode;\n        } else {\n            if (this._walkerStack.length > 1) {\n                this._walkerStack.shift();\n                let newNode = this.previousNode();\n                if (newNode) this.currentNode = newNode;\n                return newNode;\n            } else return null;\n        }\n    }\n    /**\n     * @deprecated\n     */ nextSibling() {\n        // if (__DEV__) {\n        //     throw new Error(\"Method not implemented.\");\n        // }\n        return null;\n    }\n    /**\n     * @deprecated\n     */ previousSibling() {\n        // if (__DEV__) {\n        //     throw new Error(\"Method not implemented.\");\n        // }\n        return null;\n    }\n    /**\n     * @deprecated\n     */ parentNode() {\n        // if (__DEV__) {\n        //     throw new Error(\"Method not implemented.\");\n        // }\n        return null;\n    }\n    constructor(doc, root, whatToShow, filter){\n        this._walkerStack = [];\n        this._currentSetFor = new Set();\n        this._acceptNode = (node)=>{\n            if (node.nodeType === Node.ELEMENT_NODE) {\n                const shadowRoot = node.shadowRoot;\n                if (shadowRoot) {\n                    const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n                        acceptNode: this._acceptNode\n                    });\n                    this._walkerStack.unshift(walker);\n                    return NodeFilter.FILTER_ACCEPT;\n                } else {\n                    var _this_filter;\n                    if (typeof this.filter === 'function') return this.filter(node);\n                    else if ((_this_filter = this.filter) === null || _this_filter === void 0 ? void 0 : _this_filter.acceptNode) return this.filter.acceptNode(node);\n                    else if (this.filter === null) return NodeFilter.FILTER_ACCEPT;\n                }\n            }\n            return NodeFilter.FILTER_SKIP;\n        };\n        this._doc = doc;\n        this.root = root;\n        this.filter = filter !== null && filter !== void 0 ? filter : null;\n        this.whatToShow = whatToShow !== null && whatToShow !== void 0 ? whatToShow : NodeFilter.SHOW_ALL;\n        this._currentNode = root;\n        this._walkerStack.unshift(doc.createTreeWalker(root, whatToShow, this._acceptNode));\n        const shadowRoot = root.shadowRoot;\n        if (shadowRoot) {\n            const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n                acceptNode: this._acceptNode\n            });\n            this._walkerStack.unshift(walker);\n        }\n    }\n}\nfunction $dfc540311bf7f109$export$4d0f8be8b12a7ef6(doc, root, whatToShow, filter) {\n    if ((0, $bJKXg$shadowDOM)()) return new $dfc540311bf7f109$export$63eb3ababa9c55c4(doc, root, whatToShow, filter);\n    return doc.createTreeWalker(root, whatToShow, filter);\n}\n\n\nexport {$dfc540311bf7f109$export$63eb3ababa9c55c4 as ShadowTreeWalker, $dfc540311bf7f109$export$4d0f8be8b12a7ef6 as createShadowTreeWalker};\n//# sourceMappingURL=ShadowTreeWalker.module.js.map\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 {chain as $ff5963eb1fccf552$export$e08e3b67e392101e} from \"./chain.mjs\";\nimport {mergeIds as $bdb11010cef70236$export$cd8c9cb68f842629} from \"./useId.mjs\";\nimport $7jXr9$clsx from \"clsx\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $3ef42575df84b30b$export$9d1611c77c2fe928(...args) {\n    // Start with a base clone of the first argument. This is a lot faster than starting\n    // with an empty object and adding properties as we go.\n    let result = {\n        ...args[0]\n    };\n    for(let i = 1; i < args.length; i++){\n        let props = args[i];\n        for(let key in props){\n            let a = result[key];\n            let b = props[key];\n            // Chain events\n            if (typeof a === 'function' && typeof b === 'function' && // This is a lot faster than a regex.\n            key[0] === 'o' && key[1] === 'n' && key.charCodeAt(2) >= /* 'A' */ 65 && key.charCodeAt(2) <= /* 'Z' */ 90) result[key] = (0, $ff5963eb1fccf552$export$e08e3b67e392101e)(a, b);\n            else if ((key === 'className' || key === 'UNSAFE_className') && typeof a === 'string' && typeof b === 'string') result[key] = (0, $7jXr9$clsx)(a, b);\n            else if (key === 'id' && a && b) result.id = (0, $bdb11010cef70236$export$cd8c9cb68f842629)(a, b);\n            else result[key] = b !== undefined ? b : a;\n        }\n    }\n    return result;\n}\n\n\nexport {$3ef42575df84b30b$export$9d1611c77c2fe928 as mergeProps};\n//# sourceMappingURL=mergeProps.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $5dc95899b306f630$export$c9058316764c140e(...refs) {\n    if (refs.length === 1 && refs[0]) return refs[0];\n    return (value)=>{\n        let hasCleanup = false;\n        const cleanups = refs.map((ref)=>{\n            const cleanup = $5dc95899b306f630$var$setRef(ref, value);\n            hasCleanup || (hasCleanup = typeof cleanup == 'function');\n            return cleanup;\n        });\n        if (hasCleanup) return ()=>{\n            cleanups.forEach((cleanup, i)=>{\n                if (typeof cleanup === 'function') cleanup();\n                else $5dc95899b306f630$var$setRef(refs[i], null);\n            });\n        };\n    };\n}\nfunction $5dc95899b306f630$var$setRef(ref, value) {\n    if (typeof ref === 'function') return ref(value);\n    else if (ref != null) ref.current = value;\n}\n\n\nexport {$5dc95899b306f630$export$c9058316764c140e as mergeRefs};\n//# sourceMappingURL=mergeRefs.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $65484d02dcb7eb3e$var$DOMPropNames = new Set([\n    'id'\n]);\nconst $65484d02dcb7eb3e$var$labelablePropNames = new Set([\n    'aria-label',\n    'aria-labelledby',\n    'aria-describedby',\n    'aria-details'\n]);\n// See LinkDOMProps in dom.d.ts.\nconst $65484d02dcb7eb3e$var$linkPropNames = new Set([\n    'href',\n    'hrefLang',\n    'target',\n    'rel',\n    'download',\n    'ping',\n    'referrerPolicy'\n]);\nconst $65484d02dcb7eb3e$var$globalAttrs = new Set([\n    'dir',\n    'lang',\n    'hidden',\n    'inert',\n    'translate'\n]);\nconst $65484d02dcb7eb3e$var$globalEvents = new Set([\n    'onClick',\n    'onAuxClick',\n    'onContextMenu',\n    'onDoubleClick',\n    'onMouseDown',\n    'onMouseEnter',\n    'onMouseLeave',\n    'onMouseMove',\n    'onMouseOut',\n    'onMouseOver',\n    'onMouseUp',\n    'onTouchCancel',\n    'onTouchEnd',\n    'onTouchMove',\n    'onTouchStart',\n    'onPointerDown',\n    'onPointerMove',\n    'onPointerUp',\n    'onPointerCancel',\n    'onPointerEnter',\n    'onPointerLeave',\n    'onPointerOver',\n    'onPointerOut',\n    'onGotPointerCapture',\n    'onLostPointerCapture',\n    'onScroll',\n    'onWheel',\n    'onAnimationStart',\n    'onAnimationEnd',\n    'onAnimationIteration',\n    'onTransitionCancel',\n    'onTransitionEnd',\n    'onTransitionRun',\n    'onTransitionStart'\n]);\nconst $65484d02dcb7eb3e$var$propRe = /^(data-.*)$/;\nfunction $65484d02dcb7eb3e$export$457c3d6518dd4c6f(props, opts = {}) {\n    let { labelable: labelable, isLink: isLink, global: global, events: events = global, propNames: propNames } = opts;\n    let filteredProps = {};\n    for(const prop in props)if (Object.prototype.hasOwnProperty.call(props, prop) && ($65484d02dcb7eb3e$var$DOMPropNames.has(prop) || labelable && $65484d02dcb7eb3e$var$labelablePropNames.has(prop) || isLink && $65484d02dcb7eb3e$var$linkPropNames.has(prop) || global && $65484d02dcb7eb3e$var$globalAttrs.has(prop) || events && ($65484d02dcb7eb3e$var$globalEvents.has(prop) || prop.endsWith('Capture') && $65484d02dcb7eb3e$var$globalEvents.has(prop.slice(0, -7))) || (propNames === null || propNames === void 0 ? void 0 : propNames.has(prop)) || $65484d02dcb7eb3e$var$propRe.test(prop))) filteredProps[prop] = props[prop];\n    return filteredProps;\n}\n\n\nexport {$65484d02dcb7eb3e$export$457c3d6518dd4c6f as filterDOMProps};\n//# sourceMappingURL=filterDOMProps.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $7215afc6de606d6b$export$de79e2c695e052f3(element) {\n    if ($7215afc6de606d6b$var$supportsPreventScroll()) element.focus({\n        preventScroll: true\n    });\n    else {\n        let scrollableElements = $7215afc6de606d6b$var$getScrollableElements(element);\n        element.focus();\n        $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements);\n    }\n}\nlet $7215afc6de606d6b$var$supportsPreventScrollCached = null;\nfunction $7215afc6de606d6b$var$supportsPreventScroll() {\n    if ($7215afc6de606d6b$var$supportsPreventScrollCached == null) {\n        $7215afc6de606d6b$var$supportsPreventScrollCached = false;\n        try {\n            let focusElem = document.createElement('div');\n            focusElem.focus({\n                get preventScroll () {\n                    $7215afc6de606d6b$var$supportsPreventScrollCached = true;\n                    return true;\n                }\n            });\n        } catch  {\n        // Ignore\n        }\n    }\n    return $7215afc6de606d6b$var$supportsPreventScrollCached;\n}\nfunction $7215afc6de606d6b$var$getScrollableElements(element) {\n    let parent = element.parentNode;\n    let scrollableElements = [];\n    let rootScrollingElement = document.scrollingElement || document.documentElement;\n    while(parent instanceof HTMLElement && parent !== rootScrollingElement){\n        if (parent.offsetHeight < parent.scrollHeight || parent.offsetWidth < parent.scrollWidth) scrollableElements.push({\n            element: parent,\n            scrollTop: parent.scrollTop,\n            scrollLeft: parent.scrollLeft\n        });\n        parent = parent.parentNode;\n    }\n    if (rootScrollingElement instanceof HTMLElement) scrollableElements.push({\n        element: rootScrollingElement,\n        scrollTop: rootScrollingElement.scrollTop,\n        scrollLeft: rootScrollingElement.scrollLeft\n    });\n    return scrollableElements;\n}\nfunction $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements) {\n    for (let { element: element, scrollTop: scrollTop, scrollLeft: scrollLeft } of scrollableElements){\n        element.scrollTop = scrollTop;\n        element.scrollLeft = scrollLeft;\n    }\n}\n\n\nexport {$7215afc6de606d6b$export$de79e2c695e052f3 as focusWithoutScrolling};\n//# sourceMappingURL=focusWithoutScrolling.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $c87311424ea30a05$var$testUserAgent(re) {\n    var _window_navigator_userAgentData;\n    if (typeof window === 'undefined' || window.navigator == null) return false;\n    let brands = (_window_navigator_userAgentData = window.navigator['userAgentData']) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.brands;\n    return Array.isArray(brands) && brands.some((brand)=>re.test(brand.brand)) || re.test(window.navigator.userAgent);\n}\nfunction $c87311424ea30a05$var$testPlatform(re) {\n    var _window_navigator_userAgentData;\n    return typeof window !== 'undefined' && window.navigator != null ? re.test(((_window_navigator_userAgentData = window.navigator['userAgentData']) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.platform) || window.navigator.platform) : false;\n}\nfunction $c87311424ea30a05$var$cached(fn) {\n    if (process.env.NODE_ENV === 'test') return fn;\n    let res = null;\n    return ()=>{\n        if (res == null) res = fn();\n        return res;\n    };\n}\nconst $c87311424ea30a05$export$9ac100e40613ea10 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testPlatform(/^Mac/i);\n});\nconst $c87311424ea30a05$export$186c6964ca17d99 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testPlatform(/^iPhone/i);\n});\nconst $c87311424ea30a05$export$7bef049ce92e4224 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testPlatform(/^iPad/i) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n    $c87311424ea30a05$export$9ac100e40613ea10() && navigator.maxTouchPoints > 1;\n});\nconst $c87311424ea30a05$export$fedb369cb70207f1 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$export$186c6964ca17d99() || $c87311424ea30a05$export$7bef049ce92e4224();\n});\nconst $c87311424ea30a05$export$e1865c3bedcd822b = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$export$9ac100e40613ea10() || $c87311424ea30a05$export$fedb369cb70207f1();\n});\nconst $c87311424ea30a05$export$78551043582a6a98 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testUserAgent(/AppleWebKit/i) && !$c87311424ea30a05$export$6446a186d09e379e();\n});\nconst $c87311424ea30a05$export$6446a186d09e379e = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testUserAgent(/Chrome/i);\n});\nconst $c87311424ea30a05$export$a11b0059900ceec8 = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testUserAgent(/Android/i);\n});\nconst $c87311424ea30a05$export$b7d78993b74f766d = $c87311424ea30a05$var$cached(function() {\n    return $c87311424ea30a05$var$testUserAgent(/Firefox/i);\n});\n\n\nexport {$c87311424ea30a05$export$9ac100e40613ea10 as isMac, $c87311424ea30a05$export$186c6964ca17d99 as isIPhone, $c87311424ea30a05$export$7bef049ce92e4224 as isIPad, $c87311424ea30a05$export$fedb369cb70207f1 as isIOS, $c87311424ea30a05$export$e1865c3bedcd822b as isAppleDevice, $c87311424ea30a05$export$78551043582a6a98 as isWebKit, $c87311424ea30a05$export$6446a186d09e379e as isChrome, $c87311424ea30a05$export$a11b0059900ceec8 as isAndroid, $c87311424ea30a05$export$b7d78993b74f766d as isFirefox};\n//# sourceMappingURL=platform.module.js.map\n","import {focusWithoutScrolling as $7215afc6de606d6b$export$de79e2c695e052f3} from \"./focusWithoutScrolling.mjs\";\nimport {isMac as $c87311424ea30a05$export$9ac100e40613ea10, isWebKit as $c87311424ea30a05$export$78551043582a6a98, isFirefox as $c87311424ea30a05$export$b7d78993b74f766d, isIPad as $c87311424ea30a05$export$7bef049ce92e4224} from \"./platform.mjs\";\nimport $g3jFn$react, {createContext as $g3jFn$createContext, useMemo as $g3jFn$useMemo, useContext as $g3jFn$useContext} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $ea8dcbcb9ea1b556$var$RouterContext = /*#__PURE__*/ (0, $g3jFn$createContext)({\n    isNative: true,\n    open: $ea8dcbcb9ea1b556$var$openSyntheticLink,\n    useHref: (href)=>href\n});\nfunction $ea8dcbcb9ea1b556$export$323e4fc2fa4753fb(props) {\n    let { children: children, navigate: navigate, useHref: useHref } = props;\n    let ctx = (0, $g3jFn$useMemo)(()=>({\n            isNative: false,\n            open: (target, modifiers, href, routerOptions)=>{\n                $ea8dcbcb9ea1b556$var$getSyntheticLink(target, (link)=>{\n                    if ($ea8dcbcb9ea1b556$export$efa8c9099e530235(link, modifiers)) navigate(href, routerOptions);\n                    else $ea8dcbcb9ea1b556$export$95185d699e05d4d7(link, modifiers);\n                });\n            },\n            useHref: useHref || ((href)=>href)\n        }), [\n        navigate,\n        useHref\n    ]);\n    return /*#__PURE__*/ (0, $g3jFn$react).createElement($ea8dcbcb9ea1b556$var$RouterContext.Provider, {\n        value: ctx\n    }, children);\n}\nfunction $ea8dcbcb9ea1b556$export$9a302a45f65d0572() {\n    return (0, $g3jFn$useContext)($ea8dcbcb9ea1b556$var$RouterContext);\n}\nfunction $ea8dcbcb9ea1b556$export$efa8c9099e530235(link, modifiers) {\n    // Use getAttribute here instead of link.target. Firefox will default link.target to \"_parent\" when inside an iframe.\n    let target = link.getAttribute('target');\n    return (!target || target === '_self') && link.origin === location.origin && !link.hasAttribute('download') && !modifiers.metaKey && // open in new tab (mac)\n    !modifiers.ctrlKey && // open in new tab (windows)\n    !modifiers.altKey && // download\n    !modifiers.shiftKey;\n}\nfunction $ea8dcbcb9ea1b556$export$95185d699e05d4d7(target, modifiers, setOpening = true) {\n    var _window_event_type, _window_event;\n    let { metaKey: metaKey, ctrlKey: ctrlKey, altKey: altKey, shiftKey: shiftKey } = modifiers;\n    // Firefox does not recognize keyboard events as a user action by default, and the popup blocker\n    // will prevent links with target=\"_blank\" from opening. However, it does allow the event if the\n    // Command/Control key is held, which opens the link in a background tab. This seems like the best we can do.\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=257870 and https://bugzilla.mozilla.org/show_bug.cgi?id=746640.\n    if ((0, $c87311424ea30a05$export$b7d78993b74f766d)() && ((_window_event = window.event) === null || _window_event === void 0 ? void 0 : (_window_event_type = _window_event.type) === null || _window_event_type === void 0 ? void 0 : _window_event_type.startsWith('key')) && target.target === '_blank') {\n        if ((0, $c87311424ea30a05$export$9ac100e40613ea10)()) metaKey = true;\n        else ctrlKey = true;\n    }\n    // WebKit does not support firing click events with modifier keys, but does support keyboard events.\n    // https://github.com/WebKit/WebKit/blob/c03d0ac6e6db178f90923a0a63080b5ca210d25f/Source/WebCore/html/HTMLAnchorElement.cpp#L184\n    let event = (0, $c87311424ea30a05$export$78551043582a6a98)() && (0, $c87311424ea30a05$export$9ac100e40613ea10)() && !(0, $c87311424ea30a05$export$7bef049ce92e4224)() && process.env.NODE_ENV !== 'test' ? new KeyboardEvent('keydown', {\n        keyIdentifier: 'Enter',\n        metaKey: metaKey,\n        ctrlKey: ctrlKey,\n        altKey: altKey,\n        shiftKey: shiftKey\n    }) : new MouseEvent('click', {\n        metaKey: metaKey,\n        ctrlKey: ctrlKey,\n        altKey: altKey,\n        shiftKey: shiftKey,\n        detail: 1,\n        bubbles: true,\n        cancelable: true\n    });\n    $ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = setOpening;\n    (0, $7215afc6de606d6b$export$de79e2c695e052f3)(target);\n    target.dispatchEvent(event);\n    $ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = false;\n}\n// https://github.com/parcel-bundler/parcel/issues/8724\n$ea8dcbcb9ea1b556$export$95185d699e05d4d7.isOpening = false;\nfunction $ea8dcbcb9ea1b556$var$getSyntheticLink(target, open) {\n    if (target instanceof HTMLAnchorElement) open(target);\n    else if (target.hasAttribute('data-href')) {\n        let link = document.createElement('a');\n        link.href = target.getAttribute('data-href');\n        if (target.hasAttribute('data-target')) link.target = target.getAttribute('data-target');\n        if (target.hasAttribute('data-rel')) link.rel = target.getAttribute('data-rel');\n        if (target.hasAttribute('data-download')) link.download = target.getAttribute('data-download');\n        if (target.hasAttribute('data-ping')) link.ping = target.getAttribute('data-ping');\n        if (target.hasAttribute('data-referrer-policy')) link.referrerPolicy = target.getAttribute('data-referrer-policy');\n        target.appendChild(link);\n        open(link);\n        target.removeChild(link);\n    }\n}\nfunction $ea8dcbcb9ea1b556$var$openSyntheticLink(target, modifiers) {\n    $ea8dcbcb9ea1b556$var$getSyntheticLink(target, (link)=>$ea8dcbcb9ea1b556$export$95185d699e05d4d7(link, modifiers));\n}\nfunction $ea8dcbcb9ea1b556$export$bdc77b0c0a3a85d6(props) {\n    let router = $ea8dcbcb9ea1b556$export$9a302a45f65d0572();\n    var _props_href;\n    const href = router.useHref((_props_href = props.href) !== null && _props_href !== void 0 ? _props_href : '');\n    return {\n        'data-href': props.href ? href : undefined,\n        'data-target': props.target,\n        'data-rel': props.rel,\n        'data-download': props.download,\n        'data-ping': props.ping,\n        'data-referrer-policy': props.referrerPolicy\n    };\n}\nfunction $ea8dcbcb9ea1b556$export$51437d503373d223(props) {\n    return {\n        'data-href': props.href,\n        'data-target': props.target,\n        'data-rel': props.rel,\n        'data-download': props.download,\n        'data-ping': props.ping,\n        'data-referrer-policy': props.referrerPolicy\n    };\n}\nfunction $ea8dcbcb9ea1b556$export$7e924b3091a3bd18(props) {\n    let router = $ea8dcbcb9ea1b556$export$9a302a45f65d0572();\n    var _props_href;\n    const href = router.useHref((_props_href = props === null || props === void 0 ? void 0 : props.href) !== null && _props_href !== void 0 ? _props_href : '');\n    return {\n        href: (props === null || props === void 0 ? void 0 : props.href) ? href : undefined,\n        target: props === null || props === void 0 ? void 0 : props.target,\n        rel: props === null || props === void 0 ? void 0 : props.rel,\n        download: props === null || props === void 0 ? void 0 : props.download,\n        ping: props === null || props === void 0 ? void 0 : props.ping,\n        referrerPolicy: props === null || props === void 0 ? void 0 : props.referrerPolicy\n    };\n}\nfunction $ea8dcbcb9ea1b556$export$13aea1a3cb5e3f1f(e, router, href, routerOptions) {\n    // If a custom router is provided, prevent default and forward if this link should client navigate.\n    if (!router.isNative && e.currentTarget instanceof HTMLAnchorElement && e.currentTarget.href && // If props are applied to a router Link component, it may have already prevented default.\n    !e.isDefaultPrevented() && $ea8dcbcb9ea1b556$export$efa8c9099e530235(e.currentTarget, e) && href) {\n        e.preventDefault();\n        router.open(e.currentTarget, e, href, routerOptions);\n    }\n}\n\n\nexport {$ea8dcbcb9ea1b556$export$323e4fc2fa4753fb as RouterProvider, $ea8dcbcb9ea1b556$export$efa8c9099e530235 as shouldClientNavigate, $ea8dcbcb9ea1b556$export$95185d699e05d4d7 as openLink, $ea8dcbcb9ea1b556$export$9a302a45f65d0572 as useRouter, $ea8dcbcb9ea1b556$export$bdc77b0c0a3a85d6 as useSyntheticLinkProps, $ea8dcbcb9ea1b556$export$51437d503373d223 as getSyntheticLinkProps, $ea8dcbcb9ea1b556$export$7e924b3091a3bd18 as useLinkProps, $ea8dcbcb9ea1b556$export$13aea1a3cb5e3f1f as handleLinkClick};\n//# sourceMappingURL=openLink.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // We store a global list of elements that are currently transitioning,\n// mapped to a set of CSS properties that are transitioning for that element.\n// This is necessary rather than a simple count of transitions because of browser\n// bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather\n// than one or the other. So we need to track what's actually transitioning so that\n// we can ignore these duplicate events.\nlet $bbed8b41f857bcc0$var$transitionsByElement = new Map();\n// A list of callbacks to call once there are no transitioning elements.\nlet $bbed8b41f857bcc0$var$transitionCallbacks = new Set();\nfunction $bbed8b41f857bcc0$var$setupGlobalEvents() {\n    if (typeof window === 'undefined') return;\n    function isTransitionEvent(event) {\n        return 'propertyName' in event;\n    }\n    let onTransitionStart = (e)=>{\n        if (!isTransitionEvent(e) || !e.target) return;\n        // Add the transitioning property to the list for this element.\n        let transitions = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);\n        if (!transitions) {\n            transitions = new Set();\n            $bbed8b41f857bcc0$var$transitionsByElement.set(e.target, transitions);\n            // The transitioncancel event must be registered on the element itself, rather than as a global\n            // event. This enables us to handle when the node is deleted from the document while it is transitioning.\n            // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.\n            e.target.addEventListener('transitioncancel', onTransitionEnd, {\n                once: true\n            });\n        }\n        transitions.add(e.propertyName);\n    };\n    let onTransitionEnd = (e)=>{\n        if (!isTransitionEvent(e) || !e.target) return;\n        // Remove property from list of transitioning properties.\n        let properties = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);\n        if (!properties) return;\n        properties.delete(e.propertyName);\n        // If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.\n        if (properties.size === 0) {\n            e.target.removeEventListener('transitioncancel', onTransitionEnd);\n            $bbed8b41f857bcc0$var$transitionsByElement.delete(e.target);\n        }\n        // If no transitioning elements, call all of the queued callbacks.\n        if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) {\n            for (let cb of $bbed8b41f857bcc0$var$transitionCallbacks)cb();\n            $bbed8b41f857bcc0$var$transitionCallbacks.clear();\n        }\n    };\n    document.body.addEventListener('transitionrun', onTransitionStart);\n    document.body.addEventListener('transitionend', onTransitionEnd);\n}\nif (typeof document !== 'undefined') {\n    if (document.readyState !== 'loading') $bbed8b41f857bcc0$var$setupGlobalEvents();\n    else document.addEventListener('DOMContentLoaded', $bbed8b41f857bcc0$var$setupGlobalEvents);\n}\n/**\n * Cleans up any elements that are no longer in the document.\n * This is necessary because we can't rely on transitionend events to fire\n * for elements that are removed from the document while transitioning.\n */ function $bbed8b41f857bcc0$var$cleanupDetachedElements() {\n    for (const [eventTarget] of $bbed8b41f857bcc0$var$transitionsByElement)// Similar to `eventTarget instanceof Element && !eventTarget.isConnected`, but avoids\n    // the explicit instanceof check, since it may be different in different contexts.\n    if ('isConnected' in eventTarget && !eventTarget.isConnected) $bbed8b41f857bcc0$var$transitionsByElement.delete(eventTarget);\n}\nfunction $bbed8b41f857bcc0$export$24490316f764c430(fn) {\n    // Wait one frame to see if an animation starts, e.g. a transition on mount.\n    requestAnimationFrame(()=>{\n        $bbed8b41f857bcc0$var$cleanupDetachedElements();\n        // If no transitions are running, call the function immediately.\n        // Otherwise, add it to a list of callbacks to run at the end of the animation.\n        if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) fn();\n        else $bbed8b41f857bcc0$var$transitionCallbacks.add(fn);\n    });\n}\n\n\nexport {$bbed8b41f857bcc0$export$24490316f764c430 as runAfterTransition};\n//# sourceMappingURL=runAfterTransition.module.js.map\n","import {useRef as $lPAwt$useRef, useCallback as $lPAwt$useCallback, useEffect as $lPAwt$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $03deb23ff14920c4$export$4eaf04e54aa8eed6() {\n    let globalListeners = (0, $lPAwt$useRef)(new Map());\n    let addGlobalListener = (0, $lPAwt$useCallback)((eventTarget, type, listener, options)=>{\n        // Make sure we remove the listener after it is called with the `once` option.\n        let fn = (options === null || options === void 0 ? void 0 : options.once) ? (...args)=>{\n            globalListeners.current.delete(listener);\n            listener(...args);\n        } : listener;\n        globalListeners.current.set(listener, {\n            type: type,\n            eventTarget: eventTarget,\n            fn: fn,\n            options: options\n        });\n        eventTarget.addEventListener(type, fn, options);\n    }, []);\n    let removeGlobalListener = (0, $lPAwt$useCallback)((eventTarget, type, listener, options)=>{\n        var _globalListeners_current_get;\n        let fn = ((_globalListeners_current_get = globalListeners.current.get(listener)) === null || _globalListeners_current_get === void 0 ? void 0 : _globalListeners_current_get.fn) || listener;\n        eventTarget.removeEventListener(type, fn, options);\n        globalListeners.current.delete(listener);\n    }, []);\n    let removeAllGlobalListeners = (0, $lPAwt$useCallback)(()=>{\n        globalListeners.current.forEach((value, key)=>{\n            removeGlobalListener(value.eventTarget, value.type, key, value.options);\n        });\n    }, [\n        removeGlobalListener\n    ]);\n    (0, $lPAwt$useEffect)(()=>{\n        return removeAllGlobalListeners;\n    }, [\n        removeAllGlobalListeners\n    ]);\n    return {\n        addGlobalListener: addGlobalListener,\n        removeGlobalListener: removeGlobalListener,\n        removeAllGlobalListeners: removeAllGlobalListeners\n    };\n}\n\n\nexport {$03deb23ff14920c4$export$4eaf04e54aa8eed6 as useGlobalListeners};\n//# sourceMappingURL=useGlobalListeners.module.js.map\n","import {useId as $bdb11010cef70236$export$f680877a34711e37} from \"./useId.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $313b98861ee5dd6c$export$d6875122194c7b44(props, defaultLabel) {\n    let { id: id, 'aria-label': label, 'aria-labelledby': labelledBy } = props;\n    // If there is both an aria-label and aria-labelledby,\n    // combine them by pointing to the element itself.\n    id = (0, $bdb11010cef70236$export$f680877a34711e37)(id);\n    if (labelledBy && label) {\n        let ids = new Set([\n            id,\n            ...labelledBy.trim().split(/\\s+/)\n        ]);\n        labelledBy = [\n            ...ids\n        ].join(' ');\n    } else if (labelledBy) labelledBy = labelledBy.trim().split(/\\s+/).join(' ');\n    // If no labels are provided, use the default\n    if (!label && !labelledBy && defaultLabel) label = defaultLabel;\n    return {\n        id: id,\n        'aria-label': label,\n        'aria-labelledby': labelledBy\n    };\n}\n\n\nexport {$313b98861ee5dd6c$export$d6875122194c7b44 as useLabels};\n//# sourceMappingURL=useLabels.module.js.map\n","import {useRef as $gbmns$useRef, useCallback as $gbmns$useCallback, useMemo as $gbmns$useMemo} from \"react\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $df56164dff5785e2$export$4338b53315abf666(ref) {\n    const objRef = (0, $gbmns$useRef)(null);\n    const cleanupRef = (0, $gbmns$useRef)(undefined);\n    const refEffect = (0, $gbmns$useCallback)((instance)=>{\n        if (typeof ref === 'function') {\n            const refCallback = ref;\n            const refCleanup = refCallback(instance);\n            return ()=>{\n                if (typeof refCleanup === 'function') refCleanup();\n                else refCallback(null);\n            };\n        } else if (ref) {\n            ref.current = instance;\n            return ()=>{\n                ref.current = null;\n            };\n        }\n    }, [\n        ref\n    ]);\n    return (0, $gbmns$useMemo)(()=>({\n            get current () {\n                return objRef.current;\n            },\n            set current (value){\n                objRef.current = value;\n                if (cleanupRef.current) {\n                    cleanupRef.current();\n                    cleanupRef.current = undefined;\n                }\n                if (value != null) cleanupRef.current = refEffect(value);\n            }\n        }), [\n        refEffect\n    ]);\n}\n\n\nexport {$df56164dff5785e2$export$4338b53315abf666 as useObjectRef};\n//# sourceMappingURL=useObjectRef.module.js.map\n","import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport $lmaYr$react, {useRef as $lmaYr$useRef, useCallback as $lmaYr$useCallback} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nvar $8ae05eaa5c114e9c$var$_React_useInsertionEffect;\n// Use the earliest effect type possible. useInsertionEffect runs during the mutation phase,\n// before all layout effects, but is available only in React 18 and later.\nconst $8ae05eaa5c114e9c$var$useEarlyEffect = ($8ae05eaa5c114e9c$var$_React_useInsertionEffect = (0, $lmaYr$react)['useInsertionEffect']) !== null && $8ae05eaa5c114e9c$var$_React_useInsertionEffect !== void 0 ? $8ae05eaa5c114e9c$var$_React_useInsertionEffect : (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c);\nfunction $8ae05eaa5c114e9c$export$7f54fc3180508a52(fn) {\n    const ref = (0, $lmaYr$useRef)(null);\n    $8ae05eaa5c114e9c$var$useEarlyEffect(()=>{\n        ref.current = fn;\n    }, [\n        fn\n    ]);\n    // @ts-ignore\n    return (0, $lmaYr$useCallback)((...args)=>{\n        const f = ref.current;\n        return f === null || f === void 0 ? void 0 : f(...args);\n    }, []);\n}\n\n\nexport {$8ae05eaa5c114e9c$export$7f54fc3180508a52 as useEffectEvent};\n//# sourceMappingURL=useEffectEvent.module.js.map\n","import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useRef as $azsE2$useRef} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $ca9b37712f007381$export$72ef708ab07251f1(effect, dependencies) {\n    const isInitialMount = (0, $azsE2$useRef)(true);\n    const lastDeps = (0, $azsE2$useRef)(null);\n    (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n        isInitialMount.current = true;\n        return ()=>{\n            isInitialMount.current = false;\n        };\n    }, []);\n    (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n        if (isInitialMount.current) isInitialMount.current = false;\n        else if (!lastDeps.current || dependencies.some((dep, i)=>!Object.is(dep, lastDeps[i]))) effect();\n        lastDeps.current = dependencies;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, dependencies);\n}\n\n\nexport {$ca9b37712f007381$export$72ef708ab07251f1 as useUpdateLayoutEffect};\n//# sourceMappingURL=useUpdateLayoutEffect.module.js.map\n","import {useEffectEvent as $8ae05eaa5c114e9c$export$7f54fc3180508a52} from \"./useEffectEvent.mjs\";\nimport {useEffect as $Vsl8o$useEffect} from \"react\";\n\n\n\nfunction $9daab02d461809db$var$hasResizeObserver() {\n    return typeof window.ResizeObserver !== 'undefined';\n}\nfunction $9daab02d461809db$export$683480f191c0e3ea(options) {\n    // Only call onResize from inside the effect, otherwise we'll void our assumption that\n    // useEffectEvents are safe to pass in.\n    const { ref: ref, box: box, onResize: onResize } = options;\n    let onResizeEvent = (0, $8ae05eaa5c114e9c$export$7f54fc3180508a52)(onResize);\n    (0, $Vsl8o$useEffect)(()=>{\n        let element = ref === null || ref === void 0 ? void 0 : ref.current;\n        if (!element) return;\n        if (!$9daab02d461809db$var$hasResizeObserver()) {\n            window.addEventListener('resize', onResizeEvent, false);\n            return ()=>{\n                window.removeEventListener('resize', onResizeEvent, false);\n            };\n        } else {\n            const resizeObserverInstance = new window.ResizeObserver((entries)=>{\n                if (!entries.length) return;\n                onResizeEvent();\n            });\n            resizeObserverInstance.observe(element, {\n                box: box\n            });\n            return ()=>{\n                if (element) resizeObserverInstance.unobserve(element);\n            };\n        }\n    }, [\n        ref,\n        box\n    ]);\n}\n\n\nexport {$9daab02d461809db$export$683480f191c0e3ea as useResizeObserver};\n//# sourceMappingURL=useResizeObserver.module.js.map\n","import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $e7801be82b4b2a53$export$4debdb1a3f0fa79e(context, ref) {\n    (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n        if (context && context.ref && ref) {\n            context.ref.current = ref.current;\n            return ()=>{\n                if (context.ref) context.ref.current = null;\n            };\n        }\n    });\n}\n\n\nexport {$e7801be82b4b2a53$export$4debdb1a3f0fa79e as useSyncRef};\n//# sourceMappingURL=useSyncRef.module.js.map\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $cc38e7bd3fc7b213$export$2bb74740c4e19def(node, checkForOverflow) {\n    if (!node) return false;\n    let style = window.getComputedStyle(node);\n    let isScrollable = /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);\n    if (isScrollable && checkForOverflow) isScrollable = node.scrollHeight !== node.clientHeight || node.scrollWidth !== node.clientWidth;\n    return isScrollable;\n}\n\n\nexport {$cc38e7bd3fc7b213$export$2bb74740c4e19def as isScrollable};\n//# sourceMappingURL=isScrollable.module.js.map\n","import {isScrollable as $cc38e7bd3fc7b213$export$2bb74740c4e19def} from \"./isScrollable.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $62d8ded9296f3872$export$cfa2225e87938781(node, checkForOverflow) {\n    let scrollableNode = node;\n    if ((0, $cc38e7bd3fc7b213$export$2bb74740c4e19def)(scrollableNode, checkForOverflow)) scrollableNode = scrollableNode.parentElement;\n    while(scrollableNode && !(0, $cc38e7bd3fc7b213$export$2bb74740c4e19def)(scrollableNode, checkForOverflow))scrollableNode = scrollableNode.parentElement;\n    return scrollableNode || document.scrollingElement || document.documentElement;\n}\n\n\nexport {$62d8ded9296f3872$export$cfa2225e87938781 as getScrollParent};\n//# sourceMappingURL=getScrollParent.module.js.map\n","import {isScrollable as $cc38e7bd3fc7b213$export$2bb74740c4e19def} from \"./isScrollable.mjs\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $a40c673dc9f6d9c7$export$94ed1c92c7beeb22(node, checkForOverflow) {\n    const scrollParents = [];\n    while(node && node !== document.documentElement){\n        if ((0, $cc38e7bd3fc7b213$export$2bb74740c4e19def)(node, checkForOverflow)) scrollParents.push(node);\n        node = node.parentElement;\n    }\n    return scrollParents;\n}\n\n\nexport {$a40c673dc9f6d9c7$export$94ed1c92c7beeb22 as getScrollParents};\n//# sourceMappingURL=getScrollParents.module.js.map\n","import {isMac as $c87311424ea30a05$export$9ac100e40613ea10} from \"./platform.mjs\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $21f1aa98acb08317$export$16792effe837dba3(e) {\n    if ((0, $c87311424ea30a05$export$9ac100e40613ea10)()) return e.metaKey;\n    return e.ctrlKey;\n}\n// HTML input types that do not cause the software keyboard to appear.\nconst $21f1aa98acb08317$var$nonTextInputTypes = new Set([\n    'checkbox',\n    'radio',\n    'range',\n    'color',\n    'file',\n    'image',\n    'button',\n    'submit',\n    'reset'\n]);\nfunction $21f1aa98acb08317$export$c57958e35f31ed73(target) {\n    return target instanceof HTMLInputElement && !$21f1aa98acb08317$var$nonTextInputTypes.has(target.type) || target instanceof HTMLTextAreaElement || target instanceof HTMLElement && target.isContentEditable;\n}\n\n\nexport {$21f1aa98acb08317$export$16792effe837dba3 as isCtrlKeyPressed, $21f1aa98acb08317$export$c57958e35f31ed73 as willOpenKeyboard};\n//# sourceMappingURL=keyboard.module.js.map\n","import {willOpenKeyboard as $21f1aa98acb08317$export$c57958e35f31ed73} from \"./keyboard.mjs\";\nimport {useState as $fuDHA$useState, useEffect as $fuDHA$useEffect} from \"react\";\nimport {useIsSSR as $fuDHA$useIsSSR} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nlet $5df64b3807dc15ee$var$visualViewport = typeof document !== 'undefined' && window.visualViewport;\nfunction $5df64b3807dc15ee$export$d699905dd57c73ca() {\n    let isSSR = (0, $fuDHA$useIsSSR)();\n    let [size, setSize] = (0, $fuDHA$useState)(()=>isSSR ? {\n            width: 0,\n            height: 0\n        } : $5df64b3807dc15ee$var$getViewportSize());\n    (0, $fuDHA$useEffect)(()=>{\n        // Use visualViewport api to track available height even on iOS virtual keyboard opening\n        let onResize = ()=>{\n            // Ignore updates when zoomed.\n            if ($5df64b3807dc15ee$var$visualViewport && $5df64b3807dc15ee$var$visualViewport.scale > 1) return;\n            setSize((size)=>{\n                let newSize = $5df64b3807dc15ee$var$getViewportSize();\n                if (newSize.width === size.width && newSize.height === size.height) return size;\n                return newSize;\n            });\n        };\n        // When closing the keyboard, iOS does not fire the visual viewport resize event until the animation is complete.\n        // We can anticipate this and resize early by handling the blur event and using the layout size.\n        let frame;\n        let onBlur = (e)=>{\n            if ($5df64b3807dc15ee$var$visualViewport && $5df64b3807dc15ee$var$visualViewport.scale > 1) return;\n            if ((0, $21f1aa98acb08317$export$c57958e35f31ed73)(e.target)) // Wait one frame to see if a new element gets focused.\n            frame = requestAnimationFrame(()=>{\n                if (!document.activeElement || !(0, $21f1aa98acb08317$export$c57958e35f31ed73)(document.activeElement)) setSize((size)=>{\n                    let newSize = {\n                        width: window.innerWidth,\n                        height: window.innerHeight\n                    };\n                    if (newSize.width === size.width && newSize.height === size.height) return size;\n                    return newSize;\n                });\n            });\n        };\n        window.addEventListener('blur', onBlur, true);\n        if (!$5df64b3807dc15ee$var$visualViewport) window.addEventListener('resize', onResize);\n        else $5df64b3807dc15ee$var$visualViewport.addEventListener('resize', onResize);\n        return ()=>{\n            cancelAnimationFrame(frame);\n            window.removeEventListener('blur', onBlur, true);\n            if (!$5df64b3807dc15ee$var$visualViewport) window.removeEventListener('resize', onResize);\n            else $5df64b3807dc15ee$var$visualViewport.removeEventListener('resize', onResize);\n        };\n    }, []);\n    return size;\n}\nfunction $5df64b3807dc15ee$var$getViewportSize() {\n    return {\n        // Multiply by the visualViewport scale to get the \"natural\" size, unaffected by pinch zooming.\n        width: $5df64b3807dc15ee$var$visualViewport ? $5df64b3807dc15ee$var$visualViewport.width * $5df64b3807dc15ee$var$visualViewport.scale : window.innerWidth,\n        height: $5df64b3807dc15ee$var$visualViewport ? $5df64b3807dc15ee$var$visualViewport.height * $5df64b3807dc15ee$var$visualViewport.scale : window.innerHeight\n    };\n}\n\n\nexport {$5df64b3807dc15ee$export$d699905dd57c73ca as useViewportSize};\n//# sourceMappingURL=useViewportSize.module.js.map\n","import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useState as $hQ5Hp$useState} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nlet $ef06256079686ba0$var$descriptionId = 0;\nconst $ef06256079686ba0$var$descriptionNodes = new Map();\nfunction $ef06256079686ba0$export$f8aeda7b10753fa1(description) {\n    let [id, setId] = (0, $hQ5Hp$useState)();\n    (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n        if (!description) return;\n        let desc = $ef06256079686ba0$var$descriptionNodes.get(description);\n        if (!desc) {\n            let id = `react-aria-description-${$ef06256079686ba0$var$descriptionId++}`;\n            setId(id);\n            let node = document.createElement('div');\n            node.id = id;\n            node.style.display = 'none';\n            node.textContent = description;\n            document.body.appendChild(node);\n            desc = {\n                refCount: 0,\n                element: node\n            };\n            $ef06256079686ba0$var$descriptionNodes.set(description, desc);\n        } else setId(desc.element.id);\n        desc.refCount++;\n        return ()=>{\n            if (desc && --desc.refCount === 0) {\n                desc.element.remove();\n                $ef06256079686ba0$var$descriptionNodes.delete(description);\n            }\n        };\n    }, [\n        description\n    ]);\n    return {\n        'aria-describedby': description ? id : undefined\n    };\n}\n\n\nexport {$ef06256079686ba0$export$f8aeda7b10753fa1 as useDescription};\n//# sourceMappingURL=useDescription.module.js.map\n","import {useEffectEvent as $8ae05eaa5c114e9c$export$7f54fc3180508a52} from \"./useEffectEvent.mjs\";\nimport {useEffect as $ceQd6$useEffect} from \"react\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $e9faafb641e167db$export$90fc3a17d93f704c(ref, event, handler, options) {\n    let handleEvent = (0, $8ae05eaa5c114e9c$export$7f54fc3180508a52)(handler);\n    let isDisabled = handler == null;\n    (0, $ceQd6$useEffect)(()=>{\n        if (isDisabled || !ref.current) return;\n        let element = ref.current;\n        element.addEventListener(event, handleEvent, options);\n        return ()=>{\n            element.removeEventListener(event, handleEvent, options);\n        };\n    }, [\n        ref,\n        event,\n        options,\n        isDisabled\n    ]);\n}\n\n\nexport {$e9faafb641e167db$export$90fc3a17d93f704c as useEvent};\n//# sourceMappingURL=useEvent.module.js.map\n","import {getScrollParents as $a40c673dc9f6d9c7$export$94ed1c92c7beeb22} from \"./getScrollParents.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $2f04cbc44ee30ce0$export$53a0910f038337bd(scrollView, element) {\n    let offsetX = $2f04cbc44ee30ce0$var$relativeOffset(scrollView, element, 'left');\n    let offsetY = $2f04cbc44ee30ce0$var$relativeOffset(scrollView, element, 'top');\n    let width = element.offsetWidth;\n    let height = element.offsetHeight;\n    let x = scrollView.scrollLeft;\n    let y = scrollView.scrollTop;\n    // Account for top/left border offsetting the scroll top/Left + scroll padding\n    let { borderTopWidth: borderTopWidth, borderLeftWidth: borderLeftWidth, scrollPaddingTop: scrollPaddingTop, scrollPaddingRight: scrollPaddingRight, scrollPaddingBottom: scrollPaddingBottom, scrollPaddingLeft: scrollPaddingLeft } = getComputedStyle(scrollView);\n    let borderAdjustedX = x + parseInt(borderLeftWidth, 10);\n    let borderAdjustedY = y + parseInt(borderTopWidth, 10);\n    // Ignore end/bottom border via clientHeight/Width instead of offsetHeight/Width\n    let maxX = borderAdjustedX + scrollView.clientWidth;\n    let maxY = borderAdjustedY + scrollView.clientHeight;\n    // Get scroll padding values as pixels - defaults to 0 if no scroll padding\n    // is used.\n    let scrollPaddingTopNumber = parseInt(scrollPaddingTop, 10) || 0;\n    let scrollPaddingBottomNumber = parseInt(scrollPaddingBottom, 10) || 0;\n    let scrollPaddingRightNumber = parseInt(scrollPaddingRight, 10) || 0;\n    let scrollPaddingLeftNumber = parseInt(scrollPaddingLeft, 10) || 0;\n    if (offsetX <= x + scrollPaddingLeftNumber) x = offsetX - parseInt(borderLeftWidth, 10) - scrollPaddingLeftNumber;\n    else if (offsetX + width > maxX - scrollPaddingRightNumber) x += offsetX + width - maxX + scrollPaddingRightNumber;\n    if (offsetY <= borderAdjustedY + scrollPaddingTopNumber) y = offsetY - parseInt(borderTopWidth, 10) - scrollPaddingTopNumber;\n    else if (offsetY + height > maxY - scrollPaddingBottomNumber) y += offsetY + height - maxY + scrollPaddingBottomNumber;\n    scrollView.scrollLeft = x;\n    scrollView.scrollTop = y;\n}\n/**\n * Computes the offset left or top from child to ancestor by accumulating\n * offsetLeft or offsetTop through intervening offsetParents.\n */ function $2f04cbc44ee30ce0$var$relativeOffset(ancestor, child, axis) {\n    const prop = axis === 'left' ? 'offsetLeft' : 'offsetTop';\n    let sum = 0;\n    while(child.offsetParent){\n        sum += child[prop];\n        if (child.offsetParent === ancestor) break;\n        else if (child.offsetParent.contains(ancestor)) {\n            // If the ancestor is not `position:relative`, then we stop at\n            // _its_ offset parent, and we subtract off _its_ offset, so that\n            // we end up with the proper offset from child to ancestor.\n            sum -= ancestor[prop];\n            break;\n        }\n        child = child.offsetParent;\n    }\n    return sum;\n}\nfunction $2f04cbc44ee30ce0$export$c826860796309d1b(targetElement, opts) {\n    if (targetElement && document.contains(targetElement)) {\n        let root = document.scrollingElement || document.documentElement;\n        let isScrollPrevented = window.getComputedStyle(root).overflow === 'hidden';\n        // If scrolling is not currently prevented then we aren’t in a overlay nor is a overlay open, just use element.scrollIntoView to bring the element into view\n        if (!isScrollPrevented) {\n            var // use scrollIntoView({block: 'nearest'}) instead of .focus to check if the element is fully in view or not since .focus()\n            // won't cause a scroll if the element is already focused and doesn't behave consistently when an element is partially out of view horizontally vs vertically\n            _targetElement_scrollIntoView;\n            let { left: originalLeft, top: originalTop } = targetElement.getBoundingClientRect();\n            targetElement === null || targetElement === void 0 ? void 0 : (_targetElement_scrollIntoView = targetElement.scrollIntoView) === null || _targetElement_scrollIntoView === void 0 ? void 0 : _targetElement_scrollIntoView.call(targetElement, {\n                block: 'nearest'\n            });\n            let { left: newLeft, top: newTop } = targetElement.getBoundingClientRect();\n            // Account for sub pixel differences from rounding\n            if (Math.abs(originalLeft - newLeft) > 1 || Math.abs(originalTop - newTop) > 1) {\n                var _opts_containingElement_scrollIntoView, _opts_containingElement, _targetElement_scrollIntoView1;\n                opts === null || opts === void 0 ? void 0 : (_opts_containingElement = opts.containingElement) === null || _opts_containingElement === void 0 ? void 0 : (_opts_containingElement_scrollIntoView = _opts_containingElement.scrollIntoView) === null || _opts_containingElement_scrollIntoView === void 0 ? void 0 : _opts_containingElement_scrollIntoView.call(_opts_containingElement, {\n                    block: 'center',\n                    inline: 'center'\n                });\n                (_targetElement_scrollIntoView1 = targetElement.scrollIntoView) === null || _targetElement_scrollIntoView1 === void 0 ? void 0 : _targetElement_scrollIntoView1.call(targetElement, {\n                    block: 'nearest'\n                });\n            }\n        } else {\n            let scrollParents = (0, $a40c673dc9f6d9c7$export$94ed1c92c7beeb22)(targetElement);\n            // If scrolling is prevented, we don't want to scroll the body since it might move the overlay partially offscreen and the user can't scroll it back into view.\n            if (!isScrollPrevented) scrollParents.push(root);\n            for (let scrollParent of scrollParents)$2f04cbc44ee30ce0$export$53a0910f038337bd(scrollParent, targetElement);\n        }\n    }\n}\n\n\nexport {$2f04cbc44ee30ce0$export$53a0910f038337bd as scrollIntoView, $2f04cbc44ee30ce0$export$c826860796309d1b as scrollIntoViewport};\n//# sourceMappingURL=scrollIntoView.module.js.map\n","import {isAndroid as $c87311424ea30a05$export$a11b0059900ceec8} from \"./platform.mjs\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $6a7db85432448f7f$export$60278871457622de(event) {\n    // JAWS/NVDA with Firefox.\n    if (event.pointerType === '' && event.isTrusted) return true;\n    // Android TalkBack's detail value varies depending on the event listener providing the event so we have specific logic here instead\n    // If pointerType is defined, event is from a click listener. For events from mousedown listener, detail === 0 is a sufficient check\n    // to detect TalkBack virtual clicks.\n    if ((0, $c87311424ea30a05$export$a11b0059900ceec8)() && event.pointerType) return event.type === 'click' && event.buttons === 1;\n    return event.detail === 0 && !event.pointerType;\n}\nfunction $6a7db85432448f7f$export$29bf1b5f2c56cf63(event) {\n    // If the pointer size is zero, then we assume it's from a screen reader.\n    // Android TalkBack double tap will sometimes return a event with width and height of 1\n    // and pointerType === 'mouse' so we need to check for a specific combination of event attributes.\n    // Cannot use \"event.pressure === 0\" as the sole check due to Safari pointer events always returning pressure === 0\n    // instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216. event.pointerType === 'mouse' is to distingush\n    // Talkback double tap from Windows Firefox touch screen press\n    return !(0, $c87311424ea30a05$export$a11b0059900ceec8)() && event.width === 0 && event.height === 0 || event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse';\n}\n\n\nexport {$6a7db85432448f7f$export$60278871457622de as isVirtualClick, $6a7db85432448f7f$export$29bf1b5f2c56cf63 as isVirtualPointerEvent};\n//# sourceMappingURL=isVirtualEvent.module.js.map\n","import {useRef as $jtQ6z$useRef} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /* eslint-disable rulesdir/pure-render */ \nfunction $5a387cc49350e6db$export$722debc0e56fea39(value, isEqual) {\n    // Using a ref during render is ok here because it's only an optimization – both values are equivalent.\n    // If a render is thrown away, it'll still work the same no matter if the next render is the same or not.\n    let lastValue = (0, $jtQ6z$useRef)(null);\n    if (value && lastValue.current && isEqual(value, lastValue.current)) value = lastValue.current;\n    lastValue.current = value;\n    return value;\n}\n\n\nexport {$5a387cc49350e6db$export$722debc0e56fea39 as useDeepMemo};\n//# sourceMappingURL=useDeepMemo.module.js.map\n","import {useEffectEvent as $8ae05eaa5c114e9c$export$7f54fc3180508a52} from \"./useEffectEvent.mjs\";\nimport {useEffect as $8rM3G$useEffect} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $99facab73266f662$export$5add1d006293d136(ref, initialValue, onReset) {\n    let handleReset = (0, $8ae05eaa5c114e9c$export$7f54fc3180508a52)(()=>{\n        if (onReset) onReset(initialValue);\n    });\n    (0, $8rM3G$useEffect)(()=>{\n        var _ref_current;\n        let form = ref === null || ref === void 0 ? void 0 : (_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.form;\n        form === null || form === void 0 ? void 0 : form.addEventListener('reset', handleReset);\n        return ()=>{\n            form === null || form === void 0 ? void 0 : form.removeEventListener('reset', handleReset);\n        };\n    }, [\n        ref\n    ]);\n}\n\n\nexport {$99facab73266f662$export$5add1d006293d136 as useFormReset};\n//# sourceMappingURL=useFormReset.module.js.map\n","import {getScrollParent as $62d8ded9296f3872$export$cfa2225e87938781} from \"./getScrollParent.mjs\";\nimport {useEffectEvent as $8ae05eaa5c114e9c$export$7f54fc3180508a52} from \"./useEffectEvent.mjs\";\nimport {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {useRef as $7FoZl$useRef} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $a5fa973c1850dd36$export$ccaea96c28e8b9e7(props, ref) {\n    let { collection: collection, onLoadMore: onLoadMore, scrollOffset: scrollOffset = 1 } = props;\n    let sentinelObserver = (0, $7FoZl$useRef)(null);\n    let triggerLoadMore = (0, $8ae05eaa5c114e9c$export$7f54fc3180508a52)((entries)=>{\n        // Use \"isIntersecting\" over an equality check of 0 since it seems like there is cases where\n        // a intersection ratio of 0 can be reported when isIntersecting is actually true\n        for (let entry of entries)// Note that this will be called if the collection changes, even if onLoadMore was already called and is being processed.\n        // Up to user discretion as to how to handle these multiple onLoadMore calls\n        if (entry.isIntersecting && onLoadMore) onLoadMore();\n    });\n    (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n        if (ref.current) {\n            // Tear down and set up a new IntersectionObserver when the collection changes so that we can properly trigger additional loadMores if there is room for more items\n            // Need to do this tear down and set up since using a large rootMargin will mean the observer's callback isn't called even when scrolling the item into view beause its visibility hasn't actually changed\n            // https://codesandbox.io/p/sandbox/magical-swanson-dhgp89?file=%2Fsrc%2FApp.js%3A21%2C21\n            sentinelObserver.current = new IntersectionObserver(triggerLoadMore, {\n                root: (0, $62d8ded9296f3872$export$cfa2225e87938781)(ref === null || ref === void 0 ? void 0 : ref.current),\n                rootMargin: `0px ${100 * scrollOffset}% ${100 * scrollOffset}% ${100 * scrollOffset}%`\n            });\n            sentinelObserver.current.observe(ref.current);\n        }\n        return ()=>{\n            if (sentinelObserver.current) sentinelObserver.current.disconnect();\n        };\n    }, [\n        collection,\n        ref,\n        scrollOffset\n    ]);\n}\n\n\nexport {$a5fa973c1850dd36$export$ccaea96c28e8b9e7 as useLoadMoreSentinel};\n//# sourceMappingURL=useLoadMoreSentinel.module.js.map\n","import {version as $iulvE$version} from \"react\";\n\n\nfunction $cdc5a6778b766db2$export$a9d04c5684123369(value) {\n    const pieces = (0, $iulvE$version).split('.');\n    const major = parseInt(pieces[0], 10);\n    if (major >= 19) return value;\n    // compatibility with React < 19\n    return value ? 'true' : undefined;\n}\n\n\nexport {$cdc5a6778b766db2$export$a9d04c5684123369 as inertValue};\n//# sourceMappingURL=inertValue.module.js.map\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Custom event names for updating the autocomplete's aria-activedecendant.\nconst $5671b20cf9b562b2$export$447a38995de2c711 = 'react-aria-clear-focus';\nconst $5671b20cf9b562b2$export$831c820ad60f9d12 = 'react-aria-focus';\n\n\nexport {$5671b20cf9b562b2$export$447a38995de2c711 as CLEAR_FOCUS_EVENT, $5671b20cf9b562b2$export$831c820ad60f9d12 as FOCUS_EVENT};\n//# sourceMappingURL=constants.module.js.map\n","import {useLayoutEffect as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c} from \"./useLayoutEffect.mjs\";\nimport {flushSync as $jJMAe$flushSync} from \"react-dom\";\nimport {useState as $jJMAe$useState, useCallback as $jJMAe$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $d3f049242431219c$export$6d3443f2c48bfc20(ref, isReady = true) {\n    let [isEntering, setEntering] = (0, $jJMAe$useState)(true);\n    let isAnimationReady = isEntering && isReady;\n    // There are two cases for entry animations:\n    // 1. CSS @keyframes. The `animation` property is set during the isEntering state, and it is removed after the animation finishes.\n    // 2. CSS transitions. The initial styles are applied during the isEntering state, and removed immediately, causing the transition to occur.\n    //\n    // In the second case, cancel any transitions that were triggered prior to the isEntering = false state (when the transition is supposed to start).\n    // This can happen when isReady starts as false (e.g. popovers prior to placement calculation).\n    (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n        if (isAnimationReady && ref.current && 'getAnimations' in ref.current) {\n            for (let animation of ref.current.getAnimations())if (animation instanceof CSSTransition) animation.cancel();\n        }\n    }, [\n        ref,\n        isAnimationReady\n    ]);\n    $d3f049242431219c$var$useAnimation(ref, isAnimationReady, (0, $jJMAe$useCallback)(()=>setEntering(false), []));\n    return isAnimationReady;\n}\nfunction $d3f049242431219c$export$45fda7c47f93fd48(ref, isOpen) {\n    let [exitState, setExitState] = (0, $jJMAe$useState)(isOpen ? 'open' : 'closed');\n    switch(exitState){\n        case 'open':\n            // If isOpen becomes false, set the state to exiting.\n            if (!isOpen) setExitState('exiting');\n            break;\n        case 'closed':\n        case 'exiting':\n            // If we are exiting and isOpen becomes true, the animation was interrupted.\n            // Reset the state to open.\n            if (isOpen) setExitState('open');\n            break;\n    }\n    let isExiting = exitState === 'exiting';\n    $d3f049242431219c$var$useAnimation(ref, isExiting, (0, $jJMAe$useCallback)(()=>{\n        // Set the state to closed, which will cause the element to be unmounted.\n        setExitState((state)=>state === 'exiting' ? 'closed' : state);\n    }, []));\n    return isExiting;\n}\nfunction $d3f049242431219c$var$useAnimation(ref, isActive, onEnd) {\n    (0, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c)(()=>{\n        if (isActive && ref.current) {\n            if (!('getAnimations' in ref.current)) {\n                // JSDOM\n                onEnd();\n                return;\n            }\n            let animations = ref.current.getAnimations();\n            if (animations.length === 0) {\n                onEnd();\n                return;\n            }\n            let canceled = false;\n            Promise.all(animations.map((a)=>a.finished)).then(()=>{\n                if (!canceled) (0, $jJMAe$flushSync)(()=>{\n                    onEnd();\n                });\n            }).catch(()=>{});\n            return ()=>{\n                canceled = true;\n            };\n        }\n    }, [\n        ref,\n        isActive,\n        onEnd\n    ]);\n}\n\n\nexport {$d3f049242431219c$export$6d3443f2c48bfc20 as useEnterAnimation, $d3f049242431219c$export$45fda7c47f93fd48 as useExitAnimation};\n//# sourceMappingURL=animation.module.js.map\n","import {getOwnerWindow as $431fbd86ca7dc216$export$f21a1ffae260145a} from \"./domHelpers.mjs\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $7d2416ea0959daaa$var$supportsCheckVisibility = typeof Element !== 'undefined' && 'checkVisibility' in Element.prototype;\nfunction $7d2416ea0959daaa$var$isStyleVisible(element) {\n    const windowObject = (0, $431fbd86ca7dc216$export$f21a1ffae260145a)(element);\n    if (!(element instanceof windowObject.HTMLElement) && !(element instanceof windowObject.SVGElement)) return false;\n    let { display: display, visibility: visibility } = element.style;\n    let isVisible = display !== 'none' && visibility !== 'hidden' && visibility !== 'collapse';\n    if (isVisible) {\n        const { getComputedStyle: getComputedStyle } = element.ownerDocument.defaultView;\n        let { display: computedDisplay, visibility: computedVisibility } = getComputedStyle(element);\n        isVisible = computedDisplay !== 'none' && computedVisibility !== 'hidden' && computedVisibility !== 'collapse';\n    }\n    return isVisible;\n}\nfunction $7d2416ea0959daaa$var$isAttributeVisible(element, childElement) {\n    return !element.hasAttribute('hidden') && // Ignore HiddenSelect when tree walking.\n    !element.hasAttribute('data-react-aria-prevent-focus') && (element.nodeName === 'DETAILS' && childElement && childElement.nodeName !== 'SUMMARY' ? element.hasAttribute('open') : true);\n}\nfunction $7d2416ea0959daaa$export$e989c0fffaa6b27a(element, childElement) {\n    if ($7d2416ea0959daaa$var$supportsCheckVisibility) return element.checkVisibility({\n        visibilityProperty: true\n    }) && !element.closest('[data-react-aria-prevent-focus]');\n    return element.nodeName !== '#comment' && $7d2416ea0959daaa$var$isStyleVisible(element) && $7d2416ea0959daaa$var$isAttributeVisible(element, childElement) && (!element.parentElement || $7d2416ea0959daaa$export$e989c0fffaa6b27a(element.parentElement, element));\n}\n\n\nexport {$7d2416ea0959daaa$export$e989c0fffaa6b27a as isElementVisible};\n//# sourceMappingURL=isElementVisible.module.js.map\n","import {isElementVisible as $7d2416ea0959daaa$export$e989c0fffaa6b27a} from \"./isElementVisible.mjs\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $b4b717babfbb907b$var$focusableElements = [\n    'input:not([disabled]):not([type=hidden])',\n    'select:not([disabled])',\n    'textarea:not([disabled])',\n    'button:not([disabled])',\n    'a[href]',\n    'area[href]',\n    'summary',\n    'iframe',\n    'object',\n    'embed',\n    'audio[controls]',\n    'video[controls]',\n    '[contenteditable]:not([contenteditable^=\"false\"])',\n    'permission'\n];\nconst $b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR = $b4b717babfbb907b$var$focusableElements.join(':not([hidden]),') + ',[tabindex]:not([disabled]):not([hidden])';\n$b4b717babfbb907b$var$focusableElements.push('[tabindex]:not([tabindex=\"-1\"]):not([disabled])');\nconst $b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR = $b4b717babfbb907b$var$focusableElements.join(':not([hidden]):not([tabindex=\"-1\"]),');\nfunction $b4b717babfbb907b$export$4c063cf1350e6fed(element) {\n    return element.matches($b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR) && (0, $7d2416ea0959daaa$export$e989c0fffaa6b27a)(element) && !$b4b717babfbb907b$var$isInert(element);\n}\nfunction $b4b717babfbb907b$export$bebd5a1431fec25d(element) {\n    return element.matches($b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR) && (0, $7d2416ea0959daaa$export$e989c0fffaa6b27a)(element) && !$b4b717babfbb907b$var$isInert(element);\n}\nfunction $b4b717babfbb907b$var$isInert(element) {\n    let node = element;\n    while(node != null){\n        if (node instanceof node.ownerDocument.defaultView.HTMLElement && node.inert) return true;\n        node = node.parentElement;\n    }\n    return false;\n}\n\n\nexport {$b4b717babfbb907b$export$4c063cf1350e6fed as isFocusable, $b4b717babfbb907b$export$bebd5a1431fec25d as isTabbable};\n//# sourceMappingURL=isFocusable.module.js.map\n","import $3whtM$react, {useState as $3whtM$useState, useRef as $3whtM$useRef, useEffect as $3whtM$useEffect, useReducer as $3whtM$useReducer, useCallback as $3whtM$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nvar $458b0a5536c1a7cf$var$_React_useInsertionEffect;\n// Use the earliest effect possible to reset the ref below.\nconst $458b0a5536c1a7cf$var$useEarlyEffect = typeof document !== 'undefined' ? ($458b0a5536c1a7cf$var$_React_useInsertionEffect = (0, $3whtM$react)['useInsertionEffect']) !== null && $458b0a5536c1a7cf$var$_React_useInsertionEffect !== void 0 ? $458b0a5536c1a7cf$var$_React_useInsertionEffect : (0, $3whtM$react).useLayoutEffect : ()=>{};\nfunction $458b0a5536c1a7cf$export$40bfa8c7b0832715(value, defaultValue, onChange) {\n    // Store the value in both state and a ref. The state value will only be used when uncontrolled.\n    // The ref is used to track the most current value, which is passed to the function setState callback.\n    let [stateValue, setStateValue] = (0, $3whtM$useState)(value || defaultValue);\n    let valueRef = (0, $3whtM$useRef)(stateValue);\n    let isControlledRef = (0, $3whtM$useRef)(value !== undefined);\n    let isControlled = value !== undefined;\n    (0, $3whtM$useEffect)(()=>{\n        let wasControlled = isControlledRef.current;\n        if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n        isControlledRef.current = isControlled;\n    }, [\n        isControlled\n    ]);\n    // After each render, update the ref to the current value.\n    // This ensures that the setState callback argument is reset.\n    // Note: the effect should not have any dependencies so that controlled values always reset.\n    let currentValue = isControlled ? value : stateValue;\n    $458b0a5536c1a7cf$var$useEarlyEffect(()=>{\n        valueRef.current = currentValue;\n    });\n    let [, forceUpdate] = (0, $3whtM$useReducer)(()=>({}), {});\n    let setValue = (0, $3whtM$useCallback)((value, ...args)=>{\n        // @ts-ignore - TS doesn't know that T cannot be a function.\n        let newValue = typeof value === 'function' ? value(valueRef.current) : value;\n        if (!Object.is(valueRef.current, newValue)) {\n            // Update the ref so that the next setState callback has the most recent value.\n            valueRef.current = newValue;\n            setStateValue(newValue);\n            // Always trigger a re-render, even when controlled, so that the layout effect above runs to reset the value.\n            forceUpdate();\n            // Trigger onChange. Note that if setState is called multiple times in a single event,\n            // onChange will be called for each one instead of only once.\n            onChange === null || onChange === void 0 ? void 0 : onChange(newValue, ...args);\n        }\n    }, [\n        onChange\n    ]);\n    return [\n        currentValue,\n        setValue\n    ];\n}\n\n\nexport {$458b0a5536c1a7cf$export$40bfa8c7b0832715 as useControlledState};\n//# sourceMappingURL=useControlledState.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /**\n * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.\n */ function $9446cca9a3875146$export$7d15b64cf5a3a4c4(value, min = -Infinity, max = Infinity) {\n    let newValue = Math.min(Math.max(value, min), max);\n    return newValue;\n}\nfunction $9446cca9a3875146$export$e1a7b8e69ef6c52f(value, step) {\n    let roundedValue = value;\n    let precision = 0;\n    let stepString = step.toString();\n    // Handle negative exponents in exponential notation (e.g., \"1e-7\" → precision 8)\n    let eIndex = stepString.toLowerCase().indexOf('e-');\n    if (eIndex > 0) precision = Math.abs(Math.floor(Math.log10(Math.abs(step)))) + eIndex;\n    else {\n        let pointIndex = stepString.indexOf('.');\n        if (pointIndex >= 0) precision = stepString.length - pointIndex;\n    }\n    if (precision > 0) {\n        let pow = Math.pow(10, precision);\n        roundedValue = Math.round(roundedValue * pow) / pow;\n    }\n    return roundedValue;\n}\nfunction $9446cca9a3875146$export$cb6e0bb50bc19463(value, min, max, step) {\n    min = Number(min);\n    max = Number(max);\n    let remainder = (value - (isNaN(min) ? 0 : min)) % step;\n    let snappedValue = $9446cca9a3875146$export$e1a7b8e69ef6c52f(Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder, step);\n    if (!isNaN(min)) {\n        if (snappedValue < min) snappedValue = min;\n        else if (!isNaN(max) && snappedValue > max) snappedValue = min + Math.floor($9446cca9a3875146$export$e1a7b8e69ef6c52f((max - min) / step, step)) * step;\n    } else if (!isNaN(max) && snappedValue > max) snappedValue = Math.floor($9446cca9a3875146$export$e1a7b8e69ef6c52f(max / step, step)) * step;\n    // correct floating point behavior by rounding to step precision\n    snappedValue = $9446cca9a3875146$export$e1a7b8e69ef6c52f(snappedValue, step);\n    return snappedValue;\n}\nfunction $9446cca9a3875146$export$b6268554fba451f(value, digits, base = 10) {\n    const pow = Math.pow(base, digits);\n    return Math.round(value * pow) / pow;\n}\n\n\nexport {$9446cca9a3875146$export$7d15b64cf5a3a4c4 as clamp, $9446cca9a3875146$export$e1a7b8e69ef6c52f as roundToStepPrecision, $9446cca9a3875146$export$cb6e0bb50bc19463 as snapValueToStep, $9446cca9a3875146$export$b6268554fba451f as toFixedNumber};\n//# sourceMappingURL=number.module.js.map\n","import {useObjectRef as $iETbY$useObjectRef, mergeRefs as $iETbY$mergeRefs, mergeProps as $iETbY$mergeProps, useLayoutEffect as $iETbY$useLayoutEffect} from \"@react-aria/utils\";\nimport $iETbY$react, {useMemo as $iETbY$useMemo, useContext as $iETbY$useContext, useState as $iETbY$useState, useRef as $iETbY$useRef, useCallback as $iETbY$useCallback} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $64fa3d84918910a7$export$c62b8e45d58ddad9 = Symbol('default');\nfunction $64fa3d84918910a7$export$2881499e37b75b9a({ values: values, children: children }) {\n    for (let [Context, value] of values)// @ts-ignore\n    children = /*#__PURE__*/ (0, $iETbY$react).createElement(Context.Provider, {\n        value: value\n    }, children);\n    return children;\n}\nfunction $64fa3d84918910a7$export$4d86445c2cf5e3(props) {\n    let { className: className, style: style, children: children, defaultClassName: defaultClassName, defaultChildren: defaultChildren, defaultStyle: defaultStyle, values: values } = props;\n    return (0, $iETbY$useMemo)(()=>{\n        let computedClassName;\n        let computedStyle;\n        let computedChildren;\n        if (typeof className === 'function') computedClassName = className({\n            ...values,\n            defaultClassName: defaultClassName\n        });\n        else computedClassName = className;\n        if (typeof style === 'function') computedStyle = style({\n            ...values,\n            defaultStyle: defaultStyle || {}\n        });\n        else computedStyle = style;\n        if (typeof children === 'function') computedChildren = children({\n            ...values,\n            defaultChildren: defaultChildren\n        });\n        else if (children == null) computedChildren = defaultChildren;\n        else computedChildren = children;\n        return {\n            className: computedClassName !== null && computedClassName !== void 0 ? computedClassName : defaultClassName,\n            style: computedStyle || defaultStyle ? {\n                ...defaultStyle,\n                ...computedStyle\n            } : undefined,\n            children: computedChildren !== null && computedChildren !== void 0 ? computedChildren : defaultChildren,\n            'data-rac': ''\n        };\n    }, [\n        className,\n        style,\n        children,\n        defaultClassName,\n        defaultChildren,\n        defaultStyle,\n        values\n    ]);\n}\nfunction $64fa3d84918910a7$export$c245e6201fed2f75(// https://stackoverflow.com/questions/60898079/typescript-type-t-or-function-t-usage\nvalue, wrap) {\n    return (renderProps)=>wrap(typeof value === 'function' ? value(renderProps) : value, renderProps);\n}\nfunction $64fa3d84918910a7$export$fabf2dc03a41866e(context, slot) {\n    let ctx = (0, $iETbY$useContext)(context);\n    if (slot === null) // An explicit `null` slot means don't use context.\n    return null;\n    if (ctx && typeof ctx === 'object' && 'slots' in ctx && ctx.slots) {\n        let slotKey = slot || $64fa3d84918910a7$export$c62b8e45d58ddad9;\n        if (!ctx.slots[slotKey]) {\n            let availableSlots = new Intl.ListFormat().format(Object.keys(ctx.slots).map((p)=>`\"${p}\"`));\n            let errorMessage = slot ? `Invalid slot \"${slot}\".` : 'A slot prop is required.';\n            throw new Error(`${errorMessage} Valid slot names are ${availableSlots}.`);\n        }\n        return ctx.slots[slotKey];\n    }\n    // @ts-ignore\n    return ctx;\n}\nfunction $64fa3d84918910a7$export$29f1550f4b0d4415(props, ref, context) {\n    let ctx = $64fa3d84918910a7$export$fabf2dc03a41866e(context, props.slot) || {};\n    let { ref: contextRef, ...contextProps } = ctx;\n    let mergedRef = (0, $iETbY$useObjectRef)((0, $iETbY$useMemo)(()=>(0, $iETbY$mergeRefs)(ref, contextRef), [\n        ref,\n        contextRef\n    ]));\n    let mergedProps = (0, $iETbY$mergeProps)(contextProps, props);\n    // mergeProps does not merge `style`. Adding this there might be a breaking change.\n    if ('style' in contextProps && contextProps.style && 'style' in props && props.style) {\n        if (typeof contextProps.style === 'function' || typeof props.style === 'function') // @ts-ignore\n        mergedProps.style = (renderProps)=>{\n            let contextStyle = typeof contextProps.style === 'function' ? contextProps.style(renderProps) : contextProps.style;\n            let defaultStyle = {\n                ...renderProps.defaultStyle,\n                ...contextStyle\n            };\n            let style = typeof props.style === 'function' ? props.style({\n                ...renderProps,\n                defaultStyle: defaultStyle\n            }) : props.style;\n            return {\n                ...defaultStyle,\n                ...style\n            };\n        };\n        else // @ts-ignore\n        mergedProps.style = {\n            ...contextProps.style,\n            ...props.style\n        };\n    }\n    return [\n        mergedProps,\n        mergedRef\n    ];\n}\nfunction $64fa3d84918910a7$export$9d4c57ee4c6ffdd8(initialState = true) {\n    // Initial state is typically based on the parent having an aria-label or aria-labelledby.\n    // If it does, this value should be false so that we don't update the state and cause a rerender when we go through the layoutEffect\n    let [hasSlot, setHasSlot] = (0, $iETbY$useState)(initialState);\n    let hasRun = (0, $iETbY$useRef)(false);\n    // A callback ref which will run when the slotted element mounts.\n    // This should happen before the useLayoutEffect below.\n    let ref = (0, $iETbY$useCallback)((el)=>{\n        hasRun.current = true;\n        setHasSlot(!!el);\n    }, []);\n    // If the callback hasn't been called, then reset to false.\n    (0, $iETbY$useLayoutEffect)(()=>{\n        if (!hasRun.current) setHasSlot(false);\n    }, []);\n    return [\n        ref,\n        hasSlot\n    ];\n}\nfunction $64fa3d84918910a7$export$ef03459518577ad4(props) {\n    const prefix = /^(data-.*)$/;\n    let filteredProps = {};\n    for(const prop in props)if (!prefix.test(prop)) filteredProps[prop] = props[prop];\n    return filteredProps;\n}\n\n\nexport {$64fa3d84918910a7$export$c62b8e45d58ddad9 as DEFAULT_SLOT, $64fa3d84918910a7$export$2881499e37b75b9a as Provider, $64fa3d84918910a7$export$4d86445c2cf5e3 as useRenderProps, $64fa3d84918910a7$export$c245e6201fed2f75 as composeRenderProps, $64fa3d84918910a7$export$fabf2dc03a41866e as useSlottedContext, $64fa3d84918910a7$export$29f1550f4b0d4415 as useContextProps, $64fa3d84918910a7$export$9d4c57ee4c6ffdd8 as useSlot, $64fa3d84918910a7$export$ef03459518577ad4 as removeDataAttributes};\n//# sourceMappingURL=utils.module.js.map\n","const removedLocale = undefined;\nexport default removedLocale;\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /* Inspired by https://github.com/AlmeroSteyn/react-aria-live */ const $319e236875307eab$var$LIVEREGION_TIMEOUT_DELAY = 7000;\nlet $319e236875307eab$var$liveAnnouncer = null;\nfunction $319e236875307eab$export$a9b970dcc4ae71a9(message, assertiveness = 'assertive', timeout = $319e236875307eab$var$LIVEREGION_TIMEOUT_DELAY) {\n    if (!$319e236875307eab$var$liveAnnouncer) {\n        $319e236875307eab$var$liveAnnouncer = new $319e236875307eab$var$LiveAnnouncer();\n        // wait for the live announcer regions to be added to the dom, then announce\n        // otherwise Safari won't announce the message if it's added too quickly\n        // found most times less than 100ms were not consistent when announcing with Safari\n        // IS_REACT_ACT_ENVIRONMENT is used by React 18. Previous versions checked for the `jest` global.\n        // https://github.com/reactwg/react-18/discussions/102\n        // if we're in a test environment, announce without waiting\n        // @ts-ignore\n        if (!(typeof IS_REACT_ACT_ENVIRONMENT === 'boolean' ? IS_REACT_ACT_ENVIRONMENT : typeof jest !== 'undefined')) setTimeout(()=>{\n            if ($319e236875307eab$var$liveAnnouncer === null || $319e236875307eab$var$liveAnnouncer === void 0 ? void 0 : $319e236875307eab$var$liveAnnouncer.isAttached()) $319e236875307eab$var$liveAnnouncer === null || $319e236875307eab$var$liveAnnouncer === void 0 ? void 0 : $319e236875307eab$var$liveAnnouncer.announce(message, assertiveness, timeout);\n        }, 100);\n        else $319e236875307eab$var$liveAnnouncer.announce(message, assertiveness, timeout);\n    } else $319e236875307eab$var$liveAnnouncer.announce(message, assertiveness, timeout);\n}\nfunction $319e236875307eab$export$d10ae4f68404609a(assertiveness) {\n    if ($319e236875307eab$var$liveAnnouncer) $319e236875307eab$var$liveAnnouncer.clear(assertiveness);\n}\nfunction $319e236875307eab$export$d8686216b8b81b2f() {\n    if ($319e236875307eab$var$liveAnnouncer) {\n        $319e236875307eab$var$liveAnnouncer.destroy();\n        $319e236875307eab$var$liveAnnouncer = null;\n    }\n}\n// LiveAnnouncer is implemented using vanilla DOM, not React. That's because as of React 18\n// ReactDOM.render is deprecated, and the replacement, ReactDOM.createRoot is moved into a\n// subpath import `react-dom/client`. That makes it hard for us to support multiple React versions.\n// As a global API, we can't use portals without introducing a breaking API change. LiveAnnouncer\n// is simple enough to implement without React, so that's what we do here.\n// See this discussion for more details: https://github.com/reactwg/react-18/discussions/125#discussioncomment-2382638\nclass $319e236875307eab$var$LiveAnnouncer {\n    isAttached() {\n        var _this_node;\n        return (_this_node = this.node) === null || _this_node === void 0 ? void 0 : _this_node.isConnected;\n    }\n    createLog(ariaLive) {\n        let node = document.createElement('div');\n        node.setAttribute('role', 'log');\n        node.setAttribute('aria-live', ariaLive);\n        node.setAttribute('aria-relevant', 'additions');\n        return node;\n    }\n    destroy() {\n        if (!this.node) return;\n        document.body.removeChild(this.node);\n        this.node = null;\n    }\n    announce(message, assertiveness = 'assertive', timeout = $319e236875307eab$var$LIVEREGION_TIMEOUT_DELAY) {\n        var _this_assertiveLog, _this_politeLog;\n        if (!this.node) return;\n        let node = document.createElement('div');\n        if (typeof message === 'object') {\n            // To read an aria-labelledby, the element must have an appropriate role, such as img.\n            node.setAttribute('role', 'img');\n            node.setAttribute('aria-labelledby', message['aria-labelledby']);\n        } else node.textContent = message;\n        if (assertiveness === 'assertive') (_this_assertiveLog = this.assertiveLog) === null || _this_assertiveLog === void 0 ? void 0 : _this_assertiveLog.appendChild(node);\n        else (_this_politeLog = this.politeLog) === null || _this_politeLog === void 0 ? void 0 : _this_politeLog.appendChild(node);\n        if (message !== '') setTimeout(()=>{\n            node.remove();\n        }, timeout);\n    }\n    clear(assertiveness) {\n        if (!this.node) return;\n        if ((!assertiveness || assertiveness === 'assertive') && this.assertiveLog) this.assertiveLog.innerHTML = '';\n        if ((!assertiveness || assertiveness === 'polite') && this.politeLog) this.politeLog.innerHTML = '';\n    }\n    constructor(){\n        this.node = null;\n        this.assertiveLog = null;\n        this.politeLog = null;\n        if (typeof document !== 'undefined') {\n            this.node = document.createElement('div');\n            this.node.dataset.liveAnnouncer = 'true';\n            // copied from VisuallyHidden\n            Object.assign(this.node.style, {\n                border: 0,\n                clip: 'rect(0 0 0 0)',\n                clipPath: 'inset(50%)',\n                height: '1px',\n                margin: '-1px',\n                overflow: 'hidden',\n                padding: 0,\n                position: 'absolute',\n                width: '1px',\n                whiteSpace: 'nowrap'\n            });\n            this.assertiveLog = this.createLog('assertive');\n            this.node.appendChild(this.assertiveLog);\n            this.politeLog = this.createLog('polite');\n            this.node.appendChild(this.politeLog);\n            document.body.prepend(this.node);\n        }\n    }\n}\n\n\nexport {$319e236875307eab$export$a9b970dcc4ae71a9 as announce, $319e236875307eab$export$d10ae4f68404609a as clearAnnouncer, $319e236875307eab$export$d8686216b8b81b2f as destroyAnnouncer};\n//# sourceMappingURL=LiveAnnouncer.module.js.map\n","import {isWebKit as $fZVmS$isWebKit, clamp as $fZVmS$clamp} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $edcf132a9284368a$var$AXIS = {\n    top: 'top',\n    bottom: 'top',\n    left: 'left',\n    right: 'left'\n};\nconst $edcf132a9284368a$var$FLIPPED_DIRECTION = {\n    top: 'bottom',\n    bottom: 'top',\n    left: 'right',\n    right: 'left'\n};\nconst $edcf132a9284368a$var$CROSS_AXIS = {\n    top: 'left',\n    left: 'top'\n};\nconst $edcf132a9284368a$var$AXIS_SIZE = {\n    top: 'height',\n    left: 'width'\n};\nconst $edcf132a9284368a$var$TOTAL_SIZE = {\n    width: 'totalWidth',\n    height: 'totalHeight'\n};\nconst $edcf132a9284368a$var$PARSED_PLACEMENT_CACHE = {};\nlet $edcf132a9284368a$var$getVisualViewport = ()=>typeof document !== 'undefined' ? window.visualViewport : null;\nfunction $edcf132a9284368a$var$getContainerDimensions(containerNode, visualViewport) {\n    let width = 0, height = 0, totalWidth = 0, totalHeight = 0, top = 0, left = 0;\n    let scroll = {};\n    var _visualViewport_scale;\n    let isPinchZoomedIn = ((_visualViewport_scale = visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.scale) !== null && _visualViewport_scale !== void 0 ? _visualViewport_scale : 1) > 1;\n    // In the case where the container is `html` or `body` and the container doesn't have something like `position: relative`,\n    // then position absolute will be positioned relative to the viewport, also known as the `initial containing block`.\n    // That's why we use the visual viewport instead.\n    if (containerNode.tagName === 'BODY' || containerNode.tagName === 'HTML') {\n        let documentElement = document.documentElement;\n        totalWidth = documentElement.clientWidth;\n        totalHeight = documentElement.clientHeight;\n        var _visualViewport_width;\n        width = (_visualViewport_width = visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.width) !== null && _visualViewport_width !== void 0 ? _visualViewport_width : totalWidth;\n        var _visualViewport_height;\n        height = (_visualViewport_height = visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.height) !== null && _visualViewport_height !== void 0 ? _visualViewport_height : totalHeight;\n        scroll.top = documentElement.scrollTop || containerNode.scrollTop;\n        scroll.left = documentElement.scrollLeft || containerNode.scrollLeft;\n        // The goal of the below is to get a top/left value that represents the top/left of the visual viewport with\n        // respect to the layout viewport origin. This combined with the scrollTop/scrollLeft will allow us to calculate\n        // coordinates/values with respect to the visual viewport or with respect to the layout viewport.\n        if (visualViewport) {\n            top = visualViewport.offsetTop;\n            left = visualViewport.offsetLeft;\n        }\n    } else {\n        ({ width: width, height: height, top: top, left: left } = $edcf132a9284368a$var$getOffset(containerNode, false));\n        scroll.top = containerNode.scrollTop;\n        scroll.left = containerNode.scrollLeft;\n        totalWidth = width;\n        totalHeight = height;\n    }\n    if ((0, $fZVmS$isWebKit)() && (containerNode.tagName === 'BODY' || containerNode.tagName === 'HTML') && isPinchZoomedIn) {\n        // Safari will report a non-zero scrollTop/Left for the non-scrolling body/HTML element when pinch zoomed in unlike other browsers.\n        // Set to zero for parity calculations so we get consistent positioning of overlays across all browsers.\n        // Also switch to visualViewport.pageTop/pageLeft so that we still accomodate for scroll positioning for body/HTML elements that are actually scrollable\n        // before pinch zoom happens\n        scroll.top = 0;\n        scroll.left = 0;\n        var _visualViewport_pageTop;\n        top = (_visualViewport_pageTop = visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.pageTop) !== null && _visualViewport_pageTop !== void 0 ? _visualViewport_pageTop : 0;\n        var _visualViewport_pageLeft;\n        left = (_visualViewport_pageLeft = visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.pageLeft) !== null && _visualViewport_pageLeft !== void 0 ? _visualViewport_pageLeft : 0;\n    }\n    return {\n        width: width,\n        height: height,\n        totalWidth: totalWidth,\n        totalHeight: totalHeight,\n        scroll: scroll,\n        top: top,\n        left: left\n    };\n}\nfunction $edcf132a9284368a$var$getScroll(node) {\n    return {\n        top: node.scrollTop,\n        left: node.scrollLeft,\n        width: node.scrollWidth,\n        height: node.scrollHeight\n    };\n}\n// Determines the amount of space required when moving the overlay to ensure it remains in the boundary\nfunction $edcf132a9284368a$var$getDelta(axis, offset, size, // The dimensions of the boundary element that the popover is\n// positioned within (most of the time this is the <body>).\nboundaryDimensions, // The dimensions of the containing block element that the popover is\n// positioned relative to (e.g. parent with position: relative).\n// Usually this is the same as the boundary element, but if the popover\n// is portaled somewhere other than the body and has an ancestor with\n// position: relative/absolute, it will be different.\ncontainerDimensions, padding, containerOffsetWithBoundary) {\n    var _containerDimensions_scroll_axis;\n    let containerScroll = (_containerDimensions_scroll_axis = containerDimensions.scroll[axis]) !== null && _containerDimensions_scroll_axis !== void 0 ? _containerDimensions_scroll_axis : 0;\n    // The height/width of the boundary. Matches the axis along which we are adjusting the overlay position\n    let boundarySize = boundaryDimensions[$edcf132a9284368a$var$AXIS_SIZE[axis]];\n    // Calculate the edges of the boundary (accomodating for the boundary padding) and the edges of the overlay.\n    // Note that these values are with respect to the visual viewport (aka 0,0 is the top left of the viewport)\n    let boundaryStartEdge = containerOffsetWithBoundary[axis] + boundaryDimensions.scroll[$edcf132a9284368a$var$AXIS[axis]] + padding;\n    let boundaryEndEdge = containerOffsetWithBoundary[axis] + boundaryDimensions.scroll[$edcf132a9284368a$var$AXIS[axis]] + boundarySize - padding;\n    // transformed value of the left edge of the overlay\n    let startEdgeOffset = offset - containerScroll + boundaryDimensions.scroll[$edcf132a9284368a$var$AXIS[axis]] + containerOffsetWithBoundary[axis] - boundaryDimensions[$edcf132a9284368a$var$AXIS[axis]];\n    // transformed value of the right edge of the overlay\n    let endEdgeOffset = offset - containerScroll + size + boundaryDimensions.scroll[$edcf132a9284368a$var$AXIS[axis]] + containerOffsetWithBoundary[axis] - boundaryDimensions[$edcf132a9284368a$var$AXIS[axis]];\n    // If any of the overlay edges falls outside of the boundary, shift the overlay the required amount to align one of the overlay's\n    // edges with the closest boundary edge.\n    if (startEdgeOffset < boundaryStartEdge) return boundaryStartEdge - startEdgeOffset;\n    else if (endEdgeOffset > boundaryEndEdge) return Math.max(boundaryEndEdge - endEdgeOffset, boundaryStartEdge - startEdgeOffset);\n    else return 0;\n}\nfunction $edcf132a9284368a$var$getMargins(node) {\n    let style = window.getComputedStyle(node);\n    return {\n        top: parseInt(style.marginTop, 10) || 0,\n        bottom: parseInt(style.marginBottom, 10) || 0,\n        left: parseInt(style.marginLeft, 10) || 0,\n        right: parseInt(style.marginRight, 10) || 0\n    };\n}\nfunction $edcf132a9284368a$var$parsePlacement(input) {\n    if ($edcf132a9284368a$var$PARSED_PLACEMENT_CACHE[input]) return $edcf132a9284368a$var$PARSED_PLACEMENT_CACHE[input];\n    let [placement, crossPlacement] = input.split(' ');\n    let axis = $edcf132a9284368a$var$AXIS[placement] || 'right';\n    let crossAxis = $edcf132a9284368a$var$CROSS_AXIS[axis];\n    if (!$edcf132a9284368a$var$AXIS[crossPlacement]) crossPlacement = 'center';\n    let size = $edcf132a9284368a$var$AXIS_SIZE[axis];\n    let crossSize = $edcf132a9284368a$var$AXIS_SIZE[crossAxis];\n    $edcf132a9284368a$var$PARSED_PLACEMENT_CACHE[input] = {\n        placement: placement,\n        crossPlacement: crossPlacement,\n        axis: axis,\n        crossAxis: crossAxis,\n        size: size,\n        crossSize: crossSize\n    };\n    return $edcf132a9284368a$var$PARSED_PLACEMENT_CACHE[input];\n}\nfunction $edcf132a9284368a$var$computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset, containerDimensions) {\n    let { placement: placement, crossPlacement: crossPlacement, axis: axis, crossAxis: crossAxis, size: size, crossSize: crossSize } = placementInfo;\n    let position = {};\n    var _childOffset_crossAxis;\n    // button position\n    position[crossAxis] = (_childOffset_crossAxis = childOffset[crossAxis]) !== null && _childOffset_crossAxis !== void 0 ? _childOffset_crossAxis : 0;\n    var _childOffset_crossSize, _overlaySize_crossSize, _childOffset_crossSize1, _overlaySize_crossSize1;\n    if (crossPlacement === 'center') //  + (button size / 2) - (overlay size / 2)\n    // at this point the overlay center should match the button center\n    position[crossAxis] += (((_childOffset_crossSize = childOffset[crossSize]) !== null && _childOffset_crossSize !== void 0 ? _childOffset_crossSize : 0) - ((_overlaySize_crossSize = overlaySize[crossSize]) !== null && _overlaySize_crossSize !== void 0 ? _overlaySize_crossSize : 0)) / 2;\n    else if (crossPlacement !== crossAxis) //  + (button size) - (overlay size)\n    // at this point the overlay bottom should match the button bottom\n    position[crossAxis] += ((_childOffset_crossSize1 = childOffset[crossSize]) !== null && _childOffset_crossSize1 !== void 0 ? _childOffset_crossSize1 : 0) - ((_overlaySize_crossSize1 = overlaySize[crossSize]) !== null && _overlaySize_crossSize1 !== void 0 ? _overlaySize_crossSize1 : 0);\n     /* else {\n    the overlay top should match the button top\n  } */ \n    position[crossAxis] += crossOffset;\n    // overlay top or left overlapping arrow with button bottom or right\n    const minPosition = childOffset[crossAxis] - overlaySize[crossSize] + arrowSize + arrowBoundaryOffset;\n    // overlay bottom or right overlapping arrow with button top or left\n    const maxPosition = childOffset[crossAxis] + childOffset[crossSize] - arrowSize - arrowBoundaryOffset;\n    position[crossAxis] = (0, $fZVmS$clamp)(position[crossAxis], minPosition, maxPosition);\n    // Floor these so the position isn't placed on a partial pixel, only whole pixels. Shouldn't matter if it was floored or ceiled, so chose one.\n    if (placement === axis) {\n        // If the container is positioned (non-static), then we use the container's actual\n        // height, as `bottom` will be relative to this height.  But if the container is static,\n        // then it can only be the `document.body`, and `bottom` will be relative to _its_\n        // container.\n        let containerHeight = isContainerPositioned ? containerDimensions[size] : containerDimensions[$edcf132a9284368a$var$TOTAL_SIZE[size]];\n        position[$edcf132a9284368a$var$FLIPPED_DIRECTION[axis]] = Math.floor(containerHeight - childOffset[axis] + offset);\n    } else position[axis] = Math.floor(childOffset[axis] + childOffset[size] + offset);\n    return position;\n}\nfunction $edcf132a9284368a$var$getMaxHeight(position, boundaryDimensions, containerOffsetWithBoundary, isContainerPositioned, margins, padding, overlayHeight, heightGrowthDirection, containerDimensions, isContainerDescendentOfBoundary, visualViewport) {\n    var _position_bottom, _containerDimensions_scroll_top;\n    // For cases where position is set via \"bottom\" instead of \"top\", we need to calculate the true overlay top\n    // with respect to the container.\n    let overlayTop = (position.top != null ? position.top : containerDimensions[$edcf132a9284368a$var$TOTAL_SIZE.height] - ((_position_bottom = position.bottom) !== null && _position_bottom !== void 0 ? _position_bottom : 0) - overlayHeight) - ((_containerDimensions_scroll_top = containerDimensions.scroll.top) !== null && _containerDimensions_scroll_top !== void 0 ? _containerDimensions_scroll_top : 0);\n    // calculate the dimentions of the \"boundingRect\" which is most restrictive top/bottom of the boundaryRect and the visual view port\n    let boundaryToContainerTransformOffset = isContainerDescendentOfBoundary ? containerOffsetWithBoundary.top : 0;\n    var _visualViewport_offsetTop, _visualViewport_offsetTop1, _visualViewport_height;\n    let boundingRect = {\n        // This should be boundary top in container coord system vs viewport top in container coord system\n        // For the viewport top, there are several cases\n        // 1. pinchzoom case where we want the viewports offset top as top here\n        // 2. case where container is offset from the boundary and is contained by the boundary. In this case the top we want here is NOT 0, we want to take boundary's top even though is is a negative number OR the visual viewport, whichever is more restrictive\n        top: Math.max(boundaryDimensions.top + boundaryToContainerTransformOffset, ((_visualViewport_offsetTop = visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.offsetTop) !== null && _visualViewport_offsetTop !== void 0 ? _visualViewport_offsetTop : boundaryDimensions.top) + boundaryToContainerTransformOffset),\n        bottom: Math.min(boundaryDimensions.top + boundaryDimensions.height + boundaryToContainerTransformOffset, ((_visualViewport_offsetTop1 = visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.offsetTop) !== null && _visualViewport_offsetTop1 !== void 0 ? _visualViewport_offsetTop1 : 0) + ((_visualViewport_height = visualViewport === null || visualViewport === void 0 ? void 0 : visualViewport.height) !== null && _visualViewport_height !== void 0 ? _visualViewport_height : 0))\n    };\n    var _margins_top, _margins_bottom, _margins_top1, _margins_bottom1;\n    let maxHeight = heightGrowthDirection !== 'top' ? // We want the distance between the top of the overlay to the bottom of the boundary\n    Math.max(0, boundingRect.bottom // this is the bottom of the boundary\n     - overlayTop // this is the top of the overlay\n     - (((_margins_top = margins.top) !== null && _margins_top !== void 0 ? _margins_top : 0) + ((_margins_bottom = margins.bottom) !== null && _margins_bottom !== void 0 ? _margins_bottom : 0) + padding // save additional space for margin and padding\n    )) : Math.max(0, overlayTop + overlayHeight // this is the bottom of the overlay\n     - boundingRect.top // this is the top of the boundary\n     - (((_margins_top1 = margins.top) !== null && _margins_top1 !== void 0 ? _margins_top1 : 0) + ((_margins_bottom1 = margins.bottom) !== null && _margins_bottom1 !== void 0 ? _margins_bottom1 : 0) + padding // save additional space for margin and padding\n    ));\n    return maxHeight;\n}\nfunction $edcf132a9284368a$var$getAvailableSpace(boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding, placementInfo, containerDimensions, isContainerDescendentOfBoundary) {\n    let { placement: placement, axis: axis, size: size } = placementInfo;\n    var _containerDimensions_scroll_axis, _margins_axis;\n    if (placement === axis) return Math.max(0, childOffset[axis] // trigger start\n     - ((_containerDimensions_scroll_axis = containerDimensions.scroll[axis]) !== null && _containerDimensions_scroll_axis !== void 0 ? _containerDimensions_scroll_axis : 0 // transform trigger position to be with respect to viewport 0,0\n    ) - (boundaryDimensions[axis] + (isContainerDescendentOfBoundary ? containerOffsetWithBoundary[axis] : 0) // boundary start\n    ) - ((_margins_axis = margins[axis]) !== null && _margins_axis !== void 0 ? _margins_axis : 0 // margins usually for arrows or other decorations\n    ) - margins[$edcf132a9284368a$var$FLIPPED_DIRECTION[axis]] - padding); // padding between overlay and boundary\n    var _containerDimensions_scroll_axis1, _margins_axis1;\n    return Math.max(0, boundaryDimensions[size] + boundaryDimensions[axis] + (isContainerDescendentOfBoundary ? containerOffsetWithBoundary[axis] : 0) - childOffset[axis] - childOffset[size] + ((_containerDimensions_scroll_axis1 = containerDimensions.scroll[axis]) !== null && _containerDimensions_scroll_axis1 !== void 0 ? _containerDimensions_scroll_axis1 : 0) - ((_margins_axis1 = margins[axis]) !== null && _margins_axis1 !== void 0 ? _margins_axis1 : 0) - margins[$edcf132a9284368a$var$FLIPPED_DIRECTION[axis]] - padding);\n}\nfunction $edcf132a9284368a$export$6839422d1f33cee9(placementInput, childOffset, overlaySize, scrollSize, margins, padding, flip, boundaryDimensions, containerDimensions, containerOffsetWithBoundary, offset, crossOffset, isContainerPositioned, userSetMaxHeight, arrowSize, arrowBoundaryOffset, isContainerDescendentOfBoundary, visualViewport) {\n    let placementInfo = $edcf132a9284368a$var$parsePlacement(placementInput);\n    let { size: size, crossAxis: crossAxis, crossSize: crossSize, placement: placement, crossPlacement: crossPlacement } = placementInfo;\n    let position = $edcf132a9284368a$var$computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset, containerDimensions);\n    let normalizedOffset = offset;\n    let space = $edcf132a9284368a$var$getAvailableSpace(boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding + offset, placementInfo, containerDimensions, isContainerDescendentOfBoundary);\n    // Check if the scroll size of the overlay is greater than the available space to determine if we need to flip\n    if (flip && overlaySize[size] > space) {\n        let flippedPlacementInfo = $edcf132a9284368a$var$parsePlacement(`${$edcf132a9284368a$var$FLIPPED_DIRECTION[placement]} ${crossPlacement}`);\n        let flippedPosition = $edcf132a9284368a$var$computePosition(childOffset, boundaryDimensions, overlaySize, flippedPlacementInfo, offset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset, containerDimensions);\n        let flippedSpace = $edcf132a9284368a$var$getAvailableSpace(boundaryDimensions, containerOffsetWithBoundary, childOffset, margins, padding + offset, flippedPlacementInfo, containerDimensions, isContainerDescendentOfBoundary);\n        // If the available space for the flipped position is greater than the original available space, flip.\n        if (flippedSpace > space) {\n            placementInfo = flippedPlacementInfo;\n            position = flippedPosition;\n            normalizedOffset = offset;\n        }\n    }\n    // Determine the direction the height of the overlay can grow so that we can choose how to calculate the max height\n    let heightGrowthDirection = 'bottom';\n    if (placementInfo.axis === 'top') {\n        if (placementInfo.placement === 'top') heightGrowthDirection = 'top';\n        else if (placementInfo.placement === 'bottom') heightGrowthDirection = 'bottom';\n    } else if (placementInfo.crossAxis === 'top') {\n        if (placementInfo.crossPlacement === 'top') heightGrowthDirection = 'bottom';\n        else if (placementInfo.crossPlacement === 'bottom') heightGrowthDirection = 'top';\n    }\n    let delta = $edcf132a9284368a$var$getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, containerDimensions, padding, containerOffsetWithBoundary);\n    position[crossAxis] += delta;\n    let maxHeight = $edcf132a9284368a$var$getMaxHeight(position, boundaryDimensions, containerOffsetWithBoundary, isContainerPositioned, margins, padding, overlaySize.height, heightGrowthDirection, containerDimensions, isContainerDescendentOfBoundary, visualViewport);\n    if (userSetMaxHeight && userSetMaxHeight < maxHeight) maxHeight = userSetMaxHeight;\n    overlaySize.height = Math.min(overlaySize.height, maxHeight);\n    position = $edcf132a9284368a$var$computePosition(childOffset, boundaryDimensions, overlaySize, placementInfo, normalizedOffset, crossOffset, containerOffsetWithBoundary, isContainerPositioned, arrowSize, arrowBoundaryOffset, containerDimensions);\n    delta = $edcf132a9284368a$var$getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, containerDimensions, padding, containerOffsetWithBoundary);\n    position[crossAxis] += delta;\n    let arrowPosition = {};\n    // All values are transformed so that 0 is at the top/left of the overlay depending on the orientation\n    // Prefer the arrow being in the center of the trigger/overlay anchor element\n    // childOffset[crossAxis] + .5 * childOffset[crossSize] = absolute position with respect to the trigger's coordinate system that would place the arrow in the center of the trigger\n    // position[crossAxis] - margins[AXIS[crossAxis]] = value use to transform the position to a value with respect to the overlay's coordinate system. A child element's (aka arrow) position absolute's \"0\"\n    // is positioned after the margin of its parent (aka overlay) so we need to subtract it to get the proper coordinate transform\n    let origin = childOffset[crossAxis] - position[crossAxis] - margins[$edcf132a9284368a$var$AXIS[crossAxis]];\n    let preferredArrowPosition = origin + .5 * childOffset[crossSize];\n    // Min/Max position limits for the arrow with respect to the overlay\n    const arrowMinPosition = arrowSize / 2 + arrowBoundaryOffset;\n    var _margins_left, _margins_right, _margins_top, _margins_bottom;\n    // overlaySize[crossSize] - margins = true size of the overlay\n    const overlayMargin = $edcf132a9284368a$var$AXIS[crossAxis] === 'left' ? ((_margins_left = margins.left) !== null && _margins_left !== void 0 ? _margins_left : 0) + ((_margins_right = margins.right) !== null && _margins_right !== void 0 ? _margins_right : 0) : ((_margins_top = margins.top) !== null && _margins_top !== void 0 ? _margins_top : 0) + ((_margins_bottom = margins.bottom) !== null && _margins_bottom !== void 0 ? _margins_bottom : 0);\n    const arrowMaxPosition = overlaySize[crossSize] - overlayMargin - arrowSize / 2 - arrowBoundaryOffset;\n    // Min/Max position limits for the arrow with respect to the trigger/overlay anchor element\n    // Same margin accomodation done here as well as for the preferredArrowPosition\n    const arrowOverlappingChildMinEdge = childOffset[crossAxis] + arrowSize / 2 - (position[crossAxis] + margins[$edcf132a9284368a$var$AXIS[crossAxis]]);\n    const arrowOverlappingChildMaxEdge = childOffset[crossAxis] + childOffset[crossSize] - arrowSize / 2 - (position[crossAxis] + margins[$edcf132a9284368a$var$AXIS[crossAxis]]);\n    // Clamp the arrow positioning so that it always is within the bounds of the anchor and the overlay\n    const arrowPositionOverlappingChild = (0, $fZVmS$clamp)(preferredArrowPosition, arrowOverlappingChildMinEdge, arrowOverlappingChildMaxEdge);\n    arrowPosition[crossAxis] = (0, $fZVmS$clamp)(arrowPositionOverlappingChild, arrowMinPosition, arrowMaxPosition);\n    // If there is an arrow, use that as the origin so that animations are smooth.\n    // Otherwise use the target edge.\n    ({ placement: placement, crossPlacement: crossPlacement } = placementInfo);\n    if (arrowSize) origin = arrowPosition[crossAxis];\n    else if (crossPlacement === 'right') origin += childOffset[crossSize];\n    else if (crossPlacement === 'center') origin += childOffset[crossSize] / 2;\n    let crossOrigin = placement === 'left' || placement === 'top' ? overlaySize[size] : 0;\n    let triggerAnchorPoint = {\n        x: placement === 'top' || placement === 'bottom' ? origin : crossOrigin,\n        y: placement === 'left' || placement === 'right' ? origin : crossOrigin\n    };\n    return {\n        position: position,\n        maxHeight: maxHeight,\n        arrowOffsetLeft: arrowPosition.left,\n        arrowOffsetTop: arrowPosition.top,\n        placement: placement,\n        triggerAnchorPoint: triggerAnchorPoint\n    };\n}\nfunction $edcf132a9284368a$export$b3ceb0cbf1056d98(opts) {\n    let { placement: placement, targetNode: targetNode, overlayNode: overlayNode, scrollNode: scrollNode, padding: padding, shouldFlip: shouldFlip, boundaryElement: boundaryElement, offset: offset, crossOffset: crossOffset, maxHeight: maxHeight, arrowSize: arrowSize = 0, arrowBoundaryOffset: arrowBoundaryOffset = 0 } = opts;\n    let visualViewport = $edcf132a9284368a$var$getVisualViewport();\n    let container = overlayNode instanceof HTMLElement ? $edcf132a9284368a$var$getContainingBlock(overlayNode) : document.documentElement;\n    let isViewportContainer = container === document.documentElement;\n    const containerPositionStyle = window.getComputedStyle(container).position;\n    let isContainerPositioned = !!containerPositionStyle && containerPositionStyle !== 'static';\n    let childOffset = isViewportContainer ? $edcf132a9284368a$var$getOffset(targetNode, false) : $edcf132a9284368a$var$getPosition(targetNode, container, false);\n    if (!isViewportContainer) {\n        let { marginTop: marginTop, marginLeft: marginLeft } = window.getComputedStyle(targetNode);\n        childOffset.top += parseInt(marginTop, 10) || 0;\n        childOffset.left += parseInt(marginLeft, 10) || 0;\n    }\n    let overlaySize = $edcf132a9284368a$var$getOffset(overlayNode, true);\n    let margins = $edcf132a9284368a$var$getMargins(overlayNode);\n    var _margins_left, _margins_right;\n    overlaySize.width += ((_margins_left = margins.left) !== null && _margins_left !== void 0 ? _margins_left : 0) + ((_margins_right = margins.right) !== null && _margins_right !== void 0 ? _margins_right : 0);\n    var _margins_top, _margins_bottom;\n    overlaySize.height += ((_margins_top = margins.top) !== null && _margins_top !== void 0 ? _margins_top : 0) + ((_margins_bottom = margins.bottom) !== null && _margins_bottom !== void 0 ? _margins_bottom : 0);\n    let scrollSize = $edcf132a9284368a$var$getScroll(scrollNode);\n    // Note that due to logic inside getContainerDimensions, for cases where the boundary element is the body, we will return\n    // a height/width that matches the visual viewport size rather than the body's height/width (aka for zoom it will be zoom adjusted size)\n    // and a top/left that is adjusted as well (will return the top/left of the zoomed in viewport, or 0,0 for a non-zoomed body)\n    // Otherwise this returns the height/width of a arbitrary boundary element, and its top/left with respect to the viewport (NOTE THIS MEANS IT DOESNT INCLUDE SCROLL)\n    let boundaryDimensions = $edcf132a9284368a$var$getContainerDimensions(boundaryElement, visualViewport);\n    let containerDimensions = $edcf132a9284368a$var$getContainerDimensions(container, visualViewport);\n    // If the container is the HTML element wrapping the body element, the retrieved scrollTop/scrollLeft will be equal to the\n    // body element's scroll. Set the container's scroll values to 0 since the overlay's edge position value in getDelta don't then need to be further offset\n    // by the container scroll since they are essentially the same containing element and thus in the same coordinate system\n    let containerOffsetWithBoundary = $edcf132a9284368a$var$getPosition(boundaryElement, container, false);\n    let isContainerDescendentOfBoundary = boundaryElement.contains(container);\n    return $edcf132a9284368a$export$6839422d1f33cee9(placement, childOffset, overlaySize, scrollSize, margins, padding, shouldFlip, boundaryDimensions, containerDimensions, containerOffsetWithBoundary, offset, crossOffset, isContainerPositioned, maxHeight, arrowSize, arrowBoundaryOffset, isContainerDescendentOfBoundary, visualViewport);\n}\nfunction $edcf132a9284368a$export$4b834cebd9e5cebe(node, ignoreScale) {\n    let { top: top, left: left, width: width, height: height } = node.getBoundingClientRect();\n    // Use offsetWidth and offsetHeight if this is an HTML element, so that\n    // the size is not affected by scale transforms.\n    if (ignoreScale && node instanceof node.ownerDocument.defaultView.HTMLElement) {\n        width = node.offsetWidth;\n        height = node.offsetHeight;\n    }\n    return {\n        top: top,\n        left: left,\n        width: width,\n        height: height\n    };\n}\nfunction $edcf132a9284368a$var$getOffset(node, ignoreScale) {\n    let { top: top, left: left, width: width, height: height } = $edcf132a9284368a$export$4b834cebd9e5cebe(node, ignoreScale);\n    let { scrollTop: scrollTop, scrollLeft: scrollLeft, clientTop: clientTop, clientLeft: clientLeft } = document.documentElement;\n    return {\n        top: top + scrollTop - clientTop,\n        left: left + scrollLeft - clientLeft,\n        width: width,\n        height: height\n    };\n}\nfunction $edcf132a9284368a$var$getPosition(node, parent, ignoreScale) {\n    let style = window.getComputedStyle(node);\n    let offset;\n    if (style.position === 'fixed') offset = $edcf132a9284368a$export$4b834cebd9e5cebe(node, ignoreScale);\n    else {\n        offset = $edcf132a9284368a$var$getOffset(node, ignoreScale);\n        let parentOffset = $edcf132a9284368a$var$getOffset(parent, ignoreScale);\n        let parentStyle = window.getComputedStyle(parent);\n        parentOffset.top += (parseInt(parentStyle.borderTopWidth, 10) || 0) - parent.scrollTop;\n        parentOffset.left += (parseInt(parentStyle.borderLeftWidth, 10) || 0) - parent.scrollLeft;\n        offset.top -= parentOffset.top;\n        offset.left -= parentOffset.left;\n    }\n    offset.top -= parseInt(style.marginTop, 10) || 0;\n    offset.left -= parseInt(style.marginLeft, 10) || 0;\n    return offset;\n}\n// Returns the containing block of an element, which is the element that\n// this element will be positioned relative to.\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block\nfunction $edcf132a9284368a$var$getContainingBlock(node) {\n    // The offsetParent of an element in most cases equals the containing block.\n    // https://w3c.github.io/csswg-drafts/cssom-view/#dom-htmlelement-offsetparent\n    let offsetParent = node.offsetParent;\n    // The offsetParent algorithm terminates at the document body,\n    // even if the body is not a containing block. Double check that\n    // and use the documentElement if so.\n    if (offsetParent && offsetParent === document.body && window.getComputedStyle(offsetParent).position === 'static' && !$edcf132a9284368a$var$isContainingBlock(offsetParent)) offsetParent = document.documentElement;\n    // TODO(later): handle table elements?\n    // The offsetParent can be null if the element has position: fixed, or a few other cases.\n    // We have to walk up the tree manually in this case because fixed positioned elements\n    // are still positioned relative to their containing block, which is not always the viewport.\n    if (offsetParent == null) {\n        offsetParent = node.parentElement;\n        while(offsetParent && !$edcf132a9284368a$var$isContainingBlock(offsetParent))offsetParent = offsetParent.parentElement;\n    }\n    // Fall back to the viewport.\n    return offsetParent || document.documentElement;\n}\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\nfunction $edcf132a9284368a$var$isContainingBlock(node) {\n    let style = window.getComputedStyle(node);\n    return style.transform !== 'none' || /transform|perspective/.test(style.willChange) || style.filter !== 'none' || style.contain === 'paint' || 'backdropFilter' in style && style.backdropFilter !== 'none' || 'WebkitBackdropFilter' in style && style.WebkitBackdropFilter !== 'none';\n}\n\n\nexport {$edcf132a9284368a$export$6839422d1f33cee9 as calculatePositionInternal, $edcf132a9284368a$export$b3ceb0cbf1056d98 as calculatePosition, $edcf132a9284368a$export$4b834cebd9e5cebe as getRect};\n//# sourceMappingURL=calculatePosition.module.js.map\n","import {useEffect as $dRVb8$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $dd149f63282afbbf$export$f6211563215e3b37 = new WeakMap();\nfunction $dd149f63282afbbf$export$18fc8428861184da(opts) {\n    let { triggerRef: triggerRef, isOpen: isOpen, onClose: onClose } = opts;\n    (0, $dRVb8$useEffect)(()=>{\n        if (!isOpen || onClose === null) return;\n        let onScroll = (e)=>{\n            // Ignore if scrolling an scrollable region outside the trigger's tree.\n            let target = e.target;\n            // window is not a Node and doesn't have contain, but window contains everything\n            if (!triggerRef.current || target instanceof Node && !target.contains(triggerRef.current)) return;\n            // Ignore scroll events on any input or textarea as the cursor position can cause it to scroll\n            // such as in a combobox. Clicking the dropdown button places focus on the input, and if the\n            // text inside the input extends beyond the 'end', then it will scroll so the cursor is visible at the end.\n            if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) return;\n            let onCloseHandler = onClose || $dd149f63282afbbf$export$f6211563215e3b37.get(triggerRef.current);\n            if (onCloseHandler) onCloseHandler();\n        };\n        window.addEventListener('scroll', onScroll, true);\n        return ()=>{\n            window.removeEventListener('scroll', onScroll, true);\n        };\n    }, [\n        isOpen,\n        onClose,\n        triggerRef\n    ]);\n}\n\n\nexport {$dd149f63282afbbf$export$f6211563215e3b37 as onCloseMap, $dd149f63282afbbf$export$18fc8428861184da as useCloseOnScroll};\n//# sourceMappingURL=useCloseOnScroll.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // https://en.wikipedia.org/wiki/Right-to-left\nconst $148a7a147e38ea7f$var$RTL_SCRIPTS = new Set([\n    'Arab',\n    'Syrc',\n    'Samr',\n    'Mand',\n    'Thaa',\n    'Mend',\n    'Nkoo',\n    'Adlm',\n    'Rohg',\n    'Hebr'\n]);\nconst $148a7a147e38ea7f$var$RTL_LANGS = new Set([\n    'ae',\n    'ar',\n    'arc',\n    'bcc',\n    'bqi',\n    'ckb',\n    'dv',\n    'fa',\n    'glk',\n    'he',\n    'ku',\n    'mzn',\n    'nqo',\n    'pnb',\n    'ps',\n    'sd',\n    'ug',\n    'ur',\n    'yi'\n]);\nfunction $148a7a147e38ea7f$export$702d680b21cbd764(localeString) {\n    // If the Intl.Locale API is available, use it to get the locale's text direction.\n    if (Intl.Locale) {\n        let locale = new Intl.Locale(localeString).maximize();\n        // Use the text info object to get the direction if possible.\n        // @ts-ignore - this was implemented as a property by some browsers before it was standardized as a function.\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo\n        let textInfo = typeof locale.getTextInfo === 'function' ? locale.getTextInfo() : locale.textInfo;\n        if (textInfo) return textInfo.direction === 'rtl';\n        // Fallback: guess using the script.\n        // This is more accurate than guessing by language, since languages can be written in multiple scripts.\n        if (locale.script) return $148a7a147e38ea7f$var$RTL_SCRIPTS.has(locale.script);\n    }\n    // If not, just guess by the language (first part of the locale)\n    let lang = localeString.split('-')[0];\n    return $148a7a147e38ea7f$var$RTL_LANGS.has(lang);\n}\n\n\nexport {$148a7a147e38ea7f$export$702d680b21cbd764 as isRTL};\n//# sourceMappingURL=utils.module.js.map\n","import {isRTL as $148a7a147e38ea7f$export$702d680b21cbd764} from \"./utils.mjs\";\nimport {useState as $ffhGL$useState, useEffect as $ffhGL$useEffect} from \"react\";\nimport {useIsSSR as $ffhGL$useIsSSR} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n// Locale passed from server by PackageLocalizationProvider.\nconst $1e5a04cdaf7d1af8$var$localeSymbol = Symbol.for('react-aria.i18n.locale');\nfunction $1e5a04cdaf7d1af8$export$f09106e7c6677ec5() {\n    let locale = typeof window !== 'undefined' && window[$1e5a04cdaf7d1af8$var$localeSymbol] || typeof navigator !== 'undefined' && (navigator.language || navigator.userLanguage) || 'en-US';\n    try {\n        Intl.DateTimeFormat.supportedLocalesOf([\n            locale\n        ]);\n    } catch  {\n        locale = 'en-US';\n    }\n    return {\n        locale: locale,\n        direction: (0, $148a7a147e38ea7f$export$702d680b21cbd764)(locale) ? 'rtl' : 'ltr'\n    };\n}\nlet $1e5a04cdaf7d1af8$var$currentLocale = $1e5a04cdaf7d1af8$export$f09106e7c6677ec5();\nlet $1e5a04cdaf7d1af8$var$listeners = new Set();\nfunction $1e5a04cdaf7d1af8$var$updateLocale() {\n    $1e5a04cdaf7d1af8$var$currentLocale = $1e5a04cdaf7d1af8$export$f09106e7c6677ec5();\n    for (let listener of $1e5a04cdaf7d1af8$var$listeners)listener($1e5a04cdaf7d1af8$var$currentLocale);\n}\nfunction $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a() {\n    let isSSR = (0, $ffhGL$useIsSSR)();\n    let [defaultLocale, setDefaultLocale] = (0, $ffhGL$useState)($1e5a04cdaf7d1af8$var$currentLocale);\n    (0, $ffhGL$useEffect)(()=>{\n        if ($1e5a04cdaf7d1af8$var$listeners.size === 0) window.addEventListener('languagechange', $1e5a04cdaf7d1af8$var$updateLocale);\n        $1e5a04cdaf7d1af8$var$listeners.add(setDefaultLocale);\n        return ()=>{\n            $1e5a04cdaf7d1af8$var$listeners.delete(setDefaultLocale);\n            if ($1e5a04cdaf7d1af8$var$listeners.size === 0) window.removeEventListener('languagechange', $1e5a04cdaf7d1af8$var$updateLocale);\n        };\n    }, []);\n    // We cannot determine the browser's language on the server, so default to\n    // en-US. This will be updated after hydration on the client to the correct value.\n    if (isSSR) {\n        let locale = typeof window !== 'undefined' && window[$1e5a04cdaf7d1af8$var$localeSymbol];\n        return {\n            locale: locale || 'en-US',\n            direction: 'ltr'\n        };\n    }\n    return defaultLocale;\n}\n\n\nexport {$1e5a04cdaf7d1af8$export$f09106e7c6677ec5 as getDefaultLocale, $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a as useDefaultLocale};\n//# sourceMappingURL=useDefaultLocale.module.js.map\n","import {isRTL as $148a7a147e38ea7f$export$702d680b21cbd764} from \"./utils.mjs\";\nimport {useDefaultLocale as $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a} from \"./useDefaultLocale.mjs\";\nimport $h9FiU$react, {useContext as $h9FiU$useContext} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $18f2051aff69b9bf$var$I18nContext = /*#__PURE__*/ (0, $h9FiU$react).createContext(null);\n/**\n * Internal component that handles the case when locale is provided.\n */ function $18f2051aff69b9bf$var$I18nProviderWithLocale(props) {\n    let { locale: locale, children: children } = props;\n    let value = (0, $h9FiU$react).useMemo(()=>({\n            locale: locale,\n            direction: (0, $148a7a147e38ea7f$export$702d680b21cbd764)(locale) ? 'rtl' : 'ltr'\n        }), [\n        locale\n    ]);\n    return /*#__PURE__*/ (0, $h9FiU$react).createElement($18f2051aff69b9bf$var$I18nContext.Provider, {\n        value: value\n    }, children);\n}\n/**\n * Internal component that handles the case when no locale is provided.\n */ function $18f2051aff69b9bf$var$I18nProviderWithDefaultLocale(props) {\n    let { children: children } = props;\n    let defaultLocale = (0, $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a)();\n    return /*#__PURE__*/ (0, $h9FiU$react).createElement($18f2051aff69b9bf$var$I18nContext.Provider, {\n        value: defaultLocale\n    }, children);\n}\nfunction $18f2051aff69b9bf$export$a54013f0d02a8f82(props) {\n    let { locale: locale, children: children } = props;\n    // Conditionally render different components to avoid calling useDefaultLocale.\n    // This is necessary because useDefaultLocale triggers a re-render.\n    if (locale) return /*#__PURE__*/ (0, $h9FiU$react).createElement($18f2051aff69b9bf$var$I18nProviderWithLocale, {\n        locale: locale,\n        children: children\n    });\n    return /*#__PURE__*/ (0, $h9FiU$react).createElement($18f2051aff69b9bf$var$I18nProviderWithDefaultLocale, {\n        children: children\n    });\n}\nfunction $18f2051aff69b9bf$export$43bb16f9c6d9e3f7() {\n    let defaultLocale = (0, $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a)();\n    let context = (0, $h9FiU$useContext)($18f2051aff69b9bf$var$I18nContext);\n    return context || defaultLocale;\n}\n\n\nexport {$18f2051aff69b9bf$export$a54013f0d02a8f82 as I18nProvider, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7 as useLocale};\n//# sourceMappingURL=context.module.js.map\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $5b160d28a433310d$var$localeSymbol = Symbol.for('react-aria.i18n.locale');\nconst $5b160d28a433310d$var$stringsSymbol = Symbol.for('react-aria.i18n.strings');\nlet $5b160d28a433310d$var$cachedGlobalStrings = undefined;\nclass $5b160d28a433310d$export$c17fa47878dc55b6 {\n    /** Returns a localized string for the given key and locale. */ getStringForLocale(key, locale) {\n        let strings = this.getStringsForLocale(locale);\n        let string = strings[key];\n        if (!string) throw new Error(`Could not find intl message ${key} in ${locale} locale`);\n        return string;\n    }\n    /** Returns all localized strings for the given locale. */ getStringsForLocale(locale) {\n        let strings = this.strings[locale];\n        if (!strings) {\n            strings = $5b160d28a433310d$var$getStringsForLocale(locale, this.strings, this.defaultLocale);\n            this.strings[locale] = strings;\n        }\n        return strings;\n    }\n    static getGlobalDictionaryForPackage(packageName) {\n        if (typeof window === 'undefined') return null;\n        let locale = window[$5b160d28a433310d$var$localeSymbol];\n        if ($5b160d28a433310d$var$cachedGlobalStrings === undefined) {\n            let globalStrings = window[$5b160d28a433310d$var$stringsSymbol];\n            if (!globalStrings) return null;\n            $5b160d28a433310d$var$cachedGlobalStrings = {};\n            for(let pkg in globalStrings)$5b160d28a433310d$var$cachedGlobalStrings[pkg] = new $5b160d28a433310d$export$c17fa47878dc55b6({\n                [locale]: globalStrings[pkg]\n            }, locale);\n        }\n        let dictionary = $5b160d28a433310d$var$cachedGlobalStrings === null || $5b160d28a433310d$var$cachedGlobalStrings === void 0 ? void 0 : $5b160d28a433310d$var$cachedGlobalStrings[packageName];\n        if (!dictionary) throw new Error(`Strings for package \"${packageName}\" were not included by LocalizedStringProvider. Please add it to the list passed to createLocalizedStringDictionary.`);\n        return dictionary;\n    }\n    constructor(messages, defaultLocale = 'en-US'){\n        // Clone messages so we don't modify the original object.\n        // Filter out entries with falsy values which may have been caused by applying optimize-locales-plugin.\n        this.strings = Object.fromEntries(Object.entries(messages).filter(([, v])=>v));\n        this.defaultLocale = defaultLocale;\n    }\n}\nfunction $5b160d28a433310d$var$getStringsForLocale(locale, strings, defaultLocale = 'en-US') {\n    // If there is an exact match, use it.\n    if (strings[locale]) return strings[locale];\n    // Attempt to find the closest match by language.\n    // For example, if the locale is fr-CA (French Canadian), but there is only\n    // an fr-FR (France) set of strings, use that.\n    // This could be replaced with Intl.LocaleMatcher once it is supported.\n    // https://github.com/tc39/proposal-intl-localematcher\n    let language = $5b160d28a433310d$var$getLanguage(locale);\n    if (strings[language]) return strings[language];\n    for(let key in strings){\n        if (key.startsWith(language + '-')) return strings[key];\n    }\n    // Nothing close, use english.\n    return strings[defaultLocale];\n}\nfunction $5b160d28a433310d$var$getLanguage(locale) {\n    // @ts-ignore\n    if (Intl.Locale) // @ts-ignore\n    return new Intl.Locale(locale).language;\n    return locale.split('-')[0];\n}\n\n\nexport {$5b160d28a433310d$export$c17fa47878dc55b6 as LocalizedStringDictionary};\n//# sourceMappingURL=LocalizedStringDictionary.module.js.map\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $6db58dc88e78b024$var$pluralRulesCache = new Map();\nconst $6db58dc88e78b024$var$numberFormatCache = new Map();\nclass $6db58dc88e78b024$export$2f817fcdc4b89ae0 {\n    /** Formats a localized string for the given key with the provided variables. */ format(key, variables) {\n        let message = this.strings.getStringForLocale(key, this.locale);\n        return typeof message === 'function' ? message(variables, this) : message;\n    }\n    plural(count, options, type = 'cardinal') {\n        let opt = options['=' + count];\n        if (opt) return typeof opt === 'function' ? opt() : opt;\n        let key = this.locale + ':' + type;\n        let pluralRules = $6db58dc88e78b024$var$pluralRulesCache.get(key);\n        if (!pluralRules) {\n            pluralRules = new Intl.PluralRules(this.locale, {\n                type: type\n            });\n            $6db58dc88e78b024$var$pluralRulesCache.set(key, pluralRules);\n        }\n        let selected = pluralRules.select(count);\n        opt = options[selected] || options.other;\n        return typeof opt === 'function' ? opt() : opt;\n    }\n    number(value) {\n        let numberFormat = $6db58dc88e78b024$var$numberFormatCache.get(this.locale);\n        if (!numberFormat) {\n            numberFormat = new Intl.NumberFormat(this.locale);\n            $6db58dc88e78b024$var$numberFormatCache.set(this.locale, numberFormat);\n        }\n        return numberFormat.format(value);\n    }\n    select(options, value) {\n        let opt = options[value] || options.other;\n        return typeof opt === 'function' ? opt() : opt;\n    }\n    constructor(locale, strings){\n        this.locale = locale;\n        this.strings = strings;\n    }\n}\n\n\nexport {$6db58dc88e78b024$export$2f817fcdc4b89ae0 as LocalizedStringFormatter};\n//# sourceMappingURL=LocalizedStringFormatter.module.js.map\n","import {useLocale as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7} from \"./context.mjs\";\nimport {LocalizedStringDictionary as $6ksNp$LocalizedStringDictionary, LocalizedStringFormatter as $6ksNp$LocalizedStringFormatter} from \"@internationalized/string\";\nimport {useMemo as $6ksNp$useMemo} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $fca6afa0e843324b$var$cache = new WeakMap();\nfunction $fca6afa0e843324b$var$getCachedDictionary(strings) {\n    let dictionary = $fca6afa0e843324b$var$cache.get(strings);\n    if (!dictionary) {\n        dictionary = new (0, $6ksNp$LocalizedStringDictionary)(strings);\n        $fca6afa0e843324b$var$cache.set(strings, dictionary);\n    }\n    return dictionary;\n}\nfunction $fca6afa0e843324b$export$87b761675e8eaa10(strings, packageName) {\n    return packageName && (0, $6ksNp$LocalizedStringDictionary).getGlobalDictionaryForPackage(packageName) || $fca6afa0e843324b$var$getCachedDictionary(strings);\n}\nfunction $fca6afa0e843324b$export$f12b703ca79dfbb1(strings, packageName) {\n    let { locale: locale } = (0, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7)();\n    let dictionary = $fca6afa0e843324b$export$87b761675e8eaa10(strings, packageName);\n    return (0, $6ksNp$useMemo)(()=>new (0, $6ksNp$LocalizedStringFormatter)(locale, dictionary), [\n        locale,\n        dictionary\n    ]);\n}\n\n\nexport {$fca6afa0e843324b$export$87b761675e8eaa10 as useLocalizedStringDictionary, $fca6afa0e843324b$export$f12b703ca79dfbb1 as useLocalizedStringFormatter};\n//# sourceMappingURL=useLocalizedStringFormatter.module.js.map\n","import {useLocale as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7} from \"./context.mjs\";\nimport {useMemo as $l9VVR$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $33bf17300c498528$export$a2f47a3d2973640(options = {}) {\n    let { locale: locale } = (0, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7)();\n    return (0, $l9VVR$useMemo)(()=>new Intl.ListFormat(locale, options), [\n        locale,\n        options\n    ]);\n}\n\n\nexport {$33bf17300c498528$export$a2f47a3d2973640 as useListFormatter};\n//# sourceMappingURL=useListFormatter.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $2b4dce13dd5a17fa$export$842a2cf37af977e1(amount, numerator) {\n    return amount - numerator * Math.floor(amount / numerator);\n}\n\n\nexport {$2b4dce13dd5a17fa$export$842a2cf37af977e1 as mod};\n//# sourceMappingURL=utils.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f} from \"./CalendarDate.mjs\";\nimport {mod as $2b4dce13dd5a17fa$export$842a2cf37af977e1} from \"./utils.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $3b62074eb05584b2$var$EPOCH = 1721426; // 001/01/03 Julian C.E.\nfunction $3b62074eb05584b2$export$f297eb839006d339(era, year, month, day) {\n    year = $3b62074eb05584b2$export$c36e0ecb2d4fa69d(era, year);\n    let y1 = year - 1;\n    let monthOffset = -2;\n    if (month <= 2) monthOffset = 0;\n    else if ($3b62074eb05584b2$export$553d7fa8e3805fc0(year)) monthOffset = -1;\n    return $3b62074eb05584b2$var$EPOCH - 1 + 365 * y1 + Math.floor(y1 / 4) - Math.floor(y1 / 100) + Math.floor(y1 / 400) + Math.floor((367 * month - 362) / 12 + monthOffset + day);\n}\nfunction $3b62074eb05584b2$export$553d7fa8e3805fc0(year) {\n    return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\nfunction $3b62074eb05584b2$export$c36e0ecb2d4fa69d(era, year) {\n    return era === 'BC' ? 1 - year : year;\n}\nfunction $3b62074eb05584b2$export$4475b7e617eb123c(year) {\n    let era = 'AD';\n    if (year <= 0) {\n        era = 'BC';\n        year = 1 - year;\n    }\n    return [\n        era,\n        year\n    ];\n}\nconst $3b62074eb05584b2$var$daysInMonth = {\n    standard: [\n        31,\n        28,\n        31,\n        30,\n        31,\n        30,\n        31,\n        31,\n        30,\n        31,\n        30,\n        31\n    ],\n    leapyear: [\n        31,\n        29,\n        31,\n        30,\n        31,\n        30,\n        31,\n        31,\n        30,\n        31,\n        30,\n        31\n    ]\n};\nclass $3b62074eb05584b2$export$80ee6245ec4f29ec {\n    fromJulianDay(jd) {\n        let jd0 = jd;\n        let depoch = jd0 - $3b62074eb05584b2$var$EPOCH;\n        let quadricent = Math.floor(depoch / 146097);\n        let dqc = (0, $2b4dce13dd5a17fa$export$842a2cf37af977e1)(depoch, 146097);\n        let cent = Math.floor(dqc / 36524);\n        let dcent = (0, $2b4dce13dd5a17fa$export$842a2cf37af977e1)(dqc, 36524);\n        let quad = Math.floor(dcent / 1461);\n        let dquad = (0, $2b4dce13dd5a17fa$export$842a2cf37af977e1)(dcent, 1461);\n        let yindex = Math.floor(dquad / 365);\n        let extendedYear = quadricent * 400 + cent * 100 + quad * 4 + yindex + (cent !== 4 && yindex !== 4 ? 1 : 0);\n        let [era, year] = $3b62074eb05584b2$export$4475b7e617eb123c(extendedYear);\n        let yearDay = jd0 - $3b62074eb05584b2$export$f297eb839006d339(era, year, 1, 1);\n        let leapAdj = 2;\n        if (jd0 < $3b62074eb05584b2$export$f297eb839006d339(era, year, 3, 1)) leapAdj = 0;\n        else if ($3b62074eb05584b2$export$553d7fa8e3805fc0(year)) leapAdj = 1;\n        let month = Math.floor(((yearDay + leapAdj) * 12 + 373) / 367);\n        let day = jd0 - $3b62074eb05584b2$export$f297eb839006d339(era, year, month, 1) + 1;\n        return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(era, year, month, day);\n    }\n    toJulianDay(date) {\n        return $3b62074eb05584b2$export$f297eb839006d339(date.era, date.year, date.month, date.day);\n    }\n    getDaysInMonth(date) {\n        return $3b62074eb05584b2$var$daysInMonth[$3b62074eb05584b2$export$553d7fa8e3805fc0(date.year) ? 'leapyear' : 'standard'][date.month - 1];\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    getMonthsInYear(date) {\n        return 12;\n    }\n    getDaysInYear(date) {\n        return $3b62074eb05584b2$export$553d7fa8e3805fc0(date.year) ? 366 : 365;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    getYearsInEra(date) {\n        return 9999;\n    }\n    getEras() {\n        return [\n            'BC',\n            'AD'\n        ];\n    }\n    isInverseEra(date) {\n        return date.era === 'BC';\n    }\n    balanceDate(date) {\n        if (date.year <= 0) {\n            date.era = date.era === 'BC' ? 'AD' : 'BC';\n            date.year = 1 - date.year;\n        }\n    }\n    constructor(){\n        this.identifier = 'gregory';\n    }\n}\n\n\nexport {$3b62074eb05584b2$export$f297eb839006d339 as gregorianToJulianDay, $3b62074eb05584b2$export$c36e0ecb2d4fa69d as getExtendedYear, $3b62074eb05584b2$export$553d7fa8e3805fc0 as isLeapYear, $3b62074eb05584b2$export$4475b7e617eb123c as fromExtendedYear, $3b62074eb05584b2$export$80ee6245ec4f29ec as GregorianCalendar};\n//# sourceMappingURL=GregorianCalendar.module.js.map\n","import {fromAbsolute as $11d87f3f76e88657$export$1b96692a1ba042ac, toAbsolute as $11d87f3f76e88657$export$5107c82f94518f5c, toCalendar as $11d87f3f76e88657$export$b4a036af3fc0b032, toCalendarDate as $11d87f3f76e88657$export$93522d1a439f3617} from \"./conversion.mjs\";\nimport {weekStartData as $2fe286d2fb449abb$export$7a5acbd77d414bd9} from \"./weekStartData.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $14e0f24ef4ac5c92$export$ea39ec197993aef0(a, b) {\n    b = (0, $11d87f3f76e88657$export$b4a036af3fc0b032)(b, a.calendar);\n    return a.era === b.era && a.year === b.year && a.month === b.month && a.day === b.day;\n}\nfunction $14e0f24ef4ac5c92$export$a18c89cbd24170ff(a, b) {\n    b = (0, $11d87f3f76e88657$export$b4a036af3fc0b032)(b, a.calendar);\n    // In the Japanese calendar, months can span multiple eras/years, so only compare the first of the month.\n    a = $14e0f24ef4ac5c92$export$a5a3b454ada2268e(a);\n    b = $14e0f24ef4ac5c92$export$a5a3b454ada2268e(b);\n    return a.era === b.era && a.year === b.year && a.month === b.month;\n}\nfunction $14e0f24ef4ac5c92$export$5841f9eb9773f25f(a, b) {\n    b = (0, $11d87f3f76e88657$export$b4a036af3fc0b032)(b, a.calendar);\n    a = $14e0f24ef4ac5c92$export$f91e89d3d0406102(a);\n    b = $14e0f24ef4ac5c92$export$f91e89d3d0406102(b);\n    return a.era === b.era && a.year === b.year;\n}\nfunction $14e0f24ef4ac5c92$export$91b62ebf2ba703ee(a, b) {\n    return $14e0f24ef4ac5c92$export$dbc69fd56b53d5e(a.calendar, b.calendar) && $14e0f24ef4ac5c92$export$ea39ec197993aef0(a, b);\n}\nfunction $14e0f24ef4ac5c92$export$5a8da0c44a3afdf2(a, b) {\n    return $14e0f24ef4ac5c92$export$dbc69fd56b53d5e(a.calendar, b.calendar) && $14e0f24ef4ac5c92$export$a18c89cbd24170ff(a, b);\n}\nfunction $14e0f24ef4ac5c92$export$ea840f5a6dda8147(a, b) {\n    return $14e0f24ef4ac5c92$export$dbc69fd56b53d5e(a.calendar, b.calendar) && $14e0f24ef4ac5c92$export$5841f9eb9773f25f(a, b);\n}\nfunction $14e0f24ef4ac5c92$export$dbc69fd56b53d5e(a, b) {\n    var _a_isEqual, _b_isEqual;\n    var _a_isEqual1, _ref;\n    return (_ref = (_a_isEqual1 = (_a_isEqual = a.isEqual) === null || _a_isEqual === void 0 ? void 0 : _a_isEqual.call(a, b)) !== null && _a_isEqual1 !== void 0 ? _a_isEqual1 : (_b_isEqual = b.isEqual) === null || _b_isEqual === void 0 ? void 0 : _b_isEqual.call(b, a)) !== null && _ref !== void 0 ? _ref : a.identifier === b.identifier;\n}\nfunction $14e0f24ef4ac5c92$export$629b0a497aa65267(date, timeZone) {\n    return $14e0f24ef4ac5c92$export$ea39ec197993aef0(date, $14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(timeZone));\n}\nconst $14e0f24ef4ac5c92$var$DAY_MAP = {\n    sun: 0,\n    mon: 1,\n    tue: 2,\n    wed: 3,\n    thu: 4,\n    fri: 5,\n    sat: 6\n};\nfunction $14e0f24ef4ac5c92$export$2061056d06d7cdf7(date, locale, firstDayOfWeek) {\n    let julian = date.calendar.toJulianDay(date);\n    // If julian is negative, then julian % 7 will be negative, so we adjust\n    // accordingly.  Julian day 0 is Monday.\n    let weekStart = firstDayOfWeek ? $14e0f24ef4ac5c92$var$DAY_MAP[firstDayOfWeek] : $14e0f24ef4ac5c92$var$getWeekStart(locale);\n    let dayOfWeek = Math.ceil(julian + 1 - weekStart) % 7;\n    if (dayOfWeek < 0) dayOfWeek += 7;\n    return dayOfWeek;\n}\nfunction $14e0f24ef4ac5c92$export$461939dd4422153(timeZone) {\n    return (0, $11d87f3f76e88657$export$1b96692a1ba042ac)(Date.now(), timeZone);\n}\nfunction $14e0f24ef4ac5c92$export$d0bdf45af03a6ea3(timeZone) {\n    return (0, $11d87f3f76e88657$export$93522d1a439f3617)($14e0f24ef4ac5c92$export$461939dd4422153(timeZone));\n}\nfunction $14e0f24ef4ac5c92$export$68781ddf31c0090f(a, b) {\n    return a.calendar.toJulianDay(a) - b.calendar.toJulianDay(b);\n}\nfunction $14e0f24ef4ac5c92$export$c19a80a9721b80f6(a, b) {\n    return $14e0f24ef4ac5c92$var$timeToMs(a) - $14e0f24ef4ac5c92$var$timeToMs(b);\n}\nfunction $14e0f24ef4ac5c92$var$timeToMs(a) {\n    return a.hour * 3600000 + a.minute * 60000 + a.second * 1000 + a.millisecond;\n}\nfunction $14e0f24ef4ac5c92$export$126c91c941de7e(a, timeZone) {\n    let ms = (0, $11d87f3f76e88657$export$5107c82f94518f5c)(a, timeZone);\n    let tomorrow = a.add({\n        days: 1\n    });\n    let tomorrowMs = (0, $11d87f3f76e88657$export$5107c82f94518f5c)(tomorrow, timeZone);\n    return (tomorrowMs - ms) / 3600000;\n}\nlet $14e0f24ef4ac5c92$var$localTimeZone = null;\nfunction $14e0f24ef4ac5c92$export$aa8b41735afcabd2() {\n    if ($14e0f24ef4ac5c92$var$localTimeZone == null) $14e0f24ef4ac5c92$var$localTimeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone;\n    return $14e0f24ef4ac5c92$var$localTimeZone;\n}\nfunction $14e0f24ef4ac5c92$export$61a9d83ceb59a3dd(timeZone) {\n    $14e0f24ef4ac5c92$var$localTimeZone = timeZone;\n}\nfunction $14e0f24ef4ac5c92$export$55753838ffe79333() {\n    $14e0f24ef4ac5c92$var$localTimeZone = null;\n}\nfunction $14e0f24ef4ac5c92$export$a5a3b454ada2268e(date) {\n    // Use `subtract` instead of `set` so we don't get constrained in an era.\n    return date.subtract({\n        days: date.day - 1\n    });\n}\nfunction $14e0f24ef4ac5c92$export$a2258d9c4118825c(date) {\n    return date.add({\n        days: date.calendar.getDaysInMonth(date) - date.day\n    });\n}\nfunction $14e0f24ef4ac5c92$export$f91e89d3d0406102(date) {\n    return $14e0f24ef4ac5c92$export$a5a3b454ada2268e(date.subtract({\n        months: date.month - 1\n    }));\n}\nfunction $14e0f24ef4ac5c92$export$8b7aa55c66d5569e(date) {\n    return $14e0f24ef4ac5c92$export$a2258d9c4118825c(date.add({\n        months: date.calendar.getMonthsInYear(date) - date.month\n    }));\n}\nfunction $14e0f24ef4ac5c92$export$5412ac11713b72ad(date) {\n    if (date.calendar.getMinimumMonthInYear) return date.calendar.getMinimumMonthInYear(date);\n    return 1;\n}\nfunction $14e0f24ef4ac5c92$export$b2f4953d301981d5(date) {\n    if (date.calendar.getMinimumDayInMonth) return date.calendar.getMinimumDayInMonth(date);\n    return 1;\n}\nfunction $14e0f24ef4ac5c92$export$42c81a444fbfb5d4(date, locale, firstDayOfWeek) {\n    let dayOfWeek = $14e0f24ef4ac5c92$export$2061056d06d7cdf7(date, locale, firstDayOfWeek);\n    return date.subtract({\n        days: dayOfWeek\n    });\n}\nfunction $14e0f24ef4ac5c92$export$ef8b6d9133084f4e(date, locale, firstDayOfWeek) {\n    return $14e0f24ef4ac5c92$export$42c81a444fbfb5d4(date, locale, firstDayOfWeek).add({\n        days: 6\n    });\n}\nconst $14e0f24ef4ac5c92$var$cachedRegions = new Map();\nconst $14e0f24ef4ac5c92$var$cachedWeekInfo = new Map();\nfunction $14e0f24ef4ac5c92$var$getRegion(locale) {\n    // If the Intl.Locale API is available, use it to get the region for the locale.\n    // @ts-ignore\n    if (Intl.Locale) {\n        // Constructing an Intl.Locale is expensive, so cache the result.\n        let region = $14e0f24ef4ac5c92$var$cachedRegions.get(locale);\n        if (!region) {\n            // @ts-ignore\n            region = new Intl.Locale(locale).maximize().region;\n            if (region) $14e0f24ef4ac5c92$var$cachedRegions.set(locale, region);\n        }\n        return region;\n    }\n    // If not, just try splitting the string.\n    // If the second part of the locale string is 'u',\n    // then this is a unicode extension, so ignore it.\n    // Otherwise, it should be the region.\n    let part = locale.split('-')[1];\n    return part === 'u' ? undefined : part;\n}\nfunction $14e0f24ef4ac5c92$var$getWeekStart(locale) {\n    // TODO: use Intl.Locale for this once browsers support the weekInfo property\n    // https://github.com/tc39/proposal-intl-locale-info\n    let weekInfo = $14e0f24ef4ac5c92$var$cachedWeekInfo.get(locale);\n    if (!weekInfo) {\n        if (Intl.Locale) {\n            // @ts-ignore\n            let localeInst = new Intl.Locale(locale);\n            if ('getWeekInfo' in localeInst) {\n                // @ts-expect-error\n                weekInfo = localeInst.getWeekInfo();\n                if (weekInfo) {\n                    $14e0f24ef4ac5c92$var$cachedWeekInfo.set(locale, weekInfo);\n                    return weekInfo.firstDay;\n                }\n            }\n        }\n        let region = $14e0f24ef4ac5c92$var$getRegion(locale);\n        if (locale.includes('-fw-')) {\n            // pull the value for the attribute fw from strings such as en-US-u-ca-iso8601-fw-tue or en-US-u-ca-iso8601-fw-mon-nu-thai\n            // where the fw attribute could be followed by another unicode locale extension or not\n            let day = locale.split('-fw-')[1].split('-')[0];\n            if (day === 'mon') weekInfo = {\n                firstDay: 1\n            };\n            else if (day === 'tue') weekInfo = {\n                firstDay: 2\n            };\n            else if (day === 'wed') weekInfo = {\n                firstDay: 3\n            };\n            else if (day === 'thu') weekInfo = {\n                firstDay: 4\n            };\n            else if (day === 'fri') weekInfo = {\n                firstDay: 5\n            };\n            else if (day === 'sat') weekInfo = {\n                firstDay: 6\n            };\n            else weekInfo = {\n                firstDay: 0\n            };\n        } else if (locale.includes('-ca-iso8601')) weekInfo = {\n            firstDay: 1\n        };\n        else weekInfo = {\n            firstDay: region ? (0, $2fe286d2fb449abb$export$7a5acbd77d414bd9)[region] || 0 : 0\n        };\n        $14e0f24ef4ac5c92$var$cachedWeekInfo.set(locale, weekInfo);\n    }\n    return weekInfo.firstDay;\n}\nfunction $14e0f24ef4ac5c92$export$ccc1b2479e7dd654(date, locale, firstDayOfWeek) {\n    let days = date.calendar.getDaysInMonth(date);\n    return Math.ceil(($14e0f24ef4ac5c92$export$2061056d06d7cdf7($14e0f24ef4ac5c92$export$a5a3b454ada2268e(date), locale, firstDayOfWeek) + days) / 7);\n}\nfunction $14e0f24ef4ac5c92$export$5c333a116e949cdd(a, b) {\n    if (a && b) return a.compare(b) <= 0 ? a : b;\n    return a || b;\n}\nfunction $14e0f24ef4ac5c92$export$a75f2bff57811055(a, b) {\n    if (a && b) return a.compare(b) >= 0 ? a : b;\n    return a || b;\n}\nconst $14e0f24ef4ac5c92$var$WEEKEND_DATA = {\n    AF: [\n        4,\n        5\n    ],\n    AE: [\n        5,\n        6\n    ],\n    BH: [\n        5,\n        6\n    ],\n    DZ: [\n        5,\n        6\n    ],\n    EG: [\n        5,\n        6\n    ],\n    IL: [\n        5,\n        6\n    ],\n    IQ: [\n        5,\n        6\n    ],\n    IR: [\n        5,\n        5\n    ],\n    JO: [\n        5,\n        6\n    ],\n    KW: [\n        5,\n        6\n    ],\n    LY: [\n        5,\n        6\n    ],\n    OM: [\n        5,\n        6\n    ],\n    QA: [\n        5,\n        6\n    ],\n    SA: [\n        5,\n        6\n    ],\n    SD: [\n        5,\n        6\n    ],\n    SY: [\n        5,\n        6\n    ],\n    YE: [\n        5,\n        6\n    ]\n};\nfunction $14e0f24ef4ac5c92$export$618d60ea299da42(date, locale) {\n    let julian = date.calendar.toJulianDay(date);\n    // If julian is negative, then julian % 7 will be negative, so we adjust\n    // accordingly.  Julian day 0 is Monday.\n    let dayOfWeek = Math.ceil(julian + 1) % 7;\n    if (dayOfWeek < 0) dayOfWeek += 7;\n    let region = $14e0f24ef4ac5c92$var$getRegion(locale);\n    // Use Intl.Locale for this once weekInfo is supported.\n    // https://github.com/tc39/proposal-intl-locale-info\n    let [start, end] = $14e0f24ef4ac5c92$var$WEEKEND_DATA[region] || [\n        6,\n        0\n    ];\n    return dayOfWeek === start || dayOfWeek === end;\n}\nfunction $14e0f24ef4ac5c92$export$ee9d87258e1d19ed(date, locale) {\n    return !$14e0f24ef4ac5c92$export$618d60ea299da42(date, locale);\n}\n\n\nexport {$14e0f24ef4ac5c92$export$ea39ec197993aef0 as isSameDay, $14e0f24ef4ac5c92$export$a18c89cbd24170ff as isSameMonth, $14e0f24ef4ac5c92$export$a5a3b454ada2268e as startOfMonth, $14e0f24ef4ac5c92$export$5841f9eb9773f25f as isSameYear, $14e0f24ef4ac5c92$export$f91e89d3d0406102 as startOfYear, $14e0f24ef4ac5c92$export$91b62ebf2ba703ee as isEqualDay, $14e0f24ef4ac5c92$export$dbc69fd56b53d5e as isEqualCalendar, $14e0f24ef4ac5c92$export$5a8da0c44a3afdf2 as isEqualMonth, $14e0f24ef4ac5c92$export$ea840f5a6dda8147 as isEqualYear, $14e0f24ef4ac5c92$export$629b0a497aa65267 as isToday, $14e0f24ef4ac5c92$export$d0bdf45af03a6ea3 as today, $14e0f24ef4ac5c92$export$2061056d06d7cdf7 as getDayOfWeek, $14e0f24ef4ac5c92$export$461939dd4422153 as now, $14e0f24ef4ac5c92$export$68781ddf31c0090f as compareDate, $14e0f24ef4ac5c92$export$c19a80a9721b80f6 as compareTime, $14e0f24ef4ac5c92$export$126c91c941de7e as getHoursInDay, $14e0f24ef4ac5c92$export$aa8b41735afcabd2 as getLocalTimeZone, $14e0f24ef4ac5c92$export$61a9d83ceb59a3dd as setLocalTimeZone, $14e0f24ef4ac5c92$export$55753838ffe79333 as resetLocalTimeZone, $14e0f24ef4ac5c92$export$a2258d9c4118825c as endOfMonth, $14e0f24ef4ac5c92$export$8b7aa55c66d5569e as endOfYear, $14e0f24ef4ac5c92$export$5412ac11713b72ad as getMinimumMonthInYear, $14e0f24ef4ac5c92$export$b2f4953d301981d5 as getMinimumDayInMonth, $14e0f24ef4ac5c92$export$42c81a444fbfb5d4 as startOfWeek, $14e0f24ef4ac5c92$export$ef8b6d9133084f4e as endOfWeek, $14e0f24ef4ac5c92$export$ccc1b2479e7dd654 as getWeeksInMonth, $14e0f24ef4ac5c92$export$5c333a116e949cdd as minDate, $14e0f24ef4ac5c92$export$a75f2bff57811055 as maxDate, $14e0f24ef4ac5c92$export$618d60ea299da42 as isWeekend, $14e0f24ef4ac5c92$export$ee9d87258e1d19ed as isWeekday};\n//# sourceMappingURL=queries.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f, CalendarDateTime as $35ea8db9cb2ccb90$export$ca871e8dbb80966f, Time as $35ea8db9cb2ccb90$export$680ea196effce5f, ZonedDateTime as $35ea8db9cb2ccb90$export$d3b7288e7994edea} from \"./CalendarDate.mjs\";\nimport {constrain as $735220c2d4774dd3$export$c4e2ecac49351ef2} from \"./manipulation.mjs\";\nimport {getExtendedYear as $3b62074eb05584b2$export$c36e0ecb2d4fa69d, GregorianCalendar as $3b62074eb05584b2$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\nimport {getLocalTimeZone as $14e0f24ef4ac5c92$export$aa8b41735afcabd2, isEqualCalendar as $14e0f24ef4ac5c92$export$dbc69fd56b53d5e} from \"./queries.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from the TC39 Temporal proposal.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\n\n\nfunction $11d87f3f76e88657$export$bd4fb2bc8bb06fb(date) {\n    date = $11d87f3f76e88657$export$b4a036af3fc0b032(date, new (0, $3b62074eb05584b2$export$80ee6245ec4f29ec)());\n    let year = (0, $3b62074eb05584b2$export$c36e0ecb2d4fa69d)(date.era, date.year);\n    return $11d87f3f76e88657$var$epochFromParts(year, date.month, date.day, date.hour, date.minute, date.second, date.millisecond);\n}\nfunction $11d87f3f76e88657$var$epochFromParts(year, month, day, hour, minute, second, millisecond) {\n    // Note: Date.UTC() interprets one and two-digit years as being in the\n    // 20th century, so don't use it\n    let date = new Date();\n    date.setUTCHours(hour, minute, second, millisecond);\n    date.setUTCFullYear(year, month - 1, day);\n    return date.getTime();\n}\nfunction $11d87f3f76e88657$export$59c99f3515d3493f(ms, timeZone) {\n    // Fast path for UTC.\n    if (timeZone === 'UTC') return 0;\n    // Fast path: for local timezone after 1970, use native Date.\n    if (ms > 0 && timeZone === (0, $14e0f24ef4ac5c92$export$aa8b41735afcabd2)()) return new Date(ms).getTimezoneOffset() * -60000;\n    let { year: year, month: month, day: day, hour: hour, minute: minute, second: second } = $11d87f3f76e88657$var$getTimeZoneParts(ms, timeZone);\n    let utc = $11d87f3f76e88657$var$epochFromParts(year, month, day, hour, minute, second, 0);\n    return utc - Math.floor(ms / 1000) * 1000;\n}\nconst $11d87f3f76e88657$var$formattersByTimeZone = new Map();\nfunction $11d87f3f76e88657$var$getTimeZoneParts(ms, timeZone) {\n    let formatter = $11d87f3f76e88657$var$formattersByTimeZone.get(timeZone);\n    if (!formatter) {\n        formatter = new Intl.DateTimeFormat('en-US', {\n            timeZone: timeZone,\n            hour12: false,\n            era: 'short',\n            year: 'numeric',\n            month: 'numeric',\n            day: 'numeric',\n            hour: 'numeric',\n            minute: 'numeric',\n            second: 'numeric'\n        });\n        $11d87f3f76e88657$var$formattersByTimeZone.set(timeZone, formatter);\n    }\n    let parts = formatter.formatToParts(new Date(ms));\n    let namedParts = {};\n    for (let part of parts)if (part.type !== 'literal') namedParts[part.type] = part.value;\n    return {\n        // Firefox returns B instead of BC... https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n        year: namedParts.era === 'BC' || namedParts.era === 'B' ? -namedParts.year + 1 : +namedParts.year,\n        month: +namedParts.month,\n        day: +namedParts.day,\n        hour: namedParts.hour === '24' ? 0 : +namedParts.hour,\n        minute: +namedParts.minute,\n        second: +namedParts.second\n    };\n}\nconst $11d87f3f76e88657$var$DAYMILLIS = 86400000;\nfunction $11d87f3f76e88657$export$136f38efe7caf549(date, timeZone) {\n    let ms = $11d87f3f76e88657$export$bd4fb2bc8bb06fb(date);\n    let earlier = ms - $11d87f3f76e88657$export$59c99f3515d3493f(ms - $11d87f3f76e88657$var$DAYMILLIS, timeZone);\n    let later = ms - $11d87f3f76e88657$export$59c99f3515d3493f(ms + $11d87f3f76e88657$var$DAYMILLIS, timeZone);\n    return $11d87f3f76e88657$var$getValidWallTimes(date, timeZone, earlier, later);\n}\nfunction $11d87f3f76e88657$var$getValidWallTimes(date, timeZone, earlier, later) {\n    let found = earlier === later ? [\n        earlier\n    ] : [\n        earlier,\n        later\n    ];\n    return found.filter((absolute)=>$11d87f3f76e88657$var$isValidWallTime(date, timeZone, absolute));\n}\nfunction $11d87f3f76e88657$var$isValidWallTime(date, timeZone, absolute) {\n    let parts = $11d87f3f76e88657$var$getTimeZoneParts(absolute, timeZone);\n    return date.year === parts.year && date.month === parts.month && date.day === parts.day && date.hour === parts.hour && date.minute === parts.minute && date.second === parts.second;\n}\nfunction $11d87f3f76e88657$export$5107c82f94518f5c(date, timeZone, disambiguation = 'compatible') {\n    let dateTime = $11d87f3f76e88657$export$b21e0b124e224484(date);\n    // Fast path: if the time zone is UTC, use native Date.\n    if (timeZone === 'UTC') return $11d87f3f76e88657$export$bd4fb2bc8bb06fb(dateTime);\n    // Fast path: if the time zone is the local timezone and disambiguation is compatible, use native Date.\n    if (timeZone === (0, $14e0f24ef4ac5c92$export$aa8b41735afcabd2)() && disambiguation === 'compatible') {\n        dateTime = $11d87f3f76e88657$export$b4a036af3fc0b032(dateTime, new (0, $3b62074eb05584b2$export$80ee6245ec4f29ec)());\n        // Don't use Date constructor here because two-digit years are interpreted in the 20th century.\n        let date = new Date();\n        let year = (0, $3b62074eb05584b2$export$c36e0ecb2d4fa69d)(dateTime.era, dateTime.year);\n        date.setFullYear(year, dateTime.month - 1, dateTime.day);\n        date.setHours(dateTime.hour, dateTime.minute, dateTime.second, dateTime.millisecond);\n        return date.getTime();\n    }\n    let ms = $11d87f3f76e88657$export$bd4fb2bc8bb06fb(dateTime);\n    let offsetBefore = $11d87f3f76e88657$export$59c99f3515d3493f(ms - $11d87f3f76e88657$var$DAYMILLIS, timeZone);\n    let offsetAfter = $11d87f3f76e88657$export$59c99f3515d3493f(ms + $11d87f3f76e88657$var$DAYMILLIS, timeZone);\n    let valid = $11d87f3f76e88657$var$getValidWallTimes(dateTime, timeZone, ms - offsetBefore, ms - offsetAfter);\n    if (valid.length === 1) return valid[0];\n    if (valid.length > 1) switch(disambiguation){\n        // 'compatible' means 'earlier' for \"fall back\" transitions\n        case 'compatible':\n        case 'earlier':\n            return valid[0];\n        case 'later':\n            return valid[valid.length - 1];\n        case 'reject':\n            throw new RangeError('Multiple possible absolute times found');\n    }\n    switch(disambiguation){\n        case 'earlier':\n            return Math.min(ms - offsetBefore, ms - offsetAfter);\n        // 'compatible' means 'later' for \"spring forward\" transitions\n        case 'compatible':\n        case 'later':\n            return Math.max(ms - offsetBefore, ms - offsetAfter);\n        case 'reject':\n            throw new RangeError('No such absolute time found');\n    }\n}\nfunction $11d87f3f76e88657$export$e67a095c620b86fe(dateTime, timeZone, disambiguation = 'compatible') {\n    return new Date($11d87f3f76e88657$export$5107c82f94518f5c(dateTime, timeZone, disambiguation));\n}\nfunction $11d87f3f76e88657$export$1b96692a1ba042ac(ms, timeZone) {\n    let offset = $11d87f3f76e88657$export$59c99f3515d3493f(ms, timeZone);\n    let date = new Date(ms + offset);\n    let year = date.getUTCFullYear();\n    let month = date.getUTCMonth() + 1;\n    let day = date.getUTCDate();\n    let hour = date.getUTCHours();\n    let minute = date.getUTCMinutes();\n    let second = date.getUTCSeconds();\n    let millisecond = date.getUTCMilliseconds();\n    return new (0, $35ea8db9cb2ccb90$export$d3b7288e7994edea)(year < 1 ? 'BC' : 'AD', year < 1 ? -year + 1 : year, month, day, timeZone, offset, hour, minute, second, millisecond);\n}\nfunction $11d87f3f76e88657$export$e57ff100d91bd4b9(date, timeZone) {\n    return $11d87f3f76e88657$export$1b96692a1ba042ac(date.getTime(), timeZone);\n}\nfunction $11d87f3f76e88657$export$d7f92bcd3596b086(date) {\n    return $11d87f3f76e88657$export$e57ff100d91bd4b9(date, (0, $14e0f24ef4ac5c92$export$aa8b41735afcabd2)());\n}\nfunction $11d87f3f76e88657$export$93522d1a439f3617(dateTime) {\n    return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(dateTime.calendar, dateTime.era, dateTime.year, dateTime.month, dateTime.day);\n}\nfunction $11d87f3f76e88657$export$6f4d78149f3f53ac(date) {\n    return {\n        era: date.era,\n        year: date.year,\n        month: date.month,\n        day: date.day\n    };\n}\nfunction $11d87f3f76e88657$export$4d0393e732857be5(date) {\n    return {\n        hour: date.hour,\n        minute: date.minute,\n        second: date.second,\n        millisecond: date.millisecond\n    };\n}\nfunction $11d87f3f76e88657$export$b21e0b124e224484(date, time) {\n    let hour = 0, minute = 0, second = 0, millisecond = 0;\n    if ('timeZone' in date) ({ hour: hour, minute: minute, second: second, millisecond: millisecond } = date);\n    else if ('hour' in date && !time) return date;\n    if (time) ({ hour: hour, minute: minute, second: second, millisecond: millisecond } = time);\n    return new (0, $35ea8db9cb2ccb90$export$ca871e8dbb80966f)(date.calendar, date.era, date.year, date.month, date.day, hour, minute, second, millisecond);\n}\nfunction $11d87f3f76e88657$export$d33f79e3ffc3dc83(dateTime) {\n    return new (0, $35ea8db9cb2ccb90$export$680ea196effce5f)(dateTime.hour, dateTime.minute, dateTime.second, dateTime.millisecond);\n}\nfunction $11d87f3f76e88657$export$b4a036af3fc0b032(date, calendar) {\n    if ((0, $14e0f24ef4ac5c92$export$dbc69fd56b53d5e)(date.calendar, calendar)) return date;\n    let calendarDate = calendar.fromJulianDay(date.calendar.toJulianDay(date));\n    let copy = date.copy();\n    copy.calendar = calendar;\n    copy.era = calendarDate.era;\n    copy.year = calendarDate.year;\n    copy.month = calendarDate.month;\n    copy.day = calendarDate.day;\n    (0, $735220c2d4774dd3$export$c4e2ecac49351ef2)(copy);\n    return copy;\n}\nfunction $11d87f3f76e88657$export$84c95a83c799e074(date, timeZone, disambiguation) {\n    if (date instanceof (0, $35ea8db9cb2ccb90$export$d3b7288e7994edea)) {\n        if (date.timeZone === timeZone) return date;\n        return $11d87f3f76e88657$export$538b00033cc11c75(date, timeZone);\n    }\n    let ms = $11d87f3f76e88657$export$5107c82f94518f5c(date, timeZone, disambiguation);\n    return $11d87f3f76e88657$export$1b96692a1ba042ac(ms, timeZone);\n}\nfunction $11d87f3f76e88657$export$83aac07b4c37b25(date) {\n    let ms = $11d87f3f76e88657$export$bd4fb2bc8bb06fb(date) - date.offset;\n    return new Date(ms);\n}\nfunction $11d87f3f76e88657$export$538b00033cc11c75(date, timeZone) {\n    let ms = $11d87f3f76e88657$export$bd4fb2bc8bb06fb(date) - date.offset;\n    return $11d87f3f76e88657$export$b4a036af3fc0b032($11d87f3f76e88657$export$1b96692a1ba042ac(ms, timeZone), date.calendar);\n}\nfunction $11d87f3f76e88657$export$d9b67bc93c097491(date) {\n    return $11d87f3f76e88657$export$538b00033cc11c75(date, (0, $14e0f24ef4ac5c92$export$aa8b41735afcabd2)());\n}\n\n\nexport {$11d87f3f76e88657$export$bd4fb2bc8bb06fb as epochFromDate, $11d87f3f76e88657$export$b4a036af3fc0b032 as toCalendar, $11d87f3f76e88657$export$59c99f3515d3493f as getTimeZoneOffset, $11d87f3f76e88657$export$136f38efe7caf549 as possibleAbsolutes, $11d87f3f76e88657$export$5107c82f94518f5c as toAbsolute, $11d87f3f76e88657$export$b21e0b124e224484 as toCalendarDateTime, $11d87f3f76e88657$export$e67a095c620b86fe as toDate, $11d87f3f76e88657$export$1b96692a1ba042ac as fromAbsolute, $11d87f3f76e88657$export$e57ff100d91bd4b9 as fromDate, $11d87f3f76e88657$export$d7f92bcd3596b086 as fromDateToLocal, $11d87f3f76e88657$export$93522d1a439f3617 as toCalendarDate, $11d87f3f76e88657$export$6f4d78149f3f53ac as toDateFields, $11d87f3f76e88657$export$4d0393e732857be5 as toTimeFields, $11d87f3f76e88657$export$d33f79e3ffc3dc83 as toTime, $11d87f3f76e88657$export$84c95a83c799e074 as toZoned, $11d87f3f76e88657$export$538b00033cc11c75 as toTimeZone, $11d87f3f76e88657$export$83aac07b4c37b25 as zonedToDate, $11d87f3f76e88657$export$d9b67bc93c097491 as toLocalTimeZone};\n//# sourceMappingURL=conversion.module.js.map\n","import {epochFromDate as $11d87f3f76e88657$export$bd4fb2bc8bb06fb, fromAbsolute as $11d87f3f76e88657$export$1b96692a1ba042ac, toAbsolute as $11d87f3f76e88657$export$5107c82f94518f5c, toCalendar as $11d87f3f76e88657$export$b4a036af3fc0b032, toCalendarDateTime as $11d87f3f76e88657$export$b21e0b124e224484} from \"./conversion.mjs\";\nimport {GregorianCalendar as $3b62074eb05584b2$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $735220c2d4774dd3$var$ONE_HOUR = 3600000;\nfunction $735220c2d4774dd3$export$e16d8520af44a096(date, duration) {\n    let mutableDate = date.copy();\n    let days = 'hour' in mutableDate ? $735220c2d4774dd3$var$addTimeFields(mutableDate, duration) : 0;\n    $735220c2d4774dd3$var$addYears(mutableDate, duration.years || 0);\n    if (mutableDate.calendar.balanceYearMonth) mutableDate.calendar.balanceYearMonth(mutableDate, date);\n    mutableDate.month += duration.months || 0;\n    $735220c2d4774dd3$var$balanceYearMonth(mutableDate);\n    $735220c2d4774dd3$var$constrainMonthDay(mutableDate);\n    mutableDate.day += (duration.weeks || 0) * 7;\n    mutableDate.day += duration.days || 0;\n    mutableDate.day += days;\n    $735220c2d4774dd3$var$balanceDay(mutableDate);\n    if (mutableDate.calendar.balanceDate) mutableDate.calendar.balanceDate(mutableDate);\n    // Constrain in case adding ended up with a date outside the valid range for the calendar system.\n    // The behavior here is slightly different than when constraining in the `set` function in that\n    // we adjust smaller fields to their minimum/maximum values rather than constraining each field\n    // individually. This matches the general behavior of `add` vs `set` regarding how fields are balanced.\n    if (mutableDate.year < 1) {\n        mutableDate.year = 1;\n        mutableDate.month = 1;\n        mutableDate.day = 1;\n    }\n    let maxYear = mutableDate.calendar.getYearsInEra(mutableDate);\n    if (mutableDate.year > maxYear) {\n        var _mutableDate_calendar_isInverseEra, _mutableDate_calendar;\n        let isInverseEra = (_mutableDate_calendar_isInverseEra = (_mutableDate_calendar = mutableDate.calendar).isInverseEra) === null || _mutableDate_calendar_isInverseEra === void 0 ? void 0 : _mutableDate_calendar_isInverseEra.call(_mutableDate_calendar, mutableDate);\n        mutableDate.year = maxYear;\n        mutableDate.month = isInverseEra ? 1 : mutableDate.calendar.getMonthsInYear(mutableDate);\n        mutableDate.day = isInverseEra ? 1 : mutableDate.calendar.getDaysInMonth(mutableDate);\n    }\n    if (mutableDate.month < 1) {\n        mutableDate.month = 1;\n        mutableDate.day = 1;\n    }\n    let maxMonth = mutableDate.calendar.getMonthsInYear(mutableDate);\n    if (mutableDate.month > maxMonth) {\n        mutableDate.month = maxMonth;\n        mutableDate.day = mutableDate.calendar.getDaysInMonth(mutableDate);\n    }\n    mutableDate.day = Math.max(1, Math.min(mutableDate.calendar.getDaysInMonth(mutableDate), mutableDate.day));\n    return mutableDate;\n}\nfunction $735220c2d4774dd3$var$addYears(date, years) {\n    var _date_calendar_isInverseEra, _date_calendar;\n    if ((_date_calendar_isInverseEra = (_date_calendar = date.calendar).isInverseEra) === null || _date_calendar_isInverseEra === void 0 ? void 0 : _date_calendar_isInverseEra.call(_date_calendar, date)) years = -years;\n    date.year += years;\n}\nfunction $735220c2d4774dd3$var$balanceYearMonth(date) {\n    while(date.month < 1){\n        $735220c2d4774dd3$var$addYears(date, -1);\n        date.month += date.calendar.getMonthsInYear(date);\n    }\n    let monthsInYear = 0;\n    while(date.month > (monthsInYear = date.calendar.getMonthsInYear(date))){\n        date.month -= monthsInYear;\n        $735220c2d4774dd3$var$addYears(date, 1);\n    }\n}\nfunction $735220c2d4774dd3$var$balanceDay(date) {\n    while(date.day < 1){\n        date.month--;\n        $735220c2d4774dd3$var$balanceYearMonth(date);\n        date.day += date.calendar.getDaysInMonth(date);\n    }\n    while(date.day > date.calendar.getDaysInMonth(date)){\n        date.day -= date.calendar.getDaysInMonth(date);\n        date.month++;\n        $735220c2d4774dd3$var$balanceYearMonth(date);\n    }\n}\nfunction $735220c2d4774dd3$var$constrainMonthDay(date) {\n    date.month = Math.max(1, Math.min(date.calendar.getMonthsInYear(date), date.month));\n    date.day = Math.max(1, Math.min(date.calendar.getDaysInMonth(date), date.day));\n}\nfunction $735220c2d4774dd3$export$c4e2ecac49351ef2(date) {\n    if (date.calendar.constrainDate) date.calendar.constrainDate(date);\n    date.year = Math.max(1, Math.min(date.calendar.getYearsInEra(date), date.year));\n    $735220c2d4774dd3$var$constrainMonthDay(date);\n}\nfunction $735220c2d4774dd3$export$3e2544e88a25bff8(duration) {\n    let inverseDuration = {};\n    for(let key in duration)if (typeof duration[key] === 'number') inverseDuration[key] = -duration[key];\n    return inverseDuration;\n}\nfunction $735220c2d4774dd3$export$4e2d2ead65e5f7e3(date, duration) {\n    return $735220c2d4774dd3$export$e16d8520af44a096(date, $735220c2d4774dd3$export$3e2544e88a25bff8(duration));\n}\nfunction $735220c2d4774dd3$export$adaa4cf7ef1b65be(date, fields) {\n    let mutableDate = date.copy();\n    if (fields.era != null) mutableDate.era = fields.era;\n    if (fields.year != null) mutableDate.year = fields.year;\n    if (fields.month != null) mutableDate.month = fields.month;\n    if (fields.day != null) mutableDate.day = fields.day;\n    $735220c2d4774dd3$export$c4e2ecac49351ef2(mutableDate);\n    return mutableDate;\n}\nfunction $735220c2d4774dd3$export$e5d5e1c1822b6e56(value, fields) {\n    let mutableValue = value.copy();\n    if (fields.hour != null) mutableValue.hour = fields.hour;\n    if (fields.minute != null) mutableValue.minute = fields.minute;\n    if (fields.second != null) mutableValue.second = fields.second;\n    if (fields.millisecond != null) mutableValue.millisecond = fields.millisecond;\n    $735220c2d4774dd3$export$7555de1e070510cb(mutableValue);\n    return mutableValue;\n}\nfunction $735220c2d4774dd3$var$balanceTime(time) {\n    time.second += Math.floor(time.millisecond / 1000);\n    time.millisecond = $735220c2d4774dd3$var$nonNegativeMod(time.millisecond, 1000);\n    time.minute += Math.floor(time.second / 60);\n    time.second = $735220c2d4774dd3$var$nonNegativeMod(time.second, 60);\n    time.hour += Math.floor(time.minute / 60);\n    time.minute = $735220c2d4774dd3$var$nonNegativeMod(time.minute, 60);\n    let days = Math.floor(time.hour / 24);\n    time.hour = $735220c2d4774dd3$var$nonNegativeMod(time.hour, 24);\n    return days;\n}\nfunction $735220c2d4774dd3$export$7555de1e070510cb(time) {\n    time.millisecond = Math.max(0, Math.min(time.millisecond, 1000));\n    time.second = Math.max(0, Math.min(time.second, 59));\n    time.minute = Math.max(0, Math.min(time.minute, 59));\n    time.hour = Math.max(0, Math.min(time.hour, 23));\n}\nfunction $735220c2d4774dd3$var$nonNegativeMod(a, b) {\n    let result = a % b;\n    if (result < 0) result += b;\n    return result;\n}\nfunction $735220c2d4774dd3$var$addTimeFields(time, duration) {\n    time.hour += duration.hours || 0;\n    time.minute += duration.minutes || 0;\n    time.second += duration.seconds || 0;\n    time.millisecond += duration.milliseconds || 0;\n    return $735220c2d4774dd3$var$balanceTime(time);\n}\nfunction $735220c2d4774dd3$export$7ed87b6bc2506470(time, duration) {\n    let res = time.copy();\n    $735220c2d4774dd3$var$addTimeFields(res, duration);\n    return res;\n}\nfunction $735220c2d4774dd3$export$fe34d3a381cd7501(time, duration) {\n    return $735220c2d4774dd3$export$7ed87b6bc2506470(time, $735220c2d4774dd3$export$3e2544e88a25bff8(duration));\n}\nfunction $735220c2d4774dd3$export$d52ced6badfb9a4c(value, field, amount, options) {\n    let mutable = value.copy();\n    switch(field){\n        case 'era':\n            {\n                let eras = value.calendar.getEras();\n                let eraIndex = eras.indexOf(value.era);\n                if (eraIndex < 0) throw new Error('Invalid era: ' + value.era);\n                eraIndex = $735220c2d4774dd3$var$cycleValue(eraIndex, amount, 0, eras.length - 1, options === null || options === void 0 ? void 0 : options.round);\n                mutable.era = eras[eraIndex];\n                // Constrain the year and other fields within the era, so the era doesn't change when we balance below.\n                $735220c2d4774dd3$export$c4e2ecac49351ef2(mutable);\n                break;\n            }\n        case 'year':\n            var _mutable_calendar_isInverseEra, _mutable_calendar;\n            if ((_mutable_calendar_isInverseEra = (_mutable_calendar = mutable.calendar).isInverseEra) === null || _mutable_calendar_isInverseEra === void 0 ? void 0 : _mutable_calendar_isInverseEra.call(_mutable_calendar, mutable)) amount = -amount;\n            // The year field should not cycle within the era as that can cause weird behavior affecting other fields.\n            // We need to also allow values < 1 so that decrementing goes to the previous era. If we get -Infinity back\n            // we know we wrapped around after reaching 9999 (the maximum), so set the year back to 1.\n            mutable.year = $735220c2d4774dd3$var$cycleValue(value.year, amount, -Infinity, 9999, options === null || options === void 0 ? void 0 : options.round);\n            if (mutable.year === -Infinity) mutable.year = 1;\n            if (mutable.calendar.balanceYearMonth) mutable.calendar.balanceYearMonth(mutable, value);\n            break;\n        case 'month':\n            mutable.month = $735220c2d4774dd3$var$cycleValue(value.month, amount, 1, value.calendar.getMonthsInYear(value), options === null || options === void 0 ? void 0 : options.round);\n            break;\n        case 'day':\n            mutable.day = $735220c2d4774dd3$var$cycleValue(value.day, amount, 1, value.calendar.getDaysInMonth(value), options === null || options === void 0 ? void 0 : options.round);\n            break;\n        default:\n            throw new Error('Unsupported field ' + field);\n    }\n    if (value.calendar.balanceDate) value.calendar.balanceDate(mutable);\n    $735220c2d4774dd3$export$c4e2ecac49351ef2(mutable);\n    return mutable;\n}\nfunction $735220c2d4774dd3$export$dd02b3e0007dfe28(value, field, amount, options) {\n    let mutable = value.copy();\n    switch(field){\n        case 'hour':\n            {\n                let hours = value.hour;\n                let min = 0;\n                let max = 23;\n                if ((options === null || options === void 0 ? void 0 : options.hourCycle) === 12) {\n                    let isPM = hours >= 12;\n                    min = isPM ? 12 : 0;\n                    max = isPM ? 23 : 11;\n                }\n                mutable.hour = $735220c2d4774dd3$var$cycleValue(hours, amount, min, max, options === null || options === void 0 ? void 0 : options.round);\n                break;\n            }\n        case 'minute':\n            mutable.minute = $735220c2d4774dd3$var$cycleValue(value.minute, amount, 0, 59, options === null || options === void 0 ? void 0 : options.round);\n            break;\n        case 'second':\n            mutable.second = $735220c2d4774dd3$var$cycleValue(value.second, amount, 0, 59, options === null || options === void 0 ? void 0 : options.round);\n            break;\n        case 'millisecond':\n            mutable.millisecond = $735220c2d4774dd3$var$cycleValue(value.millisecond, amount, 0, 999, options === null || options === void 0 ? void 0 : options.round);\n            break;\n        default:\n            throw new Error('Unsupported field ' + field);\n    }\n    return mutable;\n}\nfunction $735220c2d4774dd3$var$cycleValue(value, amount, min, max, round = false) {\n    if (round) {\n        value += Math.sign(amount);\n        if (value < min) value = max;\n        let div = Math.abs(amount);\n        if (amount > 0) value = Math.ceil(value / div) * div;\n        else value = Math.floor(value / div) * div;\n        if (value > max) value = min;\n    } else {\n        value += amount;\n        if (value < min) value = max - (min - value - 1);\n        else if (value > max) value = min + (value - max - 1);\n    }\n    return value;\n}\nfunction $735220c2d4774dd3$export$96b1d28349274637(dateTime, duration) {\n    let ms;\n    if (duration.years != null && duration.years !== 0 || duration.months != null && duration.months !== 0 || duration.weeks != null && duration.weeks !== 0 || duration.days != null && duration.days !== 0) {\n        let res = $735220c2d4774dd3$export$e16d8520af44a096((0, $11d87f3f76e88657$export$b21e0b124e224484)(dateTime), {\n            years: duration.years,\n            months: duration.months,\n            weeks: duration.weeks,\n            days: duration.days\n        });\n        // Changing the date may change the timezone offset, so we need to recompute\n        // using the 'compatible' disambiguation.\n        ms = (0, $11d87f3f76e88657$export$5107c82f94518f5c)(res, dateTime.timeZone);\n    } else // Otherwise, preserve the offset of the original date.\n    ms = (0, $11d87f3f76e88657$export$bd4fb2bc8bb06fb)(dateTime) - dateTime.offset;\n    // Perform time manipulation in milliseconds rather than on the original time fields to account for DST.\n    // For example, adding one hour during a DST transition may result in the hour field staying the same or\n    // skipping an hour. This results in the offset field changing value instead of the specified field.\n    ms += duration.milliseconds || 0;\n    ms += (duration.seconds || 0) * 1000;\n    ms += (duration.minutes || 0) * 60000;\n    ms += (duration.hours || 0) * 3600000;\n    let res = (0, $11d87f3f76e88657$export$1b96692a1ba042ac)(ms, dateTime.timeZone);\n    return (0, $11d87f3f76e88657$export$b4a036af3fc0b032)(res, dateTime.calendar);\n}\nfunction $735220c2d4774dd3$export$6814caac34ca03c7(dateTime, duration) {\n    return $735220c2d4774dd3$export$96b1d28349274637(dateTime, $735220c2d4774dd3$export$3e2544e88a25bff8(duration));\n}\nfunction $735220c2d4774dd3$export$9a297d111fc86b79(dateTime, field, amount, options) {\n    // For date fields, we want the time to remain consistent and the UTC offset to potentially change to account for DST changes.\n    // For time fields, we want the time to change by the amount given. This may result in the hour field staying the same, but the UTC\n    // offset changing in the case of a backward DST transition, or skipping an hour in the case of a forward DST transition.\n    switch(field){\n        case 'hour':\n            {\n                let min = 0;\n                let max = 23;\n                if ((options === null || options === void 0 ? void 0 : options.hourCycle) === 12) {\n                    let isPM = dateTime.hour >= 12;\n                    min = isPM ? 12 : 0;\n                    max = isPM ? 23 : 11;\n                }\n                // The minimum and maximum hour may be affected by daylight saving time.\n                // For example, it might jump forward at midnight, and skip 1am.\n                // Or it might end at midnight and repeat the 11pm hour. To handle this, we get\n                // the possible absolute times for the min and max, and find the maximum range\n                // that is within the current day.\n                let plainDateTime = (0, $11d87f3f76e88657$export$b21e0b124e224484)(dateTime);\n                let minDate = (0, $11d87f3f76e88657$export$b4a036af3fc0b032)($735220c2d4774dd3$export$e5d5e1c1822b6e56(plainDateTime, {\n                    hour: min\n                }), new (0, $3b62074eb05584b2$export$80ee6245ec4f29ec)());\n                let minAbsolute = [\n                    (0, $11d87f3f76e88657$export$5107c82f94518f5c)(minDate, dateTime.timeZone, 'earlier'),\n                    (0, $11d87f3f76e88657$export$5107c82f94518f5c)(minDate, dateTime.timeZone, 'later')\n                ].filter((ms)=>(0, $11d87f3f76e88657$export$1b96692a1ba042ac)(ms, dateTime.timeZone).day === minDate.day)[0];\n                let maxDate = (0, $11d87f3f76e88657$export$b4a036af3fc0b032)($735220c2d4774dd3$export$e5d5e1c1822b6e56(plainDateTime, {\n                    hour: max\n                }), new (0, $3b62074eb05584b2$export$80ee6245ec4f29ec)());\n                let maxAbsolute = [\n                    (0, $11d87f3f76e88657$export$5107c82f94518f5c)(maxDate, dateTime.timeZone, 'earlier'),\n                    (0, $11d87f3f76e88657$export$5107c82f94518f5c)(maxDate, dateTime.timeZone, 'later')\n                ].filter((ms)=>(0, $11d87f3f76e88657$export$1b96692a1ba042ac)(ms, dateTime.timeZone).day === maxDate.day).pop();\n                // Since hours may repeat, we need to operate on the absolute time in milliseconds.\n                // This is done in hours from the Unix epoch so that cycleValue works correctly,\n                // and then converted back to milliseconds.\n                let ms = (0, $11d87f3f76e88657$export$bd4fb2bc8bb06fb)(dateTime) - dateTime.offset;\n                let hours = Math.floor(ms / $735220c2d4774dd3$var$ONE_HOUR);\n                let remainder = ms % $735220c2d4774dd3$var$ONE_HOUR;\n                ms = $735220c2d4774dd3$var$cycleValue(hours, amount, Math.floor(minAbsolute / $735220c2d4774dd3$var$ONE_HOUR), Math.floor(maxAbsolute / $735220c2d4774dd3$var$ONE_HOUR), options === null || options === void 0 ? void 0 : options.round) * $735220c2d4774dd3$var$ONE_HOUR + remainder;\n                // Now compute the new timezone offset, and convert the absolute time back to local time.\n                return (0, $11d87f3f76e88657$export$b4a036af3fc0b032)((0, $11d87f3f76e88657$export$1b96692a1ba042ac)(ms, dateTime.timeZone), dateTime.calendar);\n            }\n        case 'minute':\n        case 'second':\n        case 'millisecond':\n            // @ts-ignore\n            return $735220c2d4774dd3$export$dd02b3e0007dfe28(dateTime, field, amount, options);\n        case 'era':\n        case 'year':\n        case 'month':\n        case 'day':\n            {\n                let res = $735220c2d4774dd3$export$d52ced6badfb9a4c((0, $11d87f3f76e88657$export$b21e0b124e224484)(dateTime), field, amount, options);\n                let ms = (0, $11d87f3f76e88657$export$5107c82f94518f5c)(res, dateTime.timeZone);\n                return (0, $11d87f3f76e88657$export$b4a036af3fc0b032)((0, $11d87f3f76e88657$export$1b96692a1ba042ac)(ms, dateTime.timeZone), dateTime.calendar);\n            }\n        default:\n            throw new Error('Unsupported field ' + field);\n    }\n}\nfunction $735220c2d4774dd3$export$31b5430eb18be4f8(dateTime, fields, disambiguation) {\n    // Set the date/time fields, and recompute the UTC offset to account for DST changes.\n    // We also need to validate by converting back to a local time in case hours are skipped during forward DST transitions.\n    let plainDateTime = (0, $11d87f3f76e88657$export$b21e0b124e224484)(dateTime);\n    let res = $735220c2d4774dd3$export$e5d5e1c1822b6e56($735220c2d4774dd3$export$adaa4cf7ef1b65be(plainDateTime, fields), fields);\n    // If the resulting plain date time values are equal, return the original time.\n    // We don't want to change the offset when setting the time to the same value.\n    if (res.compare(plainDateTime) === 0) return dateTime;\n    let ms = (0, $11d87f3f76e88657$export$5107c82f94518f5c)(res, dateTime.timeZone, disambiguation);\n    return (0, $11d87f3f76e88657$export$b4a036af3fc0b032)((0, $11d87f3f76e88657$export$1b96692a1ba042ac)(ms, dateTime.timeZone), dateTime.calendar);\n}\n\n\nexport {$735220c2d4774dd3$export$e16d8520af44a096 as add, $735220c2d4774dd3$export$c4e2ecac49351ef2 as constrain, $735220c2d4774dd3$export$3e2544e88a25bff8 as invertDuration, $735220c2d4774dd3$export$4e2d2ead65e5f7e3 as subtract, $735220c2d4774dd3$export$adaa4cf7ef1b65be as set, $735220c2d4774dd3$export$e5d5e1c1822b6e56 as setTime, $735220c2d4774dd3$export$7555de1e070510cb as constrainTime, $735220c2d4774dd3$export$7ed87b6bc2506470 as addTime, $735220c2d4774dd3$export$fe34d3a381cd7501 as subtractTime, $735220c2d4774dd3$export$d52ced6badfb9a4c as cycleDate, $735220c2d4774dd3$export$dd02b3e0007dfe28 as cycleTime, $735220c2d4774dd3$export$96b1d28349274637 as addZoned, $735220c2d4774dd3$export$6814caac34ca03c7 as subtractZoned, $735220c2d4774dd3$export$9a297d111fc86b79 as cycleZoned, $735220c2d4774dd3$export$31b5430eb18be4f8 as setZoned};\n//# sourceMappingURL=manipulation.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f, CalendarDateTime as $35ea8db9cb2ccb90$export$ca871e8dbb80966f, Time as $35ea8db9cb2ccb90$export$680ea196effce5f, ZonedDateTime as $35ea8db9cb2ccb90$export$d3b7288e7994edea} from \"./CalendarDate.mjs\";\nimport {epochFromDate as $11d87f3f76e88657$export$bd4fb2bc8bb06fb, fromAbsolute as $11d87f3f76e88657$export$1b96692a1ba042ac, possibleAbsolutes as $11d87f3f76e88657$export$136f38efe7caf549, toAbsolute as $11d87f3f76e88657$export$5107c82f94518f5c, toCalendar as $11d87f3f76e88657$export$b4a036af3fc0b032, toCalendarDateTime as $11d87f3f76e88657$export$b21e0b124e224484, toTimeZone as $11d87f3f76e88657$export$538b00033cc11c75} from \"./conversion.mjs\";\nimport {getLocalTimeZone as $14e0f24ef4ac5c92$export$aa8b41735afcabd2} from \"./queries.mjs\";\nimport {GregorianCalendar as $3b62074eb05584b2$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nconst $fae977aafc393c5c$var$TIME_RE = /^(\\d{2})(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?$/;\nconst $fae977aafc393c5c$var$DATE_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})$/;\nconst $fae977aafc393c5c$var$DATE_TIME_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}))?(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?$/;\nconst $fae977aafc393c5c$var$ZONED_DATE_TIME_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}))?(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?(?:([+-]\\d{2})(?::?(\\d{2}))?(?::?(\\d{2}))?)?\\[(.*?)\\]$/;\nconst $fae977aafc393c5c$var$ABSOLUTE_RE = /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})(?:T(\\d{2}))?(?::(\\d{2}))?(?::(\\d{2}))?(\\.\\d+)?(?:(?:([+-]\\d{2})(?::?(\\d{2}))?)|Z)$/;\nconst $fae977aafc393c5c$var$DATE_TIME_DURATION_RE = /^((?<negative>-)|\\+)?P((?<years>\\d*)Y)?((?<months>\\d*)M)?((?<weeks>\\d*)W)?((?<days>\\d*)D)?((?<time>T)((?<hours>\\d*[.,]?\\d{1,9})H)?((?<minutes>\\d*[.,]?\\d{1,9})M)?((?<seconds>\\d*[.,]?\\d{1,9})S)?)?$/;\nconst $fae977aafc393c5c$var$requiredDurationTimeGroups = [\n    'hours',\n    'minutes',\n    'seconds'\n];\nconst $fae977aafc393c5c$var$requiredDurationGroups = [\n    'years',\n    'months',\n    'weeks',\n    'days',\n    ...$fae977aafc393c5c$var$requiredDurationTimeGroups\n];\nfunction $fae977aafc393c5c$export$c9698ec7f05a07e1(value) {\n    let m = value.match($fae977aafc393c5c$var$TIME_RE);\n    if (!m) throw new Error('Invalid ISO 8601 time string: ' + value);\n    return new (0, $35ea8db9cb2ccb90$export$680ea196effce5f)($fae977aafc393c5c$var$parseNumber(m[1], 0, 23), m[2] ? $fae977aafc393c5c$var$parseNumber(m[2], 0, 59) : 0, m[3] ? $fae977aafc393c5c$var$parseNumber(m[3], 0, 59) : 0, m[4] ? $fae977aafc393c5c$var$parseNumber(m[4], 0, Infinity) * 1000 : 0);\n}\nfunction $fae977aafc393c5c$export$6b862160d295c8e(value) {\n    let m = value.match($fae977aafc393c5c$var$DATE_RE);\n    if (!m) {\n        if ($fae977aafc393c5c$var$ABSOLUTE_RE.test(value)) throw new Error(`Invalid ISO 8601 date string: ${value}. Use parseAbsolute() instead.`);\n        throw new Error('Invalid ISO 8601 date string: ' + value);\n    }\n    let date = new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)($fae977aafc393c5c$var$parseNumber(m[1], 0, 9999), $fae977aafc393c5c$var$parseNumber(m[2], 1, 12), 1);\n    date.day = $fae977aafc393c5c$var$parseNumber(m[3], 1, date.calendar.getDaysInMonth(date));\n    return date;\n}\nfunction $fae977aafc393c5c$export$588937bcd60ade55(value) {\n    let m = value.match($fae977aafc393c5c$var$DATE_TIME_RE);\n    if (!m) {\n        if ($fae977aafc393c5c$var$ABSOLUTE_RE.test(value)) throw new Error(`Invalid ISO 8601 date time string: ${value}. Use parseAbsolute() instead.`);\n        throw new Error('Invalid ISO 8601 date time string: ' + value);\n    }\n    let year = $fae977aafc393c5c$var$parseNumber(m[1], -9999, 9999);\n    let era = year < 1 ? 'BC' : 'AD';\n    let date = new (0, $35ea8db9cb2ccb90$export$ca871e8dbb80966f)(era, year < 1 ? -year + 1 : year, $fae977aafc393c5c$var$parseNumber(m[2], 1, 12), 1, m[4] ? $fae977aafc393c5c$var$parseNumber(m[4], 0, 23) : 0, m[5] ? $fae977aafc393c5c$var$parseNumber(m[5], 0, 59) : 0, m[6] ? $fae977aafc393c5c$var$parseNumber(m[6], 0, 59) : 0, m[7] ? $fae977aafc393c5c$var$parseNumber(m[7], 0, Infinity) * 1000 : 0);\n    date.day = $fae977aafc393c5c$var$parseNumber(m[3], 0, date.calendar.getDaysInMonth(date));\n    return date;\n}\nfunction $fae977aafc393c5c$export$fd7893f06e92a6a4(value, disambiguation) {\n    let m = value.match($fae977aafc393c5c$var$ZONED_DATE_TIME_RE);\n    if (!m) throw new Error('Invalid ISO 8601 date time string: ' + value);\n    let year = $fae977aafc393c5c$var$parseNumber(m[1], -9999, 9999);\n    let era = year < 1 ? 'BC' : 'AD';\n    let date = new (0, $35ea8db9cb2ccb90$export$d3b7288e7994edea)(era, year < 1 ? -year + 1 : year, $fae977aafc393c5c$var$parseNumber(m[2], 1, 12), 1, m[11], 0, m[4] ? $fae977aafc393c5c$var$parseNumber(m[4], 0, 23) : 0, m[5] ? $fae977aafc393c5c$var$parseNumber(m[5], 0, 59) : 0, m[6] ? $fae977aafc393c5c$var$parseNumber(m[6], 0, 59) : 0, m[7] ? $fae977aafc393c5c$var$parseNumber(m[7], 0, Infinity) * 1000 : 0);\n    date.day = $fae977aafc393c5c$var$parseNumber(m[3], 0, date.calendar.getDaysInMonth(date));\n    let plainDateTime = (0, $11d87f3f76e88657$export$b21e0b124e224484)(date);\n    let ms;\n    if (m[8]) {\n        let hourOffset = $fae977aafc393c5c$var$parseNumber(m[8], -23, 23);\n        var _m_, _m_1;\n        date.offset = Math.sign(hourOffset) * (Math.abs(hourOffset) * 3600000 + $fae977aafc393c5c$var$parseNumber((_m_ = m[9]) !== null && _m_ !== void 0 ? _m_ : '0', 0, 59) * 60000 + $fae977aafc393c5c$var$parseNumber((_m_1 = m[10]) !== null && _m_1 !== void 0 ? _m_1 : '0', 0, 59) * 1000);\n        ms = (0, $11d87f3f76e88657$export$bd4fb2bc8bb06fb)(date) - date.offset;\n        // Validate offset against parsed date.\n        let absolutes = (0, $11d87f3f76e88657$export$136f38efe7caf549)(plainDateTime, date.timeZone);\n        if (!absolutes.includes(ms)) throw new Error(`Offset ${$fae977aafc393c5c$var$offsetToString(date.offset)} is invalid for ${$fae977aafc393c5c$export$4223de14708adc63(date)} in ${date.timeZone}`);\n    } else // Convert to absolute and back to fix invalid times due to DST.\n    ms = (0, $11d87f3f76e88657$export$5107c82f94518f5c)((0, $11d87f3f76e88657$export$b21e0b124e224484)(plainDateTime), date.timeZone, disambiguation);\n    return (0, $11d87f3f76e88657$export$1b96692a1ba042ac)(ms, date.timeZone);\n}\nfunction $fae977aafc393c5c$export$5adfdab05168c219(value, timeZone) {\n    let m = value.match($fae977aafc393c5c$var$ABSOLUTE_RE);\n    if (!m) throw new Error('Invalid ISO 8601 date time string: ' + value);\n    let year = $fae977aafc393c5c$var$parseNumber(m[1], -9999, 9999);\n    let era = year < 1 ? 'BC' : 'AD';\n    let date = new (0, $35ea8db9cb2ccb90$export$d3b7288e7994edea)(era, year < 1 ? -year + 1 : year, $fae977aafc393c5c$var$parseNumber(m[2], 1, 12), 1, timeZone, 0, m[4] ? $fae977aafc393c5c$var$parseNumber(m[4], 0, 23) : 0, m[5] ? $fae977aafc393c5c$var$parseNumber(m[5], 0, 59) : 0, m[6] ? $fae977aafc393c5c$var$parseNumber(m[6], 0, 59) : 0, m[7] ? $fae977aafc393c5c$var$parseNumber(m[7], 0, Infinity) * 1000 : 0);\n    date.day = $fae977aafc393c5c$var$parseNumber(m[3], 0, date.calendar.getDaysInMonth(date));\n    var _m_;\n    if (m[8]) date.offset = $fae977aafc393c5c$var$parseNumber(m[8], -23, 23) * 3600000 + $fae977aafc393c5c$var$parseNumber((_m_ = m[9]) !== null && _m_ !== void 0 ? _m_ : '0', 0, 59) * 60000;\n    return (0, $11d87f3f76e88657$export$538b00033cc11c75)(date, timeZone);\n}\nfunction $fae977aafc393c5c$export$8e384432362ed0f0(value) {\n    return $fae977aafc393c5c$export$5adfdab05168c219(value, (0, $14e0f24ef4ac5c92$export$aa8b41735afcabd2)());\n}\nfunction $fae977aafc393c5c$var$parseNumber(value, min, max) {\n    let val = Number(value);\n    if (val < min || val > max) throw new RangeError(`Value out of range: ${min} <= ${val} <= ${max}`);\n    return val;\n}\nfunction $fae977aafc393c5c$export$f59dee82248f5ad4(time) {\n    return `${String(time.hour).padStart(2, '0')}:${String(time.minute).padStart(2, '0')}:${String(time.second).padStart(2, '0')}${time.millisecond ? String(time.millisecond / 1000).slice(1) : ''}`;\n}\nfunction $fae977aafc393c5c$export$60dfd74aa96791bd(date) {\n    let gregorianDate = (0, $11d87f3f76e88657$export$b4a036af3fc0b032)(date, new (0, $3b62074eb05584b2$export$80ee6245ec4f29ec)());\n    let year;\n    if (gregorianDate.era === 'BC') year = gregorianDate.year === 1 ? '0000' : '-' + String(Math.abs(1 - gregorianDate.year)).padStart(6, '00');\n    else year = String(gregorianDate.year).padStart(4, '0');\n    return `${year}-${String(gregorianDate.month).padStart(2, '0')}-${String(gregorianDate.day).padStart(2, '0')}`;\n}\nfunction $fae977aafc393c5c$export$4223de14708adc63(date) {\n    // @ts-ignore\n    return `${$fae977aafc393c5c$export$60dfd74aa96791bd(date)}T${$fae977aafc393c5c$export$f59dee82248f5ad4(date)}`;\n}\nfunction $fae977aafc393c5c$var$offsetToString(offset) {\n    let sign = Math.sign(offset) < 0 ? '-' : '+';\n    offset = Math.abs(offset);\n    let offsetHours = Math.floor(offset / 3600000);\n    let offsetMinutes = Math.floor(offset % 3600000 / 60000);\n    let offsetSeconds = Math.floor(offset % 3600000 % 60000 / 1000);\n    let stringOffset = `${sign}${String(offsetHours).padStart(2, '0')}:${String(offsetMinutes).padStart(2, '0')}`;\n    if (offsetSeconds !== 0) stringOffset += `:${String(offsetSeconds).padStart(2, '0')}`;\n    return stringOffset;\n}\nfunction $fae977aafc393c5c$export$bf79f1ebf4b18792(date) {\n    return `${$fae977aafc393c5c$export$4223de14708adc63(date)}${$fae977aafc393c5c$var$offsetToString(date.offset)}[${date.timeZone}]`;\n}\nfunction $fae977aafc393c5c$export$ecae829bb3747ea6(value) {\n    var _match_groups, _match_groups1, _match_groups2, _match_groups3, _match_groups4, _match_groups5, _match_groups6, _match_groups7, _match_groups8;\n    const match = value.match($fae977aafc393c5c$var$DATE_TIME_DURATION_RE);\n    if (!match) throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n    const parseDurationGroup = (group, isNegative)=>{\n        if (!group) return 0;\n        try {\n            const sign = isNegative ? -1 : 1;\n            return sign * Number(group.replace(',', '.'));\n        } catch  {\n            throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n        }\n    };\n    const isNegative = !!((_match_groups = match.groups) === null || _match_groups === void 0 ? void 0 : _match_groups.negative);\n    const hasRequiredGroups = $fae977aafc393c5c$var$requiredDurationGroups.some((group)=>{\n        var _match_groups;\n        return (_match_groups = match.groups) === null || _match_groups === void 0 ? void 0 : _match_groups[group];\n    });\n    if (!hasRequiredGroups) throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n    const durationStringIncludesTime = (_match_groups1 = match.groups) === null || _match_groups1 === void 0 ? void 0 : _match_groups1.time;\n    if (durationStringIncludesTime) {\n        const hasRequiredDurationTimeGroups = $fae977aafc393c5c$var$requiredDurationTimeGroups.some((group)=>{\n            var _match_groups;\n            return (_match_groups = match.groups) === null || _match_groups === void 0 ? void 0 : _match_groups[group];\n        });\n        if (!hasRequiredDurationTimeGroups) throw new Error(`Invalid ISO 8601 Duration string: ${value}`);\n    }\n    const duration = {\n        years: parseDurationGroup((_match_groups2 = match.groups) === null || _match_groups2 === void 0 ? void 0 : _match_groups2.years, isNegative),\n        months: parseDurationGroup((_match_groups3 = match.groups) === null || _match_groups3 === void 0 ? void 0 : _match_groups3.months, isNegative),\n        weeks: parseDurationGroup((_match_groups4 = match.groups) === null || _match_groups4 === void 0 ? void 0 : _match_groups4.weeks, isNegative),\n        days: parseDurationGroup((_match_groups5 = match.groups) === null || _match_groups5 === void 0 ? void 0 : _match_groups5.days, isNegative),\n        hours: parseDurationGroup((_match_groups6 = match.groups) === null || _match_groups6 === void 0 ? void 0 : _match_groups6.hours, isNegative),\n        minutes: parseDurationGroup((_match_groups7 = match.groups) === null || _match_groups7 === void 0 ? void 0 : _match_groups7.minutes, isNegative),\n        seconds: parseDurationGroup((_match_groups8 = match.groups) === null || _match_groups8 === void 0 ? void 0 : _match_groups8.seconds, isNegative)\n    };\n    if (duration.hours !== undefined && duration.hours % 1 !== 0 && (duration.minutes || duration.seconds)) throw new Error(`Invalid ISO 8601 Duration string: ${value} - only the smallest unit can be fractional`);\n    if (duration.minutes !== undefined && duration.minutes % 1 !== 0 && duration.seconds) throw new Error(`Invalid ISO 8601 Duration string: ${value} - only the smallest unit can be fractional`);\n    return duration;\n}\n\n\nexport {$fae977aafc393c5c$export$c9698ec7f05a07e1 as parseTime, $fae977aafc393c5c$export$6b862160d295c8e as parseDate, $fae977aafc393c5c$export$588937bcd60ade55 as parseDateTime, $fae977aafc393c5c$export$fd7893f06e92a6a4 as parseZonedDateTime, $fae977aafc393c5c$export$4223de14708adc63 as dateTimeToString, $fae977aafc393c5c$export$5adfdab05168c219 as parseAbsolute, $fae977aafc393c5c$export$8e384432362ed0f0 as parseAbsoluteToLocal, $fae977aafc393c5c$export$f59dee82248f5ad4 as timeToString, $fae977aafc393c5c$export$60dfd74aa96791bd as dateToString, $fae977aafc393c5c$export$bf79f1ebf4b18792 as zonedDateTimeToString, $fae977aafc393c5c$export$ecae829bb3747ea6 as parseDuration};\n//# sourceMappingURL=string.module.js.map\n","function _check_private_redeclaration(obj, privateCollection) {\n    if (privateCollection.has(obj)) {\n        throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n    }\n}\nexport { _check_private_redeclaration as _ };\n","import { _ as _check_private_redeclaration } from \"./_check_private_redeclaration.js\";\n\nfunction _class_private_field_init(obj, privateMap, value) {\n    _check_private_redeclaration(obj, privateMap);\n    privateMap.set(obj, value);\n}\nexport { _class_private_field_init as _ };\n","import {add as $735220c2d4774dd3$export$e16d8520af44a096, addTime as $735220c2d4774dd3$export$7ed87b6bc2506470, addZoned as $735220c2d4774dd3$export$96b1d28349274637, constrain as $735220c2d4774dd3$export$c4e2ecac49351ef2, constrainTime as $735220c2d4774dd3$export$7555de1e070510cb, cycleDate as $735220c2d4774dd3$export$d52ced6badfb9a4c, cycleTime as $735220c2d4774dd3$export$dd02b3e0007dfe28, cycleZoned as $735220c2d4774dd3$export$9a297d111fc86b79, set as $735220c2d4774dd3$export$adaa4cf7ef1b65be, setTime as $735220c2d4774dd3$export$e5d5e1c1822b6e56, setZoned as $735220c2d4774dd3$export$31b5430eb18be4f8, subtract as $735220c2d4774dd3$export$4e2d2ead65e5f7e3, subtractTime as $735220c2d4774dd3$export$fe34d3a381cd7501, subtractZoned as $735220c2d4774dd3$export$6814caac34ca03c7} from \"./manipulation.mjs\";\nimport {compareDate as $14e0f24ef4ac5c92$export$68781ddf31c0090f, compareTime as $14e0f24ef4ac5c92$export$c19a80a9721b80f6} from \"./queries.mjs\";\nimport {dateTimeToString as $fae977aafc393c5c$export$4223de14708adc63, dateToString as $fae977aafc393c5c$export$60dfd74aa96791bd, timeToString as $fae977aafc393c5c$export$f59dee82248f5ad4, zonedDateTimeToString as $fae977aafc393c5c$export$bf79f1ebf4b18792} from \"./string.mjs\";\nimport {GregorianCalendar as $3b62074eb05584b2$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\nimport {toCalendarDateTime as $11d87f3f76e88657$export$b21e0b124e224484, toDate as $11d87f3f76e88657$export$e67a095c620b86fe, toZoned as $11d87f3f76e88657$export$84c95a83c799e074, zonedToDate as $11d87f3f76e88657$export$83aac07b4c37b25} from \"./conversion.mjs\";\nimport {_ as $aksy1$_} from \"@swc/helpers/_/_class_private_field_init\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $35ea8db9cb2ccb90$var$shiftArgs(args) {\n    let calendar = typeof args[0] === 'object' ? args.shift() : new (0, $3b62074eb05584b2$export$80ee6245ec4f29ec)();\n    let era;\n    if (typeof args[0] === 'string') era = args.shift();\n    else {\n        let eras = calendar.getEras();\n        era = eras[eras.length - 1];\n    }\n    let year = args.shift();\n    let month = args.shift();\n    let day = args.shift();\n    return [\n        calendar,\n        era,\n        year,\n        month,\n        day\n    ];\n}\nvar // This prevents TypeScript from allowing other types with the same fields to match.\n// i.e. a ZonedDateTime should not be be passable to a parameter that expects CalendarDate.\n// If that behavior is desired, use the AnyCalendarDate interface instead.\n// @ts-ignore\n$35ea8db9cb2ccb90$var$_type = /*#__PURE__*/ new WeakMap();\nclass $35ea8db9cb2ccb90$export$99faa760c7908e4f {\n    /** Returns a copy of this date. */ copy() {\n        if (this.era) return new $35ea8db9cb2ccb90$export$99faa760c7908e4f(this.calendar, this.era, this.year, this.month, this.day);\n        else return new $35ea8db9cb2ccb90$export$99faa760c7908e4f(this.calendar, this.year, this.month, this.day);\n    }\n    /** Returns a new `CalendarDate` with the given duration added to it. */ add(duration) {\n        return (0, $735220c2d4774dd3$export$e16d8520af44a096)(this, duration);\n    }\n    /** Returns a new `CalendarDate` with the given duration subtracted from it. */ subtract(duration) {\n        return (0, $735220c2d4774dd3$export$4e2d2ead65e5f7e3)(this, duration);\n    }\n    /** Returns a new `CalendarDate` with the given fields set to the provided values. Other fields will be constrained accordingly. */ set(fields) {\n        return (0, $735220c2d4774dd3$export$adaa4cf7ef1b65be)(this, fields);\n    }\n    /**\n   * Returns a new `CalendarDate` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */ cycle(field, amount, options) {\n        return (0, $735220c2d4774dd3$export$d52ced6badfb9a4c)(this, field, amount, options);\n    }\n    /** Converts the date to a native JavaScript Date object, with the time set to midnight in the given time zone. */ toDate(timeZone) {\n        return (0, $11d87f3f76e88657$export$e67a095c620b86fe)(this, timeZone);\n    }\n    /** Converts the date to an ISO 8601 formatted string. */ toString() {\n        return (0, $fae977aafc393c5c$export$60dfd74aa96791bd)(this);\n    }\n    /** Compares this date with another. A negative result indicates that this date is before the given one, and a positive date indicates that it is after. */ compare(b) {\n        return (0, $14e0f24ef4ac5c92$export$68781ddf31c0090f)(this, b);\n    }\n    constructor(...args){\n        (0, $aksy1$_)(this, $35ea8db9cb2ccb90$var$_type, {\n            writable: true,\n            value: void 0\n        });\n        let [calendar, era, year, month, day] = $35ea8db9cb2ccb90$var$shiftArgs(args);\n        this.calendar = calendar;\n        this.era = era;\n        this.year = year;\n        this.month = month;\n        this.day = day;\n        (0, $735220c2d4774dd3$export$c4e2ecac49351ef2)(this);\n    }\n}\nvar // This prevents TypeScript from allowing other types with the same fields to match.\n// @ts-ignore\n$35ea8db9cb2ccb90$var$_type1 = /*#__PURE__*/ new WeakMap();\nclass $35ea8db9cb2ccb90$export$680ea196effce5f {\n    /** Returns a copy of this time. */ copy() {\n        return new $35ea8db9cb2ccb90$export$680ea196effce5f(this.hour, this.minute, this.second, this.millisecond);\n    }\n    /** Returns a new `Time` with the given duration added to it. */ add(duration) {\n        return (0, $735220c2d4774dd3$export$7ed87b6bc2506470)(this, duration);\n    }\n    /** Returns a new `Time` with the given duration subtracted from it. */ subtract(duration) {\n        return (0, $735220c2d4774dd3$export$fe34d3a381cd7501)(this, duration);\n    }\n    /** Returns a new `Time` with the given fields set to the provided values. Other fields will be constrained accordingly. */ set(fields) {\n        return (0, $735220c2d4774dd3$export$e5d5e1c1822b6e56)(this, fields);\n    }\n    /**\n   * Returns a new `Time` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */ cycle(field, amount, options) {\n        return (0, $735220c2d4774dd3$export$dd02b3e0007dfe28)(this, field, amount, options);\n    }\n    /** Converts the time to an ISO 8601 formatted string. */ toString() {\n        return (0, $fae977aafc393c5c$export$f59dee82248f5ad4)(this);\n    }\n    /** Compares this time with another. A negative result indicates that this time is before the given one, and a positive time indicates that it is after. */ compare(b) {\n        return (0, $14e0f24ef4ac5c92$export$c19a80a9721b80f6)(this, b);\n    }\n    constructor(hour = 0, minute = 0, second = 0, millisecond = 0){\n        (0, $aksy1$_)(this, $35ea8db9cb2ccb90$var$_type1, {\n            writable: true,\n            value: void 0\n        });\n        this.hour = hour;\n        this.minute = minute;\n        this.second = second;\n        this.millisecond = millisecond;\n        (0, $735220c2d4774dd3$export$7555de1e070510cb)(this);\n    }\n}\nvar // This prevents TypeScript from allowing other types with the same fields to match.\n// @ts-ignore\n$35ea8db9cb2ccb90$var$_type2 = /*#__PURE__*/ new WeakMap();\nclass $35ea8db9cb2ccb90$export$ca871e8dbb80966f {\n    /** Returns a copy of this date. */ copy() {\n        if (this.era) return new $35ea8db9cb2ccb90$export$ca871e8dbb80966f(this.calendar, this.era, this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n        else return new $35ea8db9cb2ccb90$export$ca871e8dbb80966f(this.calendar, this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n    }\n    /** Returns a new `CalendarDateTime` with the given duration added to it. */ add(duration) {\n        return (0, $735220c2d4774dd3$export$e16d8520af44a096)(this, duration);\n    }\n    /** Returns a new `CalendarDateTime` with the given duration subtracted from it. */ subtract(duration) {\n        return (0, $735220c2d4774dd3$export$4e2d2ead65e5f7e3)(this, duration);\n    }\n    /** Returns a new `CalendarDateTime` with the given fields set to the provided values. Other fields will be constrained accordingly. */ set(fields) {\n        return (0, $735220c2d4774dd3$export$adaa4cf7ef1b65be)((0, $735220c2d4774dd3$export$e5d5e1c1822b6e56)(this, fields), fields);\n    }\n    /**\n   * Returns a new `CalendarDateTime` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */ cycle(field, amount, options) {\n        switch(field){\n            case 'era':\n            case 'year':\n            case 'month':\n            case 'day':\n                return (0, $735220c2d4774dd3$export$d52ced6badfb9a4c)(this, field, amount, options);\n            default:\n                return (0, $735220c2d4774dd3$export$dd02b3e0007dfe28)(this, field, amount, options);\n        }\n    }\n    /** Converts the date to a native JavaScript Date object in the given time zone. */ toDate(timeZone, disambiguation) {\n        return (0, $11d87f3f76e88657$export$e67a095c620b86fe)(this, timeZone, disambiguation);\n    }\n    /** Converts the date to an ISO 8601 formatted string. */ toString() {\n        return (0, $fae977aafc393c5c$export$4223de14708adc63)(this);\n    }\n    /** Compares this date with another. A negative result indicates that this date is before the given one, and a positive date indicates that it is after. */ compare(b) {\n        let res = (0, $14e0f24ef4ac5c92$export$68781ddf31c0090f)(this, b);\n        if (res === 0) return (0, $14e0f24ef4ac5c92$export$c19a80a9721b80f6)(this, (0, $11d87f3f76e88657$export$b21e0b124e224484)(b));\n        return res;\n    }\n    constructor(...args){\n        (0, $aksy1$_)(this, $35ea8db9cb2ccb90$var$_type2, {\n            writable: true,\n            value: void 0\n        });\n        let [calendar, era, year, month, day] = $35ea8db9cb2ccb90$var$shiftArgs(args);\n        this.calendar = calendar;\n        this.era = era;\n        this.year = year;\n        this.month = month;\n        this.day = day;\n        this.hour = args.shift() || 0;\n        this.minute = args.shift() || 0;\n        this.second = args.shift() || 0;\n        this.millisecond = args.shift() || 0;\n        (0, $735220c2d4774dd3$export$c4e2ecac49351ef2)(this);\n    }\n}\nvar // This prevents TypeScript from allowing other types with the same fields to match.\n// @ts-ignore\n$35ea8db9cb2ccb90$var$_type3 = /*#__PURE__*/ new WeakMap();\nclass $35ea8db9cb2ccb90$export$d3b7288e7994edea {\n    /** Returns a copy of this date. */ copy() {\n        if (this.era) return new $35ea8db9cb2ccb90$export$d3b7288e7994edea(this.calendar, this.era, this.year, this.month, this.day, this.timeZone, this.offset, this.hour, this.minute, this.second, this.millisecond);\n        else return new $35ea8db9cb2ccb90$export$d3b7288e7994edea(this.calendar, this.year, this.month, this.day, this.timeZone, this.offset, this.hour, this.minute, this.second, this.millisecond);\n    }\n    /** Returns a new `ZonedDateTime` with the given duration added to it. */ add(duration) {\n        return (0, $735220c2d4774dd3$export$96b1d28349274637)(this, duration);\n    }\n    /** Returns a new `ZonedDateTime` with the given duration subtracted from it. */ subtract(duration) {\n        return (0, $735220c2d4774dd3$export$6814caac34ca03c7)(this, duration);\n    }\n    /** Returns a new `ZonedDateTime` with the given fields set to the provided values. Other fields will be constrained accordingly. */ set(fields, disambiguation) {\n        return (0, $735220c2d4774dd3$export$31b5430eb18be4f8)(this, fields, disambiguation);\n    }\n    /**\n   * Returns a new `ZonedDateTime` with the given field adjusted by a specified amount.\n   * When the resulting value reaches the limits of the field, it wraps around.\n   */ cycle(field, amount, options) {\n        return (0, $735220c2d4774dd3$export$9a297d111fc86b79)(this, field, amount, options);\n    }\n    /** Converts the date to a native JavaScript Date object. */ toDate() {\n        return (0, $11d87f3f76e88657$export$83aac07b4c37b25)(this);\n    }\n    /** Converts the date to an ISO 8601 formatted string, including the UTC offset and time zone identifier. */ toString() {\n        return (0, $fae977aafc393c5c$export$bf79f1ebf4b18792)(this);\n    }\n    /** Converts the date to an ISO 8601 formatted string in UTC. */ toAbsoluteString() {\n        return this.toDate().toISOString();\n    }\n    /** Compares this date with another. A negative result indicates that this date is before the given one, and a positive date indicates that it is after. */ compare(b) {\n        // TODO: Is this a bad idea??\n        return this.toDate().getTime() - (0, $11d87f3f76e88657$export$84c95a83c799e074)(b, this.timeZone).toDate().getTime();\n    }\n    constructor(...args){\n        (0, $aksy1$_)(this, $35ea8db9cb2ccb90$var$_type3, {\n            writable: true,\n            value: void 0\n        });\n        let [calendar, era, year, month, day] = $35ea8db9cb2ccb90$var$shiftArgs(args);\n        let timeZone = args.shift();\n        let offset = args.shift();\n        this.calendar = calendar;\n        this.era = era;\n        this.year = year;\n        this.month = month;\n        this.day = day;\n        this.timeZone = timeZone;\n        this.offset = offset;\n        this.hour = args.shift() || 0;\n        this.minute = args.shift() || 0;\n        this.second = args.shift() || 0;\n        this.millisecond = args.shift() || 0;\n        (0, $735220c2d4774dd3$export$c4e2ecac49351ef2)(this);\n    }\n}\n\n\nexport {$35ea8db9cb2ccb90$export$99faa760c7908e4f as CalendarDate, $35ea8db9cb2ccb90$export$680ea196effce5f as Time, $35ea8db9cb2ccb90$export$ca871e8dbb80966f as CalendarDateTime, $35ea8db9cb2ccb90$export$d3b7288e7994edea as ZonedDateTime};\n//# sourceMappingURL=CalendarDate.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f} from \"./CalendarDate.mjs\";\nimport {GregorianCalendar as $3b62074eb05584b2$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from the TC39 Temporal proposal.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $62225008020f0a13$var$ERA_START_DATES = [\n    [\n        1868,\n        9,\n        8\n    ],\n    [\n        1912,\n        7,\n        30\n    ],\n    [\n        1926,\n        12,\n        25\n    ],\n    [\n        1989,\n        1,\n        8\n    ],\n    [\n        2019,\n        5,\n        1\n    ]\n];\nconst $62225008020f0a13$var$ERA_END_DATES = [\n    [\n        1912,\n        7,\n        29\n    ],\n    [\n        1926,\n        12,\n        24\n    ],\n    [\n        1989,\n        1,\n        7\n    ],\n    [\n        2019,\n        4,\n        30\n    ]\n];\nconst $62225008020f0a13$var$ERA_ADDENDS = [\n    1867,\n    1911,\n    1925,\n    1988,\n    2018\n];\nconst $62225008020f0a13$var$ERA_NAMES = [\n    'meiji',\n    'taisho',\n    'showa',\n    'heisei',\n    'reiwa'\n];\nfunction $62225008020f0a13$var$findEraFromGregorianDate(date) {\n    const idx = $62225008020f0a13$var$ERA_START_DATES.findIndex(([year, month, day])=>{\n        if (date.year < year) return true;\n        if (date.year === year && date.month < month) return true;\n        if (date.year === year && date.month === month && date.day < day) return true;\n        return false;\n    });\n    if (idx === -1) return $62225008020f0a13$var$ERA_START_DATES.length - 1;\n    if (idx === 0) return 0;\n    return idx - 1;\n}\nfunction $62225008020f0a13$var$toGregorian(date) {\n    let eraAddend = $62225008020f0a13$var$ERA_ADDENDS[$62225008020f0a13$var$ERA_NAMES.indexOf(date.era)];\n    if (!eraAddend) throw new Error('Unknown era: ' + date.era);\n    return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(date.year + eraAddend, date.month, date.day);\n}\nclass $62225008020f0a13$export$b746ab2b60cdffbf extends (0, $3b62074eb05584b2$export$80ee6245ec4f29ec) {\n    fromJulianDay(jd) {\n        let date = super.fromJulianDay(jd);\n        let era = $62225008020f0a13$var$findEraFromGregorianDate(date);\n        return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(this, $62225008020f0a13$var$ERA_NAMES[era], date.year - $62225008020f0a13$var$ERA_ADDENDS[era], date.month, date.day);\n    }\n    toJulianDay(date) {\n        return super.toJulianDay($62225008020f0a13$var$toGregorian(date));\n    }\n    balanceDate(date) {\n        let gregorianDate = $62225008020f0a13$var$toGregorian(date);\n        let era = $62225008020f0a13$var$findEraFromGregorianDate(gregorianDate);\n        if ($62225008020f0a13$var$ERA_NAMES[era] !== date.era) {\n            date.era = $62225008020f0a13$var$ERA_NAMES[era];\n            date.year = gregorianDate.year - $62225008020f0a13$var$ERA_ADDENDS[era];\n        }\n        // Constrain in case we went before the first supported era.\n        this.constrainDate(date);\n    }\n    constrainDate(date) {\n        let idx = $62225008020f0a13$var$ERA_NAMES.indexOf(date.era);\n        let end = $62225008020f0a13$var$ERA_END_DATES[idx];\n        if (end != null) {\n            let [endYear, endMonth, endDay] = end;\n            // Constrain the year to the maximum possible value in the era.\n            // Then constrain the month and day fields within that.\n            let maxYear = endYear - $62225008020f0a13$var$ERA_ADDENDS[idx];\n            date.year = Math.max(1, Math.min(maxYear, date.year));\n            if (date.year === maxYear) {\n                date.month = Math.min(endMonth, date.month);\n                if (date.month === endMonth) date.day = Math.min(endDay, date.day);\n            }\n        }\n        if (date.year === 1 && idx >= 0) {\n            let [, startMonth, startDay] = $62225008020f0a13$var$ERA_START_DATES[idx];\n            date.month = Math.max(startMonth, date.month);\n            if (date.month === startMonth) date.day = Math.max(startDay, date.day);\n        }\n    }\n    getEras() {\n        return $62225008020f0a13$var$ERA_NAMES;\n    }\n    getYearsInEra(date) {\n        // Get the number of years in the era, taking into account the date's month and day fields.\n        let era = $62225008020f0a13$var$ERA_NAMES.indexOf(date.era);\n        let cur = $62225008020f0a13$var$ERA_START_DATES[era];\n        let next = $62225008020f0a13$var$ERA_START_DATES[era + 1];\n        if (next == null) // 9999 gregorian is the maximum year allowed.\n        return 9999 - cur[0] + 1;\n        let years = next[0] - cur[0];\n        if (date.month < next[1] || date.month === next[1] && date.day < next[2]) years++;\n        return years;\n    }\n    getDaysInMonth(date) {\n        return super.getDaysInMonth($62225008020f0a13$var$toGregorian(date));\n    }\n    getMinimumMonthInYear(date) {\n        let start = $62225008020f0a13$var$getMinimums(date);\n        return start ? start[1] : 1;\n    }\n    getMinimumDayInMonth(date) {\n        let start = $62225008020f0a13$var$getMinimums(date);\n        return start && date.month === start[1] ? start[2] : 1;\n    }\n    constructor(...args){\n        super(...args), this.identifier = 'japanese';\n    }\n}\nfunction $62225008020f0a13$var$getMinimums(date) {\n    if (date.year === 1) {\n        let idx = $62225008020f0a13$var$ERA_NAMES.indexOf(date.era);\n        return $62225008020f0a13$var$ERA_START_DATES[idx];\n    }\n}\n\n\nexport {$62225008020f0a13$export$b746ab2b60cdffbf as JapaneseCalendar};\n//# sourceMappingURL=JapaneseCalendar.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f} from \"./CalendarDate.mjs\";\nimport {fromExtendedYear as $3b62074eb05584b2$export$4475b7e617eb123c, getExtendedYear as $3b62074eb05584b2$export$c36e0ecb2d4fa69d, GregorianCalendar as $3b62074eb05584b2$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $8d73d47422ca7302$var$BUDDHIST_ERA_START = -543;\nclass $8d73d47422ca7302$export$42d20a78301dee44 extends (0, $3b62074eb05584b2$export$80ee6245ec4f29ec) {\n    fromJulianDay(jd) {\n        let gregorianDate = super.fromJulianDay(jd);\n        let year = (0, $3b62074eb05584b2$export$c36e0ecb2d4fa69d)(gregorianDate.era, gregorianDate.year);\n        return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(this, year - $8d73d47422ca7302$var$BUDDHIST_ERA_START, gregorianDate.month, gregorianDate.day);\n    }\n    toJulianDay(date) {\n        return super.toJulianDay($8d73d47422ca7302$var$toGregorian(date));\n    }\n    getEras() {\n        return [\n            'BE'\n        ];\n    }\n    getDaysInMonth(date) {\n        return super.getDaysInMonth($8d73d47422ca7302$var$toGregorian(date));\n    }\n    balanceDate() {}\n    constructor(...args){\n        super(...args), this.identifier = 'buddhist';\n    }\n}\nfunction $8d73d47422ca7302$var$toGregorian(date) {\n    let [era, year] = (0, $3b62074eb05584b2$export$4475b7e617eb123c)(date.year + $8d73d47422ca7302$var$BUDDHIST_ERA_START);\n    return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(era, year, date.month, date.day);\n}\n\n\nexport {$8d73d47422ca7302$export$42d20a78301dee44 as BuddhistCalendar};\n//# sourceMappingURL=BuddhistCalendar.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f} from \"./CalendarDate.mjs\";\nimport {fromExtendedYear as $3b62074eb05584b2$export$4475b7e617eb123c, getExtendedYear as $3b62074eb05584b2$export$c36e0ecb2d4fa69d, GregorianCalendar as $3b62074eb05584b2$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $5f31bd6f0c8940b2$var$TAIWAN_ERA_START = 1911;\nfunction $5f31bd6f0c8940b2$var$gregorianYear(date) {\n    return date.era === 'minguo' ? date.year + $5f31bd6f0c8940b2$var$TAIWAN_ERA_START : 1 - date.year + $5f31bd6f0c8940b2$var$TAIWAN_ERA_START;\n}\nfunction $5f31bd6f0c8940b2$var$gregorianToTaiwan(year) {\n    let y = year - $5f31bd6f0c8940b2$var$TAIWAN_ERA_START;\n    if (y > 0) return [\n        'minguo',\n        y\n    ];\n    else return [\n        'before_minguo',\n        1 - y\n    ];\n}\nclass $5f31bd6f0c8940b2$export$65e01080afcb0799 extends (0, $3b62074eb05584b2$export$80ee6245ec4f29ec) {\n    fromJulianDay(jd) {\n        let date = super.fromJulianDay(jd);\n        let extendedYear = (0, $3b62074eb05584b2$export$c36e0ecb2d4fa69d)(date.era, date.year);\n        let [era, year] = $5f31bd6f0c8940b2$var$gregorianToTaiwan(extendedYear);\n        return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(this, era, year, date.month, date.day);\n    }\n    toJulianDay(date) {\n        return super.toJulianDay($5f31bd6f0c8940b2$var$toGregorian(date));\n    }\n    getEras() {\n        return [\n            'before_minguo',\n            'minguo'\n        ];\n    }\n    balanceDate(date) {\n        let [era, year] = $5f31bd6f0c8940b2$var$gregorianToTaiwan($5f31bd6f0c8940b2$var$gregorianYear(date));\n        date.era = era;\n        date.year = year;\n    }\n    isInverseEra(date) {\n        return date.era === 'before_minguo';\n    }\n    getDaysInMonth(date) {\n        return super.getDaysInMonth($5f31bd6f0c8940b2$var$toGregorian(date));\n    }\n    getYearsInEra(date) {\n        return date.era === 'before_minguo' ? 9999 : 9999 - $5f31bd6f0c8940b2$var$TAIWAN_ERA_START;\n    }\n    constructor(...args){\n        super(...args), this.identifier = 'roc' // Republic of China\n        ;\n    }\n}\nfunction $5f31bd6f0c8940b2$var$toGregorian(date) {\n    let [era, year] = (0, $3b62074eb05584b2$export$4475b7e617eb123c)($5f31bd6f0c8940b2$var$gregorianYear(date));\n    return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(era, year, date.month, date.day);\n}\n\n\nexport {$5f31bd6f0c8940b2$export$65e01080afcb0799 as TaiwanCalendar};\n//# sourceMappingURL=TaiwanCalendar.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f} from \"./CalendarDate.mjs\";\nimport {mod as $2b4dce13dd5a17fa$export$842a2cf37af977e1} from \"./utils.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $f3ed2e4472ae7e25$var$PERSIAN_EPOCH = 1948320;\n// Number of days from the start of the year to the start of each month.\nconst $f3ed2e4472ae7e25$var$MONTH_START = [\n    0,\n    31,\n    62,\n    93,\n    124,\n    155,\n    186,\n    216,\n    246,\n    276,\n    306,\n    336 // Esfand\n];\nclass $f3ed2e4472ae7e25$export$37fccdbfd14c5939 {\n    fromJulianDay(jd) {\n        let daysSinceEpoch = jd - $f3ed2e4472ae7e25$var$PERSIAN_EPOCH;\n        let year = 1 + Math.floor((33 * daysSinceEpoch + 3) / 12053);\n        let farvardin1 = 365 * (year - 1) + Math.floor((8 * year + 21) / 33);\n        let dayOfYear = daysSinceEpoch - farvardin1;\n        let month = dayOfYear < 216 ? Math.floor(dayOfYear / 31) : Math.floor((dayOfYear - 6) / 30);\n        let day = dayOfYear - $f3ed2e4472ae7e25$var$MONTH_START[month] + 1;\n        return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(this, year, month + 1, day);\n    }\n    toJulianDay(date) {\n        let jd = $f3ed2e4472ae7e25$var$PERSIAN_EPOCH - 1 + 365 * (date.year - 1) + Math.floor((8 * date.year + 21) / 33);\n        jd += $f3ed2e4472ae7e25$var$MONTH_START[date.month - 1];\n        jd += date.day;\n        return jd;\n    }\n    getMonthsInYear() {\n        return 12;\n    }\n    getDaysInMonth(date) {\n        if (date.month <= 6) return 31;\n        if (date.month <= 11) return 30;\n        let isLeapYear = (0, $2b4dce13dd5a17fa$export$842a2cf37af977e1)(25 * date.year + 11, 33) < 8;\n        return isLeapYear ? 30 : 29;\n    }\n    getEras() {\n        return [\n            'AP'\n        ];\n    }\n    getYearsInEra() {\n        // 9378-10-10 persian is 9999-12-31 gregorian.\n        // Round down to 9377 to set the maximum full year.\n        return 9377;\n    }\n    constructor(){\n        this.identifier = 'persian';\n    }\n}\n\n\nexport {$f3ed2e4472ae7e25$export$37fccdbfd14c5939 as PersianCalendar};\n//# sourceMappingURL=PersianCalendar.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f} from \"./CalendarDate.mjs\";\nimport {fromExtendedYear as $3b62074eb05584b2$export$4475b7e617eb123c, GregorianCalendar as $3b62074eb05584b2$export$80ee6245ec4f29ec, gregorianToJulianDay as $3b62074eb05584b2$export$f297eb839006d339, isLeapYear as $3b62074eb05584b2$export$553d7fa8e3805fc0} from \"./GregorianCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\n// Starts in 78 AD,\nconst $82c358003bdda0a8$var$INDIAN_ERA_START = 78;\n// The Indian year starts 80 days later than the Gregorian year.\nconst $82c358003bdda0a8$var$INDIAN_YEAR_START = 80;\nclass $82c358003bdda0a8$export$39f31c639fa15726 extends (0, $3b62074eb05584b2$export$80ee6245ec4f29ec) {\n    fromJulianDay(jd) {\n        // Gregorian date for Julian day\n        let date = super.fromJulianDay(jd);\n        // Year in Saka era\n        let indianYear = date.year - $82c358003bdda0a8$var$INDIAN_ERA_START;\n        // Day number in Gregorian year (starting from 0)\n        let yDay = jd - (0, $3b62074eb05584b2$export$f297eb839006d339)(date.era, date.year, 1, 1);\n        let leapMonth;\n        if (yDay < $82c358003bdda0a8$var$INDIAN_YEAR_START) {\n            //  Day is at the end of the preceding Saka year\n            indianYear--;\n            // Days in leapMonth this year, previous Gregorian year\n            leapMonth = (0, $3b62074eb05584b2$export$553d7fa8e3805fc0)(date.year - 1) ? 31 : 30;\n            yDay += leapMonth + 155 + 90 + 10;\n        } else {\n            // Days in leapMonth this year\n            leapMonth = (0, $3b62074eb05584b2$export$553d7fa8e3805fc0)(date.year) ? 31 : 30;\n            yDay -= $82c358003bdda0a8$var$INDIAN_YEAR_START;\n        }\n        let indianMonth;\n        let indianDay;\n        if (yDay < leapMonth) {\n            indianMonth = 1;\n            indianDay = yDay + 1;\n        } else {\n            let mDay = yDay - leapMonth;\n            if (mDay < 155) {\n                indianMonth = Math.floor(mDay / 31) + 2;\n                indianDay = mDay % 31 + 1;\n            } else {\n                mDay -= 155;\n                indianMonth = Math.floor(mDay / 30) + 7;\n                indianDay = mDay % 30 + 1;\n            }\n        }\n        return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(this, indianYear, indianMonth, indianDay);\n    }\n    toJulianDay(date) {\n        let extendedYear = date.year + $82c358003bdda0a8$var$INDIAN_ERA_START;\n        let [era, year] = (0, $3b62074eb05584b2$export$4475b7e617eb123c)(extendedYear);\n        let leapMonth;\n        let jd;\n        if ((0, $3b62074eb05584b2$export$553d7fa8e3805fc0)(year)) {\n            leapMonth = 31;\n            jd = (0, $3b62074eb05584b2$export$f297eb839006d339)(era, year, 3, 21);\n        } else {\n            leapMonth = 30;\n            jd = (0, $3b62074eb05584b2$export$f297eb839006d339)(era, year, 3, 22);\n        }\n        if (date.month === 1) return jd + date.day - 1;\n        jd += leapMonth + Math.min(date.month - 2, 5) * 31;\n        if (date.month >= 8) jd += (date.month - 7) * 30;\n        jd += date.day - 1;\n        return jd;\n    }\n    getDaysInMonth(date) {\n        if (date.month === 1 && (0, $3b62074eb05584b2$export$553d7fa8e3805fc0)(date.year + $82c358003bdda0a8$var$INDIAN_ERA_START)) return 31;\n        if (date.month >= 2 && date.month <= 6) return 31;\n        return 30;\n    }\n    getYearsInEra() {\n        // 9999-12-31 gregorian is 9920-10-10 indian.\n        // Round down to 9919 for the last full year.\n        return 9919;\n    }\n    getEras() {\n        return [\n            'saka'\n        ];\n    }\n    balanceDate() {}\n    constructor(...args){\n        super(...args), this.identifier = 'indian';\n    }\n}\n\n\nexport {$82c358003bdda0a8$export$39f31c639fa15726 as IndianCalendar};\n//# sourceMappingURL=IndianCalendar.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f} from \"./CalendarDate.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nconst $f2f3e0e3a817edbd$var$CIVIL_EPOC = 1948440; // CE 622 July 16 Friday (Julian calendar) / CE 622 July 19 (Gregorian calendar)\nconst $f2f3e0e3a817edbd$var$ASTRONOMICAL_EPOC = 1948439; // CE 622 July 15 Thursday (Julian calendar)\nconst $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START = 1300;\nconst $f2f3e0e3a817edbd$var$UMALQURA_YEAR_END = 1600;\nconst $f2f3e0e3a817edbd$var$UMALQURA_START_DAYS = 460322;\nfunction $f2f3e0e3a817edbd$var$islamicToJulianDay(epoch, year, month, day) {\n    return day + Math.ceil(29.5 * (month - 1)) + (year - 1) * 354 + Math.floor((3 + 11 * year) / 30) + epoch - 1;\n}\nfunction $f2f3e0e3a817edbd$var$julianDayToIslamic(calendar, epoch, jd) {\n    let year = Math.floor((30 * (jd - epoch) + 10646) / 10631);\n    let month = Math.min(12, Math.ceil((jd - (29 + $f2f3e0e3a817edbd$var$islamicToJulianDay(epoch, year, 1, 1))) / 29.5) + 1);\n    let day = jd - $f2f3e0e3a817edbd$var$islamicToJulianDay(epoch, year, month, 1) + 1;\n    return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(calendar, year, month, day);\n}\nfunction $f2f3e0e3a817edbd$var$isLeapYear(year) {\n    return (14 + 11 * year) % 30 < 11;\n}\nclass $f2f3e0e3a817edbd$export$2066795aadd37bfc {\n    fromJulianDay(jd) {\n        return $f2f3e0e3a817edbd$var$julianDayToIslamic(this, $f2f3e0e3a817edbd$var$CIVIL_EPOC, jd);\n    }\n    toJulianDay(date) {\n        return $f2f3e0e3a817edbd$var$islamicToJulianDay($f2f3e0e3a817edbd$var$CIVIL_EPOC, date.year, date.month, date.day);\n    }\n    getDaysInMonth(date) {\n        let length = 29 + date.month % 2;\n        if (date.month === 12 && $f2f3e0e3a817edbd$var$isLeapYear(date.year)) length++;\n        return length;\n    }\n    getMonthsInYear() {\n        return 12;\n    }\n    getDaysInYear(date) {\n        return $f2f3e0e3a817edbd$var$isLeapYear(date.year) ? 355 : 354;\n    }\n    getYearsInEra() {\n        // 9999 gregorian\n        return 9665;\n    }\n    getEras() {\n        return [\n            'AH'\n        ];\n    }\n    constructor(){\n        this.identifier = 'islamic-civil';\n    }\n}\nclass $f2f3e0e3a817edbd$export$37f0887f2f9d22f7 extends $f2f3e0e3a817edbd$export$2066795aadd37bfc {\n    fromJulianDay(jd) {\n        return $f2f3e0e3a817edbd$var$julianDayToIslamic(this, $f2f3e0e3a817edbd$var$ASTRONOMICAL_EPOC, jd);\n    }\n    toJulianDay(date) {\n        return $f2f3e0e3a817edbd$var$islamicToJulianDay($f2f3e0e3a817edbd$var$ASTRONOMICAL_EPOC, date.year, date.month, date.day);\n    }\n    constructor(...args){\n        super(...args), this.identifier = 'islamic-tbla';\n    }\n}\n// Generated by scripts/generate-umalqura.js\nconst $f2f3e0e3a817edbd$var$UMALQURA_DATA = 'qgpUDckO1AbqBmwDrQpVBakGkgepC9QF2gpcBS0NlQZKB1QLagutBa4ETwoXBYsGpQbVCtYCWwmdBE0KJg2VDawFtgm6AlsKKwWVCsoG6Qr0AnYJtgJWCcoKpAvSC9kF3AJtCU0FpQpSC6ULtAW2CVcFlwJLBaMGUgdlC2oFqworBZUMSg2lDcoF1gpXCasESwmlClILagt1BXYCtwhbBFUFqQW0BdoJ3QRuAjYJqgpUDbIN1QXaAlsJqwRVCkkLZAtxC7QFtQpVCiUNkg7JDtQG6QprCasEkwpJDaQNsg25CroEWworBZUKKgtVC1wFvQQ9Ah0JlQpKC1oLbQW2AjsJmwRVBqkGVAdqC2wFrQpVBSkLkgupC9QF2gpaBasKlQVJB2QHqgu1BbYCVgpNDiULUgtqC60FrgIvCZcESwalBqwG1gpdBZ0ETQoWDZUNqgW1BdoCWwmtBJUFygbkBuoK9QS2AlYJqgpUC9IL2QXqAm0JrQSVCkoLpQuyBbUJ1gSXCkcFkwZJB1ULagVrCisFiwpGDaMNygXWCtsEawJLCaUKUgtpC3UFdgG3CFsCKwVlBbQF2gntBG0BtgimClINqQ3UBdoKWwmrBFMGKQdiB6kLsgW1ClUFJQuSDckO0gbpCmsFqwRVCikNVA2qDbUJugQ7CpsETQqqCtUK2gJdCV4ELgqaDFUNsga5BroEXQotBZUKUguoC7QLuQXaAloJSgukDdEO6AZqC20FNQWVBkoNqA3UDdoGWwWdAisGFQtKC5ULqgWuCi4JjwwnBZUGqgbWCl0FnQI=';\nlet $f2f3e0e3a817edbd$var$UMALQURA_MONTHLENGTH;\nlet $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START_TABLE;\nfunction $f2f3e0e3a817edbd$var$umalquraYearStart(year) {\n    return $f2f3e0e3a817edbd$var$UMALQURA_START_DAYS + $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START_TABLE[year - $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START];\n}\nfunction $f2f3e0e3a817edbd$var$umalquraMonthLength(year, month) {\n    let idx = year - $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START;\n    let mask = 0x01 << 11 - (month - 1);\n    if (($f2f3e0e3a817edbd$var$UMALQURA_MONTHLENGTH[idx] & mask) === 0) return 29;\n    else return 30;\n}\nfunction $f2f3e0e3a817edbd$var$umalquraMonthStart(year, month) {\n    let day = $f2f3e0e3a817edbd$var$umalquraYearStart(year);\n    for(let i = 1; i < month; i++)day += $f2f3e0e3a817edbd$var$umalquraMonthLength(year, i);\n    return day;\n}\nfunction $f2f3e0e3a817edbd$var$umalquraYearLength(year) {\n    return $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START_TABLE[year + 1 - $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START] - $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START_TABLE[year - $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START];\n}\nclass $f2f3e0e3a817edbd$export$5baab4758c231076 extends $f2f3e0e3a817edbd$export$2066795aadd37bfc {\n    fromJulianDay(jd) {\n        let days = jd - $f2f3e0e3a817edbd$var$CIVIL_EPOC;\n        let startDays = $f2f3e0e3a817edbd$var$umalquraYearStart($f2f3e0e3a817edbd$var$UMALQURA_YEAR_START);\n        let endDays = $f2f3e0e3a817edbd$var$umalquraYearStart($f2f3e0e3a817edbd$var$UMALQURA_YEAR_END);\n        if (days < startDays || days > endDays) return super.fromJulianDay(jd);\n        else {\n            let y = $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START - 1;\n            let m = 1;\n            let d = 1;\n            while(d > 0){\n                y++;\n                d = days - $f2f3e0e3a817edbd$var$umalquraYearStart(y) + 1;\n                let yearLength = $f2f3e0e3a817edbd$var$umalquraYearLength(y);\n                if (d === yearLength) {\n                    m = 12;\n                    break;\n                } else if (d < yearLength) {\n                    let monthLength = $f2f3e0e3a817edbd$var$umalquraMonthLength(y, m);\n                    m = 1;\n                    while(d > monthLength){\n                        d -= monthLength;\n                        m++;\n                        monthLength = $f2f3e0e3a817edbd$var$umalquraMonthLength(y, m);\n                    }\n                    break;\n                }\n            }\n            return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(this, y, m, days - $f2f3e0e3a817edbd$var$umalquraMonthStart(y, m) + 1);\n        }\n    }\n    toJulianDay(date) {\n        if (date.year < $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START || date.year > $f2f3e0e3a817edbd$var$UMALQURA_YEAR_END) return super.toJulianDay(date);\n        return $f2f3e0e3a817edbd$var$CIVIL_EPOC + $f2f3e0e3a817edbd$var$umalquraMonthStart(date.year, date.month) + (date.day - 1);\n    }\n    getDaysInMonth(date) {\n        if (date.year < $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START || date.year > $f2f3e0e3a817edbd$var$UMALQURA_YEAR_END) return super.getDaysInMonth(date);\n        return $f2f3e0e3a817edbd$var$umalquraMonthLength(date.year, date.month);\n    }\n    getDaysInYear(date) {\n        if (date.year < $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START || date.year > $f2f3e0e3a817edbd$var$UMALQURA_YEAR_END) return super.getDaysInYear(date);\n        return $f2f3e0e3a817edbd$var$umalquraYearLength(date.year);\n    }\n    constructor(){\n        super(), this.identifier = 'islamic-umalqura';\n        if (!$f2f3e0e3a817edbd$var$UMALQURA_MONTHLENGTH) $f2f3e0e3a817edbd$var$UMALQURA_MONTHLENGTH = new Uint16Array(Uint8Array.from(atob($f2f3e0e3a817edbd$var$UMALQURA_DATA), (c)=>c.charCodeAt(0)).buffer);\n        if (!$f2f3e0e3a817edbd$var$UMALQURA_YEAR_START_TABLE) {\n            $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START_TABLE = new Uint32Array($f2f3e0e3a817edbd$var$UMALQURA_YEAR_END - $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START + 1);\n            let yearStart = 0;\n            for(let year = $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START; year <= $f2f3e0e3a817edbd$var$UMALQURA_YEAR_END; year++){\n                $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START_TABLE[year - $f2f3e0e3a817edbd$var$UMALQURA_YEAR_START] = yearStart;\n                for(let i = 1; i <= 12; i++)yearStart += $f2f3e0e3a817edbd$var$umalquraMonthLength(year, i);\n            }\n        }\n    }\n}\n\n\nexport {$f2f3e0e3a817edbd$export$2066795aadd37bfc as IslamicCivilCalendar, $f2f3e0e3a817edbd$export$37f0887f2f9d22f7 as IslamicTabularCalendar, $f2f3e0e3a817edbd$export$5baab4758c231076 as IslamicUmalquraCalendar};\n//# sourceMappingURL=IslamicCalendar.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f} from \"./CalendarDate.mjs\";\nimport {mod as $2b4dce13dd5a17fa$export$842a2cf37af977e1} from \"./utils.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\n\nconst $7c5f6fbf42389787$var$HEBREW_EPOCH = 347997;\n// Hebrew date calculations are performed in terms of days, hours, and\n// \"parts\" (or halakim), which are 1/1080 of an hour, or 3 1/3 seconds.\nconst $7c5f6fbf42389787$var$HOUR_PARTS = 1080;\nconst $7c5f6fbf42389787$var$DAY_PARTS = 24 * $7c5f6fbf42389787$var$HOUR_PARTS;\n// An approximate value for the length of a lunar month.\n// It is used to calculate the approximate year and month of a given\n// absolute date.\nconst $7c5f6fbf42389787$var$MONTH_DAYS = 29;\nconst $7c5f6fbf42389787$var$MONTH_FRACT = 12 * $7c5f6fbf42389787$var$HOUR_PARTS + 793;\nconst $7c5f6fbf42389787$var$MONTH_PARTS = $7c5f6fbf42389787$var$MONTH_DAYS * $7c5f6fbf42389787$var$DAY_PARTS + $7c5f6fbf42389787$var$MONTH_FRACT;\nfunction $7c5f6fbf42389787$var$isLeapYear(year) {\n    return (0, $2b4dce13dd5a17fa$export$842a2cf37af977e1)(year * 7 + 1, 19) < 7;\n}\n// Test for delay of start of new year and to avoid\n// Sunday, Wednesday, and Friday as start of the new year.\nfunction $7c5f6fbf42389787$var$hebrewDelay1(year) {\n    let months = Math.floor((235 * year - 234) / 19);\n    let parts = 12084 + 13753 * months;\n    let day = months * 29 + Math.floor(parts / 25920);\n    if ((0, $2b4dce13dd5a17fa$export$842a2cf37af977e1)(3 * (day + 1), 7) < 3) day += 1;\n    return day;\n}\n// Check for delay in start of new year due to length of adjacent years\nfunction $7c5f6fbf42389787$var$hebrewDelay2(year) {\n    let last = $7c5f6fbf42389787$var$hebrewDelay1(year - 1);\n    let present = $7c5f6fbf42389787$var$hebrewDelay1(year);\n    let next = $7c5f6fbf42389787$var$hebrewDelay1(year + 1);\n    if (next - present === 356) return 2;\n    if (present - last === 382) return 1;\n    return 0;\n}\nfunction $7c5f6fbf42389787$var$startOfYear(year) {\n    return $7c5f6fbf42389787$var$hebrewDelay1(year) + $7c5f6fbf42389787$var$hebrewDelay2(year);\n}\nfunction $7c5f6fbf42389787$var$getDaysInYear(year) {\n    return $7c5f6fbf42389787$var$startOfYear(year + 1) - $7c5f6fbf42389787$var$startOfYear(year);\n}\nfunction $7c5f6fbf42389787$var$getYearType(year) {\n    let yearLength = $7c5f6fbf42389787$var$getDaysInYear(year);\n    if (yearLength > 380) yearLength -= 30; // Subtract length of leap month.\n    switch(yearLength){\n        case 353:\n            return 0; // deficient\n        case 354:\n            return 1; // normal\n        case 355:\n            return 2; // complete\n    }\n}\nfunction $7c5f6fbf42389787$var$getDaysInMonth(year, month) {\n    // Normalize month numbers from 1 - 13, even on non-leap years\n    if (month >= 6 && !$7c5f6fbf42389787$var$isLeapYear(year)) month++;\n    // First of all, dispose of fixed-length 29 day months\n    if (month === 4 || month === 7 || month === 9 || month === 11 || month === 13) return 29;\n    let yearType = $7c5f6fbf42389787$var$getYearType(year);\n    // If it's Heshvan, days depend on length of year\n    if (month === 2) return yearType === 2 ? 30 : 29;\n    // Similarly, Kislev varies with the length of year\n    if (month === 3) return yearType === 0 ? 29 : 30;\n    // Adar I only exists in leap years\n    if (month === 6) return $7c5f6fbf42389787$var$isLeapYear(year) ? 30 : 0;\n    return 30;\n}\nclass $7c5f6fbf42389787$export$ca405048b8fb5af {\n    fromJulianDay(jd) {\n        let d = jd - $7c5f6fbf42389787$var$HEBREW_EPOCH;\n        let m = d * $7c5f6fbf42389787$var$DAY_PARTS / $7c5f6fbf42389787$var$MONTH_PARTS; // Months (approx)\n        let year = Math.floor((19 * m + 234) / 235) + 1; // Years (approx)\n        let ys = $7c5f6fbf42389787$var$startOfYear(year); // 1st day of year\n        let dayOfYear = Math.floor(d - ys);\n        // Because of the postponement rules, it's possible to guess wrong.  Fix it.\n        while(dayOfYear < 1){\n            year--;\n            ys = $7c5f6fbf42389787$var$startOfYear(year);\n            dayOfYear = Math.floor(d - ys);\n        }\n        // Now figure out which month we're in, and the date within that month\n        let month = 1;\n        let monthStart = 0;\n        while(monthStart < dayOfYear){\n            monthStart += $7c5f6fbf42389787$var$getDaysInMonth(year, month);\n            month++;\n        }\n        month--;\n        monthStart -= $7c5f6fbf42389787$var$getDaysInMonth(year, month);\n        let day = dayOfYear - monthStart;\n        return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(this, year, month, day);\n    }\n    toJulianDay(date) {\n        let jd = $7c5f6fbf42389787$var$startOfYear(date.year);\n        for(let month = 1; month < date.month; month++)jd += $7c5f6fbf42389787$var$getDaysInMonth(date.year, month);\n        return jd + date.day + $7c5f6fbf42389787$var$HEBREW_EPOCH;\n    }\n    getDaysInMonth(date) {\n        return $7c5f6fbf42389787$var$getDaysInMonth(date.year, date.month);\n    }\n    getMonthsInYear(date) {\n        return $7c5f6fbf42389787$var$isLeapYear(date.year) ? 13 : 12;\n    }\n    getDaysInYear(date) {\n        return $7c5f6fbf42389787$var$getDaysInYear(date.year);\n    }\n    getYearsInEra() {\n        // 6239 gregorian\n        return 9999;\n    }\n    getEras() {\n        return [\n            'AM'\n        ];\n    }\n    balanceYearMonth(date, previousDate) {\n        // Keep date in the same month when switching between leap years and non leap years\n        if (previousDate.year !== date.year) {\n            if ($7c5f6fbf42389787$var$isLeapYear(previousDate.year) && !$7c5f6fbf42389787$var$isLeapYear(date.year) && previousDate.month > 6) date.month--;\n            else if (!$7c5f6fbf42389787$var$isLeapYear(previousDate.year) && $7c5f6fbf42389787$var$isLeapYear(date.year) && previousDate.month > 6) date.month++;\n        }\n    }\n    constructor(){\n        this.identifier = 'hebrew';\n    }\n}\n\n\nexport {$7c5f6fbf42389787$export$ca405048b8fb5af as HebrewCalendar};\n//# sourceMappingURL=HebrewCalendar.module.js.map\n","import {CalendarDate as $35ea8db9cb2ccb90$export$99faa760c7908e4f} from \"./CalendarDate.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from ICU.\n// Original licensing can be found in the NOTICE file in the root directory of this source tree.\n\nconst $b956b2d7a6cf451f$var$ETHIOPIC_EPOCH = 1723856;\nconst $b956b2d7a6cf451f$var$COPTIC_EPOCH = 1824665;\n// The delta between Amete Alem 1 and Amete Mihret 1\n// AA 5501 = AM 1\nconst $b956b2d7a6cf451f$var$AMETE_MIHRET_DELTA = 5500;\nfunction $b956b2d7a6cf451f$var$ceToJulianDay(epoch, year, month, day) {\n    return epoch // difference from Julian epoch to 1,1,1\n     + 365 * year // number of days from years\n     + Math.floor(year / 4) // extra day of leap year\n     + 30 * (month - 1 // number of days from months (1 based)\n    ) + day - 1 // number of days for present month (1 based)\n    ;\n}\nfunction $b956b2d7a6cf451f$var$julianDayToCE(epoch, jd) {\n    let year = Math.floor(4 * (jd - epoch) / 1461);\n    let month = 1 + Math.floor((jd - $b956b2d7a6cf451f$var$ceToJulianDay(epoch, year, 1, 1)) / 30);\n    let day = jd + 1 - $b956b2d7a6cf451f$var$ceToJulianDay(epoch, year, month, 1);\n    return [\n        year,\n        month,\n        day\n    ];\n}\nfunction $b956b2d7a6cf451f$var$getLeapDay(year) {\n    return Math.floor(year % 4 / 3);\n}\nfunction $b956b2d7a6cf451f$var$getDaysInMonth(year, month) {\n    // The Ethiopian and Coptic calendars have 13 months, 12 of 30 days each and\n    // an intercalary month at the end of the year of 5 or 6 days, depending whether\n    // the year is a leap year or not. The Leap Year follows the same rules as the\n    // Julian Calendar so that the extra month always has six days in the year before\n    // a Julian Leap Year.\n    if (month % 13 !== 0) // not intercalary month\n    return 30;\n    else // intercalary month 5 days + possible leap day\n    return $b956b2d7a6cf451f$var$getLeapDay(year) + 5;\n}\nclass $b956b2d7a6cf451f$export$26ba6eab5e20cd7d {\n    fromJulianDay(jd) {\n        let [year, month, day] = $b956b2d7a6cf451f$var$julianDayToCE($b956b2d7a6cf451f$var$ETHIOPIC_EPOCH, jd);\n        let era = 'AM';\n        if (year <= 0) {\n            era = 'AA';\n            year += $b956b2d7a6cf451f$var$AMETE_MIHRET_DELTA;\n        }\n        return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(this, era, year, month, day);\n    }\n    toJulianDay(date) {\n        let year = date.year;\n        if (date.era === 'AA') year -= $b956b2d7a6cf451f$var$AMETE_MIHRET_DELTA;\n        return $b956b2d7a6cf451f$var$ceToJulianDay($b956b2d7a6cf451f$var$ETHIOPIC_EPOCH, year, date.month, date.day);\n    }\n    getDaysInMonth(date) {\n        return $b956b2d7a6cf451f$var$getDaysInMonth(date.year, date.month);\n    }\n    getMonthsInYear() {\n        return 13;\n    }\n    getDaysInYear(date) {\n        return 365 + $b956b2d7a6cf451f$var$getLeapDay(date.year);\n    }\n    getYearsInEra(date) {\n        // 9999-12-31 gregorian is 9992-20-02 ethiopic.\n        // Round down to 9991 for the last full year.\n        // AA 9999-01-01 ethiopic is 4506-09-30 gregorian.\n        return date.era === 'AA' ? 9999 : 9991;\n    }\n    getEras() {\n        return [\n            'AA',\n            'AM'\n        ];\n    }\n    constructor(){\n        this.identifier = 'ethiopic';\n    }\n}\nclass $b956b2d7a6cf451f$export$d72e0c37005a4914 extends $b956b2d7a6cf451f$export$26ba6eab5e20cd7d {\n    fromJulianDay(jd) {\n        let [year, month, day] = $b956b2d7a6cf451f$var$julianDayToCE($b956b2d7a6cf451f$var$ETHIOPIC_EPOCH, jd);\n        year += $b956b2d7a6cf451f$var$AMETE_MIHRET_DELTA;\n        return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(this, 'AA', year, month, day);\n    }\n    getEras() {\n        return [\n            'AA'\n        ];\n    }\n    getYearsInEra() {\n        // 9999-13-04 ethioaa is the maximum date, which is equivalent to 4506-09-29 gregorian.\n        return 9999;\n    }\n    constructor(...args){\n        super(...args), this.identifier = 'ethioaa' // also known as 'ethiopic-amete-alem' in ICU\n        ;\n    }\n}\nclass $b956b2d7a6cf451f$export$fe6243cbe1a4b7c1 extends $b956b2d7a6cf451f$export$26ba6eab5e20cd7d {\n    fromJulianDay(jd) {\n        let [year, month, day] = $b956b2d7a6cf451f$var$julianDayToCE($b956b2d7a6cf451f$var$COPTIC_EPOCH, jd);\n        let era = 'CE';\n        if (year <= 0) {\n            era = 'BCE';\n            year = 1 - year;\n        }\n        return new (0, $35ea8db9cb2ccb90$export$99faa760c7908e4f)(this, era, year, month, day);\n    }\n    toJulianDay(date) {\n        let year = date.year;\n        if (date.era === 'BCE') year = 1 - year;\n        return $b956b2d7a6cf451f$var$ceToJulianDay($b956b2d7a6cf451f$var$COPTIC_EPOCH, year, date.month, date.day);\n    }\n    getDaysInMonth(date) {\n        let year = date.year;\n        if (date.era === 'BCE') year = 1 - year;\n        return $b956b2d7a6cf451f$var$getDaysInMonth(year, date.month);\n    }\n    isInverseEra(date) {\n        return date.era === 'BCE';\n    }\n    balanceDate(date) {\n        if (date.year <= 0) {\n            date.era = date.era === 'BCE' ? 'CE' : 'BCE';\n            date.year = 1 - date.year;\n        }\n    }\n    getEras() {\n        return [\n            'BCE',\n            'CE'\n        ];\n    }\n    getYearsInEra(date) {\n        // 9999-12-30 gregorian is 9716-02-20 coptic.\n        // Round down to 9715 for the last full year.\n        // BCE 9999-01-01 coptic is BC 9716-06-15 gregorian.\n        return date.era === 'BCE' ? 9999 : 9715;\n    }\n    constructor(...args){\n        super(...args), this.identifier = 'coptic';\n    }\n}\n\n\nexport {$b956b2d7a6cf451f$export$26ba6eab5e20cd7d as EthiopicCalendar, $b956b2d7a6cf451f$export$d72e0c37005a4914 as EthiopicAmeteAlemCalendar, $b956b2d7a6cf451f$export$fe6243cbe1a4b7c1 as CopticCalendar};\n//# sourceMappingURL=EthiopicCalendar.module.js.map\n","import {BuddhistCalendar as $8d73d47422ca7302$export$42d20a78301dee44} from \"./BuddhistCalendar.mjs\";\nimport {CopticCalendar as $b956b2d7a6cf451f$export$fe6243cbe1a4b7c1, EthiopicAmeteAlemCalendar as $b956b2d7a6cf451f$export$d72e0c37005a4914, EthiopicCalendar as $b956b2d7a6cf451f$export$26ba6eab5e20cd7d} from \"./EthiopicCalendar.mjs\";\nimport {GregorianCalendar as $3b62074eb05584b2$export$80ee6245ec4f29ec} from \"./GregorianCalendar.mjs\";\nimport {HebrewCalendar as $7c5f6fbf42389787$export$ca405048b8fb5af} from \"./HebrewCalendar.mjs\";\nimport {IndianCalendar as $82c358003bdda0a8$export$39f31c639fa15726} from \"./IndianCalendar.mjs\";\nimport {IslamicCivilCalendar as $f2f3e0e3a817edbd$export$2066795aadd37bfc, IslamicTabularCalendar as $f2f3e0e3a817edbd$export$37f0887f2f9d22f7, IslamicUmalquraCalendar as $f2f3e0e3a817edbd$export$5baab4758c231076} from \"./IslamicCalendar.mjs\";\nimport {JapaneseCalendar as $62225008020f0a13$export$b746ab2b60cdffbf} from \"./JapaneseCalendar.mjs\";\nimport {PersianCalendar as $f3ed2e4472ae7e25$export$37fccdbfd14c5939} from \"./PersianCalendar.mjs\";\nimport {TaiwanCalendar as $5f31bd6f0c8940b2$export$65e01080afcb0799} from \"./TaiwanCalendar.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\nfunction $64244302c3013299$export$dd0bbc9b26defe37(name) {\n    switch(name){\n        case 'buddhist':\n            return new (0, $8d73d47422ca7302$export$42d20a78301dee44)();\n        case 'ethiopic':\n            return new (0, $b956b2d7a6cf451f$export$26ba6eab5e20cd7d)();\n        case 'ethioaa':\n            return new (0, $b956b2d7a6cf451f$export$d72e0c37005a4914)();\n        case 'coptic':\n            return new (0, $b956b2d7a6cf451f$export$fe6243cbe1a4b7c1)();\n        case 'hebrew':\n            return new (0, $7c5f6fbf42389787$export$ca405048b8fb5af)();\n        case 'indian':\n            return new (0, $82c358003bdda0a8$export$39f31c639fa15726)();\n        case 'islamic-civil':\n            return new (0, $f2f3e0e3a817edbd$export$2066795aadd37bfc)();\n        case 'islamic-tbla':\n            return new (0, $f2f3e0e3a817edbd$export$37f0887f2f9d22f7)();\n        case 'islamic-umalqura':\n            return new (0, $f2f3e0e3a817edbd$export$5baab4758c231076)();\n        case 'japanese':\n            return new (0, $62225008020f0a13$export$b746ab2b60cdffbf)();\n        case 'persian':\n            return new (0, $f3ed2e4472ae7e25$export$37fccdbfd14c5939)();\n        case 'roc':\n            return new (0, $5f31bd6f0c8940b2$export$65e01080afcb0799)();\n        case 'gregory':\n        default:\n            return new (0, $3b62074eb05584b2$export$80ee6245ec4f29ec)();\n    }\n}\n\n\nexport {$64244302c3013299$export$dd0bbc9b26defe37 as createCalendar};\n//# sourceMappingURL=createCalendar.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $fb18d541ea1ad717$var$formatterCache = new Map();\nclass $fb18d541ea1ad717$export$ad991b66133851cf {\n    /** Formats a date as a string according to the locale and format options passed to the constructor. */ format(value) {\n        return this.formatter.format(value);\n    }\n    /** Formats a date to an array of parts such as separators, numbers, punctuation, and more. */ formatToParts(value) {\n        return this.formatter.formatToParts(value);\n    }\n    /** Formats a date range as a string. */ formatRange(start, end) {\n        // @ts-ignore\n        if (typeof this.formatter.formatRange === 'function') // @ts-ignore\n        return this.formatter.formatRange(start, end);\n        if (end < start) throw new RangeError('End date must be >= start date');\n        // Very basic fallback for old browsers.\n        return `${this.formatter.format(start)} \\u{2013} ${this.formatter.format(end)}`;\n    }\n    /** Formats a date range as an array of parts. */ formatRangeToParts(start, end) {\n        // @ts-ignore\n        if (typeof this.formatter.formatRangeToParts === 'function') // @ts-ignore\n        return this.formatter.formatRangeToParts(start, end);\n        if (end < start) throw new RangeError('End date must be >= start date');\n        let startParts = this.formatter.formatToParts(start);\n        let endParts = this.formatter.formatToParts(end);\n        return [\n            ...startParts.map((p)=>({\n                    ...p,\n                    source: 'startRange'\n                })),\n            {\n                type: 'literal',\n                value: \" \\u2013 \",\n                source: 'shared'\n            },\n            ...endParts.map((p)=>({\n                    ...p,\n                    source: 'endRange'\n                }))\n        ];\n    }\n    /** Returns the resolved formatting options based on the values passed to the constructor. */ resolvedOptions() {\n        let resolvedOptions = this.formatter.resolvedOptions();\n        if ($fb18d541ea1ad717$var$hasBuggyResolvedHourCycle()) {\n            if (!this.resolvedHourCycle) this.resolvedHourCycle = $fb18d541ea1ad717$var$getResolvedHourCycle(resolvedOptions.locale, this.options);\n            resolvedOptions.hourCycle = this.resolvedHourCycle;\n            resolvedOptions.hour12 = this.resolvedHourCycle === 'h11' || this.resolvedHourCycle === 'h12';\n        }\n        // Safari uses a different name for the Ethiopic (Amete Alem) calendar.\n        // https://bugs.webkit.org/show_bug.cgi?id=241564\n        if (resolvedOptions.calendar === 'ethiopic-amete-alem') resolvedOptions.calendar = 'ethioaa';\n        return resolvedOptions;\n    }\n    constructor(locale, options = {}){\n        this.formatter = $fb18d541ea1ad717$var$getCachedDateFormatter(locale, options);\n        this.options = options;\n    }\n}\n// There are multiple bugs involving the hour12 and hourCycle options in various browser engines.\n//   - Chrome [1] (and the ECMA 402 spec [2]) resolve hour12: false in English and other locales to h24 (24:00 - 23:59)\n//     rather than h23 (00:00 - 23:59). Same can happen with hour12: true in French, which Chrome resolves to h11 (00:00 - 11:59)\n//     rather than h12 (12:00 - 11:59).\n//   - WebKit returns an incorrect hourCycle resolved option in the French locale due to incorrect parsing of 'h' literal\n//     in the resolved pattern. It also formats incorrectly when specifying the hourCycle option for the same reason. [3]\n// [1] https://bugs.chromium.org/p/chromium/issues/detail?id=1045791\n// [2] https://github.com/tc39/ecma402/issues/402\n// [3] https://bugs.webkit.org/show_bug.cgi?id=229313\n// https://github.com/unicode-org/cldr/blob/018b55eff7ceb389c7e3fc44e2f657eae3b10b38/common/supplemental/supplementalData.xml#L4774-L4802\nconst $fb18d541ea1ad717$var$hour12Preferences = {\n    true: {\n        // Only Japanese uses the h11 style for 12 hour time. All others use h12.\n        ja: 'h11'\n    },\n    false: {\n    }\n};\nfunction $fb18d541ea1ad717$var$getCachedDateFormatter(locale, options = {}) {\n    // Work around buggy hour12 behavior in Chrome / ECMA 402 spec by using hourCycle instead.\n    // Only apply the workaround if the issue is detected, because the hourCycle option is buggy in Safari.\n    if (typeof options.hour12 === 'boolean' && $fb18d541ea1ad717$var$hasBuggyHour12Behavior()) {\n        options = {\n            ...options\n        };\n        let pref = $fb18d541ea1ad717$var$hour12Preferences[String(options.hour12)][locale.split('-')[0]];\n        let defaultHourCycle = options.hour12 ? 'h12' : 'h23';\n        options.hourCycle = pref !== null && pref !== void 0 ? pref : defaultHourCycle;\n        delete options.hour12;\n    }\n    let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : '');\n    if ($fb18d541ea1ad717$var$formatterCache.has(cacheKey)) return $fb18d541ea1ad717$var$formatterCache.get(cacheKey);\n    let numberFormatter = new Intl.DateTimeFormat(locale, options);\n    $fb18d541ea1ad717$var$formatterCache.set(cacheKey, numberFormatter);\n    return numberFormatter;\n}\nlet $fb18d541ea1ad717$var$_hasBuggyHour12Behavior = null;\nfunction $fb18d541ea1ad717$var$hasBuggyHour12Behavior() {\n    if ($fb18d541ea1ad717$var$_hasBuggyHour12Behavior == null) $fb18d541ea1ad717$var$_hasBuggyHour12Behavior = new Intl.DateTimeFormat('en-US', {\n        hour: 'numeric',\n        hour12: false\n    }).format(new Date(2020, 2, 3, 0)) === '24';\n    return $fb18d541ea1ad717$var$_hasBuggyHour12Behavior;\n}\nlet $fb18d541ea1ad717$var$_hasBuggyResolvedHourCycle = null;\nfunction $fb18d541ea1ad717$var$hasBuggyResolvedHourCycle() {\n    if ($fb18d541ea1ad717$var$_hasBuggyResolvedHourCycle == null) $fb18d541ea1ad717$var$_hasBuggyResolvedHourCycle = new Intl.DateTimeFormat('fr', {\n        hour: 'numeric',\n        hour12: false\n    }).resolvedOptions().hourCycle === 'h12';\n    return $fb18d541ea1ad717$var$_hasBuggyResolvedHourCycle;\n}\nfunction $fb18d541ea1ad717$var$getResolvedHourCycle(locale, options) {\n    if (!options.timeStyle && !options.hour) return undefined;\n    // Work around buggy results in resolved hourCycle and hour12 options in WebKit.\n    // Format the minimum possible hour and maximum possible hour in a day and parse the results.\n    locale = locale.replace(/(-u-)?-nu-[a-zA-Z0-9]+/, '');\n    locale += (locale.includes('-u-') ? '' : '-u') + '-nu-latn';\n    let formatter = $fb18d541ea1ad717$var$getCachedDateFormatter(locale, {\n        ...options,\n        timeZone: undefined // use local timezone\n    });\n    let min = parseInt(formatter.formatToParts(new Date(2020, 2, 3, 0)).find((p)=>p.type === 'hour').value, 10);\n    let max = parseInt(formatter.formatToParts(new Date(2020, 2, 3, 23)).find((p)=>p.type === 'hour').value, 10);\n    if (min === 0 && max === 23) return 'h23';\n    if (min === 24 && max === 23) return 'h24';\n    if (min === 0 && max === 11) return 'h11';\n    if (min === 12 && max === 11) return 'h12';\n    throw new Error('Unexpected hour cycle result');\n}\n\n\nexport {$fb18d541ea1ad717$export$ad991b66133851cf as DateFormatter};\n//# sourceMappingURL=DateFormatter.module.js.map\n","import {useLocale as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7} from \"./context.mjs\";\nimport {DateFormatter as $6wxND$DateFormatter} from \"@internationalized/date\";\nimport {useDeepMemo as $6wxND$useDeepMemo} from \"@react-aria/utils\";\nimport {useMemo as $6wxND$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $896ba0a80a8f4d36$export$85fd5fdf27bacc79(options) {\n    // Reuse last options object if it is shallowly equal, which allows the useMemo result to also be reused.\n    options = (0, $6wxND$useDeepMemo)(options !== null && options !== void 0 ? options : {}, $896ba0a80a8f4d36$var$isEqual);\n    let { locale: locale } = (0, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7)();\n    return (0, $6wxND$useMemo)(()=>new (0, $6wxND$DateFormatter)(locale, options), [\n        locale,\n        options\n    ]);\n}\nfunction $896ba0a80a8f4d36$var$isEqual(a, b) {\n    if (a === b) return true;\n    let aKeys = Object.keys(a);\n    let bKeys = Object.keys(b);\n    if (aKeys.length !== bKeys.length) return false;\n    for (let key of aKeys){\n        if (b[key] !== a[key]) return false;\n    }\n    return true;\n}\n\n\nexport {$896ba0a80a8f4d36$export$85fd5fdf27bacc79 as useDateFormatter};\n//# sourceMappingURL=useDateFormatter.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $488c6ddbf4ef74c2$var$formatterCache = new Map();\nlet $488c6ddbf4ef74c2$var$supportsSignDisplay = false;\ntry {\n    $488c6ddbf4ef74c2$var$supportsSignDisplay = new Intl.NumberFormat('de-DE', {\n        signDisplay: 'exceptZero'\n    }).resolvedOptions().signDisplay === 'exceptZero';\n// eslint-disable-next-line no-empty\n} catch  {}\nlet $488c6ddbf4ef74c2$var$supportsUnit = false;\ntry {\n    $488c6ddbf4ef74c2$var$supportsUnit = new Intl.NumberFormat('de-DE', {\n        style: 'unit',\n        unit: 'degree'\n    }).resolvedOptions().style === 'unit';\n// eslint-disable-next-line no-empty\n} catch  {}\n// Polyfill for units since Safari doesn't support them yet. See https://bugs.webkit.org/show_bug.cgi?id=215438.\n// Currently only polyfilling the unit degree in narrow format for ColorSlider in our supported locales.\n// Values were determined by switching to each locale manually in Chrome.\nconst $488c6ddbf4ef74c2$var$UNITS = {\n    degree: {\n        narrow: {\n            default: \"\\xb0\",\n            'ja-JP': \" \\u5EA6\",\n            'zh-TW': \"\\u5EA6\",\n            'sl-SI': \" \\xb0\"\n        }\n    }\n};\nclass $488c6ddbf4ef74c2$export$cc77c4ff7e8673c5 {\n    /** Formats a number value as a string, according to the locale and options provided to the constructor. */ format(value) {\n        let res = '';\n        if (!$488c6ddbf4ef74c2$var$supportsSignDisplay && this.options.signDisplay != null) res = $488c6ddbf4ef74c2$export$711b50b3c525e0f2(this.numberFormatter, this.options.signDisplay, value);\n        else res = this.numberFormatter.format(value);\n        if (this.options.style === 'unit' && !$488c6ddbf4ef74c2$var$supportsUnit) {\n            var _UNITS_unit;\n            let { unit: unit, unitDisplay: unitDisplay = 'short', locale: locale } = this.resolvedOptions();\n            if (!unit) return res;\n            let values = (_UNITS_unit = $488c6ddbf4ef74c2$var$UNITS[unit]) === null || _UNITS_unit === void 0 ? void 0 : _UNITS_unit[unitDisplay];\n            res += values[locale] || values.default;\n        }\n        return res;\n    }\n    /** Formats a number to an array of parts such as separators, digits, punctuation, and more. */ formatToParts(value) {\n        // TODO: implement signDisplay for formatToParts\n        return this.numberFormatter.formatToParts(value);\n    }\n    /** Formats a number range as a string. */ formatRange(start, end) {\n        if (typeof this.numberFormatter.formatRange === 'function') return this.numberFormatter.formatRange(start, end);\n        if (end < start) throw new RangeError('End date must be >= start date');\n        // Very basic fallback for old browsers.\n        return `${this.format(start)} \\u{2013} ${this.format(end)}`;\n    }\n    /** Formats a number range as an array of parts. */ formatRangeToParts(start, end) {\n        if (typeof this.numberFormatter.formatRangeToParts === 'function') return this.numberFormatter.formatRangeToParts(start, end);\n        if (end < start) throw new RangeError('End date must be >= start date');\n        let startParts = this.numberFormatter.formatToParts(start);\n        let endParts = this.numberFormatter.formatToParts(end);\n        return [\n            ...startParts.map((p)=>({\n                    ...p,\n                    source: 'startRange'\n                })),\n            {\n                type: 'literal',\n                value: \" \\u2013 \",\n                source: 'shared'\n            },\n            ...endParts.map((p)=>({\n                    ...p,\n                    source: 'endRange'\n                }))\n        ];\n    }\n    /** Returns the resolved formatting options based on the values passed to the constructor. */ resolvedOptions() {\n        let options = this.numberFormatter.resolvedOptions();\n        if (!$488c6ddbf4ef74c2$var$supportsSignDisplay && this.options.signDisplay != null) options = {\n            ...options,\n            signDisplay: this.options.signDisplay\n        };\n        if (!$488c6ddbf4ef74c2$var$supportsUnit && this.options.style === 'unit') options = {\n            ...options,\n            style: 'unit',\n            unit: this.options.unit,\n            unitDisplay: this.options.unitDisplay\n        };\n        return options;\n    }\n    constructor(locale, options = {}){\n        this.numberFormatter = $488c6ddbf4ef74c2$var$getCachedNumberFormatter(locale, options);\n        this.options = options;\n    }\n}\nfunction $488c6ddbf4ef74c2$var$getCachedNumberFormatter(locale, options = {}) {\n    let { numberingSystem: numberingSystem } = options;\n    if (numberingSystem && locale.includes('-nu-')) {\n        if (!locale.includes('-u-')) locale += '-u-';\n        locale += `-nu-${numberingSystem}`;\n    }\n    if (options.style === 'unit' && !$488c6ddbf4ef74c2$var$supportsUnit) {\n        var _UNITS_unit;\n        let { unit: unit, unitDisplay: unitDisplay = 'short' } = options;\n        if (!unit) throw new Error('unit option must be provided with style: \"unit\"');\n        if (!((_UNITS_unit = $488c6ddbf4ef74c2$var$UNITS[unit]) === null || _UNITS_unit === void 0 ? void 0 : _UNITS_unit[unitDisplay])) throw new Error(`Unsupported unit ${unit} with unitDisplay = ${unitDisplay}`);\n        options = {\n            ...options,\n            style: 'decimal'\n        };\n    }\n    let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : '');\n    if ($488c6ddbf4ef74c2$var$formatterCache.has(cacheKey)) return $488c6ddbf4ef74c2$var$formatterCache.get(cacheKey);\n    let numberFormatter = new Intl.NumberFormat(locale, options);\n    $488c6ddbf4ef74c2$var$formatterCache.set(cacheKey, numberFormatter);\n    return numberFormatter;\n}\nfunction $488c6ddbf4ef74c2$export$711b50b3c525e0f2(numberFormat, signDisplay, num) {\n    if (signDisplay === 'auto') return numberFormat.format(num);\n    else if (signDisplay === 'never') return numberFormat.format(Math.abs(num));\n    else {\n        let needsPositiveSign = false;\n        if (signDisplay === 'always') needsPositiveSign = num > 0 || Object.is(num, 0);\n        else if (signDisplay === 'exceptZero') {\n            if (Object.is(num, -0) || Object.is(num, 0)) num = Math.abs(num);\n            else needsPositiveSign = num > 0;\n        }\n        if (needsPositiveSign) {\n            let negative = numberFormat.format(-num);\n            let noSign = numberFormat.format(num);\n            // ignore RTL/LTR marker character\n            let minus = negative.replace(noSign, '').replace(/\\u200e|\\u061C/, '');\n            if ([\n                ...minus\n            ].length !== 1) console.warn('@react-aria/i18n polyfill for NumberFormat signDisplay: Unsupported case');\n            let positive = negative.replace(noSign, '!!!').replace(minus, '+').replace('!!!', noSign);\n            return positive;\n        } else return numberFormat.format(num);\n    }\n}\n\n\nexport {$488c6ddbf4ef74c2$export$cc77c4ff7e8673c5 as NumberFormatter, $488c6ddbf4ef74c2$export$711b50b3c525e0f2 as numberFormatSignDisplayPolyfill};\n//# sourceMappingURL=NumberFormatter.module.js.map\n","import {NumberFormatter as $488c6ddbf4ef74c2$export$cc77c4ff7e8673c5} from \"./NumberFormatter.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $6c7bd7858deea686$var$CURRENCY_SIGN_REGEX = new RegExp('^.*\\\\(.*\\\\).*$');\nconst $6c7bd7858deea686$var$NUMBERING_SYSTEMS = [\n    'latn',\n    'arab',\n    'hanidec',\n    'deva',\n    'beng',\n    'fullwide'\n];\nclass $6c7bd7858deea686$export$cd11ab140839f11d {\n    /**\n   * Parses the given string to a number. Returns NaN if a valid number could not be parsed.\n   */ parse(value) {\n        return $6c7bd7858deea686$var$getNumberParserImpl(this.locale, this.options, value).parse(value);\n    }\n    /**\n   * Returns whether the given string could potentially be a valid number. This should be used to\n   * validate user input as the user types. If a `minValue` or `maxValue` is provided, the validity\n   * of the minus/plus sign characters can be checked.\n   */ isValidPartialNumber(value, minValue, maxValue) {\n        return $6c7bd7858deea686$var$getNumberParserImpl(this.locale, this.options, value).isValidPartialNumber(value, minValue, maxValue);\n    }\n    /**\n   * Returns a numbering system for which the given string is valid in the current locale.\n   * If no numbering system could be detected, the default numbering system for the current\n   * locale is returned.\n   */ getNumberingSystem(value) {\n        return $6c7bd7858deea686$var$getNumberParserImpl(this.locale, this.options, value).options.numberingSystem;\n    }\n    constructor(locale, options = {}){\n        this.locale = locale;\n        this.options = options;\n    }\n}\nconst $6c7bd7858deea686$var$numberParserCache = new Map();\nfunction $6c7bd7858deea686$var$getNumberParserImpl(locale, options, value) {\n    // First try the default numbering system for the provided locale\n    let defaultParser = $6c7bd7858deea686$var$getCachedNumberParser(locale, options);\n    // If that doesn't match, and the locale doesn't include a hard coded numbering system,\n    // try each of the other supported numbering systems until we find one that matches.\n    if (!locale.includes('-nu-') && !defaultParser.isValidPartialNumber(value)) {\n        for (let numberingSystem of $6c7bd7858deea686$var$NUMBERING_SYSTEMS)if (numberingSystem !== defaultParser.options.numberingSystem) {\n            let parser = $6c7bd7858deea686$var$getCachedNumberParser(locale + (locale.includes('-u-') ? '-nu-' : '-u-nu-') + numberingSystem, options);\n            if (parser.isValidPartialNumber(value)) return parser;\n        }\n    }\n    return defaultParser;\n}\nfunction $6c7bd7858deea686$var$getCachedNumberParser(locale, options) {\n    let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : '');\n    let parser = $6c7bd7858deea686$var$numberParserCache.get(cacheKey);\n    if (!parser) {\n        parser = new $6c7bd7858deea686$var$NumberParserImpl(locale, options);\n        $6c7bd7858deea686$var$numberParserCache.set(cacheKey, parser);\n    }\n    return parser;\n}\n// The actual number parser implementation. Instances of this class are cached\n// based on the locale, options, and detected numbering system.\nclass $6c7bd7858deea686$var$NumberParserImpl {\n    parse(value) {\n        // to parse the number, we need to remove anything that isn't actually part of the number, for example we want '-10.40' not '-10.40 USD'\n        let fullySanitizedValue = this.sanitize(value);\n        if (this.symbols.group) // Remove group characters, and replace decimal points and numerals with ASCII values.\n        fullySanitizedValue = $6c7bd7858deea686$var$replaceAll(fullySanitizedValue, this.symbols.group, '');\n        if (this.symbols.decimal) fullySanitizedValue = fullySanitizedValue.replace(this.symbols.decimal, '.');\n        if (this.symbols.minusSign) fullySanitizedValue = fullySanitizedValue.replace(this.symbols.minusSign, '-');\n        fullySanitizedValue = fullySanitizedValue.replace(this.symbols.numeral, this.symbols.index);\n        if (this.options.style === 'percent') {\n            // javascript is bad at dividing by 100 and maintaining the same significant figures, so perform it on the string before parsing\n            let isNegative = fullySanitizedValue.indexOf('-');\n            fullySanitizedValue = fullySanitizedValue.replace('-', '');\n            fullySanitizedValue = fullySanitizedValue.replace('+', '');\n            let index = fullySanitizedValue.indexOf('.');\n            if (index === -1) index = fullySanitizedValue.length;\n            fullySanitizedValue = fullySanitizedValue.replace('.', '');\n            if (index - 2 === 0) fullySanitizedValue = `0.${fullySanitizedValue}`;\n            else if (index - 2 === -1) fullySanitizedValue = `0.0${fullySanitizedValue}`;\n            else if (index - 2 === -2) fullySanitizedValue = '0.00';\n            else fullySanitizedValue = `${fullySanitizedValue.slice(0, index - 2)}.${fullySanitizedValue.slice(index - 2)}`;\n            if (isNegative > -1) fullySanitizedValue = `-${fullySanitizedValue}`;\n        }\n        let newValue = fullySanitizedValue ? +fullySanitizedValue : NaN;\n        if (isNaN(newValue)) return NaN;\n        if (this.options.style === 'percent') {\n            var _this_options_minimumFractionDigits, _this_options_maximumFractionDigits;\n            // extra step for rounding percents to what our formatter would output\n            let options = {\n                ...this.options,\n                style: 'decimal',\n                minimumFractionDigits: Math.min(((_this_options_minimumFractionDigits = this.options.minimumFractionDigits) !== null && _this_options_minimumFractionDigits !== void 0 ? _this_options_minimumFractionDigits : 0) + 2, 20),\n                maximumFractionDigits: Math.min(((_this_options_maximumFractionDigits = this.options.maximumFractionDigits) !== null && _this_options_maximumFractionDigits !== void 0 ? _this_options_maximumFractionDigits : 0) + 2, 20)\n            };\n            return new $6c7bd7858deea686$export$cd11ab140839f11d(this.locale, options).parse(new (0, $488c6ddbf4ef74c2$export$cc77c4ff7e8673c5)(this.locale, options).format(newValue));\n        }\n        // accounting will always be stripped to a positive number, so if it's accounting and has a () around everything, then we need to make it negative again\n        if (this.options.currencySign === 'accounting' && $6c7bd7858deea686$var$CURRENCY_SIGN_REGEX.test(value)) newValue = -1 * newValue;\n        return newValue;\n    }\n    sanitize(value) {\n        // Remove literals and whitespace, which are allowed anywhere in the string\n        value = value.replace(this.symbols.literals, '');\n        // Replace the ASCII minus sign with the minus sign used in the current locale\n        // so that both are allowed in case the user's keyboard doesn't have the locale's minus sign.\n        if (this.symbols.minusSign) value = value.replace('-', this.symbols.minusSign);\n        // In arab numeral system, their decimal character is 1643, but most keyboards don't type that\n        // instead they use the , (44) character or apparently the (1548) character.\n        if (this.options.numberingSystem === 'arab') {\n            if (this.symbols.decimal) {\n                value = value.replace(',', this.symbols.decimal);\n                value = value.replace(String.fromCharCode(1548), this.symbols.decimal);\n            }\n            if (this.symbols.group) value = $6c7bd7858deea686$var$replaceAll(value, '.', this.symbols.group);\n        }\n        // In some locale styles, such as swiss currency, the group character can be a special single quote\n        // that keyboards don't typically have. This expands the character to include the easier to type single quote.\n        if (this.symbols.group === \"\\u2019\" && value.includes(\"'\")) value = $6c7bd7858deea686$var$replaceAll(value, \"'\", this.symbols.group);\n        // fr-FR group character is narrow non-breaking space, char code 8239 (U+202F), but that's not a key on the french keyboard,\n        // so allow space and non-breaking space as a group char as well\n        if (this.options.locale === 'fr-FR' && this.symbols.group) {\n            value = $6c7bd7858deea686$var$replaceAll(value, ' ', this.symbols.group);\n            value = $6c7bd7858deea686$var$replaceAll(value, /\\u00A0/g, this.symbols.group);\n        }\n        return value;\n    }\n    isValidPartialNumber(value, minValue = -Infinity, maxValue = Infinity) {\n        value = this.sanitize(value);\n        // Remove minus or plus sign, which must be at the start of the string.\n        if (this.symbols.minusSign && value.startsWith(this.symbols.minusSign) && minValue < 0) value = value.slice(this.symbols.minusSign.length);\n        else if (this.symbols.plusSign && value.startsWith(this.symbols.plusSign) && maxValue > 0) value = value.slice(this.symbols.plusSign.length);\n        // Numbers cannot start with a group separator\n        if (this.symbols.group && value.startsWith(this.symbols.group)) return false;\n        // Numbers that can't have any decimal values fail if a decimal character is typed\n        if (this.symbols.decimal && value.indexOf(this.symbols.decimal) > -1 && this.options.maximumFractionDigits === 0) return false;\n        // Remove numerals, groups, and decimals\n        if (this.symbols.group) value = $6c7bd7858deea686$var$replaceAll(value, this.symbols.group, '');\n        value = value.replace(this.symbols.numeral, '');\n        if (this.symbols.decimal) value = value.replace(this.symbols.decimal, '');\n        // The number is valid if there are no remaining characters\n        return value.length === 0;\n    }\n    constructor(locale, options = {}){\n        this.locale = locale;\n        // see https://tc39.es/ecma402/#sec-setnfdigitoptions, when using roundingIncrement, the maximumFractionDigits and minimumFractionDigits must be equal\n        // by default, they are 0 and 3 respectively, so we set them to 0 if neither are set\n        if (options.roundingIncrement !== 1 && options.roundingIncrement != null) {\n            if (options.maximumFractionDigits == null && options.minimumFractionDigits == null) {\n                options.maximumFractionDigits = 0;\n                options.minimumFractionDigits = 0;\n            } else if (options.maximumFractionDigits == null) options.maximumFractionDigits = options.minimumFractionDigits;\n            else if (options.minimumFractionDigits == null) options.minimumFractionDigits = options.maximumFractionDigits;\n        // if both are specified, let the normal Range Error be thrown\n        }\n        this.formatter = new Intl.NumberFormat(locale, options);\n        this.options = this.formatter.resolvedOptions();\n        this.symbols = $6c7bd7858deea686$var$getSymbols(locale, this.formatter, this.options, options);\n        var _this_options_minimumFractionDigits, _this_options_maximumFractionDigits;\n        if (this.options.style === 'percent' && (((_this_options_minimumFractionDigits = this.options.minimumFractionDigits) !== null && _this_options_minimumFractionDigits !== void 0 ? _this_options_minimumFractionDigits : 0) > 18 || ((_this_options_maximumFractionDigits = this.options.maximumFractionDigits) !== null && _this_options_maximumFractionDigits !== void 0 ? _this_options_maximumFractionDigits : 0) > 18)) console.warn('NumberParser cannot handle percentages with greater than 18 decimal places, please reduce the number in your options.');\n    }\n}\nconst $6c7bd7858deea686$var$nonLiteralParts = new Set([\n    'decimal',\n    'fraction',\n    'integer',\n    'minusSign',\n    'plusSign',\n    'group'\n]);\n// This list is derived from https://www.unicode.org/cldr/charts/43/supplemental/language_plural_rules.html#comparison and includes\n// all unique numbers which we need to check in order to determine all the plural forms for a given locale.\n// See: https://github.com/adobe/react-spectrum/pull/5134/files#r1337037855 for used script\nconst $6c7bd7858deea686$var$pluralNumbers = [\n    0,\n    4,\n    2,\n    1,\n    11,\n    20,\n    3,\n    7,\n    100,\n    21,\n    0.1,\n    1.1\n];\nfunction $6c7bd7858deea686$var$getSymbols(locale, formatter, intlOptions, originalOptions) {\n    var _allParts_find, _posAllParts_find, _decimalParts_find, _allParts_find1;\n    // formatter needs access to all decimal places in order to generate the correct literal strings for the plural set\n    let symbolFormatter = new Intl.NumberFormat(locale, {\n        ...intlOptions,\n        // Resets so we get the full range of symbols\n        minimumSignificantDigits: 1,\n        maximumSignificantDigits: 21,\n        roundingIncrement: 1,\n        roundingPriority: 'auto',\n        roundingMode: 'halfExpand'\n    });\n    // Note: some locale's don't add a group symbol until there is a ten thousands place\n    let allParts = symbolFormatter.formatToParts(-10000.111);\n    let posAllParts = symbolFormatter.formatToParts(10000.111);\n    let pluralParts = $6c7bd7858deea686$var$pluralNumbers.map((n)=>symbolFormatter.formatToParts(n));\n    var _allParts_find_value;\n    let minusSign = (_allParts_find_value = (_allParts_find = allParts.find((p)=>p.type === 'minusSign')) === null || _allParts_find === void 0 ? void 0 : _allParts_find.value) !== null && _allParts_find_value !== void 0 ? _allParts_find_value : '-';\n    let plusSign = (_posAllParts_find = posAllParts.find((p)=>p.type === 'plusSign')) === null || _posAllParts_find === void 0 ? void 0 : _posAllParts_find.value;\n    // Safari does not support the signDisplay option, but our number parser polyfills it.\n    // If no plus sign was returned, but the original options contained signDisplay, default to the '+' character.\n    if (!plusSign && ((originalOptions === null || originalOptions === void 0 ? void 0 : originalOptions.signDisplay) === 'exceptZero' || (originalOptions === null || originalOptions === void 0 ? void 0 : originalOptions.signDisplay) === 'always')) plusSign = '+';\n    // If maximumSignificantDigits is 1 (the minimum) then we won't get decimal characters out of the above formatters\n    // Percent also defaults to 0 fractionDigits, so we need to make a new one that isn't percent to get an accurate decimal\n    let decimalParts = new Intl.NumberFormat(locale, {\n        ...intlOptions,\n        minimumFractionDigits: 2,\n        maximumFractionDigits: 2\n    }).formatToParts(0.001);\n    let decimal = (_decimalParts_find = decimalParts.find((p)=>p.type === 'decimal')) === null || _decimalParts_find === void 0 ? void 0 : _decimalParts_find.value;\n    let group = (_allParts_find1 = allParts.find((p)=>p.type === 'group')) === null || _allParts_find1 === void 0 ? void 0 : _allParts_find1.value;\n    // this set is also for a regex, it's all literals that might be in the string we want to eventually parse that\n    // don't contribute to the numerical value\n    let allPartsLiterals = allParts.filter((p)=>!$6c7bd7858deea686$var$nonLiteralParts.has(p.type)).map((p)=>$6c7bd7858deea686$var$escapeRegex(p.value));\n    let pluralPartsLiterals = pluralParts.flatMap((p)=>p.filter((p)=>!$6c7bd7858deea686$var$nonLiteralParts.has(p.type)).map((p)=>$6c7bd7858deea686$var$escapeRegex(p.value)));\n    let sortedLiterals = [\n        ...new Set([\n            ...allPartsLiterals,\n            ...pluralPartsLiterals\n        ])\n    ].sort((a, b)=>b.length - a.length);\n    let literals = sortedLiterals.length === 0 ? new RegExp('[\\\\p{White_Space}]', 'gu') : new RegExp(`${sortedLiterals.join('|')}|[\\\\p{White_Space}]`, 'gu');\n    // These are for replacing non-latn characters with the latn equivalent\n    let numerals = [\n        ...new Intl.NumberFormat(intlOptions.locale, {\n            useGrouping: false\n        }).format(9876543210)\n    ].reverse();\n    let indexes = new Map(numerals.map((d, i)=>[\n            d,\n            i\n        ]));\n    let numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n    let index = (d)=>String(indexes.get(d));\n    return {\n        minusSign: minusSign,\n        plusSign: plusSign,\n        decimal: decimal,\n        group: group,\n        literals: literals,\n        numeral: numeral,\n        index: index\n    };\n}\nfunction $6c7bd7858deea686$var$replaceAll(str, find, replace) {\n    if (str.replaceAll) return str.replaceAll(find, replace);\n    return str.split(find).join(replace);\n}\nfunction $6c7bd7858deea686$var$escapeRegex(string) {\n    return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n\nexport {$6c7bd7858deea686$export$cd11ab140839f11d as NumberParser};\n//# sourceMappingURL=NumberParser.module.js.map\n","import {useLocale as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7} from \"./context.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nlet $325a3faab7a68acd$var$cache = new Map();\nfunction $325a3faab7a68acd$export$a16aca283550c30d(options) {\n    let { locale: locale } = (0, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7)();\n    let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : '');\n    if ($325a3faab7a68acd$var$cache.has(cacheKey)) return $325a3faab7a68acd$var$cache.get(cacheKey);\n    let formatter = new Intl.Collator(locale, options);\n    $325a3faab7a68acd$var$cache.set(cacheKey, formatter);\n    return formatter;\n}\n\n\nexport {$325a3faab7a68acd$export$a16aca283550c30d as useCollator};\n//# sourceMappingURL=useCollator.module.js.map\n","import {useCollator as $325a3faab7a68acd$export$a16aca283550c30d} from \"./useCollator.mjs\";\nimport {useCallback as $21ck9$useCallback, useMemo as $21ck9$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $bb77f239b46e8c72$export$3274cf84b703fff(options) {\n    let collator = (0, $325a3faab7a68acd$export$a16aca283550c30d)({\n        usage: 'search',\n        ...options\n    });\n    // TODO(later): these methods don't currently support the ignorePunctuation option.\n    let startsWith = (0, $21ck9$useCallback)((string, substring)=>{\n        if (substring.length === 0) return true;\n        // Normalize both strings so we can slice safely\n        // TODO: take into account the ignorePunctuation option as well...\n        string = string.normalize('NFC');\n        substring = substring.normalize('NFC');\n        return collator.compare(string.slice(0, substring.length), substring) === 0;\n    }, [\n        collator\n    ]);\n    let endsWith = (0, $21ck9$useCallback)((string, substring)=>{\n        if (substring.length === 0) return true;\n        string = string.normalize('NFC');\n        substring = substring.normalize('NFC');\n        return collator.compare(string.slice(-substring.length), substring) === 0;\n    }, [\n        collator\n    ]);\n    let contains = (0, $21ck9$useCallback)((string, substring)=>{\n        if (substring.length === 0) return true;\n        string = string.normalize('NFC');\n        substring = substring.normalize('NFC');\n        let scan = 0;\n        let sliceLen = substring.length;\n        for(; scan + sliceLen <= string.length; scan++){\n            let slice = string.slice(scan, scan + sliceLen);\n            if (collator.compare(substring, slice) === 0) return true;\n        }\n        return false;\n    }, [\n        collator\n    ]);\n    return (0, $21ck9$useMemo)(()=>({\n            startsWith: startsWith,\n            endsWith: endsWith,\n            contains: contains\n        }), [\n        startsWith,\n        endsWith,\n        contains\n    ]);\n}\n\n\nexport {$bb77f239b46e8c72$export$3274cf84b703fff as useFilter};\n//# sourceMappingURL=useFilter.module.js.map\n","import {calculatePosition as $edcf132a9284368a$export$b3ceb0cbf1056d98, getRect as $edcf132a9284368a$export$4b834cebd9e5cebe} from \"./calculatePosition.mjs\";\nimport {useCloseOnScroll as $dd149f63282afbbf$export$18fc8428861184da} from \"./useCloseOnScroll.mjs\";\nimport {useState as $39EOa$useState, useRef as $39EOa$useRef, useEffect as $39EOa$useEffect, useCallback as $39EOa$useCallback} from \"react\";\nimport {useLayoutEffect as $39EOa$useLayoutEffect, useResizeObserver as $39EOa$useResizeObserver} from \"@react-aria/utils\";\nimport {useLocale as $39EOa$useLocale} from \"@react-aria/i18n\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nlet $2a41e45df1593e64$var$visualViewport = typeof document !== 'undefined' ? window.visualViewport : null;\nfunction $2a41e45df1593e64$export$d39e1813b3bdd0e1(props) {\n    let { direction: direction } = (0, $39EOa$useLocale)();\n    let { arrowSize: arrowSize, targetRef: targetRef, overlayRef: overlayRef, arrowRef: arrowRef, scrollRef: scrollRef = overlayRef, placement: placement = 'bottom', containerPadding: containerPadding = 12, shouldFlip: shouldFlip = true, boundaryElement: boundaryElement = typeof document !== 'undefined' ? document.body : null, offset: offset = 0, crossOffset: crossOffset = 0, shouldUpdatePosition: shouldUpdatePosition = true, isOpen: isOpen = true, onClose: onClose, maxHeight: maxHeight, arrowBoundaryOffset: arrowBoundaryOffset = 0 } = props;\n    let [position, setPosition] = (0, $39EOa$useState)(null);\n    let deps = [\n        shouldUpdatePosition,\n        placement,\n        overlayRef.current,\n        targetRef.current,\n        arrowRef === null || arrowRef === void 0 ? void 0 : arrowRef.current,\n        scrollRef.current,\n        containerPadding,\n        shouldFlip,\n        boundaryElement,\n        offset,\n        crossOffset,\n        isOpen,\n        direction,\n        maxHeight,\n        arrowBoundaryOffset,\n        arrowSize\n    ];\n    // Note, the position freezing breaks if body sizes itself dynamicly with the visual viewport but that might\n    // just be a non-realistic use case\n    // Upon opening a overlay, record the current visual viewport scale so we can freeze the overlay styles\n    let lastScale = (0, $39EOa$useRef)($2a41e45df1593e64$var$visualViewport === null || $2a41e45df1593e64$var$visualViewport === void 0 ? void 0 : $2a41e45df1593e64$var$visualViewport.scale);\n    (0, $39EOa$useEffect)(()=>{\n        if (isOpen) lastScale.current = $2a41e45df1593e64$var$visualViewport === null || $2a41e45df1593e64$var$visualViewport === void 0 ? void 0 : $2a41e45df1593e64$var$visualViewport.scale;\n    }, [\n        isOpen\n    ]);\n    let updatePosition = (0, $39EOa$useCallback)(()=>{\n        if (shouldUpdatePosition === false || !isOpen || !overlayRef.current || !targetRef.current || !boundaryElement) return;\n        if (($2a41e45df1593e64$var$visualViewport === null || $2a41e45df1593e64$var$visualViewport === void 0 ? void 0 : $2a41e45df1593e64$var$visualViewport.scale) !== lastScale.current) return;\n        // Determine a scroll anchor based on the focused element.\n        // This stores the offset of the anchor element from the scroll container\n        // so it can be restored after repositioning. This way if the overlay height\n        // changes, the focused element appears to stay in the same position.\n        let anchor = null;\n        if (scrollRef.current && scrollRef.current.contains(document.activeElement)) {\n            var _document_activeElement;\n            let anchorRect = (_document_activeElement = document.activeElement) === null || _document_activeElement === void 0 ? void 0 : _document_activeElement.getBoundingClientRect();\n            let scrollRect = scrollRef.current.getBoundingClientRect();\n            var _anchorRect_top;\n            // Anchor from the top if the offset is in the top half of the scrollable element,\n            // otherwise anchor from the bottom.\n            anchor = {\n                type: 'top',\n                offset: ((_anchorRect_top = anchorRect === null || anchorRect === void 0 ? void 0 : anchorRect.top) !== null && _anchorRect_top !== void 0 ? _anchorRect_top : 0) - scrollRect.top\n            };\n            if (anchor.offset > scrollRect.height / 2) {\n                anchor.type = 'bottom';\n                var _anchorRect_bottom;\n                anchor.offset = ((_anchorRect_bottom = anchorRect === null || anchorRect === void 0 ? void 0 : anchorRect.bottom) !== null && _anchorRect_bottom !== void 0 ? _anchorRect_bottom : 0) - scrollRect.bottom;\n            }\n        }\n        // Always reset the overlay's previous max height if not defined by the user so that we can compensate for\n        // RAC collections populating after a second render and properly set a correct max height + positioning when it populates.\n        let overlay = overlayRef.current;\n        if (!maxHeight && overlayRef.current) {\n            var _window_visualViewport;\n            overlay.style.top = '0px';\n            overlay.style.bottom = '';\n            var _window_visualViewport_height;\n            overlay.style.maxHeight = ((_window_visualViewport_height = (_window_visualViewport = window.visualViewport) === null || _window_visualViewport === void 0 ? void 0 : _window_visualViewport.height) !== null && _window_visualViewport_height !== void 0 ? _window_visualViewport_height : window.innerHeight) + 'px';\n        }\n        let position = (0, $edcf132a9284368a$export$b3ceb0cbf1056d98)({\n            placement: $2a41e45df1593e64$var$translateRTL(placement, direction),\n            overlayNode: overlayRef.current,\n            targetNode: targetRef.current,\n            scrollNode: scrollRef.current || overlayRef.current,\n            padding: containerPadding,\n            shouldFlip: shouldFlip,\n            boundaryElement: boundaryElement,\n            offset: offset,\n            crossOffset: crossOffset,\n            maxHeight: maxHeight,\n            arrowSize: arrowSize !== null && arrowSize !== void 0 ? arrowSize : (arrowRef === null || arrowRef === void 0 ? void 0 : arrowRef.current) ? (0, $edcf132a9284368a$export$4b834cebd9e5cebe)(arrowRef.current, true).width : 0,\n            arrowBoundaryOffset: arrowBoundaryOffset\n        });\n        if (!position.position) return;\n        // Modify overlay styles directly so positioning happens immediately without the need of a second render\n        // This is so we don't have to delay autoFocus scrolling or delay applying preventScroll for popovers\n        overlay.style.top = '';\n        overlay.style.bottom = '';\n        overlay.style.left = '';\n        overlay.style.right = '';\n        Object.keys(position.position).forEach((key)=>overlay.style[key] = position.position[key] + 'px');\n        overlay.style.maxHeight = position.maxHeight != null ? position.maxHeight + 'px' : '';\n        // Restore scroll position relative to anchor element.\n        if (anchor && document.activeElement && scrollRef.current) {\n            let anchorRect = document.activeElement.getBoundingClientRect();\n            let scrollRect = scrollRef.current.getBoundingClientRect();\n            let newOffset = anchorRect[anchor.type] - scrollRect[anchor.type];\n            scrollRef.current.scrollTop += newOffset - anchor.offset;\n        }\n        // Trigger a set state for a second render anyway for arrow positioning\n        setPosition(position);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, deps);\n    // Update position when anything changes\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    (0, $39EOa$useLayoutEffect)(updatePosition, deps);\n    // Update position on window resize\n    $2a41e45df1593e64$var$useResize(updatePosition);\n    // Update position when the overlay changes size (might need to flip).\n    (0, $39EOa$useResizeObserver)({\n        ref: overlayRef,\n        onResize: updatePosition\n    });\n    // Update position when the target changes size (might need to flip).\n    (0, $39EOa$useResizeObserver)({\n        ref: targetRef,\n        onResize: updatePosition\n    });\n    // Reposition the overlay and do not close on scroll while the visual viewport is resizing.\n    // This will ensure that overlays adjust their positioning when the iOS virtual keyboard appears.\n    let isResizing = (0, $39EOa$useRef)(false);\n    (0, $39EOa$useLayoutEffect)(()=>{\n        let timeout;\n        let onResize = ()=>{\n            isResizing.current = true;\n            clearTimeout(timeout);\n            timeout = setTimeout(()=>{\n                isResizing.current = false;\n            }, 500);\n            updatePosition();\n        };\n        // Only reposition the overlay if a scroll event happens immediately as a result of resize (aka the virtual keyboard has appears)\n        // We don't want to reposition the overlay if the user has pinch zoomed in and is scrolling the viewport around.\n        let onScroll = ()=>{\n            if (isResizing.current) onResize();\n        };\n        $2a41e45df1593e64$var$visualViewport === null || $2a41e45df1593e64$var$visualViewport === void 0 ? void 0 : $2a41e45df1593e64$var$visualViewport.addEventListener('resize', onResize);\n        $2a41e45df1593e64$var$visualViewport === null || $2a41e45df1593e64$var$visualViewport === void 0 ? void 0 : $2a41e45df1593e64$var$visualViewport.addEventListener('scroll', onScroll);\n        return ()=>{\n            $2a41e45df1593e64$var$visualViewport === null || $2a41e45df1593e64$var$visualViewport === void 0 ? void 0 : $2a41e45df1593e64$var$visualViewport.removeEventListener('resize', onResize);\n            $2a41e45df1593e64$var$visualViewport === null || $2a41e45df1593e64$var$visualViewport === void 0 ? void 0 : $2a41e45df1593e64$var$visualViewport.removeEventListener('scroll', onScroll);\n        };\n    }, [\n        updatePosition\n    ]);\n    let close = (0, $39EOa$useCallback)(()=>{\n        if (!isResizing.current) onClose === null || onClose === void 0 ? void 0 : onClose();\n    }, [\n        onClose,\n        isResizing\n    ]);\n    // When scrolling a parent scrollable region of the trigger (other than the body),\n    // we hide the popover. Otherwise, its position would be incorrect.\n    (0, $dd149f63282afbbf$export$18fc8428861184da)({\n        triggerRef: targetRef,\n        isOpen: isOpen,\n        onClose: onClose && close\n    });\n    var _position_maxHeight, _position_placement, _position_triggerAnchorPoint;\n    return {\n        overlayProps: {\n            style: {\n                position: position ? 'absolute' : 'fixed',\n                top: !position ? 0 : undefined,\n                left: !position ? 0 : undefined,\n                zIndex: 100000,\n                ...position === null || position === void 0 ? void 0 : position.position,\n                maxHeight: (_position_maxHeight = position === null || position === void 0 ? void 0 : position.maxHeight) !== null && _position_maxHeight !== void 0 ? _position_maxHeight : '100vh'\n            }\n        },\n        placement: (_position_placement = position === null || position === void 0 ? void 0 : position.placement) !== null && _position_placement !== void 0 ? _position_placement : null,\n        triggerAnchorPoint: (_position_triggerAnchorPoint = position === null || position === void 0 ? void 0 : position.triggerAnchorPoint) !== null && _position_triggerAnchorPoint !== void 0 ? _position_triggerAnchorPoint : null,\n        arrowProps: {\n            'aria-hidden': 'true',\n            role: 'presentation',\n            style: {\n                left: position === null || position === void 0 ? void 0 : position.arrowOffsetLeft,\n                top: position === null || position === void 0 ? void 0 : position.arrowOffsetTop\n            }\n        },\n        updatePosition: updatePosition\n    };\n}\nfunction $2a41e45df1593e64$var$useResize(onResize) {\n    (0, $39EOa$useLayoutEffect)(()=>{\n        window.addEventListener('resize', onResize, false);\n        return ()=>{\n            window.removeEventListener('resize', onResize, false);\n        };\n    }, [\n        onResize\n    ]);\n}\nfunction $2a41e45df1593e64$var$translateRTL(position, direction) {\n    if (direction === 'rtl') return position.replace('start', 'right').replace('end', 'left');\n    return position.replace('start', 'left').replace('end', 'right');\n}\n\n\nexport {$2a41e45df1593e64$export$d39e1813b3bdd0e1 as useOverlayPosition};\n//# sourceMappingURL=useOverlayPosition.module.js.map\n","import {useLayoutEffect as $6dfIe$useLayoutEffect, isFocusable as $6dfIe$isFocusable, getOwnerWindow as $6dfIe$getOwnerWindow, focusWithoutScrolling as $6dfIe$focusWithoutScrolling} from \"@react-aria/utils\";\nimport {useRef as $6dfIe$useRef, useCallback as $6dfIe$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $8a9cb279dc87e130$export$525bc4921d56d4a(nativeEvent) {\n    let event = nativeEvent;\n    event.nativeEvent = nativeEvent;\n    event.isDefaultPrevented = ()=>event.defaultPrevented;\n    // cancelBubble is technically deprecated in the spec, but still supported in all browsers.\n    event.isPropagationStopped = ()=>event.cancelBubble;\n    event.persist = ()=>{};\n    return event;\n}\nfunction $8a9cb279dc87e130$export$c2b7abe5d61ec696(event, target) {\n    Object.defineProperty(event, 'target', {\n        value: target\n    });\n    Object.defineProperty(event, 'currentTarget', {\n        value: target\n    });\n}\nfunction $8a9cb279dc87e130$export$715c682d09d639cc(onBlur) {\n    let stateRef = (0, $6dfIe$useRef)({\n        isFocused: false,\n        observer: null\n    });\n    // Clean up MutationObserver on unmount. See below.\n    (0, $6dfIe$useLayoutEffect)(()=>{\n        const state = stateRef.current;\n        return ()=>{\n            if (state.observer) {\n                state.observer.disconnect();\n                state.observer = null;\n            }\n        };\n    }, []);\n    // This function is called during a React onFocus event.\n    return (0, $6dfIe$useCallback)((e)=>{\n        // React does not fire onBlur when an element is disabled. https://github.com/facebook/react/issues/9142\n        // Most browsers fire a native focusout event in this case, except for Firefox. In that case, we use a\n        // MutationObserver to watch for the disabled attribute, and dispatch these events ourselves.\n        // For browsers that do, focusout fires before the MutationObserver, so onBlur should not fire twice.\n        if (e.target instanceof HTMLButtonElement || e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement || e.target instanceof HTMLSelectElement) {\n            stateRef.current.isFocused = true;\n            let target = e.target;\n            let onBlurHandler = (e)=>{\n                stateRef.current.isFocused = false;\n                if (target.disabled) {\n                    // For backward compatibility, dispatch a (fake) React synthetic event.\n                    let event = $8a9cb279dc87e130$export$525bc4921d56d4a(e);\n                    onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);\n                }\n                // We no longer need the MutationObserver once the target is blurred.\n                if (stateRef.current.observer) {\n                    stateRef.current.observer.disconnect();\n                    stateRef.current.observer = null;\n                }\n            };\n            target.addEventListener('focusout', onBlurHandler, {\n                once: true\n            });\n            stateRef.current.observer = new MutationObserver(()=>{\n                if (stateRef.current.isFocused && target.disabled) {\n                    var _stateRef_current_observer;\n                    (_stateRef_current_observer = stateRef.current.observer) === null || _stateRef_current_observer === void 0 ? void 0 : _stateRef_current_observer.disconnect();\n                    let relatedTargetEl = target === document.activeElement ? null : document.activeElement;\n                    target.dispatchEvent(new FocusEvent('blur', {\n                        relatedTarget: relatedTargetEl\n                    }));\n                    target.dispatchEvent(new FocusEvent('focusout', {\n                        bubbles: true,\n                        relatedTarget: relatedTargetEl\n                    }));\n                }\n            });\n            stateRef.current.observer.observe(target, {\n                attributes: true,\n                attributeFilter: [\n                    'disabled'\n                ]\n            });\n        }\n    }, [\n        onBlur\n    ]);\n}\nlet $8a9cb279dc87e130$export$fda7da73ab5d4c48 = false;\nfunction $8a9cb279dc87e130$export$cabe61c495ee3649(target) {\n    // The browser will focus the nearest focusable ancestor of our target.\n    while(target && !(0, $6dfIe$isFocusable)(target))target = target.parentElement;\n    let window = (0, $6dfIe$getOwnerWindow)(target);\n    let activeElement = window.document.activeElement;\n    if (!activeElement || activeElement === target) return;\n    $8a9cb279dc87e130$export$fda7da73ab5d4c48 = true;\n    let isRefocusing = false;\n    let onBlur = (e)=>{\n        if (e.target === activeElement || isRefocusing) e.stopImmediatePropagation();\n    };\n    let onFocusOut = (e)=>{\n        if (e.target === activeElement || isRefocusing) {\n            e.stopImmediatePropagation();\n            // If there was no focusable ancestor, we don't expect a focus event.\n            // Re-focus the original active element here.\n            if (!target && !isRefocusing) {\n                isRefocusing = true;\n                (0, $6dfIe$focusWithoutScrolling)(activeElement);\n                cleanup();\n            }\n        }\n    };\n    let onFocus = (e)=>{\n        if (e.target === target || isRefocusing) e.stopImmediatePropagation();\n    };\n    let onFocusIn = (e)=>{\n        if (e.target === target || isRefocusing) {\n            e.stopImmediatePropagation();\n            if (!isRefocusing) {\n                isRefocusing = true;\n                (0, $6dfIe$focusWithoutScrolling)(activeElement);\n                cleanup();\n            }\n        }\n    };\n    window.addEventListener('blur', onBlur, true);\n    window.addEventListener('focusout', onFocusOut, true);\n    window.addEventListener('focusin', onFocusIn, true);\n    window.addEventListener('focus', onFocus, true);\n    let cleanup = ()=>{\n        cancelAnimationFrame(raf);\n        window.removeEventListener('blur', onBlur, true);\n        window.removeEventListener('focusout', onFocusOut, true);\n        window.removeEventListener('focusin', onFocusIn, true);\n        window.removeEventListener('focus', onFocus, true);\n        $8a9cb279dc87e130$export$fda7da73ab5d4c48 = false;\n        isRefocusing = false;\n    };\n    let raf = requestAnimationFrame(cleanup);\n    return cleanup;\n}\n\n\nexport {$8a9cb279dc87e130$export$525bc4921d56d4a as createSyntheticEvent, $8a9cb279dc87e130$export$c2b7abe5d61ec696 as setEventTarget, $8a9cb279dc87e130$export$715c682d09d639cc as useSyntheticBlurEvent, $8a9cb279dc87e130$export$fda7da73ab5d4c48 as ignoreFocusEvent, $8a9cb279dc87e130$export$cabe61c495ee3649 as preventFocus};\n//# sourceMappingURL=utils.module.js.map\n","import {isIOS as $7R18e$isIOS, getOwnerDocument as $7R18e$getOwnerDocument, runAfterTransition as $7R18e$runAfterTransition} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n// Note that state only matters here for iOS. Non-iOS gets user-select: none applied to the target element\n// rather than at the document level so we just need to apply/remove user-select: none for each pressed element individually\nlet $14c0b72509d70225$var$state = 'default';\nlet $14c0b72509d70225$var$savedUserSelect = '';\nlet $14c0b72509d70225$var$modifiedElementMap = new WeakMap();\nfunction $14c0b72509d70225$export$16a4697467175487(target) {\n    if ((0, $7R18e$isIOS)()) {\n        if ($14c0b72509d70225$var$state === 'default') {\n            const documentObject = (0, $7R18e$getOwnerDocument)(target);\n            $14c0b72509d70225$var$savedUserSelect = documentObject.documentElement.style.webkitUserSelect;\n            documentObject.documentElement.style.webkitUserSelect = 'none';\n        }\n        $14c0b72509d70225$var$state = 'disabled';\n    } else if (target instanceof HTMLElement || target instanceof SVGElement) {\n        // If not iOS, store the target's original user-select and change to user-select: none\n        // Ignore state since it doesn't apply for non iOS\n        let property = 'userSelect' in target.style ? 'userSelect' : 'webkitUserSelect';\n        $14c0b72509d70225$var$modifiedElementMap.set(target, target.style[property]);\n        target.style[property] = 'none';\n    }\n}\nfunction $14c0b72509d70225$export$b0d6fa1ab32e3295(target) {\n    if ((0, $7R18e$isIOS)()) {\n        // If the state is already default, there's nothing to do.\n        // If it is restoring, then there's no need to queue a second restore.\n        if ($14c0b72509d70225$var$state !== 'disabled') return;\n        $14c0b72509d70225$var$state = 'restoring';\n        // There appears to be a delay on iOS where selection still might occur\n        // after pointer up, so wait a bit before removing user-select.\n        setTimeout(()=>{\n            // Wait for any CSS transitions to complete so we don't recompute style\n            // for the whole page in the middle of the animation and cause jank.\n            (0, $7R18e$runAfterTransition)(()=>{\n                // Avoid race conditions\n                if ($14c0b72509d70225$var$state === 'restoring') {\n                    const documentObject = (0, $7R18e$getOwnerDocument)(target);\n                    if (documentObject.documentElement.style.webkitUserSelect === 'none') documentObject.documentElement.style.webkitUserSelect = $14c0b72509d70225$var$savedUserSelect || '';\n                    $14c0b72509d70225$var$savedUserSelect = '';\n                    $14c0b72509d70225$var$state = 'default';\n                }\n            });\n        }, 300);\n    } else if (target instanceof HTMLElement || target instanceof SVGElement) // If not iOS, restore the target's original user-select if any\n    // Ignore state since it doesn't apply for non iOS\n    {\n        if (target && $14c0b72509d70225$var$modifiedElementMap.has(target)) {\n            let targetOldUserSelect = $14c0b72509d70225$var$modifiedElementMap.get(target);\n            let property = 'userSelect' in target.style ? 'userSelect' : 'webkitUserSelect';\n            if (target.style[property] === 'none') target.style[property] = targetOldUserSelect;\n            if (target.getAttribute('style') === '') target.removeAttribute('style');\n            $14c0b72509d70225$var$modifiedElementMap.delete(target);\n        }\n    }\n}\n\n\nexport {$14c0b72509d70225$export$16a4697467175487 as disableTextSelection, $14c0b72509d70225$export$b0d6fa1ab32e3295 as restoreTextSelection};\n//# sourceMappingURL=textSelection.module.js.map\n","import $3aeG1$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $ae1eeba8b9eafd08$export$5165eccb35aaadb5 = (0, $3aeG1$react).createContext({\n    register: ()=>{}\n});\n$ae1eeba8b9eafd08$export$5165eccb35aaadb5.displayName = 'PressResponderContext';\n\n\nexport {$ae1eeba8b9eafd08$export$5165eccb35aaadb5 as PressResponderContext};\n//# sourceMappingURL=context.module.js.map\n","function _class_apply_descriptor_get(receiver, descriptor) {\n    if (descriptor.get) return descriptor.get.call(receiver);\n\n    return descriptor.value;\n}\nexport { _class_apply_descriptor_get as _ };\n","function _class_extract_field_descriptor(receiver, privateMap, action) {\n    if (!privateMap.has(receiver)) throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n\n    return privateMap.get(receiver);\n}\nexport { _class_extract_field_descriptor as _ };\n","import { _ as _class_apply_descriptor_get } from \"./_class_apply_descriptor_get.js\";\nimport { _ as _class_extract_field_descriptor } from \"./_class_extract_field_descriptor.js\";\n\nfunction _class_private_field_get(receiver, privateMap) {\n    var descriptor = _class_extract_field_descriptor(receiver, privateMap, \"get\");\n    return _class_apply_descriptor_get(receiver, descriptor);\n}\nexport { _class_private_field_get as _ };\n","function _class_apply_descriptor_set(receiver, descriptor, value) {\n    if (descriptor.set) descriptor.set.call(receiver, value);\n    else {\n        if (!descriptor.writable) {\n            // This should only throw in strict mode, but class bodies are\n            // always strict and private fields can only be used inside\n            // class bodies.\n            throw new TypeError(\"attempted to set read only private field\");\n        }\n        descriptor.value = value;\n    }\n}\nexport { _class_apply_descriptor_set as _ };\n","import { _ as _class_apply_descriptor_set } from \"./_class_apply_descriptor_set.js\";\nimport { _ as _class_extract_field_descriptor } from \"./_class_extract_field_descriptor.js\";\n\nfunction _class_private_field_set(receiver, privateMap, value) {\n    var descriptor = _class_extract_field_descriptor(receiver, privateMap, \"set\");\n    _class_apply_descriptor_set(receiver, descriptor, value);\n    return value;\n}\nexport { _class_private_field_set as _ };\n","import {createSyntheticEvent as $8a9cb279dc87e130$export$525bc4921d56d4a, preventFocus as $8a9cb279dc87e130$export$cabe61c495ee3649, setEventTarget as $8a9cb279dc87e130$export$c2b7abe5d61ec696} from \"./utils.mjs\";\nimport {disableTextSelection as $14c0b72509d70225$export$16a4697467175487, restoreTextSelection as $14c0b72509d70225$export$b0d6fa1ab32e3295} from \"./textSelection.mjs\";\nimport {PressResponderContext as $ae1eeba8b9eafd08$export$5165eccb35aaadb5} from \"./context.mjs\";\nimport {_ as $7mdmh$_} from \"@swc/helpers/_/_class_private_field_get\";\nimport {_ as $7mdmh$_1} from \"@swc/helpers/_/_class_private_field_init\";\nimport {_ as $7mdmh$_2} from \"@swc/helpers/_/_class_private_field_set\";\nimport {mergeProps as $7mdmh$mergeProps, useSyncRef as $7mdmh$useSyncRef, useGlobalListeners as $7mdmh$useGlobalListeners, useEffectEvent as $7mdmh$useEffectEvent, useLayoutEffect as $7mdmh$useLayoutEffect, getEventTarget as $7mdmh$getEventTarget, nodeContains as $7mdmh$nodeContains, openLink as $7mdmh$openLink, chain as $7mdmh$chain, getOwnerDocument as $7mdmh$getOwnerDocument, focusWithoutScrolling as $7mdmh$focusWithoutScrolling, getOwnerWindow as $7mdmh$getOwnerWindow, isMac as $7mdmh$isMac, isVirtualClick as $7mdmh$isVirtualClick, isVirtualPointerEvent as $7mdmh$isVirtualPointerEvent} from \"@react-aria/utils\";\nimport {flushSync as $7mdmh$flushSync} from \"react-dom\";\nimport {useContext as $7mdmh$useContext, useState as $7mdmh$useState, useRef as $7mdmh$useRef, useCallback as $7mdmh$useCallback, useMemo as $7mdmh$useMemo, useEffect as $7mdmh$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\n\n\n\n\n\nfunction $f6c31cce2adf654f$var$usePressResponderContext(props) {\n    // Consume context from <PressResponder> and merge with props.\n    let context = (0, $7mdmh$useContext)((0, $ae1eeba8b9eafd08$export$5165eccb35aaadb5));\n    if (context) {\n        let { register: register, ...contextProps } = context;\n        props = (0, $7mdmh$mergeProps)(contextProps, props);\n        register();\n    }\n    (0, $7mdmh$useSyncRef)(context, props.ref);\n    return props;\n}\nvar $f6c31cce2adf654f$var$_shouldStopPropagation = /*#__PURE__*/ new WeakMap();\nclass $f6c31cce2adf654f$var$PressEvent {\n    continuePropagation() {\n        (0, $7mdmh$_2)(this, $f6c31cce2adf654f$var$_shouldStopPropagation, false);\n    }\n    get shouldStopPropagation() {\n        return (0, $7mdmh$_)(this, $f6c31cce2adf654f$var$_shouldStopPropagation);\n    }\n    constructor(type, pointerType, originalEvent, state){\n        (0, $7mdmh$_1)(this, $f6c31cce2adf654f$var$_shouldStopPropagation, {\n            writable: true,\n            value: void 0\n        });\n        (0, $7mdmh$_2)(this, $f6c31cce2adf654f$var$_shouldStopPropagation, true);\n        var _state_target;\n        let currentTarget = (_state_target = state === null || state === void 0 ? void 0 : state.target) !== null && _state_target !== void 0 ? _state_target : originalEvent.currentTarget;\n        const rect = currentTarget === null || currentTarget === void 0 ? void 0 : currentTarget.getBoundingClientRect();\n        let x, y = 0;\n        let clientX, clientY = null;\n        if (originalEvent.clientX != null && originalEvent.clientY != null) {\n            clientX = originalEvent.clientX;\n            clientY = originalEvent.clientY;\n        }\n        if (rect) {\n            if (clientX != null && clientY != null) {\n                x = clientX - rect.left;\n                y = clientY - rect.top;\n            } else {\n                x = rect.width / 2;\n                y = rect.height / 2;\n            }\n        }\n        this.type = type;\n        this.pointerType = pointerType;\n        this.target = originalEvent.currentTarget;\n        this.shiftKey = originalEvent.shiftKey;\n        this.metaKey = originalEvent.metaKey;\n        this.ctrlKey = originalEvent.ctrlKey;\n        this.altKey = originalEvent.altKey;\n        this.x = x;\n        this.y = y;\n    }\n}\nconst $f6c31cce2adf654f$var$LINK_CLICKED = Symbol('linkClicked');\nconst $f6c31cce2adf654f$var$STYLE_ID = 'react-aria-pressable-style';\nconst $f6c31cce2adf654f$var$PRESSABLE_ATTRIBUTE = 'data-react-aria-pressable';\nfunction $f6c31cce2adf654f$export$45712eceda6fad21(props) {\n    let { onPress: onPress, onPressChange: onPressChange, onPressStart: onPressStart, onPressEnd: onPressEnd, onPressUp: onPressUp, onClick: onClick, isDisabled: isDisabled, isPressed: isPressedProp, preventFocusOnPress: preventFocusOnPress, shouldCancelOnPointerExit: shouldCancelOnPointerExit, allowTextSelectionOnPress: allowTextSelectionOnPress, ref: domRef, ...domProps } = $f6c31cce2adf654f$var$usePressResponderContext(props);\n    let [isPressed, setPressed] = (0, $7mdmh$useState)(false);\n    let ref = (0, $7mdmh$useRef)({\n        isPressed: false,\n        ignoreEmulatedMouseEvents: false,\n        didFirePressStart: false,\n        isTriggeringEvent: false,\n        activePointerId: null,\n        target: null,\n        isOverTarget: false,\n        pointerType: null,\n        disposables: []\n    });\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners, removeGlobalListener: removeGlobalListener } = (0, $7mdmh$useGlobalListeners)();\n    let triggerPressStart = (0, $7mdmh$useCallback)((originalEvent, pointerType)=>{\n        let state = ref.current;\n        if (isDisabled || state.didFirePressStart) return false;\n        let shouldStopPropagation = true;\n        state.isTriggeringEvent = true;\n        if (onPressStart) {\n            let event = new $f6c31cce2adf654f$var$PressEvent('pressstart', pointerType, originalEvent);\n            onPressStart(event);\n            shouldStopPropagation = event.shouldStopPropagation;\n        }\n        if (onPressChange) onPressChange(true);\n        state.isTriggeringEvent = false;\n        state.didFirePressStart = true;\n        setPressed(true);\n        return shouldStopPropagation;\n    }, [\n        isDisabled,\n        onPressStart,\n        onPressChange\n    ]);\n    let triggerPressEnd = (0, $7mdmh$useCallback)((originalEvent, pointerType, wasPressed = true)=>{\n        let state = ref.current;\n        if (!state.didFirePressStart) return false;\n        state.didFirePressStart = false;\n        state.isTriggeringEvent = true;\n        let shouldStopPropagation = true;\n        if (onPressEnd) {\n            let event = new $f6c31cce2adf654f$var$PressEvent('pressend', pointerType, originalEvent);\n            onPressEnd(event);\n            shouldStopPropagation = event.shouldStopPropagation;\n        }\n        if (onPressChange) onPressChange(false);\n        setPressed(false);\n        if (onPress && wasPressed && !isDisabled) {\n            let event = new $f6c31cce2adf654f$var$PressEvent('press', pointerType, originalEvent);\n            onPress(event);\n            shouldStopPropagation && (shouldStopPropagation = event.shouldStopPropagation);\n        }\n        state.isTriggeringEvent = false;\n        return shouldStopPropagation;\n    }, [\n        isDisabled,\n        onPressEnd,\n        onPressChange,\n        onPress\n    ]);\n    let triggerPressEndEvent = (0, $7mdmh$useEffectEvent)(triggerPressEnd);\n    let triggerPressUp = (0, $7mdmh$useCallback)((originalEvent, pointerType)=>{\n        let state = ref.current;\n        if (isDisabled) return false;\n        if (onPressUp) {\n            state.isTriggeringEvent = true;\n            let event = new $f6c31cce2adf654f$var$PressEvent('pressup', pointerType, originalEvent);\n            onPressUp(event);\n            state.isTriggeringEvent = false;\n            return event.shouldStopPropagation;\n        }\n        return true;\n    }, [\n        isDisabled,\n        onPressUp\n    ]);\n    let triggerPressUpEvent = (0, $7mdmh$useEffectEvent)(triggerPressUp);\n    let cancel = (0, $7mdmh$useCallback)((e)=>{\n        let state = ref.current;\n        if (state.isPressed && state.target) {\n            if (state.didFirePressStart && state.pointerType != null) triggerPressEnd($f6c31cce2adf654f$var$createEvent(state.target, e), state.pointerType, false);\n            state.isPressed = false;\n            setIsPointerPressed(null);\n            state.isOverTarget = false;\n            state.activePointerId = null;\n            state.pointerType = null;\n            removeAllGlobalListeners();\n            if (!allowTextSelectionOnPress) (0, $14c0b72509d70225$export$b0d6fa1ab32e3295)(state.target);\n            for (let dispose of state.disposables)dispose();\n            state.disposables = [];\n        }\n    }, [\n        allowTextSelectionOnPress,\n        removeAllGlobalListeners,\n        triggerPressEnd\n    ]);\n    let cancelEvent = (0, $7mdmh$useEffectEvent)(cancel);\n    let cancelOnPointerExit = (0, $7mdmh$useCallback)((e)=>{\n        if (shouldCancelOnPointerExit) cancel(e);\n    }, [\n        shouldCancelOnPointerExit,\n        cancel\n    ]);\n    let triggerClick = (0, $7mdmh$useCallback)((e)=>{\n        if (isDisabled) return;\n        onClick === null || onClick === void 0 ? void 0 : onClick(e);\n    }, [\n        isDisabled,\n        onClick\n    ]);\n    let triggerSyntheticClick = (0, $7mdmh$useCallback)((e, target)=>{\n        if (isDisabled) return;\n        // Some third-party libraries pass in onClick instead of onPress.\n        // Create a fake mouse event and trigger onClick as well.\n        // This matches the browser's native activation behavior for certain elements (e.g. button).\n        // https://html.spec.whatwg.org/#activation\n        // https://html.spec.whatwg.org/#fire-a-synthetic-pointer-event\n        if (onClick) {\n            let event = new MouseEvent('click', e);\n            (0, $8a9cb279dc87e130$export$c2b7abe5d61ec696)(event, target);\n            onClick((0, $8a9cb279dc87e130$export$525bc4921d56d4a)(event));\n        }\n    }, [\n        isDisabled,\n        onClick\n    ]);\n    let triggerSyntheticClickEvent = (0, $7mdmh$useEffectEvent)(triggerSyntheticClick);\n    let [isElemKeyPressed, setIsElemKeyPressed] = (0, $7mdmh$useState)(false);\n    (0, $7mdmh$useLayoutEffect)(()=>{\n        let state = ref.current;\n        if (isElemKeyPressed) {\n            let onKeyUp = (e)=>{\n                var _state_metaKeyEvents;\n                if (state.isPressed && state.target && $f6c31cce2adf654f$var$isValidKeyboardEvent(e, state.target)) {\n                    var _state_metaKeyEvents1;\n                    if ($f6c31cce2adf654f$var$shouldPreventDefaultKeyboard((0, $7mdmh$getEventTarget)(e), e.key)) e.preventDefault();\n                    let target = (0, $7mdmh$getEventTarget)(e);\n                    let wasPressed = (0, $7mdmh$nodeContains)(state.target, (0, $7mdmh$getEventTarget)(e));\n                    triggerPressEndEvent($f6c31cce2adf654f$var$createEvent(state.target, e), 'keyboard', wasPressed);\n                    if (wasPressed) triggerSyntheticClickEvent(e, state.target);\n                    removeAllGlobalListeners();\n                    // If a link was triggered with a key other than Enter, open the URL ourselves.\n                    // This means the link has a role override, and the default browser behavior\n                    // only applies when using the Enter key.\n                    if (e.key !== 'Enter' && $f6c31cce2adf654f$var$isHTMLAnchorLink(state.target) && (0, $7mdmh$nodeContains)(state.target, target) && !e[$f6c31cce2adf654f$var$LINK_CLICKED]) {\n                        // Store a hidden property on the event so we only trigger link click once,\n                        // even if there are multiple usePress instances attached to the element.\n                        e[$f6c31cce2adf654f$var$LINK_CLICKED] = true;\n                        (0, $7mdmh$openLink)(state.target, e, false);\n                    }\n                    state.isPressed = false;\n                    setIsElemKeyPressed(false);\n                    (_state_metaKeyEvents1 = state.metaKeyEvents) === null || _state_metaKeyEvents1 === void 0 ? void 0 : _state_metaKeyEvents1.delete(e.key);\n                } else if (e.key === 'Meta' && ((_state_metaKeyEvents = state.metaKeyEvents) === null || _state_metaKeyEvents === void 0 ? void 0 : _state_metaKeyEvents.size)) {\n                    var _state_target;\n                    // If we recorded keydown events that occurred while the Meta key was pressed,\n                    // and those haven't received keyup events already, fire keyup events ourselves.\n                    // See comment above for more info about the macOS bug causing this.\n                    let events = state.metaKeyEvents;\n                    state.metaKeyEvents = undefined;\n                    for (let event of events.values())(_state_target = state.target) === null || _state_target === void 0 ? void 0 : _state_target.dispatchEvent(new KeyboardEvent('keyup', event));\n                }\n            };\n            // Focus may move before the key up event, so register the event on the document\n            // instead of the same element where the key down event occurred. Make it capturing so that it will trigger\n            // before stopPropagation from useKeyboard on a child element may happen and thus we can still call triggerPress for the parent element.\n            let originalTarget = state.target;\n            let pressUp = (e)=>{\n                if (originalTarget && $f6c31cce2adf654f$var$isValidKeyboardEvent(e, originalTarget) && !e.repeat && (0, $7mdmh$nodeContains)(originalTarget, (0, $7mdmh$getEventTarget)(e)) && state.target) triggerPressUpEvent($f6c31cce2adf654f$var$createEvent(state.target, e), 'keyboard');\n            };\n            let listener = (0, $7mdmh$chain)(pressUp, onKeyUp);\n            addGlobalListener((0, $7mdmh$getOwnerDocument)(state.target), 'keyup', listener, true);\n            return ()=>{\n                removeGlobalListener((0, $7mdmh$getOwnerDocument)(state.target), 'keyup', listener, true);\n            };\n        }\n    }, [\n        isElemKeyPressed,\n        addGlobalListener,\n        removeAllGlobalListeners,\n        removeGlobalListener\n    ]);\n    let [isPointerPressed, setIsPointerPressed] = (0, $7mdmh$useState)(null);\n    (0, $7mdmh$useLayoutEffect)(()=>{\n        let state = ref.current;\n        if (isPointerPressed === 'pointer') {\n            let onPointerUp = (e)=>{\n                if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0 && state.target) {\n                    if ((0, $7mdmh$nodeContains)(state.target, (0, $7mdmh$getEventTarget)(e)) && state.pointerType != null) {\n                        // Wait for onClick to fire onPress. This avoids browser issues when the DOM\n                        // is mutated between onPointerUp and onClick, and is more compatible with third party libraries.\n                        // https://github.com/adobe/react-spectrum/issues/1513\n                        // https://issues.chromium.org/issues/40732224\n                        // However, iOS and Android do not focus or fire onClick after a long press.\n                        // We work around this by triggering a click ourselves after a timeout.\n                        // This timeout is canceled during the click event in case the real one fires first.\n                        // The timeout must be at least 32ms, because Safari on iOS delays the click event on\n                        // non-form elements without certain ARIA roles (for hover emulation).\n                        // https://github.com/WebKit/WebKit/blob/dccfae42bb29bd4bdef052e469f604a9387241c0/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm#L875-L892\n                        let clicked = false;\n                        let timeout = setTimeout(()=>{\n                            if (state.isPressed && state.target instanceof HTMLElement) {\n                                if (clicked) cancelEvent(e);\n                                else {\n                                    (0, $7mdmh$focusWithoutScrolling)(state.target);\n                                    state.target.click();\n                                }\n                            }\n                        }, 80);\n                        // Use a capturing listener to track if a click occurred.\n                        // If stopPropagation is called it may never reach our handler.\n                        addGlobalListener(e.currentTarget, 'click', ()=>clicked = true, true);\n                        state.disposables.push(()=>clearTimeout(timeout));\n                    } else cancelEvent(e);\n                    // Ignore subsequent onPointerLeave event before onClick on touch devices.\n                    state.isOverTarget = false;\n                }\n            };\n            let onPointerCancel = (e)=>{\n                cancelEvent(e);\n            };\n            addGlobalListener((0, $7mdmh$getOwnerDocument)(state.target), 'pointerup', onPointerUp, false);\n            addGlobalListener((0, $7mdmh$getOwnerDocument)(state.target), 'pointercancel', onPointerCancel, false);\n            return ()=>{\n                removeGlobalListener((0, $7mdmh$getOwnerDocument)(state.target), 'pointerup', onPointerUp, false);\n                removeGlobalListener((0, $7mdmh$getOwnerDocument)(state.target), 'pointercancel', onPointerCancel, false);\n            };\n        } else if (isPointerPressed === 'mouse' && process.env.NODE_ENV === 'test') {\n            let onMouseUp = (e)=>{\n                // Only handle left clicks\n                if (e.button !== 0) return;\n                if (state.ignoreEmulatedMouseEvents) {\n                    state.ignoreEmulatedMouseEvents = false;\n                    return;\n                }\n                if (state.target && state.target.contains(e.target) && state.pointerType != null) ;\n                else cancelEvent(e);\n                state.isOverTarget = false;\n            };\n            addGlobalListener((0, $7mdmh$getOwnerDocument)(state.target), 'mouseup', onMouseUp, false);\n            return ()=>{\n                removeGlobalListener((0, $7mdmh$getOwnerDocument)(state.target), 'mouseup', onMouseUp, false);\n            };\n        } else if (isPointerPressed === 'touch' && process.env.NODE_ENV === 'test') {\n            let onScroll = (e)=>{\n                if (state.isPressed && (0, $7mdmh$nodeContains)((0, $7mdmh$getEventTarget)(e), state.target)) cancelEvent({\n                    currentTarget: state.target,\n                    shiftKey: false,\n                    ctrlKey: false,\n                    metaKey: false,\n                    altKey: false\n                });\n            };\n            addGlobalListener((0, $7mdmh$getOwnerWindow)(state.target), 'scroll', onScroll, true);\n            return ()=>{\n                removeGlobalListener((0, $7mdmh$getOwnerWindow)(state.target), 'scroll', onScroll, true);\n            };\n        }\n    }, [\n        isPointerPressed,\n        addGlobalListener,\n        removeGlobalListener\n    ]);\n    let pressProps = (0, $7mdmh$useMemo)(()=>{\n        let state = ref.current;\n        let pressProps = {\n            onKeyDown (e) {\n                if ($f6c31cce2adf654f$var$isValidKeyboardEvent(e.nativeEvent, e.currentTarget) && (0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) {\n                    var _state_metaKeyEvents;\n                    if ($f6c31cce2adf654f$var$shouldPreventDefaultKeyboard((0, $7mdmh$getEventTarget)(e.nativeEvent), e.key)) e.preventDefault();\n                    // If the event is repeating, it may have started on a different element\n                    // after which focus moved to the current element. Ignore these events and\n                    // only handle the first key down event.\n                    let shouldStopPropagation = true;\n                    if (!state.isPressed && !e.repeat) {\n                        state.target = e.currentTarget;\n                        state.isPressed = true;\n                        setIsElemKeyPressed(true);\n                        state.pointerType = 'keyboard';\n                        shouldStopPropagation = triggerPressStart(e, 'keyboard');\n                    }\n                    if (shouldStopPropagation) e.stopPropagation();\n                    // Keep track of the keydown events that occur while the Meta (e.g. Command) key is held.\n                    // macOS has a bug where keyup events are not fired while the Meta key is down.\n                    // When the Meta key itself is released we will get an event for that, and we'll act as if\n                    // all of these other keys were released as well.\n                    // https://bugs.chromium.org/p/chromium/issues/detail?id=1393524\n                    // https://bugs.webkit.org/show_bug.cgi?id=55291\n                    // https://bugzilla.mozilla.org/show_bug.cgi?id=1299553\n                    if (e.metaKey && (0, $7mdmh$isMac)()) (_state_metaKeyEvents = state.metaKeyEvents) === null || _state_metaKeyEvents === void 0 ? void 0 : _state_metaKeyEvents.set(e.key, e.nativeEvent);\n                } else if (e.key === 'Meta') state.metaKeyEvents = new Map();\n            },\n            onClick (e) {\n                if (e && !(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                if (e && e.button === 0 && !state.isTriggeringEvent && !(0, $7mdmh$openLink).isOpening) {\n                    let shouldStopPropagation = true;\n                    if (isDisabled) e.preventDefault();\n                    // If triggered from a screen reader or by using element.click(),\n                    // trigger as if it were a keyboard click.\n                    if (!state.ignoreEmulatedMouseEvents && !state.isPressed && (state.pointerType === 'virtual' || (0, $7mdmh$isVirtualClick)(e.nativeEvent))) {\n                        let stopPressStart = triggerPressStart(e, 'virtual');\n                        let stopPressUp = triggerPressUp(e, 'virtual');\n                        let stopPressEnd = triggerPressEnd(e, 'virtual');\n                        triggerClick(e);\n                        shouldStopPropagation = stopPressStart && stopPressUp && stopPressEnd;\n                    } else if (state.isPressed && state.pointerType !== 'keyboard') {\n                        let pointerType = state.pointerType || e.nativeEvent.pointerType || 'virtual';\n                        let stopPressUp = triggerPressUp($f6c31cce2adf654f$var$createEvent(e.currentTarget, e), pointerType);\n                        let stopPressEnd = triggerPressEnd($f6c31cce2adf654f$var$createEvent(e.currentTarget, e), pointerType, true);\n                        shouldStopPropagation = stopPressUp && stopPressEnd;\n                        state.isOverTarget = false;\n                        triggerClick(e);\n                        cancel(e);\n                    }\n                    state.ignoreEmulatedMouseEvents = false;\n                    if (shouldStopPropagation) e.stopPropagation();\n                }\n            }\n        };\n        if (typeof PointerEvent !== 'undefined') {\n            pressProps.onPointerDown = (e)=>{\n                // Only handle left clicks, and ignore events that bubbled through portals.\n                if (e.button !== 0 || !(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                // iOS safari fires pointer events from VoiceOver with incorrect coordinates/target.\n                // Ignore and let the onClick handler take care of it instead.\n                // https://bugs.webkit.org/show_bug.cgi?id=222627\n                // https://bugs.webkit.org/show_bug.cgi?id=223202\n                if ((0, $7mdmh$isVirtualPointerEvent)(e.nativeEvent)) {\n                    state.pointerType = 'virtual';\n                    return;\n                }\n                state.pointerType = e.pointerType;\n                let shouldStopPropagation = true;\n                if (!state.isPressed) {\n                    state.isPressed = true;\n                    setIsPointerPressed('pointer');\n                    state.isOverTarget = true;\n                    state.activePointerId = e.pointerId;\n                    state.target = e.currentTarget;\n                    if (!allowTextSelectionOnPress) (0, $14c0b72509d70225$export$16a4697467175487)(state.target);\n                    shouldStopPropagation = triggerPressStart(e, state.pointerType);\n                    // Release pointer capture so that touch interactions can leave the original target.\n                    // This enables onPointerLeave and onPointerEnter to fire.\n                    let target = (0, $7mdmh$getEventTarget)(e.nativeEvent);\n                    if ('releasePointerCapture' in target) target.releasePointerCapture(e.pointerId);\n                }\n                if (shouldStopPropagation) e.stopPropagation();\n            };\n            pressProps.onMouseDown = (e)=>{\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                if (e.button === 0) {\n                    if (preventFocusOnPress) {\n                        let dispose = (0, $8a9cb279dc87e130$export$cabe61c495ee3649)(e.target);\n                        if (dispose) state.disposables.push(dispose);\n                    }\n                    e.stopPropagation();\n                }\n            };\n            pressProps.onPointerUp = (e)=>{\n                // iOS fires pointerup with zero width and height, so check the pointerType recorded during pointerdown.\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent)) || state.pointerType === 'virtual') return;\n                // Only handle left clicks. If isPressed is true, delay until onClick.\n                if (e.button === 0 && !state.isPressed) triggerPressUp(e, state.pointerType || e.pointerType);\n            };\n            pressProps.onPointerEnter = (e)=>{\n                if (e.pointerId === state.activePointerId && state.target && !state.isOverTarget && state.pointerType != null) {\n                    state.isOverTarget = true;\n                    triggerPressStart($f6c31cce2adf654f$var$createEvent(state.target, e), state.pointerType);\n                }\n            };\n            pressProps.onPointerLeave = (e)=>{\n                if (e.pointerId === state.activePointerId && state.target && state.isOverTarget && state.pointerType != null) {\n                    state.isOverTarget = false;\n                    triggerPressEnd($f6c31cce2adf654f$var$createEvent(state.target, e), state.pointerType, false);\n                    cancelOnPointerExit(e);\n                }\n            };\n            pressProps.onDragStart = (e)=>{\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                // Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.\n                cancel(e);\n            };\n        } else if (process.env.NODE_ENV === 'test') {\n            // NOTE: this fallback branch is entirely used by unit tests.\n            // All browsers now support pointer events, but JSDOM still does not.\n            pressProps.onMouseDown = (e)=>{\n                // Only handle left clicks\n                if (e.button !== 0 || !(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                if (state.ignoreEmulatedMouseEvents) {\n                    e.stopPropagation();\n                    return;\n                }\n                state.isPressed = true;\n                setIsPointerPressed('mouse');\n                state.isOverTarget = true;\n                state.target = e.currentTarget;\n                state.pointerType = (0, $7mdmh$isVirtualClick)(e.nativeEvent) ? 'virtual' : 'mouse';\n                // Flush sync so that focus moved during react re-renders occurs before we yield back to the browser.\n                let shouldStopPropagation = (0, $7mdmh$flushSync)(()=>triggerPressStart(e, state.pointerType));\n                if (shouldStopPropagation) e.stopPropagation();\n                if (preventFocusOnPress) {\n                    let dispose = (0, $8a9cb279dc87e130$export$cabe61c495ee3649)(e.target);\n                    if (dispose) state.disposables.push(dispose);\n                }\n            };\n            pressProps.onMouseEnter = (e)=>{\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                let shouldStopPropagation = true;\n                if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n                    state.isOverTarget = true;\n                    shouldStopPropagation = triggerPressStart(e, state.pointerType);\n                }\n                if (shouldStopPropagation) e.stopPropagation();\n            };\n            pressProps.onMouseLeave = (e)=>{\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                let shouldStopPropagation = true;\n                if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n                    state.isOverTarget = false;\n                    shouldStopPropagation = triggerPressEnd(e, state.pointerType, false);\n                    cancelOnPointerExit(e);\n                }\n                if (shouldStopPropagation) e.stopPropagation();\n            };\n            pressProps.onMouseUp = (e)=>{\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                if (!state.ignoreEmulatedMouseEvents && e.button === 0 && !state.isPressed) triggerPressUp(e, state.pointerType || 'mouse');\n            };\n            pressProps.onTouchStart = (e)=>{\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                let touch = $f6c31cce2adf654f$var$getTouchFromEvent(e.nativeEvent);\n                if (!touch) return;\n                state.activePointerId = touch.identifier;\n                state.ignoreEmulatedMouseEvents = true;\n                state.isOverTarget = true;\n                state.isPressed = true;\n                setIsPointerPressed('touch');\n                state.target = e.currentTarget;\n                state.pointerType = 'touch';\n                if (!allowTextSelectionOnPress) (0, $14c0b72509d70225$export$16a4697467175487)(state.target);\n                let shouldStopPropagation = triggerPressStart($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType);\n                if (shouldStopPropagation) e.stopPropagation();\n            };\n            pressProps.onTouchMove = (e)=>{\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                if (!state.isPressed) {\n                    e.stopPropagation();\n                    return;\n                }\n                let touch = $f6c31cce2adf654f$var$getTouchById(e.nativeEvent, state.activePointerId);\n                let shouldStopPropagation = true;\n                if (touch && $f6c31cce2adf654f$var$isOverTarget(touch, e.currentTarget)) {\n                    if (!state.isOverTarget && state.pointerType != null) {\n                        state.isOverTarget = true;\n                        shouldStopPropagation = triggerPressStart($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType);\n                    }\n                } else if (state.isOverTarget && state.pointerType != null) {\n                    state.isOverTarget = false;\n                    shouldStopPropagation = triggerPressEnd($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType, false);\n                    cancelOnPointerExit($f6c31cce2adf654f$var$createTouchEvent(state.target, e));\n                }\n                if (shouldStopPropagation) e.stopPropagation();\n            };\n            pressProps.onTouchEnd = (e)=>{\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                if (!state.isPressed) {\n                    e.stopPropagation();\n                    return;\n                }\n                let touch = $f6c31cce2adf654f$var$getTouchById(e.nativeEvent, state.activePointerId);\n                let shouldStopPropagation = true;\n                if (touch && $f6c31cce2adf654f$var$isOverTarget(touch, e.currentTarget) && state.pointerType != null) {\n                    triggerPressUp($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType);\n                    shouldStopPropagation = triggerPressEnd($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType);\n                    triggerSyntheticClick(e.nativeEvent, state.target);\n                } else if (state.isOverTarget && state.pointerType != null) shouldStopPropagation = triggerPressEnd($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType, false);\n                if (shouldStopPropagation) e.stopPropagation();\n                state.isPressed = false;\n                setIsPointerPressed(null);\n                state.activePointerId = null;\n                state.isOverTarget = false;\n                state.ignoreEmulatedMouseEvents = true;\n                if (state.target && !allowTextSelectionOnPress) (0, $14c0b72509d70225$export$b0d6fa1ab32e3295)(state.target);\n                removeAllGlobalListeners();\n            };\n            pressProps.onTouchCancel = (e)=>{\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                e.stopPropagation();\n                if (state.isPressed) cancel($f6c31cce2adf654f$var$createTouchEvent(state.target, e));\n            };\n            pressProps.onDragStart = (e)=>{\n                if (!(0, $7mdmh$nodeContains)(e.currentTarget, (0, $7mdmh$getEventTarget)(e.nativeEvent))) return;\n                cancel(e);\n            };\n        }\n        return pressProps;\n    }, [\n        isDisabled,\n        preventFocusOnPress,\n        removeAllGlobalListeners,\n        allowTextSelectionOnPress,\n        cancel,\n        cancelOnPointerExit,\n        triggerPressEnd,\n        triggerPressStart,\n        triggerPressUp,\n        triggerClick,\n        triggerSyntheticClick\n    ]);\n    // Avoid onClick delay for double tap to zoom by default.\n    (0, $7mdmh$useEffect)(()=>{\n        if (!domRef || process.env.NODE_ENV === 'test') return;\n        const ownerDocument = (0, $7mdmh$getOwnerDocument)(domRef.current);\n        if (!ownerDocument || !ownerDocument.head || ownerDocument.getElementById($f6c31cce2adf654f$var$STYLE_ID)) return;\n        const style = ownerDocument.createElement('style');\n        style.id = $f6c31cce2adf654f$var$STYLE_ID;\n        // touchAction: 'manipulation' is supposed to be equivalent, but in\n        // Safari it causes onPointerCancel not to fire on scroll.\n        // https://bugs.webkit.org/show_bug.cgi?id=240917\n        style.textContent = `\n@layer {\n  [${$f6c31cce2adf654f$var$PRESSABLE_ATTRIBUTE}] {\n    touch-action: pan-x pan-y pinch-zoom;\n  }\n}\n    `.trim();\n        ownerDocument.head.prepend(style);\n    }, [\n        domRef\n    ]);\n    // Remove user-select: none in case component unmounts immediately after pressStart\n    (0, $7mdmh$useEffect)(()=>{\n        let state = ref.current;\n        return ()=>{\n            var _state_target;\n            if (!allowTextSelectionOnPress) (0, $14c0b72509d70225$export$b0d6fa1ab32e3295)((_state_target = state.target) !== null && _state_target !== void 0 ? _state_target : undefined);\n            for (let dispose of state.disposables)dispose();\n            state.disposables = [];\n        };\n    }, [\n        allowTextSelectionOnPress\n    ]);\n    return {\n        isPressed: isPressedProp || isPressed,\n        pressProps: (0, $7mdmh$mergeProps)(domProps, pressProps, {\n            [$f6c31cce2adf654f$var$PRESSABLE_ATTRIBUTE]: true\n        })\n    };\n}\nfunction $f6c31cce2adf654f$var$isHTMLAnchorLink(target) {\n    return target.tagName === 'A' && target.hasAttribute('href');\n}\nfunction $f6c31cce2adf654f$var$isValidKeyboardEvent(event, currentTarget) {\n    const { key: key, code: code } = event;\n    const element = currentTarget;\n    const role = element.getAttribute('role');\n    // Accessibility for keyboards. Space and Enter only.\n    // \"Spacebar\" is for IE 11\n    return (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') && !(element instanceof (0, $7mdmh$getOwnerWindow)(element).HTMLInputElement && !$f6c31cce2adf654f$var$isValidInputKey(element, key) || element instanceof (0, $7mdmh$getOwnerWindow)(element).HTMLTextAreaElement || element.isContentEditable) && // Links should only trigger with Enter key\n    !((role === 'link' || !role && $f6c31cce2adf654f$var$isHTMLAnchorLink(element)) && key !== 'Enter');\n}\nfunction $f6c31cce2adf654f$var$getTouchFromEvent(event) {\n    const { targetTouches: targetTouches } = event;\n    if (targetTouches.length > 0) return targetTouches[0];\n    return null;\n}\nfunction $f6c31cce2adf654f$var$getTouchById(event, pointerId) {\n    const changedTouches = event.changedTouches;\n    for(let i = 0; i < changedTouches.length; i++){\n        const touch = changedTouches[i];\n        if (touch.identifier === pointerId) return touch;\n    }\n    return null;\n}\nfunction $f6c31cce2adf654f$var$createTouchEvent(target, e) {\n    let clientX = 0;\n    let clientY = 0;\n    if (e.targetTouches && e.targetTouches.length === 1) {\n        clientX = e.targetTouches[0].clientX;\n        clientY = e.targetTouches[0].clientY;\n    }\n    return {\n        currentTarget: target,\n        shiftKey: e.shiftKey,\n        ctrlKey: e.ctrlKey,\n        metaKey: e.metaKey,\n        altKey: e.altKey,\n        clientX: clientX,\n        clientY: clientY\n    };\n}\nfunction $f6c31cce2adf654f$var$createEvent(target, e) {\n    let clientX = e.clientX;\n    let clientY = e.clientY;\n    return {\n        currentTarget: target,\n        shiftKey: e.shiftKey,\n        ctrlKey: e.ctrlKey,\n        metaKey: e.metaKey,\n        altKey: e.altKey,\n        clientX: clientX,\n        clientY: clientY\n    };\n}\nfunction $f6c31cce2adf654f$var$getPointClientRect(point) {\n    let offsetX = 0;\n    let offsetY = 0;\n    if (point.width !== undefined) offsetX = point.width / 2;\n    else if (point.radiusX !== undefined) offsetX = point.radiusX;\n    if (point.height !== undefined) offsetY = point.height / 2;\n    else if (point.radiusY !== undefined) offsetY = point.radiusY;\n    return {\n        top: point.clientY - offsetY,\n        right: point.clientX + offsetX,\n        bottom: point.clientY + offsetY,\n        left: point.clientX - offsetX\n    };\n}\nfunction $f6c31cce2adf654f$var$areRectanglesOverlapping(a, b) {\n    // check if they cannot overlap on x axis\n    if (a.left > b.right || b.left > a.right) return false;\n    // check if they cannot overlap on y axis\n    if (a.top > b.bottom || b.top > a.bottom) return false;\n    return true;\n}\nfunction $f6c31cce2adf654f$var$isOverTarget(point, target) {\n    let rect = target.getBoundingClientRect();\n    let pointRect = $f6c31cce2adf654f$var$getPointClientRect(point);\n    return $f6c31cce2adf654f$var$areRectanglesOverlapping(rect, pointRect);\n}\nfunction $f6c31cce2adf654f$var$shouldPreventDefaultUp(target) {\n    if (target instanceof HTMLInputElement) return false;\n    if (target instanceof HTMLButtonElement) return target.type !== 'submit' && target.type !== 'reset';\n    if ($f6c31cce2adf654f$var$isHTMLAnchorLink(target)) return false;\n    return true;\n}\nfunction $f6c31cce2adf654f$var$shouldPreventDefaultKeyboard(target, key) {\n    if (target instanceof HTMLInputElement) return !$f6c31cce2adf654f$var$isValidInputKey(target, key);\n    return $f6c31cce2adf654f$var$shouldPreventDefaultUp(target);\n}\nconst $f6c31cce2adf654f$var$nonTextInputTypes = new Set([\n    'checkbox',\n    'radio',\n    'range',\n    'color',\n    'file',\n    'image',\n    'button',\n    'submit',\n    'reset'\n]);\nfunction $f6c31cce2adf654f$var$isValidInputKey(target, key) {\n    // Only space should toggle checkboxes and radios, not enter.\n    return target.type === 'checkbox' || target.type === 'radio' ? key === ' ' : $f6c31cce2adf654f$var$nonTextInputTypes.has(target.type);\n}\n\n\nexport {$f6c31cce2adf654f$export$45712eceda6fad21 as usePress};\n//# sourceMappingURL=usePress.module.js.map\n","import {ignoreFocusEvent as $8a9cb279dc87e130$export$fda7da73ab5d4c48} from \"./utils.mjs\";\nimport {isMac as $28AnR$isMac, openLink as $28AnR$openLink, isVirtualClick as $28AnR$isVirtualClick, getOwnerWindow as $28AnR$getOwnerWindow, getOwnerDocument as $28AnR$getOwnerDocument} from \"@react-aria/utils\";\nimport {useState as $28AnR$useState, useEffect as $28AnR$useEffect} from \"react\";\nimport {useIsSSR as $28AnR$useIsSSR} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\nlet $507fabe10e71c6fb$var$currentModality = null;\nlet $507fabe10e71c6fb$var$currentPointerType = 'keyboard';\nlet $507fabe10e71c6fb$var$changeHandlers = new Set();\nlet $507fabe10e71c6fb$export$d90243b58daecda7 = new Map(); // We use a map here to support setting event listeners across multiple document objects.\nlet $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\nlet $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;\n// Only Tab or Esc keys will make focus visible on text input elements\nconst $507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS = {\n    Tab: true,\n    Escape: true\n};\nfunction $507fabe10e71c6fb$var$triggerChangeHandlers(modality, e) {\n    for (let handler of $507fabe10e71c6fb$var$changeHandlers)handler(modality, e);\n}\n/**\n * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.\n */ function $507fabe10e71c6fb$var$isValidKey(e) {\n    // Control and Shift keys trigger when navigating back to the tab with keyboard.\n    return !(e.metaKey || !(0, $28AnR$isMac)() && e.altKey || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');\n}\nfunction $507fabe10e71c6fb$var$handleKeyboardEvent(e) {\n    $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n    if (!(0, $28AnR$openLink).isOpening && $507fabe10e71c6fb$var$isValidKey(e)) {\n        $507fabe10e71c6fb$var$currentModality = 'keyboard';\n        $507fabe10e71c6fb$var$currentPointerType = 'keyboard';\n        $507fabe10e71c6fb$var$triggerChangeHandlers('keyboard', e);\n    }\n}\nfunction $507fabe10e71c6fb$var$handlePointerEvent(e) {\n    $507fabe10e71c6fb$var$currentModality = 'pointer';\n    $507fabe10e71c6fb$var$currentPointerType = 'pointerType' in e ? e.pointerType : 'mouse';\n    if (e.type === 'mousedown' || e.type === 'pointerdown') {\n        $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n        $507fabe10e71c6fb$var$triggerChangeHandlers('pointer', e);\n    }\n}\nfunction $507fabe10e71c6fb$var$handleClickEvent(e) {\n    if (!(0, $28AnR$openLink).isOpening && (0, $28AnR$isVirtualClick)(e)) {\n        $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n        $507fabe10e71c6fb$var$currentModality = 'virtual';\n        $507fabe10e71c6fb$var$currentPointerType = 'virtual';\n    }\n}\nfunction $507fabe10e71c6fb$var$handleFocusEvent(e) {\n    // Firefox fires two extra focus events when the user first clicks into an iframe:\n    // first on the window, then on the document. We ignore these events so they don't\n    // cause keyboard focus rings to appear.\n    if (e.target === window || e.target === document || (0, $8a9cb279dc87e130$export$fda7da73ab5d4c48) || !e.isTrusted) return;\n    // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.\n    // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n    if (!$507fabe10e71c6fb$var$hasEventBeforeFocus && !$507fabe10e71c6fb$var$hasBlurredWindowRecently) {\n        $507fabe10e71c6fb$var$currentModality = 'virtual';\n        $507fabe10e71c6fb$var$currentPointerType = 'virtual';\n        $507fabe10e71c6fb$var$triggerChangeHandlers('virtual', e);\n    }\n    $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\n    $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;\n}\nfunction $507fabe10e71c6fb$var$handleWindowBlur() {\n    if (0, $8a9cb279dc87e130$export$fda7da73ab5d4c48) return;\n    // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n    // for example, since a subsequent focus event won't be fired.\n    $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\n    $507fabe10e71c6fb$var$hasBlurredWindowRecently = true;\n}\n/**\n * Setup global event listeners to control when keyboard focus style should be visible.\n */ function $507fabe10e71c6fb$var$setupGlobalFocusEvents(element) {\n    if (typeof window === 'undefined' || typeof document === 'undefined' || $507fabe10e71c6fb$export$d90243b58daecda7.get((0, $28AnR$getOwnerWindow)(element))) return;\n    const windowObject = (0, $28AnR$getOwnerWindow)(element);\n    const documentObject = (0, $28AnR$getOwnerDocument)(element);\n    // Programmatic focus() calls shouldn't affect the current input modality.\n    // However, we need to detect other cases when a focus event occurs without\n    // a preceding user event (e.g. screen reader focus). Overriding the focus\n    // method on HTMLElement.prototype is a bit hacky, but works.\n    let focus = windowObject.HTMLElement.prototype.focus;\n    windowObject.HTMLElement.prototype.focus = function() {\n        $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n        focus.apply(this, arguments);\n    };\n    documentObject.addEventListener('keydown', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n    documentObject.addEventListener('keyup', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n    documentObject.addEventListener('click', $507fabe10e71c6fb$var$handleClickEvent, true);\n    // Register focus events on the window so they are sure to happen\n    // before React's event listeners (registered on the document).\n    windowObject.addEventListener('focus', $507fabe10e71c6fb$var$handleFocusEvent, true);\n    windowObject.addEventListener('blur', $507fabe10e71c6fb$var$handleWindowBlur, false);\n    if (typeof PointerEvent !== 'undefined') {\n        documentObject.addEventListener('pointerdown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.addEventListener('pointermove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.addEventListener('pointerup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n    } else if (process.env.NODE_ENV === 'test') {\n        documentObject.addEventListener('mousedown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.addEventListener('mousemove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.addEventListener('mouseup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n    }\n    // Add unmount handler\n    windowObject.addEventListener('beforeunload', ()=>{\n        $507fabe10e71c6fb$var$tearDownWindowFocusTracking(element);\n    }, {\n        once: true\n    });\n    $507fabe10e71c6fb$export$d90243b58daecda7.set(windowObject, {\n        focus: focus\n    });\n}\nconst $507fabe10e71c6fb$var$tearDownWindowFocusTracking = (element, loadListener)=>{\n    const windowObject = (0, $28AnR$getOwnerWindow)(element);\n    const documentObject = (0, $28AnR$getOwnerDocument)(element);\n    if (loadListener) documentObject.removeEventListener('DOMContentLoaded', loadListener);\n    if (!$507fabe10e71c6fb$export$d90243b58daecda7.has(windowObject)) return;\n    windowObject.HTMLElement.prototype.focus = $507fabe10e71c6fb$export$d90243b58daecda7.get(windowObject).focus;\n    documentObject.removeEventListener('keydown', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n    documentObject.removeEventListener('keyup', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n    documentObject.removeEventListener('click', $507fabe10e71c6fb$var$handleClickEvent, true);\n    windowObject.removeEventListener('focus', $507fabe10e71c6fb$var$handleFocusEvent, true);\n    windowObject.removeEventListener('blur', $507fabe10e71c6fb$var$handleWindowBlur, false);\n    if (typeof PointerEvent !== 'undefined') {\n        documentObject.removeEventListener('pointerdown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.removeEventListener('pointermove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.removeEventListener('pointerup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n    } else if (process.env.NODE_ENV === 'test') {\n        documentObject.removeEventListener('mousedown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.removeEventListener('mousemove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n        documentObject.removeEventListener('mouseup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n    }\n    $507fabe10e71c6fb$export$d90243b58daecda7.delete(windowObject);\n};\nfunction $507fabe10e71c6fb$export$2f1888112f558a7d(element) {\n    const documentObject = (0, $28AnR$getOwnerDocument)(element);\n    let loadListener;\n    if (documentObject.readyState !== 'loading') $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);\n    else {\n        loadListener = ()=>{\n            $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);\n        };\n        documentObject.addEventListener('DOMContentLoaded', loadListener);\n    }\n    return ()=>$507fabe10e71c6fb$var$tearDownWindowFocusTracking(element, loadListener);\n}\n// Server-side rendering does not have the document object defined\n// eslint-disable-next-line no-restricted-globals\nif (typeof document !== 'undefined') $507fabe10e71c6fb$export$2f1888112f558a7d();\nfunction $507fabe10e71c6fb$export$b9b3dfddab17db27() {\n    return $507fabe10e71c6fb$var$currentModality !== 'pointer';\n}\nfunction $507fabe10e71c6fb$export$630ff653c5ada6a9() {\n    return $507fabe10e71c6fb$var$currentModality;\n}\nfunction $507fabe10e71c6fb$export$8397ddfc504fdb9a(modality) {\n    $507fabe10e71c6fb$var$currentModality = modality;\n    $507fabe10e71c6fb$var$currentPointerType = modality === 'pointer' ? 'mouse' : modality;\n    $507fabe10e71c6fb$var$triggerChangeHandlers(modality, null);\n}\nfunction $507fabe10e71c6fb$export$887a228355cf7d95() {\n    return $507fabe10e71c6fb$var$currentPointerType;\n}\nfunction $507fabe10e71c6fb$export$98e20ec92f614cfe() {\n    $507fabe10e71c6fb$var$setupGlobalFocusEvents();\n    let [modality, setModality] = (0, $28AnR$useState)($507fabe10e71c6fb$var$currentModality);\n    (0, $28AnR$useEffect)(()=>{\n        let handler = ()=>{\n            setModality($507fabe10e71c6fb$var$currentModality);\n        };\n        $507fabe10e71c6fb$var$changeHandlers.add(handler);\n        return ()=>{\n            $507fabe10e71c6fb$var$changeHandlers.delete(handler);\n        };\n    }, []);\n    return (0, $28AnR$useIsSSR)() ? null : modality;\n}\nconst $507fabe10e71c6fb$var$nonTextInputTypes = new Set([\n    'checkbox',\n    'radio',\n    'range',\n    'color',\n    'file',\n    'image',\n    'button',\n    'submit',\n    'reset'\n]);\n/**\n * If this is attached to text input component, return if the event is a focus event (Tab/Escape keys pressed) so that\n * focus visible style can be properly set.\n */ function $507fabe10e71c6fb$var$isKeyboardFocusEvent(isTextInput, modality, e) {\n    let document1 = (0, $28AnR$getOwnerDocument)(e === null || e === void 0 ? void 0 : e.target);\n    const IHTMLInputElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLInputElement : HTMLInputElement;\n    const IHTMLTextAreaElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLTextAreaElement : HTMLTextAreaElement;\n    const IHTMLElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLElement : HTMLElement;\n    const IKeyboardEvent = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).KeyboardEvent : KeyboardEvent;\n    // For keyboard events that occur on a non-input element that will move focus into input element (aka ArrowLeft going from Datepicker button to the main input group)\n    // we need to rely on the user passing isTextInput into here. This way we can skip toggling focus visiblity for said input element\n    isTextInput = isTextInput || document1.activeElement instanceof IHTMLInputElement && !$507fabe10e71c6fb$var$nonTextInputTypes.has(document1.activeElement.type) || document1.activeElement instanceof IHTMLTextAreaElement || document1.activeElement instanceof IHTMLElement && document1.activeElement.isContentEditable;\n    return !(isTextInput && modality === 'keyboard' && e instanceof IKeyboardEvent && !$507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS[e.key]);\n}\nfunction $507fabe10e71c6fb$export$ffd9e5021c1fb2d6(props = {}) {\n    let { isTextInput: isTextInput, autoFocus: autoFocus } = props;\n    let [isFocusVisibleState, setFocusVisible] = (0, $28AnR$useState)(autoFocus || $507fabe10e71c6fb$export$b9b3dfddab17db27());\n    $507fabe10e71c6fb$export$ec71b4b83ac08ec3((isFocusVisible)=>{\n        setFocusVisible(isFocusVisible);\n    }, [\n        isTextInput\n    ], {\n        isTextInput: isTextInput\n    });\n    return {\n        isFocusVisible: isFocusVisibleState\n    };\n}\nfunction $507fabe10e71c6fb$export$ec71b4b83ac08ec3(fn, deps, opts) {\n    $507fabe10e71c6fb$var$setupGlobalFocusEvents();\n    (0, $28AnR$useEffect)(()=>{\n        let handler = (modality, e)=>{\n            // We want to early return for any keyboard events that occur inside text inputs EXCEPT for Tab and Escape\n            if (!$507fabe10e71c6fb$var$isKeyboardFocusEvent(!!(opts === null || opts === void 0 ? void 0 : opts.isTextInput), modality, e)) return;\n            fn($507fabe10e71c6fb$export$b9b3dfddab17db27());\n        };\n        $507fabe10e71c6fb$var$changeHandlers.add(handler);\n        return ()=>{\n            $507fabe10e71c6fb$var$changeHandlers.delete(handler);\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, deps);\n}\n\n\nexport {$507fabe10e71c6fb$export$d90243b58daecda7 as hasSetupGlobalListeners, $507fabe10e71c6fb$export$2f1888112f558a7d as addWindowFocusTracking, $507fabe10e71c6fb$export$b9b3dfddab17db27 as isFocusVisible, $507fabe10e71c6fb$export$630ff653c5ada6a9 as getInteractionModality, $507fabe10e71c6fb$export$8397ddfc504fdb9a as setInteractionModality, $507fabe10e71c6fb$export$887a228355cf7d95 as getPointerType, $507fabe10e71c6fb$export$98e20ec92f614cfe as useInteractionModality, $507fabe10e71c6fb$export$ffd9e5021c1fb2d6 as useFocusVisible, $507fabe10e71c6fb$export$ec71b4b83ac08ec3 as useFocusVisibleListener};\n//# sourceMappingURL=useFocusVisible.module.js.map\n","import {getInteractionModality as $507fabe10e71c6fb$export$630ff653c5ada6a9} from \"./useFocusVisible.mjs\";\nimport {getOwnerDocument as $k50bp$getOwnerDocument, getActiveElement as $k50bp$getActiveElement, runAfterTransition as $k50bp$runAfterTransition, focusWithoutScrolling as $k50bp$focusWithoutScrolling} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $3ad3f6e1647bc98d$export$80f3e147d781571c(element) {\n    // If the user is interacting with a virtual cursor, e.g. screen reader, then\n    // wait until after any animated transitions that are currently occurring on\n    // the page before shifting focus. This avoids issues with VoiceOver on iOS\n    // causing the page to scroll when moving focus if the element is transitioning\n    // from off the screen.\n    const ownerDocument = (0, $k50bp$getOwnerDocument)(element);\n    if ((0, $507fabe10e71c6fb$export$630ff653c5ada6a9)() === 'virtual') {\n        let lastFocusedElement = (0, $k50bp$getActiveElement)(ownerDocument);\n        (0, $k50bp$runAfterTransition)(()=>{\n            const activeElement = (0, $k50bp$getActiveElement)(ownerDocument);\n            // If focus did not move or focus was lost to the body, and the element is still in the document, focus it.\n            if ((activeElement === lastFocusedElement || activeElement === ownerDocument.body) && element.isConnected) (0, $k50bp$focusWithoutScrolling)(element);\n        });\n    } else (0, $k50bp$focusWithoutScrolling)(element);\n}\n\n\nexport {$3ad3f6e1647bc98d$export$80f3e147d781571c as focusSafely};\n//# sourceMappingURL=focusSafely.module.js.map\n","import {useSyntheticBlurEvent as $8a9cb279dc87e130$export$715c682d09d639cc} from \"./utils.mjs\";\nimport {useCallback as $hf0lj$useCallback} from \"react\";\nimport {getOwnerDocument as $hf0lj$getOwnerDocument, getActiveElement as $hf0lj$getActiveElement, getEventTarget as $hf0lj$getEventTarget} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\nfunction $a1ea59d68270f0dd$export$f8168d8dd8fd66e6(props) {\n    let { isDisabled: isDisabled, onFocus: onFocusProp, onBlur: onBlurProp, onFocusChange: onFocusChange } = props;\n    const onBlur = (0, $hf0lj$useCallback)((e)=>{\n        if (e.target === e.currentTarget) {\n            if (onBlurProp) onBlurProp(e);\n            if (onFocusChange) onFocusChange(false);\n            return true;\n        }\n    }, [\n        onBlurProp,\n        onFocusChange\n    ]);\n    const onSyntheticFocus = (0, $8a9cb279dc87e130$export$715c682d09d639cc)(onBlur);\n    const onFocus = (0, $hf0lj$useCallback)((e)=>{\n        // Double check that document.activeElement actually matches e.target in case a previously chained\n        // focus handler already moved focus somewhere else.\n        const ownerDocument = (0, $hf0lj$getOwnerDocument)(e.target);\n        const activeElement = ownerDocument ? (0, $hf0lj$getActiveElement)(ownerDocument) : (0, $hf0lj$getActiveElement)();\n        if (e.target === e.currentTarget && activeElement === (0, $hf0lj$getEventTarget)(e.nativeEvent)) {\n            if (onFocusProp) onFocusProp(e);\n            if (onFocusChange) onFocusChange(true);\n            onSyntheticFocus(e);\n        }\n    }, [\n        onFocusChange,\n        onFocusProp,\n        onSyntheticFocus\n    ]);\n    return {\n        focusProps: {\n            onFocus: !isDisabled && (onFocusProp || onFocusChange || onBlurProp) ? onFocus : undefined,\n            onBlur: !isDisabled && (onBlurProp || onFocusChange) ? onBlur : undefined\n        }\n    };\n}\n\n\nexport {$a1ea59d68270f0dd$export$f8168d8dd8fd66e6 as useFocus};\n//# sourceMappingURL=useFocus.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $93925083ecbb358c$export$48d1ea6320830260(handler) {\n    if (!handler) return undefined;\n    let shouldStopPropagation = true;\n    return (e)=>{\n        let event = {\n            ...e,\n            preventDefault () {\n                e.preventDefault();\n            },\n            isDefaultPrevented () {\n                return e.isDefaultPrevented();\n            },\n            stopPropagation () {\n                if (shouldStopPropagation && process.env.NODE_ENV !== 'production') console.error('stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.');\n                else shouldStopPropagation = true;\n            },\n            continuePropagation () {\n                shouldStopPropagation = false;\n            },\n            isPropagationStopped () {\n                return shouldStopPropagation;\n            }\n        };\n        handler(event);\n        if (shouldStopPropagation) e.stopPropagation();\n    };\n}\n\n\nexport {$93925083ecbb358c$export$48d1ea6320830260 as createEventHandler};\n//# sourceMappingURL=createEventHandler.module.js.map\n","import {createEventHandler as $93925083ecbb358c$export$48d1ea6320830260} from \"./createEventHandler.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $46d819fcbaf35654$export$8f71654801c2f7cd(props) {\n    return {\n        keyboardProps: props.isDisabled ? {} : {\n            onKeyDown: (0, $93925083ecbb358c$export$48d1ea6320830260)(props.onKeyDown),\n            onKeyUp: (0, $93925083ecbb358c$export$48d1ea6320830260)(props.onKeyUp)\n        }\n    };\n}\n\n\nexport {$46d819fcbaf35654$export$8f71654801c2f7cd as useKeyboard};\n//# sourceMappingURL=useKeyboard.module.js.map\n","import {focusSafely as $3ad3f6e1647bc98d$export$80f3e147d781571c} from \"./focusSafely.mjs\";\nimport {useFocus as $a1ea59d68270f0dd$export$f8168d8dd8fd66e6} from \"./useFocus.mjs\";\nimport {useKeyboard as $46d819fcbaf35654$export$8f71654801c2f7cd} from \"./useKeyboard.mjs\";\nimport {useSyncRef as $fcPuG$useSyncRef, useObjectRef as $fcPuG$useObjectRef, mergeProps as $fcPuG$mergeProps, getOwnerWindow as $fcPuG$getOwnerWindow, isFocusable as $fcPuG$isFocusable, mergeRefs as $fcPuG$mergeRefs} from \"@react-aria/utils\";\nimport $fcPuG$react, {useContext as $fcPuG$useContext, useRef as $fcPuG$useRef, useEffect as $fcPuG$useEffect, forwardRef as $fcPuG$forwardRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nlet $f645667febf57a63$export$f9762fab77588ecb = /*#__PURE__*/ (0, $fcPuG$react).createContext(null);\nfunction $f645667febf57a63$var$useFocusableContext(ref) {\n    let context = (0, $fcPuG$useContext)($f645667febf57a63$export$f9762fab77588ecb) || {};\n    (0, $fcPuG$useSyncRef)(context, ref);\n    // eslint-disable-next-line\n    let { ref: _, ...otherProps } = context;\n    return otherProps;\n}\nconst $f645667febf57a63$export$13f3202a3e5ddd5 = /*#__PURE__*/ (0, $fcPuG$react).forwardRef(function FocusableProvider(props, ref) {\n    let { children: children, ...otherProps } = props;\n    let objRef = (0, $fcPuG$useObjectRef)(ref);\n    let context = {\n        ...otherProps,\n        ref: objRef\n    };\n    return /*#__PURE__*/ (0, $fcPuG$react).createElement($f645667febf57a63$export$f9762fab77588ecb.Provider, {\n        value: context\n    }, children);\n});\nfunction $f645667febf57a63$export$4c014de7c8940b4c(props, domRef) {\n    let { focusProps: focusProps } = (0, $a1ea59d68270f0dd$export$f8168d8dd8fd66e6)(props);\n    let { keyboardProps: keyboardProps } = (0, $46d819fcbaf35654$export$8f71654801c2f7cd)(props);\n    let interactions = (0, $fcPuG$mergeProps)(focusProps, keyboardProps);\n    let domProps = $f645667febf57a63$var$useFocusableContext(domRef);\n    let interactionProps = props.isDisabled ? {} : domProps;\n    let autoFocusRef = (0, $fcPuG$useRef)(props.autoFocus);\n    (0, $fcPuG$useEffect)(()=>{\n        if (autoFocusRef.current && domRef.current) (0, $3ad3f6e1647bc98d$export$80f3e147d781571c)(domRef.current);\n        autoFocusRef.current = false;\n    }, [\n        domRef\n    ]);\n    // Always set a tabIndex so that Safari allows focusing native buttons and inputs.\n    let tabIndex = props.excludeFromTabOrder ? -1 : 0;\n    if (props.isDisabled) tabIndex = undefined;\n    return {\n        focusableProps: (0, $fcPuG$mergeProps)({\n            ...interactions,\n            tabIndex: tabIndex\n        }, interactionProps)\n    };\n}\nconst $f645667febf57a63$export$35a3bebf7ef2d934 = /*#__PURE__*/ (0, $fcPuG$forwardRef)(({ children: children, ...props }, ref)=>{\n    ref = (0, $fcPuG$useObjectRef)(ref);\n    let { focusableProps: focusableProps } = $f645667febf57a63$export$4c014de7c8940b4c(props, ref);\n    let child = (0, $fcPuG$react).Children.only(children);\n    (0, $fcPuG$useEffect)(()=>{\n        if (process.env.NODE_ENV === 'production') return;\n        let el = ref.current;\n        if (!el || !(el instanceof (0, $fcPuG$getOwnerWindow)(el).Element)) {\n            console.error('<Focusable> child must forward its ref to a DOM element.');\n            return;\n        }\n        if (!props.isDisabled && !(0, $fcPuG$isFocusable)(el)) {\n            console.warn('<Focusable> child must be focusable. Please ensure the tabIndex prop is passed through.');\n            return;\n        }\n        if (el.localName !== 'button' && el.localName !== 'input' && el.localName !== 'select' && el.localName !== 'textarea' && el.localName !== 'a' && el.localName !== 'area' && el.localName !== 'summary' && el.localName !== 'img' && el.localName !== 'svg') {\n            let role = el.getAttribute('role');\n            if (!role) console.warn('<Focusable> child must have an interactive ARIA role.');\n            else if (// https://w3c.github.io/aria/#widget_roles\n            role !== 'application' && role !== 'button' && role !== 'checkbox' && role !== 'combobox' && role !== 'gridcell' && role !== 'link' && role !== 'menuitem' && role !== 'menuitemcheckbox' && role !== 'menuitemradio' && role !== 'option' && role !== 'radio' && role !== 'searchbox' && role !== 'separator' && role !== 'slider' && role !== 'spinbutton' && role !== 'switch' && role !== 'tab' && role !== 'tabpanel' && role !== 'textbox' && role !== 'treeitem' && // aria-describedby is also announced on these roles\n            role !== 'img' && role !== 'meter' && role !== 'progressbar') console.warn(`<Focusable> child must have an interactive ARIA role. Got \"${role}\".`);\n        }\n    }, [\n        ref,\n        props.isDisabled\n    ]);\n    // @ts-ignore\n    let childRef = parseInt((0, $fcPuG$react).version, 10) < 19 ? child.ref : child.props.ref;\n    return /*#__PURE__*/ (0, $fcPuG$react).cloneElement(child, {\n        ...(0, $fcPuG$mergeProps)(focusableProps, child.props),\n        // @ts-ignore\n        ref: (0, $fcPuG$mergeRefs)(childRef, ref)\n    });\n});\n\n\nexport {$f645667febf57a63$export$f9762fab77588ecb as FocusableContext, $f645667febf57a63$export$13f3202a3e5ddd5 as FocusableProvider, $f645667febf57a63$export$4c014de7c8940b4c as useFocusable, $f645667febf57a63$export$35a3bebf7ef2d934 as Focusable};\n//# sourceMappingURL=useFocusable.module.js.map\n","import {PressResponderContext as $ae1eeba8b9eafd08$export$5165eccb35aaadb5} from \"./context.mjs\";\nimport {useObjectRef as $87RPk$useObjectRef, mergeProps as $87RPk$mergeProps, useSyncRef as $87RPk$useSyncRef} from \"@react-aria/utils\";\nimport $87RPk$react, {useRef as $87RPk$useRef, useContext as $87RPk$useContext, useEffect as $87RPk$useEffect, useMemo as $87RPk$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $f1ab8c75478c6f73$export$3351871ee4b288b8 = /*#__PURE__*/ (0, $87RPk$react).forwardRef(({ children: children, ...props }, ref)=>{\n    let isRegistered = (0, $87RPk$useRef)(false);\n    let prevContext = (0, $87RPk$useContext)((0, $ae1eeba8b9eafd08$export$5165eccb35aaadb5));\n    ref = (0, $87RPk$useObjectRef)(ref || (prevContext === null || prevContext === void 0 ? void 0 : prevContext.ref));\n    let context = (0, $87RPk$mergeProps)(prevContext || {}, {\n        ...props,\n        ref: ref,\n        register () {\n            isRegistered.current = true;\n            if (prevContext) prevContext.register();\n        }\n    });\n    (0, $87RPk$useSyncRef)(prevContext, ref);\n    (0, $87RPk$useEffect)(()=>{\n        if (!isRegistered.current) {\n            if (process.env.NODE_ENV !== 'production') console.warn(\"A PressResponder was rendered without a pressable child. Either call the usePress hook, or wrap your DOM node with <Pressable> component.\");\n            isRegistered.current = true; // only warn once in strict mode.\n        }\n    }, []);\n    return /*#__PURE__*/ (0, $87RPk$react).createElement((0, $ae1eeba8b9eafd08$export$5165eccb35aaadb5).Provider, {\n        value: context\n    }, children);\n});\nfunction $f1ab8c75478c6f73$export$cf75428e0b9ed1ea({ children: children }) {\n    let context = (0, $87RPk$useMemo)(()=>({\n            register: ()=>{}\n        }), []);\n    return /*#__PURE__*/ (0, $87RPk$react).createElement((0, $ae1eeba8b9eafd08$export$5165eccb35aaadb5).Provider, {\n        value: context\n    }, children);\n}\n\n\nexport {$f1ab8c75478c6f73$export$3351871ee4b288b8 as PressResponder, $f1ab8c75478c6f73$export$cf75428e0b9ed1ea as ClearPressResponder};\n//# sourceMappingURL=PressResponder.module.js.map\n","import {createSyntheticEvent as $8a9cb279dc87e130$export$525bc4921d56d4a, setEventTarget as $8a9cb279dc87e130$export$c2b7abe5d61ec696, useSyntheticBlurEvent as $8a9cb279dc87e130$export$715c682d09d639cc} from \"./utils.mjs\";\nimport {useRef as $3b9Q0$useRef, useCallback as $3b9Q0$useCallback} from \"react\";\nimport {useGlobalListeners as $3b9Q0$useGlobalListeners, getOwnerDocument as $3b9Q0$getOwnerDocument, getActiveElement as $3b9Q0$getActiveElement, getEventTarget as $3b9Q0$getEventTarget, nodeContains as $3b9Q0$nodeContains} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\nfunction $9ab94262bd0047c7$export$420e68273165f4ec(props) {\n    let { isDisabled: isDisabled, onBlurWithin: onBlurWithin, onFocusWithin: onFocusWithin, onFocusWithinChange: onFocusWithinChange } = props;\n    let state = (0, $3b9Q0$useRef)({\n        isFocusWithin: false\n    });\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $3b9Q0$useGlobalListeners)();\n    let onBlur = (0, $3b9Q0$useCallback)((e)=>{\n        // Ignore events bubbling through portals.\n        if (!e.currentTarget.contains(e.target)) return;\n        // We don't want to trigger onBlurWithin and then immediately onFocusWithin again\n        // when moving focus inside the element. Only trigger if the currentTarget doesn't\n        // include the relatedTarget (where focus is moving).\n        if (state.current.isFocusWithin && !e.currentTarget.contains(e.relatedTarget)) {\n            state.current.isFocusWithin = false;\n            removeAllGlobalListeners();\n            if (onBlurWithin) onBlurWithin(e);\n            if (onFocusWithinChange) onFocusWithinChange(false);\n        }\n    }, [\n        onBlurWithin,\n        onFocusWithinChange,\n        state,\n        removeAllGlobalListeners\n    ]);\n    let onSyntheticFocus = (0, $8a9cb279dc87e130$export$715c682d09d639cc)(onBlur);\n    let onFocus = (0, $3b9Q0$useCallback)((e)=>{\n        // Ignore events bubbling through portals.\n        if (!e.currentTarget.contains(e.target)) return;\n        // Double check that document.activeElement actually matches e.target in case a previously chained\n        // focus handler already moved focus somewhere else.\n        const ownerDocument = (0, $3b9Q0$getOwnerDocument)(e.target);\n        const activeElement = (0, $3b9Q0$getActiveElement)(ownerDocument);\n        if (!state.current.isFocusWithin && activeElement === (0, $3b9Q0$getEventTarget)(e.nativeEvent)) {\n            if (onFocusWithin) onFocusWithin(e);\n            if (onFocusWithinChange) onFocusWithinChange(true);\n            state.current.isFocusWithin = true;\n            onSyntheticFocus(e);\n            // Browsers don't fire blur events when elements are removed from the DOM.\n            // However, if a focus event occurs outside the element we're tracking, we\n            // can manually fire onBlur.\n            let currentTarget = e.currentTarget;\n            addGlobalListener(ownerDocument, 'focus', (e)=>{\n                if (state.current.isFocusWithin && !(0, $3b9Q0$nodeContains)(currentTarget, e.target)) {\n                    let nativeEvent = new ownerDocument.defaultView.FocusEvent('blur', {\n                        relatedTarget: e.target\n                    });\n                    (0, $8a9cb279dc87e130$export$c2b7abe5d61ec696)(nativeEvent, currentTarget);\n                    let event = (0, $8a9cb279dc87e130$export$525bc4921d56d4a)(nativeEvent);\n                    onBlur(event);\n                }\n            }, {\n                capture: true\n            });\n        }\n    }, [\n        onFocusWithin,\n        onFocusWithinChange,\n        onSyntheticFocus,\n        addGlobalListener,\n        onBlur\n    ]);\n    if (isDisabled) return {\n        focusWithinProps: {\n            // These cannot be null, that would conflict in mergeProps\n            onFocus: undefined,\n            onBlur: undefined\n        }\n    };\n    return {\n        focusWithinProps: {\n            onFocus: onFocus,\n            onBlur: onBlur\n        }\n    };\n}\n\n\nexport {$9ab94262bd0047c7$export$420e68273165f4ec as useFocusWithin};\n//# sourceMappingURL=useFocusWithin.module.js.map\n","import {useGlobalListeners as $AWxnT$useGlobalListeners, getOwnerDocument as $AWxnT$getOwnerDocument, nodeContains as $AWxnT$nodeContains} from \"@react-aria/utils\";\nimport {useState as $AWxnT$useState, useRef as $AWxnT$useRef, useEffect as $AWxnT$useEffect, useMemo as $AWxnT$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\n// See https://bugs.webkit.org/show_bug.cgi?id=214609.\nlet $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = false;\nlet $6179b936705e76d3$var$hoverCount = 0;\nfunction $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents() {\n    $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = true;\n    // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter\n    // with pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other\n    // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in\n    // the distant future because a user previously touched the element.\n    setTimeout(()=>{\n        $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = false;\n    }, 50);\n}\nfunction $6179b936705e76d3$var$handleGlobalPointerEvent(e) {\n    if (e.pointerType === 'touch') $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents();\n}\nfunction $6179b936705e76d3$var$setupGlobalTouchEvents() {\n    if (typeof document === 'undefined') return;\n    if ($6179b936705e76d3$var$hoverCount === 0) {\n        if (typeof PointerEvent !== 'undefined') document.addEventListener('pointerup', $6179b936705e76d3$var$handleGlobalPointerEvent);\n        else if (process.env.NODE_ENV === 'test') document.addEventListener('touchend', $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents);\n    }\n    $6179b936705e76d3$var$hoverCount++;\n    return ()=>{\n        $6179b936705e76d3$var$hoverCount--;\n        if ($6179b936705e76d3$var$hoverCount > 0) return;\n        if (typeof PointerEvent !== 'undefined') document.removeEventListener('pointerup', $6179b936705e76d3$var$handleGlobalPointerEvent);\n        else if (process.env.NODE_ENV === 'test') document.removeEventListener('touchend', $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents);\n    };\n}\nfunction $6179b936705e76d3$export$ae780daf29e6d456(props) {\n    let { onHoverStart: onHoverStart, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, isDisabled: isDisabled } = props;\n    let [isHovered, setHovered] = (0, $AWxnT$useState)(false);\n    let state = (0, $AWxnT$useRef)({\n        isHovered: false,\n        ignoreEmulatedMouseEvents: false,\n        pointerType: '',\n        target: null\n    }).current;\n    (0, $AWxnT$useEffect)($6179b936705e76d3$var$setupGlobalTouchEvents, []);\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $AWxnT$useGlobalListeners)();\n    let { hoverProps: hoverProps, triggerHoverEnd: triggerHoverEnd } = (0, $AWxnT$useMemo)(()=>{\n        let triggerHoverStart = (event, pointerType)=>{\n            state.pointerType = pointerType;\n            if (isDisabled || pointerType === 'touch' || state.isHovered || !event.currentTarget.contains(event.target)) return;\n            state.isHovered = true;\n            let target = event.currentTarget;\n            state.target = target;\n            // When an element that is hovered over is removed, no pointerleave event is fired by the browser,\n            // even though the originally hovered target may have shrunk in size so it is no longer hovered.\n            // However, a pointerover event will be fired on the new target the mouse is over.\n            // In Chrome this happens immediately. In Safari and Firefox, it happens upon moving the mouse one pixel.\n            addGlobalListener((0, $AWxnT$getOwnerDocument)(event.target), 'pointerover', (e)=>{\n                if (state.isHovered && state.target && !(0, $AWxnT$nodeContains)(state.target, e.target)) triggerHoverEnd(e, e.pointerType);\n            }, {\n                capture: true\n            });\n            if (onHoverStart) onHoverStart({\n                type: 'hoverstart',\n                target: target,\n                pointerType: pointerType\n            });\n            if (onHoverChange) onHoverChange(true);\n            setHovered(true);\n        };\n        let triggerHoverEnd = (event, pointerType)=>{\n            let target = state.target;\n            state.pointerType = '';\n            state.target = null;\n            if (pointerType === 'touch' || !state.isHovered || !target) return;\n            state.isHovered = false;\n            removeAllGlobalListeners();\n            if (onHoverEnd) onHoverEnd({\n                type: 'hoverend',\n                target: target,\n                pointerType: pointerType\n            });\n            if (onHoverChange) onHoverChange(false);\n            setHovered(false);\n        };\n        let hoverProps = {};\n        if (typeof PointerEvent !== 'undefined') {\n            hoverProps.onPointerEnter = (e)=>{\n                if ($6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') return;\n                triggerHoverStart(e, e.pointerType);\n            };\n            hoverProps.onPointerLeave = (e)=>{\n                if (!isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e, e.pointerType);\n            };\n        } else if (process.env.NODE_ENV === 'test') {\n            hoverProps.onTouchStart = ()=>{\n                state.ignoreEmulatedMouseEvents = true;\n            };\n            hoverProps.onMouseEnter = (e)=>{\n                if (!state.ignoreEmulatedMouseEvents && !$6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents) triggerHoverStart(e, 'mouse');\n                state.ignoreEmulatedMouseEvents = false;\n            };\n            hoverProps.onMouseLeave = (e)=>{\n                if (!isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e, 'mouse');\n            };\n        }\n        return {\n            hoverProps: hoverProps,\n            triggerHoverEnd: triggerHoverEnd\n        };\n    }, [\n        onHoverStart,\n        onHoverChange,\n        onHoverEnd,\n        isDisabled,\n        state,\n        addGlobalListener,\n        removeAllGlobalListeners\n    ]);\n    (0, $AWxnT$useEffect)(()=>{\n        // Call the triggerHoverEnd as soon as isDisabled changes to true\n        // Safe to call triggerHoverEnd, it will early return if we aren't currently hovering\n        if (isDisabled) triggerHoverEnd({\n            currentTarget: state.target\n        }, state.pointerType);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        isDisabled\n    ]);\n    return {\n        hoverProps: hoverProps,\n        isHovered: isHovered\n    };\n}\n\n\nexport {$6179b936705e76d3$export$ae780daf29e6d456 as useHover};\n//# sourceMappingURL=useHover.module.js.map\n","import {useEffectEvent as $ispOf$useEffectEvent, getOwnerDocument as $ispOf$getOwnerDocument} from \"@react-aria/utils\";\nimport {useRef as $ispOf$useRef, useEffect as $ispOf$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\nfunction $e0b6e0b68ec7f50f$export$872b660ac5a1ff98(props) {\n    let { ref: ref, onInteractOutside: onInteractOutside, isDisabled: isDisabled, onInteractOutsideStart: onInteractOutsideStart } = props;\n    let stateRef = (0, $ispOf$useRef)({\n        isPointerDown: false,\n        ignoreEmulatedMouseEvents: false\n    });\n    let onPointerDown = (0, $ispOf$useEffectEvent)((e)=>{\n        if (onInteractOutside && $e0b6e0b68ec7f50f$var$isValidEvent(e, ref)) {\n            if (onInteractOutsideStart) onInteractOutsideStart(e);\n            stateRef.current.isPointerDown = true;\n        }\n    });\n    let triggerInteractOutside = (0, $ispOf$useEffectEvent)((e)=>{\n        if (onInteractOutside) onInteractOutside(e);\n    });\n    (0, $ispOf$useEffect)(()=>{\n        let state = stateRef.current;\n        if (isDisabled) return;\n        const element = ref.current;\n        const documentObject = (0, $ispOf$getOwnerDocument)(element);\n        // Use pointer events if available. Otherwise, fall back to mouse and touch events.\n        if (typeof PointerEvent !== 'undefined') {\n            let onClick = (e)=>{\n                if (state.isPointerDown && $e0b6e0b68ec7f50f$var$isValidEvent(e, ref)) triggerInteractOutside(e);\n                state.isPointerDown = false;\n            };\n            // changing these to capture phase fixed combobox\n            // Use click instead of pointerup to avoid Android Chrome issue\n            // https://issues.chromium.org/issues/40732224\n            documentObject.addEventListener('pointerdown', onPointerDown, true);\n            documentObject.addEventListener('click', onClick, true);\n            return ()=>{\n                documentObject.removeEventListener('pointerdown', onPointerDown, true);\n                documentObject.removeEventListener('click', onClick, true);\n            };\n        } else if (process.env.NODE_ENV === 'test') {\n            let onMouseUp = (e)=>{\n                if (state.ignoreEmulatedMouseEvents) state.ignoreEmulatedMouseEvents = false;\n                else if (state.isPointerDown && $e0b6e0b68ec7f50f$var$isValidEvent(e, ref)) triggerInteractOutside(e);\n                state.isPointerDown = false;\n            };\n            let onTouchEnd = (e)=>{\n                state.ignoreEmulatedMouseEvents = true;\n                if (state.isPointerDown && $e0b6e0b68ec7f50f$var$isValidEvent(e, ref)) triggerInteractOutside(e);\n                state.isPointerDown = false;\n            };\n            documentObject.addEventListener('mousedown', onPointerDown, true);\n            documentObject.addEventListener('mouseup', onMouseUp, true);\n            documentObject.addEventListener('touchstart', onPointerDown, true);\n            documentObject.addEventListener('touchend', onTouchEnd, true);\n            return ()=>{\n                documentObject.removeEventListener('mousedown', onPointerDown, true);\n                documentObject.removeEventListener('mouseup', onMouseUp, true);\n                documentObject.removeEventListener('touchstart', onPointerDown, true);\n                documentObject.removeEventListener('touchend', onTouchEnd, true);\n            };\n        }\n    }, [\n        ref,\n        isDisabled\n    ]);\n}\nfunction $e0b6e0b68ec7f50f$var$isValidEvent(event, ref) {\n    if (event.button > 0) return false;\n    if (event.target) {\n        // if the event target is no longer in the document, ignore\n        const ownerDocument = event.target.ownerDocument;\n        if (!ownerDocument || !ownerDocument.documentElement.contains(event.target)) return false;\n        // If the target is within a top layer element (e.g. toasts), ignore.\n        if (event.target.closest('[data-react-aria-top-layer]')) return false;\n    }\n    if (!ref.current) return false;\n    // When the event source is inside a Shadow DOM, event.target is just the shadow root.\n    // Using event.composedPath instead means we can get the actual element inside the shadow root.\n    // This only works if the shadow root is open, there is no way to detect if it is closed.\n    // If the event composed path contains the ref, interaction is inside.\n    return !event.composedPath().includes(ref.current);\n}\n\n\nexport {$e0b6e0b68ec7f50f$export$872b660ac5a1ff98 as useInteractOutside};\n//# sourceMappingURL=useInteractOutside.module.js.map\n","import {usePress as $f6c31cce2adf654f$export$45712eceda6fad21} from \"./usePress.mjs\";\nimport {useGlobalListeners as $4k2kv$useGlobalListeners, getOwnerDocument as $4k2kv$getOwnerDocument, focusWithoutScrolling as $4k2kv$focusWithoutScrolling, useDescription as $4k2kv$useDescription, mergeProps as $4k2kv$mergeProps} from \"@react-aria/utils\";\nimport {useRef as $4k2kv$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $8a26561d2877236e$var$DEFAULT_THRESHOLD = 500;\nfunction $8a26561d2877236e$export$c24ed0104d07eab9(props) {\n    let { isDisabled: isDisabled, onLongPressStart: onLongPressStart, onLongPressEnd: onLongPressEnd, onLongPress: onLongPress, threshold: threshold = $8a26561d2877236e$var$DEFAULT_THRESHOLD, accessibilityDescription: accessibilityDescription } = props;\n    const timeRef = (0, $4k2kv$useRef)(undefined);\n    let { addGlobalListener: addGlobalListener, removeGlobalListener: removeGlobalListener } = (0, $4k2kv$useGlobalListeners)();\n    let { pressProps: pressProps } = (0, $f6c31cce2adf654f$export$45712eceda6fad21)({\n        isDisabled: isDisabled,\n        onPressStart (e) {\n            e.continuePropagation();\n            if (e.pointerType === 'mouse' || e.pointerType === 'touch') {\n                if (onLongPressStart) onLongPressStart({\n                    ...e,\n                    type: 'longpressstart'\n                });\n                timeRef.current = setTimeout(()=>{\n                    // Prevent other usePress handlers from also handling this event.\n                    e.target.dispatchEvent(new PointerEvent('pointercancel', {\n                        bubbles: true\n                    }));\n                    // Ensure target is focused. On touch devices, browsers typically focus on pointer up.\n                    if ((0, $4k2kv$getOwnerDocument)(e.target).activeElement !== e.target) (0, $4k2kv$focusWithoutScrolling)(e.target);\n                    if (onLongPress) onLongPress({\n                        ...e,\n                        type: 'longpress'\n                    });\n                    timeRef.current = undefined;\n                }, threshold);\n                // Prevent context menu, which may be opened on long press on touch devices\n                if (e.pointerType === 'touch') {\n                    let onContextMenu = (e)=>{\n                        e.preventDefault();\n                    };\n                    addGlobalListener(e.target, 'contextmenu', onContextMenu, {\n                        once: true\n                    });\n                    addGlobalListener(window, 'pointerup', ()=>{\n                        // If no contextmenu event is fired quickly after pointerup, remove the handler\n                        // so future context menu events outside a long press are not prevented.\n                        setTimeout(()=>{\n                            removeGlobalListener(e.target, 'contextmenu', onContextMenu);\n                        }, 30);\n                    }, {\n                        once: true\n                    });\n                }\n            }\n        },\n        onPressEnd (e) {\n            if (timeRef.current) clearTimeout(timeRef.current);\n            if (onLongPressEnd && (e.pointerType === 'mouse' || e.pointerType === 'touch')) onLongPressEnd({\n                ...e,\n                type: 'longpressend'\n            });\n        }\n    });\n    let descriptionProps = (0, $4k2kv$useDescription)(onLongPress && !isDisabled ? accessibilityDescription : undefined);\n    return {\n        longPressProps: (0, $4k2kv$mergeProps)(pressProps, descriptionProps)\n    };\n}\n\n\nexport {$8a26561d2877236e$export$c24ed0104d07eab9 as useLongPress};\n//# sourceMappingURL=useLongPress.module.js.map\n","import {useLayoutEffect as $cgawC$useLayoutEffect, getActiveElement as $cgawC$getActiveElement, getOwnerDocument as $cgawC$getOwnerDocument, getEventTarget as $cgawC$getEventTarget, isAndroid as $cgawC$isAndroid, isChrome as $cgawC$isChrome, isTabbable as $cgawC$isTabbable, isFocusable as $cgawC$isFocusable, createShadowTreeWalker as $cgawC$createShadowTreeWalker} from \"@react-aria/utils\";\nimport {getInteractionModality as $cgawC$getInteractionModality, focusSafely as $cgawC$focusSafely} from \"@react-aria/interactions\";\nimport $cgawC$react, {useRef as $cgawC$useRef, useContext as $cgawC$useContext, useMemo as $cgawC$useMemo, useEffect as $cgawC$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $9bf71ea28793e738$var$FocusContext = /*#__PURE__*/ (0, $cgawC$react).createContext(null);\nconst $9bf71ea28793e738$var$RESTORE_FOCUS_EVENT = 'react-aria-focus-scope-restore';\nlet $9bf71ea28793e738$var$activeScope = null;\nfunction $9bf71ea28793e738$export$20e40289641fbbb6(props) {\n    let { children: children, contain: contain, restoreFocus: restoreFocus, autoFocus: autoFocus } = props;\n    let startRef = (0, $cgawC$useRef)(null);\n    let endRef = (0, $cgawC$useRef)(null);\n    let scopeRef = (0, $cgawC$useRef)([]);\n    let { parentNode: parentNode } = (0, $cgawC$useContext)($9bf71ea28793e738$var$FocusContext) || {};\n    // Create a tree node here so we can add children to it even before it is added to the tree.\n    let node = (0, $cgawC$useMemo)(()=>new $9bf71ea28793e738$var$TreeNode({\n            scopeRef: scopeRef\n        }), [\n        scopeRef\n    ]);\n    (0, $cgawC$useLayoutEffect)(()=>{\n        // If a new scope mounts outside the active scope, (e.g. DialogContainer launched from a menu),\n        // use the active scope as the parent instead of the parent from context. Layout effects run bottom\n        // up, so if the parent is not yet added to the tree, don't do this. Only the outer-most FocusScope\n        // that is being added should get the activeScope as its parent.\n        let parent = parentNode || $9bf71ea28793e738$export$d06fae2ee68b101e.root;\n        if ($9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(parent.scopeRef) && $9bf71ea28793e738$var$activeScope && !$9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, parent.scopeRef)) {\n            let activeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);\n            if (activeNode) parent = activeNode;\n        }\n        // Add the node to the parent, and to the tree.\n        parent.addChild(node);\n        $9bf71ea28793e738$export$d06fae2ee68b101e.addNode(node);\n    }, [\n        node,\n        parentNode\n    ]);\n    (0, $cgawC$useLayoutEffect)(()=>{\n        let node = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n        if (node) node.contain = !!contain;\n    }, [\n        contain\n    ]);\n    (0, $cgawC$useLayoutEffect)(()=>{\n        var _startRef_current;\n        // Find all rendered nodes between the sentinels and add them to the scope.\n        let node = (_startRef_current = startRef.current) === null || _startRef_current === void 0 ? void 0 : _startRef_current.nextSibling;\n        let nodes = [];\n        let stopPropagation = (e)=>e.stopPropagation();\n        while(node && node !== endRef.current){\n            nodes.push(node);\n            // Stop custom restore focus event from propagating to parent focus scopes.\n            node.addEventListener($9bf71ea28793e738$var$RESTORE_FOCUS_EVENT, stopPropagation);\n            node = node.nextSibling;\n        }\n        scopeRef.current = nodes;\n        return ()=>{\n            for (let node of nodes)node.removeEventListener($9bf71ea28793e738$var$RESTORE_FOCUS_EVENT, stopPropagation);\n        };\n    }, [\n        children\n    ]);\n    $9bf71ea28793e738$var$useActiveScopeTracker(scopeRef, restoreFocus, contain);\n    $9bf71ea28793e738$var$useFocusContainment(scopeRef, contain);\n    $9bf71ea28793e738$var$useRestoreFocus(scopeRef, restoreFocus, contain);\n    $9bf71ea28793e738$var$useAutoFocus(scopeRef, autoFocus);\n    // This needs to be an effect so that activeScope is updated after the FocusScope tree is complete.\n    // It cannot be a useLayoutEffect because the parent of this node hasn't been attached in the tree yet.\n    (0, $cgawC$useEffect)(()=>{\n        const activeElement = (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined));\n        let scope = null;\n        if ($9bf71ea28793e738$var$isElementInScope(activeElement, scopeRef.current)) {\n            // We need to traverse the focusScope tree and find the bottom most scope that\n            // contains the active element and set that as the activeScope.\n            for (let node of $9bf71ea28793e738$export$d06fae2ee68b101e.traverse())if (node.scopeRef && $9bf71ea28793e738$var$isElementInScope(activeElement, node.scopeRef.current)) scope = node;\n            if (scope === $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef)) $9bf71ea28793e738$var$activeScope = scope.scopeRef;\n        }\n    }, [\n        scopeRef\n    ]);\n    // This layout effect cleanup is so that the tree node is removed synchronously with react before the RAF\n    // in useRestoreFocus cleanup runs.\n    (0, $cgawC$useLayoutEffect)(()=>{\n        return ()=>{\n            var _focusScopeTree_getTreeNode_parent, _focusScopeTree_getTreeNode;\n            var _focusScopeTree_getTreeNode_parent_scopeRef;\n            // Scope may have been re-parented.\n            let parentScope = (_focusScopeTree_getTreeNode_parent_scopeRef = (_focusScopeTree_getTreeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef)) === null || _focusScopeTree_getTreeNode === void 0 ? void 0 : (_focusScopeTree_getTreeNode_parent = _focusScopeTree_getTreeNode.parent) === null || _focusScopeTree_getTreeNode_parent === void 0 ? void 0 : _focusScopeTree_getTreeNode_parent.scopeRef) !== null && _focusScopeTree_getTreeNode_parent_scopeRef !== void 0 ? _focusScopeTree_getTreeNode_parent_scopeRef : null;\n            if ((scopeRef === $9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope(scopeRef, $9bf71ea28793e738$var$activeScope)) && (!parentScope || $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(parentScope))) $9bf71ea28793e738$var$activeScope = parentScope;\n            $9bf71ea28793e738$export$d06fae2ee68b101e.removeTreeNode(scopeRef);\n        };\n    }, [\n        scopeRef\n    ]);\n    let focusManager = (0, $cgawC$useMemo)(()=>$9bf71ea28793e738$var$createFocusManagerForScope(scopeRef), []);\n    let value = (0, $cgawC$useMemo)(()=>({\n            focusManager: focusManager,\n            parentNode: node\n        }), [\n        node,\n        focusManager\n    ]);\n    return /*#__PURE__*/ (0, $cgawC$react).createElement($9bf71ea28793e738$var$FocusContext.Provider, {\n        value: value\n    }, /*#__PURE__*/ (0, $cgawC$react).createElement(\"span\", {\n        \"data-focus-scope-start\": true,\n        hidden: true,\n        ref: startRef\n    }), children, /*#__PURE__*/ (0, $cgawC$react).createElement(\"span\", {\n        \"data-focus-scope-end\": true,\n        hidden: true,\n        ref: endRef\n    }));\n}\nfunction $9bf71ea28793e738$export$10c5169755ce7bd7() {\n    var _useContext;\n    return (_useContext = (0, $cgawC$useContext)($9bf71ea28793e738$var$FocusContext)) === null || _useContext === void 0 ? void 0 : _useContext.focusManager;\n}\nfunction $9bf71ea28793e738$var$createFocusManagerForScope(scopeRef) {\n    return {\n        focusNext (opts = {}) {\n            let scope = scopeRef.current;\n            let { from: from, tabbable: tabbable, wrap: wrap, accept: accept } = opts;\n            var _scope_;\n            let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)((_scope_ = scope[0]) !== null && _scope_ !== void 0 ? _scope_ : undefined));\n            let sentinel = scope[0].previousElementSibling;\n            let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n            let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n                tabbable: tabbable,\n                accept: accept\n            }, scope);\n            walker.currentNode = $9bf71ea28793e738$var$isElementInScope(node, scope) ? node : sentinel;\n            let nextNode = walker.nextNode();\n            if (!nextNode && wrap) {\n                walker.currentNode = sentinel;\n                nextNode = walker.nextNode();\n            }\n            if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n            return nextNode;\n        },\n        focusPrevious (opts = {}) {\n            let scope = scopeRef.current;\n            let { from: from, tabbable: tabbable, wrap: wrap, accept: accept } = opts;\n            var _scope_;\n            let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)((_scope_ = scope[0]) !== null && _scope_ !== void 0 ? _scope_ : undefined));\n            let sentinel = scope[scope.length - 1].nextElementSibling;\n            let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n            let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n                tabbable: tabbable,\n                accept: accept\n            }, scope);\n            walker.currentNode = $9bf71ea28793e738$var$isElementInScope(node, scope) ? node : sentinel;\n            let previousNode = walker.previousNode();\n            if (!previousNode && wrap) {\n                walker.currentNode = sentinel;\n                previousNode = walker.previousNode();\n            }\n            if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);\n            return previousNode;\n        },\n        focusFirst (opts = {}) {\n            let scope = scopeRef.current;\n            let { tabbable: tabbable, accept: accept } = opts;\n            let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n            let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n                tabbable: tabbable,\n                accept: accept\n            }, scope);\n            walker.currentNode = scope[0].previousElementSibling;\n            let nextNode = walker.nextNode();\n            if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n            return nextNode;\n        },\n        focusLast (opts = {}) {\n            let scope = scopeRef.current;\n            let { tabbable: tabbable, accept: accept } = opts;\n            let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n            let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n                tabbable: tabbable,\n                accept: accept\n            }, scope);\n            walker.currentNode = scope[scope.length - 1].nextElementSibling;\n            let previousNode = walker.previousNode();\n            if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);\n            return previousNode;\n        }\n    };\n}\nfunction $9bf71ea28793e738$var$getScopeRoot(scope) {\n    return scope[0].parentElement;\n}\nfunction $9bf71ea28793e738$var$shouldContainFocus(scopeRef) {\n    let scope = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);\n    while(scope && scope.scopeRef !== scopeRef){\n        if (scope.contain) return false;\n        scope = scope.parent;\n    }\n    return true;\n}\nfunction $9bf71ea28793e738$var$isTabbableRadio(element) {\n    if (element.checked) return true;\n    let radios = [];\n    if (!element.form) radios = [\n        ...(0, $cgawC$getOwnerDocument)(element).querySelectorAll(`input[type=\"radio\"][name=\"${CSS.escape(element.name)}\"]`)\n    ].filter((radio)=>!radio.form);\n    else {\n        var _element_form_elements, _element_form;\n        let radioList = (_element_form = element.form) === null || _element_form === void 0 ? void 0 : (_element_form_elements = _element_form.elements) === null || _element_form_elements === void 0 ? void 0 : _element_form_elements.namedItem(element.name);\n        radios = [\n            ...radioList !== null && radioList !== void 0 ? radioList : []\n        ];\n    }\n    if (!radios) return false;\n    let anyChecked = radios.some((radio)=>radio.checked);\n    return !anyChecked;\n}\nfunction $9bf71ea28793e738$var$useFocusContainment(scopeRef, contain) {\n    let focusedNode = (0, $cgawC$useRef)(undefined);\n    let raf = (0, $cgawC$useRef)(undefined);\n    (0, $cgawC$useLayoutEffect)(()=>{\n        let scope = scopeRef.current;\n        if (!contain) {\n            // if contain was changed, then we should cancel any ongoing waits to pull focus back into containment\n            if (raf.current) {\n                cancelAnimationFrame(raf.current);\n                raf.current = undefined;\n            }\n            return;\n        }\n        const ownerDocument = (0, $cgawC$getOwnerDocument)(scope ? scope[0] : undefined);\n        // Handle the Tab key to contain focus within the scope\n        let onKeyDown = (e)=>{\n            if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || !$9bf71ea28793e738$var$shouldContainFocus(scopeRef) || e.isComposing) return;\n            let focusedElement = (0, $cgawC$getActiveElement)(ownerDocument);\n            let scope = scopeRef.current;\n            if (!scope || !$9bf71ea28793e738$var$isElementInScope(focusedElement, scope)) return;\n            let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n            let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n                tabbable: true\n            }, scope);\n            if (!focusedElement) return;\n            walker.currentNode = focusedElement;\n            let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n            if (!nextElement) {\n                walker.currentNode = e.shiftKey ? scope[scope.length - 1].nextElementSibling : scope[0].previousElementSibling;\n                nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n            }\n            e.preventDefault();\n            if (nextElement) $9bf71ea28793e738$var$focusElement(nextElement, true);\n        };\n        let onFocus = (e)=>{\n            // If focusing an element in a child scope of the currently active scope, the child becomes active.\n            // Moving out of the active scope to an ancestor is not allowed.\n            if ((!$9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, scopeRef)) && $9bf71ea28793e738$var$isElementInScope((0, $cgawC$getEventTarget)(e), scopeRef.current)) {\n                $9bf71ea28793e738$var$activeScope = scopeRef;\n                focusedNode.current = (0, $cgawC$getEventTarget)(e);\n            } else if ($9bf71ea28793e738$var$shouldContainFocus(scopeRef) && !$9bf71ea28793e738$var$isElementInChildScope((0, $cgawC$getEventTarget)(e), scopeRef)) {\n                // If a focus event occurs outside the active scope (e.g. user tabs from browser location bar),\n                // restore focus to the previously focused node or the first tabbable element in the active scope.\n                if (focusedNode.current) focusedNode.current.focus();\n                else if ($9bf71ea28793e738$var$activeScope && $9bf71ea28793e738$var$activeScope.current) $9bf71ea28793e738$var$focusFirstInScope($9bf71ea28793e738$var$activeScope.current);\n            } else if ($9bf71ea28793e738$var$shouldContainFocus(scopeRef)) focusedNode.current = (0, $cgawC$getEventTarget)(e);\n        };\n        let onBlur = (e)=>{\n            // Firefox doesn't shift focus back to the Dialog properly without this\n            if (raf.current) cancelAnimationFrame(raf.current);\n            raf.current = requestAnimationFrame(()=>{\n                // Patches infinite focus coersion loop for Android Talkback where the user isn't able to move the virtual cursor\n                // if within a containing focus scope. Bug filed against Chrome: https://issuetracker.google.com/issues/384844019.\n                // Note that this means focus can leave focus containing modals due to this, but it is isolated to Chrome Talkback.\n                let modality = (0, $cgawC$getInteractionModality)();\n                let shouldSkipFocusRestore = (modality === 'virtual' || modality === null) && (0, $cgawC$isAndroid)() && (0, $cgawC$isChrome)();\n                // Use document.activeElement instead of e.relatedTarget so we can tell if user clicked into iframe\n                let activeElement = (0, $cgawC$getActiveElement)(ownerDocument);\n                if (!shouldSkipFocusRestore && activeElement && $9bf71ea28793e738$var$shouldContainFocus(scopeRef) && !$9bf71ea28793e738$var$isElementInChildScope(activeElement, scopeRef)) {\n                    $9bf71ea28793e738$var$activeScope = scopeRef;\n                    let target = (0, $cgawC$getEventTarget)(e);\n                    if (target && target.isConnected) {\n                        var _focusedNode_current;\n                        focusedNode.current = target;\n                        (_focusedNode_current = focusedNode.current) === null || _focusedNode_current === void 0 ? void 0 : _focusedNode_current.focus();\n                    } else if ($9bf71ea28793e738$var$activeScope.current) $9bf71ea28793e738$var$focusFirstInScope($9bf71ea28793e738$var$activeScope.current);\n                }\n            });\n        };\n        ownerDocument.addEventListener('keydown', onKeyDown, false);\n        ownerDocument.addEventListener('focusin', onFocus, false);\n        scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n        scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusout', onBlur, false));\n        return ()=>{\n            ownerDocument.removeEventListener('keydown', onKeyDown, false);\n            ownerDocument.removeEventListener('focusin', onFocus, false);\n            scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n            scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusout', onBlur, false));\n        };\n    }, [\n        scopeRef,\n        contain\n    ]);\n    // This is a useLayoutEffect so it is guaranteed to run before our async synthetic blur\n    (0, $cgawC$useLayoutEffect)(()=>{\n        return ()=>{\n            if (raf.current) cancelAnimationFrame(raf.current);\n        };\n    }, [\n        raf\n    ]);\n}\nfunction $9bf71ea28793e738$var$isElementInAnyScope(element) {\n    return $9bf71ea28793e738$var$isElementInChildScope(element);\n}\nfunction $9bf71ea28793e738$var$isElementInScope(element, scope) {\n    if (!element) return false;\n    if (!scope) return false;\n    return scope.some((node)=>node.contains(element));\n}\nfunction $9bf71ea28793e738$var$isElementInChildScope(element, scope = null) {\n    // If the element is within a top layer element (e.g. toasts), always allow moving focus there.\n    if (element instanceof Element && element.closest('[data-react-aria-top-layer]')) return true;\n    // node.contains in isElementInScope covers child scopes that are also DOM children,\n    // but does not cover child scopes in portals.\n    for (let { scopeRef: s } of $9bf71ea28793e738$export$d06fae2ee68b101e.traverse($9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scope))){\n        if (s && $9bf71ea28793e738$var$isElementInScope(element, s.current)) return true;\n    }\n    return false;\n}\nfunction $9bf71ea28793e738$export$1258395f99bf9cbf(element) {\n    return $9bf71ea28793e738$var$isElementInChildScope(element, $9bf71ea28793e738$var$activeScope);\n}\nfunction $9bf71ea28793e738$var$isAncestorScope(ancestor, scope) {\n    var _focusScopeTree_getTreeNode;\n    let parent = (_focusScopeTree_getTreeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scope)) === null || _focusScopeTree_getTreeNode === void 0 ? void 0 : _focusScopeTree_getTreeNode.parent;\n    while(parent){\n        if (parent.scopeRef === ancestor) return true;\n        parent = parent.parent;\n    }\n    return false;\n}\nfunction $9bf71ea28793e738$var$focusElement(element, scroll = false) {\n    if (element != null && !scroll) try {\n        (0, $cgawC$focusSafely)(element);\n    } catch  {\n    // ignore\n    }\n    else if (element != null) try {\n        element.focus();\n    } catch  {\n    // ignore\n    }\n}\nfunction $9bf71ea28793e738$var$getFirstInScope(scope, tabbable = true) {\n    let sentinel = scope[0].previousElementSibling;\n    let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n    let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n        tabbable: tabbable\n    }, scope);\n    walker.currentNode = sentinel;\n    let nextNode = walker.nextNode();\n    // If the scope does not contain a tabbable element, use the first focusable element.\n    if (tabbable && !nextNode) {\n        scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n        walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n            tabbable: false\n        }, scope);\n        walker.currentNode = sentinel;\n        nextNode = walker.nextNode();\n    }\n    return nextNode;\n}\nfunction $9bf71ea28793e738$var$focusFirstInScope(scope, tabbable = true) {\n    $9bf71ea28793e738$var$focusElement($9bf71ea28793e738$var$getFirstInScope(scope, tabbable));\n}\nfunction $9bf71ea28793e738$var$useAutoFocus(scopeRef, autoFocus) {\n    const autoFocusRef = (0, $cgawC$react).useRef(autoFocus);\n    (0, $cgawC$useEffect)(()=>{\n        if (autoFocusRef.current) {\n            $9bf71ea28793e738$var$activeScope = scopeRef;\n            const ownerDocument = (0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined);\n            if (!$9bf71ea28793e738$var$isElementInScope((0, $cgawC$getActiveElement)(ownerDocument), $9bf71ea28793e738$var$activeScope.current) && scopeRef.current) $9bf71ea28793e738$var$focusFirstInScope(scopeRef.current);\n        }\n        autoFocusRef.current = false;\n    }, [\n        scopeRef\n    ]);\n}\nfunction $9bf71ea28793e738$var$useActiveScopeTracker(scopeRef, restore, contain) {\n    // tracks the active scope, in case restore and contain are both false.\n    // if either are true, this is tracked in useRestoreFocus or useFocusContainment.\n    (0, $cgawC$useLayoutEffect)(()=>{\n        if (restore || contain) return;\n        let scope = scopeRef.current;\n        const ownerDocument = (0, $cgawC$getOwnerDocument)(scope ? scope[0] : undefined);\n        let onFocus = (e)=>{\n            let target = (0, $cgawC$getEventTarget)(e);\n            if ($9bf71ea28793e738$var$isElementInScope(target, scopeRef.current)) $9bf71ea28793e738$var$activeScope = scopeRef;\n            else if (!$9bf71ea28793e738$var$isElementInAnyScope(target)) $9bf71ea28793e738$var$activeScope = null;\n        };\n        ownerDocument.addEventListener('focusin', onFocus, false);\n        scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n        return ()=>{\n            ownerDocument.removeEventListener('focusin', onFocus, false);\n            scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n        };\n    }, [\n        scopeRef,\n        restore,\n        contain\n    ]);\n}\nfunction $9bf71ea28793e738$var$shouldRestoreFocus(scopeRef) {\n    let scope = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);\n    while(scope && scope.scopeRef !== scopeRef){\n        if (scope.nodeToRestore) return false;\n        scope = scope.parent;\n    }\n    return (scope === null || scope === void 0 ? void 0 : scope.scopeRef) === scopeRef;\n}\nfunction $9bf71ea28793e738$var$useRestoreFocus(scopeRef, restoreFocus, contain) {\n    // create a ref during render instead of useLayoutEffect so the active element is saved before a child with autoFocus=true mounts.\n    // eslint-disable-next-line no-restricted-globals\n    const nodeToRestoreRef = (0, $cgawC$useRef)(typeof document !== 'undefined' ? (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined)) : null);\n    // restoring scopes should all track if they are active regardless of contain, but contain already tracks it plus logic to contain the focus\n    // restoring-non-containing scopes should only care if they become active so they can perform the restore\n    (0, $cgawC$useLayoutEffect)(()=>{\n        let scope = scopeRef.current;\n        const ownerDocument = (0, $cgawC$getOwnerDocument)(scope ? scope[0] : undefined);\n        if (!restoreFocus || contain) return;\n        let onFocus = ()=>{\n            // If focusing an element in a child scope of the currently active scope, the child becomes active.\n            // Moving out of the active scope to an ancestor is not allowed.\n            if ((!$9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, scopeRef)) && $9bf71ea28793e738$var$isElementInScope((0, $cgawC$getActiveElement)(ownerDocument), scopeRef.current)) $9bf71ea28793e738$var$activeScope = scopeRef;\n        };\n        ownerDocument.addEventListener('focusin', onFocus, false);\n        scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n        return ()=>{\n            ownerDocument.removeEventListener('focusin', onFocus, false);\n            scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n        };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        scopeRef,\n        contain\n    ]);\n    (0, $cgawC$useLayoutEffect)(()=>{\n        const ownerDocument = (0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined);\n        if (!restoreFocus) return;\n        // Handle the Tab key so that tabbing out of the scope goes to the next element\n        // after the node that had focus when the scope mounted. This is important when\n        // using portals for overlays, so that focus goes to the expected element when\n        // tabbing out of the overlay.\n        let onKeyDown = (e)=>{\n            if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || !$9bf71ea28793e738$var$shouldContainFocus(scopeRef) || e.isComposing) return;\n            let focusedElement = ownerDocument.activeElement;\n            if (!$9bf71ea28793e738$var$isElementInChildScope(focusedElement, scopeRef) || !$9bf71ea28793e738$var$shouldRestoreFocus(scopeRef)) return;\n            let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n            if (!treeNode) return;\n            let nodeToRestore = treeNode.nodeToRestore;\n            // Create a DOM tree walker that matches all tabbable elements\n            let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(ownerDocument.body, {\n                tabbable: true\n            });\n            // Find the next tabbable element after the currently focused element\n            walker.currentNode = focusedElement;\n            let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n            if (!nodeToRestore || !nodeToRestore.isConnected || nodeToRestore === ownerDocument.body) {\n                nodeToRestore = undefined;\n                treeNode.nodeToRestore = undefined;\n            }\n            // If there is no next element, or it is outside the current scope, move focus to the\n            // next element after the node to restore to instead.\n            if ((!nextElement || !$9bf71ea28793e738$var$isElementInChildScope(nextElement, scopeRef)) && nodeToRestore) {\n                walker.currentNode = nodeToRestore;\n                // Skip over elements within the scope, in case the scope immediately follows the node to restore.\n                do nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n                while ($9bf71ea28793e738$var$isElementInChildScope(nextElement, scopeRef));\n                e.preventDefault();\n                e.stopPropagation();\n                if (nextElement) $9bf71ea28793e738$var$focusElement(nextElement, true);\n                else // If there is no next element and the nodeToRestore isn't within a FocusScope (i.e. we are leaving the top level focus scope)\n                // then move focus to the body.\n                // Otherwise restore focus to the nodeToRestore (e.g menu within a popover -> tabbing to close the menu should move focus to menu trigger)\n                if (!$9bf71ea28793e738$var$isElementInAnyScope(nodeToRestore)) focusedElement.blur();\n                else $9bf71ea28793e738$var$focusElement(nodeToRestore, true);\n            }\n        };\n        if (!contain) ownerDocument.addEventListener('keydown', onKeyDown, true);\n        return ()=>{\n            if (!contain) ownerDocument.removeEventListener('keydown', onKeyDown, true);\n        };\n    }, [\n        scopeRef,\n        restoreFocus,\n        contain\n    ]);\n    // useLayoutEffect instead of useEffect so the active element is saved synchronously instead of asynchronously.\n    (0, $cgawC$useLayoutEffect)(()=>{\n        const ownerDocument = (0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined);\n        if (!restoreFocus) return;\n        let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n        if (!treeNode) return;\n        var _nodeToRestoreRef_current;\n        treeNode.nodeToRestore = (_nodeToRestoreRef_current = nodeToRestoreRef.current) !== null && _nodeToRestoreRef_current !== void 0 ? _nodeToRestoreRef_current : undefined;\n        return ()=>{\n            let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n            if (!treeNode) return;\n            let nodeToRestore = treeNode.nodeToRestore;\n            // if we already lost focus to the body and this was the active scope, then we should attempt to restore\n            let activeElement = (0, $cgawC$getActiveElement)(ownerDocument);\n            if (restoreFocus && nodeToRestore && (activeElement && $9bf71ea28793e738$var$isElementInChildScope(activeElement, scopeRef) || activeElement === ownerDocument.body && $9bf71ea28793e738$var$shouldRestoreFocus(scopeRef))) {\n                // freeze the focusScopeTree so it persists after the raf, otherwise during unmount nodes are removed from it\n                let clonedTree = $9bf71ea28793e738$export$d06fae2ee68b101e.clone();\n                requestAnimationFrame(()=>{\n                    // Only restore focus if we've lost focus to the body, the alternative is that focus has been purposefully moved elsewhere\n                    if (ownerDocument.activeElement === ownerDocument.body) {\n                        // look up the tree starting with our scope to find a nodeToRestore still in the DOM\n                        let treeNode = clonedTree.getTreeNode(scopeRef);\n                        while(treeNode){\n                            if (treeNode.nodeToRestore && treeNode.nodeToRestore.isConnected) {\n                                $9bf71ea28793e738$var$restoreFocusToElement(treeNode.nodeToRestore);\n                                return;\n                            }\n                            treeNode = treeNode.parent;\n                        }\n                        // If no nodeToRestore was found, focus the first element in the nearest\n                        // ancestor scope that is still in the tree.\n                        treeNode = clonedTree.getTreeNode(scopeRef);\n                        while(treeNode){\n                            if (treeNode.scopeRef && treeNode.scopeRef.current && $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(treeNode.scopeRef)) {\n                                let node = $9bf71ea28793e738$var$getFirstInScope(treeNode.scopeRef.current, true);\n                                $9bf71ea28793e738$var$restoreFocusToElement(node);\n                                return;\n                            }\n                            treeNode = treeNode.parent;\n                        }\n                    }\n                });\n            }\n        };\n    }, [\n        scopeRef,\n        restoreFocus\n    ]);\n}\nfunction $9bf71ea28793e738$var$restoreFocusToElement(node) {\n    // Dispatch a custom event that parent elements can intercept to customize focus restoration.\n    // For example, virtualized collection components reuse DOM elements, so the original element\n    // might still exist in the DOM but representing a different item.\n    if (node.dispatchEvent(new CustomEvent($9bf71ea28793e738$var$RESTORE_FOCUS_EVENT, {\n        bubbles: true,\n        cancelable: true\n    }))) $9bf71ea28793e738$var$focusElement(node);\n}\nfunction $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, opts, scope) {\n    let filter = (opts === null || opts === void 0 ? void 0 : opts.tabbable) ? (0, $cgawC$isTabbable) : (0, $cgawC$isFocusable);\n    // Ensure that root is an Element or fall back appropriately\n    let rootElement = (root === null || root === void 0 ? void 0 : root.nodeType) === Node.ELEMENT_NODE ? root : null;\n    // Determine the document to use\n    let doc = (0, $cgawC$getOwnerDocument)(rootElement);\n    // Create a TreeWalker, ensuring the root is an Element or Document\n    let walker = (0, $cgawC$createShadowTreeWalker)(doc, root || doc, NodeFilter.SHOW_ELEMENT, {\n        acceptNode (node) {\n            var _opts_from;\n            // Skip nodes inside the starting node.\n            if (opts === null || opts === void 0 ? void 0 : (_opts_from = opts.from) === null || _opts_from === void 0 ? void 0 : _opts_from.contains(node)) return NodeFilter.FILTER_REJECT;\n            if ((opts === null || opts === void 0 ? void 0 : opts.tabbable) && node.tagName === 'INPUT' && node.getAttribute('type') === 'radio') {\n                // If the radio is in a form, we can get all the other radios by name\n                if (!$9bf71ea28793e738$var$isTabbableRadio(node)) return NodeFilter.FILTER_REJECT;\n                // If the radio is in the same group as the current node and none are selected, we can skip it\n                if (walker.currentNode.tagName === 'INPUT' && walker.currentNode.type === 'radio' && walker.currentNode.name === node.name) return NodeFilter.FILTER_REJECT;\n            }\n            if (filter(node) && (!scope || $9bf71ea28793e738$var$isElementInScope(node, scope)) && (!(opts === null || opts === void 0 ? void 0 : opts.accept) || opts.accept(node))) return NodeFilter.FILTER_ACCEPT;\n            return NodeFilter.FILTER_SKIP;\n        }\n    });\n    if (opts === null || opts === void 0 ? void 0 : opts.from) walker.currentNode = opts.from;\n    return walker;\n}\nfunction $9bf71ea28793e738$export$c5251b9e124bf29(ref, defaultOptions = {}) {\n    return {\n        focusNext (opts = {}) {\n            let root = ref.current;\n            if (!root) return null;\n            let { from: from, tabbable: tabbable = defaultOptions.tabbable, wrap: wrap = defaultOptions.wrap, accept: accept = defaultOptions.accept } = opts;\n            let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(root));\n            let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n                tabbable: tabbable,\n                accept: accept\n            });\n            if (root.contains(node)) walker.currentNode = node;\n            let nextNode = walker.nextNode();\n            if (!nextNode && wrap) {\n                walker.currentNode = root;\n                nextNode = walker.nextNode();\n            }\n            if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n            return nextNode;\n        },\n        focusPrevious (opts = defaultOptions) {\n            let root = ref.current;\n            if (!root) return null;\n            let { from: from, tabbable: tabbable = defaultOptions.tabbable, wrap: wrap = defaultOptions.wrap, accept: accept = defaultOptions.accept } = opts;\n            let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(root));\n            let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n                tabbable: tabbable,\n                accept: accept\n            });\n            if (root.contains(node)) walker.currentNode = node;\n            else {\n                let next = $9bf71ea28793e738$var$last(walker);\n                if (next) $9bf71ea28793e738$var$focusElement(next, true);\n                return next !== null && next !== void 0 ? next : null;\n            }\n            let previousNode = walker.previousNode();\n            if (!previousNode && wrap) {\n                walker.currentNode = root;\n                let lastNode = $9bf71ea28793e738$var$last(walker);\n                if (!lastNode) // couldn't wrap\n                return null;\n                previousNode = lastNode;\n            }\n            if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);\n            return previousNode !== null && previousNode !== void 0 ? previousNode : null;\n        },\n        focusFirst (opts = defaultOptions) {\n            let root = ref.current;\n            if (!root) return null;\n            let { tabbable: tabbable = defaultOptions.tabbable, accept: accept = defaultOptions.accept } = opts;\n            let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n                tabbable: tabbable,\n                accept: accept\n            });\n            let nextNode = walker.nextNode();\n            if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n            return nextNode;\n        },\n        focusLast (opts = defaultOptions) {\n            let root = ref.current;\n            if (!root) return null;\n            let { tabbable: tabbable = defaultOptions.tabbable, accept: accept = defaultOptions.accept } = opts;\n            let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n                tabbable: tabbable,\n                accept: accept\n            });\n            let next = $9bf71ea28793e738$var$last(walker);\n            if (next) $9bf71ea28793e738$var$focusElement(next, true);\n            return next !== null && next !== void 0 ? next : null;\n        }\n    };\n}\nfunction $9bf71ea28793e738$var$last(walker) {\n    let next = undefined;\n    let last;\n    do {\n        last = walker.lastChild();\n        if (last) next = last;\n    }while (last);\n    return next;\n}\nclass $9bf71ea28793e738$var$Tree {\n    get size() {\n        return this.fastMap.size;\n    }\n    getTreeNode(data) {\n        return this.fastMap.get(data);\n    }\n    addTreeNode(scopeRef, parent, nodeToRestore) {\n        let parentNode = this.fastMap.get(parent !== null && parent !== void 0 ? parent : null);\n        if (!parentNode) return;\n        let node = new $9bf71ea28793e738$var$TreeNode({\n            scopeRef: scopeRef\n        });\n        parentNode.addChild(node);\n        node.parent = parentNode;\n        this.fastMap.set(scopeRef, node);\n        if (nodeToRestore) node.nodeToRestore = nodeToRestore;\n    }\n    addNode(node) {\n        this.fastMap.set(node.scopeRef, node);\n    }\n    removeTreeNode(scopeRef) {\n        // never remove the root\n        if (scopeRef === null) return;\n        let node = this.fastMap.get(scopeRef);\n        if (!node) return;\n        let parentNode = node.parent;\n        // when we remove a scope, check if any sibling scopes are trying to restore focus to something inside the scope we're removing\n        // if we are, then replace the siblings restore with the restore from the scope we're removing\n        for (let current of this.traverse())if (current !== node && node.nodeToRestore && current.nodeToRestore && node.scopeRef && node.scopeRef.current && $9bf71ea28793e738$var$isElementInScope(current.nodeToRestore, node.scopeRef.current)) current.nodeToRestore = node.nodeToRestore;\n        let children = node.children;\n        if (parentNode) {\n            parentNode.removeChild(node);\n            if (children.size > 0) children.forEach((child)=>parentNode && parentNode.addChild(child));\n        }\n        this.fastMap.delete(node.scopeRef);\n    }\n    // Pre Order Depth First\n    *traverse(node = this.root) {\n        if (node.scopeRef != null) yield node;\n        if (node.children.size > 0) for (let child of node.children)yield* this.traverse(child);\n    }\n    clone() {\n        var _node_parent;\n        let newTree = new $9bf71ea28793e738$var$Tree();\n        var _node_parent_scopeRef;\n        for (let node of this.traverse())newTree.addTreeNode(node.scopeRef, (_node_parent_scopeRef = (_node_parent = node.parent) === null || _node_parent === void 0 ? void 0 : _node_parent.scopeRef) !== null && _node_parent_scopeRef !== void 0 ? _node_parent_scopeRef : null, node.nodeToRestore);\n        return newTree;\n    }\n    constructor(){\n        this.fastMap = new Map();\n        this.root = new $9bf71ea28793e738$var$TreeNode({\n            scopeRef: null\n        });\n        this.fastMap.set(null, this.root);\n    }\n}\nclass $9bf71ea28793e738$var$TreeNode {\n    addChild(node) {\n        this.children.add(node);\n        node.parent = this;\n    }\n    removeChild(node) {\n        this.children.delete(node);\n        node.parent = undefined;\n    }\n    constructor(props){\n        this.children = new Set();\n        this.contain = false;\n        this.scopeRef = props.scopeRef;\n    }\n}\nlet $9bf71ea28793e738$export$d06fae2ee68b101e = new $9bf71ea28793e738$var$Tree();\n\n\nexport {$9bf71ea28793e738$export$20e40289641fbbb6 as FocusScope, $9bf71ea28793e738$export$d06fae2ee68b101e as focusScopeTree, $9bf71ea28793e738$export$10c5169755ce7bd7 as useFocusManager, $9bf71ea28793e738$export$2d6ec8fc375ceafa as getFocusableTreeWalker, $9bf71ea28793e738$export$1258395f99bf9cbf as isElementInChildOfActiveScope, $9bf71ea28793e738$export$c5251b9e124bf29 as createFocusManager};\n//# sourceMappingURL=FocusScope.module.js.map\n","import {isFocusVisible as $isWE5$isFocusVisible, useFocusVisibleListener as $isWE5$useFocusVisibleListener, useFocus as $isWE5$useFocus, useFocusWithin as $isWE5$useFocusWithin} from \"@react-aria/interactions\";\nimport {useRef as $isWE5$useRef, useState as $isWE5$useState, useCallback as $isWE5$useCallback} from \"react\";\n\n\n\nfunction $f7dceffc5ad7768b$export$4e328f61c538687f(props = {}) {\n    let { autoFocus: autoFocus = false, isTextInput: isTextInput, within: within } = props;\n    let state = (0, $isWE5$useRef)({\n        isFocused: false,\n        isFocusVisible: autoFocus || (0, $isWE5$isFocusVisible)()\n    });\n    let [isFocused, setFocused] = (0, $isWE5$useState)(false);\n    let [isFocusVisibleState, setFocusVisible] = (0, $isWE5$useState)(()=>state.current.isFocused && state.current.isFocusVisible);\n    let updateState = (0, $isWE5$useCallback)(()=>setFocusVisible(state.current.isFocused && state.current.isFocusVisible), []);\n    let onFocusChange = (0, $isWE5$useCallback)((isFocused)=>{\n        state.current.isFocused = isFocused;\n        setFocused(isFocused);\n        updateState();\n    }, [\n        updateState\n    ]);\n    (0, $isWE5$useFocusVisibleListener)((isFocusVisible)=>{\n        state.current.isFocusVisible = isFocusVisible;\n        updateState();\n    }, [], {\n        isTextInput: isTextInput\n    });\n    let { focusProps: focusProps } = (0, $isWE5$useFocus)({\n        isDisabled: within,\n        onFocusChange: onFocusChange\n    });\n    let { focusWithinProps: focusWithinProps } = (0, $isWE5$useFocusWithin)({\n        isDisabled: !within,\n        onFocusWithinChange: onFocusChange\n    });\n    return {\n        isFocused: isFocused,\n        isFocusVisible: isFocusVisibleState,\n        focusProps: within ? focusWithinProps : focusProps\n    };\n}\n\n\nexport {$f7dceffc5ad7768b$export$4e328f61c538687f as useFocusRing};\n//# sourceMappingURL=useFocusRing.module.js.map\n","import {getOwnerDocument as $hpDQO$getOwnerDocument, getActiveElement as $hpDQO$getActiveElement} from \"@react-aria/utils\";\n\n\nfunction $55f9b1ae81f22853$export$76e4e37e5339496d(to) {\n    let from = $55f9b1ae81f22853$export$759df0d867455a91((0, $hpDQO$getOwnerDocument)(to));\n    if (from !== to) {\n        if (from) $55f9b1ae81f22853$export$6c5dc7e81d2cc29a(from, to);\n        if (to) $55f9b1ae81f22853$export$2b35b76d2e30e129(to, from);\n    }\n}\nfunction $55f9b1ae81f22853$export$6c5dc7e81d2cc29a(from, to) {\n    from.dispatchEvent(new FocusEvent('blur', {\n        relatedTarget: to\n    }));\n    from.dispatchEvent(new FocusEvent('focusout', {\n        bubbles: true,\n        relatedTarget: to\n    }));\n}\nfunction $55f9b1ae81f22853$export$2b35b76d2e30e129(to, from) {\n    to.dispatchEvent(new FocusEvent('focus', {\n        relatedTarget: from\n    }));\n    to.dispatchEvent(new FocusEvent('focusin', {\n        bubbles: true,\n        relatedTarget: from\n    }));\n}\nfunction $55f9b1ae81f22853$export$759df0d867455a91(document) {\n    let activeElement = (0, $hpDQO$getActiveElement)(document);\n    let activeDescendant = activeElement === null || activeElement === void 0 ? void 0 : activeElement.getAttribute('aria-activedescendant');\n    if (activeDescendant) return document.getElementById(activeDescendant) || activeElement;\n    return activeElement;\n}\n\n\nexport {$55f9b1ae81f22853$export$76e4e37e5339496d as moveVirtualFocus, $55f9b1ae81f22853$export$759df0d867455a91 as getVirtuallyFocusedElement, $55f9b1ae81f22853$export$6c5dc7e81d2cc29a as dispatchVirtualBlur, $55f9b1ae81f22853$export$2b35b76d2e30e129 as dispatchVirtualFocus};\n//# sourceMappingURL=virtualFocus.module.js.map\n","import {isElementInChildOfActiveScope as $jtpZv$isElementInChildOfActiveScope} from \"@react-aria/focus\";\nimport {useEffect as $jtpZv$useEffect} from \"react\";\nimport {useInteractOutside as $jtpZv$useInteractOutside, useFocusWithin as $jtpZv$useFocusWithin} from \"@react-aria/interactions\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $a11501f3d1d39e6c$var$visibleOverlays = [];\nfunction $a11501f3d1d39e6c$export$ea8f71083e90600f(props, ref) {\n    let { onClose: onClose, shouldCloseOnBlur: shouldCloseOnBlur, isOpen: isOpen, isDismissable: isDismissable = false, isKeyboardDismissDisabled: isKeyboardDismissDisabled = false, shouldCloseOnInteractOutside: shouldCloseOnInteractOutside } = props;\n    // Add the overlay ref to the stack of visible overlays on mount, and remove on unmount.\n    (0, $jtpZv$useEffect)(()=>{\n        if (isOpen && !$a11501f3d1d39e6c$var$visibleOverlays.includes(ref)) {\n            $a11501f3d1d39e6c$var$visibleOverlays.push(ref);\n            return ()=>{\n                let index = $a11501f3d1d39e6c$var$visibleOverlays.indexOf(ref);\n                if (index >= 0) $a11501f3d1d39e6c$var$visibleOverlays.splice(index, 1);\n            };\n        }\n    }, [\n        isOpen,\n        ref\n    ]);\n    // Only hide the overlay when it is the topmost visible overlay in the stack\n    let onHide = ()=>{\n        if ($a11501f3d1d39e6c$var$visibleOverlays[$a11501f3d1d39e6c$var$visibleOverlays.length - 1] === ref && onClose) onClose();\n    };\n    let onInteractOutsideStart = (e)=>{\n        if (!shouldCloseOnInteractOutside || shouldCloseOnInteractOutside(e.target)) {\n            if ($a11501f3d1d39e6c$var$visibleOverlays[$a11501f3d1d39e6c$var$visibleOverlays.length - 1] === ref) {\n                e.stopPropagation();\n                e.preventDefault();\n            }\n        }\n    };\n    let onInteractOutside = (e)=>{\n        if (!shouldCloseOnInteractOutside || shouldCloseOnInteractOutside(e.target)) {\n            if ($a11501f3d1d39e6c$var$visibleOverlays[$a11501f3d1d39e6c$var$visibleOverlays.length - 1] === ref) {\n                e.stopPropagation();\n                e.preventDefault();\n            }\n            onHide();\n        }\n    };\n    // Handle the escape key\n    let onKeyDown = (e)=>{\n        if (e.key === 'Escape' && !isKeyboardDismissDisabled && !e.nativeEvent.isComposing) {\n            e.stopPropagation();\n            e.preventDefault();\n            onHide();\n        }\n    };\n    // Handle clicking outside the overlay to close it\n    (0, $jtpZv$useInteractOutside)({\n        ref: ref,\n        onInteractOutside: isDismissable && isOpen ? onInteractOutside : undefined,\n        onInteractOutsideStart: onInteractOutsideStart\n    });\n    let { focusWithinProps: focusWithinProps } = (0, $jtpZv$useFocusWithin)({\n        isDisabled: !shouldCloseOnBlur,\n        onBlurWithin: (e)=>{\n            // Do not close if relatedTarget is null, which means focus is lost to the body.\n            // That can happen when switching tabs, or due to a VoiceOver/Chrome bug with Control+Option+Arrow navigation.\n            // Clicking on the body to close the overlay should already be handled by useInteractOutside.\n            // https://github.com/adobe/react-spectrum/issues/4130\n            // https://github.com/adobe/react-spectrum/issues/4922\n            //\n            // If focus is moving into a child focus scope (e.g. menu inside a dialog),\n            // do not close the outer overlay. At this point, the active scope should\n            // still be the outer overlay, since blur events run before focus.\n            if (!e.relatedTarget || (0, $jtpZv$isElementInChildOfActiveScope)(e.relatedTarget)) return;\n            if (!shouldCloseOnInteractOutside || shouldCloseOnInteractOutside(e.relatedTarget)) onClose === null || onClose === void 0 ? void 0 : onClose();\n        }\n    });\n    let onPointerDownUnderlay = (e)=>{\n        // fixes a firefox issue that starts text selection https://bugzilla.mozilla.org/show_bug.cgi?id=1675846\n        if (e.target === e.currentTarget) e.preventDefault();\n    };\n    return {\n        overlayProps: {\n            onKeyDown: onKeyDown,\n            ...focusWithinProps\n        },\n        underlayProps: {\n            onPointerDown: onPointerDownUnderlay\n        }\n    };\n}\n\n\nexport {$a11501f3d1d39e6c$export$ea8f71083e90600f as useOverlay};\n//# sourceMappingURL=useOverlay.module.js.map\n","import {onCloseMap as $dd149f63282afbbf$export$f6211563215e3b37} from \"./useCloseOnScroll.mjs\";\nimport {useEffect as $gMvIk$useEffect} from \"react\";\nimport {useId as $gMvIk$useId} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $628037886ba31236$export$f9d5c8beee7d008d(props, state, ref) {\n    let { type: type } = props;\n    let { isOpen: isOpen } = state;\n    // Backward compatibility. Share state close function with useOverlayPosition so it can close on scroll\n    // without forcing users to pass onClose.\n    (0, $gMvIk$useEffect)(()=>{\n        if (ref && ref.current) (0, $dd149f63282afbbf$export$f6211563215e3b37).set(ref.current, state.close);\n    });\n    // Aria 1.1 supports multiple values for aria-haspopup other than just menus.\n    // https://www.w3.org/TR/wai-aria-1.1/#aria-haspopup\n    // However, we only add it for menus for now because screen readers often\n    // announce it as a menu even for other values.\n    let ariaHasPopup = undefined;\n    if (type === 'menu') ariaHasPopup = true;\n    else if (type === 'listbox') ariaHasPopup = 'listbox';\n    let overlayId = (0, $gMvIk$useId)();\n    return {\n        triggerProps: {\n            'aria-haspopup': ariaHasPopup,\n            'aria-expanded': isOpen,\n            'aria-controls': isOpen ? overlayId : undefined,\n            onPress: state.toggle\n        },\n        overlayProps: {\n            id: overlayId\n        }\n    };\n}\n\n\nexport {$628037886ba31236$export$f9d5c8beee7d008d as useOverlayTrigger};\n//# sourceMappingURL=useOverlayTrigger.module.js.map\n","import {useLayoutEffect as $7mMvr$useLayoutEffect, isIOS as $7mMvr$isIOS, chain as $7mMvr$chain, isScrollable as $7mMvr$isScrollable, getScrollParent as $7mMvr$getScrollParent, willOpenKeyboard as $7mMvr$willOpenKeyboard} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $49c51c25361d4cd2$var$visualViewport = typeof document !== 'undefined' && window.visualViewport;\n// The number of active usePreventScroll calls. Used to determine whether to revert back to the original page style/scroll position\nlet $49c51c25361d4cd2$var$preventScrollCount = 0;\nlet $49c51c25361d4cd2$var$restore;\nfunction $49c51c25361d4cd2$export$ee0f7cc6afcd1c18(options = {}) {\n    let { isDisabled: isDisabled } = options;\n    (0, $7mMvr$useLayoutEffect)(()=>{\n        if (isDisabled) return;\n        $49c51c25361d4cd2$var$preventScrollCount++;\n        if ($49c51c25361d4cd2$var$preventScrollCount === 1) {\n            if ((0, $7mMvr$isIOS)()) $49c51c25361d4cd2$var$restore = $49c51c25361d4cd2$var$preventScrollMobileSafari();\n            else $49c51c25361d4cd2$var$restore = $49c51c25361d4cd2$var$preventScrollStandard();\n        }\n        return ()=>{\n            $49c51c25361d4cd2$var$preventScrollCount--;\n            if ($49c51c25361d4cd2$var$preventScrollCount === 0) $49c51c25361d4cd2$var$restore();\n        };\n    }, [\n        isDisabled\n    ]);\n}\n// For most browsers, all we need to do is set `overflow: hidden` on the root element, and\n// add some padding to prevent the page from shifting when the scrollbar is hidden.\nfunction $49c51c25361d4cd2$var$preventScrollStandard() {\n    let scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n    return (0, $7mMvr$chain)(scrollbarWidth > 0 && // Use scrollbar-gutter when supported because it also works for fixed positioned elements.\n    ('scrollbarGutter' in document.documentElement.style ? $49c51c25361d4cd2$var$setStyle(document.documentElement, 'scrollbarGutter', 'stable') : $49c51c25361d4cd2$var$setStyle(document.documentElement, 'paddingRight', `${scrollbarWidth}px`)), $49c51c25361d4cd2$var$setStyle(document.documentElement, 'overflow', 'hidden'));\n}\n// Mobile Safari is a whole different beast. Even with overflow: hidden,\n// it still scrolls the page in many situations:\n//\n// 1. When the bottom toolbar and address bar are collapsed, page scrolling is always allowed.\n// 2. When the keyboard is visible, the viewport does not resize. Instead, the keyboard covers part of\n//    it, so it becomes scrollable.\n// 3. When tapping on an input, the page always scrolls so that the input is centered in the visual viewport.\n//    This may cause even fixed position elements to scroll off the screen.\n// 4. When using the next/previous buttons in the keyboard to navigate between inputs, the whole page always\n//    scrolls, even if the input is inside a nested scrollable element that could be scrolled instead.\n//\n// In order to work around these cases, and prevent scrolling without jankiness, we do a few things:\n//\n// 1. Prevent default on `touchmove` events that are not in a scrollable element. This prevents touch scrolling\n//    on the window.\n// 2. Set `overscroll-behavior: contain` on nested scrollable regions so they do not scroll the page when at\n//    the top or bottom. Work around a bug where this does not work when the element does not actually overflow\n//    by preventing default in a `touchmove` event. This is best effort: we can't prevent default when pinch\n//    zooming or when an element contains text selection, which may allow scrolling in some cases.\n// 3. Prevent default on `touchend` events on input elements and handle focusing the element ourselves.\n// 4. When focus moves to an input, create an off screen input and focus that temporarily. This prevents \n//    Safari from scrolling the page. After a small delay, focus the real input and scroll it into view\n//    ourselves, without scrolling the whole page.\nfunction $49c51c25361d4cd2$var$preventScrollMobileSafari() {\n    let scrollable;\n    let allowTouchMove = false;\n    let onTouchStart = (e)=>{\n        // Store the nearest scrollable parent element from the element that the user touched.\n        let target = e.target;\n        scrollable = (0, $7mMvr$isScrollable)(target) ? target : (0, $7mMvr$getScrollParent)(target, true);\n        allowTouchMove = false;\n        // If the target is selected, don't preventDefault in touchmove to allow user to adjust selection.\n        let selection = target.ownerDocument.defaultView.getSelection();\n        if (selection && !selection.isCollapsed && selection.containsNode(target, true)) allowTouchMove = true;\n        // If this is a focused input element with a selected range, allow user to drag the selection handles.\n        if ('selectionStart' in target && 'selectionEnd' in target && target.selectionStart < target.selectionEnd && target.ownerDocument.activeElement === target) allowTouchMove = true;\n    };\n    // Prevent scrolling up when at the top and scrolling down when at the bottom\n    // of a nested scrollable area, otherwise mobile Safari will start scrolling\n    // the window instead.\n    // This must be applied before the touchstart event as of iOS 26, so inject it as a <style> element.\n    let style = document.createElement('style');\n    style.textContent = `\n@layer {\n  * {\n    overscroll-behavior: contain;\n  }\n}`.trim();\n    document.head.prepend(style);\n    let onTouchMove = (e)=>{\n        // Allow pinch-zooming.\n        if (e.touches.length === 2 || allowTouchMove) return;\n        // Prevent scrolling the window.\n        if (!scrollable || scrollable === document.documentElement || scrollable === document.body) {\n            e.preventDefault();\n            return;\n        }\n        // overscroll-behavior should prevent scroll chaining, but currently does not\n        // if the element doesn't actually overflow. https://bugs.webkit.org/show_bug.cgi?id=243452\n        // This checks that both the width and height do not overflow, otherwise we might\n        // block horizontal scrolling too. In that case, adding `touch-action: pan-x` to\n        // the element will prevent vertical page scrolling. We can't add that automatically\n        // because it must be set before the touchstart event.\n        if (scrollable.scrollHeight === scrollable.clientHeight && scrollable.scrollWidth === scrollable.clientWidth) e.preventDefault();\n    };\n    let onBlur = (e)=>{\n        let target = e.target;\n        let relatedTarget = e.relatedTarget;\n        if (relatedTarget && (0, $7mMvr$willOpenKeyboard)(relatedTarget)) {\n            // Focus without scrolling the whole page, and then scroll into view manually.\n            relatedTarget.focus({\n                preventScroll: true\n            });\n            $49c51c25361d4cd2$var$scrollIntoViewWhenReady(relatedTarget, (0, $7mMvr$willOpenKeyboard)(target));\n        } else if (!relatedTarget) {\n            var _target_parentElement;\n            // When tapping the Done button on the keyboard, focus moves to the body.\n            // FocusScope will then restore focus back to the input. Later when tapping\n            // the same input again, it is already focused, so no blur event will fire,\n            // resulting in the flow above never running and Safari's native scrolling occurring.\n            // Instead, move focus to the parent focusable element (e.g. the dialog).\n            let focusable = (_target_parentElement = target.parentElement) === null || _target_parentElement === void 0 ? void 0 : _target_parentElement.closest('[tabindex]');\n            focusable === null || focusable === void 0 ? void 0 : focusable.focus({\n                preventScroll: true\n            });\n        }\n    };\n    // Override programmatic focus to scroll into view without scrolling the whole page.\n    let focus = HTMLElement.prototype.focus;\n    HTMLElement.prototype.focus = function(opts) {\n        // Track whether the keyboard was already visible before.\n        let wasKeyboardVisible = document.activeElement != null && (0, $7mMvr$willOpenKeyboard)(document.activeElement);\n        // Focus the element without scrolling the page.\n        focus.call(this, {\n            ...opts,\n            preventScroll: true\n        });\n        if (!opts || !opts.preventScroll) $49c51c25361d4cd2$var$scrollIntoViewWhenReady(this, wasKeyboardVisible);\n    };\n    let removeEvents = (0, $7mMvr$chain)($49c51c25361d4cd2$var$addEvent(document, 'touchstart', onTouchStart, {\n        passive: false,\n        capture: true\n    }), $49c51c25361d4cd2$var$addEvent(document, 'touchmove', onTouchMove, {\n        passive: false,\n        capture: true\n    }), $49c51c25361d4cd2$var$addEvent(document, 'blur', onBlur, true));\n    return ()=>{\n        removeEvents();\n        style.remove();\n        HTMLElement.prototype.focus = focus;\n    };\n}\n// Sets a CSS property on an element, and returns a function to revert it to the previous value.\nfunction $49c51c25361d4cd2$var$setStyle(element, style, value) {\n    let cur = element.style[style];\n    element.style[style] = value;\n    return ()=>{\n        element.style[style] = cur;\n    };\n}\n// Adds an event listener to an element, and returns a function to remove it.\nfunction $49c51c25361d4cd2$var$addEvent(target, event, handler, options) {\n    // internal function, so it's ok to ignore the difficult to fix type error\n    // @ts-ignore\n    target.addEventListener(event, handler, options);\n    return ()=>{\n        // @ts-ignore\n        target.removeEventListener(event, handler, options);\n    };\n}\nfunction $49c51c25361d4cd2$var$scrollIntoViewWhenReady(target, wasKeyboardVisible) {\n    if (wasKeyboardVisible || !$49c51c25361d4cd2$var$visualViewport) // If the keyboard was already visible, scroll the target into view immediately.\n    $49c51c25361d4cd2$var$scrollIntoView(target);\n    else // Otherwise, wait for the visual viewport to resize before scrolling so we can\n    // measure the correct position to scroll to.\n    $49c51c25361d4cd2$var$visualViewport.addEventListener('resize', ()=>$49c51c25361d4cd2$var$scrollIntoView(target), {\n        once: true\n    });\n}\nfunction $49c51c25361d4cd2$var$scrollIntoView(target) {\n    let root = document.scrollingElement || document.documentElement;\n    let nextTarget = target;\n    while(nextTarget && nextTarget !== root){\n        // Find the parent scrollable element and adjust the scroll position if the target is not already in view.\n        let scrollable = (0, $7mMvr$getScrollParent)(nextTarget);\n        if (scrollable !== document.documentElement && scrollable !== document.body && scrollable !== nextTarget) {\n            let scrollableRect = scrollable.getBoundingClientRect();\n            let targetRect = nextTarget.getBoundingClientRect();\n            if (targetRect.top < scrollableRect.top || targetRect.bottom > scrollableRect.top + nextTarget.clientHeight) {\n                let bottom = scrollableRect.bottom;\n                if ($49c51c25361d4cd2$var$visualViewport) bottom = Math.min(bottom, $49c51c25361d4cd2$var$visualViewport.offsetTop + $49c51c25361d4cd2$var$visualViewport.height);\n                // Center within the viewport.\n                let adjustment = targetRect.top - scrollableRect.top - ((bottom - scrollableRect.top) / 2 - targetRect.height / 2);\n                scrollable.scrollTo({\n                    // Clamp to the valid range to prevent over-scrolling.\n                    top: Math.max(0, Math.min(scrollable.scrollHeight - scrollable.clientHeight, scrollable.scrollTop + adjustment)),\n                    behavior: 'smooth'\n                });\n            }\n        }\n        nextTarget = scrollable.parentElement;\n    }\n}\n\n\nexport {$49c51c25361d4cd2$export$ee0f7cc6afcd1c18 as usePreventScroll};\n//# sourceMappingURL=usePreventScroll.module.js.map\n","import $7yuSY$react, {createContext as $7yuSY$createContext, useContext as $7yuSY$useContext} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $96b38030c423d352$export$60d741e20e0aa309 = /*#__PURE__*/ (0, $7yuSY$createContext)({});\nfunction $96b38030c423d352$export$78efe591171d7d45(props) {\n    let { getContainer: getContainer } = props;\n    let { getContainer: ctxGetContainer } = $96b38030c423d352$export$9fc1347d4195ccb3();\n    return /*#__PURE__*/ (0, $7yuSY$react).createElement($96b38030c423d352$export$60d741e20e0aa309.Provider, {\n        value: {\n            getContainer: getContainer === null ? undefined : getContainer !== null && getContainer !== void 0 ? getContainer : ctxGetContainer\n        }\n    }, props.children);\n}\nfunction $96b38030c423d352$export$9fc1347d4195ccb3() {\n    var _useContext;\n    return (_useContext = (0, $7yuSY$useContext)($96b38030c423d352$export$60d741e20e0aa309)) !== null && _useContext !== void 0 ? _useContext : {};\n}\n\n\nexport {$96b38030c423d352$export$60d741e20e0aa309 as PortalContext, $96b38030c423d352$export$78efe591171d7d45 as UNSAFE_PortalProvider, $96b38030c423d352$export$9fc1347d4195ccb3 as useUNSAFE_PortalContext};\n//# sourceMappingURL=PortalProvider.module.js.map\n","import {useUNSAFE_PortalContext as $96b38030c423d352$export$9fc1347d4195ccb3} from \"./PortalProvider.mjs\";\nimport $4AOtR$react, {useContext as $4AOtR$useContext, useState as $4AOtR$useState, useMemo as $4AOtR$useMemo, useEffect as $4AOtR$useEffect} from \"react\";\nimport $4AOtR$reactdom from \"react-dom\";\nimport {useIsSSR as $4AOtR$useIsSSR} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nconst $f57aed4a881a3485$var$Context = /*#__PURE__*/ (0, $4AOtR$react).createContext(null);\nfunction $f57aed4a881a3485$export$178405afcd8c5eb(props) {\n    let { children: children } = props;\n    let parent = (0, $4AOtR$useContext)($f57aed4a881a3485$var$Context);\n    let [modalCount, setModalCount] = (0, $4AOtR$useState)(0);\n    let context = (0, $4AOtR$useMemo)(()=>({\n            parent: parent,\n            modalCount: modalCount,\n            addModal () {\n                setModalCount((count)=>count + 1);\n                if (parent) parent.addModal();\n            },\n            removeModal () {\n                setModalCount((count)=>count - 1);\n                if (parent) parent.removeModal();\n            }\n        }), [\n        parent,\n        modalCount\n    ]);\n    return /*#__PURE__*/ (0, $4AOtR$react).createElement($f57aed4a881a3485$var$Context.Provider, {\n        value: context\n    }, children);\n}\nfunction $f57aed4a881a3485$export$d9aaed4c3ece1bc0() {\n    let context = (0, $4AOtR$useContext)($f57aed4a881a3485$var$Context);\n    return {\n        modalProviderProps: {\n            'aria-hidden': context && context.modalCount > 0 ? true : undefined\n        }\n    };\n}\n/**\n * Creates a root node that will be aria-hidden if there are other modals open.\n */ function $f57aed4a881a3485$var$OverlayContainerDOM(props) {\n    let { modalProviderProps: modalProviderProps } = $f57aed4a881a3485$export$d9aaed4c3ece1bc0();\n    return /*#__PURE__*/ (0, $4AOtR$react).createElement(\"div\", {\n        \"data-overlay-container\": true,\n        ...props,\n        ...modalProviderProps\n    });\n}\nfunction $f57aed4a881a3485$export$bf688221f59024e5(props) {\n    return /*#__PURE__*/ (0, $4AOtR$react).createElement($f57aed4a881a3485$export$178405afcd8c5eb, null, /*#__PURE__*/ (0, $4AOtR$react).createElement($f57aed4a881a3485$var$OverlayContainerDOM, props));\n}\nfunction $f57aed4a881a3485$export$b47c3594eab58386(props) {\n    let isSSR = (0, $4AOtR$useIsSSR)();\n    let { portalContainer: portalContainer = isSSR ? null : document.body, ...rest } = props;\n    let { getContainer: getContainer } = (0, $96b38030c423d352$export$9fc1347d4195ccb3)();\n    if (!props.portalContainer && getContainer) portalContainer = getContainer();\n    (0, $4AOtR$react).useEffect(()=>{\n        if (portalContainer === null || portalContainer === void 0 ? void 0 : portalContainer.closest('[data-overlay-container]')) throw new Error('An OverlayContainer must not be inside another container. Please change the portalContainer prop.');\n    }, [\n        portalContainer\n    ]);\n    if (!portalContainer) return null;\n    let contents = /*#__PURE__*/ (0, $4AOtR$react).createElement($f57aed4a881a3485$export$bf688221f59024e5, rest);\n    return /*#__PURE__*/ (0, $4AOtR$reactdom).createPortal(contents, portalContainer);\n}\nfunction $f57aed4a881a3485$export$33ffd74ebf07f060(options) {\n    // Add aria-hidden to all parent providers on mount, and restore on unmount.\n    let context = (0, $4AOtR$useContext)($f57aed4a881a3485$var$Context);\n    if (!context) throw new Error('Modal is not contained within a provider');\n    (0, $4AOtR$useEffect)(()=>{\n        if ((options === null || options === void 0 ? void 0 : options.isDisabled) || !context || !context.parent) return;\n        // The immediate context is from the provider containing this modal, so we only\n        // want to trigger aria-hidden on its parents not on the modal provider itself.\n        context.parent.addModal();\n        return ()=>{\n            if (context && context.parent) context.parent.removeModal();\n        };\n    }, [\n        context,\n        context.parent,\n        options === null || options === void 0 ? void 0 : options.isDisabled\n    ]);\n    return {\n        modalProps: {\n            'data-ismodal': !(options === null || options === void 0 ? void 0 : options.isDisabled)\n        }\n    };\n}\n\n\nexport {$f57aed4a881a3485$export$178405afcd8c5eb as ModalProvider, $f57aed4a881a3485$export$d9aaed4c3ece1bc0 as useModalProvider, $f57aed4a881a3485$export$bf688221f59024e5 as OverlayProvider, $f57aed4a881a3485$export$b47c3594eab58386 as OverlayContainer, $f57aed4a881a3485$export$33ffd74ebf07f060 as useModal};\n//# sourceMappingURL=useModal.module.js.map\n","var $6d74810286a15183$exports = {};\n$6d74810286a15183$exports = {\n    \"dismiss\": `Dismiss`\n};\n\n\nexport {$6d74810286a15183$exports as default};\n//# sourceMappingURL=en-US.module.js.map\n","import $k51So$arAEmodulejs from \"./ar-AE.mjs\";\nimport $k51So$bgBGmodulejs from \"./bg-BG.mjs\";\nimport $k51So$csCZmodulejs from \"./cs-CZ.mjs\";\nimport $k51So$daDKmodulejs from \"./da-DK.mjs\";\nimport $k51So$deDEmodulejs from \"./de-DE.mjs\";\nimport $k51So$elGRmodulejs from \"./el-GR.mjs\";\nimport $k51So$enUSmodulejs from \"./en-US.mjs\";\nimport $k51So$esESmodulejs from \"./es-ES.mjs\";\nimport $k51So$etEEmodulejs from \"./et-EE.mjs\";\nimport $k51So$fiFImodulejs from \"./fi-FI.mjs\";\nimport $k51So$frFRmodulejs from \"./fr-FR.mjs\";\nimport $k51So$heILmodulejs from \"./he-IL.mjs\";\nimport $k51So$hrHRmodulejs from \"./hr-HR.mjs\";\nimport $k51So$huHUmodulejs from \"./hu-HU.mjs\";\nimport $k51So$itITmodulejs from \"./it-IT.mjs\";\nimport $k51So$jaJPmodulejs from \"./ja-JP.mjs\";\nimport $k51So$koKRmodulejs from \"./ko-KR.mjs\";\nimport $k51So$ltLTmodulejs from \"./lt-LT.mjs\";\nimport $k51So$lvLVmodulejs from \"./lv-LV.mjs\";\nimport $k51So$nbNOmodulejs from \"./nb-NO.mjs\";\nimport $k51So$nlNLmodulejs from \"./nl-NL.mjs\";\nimport $k51So$plPLmodulejs from \"./pl-PL.mjs\";\nimport $k51So$ptBRmodulejs from \"./pt-BR.mjs\";\nimport $k51So$ptPTmodulejs from \"./pt-PT.mjs\";\nimport $k51So$roROmodulejs from \"./ro-RO.mjs\";\nimport $k51So$ruRUmodulejs from \"./ru-RU.mjs\";\nimport $k51So$skSKmodulejs from \"./sk-SK.mjs\";\nimport $k51So$slSImodulejs from \"./sl-SI.mjs\";\nimport $k51So$srSPmodulejs from \"./sr-SP.mjs\";\nimport $k51So$svSEmodulejs from \"./sv-SE.mjs\";\nimport $k51So$trTRmodulejs from \"./tr-TR.mjs\";\nimport $k51So$ukUAmodulejs from \"./uk-UA.mjs\";\nimport $k51So$zhCNmodulejs from \"./zh-CN.mjs\";\nimport $k51So$zhTWmodulejs from \"./zh-TW.mjs\";\n\nvar $a2f21f5f14f60553$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$a2f21f5f14f60553$exports = {\n    \"ar-AE\": $k51So$arAEmodulejs,\n    \"bg-BG\": $k51So$bgBGmodulejs,\n    \"cs-CZ\": $k51So$csCZmodulejs,\n    \"da-DK\": $k51So$daDKmodulejs,\n    \"de-DE\": $k51So$deDEmodulejs,\n    \"el-GR\": $k51So$elGRmodulejs,\n    \"en-US\": $k51So$enUSmodulejs,\n    \"es-ES\": $k51So$esESmodulejs,\n    \"et-EE\": $k51So$etEEmodulejs,\n    \"fi-FI\": $k51So$fiFImodulejs,\n    \"fr-FR\": $k51So$frFRmodulejs,\n    \"he-IL\": $k51So$heILmodulejs,\n    \"hr-HR\": $k51So$hrHRmodulejs,\n    \"hu-HU\": $k51So$huHUmodulejs,\n    \"it-IT\": $k51So$itITmodulejs,\n    \"ja-JP\": $k51So$jaJPmodulejs,\n    \"ko-KR\": $k51So$koKRmodulejs,\n    \"lt-LT\": $k51So$ltLTmodulejs,\n    \"lv-LV\": $k51So$lvLVmodulejs,\n    \"nb-NO\": $k51So$nbNOmodulejs,\n    \"nl-NL\": $k51So$nlNLmodulejs,\n    \"pl-PL\": $k51So$plPLmodulejs,\n    \"pt-BR\": $k51So$ptBRmodulejs,\n    \"pt-PT\": $k51So$ptPTmodulejs,\n    \"ro-RO\": $k51So$roROmodulejs,\n    \"ru-RU\": $k51So$ruRUmodulejs,\n    \"sk-SK\": $k51So$skSKmodulejs,\n    \"sl-SI\": $k51So$slSImodulejs,\n    \"sr-SP\": $k51So$srSPmodulejs,\n    \"sv-SE\": $k51So$svSEmodulejs,\n    \"tr-TR\": $k51So$trTRmodulejs,\n    \"uk-UA\": $k51So$ukUAmodulejs,\n    \"zh-CN\": $k51So$zhCNmodulejs,\n    \"zh-TW\": $k51So$zhTWmodulejs\n};\n\n\nexport {$a2f21f5f14f60553$exports as default};\n//# sourceMappingURL=intlStrings.module.js.map\n","import {mergeProps as $7JYt2$mergeProps} from \"@react-aria/utils\";\nimport $7JYt2$react, {useState as $7JYt2$useState, useMemo as $7JYt2$useMemo} from \"react\";\nimport {useFocusWithin as $7JYt2$useFocusWithin} from \"@react-aria/interactions\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $5c3e21d68f1c4674$var$styles = {\n    border: 0,\n    clip: 'rect(0 0 0 0)',\n    clipPath: 'inset(50%)',\n    height: '1px',\n    margin: '-1px',\n    overflow: 'hidden',\n    padding: 0,\n    position: 'absolute',\n    width: '1px',\n    whiteSpace: 'nowrap'\n};\nfunction $5c3e21d68f1c4674$export$a966af930f325cab(props = {}) {\n    let { style: style, isFocusable: isFocusable } = props;\n    let [isFocused, setFocused] = (0, $7JYt2$useState)(false);\n    let { focusWithinProps: focusWithinProps } = (0, $7JYt2$useFocusWithin)({\n        isDisabled: !isFocusable,\n        onFocusWithinChange: (val)=>setFocused(val)\n    });\n    // If focused, don't hide the element.\n    let combinedStyles = (0, $7JYt2$useMemo)(()=>{\n        if (isFocused) return style;\n        else if (style) return {\n            ...$5c3e21d68f1c4674$var$styles,\n            ...style\n        };\n        else return $5c3e21d68f1c4674$var$styles;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        isFocused\n    ]);\n    return {\n        visuallyHiddenProps: {\n            ...focusWithinProps,\n            style: combinedStyles\n        }\n    };\n}\nfunction $5c3e21d68f1c4674$export$439d29a4e110a164(props) {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    let { children: children, elementType: Element = 'div', isFocusable: isFocusable, style: style, ...otherProps } = props;\n    let { visuallyHiddenProps: visuallyHiddenProps } = $5c3e21d68f1c4674$export$a966af930f325cab(props);\n    return /*#__PURE__*/ (0, $7JYt2$react).createElement(Element, (0, $7JYt2$mergeProps)(otherProps, visuallyHiddenProps), children);\n}\n\n\nexport {$5c3e21d68f1c4674$export$a966af930f325cab as useVisuallyHidden, $5c3e21d68f1c4674$export$439d29a4e110a164 as VisuallyHidden};\n//# sourceMappingURL=VisuallyHidden.module.js.map\n","import $iYaQO$intlStringsmodulejs from \"./intlStrings.mjs\";\nimport $iYaQO$react from \"react\";\nimport {useLabels as $iYaQO$useLabels} from \"@react-aria/utils\";\nimport {useLocalizedStringFormatter as $iYaQO$useLocalizedStringFormatter} from \"@react-aria/i18n\";\nimport {VisuallyHidden as $iYaQO$VisuallyHidden} from \"@react-aria/visually-hidden\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $86ea4cb521eb2e37$export$2317d149ed6f78c4(props) {\n    let { onDismiss: onDismiss, ...otherProps } = props;\n    let stringFormatter = (0, $iYaQO$useLocalizedStringFormatter)((0, ($parcel$interopDefault($iYaQO$intlStringsmodulejs))), '@react-aria/overlays');\n    let labels = (0, $iYaQO$useLabels)(otherProps, stringFormatter.format('dismiss'));\n    let onClick = ()=>{\n        if (onDismiss) onDismiss();\n    };\n    return /*#__PURE__*/ (0, $iYaQO$react).createElement((0, $iYaQO$VisuallyHidden), null, /*#__PURE__*/ (0, $iYaQO$react).createElement(\"button\", {\n        ...labels,\n        tabIndex: -1,\n        onClick: onClick,\n        style: {\n            width: 1,\n            height: 1\n        }\n    }));\n}\n\n\nexport {$86ea4cb521eb2e37$export$2317d149ed6f78c4 as DismissButton};\n//# sourceMappingURL=DismissButton.module.js.map\n","import {getOwnerWindow as $fF94N$getOwnerWindow} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $5e3802645cc19319$var$supportsInert = typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\n// Keeps a ref count of all hidden elements. Added to when hiding an element, and\n// subtracted from when showing it again. When it reaches zero, aria-hidden is removed.\nlet $5e3802645cc19319$var$refCountMap = new WeakMap();\nlet $5e3802645cc19319$var$observerStack = [];\nfunction $5e3802645cc19319$export$1c3ebcada18427bf(targets, options) {\n    let windowObj = (0, $fF94N$getOwnerWindow)(targets === null || targets === void 0 ? void 0 : targets[0]);\n    let opts = options instanceof windowObj.Element ? {\n        root: options\n    } : options;\n    var _opts_root;\n    let root = (_opts_root = opts === null || opts === void 0 ? void 0 : opts.root) !== null && _opts_root !== void 0 ? _opts_root : document.body;\n    let shouldUseInert = (opts === null || opts === void 0 ? void 0 : opts.shouldUseInert) && $5e3802645cc19319$var$supportsInert;\n    let visibleNodes = new Set(targets);\n    let hiddenNodes = new Set();\n    let getHidden = (element)=>{\n        return shouldUseInert && element instanceof windowObj.HTMLElement ? element.inert : element.getAttribute('aria-hidden') === 'true';\n    };\n    let setHidden = (element, hidden)=>{\n        if (shouldUseInert && element instanceof windowObj.HTMLElement) element.inert = hidden;\n        else if (hidden) element.setAttribute('aria-hidden', 'true');\n        else {\n            element.removeAttribute('aria-hidden');\n            if (element instanceof windowObj.HTMLElement) // We only ever call setHidden with hidden = false when the nodeCount is 1 aka\n            // we are trying to make the element visible to screen readers again, so remove inert as well\n            element.inert = false;\n        }\n    };\n    let walk = (root)=>{\n        // Keep live announcer and top layer elements (e.g. toasts) visible.\n        for (let element of root.querySelectorAll('[data-live-announcer], [data-react-aria-top-layer]'))visibleNodes.add(element);\n        let acceptNode = (node)=>{\n            // Skip this node and its children if it is one of the target nodes, or a live announcer.\n            // Also skip children of already hidden nodes, as aria-hidden is recursive. An exception is\n            // made for elements with role=\"row\" since VoiceOver on iOS has issues hiding elements with role=\"row\".\n            // For that case we want to hide the cells inside as well (https://bugs.webkit.org/show_bug.cgi?id=222623).\n            if (hiddenNodes.has(node) || visibleNodes.has(node) || node.parentElement && hiddenNodes.has(node.parentElement) && node.parentElement.getAttribute('role') !== 'row') return NodeFilter.FILTER_REJECT;\n            // Skip this node but continue to children if one of the targets is inside the node.\n            for (let target of visibleNodes){\n                if (node.contains(target)) return NodeFilter.FILTER_SKIP;\n            }\n            return NodeFilter.FILTER_ACCEPT;\n        };\n        let walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {\n            acceptNode: acceptNode\n        });\n        // TreeWalker does not include the root.\n        let acceptRoot = acceptNode(root);\n        if (acceptRoot === NodeFilter.FILTER_ACCEPT) hide(root);\n        if (acceptRoot !== NodeFilter.FILTER_REJECT) {\n            let node = walker.nextNode();\n            while(node != null){\n                hide(node);\n                node = walker.nextNode();\n            }\n        }\n    };\n    let hide = (node)=>{\n        var _refCountMap_get;\n        let refCount = (_refCountMap_get = $5e3802645cc19319$var$refCountMap.get(node)) !== null && _refCountMap_get !== void 0 ? _refCountMap_get : 0;\n        // If already aria-hidden, and the ref count is zero, then this element\n        // was already hidden and there's nothing for us to do.\n        if (getHidden(node) && refCount === 0) return;\n        if (refCount === 0) setHidden(node, true);\n        hiddenNodes.add(node);\n        $5e3802645cc19319$var$refCountMap.set(node, refCount + 1);\n    };\n    // If there is already a MutationObserver listening from a previous call,\n    // disconnect it so the new on takes over.\n    if ($5e3802645cc19319$var$observerStack.length) $5e3802645cc19319$var$observerStack[$5e3802645cc19319$var$observerStack.length - 1].disconnect();\n    walk(root);\n    let observer = new MutationObserver((changes)=>{\n        for (let change of changes){\n            if (change.type !== 'childList') continue;\n            // If the parent element of the added nodes is not within one of the targets,\n            // and not already inside a hidden node, hide all of the new children.\n            if (![\n                ...visibleNodes,\n                ...hiddenNodes\n            ].some((node)=>node.contains(change.target))) for (let node of change.addedNodes){\n                if ((node instanceof HTMLElement || node instanceof SVGElement) && (node.dataset.liveAnnouncer === 'true' || node.dataset.reactAriaTopLayer === 'true')) visibleNodes.add(node);\n                else if (node instanceof Element) walk(node);\n            }\n        }\n    });\n    observer.observe(root, {\n        childList: true,\n        subtree: true\n    });\n    let observerWrapper = {\n        visibleNodes: visibleNodes,\n        hiddenNodes: hiddenNodes,\n        observe () {\n            observer.observe(root, {\n                childList: true,\n                subtree: true\n            });\n        },\n        disconnect () {\n            observer.disconnect();\n        }\n    };\n    $5e3802645cc19319$var$observerStack.push(observerWrapper);\n    return ()=>{\n        observer.disconnect();\n        for (let node of hiddenNodes){\n            let count = $5e3802645cc19319$var$refCountMap.get(node);\n            if (count == null) continue;\n            if (count === 1) {\n                setHidden(node, false);\n                $5e3802645cc19319$var$refCountMap.delete(node);\n            } else $5e3802645cc19319$var$refCountMap.set(node, count - 1);\n        }\n        // Remove this observer from the stack, and start the previous one.\n        if (observerWrapper === $5e3802645cc19319$var$observerStack[$5e3802645cc19319$var$observerStack.length - 1]) {\n            $5e3802645cc19319$var$observerStack.pop();\n            if ($5e3802645cc19319$var$observerStack.length) $5e3802645cc19319$var$observerStack[$5e3802645cc19319$var$observerStack.length - 1].observe();\n        } else $5e3802645cc19319$var$observerStack.splice($5e3802645cc19319$var$observerStack.indexOf(observerWrapper), 1);\n    };\n}\nfunction $5e3802645cc19319$export$1020fa7f77e17884(element) {\n    let observer = $5e3802645cc19319$var$observerStack[$5e3802645cc19319$var$observerStack.length - 1];\n    if (observer && !observer.visibleNodes.has(element)) {\n        observer.visibleNodes.add(element);\n        return ()=>{\n            observer.visibleNodes.delete(element);\n        };\n    }\n}\n\n\nexport {$5e3802645cc19319$export$1c3ebcada18427bf as ariaHideOutside, $5e3802645cc19319$export$1020fa7f77e17884 as keepVisible};\n//# sourceMappingURL=ariaHideOutside.module.js.map\n","import {ariaHideOutside as $5e3802645cc19319$export$1c3ebcada18427bf, keepVisible as $5e3802645cc19319$export$1020fa7f77e17884} from \"./ariaHideOutside.mjs\";\nimport {useOverlayPosition as $2a41e45df1593e64$export$d39e1813b3bdd0e1} from \"./useOverlayPosition.mjs\";\nimport {useOverlay as $a11501f3d1d39e6c$export$ea8f71083e90600f} from \"./useOverlay.mjs\";\nimport {usePreventScroll as $49c51c25361d4cd2$export$ee0f7cc6afcd1c18} from \"./usePreventScroll.mjs\";\nimport {mergeProps as $m0yab$mergeProps} from \"@react-aria/utils\";\nimport {useEffect as $m0yab$useEffect} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $f2f8a6077418541e$export$542a6fd13ac93354(props, state) {\n    let { triggerRef: triggerRef, popoverRef: popoverRef, groupRef: groupRef, isNonModal: isNonModal, isKeyboardDismissDisabled: isKeyboardDismissDisabled, shouldCloseOnInteractOutside: shouldCloseOnInteractOutside, ...otherProps } = props;\n    let isSubmenu = otherProps['trigger'] === 'SubmenuTrigger';\n    let { overlayProps: overlayProps, underlayProps: underlayProps } = (0, $a11501f3d1d39e6c$export$ea8f71083e90600f)({\n        isOpen: state.isOpen,\n        onClose: state.close,\n        shouldCloseOnBlur: true,\n        isDismissable: !isNonModal || isSubmenu,\n        isKeyboardDismissDisabled: isKeyboardDismissDisabled,\n        shouldCloseOnInteractOutside: shouldCloseOnInteractOutside\n    }, groupRef !== null && groupRef !== void 0 ? groupRef : popoverRef);\n    let { overlayProps: positionProps, arrowProps: arrowProps, placement: placement, triggerAnchorPoint: origin } = (0, $2a41e45df1593e64$export$d39e1813b3bdd0e1)({\n        ...otherProps,\n        targetRef: triggerRef,\n        overlayRef: popoverRef,\n        isOpen: state.isOpen,\n        onClose: isNonModal && !isSubmenu ? state.close : null\n    });\n    (0, $49c51c25361d4cd2$export$ee0f7cc6afcd1c18)({\n        isDisabled: isNonModal || !state.isOpen\n    });\n    (0, $m0yab$useEffect)(()=>{\n        if (state.isOpen && popoverRef.current) {\n            var _groupRef_current, _groupRef_current1;\n            if (isNonModal) return (0, $5e3802645cc19319$export$1020fa7f77e17884)((_groupRef_current = groupRef === null || groupRef === void 0 ? void 0 : groupRef.current) !== null && _groupRef_current !== void 0 ? _groupRef_current : popoverRef.current);\n            else return (0, $5e3802645cc19319$export$1c3ebcada18427bf)([\n                (_groupRef_current1 = groupRef === null || groupRef === void 0 ? void 0 : groupRef.current) !== null && _groupRef_current1 !== void 0 ? _groupRef_current1 : popoverRef.current\n            ], {\n                shouldUseInert: true\n            });\n        }\n    }, [\n        isNonModal,\n        state.isOpen,\n        popoverRef,\n        groupRef\n    ]);\n    return {\n        popoverProps: (0, $m0yab$mergeProps)(overlayProps, positionProps),\n        arrowProps: arrowProps,\n        underlayProps: underlayProps,\n        placement: placement,\n        triggerAnchorPoint: origin\n    };\n}\n\n\nexport {$f2f8a6077418541e$export$542a6fd13ac93354 as usePopover};\n//# sourceMappingURL=usePopover.module.js.map\n","import {useUNSAFE_PortalContext as $96b38030c423d352$export$9fc1347d4195ccb3} from \"./PortalProvider.mjs\";\nimport {ClearPressResponder as $1CM7W$ClearPressResponder} from \"@react-aria/interactions\";\nimport {FocusScope as $1CM7W$FocusScope} from \"@react-aria/focus\";\nimport $1CM7W$react, {useState as $1CM7W$useState, useMemo as $1CM7W$useMemo, useContext as $1CM7W$useContext} from \"react\";\nimport $1CM7W$reactdom from \"react-dom\";\nimport {useIsSSR as $1CM7W$useIsSSR} from \"@react-aria/ssr\";\nimport {useLayoutEffect as $1CM7W$useLayoutEffect} from \"@react-aria/utils\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nconst $337b884510726a0d$export$a2200b96afd16271 = /*#__PURE__*/ (0, $1CM7W$react).createContext(null);\nfunction $337b884510726a0d$export$c6fdb837b070b4ff(props) {\n    let isSSR = (0, $1CM7W$useIsSSR)();\n    let { portalContainer: portalContainer = isSSR ? null : document.body, isExiting: isExiting } = props;\n    let [contain, setContain] = (0, $1CM7W$useState)(false);\n    let contextValue = (0, $1CM7W$useMemo)(()=>({\n            contain: contain,\n            setContain: setContain\n        }), [\n        contain,\n        setContain\n    ]);\n    let { getContainer: getContainer } = (0, $96b38030c423d352$export$9fc1347d4195ccb3)();\n    if (!props.portalContainer && getContainer) portalContainer = getContainer();\n    if (!portalContainer) return null;\n    let contents = props.children;\n    if (!props.disableFocusManagement) contents = /*#__PURE__*/ (0, $1CM7W$react).createElement((0, $1CM7W$FocusScope), {\n        restoreFocus: true,\n        contain: (props.shouldContainFocus || contain) && !isExiting\n    }, contents);\n    contents = /*#__PURE__*/ (0, $1CM7W$react).createElement($337b884510726a0d$export$a2200b96afd16271.Provider, {\n        value: contextValue\n    }, /*#__PURE__*/ (0, $1CM7W$react).createElement((0, $1CM7W$ClearPressResponder), null, contents));\n    return /*#__PURE__*/ (0, $1CM7W$reactdom).createPortal(contents, portalContainer);\n}\nfunction $337b884510726a0d$export$14c98a7594375490() {\n    let ctx = (0, $1CM7W$useContext)($337b884510726a0d$export$a2200b96afd16271);\n    let setContain = ctx === null || ctx === void 0 ? void 0 : ctx.setContain;\n    (0, $1CM7W$useLayoutEffect)(()=>{\n        setContain === null || setContain === void 0 ? void 0 : setContain(true);\n    }, [\n        setContain\n    ]);\n}\n\n\nexport {$337b884510726a0d$export$a2200b96afd16271 as OverlayContext, $337b884510726a0d$export$c6fdb837b070b4ff as Overlay, $337b884510726a0d$export$14c98a7594375490 as useOverlayFocusContain};\n//# sourceMappingURL=Overlay.module.js.map\n","import {ariaHideOutside as $5e3802645cc19319$export$1c3ebcada18427bf} from \"./ariaHideOutside.mjs\";\nimport {useOverlay as $a11501f3d1d39e6c$export$ea8f71083e90600f} from \"./useOverlay.mjs\";\nimport {useOverlayFocusContain as $337b884510726a0d$export$14c98a7594375490} from \"./Overlay.mjs\";\nimport {usePreventScroll as $49c51c25361d4cd2$export$ee0f7cc6afcd1c18} from \"./usePreventScroll.mjs\";\nimport {mergeProps as $7Dhkr$mergeProps} from \"@react-aria/utils\";\nimport {useEffect as $7Dhkr$useEffect} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $8ac8429251c45e4b$export$dbc0f175b25fb0fb(props, state, ref) {\n    let { overlayProps: overlayProps, underlayProps: underlayProps } = (0, $a11501f3d1d39e6c$export$ea8f71083e90600f)({\n        ...props,\n        isOpen: state.isOpen,\n        onClose: state.close\n    }, ref);\n    (0, $49c51c25361d4cd2$export$ee0f7cc6afcd1c18)({\n        isDisabled: !state.isOpen\n    });\n    (0, $337b884510726a0d$export$14c98a7594375490)();\n    (0, $7Dhkr$useEffect)(()=>{\n        if (state.isOpen && ref.current) return (0, $5e3802645cc19319$export$1c3ebcada18427bf)([\n            ref.current\n        ], {\n            shouldUseInert: true\n        });\n    }, [\n        state.isOpen,\n        ref\n    ]);\n    return {\n        modalProps: (0, $7Dhkr$mergeProps)(overlayProps),\n        underlayProps: underlayProps\n    };\n}\n\n\nexport {$8ac8429251c45e4b$export$dbc0f175b25fb0fb as useModalOverlay};\n//# sourceMappingURL=useModalOverlay.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $b1f0cad8af73213b$export$3585ede4d035bf14 = new WeakMap();\nfunction $b1f0cad8af73213b$var$normalizeKey(key) {\n    if (typeof key === 'string') return key.replace(/\\s*/g, '');\n    return '' + key;\n}\nfunction $b1f0cad8af73213b$export$9145995848b05025(state, itemKey) {\n    let data = $b1f0cad8af73213b$export$3585ede4d035bf14.get(state);\n    if (!data) throw new Error('Unknown list');\n    return `${data.id}-option-${$b1f0cad8af73213b$var$normalizeKey(itemKey)}`;\n}\n\n\nexport {$b1f0cad8af73213b$export$3585ede4d035bf14 as listData, $b1f0cad8af73213b$export$9145995848b05025 as getItemId};\n//# sourceMappingURL=utils.module.js.map\n","import {useId as $83Elw$useId, useLabels as $83Elw$useLabels} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $d191a55c9702f145$export$8467354a121f1b9f(props) {\n    let { id: id, label: label, 'aria-labelledby': ariaLabelledby, 'aria-label': ariaLabel, labelElementType: labelElementType = 'label' } = props;\n    id = (0, $83Elw$useId)(id);\n    let labelId = (0, $83Elw$useId)();\n    let labelProps = {};\n    if (label) {\n        ariaLabelledby = ariaLabelledby ? `${labelId} ${ariaLabelledby}` : labelId;\n        labelProps = {\n            id: labelId,\n            htmlFor: labelElementType === 'label' ? id : undefined\n        };\n    } else if (!ariaLabelledby && !ariaLabel && process.env.NODE_ENV !== 'production') console.warn('If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility');\n    let fieldProps = (0, $83Elw$useLabels)({\n        id: id,\n        'aria-label': ariaLabel,\n        'aria-labelledby': ariaLabelledby\n    });\n    return {\n        labelProps: labelProps,\n        fieldProps: fieldProps\n    };\n}\n\n\nexport {$d191a55c9702f145$export$8467354a121f1b9f as useLabel};\n//# sourceMappingURL=useLabel.module.js.map\n","import {useLabel as $d191a55c9702f145$export$8467354a121f1b9f} from \"./useLabel.mjs\";\nimport {useSlotId as $2kC82$useSlotId, mergeProps as $2kC82$mergeProps} from \"@react-aria/utils\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $2baaea4c71418dea$export$294aa081a6c6f55d(props) {\n    let { description: description, errorMessage: errorMessage, isInvalid: isInvalid, validationState: validationState } = props;\n    let { labelProps: labelProps, fieldProps: fieldProps } = (0, $d191a55c9702f145$export$8467354a121f1b9f)(props);\n    let descriptionId = (0, $2kC82$useSlotId)([\n        Boolean(description),\n        Boolean(errorMessage),\n        isInvalid,\n        validationState\n    ]);\n    let errorMessageId = (0, $2kC82$useSlotId)([\n        Boolean(description),\n        Boolean(errorMessage),\n        isInvalid,\n        validationState\n    ]);\n    fieldProps = (0, $2kC82$mergeProps)(fieldProps, {\n        'aria-describedby': [\n            descriptionId,\n            // Use aria-describedby for error message because aria-errormessage is unsupported using VoiceOver or NVDA. See https://github.com/adobe/react-spectrum/issues/1346#issuecomment-740136268\n            errorMessageId,\n            props['aria-describedby']\n        ].filter(Boolean).join(' ') || undefined\n    });\n    return {\n        labelProps: labelProps,\n        fieldProps: fieldProps,\n        descriptionProps: {\n            id: descriptionId\n        },\n        errorMessageProps: {\n            id: errorMessageId\n        }\n    };\n}\n\n\nexport {$2baaea4c71418dea$export$294aa081a6c6f55d as useField};\n//# sourceMappingURL=useField.module.js.map\n","import {isAppleDevice as $jUnAJ$isAppleDevice, useId as $jUnAJ$useId} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $feb5ffebff200149$export$d3e3bd3e26688c04(e) {\n    // Ctrl + Arrow Up/Arrow Down has a system wide meaning on macOS, so use Alt instead.\n    // On Windows and Ubuntu, Alt + Space has a system wide meaning.\n    return (0, $jUnAJ$isAppleDevice)() ? e.altKey : e.ctrlKey;\n}\nfunction $feb5ffebff200149$export$c3d8340acf92597f(collectionRef, key) {\n    var _collectionRef_current, _collectionRef_current1;\n    let selector = `[data-key=\"${CSS.escape(String(key))}\"]`;\n    let collection = (_collectionRef_current = collectionRef.current) === null || _collectionRef_current === void 0 ? void 0 : _collectionRef_current.dataset.collection;\n    if (collection) selector = `[data-collection=\"${CSS.escape(collection)}\"]${selector}`;\n    return (_collectionRef_current1 = collectionRef.current) === null || _collectionRef_current1 === void 0 ? void 0 : _collectionRef_current1.querySelector(selector);\n}\nconst $feb5ffebff200149$var$collectionMap = new WeakMap();\nfunction $feb5ffebff200149$export$881eb0d9f3605d9d(collection) {\n    let id = (0, $jUnAJ$useId)();\n    $feb5ffebff200149$var$collectionMap.set(collection, id);\n    return id;\n}\nfunction $feb5ffebff200149$export$6aeb1680a0ae8741(collection) {\n    return $feb5ffebff200149$var$collectionMap.get(collection);\n}\n\n\nexport {$feb5ffebff200149$export$d3e3bd3e26688c04 as isNonContiguousSelectionModifier, $feb5ffebff200149$export$c3d8340acf92597f as getItemElement, $feb5ffebff200149$export$881eb0d9f3605d9d as useCollectionId, $feb5ffebff200149$export$6aeb1680a0ae8741 as getCollectionId};\n//# sourceMappingURL=utils.module.js.map\n","import {useRef as $dAE4Y$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n/**\n * Controls how long to wait before clearing the typeahead buffer.\n */ const $fb3050f43d946246$var$TYPEAHEAD_DEBOUNCE_WAIT_MS = 1000; // 1 second\nfunction $fb3050f43d946246$export$e32c88dfddc6e1d8(options) {\n    let { keyboardDelegate: keyboardDelegate, selectionManager: selectionManager, onTypeSelect: onTypeSelect } = options;\n    let state = (0, $dAE4Y$useRef)({\n        search: '',\n        timeout: undefined\n    }).current;\n    let onKeyDown = (e)=>{\n        let character = $fb3050f43d946246$var$getStringForKey(e.key);\n        if (!character || e.ctrlKey || e.metaKey || !e.currentTarget.contains(e.target) || state.search.length === 0 && character === ' ') return;\n        // Do not propagate the Spacebar event if it's meant to be part of the search.\n        // When we time out, the search term becomes empty, hence the check on length.\n        // Trimming is to account for the case of pressing the Spacebar more than once,\n        // which should cycle through the selection/deselection of the focused item.\n        if (character === ' ' && state.search.trim().length > 0) {\n            e.preventDefault();\n            if (!('continuePropagation' in e)) e.stopPropagation();\n        }\n        state.search += character;\n        if (keyboardDelegate.getKeyForSearch != null) {\n            // Use the delegate to find a key to focus.\n            // Prioritize items after the currently focused item, falling back to searching the whole list.\n            let key = keyboardDelegate.getKeyForSearch(state.search, selectionManager.focusedKey);\n            // If no key found, search from the top.\n            if (key == null) key = keyboardDelegate.getKeyForSearch(state.search);\n            if (key != null) {\n                selectionManager.setFocusedKey(key);\n                if (onTypeSelect) onTypeSelect(key);\n            }\n        }\n        clearTimeout(state.timeout);\n        state.timeout = setTimeout(()=>{\n            state.search = '';\n        }, $fb3050f43d946246$var$TYPEAHEAD_DEBOUNCE_WAIT_MS);\n    };\n    return {\n        typeSelectProps: {\n            // Using a capturing listener to catch the keydown event before\n            // other hooks in order to handle the Spacebar event.\n            onKeyDownCapture: keyboardDelegate.getKeyForSearch ? onKeyDown : undefined\n        }\n    };\n}\nfunction $fb3050f43d946246$var$getStringForKey(key) {\n    // If the key is of length 1, it is an ASCII value.\n    // Otherwise, if there are no ASCII characters in the key name,\n    // it is a Unicode character.\n    // See https://www.w3.org/TR/uievents-key/\n    if (key.length === 1 || !/^[A-Z]/i.test(key)) return key;\n    return '';\n}\n\n\nexport {$fb3050f43d946246$export$e32c88dfddc6e1d8 as useTypeSelect};\n//# sourceMappingURL=useTypeSelect.module.js.map\n","import {getItemElement as $feb5ffebff200149$export$c3d8340acf92597f, isNonContiguousSelectionModifier as $feb5ffebff200149$export$d3e3bd3e26688c04, useCollectionId as $feb5ffebff200149$export$881eb0d9f3605d9d} from \"./utils.mjs\";\nimport {useTypeSelect as $fb3050f43d946246$export$e32c88dfddc6e1d8} from \"./useTypeSelect.mjs\";\nimport {useRouter as $3H3GQ$useRouter, isCtrlKeyPressed as $3H3GQ$isCtrlKeyPressed, isTabbable as $3H3GQ$isTabbable, focusWithoutScrolling as $3H3GQ$focusWithoutScrolling, useEvent as $3H3GQ$useEvent, scrollIntoViewport as $3H3GQ$scrollIntoViewport, FOCUS_EVENT as $3H3GQ$FOCUS_EVENT, useUpdateLayoutEffect as $3H3GQ$useUpdateLayoutEffect, getActiveElement as $3H3GQ$getActiveElement, CLEAR_FOCUS_EVENT as $3H3GQ$CLEAR_FOCUS_EVENT, scrollIntoView as $3H3GQ$scrollIntoView, mergeProps as $3H3GQ$mergeProps} from \"@react-aria/utils\";\nimport {getFocusableTreeWalker as $3H3GQ$getFocusableTreeWalker, moveVirtualFocus as $3H3GQ$moveVirtualFocus, dispatchVirtualFocus as $3H3GQ$dispatchVirtualFocus} from \"@react-aria/focus\";\nimport {flushSync as $3H3GQ$flushSync} from \"react-dom\";\nimport {useRef as $3H3GQ$useRef, useEffect as $3H3GQ$useEffect} from \"react\";\nimport {getInteractionModality as $3H3GQ$getInteractionModality, focusSafely as $3H3GQ$focusSafely} from \"@react-aria/interactions\";\nimport {useLocale as $3H3GQ$useLocale} from \"@react-aria/i18n\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\nfunction $ae20dd8cbca75726$export$d6daf82dcd84e87c(options) {\n    let { selectionManager: manager, keyboardDelegate: delegate, ref: ref, autoFocus: autoFocus = false, shouldFocusWrap: shouldFocusWrap = false, disallowEmptySelection: disallowEmptySelection = false, disallowSelectAll: disallowSelectAll = false, escapeKeyBehavior: escapeKeyBehavior = 'clearSelection', selectOnFocus: selectOnFocus = manager.selectionBehavior === 'replace', disallowTypeAhead: disallowTypeAhead = false, shouldUseVirtualFocus: shouldUseVirtualFocus, allowsTabNavigation: allowsTabNavigation = false, isVirtualized: isVirtualized, scrollRef: // If no scrollRef is provided, assume the collection ref is the scrollable region\n    scrollRef = ref, linkBehavior: linkBehavior = 'action' } = options;\n    let { direction: direction } = (0, $3H3GQ$useLocale)();\n    let router = (0, $3H3GQ$useRouter)();\n    let onKeyDown = (e)=>{\n        var _ref_current;\n        // Prevent option + tab from doing anything since it doesn't move focus to the cells, only buttons/checkboxes\n        if (e.altKey && e.key === 'Tab') e.preventDefault();\n        // Keyboard events bubble through portals. Don't handle keyboard events\n        // for elements outside the collection (e.g. menus).\n        if (!((_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.contains(e.target))) return;\n        const navigateToKey = (key, childFocus)=>{\n            if (key != null) {\n                if (manager.isLink(key) && linkBehavior === 'selection' && selectOnFocus && !(0, $feb5ffebff200149$export$d3e3bd3e26688c04)(e)) {\n                    // Set focused key and re-render synchronously to bring item into view if needed.\n                    (0, $3H3GQ$flushSync)(()=>{\n                        manager.setFocusedKey(key, childFocus);\n                    });\n                    let item = (0, $feb5ffebff200149$export$c3d8340acf92597f)(ref, key);\n                    let itemProps = manager.getItemProps(key);\n                    if (item) router.open(item, e, itemProps.href, itemProps.routerOptions);\n                    return;\n                }\n                manager.setFocusedKey(key, childFocus);\n                if (manager.isLink(key) && linkBehavior === 'override') return;\n                if (e.shiftKey && manager.selectionMode === 'multiple') manager.extendSelection(key);\n                else if (selectOnFocus && !(0, $feb5ffebff200149$export$d3e3bd3e26688c04)(e)) manager.replaceSelection(key);\n            }\n        };\n        switch(e.key){\n            case 'ArrowDown':\n                if (delegate.getKeyBelow) {\n                    var _delegate_getKeyBelow, _delegate_getFirstKey, _delegate_getFirstKey1;\n                    let nextKey = manager.focusedKey != null ? (_delegate_getKeyBelow = delegate.getKeyBelow) === null || _delegate_getKeyBelow === void 0 ? void 0 : _delegate_getKeyBelow.call(delegate, manager.focusedKey) : (_delegate_getFirstKey = delegate.getFirstKey) === null || _delegate_getFirstKey === void 0 ? void 0 : _delegate_getFirstKey.call(delegate);\n                    if (nextKey == null && shouldFocusWrap) nextKey = (_delegate_getFirstKey1 = delegate.getFirstKey) === null || _delegate_getFirstKey1 === void 0 ? void 0 : _delegate_getFirstKey1.call(delegate, manager.focusedKey);\n                    if (nextKey != null) {\n                        e.preventDefault();\n                        navigateToKey(nextKey);\n                    }\n                }\n                break;\n            case 'ArrowUp':\n                if (delegate.getKeyAbove) {\n                    var _delegate_getKeyAbove, _delegate_getLastKey, _delegate_getLastKey1;\n                    let nextKey = manager.focusedKey != null ? (_delegate_getKeyAbove = delegate.getKeyAbove) === null || _delegate_getKeyAbove === void 0 ? void 0 : _delegate_getKeyAbove.call(delegate, manager.focusedKey) : (_delegate_getLastKey = delegate.getLastKey) === null || _delegate_getLastKey === void 0 ? void 0 : _delegate_getLastKey.call(delegate);\n                    if (nextKey == null && shouldFocusWrap) nextKey = (_delegate_getLastKey1 = delegate.getLastKey) === null || _delegate_getLastKey1 === void 0 ? void 0 : _delegate_getLastKey1.call(delegate, manager.focusedKey);\n                    if (nextKey != null) {\n                        e.preventDefault();\n                        navigateToKey(nextKey);\n                    }\n                }\n                break;\n            case 'ArrowLeft':\n                if (delegate.getKeyLeftOf) {\n                    var _delegate_getKeyLeftOf, _delegate_getFirstKey2, _delegate_getLastKey2;\n                    let nextKey = manager.focusedKey != null ? (_delegate_getKeyLeftOf = delegate.getKeyLeftOf) === null || _delegate_getKeyLeftOf === void 0 ? void 0 : _delegate_getKeyLeftOf.call(delegate, manager.focusedKey) : null;\n                    if (nextKey == null && shouldFocusWrap) nextKey = direction === 'rtl' ? (_delegate_getFirstKey2 = delegate.getFirstKey) === null || _delegate_getFirstKey2 === void 0 ? void 0 : _delegate_getFirstKey2.call(delegate, manager.focusedKey) : (_delegate_getLastKey2 = delegate.getLastKey) === null || _delegate_getLastKey2 === void 0 ? void 0 : _delegate_getLastKey2.call(delegate, manager.focusedKey);\n                    if (nextKey != null) {\n                        e.preventDefault();\n                        navigateToKey(nextKey, direction === 'rtl' ? 'first' : 'last');\n                    }\n                }\n                break;\n            case 'ArrowRight':\n                if (delegate.getKeyRightOf) {\n                    var _delegate_getKeyRightOf, _delegate_getLastKey3, _delegate_getFirstKey3;\n                    let nextKey = manager.focusedKey != null ? (_delegate_getKeyRightOf = delegate.getKeyRightOf) === null || _delegate_getKeyRightOf === void 0 ? void 0 : _delegate_getKeyRightOf.call(delegate, manager.focusedKey) : null;\n                    if (nextKey == null && shouldFocusWrap) nextKey = direction === 'rtl' ? (_delegate_getLastKey3 = delegate.getLastKey) === null || _delegate_getLastKey3 === void 0 ? void 0 : _delegate_getLastKey3.call(delegate, manager.focusedKey) : (_delegate_getFirstKey3 = delegate.getFirstKey) === null || _delegate_getFirstKey3 === void 0 ? void 0 : _delegate_getFirstKey3.call(delegate, manager.focusedKey);\n                    if (nextKey != null) {\n                        e.preventDefault();\n                        navigateToKey(nextKey, direction === 'rtl' ? 'last' : 'first');\n                    }\n                }\n                break;\n            case 'Home':\n                if (delegate.getFirstKey) {\n                    if (manager.focusedKey === null && e.shiftKey) return;\n                    e.preventDefault();\n                    let firstKey = delegate.getFirstKey(manager.focusedKey, (0, $3H3GQ$isCtrlKeyPressed)(e));\n                    manager.setFocusedKey(firstKey);\n                    if (firstKey != null) {\n                        if ((0, $3H3GQ$isCtrlKeyPressed)(e) && e.shiftKey && manager.selectionMode === 'multiple') manager.extendSelection(firstKey);\n                        else if (selectOnFocus) manager.replaceSelection(firstKey);\n                    }\n                }\n                break;\n            case 'End':\n                if (delegate.getLastKey) {\n                    if (manager.focusedKey === null && e.shiftKey) return;\n                    e.preventDefault();\n                    let lastKey = delegate.getLastKey(manager.focusedKey, (0, $3H3GQ$isCtrlKeyPressed)(e));\n                    manager.setFocusedKey(lastKey);\n                    if (lastKey != null) {\n                        if ((0, $3H3GQ$isCtrlKeyPressed)(e) && e.shiftKey && manager.selectionMode === 'multiple') manager.extendSelection(lastKey);\n                        else if (selectOnFocus) manager.replaceSelection(lastKey);\n                    }\n                }\n                break;\n            case 'PageDown':\n                if (delegate.getKeyPageBelow && manager.focusedKey != null) {\n                    let nextKey = delegate.getKeyPageBelow(manager.focusedKey);\n                    if (nextKey != null) {\n                        e.preventDefault();\n                        navigateToKey(nextKey);\n                    }\n                }\n                break;\n            case 'PageUp':\n                if (delegate.getKeyPageAbove && manager.focusedKey != null) {\n                    let nextKey = delegate.getKeyPageAbove(manager.focusedKey);\n                    if (nextKey != null) {\n                        e.preventDefault();\n                        navigateToKey(nextKey);\n                    }\n                }\n                break;\n            case 'a':\n                if ((0, $3H3GQ$isCtrlKeyPressed)(e) && manager.selectionMode === 'multiple' && disallowSelectAll !== true) {\n                    e.preventDefault();\n                    manager.selectAll();\n                }\n                break;\n            case 'Escape':\n                if (escapeKeyBehavior === 'clearSelection' && !disallowEmptySelection && manager.selectedKeys.size !== 0) {\n                    e.stopPropagation();\n                    e.preventDefault();\n                    manager.clearSelection();\n                }\n                break;\n            case 'Tab':\n                if (!allowsTabNavigation) {\n                    // There may be elements that are \"tabbable\" inside a collection (e.g. in a grid cell).\n                    // However, collections should be treated as a single tab stop, with arrow key navigation internally.\n                    // We don't control the rendering of these, so we can't override the tabIndex to prevent tabbing.\n                    // Instead, we handle the Tab key, and move focus manually to the first/last tabbable element\n                    // in the collection, so that the browser default behavior will apply starting from that element\n                    // rather than the currently focused one.\n                    if (e.shiftKey) ref.current.focus();\n                    else {\n                        let walker = (0, $3H3GQ$getFocusableTreeWalker)(ref.current, {\n                            tabbable: true\n                        });\n                        let next = undefined;\n                        let last;\n                        do {\n                            last = walker.lastChild();\n                            if (last) next = last;\n                        }while (last);\n                        // If the active element is NOT tabbable but is contained by an element that IS tabbable (aka the cell), the browser will actually move focus to\n                        // the containing element. We need to special case this so that tab will move focus out of the grid instead of looping between\n                        // focusing the containing cell and back to the non-tabbable child element\n                        if (next && (!next.contains(document.activeElement) || document.activeElement && !(0, $3H3GQ$isTabbable)(document.activeElement))) (0, $3H3GQ$focusWithoutScrolling)(next);\n                    }\n                    break;\n                }\n        }\n    };\n    // Store the scroll position so we can restore it later.\n    /// TODO: should this happen all the time??\n    let scrollPos = (0, $3H3GQ$useRef)({\n        top: 0,\n        left: 0\n    });\n    (0, $3H3GQ$useEvent)(scrollRef, 'scroll', isVirtualized ? undefined : ()=>{\n        var _scrollRef_current, _scrollRef_current1;\n        var _scrollRef_current_scrollTop, _scrollRef_current_scrollLeft;\n        scrollPos.current = {\n            top: (_scrollRef_current_scrollTop = (_scrollRef_current = scrollRef.current) === null || _scrollRef_current === void 0 ? void 0 : _scrollRef_current.scrollTop) !== null && _scrollRef_current_scrollTop !== void 0 ? _scrollRef_current_scrollTop : 0,\n            left: (_scrollRef_current_scrollLeft = (_scrollRef_current1 = scrollRef.current) === null || _scrollRef_current1 === void 0 ? void 0 : _scrollRef_current1.scrollLeft) !== null && _scrollRef_current_scrollLeft !== void 0 ? _scrollRef_current_scrollLeft : 0\n        };\n    });\n    let onFocus = (e)=>{\n        if (manager.isFocused) {\n            // If a focus event bubbled through a portal, reset focus state.\n            if (!e.currentTarget.contains(e.target)) manager.setFocused(false);\n            return;\n        }\n        // Focus events can bubble through portals. Ignore these events.\n        if (!e.currentTarget.contains(e.target)) return;\n        manager.setFocused(true);\n        if (manager.focusedKey == null) {\n            var _delegate_getLastKey, _delegate_getFirstKey;\n            let navigateToKey = (key)=>{\n                if (key != null) {\n                    manager.setFocusedKey(key);\n                    if (selectOnFocus && !manager.isSelected(key)) manager.replaceSelection(key);\n                }\n            };\n            // If the user hasn't yet interacted with the collection, there will be no focusedKey set.\n            // Attempt to detect whether the user is tabbing forward or backward into the collection\n            // and either focus the first or last item accordingly.\n            let relatedTarget = e.relatedTarget;\n            var _manager_lastSelectedKey, _manager_firstSelectedKey;\n            if (relatedTarget && e.currentTarget.compareDocumentPosition(relatedTarget) & Node.DOCUMENT_POSITION_FOLLOWING) navigateToKey((_manager_lastSelectedKey = manager.lastSelectedKey) !== null && _manager_lastSelectedKey !== void 0 ? _manager_lastSelectedKey : (_delegate_getLastKey = delegate.getLastKey) === null || _delegate_getLastKey === void 0 ? void 0 : _delegate_getLastKey.call(delegate));\n            else navigateToKey((_manager_firstSelectedKey = manager.firstSelectedKey) !== null && _manager_firstSelectedKey !== void 0 ? _manager_firstSelectedKey : (_delegate_getFirstKey = delegate.getFirstKey) === null || _delegate_getFirstKey === void 0 ? void 0 : _delegate_getFirstKey.call(delegate));\n        } else if (!isVirtualized && scrollRef.current) {\n            // Restore the scroll position to what it was before.\n            scrollRef.current.scrollTop = scrollPos.current.top;\n            scrollRef.current.scrollLeft = scrollPos.current.left;\n        }\n        if (manager.focusedKey != null && scrollRef.current) {\n            // Refocus and scroll the focused item into view if it exists within the scrollable region.\n            let element = (0, $feb5ffebff200149$export$c3d8340acf92597f)(ref, manager.focusedKey);\n            if (element instanceof HTMLElement) {\n                // This prevents a flash of focus on the first/last element in the collection, or the collection itself.\n                if (!element.contains(document.activeElement) && !shouldUseVirtualFocus) (0, $3H3GQ$focusWithoutScrolling)(element);\n                let modality = (0, $3H3GQ$getInteractionModality)();\n                if (modality === 'keyboard') (0, $3H3GQ$scrollIntoViewport)(element, {\n                    containingElement: ref.current\n                });\n            }\n        }\n    };\n    let onBlur = (e)=>{\n        // Don't set blurred and then focused again if moving focus within the collection.\n        if (!e.currentTarget.contains(e.relatedTarget)) manager.setFocused(false);\n    };\n    // Ref to track whether the first item in the collection should be automatically focused. Specifically used for autocomplete when user types\n    // to focus the first key AFTER the collection updates.\n    // TODO: potentially expand the usage of this\n    let shouldVirtualFocusFirst = (0, $3H3GQ$useRef)(false);\n    // Add event listeners for custom virtual events. These handle updating the focused key in response to various keyboard events\n    // at the autocomplete level\n    // TODO: fix type later\n    (0, $3H3GQ$useEvent)(ref, (0, $3H3GQ$FOCUS_EVENT), !shouldUseVirtualFocus ? undefined : (e)=>{\n        let { detail: detail } = e;\n        e.stopPropagation();\n        manager.setFocused(true);\n        // If the user is typing forwards, autofocus the first option in the list.\n        if ((detail === null || detail === void 0 ? void 0 : detail.focusStrategy) === 'first') shouldVirtualFocusFirst.current = true;\n    });\n    // update active descendant\n    (0, $3H3GQ$useUpdateLayoutEffect)(()=>{\n        if (shouldVirtualFocusFirst.current) {\n            var _delegate_getFirstKey;\n            var _delegate_getFirstKey1;\n            let keyToFocus = (_delegate_getFirstKey1 = (_delegate_getFirstKey = delegate.getFirstKey) === null || _delegate_getFirstKey === void 0 ? void 0 : _delegate_getFirstKey.call(delegate)) !== null && _delegate_getFirstKey1 !== void 0 ? _delegate_getFirstKey1 : null;\n            // If no focusable items exist in the list, make sure to clear any activedescendant that may still exist and move focus back to\n            // the original active element (e.g. the autocomplete input)\n            if (keyToFocus == null) {\n                let previousActiveElement = (0, $3H3GQ$getActiveElement)();\n                (0, $3H3GQ$moveVirtualFocus)(ref.current);\n                (0, $3H3GQ$dispatchVirtualFocus)(previousActiveElement, null);\n                // If there wasn't a focusable key but the collection had items, then that means we aren't in an intermediate load state and all keys are disabled.\n                // Reset shouldVirtualFocusFirst so that we don't erronously autofocus an item when the collection is filtered again.\n                if (manager.collection.size > 0) shouldVirtualFocusFirst.current = false;\n            } else {\n                manager.setFocusedKey(keyToFocus);\n                // Only set shouldVirtualFocusFirst to false if we've successfully set the first key as the focused key\n                // If there wasn't a key to focus, we might be in a temporary loading state so we'll want to still focus the first key\n                // after the collection updates after load\n                shouldVirtualFocusFirst.current = false;\n            }\n        }\n    }, [\n        manager.collection\n    ]);\n    // reset focus first flag\n    (0, $3H3GQ$useUpdateLayoutEffect)(()=>{\n        // If user causes the focused key to change in any other way, clear shouldVirtualFocusFirst so we don't\n        // accidentally move focus from under them. Skip this if the collection was empty because we might be in a load\n        // state and will still want to focus the first item after load\n        if (manager.collection.size > 0) shouldVirtualFocusFirst.current = false;\n    }, [\n        manager.focusedKey\n    ]);\n    (0, $3H3GQ$useEvent)(ref, (0, $3H3GQ$CLEAR_FOCUS_EVENT), !shouldUseVirtualFocus ? undefined : (e)=>{\n        var _e_detail;\n        e.stopPropagation();\n        manager.setFocused(false);\n        if ((_e_detail = e.detail) === null || _e_detail === void 0 ? void 0 : _e_detail.clearFocusKey) manager.setFocusedKey(null);\n    });\n    const autoFocusRef = (0, $3H3GQ$useRef)(autoFocus);\n    const didAutoFocusRef = (0, $3H3GQ$useRef)(false);\n    (0, $3H3GQ$useEffect)(()=>{\n        if (autoFocusRef.current) {\n            var _delegate_getFirstKey, _delegate_getLastKey;\n            let focusedKey = null;\n            var _delegate_getFirstKey1;\n            // Check focus strategy to determine which item to focus\n            if (autoFocus === 'first') focusedKey = (_delegate_getFirstKey1 = (_delegate_getFirstKey = delegate.getFirstKey) === null || _delegate_getFirstKey === void 0 ? void 0 : _delegate_getFirstKey.call(delegate)) !== null && _delegate_getFirstKey1 !== void 0 ? _delegate_getFirstKey1 : null;\n            var _delegate_getLastKey1;\n            if (autoFocus === 'last') focusedKey = (_delegate_getLastKey1 = (_delegate_getLastKey = delegate.getLastKey) === null || _delegate_getLastKey === void 0 ? void 0 : _delegate_getLastKey.call(delegate)) !== null && _delegate_getLastKey1 !== void 0 ? _delegate_getLastKey1 : null;\n            // If there are any selected keys, make the first one the new focus target\n            let selectedKeys = manager.selectedKeys;\n            if (selectedKeys.size) {\n                for (let key of selectedKeys)if (manager.canSelectItem(key)) {\n                    focusedKey = key;\n                    break;\n                }\n            }\n            manager.setFocused(true);\n            manager.setFocusedKey(focusedKey);\n            // If no default focus key is selected, focus the collection itself.\n            if (focusedKey == null && !shouldUseVirtualFocus && ref.current) (0, $3H3GQ$focusSafely)(ref.current);\n            // Wait until the collection has items to autofocus.\n            if (manager.collection.size > 0) {\n                autoFocusRef.current = false;\n                didAutoFocusRef.current = true;\n            }\n        }\n    });\n    // Scroll the focused element into view when the focusedKey changes.\n    let lastFocusedKey = (0, $3H3GQ$useRef)(manager.focusedKey);\n    let raf = (0, $3H3GQ$useRef)(null);\n    (0, $3H3GQ$useEffect)(()=>{\n        if (manager.isFocused && manager.focusedKey != null && (manager.focusedKey !== lastFocusedKey.current || didAutoFocusRef.current) && scrollRef.current && ref.current) {\n            let modality = (0, $3H3GQ$getInteractionModality)();\n            let element = (0, $feb5ffebff200149$export$c3d8340acf92597f)(ref, manager.focusedKey);\n            if (!(element instanceof HTMLElement)) // If item element wasn't found, return early (don't update autoFocusRef and lastFocusedKey).\n            // The collection may initially be empty (e.g. virtualizer), so wait until the element exists.\n            return;\n            if (modality === 'keyboard' || didAutoFocusRef.current) {\n                if (raf.current) cancelAnimationFrame(raf.current);\n                raf.current = requestAnimationFrame(()=>{\n                    if (scrollRef.current) {\n                        (0, $3H3GQ$scrollIntoView)(scrollRef.current, element);\n                        // Avoid scroll in iOS VO, since it may cause overlay to close (i.e. RAC submenu)\n                        if (modality !== 'virtual') (0, $3H3GQ$scrollIntoViewport)(element, {\n                            containingElement: ref.current\n                        });\n                    }\n                });\n            }\n        }\n        // If the focused key becomes null (e.g. the last item is deleted), focus the whole collection.\n        if (!shouldUseVirtualFocus && manager.isFocused && manager.focusedKey == null && lastFocusedKey.current != null && ref.current) (0, $3H3GQ$focusSafely)(ref.current);\n        lastFocusedKey.current = manager.focusedKey;\n        didAutoFocusRef.current = false;\n    });\n    (0, $3H3GQ$useEffect)(()=>{\n        return ()=>{\n            if (raf.current) cancelAnimationFrame(raf.current);\n        };\n    }, []);\n    // Intercept FocusScope restoration since virtualized collections can reuse DOM nodes.\n    (0, $3H3GQ$useEvent)(ref, 'react-aria-focus-scope-restore', (e)=>{\n        e.preventDefault();\n        manager.setFocused(true);\n    });\n    let handlers = {\n        onKeyDown: onKeyDown,\n        onFocus: onFocus,\n        onBlur: onBlur,\n        onMouseDown (e) {\n            // Ignore events that bubbled through portals.\n            if (scrollRef.current === e.target) // Prevent focus going to the collection when clicking on the scrollbar.\n            e.preventDefault();\n        }\n    };\n    let { typeSelectProps: typeSelectProps } = (0, $fb3050f43d946246$export$e32c88dfddc6e1d8)({\n        keyboardDelegate: delegate,\n        selectionManager: manager\n    });\n    if (!disallowTypeAhead) handlers = (0, $3H3GQ$mergeProps)(typeSelectProps, handlers);\n    // If nothing is focused within the collection, make the collection itself tabbable.\n    // This will be marshalled to either the first or last item depending on where focus came from.\n    let tabIndex = undefined;\n    if (!shouldUseVirtualFocus) tabIndex = manager.focusedKey == null ? 0 : -1;\n    let collectionId = (0, $feb5ffebff200149$export$881eb0d9f3605d9d)(manager.collection);\n    return {\n        collectionProps: (0, $3H3GQ$mergeProps)(handlers, {\n            tabIndex: tabIndex,\n            'data-collection': collectionId\n        })\n    };\n}\n\n\nexport {$ae20dd8cbca75726$export$d6daf82dcd84e87c as useSelectableCollection};\n//# sourceMappingURL=useSelectableCollection.module.js.map\n","import {getCollectionId as $feb5ffebff200149$export$6aeb1680a0ae8741, isNonContiguousSelectionModifier as $feb5ffebff200149$export$d3e3bd3e26688c04} from \"./utils.mjs\";\nimport {useRouter as $581M0$useRouter, useId as $581M0$useId, isCtrlKeyPressed as $581M0$isCtrlKeyPressed, mergeProps as $581M0$mergeProps, chain as $581M0$chain, openLink as $581M0$openLink} from \"@react-aria/utils\";\nimport {focusSafely as $581M0$focusSafely, usePress as $581M0$usePress, useLongPress as $581M0$useLongPress} from \"@react-aria/interactions\";\nimport {moveVirtualFocus as $581M0$moveVirtualFocus} from \"@react-aria/focus\";\nimport {useEffect as $581M0$useEffect, useRef as $581M0$useRef} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $880e95eb8b93ba9a$export$ecf600387e221c37(options) {\n    let { id: id, selectionManager: manager, key: key, ref: ref, shouldSelectOnPressUp: shouldSelectOnPressUp, shouldUseVirtualFocus: shouldUseVirtualFocus, focus: focus, isDisabled: isDisabled, onAction: onAction, allowsDifferentPressOrigin: allowsDifferentPressOrigin, linkBehavior: linkBehavior = 'action' } = options;\n    let router = (0, $581M0$useRouter)();\n    id = (0, $581M0$useId)(id);\n    let onSelect = (e)=>{\n        if (e.pointerType === 'keyboard' && (0, $feb5ffebff200149$export$d3e3bd3e26688c04)(e)) manager.toggleSelection(key);\n        else {\n            if (manager.selectionMode === 'none') return;\n            if (manager.isLink(key)) {\n                if (linkBehavior === 'selection' && ref.current) {\n                    let itemProps = manager.getItemProps(key);\n                    router.open(ref.current, e, itemProps.href, itemProps.routerOptions);\n                    // Always set selected keys back to what they were so that select and combobox close.\n                    manager.setSelectedKeys(manager.selectedKeys);\n                    return;\n                } else if (linkBehavior === 'override' || linkBehavior === 'none') return;\n            }\n            if (manager.selectionMode === 'single') {\n                if (manager.isSelected(key) && !manager.disallowEmptySelection) manager.toggleSelection(key);\n                else manager.replaceSelection(key);\n            } else if (e && e.shiftKey) manager.extendSelection(key);\n            else if (manager.selectionBehavior === 'toggle' || e && ((0, $581M0$isCtrlKeyPressed)(e) || e.pointerType === 'touch' || e.pointerType === 'virtual')) // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n            manager.toggleSelection(key);\n            else manager.replaceSelection(key);\n        }\n    };\n    // Focus the associated DOM node when this item becomes the focusedKey\n    // TODO: can't make this useLayoutEffect bacause it breaks menus inside dialogs\n    // However, if this is a useEffect, it runs twice and dispatches two blur events and immediately sets\n    // aria-activeDescendant in useAutocomplete... I've worked around this for now\n    (0, $581M0$useEffect)(()=>{\n        let isFocused = key === manager.focusedKey;\n        if (isFocused && manager.isFocused) {\n            if (!shouldUseVirtualFocus) {\n                if (focus) focus();\n                else if (document.activeElement !== ref.current && ref.current) (0, $581M0$focusSafely)(ref.current);\n            } else (0, $581M0$moveVirtualFocus)(ref.current);\n        }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        ref,\n        key,\n        manager.focusedKey,\n        manager.childFocusStrategy,\n        manager.isFocused,\n        shouldUseVirtualFocus\n    ]);\n    isDisabled = isDisabled || manager.isDisabled(key);\n    // Set tabIndex to 0 if the element is focused, or -1 otherwise so that only the last focused\n    // item is tabbable.  If using virtual focus, don't set a tabIndex at all so that VoiceOver\n    // on iOS 14 doesn't try to move real DOM focus to the item anyway.\n    let itemProps = {};\n    if (!shouldUseVirtualFocus && !isDisabled) itemProps = {\n        tabIndex: key === manager.focusedKey ? 0 : -1,\n        onFocus (e) {\n            if (e.target === ref.current) manager.setFocusedKey(key);\n        }\n    };\n    else if (isDisabled) itemProps.onMouseDown = (e)=>{\n        // Prevent focus going to the body when clicking on a disabled item.\n        e.preventDefault();\n    };\n    // With checkbox selection, onAction (i.e. navigation) becomes primary, and occurs on a single click of the row.\n    // Clicking the checkbox enters selection mode, after which clicking anywhere on any row toggles selection for that row.\n    // With highlight selection, onAction is secondary, and occurs on double click. Single click selects the row.\n    // With touch, onAction occurs on single tap, and long press enters selection mode.\n    let isLinkOverride = manager.isLink(key) && linkBehavior === 'override';\n    let isActionOverride = onAction && options['UNSTABLE_itemBehavior'] === 'action';\n    let hasLinkAction = manager.isLink(key) && linkBehavior !== 'selection' && linkBehavior !== 'none';\n    let allowsSelection = !isDisabled && manager.canSelectItem(key) && !isLinkOverride && !isActionOverride;\n    let allowsActions = (onAction || hasLinkAction) && !isDisabled;\n    let hasPrimaryAction = allowsActions && (manager.selectionBehavior === 'replace' ? !allowsSelection : !allowsSelection || manager.isEmpty);\n    let hasSecondaryAction = allowsActions && allowsSelection && manager.selectionBehavior === 'replace';\n    let hasAction = hasPrimaryAction || hasSecondaryAction;\n    let modality = (0, $581M0$useRef)(null);\n    let longPressEnabled = hasAction && allowsSelection;\n    let longPressEnabledOnPressStart = (0, $581M0$useRef)(false);\n    let hadPrimaryActionOnPressStart = (0, $581M0$useRef)(false);\n    let collectionItemProps = manager.getItemProps(key);\n    let performAction = (e)=>{\n        if (onAction) {\n            var _ref_current;\n            onAction();\n            (_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.dispatchEvent(new CustomEvent('react-aria-item-action', {\n                bubbles: true\n            }));\n        }\n        if (hasLinkAction && ref.current) router.open(ref.current, e, collectionItemProps.href, collectionItemProps.routerOptions);\n    };\n    // By default, selection occurs on pointer down. This can be strange if selecting an\n    // item causes the UI to disappear immediately (e.g. menus).\n    // If shouldSelectOnPressUp is true, we use onPressUp instead of onPressStart.\n    // onPress requires a pointer down event on the same element as pointer up. For menus,\n    // we want to be able to have the pointer down on the trigger that opens the menu and\n    // the pointer up on the menu item rather than requiring a separate press.\n    // For keyboard events, selection still occurs on key down.\n    let itemPressProps = {\n        ref: ref\n    };\n    if (shouldSelectOnPressUp) {\n        itemPressProps.onPressStart = (e)=>{\n            modality.current = e.pointerType;\n            longPressEnabledOnPressStart.current = longPressEnabled;\n            if (e.pointerType === 'keyboard' && (!hasAction || $880e95eb8b93ba9a$var$isSelectionKey())) onSelect(e);\n        };\n        // If allowsDifferentPressOrigin and interacting with mouse, make selection happen on pressUp (e.g. open menu on press down, selection on menu item happens on press up.)\n        // Otherwise, have selection happen onPress (prevents listview row selection when clicking on interactable elements in the row)\n        if (!allowsDifferentPressOrigin) itemPressProps.onPress = (e)=>{\n            if (hasPrimaryAction || hasSecondaryAction && e.pointerType !== 'mouse') {\n                if (e.pointerType === 'keyboard' && !$880e95eb8b93ba9a$var$isActionKey()) return;\n                performAction(e);\n            } else if (e.pointerType !== 'keyboard' && allowsSelection) onSelect(e);\n        };\n        else {\n            itemPressProps.onPressUp = hasPrimaryAction ? undefined : (e)=>{\n                if (e.pointerType === 'mouse' && allowsSelection) onSelect(e);\n            };\n            itemPressProps.onPress = hasPrimaryAction ? performAction : (e)=>{\n                if (e.pointerType !== 'keyboard' && e.pointerType !== 'mouse' && allowsSelection) onSelect(e);\n            };\n        }\n    } else {\n        itemPressProps.onPressStart = (e)=>{\n            modality.current = e.pointerType;\n            longPressEnabledOnPressStart.current = longPressEnabled;\n            hadPrimaryActionOnPressStart.current = hasPrimaryAction;\n            // Select on mouse down unless there is a primary action which will occur on mouse up.\n            // For keyboard, select on key down. If there is an action, the Space key selects on key down,\n            // and the Enter key performs onAction on key up.\n            if (allowsSelection && (e.pointerType === 'mouse' && !hasPrimaryAction || e.pointerType === 'keyboard' && (!allowsActions || $880e95eb8b93ba9a$var$isSelectionKey()))) onSelect(e);\n        };\n        itemPressProps.onPress = (e)=>{\n            // Selection occurs on touch up. Primary actions always occur on pointer up.\n            // Both primary and secondary actions occur on Enter key up. The only exception\n            // is secondary actions, which occur on double click with a mouse.\n            if (e.pointerType === 'touch' || e.pointerType === 'pen' || e.pointerType === 'virtual' || e.pointerType === 'keyboard' && hasAction && $880e95eb8b93ba9a$var$isActionKey() || e.pointerType === 'mouse' && hadPrimaryActionOnPressStart.current) {\n                if (hasAction) performAction(e);\n                else if (allowsSelection) onSelect(e);\n            }\n        };\n    }\n    itemProps['data-collection'] = (0, $feb5ffebff200149$export$6aeb1680a0ae8741)(manager.collection);\n    itemProps['data-key'] = key;\n    itemPressProps.preventFocusOnPress = shouldUseVirtualFocus;\n    // When using virtual focus, make sure the focused key gets updated on press.\n    if (shouldUseVirtualFocus) itemPressProps = (0, $581M0$mergeProps)(itemPressProps, {\n        onPressStart (e) {\n            if (e.pointerType !== 'touch') {\n                manager.setFocused(true);\n                manager.setFocusedKey(key);\n            }\n        },\n        onPress (e) {\n            if (e.pointerType === 'touch') {\n                manager.setFocused(true);\n                manager.setFocusedKey(key);\n            }\n        }\n    });\n    if (collectionItemProps) {\n        for (let key of [\n            'onPressStart',\n            'onPressEnd',\n            'onPressChange',\n            'onPress',\n            'onPressUp',\n            'onClick'\n        ])if (collectionItemProps[key]) itemPressProps[key] = (0, $581M0$chain)(itemPressProps[key], collectionItemProps[key]);\n    }\n    let { pressProps: pressProps, isPressed: isPressed } = (0, $581M0$usePress)(itemPressProps);\n    // Double clicking with a mouse with selectionBehavior = 'replace' performs an action.\n    let onDoubleClick = hasSecondaryAction ? (e)=>{\n        if (modality.current === 'mouse') {\n            e.stopPropagation();\n            e.preventDefault();\n            performAction(e);\n        }\n    } : undefined;\n    // Long pressing an item with touch when selectionBehavior = 'replace' switches the selection behavior\n    // to 'toggle'. This changes the single tap behavior from performing an action (i.e. navigating) to\n    // selecting, and may toggle the appearance of a UI affordance like checkboxes on each item.\n    let { longPressProps: longPressProps } = (0, $581M0$useLongPress)({\n        isDisabled: !longPressEnabled,\n        onLongPress (e) {\n            if (e.pointerType === 'touch') {\n                onSelect(e);\n                manager.setSelectionBehavior('toggle');\n            }\n        }\n    });\n    // Prevent native drag and drop on long press if we also select on long press.\n    // Once the user is in selection mode, they can long press again to drag.\n    // Use a capturing listener to ensure this runs before useDrag, regardless of\n    // the order the props get merged.\n    let onDragStartCapture = (e)=>{\n        if (modality.current === 'touch' && longPressEnabledOnPressStart.current) e.preventDefault();\n    };\n    // Prevent default on link clicks so that we control exactly\n    // when they open (to match selection behavior).\n    let onClick = linkBehavior !== 'none' && manager.isLink(key) ? (e)=>{\n        if (!(0, $581M0$openLink).isOpening) e.preventDefault();\n    } : undefined;\n    return {\n        itemProps: (0, $581M0$mergeProps)(itemProps, allowsSelection || hasPrimaryAction || shouldUseVirtualFocus && !isDisabled ? pressProps : {}, longPressEnabled ? longPressProps : {}, {\n            onDoubleClick: onDoubleClick,\n            onDragStartCapture: onDragStartCapture,\n            onClick: onClick,\n            id: id\n        }, // Prevent DOM focus from moving on mouse down when using virtual focus\n        shouldUseVirtualFocus ? {\n            onMouseDown: (e)=>e.preventDefault()\n        } : undefined),\n        isPressed: isPressed,\n        isSelected: manager.isSelected(key),\n        isFocused: manager.isFocused && manager.focusedKey === key,\n        isDisabled: isDisabled,\n        allowsSelection: allowsSelection,\n        hasAction: hasAction\n    };\n}\nfunction $880e95eb8b93ba9a$var$isActionKey() {\n    let event = window.event;\n    return (event === null || event === void 0 ? void 0 : event.key) === 'Enter';\n}\nfunction $880e95eb8b93ba9a$var$isSelectionKey() {\n    let event = window.event;\n    return (event === null || event === void 0 ? void 0 : event.key) === ' ' || (event === null || event === void 0 ? void 0 : event.code) === 'Space';\n}\n\n\nexport {$880e95eb8b93ba9a$export$ecf600387e221c37 as useSelectableItem};\n//# sourceMappingURL=useSelectableItem.module.js.map\n","import {getItemElement as $feb5ffebff200149$export$c3d8340acf92597f} from \"./utils.mjs\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nclass $657e4dc4a6e88df0$export$8f5ed9ff9f511381 {\n    getItemRect(key) {\n        let container = this.ref.current;\n        if (!container) return null;\n        let item = key != null ? (0, $feb5ffebff200149$export$c3d8340acf92597f)(this.ref, key) : null;\n        if (!item) return null;\n        let containerRect = container.getBoundingClientRect();\n        let itemRect = item.getBoundingClientRect();\n        return {\n            x: itemRect.left - containerRect.left - container.clientLeft + container.scrollLeft,\n            y: itemRect.top - containerRect.top - container.clientTop + container.scrollTop,\n            width: itemRect.width,\n            height: itemRect.height\n        };\n    }\n    getContentSize() {\n        let container = this.ref.current;\n        var _container_scrollWidth, _container_scrollHeight;\n        return {\n            width: (_container_scrollWidth = container === null || container === void 0 ? void 0 : container.scrollWidth) !== null && _container_scrollWidth !== void 0 ? _container_scrollWidth : 0,\n            height: (_container_scrollHeight = container === null || container === void 0 ? void 0 : container.scrollHeight) !== null && _container_scrollHeight !== void 0 ? _container_scrollHeight : 0\n        };\n    }\n    getVisibleRect() {\n        let container = this.ref.current;\n        var _container_scrollLeft, _container_scrollTop, _container_clientWidth, _container_clientHeight;\n        return {\n            x: (_container_scrollLeft = container === null || container === void 0 ? void 0 : container.scrollLeft) !== null && _container_scrollLeft !== void 0 ? _container_scrollLeft : 0,\n            y: (_container_scrollTop = container === null || container === void 0 ? void 0 : container.scrollTop) !== null && _container_scrollTop !== void 0 ? _container_scrollTop : 0,\n            width: (_container_clientWidth = container === null || container === void 0 ? void 0 : container.clientWidth) !== null && _container_clientWidth !== void 0 ? _container_clientWidth : 0,\n            height: (_container_clientHeight = container === null || container === void 0 ? void 0 : container.clientHeight) !== null && _container_clientHeight !== void 0 ? _container_clientHeight : 0\n        };\n    }\n    constructor(ref){\n        this.ref = ref;\n    }\n}\n\n\nexport {$657e4dc4a6e88df0$export$8f5ed9ff9f511381 as DOMLayoutDelegate};\n//# sourceMappingURL=DOMLayoutDelegate.module.js.map\n","import {DOMLayoutDelegate as $657e4dc4a6e88df0$export$8f5ed9ff9f511381} from \"./DOMLayoutDelegate.mjs\";\nimport {isScrollable as $eak97$isScrollable} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nclass $2a25aae57d74318e$export$a05409b8bb224a5a {\n    isDisabled(item) {\n        var _item_props;\n        return this.disabledBehavior === 'all' && (((_item_props = item.props) === null || _item_props === void 0 ? void 0 : _item_props.isDisabled) || this.disabledKeys.has(item.key));\n    }\n    findNextNonDisabled(key, getNext) {\n        let nextKey = key;\n        while(nextKey != null){\n            let item = this.collection.getItem(nextKey);\n            if ((item === null || item === void 0 ? void 0 : item.type) === 'item' && !this.isDisabled(item)) return nextKey;\n            nextKey = getNext(nextKey);\n        }\n        return null;\n    }\n    getNextKey(key) {\n        let nextKey = key;\n        nextKey = this.collection.getKeyAfter(nextKey);\n        return this.findNextNonDisabled(nextKey, (key)=>this.collection.getKeyAfter(key));\n    }\n    getPreviousKey(key) {\n        let nextKey = key;\n        nextKey = this.collection.getKeyBefore(nextKey);\n        return this.findNextNonDisabled(nextKey, (key)=>this.collection.getKeyBefore(key));\n    }\n    findKey(key, nextKey, shouldSkip) {\n        let tempKey = key;\n        let itemRect = this.layoutDelegate.getItemRect(tempKey);\n        if (!itemRect || tempKey == null) return null;\n        // Find the item above or below in the same column.\n        let prevRect = itemRect;\n        do {\n            tempKey = nextKey(tempKey);\n            if (tempKey == null) break;\n            itemRect = this.layoutDelegate.getItemRect(tempKey);\n        }while (itemRect && shouldSkip(prevRect, itemRect) && tempKey != null);\n        return tempKey;\n    }\n    isSameRow(prevRect, itemRect) {\n        return prevRect.y === itemRect.y || prevRect.x !== itemRect.x;\n    }\n    isSameColumn(prevRect, itemRect) {\n        return prevRect.x === itemRect.x || prevRect.y !== itemRect.y;\n    }\n    getKeyBelow(key) {\n        if (this.layout === 'grid' && this.orientation === 'vertical') return this.findKey(key, (key)=>this.getNextKey(key), this.isSameRow);\n        else return this.getNextKey(key);\n    }\n    getKeyAbove(key) {\n        if (this.layout === 'grid' && this.orientation === 'vertical') return this.findKey(key, (key)=>this.getPreviousKey(key), this.isSameRow);\n        else return this.getPreviousKey(key);\n    }\n    getNextColumn(key, right) {\n        return right ? this.getPreviousKey(key) : this.getNextKey(key);\n    }\n    getKeyRightOf(key) {\n        // This is a temporary solution for CardView until we refactor useSelectableCollection.\n        // https://github.com/orgs/adobe/projects/19/views/32?pane=issue&itemId=77825042\n        let layoutDelegateMethod = this.direction === 'ltr' ? 'getKeyRightOf' : 'getKeyLeftOf';\n        if (this.layoutDelegate[layoutDelegateMethod]) {\n            key = this.layoutDelegate[layoutDelegateMethod](key);\n            return this.findNextNonDisabled(key, (key)=>this.layoutDelegate[layoutDelegateMethod](key));\n        }\n        if (this.layout === 'grid') {\n            if (this.orientation === 'vertical') return this.getNextColumn(key, this.direction === 'rtl');\n            else return this.findKey(key, (key)=>this.getNextColumn(key, this.direction === 'rtl'), this.isSameColumn);\n        } else if (this.orientation === 'horizontal') return this.getNextColumn(key, this.direction === 'rtl');\n        return null;\n    }\n    getKeyLeftOf(key) {\n        let layoutDelegateMethod = this.direction === 'ltr' ? 'getKeyLeftOf' : 'getKeyRightOf';\n        if (this.layoutDelegate[layoutDelegateMethod]) {\n            key = this.layoutDelegate[layoutDelegateMethod](key);\n            return this.findNextNonDisabled(key, (key)=>this.layoutDelegate[layoutDelegateMethod](key));\n        }\n        if (this.layout === 'grid') {\n            if (this.orientation === 'vertical') return this.getNextColumn(key, this.direction === 'ltr');\n            else return this.findKey(key, (key)=>this.getNextColumn(key, this.direction === 'ltr'), this.isSameColumn);\n        } else if (this.orientation === 'horizontal') return this.getNextColumn(key, this.direction === 'ltr');\n        return null;\n    }\n    getFirstKey() {\n        let key = this.collection.getFirstKey();\n        return this.findNextNonDisabled(key, (key)=>this.collection.getKeyAfter(key));\n    }\n    getLastKey() {\n        let key = this.collection.getLastKey();\n        return this.findNextNonDisabled(key, (key)=>this.collection.getKeyBefore(key));\n    }\n    getKeyPageAbove(key) {\n        let menu = this.ref.current;\n        let itemRect = this.layoutDelegate.getItemRect(key);\n        if (!itemRect) return null;\n        if (menu && !(0, $eak97$isScrollable)(menu)) return this.getFirstKey();\n        let nextKey = key;\n        if (this.orientation === 'horizontal') {\n            let pageX = Math.max(0, itemRect.x + itemRect.width - this.layoutDelegate.getVisibleRect().width);\n            while(itemRect && itemRect.x > pageX && nextKey != null){\n                nextKey = this.getKeyAbove(nextKey);\n                itemRect = nextKey == null ? null : this.layoutDelegate.getItemRect(nextKey);\n            }\n        } else {\n            let pageY = Math.max(0, itemRect.y + itemRect.height - this.layoutDelegate.getVisibleRect().height);\n            while(itemRect && itemRect.y > pageY && nextKey != null){\n                nextKey = this.getKeyAbove(nextKey);\n                itemRect = nextKey == null ? null : this.layoutDelegate.getItemRect(nextKey);\n            }\n        }\n        return nextKey !== null && nextKey !== void 0 ? nextKey : this.getFirstKey();\n    }\n    getKeyPageBelow(key) {\n        let menu = this.ref.current;\n        let itemRect = this.layoutDelegate.getItemRect(key);\n        if (!itemRect) return null;\n        if (menu && !(0, $eak97$isScrollable)(menu)) return this.getLastKey();\n        let nextKey = key;\n        if (this.orientation === 'horizontal') {\n            let pageX = Math.min(this.layoutDelegate.getContentSize().width, itemRect.y - itemRect.width + this.layoutDelegate.getVisibleRect().width);\n            while(itemRect && itemRect.x < pageX && nextKey != null){\n                nextKey = this.getKeyBelow(nextKey);\n                itemRect = nextKey == null ? null : this.layoutDelegate.getItemRect(nextKey);\n            }\n        } else {\n            let pageY = Math.min(this.layoutDelegate.getContentSize().height, itemRect.y - itemRect.height + this.layoutDelegate.getVisibleRect().height);\n            while(itemRect && itemRect.y < pageY && nextKey != null){\n                nextKey = this.getKeyBelow(nextKey);\n                itemRect = nextKey == null ? null : this.layoutDelegate.getItemRect(nextKey);\n            }\n        }\n        return nextKey !== null && nextKey !== void 0 ? nextKey : this.getLastKey();\n    }\n    getKeyForSearch(search, fromKey) {\n        if (!this.collator) return null;\n        let collection = this.collection;\n        let key = fromKey || this.getFirstKey();\n        while(key != null){\n            let item = collection.getItem(key);\n            if (!item) return null;\n            let substring = item.textValue.slice(0, search.length);\n            if (item.textValue && this.collator.compare(substring, search) === 0) return key;\n            key = this.getNextKey(key);\n        }\n        return null;\n    }\n    constructor(...args){\n        if (args.length === 1) {\n            let opts = args[0];\n            this.collection = opts.collection;\n            this.ref = opts.ref;\n            this.collator = opts.collator;\n            this.disabledKeys = opts.disabledKeys || new Set();\n            this.disabledBehavior = opts.disabledBehavior || 'all';\n            this.orientation = opts.orientation || 'vertical';\n            this.direction = opts.direction;\n            this.layout = opts.layout || 'stack';\n            this.layoutDelegate = opts.layoutDelegate || new (0, $657e4dc4a6e88df0$export$8f5ed9ff9f511381)(opts.ref);\n        } else {\n            this.collection = args[0];\n            this.disabledKeys = args[1];\n            this.ref = args[2];\n            this.collator = args[3];\n            this.layout = 'stack';\n            this.orientation = 'vertical';\n            this.disabledBehavior = 'all';\n            this.layoutDelegate = new (0, $657e4dc4a6e88df0$export$8f5ed9ff9f511381)(this.ref);\n        }\n        // If this is a vertical stack, remove the left/right methods completely\n        // so they aren't called by useDroppableCollection.\n        if (this.layout === 'stack' && this.orientation === 'vertical') {\n            this.getKeyLeftOf = undefined;\n            this.getKeyRightOf = undefined;\n        }\n    }\n}\n\n\nexport {$2a25aae57d74318e$export$a05409b8bb224a5a as ListKeyboardDelegate};\n//# sourceMappingURL=ListKeyboardDelegate.module.js.map\n","import {useSelectableCollection as $ae20dd8cbca75726$export$d6daf82dcd84e87c} from \"./useSelectableCollection.mjs\";\nimport {ListKeyboardDelegate as $2a25aae57d74318e$export$a05409b8bb224a5a} from \"./ListKeyboardDelegate.mjs\";\nimport {useCollator as $1aJk5$useCollator} from \"@react-aria/i18n\";\nimport {useMemo as $1aJk5$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $982254629710d113$export$b95089534ab7c1fd(props) {\n    let { selectionManager: selectionManager, collection: collection, disabledKeys: disabledKeys, ref: ref, keyboardDelegate: keyboardDelegate, layoutDelegate: layoutDelegate } = props;\n    // By default, a KeyboardDelegate is provided which uses the DOM to query layout information (e.g. for page up/page down).\n    // When virtualized, the layout object will be passed in as a prop and override this.\n    let collator = (0, $1aJk5$useCollator)({\n        usage: 'search',\n        sensitivity: 'base'\n    });\n    let disabledBehavior = selectionManager.disabledBehavior;\n    let delegate = (0, $1aJk5$useMemo)(()=>keyboardDelegate || new (0, $2a25aae57d74318e$export$a05409b8bb224a5a)({\n            collection: collection,\n            disabledKeys: disabledKeys,\n            disabledBehavior: disabledBehavior,\n            ref: ref,\n            collator: collator,\n            layoutDelegate: layoutDelegate\n        }), [\n        keyboardDelegate,\n        layoutDelegate,\n        collection,\n        disabledKeys,\n        ref,\n        collator,\n        disabledBehavior\n    ]);\n    let { collectionProps: collectionProps } = (0, $ae20dd8cbca75726$export$d6daf82dcd84e87c)({\n        ...props,\n        ref: ref,\n        selectionManager: selectionManager,\n        keyboardDelegate: delegate\n    });\n    return {\n        listProps: collectionProps\n    };\n}\n\n\nexport {$982254629710d113$export$b95089534ab7c1fd as useSelectableList};\n//# sourceMappingURL=useSelectableList.module.js.map\n","import {listData as $b1f0cad8af73213b$export$3585ede4d035bf14} from \"./utils.mjs\";\nimport {filterDOMProps as $by1yQ$filterDOMProps, useId as $by1yQ$useId, mergeProps as $by1yQ$mergeProps} from \"@react-aria/utils\";\nimport {useFocusWithin as $by1yQ$useFocusWithin} from \"@react-aria/interactions\";\nimport {useLabel as $by1yQ$useLabel} from \"@react-aria/label\";\nimport {useSelectableList as $by1yQ$useSelectableList} from \"@react-aria/selection\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $c132121280ec012d$export$50eacbbf140a3141(props, state, ref) {\n    let domProps = (0, $by1yQ$filterDOMProps)(props, {\n        labelable: true\n    });\n    // Use props instead of state here. We don't want this to change due to long press.\n    let selectionBehavior = props.selectionBehavior || 'toggle';\n    let linkBehavior = props.linkBehavior || (selectionBehavior === 'replace' ? 'action' : 'override');\n    if (selectionBehavior === 'toggle' && linkBehavior === 'action') // linkBehavior=\"action\" does not work with selectionBehavior=\"toggle\" because there is no way\n    // to initiate selection (checkboxes are not allowed inside a listbox). Link items will not be\n    // selectable in this configuration.\n    linkBehavior = 'override';\n    let { listProps: listProps } = (0, $by1yQ$useSelectableList)({\n        ...props,\n        ref: ref,\n        selectionManager: state.selectionManager,\n        collection: state.collection,\n        disabledKeys: state.disabledKeys,\n        linkBehavior: linkBehavior\n    });\n    let { focusWithinProps: focusWithinProps } = (0, $by1yQ$useFocusWithin)({\n        onFocusWithin: props.onFocus,\n        onBlurWithin: props.onBlur,\n        onFocusWithinChange: props.onFocusChange\n    });\n    // Share list id and some props with child options.\n    let id = (0, $by1yQ$useId)(props.id);\n    (0, $b1f0cad8af73213b$export$3585ede4d035bf14).set(state, {\n        id: id,\n        shouldUseVirtualFocus: props.shouldUseVirtualFocus,\n        shouldSelectOnPressUp: props.shouldSelectOnPressUp,\n        shouldFocusOnHover: props.shouldFocusOnHover,\n        isVirtualized: props.isVirtualized,\n        onAction: props.onAction,\n        linkBehavior: linkBehavior,\n        // @ts-ignore\n        UNSTABLE_itemBehavior: props['UNSTABLE_itemBehavior']\n    });\n    let { labelProps: labelProps, fieldProps: fieldProps } = (0, $by1yQ$useLabel)({\n        ...props,\n        id: id,\n        // listbox is not an HTML input element so it\n        // shouldn't be labeled by a <label> element.\n        labelElementType: 'span'\n    });\n    return {\n        labelProps: labelProps,\n        listBoxProps: (0, $by1yQ$mergeProps)(domProps, focusWithinProps, state.selectionManager.selectionMode === 'multiple' ? {\n            'aria-multiselectable': 'true'\n        } : {}, {\n            role: 'listbox',\n            ...(0, $by1yQ$mergeProps)(fieldProps, listProps)\n        })\n    };\n}\n\n\nexport {$c132121280ec012d$export$50eacbbf140a3141 as useListBox};\n//# sourceMappingURL=useListBox.module.js.map\n","import $fzaAv$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nclass $eb2240fc39a57fa5$export$bf788dd355e3a401 {\n    build(props, context) {\n        this.context = context;\n        return $eb2240fc39a57fa5$var$iterable(()=>this.iterateCollection(props));\n    }\n    *iterateCollection(props) {\n        let { children: children, items: items } = props;\n        if ((0, $fzaAv$react).isValidElement(children) && children.type === (0, $fzaAv$react).Fragment) yield* this.iterateCollection({\n            children: children.props.children,\n            items: items\n        });\n        else if (typeof children === 'function') {\n            if (!items) throw new Error('props.children was a function but props.items is missing');\n            let index = 0;\n            for (let item of items){\n                yield* this.getFullNode({\n                    value: item,\n                    index: index\n                }, {\n                    renderer: children\n                });\n                index++;\n            }\n        } else {\n            let items = [];\n            (0, $fzaAv$react).Children.forEach(children, (child)=>{\n                if (child) items.push(child);\n            });\n            let index = 0;\n            for (let item of items){\n                let nodes = this.getFullNode({\n                    element: item,\n                    index: index\n                }, {});\n                for (let node of nodes){\n                    index++;\n                    yield node;\n                }\n            }\n        }\n    }\n    getKey(item, partialNode, state, parentKey) {\n        if (item.key != null) return item.key;\n        if (partialNode.type === 'cell' && partialNode.key != null) return `${parentKey}${partialNode.key}`;\n        let v = partialNode.value;\n        if (v != null) {\n            var _v_key;\n            let key = (_v_key = v.key) !== null && _v_key !== void 0 ? _v_key : v.id;\n            if (key == null) throw new Error('No key found for item');\n            return key;\n        }\n        return parentKey ? `${parentKey}.${partialNode.index}` : `$.${partialNode.index}`;\n    }\n    getChildState(state, partialNode) {\n        return {\n            renderer: partialNode.renderer || state.renderer\n        };\n    }\n    *getFullNode(partialNode, state, parentKey, parentNode) {\n        if ((0, $fzaAv$react).isValidElement(partialNode.element) && partialNode.element.type === (0, $fzaAv$react).Fragment) {\n            let children = [];\n            (0, $fzaAv$react).Children.forEach(partialNode.element.props.children, (child)=>{\n                children.push(child);\n            });\n            var _partialNode_index;\n            let index = (_partialNode_index = partialNode.index) !== null && _partialNode_index !== void 0 ? _partialNode_index : 0;\n            for (const child of children)yield* this.getFullNode({\n                element: child,\n                index: index++\n            }, state, parentKey, parentNode);\n            return;\n        }\n        // If there's a value instead of an element on the node, and a parent renderer function is available,\n        // use it to render an element for the value.\n        let element = partialNode.element;\n        if (!element && partialNode.value && state && state.renderer) {\n            let cached = this.cache.get(partialNode.value);\n            if (cached && (!cached.shouldInvalidate || !cached.shouldInvalidate(this.context))) {\n                cached.index = partialNode.index;\n                cached.parentKey = parentNode ? parentNode.key : null;\n                yield cached;\n                return;\n            }\n            element = state.renderer(partialNode.value);\n        }\n        // If there's an element with a getCollectionNode function on its type, then it's a supported component.\n        // Call this function to get a partial node, and recursively build a full node from there.\n        if ((0, $fzaAv$react).isValidElement(element)) {\n            let type = element.type;\n            if (typeof type !== 'function' && typeof type.getCollectionNode !== 'function') {\n                let name = element.type;\n                throw new Error(`Unknown element <${name}> in collection.`);\n            }\n            let childNodes = type.getCollectionNode(element.props, this.context);\n            var _partialNode_index1;\n            let index = (_partialNode_index1 = partialNode.index) !== null && _partialNode_index1 !== void 0 ? _partialNode_index1 : 0;\n            let result = childNodes.next();\n            while(!result.done && result.value){\n                let childNode = result.value;\n                partialNode.index = index;\n                var _childNode_key;\n                let nodeKey = (_childNode_key = childNode.key) !== null && _childNode_key !== void 0 ? _childNode_key : null;\n                if (nodeKey == null) nodeKey = childNode.element ? null : this.getKey(element, partialNode, state, parentKey);\n                let nodes = this.getFullNode({\n                    ...childNode,\n                    key: nodeKey,\n                    index: index,\n                    wrapper: $eb2240fc39a57fa5$var$compose(partialNode.wrapper, childNode.wrapper)\n                }, this.getChildState(state, childNode), parentKey ? `${parentKey}${element.key}` : element.key, parentNode);\n                let children = [\n                    ...nodes\n                ];\n                for (let node of children){\n                    var _childNode_value, _ref;\n                    // Cache the node based on its value\n                    node.value = (_ref = (_childNode_value = childNode.value) !== null && _childNode_value !== void 0 ? _childNode_value : partialNode.value) !== null && _ref !== void 0 ? _ref : null;\n                    if (node.value) this.cache.set(node.value, node);\n                    var _parentNode_type;\n                    // The partial node may have specified a type for the child in order to specify a constraint.\n                    // Verify that the full node that was built recursively matches this type.\n                    if (partialNode.type && node.type !== partialNode.type) throw new Error(`Unsupported type <${$eb2240fc39a57fa5$var$capitalize(node.type)}> in <${$eb2240fc39a57fa5$var$capitalize((_parentNode_type = parentNode === null || parentNode === void 0 ? void 0 : parentNode.type) !== null && _parentNode_type !== void 0 ? _parentNode_type : 'unknown parent type')}>. Only <${$eb2240fc39a57fa5$var$capitalize(partialNode.type)}> is supported.`);\n                    index++;\n                    yield node;\n                }\n                result = childNodes.next(children);\n            }\n            return;\n        }\n        // Ignore invalid elements\n        if (partialNode.key == null || partialNode.type == null) return;\n        // Create full node\n        let builder = this;\n        var _partialNode_value, _partialNode_textValue;\n        let node = {\n            type: partialNode.type,\n            props: partialNode.props,\n            key: partialNode.key,\n            parentKey: parentNode ? parentNode.key : null,\n            value: (_partialNode_value = partialNode.value) !== null && _partialNode_value !== void 0 ? _partialNode_value : null,\n            level: parentNode ? parentNode.level + 1 : 0,\n            index: partialNode.index,\n            rendered: partialNode.rendered,\n            textValue: (_partialNode_textValue = partialNode.textValue) !== null && _partialNode_textValue !== void 0 ? _partialNode_textValue : '',\n            'aria-label': partialNode['aria-label'],\n            wrapper: partialNode.wrapper,\n            shouldInvalidate: partialNode.shouldInvalidate,\n            hasChildNodes: partialNode.hasChildNodes || false,\n            childNodes: $eb2240fc39a57fa5$var$iterable(function*() {\n                if (!partialNode.hasChildNodes || !partialNode.childNodes) return;\n                let index = 0;\n                for (let child of partialNode.childNodes()){\n                    // Ensure child keys are globally unique by prepending the parent node's key\n                    if (child.key != null) // TODO: Remove this line entirely and enforce that users always provide unique keys.\n                    // Currently this line will have issues when a parent has a key `a` and a child with key `bc`\n                    // but another parent has key `ab` and its child has a key `c`. The combined keys would result in both\n                    // children having a key of `abc`.\n                    child.key = `${node.key}${child.key}`;\n                    let nodes = builder.getFullNode({\n                        ...child,\n                        index: index\n                    }, builder.getChildState(state, child), node.key, node);\n                    for (let node of nodes){\n                        index++;\n                        yield node;\n                    }\n                }\n            })\n        };\n        yield node;\n    }\n    constructor(){\n        this.cache = new WeakMap();\n    }\n}\n// Wraps an iterator function as an iterable object, and caches the results.\nfunction $eb2240fc39a57fa5$var$iterable(iterator) {\n    let cache = [];\n    let iterable = null;\n    return {\n        *[Symbol.iterator] () {\n            for (let item of cache)yield item;\n            if (!iterable) iterable = iterator();\n            for (let item of iterable){\n                cache.push(item);\n                yield item;\n            }\n        }\n    };\n}\nfunction $eb2240fc39a57fa5$var$compose(outer, inner) {\n    if (outer && inner) return (element)=>outer(inner(element));\n    if (outer) return outer;\n    if (inner) return inner;\n}\nfunction $eb2240fc39a57fa5$var$capitalize(str) {\n    return str[0].toUpperCase() + str.slice(1);\n}\n\n\nexport {$eb2240fc39a57fa5$export$bf788dd355e3a401 as CollectionBuilder};\n//# sourceMappingURL=CollectionBuilder.module.js.map\n","import {CollectionBuilder as $eb2240fc39a57fa5$export$bf788dd355e3a401} from \"./CollectionBuilder.mjs\";\nimport {useMemo as $lbNth$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $7613b1592d41b092$export$6cd28814d92fa9c9(props, factory, context) {\n    let builder = (0, $lbNth$useMemo)(()=>new (0, $eb2240fc39a57fa5$export$bf788dd355e3a401)(), []);\n    let { children: children, items: items, collection: collection } = props;\n    let result = (0, $lbNth$useMemo)(()=>{\n        if (collection) return collection;\n        let nodes = builder.build({\n            children: children,\n            items: items\n        }, context);\n        return factory(nodes);\n    }, [\n        builder,\n        children,\n        items,\n        collection,\n        context,\n        factory\n    ]);\n    return result;\n}\n\n\nexport {$7613b1592d41b092$export$6cd28814d92fa9c9 as useCollection};\n//# sourceMappingURL=useCollection.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $c5a24bc478652b5f$export$1005530eda016c13(node, collection) {\n    // New API: call collection.getChildren with the node key.\n    if (typeof collection.getChildren === 'function') return collection.getChildren(node.key);\n    // Old API: access childNodes directly.\n    return node.childNodes;\n}\nfunction $c5a24bc478652b5f$export$fbdeaa6a76694f71(iterable) {\n    return $c5a24bc478652b5f$export$5f3398f8733f90e2(iterable, 0);\n}\nfunction $c5a24bc478652b5f$export$5f3398f8733f90e2(iterable, index) {\n    if (index < 0) return undefined;\n    let i = 0;\n    for (let item of iterable){\n        if (i === index) return item;\n        i++;\n    }\n}\nfunction $c5a24bc478652b5f$export$7475b2c64539e4cf(iterable) {\n    let lastItem = undefined;\n    for (let value of iterable)lastItem = value;\n    return lastItem;\n}\nfunction $c5a24bc478652b5f$export$8c434b3a7a4dad6(collection, a, b) {\n    // If the two nodes have the same parent, compare their indices.\n    if (a.parentKey === b.parentKey) return a.index - b.index;\n    // Otherwise, collect all of the ancestors from each node, and find the first one that doesn't match starting from the root.\n    // Include the base nodes in case we are comparing nodes of different levels so that we can compare the higher node to the lower level node's\n    // ancestor of the same level\n    let aAncestors = [\n        ...$c5a24bc478652b5f$var$getAncestors(collection, a),\n        a\n    ];\n    let bAncestors = [\n        ...$c5a24bc478652b5f$var$getAncestors(collection, b),\n        b\n    ];\n    let firstNonMatchingAncestor = aAncestors.slice(0, bAncestors.length).findIndex((a, i)=>a !== bAncestors[i]);\n    if (firstNonMatchingAncestor !== -1) {\n        // Compare the indices of two children within the common ancestor.\n        a = aAncestors[firstNonMatchingAncestor];\n        b = bAncestors[firstNonMatchingAncestor];\n        return a.index - b.index;\n    }\n    // If there isn't a non matching ancestor, we might be in a case where one of the nodes is the ancestor of the other.\n    if (aAncestors.findIndex((node)=>node === b) >= 0) return 1;\n    else if (bAncestors.findIndex((node)=>node === a) >= 0) return -1;\n    // 🤷\n    return -1;\n}\nfunction $c5a24bc478652b5f$var$getAncestors(collection, node) {\n    let parents = [];\n    let currNode = node;\n    while((currNode === null || currNode === void 0 ? void 0 : currNode.parentKey) != null){\n        currNode = collection.getItem(currNode.parentKey);\n        if (currNode) parents.unshift(currNode);\n    }\n    return parents;\n}\n\n\nexport {$c5a24bc478652b5f$export$1005530eda016c13 as getChildNodes, $c5a24bc478652b5f$export$fbdeaa6a76694f71 as getFirstItem, $c5a24bc478652b5f$export$5f3398f8733f90e2 as getNthItem, $c5a24bc478652b5f$export$7475b2c64539e4cf as getLastItem, $c5a24bc478652b5f$export$8c434b3a7a4dad6 as compareNodeOrder};\n//# sourceMappingURL=getChildNodes.module.js.map\n","import {getChildNodes as $c5a24bc478652b5f$export$1005530eda016c13} from \"./getChildNodes.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $453cc9f0df89c0a5$var$cache = new WeakMap();\nfunction $453cc9f0df89c0a5$export$77d5aafae4e095b2(collection) {\n    let count = $453cc9f0df89c0a5$var$cache.get(collection);\n    if (count != null) return count;\n    // TS isn't smart enough to know we've ensured count is a number, so use a new variable\n    let counter = 0;\n    let countItems = (items)=>{\n        for (let item of items){\n            if (item.type === 'section') countItems((0, $c5a24bc478652b5f$export$1005530eda016c13)(item, collection));\n            else if (item.type === 'item') counter++;\n        }\n    };\n    countItems(collection);\n    $453cc9f0df89c0a5$var$cache.set(collection, counter);\n    return counter;\n}\n\n\nexport {$453cc9f0df89c0a5$export$77d5aafae4e095b2 as getItemCount};\n//# sourceMappingURL=getItemCount.module.js.map\n","import {getItemId as $b1f0cad8af73213b$export$9145995848b05025, listData as $b1f0cad8af73213b$export$3585ede4d035bf14} from \"./utils.mjs\";\nimport {useSlotId as $fcwmx$useSlotId, isMac as $fcwmx$isMac, isWebKit as $fcwmx$isWebKit, chain as $fcwmx$chain, filterDOMProps as $fcwmx$filterDOMProps, useLinkProps as $fcwmx$useLinkProps, mergeProps as $fcwmx$mergeProps} from \"@react-aria/utils\";\nimport {getItemCount as $fcwmx$getItemCount} from \"@react-stately/collections\";\nimport {useHover as $fcwmx$useHover, isFocusVisible as $fcwmx$isFocusVisible} from \"@react-aria/interactions\";\nimport {useSelectableItem as $fcwmx$useSelectableItem} from \"@react-aria/selection\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $293f70390ea03370$export$497855f14858aa34(props, state, ref) {\n    var _item_props, _item_props1;\n    let { key: key } = props;\n    let data = (0, $b1f0cad8af73213b$export$3585ede4d035bf14).get(state);\n    var _props_isDisabled;\n    let isDisabled = (_props_isDisabled = props.isDisabled) !== null && _props_isDisabled !== void 0 ? _props_isDisabled : state.selectionManager.isDisabled(key);\n    var _props_isSelected;\n    let isSelected = (_props_isSelected = props.isSelected) !== null && _props_isSelected !== void 0 ? _props_isSelected : state.selectionManager.isSelected(key);\n    var _props_shouldSelectOnPressUp;\n    let shouldSelectOnPressUp = (_props_shouldSelectOnPressUp = props.shouldSelectOnPressUp) !== null && _props_shouldSelectOnPressUp !== void 0 ? _props_shouldSelectOnPressUp : data === null || data === void 0 ? void 0 : data.shouldSelectOnPressUp;\n    var _props_shouldFocusOnHover;\n    let shouldFocusOnHover = (_props_shouldFocusOnHover = props.shouldFocusOnHover) !== null && _props_shouldFocusOnHover !== void 0 ? _props_shouldFocusOnHover : data === null || data === void 0 ? void 0 : data.shouldFocusOnHover;\n    var _props_shouldUseVirtualFocus;\n    let shouldUseVirtualFocus = (_props_shouldUseVirtualFocus = props.shouldUseVirtualFocus) !== null && _props_shouldUseVirtualFocus !== void 0 ? _props_shouldUseVirtualFocus : data === null || data === void 0 ? void 0 : data.shouldUseVirtualFocus;\n    var _props_isVirtualized;\n    let isVirtualized = (_props_isVirtualized = props.isVirtualized) !== null && _props_isVirtualized !== void 0 ? _props_isVirtualized : data === null || data === void 0 ? void 0 : data.isVirtualized;\n    let labelId = (0, $fcwmx$useSlotId)();\n    let descriptionId = (0, $fcwmx$useSlotId)();\n    let optionProps = {\n        role: 'option',\n        'aria-disabled': isDisabled || undefined,\n        'aria-selected': state.selectionManager.selectionMode !== 'none' ? isSelected : undefined\n    };\n    // Safari with VoiceOver on macOS misreads options with aria-labelledby or aria-label as simply \"text\".\n    // We should not map slots to the label and description on Safari and instead just have VoiceOver read the textContent.\n    // https://bugs.webkit.org/show_bug.cgi?id=209279\n    if (!((0, $fcwmx$isMac)() && (0, $fcwmx$isWebKit)())) {\n        optionProps['aria-label'] = props['aria-label'];\n        optionProps['aria-labelledby'] = labelId;\n        optionProps['aria-describedby'] = descriptionId;\n    }\n    let item = state.collection.getItem(key);\n    if (isVirtualized) {\n        let index = Number(item === null || item === void 0 ? void 0 : item.index);\n        optionProps['aria-posinset'] = Number.isNaN(index) ? undefined : index + 1;\n        optionProps['aria-setsize'] = (0, $fcwmx$getItemCount)(state.collection);\n    }\n    let onAction = (data === null || data === void 0 ? void 0 : data.onAction) ? ()=>{\n        var _data_onAction;\n        return data === null || data === void 0 ? void 0 : (_data_onAction = data.onAction) === null || _data_onAction === void 0 ? void 0 : _data_onAction.call(data, key);\n    } : undefined;\n    let id = (0, $b1f0cad8af73213b$export$9145995848b05025)(state, key);\n    let { itemProps: itemProps, isPressed: isPressed, isFocused: isFocused, hasAction: hasAction, allowsSelection: allowsSelection } = (0, $fcwmx$useSelectableItem)({\n        selectionManager: state.selectionManager,\n        key: key,\n        ref: ref,\n        shouldSelectOnPressUp: shouldSelectOnPressUp,\n        allowsDifferentPressOrigin: shouldSelectOnPressUp && shouldFocusOnHover,\n        isVirtualized: isVirtualized,\n        shouldUseVirtualFocus: shouldUseVirtualFocus,\n        isDisabled: isDisabled,\n        onAction: onAction || (item === null || item === void 0 ? void 0 : (_item_props = item.props) === null || _item_props === void 0 ? void 0 : _item_props.onAction) ? (0, $fcwmx$chain)(item === null || item === void 0 ? void 0 : (_item_props1 = item.props) === null || _item_props1 === void 0 ? void 0 : _item_props1.onAction, onAction) : undefined,\n        linkBehavior: data === null || data === void 0 ? void 0 : data.linkBehavior,\n        // @ts-ignore\n        UNSTABLE_itemBehavior: data === null || data === void 0 ? void 0 : data['UNSTABLE_itemBehavior'],\n        id: id\n    });\n    let { hoverProps: hoverProps } = (0, $fcwmx$useHover)({\n        isDisabled: isDisabled || !shouldFocusOnHover,\n        onHoverStart () {\n            if (!(0, $fcwmx$isFocusVisible)()) {\n                state.selectionManager.setFocused(true);\n                state.selectionManager.setFocusedKey(key);\n            }\n        }\n    });\n    let domProps = (0, $fcwmx$filterDOMProps)(item === null || item === void 0 ? void 0 : item.props);\n    delete domProps.id;\n    let linkProps = (0, $fcwmx$useLinkProps)(item === null || item === void 0 ? void 0 : item.props);\n    return {\n        optionProps: {\n            ...optionProps,\n            ...(0, $fcwmx$mergeProps)(domProps, itemProps, hoverProps, linkProps),\n            id: id\n        },\n        labelProps: {\n            id: labelId\n        },\n        descriptionProps: {\n            id: descriptionId\n        },\n        isFocused: isFocused,\n        isFocusVisible: isFocused && state.selectionManager.isFocused && (0, $fcwmx$isFocusVisible)(),\n        isSelected: isSelected,\n        isDisabled: isDisabled,\n        isPressed: isPressed,\n        allowsSelection: allowsSelection,\n        hasAction: hasAction\n    };\n}\n\n\nexport {$293f70390ea03370$export$497855f14858aa34 as useOption};\n//# sourceMappingURL=useOption.module.js.map\n","import {useId as $8pE4M$useId} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $af383d3bef1cfdc9$export$c3f9f39876e4bc7(props) {\n    let { heading: heading, 'aria-label': ariaLabel } = props;\n    let headingId = (0, $8pE4M$useId)();\n    return {\n        itemProps: {\n            role: 'presentation'\n        },\n        headingProps: heading ? {\n            // Techincally, listbox cannot contain headings according to ARIA.\n            // We hide the heading from assistive technology, using role=\"presentation\",\n            // and only use it as a visual label for the nested group.\n            id: headingId,\n            role: 'presentation'\n        } : {},\n        groupProps: {\n            role: 'group',\n            'aria-label': ariaLabel,\n            'aria-labelledby': heading ? headingId : undefined\n        }\n    };\n}\n\n\nexport {$af383d3bef1cfdc9$export$c3f9f39876e4bc7 as useListBoxSection};\n//# sourceMappingURL=useListBoxSection.module.js.map\n","import {createContext as $69F46$createContext, useMemo as $69F46$useMemo, useContext as $69F46$useContext, useState as $69F46$useState, useRef as $69F46$useRef, useEffect as $69F46$useEffect} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $e5be200c675c3b3a$export$aca958c65c314e6c = {\n    badInput: false,\n    customError: false,\n    patternMismatch: false,\n    rangeOverflow: false,\n    rangeUnderflow: false,\n    stepMismatch: false,\n    tooLong: false,\n    tooShort: false,\n    typeMismatch: false,\n    valueMissing: false,\n    valid: true\n};\nconst $e5be200c675c3b3a$var$CUSTOM_VALIDITY_STATE = {\n    ...$e5be200c675c3b3a$export$aca958c65c314e6c,\n    customError: true,\n    valid: false\n};\nconst $e5be200c675c3b3a$export$dad6ae84456c676a = {\n    isInvalid: false,\n    validationDetails: $e5be200c675c3b3a$export$aca958c65c314e6c,\n    validationErrors: []\n};\nconst $e5be200c675c3b3a$export$571b5131b7e65c11 = (0, $69F46$createContext)({});\nconst $e5be200c675c3b3a$export$a763b9476acd3eb = '__formValidationState' + Date.now();\nfunction $e5be200c675c3b3a$export$fc1a364ae1f3ff10(props) {\n    // Private prop for parent components to pass state to children.\n    if (props[$e5be200c675c3b3a$export$a763b9476acd3eb]) {\n        let { realtimeValidation: realtimeValidation, displayValidation: displayValidation, updateValidation: updateValidation, resetValidation: resetValidation, commitValidation: commitValidation } = props[$e5be200c675c3b3a$export$a763b9476acd3eb];\n        return {\n            realtimeValidation: realtimeValidation,\n            displayValidation: displayValidation,\n            updateValidation: updateValidation,\n            resetValidation: resetValidation,\n            commitValidation: commitValidation\n        };\n    }\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    return $e5be200c675c3b3a$var$useFormValidationStateImpl(props);\n}\nfunction $e5be200c675c3b3a$var$useFormValidationStateImpl(props) {\n    let { isInvalid: isInvalid, validationState: validationState, name: name, value: value, builtinValidation: builtinValidation, validate: validate, validationBehavior: validationBehavior = 'aria' } = props;\n    // backward compatibility.\n    if (validationState) isInvalid || (isInvalid = validationState === 'invalid');\n    // If the isInvalid prop is controlled, update validation result in realtime.\n    let controlledError = isInvalid !== undefined ? {\n        isInvalid: isInvalid,\n        validationErrors: [],\n        validationDetails: $e5be200c675c3b3a$var$CUSTOM_VALIDITY_STATE\n    } : null;\n    // Perform custom client side validation.\n    let clientError = (0, $69F46$useMemo)(()=>{\n        if (!validate || value == null) return null;\n        let validateErrors = $e5be200c675c3b3a$var$runValidate(validate, value);\n        return $e5be200c675c3b3a$var$getValidationResult(validateErrors);\n    }, [\n        validate,\n        value\n    ]);\n    if (builtinValidation === null || builtinValidation === void 0 ? void 0 : builtinValidation.validationDetails.valid) builtinValidation = undefined;\n    // Get relevant server errors from the form.\n    let serverErrors = (0, $69F46$useContext)($e5be200c675c3b3a$export$571b5131b7e65c11);\n    let serverErrorMessages = (0, $69F46$useMemo)(()=>{\n        if (name) return Array.isArray(name) ? name.flatMap((name)=>$e5be200c675c3b3a$var$asArray(serverErrors[name])) : $e5be200c675c3b3a$var$asArray(serverErrors[name]);\n        return [];\n    }, [\n        serverErrors,\n        name\n    ]);\n    // Show server errors when the form gets a new value, and clear when the user changes the value.\n    let [lastServerErrors, setLastServerErrors] = (0, $69F46$useState)(serverErrors);\n    let [isServerErrorCleared, setServerErrorCleared] = (0, $69F46$useState)(false);\n    if (serverErrors !== lastServerErrors) {\n        setLastServerErrors(serverErrors);\n        setServerErrorCleared(false);\n    }\n    let serverError = (0, $69F46$useMemo)(()=>$e5be200c675c3b3a$var$getValidationResult(isServerErrorCleared ? [] : serverErrorMessages), [\n        isServerErrorCleared,\n        serverErrorMessages\n    ]);\n    // Track the next validation state in a ref until commitValidation is called.\n    let nextValidation = (0, $69F46$useRef)($e5be200c675c3b3a$export$dad6ae84456c676a);\n    let [currentValidity, setCurrentValidity] = (0, $69F46$useState)($e5be200c675c3b3a$export$dad6ae84456c676a);\n    let lastError = (0, $69F46$useRef)($e5be200c675c3b3a$export$dad6ae84456c676a);\n    let commitValidation = ()=>{\n        if (!commitQueued) return;\n        setCommitQueued(false);\n        let error = clientError || builtinValidation || nextValidation.current;\n        if (!$e5be200c675c3b3a$var$isEqualValidation(error, lastError.current)) {\n            lastError.current = error;\n            setCurrentValidity(error);\n        }\n    };\n    let [commitQueued, setCommitQueued] = (0, $69F46$useState)(false);\n    (0, $69F46$useEffect)(commitValidation);\n    // realtimeValidation is used to update the native input element's state based on custom validation logic.\n    // displayValidation is the currently displayed validation state that the user sees (e.g. on input change/form submit).\n    // With validationBehavior=\"aria\", all errors are displayed in realtime rather than on submit.\n    let realtimeValidation = controlledError || serverError || clientError || builtinValidation || $e5be200c675c3b3a$export$dad6ae84456c676a;\n    let displayValidation = validationBehavior === 'native' ? controlledError || serverError || currentValidity : controlledError || serverError || clientError || builtinValidation || currentValidity;\n    return {\n        realtimeValidation: realtimeValidation,\n        displayValidation: displayValidation,\n        updateValidation (value) {\n            // If validationBehavior is 'aria', update in realtime. Otherwise, store in a ref until commit.\n            if (validationBehavior === 'aria' && !$e5be200c675c3b3a$var$isEqualValidation(currentValidity, value)) setCurrentValidity(value);\n            else nextValidation.current = value;\n        },\n        resetValidation () {\n            // Update the currently displayed validation state to valid on form reset,\n            // even if the native validity says it isn't. It'll show again on the next form submit.\n            let error = $e5be200c675c3b3a$export$dad6ae84456c676a;\n            if (!$e5be200c675c3b3a$var$isEqualValidation(error, lastError.current)) {\n                lastError.current = error;\n                setCurrentValidity(error);\n            }\n            // Do not commit validation after the next render. This avoids a condition where\n            // useSelect calls commitValidation inside an onReset handler.\n            if (validationBehavior === 'native') setCommitQueued(false);\n            setServerErrorCleared(true);\n        },\n        commitValidation () {\n            // Commit validation state so the user sees it on blur/change/submit. Also clear any server errors.\n            // Wait until after the next render to commit so that the latest value has been validated.\n            if (validationBehavior === 'native') setCommitQueued(true);\n            setServerErrorCleared(true);\n        }\n    };\n}\nfunction $e5be200c675c3b3a$var$asArray(v) {\n    if (!v) return [];\n    return Array.isArray(v) ? v : [\n        v\n    ];\n}\nfunction $e5be200c675c3b3a$var$runValidate(validate, value) {\n    if (typeof validate === 'function') {\n        let e = validate(value);\n        if (e && typeof e !== 'boolean') return $e5be200c675c3b3a$var$asArray(e);\n    }\n    return [];\n}\nfunction $e5be200c675c3b3a$var$getValidationResult(errors) {\n    return errors.length ? {\n        isInvalid: true,\n        validationErrors: errors,\n        validationDetails: $e5be200c675c3b3a$var$CUSTOM_VALIDITY_STATE\n    } : null;\n}\nfunction $e5be200c675c3b3a$var$isEqualValidation(a, b) {\n    if (a === b) return true;\n    return !!a && !!b && a.isInvalid === b.isInvalid && a.validationErrors.length === b.validationErrors.length && a.validationErrors.every((a, i)=>a === b.validationErrors[i]) && Object.entries(a.validationDetails).every(([k, v])=>b.validationDetails[k] === v);\n}\nfunction $e5be200c675c3b3a$export$75ee7c75d68f5b0e(...results) {\n    let errors = new Set();\n    let isInvalid = false;\n    let validationDetails = {\n        ...$e5be200c675c3b3a$export$aca958c65c314e6c\n    };\n    for (let v of results){\n        var _validationDetails, _key;\n        for (let e of v.validationErrors)errors.add(e);\n        // Only these properties apply for checkboxes.\n        isInvalid || (isInvalid = v.isInvalid);\n        for(let key in validationDetails)(_validationDetails = validationDetails)[_key = key] || (_validationDetails[_key] = v.validationDetails[key]);\n    }\n    validationDetails.valid = !isInvalid;\n    return {\n        isInvalid: isInvalid,\n        validationErrors: [\n            ...errors\n        ],\n        validationDetails: validationDetails\n    };\n}\n\n\nexport {$e5be200c675c3b3a$export$aca958c65c314e6c as VALID_VALIDITY_STATE, $e5be200c675c3b3a$export$dad6ae84456c676a as DEFAULT_VALIDATION_RESULT, $e5be200c675c3b3a$export$571b5131b7e65c11 as FormValidationContext, $e5be200c675c3b3a$export$a763b9476acd3eb as privateValidationStateProp, $e5be200c675c3b3a$export$fc1a364ae1f3ff10 as useFormValidationState, $e5be200c675c3b3a$export$75ee7c75d68f5b0e as mergeValidation};\n//# sourceMappingURL=useFormValidationState.module.js.map\n","var $43b800e97c901737$exports = {};\n$43b800e97c901737$exports = {\n    \"longPressMessage\": `Long press or press Alt + ArrowDown to open menu`\n};\n\n\nexport {$43b800e97c901737$exports as default};\n//# sourceMappingURL=en-US.module.js.map\n","import $5FSX7$arAEmodulejs from \"./ar-AE.mjs\";\nimport $5FSX7$bgBGmodulejs from \"./bg-BG.mjs\";\nimport $5FSX7$csCZmodulejs from \"./cs-CZ.mjs\";\nimport $5FSX7$daDKmodulejs from \"./da-DK.mjs\";\nimport $5FSX7$deDEmodulejs from \"./de-DE.mjs\";\nimport $5FSX7$elGRmodulejs from \"./el-GR.mjs\";\nimport $5FSX7$enUSmodulejs from \"./en-US.mjs\";\nimport $5FSX7$esESmodulejs from \"./es-ES.mjs\";\nimport $5FSX7$etEEmodulejs from \"./et-EE.mjs\";\nimport $5FSX7$fiFImodulejs from \"./fi-FI.mjs\";\nimport $5FSX7$frFRmodulejs from \"./fr-FR.mjs\";\nimport $5FSX7$heILmodulejs from \"./he-IL.mjs\";\nimport $5FSX7$hrHRmodulejs from \"./hr-HR.mjs\";\nimport $5FSX7$huHUmodulejs from \"./hu-HU.mjs\";\nimport $5FSX7$itITmodulejs from \"./it-IT.mjs\";\nimport $5FSX7$jaJPmodulejs from \"./ja-JP.mjs\";\nimport $5FSX7$koKRmodulejs from \"./ko-KR.mjs\";\nimport $5FSX7$ltLTmodulejs from \"./lt-LT.mjs\";\nimport $5FSX7$lvLVmodulejs from \"./lv-LV.mjs\";\nimport $5FSX7$nbNOmodulejs from \"./nb-NO.mjs\";\nimport $5FSX7$nlNLmodulejs from \"./nl-NL.mjs\";\nimport $5FSX7$plPLmodulejs from \"./pl-PL.mjs\";\nimport $5FSX7$ptBRmodulejs from \"./pt-BR.mjs\";\nimport $5FSX7$ptPTmodulejs from \"./pt-PT.mjs\";\nimport $5FSX7$roROmodulejs from \"./ro-RO.mjs\";\nimport $5FSX7$ruRUmodulejs from \"./ru-RU.mjs\";\nimport $5FSX7$skSKmodulejs from \"./sk-SK.mjs\";\nimport $5FSX7$slSImodulejs from \"./sl-SI.mjs\";\nimport $5FSX7$srSPmodulejs from \"./sr-SP.mjs\";\nimport $5FSX7$svSEmodulejs from \"./sv-SE.mjs\";\nimport $5FSX7$trTRmodulejs from \"./tr-TR.mjs\";\nimport $5FSX7$ukUAmodulejs from \"./uk-UA.mjs\";\nimport $5FSX7$zhCNmodulejs from \"./zh-CN.mjs\";\nimport $5FSX7$zhTWmodulejs from \"./zh-TW.mjs\";\n\nvar $2cbb7ca666678a14$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$2cbb7ca666678a14$exports = {\n    \"ar-AE\": $5FSX7$arAEmodulejs,\n    \"bg-BG\": $5FSX7$bgBGmodulejs,\n    \"cs-CZ\": $5FSX7$csCZmodulejs,\n    \"da-DK\": $5FSX7$daDKmodulejs,\n    \"de-DE\": $5FSX7$deDEmodulejs,\n    \"el-GR\": $5FSX7$elGRmodulejs,\n    \"en-US\": $5FSX7$enUSmodulejs,\n    \"es-ES\": $5FSX7$esESmodulejs,\n    \"et-EE\": $5FSX7$etEEmodulejs,\n    \"fi-FI\": $5FSX7$fiFImodulejs,\n    \"fr-FR\": $5FSX7$frFRmodulejs,\n    \"he-IL\": $5FSX7$heILmodulejs,\n    \"hr-HR\": $5FSX7$hrHRmodulejs,\n    \"hu-HU\": $5FSX7$huHUmodulejs,\n    \"it-IT\": $5FSX7$itITmodulejs,\n    \"ja-JP\": $5FSX7$jaJPmodulejs,\n    \"ko-KR\": $5FSX7$koKRmodulejs,\n    \"lt-LT\": $5FSX7$ltLTmodulejs,\n    \"lv-LV\": $5FSX7$lvLVmodulejs,\n    \"nb-NO\": $5FSX7$nbNOmodulejs,\n    \"nl-NL\": $5FSX7$nlNLmodulejs,\n    \"pl-PL\": $5FSX7$plPLmodulejs,\n    \"pt-BR\": $5FSX7$ptBRmodulejs,\n    \"pt-PT\": $5FSX7$ptPTmodulejs,\n    \"ro-RO\": $5FSX7$roROmodulejs,\n    \"ru-RU\": $5FSX7$ruRUmodulejs,\n    \"sk-SK\": $5FSX7$skSKmodulejs,\n    \"sl-SI\": $5FSX7$slSImodulejs,\n    \"sr-SP\": $5FSX7$srSPmodulejs,\n    \"sv-SE\": $5FSX7$svSEmodulejs,\n    \"tr-TR\": $5FSX7$trTRmodulejs,\n    \"uk-UA\": $5FSX7$ukUAmodulejs,\n    \"zh-CN\": $5FSX7$zhCNmodulejs,\n    \"zh-TW\": $5FSX7$zhTWmodulejs\n};\n\n\nexport {$2cbb7ca666678a14$exports as default};\n//# sourceMappingURL=intlStrings.module.js.map\n","import $czs6v$intlStringsmodulejs from \"./intlStrings.mjs\";\nimport {useId as $czs6v$useId, focusWithoutScrolling as $czs6v$focusWithoutScrolling} from \"@react-aria/utils\";\nimport {useLongPress as $czs6v$useLongPress} from \"@react-aria/interactions\";\nimport {useLocalizedStringFormatter as $czs6v$useLocalizedStringFormatter} from \"@react-aria/i18n\";\nimport {useOverlayTrigger as $czs6v$useOverlayTrigger} from \"@react-aria/overlays\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $168583247155ddda$export$dc9c12ed27dd1b49(props, state, ref) {\n    let { type: type = 'menu', isDisabled: isDisabled, trigger: trigger = 'press' } = props;\n    let menuTriggerId = (0, $czs6v$useId)();\n    let { triggerProps: triggerProps, overlayProps: overlayProps } = (0, $czs6v$useOverlayTrigger)({\n        type: type\n    }, state, ref);\n    let onKeyDown = (e)=>{\n        if (isDisabled) return;\n        if (trigger === 'longPress' && !e.altKey) return;\n        if (ref && ref.current) switch(e.key){\n            case 'Enter':\n            case ' ':\n                // React puts listeners on the same root, so even if propagation was stopped, immediate propagation is still possible.\n                // useTypeSelect will handle the spacebar first if it's running, so we don't want to open if it's handled it already.\n                // We use isDefaultPrevented() instead of isPropagationStopped() because createEventHandler stops propagation by default.\n                // And default prevented means that the event was handled by something else (typeahead), so we don't want to open the menu.\n                if (trigger === 'longPress' || e.isDefaultPrevented()) return;\n            // fallthrough\n            case 'ArrowDown':\n                // Stop propagation, unless it would already be handled by useKeyboard.\n                if (!('continuePropagation' in e)) e.stopPropagation();\n                e.preventDefault();\n                state.toggle('first');\n                break;\n            case 'ArrowUp':\n                if (!('continuePropagation' in e)) e.stopPropagation();\n                e.preventDefault();\n                state.toggle('last');\n                break;\n            default:\n                // Allow other keys.\n                if ('continuePropagation' in e) e.continuePropagation();\n        }\n    };\n    let stringFormatter = (0, $czs6v$useLocalizedStringFormatter)((0, ($parcel$interopDefault($czs6v$intlStringsmodulejs))), '@react-aria/menu');\n    let { longPressProps: longPressProps } = (0, $czs6v$useLongPress)({\n        isDisabled: isDisabled || trigger !== 'longPress',\n        accessibilityDescription: stringFormatter.format('longPressMessage'),\n        onLongPressStart () {\n            state.close();\n        },\n        onLongPress () {\n            state.open('first');\n        }\n    });\n    let pressProps = {\n        preventFocusOnPress: true,\n        onPressStart (e) {\n            // For consistency with native, open the menu on mouse/key down, but touch up.\n            if (e.pointerType !== 'touch' && e.pointerType !== 'keyboard' && !isDisabled) {\n                // Ensure trigger has focus before opening the menu so it can be restored by FocusScope on close.\n                (0, $czs6v$focusWithoutScrolling)(e.target);\n                // If opened with a screen reader, auto focus the first item.\n                // Otherwise, the menu itself will be focused.\n                state.open(e.pointerType === 'virtual' ? 'first' : null);\n            }\n        },\n        onPress (e) {\n            if (e.pointerType === 'touch' && !isDisabled) {\n                // Ensure trigger has focus before opening the menu so it can be restored by FocusScope on close.\n                (0, $czs6v$focusWithoutScrolling)(e.target);\n                state.toggle();\n            }\n        }\n    };\n    // omit onPress from triggerProps since we override it above.\n    delete triggerProps.onPress;\n    return {\n        // @ts-ignore - TODO we pass out both DOMAttributes AND AriaButtonProps, but useButton will discard the longPress event handlers, it's only through PressResponder magic that this works for RSP and RAC. it does not work in aria examples\n        menuTriggerProps: {\n            ...triggerProps,\n            ...trigger === 'press' ? pressProps : longPressProps,\n            id: menuTriggerId,\n            onKeyDown: onKeyDown\n        },\n        menuProps: {\n            ...overlayProps,\n            'aria-labelledby': menuTriggerId,\n            autoFocus: state.focusStrategy || true,\n            onClose: state.close\n        }\n    };\n}\n\n\nexport {$168583247155ddda$export$dc9c12ed27dd1b49 as useMenuTrigger};\n//# sourceMappingURL=useMenuTrigger.module.js.map\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $fc79756100351201$export$6f49b4016bfc8d56 = new WeakMap();\n\n\nexport {$fc79756100351201$export$6f49b4016bfc8d56 as menuData};\n//# sourceMappingURL=utils.module.js.map\n","import {menuData as $fc79756100351201$export$6f49b4016bfc8d56} from \"./utils.mjs\";\nimport {filterDOMProps as $ieN2F$filterDOMProps, mergeProps as $ieN2F$mergeProps} from \"@react-aria/utils\";\nimport {useSelectableList as $ieN2F$useSelectableList} from \"@react-aria/selection\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $d5336fe17ce95402$export$38eaa17faae8f579(props, state, ref) {\n    let { shouldFocusWrap: shouldFocusWrap = true, onKeyDown: onKeyDown, onKeyUp: onKeyUp, ...otherProps } = props;\n    if (!props['aria-label'] && !props['aria-labelledby'] && process.env.NODE_ENV !== 'production') console.warn('An aria-label or aria-labelledby prop is required for accessibility.');\n    let domProps = (0, $ieN2F$filterDOMProps)(props, {\n        labelable: true\n    });\n    let { listProps: listProps } = (0, $ieN2F$useSelectableList)({\n        ...otherProps,\n        ref: ref,\n        selectionManager: state.selectionManager,\n        collection: state.collection,\n        disabledKeys: state.disabledKeys,\n        shouldFocusWrap: shouldFocusWrap,\n        linkBehavior: 'override'\n    });\n    (0, $fc79756100351201$export$6f49b4016bfc8d56).set(state, {\n        onClose: props.onClose,\n        onAction: props.onAction,\n        shouldUseVirtualFocus: props.shouldUseVirtualFocus\n    });\n    return {\n        menuProps: (0, $ieN2F$mergeProps)(domProps, {\n            onKeyDown: onKeyDown,\n            onKeyUp: onKeyUp\n        }, {\n            role: 'menu',\n            ...listProps,\n            onKeyDown: (e)=>{\n                var _listProps_onKeyDown;\n                // don't clear the menu selected keys if the user is presses escape since escape closes the menu\n                if (e.key !== 'Escape' || props.shouldUseVirtualFocus) (_listProps_onKeyDown = listProps.onKeyDown) === null || _listProps_onKeyDown === void 0 ? void 0 : _listProps_onKeyDown.call(listProps, e);\n            }\n        })\n    };\n}\n\n\nexport {$d5336fe17ce95402$export$38eaa17faae8f579 as useMenu};\n//# sourceMappingURL=useMenu.module.js.map\n","import {menuData as $fc79756100351201$export$6f49b4016bfc8d56} from \"./utils.mjs\";\nimport {useRouter as $7Kjv5$useRouter, useSlotId as $7Kjv5$useSlotId, handleLinkClick as $7Kjv5$handleLinkClick, filterDOMProps as $7Kjv5$filterDOMProps, useLinkProps as $7Kjv5$useLinkProps, mergeProps as $7Kjv5$mergeProps} from \"@react-aria/utils\";\nimport {getItemCount as $7Kjv5$getItemCount} from \"@react-stately/collections\";\nimport {usePress as $7Kjv5$usePress, useHover as $7Kjv5$useHover, isFocusVisible as $7Kjv5$isFocusVisible, useKeyboard as $7Kjv5$useKeyboard, useFocus as $7Kjv5$useFocus} from \"@react-aria/interactions\";\nimport {useRef as $7Kjv5$useRef} from \"react\";\nimport {useSelectableItem as $7Kjv5$useSelectableItem} from \"@react-aria/selection\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $a2e5df62f93c7633$export$9d32628fc2aea7da(props, state, ref) {\n    let { id: id, key: key, closeOnSelect: closeOnSelect, isVirtualized: isVirtualized, 'aria-haspopup': hasPopup, onPressStart: onPressStart, onPressUp: pressUpProp, onPress: onPress, onPressChange: pressChangeProp, onPressEnd: onPressEnd, onClick: onClickProp, onHoverStart: hoverStartProp, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, onKeyDown: onKeyDown, onKeyUp: onKeyUp, onFocus: onFocus, onFocusChange: onFocusChange, onBlur: onBlur, selectionManager: selectionManager = state.selectionManager } = props;\n    let isTrigger = !!hasPopup;\n    let isTriggerExpanded = isTrigger && props['aria-expanded'] === 'true';\n    var _props_isDisabled;\n    let isDisabled = (_props_isDisabled = props.isDisabled) !== null && _props_isDisabled !== void 0 ? _props_isDisabled : selectionManager.isDisabled(key);\n    var _props_isSelected;\n    let isSelected = (_props_isSelected = props.isSelected) !== null && _props_isSelected !== void 0 ? _props_isSelected : selectionManager.isSelected(key);\n    let data = (0, $fc79756100351201$export$6f49b4016bfc8d56).get(state);\n    let item = state.collection.getItem(key);\n    let onClose = props.onClose || data.onClose;\n    let router = (0, $7Kjv5$useRouter)();\n    let performAction = ()=>{\n        var _item_props;\n        if (isTrigger) return;\n        if (item === null || item === void 0 ? void 0 : (_item_props = item.props) === null || _item_props === void 0 ? void 0 : _item_props.onAction) item.props.onAction();\n        else if (props.onAction) props.onAction(key);\n        if (data.onAction) {\n            // Must reassign to variable otherwise `this` binding gets messed up. Something to do with WeakMap.\n            let onAction = data.onAction;\n            onAction(key);\n        }\n    };\n    let role = 'menuitem';\n    if (!isTrigger) {\n        if (selectionManager.selectionMode === 'single') role = 'menuitemradio';\n        else if (selectionManager.selectionMode === 'multiple') role = 'menuitemcheckbox';\n    }\n    let labelId = (0, $7Kjv5$useSlotId)();\n    let descriptionId = (0, $7Kjv5$useSlotId)();\n    let keyboardId = (0, $7Kjv5$useSlotId)();\n    let ariaProps = {\n        id: id,\n        'aria-disabled': isDisabled || undefined,\n        role: role,\n        'aria-label': props['aria-label'],\n        'aria-labelledby': labelId,\n        'aria-describedby': [\n            descriptionId,\n            keyboardId\n        ].filter(Boolean).join(' ') || undefined,\n        'aria-controls': props['aria-controls'],\n        'aria-haspopup': hasPopup,\n        'aria-expanded': props['aria-expanded']\n    };\n    if (selectionManager.selectionMode !== 'none' && !isTrigger) ariaProps['aria-checked'] = isSelected;\n    if (isVirtualized) {\n        ariaProps['aria-posinset'] = item === null || item === void 0 ? void 0 : item.index;\n        ariaProps['aria-setsize'] = (0, $7Kjv5$getItemCount)(state.collection);\n    }\n    let isPressedRef = (0, $7Kjv5$useRef)(false);\n    let onPressChange = (isPressed)=>{\n        pressChangeProp === null || pressChangeProp === void 0 ? void 0 : pressChangeProp(isPressed);\n        isPressedRef.current = isPressed;\n    };\n    let interaction = (0, $7Kjv5$useRef)(null);\n    let onPressUp = (e)=>{\n        if (e.pointerType !== 'keyboard') interaction.current = {\n            pointerType: e.pointerType\n        };\n        // If interacting with mouse, allow the user to mouse down on the trigger button,\n        // drag, and release over an item (matching native behavior).\n        if (e.pointerType === 'mouse') {\n            if (!isPressedRef.current) e.target.click();\n        }\n        pressUpProp === null || pressUpProp === void 0 ? void 0 : pressUpProp(e);\n    };\n    let onClick = (e)=>{\n        var _interaction_current, _interaction_current1;\n        onClickProp === null || onClickProp === void 0 ? void 0 : onClickProp(e);\n        performAction();\n        (0, $7Kjv5$handleLinkClick)(e, router, item.props.href, item === null || item === void 0 ? void 0 : item.props.routerOptions);\n        let shouldClose = ((_interaction_current = interaction.current) === null || _interaction_current === void 0 ? void 0 : _interaction_current.pointerType) === 'keyboard' ? ((_interaction_current1 = interaction.current) === null || _interaction_current1 === void 0 ? void 0 : _interaction_current1.key) === 'Enter' || selectionManager.selectionMode === 'none' || selectionManager.isLink(key) : selectionManager.selectionMode !== 'multiple' || selectionManager.isLink(key);\n        shouldClose = closeOnSelect !== null && closeOnSelect !== void 0 ? closeOnSelect : shouldClose;\n        if (onClose && !isTrigger && shouldClose) onClose();\n        interaction.current = null;\n    };\n    let { itemProps: itemProps, isFocused: isFocused } = (0, $7Kjv5$useSelectableItem)({\n        id: id,\n        selectionManager: selectionManager,\n        key: key,\n        ref: ref,\n        shouldSelectOnPressUp: true,\n        allowsDifferentPressOrigin: true,\n        // Disable all handling of links in useSelectable item\n        // because we handle it ourselves. The behavior of menus\n        // is slightly different from other collections because\n        // actions are performed on key down rather than key up.\n        linkBehavior: 'none',\n        shouldUseVirtualFocus: data.shouldUseVirtualFocus\n    });\n    let { pressProps: pressProps, isPressed: isPressed } = (0, $7Kjv5$usePress)({\n        onPressStart: onPressStart,\n        onPress: onPress,\n        onPressUp: onPressUp,\n        onPressChange: onPressChange,\n        onPressEnd: onPressEnd,\n        isDisabled: isDisabled\n    });\n    let { hoverProps: hoverProps } = (0, $7Kjv5$useHover)({\n        isDisabled: isDisabled,\n        onHoverStart (e) {\n            // Hovering over an already expanded sub dialog trigger should keep focus in the dialog.\n            if (!(0, $7Kjv5$isFocusVisible)() && !(isTriggerExpanded && hasPopup)) {\n                selectionManager.setFocused(true);\n                selectionManager.setFocusedKey(key);\n            }\n            hoverStartProp === null || hoverStartProp === void 0 ? void 0 : hoverStartProp(e);\n        },\n        onHoverChange: onHoverChange,\n        onHoverEnd: onHoverEnd\n    });\n    let { keyboardProps: keyboardProps } = (0, $7Kjv5$useKeyboard)({\n        onKeyDown: (e)=>{\n            // Ignore repeating events, which may have started on the menu trigger before moving\n            // focus to the menu item. We want to wait for a second complete key press sequence.\n            if (e.repeat) {\n                e.continuePropagation();\n                return;\n            }\n            switch(e.key){\n                case ' ':\n                    interaction.current = {\n                        pointerType: 'keyboard',\n                        key: ' '\n                    };\n                    e.target.click();\n                    break;\n                case 'Enter':\n                    interaction.current = {\n                        pointerType: 'keyboard',\n                        key: 'Enter'\n                    };\n                    // Trigger click unless this is a link. Links trigger click natively.\n                    if (e.target.tagName !== 'A') e.target.click();\n                    break;\n                default:\n                    if (!isTrigger) e.continuePropagation();\n                    onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);\n                    break;\n            }\n        },\n        onKeyUp: onKeyUp\n    });\n    let { focusProps: focusProps } = (0, $7Kjv5$useFocus)({\n        onBlur: onBlur,\n        onFocus: onFocus,\n        onFocusChange: onFocusChange\n    });\n    let domProps = (0, $7Kjv5$filterDOMProps)(item === null || item === void 0 ? void 0 : item.props);\n    delete domProps.id;\n    let linkProps = (0, $7Kjv5$useLinkProps)(item === null || item === void 0 ? void 0 : item.props);\n    return {\n        menuItemProps: {\n            ...ariaProps,\n            ...(0, $7Kjv5$mergeProps)(domProps, linkProps, isTrigger ? {\n                onFocus: itemProps.onFocus,\n                'data-collection': itemProps['data-collection'],\n                'data-key': itemProps['data-key']\n            } : itemProps, pressProps, hoverProps, keyboardProps, focusProps, // Prevent DOM focus from moving on mouse down when using virtual focus or this is a submenu/subdialog trigger.\n            data.shouldUseVirtualFocus || isTrigger ? {\n                onMouseDown: (e)=>e.preventDefault()\n            } : undefined, isDisabled ? undefined : {\n                onClick: onClick\n            }),\n            // If a submenu is expanded, set the tabIndex to -1 so that shift tabbing goes out of the menu instead of the parent menu item.\n            tabIndex: itemProps.tabIndex != null && isTriggerExpanded && !data.shouldUseVirtualFocus ? -1 : itemProps.tabIndex\n        },\n        labelProps: {\n            id: labelId\n        },\n        descriptionProps: {\n            id: descriptionId\n        },\n        keyboardShortcutProps: {\n            id: keyboardId\n        },\n        isFocused: isFocused,\n        isFocusVisible: isFocused && selectionManager.isFocused && (0, $7Kjv5$isFocusVisible)() && !isTriggerExpanded,\n        isSelected: isSelected,\n        isPressed: isPressed,\n        isDisabled: isDisabled\n    };\n}\n\n\nexport {$a2e5df62f93c7633$export$9d32628fc2aea7da as useMenuItem};\n//# sourceMappingURL=useMenuItem.module.js.map\n","import {useId as $7Mibs$useId} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $3e5eb2498db5b506$export$73f7a44322579622(props) {\n    let { heading: heading, 'aria-label': ariaLabel } = props;\n    let headingId = (0, $7Mibs$useId)();\n    return {\n        itemProps: {\n            role: 'presentation'\n        },\n        headingProps: heading ? {\n            // Techincally, menus cannot contain headings according to ARIA.\n            // We hide the heading from assistive technology, using role=\"presentation\",\n            // and only use it as a label for the nested group.\n            id: headingId,\n            role: 'presentation'\n        } : {},\n        groupProps: {\n            role: 'group',\n            'aria-label': ariaLabel,\n            'aria-labelledby': heading ? headingId : undefined\n        }\n    };\n}\n\n\nexport {$3e5eb2498db5b506$export$73f7a44322579622 as useMenuSection};\n//# sourceMappingURL=useMenuSection.module.js.map\n","import {setInteractionModality as $9Gacy$setInteractionModality} from \"@react-aria/interactions\";\nimport {useRef as $9Gacy$useRef, useEffect as $9Gacy$useEffect} from \"react\";\nimport {useLayoutEffect as $9Gacy$useLayoutEffect, useEffectEvent as $9Gacy$useEffectEvent} from \"@react-aria/utils\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $e93e671b31057976$export$b8473d3665f3a75a(props, state, ref) {\n    let { validationBehavior: validationBehavior, focus: focus } = props;\n    // This is a useLayoutEffect so that it runs before the useEffect in useFormValidationState, which commits the validation change.\n    (0, $9Gacy$useLayoutEffect)(()=>{\n        if (validationBehavior === 'native' && (ref === null || ref === void 0 ? void 0 : ref.current) && !ref.current.disabled) {\n            let errorMessage = state.realtimeValidation.isInvalid ? state.realtimeValidation.validationErrors.join(' ') || 'Invalid value.' : '';\n            ref.current.setCustomValidity(errorMessage);\n            // Prevent default tooltip for validation message.\n            // https://bugzilla.mozilla.org/show_bug.cgi?id=605277\n            if (!ref.current.hasAttribute('title')) ref.current.title = '';\n            if (!state.realtimeValidation.isInvalid) state.updateValidation($e93e671b31057976$var$getNativeValidity(ref.current));\n        }\n    });\n    let isIgnoredReset = (0, $9Gacy$useRef)(false);\n    let onReset = (0, $9Gacy$useEffectEvent)(()=>{\n        if (!isIgnoredReset.current) state.resetValidation();\n    });\n    let onInvalid = (0, $9Gacy$useEffectEvent)((e)=>{\n        var _ref_current;\n        // Only commit validation if we are not already displaying one.\n        // This avoids clearing server errors that the user didn't actually fix.\n        if (!state.displayValidation.isInvalid) state.commitValidation();\n        // Auto focus the first invalid input in a form, unless the error already had its default prevented.\n        let form = ref === null || ref === void 0 ? void 0 : (_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.form;\n        if (!e.defaultPrevented && ref && form && $e93e671b31057976$var$getFirstInvalidInput(form) === ref.current) {\n            var _ref_current1;\n            if (focus) focus();\n            else (_ref_current1 = ref.current) === null || _ref_current1 === void 0 ? void 0 : _ref_current1.focus();\n            // Always show focus ring.\n            (0, $9Gacy$setInteractionModality)('keyboard');\n        }\n        // Prevent default browser error UI from appearing.\n        e.preventDefault();\n    });\n    let onChange = (0, $9Gacy$useEffectEvent)(()=>{\n        state.commitValidation();\n    });\n    (0, $9Gacy$useEffect)(()=>{\n        let input = ref === null || ref === void 0 ? void 0 : ref.current;\n        if (!input) return;\n        let form = input.form;\n        let reset = form === null || form === void 0 ? void 0 : form.reset;\n        if (form) // Try to detect React's automatic form reset behavior so we don't clear\n        // validation errors that are returned by server actions.\n        // To do this, we ignore programmatic form resets that occur outside a user event.\n        // This is best-effort. There may be false positives, e.g. setTimeout.\n        form.reset = ()=>{\n            // React uses MessageChannel for scheduling, so ignore 'message' events.\n            isIgnoredReset.current = !window.event || window.event.type === 'message' && window.event.target instanceof MessagePort;\n            reset === null || reset === void 0 ? void 0 : reset.call(form);\n            isIgnoredReset.current = false;\n        };\n        input.addEventListener('invalid', onInvalid);\n        input.addEventListener('change', onChange);\n        form === null || form === void 0 ? void 0 : form.addEventListener('reset', onReset);\n        return ()=>{\n            input.removeEventListener('invalid', onInvalid);\n            input.removeEventListener('change', onChange);\n            form === null || form === void 0 ? void 0 : form.removeEventListener('reset', onReset);\n            if (form) // @ts-ignore\n            form.reset = reset;\n        };\n    }, [\n        ref,\n        validationBehavior\n    ]);\n}\nfunction $e93e671b31057976$var$getValidity(input) {\n    // The native ValidityState object is live, meaning each property is a getter that returns the current state.\n    // We need to create a snapshot of the validity state at the time this function is called to avoid unpredictable React renders.\n    let validity = input.validity;\n    return {\n        badInput: validity.badInput,\n        customError: validity.customError,\n        patternMismatch: validity.patternMismatch,\n        rangeOverflow: validity.rangeOverflow,\n        rangeUnderflow: validity.rangeUnderflow,\n        stepMismatch: validity.stepMismatch,\n        tooLong: validity.tooLong,\n        tooShort: validity.tooShort,\n        typeMismatch: validity.typeMismatch,\n        valueMissing: validity.valueMissing,\n        valid: validity.valid\n    };\n}\nfunction $e93e671b31057976$var$getNativeValidity(input) {\n    return {\n        isInvalid: !input.validity.valid,\n        validationDetails: $e93e671b31057976$var$getValidity(input),\n        validationErrors: input.validationMessage ? [\n            input.validationMessage\n        ] : []\n    };\n}\nfunction $e93e671b31057976$var$getFirstInvalidInput(form) {\n    for(let i = 0; i < form.elements.length; i++){\n        let element = form.elements[i];\n        if (!element.validity.valid) return element;\n    }\n    return null;\n}\n\n\nexport {$e93e671b31057976$export$b8473d3665f3a75a as useFormValidation};\n//# sourceMappingURL=useFormValidation.module.js.map\n","import {filterDOMProps as $ig234$filterDOMProps, useFormReset as $ig234$useFormReset, mergeProps as $ig234$mergeProps} from \"@react-aria/utils\";\nimport $ig234$react, {useState as $ig234$useState} from \"react\";\nimport {useControlledState as $ig234$useControlledState} from \"@react-stately/utils\";\nimport {useField as $ig234$useField} from \"@react-aria/label\";\nimport {useFocusable as $ig234$useFocusable} from \"@react-aria/interactions\";\nimport {useFormValidation as $ig234$useFormValidation} from \"@react-aria/form\";\nimport {useFormValidationState as $ig234$useFormValidationState} from \"@react-stately/form\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nfunction $2d73ec29415bd339$export$712718f7aec83d5(props, ref) {\n    let { inputElementType: inputElementType = 'input', isDisabled: isDisabled = false, isRequired: isRequired = false, isReadOnly: isReadOnly = false, type: type = 'text', validationBehavior: validationBehavior = 'aria' } = props;\n    let [value, setValue] = (0, $ig234$useControlledState)(props.value, props.defaultValue || '', props.onChange);\n    let { focusableProps: focusableProps } = (0, $ig234$useFocusable)(props, ref);\n    let validationState = (0, $ig234$useFormValidationState)({\n        ...props,\n        value: value\n    });\n    let { isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = validationState.displayValidation;\n    let { labelProps: labelProps, fieldProps: fieldProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps } = (0, $ig234$useField)({\n        ...props,\n        isInvalid: isInvalid,\n        errorMessage: props.errorMessage || validationErrors\n    });\n    let domProps = (0, $ig234$filterDOMProps)(props, {\n        labelable: true\n    });\n    const inputOnlyProps = {\n        type: type,\n        pattern: props.pattern\n    };\n    let [initialValue] = (0, $ig234$useState)(value);\n    var _props_defaultValue;\n    (0, $ig234$useFormReset)(ref, (_props_defaultValue = props.defaultValue) !== null && _props_defaultValue !== void 0 ? _props_defaultValue : initialValue, setValue);\n    (0, $ig234$useFormValidation)(props, validationState, ref);\n    return {\n        labelProps: labelProps,\n        inputProps: (0, $ig234$mergeProps)(domProps, inputElementType === 'input' ? inputOnlyProps : undefined, {\n            disabled: isDisabled,\n            readOnly: isReadOnly,\n            required: isRequired && validationBehavior === 'native',\n            'aria-required': isRequired && validationBehavior === 'aria' || undefined,\n            'aria-invalid': isInvalid || undefined,\n            'aria-errormessage': props['aria-errormessage'],\n            'aria-activedescendant': props['aria-activedescendant'],\n            'aria-autocomplete': props['aria-autocomplete'],\n            'aria-haspopup': props['aria-haspopup'],\n            'aria-controls': props['aria-controls'],\n            value: value,\n            onChange: (e)=>setValue(e.target.value),\n            autoComplete: props.autoComplete,\n            autoCapitalize: props.autoCapitalize,\n            maxLength: props.maxLength,\n            minLength: props.minLength,\n            name: props.name,\n            form: props.form,\n            placeholder: props.placeholder,\n            inputMode: props.inputMode,\n            autoCorrect: props.autoCorrect,\n            spellCheck: props.spellCheck,\n            [parseInt((0, $ig234$react).version, 10) >= 17 ? 'enterKeyHint' : 'enterkeyhint']: props.enterKeyHint,\n            // Clipboard events\n            onCopy: props.onCopy,\n            onCut: props.onCut,\n            onPaste: props.onPaste,\n            // Composition events\n            onCompositionEnd: props.onCompositionEnd,\n            onCompositionStart: props.onCompositionStart,\n            onCompositionUpdate: props.onCompositionUpdate,\n            // Selection events\n            onSelect: props.onSelect,\n            // Input events\n            onBeforeInput: props.onBeforeInput,\n            onInput: props.onInput,\n            ...focusableProps,\n            ...fieldProps\n        }),\n        descriptionProps: descriptionProps,\n        errorMessageProps: errorMessageProps,\n        isInvalid: isInvalid,\n        validationErrors: validationErrors,\n        validationDetails: validationDetails\n    };\n}\n\n\nexport {$2d73ec29415bd339$export$712718f7aec83d5 as useTextField};\n//# sourceMappingURL=useTextField.module.js.map\n","var $5012d21d933388c1$exports = {};\n$5012d21d933388c1$exports = {\n    \"Clear search\": `Clear search`\n};\n\n\nexport {$5012d21d933388c1$exports as default};\n//# sourceMappingURL=en-US.module.js.map\n","import $03K6r$arAEmodulejs from \"./ar-AE.mjs\";\nimport $03K6r$bgBGmodulejs from \"./bg-BG.mjs\";\nimport $03K6r$csCZmodulejs from \"./cs-CZ.mjs\";\nimport $03K6r$daDKmodulejs from \"./da-DK.mjs\";\nimport $03K6r$deDEmodulejs from \"./de-DE.mjs\";\nimport $03K6r$elGRmodulejs from \"./el-GR.mjs\";\nimport $03K6r$enUSmodulejs from \"./en-US.mjs\";\nimport $03K6r$esESmodulejs from \"./es-ES.mjs\";\nimport $03K6r$etEEmodulejs from \"./et-EE.mjs\";\nimport $03K6r$fiFImodulejs from \"./fi-FI.mjs\";\nimport $03K6r$frFRmodulejs from \"./fr-FR.mjs\";\nimport $03K6r$heILmodulejs from \"./he-IL.mjs\";\nimport $03K6r$hrHRmodulejs from \"./hr-HR.mjs\";\nimport $03K6r$huHUmodulejs from \"./hu-HU.mjs\";\nimport $03K6r$itITmodulejs from \"./it-IT.mjs\";\nimport $03K6r$jaJPmodulejs from \"./ja-JP.mjs\";\nimport $03K6r$koKRmodulejs from \"./ko-KR.mjs\";\nimport $03K6r$ltLTmodulejs from \"./lt-LT.mjs\";\nimport $03K6r$lvLVmodulejs from \"./lv-LV.mjs\";\nimport $03K6r$nbNOmodulejs from \"./nb-NO.mjs\";\nimport $03K6r$nlNLmodulejs from \"./nl-NL.mjs\";\nimport $03K6r$plPLmodulejs from \"./pl-PL.mjs\";\nimport $03K6r$ptBRmodulejs from \"./pt-BR.mjs\";\nimport $03K6r$ptPTmodulejs from \"./pt-PT.mjs\";\nimport $03K6r$roROmodulejs from \"./ro-RO.mjs\";\nimport $03K6r$ruRUmodulejs from \"./ru-RU.mjs\";\nimport $03K6r$skSKmodulejs from \"./sk-SK.mjs\";\nimport $03K6r$slSImodulejs from \"./sl-SI.mjs\";\nimport $03K6r$srSPmodulejs from \"./sr-SP.mjs\";\nimport $03K6r$svSEmodulejs from \"./sv-SE.mjs\";\nimport $03K6r$trTRmodulejs from \"./tr-TR.mjs\";\nimport $03K6r$ukUAmodulejs from \"./uk-UA.mjs\";\nimport $03K6r$zhCNmodulejs from \"./zh-CN.mjs\";\nimport $03K6r$zhTWmodulejs from \"./zh-TW.mjs\";\n\nvar $8112f8b883c0272d$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$8112f8b883c0272d$exports = {\n    \"ar-AE\": $03K6r$arAEmodulejs,\n    \"bg-BG\": $03K6r$bgBGmodulejs,\n    \"cs-CZ\": $03K6r$csCZmodulejs,\n    \"da-DK\": $03K6r$daDKmodulejs,\n    \"de-DE\": $03K6r$deDEmodulejs,\n    \"el-GR\": $03K6r$elGRmodulejs,\n    \"en-US\": $03K6r$enUSmodulejs,\n    \"es-ES\": $03K6r$esESmodulejs,\n    \"et-EE\": $03K6r$etEEmodulejs,\n    \"fi-FI\": $03K6r$fiFImodulejs,\n    \"fr-FR\": $03K6r$frFRmodulejs,\n    \"he-IL\": $03K6r$heILmodulejs,\n    \"hr-HR\": $03K6r$hrHRmodulejs,\n    \"hu-HU\": $03K6r$huHUmodulejs,\n    \"it-IT\": $03K6r$itITmodulejs,\n    \"ja-JP\": $03K6r$jaJPmodulejs,\n    \"ko-KR\": $03K6r$koKRmodulejs,\n    \"lt-LT\": $03K6r$ltLTmodulejs,\n    \"lv-LV\": $03K6r$lvLVmodulejs,\n    \"nb-NO\": $03K6r$nbNOmodulejs,\n    \"nl-NL\": $03K6r$nlNLmodulejs,\n    \"pl-PL\": $03K6r$plPLmodulejs,\n    \"pt-BR\": $03K6r$ptBRmodulejs,\n    \"pt-PT\": $03K6r$ptPTmodulejs,\n    \"ro-RO\": $03K6r$roROmodulejs,\n    \"ru-RU\": $03K6r$ruRUmodulejs,\n    \"sk-SK\": $03K6r$skSKmodulejs,\n    \"sl-SI\": $03K6r$slSImodulejs,\n    \"sr-SP\": $03K6r$srSPmodulejs,\n    \"sv-SE\": $03K6r$svSEmodulejs,\n    \"tr-TR\": $03K6r$trTRmodulejs,\n    \"uk-UA\": $03K6r$ukUAmodulejs,\n    \"zh-CN\": $03K6r$zhCNmodulejs,\n    \"zh-TW\": $03K6r$zhTWmodulejs\n};\n\n\nexport {$8112f8b883c0272d$exports as default};\n//# sourceMappingURL=intlStrings.module.js.map\n","import $kTEqN$intlStringsmodulejs from \"./intlStrings.mjs\";\nimport {chain as $kTEqN$chain} from \"@react-aria/utils\";\nimport {useLocalizedStringFormatter as $kTEqN$useLocalizedStringFormatter} from \"@react-aria/i18n\";\nimport {useTextField as $kTEqN$useTextField} from \"@react-aria/textfield\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $4d52238874b24f86$export$9bb30bbe003b82e0(props, state, inputRef) {\n    let stringFormatter = (0, $kTEqN$useLocalizedStringFormatter)((0, ($parcel$interopDefault($kTEqN$intlStringsmodulejs))), '@react-aria/searchfield');\n    let { isDisabled: isDisabled, isReadOnly: isReadOnly, onSubmit: onSubmit, onClear: onClear, type: type = 'search' } = props;\n    let onKeyDown = (e)=>{\n        const key = e.key;\n        if (key === 'Enter' && (isDisabled || isReadOnly)) e.preventDefault();\n        if (isDisabled || isReadOnly) return;\n        // for backward compatibility;\n        // otherwise, \"Enter\" on an input would trigger a form submit, the default browser behavior\n        if (key === 'Enter' && onSubmit) {\n            e.preventDefault();\n            onSubmit(state.value);\n        }\n        if (key === 'Escape') {\n            // Also check the inputRef value for the case where the value was set directly on the input element instead of going through\n            // the hook\n            if (state.value === '' && (!inputRef.current || inputRef.current.value === '')) e.continuePropagation();\n            else {\n                e.preventDefault();\n                state.setValue('');\n                if (onClear) onClear();\n            }\n        }\n    };\n    let onClearButtonClick = ()=>{\n        state.setValue('');\n        if (onClear) onClear();\n    };\n    let onPressStart = ()=>{\n        var // this is in PressStart for mobile so that touching the clear button doesn't remove focus from\n        // the input and close the keyboard\n        _inputRef_current;\n        (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus();\n    };\n    let { labelProps: labelProps, inputProps: inputProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, ...validation } = (0, $kTEqN$useTextField)({\n        ...props,\n        value: state.value,\n        onChange: state.setValue,\n        onKeyDown: !isReadOnly ? (0, $kTEqN$chain)(onKeyDown, props.onKeyDown) : props.onKeyDown,\n        type: type\n    }, inputRef);\n    return {\n        labelProps: labelProps,\n        inputProps: {\n            ...inputProps,\n            // already handled by useSearchFieldState\n            defaultValue: undefined\n        },\n        clearButtonProps: {\n            'aria-label': stringFormatter.format('Clear search'),\n            excludeFromTabOrder: true,\n            preventFocusOnPress: true,\n            isDisabled: isDisabled || isReadOnly,\n            onPress: onClearButtonClick,\n            onPressStart: onPressStart\n        },\n        descriptionProps: descriptionProps,\n        errorMessageProps: errorMessageProps,\n        ...validation\n    };\n}\n\n\nexport {$4d52238874b24f86$export$9bb30bbe003b82e0 as useSearchField};\n//# sourceMappingURL=useSearchField.module.js.map\n","var $f195635a1f9154fe$exports = {};\n$f195635a1f9154fe$exports = {\n    \"collectionLabel\": `Suggestions`\n};\n\n\nexport {$f195635a1f9154fe$exports as default};\n//# sourceMappingURL=en-US.module.js.map\n","import $hwjOn$arAEmodulejs from \"./ar-AE.mjs\";\nimport $hwjOn$bgBGmodulejs from \"./bg-BG.mjs\";\nimport $hwjOn$csCZmodulejs from \"./cs-CZ.mjs\";\nimport $hwjOn$daDKmodulejs from \"./da-DK.mjs\";\nimport $hwjOn$deDEmodulejs from \"./de-DE.mjs\";\nimport $hwjOn$elGRmodulejs from \"./el-GR.mjs\";\nimport $hwjOn$enUSmodulejs from \"./en-US.mjs\";\nimport $hwjOn$esESmodulejs from \"./es-ES.mjs\";\nimport $hwjOn$etEEmodulejs from \"./et-EE.mjs\";\nimport $hwjOn$fiFImodulejs from \"./fi-FI.mjs\";\nimport $hwjOn$frFRmodulejs from \"./fr-FR.mjs\";\nimport $hwjOn$heILmodulejs from \"./he-IL.mjs\";\nimport $hwjOn$hrHRmodulejs from \"./hr-HR.mjs\";\nimport $hwjOn$huHUmodulejs from \"./hu-HU.mjs\";\nimport $hwjOn$itITmodulejs from \"./it-IT.mjs\";\nimport $hwjOn$jaJPmodulejs from \"./ja-JP.mjs\";\nimport $hwjOn$koKRmodulejs from \"./ko-KR.mjs\";\nimport $hwjOn$ltLTmodulejs from \"./lt-LT.mjs\";\nimport $hwjOn$lvLVmodulejs from \"./lv-LV.mjs\";\nimport $hwjOn$nbNOmodulejs from \"./nb-NO.mjs\";\nimport $hwjOn$nlNLmodulejs from \"./nl-NL.mjs\";\nimport $hwjOn$plPLmodulejs from \"./pl-PL.mjs\";\nimport $hwjOn$ptBRmodulejs from \"./pt-BR.mjs\";\nimport $hwjOn$ptPTmodulejs from \"./pt-PT.mjs\";\nimport $hwjOn$roROmodulejs from \"./ro-RO.mjs\";\nimport $hwjOn$ruRUmodulejs from \"./ru-RU.mjs\";\nimport $hwjOn$skSKmodulejs from \"./sk-SK.mjs\";\nimport $hwjOn$slSImodulejs from \"./sl-SI.mjs\";\nimport $hwjOn$srSPmodulejs from \"./sr-SP.mjs\";\nimport $hwjOn$svSEmodulejs from \"./sv-SE.mjs\";\nimport $hwjOn$trTRmodulejs from \"./tr-TR.mjs\";\nimport $hwjOn$ukUAmodulejs from \"./uk-UA.mjs\";\nimport $hwjOn$zhCNmodulejs from \"./zh-CN.mjs\";\nimport $hwjOn$zhTWmodulejs from \"./zh-TW.mjs\";\n\nvar $957f4f2fd749edef$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$957f4f2fd749edef$exports = {\n    \"ar-AE\": $hwjOn$arAEmodulejs,\n    \"bg-BG\": $hwjOn$bgBGmodulejs,\n    \"cs-CZ\": $hwjOn$csCZmodulejs,\n    \"da-DK\": $hwjOn$daDKmodulejs,\n    \"de-DE\": $hwjOn$deDEmodulejs,\n    \"el-GR\": $hwjOn$elGRmodulejs,\n    \"en-US\": $hwjOn$enUSmodulejs,\n    \"es-ES\": $hwjOn$esESmodulejs,\n    \"et-EE\": $hwjOn$etEEmodulejs,\n    \"fi-FI\": $hwjOn$fiFImodulejs,\n    \"fr-FR\": $hwjOn$frFRmodulejs,\n    \"he-IL\": $hwjOn$heILmodulejs,\n    \"hr-HR\": $hwjOn$hrHRmodulejs,\n    \"hu-HU\": $hwjOn$huHUmodulejs,\n    \"it-IT\": $hwjOn$itITmodulejs,\n    \"ja-JP\": $hwjOn$jaJPmodulejs,\n    \"ko-KR\": $hwjOn$koKRmodulejs,\n    \"lt-LT\": $hwjOn$ltLTmodulejs,\n    \"lv-LV\": $hwjOn$lvLVmodulejs,\n    \"nb-NO\": $hwjOn$nbNOmodulejs,\n    \"nl-NL\": $hwjOn$nlNLmodulejs,\n    \"pl-PL\": $hwjOn$plPLmodulejs,\n    \"pt-BR\": $hwjOn$ptBRmodulejs,\n    \"pt-PT\": $hwjOn$ptPTmodulejs,\n    \"ro-RO\": $hwjOn$roROmodulejs,\n    \"ru-RU\": $hwjOn$ruRUmodulejs,\n    \"sk-SK\": $hwjOn$skSKmodulejs,\n    \"sl-SI\": $hwjOn$slSImodulejs,\n    \"sr-SP\": $hwjOn$srSPmodulejs,\n    \"sv-SE\": $hwjOn$svSEmodulejs,\n    \"tr-TR\": $hwjOn$trTRmodulejs,\n    \"uk-UA\": $hwjOn$ukUAmodulejs,\n    \"zh-CN\": $hwjOn$zhCNmodulejs,\n    \"zh-TW\": $hwjOn$zhTWmodulejs\n};\n\n\nexport {$957f4f2fd749edef$exports as default};\n//# sourceMappingURL=intlStrings.module.js.map\n","import $4ELxY$intlStringsmodulejs from \"./intlStrings.mjs\";\nimport {useId as $4ELxY$useId, isIOS as $4ELxY$isIOS, isAndroid as $4ELxY$isAndroid, useEffectEvent as $4ELxY$useEffectEvent, getActiveElement as $4ELxY$getActiveElement, getOwnerDocument as $4ELxY$getOwnerDocument, useLayoutEffect as $4ELxY$useLayoutEffect, useObjectRef as $4ELxY$useObjectRef, mergeRefs as $4ELxY$mergeRefs, FOCUS_EVENT as $4ELxY$FOCUS_EVENT, CLEAR_FOCUS_EVENT as $4ELxY$CLEAR_FOCUS_EVENT, useEvent as $4ELxY$useEvent, isCtrlKeyPressed as $4ELxY$isCtrlKeyPressed, useLabels as $4ELxY$useLabels, mergeProps as $4ELxY$mergeProps} from \"@react-aria/utils\";\nimport {moveVirtualFocus as $4ELxY$moveVirtualFocus, getVirtuallyFocusedElement as $4ELxY$getVirtuallyFocusedElement, dispatchVirtualFocus as $4ELxY$dispatchVirtualFocus, dispatchVirtualBlur as $4ELxY$dispatchVirtualBlur} from \"@react-aria/focus\";\nimport {getInteractionModality as $4ELxY$getInteractionModality, getPointerType as $4ELxY$getPointerType} from \"@react-aria/interactions\";\nimport {useRef as $4ELxY$useRef, useState as $4ELxY$useState, useEffect as $4ELxY$useEffect, useCallback as $4ELxY$useCallback, useMemo as $4ELxY$useMemo} from \"react\";\nimport {useLocalizedStringFormatter as $4ELxY$useLocalizedStringFormatter} from \"@react-aria/i18n\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nfunction $48f6ba390f8c5b59$export$1e40b3ca02d92d21(props, state) {\n    let { inputRef: inputRef, collectionRef: collectionRef, filter: filter, disableAutoFocusFirst: disableAutoFocusFirst = false, disableVirtualFocus: disableVirtualFocus = false } = props;\n    let collectionId = (0, $4ELxY$useId)();\n    let timeout = (0, $4ELxY$useRef)(undefined);\n    let delayNextActiveDescendant = (0, $4ELxY$useRef)(false);\n    let queuedActiveDescendant = (0, $4ELxY$useRef)(null);\n    // For mobile screen readers, we don't want virtual focus, instead opting to disable FocusScope's restoreFocus and manually\n    // moving focus back to the subtriggers\n    let isMobileScreenReader = (0, $4ELxY$getInteractionModality)() === 'virtual' && ((0, $4ELxY$isIOS)() || (0, $4ELxY$isAndroid)());\n    let [shouldUseVirtualFocus, setShouldUseVirtualFocus] = (0, $4ELxY$useState)(!isMobileScreenReader && !disableVirtualFocus);\n    // Tracks if a collection has been connected to the autocomplete. If false, we don't want to add various attributes to the autocomplete input\n    // since it isn't attached to a filterable collection (e.g. Tabs)\n    let [hasCollection, setHasCollection] = (0, $4ELxY$useState)(false);\n    (0, $4ELxY$useEffect)(()=>{\n        return ()=>clearTimeout(timeout.current);\n    }, []);\n    let updateActiveDescendantEvent = (0, $4ELxY$useEffectEvent)((e)=>{\n        // Ensure input is focused if the user clicks on the collection directly.\n        // don't trigger on touch so that mobile keyboard doesnt appear when tapping on options\n        if (!e.isTrusted && shouldUseVirtualFocus && inputRef.current && (0, $4ELxY$getActiveElement)((0, $4ELxY$getOwnerDocument)(inputRef.current)) !== inputRef.current && (0, $4ELxY$getPointerType)() !== 'touch') inputRef.current.focus();\n        let target = e.target;\n        if (e.isTrusted || !target || queuedActiveDescendant.current === target.id) return;\n        clearTimeout(timeout.current);\n        if (target !== collectionRef.current) {\n            if (delayNextActiveDescendant.current) {\n                queuedActiveDescendant.current = target.id;\n                timeout.current = setTimeout(()=>{\n                    state.setFocusedNodeId(target.id);\n                }, 500);\n            } else {\n                queuedActiveDescendant.current = target.id;\n                state.setFocusedNodeId(target.id);\n            }\n        } else if (queuedActiveDescendant.current && !document.getElementById(queuedActiveDescendant.current)) {\n            // If we recieve a focus event refocusing the collection, either we have newly refocused the input and are waiting for the\n            // wrapped collection to refocus the previously focused node if any OR\n            // we are in a state where we've filtered to such a point that there aren't any matching items in the collection to focus.\n            // In this case we want to clear tracked item if any and clear active descendant\n            queuedActiveDescendant.current = null;\n            state.setFocusedNodeId(null);\n        }\n        delayNextActiveDescendant.current = false;\n    });\n    let [collectionNode, setCollectionNode] = (0, $4ELxY$useState)(null);\n    let callbackRef = (0, $4ELxY$useCallback)((node)=>{\n        setCollectionNode(node);\n        if (node != null) {\n            // If useSelectableCollection isn't passed shouldUseVirtualFocus even when useAutocomplete provides it\n            // that means the collection doesn't support it (e.g. Table). If that is the case, we need to disable it here regardless\n            // of what the user's provided so that the input doesn't recieve the onKeyDown and autocomplete props.\n            if (node.getAttribute('tabindex') != null) setShouldUseVirtualFocus(false);\n            setHasCollection(true);\n        } else setHasCollection(false);\n    }, []);\n    (0, $4ELxY$useLayoutEffect)(()=>{\n        if (collectionNode != null) // When typing forward, we want to delay the setting of active descendant to not interrupt the native screen reader announcement\n        // of the letter you just typed. If we recieve another focus event then we clear the queued update\n        collectionNode.addEventListener('focusin', updateActiveDescendantEvent);\n        return ()=>{\n            collectionNode === null || collectionNode === void 0 ? void 0 : collectionNode.removeEventListener('focusin', updateActiveDescendantEvent);\n        };\n    }, [\n        collectionNode\n    ]);\n    // Make sure to memo so that React doesn't keep registering a new event listeners on every rerender of the wrapped collection\n    let mergedCollectionRef = (0, $4ELxY$useObjectRef)((0, $4ELxY$useMemo)(()=>(0, $4ELxY$mergeRefs)(collectionRef, callbackRef), [\n        collectionRef,\n        callbackRef\n    ]));\n    let focusFirstItem = (0, $4ELxY$useCallback)(()=>{\n        var _collectionRef_current;\n        delayNextActiveDescendant.current = true;\n        (_collectionRef_current = collectionRef.current) === null || _collectionRef_current === void 0 ? void 0 : _collectionRef_current.dispatchEvent(new CustomEvent((0, $4ELxY$FOCUS_EVENT), {\n            cancelable: true,\n            bubbles: true,\n            detail: {\n                focusStrategy: 'first'\n            }\n        }));\n    }, [\n        collectionRef\n    ]);\n    let clearVirtualFocus = (0, $4ELxY$useCallback)((clearFocusKey)=>{\n        var _collectionRef_current;\n        (0, $4ELxY$moveVirtualFocus)((0, $4ELxY$getActiveElement)());\n        queuedActiveDescendant.current = null;\n        state.setFocusedNodeId(null);\n        let clearFocusEvent = new CustomEvent((0, $4ELxY$CLEAR_FOCUS_EVENT), {\n            cancelable: true,\n            bubbles: true,\n            detail: {\n                clearFocusKey: clearFocusKey\n            }\n        });\n        clearTimeout(timeout.current);\n        delayNextActiveDescendant.current = false;\n        (_collectionRef_current = collectionRef.current) === null || _collectionRef_current === void 0 ? void 0 : _collectionRef_current.dispatchEvent(clearFocusEvent);\n    }, [\n        collectionRef,\n        state\n    ]);\n    let lastInputType = (0, $4ELxY$useRef)('');\n    (0, $4ELxY$useEvent)(inputRef, 'input', (e)=>{\n        let { inputType: inputType } = e;\n        lastInputType.current = inputType;\n    });\n    let onChange = (value)=>{\n        // Tell wrapped collection to focus the first element in the list when typing forward and to clear focused key when modifying the text via\n        // copy paste/backspacing/undo/redo for screen reader announcements\n        if (lastInputType.current === 'insertText' && !disableAutoFocusFirst) focusFirstItem();\n        else if (lastInputType.current && (lastInputType.current.includes('insert') || lastInputType.current.includes('delete') || lastInputType.current.includes('history'))) {\n            clearVirtualFocus(true);\n            // If onChange was triggered before the timeout actually updated the activedescendant, we need to fire\n            // our own dispatchVirtualFocus so focusVisible gets reapplied on the input\n            if ((0, $4ELxY$getVirtuallyFocusedElement)(document) === inputRef.current) (0, $4ELxY$dispatchVirtualFocus)(inputRef.current, null);\n        }\n        state.setInputValue(value);\n    };\n    let keyDownTarget = (0, $4ELxY$useRef)(null);\n    // For textfield specific keydown operations\n    let onKeyDown = (e)=>{\n        keyDownTarget.current = e.target;\n        if (e.nativeEvent.isComposing) return;\n        let focusedNodeId = queuedActiveDescendant.current;\n        switch(e.key){\n            case 'a':\n                if ((0, $4ELxY$isCtrlKeyPressed)(e)) return;\n                break;\n            case 'Escape':\n                // Early return for Escape here so it doesn't leak the Escape event from the simulated collection event below and\n                // close the dialog prematurely. Ideally that should be up to the discretion of the input element hence the check\n                // for isPropagationStopped\n                if (e.isDefaultPrevented()) return;\n                break;\n            case ' ':\n                // Space shouldn't trigger onAction so early return.\n                return;\n            case 'Tab':\n                // Don't propogate Tab down to the collection, otherwise we will try to focus the collection via useSelectableCollection's Tab handler (aka shift tab logic)\n                // We want FocusScope to handle Tab if one exists (aka sub dialog), so special casepropogate\n                if ('continuePropagation' in e) e.continuePropagation();\n                return;\n            case 'Home':\n            case 'End':\n            case 'PageDown':\n            case 'PageUp':\n            case 'ArrowUp':\n            case 'ArrowDown':\n                {\n                    var _collectionRef_current;\n                    if ((e.key === 'Home' || e.key === 'End') && focusedNodeId == null && e.shiftKey) return;\n                    // Prevent these keys from moving the text cursor in the input\n                    e.preventDefault();\n                    // Move virtual focus into the wrapped collection\n                    let focusCollection = new CustomEvent((0, $4ELxY$FOCUS_EVENT), {\n                        cancelable: true,\n                        bubbles: true\n                    });\n                    (_collectionRef_current = collectionRef.current) === null || _collectionRef_current === void 0 ? void 0 : _collectionRef_current.dispatchEvent(focusCollection);\n                    break;\n                }\n        }\n        // Emulate the keyboard events that happen in the input field in the wrapped collection. This is for triggering things like onAction via Enter\n        // or moving focus from one item to another. Stop propagation on the input event if it isn't already stopped so it doesn't leak out. For events\n        // like ESC, the dispatched event below will bubble out of the collection and be stopped if handled by useSelectableCollection, otherwise will bubble\n        // as expected\n        if (!e.isPropagationStopped()) e.stopPropagation();\n        let shouldPerformDefaultAction = true;\n        if (collectionRef.current !== null) {\n            var _collectionRef_current1;\n            if (focusedNodeId == null) shouldPerformDefaultAction = ((_collectionRef_current1 = collectionRef.current) === null || _collectionRef_current1 === void 0 ? void 0 : _collectionRef_current1.dispatchEvent(new KeyboardEvent(e.nativeEvent.type, e.nativeEvent))) || false;\n            else {\n                let item = document.getElementById(focusedNodeId);\n                if (item) shouldPerformDefaultAction = (item === null || item === void 0 ? void 0 : item.dispatchEvent(new KeyboardEvent(e.nativeEvent.type, e.nativeEvent))) || false;\n            }\n        }\n        if (shouldPerformDefaultAction) switch(e.key){\n            case 'ArrowLeft':\n            case 'ArrowRight':\n                // Clear the activedescendant so NVDA announcements aren't interrupted but retain the focused key in the collection so the\n                // user's keyboard navigation restarts from where they left off\n                clearVirtualFocus();\n                break;\n            case 'Enter':\n                // Trigger click action on item when Enter key was pressed.\n                if (focusedNodeId != null) {\n                    let item = document.getElementById(focusedNodeId);\n                    item === null || item === void 0 ? void 0 : item.dispatchEvent(new PointerEvent('click', e.nativeEvent));\n                }\n                break;\n        }\n        else // TODO: check if we can do this, want to stop textArea from using its default Enter behavior so items are properly triggered\n        e.preventDefault();\n    };\n    let onKeyUpCapture = (0, $4ELxY$useEffectEvent)((e)=>{\n        // Dispatch simulated key up events for things like triggering links in listbox\n        // Make sure to stop the propagation of the input keyup event so that the simulated keyup/down pair\n        // is detected by usePress instead of the original keyup originating from the input\n        if (e.target === keyDownTarget.current) {\n            var _collectionRef_current;\n            e.stopImmediatePropagation();\n            let focusedNodeId = queuedActiveDescendant.current;\n            if (focusedNodeId == null) (_collectionRef_current = collectionRef.current) === null || _collectionRef_current === void 0 ? void 0 : _collectionRef_current.dispatchEvent(new KeyboardEvent(e.type, e));\n            else {\n                let item = document.getElementById(focusedNodeId);\n                item === null || item === void 0 ? void 0 : item.dispatchEvent(new KeyboardEvent(e.type, e));\n            }\n        }\n    });\n    (0, $4ELxY$useEffect)(()=>{\n        document.addEventListener('keyup', onKeyUpCapture, true);\n        return ()=>{\n            document.removeEventListener('keyup', onKeyUpCapture, true);\n        };\n    }, []);\n    let stringFormatter = (0, $4ELxY$useLocalizedStringFormatter)((0, ($parcel$interopDefault($4ELxY$intlStringsmodulejs))), '@react-aria/autocomplete');\n    let collectionProps = (0, $4ELxY$useLabels)({\n        id: collectionId,\n        'aria-label': stringFormatter.format('collectionLabel')\n    });\n    let filterFn = (0, $4ELxY$useCallback)((nodeTextValue, node)=>{\n        if (filter) return filter(nodeTextValue, state.inputValue, node);\n        return true;\n    }, [\n        state.inputValue,\n        filter\n    ]);\n    // Be sure to clear/restore the virtual + collection focus when blurring/refocusing the field so we only show the\n    // focus ring on the virtually focused collection when are actually interacting with the Autocomplete\n    let onBlur = (e)=>{\n        if (!e.isTrusted) return;\n        let lastFocusedNode = queuedActiveDescendant.current ? document.getElementById(queuedActiveDescendant.current) : null;\n        if (lastFocusedNode) (0, $4ELxY$dispatchVirtualBlur)(lastFocusedNode, e.relatedTarget);\n    };\n    let onFocus = (e)=>{\n        if (!e.isTrusted) return;\n        let curFocusedNode = queuedActiveDescendant.current ? document.getElementById(queuedActiveDescendant.current) : null;\n        if (curFocusedNode) {\n            let target = e.target;\n            queueMicrotask(()=>{\n                // instead of focusing the last focused node, just focus the collection instead and have the collection handle what item to focus via useSelectableCollection/Item\n                (0, $4ELxY$dispatchVirtualBlur)(target, collectionRef.current);\n                (0, $4ELxY$dispatchVirtualFocus)(collectionRef.current, target);\n            });\n        }\n    };\n    // Only apply the autocomplete specific behaviors if the collection component wrapped by it is actually\n    // being filtered/allows filtering by the Autocomplete.\n    let inputProps = {\n        value: state.inputValue,\n        onChange: onChange\n    };\n    var _state_focusedNodeId;\n    let virtualFocusProps = {\n        onKeyDown: onKeyDown,\n        'aria-activedescendant': (_state_focusedNodeId = state.focusedNodeId) !== null && _state_focusedNodeId !== void 0 ? _state_focusedNodeId : undefined,\n        onBlur: onBlur,\n        onFocus: onFocus\n    };\n    if (hasCollection) inputProps = {\n        ...inputProps,\n        ...shouldUseVirtualFocus && virtualFocusProps,\n        enterKeyHint: 'go',\n        'aria-controls': collectionId,\n        // TODO: readd proper logic for completionMode = complete (aria-autocomplete: both)\n        'aria-autocomplete': 'list',\n        // This disable's iOS's autocorrect suggestions, since the autocomplete provides its own suggestions.\n        autoCorrect: 'off',\n        // This disable's the macOS Safari spell check auto corrections.\n        spellCheck: 'false',\n        autoComplete: 'off'\n    };\n    return {\n        inputProps: inputProps,\n        collectionProps: (0, $4ELxY$mergeProps)(collectionProps, {\n            shouldUseVirtualFocus: shouldUseVirtualFocus,\n            disallowTypeAhead: shouldUseVirtualFocus\n        }),\n        collectionRef: mergedCollectionRef,\n        filter: filter != null ? filterFn : undefined\n    };\n}\n\n\nexport {$48f6ba390f8c5b59$export$1e40b3ca02d92d21 as useAutocomplete};\n//# sourceMappingURL=useAutocomplete.module.js.map\n","import {useState as $LM92H$useState} from \"react\";\nimport {useControlledState as $LM92H$useControlledState} from \"@react-stately/utils\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $94680be9a48a8f2d$export$ce1595f6e1a63433(props) {\n    let { onInputChange: propsOnInputChange, inputValue: propsInputValue, defaultInputValue: propsDefaultInputValue = '' } = props;\n    let onInputChange = (value)=>{\n        if (propsOnInputChange) propsOnInputChange(value);\n    };\n    let [focusedNodeId, setFocusedNodeId] = (0, $LM92H$useState)(null);\n    let [inputValue, setInputValue] = (0, $LM92H$useControlledState)(propsInputValue, propsDefaultInputValue, onInputChange);\n    return {\n        inputValue: inputValue,\n        setInputValue: setInputValue,\n        focusedNodeId: focusedNodeId,\n        setFocusedNodeId: setFocusedNodeId\n    };\n}\n\n\nexport {$94680be9a48a8f2d$export$ce1595f6e1a63433 as useAutocompleteState};\n//# sourceMappingURL=useAutocompleteState.module.js.map\n","import {FieldInputContext as $4e85f108e88277b8$export$698f465ec27e93df, SelectableCollectionContext as $4e85f108e88277b8$export$b0d3ecf7112093a7} from \"./RSPContexts.mjs\";\nimport {Provider as $64fa3d84918910a7$export$2881499e37b75b9a, removeDataAttributes as $64fa3d84918910a7$export$ef03459518577ad4, useSlottedContext as $64fa3d84918910a7$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {useAutocomplete as $llkzs$useAutocomplete} from \"@react-aria/autocomplete\";\nimport {useAutocompleteState as $llkzs$useAutocompleteState} from \"@react-stately/autocomplete\";\nimport {mergeProps as $llkzs$mergeProps} from \"@react-aria/utils\";\nimport $llkzs$react, {createContext as $llkzs$createContext, useRef as $llkzs$useRef} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nconst $d2f53cda644affe3$export$36e687af51cd0967 = /*#__PURE__*/ (0, $llkzs$createContext)(null);\nconst $d2f53cda644affe3$export$68ee3368b6d68148 = /*#__PURE__*/ (0, $llkzs$createContext)(null);\nfunction $d2f53cda644affe3$export$2f2b9559550c7bbc(props) {\n    let ctx = (0, $64fa3d84918910a7$export$fabf2dc03a41866e)($d2f53cda644affe3$export$36e687af51cd0967, props.slot);\n    props = (0, $llkzs$mergeProps)(ctx, props);\n    let { filter: filter, disableAutoFocusFirst: disableAutoFocusFirst } = props;\n    let state = (0, $llkzs$useAutocompleteState)(props);\n    let inputRef = (0, $llkzs$useRef)(null);\n    let collectionRef = (0, $llkzs$useRef)(null);\n    let { inputProps: inputProps, collectionProps: collectionProps, collectionRef: mergedCollectionRef, filter: filterFn } = (0, $llkzs$useAutocomplete)({\n        ...(0, $64fa3d84918910a7$export$ef03459518577ad4)(props),\n        filter: filter,\n        disableAutoFocusFirst: disableAutoFocusFirst,\n        inputRef: inputRef,\n        collectionRef: collectionRef\n    }, state);\n    return /*#__PURE__*/ (0, $llkzs$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $d2f53cda644affe3$export$68ee3368b6d68148,\n                state\n            ],\n            [\n                (0, $4e85f108e88277b8$export$698f465ec27e93df),\n                {\n                    ...inputProps,\n                    ref: inputRef\n                }\n            ],\n            [\n                (0, $4e85f108e88277b8$export$b0d3ecf7112093a7),\n                {\n                    ...collectionProps,\n                    filter: filterFn,\n                    ref: mergedCollectionRef\n                }\n            ]\n        ]\n    }, props.children);\n}\n\n\nexport {$d2f53cda644affe3$export$36e687af51cd0967 as AutocompleteContext, $d2f53cda644affe3$export$68ee3368b6d68148 as AutocompleteStateContext, $d2f53cda644affe3$export$2f2b9559550c7bbc as Autocomplete};\n//# sourceMappingURL=Autocomplete.module.js.map\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $23b9f4fcf0fe224b$export$d68d59712b04d9d1 {\n    get childNodes() {\n        throw new Error('childNodes is not supported');\n    }\n    clone() {\n        let node = new this.constructor(this.key);\n        node.value = this.value;\n        node.level = this.level;\n        node.hasChildNodes = this.hasChildNodes;\n        node.rendered = this.rendered;\n        node.textValue = this.textValue;\n        node['aria-label'] = this['aria-label'];\n        node.index = this.index;\n        node.parentKey = this.parentKey;\n        node.prevKey = this.prevKey;\n        node.nextKey = this.nextKey;\n        node.firstChildKey = this.firstChildKey;\n        node.lastChildKey = this.lastChildKey;\n        node.props = this.props;\n        node.render = this.render;\n        node.colSpan = this.colSpan;\n        node.colIndex = this.colIndex;\n        return node;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    filter(collection, newCollection, filterFn) {\n        let clone = this.clone();\n        newCollection.addDescendants(clone, collection);\n        return clone;\n    }\n    constructor(key){\n        this.value = null;\n        this.level = 0;\n        this.hasChildNodes = false;\n        this.rendered = null;\n        this.textValue = '';\n        this['aria-label'] = undefined;\n        this.index = 0;\n        this.parentKey = null;\n        this.prevKey = null;\n        this.nextKey = null;\n        this.firstChildKey = null;\n        this.lastChildKey = null;\n        this.props = {};\n        this.colSpan = null;\n        this.colIndex = null;\n        this.type = this.constructor.type;\n        this.key = key;\n    }\n}\nclass $23b9f4fcf0fe224b$export$b1918e978f1ee46f extends $23b9f4fcf0fe224b$export$d68d59712b04d9d1 {\n    filter(collection, newCollection, filterFn) {\n        let [firstKey, lastKey] = $23b9f4fcf0fe224b$var$filterChildren(collection, newCollection, this.firstChildKey, filterFn);\n        let newNode = this.clone();\n        newNode.firstChildKey = firstKey;\n        newNode.lastChildKey = lastKey;\n        return newNode;\n    }\n}\nclass $23b9f4fcf0fe224b$export$5ae2504e948afce5 extends $23b9f4fcf0fe224b$export$d68d59712b04d9d1 {\n}\n$23b9f4fcf0fe224b$export$5ae2504e948afce5.type = 'header';\nclass $23b9f4fcf0fe224b$export$8258a0665a675899 extends $23b9f4fcf0fe224b$export$d68d59712b04d9d1 {\n}\n$23b9f4fcf0fe224b$export$8258a0665a675899.type = 'loader';\nclass $23b9f4fcf0fe224b$export$fd11f34e1d07f134 extends $23b9f4fcf0fe224b$export$b1918e978f1ee46f {\n    filter(collection, newCollection, filterFn) {\n        if (filterFn(this.textValue, this)) {\n            let clone = this.clone();\n            newCollection.addDescendants(clone, collection);\n            return clone;\n        }\n        return null;\n    }\n}\n$23b9f4fcf0fe224b$export$fd11f34e1d07f134.type = 'item';\nclass $23b9f4fcf0fe224b$export$437f11dc9b403b78 extends $23b9f4fcf0fe224b$export$b1918e978f1ee46f {\n    filter(collection, newCollection, filterFn) {\n        let filteredSection = super.filter(collection, newCollection, filterFn);\n        if (filteredSection) {\n            if (filteredSection.lastChildKey !== null) {\n                let lastChild = collection.getItem(filteredSection.lastChildKey);\n                if (lastChild && lastChild.type !== 'header') return filteredSection;\n            }\n        }\n        return null;\n    }\n}\n$23b9f4fcf0fe224b$export$437f11dc9b403b78.type = 'section';\nclass $23b9f4fcf0fe224b$export$408d25a4e12db025 {\n    get size() {\n        return this.itemCount;\n    }\n    getKeys() {\n        return this.keyMap.keys();\n    }\n    *[Symbol.iterator]() {\n        let node = this.firstKey != null ? this.keyMap.get(this.firstKey) : undefined;\n        while(node){\n            yield node;\n            node = node.nextKey != null ? this.keyMap.get(node.nextKey) : undefined;\n        }\n    }\n    getChildren(key) {\n        let keyMap = this.keyMap;\n        return {\n            *[Symbol.iterator] () {\n                let parent = keyMap.get(key);\n                let node = (parent === null || parent === void 0 ? void 0 : parent.firstChildKey) != null ? keyMap.get(parent.firstChildKey) : null;\n                while(node){\n                    yield node;\n                    node = node.nextKey != null ? keyMap.get(node.nextKey) : undefined;\n                }\n            }\n        };\n    }\n    getKeyBefore(key) {\n        let node = this.keyMap.get(key);\n        if (!node) return null;\n        if (node.prevKey != null) {\n            node = this.keyMap.get(node.prevKey);\n            while(node && node.type !== 'item' && node.lastChildKey != null)node = this.keyMap.get(node.lastChildKey);\n            var _node_key;\n            return (_node_key = node === null || node === void 0 ? void 0 : node.key) !== null && _node_key !== void 0 ? _node_key : null;\n        }\n        return node.parentKey;\n    }\n    getKeyAfter(key) {\n        let node = this.keyMap.get(key);\n        if (!node) return null;\n        if (node.type !== 'item' && node.firstChildKey != null) return node.firstChildKey;\n        while(node){\n            if (node.nextKey != null) return node.nextKey;\n            if (node.parentKey != null) node = this.keyMap.get(node.parentKey);\n            else return null;\n        }\n        return null;\n    }\n    getFirstKey() {\n        return this.firstKey;\n    }\n    getLastKey() {\n        let node = this.lastKey != null ? this.keyMap.get(this.lastKey) : null;\n        while((node === null || node === void 0 ? void 0 : node.lastChildKey) != null)node = this.keyMap.get(node.lastChildKey);\n        var _node_key;\n        return (_node_key = node === null || node === void 0 ? void 0 : node.key) !== null && _node_key !== void 0 ? _node_key : null;\n    }\n    getItem(key) {\n        var _this_keyMap_get;\n        return (_this_keyMap_get = this.keyMap.get(key)) !== null && _this_keyMap_get !== void 0 ? _this_keyMap_get : null;\n    }\n    at() {\n        throw new Error('Not implemented');\n    }\n    clone() {\n        // We need to clone using this.constructor so that subclasses have the right prototype.\n        // TypeScript isn't happy about this yet.\n        // https://github.com/microsoft/TypeScript/issues/3841\n        let Constructor = this.constructor;\n        let collection = new Constructor();\n        collection.keyMap = new Map(this.keyMap);\n        collection.firstKey = this.firstKey;\n        collection.lastKey = this.lastKey;\n        collection.itemCount = this.itemCount;\n        return collection;\n    }\n    addNode(node) {\n        if (this.frozen) throw new Error('Cannot add a node to a frozen collection');\n        if (node.type === 'item' && this.keyMap.get(node.key) == null) this.itemCount++;\n        this.keyMap.set(node.key, node);\n    }\n    // Deeply add a node and its children to the collection from another collection, primarily used when filtering a collection\n    addDescendants(node, oldCollection) {\n        this.addNode(node);\n        let children = oldCollection.getChildren(node.key);\n        for (let child of children)this.addDescendants(child, oldCollection);\n    }\n    removeNode(key) {\n        if (this.frozen) throw new Error('Cannot remove a node to a frozen collection');\n        let node = this.keyMap.get(key);\n        if (node != null && node.type === 'item') this.itemCount--;\n        this.keyMap.delete(key);\n    }\n    commit(firstKey, lastKey, isSSR = false) {\n        if (this.frozen) throw new Error('Cannot commit a frozen collection');\n        this.firstKey = firstKey;\n        this.lastKey = lastKey;\n        this.frozen = !isSSR;\n    }\n    filter(filterFn) {\n        let newCollection = new this.constructor();\n        let [firstKey, lastKey] = $23b9f4fcf0fe224b$var$filterChildren(this, newCollection, this.firstKey, filterFn);\n        newCollection === null || newCollection === void 0 ? void 0 : newCollection.commit(firstKey, lastKey);\n        return newCollection;\n    }\n    constructor(){\n        this.keyMap = new Map();\n        this.firstKey = null;\n        this.lastKey = null;\n        this.frozen = false;\n        this.itemCount = 0;\n    }\n}\nfunction $23b9f4fcf0fe224b$var$filterChildren(collection, newCollection, firstChildKey, filterFn) {\n    // loop over the siblings for firstChildKey\n    // create new nodes based on calling node.filter for each child\n    // if it returns null then don't include it, otherwise update its prev/next keys\n    // add them to the newCollection\n    if (firstChildKey == null) return [\n        null,\n        null\n    ];\n    let firstNode = null;\n    let lastNode = null;\n    let currentNode = collection.getItem(firstChildKey);\n    while(currentNode != null){\n        let newNode = currentNode.filter(collection, newCollection, filterFn);\n        if (newNode != null) {\n            newNode.nextKey = null;\n            if (lastNode) {\n                newNode.prevKey = lastNode.key;\n                lastNode.nextKey = newNode.key;\n            }\n            if (firstNode == null) firstNode = newNode;\n            newCollection.addNode(newNode);\n            lastNode = newNode;\n        }\n        currentNode = currentNode.nextKey ? collection.getItem(currentNode.nextKey) : null;\n    }\n    // TODO: this is pretty specific to dividers but doesn't feel like there is a good way to get around it since we only can know\n    // to filter the last separator in a collection only after performing a filter for the rest of the contents after it\n    // Its gross that it needs to live here, might be nice if somehow we could have this live in the separator code\n    if (lastNode && lastNode.type === 'separator') {\n        let prevKey = lastNode.prevKey;\n        newCollection.removeNode(lastNode.key);\n        if (prevKey) {\n            lastNode = newCollection.getItem(prevKey);\n            lastNode.nextKey = null;\n        } else lastNode = null;\n    }\n    var _firstNode_key, _lastNode_key;\n    return [\n        (_firstNode_key = firstNode === null || firstNode === void 0 ? void 0 : firstNode.key) !== null && _firstNode_key !== void 0 ? _firstNode_key : null,\n        (_lastNode_key = lastNode === null || lastNode === void 0 ? void 0 : lastNode.key) !== null && _lastNode_key !== void 0 ? _lastNode_key : null\n    ];\n}\n\n\nexport {$23b9f4fcf0fe224b$export$d68d59712b04d9d1 as CollectionNode, $23b9f4fcf0fe224b$export$b1918e978f1ee46f as FilterableNode, $23b9f4fcf0fe224b$export$5ae2504e948afce5 as HeaderNode, $23b9f4fcf0fe224b$export$8258a0665a675899 as LoaderNode, $23b9f4fcf0fe224b$export$fd11f34e1d07f134 as ItemNode, $23b9f4fcf0fe224b$export$437f11dc9b403b78 as SectionNode, $23b9f4fcf0fe224b$export$408d25a4e12db025 as BaseCollection};\n//# sourceMappingURL=BaseCollection.module.js.map\n","/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $681cc3c98f569e39$export$410b0c854570d131 {\n    *[Symbol.iterator]() {\n        let node = this.firstChild;\n        while(node){\n            yield node;\n            node = node.nextSibling;\n        }\n    }\n    get firstChild() {\n        return this._firstChild;\n    }\n    set firstChild(firstChild) {\n        this._firstChild = firstChild;\n        this.ownerDocument.markDirty(this);\n    }\n    get lastChild() {\n        return this._lastChild;\n    }\n    set lastChild(lastChild) {\n        this._lastChild = lastChild;\n        this.ownerDocument.markDirty(this);\n    }\n    get previousSibling() {\n        return this._previousSibling;\n    }\n    set previousSibling(previousSibling) {\n        this._previousSibling = previousSibling;\n        this.ownerDocument.markDirty(this);\n    }\n    get nextSibling() {\n        return this._nextSibling;\n    }\n    set nextSibling(nextSibling) {\n        this._nextSibling = nextSibling;\n        this.ownerDocument.markDirty(this);\n    }\n    get parentNode() {\n        return this._parentNode;\n    }\n    set parentNode(parentNode) {\n        this._parentNode = parentNode;\n        this.ownerDocument.markDirty(this);\n    }\n    get isConnected() {\n        var _this_parentNode;\n        return ((_this_parentNode = this.parentNode) === null || _this_parentNode === void 0 ? void 0 : _this_parentNode.isConnected) || false;\n    }\n    invalidateChildIndices(child) {\n        if (this._minInvalidChildIndex == null || !this._minInvalidChildIndex.isConnected || child.index < this._minInvalidChildIndex.index) {\n            this._minInvalidChildIndex = child;\n            this.ownerDocument.markDirty(this);\n        }\n    }\n    updateChildIndices() {\n        let node = this._minInvalidChildIndex;\n        while(node){\n            node.index = node.previousSibling ? node.previousSibling.index + 1 : 0;\n            node = node.nextSibling;\n        }\n        this._minInvalidChildIndex = null;\n    }\n    appendChild(child) {\n        if (child.parentNode) child.parentNode.removeChild(child);\n        if (this.firstChild == null) this.firstChild = child;\n        if (this.lastChild) {\n            this.lastChild.nextSibling = child;\n            child.index = this.lastChild.index + 1;\n            child.previousSibling = this.lastChild;\n        } else {\n            child.previousSibling = null;\n            child.index = 0;\n        }\n        child.parentNode = this;\n        child.nextSibling = null;\n        this.lastChild = child;\n        this.ownerDocument.markDirty(this);\n        if (this.isConnected) this.ownerDocument.queueUpdate();\n    }\n    insertBefore(newNode, referenceNode) {\n        if (referenceNode == null) return this.appendChild(newNode);\n        if (newNode.parentNode) newNode.parentNode.removeChild(newNode);\n        newNode.nextSibling = referenceNode;\n        newNode.previousSibling = referenceNode.previousSibling;\n        // Ensure that the newNode's index is less than that of the reference node so that\n        // invalidateChildIndices will properly use the newNode as the _minInvalidChildIndex, thus making sure\n        // we will properly update the indexes of all sibiling nodes after the newNode. The value here doesn't matter\n        // since updateChildIndices should calculate the proper indexes.\n        newNode.index = referenceNode.index - 1;\n        if (this.firstChild === referenceNode) this.firstChild = newNode;\n        else if (referenceNode.previousSibling) referenceNode.previousSibling.nextSibling = newNode;\n        referenceNode.previousSibling = newNode;\n        newNode.parentNode = referenceNode.parentNode;\n        this.invalidateChildIndices(newNode);\n        if (this.isConnected) this.ownerDocument.queueUpdate();\n    }\n    removeChild(child) {\n        if (child.parentNode !== this) return;\n        if (this._minInvalidChildIndex === child) this._minInvalidChildIndex = null;\n        if (child.nextSibling) {\n            this.invalidateChildIndices(child.nextSibling);\n            child.nextSibling.previousSibling = child.previousSibling;\n        }\n        if (child.previousSibling) child.previousSibling.nextSibling = child.nextSibling;\n        if (this.firstChild === child) this.firstChild = child.nextSibling;\n        if (this.lastChild === child) this.lastChild = child.previousSibling;\n        child.parentNode = null;\n        child.nextSibling = null;\n        child.previousSibling = null;\n        child.index = 0;\n        this.ownerDocument.markDirty(child);\n        if (this.isConnected) this.ownerDocument.queueUpdate();\n    }\n    addEventListener() {}\n    removeEventListener() {}\n    get previousVisibleSibling() {\n        let node = this.previousSibling;\n        while(node && node.isHidden)node = node.previousSibling;\n        return node;\n    }\n    get nextVisibleSibling() {\n        let node = this.nextSibling;\n        while(node && node.isHidden)node = node.nextSibling;\n        return node;\n    }\n    get firstVisibleChild() {\n        let node = this.firstChild;\n        while(node && node.isHidden)node = node.nextSibling;\n        return node;\n    }\n    get lastVisibleChild() {\n        let node = this.lastChild;\n        while(node && node.isHidden)node = node.previousSibling;\n        return node;\n    }\n    constructor(ownerDocument){\n        this._firstChild = null;\n        this._lastChild = null;\n        this._previousSibling = null;\n        this._nextSibling = null;\n        this._parentNode = null;\n        this._minInvalidChildIndex = null;\n        this.ownerDocument = ownerDocument;\n    }\n}\nclass $681cc3c98f569e39$export$dc064fe9e59310fd extends $681cc3c98f569e39$export$410b0c854570d131 {\n    get index() {\n        return this._index;\n    }\n    set index(index) {\n        this._index = index;\n        this.ownerDocument.markDirty(this);\n    }\n    get level() {\n        var _this_node;\n        if (this.parentNode instanceof $681cc3c98f569e39$export$dc064fe9e59310fd) return this.parentNode.level + (((_this_node = this.node) === null || _this_node === void 0 ? void 0 : _this_node.type) === 'item' ? 1 : 0);\n        return 0;\n    }\n    /**\n   * Lazily gets a mutable instance of a Node. If the node has already\n   * been cloned during this update cycle, it just returns the existing one.\n   */ getMutableNode() {\n        if (this.node == null) return null;\n        if (!this.isMutated) {\n            this.node = this.node.clone();\n            this.isMutated = true;\n        }\n        this.ownerDocument.markDirty(this);\n        return this.node;\n    }\n    updateNode() {\n        var _this_parentNode_node, _this_previousVisibleSibling_node, _this_previousVisibleSibling, _nextSibling_node, _this_firstVisibleChild_node, _this_firstVisibleChild, _this_lastVisibleChild_node, _this_lastVisibleChild;\n        let nextSibling = this.nextVisibleSibling;\n        let node = this.getMutableNode();\n        if (node == null) return;\n        node.index = this.index;\n        node.level = this.level;\n        var _this_parentNode_node_key;\n        node.parentKey = this.parentNode instanceof $681cc3c98f569e39$export$dc064fe9e59310fd ? (_this_parentNode_node_key = (_this_parentNode_node = this.parentNode.node) === null || _this_parentNode_node === void 0 ? void 0 : _this_parentNode_node.key) !== null && _this_parentNode_node_key !== void 0 ? _this_parentNode_node_key : null : null;\n        var _this_previousVisibleSibling_node_key;\n        node.prevKey = (_this_previousVisibleSibling_node_key = (_this_previousVisibleSibling = this.previousVisibleSibling) === null || _this_previousVisibleSibling === void 0 ? void 0 : (_this_previousVisibleSibling_node = _this_previousVisibleSibling.node) === null || _this_previousVisibleSibling_node === void 0 ? void 0 : _this_previousVisibleSibling_node.key) !== null && _this_previousVisibleSibling_node_key !== void 0 ? _this_previousVisibleSibling_node_key : null;\n        var _nextSibling_node_key;\n        node.nextKey = (_nextSibling_node_key = nextSibling === null || nextSibling === void 0 ? void 0 : (_nextSibling_node = nextSibling.node) === null || _nextSibling_node === void 0 ? void 0 : _nextSibling_node.key) !== null && _nextSibling_node_key !== void 0 ? _nextSibling_node_key : null;\n        node.hasChildNodes = !!this.firstChild;\n        var _this_firstVisibleChild_node_key;\n        node.firstChildKey = (_this_firstVisibleChild_node_key = (_this_firstVisibleChild = this.firstVisibleChild) === null || _this_firstVisibleChild === void 0 ? void 0 : (_this_firstVisibleChild_node = _this_firstVisibleChild.node) === null || _this_firstVisibleChild_node === void 0 ? void 0 : _this_firstVisibleChild_node.key) !== null && _this_firstVisibleChild_node_key !== void 0 ? _this_firstVisibleChild_node_key : null;\n        var _this_lastVisibleChild_node_key;\n        node.lastChildKey = (_this_lastVisibleChild_node_key = (_this_lastVisibleChild = this.lastVisibleChild) === null || _this_lastVisibleChild === void 0 ? void 0 : (_this_lastVisibleChild_node = _this_lastVisibleChild.node) === null || _this_lastVisibleChild_node === void 0 ? void 0 : _this_lastVisibleChild_node.key) !== null && _this_lastVisibleChild_node_key !== void 0 ? _this_lastVisibleChild_node_key : null;\n        // Update the colIndex of sibling nodes if this node has a colSpan.\n        if ((node.colSpan != null || node.colIndex != null) && nextSibling) {\n            var _node_colIndex, _node_colSpan;\n            // This queues the next sibling for update, which means this happens recursively.\n            let nextColIndex = ((_node_colIndex = node.colIndex) !== null && _node_colIndex !== void 0 ? _node_colIndex : node.index) + ((_node_colSpan = node.colSpan) !== null && _node_colSpan !== void 0 ? _node_colSpan : 1);\n            if (nextSibling.node != null && nextColIndex !== nextSibling.node.colIndex) {\n                let siblingNode = nextSibling.getMutableNode();\n                siblingNode.colIndex = nextColIndex;\n            }\n        }\n    }\n    setProps(obj, ref, CollectionNodeClass, rendered, render) {\n        let node;\n        let { value: value1, textValue: textValue, id: id, ...props } = obj;\n        if (this.node == null) {\n            node = new CollectionNodeClass(id !== null && id !== void 0 ? id : `react-aria-${++this.ownerDocument.nodeId}`);\n            this.node = node;\n        } else node = this.getMutableNode();\n        props.ref = ref;\n        node.props = props;\n        node.rendered = rendered;\n        node.render = render;\n        node.value = value1;\n        if (obj['aria-label']) node['aria-label'] = obj['aria-label'];\n        node.textValue = textValue || (typeof props.children === 'string' ? props.children : '') || obj['aria-label'] || '';\n        if (id != null && id !== node.key) throw new Error('Cannot change the id of an item');\n        if (props.colSpan != null) node.colSpan = props.colSpan;\n        if (this.isConnected) this.ownerDocument.queueUpdate();\n    }\n    get style() {\n        // React sets display: none to hide elements during Suspense.\n        // We'll handle this by setting the element to hidden and invalidating\n        // its siblings/parent. Hidden elements remain in the Document, but\n        // are removed from the Collection.\n        let element = this;\n        return {\n            get display () {\n                return element.isHidden ? 'none' : '';\n            },\n            set display (value){\n                let isHidden = value === 'none';\n                if (element.isHidden !== isHidden) {\n                    var _element_parentNode, _element_parentNode1;\n                    // Mark parent node dirty if this element is currently the first or last visible child.\n                    if (((_element_parentNode = element.parentNode) === null || _element_parentNode === void 0 ? void 0 : _element_parentNode.firstVisibleChild) === element || ((_element_parentNode1 = element.parentNode) === null || _element_parentNode1 === void 0 ? void 0 : _element_parentNode1.lastVisibleChild) === element) element.ownerDocument.markDirty(element.parentNode);\n                    // Mark sibling visible elements dirty.\n                    let prev = element.previousVisibleSibling;\n                    let next = element.nextVisibleSibling;\n                    if (prev) element.ownerDocument.markDirty(prev);\n                    if (next) element.ownerDocument.markDirty(next);\n                    // Mark self dirty.\n                    element.isHidden = isHidden;\n                    element.ownerDocument.markDirty(element);\n                }\n            }\n        };\n    }\n    hasAttribute() {}\n    setAttribute() {}\n    setAttributeNS() {}\n    removeAttribute() {}\n    constructor(type, ownerDocument){\n        super(ownerDocument), this.nodeType = 8 // COMMENT_NODE (we'd use ELEMENT_NODE but React DevTools will fail to get its dimensions)\n        , this.isMutated = true, this._index = 0, this.isHidden = false;\n        this.node = null;\n    }\n}\nclass $681cc3c98f569e39$export$b34a105447964f9f extends $681cc3c98f569e39$export$410b0c854570d131 {\n    get isConnected() {\n        return true;\n    }\n    createElement(type) {\n        return new $681cc3c98f569e39$export$dc064fe9e59310fd(type, this);\n    }\n    getMutableCollection() {\n        if (!this.nextCollection) this.nextCollection = this.collection.clone();\n        return this.nextCollection;\n    }\n    markDirty(node) {\n        this.dirtyNodes.add(node);\n    }\n    addNode(element) {\n        if (element.isHidden || element.node == null) return;\n        let collection = this.getMutableCollection();\n        if (!collection.getItem(element.node.key)) for (let child of element)this.addNode(child);\n        collection.addNode(element.node);\n    }\n    removeNode(node) {\n        for (let child of node)this.removeNode(child);\n        if (node.node) {\n            let collection = this.getMutableCollection();\n            collection.removeNode(node.node.key);\n        }\n    }\n    /** Finalizes the collection update, updating all nodes and freezing the collection. */ getCollection() {\n        // If in a subscription update, return a clone of the existing collection.\n        // This ensures React will queue a render. React will call getCollection again\n        // during render, at which point all the updates will be complete and we can return\n        // the new collection.\n        if (this.inSubscription) return this.collection.clone();\n        // Reset queuedRender to false when getCollection is called during render.\n        this.queuedRender = false;\n        this.updateCollection();\n        return this.collection;\n    }\n    updateCollection() {\n        // First, remove disconnected nodes and update the indices of dirty element children.\n        for (let element of this.dirtyNodes)if (element instanceof $681cc3c98f569e39$export$dc064fe9e59310fd && (!element.isConnected || element.isHidden)) this.removeNode(element);\n        else element.updateChildIndices();\n        // Next, update dirty collection nodes.\n        for (let element of this.dirtyNodes)if (element instanceof $681cc3c98f569e39$export$dc064fe9e59310fd) {\n            if (element.isConnected && !element.isHidden) {\n                element.updateNode();\n                this.addNode(element);\n            }\n            if (element.node) this.dirtyNodes.delete(element);\n            element.isMutated = false;\n        } else this.dirtyNodes.delete(element);\n        // Finally, update the collection.\n        if (this.nextCollection) {\n            var _this_firstVisibleChild_node, _this_firstVisibleChild, _this_lastVisibleChild_node, _this_lastVisibleChild;\n            var _this_firstVisibleChild_node_key, _this_lastVisibleChild_node_key;\n            this.nextCollection.commit((_this_firstVisibleChild_node_key = (_this_firstVisibleChild = this.firstVisibleChild) === null || _this_firstVisibleChild === void 0 ? void 0 : (_this_firstVisibleChild_node = _this_firstVisibleChild.node) === null || _this_firstVisibleChild_node === void 0 ? void 0 : _this_firstVisibleChild_node.key) !== null && _this_firstVisibleChild_node_key !== void 0 ? _this_firstVisibleChild_node_key : null, (_this_lastVisibleChild_node_key = (_this_lastVisibleChild = this.lastVisibleChild) === null || _this_lastVisibleChild === void 0 ? void 0 : (_this_lastVisibleChild_node = _this_lastVisibleChild.node) === null || _this_lastVisibleChild_node === void 0 ? void 0 : _this_lastVisibleChild_node.key) !== null && _this_lastVisibleChild_node_key !== void 0 ? _this_lastVisibleChild_node_key : null, this.isSSR);\n            if (!this.isSSR) {\n                this.collection = this.nextCollection;\n                this.nextCollection = null;\n            }\n        }\n    }\n    queueUpdate() {\n        if (this.dirtyNodes.size === 0 || this.queuedRender) return;\n        // Only trigger subscriptions once during an update, when the first item changes.\n        // React's useSyncExternalStore will call getCollection immediately, to check whether the snapshot changed.\n        // If so, React will queue a render to happen after the current commit to our fake DOM finishes.\n        // We track whether getCollection is called in a subscription, and once it is called during render,\n        // we reset queuedRender back to false.\n        this.queuedRender = true;\n        this.inSubscription = true;\n        for (let fn of this.subscriptions)fn();\n        this.inSubscription = false;\n    }\n    subscribe(fn) {\n        this.subscriptions.add(fn);\n        return ()=>this.subscriptions.delete(fn);\n    }\n    resetAfterSSR() {\n        if (this.isSSR) {\n            this.isSSR = false;\n            this.firstChild = null;\n            this.lastChild = null;\n            this.nodeId = 0;\n        }\n    }\n    constructor(collection){\n        // @ts-ignore\n        super(null), this.nodeType = 11 // DOCUMENT_FRAGMENT_NODE\n        , this.ownerDocument = this, this.dirtyNodes = new Set(), this.isSSR = false, this.nodeId = 0, this.nodesByProps = new WeakMap(), this.nextCollection = null, this.subscriptions = new Set(), this.queuedRender = false, this.inSubscription = false;\n        this.collection = collection;\n        this.nextCollection = collection;\n    }\n}\n\n\nexport {$681cc3c98f569e39$export$410b0c854570d131 as BaseNode, $681cc3c98f569e39$export$dc064fe9e59310fd as ElementNode, $681cc3c98f569e39$export$b34a105447964f9f as Document};\n//# sourceMappingURL=Document.module.js.map\n","import {useMemo as $luMFQ$useMemo, cloneElement as $luMFQ$cloneElement} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $e948873055cbafe4$export$727c8fc270210f13(props) {\n    let { children: children, items: items, idScope: idScope, addIdAndValue: addIdAndValue, dependencies: dependencies = [] } = props;\n    // Invalidate the cache whenever the parent value changes.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    let cache = (0, $luMFQ$useMemo)(()=>new WeakMap(), dependencies);\n    return (0, $luMFQ$useMemo)(()=>{\n        if (items && typeof children === 'function') {\n            let res = [];\n            for (let item of items){\n                let rendered = cache.get(item);\n                if (!rendered) {\n                    rendered = children(item);\n                    var _rendered_props_id, _ref;\n                    // @ts-ignore\n                    let key = (_ref = (_rendered_props_id = rendered.props.id) !== null && _rendered_props_id !== void 0 ? _rendered_props_id : item.key) !== null && _ref !== void 0 ? _ref : item.id;\n                    if (key == null) throw new Error('Could not determine key for item');\n                    if (idScope != null) key = idScope + ':' + key;\n                    // Note: only works if wrapped Item passes through id...\n                    rendered = (0, $luMFQ$cloneElement)(rendered, addIdAndValue ? {\n                        key: key,\n                        id: key,\n                        value: item\n                    } : {\n                        key: key\n                    });\n                    cache.set(item, rendered);\n                }\n                res.push(rendered);\n            }\n            return res;\n        } else if (typeof children !== 'function') return children;\n    }, [\n        children,\n        items,\n        cache,\n        idScope,\n        addIdAndValue\n    ]);\n}\n\n\nexport {$e948873055cbafe4$export$727c8fc270210f13 as useCachedChildren};\n//# sourceMappingURL=useCachedChildren.module.js.map\n","import $8SdCi$react, {createContext as $8SdCi$createContext, useContext as $8SdCi$useContext, forwardRef as $8SdCi$forwardRef} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n// React doesn't understand the <template> element, which doesn't have children like a normal element.\n// It will throw an error during hydration when it expects the firstChild to contain content rendered\n// on the server, when in reality, the browser will have placed this inside the `content` document fragment.\n// This monkey patches the firstChild property for our special hidden template elements to work around this error.\n// See https://github.com/facebook/react/issues/19932\nif (typeof HTMLTemplateElement !== 'undefined') {\n    const getFirstChild = Object.getOwnPropertyDescriptor(Node.prototype, 'firstChild').get;\n    Object.defineProperty(HTMLTemplateElement.prototype, 'firstChild', {\n        configurable: true,\n        enumerable: true,\n        get: function() {\n            if (this.dataset.reactAriaHidden) return this.content.firstChild;\n            else return getFirstChild.call(this);\n        }\n    });\n}\nconst $f39a9eba43920ace$export$94b6d0abf7d33e8c = /*#__PURE__*/ (0, $8SdCi$createContext)(false);\nfunction $f39a9eba43920ace$export$8dc98ba7eadeaa56(props) {\n    let isHidden = (0, $8SdCi$useContext)($f39a9eba43920ace$export$94b6d0abf7d33e8c);\n    if (isHidden) // Don't hide again if we are already hidden.\n    return /*#__PURE__*/ (0, $8SdCi$react).createElement((0, $8SdCi$react).Fragment, null, props.children);\n    let children = /*#__PURE__*/ (0, $8SdCi$react).createElement($f39a9eba43920ace$export$94b6d0abf7d33e8c.Provider, {\n        value: true\n    }, props.children);\n    // In SSR, portals are not supported by React. Instead, always render into a <template>\n    // element, which the browser will never display to the user. In addition, the\n    // content is not part of the accessible DOM tree, so it won't affect ids or other accessibility attributes.\n    return /*#__PURE__*/ (0, $8SdCi$react).createElement(\"template\", {\n        \"data-react-aria-hidden\": true\n    }, children);\n}\nfunction $f39a9eba43920ace$export$86427a43e3e48ebb(fn) {\n    let Wrapper = (props, ref)=>{\n        let isHidden = (0, $8SdCi$useContext)($f39a9eba43920ace$export$94b6d0abf7d33e8c);\n        if (isHidden) return null;\n        return fn(props, ref);\n    };\n    // @ts-ignore - for react dev tools\n    Wrapper.displayName = fn.displayName || fn.name;\n    return (0, $8SdCi$forwardRef)(Wrapper);\n}\nfunction $f39a9eba43920ace$export$b5d7cc18bb8d2b59() {\n    return (0, $8SdCi$useContext)($f39a9eba43920ace$export$94b6d0abf7d33e8c);\n}\n\n\nexport {$f39a9eba43920ace$export$94b6d0abf7d33e8c as HiddenContext, $f39a9eba43920ace$export$8dc98ba7eadeaa56 as Hidden, $f39a9eba43920ace$export$86427a43e3e48ebb as createHideableComponent, $f39a9eba43920ace$export$b5d7cc18bb8d2b59 as useIsHidden};\n//# sourceMappingURL=Hidden.module.js.map\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useState = React.useState,\n  useEffect = React.useEffect,\n  useLayoutEffect = React.useLayoutEffect,\n  useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n  var value = getSnapshot(),\n    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n    inst = _useState[0].inst,\n    forceUpdate = _useState[1];\n  useLayoutEffect(\n    function () {\n      inst.value = value;\n      inst.getSnapshot = getSnapshot;\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n    },\n    [subscribe, value, getSnapshot]\n  );\n  useEffect(\n    function () {\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      return subscribe(function () {\n        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      });\n    },\n    [subscribe]\n  );\n  useDebugValue(value);\n  return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n  return getSnapshot();\n}\nvar shim =\n  \"undefined\" === typeof window ||\n  \"undefined\" === typeof window.document ||\n  \"undefined\" === typeof window.document.createElement\n    ? useSyncExternalStore$1\n    : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n  void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import {BaseCollection as $23b9f4fcf0fe224b$export$408d25a4e12db025, CollectionNode as $23b9f4fcf0fe224b$export$d68d59712b04d9d1} from \"./BaseCollection.mjs\";\nimport {Document as $681cc3c98f569e39$export$b34a105447964f9f} from \"./Document.mjs\";\nimport {useCachedChildren as $e948873055cbafe4$export$727c8fc270210f13} from \"./useCachedChildren.mjs\";\nimport {Hidden as $f39a9eba43920ace$export$8dc98ba7eadeaa56} from \"./Hidden.mjs\";\nimport {createPortal as $95feo$createPortal} from \"react-dom\";\nimport {FocusableContext as $95feo$FocusableContext} from \"@react-aria/interactions\";\nimport $95feo$react, {createContext as $95feo$createContext, useContext as $95feo$useContext, useRef as $95feo$useRef, useCallback as $95feo$useCallback, useState as $95feo$useState, forwardRef as $95feo$forwardRef, useMemo as $95feo$useMemo} from \"react\";\nimport {useIsSSR as $95feo$useIsSSR} from \"@react-aria/ssr\";\nimport {useSyncExternalStore as $95feo$useSyncExternalStore} from \"use-sync-external-store/shim/index.js\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\nconst $e1995378a142960e$var$ShallowRenderContext = /*#__PURE__*/ (0, $95feo$createContext)(false);\nconst $e1995378a142960e$var$CollectionDocumentContext = /*#__PURE__*/ (0, $95feo$createContext)(null);\nfunction $e1995378a142960e$export$bf788dd355e3a401(props) {\n    // If a document was provided above us, we're already in a hidden tree. Just render the content.\n    let doc = (0, $95feo$useContext)($e1995378a142960e$var$CollectionDocumentContext);\n    if (doc) // The React types prior to 18 did not allow returning ReactNode from components\n    // even though the actual implementation since React 16 did.\n    // We must return ReactElement so that TS does not complain that <CollectionBuilder>\n    // is not a valid JSX element with React 16 and 17 types.\n    // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/20544\n    return props.content;\n    // Otherwise, render a hidden copy of the children so that we can build the collection before constructing the state.\n    // This should always come before the real DOM content so we have built the collection by the time it renders during SSR.\n    // This is fine. CollectionDocumentContext never changes after mounting.\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    let { collection: collection, document: document } = $e1995378a142960e$var$useCollectionDocument(props.createCollection);\n    return /*#__PURE__*/ (0, $95feo$react).createElement((0, $95feo$react).Fragment, null, /*#__PURE__*/ (0, $95feo$react).createElement((0, $f39a9eba43920ace$export$8dc98ba7eadeaa56), null, /*#__PURE__*/ (0, $95feo$react).createElement($e1995378a142960e$var$CollectionDocumentContext.Provider, {\n        value: document\n    }, props.content)), /*#__PURE__*/ (0, $95feo$react).createElement($e1995378a142960e$var$CollectionInner, {\n        render: props.children,\n        collection: collection\n    }));\n}\nfunction $e1995378a142960e$var$CollectionInner({ collection: collection, render: render }) {\n    return render(collection);\n}\n// React 16 and 17 don't support useSyncExternalStore natively, and the shim provided by React does not support getServerSnapshot.\n// This wrapper uses the shim, but additionally calls getServerSnapshot during SSR (according to SSRProvider).\nfunction $e1995378a142960e$var$useSyncExternalStoreFallback(subscribe, getSnapshot, getServerSnapshot) {\n    let isSSR = (0, $95feo$useIsSSR)();\n    let isSSRRef = (0, $95feo$useRef)(isSSR);\n    // This is read immediately inside the wrapper, which also runs during render.\n    // We just need a ref to avoid invalidating the callback itself, which\n    // would cause React to re-run the callback more than necessary.\n    // eslint-disable-next-line rulesdir/pure-render\n    isSSRRef.current = isSSR;\n    let getSnapshotWrapper = (0, $95feo$useCallback)(()=>{\n        return isSSRRef.current ? getServerSnapshot() : getSnapshot();\n    }, [\n        getSnapshot,\n        getServerSnapshot\n    ]);\n    return (0, $95feo$useSyncExternalStore)(subscribe, getSnapshotWrapper);\n}\nconst $e1995378a142960e$var$useSyncExternalStore = typeof (0, $95feo$react)['useSyncExternalStore'] === 'function' ? (0, $95feo$react)['useSyncExternalStore'] : $e1995378a142960e$var$useSyncExternalStoreFallback;\nfunction $e1995378a142960e$var$useCollectionDocument(createCollection) {\n    // The document instance is mutable, and should never change between renders.\n    // useSyncExternalStore is used to subscribe to updates, which vends immutable Collection objects.\n    let [document] = (0, $95feo$useState)(()=>new (0, $681cc3c98f569e39$export$b34a105447964f9f)((createCollection === null || createCollection === void 0 ? void 0 : createCollection()) || new (0, $23b9f4fcf0fe224b$export$408d25a4e12db025)()));\n    let subscribe = (0, $95feo$useCallback)((fn)=>document.subscribe(fn), [\n        document\n    ]);\n    let getSnapshot = (0, $95feo$useCallback)(()=>{\n        let collection = document.getCollection();\n        if (document.isSSR) // After SSR is complete, reset the document to empty so it is ready for React to render the portal into.\n        // We do this _after_ getting the collection above so that the collection still has content in it from SSR\n        // during the current render, before React has finished the client render.\n        document.resetAfterSSR();\n        return collection;\n    }, [\n        document\n    ]);\n    let getServerSnapshot = (0, $95feo$useCallback)(()=>{\n        document.isSSR = true;\n        return document.getCollection();\n    }, [\n        document\n    ]);\n    let collection = $e1995378a142960e$var$useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n    return {\n        collection: collection,\n        document: document\n    };\n}\nconst $e1995378a142960e$var$SSRContext = /*#__PURE__*/ (0, $95feo$createContext)(null);\nfunction $e1995378a142960e$var$createCollectionNodeClass(type) {\n    var _class;\n    let NodeClass = (_class = class extends (0, $23b9f4fcf0fe224b$export$d68d59712b04d9d1) {\n    }, _class.type = type, _class);\n    return NodeClass;\n}\nfunction $e1995378a142960e$var$useSSRCollectionNode(CollectionNodeClass, props, ref, rendered, children, render) {\n    // To prevent breaking change, if CollectionNodeClass is a string, create a CollectionNodeClass using the string as the type\n    if (typeof CollectionNodeClass === 'string') CollectionNodeClass = $e1995378a142960e$var$createCollectionNodeClass(CollectionNodeClass);\n    // During SSR, portals are not supported, so the collection children will be wrapped in an SSRContext.\n    // Since SSR occurs only once, we assume that the elements are rendered in order and never re-render.\n    // Therefore we can create elements in our collection document during render so that they are in the\n    // collection by the time we need to use the collection to render to the real DOM.\n    // After hydration, we switch to client rendering using the portal.\n    let itemRef = (0, $95feo$useCallback)((element)=>{\n        element === null || element === void 0 ? void 0 : element.setProps(props, ref, CollectionNodeClass, rendered, render);\n    }, [\n        props,\n        ref,\n        rendered,\n        render,\n        CollectionNodeClass\n    ]);\n    let parentNode = (0, $95feo$useContext)($e1995378a142960e$var$SSRContext);\n    if (parentNode) {\n        // Guard against double rendering in strict mode.\n        let element = parentNode.ownerDocument.nodesByProps.get(props);\n        if (!element) {\n            element = parentNode.ownerDocument.createElement(CollectionNodeClass.type);\n            element.setProps(props, ref, CollectionNodeClass, rendered, render);\n            parentNode.appendChild(element);\n            parentNode.ownerDocument.updateCollection();\n            parentNode.ownerDocument.nodesByProps.set(props, element);\n        }\n        return children ? /*#__PURE__*/ (0, $95feo$react).createElement($e1995378a142960e$var$SSRContext.Provider, {\n            value: element\n        }, children) : null;\n    }\n    // @ts-ignore\n    return /*#__PURE__*/ (0, $95feo$react).createElement(CollectionNodeClass.type, {\n        ref: itemRef\n    }, children);\n}\nfunction $e1995378a142960e$export$18af5c7a9e9b3664(CollectionNodeClass, render) {\n    let Component = ({ node: node })=>render(node.props, node.props.ref, node);\n    let Result = (0, $95feo$forwardRef)((props, ref)=>{\n        let focusableProps = (0, $95feo$useContext)((0, $95feo$FocusableContext));\n        let isShallow = (0, $95feo$useContext)($e1995378a142960e$var$ShallowRenderContext);\n        if (!isShallow) {\n            if (render.length >= 3) throw new Error(render.name + ' cannot be rendered outside a collection.');\n            return render(props, ref);\n        }\n        return $e1995378a142960e$var$useSSRCollectionNode(CollectionNodeClass, props, ref, 'children' in props ? props.children : null, null, (node)=>// Forward FocusableContext to real DOM tree so tooltips work.\n            /*#__PURE__*/ (0, $95feo$react).createElement((0, $95feo$FocusableContext).Provider, {\n                value: focusableProps\n            }, /*#__PURE__*/ (0, $95feo$react).createElement(Component, {\n                node: node\n            })));\n    });\n    // @ts-ignore\n    Result.displayName = render.name;\n    return Result;\n}\nfunction $e1995378a142960e$export$e953bb1cd0f19726(CollectionNodeClass, render, useChildren = $e1995378a142960e$var$useCollectionChildren) {\n    let Component = ({ node: node })=>render(node.props, node.props.ref, node);\n    let Result = (0, $95feo$forwardRef)((props, ref)=>{\n        let children = useChildren(props);\n        var _useSSRCollectionNode;\n        return (_useSSRCollectionNode = $e1995378a142960e$var$useSSRCollectionNode(CollectionNodeClass, props, ref, null, children, (node)=>/*#__PURE__*/ (0, $95feo$react).createElement(Component, {\n                node: node\n            }))) !== null && _useSSRCollectionNode !== void 0 ? _useSSRCollectionNode : /*#__PURE__*/ (0, $95feo$react).createElement((0, $95feo$react).Fragment, null);\n    });\n    // @ts-ignore\n    Result.displayName = render.name;\n    return Result;\n}\nfunction $e1995378a142960e$var$useCollectionChildren(options) {\n    return (0, $e948873055cbafe4$export$727c8fc270210f13)({\n        ...options,\n        addIdAndValue: true\n    });\n}\nconst $e1995378a142960e$var$CollectionContext = /*#__PURE__*/ (0, $95feo$createContext)(null);\nfunction $e1995378a142960e$export$fb8073518f34e6ec(props) {\n    let ctx = (0, $95feo$useContext)($e1995378a142960e$var$CollectionContext);\n    let dependencies = ((ctx === null || ctx === void 0 ? void 0 : ctx.dependencies) || []).concat(props.dependencies);\n    var _props_idScope;\n    let idScope = (_props_idScope = props.idScope) !== null && _props_idScope !== void 0 ? _props_idScope : ctx === null || ctx === void 0 ? void 0 : ctx.idScope;\n    let children = $e1995378a142960e$var$useCollectionChildren({\n        ...props,\n        idScope: idScope,\n        dependencies: dependencies\n    });\n    let doc = (0, $95feo$useContext)($e1995378a142960e$var$CollectionDocumentContext);\n    if (doc) children = /*#__PURE__*/ (0, $95feo$react).createElement($e1995378a142960e$var$CollectionRoot, null, children);\n    // Propagate dependencies and idScope to child collections.\n    ctx = (0, $95feo$useMemo)(()=>({\n            dependencies: dependencies,\n            idScope: idScope\n        }), [\n        idScope,\n        ...dependencies\n    ]);\n    return /*#__PURE__*/ (0, $95feo$react).createElement($e1995378a142960e$var$CollectionContext.Provider, {\n        value: ctx\n    }, children);\n}\nfunction $e1995378a142960e$var$CollectionRoot({ children: children }) {\n    let doc = (0, $95feo$useContext)($e1995378a142960e$var$CollectionDocumentContext);\n    let wrappedChildren = (0, $95feo$useMemo)(()=>/*#__PURE__*/ (0, $95feo$react).createElement($e1995378a142960e$var$CollectionDocumentContext.Provider, {\n            value: null\n        }, /*#__PURE__*/ (0, $95feo$react).createElement($e1995378a142960e$var$ShallowRenderContext.Provider, {\n            value: true\n        }, children)), [\n        children\n    ]);\n    // During SSR, we render the content directly, and append nodes to the document during render.\n    // The collection children return null so that nothing is actually rendered into the HTML.\n    return (0, $95feo$useIsSSR)() ? /*#__PURE__*/ (0, $95feo$react).createElement($e1995378a142960e$var$SSRContext.Provider, {\n        value: doc\n    }, wrappedChildren) : /*#__PURE__*/ (0, $95feo$createPortal)(wrappedChildren, doc);\n}\n\n\nexport {$e1995378a142960e$export$bf788dd355e3a401 as CollectionBuilder, $e1995378a142960e$export$18af5c7a9e9b3664 as createLeafComponent, $e1995378a142960e$export$e953bb1cd0f19726 as createBranchComponent, $e1995378a142960e$export$fb8073518f34e6ec as Collection};\n//# sourceMappingURL=CollectionBuilder.module.js.map\n","import {createBranchComponent as $18I52$createBranchComponent, useCachedChildren as $18I52$useCachedChildren} from \"@react-aria/collections\";\nimport $18I52$react, {createContext as $18I52$createContext, useContext as $18I52$useContext, isValidElement as $18I52$isValidElement, cloneElement as $18I52$cloneElement, useMemo as $18I52$useMemo} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $7135fc7d473fd974$export$d40e14dec8b060a8 = /*#__PURE__*/ (0, $18I52$createContext)(null);\nconst $7135fc7d473fd974$export$6e2c8f0811a474ce = /*#__PURE__*/ (0, $18I52$createBranchComponent)('section', (props, ref, section)=>{\n    let { name: name, render: render } = (0, $18I52$useContext)($7135fc7d473fd974$export$d40e14dec8b060a8);\n    if (process.env.NODE_ENV !== 'production') console.warn(`<Section> is deprecated. Please use <${name}> instead.`);\n    return render(props, ref, section, 'react-aria-Section');\n});\nconst $7135fc7d473fd974$export$a164736487e3f0ae = {\n    CollectionRoot ({ collection: collection, renderDropIndicator: renderDropIndicator }) {\n        return $7135fc7d473fd974$var$useCollectionRender(collection, null, renderDropIndicator);\n    },\n    CollectionBranch ({ collection: collection, parent: parent, renderDropIndicator: renderDropIndicator }) {\n        return $7135fc7d473fd974$var$useCollectionRender(collection, parent, renderDropIndicator);\n    }\n};\nfunction $7135fc7d473fd974$var$useCollectionRender(collection, parent, renderDropIndicator) {\n    return (0, $18I52$useCachedChildren)({\n        items: parent ? collection.getChildren(parent.key) : collection,\n        dependencies: [\n            renderDropIndicator\n        ],\n        children (node) {\n            let rendered = node.render(node);\n            if (!renderDropIndicator || node.type !== 'item') return rendered;\n            return /*#__PURE__*/ (0, $18I52$react).createElement((0, $18I52$react).Fragment, null, renderDropIndicator({\n                type: 'item',\n                key: node.key,\n                dropPosition: 'before'\n            }), rendered, $7135fc7d473fd974$export$2dbbd341daed716d(collection, node, renderDropIndicator));\n        }\n    });\n}\nfunction $7135fc7d473fd974$export$2dbbd341daed716d(collection, node, renderDropIndicator) {\n    let key = node.key;\n    let keyAfter = collection.getKeyAfter(key);\n    let nextItemInFlattenedCollection = keyAfter != null ? collection.getItem(keyAfter) : null;\n    while(nextItemInFlattenedCollection != null && nextItemInFlattenedCollection.type !== 'item'){\n        keyAfter = collection.getKeyAfter(nextItemInFlattenedCollection.key);\n        nextItemInFlattenedCollection = keyAfter != null ? collection.getItem(keyAfter) : null;\n    }\n    let nextItemInSameLevel = node.nextKey != null ? collection.getItem(node.nextKey) : null;\n    while(nextItemInSameLevel != null && nextItemInSameLevel.type !== 'item')nextItemInSameLevel = nextItemInSameLevel.nextKey != null ? collection.getItem(nextItemInSameLevel.nextKey) : null;\n    // Render one or more \"after\" drop indicators when the next item in the flattened collection\n    // has a smaller level, is not an item, or there are no more items in the collection.\n    // Otherwise, the \"after\" position is equivalent to the next item's \"before\" position.\n    let afterIndicators = [];\n    if (nextItemInSameLevel == null) {\n        let current = node;\n        while((current === null || current === void 0 ? void 0 : current.type) === 'item' && (!nextItemInFlattenedCollection || current.parentKey !== nextItemInFlattenedCollection.parentKey && nextItemInFlattenedCollection.level < current.level)){\n            let indicator = renderDropIndicator({\n                type: 'item',\n                key: current.key,\n                dropPosition: 'after'\n            });\n            if (/*#__PURE__*/ (0, $18I52$isValidElement)(indicator)) afterIndicators.push(/*#__PURE__*/ (0, $18I52$cloneElement)(indicator, {\n                key: `${current.key}-after`\n            }));\n            current = current.parentKey != null ? collection.getItem(current.parentKey) : null;\n        }\n    }\n    return afterIndicators;\n}\nconst $7135fc7d473fd974$export$4feb769f8ddf26c5 = /*#__PURE__*/ (0, $18I52$createContext)($7135fc7d473fd974$export$a164736487e3f0ae);\nfunction $7135fc7d473fd974$export$90e00781bc59d8f9(focusedKey) {\n    return (0, $18I52$useMemo)(()=>focusedKey != null ? new Set([\n            focusedKey\n        ]) : null, [\n        focusedKey\n    ]);\n}\n\n\nexport {$7135fc7d473fd974$export$d40e14dec8b060a8 as SectionContext, $7135fc7d473fd974$export$6e2c8f0811a474ce as Section, $7135fc7d473fd974$export$a164736487e3f0ae as DefaultCollectionRenderer, $7135fc7d473fd974$export$2dbbd341daed716d as renderAfterDropIndicators, $7135fc7d473fd974$export$4feb769f8ddf26c5 as CollectionRendererContext, $7135fc7d473fd974$export$90e00781bc59d8f9 as usePersistedKeys};\n//# sourceMappingURL=Collection.module.js.map\n","import {mergeProps as $bwqiF$mergeProps, filterDOMProps as $bwqiF$filterDOMProps} from \"@react-aria/utils\";\nimport {usePress as $bwqiF$usePress, useFocusable as $bwqiF$useFocusable} from \"@react-aria/interactions\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $701a24aa0da5b062$export$ea18c227d4417cc3(props, ref) {\n    let { elementType: elementType = 'button', isDisabled: isDisabled, onPress: onPress, onPressStart: onPressStart, onPressEnd: onPressEnd, onPressUp: onPressUp, onPressChange: onPressChange, preventFocusOnPress: preventFocusOnPress, allowFocusWhenDisabled: // @ts-ignore - undocumented\n    allowFocusWhenDisabled, onClick: onClick, href: href, target: target, rel: rel, type: type = 'button' } = props;\n    let additionalProps;\n    if (elementType === 'button') additionalProps = {\n        type: type,\n        disabled: isDisabled,\n        form: props.form,\n        formAction: props.formAction,\n        formEncType: props.formEncType,\n        formMethod: props.formMethod,\n        formNoValidate: props.formNoValidate,\n        formTarget: props.formTarget,\n        name: props.name,\n        value: props.value\n    };\n    else additionalProps = {\n        role: 'button',\n        href: elementType === 'a' && !isDisabled ? href : undefined,\n        target: elementType === 'a' ? target : undefined,\n        type: elementType === 'input' ? type : undefined,\n        disabled: elementType === 'input' ? isDisabled : undefined,\n        'aria-disabled': !isDisabled || elementType === 'input' ? undefined : isDisabled,\n        rel: elementType === 'a' ? rel : undefined\n    };\n    let { pressProps: pressProps, isPressed: isPressed } = (0, $bwqiF$usePress)({\n        onPressStart: onPressStart,\n        onPressEnd: onPressEnd,\n        onPressChange: onPressChange,\n        onPress: onPress,\n        onPressUp: onPressUp,\n        onClick: onClick,\n        isDisabled: isDisabled,\n        preventFocusOnPress: preventFocusOnPress,\n        ref: ref\n    });\n    let { focusableProps: focusableProps } = (0, $bwqiF$useFocusable)(props, ref);\n    if (allowFocusWhenDisabled) focusableProps.tabIndex = isDisabled ? -1 : focusableProps.tabIndex;\n    let buttonProps = (0, $bwqiF$mergeProps)(focusableProps, pressProps, (0, $bwqiF$filterDOMProps)(props, {\n        labelable: true\n    }));\n    return {\n        isPressed: isPressed,\n        buttonProps: (0, $bwqiF$mergeProps)(additionalProps, buttonProps, {\n            'aria-haspopup': props['aria-haspopup'],\n            'aria-expanded': props['aria-expanded'],\n            'aria-controls': props['aria-controls'],\n            'aria-pressed': props['aria-pressed'],\n            'aria-current': props['aria-current'],\n            'aria-disabled': props['aria-disabled']\n        })\n    };\n}\n\n\nexport {$701a24aa0da5b062$export$ea18c227d4417cc3 as useButton};\n//# sourceMappingURL=useButton.module.js.map\n","var $4adc85d9bf5b9eed$exports = {};\n$4adc85d9bf5b9eed$exports = {\n    \"Empty\": `Empty`\n};\n\n\nexport {$4adc85d9bf5b9eed$exports as default};\n//# sourceMappingURL=en-US.module.js.map\n","import $894vb$arAEmodulejs from \"./ar-AE.mjs\";\nimport $894vb$bgBGmodulejs from \"./bg-BG.mjs\";\nimport $894vb$csCZmodulejs from \"./cs-CZ.mjs\";\nimport $894vb$daDKmodulejs from \"./da-DK.mjs\";\nimport $894vb$deDEmodulejs from \"./de-DE.mjs\";\nimport $894vb$elGRmodulejs from \"./el-GR.mjs\";\nimport $894vb$enUSmodulejs from \"./en-US.mjs\";\nimport $894vb$esESmodulejs from \"./es-ES.mjs\";\nimport $894vb$etEEmodulejs from \"./et-EE.mjs\";\nimport $894vb$fiFImodulejs from \"./fi-FI.mjs\";\nimport $894vb$frFRmodulejs from \"./fr-FR.mjs\";\nimport $894vb$heILmodulejs from \"./he-IL.mjs\";\nimport $894vb$hrHRmodulejs from \"./hr-HR.mjs\";\nimport $894vb$huHUmodulejs from \"./hu-HU.mjs\";\nimport $894vb$itITmodulejs from \"./it-IT.mjs\";\nimport $894vb$jaJPmodulejs from \"./ja-JP.mjs\";\nimport $894vb$koKRmodulejs from \"./ko-KR.mjs\";\nimport $894vb$ltLTmodulejs from \"./lt-LT.mjs\";\nimport $894vb$lvLVmodulejs from \"./lv-LV.mjs\";\nimport $894vb$nbNOmodulejs from \"./nb-NO.mjs\";\nimport $894vb$nlNLmodulejs from \"./nl-NL.mjs\";\nimport $894vb$plPLmodulejs from \"./pl-PL.mjs\";\nimport $894vb$ptBRmodulejs from \"./pt-BR.mjs\";\nimport $894vb$ptPTmodulejs from \"./pt-PT.mjs\";\nimport $894vb$roROmodulejs from \"./ro-RO.mjs\";\nimport $894vb$ruRUmodulejs from \"./ru-RU.mjs\";\nimport $894vb$skSKmodulejs from \"./sk-SK.mjs\";\nimport $894vb$slSImodulejs from \"./sl-SI.mjs\";\nimport $894vb$srSPmodulejs from \"./sr-SP.mjs\";\nimport $894vb$svSEmodulejs from \"./sv-SE.mjs\";\nimport $894vb$trTRmodulejs from \"./tr-TR.mjs\";\nimport $894vb$ukUAmodulejs from \"./uk-UA.mjs\";\nimport $894vb$zhCNmodulejs from \"./zh-CN.mjs\";\nimport $894vb$zhTWmodulejs from \"./zh-TW.mjs\";\n\nvar $a99895ee3dc79e61$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$a99895ee3dc79e61$exports = {\n    \"ar-AE\": $894vb$arAEmodulejs,\n    \"bg-BG\": $894vb$bgBGmodulejs,\n    \"cs-CZ\": $894vb$csCZmodulejs,\n    \"da-DK\": $894vb$daDKmodulejs,\n    \"de-DE\": $894vb$deDEmodulejs,\n    \"el-GR\": $894vb$elGRmodulejs,\n    \"en-US\": $894vb$enUSmodulejs,\n    \"es-ES\": $894vb$esESmodulejs,\n    \"et-EE\": $894vb$etEEmodulejs,\n    \"fi-FI\": $894vb$fiFImodulejs,\n    \"fr-FR\": $894vb$frFRmodulejs,\n    \"he-IL\": $894vb$heILmodulejs,\n    \"hr-HR\": $894vb$hrHRmodulejs,\n    \"hu-HU\": $894vb$huHUmodulejs,\n    \"it-IT\": $894vb$itITmodulejs,\n    \"ja-JP\": $894vb$jaJPmodulejs,\n    \"ko-KR\": $894vb$koKRmodulejs,\n    \"lt-LT\": $894vb$ltLTmodulejs,\n    \"lv-LV\": $894vb$lvLVmodulejs,\n    \"nb-NO\": $894vb$nbNOmodulejs,\n    \"nl-NL\": $894vb$nlNLmodulejs,\n    \"pl-PL\": $894vb$plPLmodulejs,\n    \"pt-BR\": $894vb$ptBRmodulejs,\n    \"pt-PT\": $894vb$ptPTmodulejs,\n    \"ro-RO\": $894vb$roROmodulejs,\n    \"ru-RU\": $894vb$ruRUmodulejs,\n    \"sk-SK\": $894vb$skSKmodulejs,\n    \"sl-SI\": $894vb$slSImodulejs,\n    \"sr-SP\": $894vb$srSPmodulejs,\n    \"sv-SE\": $894vb$svSEmodulejs,\n    \"tr-TR\": $894vb$trTRmodulejs,\n    \"uk-UA\": $894vb$ukUAmodulejs,\n    \"zh-CN\": $894vb$zhCNmodulejs,\n    \"zh-TW\": $894vb$zhTWmodulejs\n};\n\n\nexport {$a99895ee3dc79e61$exports as default};\n//# sourceMappingURL=intlStrings.module.js.map\n","import $5rwhf$intlStringsmodulejs from \"./intlStrings.mjs\";\nimport {clearAnnouncer as $5rwhf$clearAnnouncer, announce as $5rwhf$announce} from \"@react-aria/live-announcer\";\nimport {useRef as $5rwhf$useRef, useCallback as $5rwhf$useCallback, useEffect as $5rwhf$useEffect, useState as $5rwhf$useState} from \"react\";\nimport {useEffectEvent as $5rwhf$useEffectEvent, useGlobalListeners as $5rwhf$useGlobalListeners} from \"@react-aria/utils\";\nimport {useLocalizedStringFormatter as $5rwhf$useLocalizedStringFormatter} from \"@react-aria/i18n\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $d2e8511e6f209edf$export$e908e06f4b8e3402(props) {\n    const _async = (0, $5rwhf$useRef)(undefined);\n    let { value: value, textValue: textValue, minValue: minValue, maxValue: maxValue, isDisabled: isDisabled, isReadOnly: isReadOnly, isRequired: isRequired, onIncrement: onIncrement, onIncrementPage: onIncrementPage, onDecrement: onDecrement, onDecrementPage: onDecrementPage, onDecrementToMin: onDecrementToMin, onIncrementToMax: onIncrementToMax } = props;\n    const stringFormatter = (0, $5rwhf$useLocalizedStringFormatter)((0, ($parcel$interopDefault($5rwhf$intlStringsmodulejs))), '@react-aria/spinbutton');\n    let isSpinning = (0, $5rwhf$useRef)(false);\n    const clearAsync = (0, $5rwhf$useCallback)(()=>{\n        clearTimeout(_async.current);\n        isSpinning.current = false;\n    }, []);\n    const clearAsyncEvent = (0, $5rwhf$useEffectEvent)(()=>{\n        clearAsync();\n    });\n    (0, $5rwhf$useEffect)(()=>{\n        return ()=>clearAsyncEvent();\n    }, []);\n    let onKeyDown = (e)=>{\n        if (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey || isReadOnly || e.nativeEvent.isComposing) return;\n        switch(e.key){\n            case 'PageUp':\n                if (onIncrementPage) {\n                    e.preventDefault();\n                    onIncrementPage === null || onIncrementPage === void 0 ? void 0 : onIncrementPage();\n                    break;\n                }\n            // fallthrough!\n            case 'ArrowUp':\n            case 'Up':\n                if (onIncrement) {\n                    e.preventDefault();\n                    onIncrement === null || onIncrement === void 0 ? void 0 : onIncrement();\n                }\n                break;\n            case 'PageDown':\n                if (onDecrementPage) {\n                    e.preventDefault();\n                    onDecrementPage === null || onDecrementPage === void 0 ? void 0 : onDecrementPage();\n                    break;\n                }\n            // fallthrough\n            case 'ArrowDown':\n            case 'Down':\n                if (onDecrement) {\n                    e.preventDefault();\n                    onDecrement === null || onDecrement === void 0 ? void 0 : onDecrement();\n                }\n                break;\n            case 'Home':\n                if (onDecrementToMin) {\n                    e.preventDefault();\n                    onDecrementToMin === null || onDecrementToMin === void 0 ? void 0 : onDecrementToMin();\n                }\n                break;\n            case 'End':\n                if (onIncrementToMax) {\n                    e.preventDefault();\n                    onIncrementToMax === null || onIncrementToMax === void 0 ? void 0 : onIncrementToMax();\n                }\n                break;\n        }\n    };\n    let isFocused = (0, $5rwhf$useRef)(false);\n    let onFocus = ()=>{\n        isFocused.current = true;\n    };\n    let onBlur = ()=>{\n        isFocused.current = false;\n    };\n    // Replace Unicode hyphen-minus (U+002D) with minus sign (U+2212).\n    // This ensures that macOS VoiceOver announces it as \"minus\" even with other characters between the minus sign\n    // and the number (e.g. currency symbol). Otherwise it announces nothing because it assumes the character is a hyphen.\n    // In addition, replace the empty string with the word \"Empty\" so that iOS VoiceOver does not read \"50%\" for an empty field.\n    let ariaTextValue = textValue === '' ? stringFormatter.format('Empty') : (textValue || `${value}`).replace('-', '\\u2212');\n    (0, $5rwhf$useEffect)(()=>{\n        if (isFocused.current) {\n            (0, $5rwhf$clearAnnouncer)('assertive');\n            (0, $5rwhf$announce)(ariaTextValue, 'assertive');\n        }\n    }, [\n        ariaTextValue\n    ]);\n    // For touch users, if they move their finger like they're scrolling, we don't want to trigger a spin.\n    let onPointerCancel = (0, $5rwhf$useCallback)(()=>{\n        clearAsync();\n    }, [\n        clearAsync\n    ]);\n    const onIncrementPressStart = (0, $5rwhf$useEffectEvent)((initialStepDelay)=>{\n        clearAsyncEvent();\n        isSpinning.current = true;\n        onIncrement === null || onIncrement === void 0 ? void 0 : onIncrement();\n        // Start spinning after initial delay\n        _async.current = window.setTimeout(()=>{\n            if (maxValue === undefined || isNaN(maxValue) || value === undefined || isNaN(value) || value < maxValue) onIncrementPressStart(60);\n        }, initialStepDelay);\n    });\n    const onDecrementPressStart = (0, $5rwhf$useEffectEvent)((initialStepDelay)=>{\n        clearAsyncEvent();\n        isSpinning.current = true;\n        onDecrement === null || onDecrement === void 0 ? void 0 : onDecrement();\n        // Start spinning after initial delay\n        _async.current = window.setTimeout(()=>{\n            if (minValue === undefined || isNaN(minValue) || value === undefined || isNaN(value) || value > minValue) onDecrementPressStart(60);\n        }, initialStepDelay);\n    });\n    let cancelContextMenu = (e)=>{\n        e.preventDefault();\n    };\n    let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $5rwhf$useGlobalListeners)();\n    // Tracks in touch if the press end event was preceded by a press up.\n    // If it wasn't, then we know the finger left the button while still in contact with the screen.\n    // This means that the user is trying to scroll or interact in some way that shouldn't trigger\n    // an increment or decrement.\n    let isUp = (0, $5rwhf$useRef)(false);\n    let [isIncrementPressed, setIsIncrementPressed] = (0, $5rwhf$useState)(null);\n    (0, $5rwhf$useEffect)(()=>{\n        if (isIncrementPressed === 'touch') onIncrementPressStart(60);\n        else if (isIncrementPressed) onIncrementPressStart(400);\n    }, [\n        isIncrementPressed\n    ]);\n    let [isDecrementPressed, setIsDecrementPressed] = (0, $5rwhf$useState)(null);\n    (0, $5rwhf$useEffect)(()=>{\n        if (isDecrementPressed === 'touch') onDecrementPressStart(60);\n        else if (isDecrementPressed) onDecrementPressStart(400);\n    }, [\n        isDecrementPressed\n    ]);\n    return {\n        spinButtonProps: {\n            role: 'spinbutton',\n            'aria-valuenow': value !== undefined && !isNaN(value) ? value : undefined,\n            'aria-valuetext': ariaTextValue,\n            'aria-valuemin': minValue,\n            'aria-valuemax': maxValue,\n            'aria-disabled': isDisabled || undefined,\n            'aria-readonly': isReadOnly || undefined,\n            'aria-required': isRequired || undefined,\n            onKeyDown: onKeyDown,\n            onFocus: onFocus,\n            onBlur: onBlur\n        },\n        incrementButtonProps: {\n            onPressStart: (e)=>{\n                if (e.pointerType !== 'touch') setIsIncrementPressed('mouse');\n                else {\n                    if (_async.current) clearAsync();\n                    addGlobalListener(window, 'pointercancel', onPointerCancel, {\n                        capture: true\n                    });\n                    isUp.current = false;\n                    // For touch users, don't trigger a decrement on press start, we'll wait for the press end to trigger it if\n                    // the control isn't spinning.\n                    _async.current = window.setTimeout(()=>{\n                        setIsIncrementPressed('touch');\n                    }, 600);\n                }\n                addGlobalListener(window, 'contextmenu', cancelContextMenu);\n            },\n            onPressUp: (e)=>{\n                if (e.pointerType === 'touch') isUp.current = true;\n                clearAsync();\n                removeAllGlobalListeners();\n                setIsIncrementPressed(null);\n            },\n            onPressEnd: (e)=>{\n                if (e.pointerType === 'touch') {\n                    if (!isSpinning.current && isUp.current) onIncrement === null || onIncrement === void 0 ? void 0 : onIncrement();\n                }\n                clearAsync();\n                isUp.current = false;\n                setIsIncrementPressed(null);\n            },\n            onFocus: onFocus,\n            onBlur: onBlur\n        },\n        decrementButtonProps: {\n            onPressStart: (e)=>{\n                if (e.pointerType !== 'touch') setIsDecrementPressed('mouse');\n                else {\n                    if (_async.current) clearAsync();\n                    addGlobalListener(window, 'pointercancel', onPointerCancel, {\n                        capture: true\n                    });\n                    isUp.current = false;\n                    // For touch users, don't trigger a decrement on press start, we'll wait for the press end to trigger it if\n                    // the control isn't spinning.\n                    _async.current = window.setTimeout(()=>{\n                        setIsDecrementPressed('touch');\n                    }, 600);\n                }\n            },\n            onPressUp: (e)=>{\n                if (e.pointerType === 'touch') isUp.current = true;\n                clearAsync();\n                removeAllGlobalListeners();\n                setIsDecrementPressed(null);\n            },\n            onPressEnd: (e)=>{\n                if (e.pointerType === 'touch') {\n                    if (!isSpinning.current && isUp.current) onDecrement === null || onDecrement === void 0 ? void 0 : onDecrement();\n                }\n                clearAsync();\n                isUp.current = false;\n                setIsDecrementPressed(null);\n            },\n            onFocus: onFocus,\n            onBlur: onBlur\n        }\n    };\n}\n\n\nexport {$d2e8511e6f209edf$export$e908e06f4b8e3402 as useSpinButton};\n//# sourceMappingURL=useSpinButton.module.js.map\n","var $1c2b297f7e2cf474$exports = {};\n$1c2b297f7e2cf474$exports = {\n    \"era\": `era`,\n    \"year\": `year`,\n    \"month\": `month`,\n    \"day\": `day`,\n    \"hour\": `hour`,\n    \"minute\": `minute`,\n    \"second\": `second`,\n    \"dayPeriod\": `AM/PM`,\n    \"calendar\": `Calendar`,\n    \"startDate\": `Start Date`,\n    \"endDate\": `End Date`,\n    \"weekday\": `day of the week`,\n    \"timeZoneName\": `time zone`,\n    \"selectedDateDescription\": (args)=>`Selected Date: ${args.date}`,\n    \"selectedRangeDescription\": (args)=>`Selected Range: ${args.startDate} to ${args.endDate}`,\n    \"selectedTimeDescription\": (args)=>`Selected Time: ${args.time}`\n};\n\n\nexport {$1c2b297f7e2cf474$exports as default};\n//# sourceMappingURL=en-US.module.js.map\n","import $4YhVz$arAEmodulejs from \"./ar-AE.mjs\";\nimport $4YhVz$bgBGmodulejs from \"./bg-BG.mjs\";\nimport $4YhVz$csCZmodulejs from \"./cs-CZ.mjs\";\nimport $4YhVz$daDKmodulejs from \"./da-DK.mjs\";\nimport $4YhVz$deDEmodulejs from \"./de-DE.mjs\";\nimport $4YhVz$elGRmodulejs from \"./el-GR.mjs\";\nimport $4YhVz$enUSmodulejs from \"./en-US.mjs\";\nimport $4YhVz$esESmodulejs from \"./es-ES.mjs\";\nimport $4YhVz$etEEmodulejs from \"./et-EE.mjs\";\nimport $4YhVz$fiFImodulejs from \"./fi-FI.mjs\";\nimport $4YhVz$frFRmodulejs from \"./fr-FR.mjs\";\nimport $4YhVz$heILmodulejs from \"./he-IL.mjs\";\nimport $4YhVz$hrHRmodulejs from \"./hr-HR.mjs\";\nimport $4YhVz$huHUmodulejs from \"./hu-HU.mjs\";\nimport $4YhVz$itITmodulejs from \"./it-IT.mjs\";\nimport $4YhVz$jaJPmodulejs from \"./ja-JP.mjs\";\nimport $4YhVz$koKRmodulejs from \"./ko-KR.mjs\";\nimport $4YhVz$ltLTmodulejs from \"./lt-LT.mjs\";\nimport $4YhVz$lvLVmodulejs from \"./lv-LV.mjs\";\nimport $4YhVz$nbNOmodulejs from \"./nb-NO.mjs\";\nimport $4YhVz$nlNLmodulejs from \"./nl-NL.mjs\";\nimport $4YhVz$plPLmodulejs from \"./pl-PL.mjs\";\nimport $4YhVz$ptBRmodulejs from \"./pt-BR.mjs\";\nimport $4YhVz$ptPTmodulejs from \"./pt-PT.mjs\";\nimport $4YhVz$roROmodulejs from \"./ro-RO.mjs\";\nimport $4YhVz$ruRUmodulejs from \"./ru-RU.mjs\";\nimport $4YhVz$skSKmodulejs from \"./sk-SK.mjs\";\nimport $4YhVz$slSImodulejs from \"./sl-SI.mjs\";\nimport $4YhVz$srSPmodulejs from \"./sr-SP.mjs\";\nimport $4YhVz$svSEmodulejs from \"./sv-SE.mjs\";\nimport $4YhVz$trTRmodulejs from \"./tr-TR.mjs\";\nimport $4YhVz$ukUAmodulejs from \"./uk-UA.mjs\";\nimport $4YhVz$zhCNmodulejs from \"./zh-CN.mjs\";\nimport $4YhVz$zhTWmodulejs from \"./zh-TW.mjs\";\n\nvar $dfb4eba373ed9493$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$dfb4eba373ed9493$exports = {\n    \"ar-AE\": $4YhVz$arAEmodulejs,\n    \"bg-BG\": $4YhVz$bgBGmodulejs,\n    \"cs-CZ\": $4YhVz$csCZmodulejs,\n    \"da-DK\": $4YhVz$daDKmodulejs,\n    \"de-DE\": $4YhVz$deDEmodulejs,\n    \"el-GR\": $4YhVz$elGRmodulejs,\n    \"en-US\": $4YhVz$enUSmodulejs,\n    \"es-ES\": $4YhVz$esESmodulejs,\n    \"et-EE\": $4YhVz$etEEmodulejs,\n    \"fi-FI\": $4YhVz$fiFImodulejs,\n    \"fr-FR\": $4YhVz$frFRmodulejs,\n    \"he-IL\": $4YhVz$heILmodulejs,\n    \"hr-HR\": $4YhVz$hrHRmodulejs,\n    \"hu-HU\": $4YhVz$huHUmodulejs,\n    \"it-IT\": $4YhVz$itITmodulejs,\n    \"ja-JP\": $4YhVz$jaJPmodulejs,\n    \"ko-KR\": $4YhVz$koKRmodulejs,\n    \"lt-LT\": $4YhVz$ltLTmodulejs,\n    \"lv-LV\": $4YhVz$lvLVmodulejs,\n    \"nb-NO\": $4YhVz$nbNOmodulejs,\n    \"nl-NL\": $4YhVz$nlNLmodulejs,\n    \"pl-PL\": $4YhVz$plPLmodulejs,\n    \"pt-BR\": $4YhVz$ptBRmodulejs,\n    \"pt-PT\": $4YhVz$ptPTmodulejs,\n    \"ro-RO\": $4YhVz$roROmodulejs,\n    \"ru-RU\": $4YhVz$ruRUmodulejs,\n    \"sk-SK\": $4YhVz$skSKmodulejs,\n    \"sl-SI\": $4YhVz$slSImodulejs,\n    \"sr-SP\": $4YhVz$srSPmodulejs,\n    \"sv-SE\": $4YhVz$svSEmodulejs,\n    \"tr-TR\": $4YhVz$trTRmodulejs,\n    \"uk-UA\": $4YhVz$ukUAmodulejs,\n    \"zh-CN\": $4YhVz$zhCNmodulejs,\n    \"zh-TW\": $4YhVz$zhTWmodulejs\n};\n\n\nexport {$dfb4eba373ed9493$exports as default};\n//# sourceMappingURL=intlStrings.module.js.map\n","import {createFocusManager as $7CEvq$createFocusManager, getFocusableTreeWalker as $7CEvq$getFocusableTreeWalker} from \"@react-aria/focus\";\nimport {mergeProps as $7CEvq$mergeProps} from \"@react-aria/utils\";\nimport {useLocale as $7CEvq$useLocale} from \"@react-aria/i18n\";\nimport {useMemo as $7CEvq$useMemo} from \"react\";\nimport {usePress as $7CEvq$usePress} from \"@react-aria/interactions\";\n\n\n\n\n\n\nfunction $3dfb0f96be0d6a08$export$4a931266a3838b86(state, ref, disableArrowNavigation) {\n    let { direction: direction } = (0, $7CEvq$useLocale)();\n    let focusManager = (0, $7CEvq$useMemo)(()=>(0, $7CEvq$createFocusManager)(ref), [\n        ref\n    ]);\n    // Open the popover on alt + arrow down\n    let onKeyDown = (e)=>{\n        if (!e.currentTarget.contains(e.target)) return;\n        if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp') && 'setOpen' in state) {\n            e.preventDefault();\n            e.stopPropagation();\n            state.setOpen(true);\n        }\n        if (disableArrowNavigation) return;\n        switch(e.key){\n            case 'ArrowLeft':\n                e.preventDefault();\n                e.stopPropagation();\n                if (direction === 'rtl') {\n                    if (ref.current) {\n                        let target = e.target;\n                        let prev = $3dfb0f96be0d6a08$var$findNextSegment(ref.current, target.getBoundingClientRect().left, -1);\n                        if (prev) prev.focus();\n                    }\n                } else focusManager.focusPrevious();\n                break;\n            case 'ArrowRight':\n                e.preventDefault();\n                e.stopPropagation();\n                if (direction === 'rtl') {\n                    if (ref.current) {\n                        let target = e.target;\n                        let next = $3dfb0f96be0d6a08$var$findNextSegment(ref.current, target.getBoundingClientRect().left, 1);\n                        if (next) next.focus();\n                    }\n                } else focusManager.focusNext();\n                break;\n        }\n    };\n    // Focus the first placeholder segment from the end on mouse down/touch up in the field.\n    let focusLast = ()=>{\n        var _window_event;\n        if (!ref.current) return;\n        // Try to find the segment prior to the element that was clicked on.\n        let target = (_window_event = window.event) === null || _window_event === void 0 ? void 0 : _window_event.target;\n        let walker = (0, $7CEvq$getFocusableTreeWalker)(ref.current, {\n            tabbable: true\n        });\n        if (target) {\n            walker.currentNode = target;\n            target = walker.previousNode();\n        }\n        // If no target found, find the last element from the end.\n        if (!target) {\n            let last;\n            do {\n                last = walker.lastChild();\n                if (last) target = last;\n            }while (last);\n        }\n        // Now go backwards until we find an element that is not a placeholder.\n        while(target === null || target === void 0 ? void 0 : target.hasAttribute('data-placeholder')){\n            let prev = walker.previousNode();\n            if (prev && prev.hasAttribute('data-placeholder')) target = prev;\n            else break;\n        }\n        if (target) target.focus();\n    };\n    let { pressProps: pressProps } = (0, $7CEvq$usePress)({\n        preventFocusOnPress: true,\n        allowTextSelectionOnPress: true,\n        onPressStart (e) {\n            if (e.pointerType === 'mouse') focusLast();\n        },\n        onPress (e) {\n            if (e.pointerType === 'touch' || e.pointerType === 'pen') focusLast();\n        }\n    });\n    return (0, $7CEvq$mergeProps)(pressProps, {\n        onKeyDown: onKeyDown\n    });\n}\nfunction $3dfb0f96be0d6a08$var$findNextSegment(group, fromX, direction) {\n    let walker = (0, $7CEvq$getFocusableTreeWalker)(group, {\n        tabbable: true\n    });\n    let node = walker.nextNode();\n    let closest = null;\n    let closestDistance = Infinity;\n    while(node){\n        let x = node.getBoundingClientRect().left;\n        let distance = x - fromX;\n        let absoluteDistance = Math.abs(distance);\n        if (Math.sign(distance) === direction && absoluteDistance < closestDistance) {\n            closest = node;\n            closestDistance = absoluteDistance;\n        }\n        node = walker.nextNode();\n    }\n    return closest;\n}\n\n\nexport {$3dfb0f96be0d6a08$export$4a931266a3838b86 as useDatePickerGroup};\n//# sourceMappingURL=useDatePickerGroup.module.js.map\n","import $7Gzdi$intlStringsmodulejs from \"./intlStrings.mjs\";\nimport {useDatePickerGroup as $3dfb0f96be0d6a08$export$4a931266a3838b86} from \"./useDatePickerGroup.mjs\";\nimport {createFocusManager as $7Gzdi$createFocusManager} from \"@react-aria/focus\";\nimport {useDescription as $7Gzdi$useDescription, mergeProps as $7Gzdi$mergeProps, useFormReset as $7Gzdi$useFormReset, filterDOMProps as $7Gzdi$filterDOMProps} from \"@react-aria/utils\";\nimport {useRef as $7Gzdi$useRef, useMemo as $7Gzdi$useMemo, useEffect as $7Gzdi$useEffect} from \"react\";\nimport {useField as $7Gzdi$useField} from \"@react-aria/label\";\nimport {useFocusWithin as $7Gzdi$useFocusWithin} from \"@react-aria/interactions\";\nimport {useFormValidation as $7Gzdi$useFormValidation} from \"@react-aria/form\";\nimport {useLocalizedStringFormatter as $7Gzdi$useLocalizedStringFormatter} from \"@react-aria/i18n\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\nconst $16f0b7bb276bc17e$export$653eddfc964b0f8a = new WeakMap();\nconst $16f0b7bb276bc17e$export$300019f83c56d282 = '__role_' + Date.now();\nconst $16f0b7bb276bc17e$export$7b3062cd49e80452 = '__focusManager_' + Date.now();\nfunction $16f0b7bb276bc17e$export$5591b0b878c1a989(props, state, ref) {\n    var _state_value;\n    let { isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = state.displayValidation;\n    let { labelProps: labelProps, fieldProps: fieldProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps } = (0, $7Gzdi$useField)({\n        ...props,\n        labelElementType: 'span',\n        isInvalid: isInvalid,\n        errorMessage: props.errorMessage || validationErrors\n    });\n    let valueOnFocus = (0, $7Gzdi$useRef)(null);\n    let { focusWithinProps: focusWithinProps } = (0, $7Gzdi$useFocusWithin)({\n        ...props,\n        onFocusWithin (e) {\n            var _props_onFocus;\n            valueOnFocus.current = state.value;\n            (_props_onFocus = props.onFocus) === null || _props_onFocus === void 0 ? void 0 : _props_onFocus.call(props, e);\n        },\n        onBlurWithin: (e)=>{\n            var _props_onBlur;\n            state.confirmPlaceholder();\n            if (state.value !== valueOnFocus.current) state.commitValidation();\n            (_props_onBlur = props.onBlur) === null || _props_onBlur === void 0 ? void 0 : _props_onBlur.call(props, e);\n        },\n        onFocusWithinChange: props.onFocusChange\n    });\n    let stringFormatter = (0, $7Gzdi$useLocalizedStringFormatter)((0, ($parcel$interopDefault($7Gzdi$intlStringsmodulejs))), '@react-aria/datepicker');\n    let message = state.maxGranularity === 'hour' ? 'selectedTimeDescription' : 'selectedDateDescription';\n    let field = state.maxGranularity === 'hour' ? 'time' : 'date';\n    let description = state.value ? stringFormatter.format(message, {\n        [field]: state.formatValue({\n            month: 'long'\n        })\n    }) : '';\n    let descProps = (0, $7Gzdi$useDescription)(description);\n    // If within a date picker or date range picker, the date field will have role=\"presentation\" and an aria-describedby\n    // will be passed in that references the value (e.g. entire range). Otherwise, add the field's value description.\n    let describedBy = props[$16f0b7bb276bc17e$export$300019f83c56d282] === 'presentation' ? fieldProps['aria-describedby'] : [\n        descProps['aria-describedby'],\n        fieldProps['aria-describedby']\n    ].filter(Boolean).join(' ') || undefined;\n    let propsFocusManager = props[$16f0b7bb276bc17e$export$7b3062cd49e80452];\n    let focusManager = (0, $7Gzdi$useMemo)(()=>propsFocusManager || (0, $7Gzdi$createFocusManager)(ref), [\n        propsFocusManager,\n        ref\n    ]);\n    let groupProps = (0, $3dfb0f96be0d6a08$export$4a931266a3838b86)(state, ref, props[$16f0b7bb276bc17e$export$300019f83c56d282] === 'presentation');\n    // Pass labels and other information to segments.\n    $16f0b7bb276bc17e$export$653eddfc964b0f8a.set(state, {\n        ariaLabel: props['aria-label'],\n        ariaLabelledBy: [\n            labelProps.id,\n            props['aria-labelledby']\n        ].filter(Boolean).join(' ') || undefined,\n        ariaDescribedBy: describedBy,\n        focusManager: focusManager\n    });\n    let autoFocusRef = (0, $7Gzdi$useRef)(props.autoFocus);\n    // When used within a date picker or date range picker, the field gets role=\"presentation\"\n    // rather than role=\"group\". Since the date picker/date range picker already has a role=\"group\"\n    // with a label and description, and the segments are already labeled by this as well, this\n    // avoids very verbose duplicate announcements.\n    let fieldDOMProps;\n    if (props[$16f0b7bb276bc17e$export$300019f83c56d282] === 'presentation') fieldDOMProps = {\n        role: 'presentation'\n    };\n    else fieldDOMProps = (0, $7Gzdi$mergeProps)(fieldProps, {\n        role: 'group',\n        'aria-disabled': props.isDisabled || undefined,\n        'aria-describedby': describedBy\n    });\n    (0, $7Gzdi$useEffect)(()=>{\n        if (autoFocusRef.current) focusManager.focusFirst();\n        autoFocusRef.current = false;\n    }, [\n        focusManager\n    ]);\n    (0, $7Gzdi$useFormReset)(props.inputRef, state.defaultValue, state.setValue);\n    (0, $7Gzdi$useFormValidation)({\n        ...props,\n        focus () {\n            focusManager.focusFirst();\n        }\n    }, state, props.inputRef);\n    let inputProps = {\n        type: 'hidden',\n        name: props.name,\n        form: props.form,\n        value: ((_state_value = state.value) === null || _state_value === void 0 ? void 0 : _state_value.toString()) || '',\n        disabled: props.isDisabled\n    };\n    if (props.validationBehavior === 'native') {\n        // Use a hidden <input type=\"text\"> rather than <input type=\"hidden\">\n        // so that an empty value blocks HTML form submission when the field is required.\n        inputProps.type = 'text';\n        inputProps.hidden = true;\n        inputProps.required = props.isRequired;\n        // Ignore react warning.\n        inputProps.onChange = ()=>{};\n    }\n    let domProps = (0, $7Gzdi$filterDOMProps)(props);\n    return {\n        labelProps: {\n            ...labelProps,\n            onClick: ()=>{\n                focusManager.focusFirst();\n            }\n        },\n        fieldProps: (0, $7Gzdi$mergeProps)(domProps, fieldDOMProps, groupProps, focusWithinProps, {\n            onKeyDown (e) {\n                if (props.onKeyDown) props.onKeyDown(e);\n            },\n            onKeyUp (e) {\n                if (props.onKeyUp) props.onKeyUp(e);\n            },\n            style: {\n                unicodeBidi: 'isolate'\n            }\n        }),\n        inputProps: inputProps,\n        descriptionProps: descriptionProps,\n        errorMessageProps: errorMessageProps,\n        isInvalid: isInvalid,\n        validationErrors: validationErrors,\n        validationDetails: validationDetails\n    };\n}\nfunction $16f0b7bb276bc17e$export$4c842f6a241dc825(props, state, ref) {\n    var _state_timeValue;\n    let res = $16f0b7bb276bc17e$export$5591b0b878c1a989(props, state, ref);\n    res.inputProps.value = ((_state_timeValue = state.timeValue) === null || _state_timeValue === void 0 ? void 0 : _state_timeValue.toString()) || '';\n    return res;\n}\n\n\nexport {$16f0b7bb276bc17e$export$653eddfc964b0f8a as hookData, $16f0b7bb276bc17e$export$300019f83c56d282 as roleSymbol, $16f0b7bb276bc17e$export$7b3062cd49e80452 as focusManagerSymbol, $16f0b7bb276bc17e$export$5591b0b878c1a989 as useDateField, $16f0b7bb276bc17e$export$4c842f6a241dc825 as useTimeField};\n//# sourceMappingURL=useDateField.module.js.map\n","import $jR5iF$intlStringsmodulejs from \"./intlStrings.mjs\";\nimport {useLocale as $jR5iF$useLocale, useLocalizedStringDictionary as $jR5iF$useLocalizedStringDictionary} from \"@react-aria/i18n\";\nimport {useMemo as $jR5iF$useMemo} from \"react\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // @ts-ignore\n\n\n\nfunction $3aeceb3a64eb8358$export$d42c60378c8168f8() {\n    let { locale: locale } = (0, $jR5iF$useLocale)();\n    let dictionary = (0, $jR5iF$useLocalizedStringDictionary)((0, ($parcel$interopDefault($jR5iF$intlStringsmodulejs))), '@react-aria/datepicker');\n    return (0, $jR5iF$useMemo)(()=>{\n        // Try to use Intl.DisplayNames if possible. It may be supported in browsers, but not support the dateTimeField\n        // type as that was only added in v2. https://github.com/tc39/intl-displaynames-v2\n        try {\n            return new Intl.DisplayNames(locale, {\n                type: 'dateTimeField'\n            });\n        } catch  {\n            return new $3aeceb3a64eb8358$var$DisplayNamesPolyfill(locale, dictionary);\n        }\n    }, [\n        locale,\n        dictionary\n    ]);\n}\nclass $3aeceb3a64eb8358$var$DisplayNamesPolyfill {\n    of(field) {\n        return this.dictionary.getStringForLocale(field, this.locale);\n    }\n    constructor(locale, dictionary){\n        this.locale = locale;\n        this.dictionary = dictionary;\n    }\n}\n\n\nexport {$3aeceb3a64eb8358$export$d42c60378c8168f8 as useDisplayNames};\n//# sourceMappingURL=useDisplayNames.module.js.map\n","import {hookData as $16f0b7bb276bc17e$export$653eddfc964b0f8a} from \"./useDateField.mjs\";\nimport {useDisplayNames as $3aeceb3a64eb8358$export$d42c60378c8168f8} from \"./useDisplayNames.mjs\";\nimport {toCalendar as $4d1jn$toCalendar, CalendarDate as $4d1jn$CalendarDate} from \"@internationalized/date\";\nimport {isMac as $4d1jn$isMac, scrollIntoViewport as $4d1jn$scrollIntoViewport, getScrollParent as $4d1jn$getScrollParent, useEvent as $4d1jn$useEvent, useLayoutEffect as $4d1jn$useLayoutEffect, isIOS as $4d1jn$isIOS, useId as $4d1jn$useId, useLabels as $4d1jn$useLabels, mergeProps as $4d1jn$mergeProps} from \"@react-aria/utils\";\nimport {NumberParser as $4d1jn$NumberParser} from \"@internationalized/number\";\nimport $4d1jn$react, {useRef as $4d1jn$useRef, useMemo as $4d1jn$useMemo} from \"react\";\nimport {useLocale as $4d1jn$useLocale, useDateFormatter as $4d1jn$useDateFormatter, useFilter as $4d1jn$useFilter} from \"@react-aria/i18n\";\nimport {useSpinButton as $4d1jn$useSpinButton} from \"@react-aria/spinbutton\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\nfunction $32489daedd52963e$export$1315d136e6f7581(segment, state, ref) {\n    let enteredKeys = (0, $4d1jn$useRef)('');\n    let { locale: locale, direction: direction } = (0, $4d1jn$useLocale)();\n    let displayNames = (0, $3aeceb3a64eb8358$export$d42c60378c8168f8)();\n    let { ariaLabel: ariaLabel, ariaLabelledBy: ariaLabelledBy, ariaDescribedBy: ariaDescribedBy, focusManager: focusManager } = (0, $16f0b7bb276bc17e$export$653eddfc964b0f8a).get(state);\n    let textValue = segment.isPlaceholder ? '' : segment.text;\n    let options = (0, $4d1jn$useMemo)(()=>state.dateFormatter.resolvedOptions(), [\n        state.dateFormatter\n    ]);\n    let monthDateFormatter = (0, $4d1jn$useDateFormatter)({\n        month: 'long',\n        timeZone: options.timeZone\n    });\n    let hourDateFormatter = (0, $4d1jn$useDateFormatter)({\n        hour: 'numeric',\n        hour12: options.hour12,\n        timeZone: options.timeZone\n    });\n    if (segment.type === 'month' && !segment.isPlaceholder) {\n        let monthTextValue = monthDateFormatter.format(state.dateValue);\n        textValue = monthTextValue !== textValue ? `${textValue} \\u{2013} ${monthTextValue}` : monthTextValue;\n    } else if (segment.type === 'hour' && !segment.isPlaceholder) textValue = hourDateFormatter.format(state.dateValue);\n    let { spinButtonProps: spinButtonProps } = (0, $4d1jn$useSpinButton)({\n        // The ARIA spec says aria-valuenow is optional if there's no value, but aXe seems to require it.\n        // This doesn't seem to have any negative effects with real AT since we also use aria-valuetext.\n        // https://github.com/dequelabs/axe-core/issues/3505\n        value: segment.value,\n        textValue: textValue,\n        minValue: segment.minValue,\n        maxValue: segment.maxValue,\n        isDisabled: state.isDisabled,\n        isReadOnly: state.isReadOnly || !segment.isEditable,\n        isRequired: state.isRequired,\n        onIncrement: ()=>{\n            enteredKeys.current = '';\n            state.increment(segment.type);\n        },\n        onDecrement: ()=>{\n            enteredKeys.current = '';\n            state.decrement(segment.type);\n        },\n        onIncrementPage: ()=>{\n            enteredKeys.current = '';\n            state.incrementPage(segment.type);\n        },\n        onDecrementPage: ()=>{\n            enteredKeys.current = '';\n            state.decrementPage(segment.type);\n        },\n        onIncrementToMax: ()=>{\n            enteredKeys.current = '';\n            if (segment.maxValue !== undefined) state.setSegment(segment.type, segment.maxValue);\n        },\n        onDecrementToMin: ()=>{\n            enteredKeys.current = '';\n            if (segment.minValue !== undefined) state.setSegment(segment.type, segment.minValue);\n        }\n    });\n    let parser = (0, $4d1jn$useMemo)(()=>new (0, $4d1jn$NumberParser)(locale, {\n            maximumFractionDigits: 0\n        }), [\n        locale\n    ]);\n    let backspace = ()=>{\n        if (segment.text === segment.placeholder) focusManager.focusPrevious();\n        if (parser.isValidPartialNumber(segment.text) && !state.isReadOnly && !segment.isPlaceholder) {\n            let newValue = segment.text.slice(0, -1);\n            let parsed = parser.parse(newValue);\n            newValue = parsed === 0 ? '' : newValue;\n            if (newValue.length === 0 || parsed === 0) state.clearSegment(segment.type);\n            else state.setSegment(segment.type, parsed);\n            enteredKeys.current = newValue;\n        } else if (segment.type === 'dayPeriod') state.clearSegment(segment.type);\n    };\n    let onKeyDown = (e)=>{\n        // Firefox does not fire selectstart for Ctrl/Cmd + A\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1742153\n        if (e.key === 'a' && ((0, $4d1jn$isMac)() ? e.metaKey : e.ctrlKey)) e.preventDefault();\n        if (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;\n        switch(e.key){\n            case 'Backspace':\n            case 'Delete':\n                // Safari on iOS does not fire beforeinput for the backspace key because the cursor is at the start.\n                e.preventDefault();\n                e.stopPropagation();\n                backspace();\n                break;\n        }\n    };\n    // Safari dayPeriod option doesn't work...\n    let { startsWith: startsWith } = (0, $4d1jn$useFilter)({\n        sensitivity: 'base'\n    });\n    let amPmFormatter = (0, $4d1jn$useDateFormatter)({\n        hour: 'numeric',\n        hour12: true\n    });\n    let am = (0, $4d1jn$useMemo)(()=>{\n        let date = new Date();\n        date.setHours(0);\n        return amPmFormatter.formatToParts(date).find((part)=>part.type === 'dayPeriod').value;\n    }, [\n        amPmFormatter\n    ]);\n    let pm = (0, $4d1jn$useMemo)(()=>{\n        let date = new Date();\n        date.setHours(12);\n        return amPmFormatter.formatToParts(date).find((part)=>part.type === 'dayPeriod').value;\n    }, [\n        amPmFormatter\n    ]);\n    // Get a list of formatted era names so users can type the first character to choose one.\n    let eraFormatter = (0, $4d1jn$useDateFormatter)({\n        year: 'numeric',\n        era: 'narrow',\n        timeZone: 'UTC'\n    });\n    let eras = (0, $4d1jn$useMemo)(()=>{\n        if (segment.type !== 'era') return [];\n        let date = (0, $4d1jn$toCalendar)(new (0, $4d1jn$CalendarDate)(1, 1, 1), state.calendar);\n        let eras = state.calendar.getEras().map((era)=>{\n            let eraDate = date.set({\n                year: 1,\n                month: 1,\n                day: 1,\n                era: era\n            }).toDate('UTC');\n            let parts = eraFormatter.formatToParts(eraDate);\n            let formatted = parts.find((p)=>p.type === 'era').value;\n            return {\n                era: era,\n                formatted: formatted\n            };\n        });\n        // Remove the common prefix from formatted values. This is so that in calendars with eras like\n        // ERA0 and ERA1 (e.g. Ethiopic), users can press \"0\" and \"1\" to select an era. In other cases,\n        // the first letter is used.\n        let prefixLength = $32489daedd52963e$var$commonPrefixLength(eras.map((era)=>era.formatted));\n        if (prefixLength) for (let era of eras)era.formatted = era.formatted.slice(prefixLength);\n        return eras;\n    }, [\n        eraFormatter,\n        state.calendar,\n        segment.type\n    ]);\n    let onInput = (key)=>{\n        if (state.isDisabled || state.isReadOnly) return;\n        let newValue = enteredKeys.current + key;\n        switch(segment.type){\n            case 'dayPeriod':\n                if (startsWith(am, key)) state.setSegment('dayPeriod', 0);\n                else if (startsWith(pm, key)) state.setSegment('dayPeriod', 12);\n                else break;\n                focusManager.focusNext();\n                break;\n            case 'era':\n                {\n                    let matched = eras.find((e)=>startsWith(e.formatted, key));\n                    if (matched) {\n                        state.setSegment('era', matched.era);\n                        focusManager.focusNext();\n                    }\n                    break;\n                }\n            case 'day':\n            case 'hour':\n            case 'minute':\n            case 'second':\n            case 'month':\n            case 'year':\n                {\n                    if (!parser.isValidPartialNumber(newValue)) return;\n                    let numberValue = parser.parse(newValue);\n                    let segmentValue = numberValue;\n                    let allowsZero = segment.minValue === 0;\n                    if (segment.type === 'hour' && state.dateFormatter.resolvedOptions().hour12) {\n                        switch(state.dateFormatter.resolvedOptions().hourCycle){\n                            case 'h11':\n                                if (numberValue > 11) segmentValue = parser.parse(key);\n                                break;\n                            case 'h12':\n                                allowsZero = false;\n                                if (numberValue > 12) segmentValue = parser.parse(key);\n                                break;\n                        }\n                        if (segment.value !== undefined && segment.value >= 12 && numberValue > 1) numberValue += 12;\n                    } else if (segment.maxValue !== undefined && numberValue > segment.maxValue) segmentValue = parser.parse(key);\n                    if (isNaN(numberValue)) return;\n                    let shouldSetValue = segmentValue !== 0 || allowsZero;\n                    if (shouldSetValue) state.setSegment(segment.type, segmentValue);\n                    if (segment.maxValue !== undefined && (Number(numberValue + '0') > segment.maxValue || newValue.length >= String(segment.maxValue).length)) {\n                        enteredKeys.current = '';\n                        if (shouldSetValue) focusManager.focusNext();\n                    } else enteredKeys.current = newValue;\n                    break;\n                }\n        }\n    };\n    let onFocus = ()=>{\n        enteredKeys.current = '';\n        if (ref.current) (0, $4d1jn$scrollIntoViewport)(ref.current, {\n            containingElement: (0, $4d1jn$getScrollParent)(ref.current)\n        });\n        // Collapse selection to start or Chrome won't fire input events.\n        let selection = window.getSelection();\n        selection === null || selection === void 0 ? void 0 : selection.collapse(ref.current);\n    };\n    let documentRef = (0, $4d1jn$useRef)(typeof document !== 'undefined' ? document : null);\n    (0, $4d1jn$useEvent)(documentRef, 'selectionchange', ()=>{\n        var _ref_current;\n        // Enforce that the selection is collapsed when inside a date segment.\n        // Otherwise, when tapping on a segment in Android Chrome and then entering text,\n        // composition events will be fired that break the DOM structure and crash the page.\n        let selection = window.getSelection();\n        if ((selection === null || selection === void 0 ? void 0 : selection.anchorNode) && ((_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.contains(selection === null || selection === void 0 ? void 0 : selection.anchorNode))) selection.collapse(ref.current);\n    });\n    let compositionRef = (0, $4d1jn$useRef)('');\n    (0, $4d1jn$useEvent)(ref, 'beforeinput', (e)=>{\n        if (!ref.current) return;\n        e.preventDefault();\n        switch(e.inputType){\n            case 'deleteContentBackward':\n            case 'deleteContentForward':\n                if (parser.isValidPartialNumber(segment.text) && !state.isReadOnly) backspace();\n                break;\n            case 'insertCompositionText':\n                // insertCompositionText cannot be canceled.\n                // Record the current state of the element so we can restore it in the `input` event below.\n                compositionRef.current = ref.current.textContent;\n                // Safari gets stuck in a composition state unless we also assign to the value here.\n                // eslint-disable-next-line no-self-assign\n                ref.current.textContent = ref.current.textContent;\n                break;\n            default:\n                if (e.data != null) onInput(e.data);\n                break;\n        }\n    });\n    (0, $4d1jn$useEvent)(ref, 'input', (e)=>{\n        let { inputType: inputType, data: data } = e;\n        switch(inputType){\n            case 'insertCompositionText':\n                // Reset the DOM to how it was in the beforeinput event.\n                if (ref.current) ref.current.textContent = compositionRef.current;\n                // Android sometimes fires key presses of letters as composition events. Need to handle am/pm keys here too.\n                // Can also happen e.g. with Pinyin keyboard on iOS.\n                if (data != null && (startsWith(am, data) || startsWith(pm, data))) onInput(data);\n                break;\n        }\n    });\n    (0, $4d1jn$useLayoutEffect)(()=>{\n        let element = ref.current;\n        return ()=>{\n            // If the focused segment is removed, focus the previous one, or the next one if there was no previous one.\n            if (document.activeElement === element) {\n                let prev = focusManager.focusPrevious();\n                if (!prev) focusManager.focusNext();\n            }\n        };\n    }, [\n        ref,\n        focusManager\n    ]);\n    // spinbuttons cannot be focused with VoiceOver on iOS.\n    let touchPropOverrides = (0, $4d1jn$isIOS)() || segment.type === 'timeZoneName' ? {\n        role: 'textbox',\n        'aria-valuemax': null,\n        'aria-valuemin': null,\n        'aria-valuetext': null,\n        'aria-valuenow': null\n    } : {};\n    // Only apply aria-describedby to the first segment, unless the field is invalid. This avoids it being\n    // read every time the user navigates to a new segment.\n    let firstSegment = (0, $4d1jn$useMemo)(()=>state.segments.find((s)=>s.isEditable), [\n        state.segments\n    ]);\n    if (segment !== firstSegment && !state.isInvalid) ariaDescribedBy = undefined;\n    let id = (0, $4d1jn$useId)();\n    let isEditable = !state.isDisabled && !state.isReadOnly && segment.isEditable;\n    // Prepend the label passed from the field to each segment name.\n    // This is needed because VoiceOver on iOS does not announce groups.\n    let name = segment.type === 'literal' ? '' : displayNames.of(segment.type);\n    let labelProps = (0, $4d1jn$useLabels)({\n        'aria-label': `${name}${ariaLabel ? `, ${ariaLabel}` : ''}${ariaLabelledBy ? ', ' : ''}`,\n        'aria-labelledby': ariaLabelledBy\n    });\n    // Literal segments should not be visible to screen readers. We don't really need any of the above,\n    // but the rules of hooks mean hooks cannot be conditional so we have to put this condition here.\n    if (segment.type === 'literal') return {\n        segmentProps: {\n            'aria-hidden': true\n        }\n    };\n    let segmentStyle = {\n        caretColor: 'transparent'\n    };\n    if (direction === 'rtl') {\n        // While the bidirectional algorithm seems to work properly on inline elements with actual values, it returns different results for placeholder strings. \n        // To ensure placeholder render in correct format, we apply the CSS equivalent of LRE (left-to-right embedding). See https://www.unicode.org/reports/tr9/#Explicit_Directional_Embeddings.\n        // However, we apply this to both placeholders and date segments with an actual value because the date segments will shift around when deleting otherwise. \n        segmentStyle.unicodeBidi = 'embed';\n        let format = options[segment.type];\n        if (format === 'numeric' || format === '2-digit') segmentStyle.direction = 'ltr';\n    }\n    return {\n        segmentProps: (0, $4d1jn$mergeProps)(spinButtonProps, labelProps, {\n            id: id,\n            ...touchPropOverrides,\n            'aria-invalid': state.isInvalid ? 'true' : undefined,\n            'aria-describedby': ariaDescribedBy,\n            'aria-readonly': state.isReadOnly || !segment.isEditable ? 'true' : undefined,\n            'data-placeholder': segment.isPlaceholder || undefined,\n            contentEditable: isEditable,\n            suppressContentEditableWarning: isEditable,\n            spellCheck: isEditable ? 'false' : undefined,\n            autoCorrect: isEditable ? 'off' : undefined,\n            // Capitalization was changed in React 17...\n            [parseInt((0, $4d1jn$react).version, 10) >= 17 ? 'enterKeyHint' : 'enterkeyhint']: isEditable ? 'next' : undefined,\n            inputMode: state.isDisabled || segment.type === 'dayPeriod' || segment.type === 'era' || !isEditable ? undefined : 'numeric',\n            tabIndex: state.isDisabled ? undefined : 0,\n            onKeyDown: onKeyDown,\n            onFocus: onFocus,\n            style: segmentStyle,\n            // Prevent pointer events from reaching useDatePickerGroup, and allow native browser behavior to focus the segment.\n            onPointerDown (e) {\n                e.stopPropagation();\n            },\n            onMouseDown (e) {\n                e.stopPropagation();\n            }\n        })\n    };\n}\nfunction $32489daedd52963e$var$commonPrefixLength(strings) {\n    // Sort the strings, and compare the characters in the first and last to find the common prefix.\n    strings.sort();\n    let first = strings[0];\n    let last = strings[strings.length - 1];\n    for(let i = 0; i < first.length; i++){\n        if (first[i] !== last[i]) return i;\n    }\n    return 0;\n}\n\n\nexport {$32489daedd52963e$export$1315d136e6f7581 as useDateSegment};\n//# sourceMappingURL=useDateSegment.module.js.map\n","import {useSlotId as $i6df2$useSlotId, filterDOMProps as $i6df2$filterDOMProps} from \"@react-aria/utils\";\nimport {focusSafely as $i6df2$focusSafely} from \"@react-aria/interactions\";\nimport {useRef as $i6df2$useRef, useEffect as $i6df2$useEffect} from \"react\";\nimport {useOverlayFocusContain as $i6df2$useOverlayFocusContain} from \"@react-aria/overlays\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $40df3f8667284809$export$d55e7ee900f34e93(props, ref) {\n    let { role: role = 'dialog' } = props;\n    let titleId = (0, $i6df2$useSlotId)();\n    titleId = props['aria-label'] ? undefined : titleId;\n    let isRefocusing = (0, $i6df2$useRef)(false);\n    // Focus the dialog itself on mount, unless a child element is already focused.\n    (0, $i6df2$useEffect)(()=>{\n        if (ref.current && !ref.current.contains(document.activeElement)) {\n            (0, $i6df2$focusSafely)(ref.current);\n            // Safari on iOS does not move the VoiceOver cursor to the dialog\n            // or announce that it has opened until it has rendered. A workaround\n            // is to wait for half a second, then blur and re-focus the dialog.\n            let timeout = setTimeout(()=>{\n                // Check that the dialog is still focused, or focused was lost to the body.\n                if (document.activeElement === ref.current || document.activeElement === document.body) {\n                    isRefocusing.current = true;\n                    if (ref.current) {\n                        ref.current.blur();\n                        (0, $i6df2$focusSafely)(ref.current);\n                    }\n                    isRefocusing.current = false;\n                }\n            }, 500);\n            return ()=>{\n                clearTimeout(timeout);\n            };\n        }\n    }, [\n        ref\n    ]);\n    (0, $i6df2$useOverlayFocusContain)();\n    // We do not use aria-modal due to a Safari bug which forces the first focusable element to be focused\n    // on mount when inside an iframe, no matter which element we programmatically focus.\n    // See https://bugs.webkit.org/show_bug.cgi?id=211934.\n    // useModal sets aria-hidden on all elements outside the dialog, so the dialog will behave as a modal\n    // even without aria-modal on the dialog itself.\n    return {\n        dialogProps: {\n            ...(0, $i6df2$filterDOMProps)(props, {\n                labelable: true\n            }),\n            role: role,\n            tabIndex: -1,\n            'aria-labelledby': props['aria-labelledby'] || titleId,\n            // Prevent blur events from reaching useOverlay, which may cause\n            // popovers to close. Since focus is contained within the dialog,\n            // we don't want this to occur due to the above useEffect.\n            onBlur: (e)=>{\n                if (isRefocusing.current) e.stopPropagation();\n            }\n        },\n        titleProps: {\n            id: titleId\n        }\n    };\n}\n\n\nexport {$40df3f8667284809$export$d55e7ee900f34e93 as useDialog};\n//# sourceMappingURL=useDialog.module.js.map\n","import {filterDOMProps as $aUnai$filterDOMProps, mergeProps as $aUnai$mergeProps, useId as $aUnai$useId, chain as $aUnai$chain} from \"@react-aria/utils\";\nimport {useMemo as $aUnai$useMemo} from \"react\";\nimport {ListKeyboardDelegate as $aUnai$ListKeyboardDelegate, useTypeSelect as $aUnai$useTypeSelect} from \"@react-aria/selection\";\nimport {setInteractionModality as $aUnai$setInteractionModality} from \"@react-aria/interactions\";\nimport {useCollator as $aUnai$useCollator} from \"@react-aria/i18n\";\nimport {useField as $aUnai$useField} from \"@react-aria/label\";\nimport {useMenuTrigger as $aUnai$useMenuTrigger} from \"@react-aria/menu\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nconst $58aed456727eb0f3$export$703601b7e90536f8 = new WeakMap();\nfunction $58aed456727eb0f3$export$e64b2f635402ca43(props, state, ref) {\n    let { keyboardDelegate: keyboardDelegate, isDisabled: isDisabled, isRequired: isRequired, name: name, form: form, validationBehavior: validationBehavior = 'aria' } = props;\n    // By default, a KeyboardDelegate is provided which uses the DOM to query layout information (e.g. for page up/page down).\n    // When virtualized, the layout object will be passed in as a prop and override this.\n    let collator = (0, $aUnai$useCollator)({\n        usage: 'search',\n        sensitivity: 'base'\n    });\n    let delegate = (0, $aUnai$useMemo)(()=>keyboardDelegate || new (0, $aUnai$ListKeyboardDelegate)(state.collection, state.disabledKeys, ref, collator), [\n        keyboardDelegate,\n        state.collection,\n        state.disabledKeys,\n        collator,\n        ref\n    ]);\n    let { menuTriggerProps: menuTriggerProps, menuProps: menuProps } = (0, $aUnai$useMenuTrigger)({\n        isDisabled: isDisabled,\n        type: 'listbox'\n    }, state, ref);\n    let onKeyDown = (e)=>{\n        if (state.selectionManager.selectionMode === 'multiple') return;\n        switch(e.key){\n            case 'ArrowLeft':\n                {\n                    var _delegate_getKeyAbove, _delegate_getFirstKey;\n                    // prevent scrolling containers\n                    e.preventDefault();\n                    let key = state.selectedKey != null ? (_delegate_getKeyAbove = delegate.getKeyAbove) === null || _delegate_getKeyAbove === void 0 ? void 0 : _delegate_getKeyAbove.call(delegate, state.selectedKey) : (_delegate_getFirstKey = delegate.getFirstKey) === null || _delegate_getFirstKey === void 0 ? void 0 : _delegate_getFirstKey.call(delegate);\n                    if (key) state.setSelectedKey(key);\n                    break;\n                }\n            case 'ArrowRight':\n                {\n                    var _delegate_getKeyBelow, _delegate_getFirstKey1;\n                    // prevent scrolling containers\n                    e.preventDefault();\n                    let key = state.selectedKey != null ? (_delegate_getKeyBelow = delegate.getKeyBelow) === null || _delegate_getKeyBelow === void 0 ? void 0 : _delegate_getKeyBelow.call(delegate, state.selectedKey) : (_delegate_getFirstKey1 = delegate.getFirstKey) === null || _delegate_getFirstKey1 === void 0 ? void 0 : _delegate_getFirstKey1.call(delegate);\n                    if (key) state.setSelectedKey(key);\n                    break;\n                }\n        }\n    };\n    let { typeSelectProps: typeSelectProps } = (0, $aUnai$useTypeSelect)({\n        keyboardDelegate: delegate,\n        selectionManager: state.selectionManager,\n        onTypeSelect (key) {\n            state.setSelectedKey(key);\n        }\n    });\n    let { isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = state.displayValidation;\n    let { labelProps: labelProps, fieldProps: fieldProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps } = (0, $aUnai$useField)({\n        ...props,\n        labelElementType: 'span',\n        isInvalid: isInvalid,\n        errorMessage: props.errorMessage || validationErrors\n    });\n    typeSelectProps.onKeyDown = typeSelectProps.onKeyDownCapture;\n    delete typeSelectProps.onKeyDownCapture;\n    if (state.selectionManager.selectionMode === 'multiple') typeSelectProps = {};\n    let domProps = (0, $aUnai$filterDOMProps)(props, {\n        labelable: true\n    });\n    let triggerProps = (0, $aUnai$mergeProps)(typeSelectProps, menuTriggerProps, fieldProps);\n    let valueId = (0, $aUnai$useId)();\n    $58aed456727eb0f3$export$703601b7e90536f8.set(state, {\n        isDisabled: isDisabled,\n        isRequired: isRequired,\n        name: name,\n        form: form,\n        validationBehavior: validationBehavior\n    });\n    return {\n        labelProps: {\n            ...labelProps,\n            onClick: ()=>{\n                if (!props.isDisabled) {\n                    var _ref_current;\n                    (_ref_current = ref.current) === null || _ref_current === void 0 ? void 0 : _ref_current.focus();\n                    // Show the focus ring so the user knows where focus went\n                    (0, $aUnai$setInteractionModality)('keyboard');\n                }\n            }\n        },\n        triggerProps: (0, $aUnai$mergeProps)(domProps, {\n            ...triggerProps,\n            isDisabled: isDisabled,\n            onKeyDown: (0, $aUnai$chain)(triggerProps.onKeyDown, onKeyDown, props.onKeyDown),\n            onKeyUp: props.onKeyUp,\n            'aria-labelledby': [\n                valueId,\n                triggerProps['aria-labelledby'],\n                triggerProps['aria-label'] && !triggerProps['aria-labelledby'] ? triggerProps.id : null\n            ].filter(Boolean).join(' '),\n            onFocus (e) {\n                if (state.isFocused) return;\n                if (props.onFocus) props.onFocus(e);\n                if (props.onFocusChange) props.onFocusChange(true);\n                state.setFocused(true);\n            },\n            onBlur (e) {\n                if (state.isOpen) return;\n                if (props.onBlur) props.onBlur(e);\n                if (props.onFocusChange) props.onFocusChange(false);\n                state.setFocused(false);\n            }\n        }),\n        valueProps: {\n            id: valueId\n        },\n        menuProps: {\n            ...menuProps,\n            autoFocus: state.focusStrategy || true,\n            shouldSelectOnPressUp: true,\n            shouldFocusOnHover: true,\n            disallowEmptySelection: true,\n            linkBehavior: 'selection',\n            onBlur: (e)=>{\n                if (e.currentTarget.contains(e.relatedTarget)) return;\n                if (props.onBlur) props.onBlur(e);\n                if (props.onFocusChange) props.onFocusChange(false);\n                state.setFocused(false);\n            },\n            'aria-labelledby': [\n                fieldProps['aria-labelledby'],\n                triggerProps['aria-label'] && !fieldProps['aria-labelledby'] ? triggerProps.id : null\n            ].filter(Boolean).join(' ')\n        },\n        descriptionProps: descriptionProps,\n        errorMessageProps: errorMessageProps,\n        isInvalid: isInvalid,\n        validationErrors: validationErrors,\n        validationDetails: validationDetails,\n        hiddenSelectProps: {\n            isDisabled: isDisabled,\n            name: name,\n            label: props.label,\n            state: state,\n            triggerRef: ref,\n            form: form\n        }\n    };\n}\n\n\nexport {$58aed456727eb0f3$export$703601b7e90536f8 as selectData, $58aed456727eb0f3$export$e64b2f635402ca43 as useSelect};\n//# sourceMappingURL=useSelect.module.js.map\n","import {selectData as $58aed456727eb0f3$export$703601b7e90536f8} from \"./useSelect.mjs\";\nimport $8BE50$react, {useCallback as $8BE50$useCallback, useRef as $8BE50$useRef} from \"react\";\nimport {useFormReset as $8BE50$useFormReset} from \"@react-aria/utils\";\nimport {useFormValidation as $8BE50$useFormValidation} from \"@react-aria/form\";\nimport {useVisuallyHidden as $8BE50$useVisuallyHidden} from \"@react-aria/visually-hidden\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $bdd25dc72710631f$export$f809e80f58e251d1(props, state, triggerRef) {\n    let data = (0, $58aed456727eb0f3$export$703601b7e90536f8).get(state) || {};\n    let { autoComplete: autoComplete, name: name = data.name, form: form = data.form, isDisabled: isDisabled = data.isDisabled } = props;\n    let { validationBehavior: validationBehavior, isRequired: isRequired } = data;\n    let { visuallyHiddenProps: visuallyHiddenProps } = (0, $8BE50$useVisuallyHidden)({\n        style: {\n            // Prevent page scrolling.\n            position: 'fixed',\n            top: 0,\n            left: 0\n        }\n    });\n    (0, $8BE50$useFormReset)(props.selectRef, state.defaultValue, state.setValue);\n    (0, $8BE50$useFormValidation)({\n        validationBehavior: validationBehavior,\n        focus: ()=>{\n            var _triggerRef_current;\n            return (_triggerRef_current = triggerRef.current) === null || _triggerRef_current === void 0 ? void 0 : _triggerRef_current.focus();\n        }\n    }, state, props.selectRef);\n    let setValue = state.setValue;\n    let onChange = (0, $8BE50$useCallback)((e)=>{\n        if (e.target.multiple) setValue(Array.from(e.target.selectedOptions, (option)=>option.value));\n        else setValue(e.currentTarget.value);\n    }, [\n        setValue\n    ]);\n    var _state_value;\n    // In Safari, the <select> cannot have `display: none` or `hidden` for autofill to work.\n    // In Firefox, there must be a <label> to identify the <select> whereas other browsers\n    // seem to identify it just by surrounding text.\n    // The solution is to use <VisuallyHidden> to hide the elements, which clips the elements to a\n    // 1px rectangle. In addition, we hide from screen readers with aria-hidden, and make the <select>\n    // non tabbable with tabIndex={-1}.\n    return {\n        containerProps: {\n            ...visuallyHiddenProps,\n            'aria-hidden': true,\n            // @ts-ignore\n            ['data-react-aria-prevent-focus']: true,\n            // @ts-ignore\n            ['data-a11y-ignore']: 'aria-hidden-focus'\n        },\n        inputProps: {\n            style: {\n                display: 'none'\n            }\n        },\n        selectProps: {\n            tabIndex: -1,\n            autoComplete: autoComplete,\n            disabled: isDisabled,\n            multiple: state.selectionManager.selectionMode === 'multiple',\n            required: validationBehavior === 'native' && isRequired,\n            name: name,\n            form: form,\n            value: (_state_value = state.value) !== null && _state_value !== void 0 ? _state_value : '',\n            onChange: onChange,\n            onInput: onChange\n        }\n    };\n}\nfunction $bdd25dc72710631f$export$cbd84cdb2e668835(props) {\n    let { state: state, triggerRef: triggerRef, label: label, name: name, form: form, isDisabled: isDisabled } = props;\n    let selectRef = (0, $8BE50$useRef)(null);\n    let inputRef = (0, $8BE50$useRef)(null);\n    let { containerProps: containerProps, selectProps: selectProps } = $bdd25dc72710631f$export$f809e80f58e251d1({\n        ...props,\n        selectRef: state.collection.size <= 300 ? selectRef : inputRef\n    }, state, triggerRef);\n    // If used in a <form>, use a hidden input so the value can be submitted to a server.\n    // If the collection isn't too big, use a hidden <select> element for this so that browser\n    // autofill will work. Otherwise, use an <input type=\"hidden\">.\n    if (state.collection.size <= 300) return /*#__PURE__*/ (0, $8BE50$react).createElement(\"div\", {\n        ...containerProps,\n        \"data-testid\": \"hidden-select-container\"\n    }, /*#__PURE__*/ (0, $8BE50$react).createElement(\"label\", null, label, /*#__PURE__*/ (0, $8BE50$react).createElement(\"select\", {\n        ...selectProps,\n        ref: selectRef\n    }, /*#__PURE__*/ (0, $8BE50$react).createElement(\"option\", null), [\n        ...state.collection.getKeys()\n    ].map((key)=>{\n        let item = state.collection.getItem(key);\n        if (item && item.type === 'item') return /*#__PURE__*/ (0, $8BE50$react).createElement(\"option\", {\n            key: item.key,\n            value: item.key\n        }, item.textValue);\n    }))));\n    else if (name) {\n        let data = (0, $58aed456727eb0f3$export$703601b7e90536f8).get(state) || {};\n        let { validationBehavior: validationBehavior } = data;\n        // Always render at least one hidden input to ensure required form submission.\n        let values = Array.isArray(state.value) ? state.value : [\n            state.value\n        ];\n        if (values.length === 0) values = [\n            null\n        ];\n        let res = values.map((value, i)=>{\n            let inputProps = {\n                type: 'hidden',\n                autoComplete: selectProps.autoComplete,\n                name: name,\n                form: form,\n                disabled: isDisabled,\n                value: value !== null && value !== void 0 ? value : ''\n            };\n            if (validationBehavior === 'native') // Use a hidden <input type=\"text\"> rather than <input type=\"hidden\">\n            // so that an empty value blocks HTML form submission when the field is required.\n            return /*#__PURE__*/ (0, $8BE50$react).createElement(\"input\", {\n                key: i,\n                ...inputProps,\n                ref: i === 0 ? inputRef : null,\n                style: {\n                    display: 'none'\n                },\n                type: \"text\",\n                required: i === 0 ? selectProps.required : false,\n                onChange: ()=>{}\n            });\n            return /*#__PURE__*/ (0, $8BE50$react).createElement(\"input\", {\n                key: i,\n                ...inputProps,\n                ref: i === 0 ? inputRef : null\n            });\n        });\n        return /*#__PURE__*/ (0, $8BE50$react).createElement((0, $8BE50$react).Fragment, null, res);\n    }\n    return null;\n}\n\n\nexport {$bdd25dc72710631f$export$f809e80f58e251d1 as useHiddenSelect, $bdd25dc72710631f$export$cbd84cdb2e668835 as HiddenSelect};\n//# sourceMappingURL=HiddenSelect.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $99b62ae3ff97ec45$export$c5f62239608282b6 = new WeakMap();\nfunction $99b62ae3ff97ec45$export$567fc7097e064344(state, key, role) {\n    if (!state) // this case should only happen in the first render before the tabs are registered\n    return '';\n    if (typeof key === 'string') key = key.replace(/\\s+/g, '');\n    let baseId = $99b62ae3ff97ec45$export$c5f62239608282b6.get(state);\n    if (process.env.NODE_ENV !== 'production' && !baseId) console.error('There is no tab id, please check if you have rendered the tab panel before the tab list.');\n    return `${baseId}-${role}-${key}`;\n}\n\n\nexport {$99b62ae3ff97ec45$export$c5f62239608282b6 as tabsIds, $99b62ae3ff97ec45$export$567fc7097e064344 as generateId};\n//# sourceMappingURL=utils.module.js.map\n","import {generateId as $99b62ae3ff97ec45$export$567fc7097e064344} from \"./utils.mjs\";\nimport {filterDOMProps as $dObGJ$filterDOMProps, useLinkProps as $dObGJ$useLinkProps, mergeProps as $dObGJ$mergeProps} from \"@react-aria/utils\";\nimport {useFocusable as $dObGJ$useFocusable} from \"@react-aria/focus\";\nimport {useSelectableItem as $dObGJ$useSelectableItem} from \"@react-aria/selection\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $0175d55c2a017ebc$export$fdf4756d5b8ef90a(props, state, ref) {\n    let { key: key, isDisabled: propsDisabled, shouldSelectOnPressUp: shouldSelectOnPressUp } = props;\n    let { selectionManager: manager, selectedKey: selectedKey } = state;\n    let isSelected = key === selectedKey;\n    let isDisabled = propsDisabled || state.isDisabled || state.selectionManager.isDisabled(key);\n    let { itemProps: itemProps, isPressed: isPressed } = (0, $dObGJ$useSelectableItem)({\n        selectionManager: manager,\n        key: key,\n        ref: ref,\n        isDisabled: isDisabled,\n        shouldSelectOnPressUp: shouldSelectOnPressUp,\n        linkBehavior: 'selection'\n    });\n    let tabId = (0, $99b62ae3ff97ec45$export$567fc7097e064344)(state, key, 'tab');\n    let tabPanelId = (0, $99b62ae3ff97ec45$export$567fc7097e064344)(state, key, 'tabpanel');\n    let { tabIndex: tabIndex } = itemProps;\n    let item = state.collection.getItem(key);\n    let domProps = (0, $dObGJ$filterDOMProps)(item === null || item === void 0 ? void 0 : item.props, {\n        labelable: true\n    });\n    delete domProps.id;\n    let linkProps = (0, $dObGJ$useLinkProps)(item === null || item === void 0 ? void 0 : item.props);\n    let { focusableProps: focusableProps } = (0, $dObGJ$useFocusable)({\n        isDisabled: isDisabled\n    }, ref);\n    return {\n        tabProps: (0, $dObGJ$mergeProps)(domProps, focusableProps, linkProps, itemProps, {\n            id: tabId,\n            'aria-selected': isSelected,\n            'aria-disabled': isDisabled || undefined,\n            'aria-controls': isSelected ? tabPanelId : undefined,\n            tabIndex: isDisabled ? undefined : tabIndex,\n            role: 'tab'\n        }),\n        isSelected: isSelected,\n        isDisabled: isDisabled,\n        isPressed: isPressed\n    };\n}\n\n\nexport {$0175d55c2a017ebc$export$fdf4756d5b8ef90a as useTab};\n//# sourceMappingURL=useTab.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $bfc6f2d60b8a4c40$export$15010ca3c1abe90b {\n    getKeyLeftOf(key) {\n        if (this.flipDirection) return this.getNextKey(key);\n        return this.getPreviousKey(key);\n    }\n    getKeyRightOf(key) {\n        if (this.flipDirection) return this.getPreviousKey(key);\n        return this.getNextKey(key);\n    }\n    isDisabled(key) {\n        var _this_collection_getItem_props, _this_collection_getItem;\n        return this.disabledKeys.has(key) || !!((_this_collection_getItem = this.collection.getItem(key)) === null || _this_collection_getItem === void 0 ? void 0 : (_this_collection_getItem_props = _this_collection_getItem.props) === null || _this_collection_getItem_props === void 0 ? void 0 : _this_collection_getItem_props.isDisabled);\n    }\n    getFirstKey() {\n        let key = this.collection.getFirstKey();\n        if (key != null && this.isDisabled(key)) key = this.getNextKey(key);\n        return key;\n    }\n    getLastKey() {\n        let key = this.collection.getLastKey();\n        if (key != null && this.isDisabled(key)) key = this.getPreviousKey(key);\n        return key;\n    }\n    getKeyAbove(key) {\n        if (this.tabDirection) return null;\n        return this.getPreviousKey(key);\n    }\n    getKeyBelow(key) {\n        if (this.tabDirection) return null;\n        return this.getNextKey(key);\n    }\n    getNextKey(startKey) {\n        let key = startKey;\n        do {\n            key = this.collection.getKeyAfter(key);\n            if (key == null) key = this.collection.getFirstKey();\n        }while (key != null && this.isDisabled(key));\n        return key;\n    }\n    getPreviousKey(startKey) {\n        let key = startKey;\n        do {\n            key = this.collection.getKeyBefore(key);\n            if (key == null) key = this.collection.getLastKey();\n        }while (key != null && this.isDisabled(key));\n        return key;\n    }\n    constructor(collection, direction, orientation, disabledKeys = new Set()){\n        this.collection = collection;\n        this.flipDirection = direction === 'rtl' && orientation === 'horizontal';\n        this.disabledKeys = disabledKeys;\n        this.tabDirection = orientation === 'horizontal';\n    }\n}\n\n\nexport {$bfc6f2d60b8a4c40$export$15010ca3c1abe90b as TabsKeyboardDelegate};\n//# sourceMappingURL=TabsKeyboardDelegate.module.js.map\n","import {tabsIds as $99b62ae3ff97ec45$export$c5f62239608282b6} from \"./utils.mjs\";\nimport {TabsKeyboardDelegate as $bfc6f2d60b8a4c40$export$15010ca3c1abe90b} from \"./TabsKeyboardDelegate.mjs\";\nimport {useId as $bQNZs$useId, useLabels as $bQNZs$useLabels, mergeProps as $bQNZs$mergeProps} from \"@react-aria/utils\";\nimport {useLocale as $bQNZs$useLocale} from \"@react-aria/i18n\";\nimport {useMemo as $bQNZs$useMemo} from \"react\";\nimport {useSelectableCollection as $bQNZs$useSelectableCollection} from \"@react-aria/selection\";\n\n/*\n* Copyright 2020 Adobe. All rights reserved.\n* This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License. You may obtain a copy\n* of the License at http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software distributed under\n* the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n* OF ANY KIND, either express or implied. See the License for the specific language\n* governing permissions and limitations under the License.\n*/ \n\n\n\n\n\nfunction $58d314389b21fa3f$export$773e389e644c5874(props, state, ref) {\n    let { orientation: orientation = 'horizontal', keyboardActivation: keyboardActivation = 'automatic' } = props;\n    let { collection: collection, selectionManager: manager, disabledKeys: disabledKeys } = state;\n    let { direction: direction } = (0, $bQNZs$useLocale)();\n    let delegate = (0, $bQNZs$useMemo)(()=>new (0, $bfc6f2d60b8a4c40$export$15010ca3c1abe90b)(collection, direction, orientation, disabledKeys), [\n        collection,\n        disabledKeys,\n        orientation,\n        direction\n    ]);\n    let { collectionProps: collectionProps } = (0, $bQNZs$useSelectableCollection)({\n        ref: ref,\n        selectionManager: manager,\n        keyboardDelegate: delegate,\n        selectOnFocus: keyboardActivation === 'automatic',\n        disallowEmptySelection: true,\n        scrollRef: ref,\n        linkBehavior: 'selection'\n    });\n    // Compute base id for all tabs\n    let tabsId = (0, $bQNZs$useId)();\n    (0, $99b62ae3ff97ec45$export$c5f62239608282b6).set(state, tabsId);\n    let tabListLabelProps = (0, $bQNZs$useLabels)({\n        ...props,\n        id: tabsId\n    });\n    return {\n        tabListProps: {\n            ...(0, $bQNZs$mergeProps)(collectionProps, tabListLabelProps),\n            role: 'tablist',\n            'aria-orientation': orientation,\n            tabIndex: undefined\n        }\n    };\n}\n\n\nexport {$58d314389b21fa3f$export$773e389e644c5874 as useTabList};\n//# sourceMappingURL=useTabList.module.js.map\n","import {filterDOMProps as $kwmr2$filterDOMProps, mergeProps as $kwmr2$mergeProps} from \"@react-aria/utils\";\nimport {useHover as $kwmr2$useHover} from \"@react-aria/interactions\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $326e436e94273fe1$export$1c4b08e0eca38426(props, state) {\n    let domProps = (0, $kwmr2$filterDOMProps)(props, {\n        labelable: true\n    });\n    let { hoverProps: hoverProps } = (0, $kwmr2$useHover)({\n        onHoverStart: ()=>state === null || state === void 0 ? void 0 : state.open(true),\n        onHoverEnd: ()=>state === null || state === void 0 ? void 0 : state.close()\n    });\n    return {\n        tooltipProps: (0, $kwmr2$mergeProps)(domProps, hoverProps, {\n            role: 'tooltip'\n        })\n    };\n}\n\n\nexport {$326e436e94273fe1$export$1c4b08e0eca38426 as useTooltip};\n//# sourceMappingURL=useTooltip.module.js.map\n","import {getInteractionModality as $6VwSn$getInteractionModality, isFocusVisible as $6VwSn$isFocusVisible, useHover as $6VwSn$useHover, useFocusable as $6VwSn$useFocusable} from \"@react-aria/interactions\";\nimport {useId as $6VwSn$useId, mergeProps as $6VwSn$mergeProps} from \"@react-aria/utils\";\nimport {useRef as $6VwSn$useRef, useEffect as $6VwSn$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $4e1b34546679e357$export$a6da6c504e4bba8b(props, state, ref) {\n    let { isDisabled: isDisabled, trigger: trigger, shouldCloseOnPress: shouldCloseOnPress = true } = props;\n    let tooltipId = (0, $6VwSn$useId)();\n    let isHovered = (0, $6VwSn$useRef)(false);\n    let isFocused = (0, $6VwSn$useRef)(false);\n    let handleShow = ()=>{\n        if (isHovered.current || isFocused.current) state.open(isFocused.current);\n    };\n    let handleHide = (immediate)=>{\n        if (!isHovered.current && !isFocused.current) state.close(immediate);\n    };\n    (0, $6VwSn$useEffect)(()=>{\n        let onKeyDown = (e)=>{\n            if (ref && ref.current) // Escape after clicking something can give it keyboard focus\n            // dismiss tooltip on esc key press\n            {\n                if (e.key === 'Escape') {\n                    e.stopPropagation();\n                    state.close(true);\n                }\n            }\n        };\n        if (state.isOpen) {\n            document.addEventListener('keydown', onKeyDown, true);\n            return ()=>{\n                document.removeEventListener('keydown', onKeyDown, true);\n            };\n        }\n    }, [\n        ref,\n        state\n    ]);\n    let onHoverStart = ()=>{\n        if (trigger === 'focus') return;\n        // In chrome, if you hover a trigger, then another element obscures it, due to keyboard\n        // interactions for example, hover will end. When hover is restored after that element disappears,\n        // focus moves on for example, then the tooltip will reopen. We check the modality to know if the hover\n        // is the result of moving the mouse.\n        if ((0, $6VwSn$getInteractionModality)() === 'pointer') isHovered.current = true;\n        else isHovered.current = false;\n        handleShow();\n    };\n    let onHoverEnd = ()=>{\n        if (trigger === 'focus') return;\n        // no matter how the trigger is left, we should close the tooltip\n        isFocused.current = false;\n        isHovered.current = false;\n        handleHide();\n    };\n    let onPressStart = ()=>{\n        // if shouldCloseOnPress is false, we should not close the tooltip\n        if (!shouldCloseOnPress) return;\n        // no matter how the trigger is pressed, we should close the tooltip\n        isFocused.current = false;\n        isHovered.current = false;\n        handleHide(true);\n    };\n    let onFocus = ()=>{\n        let isVisible = (0, $6VwSn$isFocusVisible)();\n        if (isVisible) {\n            isFocused.current = true;\n            handleShow();\n        }\n    };\n    let onBlur = ()=>{\n        isFocused.current = false;\n        isHovered.current = false;\n        handleHide(true);\n    };\n    let { hoverProps: hoverProps } = (0, $6VwSn$useHover)({\n        isDisabled: isDisabled,\n        onHoverStart: onHoverStart,\n        onHoverEnd: onHoverEnd\n    });\n    let { focusableProps: focusableProps } = (0, $6VwSn$useFocusable)({\n        isDisabled: isDisabled,\n        onFocus: onFocus,\n        onBlur: onBlur\n    }, ref);\n    return {\n        triggerProps: {\n            'aria-describedby': state.isOpen ? tooltipId : undefined,\n            ...(0, $6VwSn$mergeProps)(focusableProps, hoverProps, {\n                onPointerDown: onPressStart,\n                onKeyDown: onPressStart\n            }),\n            tabIndex: undefined\n        },\n        tooltipProps: {\n            id: tooltipId\n        }\n    };\n}\n\n\nexport {$4e1b34546679e357$export$a6da6c504e4bba8b as useTooltipTrigger};\n//# sourceMappingURL=useTooltipTrigger.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {createHideableComponent as $kc2Tc$createHideableComponent} from \"@react-aria/collections\";\nimport $kc2Tc$react, {createContext as $kc2Tc$createContext} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $01b77f81d0f07f68$export$75b6ee27786ba447 = /*#__PURE__*/ (0, $kc2Tc$createContext)({});\nconst $01b77f81d0f07f68$export$b04be29aa201d4f5 = /*#__PURE__*/ (0, $kc2Tc$createHideableComponent)(function Label(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $01b77f81d0f07f68$export$75b6ee27786ba447);\n    let { elementType: ElementType = 'label', ...labelProps } = props;\n    // @ts-ignore\n    return /*#__PURE__*/ (0, $kc2Tc$react).createElement(ElementType, {\n        className: \"react-aria-Label\",\n        ...labelProps,\n        ref: ref\n    });\n});\n\n\nexport {$01b77f81d0f07f68$export$75b6ee27786ba447 as LabelContext, $01b77f81d0f07f68$export$b04be29aa201d4f5 as Label};\n//# sourceMappingURL=Label.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3, useSlot as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8} from \"./utils.mjs\";\nimport {LabelContext as $01b77f81d0f07f68$export$75b6ee27786ba447} from \"./Label.mjs\";\nimport {useProgressBar as $hU2kz$useProgressBar} from \"react-aria\";\nimport {clamp as $hU2kz$clamp} from \"@react-stately/utils\";\nimport {filterDOMProps as $hU2kz$filterDOMProps, mergeProps as $hU2kz$mergeProps} from \"@react-aria/utils\";\nimport $hU2kz$react, {createContext as $hU2kz$createContext, forwardRef as $hU2kz$forwardRef} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nconst $0393f8ab869a0f1a$export$e9f3bf65a26ce129 = /*#__PURE__*/ (0, $hU2kz$createContext)(null);\nconst $0393f8ab869a0f1a$export$c17561cb55d4db30 = /*#__PURE__*/ (0, $hU2kz$forwardRef)(function ProgressBar(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $0393f8ab869a0f1a$export$e9f3bf65a26ce129);\n    let { value: value = 0, minValue: minValue = 0, maxValue: maxValue = 100, isIndeterminate: isIndeterminate = false } = props;\n    value = (0, $hU2kz$clamp)(value, minValue, maxValue);\n    let [labelRef, label] = (0, $64fa3d84918910a7$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let { progressBarProps: progressBarProps, labelProps: labelProps } = (0, $hU2kz$useProgressBar)({\n        ...props,\n        label: label\n    });\n    // Calculate the width of the progress bar as a percentage\n    let percentage = isIndeterminate ? undefined : (value - minValue) / (maxValue - minValue) * 100;\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-ProgressBar',\n        values: {\n            percentage: percentage,\n            valueText: progressBarProps['aria-valuetext'],\n            isIndeterminate: isIndeterminate\n        }\n    });\n    let DOMProps = (0, $hU2kz$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $hU2kz$react).createElement(\"div\", {\n        ...(0, $hU2kz$mergeProps)(DOMProps, renderProps, progressBarProps),\n        ref: ref,\n        slot: props.slot || undefined\n    }, /*#__PURE__*/ (0, $hU2kz$react).createElement((0, $01b77f81d0f07f68$export$75b6ee27786ba447).Provider, {\n        value: {\n            ...labelProps,\n            ref: labelRef,\n            elementType: 'span'\n        }\n    }, renderProps.children));\n});\n\n\nexport {$0393f8ab869a0f1a$export$e9f3bf65a26ce129 as ProgressBarContext, $0393f8ab869a0f1a$export$c17561cb55d4db30 as ProgressBar};\n//# sourceMappingURL=ProgressBar.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {ProgressBarContext as $0393f8ab869a0f1a$export$e9f3bf65a26ce129} from \"./ProgressBar.mjs\";\nimport {announce as $fM325$announce} from \"@react-aria/live-announcer\";\nimport {useButton as $fM325$useButton, useFocusRing as $fM325$useFocusRing, useHover as $fM325$useHover, useId as $fM325$useId, mergeProps as $fM325$mergeProps} from \"react-aria\";\nimport {createHideableComponent as $fM325$createHideableComponent} from \"@react-aria/collections\";\nimport {filterDOMProps as $fM325$filterDOMProps} from \"@react-aria/utils\";\nimport $fM325$react, {createContext as $fM325$createContext, useRef as $fM325$useRef, useEffect as $fM325$useEffect} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nconst $d2b4bc8c273e7be6$export$24d547caef80ccd1 = /*#__PURE__*/ (0, $fM325$createContext)({});\nconst $d2b4bc8c273e7be6$export$353f5b6fc5456de1 = /*#__PURE__*/ (0, $fM325$createHideableComponent)(function Button(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $d2b4bc8c273e7be6$export$24d547caef80ccd1);\n    let ctx = props;\n    let { isPending: isPending } = ctx;\n    let { buttonProps: buttonProps, isPressed: isPressed } = (0, $fM325$useButton)(props, ref);\n    buttonProps = $d2b4bc8c273e7be6$var$useDisableInteractions(buttonProps, isPending);\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $fM325$useFocusRing)(props);\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $fM325$useHover)({\n        ...props,\n        isDisabled: props.isDisabled || isPending\n    });\n    let renderValues = {\n        isHovered: isHovered,\n        isPressed: (ctx.isPressed || isPressed) && !isPending,\n        isFocused: isFocused,\n        isFocusVisible: isFocusVisible,\n        isDisabled: props.isDisabled || false,\n        isPending: isPending !== null && isPending !== void 0 ? isPending : false\n    };\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        values: renderValues,\n        defaultClassName: 'react-aria-Button'\n    });\n    let buttonId = (0, $fM325$useId)(buttonProps.id);\n    let progressId = (0, $fM325$useId)();\n    let ariaLabelledby = buttonProps['aria-labelledby'];\n    if (isPending) {\n        // aria-labelledby wins over aria-label\n        // https://www.w3.org/TR/accname-1.2/#computation-steps\n        if (ariaLabelledby) ariaLabelledby = `${ariaLabelledby} ${progressId}`;\n        else if (buttonProps['aria-label']) ariaLabelledby = `${buttonId} ${progressId}`;\n    }\n    let wasPending = (0, $fM325$useRef)(isPending);\n    (0, $fM325$useEffect)(()=>{\n        let message = {\n            'aria-labelledby': ariaLabelledby || buttonId\n        };\n        if (!wasPending.current && isFocused && isPending) (0, $fM325$announce)(message, 'assertive');\n        else if (wasPending.current && isFocused && !isPending) (0, $fM325$announce)(message, 'assertive');\n        wasPending.current = isPending;\n    }, [\n        isPending,\n        isFocused,\n        ariaLabelledby,\n        buttonId\n    ]);\n    let DOMProps = (0, $fM325$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.onClick;\n    return /*#__PURE__*/ (0, $fM325$react).createElement(\"button\", {\n        ...(0, $fM325$mergeProps)(DOMProps, renderProps, buttonProps, focusProps, hoverProps),\n        // When the button is in a pending state, we want to stop implicit form submission (ie. when the user presses enter on a text input).\n        // We do this by changing the button's type to button.\n        type: buttonProps.type === 'submit' && isPending ? 'button' : buttonProps.type,\n        id: buttonId,\n        ref: ref,\n        \"aria-labelledby\": ariaLabelledby,\n        slot: props.slot || undefined,\n        \"aria-disabled\": isPending ? 'true' : buttonProps['aria-disabled'],\n        \"data-disabled\": props.isDisabled || undefined,\n        \"data-pressed\": renderValues.isPressed || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-pending\": isPending || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined\n    }, /*#__PURE__*/ (0, $fM325$react).createElement((0, $0393f8ab869a0f1a$export$e9f3bf65a26ce129).Provider, {\n        value: {\n            id: progressId\n        }\n    }, renderProps.children));\n});\nfunction $d2b4bc8c273e7be6$var$useDisableInteractions(props, isPending) {\n    // Don't allow interaction while isPending is true\n    if (isPending) {\n        for(const key in props)if (key.startsWith('on') && !(key.includes('Focus') || key.includes('Blur'))) props[key] = undefined;\n        props.href = undefined;\n        props.target = undefined;\n    }\n    return props;\n}\n\n\nexport {$d2b4bc8c273e7be6$export$24d547caef80ccd1 as ButtonContext, $d2b4bc8c273e7be6$export$353f5b6fc5456de1 as Button};\n//# sourceMappingURL=Button.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport $1B3Dx$react, {createContext as $1B3Dx$createContext, forwardRef as $1B3Dx$forwardRef} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $514c0188e459b4c0$export$9afb8bc826b033ea = /*#__PURE__*/ (0, $1B3Dx$createContext)({});\nconst $514c0188e459b4c0$export$5f1af8db9871e1d6 = /*#__PURE__*/ (0, $1B3Dx$forwardRef)(function Text(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $514c0188e459b4c0$export$9afb8bc826b033ea);\n    let { elementType: ElementType = 'span', ...domProps } = props;\n    // @ts-ignore\n    return /*#__PURE__*/ (0, $1B3Dx$react).createElement(ElementType, {\n        className: \"react-aria-Text\",\n        ...domProps,\n        ref: ref\n    });\n});\n\n\nexport {$514c0188e459b4c0$export$9afb8bc826b033ea as TextContext, $514c0188e459b4c0$export$5f1af8db9871e1d6 as Text};\n//# sourceMappingURL=Text.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $a02d57049d202695$export$d085fb9e920b5ca7 {\n    *[Symbol.iterator]() {\n        yield* this.iterable;\n    }\n    get size() {\n        return this._size;\n    }\n    getKeys() {\n        return this.keyMap.keys();\n    }\n    getKeyBefore(key) {\n        let node = this.keyMap.get(key);\n        var _node_prevKey;\n        return node ? (_node_prevKey = node.prevKey) !== null && _node_prevKey !== void 0 ? _node_prevKey : null : null;\n    }\n    getKeyAfter(key) {\n        let node = this.keyMap.get(key);\n        var _node_nextKey;\n        return node ? (_node_nextKey = node.nextKey) !== null && _node_nextKey !== void 0 ? _node_nextKey : null : null;\n    }\n    getFirstKey() {\n        return this.firstKey;\n    }\n    getLastKey() {\n        return this.lastKey;\n    }\n    getItem(key) {\n        var _this_keyMap_get;\n        return (_this_keyMap_get = this.keyMap.get(key)) !== null && _this_keyMap_get !== void 0 ? _this_keyMap_get : null;\n    }\n    at(idx) {\n        const keys = [\n            ...this.getKeys()\n        ];\n        return this.getItem(keys[idx]);\n    }\n    getChildren(key) {\n        let node = this.keyMap.get(key);\n        return (node === null || node === void 0 ? void 0 : node.childNodes) || [];\n    }\n    constructor(nodes){\n        this.keyMap = new Map();\n        this.firstKey = null;\n        this.lastKey = null;\n        this.iterable = nodes;\n        let visit = (node)=>{\n            this.keyMap.set(node.key, node);\n            if (node.childNodes && node.type === 'section') for (let child of node.childNodes)visit(child);\n        };\n        for (let node of nodes)visit(node);\n        let last = null;\n        let index = 0;\n        let size = 0;\n        for (let [key, node] of this.keyMap){\n            if (last) {\n                last.nextKey = key;\n                node.prevKey = last.key;\n            } else {\n                this.firstKey = key;\n                node.prevKey = undefined;\n            }\n            if (node.type === 'item') node.index = index++;\n            // Only count sections and items when determining size so that\n            // loaders and separators in RAC/S2 don't influence the emptyState determination\n            if (node.type === 'section' || node.type === 'item') size++;\n            last = node;\n            // Set nextKey as undefined since this might be the last node\n            // If it isn't the last node, last.nextKey will properly set at start of new loop\n            last.nextKey = undefined;\n        }\n        this._size = size;\n        var _last_key;\n        this.lastKey = (_last_key = last === null || last === void 0 ? void 0 : last.key) !== null && _last_key !== void 0 ? _last_key : null;\n    }\n}\n\n\nexport {$a02d57049d202695$export$d085fb9e920b5ca7 as ListCollection};\n//# sourceMappingURL=ListCollection.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $e40ea825a81a3709$export$52baac22726c72bf extends Set {\n    constructor(keys, anchorKey, currentKey){\n        super(keys);\n        if (keys instanceof $e40ea825a81a3709$export$52baac22726c72bf) {\n            this.anchorKey = anchorKey !== null && anchorKey !== void 0 ? anchorKey : keys.anchorKey;\n            this.currentKey = currentKey !== null && currentKey !== void 0 ? currentKey : keys.currentKey;\n        } else {\n            this.anchorKey = anchorKey !== null && anchorKey !== void 0 ? anchorKey : null;\n            this.currentKey = currentKey !== null && currentKey !== void 0 ? currentKey : null;\n        }\n    }\n}\n\n\nexport {$e40ea825a81a3709$export$52baac22726c72bf as Selection};\n//# sourceMappingURL=Selection.module.js.map\n","import {Selection as $e40ea825a81a3709$export$52baac22726c72bf} from \"./Selection.mjs\";\nimport {useControlledState as $6tM1y$useControlledState} from \"@react-stately/utils\";\nimport {useRef as $6tM1y$useRef, useState as $6tM1y$useState, useMemo as $6tM1y$useMemo, useEffect as $6tM1y$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $7af3f5b51489e0b5$var$equalSets(setA, setB) {\n    if (setA.size !== setB.size) return false;\n    for (let item of setA){\n        if (!setB.has(item)) return false;\n    }\n    return true;\n}\nfunction $7af3f5b51489e0b5$export$253fe78d46329472(props) {\n    let { selectionMode: selectionMode = 'none', disallowEmptySelection: disallowEmptySelection = false, allowDuplicateSelectionEvents: allowDuplicateSelectionEvents, selectionBehavior: selectionBehaviorProp = 'toggle', disabledBehavior: disabledBehavior = 'all' } = props;\n    // We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.\n    // But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).\n    let isFocusedRef = (0, $6tM1y$useRef)(false);\n    let [, setFocused] = (0, $6tM1y$useState)(false);\n    let focusedKeyRef = (0, $6tM1y$useRef)(null);\n    let childFocusStrategyRef = (0, $6tM1y$useRef)(null);\n    let [, setFocusedKey] = (0, $6tM1y$useState)(null);\n    let selectedKeysProp = (0, $6tM1y$useMemo)(()=>$7af3f5b51489e0b5$var$convertSelection(props.selectedKeys), [\n        props.selectedKeys\n    ]);\n    let defaultSelectedKeys = (0, $6tM1y$useMemo)(()=>$7af3f5b51489e0b5$var$convertSelection(props.defaultSelectedKeys, new (0, $e40ea825a81a3709$export$52baac22726c72bf)()), [\n        props.defaultSelectedKeys\n    ]);\n    let [selectedKeys, setSelectedKeys] = (0, $6tM1y$useControlledState)(selectedKeysProp, defaultSelectedKeys, props.onSelectionChange);\n    let disabledKeysProp = (0, $6tM1y$useMemo)(()=>props.disabledKeys ? new Set(props.disabledKeys) : new Set(), [\n        props.disabledKeys\n    ]);\n    let [selectionBehavior, setSelectionBehavior] = (0, $6tM1y$useState)(selectionBehaviorProp);\n    // If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press\n    // to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.\n    if (selectionBehaviorProp === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) setSelectionBehavior('replace');\n    // If the selectionBehavior prop changes, update the state as well.\n    let lastSelectionBehavior = (0, $6tM1y$useRef)(selectionBehaviorProp);\n    (0, $6tM1y$useEffect)(()=>{\n        if (selectionBehaviorProp !== lastSelectionBehavior.current) {\n            setSelectionBehavior(selectionBehaviorProp);\n            lastSelectionBehavior.current = selectionBehaviorProp;\n        }\n    }, [\n        selectionBehaviorProp\n    ]);\n    return {\n        selectionMode: selectionMode,\n        disallowEmptySelection: disallowEmptySelection,\n        selectionBehavior: selectionBehavior,\n        setSelectionBehavior: setSelectionBehavior,\n        get isFocused () {\n            return isFocusedRef.current;\n        },\n        setFocused (f) {\n            isFocusedRef.current = f;\n            setFocused(f);\n        },\n        get focusedKey () {\n            return focusedKeyRef.current;\n        },\n        get childFocusStrategy () {\n            return childFocusStrategyRef.current;\n        },\n        setFocusedKey (k, childFocusStrategy = 'first') {\n            focusedKeyRef.current = k;\n            childFocusStrategyRef.current = childFocusStrategy;\n            setFocusedKey(k);\n        },\n        selectedKeys: selectedKeys,\n        setSelectedKeys (keys) {\n            if (allowDuplicateSelectionEvents || !$7af3f5b51489e0b5$var$equalSets(keys, selectedKeys)) setSelectedKeys(keys);\n        },\n        disabledKeys: disabledKeysProp,\n        disabledBehavior: disabledBehavior\n    };\n}\nfunction $7af3f5b51489e0b5$var$convertSelection(selection, defaultValue) {\n    if (!selection) return defaultValue;\n    return selection === 'all' ? 'all' : new (0, $e40ea825a81a3709$export$52baac22726c72bf)(selection);\n}\n\n\nexport {$7af3f5b51489e0b5$export$253fe78d46329472 as useMultipleSelectionState};\n//# sourceMappingURL=useMultipleSelectionState.module.js.map\n","import {Selection as $e40ea825a81a3709$export$52baac22726c72bf} from \"./Selection.mjs\";\nimport {compareNodeOrder as $jkhUT$compareNodeOrder, getFirstItem as $jkhUT$getFirstItem, getChildNodes as $jkhUT$getChildNodes} from \"@react-stately/collections\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nclass $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {\n    /**\n   * The type of selection that is allowed in the collection.\n   */ get selectionMode() {\n        return this.state.selectionMode;\n    }\n    /**\n   * Whether the collection allows empty selection.\n   */ get disallowEmptySelection() {\n        return this.state.disallowEmptySelection;\n    }\n    /**\n   * The selection behavior for the collection.\n   */ get selectionBehavior() {\n        return this.state.selectionBehavior;\n    }\n    /**\n   * Sets the selection behavior for the collection.\n   */ setSelectionBehavior(selectionBehavior) {\n        this.state.setSelectionBehavior(selectionBehavior);\n    }\n    /**\n   * Whether the collection is currently focused.\n   */ get isFocused() {\n        return this.state.isFocused;\n    }\n    /**\n   * Sets whether the collection is focused.\n   */ setFocused(isFocused) {\n        this.state.setFocused(isFocused);\n    }\n    /**\n   * The current focused key in the collection.\n   */ get focusedKey() {\n        return this.state.focusedKey;\n    }\n    /** Whether the first or last child of the focused key should receive focus. */ get childFocusStrategy() {\n        return this.state.childFocusStrategy;\n    }\n    /**\n   * Sets the focused key.\n   */ setFocusedKey(key, childFocusStrategy) {\n        if (key == null || this.collection.getItem(key)) this.state.setFocusedKey(key, childFocusStrategy);\n    }\n    /**\n   * The currently selected keys in the collection.\n   */ get selectedKeys() {\n        return this.state.selectedKeys === 'all' ? new Set(this.getSelectAllKeys()) : this.state.selectedKeys;\n    }\n    /**\n   * The raw selection value for the collection.\n   * Either 'all' for select all, or a set of keys.\n   */ get rawSelection() {\n        return this.state.selectedKeys;\n    }\n    /**\n   * Returns whether a key is selected.\n   */ isSelected(key) {\n        if (this.state.selectionMode === 'none') return false;\n        let mappedKey = this.getKey(key);\n        if (mappedKey == null) return false;\n        return this.state.selectedKeys === 'all' ? this.canSelectItem(mappedKey) : this.state.selectedKeys.has(mappedKey);\n    }\n    /**\n   * Whether the selection is empty.\n   */ get isEmpty() {\n        return this.state.selectedKeys !== 'all' && this.state.selectedKeys.size === 0;\n    }\n    /**\n   * Whether all items in the collection are selected.\n   */ get isSelectAll() {\n        if (this.isEmpty) return false;\n        if (this.state.selectedKeys === 'all') return true;\n        if (this._isSelectAll != null) return this._isSelectAll;\n        let allKeys = this.getSelectAllKeys();\n        let selectedKeys = this.state.selectedKeys;\n        this._isSelectAll = allKeys.every((k)=>selectedKeys.has(k));\n        return this._isSelectAll;\n    }\n    get firstSelectedKey() {\n        let first = null;\n        for (let key of this.state.selectedKeys){\n            let item = this.collection.getItem(key);\n            if (!first || item && (0, $jkhUT$compareNodeOrder)(this.collection, item, first) < 0) first = item;\n        }\n        var _first_key;\n        return (_first_key = first === null || first === void 0 ? void 0 : first.key) !== null && _first_key !== void 0 ? _first_key : null;\n    }\n    get lastSelectedKey() {\n        let last = null;\n        for (let key of this.state.selectedKeys){\n            let item = this.collection.getItem(key);\n            if (!last || item && (0, $jkhUT$compareNodeOrder)(this.collection, item, last) > 0) last = item;\n        }\n        var _last_key;\n        return (_last_key = last === null || last === void 0 ? void 0 : last.key) !== null && _last_key !== void 0 ? _last_key : null;\n    }\n    get disabledKeys() {\n        return this.state.disabledKeys;\n    }\n    get disabledBehavior() {\n        return this.state.disabledBehavior;\n    }\n    /**\n   * Extends the selection to the given key.\n   */ extendSelection(toKey) {\n        if (this.selectionMode === 'none') return;\n        if (this.selectionMode === 'single') {\n            this.replaceSelection(toKey);\n            return;\n        }\n        let mappedToKey = this.getKey(toKey);\n        if (mappedToKey == null) return;\n        let selection;\n        // Only select the one key if coming from a select all.\n        if (this.state.selectedKeys === 'all') selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)([\n            mappedToKey\n        ], mappedToKey, mappedToKey);\n        else {\n            let selectedKeys = this.state.selectedKeys;\n            var _selectedKeys_anchorKey;\n            let anchorKey = (_selectedKeys_anchorKey = selectedKeys.anchorKey) !== null && _selectedKeys_anchorKey !== void 0 ? _selectedKeys_anchorKey : mappedToKey;\n            selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)(selectedKeys, anchorKey, mappedToKey);\n            var _selectedKeys_currentKey;\n            for (let key of this.getKeyRange(anchorKey, (_selectedKeys_currentKey = selectedKeys.currentKey) !== null && _selectedKeys_currentKey !== void 0 ? _selectedKeys_currentKey : mappedToKey))selection.delete(key);\n            for (let key of this.getKeyRange(mappedToKey, anchorKey))if (this.canSelectItem(key)) selection.add(key);\n        }\n        this.state.setSelectedKeys(selection);\n    }\n    getKeyRange(from, to) {\n        let fromItem = this.collection.getItem(from);\n        let toItem = this.collection.getItem(to);\n        if (fromItem && toItem) {\n            if ((0, $jkhUT$compareNodeOrder)(this.collection, fromItem, toItem) <= 0) return this.getKeyRangeInternal(from, to);\n            return this.getKeyRangeInternal(to, from);\n        }\n        return [];\n    }\n    getKeyRangeInternal(from, to) {\n        var _this_layoutDelegate;\n        if ((_this_layoutDelegate = this.layoutDelegate) === null || _this_layoutDelegate === void 0 ? void 0 : _this_layoutDelegate.getKeyRange) return this.layoutDelegate.getKeyRange(from, to);\n        let keys = [];\n        let key = from;\n        while(key != null){\n            let item = this.collection.getItem(key);\n            if (item && (item.type === 'item' || item.type === 'cell' && this.allowsCellSelection)) keys.push(key);\n            if (key === to) return keys;\n            key = this.collection.getKeyAfter(key);\n        }\n        return [];\n    }\n    getKey(key) {\n        let item = this.collection.getItem(key);\n        if (!item) // ¯\\_(ツ)_/¯\n        return key;\n        // If cell selection is allowed, just return the key.\n        if (item.type === 'cell' && this.allowsCellSelection) return key;\n        // Find a parent item to select\n        while(item && item.type !== 'item' && item.parentKey != null)item = this.collection.getItem(item.parentKey);\n        if (!item || item.type !== 'item') return null;\n        return item.key;\n    }\n    /**\n   * Toggles whether the given key is selected.\n   */ toggleSelection(key) {\n        if (this.selectionMode === 'none') return;\n        if (this.selectionMode === 'single' && !this.isSelected(key)) {\n            this.replaceSelection(key);\n            return;\n        }\n        let mappedKey = this.getKey(key);\n        if (mappedKey == null) return;\n        let keys = new (0, $e40ea825a81a3709$export$52baac22726c72bf)(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);\n        if (keys.has(mappedKey)) keys.delete(mappedKey);\n        else if (this.canSelectItem(mappedKey)) {\n            keys.add(mappedKey);\n            keys.anchorKey = mappedKey;\n            keys.currentKey = mappedKey;\n        }\n        if (this.disallowEmptySelection && keys.size === 0) return;\n        this.state.setSelectedKeys(keys);\n    }\n    /**\n   * Replaces the selection with only the given key.\n   */ replaceSelection(key) {\n        if (this.selectionMode === 'none') return;\n        let mappedKey = this.getKey(key);\n        if (mappedKey == null) return;\n        let selection = this.canSelectItem(mappedKey) ? new (0, $e40ea825a81a3709$export$52baac22726c72bf)([\n            mappedKey\n        ], mappedKey, mappedKey) : new (0, $e40ea825a81a3709$export$52baac22726c72bf)();\n        this.state.setSelectedKeys(selection);\n    }\n    /**\n   * Replaces the selection with the given keys.\n   */ setSelectedKeys(keys) {\n        if (this.selectionMode === 'none') return;\n        let selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)();\n        for (let key of keys){\n            let mappedKey = this.getKey(key);\n            if (mappedKey != null) {\n                selection.add(mappedKey);\n                if (this.selectionMode === 'single') break;\n            }\n        }\n        this.state.setSelectedKeys(selection);\n    }\n    getSelectAllKeys() {\n        let keys = [];\n        let addKeys = (key)=>{\n            while(key != null){\n                if (this.canSelectItem(key)) {\n                    var _getFirstItem;\n                    let item = this.collection.getItem(key);\n                    if ((item === null || item === void 0 ? void 0 : item.type) === 'item') keys.push(key);\n                    var _getFirstItem_key;\n                    // Add child keys. If cell selection is allowed, then include item children too.\n                    if ((item === null || item === void 0 ? void 0 : item.hasChildNodes) && (this.allowsCellSelection || item.type !== 'item')) addKeys((_getFirstItem_key = (_getFirstItem = (0, $jkhUT$getFirstItem)((0, $jkhUT$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key) !== null && _getFirstItem_key !== void 0 ? _getFirstItem_key : null);\n                }\n                key = this.collection.getKeyAfter(key);\n            }\n        };\n        addKeys(this.collection.getFirstKey());\n        return keys;\n    }\n    /**\n   * Selects all items in the collection.\n   */ selectAll() {\n        if (!this.isSelectAll && this.selectionMode === 'multiple') this.state.setSelectedKeys('all');\n    }\n    /**\n   * Removes all keys from the selection.\n   */ clearSelection() {\n        if (!this.disallowEmptySelection && (this.state.selectedKeys === 'all' || this.state.selectedKeys.size > 0)) this.state.setSelectedKeys(new (0, $e40ea825a81a3709$export$52baac22726c72bf)());\n    }\n    /**\n   * Toggles between select all and an empty selection.\n   */ toggleSelectAll() {\n        if (this.isSelectAll) this.clearSelection();\n        else this.selectAll();\n    }\n    select(key, e) {\n        if (this.selectionMode === 'none') return;\n        if (this.selectionMode === 'single') {\n            if (this.isSelected(key) && !this.disallowEmptySelection) this.toggleSelection(key);\n            else this.replaceSelection(key);\n        } else if (this.selectionBehavior === 'toggle' || e && (e.pointerType === 'touch' || e.pointerType === 'virtual')) // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n        this.toggleSelection(key);\n        else this.replaceSelection(key);\n    }\n    /**\n   * Returns whether the current selection is equal to the given selection.\n   */ isSelectionEqual(selection) {\n        if (selection === this.state.selectedKeys) return true;\n        // Check if the set of keys match.\n        let selectedKeys = this.selectedKeys;\n        if (selection.size !== selectedKeys.size) return false;\n        for (let key of selection){\n            if (!selectedKeys.has(key)) return false;\n        }\n        for (let key of selectedKeys){\n            if (!selection.has(key)) return false;\n        }\n        return true;\n    }\n    canSelectItem(key) {\n        var _item_props;\n        if (this.state.selectionMode === 'none' || this.state.disabledKeys.has(key)) return false;\n        let item = this.collection.getItem(key);\n        if (!item || (item === null || item === void 0 ? void 0 : (_item_props = item.props) === null || _item_props === void 0 ? void 0 : _item_props.isDisabled) || item.type === 'cell' && !this.allowsCellSelection) return false;\n        return true;\n    }\n    isDisabled(key) {\n        var _this_collection_getItem_props, _this_collection_getItem;\n        return this.state.disabledBehavior === 'all' && (this.state.disabledKeys.has(key) || !!((_this_collection_getItem = this.collection.getItem(key)) === null || _this_collection_getItem === void 0 ? void 0 : (_this_collection_getItem_props = _this_collection_getItem.props) === null || _this_collection_getItem_props === void 0 ? void 0 : _this_collection_getItem_props.isDisabled));\n    }\n    isLink(key) {\n        var _this_collection_getItem_props, _this_collection_getItem;\n        return !!((_this_collection_getItem = this.collection.getItem(key)) === null || _this_collection_getItem === void 0 ? void 0 : (_this_collection_getItem_props = _this_collection_getItem.props) === null || _this_collection_getItem_props === void 0 ? void 0 : _this_collection_getItem_props.href);\n    }\n    getItemProps(key) {\n        var _this_collection_getItem;\n        return (_this_collection_getItem = this.collection.getItem(key)) === null || _this_collection_getItem === void 0 ? void 0 : _this_collection_getItem.props;\n    }\n    withCollection(collection) {\n        return new $d496c0a20b6e58ec$export$6c8a5aaad13c9852(collection, this.state, {\n            allowsCellSelection: this.allowsCellSelection,\n            layoutDelegate: this.layoutDelegate || undefined\n        });\n    }\n    constructor(collection, state, options){\n        this.collection = collection;\n        this.state = state;\n        var _options_allowsCellSelection;\n        this.allowsCellSelection = (_options_allowsCellSelection = options === null || options === void 0 ? void 0 : options.allowsCellSelection) !== null && _options_allowsCellSelection !== void 0 ? _options_allowsCellSelection : false;\n        this._isSelectAll = null;\n        this.layoutDelegate = (options === null || options === void 0 ? void 0 : options.layoutDelegate) || null;\n    }\n}\n\n\nexport {$d496c0a20b6e58ec$export$6c8a5aaad13c9852 as SelectionManager};\n//# sourceMappingURL=SelectionManager.module.js.map\n","import {ListCollection as $a02d57049d202695$export$d085fb9e920b5ca7} from \"./ListCollection.mjs\";\nimport {useMultipleSelectionState as $d5vlZ$useMultipleSelectionState, SelectionManager as $d5vlZ$SelectionManager} from \"@react-stately/selection\";\nimport {useMemo as $d5vlZ$useMemo, useCallback as $d5vlZ$useCallback, useRef as $d5vlZ$useRef, useEffect as $d5vlZ$useEffect} from \"react\";\nimport {useCollection as $d5vlZ$useCollection} from \"@react-stately/collections\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $e72dd72e1c76a225$export$2f645645f7bca764(props) {\n    let { filter: filter, layoutDelegate: layoutDelegate } = props;\n    let selectionState = (0, $d5vlZ$useMultipleSelectionState)(props);\n    let disabledKeys = (0, $d5vlZ$useMemo)(()=>props.disabledKeys ? new Set(props.disabledKeys) : new Set(), [\n        props.disabledKeys\n    ]);\n    let factory = (0, $d5vlZ$useCallback)((nodes)=>filter ? new (0, $a02d57049d202695$export$d085fb9e920b5ca7)(filter(nodes)) : new (0, $a02d57049d202695$export$d085fb9e920b5ca7)(nodes), [\n        filter\n    ]);\n    let context = (0, $d5vlZ$useMemo)(()=>({\n            suppressTextValueWarning: props.suppressTextValueWarning\n        }), [\n        props.suppressTextValueWarning\n    ]);\n    let collection = (0, $d5vlZ$useCollection)(props, factory, context);\n    let selectionManager = (0, $d5vlZ$useMemo)(()=>new (0, $d5vlZ$SelectionManager)(collection, selectionState, {\n            layoutDelegate: layoutDelegate\n        }), [\n        collection,\n        selectionState,\n        layoutDelegate\n    ]);\n    $e72dd72e1c76a225$var$useFocusedKeyReset(collection, selectionManager);\n    return {\n        collection: collection,\n        disabledKeys: disabledKeys,\n        selectionManager: selectionManager\n    };\n}\nfunction $e72dd72e1c76a225$export$ba9d38c0f1bf2b36(state, filterFn) {\n    let collection = (0, $d5vlZ$useMemo)(()=>filterFn ? state.collection.filter(filterFn) : state.collection, [\n        state.collection,\n        filterFn\n    ]);\n    let selectionManager = state.selectionManager.withCollection(collection);\n    $e72dd72e1c76a225$var$useFocusedKeyReset(collection, selectionManager);\n    return {\n        collection: collection,\n        selectionManager: selectionManager,\n        disabledKeys: state.disabledKeys\n    };\n}\nfunction $e72dd72e1c76a225$var$useFocusedKeyReset(collection, selectionManager) {\n    // Reset focused key if that item is deleted from the collection.\n    const cachedCollection = (0, $d5vlZ$useRef)(null);\n    (0, $d5vlZ$useEffect)(()=>{\n        if (selectionManager.focusedKey != null && !collection.getItem(selectionManager.focusedKey) && cachedCollection.current) {\n            const startItem = cachedCollection.current.getItem(selectionManager.focusedKey);\n            const cachedItemNodes = [\n                ...cachedCollection.current.getKeys()\n            ].map((key)=>{\n                const itemNode = cachedCollection.current.getItem(key);\n                return (itemNode === null || itemNode === void 0 ? void 0 : itemNode.type) === 'item' ? itemNode : null;\n            }).filter((node)=>node !== null);\n            const itemNodes = [\n                ...collection.getKeys()\n            ].map((key)=>{\n                const itemNode = collection.getItem(key);\n                return (itemNode === null || itemNode === void 0 ? void 0 : itemNode.type) === 'item' ? itemNode : null;\n            }).filter((node)=>node !== null);\n            var _cachedItemNodes_length, _itemNodes_length;\n            const diff = ((_cachedItemNodes_length = cachedItemNodes === null || cachedItemNodes === void 0 ? void 0 : cachedItemNodes.length) !== null && _cachedItemNodes_length !== void 0 ? _cachedItemNodes_length : 0) - ((_itemNodes_length = itemNodes === null || itemNodes === void 0 ? void 0 : itemNodes.length) !== null && _itemNodes_length !== void 0 ? _itemNodes_length : 0);\n            var _startItem_index, _startItem_index1, _itemNodes_length1;\n            let index = Math.min(diff > 1 ? Math.max(((_startItem_index = startItem === null || startItem === void 0 ? void 0 : startItem.index) !== null && _startItem_index !== void 0 ? _startItem_index : 0) - diff + 1, 0) : (_startItem_index1 = startItem === null || startItem === void 0 ? void 0 : startItem.index) !== null && _startItem_index1 !== void 0 ? _startItem_index1 : 0, ((_itemNodes_length1 = itemNodes === null || itemNodes === void 0 ? void 0 : itemNodes.length) !== null && _itemNodes_length1 !== void 0 ? _itemNodes_length1 : 0) - 1);\n            let newNode = null;\n            let isReverseSearching = false;\n            while(index >= 0){\n                if (!selectionManager.isDisabled(itemNodes[index].key)) {\n                    newNode = itemNodes[index];\n                    break;\n                }\n                // Find next, not disabled item.\n                if (index < itemNodes.length - 1 && !isReverseSearching) index++;\n                else {\n                    isReverseSearching = true;\n                    var _startItem_index2, _startItem_index3;\n                    if (index > ((_startItem_index2 = startItem === null || startItem === void 0 ? void 0 : startItem.index) !== null && _startItem_index2 !== void 0 ? _startItem_index2 : 0)) index = (_startItem_index3 = startItem === null || startItem === void 0 ? void 0 : startItem.index) !== null && _startItem_index3 !== void 0 ? _startItem_index3 : 0;\n                    index--;\n                }\n            }\n            selectionManager.setFocusedKey(newNode ? newNode.key : null);\n        }\n        cachedCollection.current = collection;\n    }, [\n        collection,\n        selectionManager\n    ]);\n}\n\n\nexport {$e72dd72e1c76a225$export$2f645645f7bca764 as useListState, $e72dd72e1c76a225$export$ba9d38c0f1bf2b36 as UNSTABLE_useFilteredListState};\n//# sourceMappingURL=useListState.module.js.map\n","import {useListState as $e72dd72e1c76a225$export$2f645645f7bca764} from \"./useListState.mjs\";\nimport {useControlledState as $eBozH$useControlledState} from \"@react-stately/utils\";\nimport {useMemo as $eBozH$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $a0d645289fe9b86b$export$e7f05e985daf4b5f(props) {\n    var _props_defaultSelectedKey;\n    let [selectedKey, setSelectedKey] = (0, $eBozH$useControlledState)(props.selectedKey, (_props_defaultSelectedKey = props.defaultSelectedKey) !== null && _props_defaultSelectedKey !== void 0 ? _props_defaultSelectedKey : null, props.onSelectionChange);\n    let selectedKeys = (0, $eBozH$useMemo)(()=>selectedKey != null ? [\n            selectedKey\n        ] : [], [\n        selectedKey\n    ]);\n    let { collection: collection, disabledKeys: disabledKeys, selectionManager: selectionManager } = (0, $e72dd72e1c76a225$export$2f645645f7bca764)({\n        ...props,\n        selectionMode: 'single',\n        disallowEmptySelection: true,\n        allowDuplicateSelectionEvents: true,\n        selectedKeys: selectedKeys,\n        onSelectionChange: (keys)=>{\n            // impossible, but TS doesn't know that\n            if (keys === 'all') return;\n            var _keys_values_next_value;\n            let key = (_keys_values_next_value = keys.values().next().value) !== null && _keys_values_next_value !== void 0 ? _keys_values_next_value : null;\n            // Always fire onSelectionChange, even if the key is the same\n            // as the current key (useControlledState does not).\n            if (key === selectedKey && props.onSelectionChange) props.onSelectionChange(key);\n            setSelectedKey(key);\n        }\n    });\n    let selectedItem = selectedKey != null ? collection.getItem(selectedKey) : null;\n    return {\n        collection: collection,\n        disabledKeys: disabledKeys,\n        selectionManager: selectionManager,\n        selectedKey: selectedKey,\n        setSelectedKey: setSelectedKey,\n        selectedItem: selectedItem\n    };\n}\n\n\nexport {$a0d645289fe9b86b$export$e7f05e985daf4b5f as useSingleSelectListState};\n//# sourceMappingURL=useSingleSelectListState.module.js.map\n","import {useCallback as $hnMvi$useCallback} from \"react\";\nimport {useControlledState as $hnMvi$useControlledState} from \"@react-stately/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $fc909762b330b746$export$61c6a8c84e605fb6(props) {\n    let [isOpen, setOpen] = (0, $hnMvi$useControlledState)(props.isOpen, props.defaultOpen || false, props.onOpenChange);\n    const open = (0, $hnMvi$useCallback)(()=>{\n        setOpen(true);\n    }, [\n        setOpen\n    ]);\n    const close = (0, $hnMvi$useCallback)(()=>{\n        setOpen(false);\n    }, [\n        setOpen\n    ]);\n    const toggle = (0, $hnMvi$useCallback)(()=>{\n        setOpen(!isOpen);\n    }, [\n        setOpen,\n        isOpen\n    ]);\n    return {\n        isOpen: isOpen,\n        setOpen: setOpen,\n        open: open,\n        close: close,\n        toggle: toggle\n    };\n}\n\n\nexport {$fc909762b330b746$export$61c6a8c84e605fb6 as useOverlayTriggerState};\n//# sourceMappingURL=useOverlayTriggerState.module.js.map\n","var $22195056771860be$exports = {};\n$22195056771860be$exports = {\n    \"rangeUnderflow\": (args)=>`Value must be ${args.minValue} or later.`,\n    \"rangeOverflow\": (args)=>`Value must be ${args.maxValue} or earlier.`,\n    \"rangeReversed\": `Start date must be before end date.`,\n    \"unavailableDate\": `Selected date unavailable.`\n};\n\n\nexport {$22195056771860be$exports as default};\n//# sourceMappingURL=en-US.module.js.map\n","import $umoiH$arAEmodulejs from \"./ar-AE.mjs\";\nimport $umoiH$bgBGmodulejs from \"./bg-BG.mjs\";\nimport $umoiH$csCZmodulejs from \"./cs-CZ.mjs\";\nimport $umoiH$daDKmodulejs from \"./da-DK.mjs\";\nimport $umoiH$deDEmodulejs from \"./de-DE.mjs\";\nimport $umoiH$elGRmodulejs from \"./el-GR.mjs\";\nimport $umoiH$enUSmodulejs from \"./en-US.mjs\";\nimport $umoiH$esESmodulejs from \"./es-ES.mjs\";\nimport $umoiH$etEEmodulejs from \"./et-EE.mjs\";\nimport $umoiH$fiFImodulejs from \"./fi-FI.mjs\";\nimport $umoiH$frFRmodulejs from \"./fr-FR.mjs\";\nimport $umoiH$heILmodulejs from \"./he-IL.mjs\";\nimport $umoiH$hrHRmodulejs from \"./hr-HR.mjs\";\nimport $umoiH$huHUmodulejs from \"./hu-HU.mjs\";\nimport $umoiH$itITmodulejs from \"./it-IT.mjs\";\nimport $umoiH$jaJPmodulejs from \"./ja-JP.mjs\";\nimport $umoiH$koKRmodulejs from \"./ko-KR.mjs\";\nimport $umoiH$ltLTmodulejs from \"./lt-LT.mjs\";\nimport $umoiH$lvLVmodulejs from \"./lv-LV.mjs\";\nimport $umoiH$nbNOmodulejs from \"./nb-NO.mjs\";\nimport $umoiH$nlNLmodulejs from \"./nl-NL.mjs\";\nimport $umoiH$plPLmodulejs from \"./pl-PL.mjs\";\nimport $umoiH$ptBRmodulejs from \"./pt-BR.mjs\";\nimport $umoiH$ptPTmodulejs from \"./pt-PT.mjs\";\nimport $umoiH$roROmodulejs from \"./ro-RO.mjs\";\nimport $umoiH$ruRUmodulejs from \"./ru-RU.mjs\";\nimport $umoiH$skSKmodulejs from \"./sk-SK.mjs\";\nimport $umoiH$slSImodulejs from \"./sl-SI.mjs\";\nimport $umoiH$srSPmodulejs from \"./sr-SP.mjs\";\nimport $umoiH$svSEmodulejs from \"./sv-SE.mjs\";\nimport $umoiH$trTRmodulejs from \"./tr-TR.mjs\";\nimport $umoiH$ukUAmodulejs from \"./uk-UA.mjs\";\nimport $umoiH$zhCNmodulejs from \"./zh-CN.mjs\";\nimport $umoiH$zhTWmodulejs from \"./zh-TW.mjs\";\n\nvar $452ac34de8c2444e$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$452ac34de8c2444e$exports = {\n    \"ar-AE\": $umoiH$arAEmodulejs,\n    \"bg-BG\": $umoiH$bgBGmodulejs,\n    \"cs-CZ\": $umoiH$csCZmodulejs,\n    \"da-DK\": $umoiH$daDKmodulejs,\n    \"de-DE\": $umoiH$deDEmodulejs,\n    \"el-GR\": $umoiH$elGRmodulejs,\n    \"en-US\": $umoiH$enUSmodulejs,\n    \"es-ES\": $umoiH$esESmodulejs,\n    \"et-EE\": $umoiH$etEEmodulejs,\n    \"fi-FI\": $umoiH$fiFImodulejs,\n    \"fr-FR\": $umoiH$frFRmodulejs,\n    \"he-IL\": $umoiH$heILmodulejs,\n    \"hr-HR\": $umoiH$hrHRmodulejs,\n    \"hu-HU\": $umoiH$huHUmodulejs,\n    \"it-IT\": $umoiH$itITmodulejs,\n    \"ja-JP\": $umoiH$jaJPmodulejs,\n    \"ko-KR\": $umoiH$koKRmodulejs,\n    \"lt-LT\": $umoiH$ltLTmodulejs,\n    \"lv-LV\": $umoiH$lvLVmodulejs,\n    \"nb-NO\": $umoiH$nbNOmodulejs,\n    \"nl-NL\": $umoiH$nlNLmodulejs,\n    \"pl-PL\": $umoiH$plPLmodulejs,\n    \"pt-BR\": $umoiH$ptBRmodulejs,\n    \"pt-PT\": $umoiH$ptPTmodulejs,\n    \"ro-RO\": $umoiH$roROmodulejs,\n    \"ru-RU\": $umoiH$ruRUmodulejs,\n    \"sk-SK\": $umoiH$skSKmodulejs,\n    \"sl-SI\": $umoiH$slSImodulejs,\n    \"sr-SP\": $umoiH$srSPmodulejs,\n    \"sv-SE\": $umoiH$svSEmodulejs,\n    \"tr-TR\": $umoiH$trTRmodulejs,\n    \"uk-UA\": $umoiH$ukUAmodulejs,\n    \"zh-CN\": $umoiH$zhCNmodulejs,\n    \"zh-TW\": $umoiH$zhTWmodulejs\n};\n\n\nexport {$452ac34de8c2444e$exports as default};\n//# sourceMappingURL=intlStrings.module.js.map\n","import $bUJMr$intlStringsmodulejs from \"./intlStrings.mjs\";\nimport {DateFormatter as $bUJMr$DateFormatter, Time as $bUJMr$Time, toCalendar as $bUJMr$toCalendar, now as $bUJMr$now, getLocalTimeZone as $bUJMr$getLocalTimeZone, toCalendarDate as $bUJMr$toCalendarDate, toCalendarDateTime as $bUJMr$toCalendarDateTime} from \"@internationalized/date\";\nimport {LocalizedStringDictionary as $bUJMr$LocalizedStringDictionary, LocalizedStringFormatter as $bUJMr$LocalizedStringFormatter} from \"@internationalized/string\";\nimport {mergeValidation as $bUJMr$mergeValidation, VALID_VALIDITY_STATE as $bUJMr$VALID_VALIDITY_STATE} from \"@react-stately/form\";\nimport {useState as $bUJMr$useState} from \"react\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nconst $35a22f14a1f04b11$var$dictionary = new (0, $bUJMr$LocalizedStringDictionary)((0, ($parcel$interopDefault($bUJMr$intlStringsmodulejs))));\nfunction $35a22f14a1f04b11$var$getLocale() {\n    // Match browser language setting here, NOT react-aria's I18nProvider, so that we match other browser-provided\n    // validation messages, which to not respect our provider's language.\n    // @ts-ignore\n    let locale = typeof navigator !== 'undefined' && (navigator.language || navigator.userLanguage) || 'en-US';\n    try {\n        Intl.DateTimeFormat.supportedLocalesOf([\n            locale\n        ]);\n    } catch  {\n        locale = 'en-US';\n    }\n    return locale;\n}\nfunction $35a22f14a1f04b11$export$f18627323ab57ac0(value, minValue, maxValue, isDateUnavailable, options) {\n    let rangeOverflow = value != null && maxValue != null && value.compare(maxValue) > 0;\n    let rangeUnderflow = value != null && minValue != null && value.compare(minValue) < 0;\n    let isUnavailable = value != null && (isDateUnavailable === null || isDateUnavailable === void 0 ? void 0 : isDateUnavailable(value)) || false;\n    let isInvalid = rangeOverflow || rangeUnderflow || isUnavailable;\n    let errors = [];\n    if (isInvalid) {\n        let locale = $35a22f14a1f04b11$var$getLocale();\n        let strings = (0, $bUJMr$LocalizedStringDictionary).getGlobalDictionaryForPackage('@react-stately/datepicker') || $35a22f14a1f04b11$var$dictionary;\n        let formatter = new (0, $bUJMr$LocalizedStringFormatter)(locale, strings);\n        let dateFormatter = new (0, $bUJMr$DateFormatter)(locale, $35a22f14a1f04b11$export$7e319ea407e63bc0({}, options));\n        let timeZone = dateFormatter.resolvedOptions().timeZone;\n        if (rangeUnderflow && minValue != null) errors.push(formatter.format('rangeUnderflow', {\n            minValue: dateFormatter.format(minValue.toDate(timeZone))\n        }));\n        if (rangeOverflow && maxValue != null) errors.push(formatter.format('rangeOverflow', {\n            maxValue: dateFormatter.format(maxValue.toDate(timeZone))\n        }));\n        if (isUnavailable) errors.push(formatter.format('unavailableDate'));\n    }\n    return {\n        isInvalid: isInvalid,\n        validationErrors: errors,\n        validationDetails: {\n            badInput: isUnavailable,\n            customError: false,\n            patternMismatch: false,\n            rangeOverflow: rangeOverflow,\n            rangeUnderflow: rangeUnderflow,\n            stepMismatch: false,\n            tooLong: false,\n            tooShort: false,\n            typeMismatch: false,\n            valueMissing: false,\n            valid: !isInvalid\n        }\n    };\n}\nfunction $35a22f14a1f04b11$export$80ff8fc0ae339c13(value, minValue, maxValue, isDateUnavailable, options) {\n    var _value_start;\n    let startValidation = $35a22f14a1f04b11$export$f18627323ab57ac0((_value_start = value === null || value === void 0 ? void 0 : value.start) !== null && _value_start !== void 0 ? _value_start : null, minValue, maxValue, isDateUnavailable, options);\n    var _value_end;\n    let endValidation = $35a22f14a1f04b11$export$f18627323ab57ac0((_value_end = value === null || value === void 0 ? void 0 : value.end) !== null && _value_end !== void 0 ? _value_end : null, minValue, maxValue, isDateUnavailable, options);\n    let result = (0, $bUJMr$mergeValidation)(startValidation, endValidation);\n    if ((value === null || value === void 0 ? void 0 : value.end) != null && value.start != null && value.end.compare(value.start) < 0) {\n        let strings = (0, $bUJMr$LocalizedStringDictionary).getGlobalDictionaryForPackage('@react-stately/datepicker') || $35a22f14a1f04b11$var$dictionary;\n        result = (0, $bUJMr$mergeValidation)(result, {\n            isInvalid: true,\n            validationErrors: [\n                strings.getStringForLocale('rangeReversed', $35a22f14a1f04b11$var$getLocale())\n            ],\n            validationDetails: {\n                ...(0, $bUJMr$VALID_VALIDITY_STATE),\n                rangeUnderflow: true,\n                rangeOverflow: true,\n                valid: false\n            }\n        });\n    }\n    return result;\n}\nconst $35a22f14a1f04b11$var$DEFAULT_FIELD_OPTIONS = {\n    year: 'numeric',\n    month: 'numeric',\n    day: 'numeric',\n    hour: 'numeric',\n    minute: '2-digit',\n    second: '2-digit'\n};\nconst $35a22f14a1f04b11$var$TWO_DIGIT_FIELD_OPTIONS = {\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n    hour: '2-digit',\n    minute: '2-digit',\n    second: '2-digit'\n};\nfunction $35a22f14a1f04b11$export$7e319ea407e63bc0(fieldOptions, options) {\n    let defaultFieldOptions = options.shouldForceLeadingZeros ? $35a22f14a1f04b11$var$TWO_DIGIT_FIELD_OPTIONS : $35a22f14a1f04b11$var$DEFAULT_FIELD_OPTIONS;\n    fieldOptions = {\n        ...defaultFieldOptions,\n        ...fieldOptions\n    };\n    let granularity = options.granularity || 'minute';\n    let keys = Object.keys(fieldOptions);\n    var _options_maxGranularity;\n    let startIdx = keys.indexOf((_options_maxGranularity = options.maxGranularity) !== null && _options_maxGranularity !== void 0 ? _options_maxGranularity : 'year');\n    if (startIdx < 0) startIdx = 0;\n    let endIdx = keys.indexOf(granularity);\n    if (endIdx < 0) endIdx = 2;\n    if (startIdx > endIdx) throw new Error('maxGranularity must be greater than granularity');\n    let opts = keys.slice(startIdx, endIdx + 1).reduce((opts, key)=>{\n        opts[key] = fieldOptions[key];\n        return opts;\n    }, {});\n    if (options.hourCycle != null) opts.hour12 = options.hourCycle === 12;\n    opts.timeZone = options.timeZone || 'UTC';\n    let hasTime = granularity === 'hour' || granularity === 'minute' || granularity === 'second';\n    if (hasTime && options.timeZone && !options.hideTimeZone) opts.timeZoneName = 'short';\n    if (options.showEra && startIdx === 0) opts.era = 'short';\n    return opts;\n}\nfunction $35a22f14a1f04b11$export$c5221a78ef73c5e9(placeholderValue) {\n    if (placeholderValue && 'hour' in placeholderValue) return placeholderValue;\n    return new (0, $bUJMr$Time)();\n}\nfunction $35a22f14a1f04b11$export$61a490a80c552550(value, calendar) {\n    if (value === null) return null;\n    if (!value) return undefined;\n    return (0, $bUJMr$toCalendar)(value, calendar);\n}\nfunction $35a22f14a1f04b11$export$66aa2b09de4b1ea5(placeholderValue, granularity, calendar, timeZone) {\n    if (placeholderValue) return $35a22f14a1f04b11$export$61a490a80c552550(placeholderValue, calendar);\n    let date = (0, $bUJMr$toCalendar)((0, $bUJMr$now)(timeZone !== null && timeZone !== void 0 ? timeZone : (0, $bUJMr$getLocalTimeZone)()).set({\n        hour: 0,\n        minute: 0,\n        second: 0,\n        millisecond: 0\n    }), calendar);\n    if (granularity === 'year' || granularity === 'month' || granularity === 'day') return (0, $bUJMr$toCalendarDate)(date);\n    if (!timeZone) return (0, $bUJMr$toCalendarDateTime)(date);\n    return date;\n}\nfunction $35a22f14a1f04b11$export$2440da353cedad43(v, granularity) {\n    // Compute default granularity and time zone from the value. If the value becomes null, keep the last values.\n    let defaultTimeZone = v && 'timeZone' in v ? v.timeZone : undefined;\n    let defaultGranularity = v && 'minute' in v ? 'minute' : 'day';\n    // props.granularity must actually exist in the value if one is provided.\n    if (v && granularity && !(granularity in v)) throw new Error('Invalid granularity ' + granularity + ' for value ' + v.toString());\n    let [lastValue, setLastValue] = (0, $bUJMr$useState)([\n        defaultGranularity,\n        defaultTimeZone\n    ]);\n    // If the granularity or time zone changed, update the last value.\n    if (v && (lastValue[0] !== defaultGranularity || lastValue[1] !== defaultTimeZone)) setLastValue([\n        defaultGranularity,\n        defaultTimeZone\n    ]);\n    if (!granularity) granularity = v ? defaultGranularity : lastValue[0];\n    let timeZone = v ? defaultTimeZone : lastValue[1];\n    return [\n        granularity,\n        timeZone\n    ];\n}\n\n\nexport {$35a22f14a1f04b11$export$f18627323ab57ac0 as getValidationResult, $35a22f14a1f04b11$export$7e319ea407e63bc0 as getFormatOptions, $35a22f14a1f04b11$export$80ff8fc0ae339c13 as getRangeValidationResult, $35a22f14a1f04b11$export$c5221a78ef73c5e9 as getPlaceholderTime, $35a22f14a1f04b11$export$61a490a80c552550 as convertValue, $35a22f14a1f04b11$export$66aa2b09de4b1ea5 as createPlaceholderDate, $35a22f14a1f04b11$export$2440da353cedad43 as useDefaultProps};\n//# sourceMappingURL=utils.module.js.map\n","import {LocalizedStringDictionary as $bzTv4$LocalizedStringDictionary} from \"@internationalized/string\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n// These placeholders are based on the strings used by the <input type=\"date\">\n// implementations in Chrome and Firefox. Additional languages are supported\n// here than React Spectrum's typical translations.\nconst $3e3ed55ab2966714$var$placeholders = new (0, $bzTv4$LocalizedStringDictionary)({\n    ach: {\n        year: 'mwaka',\n        month: 'dwe',\n        day: 'nino'\n    },\n    af: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'dd'\n    },\n    am: {\n        year: \"\\u12D3\\u12D3\\u12D3\\u12D3\",\n        month: \"\\u121A\\u121C\",\n        day: \"\\u1240\\u1240\"\n    },\n    an: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    ar: {\n        year: \"\\u0633\\u0646\\u0629\",\n        month: \"\\u0634\\u0647\\u0631\",\n        day: \"\\u064A\\u0648\\u0645\"\n    },\n    ast: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    az: {\n        year: 'iiii',\n        month: 'aa',\n        day: 'gg'\n    },\n    be: {\n        year: \"\\u0433\\u0433\\u0433\\u0433\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0434\\u0434\"\n    },\n    bg: {\n        year: \"\\u0433\\u0433\\u0433\\u0433\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0434\\u0434\"\n    },\n    bn: {\n        year: 'yyyy',\n        month: \"\\u09AE\\u09BF\\u09AE\\u09BF\",\n        day: 'dd'\n    },\n    br: {\n        year: 'bbbb',\n        month: 'mm',\n        day: 'dd'\n    },\n    bs: {\n        year: 'gggg',\n        month: 'mm',\n        day: 'dd'\n    },\n    ca: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    cak: {\n        year: 'jjjj',\n        month: 'ii',\n        day: \"q'q'\"\n    },\n    ckb: {\n        year: \"\\u0633\\u0627\\u06B5\",\n        month: \"\\u0645\\u0627\\u0646\\u06AF\",\n        day: \"\\u0695\\u06C6\\u0698\"\n    },\n    cs: {\n        year: 'rrrr',\n        month: 'mm',\n        day: 'dd'\n    },\n    cy: {\n        year: 'bbbb',\n        month: 'mm',\n        day: 'dd'\n    },\n    da: {\n        year: \"\\xe5\\xe5\\xe5\\xe5\",\n        month: 'mm',\n        day: 'dd'\n    },\n    de: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'tt'\n    },\n    dsb: {\n        year: 'llll',\n        month: 'mm',\n        day: \"\\u017A\\u017A\"\n    },\n    el: {\n        year: \"\\u03B5\\u03B5\\u03B5\\u03B5\",\n        month: \"\\u03BC\\u03BC\",\n        day: \"\\u03B7\\u03B7\"\n    },\n    en: {\n        year: 'yyyy',\n        month: 'mm',\n        day: 'dd'\n    },\n    eo: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'tt'\n    },\n    es: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    et: {\n        year: 'aaaa',\n        month: 'kk',\n        day: 'pp'\n    },\n    eu: {\n        year: 'uuuu',\n        month: 'hh',\n        day: 'ee'\n    },\n    fa: {\n        year: \"\\u0633\\u0627\\u0644\",\n        month: \"\\u0645\\u0627\\u0647\",\n        day: \"\\u0631\\u0648\\u0632\"\n    },\n    ff: {\n        year: 'hhhh',\n        month: 'll',\n        day: \"\\xf1\\xf1\"\n    },\n    fi: {\n        year: 'vvvv',\n        month: 'kk',\n        day: 'pp'\n    },\n    fr: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'jj'\n    },\n    fy: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'dd'\n    },\n    ga: {\n        year: 'bbbb',\n        month: 'mm',\n        day: 'll'\n    },\n    gd: {\n        year: 'bbbb',\n        month: 'mm',\n        day: 'll'\n    },\n    gl: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    he: {\n        year: \"\\u05E9\\u05E0\\u05D4\",\n        month: \"\\u05D7\\u05D5\\u05D3\\u05E9\",\n        day: \"\\u05D9\\u05D5\\u05DD\"\n    },\n    hr: {\n        year: 'gggg',\n        month: 'mm',\n        day: 'dd'\n    },\n    hsb: {\n        year: 'llll',\n        month: 'mm',\n        day: 'dd'\n    },\n    hu: {\n        year: \"\\xe9\\xe9\\xe9\\xe9\",\n        month: 'hh',\n        day: 'nn'\n    },\n    ia: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    id: {\n        year: 'tttt',\n        month: 'bb',\n        day: 'hh'\n    },\n    it: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'gg'\n    },\n    ja: {\n        year: \"\\u5E74\",\n        month: \"\\u6708\",\n        day: \"\\u65E5\"\n    },\n    ka: {\n        year: \"\\u10EC\\u10EC\\u10EC\\u10EC\",\n        month: \"\\u10D7\\u10D7\",\n        day: \"\\u10E0\\u10E0\"\n    },\n    kk: {\n        year: \"\\u0436\\u0436\\u0436\\u0436\",\n        month: \"\\u0430\\u0430\",\n        day: \"\\u043A\\u043A\"\n    },\n    kn: {\n        year: \"\\u0CB5\\u0CB5\\u0CB5\\u0CB5\",\n        month: \"\\u0CAE\\u0CBF\\u0CAE\\u0CC0\",\n        day: \"\\u0CA6\\u0CBF\\u0CA6\\u0CBF\"\n    },\n    ko: {\n        year: \"\\uC5F0\\uB3C4\",\n        month: \"\\uC6D4\",\n        day: \"\\uC77C\"\n    },\n    lb: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'dd'\n    },\n    lo: {\n        year: \"\\u0E9B\\u0E9B\\u0E9B\\u0E9B\",\n        month: \"\\u0E94\\u0E94\",\n        day: \"\\u0EA7\\u0EA7\"\n    },\n    lt: {\n        year: 'mmmm',\n        month: 'mm',\n        day: 'dd'\n    },\n    lv: {\n        year: 'gggg',\n        month: 'mm',\n        day: 'dd'\n    },\n    meh: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    ml: {\n        year: \"\\u0D35\\u0D7C\\u0D37\\u0D02\",\n        month: \"\\u0D2E\\u0D3E\\u0D38\\u0D02\",\n        day: \"\\u0D24\\u0D40\\u0D2F\\u0D24\\u0D3F\"\n    },\n    ms: {\n        year: 'tttt',\n        month: 'mm',\n        day: 'hh'\n    },\n    nb: {\n        year: \"\\xe5\\xe5\\xe5\\xe5\",\n        month: 'mm',\n        day: 'dd'\n    },\n    nl: {\n        year: 'jjjj',\n        month: 'mm',\n        day: 'dd'\n    },\n    nn: {\n        year: \"\\xe5\\xe5\\xe5\\xe5\",\n        month: 'mm',\n        day: 'dd'\n    },\n    no: {\n        year: \"\\xe5\\xe5\\xe5\\xe5\",\n        month: 'mm',\n        day: 'dd'\n    },\n    oc: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'jj'\n    },\n    pl: {\n        year: 'rrrr',\n        month: 'mm',\n        day: 'dd'\n    },\n    pt: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    rm: {\n        year: 'oooo',\n        month: 'mm',\n        day: 'dd'\n    },\n    ro: {\n        year: 'aaaa',\n        month: 'll',\n        day: 'zz'\n    },\n    ru: {\n        year: \"\\u0433\\u0433\\u0433\\u0433\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0434\\u0434\"\n    },\n    sc: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'dd'\n    },\n    scn: {\n        year: 'aaaa',\n        month: 'mm',\n        day: 'jj'\n    },\n    sk: {\n        year: 'rrrr',\n        month: 'mm',\n        day: 'dd'\n    },\n    sl: {\n        year: 'llll',\n        month: 'mm',\n        day: 'dd'\n    },\n    sr: {\n        year: \"\\u0433\\u0433\\u0433\\u0433\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0434\\u0434\"\n    },\n    sv: {\n        year: \"\\xe5\\xe5\\xe5\\xe5\",\n        month: 'mm',\n        day: 'dd'\n    },\n    szl: {\n        year: 'rrrr',\n        month: 'mm',\n        day: 'dd'\n    },\n    tg: {\n        year: \"\\u0441\\u0441\\u0441\\u0441\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0440\\u0440\"\n    },\n    th: {\n        year: \"\\u0E1B\\u0E1B\\u0E1B\\u0E1B\",\n        month: \"\\u0E14\\u0E14\",\n        day: \"\\u0E27\\u0E27\"\n    },\n    tr: {\n        year: 'yyyy',\n        month: 'aa',\n        day: 'gg'\n    },\n    uk: {\n        year: \"\\u0440\\u0440\\u0440\\u0440\",\n        month: \"\\u043C\\u043C\",\n        day: \"\\u0434\\u0434\"\n    },\n    'zh-CN': {\n        year: \"\\u5E74\",\n        month: \"\\u6708\",\n        day: \"\\u65E5\"\n    },\n    'zh-TW': {\n        year: \"\\u5E74\",\n        month: \"\\u6708\",\n        day: \"\\u65E5\"\n    }\n}, 'en');\nfunction $3e3ed55ab2966714$export$d3f5c5e0a5023fa0(field, value, locale) {\n    // Use the actual placeholder value for the era and day period fields.\n    if (field === 'era' || field === 'dayPeriod') return value;\n    if (field === 'year' || field === 'month' || field === 'day') return $3e3ed55ab2966714$var$placeholders.getStringForLocale(field, locale);\n    // For time fields (e.g. hour, minute, etc.), use two dashes as the placeholder.\n    return \"\\u2013\\u2013\";\n}\n\n\nexport {$3e3ed55ab2966714$export$d3f5c5e0a5023fa0 as getPlaceholder};\n//# sourceMappingURL=placeholders.module.js.map\n","import {convertValue as $35a22f14a1f04b11$export$61a490a80c552550, createPlaceholderDate as $35a22f14a1f04b11$export$66aa2b09de4b1ea5, getFormatOptions as $35a22f14a1f04b11$export$7e319ea407e63bc0, getValidationResult as $35a22f14a1f04b11$export$f18627323ab57ac0, useDefaultProps as $35a22f14a1f04b11$export$2440da353cedad43} from \"./utils.mjs\";\nimport {getPlaceholder as $3e3ed55ab2966714$export$d3f5c5e0a5023fa0} from \"./placeholders.mjs\";\nimport {DateFormatter as $g03ag$DateFormatter, isEqualCalendar as $g03ag$isEqualCalendar, toCalendar as $g03ag$toCalendar, GregorianCalendar as $g03ag$GregorianCalendar, getMinimumMonthInYear as $g03ag$getMinimumMonthInYear, getMinimumDayInMonth as $g03ag$getMinimumDayInMonth} from \"@internationalized/date\";\nimport {useFormValidationState as $g03ag$useFormValidationState} from \"@react-stately/form\";\nimport {useControlledState as $g03ag$useControlledState} from \"@react-stately/utils\";\nimport {useMemo as $g03ag$useMemo, useState as $g03ag$useState, useRef as $g03ag$useRef, useEffect as $g03ag$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nconst $3c0fc76039f1c516$var$EDITABLE_SEGMENTS = {\n    year: true,\n    month: true,\n    day: true,\n    hour: true,\n    minute: true,\n    second: true,\n    dayPeriod: true,\n    era: true\n};\nconst $3c0fc76039f1c516$var$PAGE_STEP = {\n    year: 5,\n    month: 2,\n    day: 7,\n    hour: 2,\n    minute: 15,\n    second: 15\n};\nconst $3c0fc76039f1c516$var$TYPE_MAPPING = {\n    // Node seems to convert everything to lowercase...\n    dayperiod: 'dayPeriod',\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts#named_years\n    relatedYear: 'year',\n    yearName: 'literal',\n    unknown: 'literal'\n};\nfunction $3c0fc76039f1c516$export$60e84778edff6d26(props) {\n    let { locale: locale, createCalendar: createCalendar, hideTimeZone: hideTimeZone, isDisabled: isDisabled = false, isReadOnly: isReadOnly = false, isRequired: isRequired = false, minValue: minValue, maxValue: maxValue, isDateUnavailable: isDateUnavailable } = props;\n    let v = props.value || props.defaultValue || props.placeholderValue || null;\n    let [granularity, defaultTimeZone] = (0, $35a22f14a1f04b11$export$2440da353cedad43)(v, props.granularity);\n    let timeZone = defaultTimeZone || 'UTC';\n    // props.granularity must actually exist in the value if one is provided.\n    if (v && !(granularity in v)) throw new Error('Invalid granularity ' + granularity + ' for value ' + v.toString());\n    let defaultFormatter = (0, $g03ag$useMemo)(()=>new (0, $g03ag$DateFormatter)(locale), [\n        locale\n    ]);\n    let calendar = (0, $g03ag$useMemo)(()=>createCalendar(defaultFormatter.resolvedOptions().calendar), [\n        createCalendar,\n        defaultFormatter\n    ]);\n    var _props_defaultValue;\n    let [value, setDate] = (0, $g03ag$useControlledState)(props.value, (_props_defaultValue = props.defaultValue) !== null && _props_defaultValue !== void 0 ? _props_defaultValue : null, props.onChange);\n    let [initialValue] = (0, $g03ag$useState)(value);\n    let calendarValue = (0, $g03ag$useMemo)(()=>{\n        var _convertValue;\n        return (_convertValue = (0, $35a22f14a1f04b11$export$61a490a80c552550)(value, calendar)) !== null && _convertValue !== void 0 ? _convertValue : null;\n    }, [\n        value,\n        calendar\n    ]);\n    // We keep track of the placeholder date separately in state so that onChange is not called\n    // until all segments are set. If the value === null (not undefined), then assume the component\n    // is controlled, so use the placeholder as the value until all segments are entered so it doesn't\n    // change from uncontrolled to controlled and emit a warning.\n    let [placeholderDate, setPlaceholderDate] = (0, $g03ag$useState)(()=>(0, $35a22f14a1f04b11$export$66aa2b09de4b1ea5)(props.placeholderValue, granularity, calendar, defaultTimeZone));\n    let val = calendarValue || placeholderDate;\n    let showEra = calendar.identifier === 'gregory' && val.era === 'BC';\n    let formatOpts = (0, $g03ag$useMemo)(()=>{\n        var _props_maxGranularity;\n        return {\n            granularity: granularity,\n            maxGranularity: (_props_maxGranularity = props.maxGranularity) !== null && _props_maxGranularity !== void 0 ? _props_maxGranularity : 'year',\n            timeZone: defaultTimeZone,\n            hideTimeZone: hideTimeZone,\n            hourCycle: props.hourCycle,\n            showEra: showEra,\n            shouldForceLeadingZeros: props.shouldForceLeadingZeros\n        };\n    }, [\n        props.maxGranularity,\n        granularity,\n        props.hourCycle,\n        props.shouldForceLeadingZeros,\n        defaultTimeZone,\n        hideTimeZone,\n        showEra\n    ]);\n    let opts = (0, $g03ag$useMemo)(()=>(0, $35a22f14a1f04b11$export$7e319ea407e63bc0)({}, formatOpts), [\n        formatOpts\n    ]);\n    let dateFormatter = (0, $g03ag$useMemo)(()=>new (0, $g03ag$DateFormatter)(locale, opts), [\n        locale,\n        opts\n    ]);\n    let resolvedOptions = (0, $g03ag$useMemo)(()=>dateFormatter.resolvedOptions(), [\n        dateFormatter\n    ]);\n    // Determine how many editable segments there are for validation purposes.\n    // The result is cached for performance.\n    let allSegments = (0, $g03ag$useMemo)(()=>dateFormatter.formatToParts(new Date()).filter((seg)=>$3c0fc76039f1c516$var$EDITABLE_SEGMENTS[seg.type]).reduce((p, seg)=>(p[$3c0fc76039f1c516$var$TYPE_MAPPING[seg.type] || seg.type] = true, p), {}), [\n        dateFormatter\n    ]);\n    let [validSegments, setValidSegments] = (0, $g03ag$useState)(()=>props.value || props.defaultValue ? {\n            ...allSegments\n        } : {});\n    let clearedSegment = (0, $g03ag$useRef)(null);\n    // Reset placeholder when calendar changes\n    let lastCalendar = (0, $g03ag$useRef)(calendar);\n    (0, $g03ag$useEffect)(()=>{\n        if (!(0, $g03ag$isEqualCalendar)(calendar, lastCalendar.current)) {\n            lastCalendar.current = calendar;\n            setPlaceholderDate((placeholder)=>Object.keys(validSegments).length > 0 ? (0, $g03ag$toCalendar)(placeholder, calendar) : (0, $35a22f14a1f04b11$export$66aa2b09de4b1ea5)(props.placeholderValue, granularity, calendar, defaultTimeZone));\n        }\n    }, [\n        calendar,\n        granularity,\n        validSegments,\n        defaultTimeZone,\n        props.placeholderValue\n    ]);\n    // If there is a value prop, and some segments were previously placeholders, mark them all as valid.\n    if (value && Object.keys(validSegments).length < Object.keys(allSegments).length) {\n        validSegments = {\n            ...allSegments\n        };\n        setValidSegments(validSegments);\n    }\n    // If the value is set to null and all segments are valid, reset the placeholder.\n    if (value == null && Object.keys(validSegments).length === Object.keys(allSegments).length) {\n        validSegments = {};\n        setValidSegments(validSegments);\n        setPlaceholderDate((0, $35a22f14a1f04b11$export$66aa2b09de4b1ea5)(props.placeholderValue, granularity, calendar, defaultTimeZone));\n    }\n    // If all segments are valid, use the date from state, otherwise use the placeholder date.\n    let displayValue = calendarValue && Object.keys(validSegments).length >= Object.keys(allSegments).length ? calendarValue : placeholderDate;\n    let setValue = (newValue)=>{\n        if (props.isDisabled || props.isReadOnly) return;\n        let validKeys = Object.keys(validSegments);\n        let allKeys = Object.keys(allSegments);\n        // if all the segments are completed or a timefield with everything but am/pm set the time, also ignore when am/pm cleared\n        if (newValue == null) {\n            setDate(null);\n            setPlaceholderDate((0, $35a22f14a1f04b11$export$66aa2b09de4b1ea5)(props.placeholderValue, granularity, calendar, defaultTimeZone));\n            setValidSegments({});\n        } else if (validKeys.length === 0 && clearedSegment.current == null || validKeys.length >= allKeys.length || validKeys.length === allKeys.length - 1 && allSegments.dayPeriod && !validSegments.dayPeriod && clearedSegment.current !== 'dayPeriod') {\n            // If the field was empty (no valid segments) or all segments are completed, commit the new value.\n            // When committing from an empty state, mark every segment as valid so value is committed.\n            if (validKeys.length === 0) {\n                validSegments = {\n                    ...allSegments\n                };\n                setValidSegments(validSegments);\n            }\n            // The display calendar should not have any effect on the emitted value.\n            // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n            newValue = (0, $g03ag$toCalendar)(newValue, (v === null || v === void 0 ? void 0 : v.calendar) || new (0, $g03ag$GregorianCalendar)());\n            setDate(newValue);\n        } else setPlaceholderDate(newValue);\n        clearedSegment.current = null;\n    };\n    let dateValue = (0, $g03ag$useMemo)(()=>displayValue.toDate(timeZone), [\n        displayValue,\n        timeZone\n    ]);\n    let segments = (0, $g03ag$useMemo)(()=>$3c0fc76039f1c516$var$processSegments(dateValue, validSegments, dateFormatter, resolvedOptions, displayValue, calendar, locale, granularity), [\n        dateValue,\n        validSegments,\n        dateFormatter,\n        resolvedOptions,\n        displayValue,\n        calendar,\n        locale,\n        granularity\n    ]);\n    // When the era field appears, mark it valid if the year field is already valid.\n    // If the era field disappears, remove it from the valid segments.\n    if (allSegments.era && validSegments.year && !validSegments.era) {\n        validSegments.era = true;\n        setValidSegments({\n            ...validSegments\n        });\n    } else if (!allSegments.era && validSegments.era) {\n        delete validSegments.era;\n        setValidSegments({\n            ...validSegments\n        });\n    }\n    let markValid = (part)=>{\n        validSegments[part] = true;\n        if (part === 'year' && allSegments.era) validSegments.era = true;\n        setValidSegments({\n            ...validSegments\n        });\n    };\n    let adjustSegment = (type, amount)=>{\n        if (!validSegments[type]) {\n            markValid(type);\n            let validKeys = Object.keys(validSegments);\n            let allKeys = Object.keys(allSegments);\n            if (validKeys.length >= allKeys.length || validKeys.length === allKeys.length - 1 && allSegments.dayPeriod && !validSegments.dayPeriod) setValue(displayValue);\n        } else setValue($3c0fc76039f1c516$var$addSegment(displayValue, type, amount, resolvedOptions));\n    };\n    let builtinValidation = (0, $g03ag$useMemo)(()=>(0, $35a22f14a1f04b11$export$f18627323ab57ac0)(value, minValue, maxValue, isDateUnavailable, formatOpts), [\n        value,\n        minValue,\n        maxValue,\n        isDateUnavailable,\n        formatOpts\n    ]);\n    let validation = (0, $g03ag$useFormValidationState)({\n        ...props,\n        value: value,\n        builtinValidation: builtinValidation\n    });\n    let isValueInvalid = validation.displayValidation.isInvalid;\n    let validationState = props.validationState || (isValueInvalid ? 'invalid' : null);\n    var _props_defaultValue1, _props_maxGranularity;\n    return {\n        ...validation,\n        value: calendarValue,\n        defaultValue: (_props_defaultValue1 = props.defaultValue) !== null && _props_defaultValue1 !== void 0 ? _props_defaultValue1 : initialValue,\n        dateValue: dateValue,\n        calendar: calendar,\n        setValue: setValue,\n        segments: segments,\n        dateFormatter: dateFormatter,\n        validationState: validationState,\n        isInvalid: isValueInvalid,\n        granularity: granularity,\n        maxGranularity: (_props_maxGranularity = props.maxGranularity) !== null && _props_maxGranularity !== void 0 ? _props_maxGranularity : 'year',\n        isDisabled: isDisabled,\n        isReadOnly: isReadOnly,\n        isRequired: isRequired,\n        increment (part) {\n            adjustSegment(part, 1);\n        },\n        decrement (part) {\n            adjustSegment(part, -1);\n        },\n        incrementPage (part) {\n            adjustSegment(part, $3c0fc76039f1c516$var$PAGE_STEP[part] || 1);\n        },\n        decrementPage (part) {\n            adjustSegment(part, -($3c0fc76039f1c516$var$PAGE_STEP[part] || 1));\n        },\n        setSegment (part, v) {\n            markValid(part);\n            setValue($3c0fc76039f1c516$var$setSegment(displayValue, part, v, resolvedOptions));\n        },\n        confirmPlaceholder () {\n            if (props.isDisabled || props.isReadOnly) return;\n            // Confirm the placeholder if only the day period is not filled in.\n            let validKeys = Object.keys(validSegments);\n            let allKeys = Object.keys(allSegments);\n            if (validKeys.length === allKeys.length - 1 && allSegments.dayPeriod && !validSegments.dayPeriod) {\n                validSegments = {\n                    ...allSegments\n                };\n                setValidSegments(validSegments);\n                setValue(displayValue.copy());\n            }\n        },\n        clearSegment (part) {\n            delete validSegments[part];\n            clearedSegment.current = part;\n            setValidSegments({\n                ...validSegments\n            });\n            let placeholder = (0, $35a22f14a1f04b11$export$66aa2b09de4b1ea5)(props.placeholderValue, granularity, calendar, defaultTimeZone);\n            let value = displayValue;\n            // Reset day period to default without changing the hour.\n            if (part === 'dayPeriod' && 'hour' in displayValue && 'hour' in placeholder) {\n                let isPM = displayValue.hour >= 12;\n                let shouldBePM = placeholder.hour >= 12;\n                if (isPM && !shouldBePM) value = displayValue.set({\n                    hour: displayValue.hour - 12\n                });\n                else if (!isPM && shouldBePM) value = displayValue.set({\n                    hour: displayValue.hour + 12\n                });\n            } else if (part === 'hour' && 'hour' in displayValue && displayValue.hour >= 12 && validSegments.dayPeriod) value = displayValue.set({\n                hour: placeholder['hour'] + 12\n            });\n            else if (part in displayValue) value = displayValue.set({\n                [part]: placeholder[part]\n            });\n            setDate(null);\n            setValue(value);\n        },\n        formatValue (fieldOptions) {\n            if (!calendarValue) return '';\n            let formatOptions = (0, $35a22f14a1f04b11$export$7e319ea407e63bc0)(fieldOptions, formatOpts);\n            let formatter = new (0, $g03ag$DateFormatter)(locale, formatOptions);\n            return formatter.format(dateValue);\n        },\n        getDateFormatter (locale, formatOptions) {\n            let newOptions = {\n                ...formatOpts,\n                ...formatOptions\n            };\n            let newFormatOptions = (0, $35a22f14a1f04b11$export$7e319ea407e63bc0)({}, newOptions);\n            return new (0, $g03ag$DateFormatter)(locale, newFormatOptions);\n        }\n    };\n}\nfunction $3c0fc76039f1c516$var$processSegments(dateValue, validSegments, dateFormatter, resolvedOptions, displayValue, calendar, locale, granularity) {\n    let timeValue = [\n        'hour',\n        'minute',\n        'second'\n    ];\n    let segments = dateFormatter.formatToParts(dateValue);\n    let processedSegments = [];\n    for (let segment of segments){\n        let type = $3c0fc76039f1c516$var$TYPE_MAPPING[segment.type] || segment.type;\n        let isEditable = $3c0fc76039f1c516$var$EDITABLE_SEGMENTS[type];\n        if (type === 'era' && calendar.getEras().length === 1) isEditable = false;\n        let isPlaceholder = $3c0fc76039f1c516$var$EDITABLE_SEGMENTS[type] && !validSegments[type];\n        let placeholder = $3c0fc76039f1c516$var$EDITABLE_SEGMENTS[type] ? (0, $3e3ed55ab2966714$export$d3f5c5e0a5023fa0)(type, segment.value, locale) : null;\n        let dateSegment = {\n            type: type,\n            text: isPlaceholder ? placeholder : segment.value,\n            ...$3c0fc76039f1c516$var$getSegmentLimits(displayValue, type, resolvedOptions),\n            isPlaceholder: isPlaceholder,\n            placeholder: placeholder,\n            isEditable: isEditable\n        };\n        // There is an issue in RTL languages where time fields render (minute:hour) instead of (hour:minute).\n        // To force an LTR direction on the time field since, we wrap the time segments in LRI (left-to-right) isolate unicode. See https://www.w3.org/International/questions/qa-bidi-unicode-controls.\n        // These unicode characters will be added to the array of processed segments as literals and will mark the start and end of the embedded direction change.\n        if (type === 'hour') {\n            // This marks the start of the embedded direction change.\n            processedSegments.push({\n                type: 'literal',\n                text: '\\u2066',\n                ...$3c0fc76039f1c516$var$getSegmentLimits(displayValue, 'literal', resolvedOptions),\n                isPlaceholder: false,\n                placeholder: '',\n                isEditable: false\n            });\n            processedSegments.push(dateSegment);\n            // This marks the end of the embedded direction change in the case that the granularity it set to \"hour\".\n            if (type === granularity) processedSegments.push({\n                type: 'literal',\n                text: '\\u2069',\n                ...$3c0fc76039f1c516$var$getSegmentLimits(displayValue, 'literal', resolvedOptions),\n                isPlaceholder: false,\n                placeholder: '',\n                isEditable: false\n            });\n        } else if (timeValue.includes(type) && type === granularity) {\n            processedSegments.push(dateSegment);\n            // This marks the end of the embedded direction change.\n            processedSegments.push({\n                type: 'literal',\n                text: '\\u2069',\n                ...$3c0fc76039f1c516$var$getSegmentLimits(displayValue, 'literal', resolvedOptions),\n                isPlaceholder: false,\n                placeholder: '',\n                isEditable: false\n            });\n        } else // We only want to \"wrap\" the unicode around segments that are hour, minute, or second. If they aren't, just process as normal.\n        processedSegments.push(dateSegment);\n    }\n    return processedSegments;\n}\nfunction $3c0fc76039f1c516$var$getSegmentLimits(date, type, options) {\n    switch(type){\n        case 'era':\n            {\n                let eras = date.calendar.getEras();\n                return {\n                    value: eras.indexOf(date.era),\n                    minValue: 0,\n                    maxValue: eras.length - 1\n                };\n            }\n        case 'year':\n            return {\n                value: date.year,\n                minValue: 1,\n                maxValue: date.calendar.getYearsInEra(date)\n            };\n        case 'month':\n            return {\n                value: date.month,\n                minValue: (0, $g03ag$getMinimumMonthInYear)(date),\n                maxValue: date.calendar.getMonthsInYear(date)\n            };\n        case 'day':\n            return {\n                value: date.day,\n                minValue: (0, $g03ag$getMinimumDayInMonth)(date),\n                maxValue: date.calendar.getDaysInMonth(date)\n            };\n    }\n    if ('hour' in date) switch(type){\n        case 'dayPeriod':\n            return {\n                value: date.hour >= 12 ? 12 : 0,\n                minValue: 0,\n                maxValue: 12\n            };\n        case 'hour':\n            if (options.hour12) {\n                let isPM = date.hour >= 12;\n                return {\n                    value: date.hour,\n                    minValue: isPM ? 12 : 0,\n                    maxValue: isPM ? 23 : 11\n                };\n            }\n            return {\n                value: date.hour,\n                minValue: 0,\n                maxValue: 23\n            };\n        case 'minute':\n            return {\n                value: date.minute,\n                minValue: 0,\n                maxValue: 59\n            };\n        case 'second':\n            return {\n                value: date.second,\n                minValue: 0,\n                maxValue: 59\n            };\n    }\n    return {};\n}\nfunction $3c0fc76039f1c516$var$addSegment(value, part, amount, options) {\n    switch(part){\n        case 'era':\n        case 'year':\n        case 'month':\n        case 'day':\n            return value.cycle(part, amount, {\n                round: part === 'year'\n            });\n    }\n    if ('hour' in value) switch(part){\n        case 'dayPeriod':\n            {\n                let hours = value.hour;\n                let isPM = hours >= 12;\n                return value.set({\n                    hour: isPM ? hours - 12 : hours + 12\n                });\n            }\n        case 'hour':\n        case 'minute':\n        case 'second':\n            return value.cycle(part, amount, {\n                round: part !== 'hour',\n                hourCycle: options.hour12 ? 12 : 24\n            });\n    }\n    throw new Error('Unknown segment: ' + part);\n}\nfunction $3c0fc76039f1c516$var$setSegment(value, part, segmentValue, options) {\n    switch(part){\n        case 'day':\n        case 'month':\n        case 'year':\n        case 'era':\n            return value.set({\n                [part]: segmentValue\n            });\n    }\n    if ('hour' in value && typeof segmentValue === 'number') switch(part){\n        case 'dayPeriod':\n            {\n                let hours = value.hour;\n                let wasPM = hours >= 12;\n                let isPM = segmentValue >= 12;\n                if (isPM === wasPM) return value;\n                return value.set({\n                    hour: wasPM ? hours - 12 : hours + 12\n                });\n            }\n        case 'hour':\n            // In 12 hour time, ensure that AM/PM does not change\n            if (options.hour12) {\n                let hours = value.hour;\n                let wasPM = hours >= 12;\n                if (!wasPM && segmentValue === 12) segmentValue = 0;\n                if (wasPM && segmentValue < 12) segmentValue += 12;\n            }\n        // fallthrough\n        case 'minute':\n        case 'second':\n            return value.set({\n                [part]: segmentValue\n            });\n    }\n    throw new Error('Unknown segment: ' + part);\n}\n\n\nexport {$3c0fc76039f1c516$export$60e84778edff6d26 as useDateFieldState};\n//# sourceMappingURL=useDateFieldState.module.js.map\n","import {useOverlayTriggerState as $8bn9m$useOverlayTriggerState} from \"@react-stately/overlays\";\nimport {useState as $8bn9m$useState} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $a28c903ee9ad8dc5$export$79fefeb1c2091ac3(props) {\n    let overlayTriggerState = (0, $8bn9m$useOverlayTriggerState)(props);\n    let [focusStrategy, setFocusStrategy] = (0, $8bn9m$useState)(null);\n    let [expandedKeysStack, setExpandedKeysStack] = (0, $8bn9m$useState)([]);\n    let closeAll = ()=>{\n        setExpandedKeysStack([]);\n        overlayTriggerState.close();\n    };\n    let openSubmenu = (triggerKey, level)=>{\n        setExpandedKeysStack((oldStack)=>{\n            if (level > oldStack.length) return oldStack;\n            return [\n                ...oldStack.slice(0, level),\n                triggerKey\n            ];\n        });\n    };\n    let closeSubmenu = (triggerKey, level)=>{\n        setExpandedKeysStack((oldStack)=>{\n            let key = oldStack[level];\n            if (key === triggerKey) return oldStack.slice(0, level);\n            else return oldStack;\n        });\n    };\n    return {\n        focusStrategy: focusStrategy,\n        ...overlayTriggerState,\n        open (focusStrategy = null) {\n            setFocusStrategy(focusStrategy);\n            overlayTriggerState.open();\n        },\n        toggle (focusStrategy = null) {\n            setFocusStrategy(focusStrategy);\n            overlayTriggerState.toggle();\n        },\n        close () {\n            closeAll();\n        },\n        expandedKeysStack: expandedKeysStack,\n        openSubmenu: openSubmenu,\n        closeSubmenu: closeSubmenu\n    };\n}\n\n\nexport {$a28c903ee9ad8dc5$export$79fefeb1c2091ac3 as useMenuTriggerState};\n//# sourceMappingURL=useMenuTriggerState.module.js.map\n","import {useControlledState as $58ylH$useControlledState} from \"@react-stately/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $0b2218c4e3fe7d7e$export$3f8be18b0f41eaf2(props) {\n    let [value, setValue] = (0, $58ylH$useControlledState)($0b2218c4e3fe7d7e$var$toString(props.value), $0b2218c4e3fe7d7e$var$toString(props.defaultValue) || '', props.onChange);\n    return {\n        value: value,\n        setValue: setValue\n    };\n}\nfunction $0b2218c4e3fe7d7e$var$toString(val) {\n    if (val == null) return;\n    return val.toString();\n}\n\n\nexport {$0b2218c4e3fe7d7e$export$3f8be18b0f41eaf2 as useSearchFieldState};\n//# sourceMappingURL=useSearchFieldState.module.js.map\n","import {useFormValidationState as $6FfNf$useFormValidationState} from \"@react-stately/form\";\nimport {useListState as $6FfNf$useListState} from \"@react-stately/list\";\nimport {useOverlayTriggerState as $6FfNf$useOverlayTriggerState} from \"@react-stately/overlays\";\nimport {useControlledState as $6FfNf$useControlledState} from \"@react-stately/utils\";\nimport {useState as $6FfNf$useState, useMemo as $6FfNf$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $2bc3a590c5373a4e$export$5159ec8b34d4ec12(props) {\n    let { selectionMode: selectionMode = 'single' } = props;\n    let triggerState = (0, $6FfNf$useOverlayTriggerState)(props);\n    let [focusStrategy, setFocusStrategy] = (0, $6FfNf$useState)(null);\n    let defaultValue = (0, $6FfNf$useMemo)(()=>{\n        var _props_defaultSelectedKey;\n        return props.defaultValue !== undefined ? props.defaultValue : selectionMode === 'single' ? (_props_defaultSelectedKey = props.defaultSelectedKey) !== null && _props_defaultSelectedKey !== void 0 ? _props_defaultSelectedKey : null : [];\n    }, [\n        props.defaultValue,\n        props.defaultSelectedKey,\n        selectionMode\n    ]);\n    let value = (0, $6FfNf$useMemo)(()=>{\n        return props.value !== undefined ? props.value : selectionMode === 'single' ? props.selectedKey : undefined;\n    }, [\n        props.value,\n        props.selectedKey,\n        selectionMode\n    ]);\n    let [controlledValue, setControlledValue] = (0, $6FfNf$useControlledState)(value, defaultValue, props.onChange);\n    // Only display the first selected item if in single selection mode but the value is an array.\n    let displayValue = selectionMode === 'single' && Array.isArray(controlledValue) ? controlledValue[0] : controlledValue;\n    let setValue = (value)=>{\n        if (selectionMode === 'single') {\n            var _props_onSelectionChange;\n            var _value_;\n            let key = Array.isArray(value) ? (_value_ = value[0]) !== null && _value_ !== void 0 ? _value_ : null : value;\n            setControlledValue(key);\n            if (key !== displayValue) (_props_onSelectionChange = props.onSelectionChange) === null || _props_onSelectionChange === void 0 ? void 0 : _props_onSelectionChange.call(props, key);\n        } else {\n            let keys = [];\n            if (Array.isArray(value)) keys = value;\n            else if (value != null) keys = [\n                value\n            ];\n            setControlledValue(keys);\n        }\n    };\n    let listState = (0, $6FfNf$useListState)({\n        ...props,\n        selectionMode: selectionMode,\n        disallowEmptySelection: selectionMode === 'single',\n        allowDuplicateSelectionEvents: true,\n        selectedKeys: (0, $6FfNf$useMemo)(()=>$2bc3a590c5373a4e$var$convertValue(displayValue), [\n            displayValue\n        ]),\n        onSelectionChange: (keys)=>{\n            // impossible, but TS doesn't know that\n            if (keys === 'all') return;\n            if (selectionMode === 'single') {\n                var _keys_values_next_value;\n                let key = (_keys_values_next_value = keys.values().next().value) !== null && _keys_values_next_value !== void 0 ? _keys_values_next_value : null;\n                setValue(key);\n                triggerState.close();\n            } else setValue([\n                ...keys\n            ]);\n            validationState.commitValidation();\n        }\n    });\n    let selectedKey = listState.selectionManager.firstSelectedKey;\n    let selectedItems = (0, $6FfNf$useMemo)(()=>{\n        return [\n            ...listState.selectionManager.selectedKeys\n        ].map((key)=>listState.collection.getItem(key)).filter((item)=>item != null);\n    }, [\n        listState.selectionManager.selectedKeys,\n        listState.collection\n    ]);\n    let validationState = (0, $6FfNf$useFormValidationState)({\n        ...props,\n        value: Array.isArray(displayValue) && displayValue.length === 0 ? null : displayValue\n    });\n    let [isFocused, setFocused] = (0, $6FfNf$useState)(false);\n    let [initialValue] = (0, $6FfNf$useState)(displayValue);\n    var _selectedItems_, _props_defaultSelectedKey;\n    return {\n        ...validationState,\n        ...listState,\n        ...triggerState,\n        value: displayValue,\n        defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : initialValue,\n        setValue: setValue,\n        selectedKey: selectedKey,\n        setSelectedKey: setValue,\n        selectedItem: (_selectedItems_ = selectedItems[0]) !== null && _selectedItems_ !== void 0 ? _selectedItems_ : null,\n        selectedItems: selectedItems,\n        defaultSelectedKey: (_props_defaultSelectedKey = props.defaultSelectedKey) !== null && _props_defaultSelectedKey !== void 0 ? _props_defaultSelectedKey : props.selectionMode === 'single' ? initialValue : null,\n        focusStrategy: focusStrategy,\n        open (focusStrategy = null) {\n            // Don't open if the collection is empty.\n            if (listState.collection.size !== 0 || props.allowsEmptyCollection) {\n                setFocusStrategy(focusStrategy);\n                triggerState.open();\n            }\n        },\n        toggle (focusStrategy = null) {\n            if (listState.collection.size !== 0 || props.allowsEmptyCollection) {\n                setFocusStrategy(focusStrategy);\n                triggerState.toggle();\n            }\n        },\n        isFocused: isFocused,\n        setFocused: setFocused\n    };\n}\nfunction $2bc3a590c5373a4e$var$convertValue(value) {\n    if (value === undefined) return undefined;\n    if (value === null) return [];\n    return Array.isArray(value) ? value : [\n        value\n    ];\n}\n\n\nexport {$2bc3a590c5373a4e$export$5159ec8b34d4ec12 as useSelectState};\n//# sourceMappingURL=useSelectState.module.js.map\n","import {useSingleSelectListState as $fgY1A$useSingleSelectListState} from \"@react-stately/list\";\nimport {useRef as $fgY1A$useRef, useEffect as $fgY1A$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $76f919a04c5a7d14$export$4ba071daf4e486(props) {\n    var _props_defaultSelectedKey, _ref;\n    let state = (0, $fgY1A$useSingleSelectListState)({\n        ...props,\n        onSelectionChange: props.onSelectionChange ? (key)=>{\n            var _props_onSelectionChange;\n            if (key != null) (_props_onSelectionChange = props.onSelectionChange) === null || _props_onSelectionChange === void 0 ? void 0 : _props_onSelectionChange.call(props, key);\n        } : undefined,\n        suppressTextValueWarning: true,\n        defaultSelectedKey: (_ref = (_props_defaultSelectedKey = props.defaultSelectedKey) !== null && _props_defaultSelectedKey !== void 0 ? _props_defaultSelectedKey : $76f919a04c5a7d14$var$findDefaultSelectedKey(props.collection, props.disabledKeys ? new Set(props.disabledKeys) : new Set())) !== null && _ref !== void 0 ? _ref : undefined\n    });\n    let { selectionManager: selectionManager, collection: collection, selectedKey: currentSelectedKey } = state;\n    let lastSelectedKey = (0, $fgY1A$useRef)(currentSelectedKey);\n    (0, $fgY1A$useEffect)(()=>{\n        // Ensure a tab is always selected (in case no selected key was specified or if selected item was deleted from collection)\n        let selectedKey = currentSelectedKey;\n        if (props.selectedKey == null && (selectionManager.isEmpty || selectedKey == null || !collection.getItem(selectedKey))) {\n            selectedKey = $76f919a04c5a7d14$var$findDefaultSelectedKey(collection, state.disabledKeys);\n            if (selectedKey != null) // directly set selection because replace/toggle selection won't consider disabled keys\n            selectionManager.setSelectedKeys([\n                selectedKey\n            ]);\n        }\n        // If the tablist doesn't have focus and the selected key changes or if there isn't a focused key yet, change focused key to the selected key if it exists.\n        if (selectedKey != null && selectionManager.focusedKey == null || !selectionManager.isFocused && selectedKey !== lastSelectedKey.current) selectionManager.setFocusedKey(selectedKey);\n        lastSelectedKey.current = selectedKey;\n    });\n    return {\n        ...state,\n        isDisabled: props.isDisabled || false\n    };\n}\nfunction $76f919a04c5a7d14$var$findDefaultSelectedKey(collection, disabledKeys) {\n    let selectedKey = null;\n    if (collection) {\n        var _collection_getItem_props, _collection_getItem, _collection_getItem_props1, _collection_getItem1;\n        selectedKey = collection.getFirstKey();\n        // loop over tabs until we find one that isn't disabled and select that\n        while(selectedKey != null && (disabledKeys.has(selectedKey) || ((_collection_getItem = collection.getItem(selectedKey)) === null || _collection_getItem === void 0 ? void 0 : (_collection_getItem_props = _collection_getItem.props) === null || _collection_getItem_props === void 0 ? void 0 : _collection_getItem_props.isDisabled)) && selectedKey !== collection.getLastKey())selectedKey = collection.getKeyAfter(selectedKey);\n        // if this check is true, then every item is disabled, it makes more sense to default to the first key than the last\n        if (selectedKey != null && (disabledKeys.has(selectedKey) || ((_collection_getItem1 = collection.getItem(selectedKey)) === null || _collection_getItem1 === void 0 ? void 0 : (_collection_getItem_props1 = _collection_getItem1.props) === null || _collection_getItem_props1 === void 0 ? void 0 : _collection_getItem_props1.isDisabled)) && selectedKey === collection.getLastKey()) selectedKey = collection.getFirstKey();\n    }\n    return selectedKey;\n}\n\n\nexport {$76f919a04c5a7d14$export$4ba071daf4e486 as useTabListState};\n//# sourceMappingURL=useTabListState.module.js.map\n","import {useMemo as $50cCT$useMemo, useRef as $50cCT$useRef, useEffect as $50cCT$useEffect} from \"react\";\nimport {useOverlayTriggerState as $50cCT$useOverlayTriggerState} from \"@react-stately/overlays\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $8796f90736e175cb$var$TOOLTIP_DELAY = 1500; // this seems to be a 1.5 second delay, check with design\nconst $8796f90736e175cb$var$TOOLTIP_COOLDOWN = 500;\nlet $8796f90736e175cb$var$tooltips = {};\nlet $8796f90736e175cb$var$tooltipId = 0;\nlet $8796f90736e175cb$var$globalWarmedUp = false;\nlet $8796f90736e175cb$var$globalWarmUpTimeout = null;\nlet $8796f90736e175cb$var$globalCooldownTimeout = null;\nfunction $8796f90736e175cb$export$4d40659c25ecb50b(props = {}) {\n    let { delay: delay = $8796f90736e175cb$var$TOOLTIP_DELAY, closeDelay: closeDelay = $8796f90736e175cb$var$TOOLTIP_COOLDOWN } = props;\n    let { isOpen: isOpen, open: open, close: close } = (0, $50cCT$useOverlayTriggerState)(props);\n    let id = (0, $50cCT$useMemo)(()=>`${++$8796f90736e175cb$var$tooltipId}`, []);\n    let closeTimeout = (0, $50cCT$useRef)(null);\n    let closeCallback = (0, $50cCT$useRef)(close);\n    let ensureTooltipEntry = ()=>{\n        $8796f90736e175cb$var$tooltips[id] = hideTooltip;\n    };\n    let closeOpenTooltips = ()=>{\n        for(let hideTooltipId in $8796f90736e175cb$var$tooltips)if (hideTooltipId !== id) {\n            $8796f90736e175cb$var$tooltips[hideTooltipId](true);\n            delete $8796f90736e175cb$var$tooltips[hideTooltipId];\n        }\n    };\n    let showTooltip = ()=>{\n        if (closeTimeout.current) clearTimeout(closeTimeout.current);\n        closeTimeout.current = null;\n        closeOpenTooltips();\n        ensureTooltipEntry();\n        $8796f90736e175cb$var$globalWarmedUp = true;\n        open();\n        if ($8796f90736e175cb$var$globalWarmUpTimeout) {\n            clearTimeout($8796f90736e175cb$var$globalWarmUpTimeout);\n            $8796f90736e175cb$var$globalWarmUpTimeout = null;\n        }\n        if ($8796f90736e175cb$var$globalCooldownTimeout) {\n            clearTimeout($8796f90736e175cb$var$globalCooldownTimeout);\n            $8796f90736e175cb$var$globalCooldownTimeout = null;\n        }\n    };\n    let hideTooltip = (immediate)=>{\n        if (immediate || closeDelay <= 0) {\n            if (closeTimeout.current) clearTimeout(closeTimeout.current);\n            closeTimeout.current = null;\n            closeCallback.current();\n        } else if (!closeTimeout.current) closeTimeout.current = setTimeout(()=>{\n            closeTimeout.current = null;\n            closeCallback.current();\n        }, closeDelay);\n        if ($8796f90736e175cb$var$globalWarmUpTimeout) {\n            clearTimeout($8796f90736e175cb$var$globalWarmUpTimeout);\n            $8796f90736e175cb$var$globalWarmUpTimeout = null;\n        }\n        if ($8796f90736e175cb$var$globalWarmedUp) {\n            if ($8796f90736e175cb$var$globalCooldownTimeout) clearTimeout($8796f90736e175cb$var$globalCooldownTimeout);\n            $8796f90736e175cb$var$globalCooldownTimeout = setTimeout(()=>{\n                delete $8796f90736e175cb$var$tooltips[id];\n                $8796f90736e175cb$var$globalCooldownTimeout = null;\n                $8796f90736e175cb$var$globalWarmedUp = false;\n            }, Math.max($8796f90736e175cb$var$TOOLTIP_COOLDOWN, closeDelay));\n        }\n    };\n    let warmupTooltip = ()=>{\n        closeOpenTooltips();\n        ensureTooltipEntry();\n        if (!isOpen && !$8796f90736e175cb$var$globalWarmUpTimeout && !$8796f90736e175cb$var$globalWarmedUp) $8796f90736e175cb$var$globalWarmUpTimeout = setTimeout(()=>{\n            $8796f90736e175cb$var$globalWarmUpTimeout = null;\n            $8796f90736e175cb$var$globalWarmedUp = true;\n            showTooltip();\n        }, delay);\n        else if (!isOpen) showTooltip();\n    };\n    (0, $50cCT$useEffect)(()=>{\n        closeCallback.current = close;\n    }, [\n        close\n    ]);\n    (0, $50cCT$useEffect)(()=>{\n        return ()=>{\n            if (closeTimeout.current) clearTimeout(closeTimeout.current);\n            let tooltip = $8796f90736e175cb$var$tooltips[id];\n            if (tooltip) delete $8796f90736e175cb$var$tooltips[id];\n        };\n    }, [\n        id\n    ]);\n    return {\n        isOpen: isOpen,\n        open: (immediate)=>{\n            if (!immediate && delay > 0 && !closeTimeout.current) warmupTooltip();\n            else showTooltip();\n        },\n        close: hideTooltip\n    };\n}\n\n\nexport {$8796f90736e175cb$export$4d40659c25ecb50b as useTooltipTriggerState};\n//# sourceMappingURL=useTooltipTriggerState.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $05ca4cd7c4a5a999$export$863faf230ee2118a {\n    *[Symbol.iterator]() {\n        yield* this.iterable;\n    }\n    get size() {\n        return this.keyMap.size;\n    }\n    getKeys() {\n        return this.keyMap.keys();\n    }\n    getKeyBefore(key) {\n        let node = this.keyMap.get(key);\n        var _node_prevKey;\n        return node ? (_node_prevKey = node.prevKey) !== null && _node_prevKey !== void 0 ? _node_prevKey : null : null;\n    }\n    getKeyAfter(key) {\n        let node = this.keyMap.get(key);\n        var _node_nextKey;\n        return node ? (_node_nextKey = node.nextKey) !== null && _node_nextKey !== void 0 ? _node_nextKey : null : null;\n    }\n    getFirstKey() {\n        return this.firstKey;\n    }\n    getLastKey() {\n        return this.lastKey;\n    }\n    getItem(key) {\n        var _this_keyMap_get;\n        return (_this_keyMap_get = this.keyMap.get(key)) !== null && _this_keyMap_get !== void 0 ? _this_keyMap_get : null;\n    }\n    at(idx) {\n        const keys = [\n            ...this.getKeys()\n        ];\n        return this.getItem(keys[idx]);\n    }\n    constructor(nodes, { expandedKeys: expandedKeys } = {}){\n        this.keyMap = new Map();\n        this.firstKey = null;\n        this.lastKey = null;\n        this.iterable = nodes;\n        expandedKeys = expandedKeys || new Set();\n        let visit = (node)=>{\n            this.keyMap.set(node.key, node);\n            if (node.childNodes && (node.type === 'section' || expandedKeys.has(node.key))) for (let child of node.childNodes)visit(child);\n        };\n        for (let node of nodes)visit(node);\n        let last = null;\n        let index = 0;\n        for (let [key, node] of this.keyMap){\n            if (last) {\n                last.nextKey = key;\n                node.prevKey = last.key;\n            } else {\n                this.firstKey = key;\n                node.prevKey = undefined;\n            }\n            if (node.type === 'item') node.index = index++;\n            last = node;\n            // Set nextKey as undefined since this might be the last node\n            // If it isn't the last node, last.nextKey will properly set at start of new loop\n            last.nextKey = undefined;\n        }\n        var _last_key;\n        this.lastKey = (_last_key = last === null || last === void 0 ? void 0 : last.key) !== null && _last_key !== void 0 ? _last_key : null;\n    }\n}\n\n\nexport {$05ca4cd7c4a5a999$export$863faf230ee2118a as TreeCollection};\n//# sourceMappingURL=TreeCollection.module.js.map\n","import {TreeCollection as $05ca4cd7c4a5a999$export$863faf230ee2118a} from \"./TreeCollection.mjs\";\nimport {useMultipleSelectionState as $75HV2$useMultipleSelectionState, SelectionManager as $75HV2$SelectionManager} from \"@react-stately/selection\";\nimport {useMemo as $75HV2$useMemo, useCallback as $75HV2$useCallback, useEffect as $75HV2$useEffect} from \"react\";\nimport {useCollection as $75HV2$useCollection} from \"@react-stately/collections\";\nimport {useControlledState as $75HV2$useControlledState} from \"@react-stately/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $875d6693e12af071$export$728d6ba534403756(props) {\n    let { onExpandedChange: onExpandedChange } = props;\n    let [expandedKeys, setExpandedKeys] = (0, $75HV2$useControlledState)(props.expandedKeys ? new Set(props.expandedKeys) : undefined, props.defaultExpandedKeys ? new Set(props.defaultExpandedKeys) : new Set(), onExpandedChange);\n    let selectionState = (0, $75HV2$useMultipleSelectionState)(props);\n    let disabledKeys = (0, $75HV2$useMemo)(()=>props.disabledKeys ? new Set(props.disabledKeys) : new Set(), [\n        props.disabledKeys\n    ]);\n    let tree = (0, $75HV2$useCollection)(props, (0, $75HV2$useCallback)((nodes)=>new (0, $05ca4cd7c4a5a999$export$863faf230ee2118a)(nodes, {\n            expandedKeys: expandedKeys\n        }), [\n        expandedKeys\n    ]), null);\n    // Reset focused key if that item is deleted from the collection.\n    (0, $75HV2$useEffect)(()=>{\n        if (selectionState.focusedKey != null && !tree.getItem(selectionState.focusedKey)) selectionState.setFocusedKey(null);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        tree,\n        selectionState.focusedKey\n    ]);\n    let onToggle = (key)=>{\n        setExpandedKeys($875d6693e12af071$var$toggleKey(expandedKeys, key));\n    };\n    return {\n        collection: tree,\n        expandedKeys: expandedKeys,\n        disabledKeys: disabledKeys,\n        toggleKey: onToggle,\n        setExpandedKeys: setExpandedKeys,\n        selectionManager: new (0, $75HV2$SelectionManager)(tree, selectionState)\n    };\n}\nfunction $875d6693e12af071$var$toggleKey(set, key) {\n    let res = new Set(set);\n    if (res.has(key)) res.delete(key);\n    else res.add(key);\n    return res;\n}\n\n\nexport {$875d6693e12af071$export$728d6ba534403756 as useTreeState};\n//# sourceMappingURL=useTreeState.module.js.map\n","import {useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {Text as $514c0188e459b4c0$export$5f1af8db9871e1d6} from \"./Text.mjs\";\nimport {filterDOMProps as $hnYyE$filterDOMProps} from \"@react-aria/utils\";\nimport $hnYyE$react, {createContext as $hnYyE$createContext, forwardRef as $hnYyE$forwardRef, useContext as $hnYyE$useContext} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nconst $ee014567cb39d3f0$export$ff05c3ac10437e03 = /*#__PURE__*/ (0, $hnYyE$createContext)(null);\nconst $ee014567cb39d3f0$export$f551688fc98f2e09 = /*#__PURE__*/ (0, $hnYyE$forwardRef)(function FieldError(props, ref) {\n    let validation = (0, $hnYyE$useContext)($ee014567cb39d3f0$export$ff05c3ac10437e03);\n    if (!(validation === null || validation === void 0 ? void 0 : validation.isInvalid)) return null;\n    return /*#__PURE__*/ (0, $hnYyE$react).createElement($ee014567cb39d3f0$var$FieldErrorInner, {\n        ...props,\n        ref: ref\n    });\n});\nconst $ee014567cb39d3f0$var$FieldErrorInner = /*#__PURE__*/ (0, $hnYyE$forwardRef)((props, ref)=>{\n    let validation = (0, $hnYyE$useContext)($ee014567cb39d3f0$export$ff05c3ac10437e03);\n    let domProps = (0, $hnYyE$filterDOMProps)(props, {\n        global: true\n    });\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-FieldError',\n        defaultChildren: validation.validationErrors.length === 0 ? undefined : validation.validationErrors.join(' '),\n        values: validation\n    });\n    if (renderProps.children == null) return null;\n    return /*#__PURE__*/ (0, $hnYyE$react).createElement((0, $514c0188e459b4c0$export$5f1af8db9871e1d6), {\n        slot: \"errorMessage\",\n        ...domProps,\n        ...renderProps,\n        ref: ref\n    });\n});\n\n\nexport {$ee014567cb39d3f0$export$ff05c3ac10437e03 as FieldErrorContext, $ee014567cb39d3f0$export$f551688fc98f2e09 as FieldError};\n//# sourceMappingURL=FieldError.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {FormValidationContext as $j6ya4$FormValidationContext} from \"react-stately\";\nimport $j6ya4$react, {createContext as $j6ya4$createContext, forwardRef as $j6ya4$forwardRef} from \"react\";\n\n/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $d3e0e05bdfcf66bd$export$c24727297075ec6a = /*#__PURE__*/ (0, $j6ya4$createContext)(null);\nconst $d3e0e05bdfcf66bd$export$a7fed597f4b8afd8 = /*#__PURE__*/ (0, $j6ya4$forwardRef)(function Form(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $d3e0e05bdfcf66bd$export$c24727297075ec6a);\n    let { validationErrors: validationErrors, validationBehavior: validationBehavior = 'native', children: children, className: className, ...domProps } = props;\n    return /*#__PURE__*/ (0, $j6ya4$react).createElement(\"form\", {\n        noValidate: validationBehavior !== 'native',\n        ...domProps,\n        ref: ref,\n        className: className || 'react-aria-Form'\n    }, /*#__PURE__*/ (0, $j6ya4$react).createElement($d3e0e05bdfcf66bd$export$c24727297075ec6a.Provider, {\n        value: {\n            ...props,\n            validationBehavior: validationBehavior\n        }\n    }, /*#__PURE__*/ (0, $j6ya4$react).createElement((0, $j6ya4$FormValidationContext).Provider, {\n        value: validationErrors !== null && validationErrors !== void 0 ? validationErrors : {}\n    }, children)));\n});\n\n\nexport {$d3e0e05bdfcf66bd$export$c24727297075ec6a as FormContext, $d3e0e05bdfcf66bd$export$a7fed597f4b8afd8 as Form};\n//# sourceMappingURL=Form.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {useHover as $gZciS$useHover, useFocusRing as $gZciS$useFocusRing, mergeProps as $gZciS$mergeProps} from \"react-aria\";\nimport $gZciS$react, {createContext as $gZciS$createContext, forwardRef as $gZciS$forwardRef} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $a049562f99e7db0e$export$f9c6924e160136d1 = /*#__PURE__*/ (0, $gZciS$createContext)({});\nconst $a049562f99e7db0e$export$eb2fcfdbd7ba97d4 = /*#__PURE__*/ (0, $gZciS$forwardRef)(function Group(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $a049562f99e7db0e$export$f9c6924e160136d1);\n    let { isDisabled: isDisabled, isInvalid: isInvalid, isReadOnly: isReadOnly, onHoverStart: onHoverStart, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, ...otherProps } = props;\n    isDisabled !== null && isDisabled !== void 0 ? isDisabled : isDisabled = !!props['aria-disabled'] && props['aria-disabled'] !== 'false';\n    isInvalid !== null && isInvalid !== void 0 ? isInvalid : isInvalid = !!props['aria-invalid'] && props['aria-invalid'] !== 'false';\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $gZciS$useHover)({\n        onHoverStart: onHoverStart,\n        onHoverChange: onHoverChange,\n        onHoverEnd: onHoverEnd,\n        isDisabled: isDisabled\n    });\n    let { isFocused: isFocused, isFocusVisible: isFocusVisible, focusProps: focusProps } = (0, $gZciS$useFocusRing)({\n        within: true\n    });\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        values: {\n            isHovered: isHovered,\n            isFocusWithin: isFocused,\n            isFocusVisible: isFocusVisible,\n            isDisabled: isDisabled,\n            isInvalid: isInvalid\n        },\n        defaultClassName: 'react-aria-Group'\n    });\n    var _props_role, _props_slot;\n    return /*#__PURE__*/ (0, $gZciS$react).createElement(\"div\", {\n        ...(0, $gZciS$mergeProps)(otherProps, focusProps, hoverProps),\n        ...renderProps,\n        ref: ref,\n        role: (_props_role = props.role) !== null && _props_role !== void 0 ? _props_role : 'group',\n        slot: (_props_slot = props.slot) !== null && _props_slot !== void 0 ? _props_slot : undefined,\n        \"data-focus-within\": isFocused || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-disabled\": isDisabled || undefined,\n        \"data-invalid\": isInvalid || undefined,\n        \"data-readonly\": isReadOnly || undefined\n    }, renderProps.children);\n});\n\n\nexport {$a049562f99e7db0e$export$f9c6924e160136d1 as GroupContext, $a049562f99e7db0e$export$eb2fcfdbd7ba97d4 as Group};\n//# sourceMappingURL=Group.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {createHideableComponent as $jMZTB$createHideableComponent} from \"@react-aria/collections\";\nimport {useHover as $jMZTB$useHover, useFocusRing as $jMZTB$useFocusRing, mergeProps as $jMZTB$mergeProps} from \"react-aria\";\nimport $jMZTB$react, {createContext as $jMZTB$createContext} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nconst $3985021b0ad6602f$export$37fb8590cf2c088c = /*#__PURE__*/ (0, $jMZTB$createContext)({});\nlet $3985021b0ad6602f$var$filterHoverProps = (props)=>{\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    let { onHoverStart: onHoverStart, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, ...otherProps } = props;\n    return otherProps;\n};\nconst $3985021b0ad6602f$export$f5b8910cec6cf069 = /*#__PURE__*/ (0, $jMZTB$createHideableComponent)(function Input(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $3985021b0ad6602f$export$37fb8590cf2c088c);\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $jMZTB$useHover)({\n        ...props,\n        isDisabled: props.disabled\n    });\n    let { isFocused: isFocused, isFocusVisible: isFocusVisible, focusProps: focusProps } = (0, $jMZTB$useFocusRing)({\n        isTextInput: true,\n        autoFocus: props.autoFocus\n    });\n    let isInvalid = !!props['aria-invalid'] && props['aria-invalid'] !== 'false';\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        values: {\n            isHovered: isHovered,\n            isFocused: isFocused,\n            isFocusVisible: isFocusVisible,\n            isDisabled: props.disabled || false,\n            isInvalid: isInvalid\n        },\n        defaultClassName: 'react-aria-Input'\n    });\n    return /*#__PURE__*/ (0, $jMZTB$react).createElement(\"input\", {\n        ...(0, $jMZTB$mergeProps)($3985021b0ad6602f$var$filterHoverProps(props), focusProps, hoverProps),\n        ...renderProps,\n        ref: ref,\n        \"data-focused\": isFocused || undefined,\n        \"data-disabled\": props.disabled || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-invalid\": isInvalid || undefined\n    });\n});\n\n\nexport {$3985021b0ad6602f$export$37fb8590cf2c088c as InputContext, $3985021b0ad6602f$export$f5b8910cec6cf069 as Input};\n//# sourceMappingURL=Input.module.js.map\n","var $cafa55beb2fc5ef3$exports = {};\n$cafa55beb2fc5ef3$exports = {\n    \"selectPlaceholder\": `Select an item`,\n    \"tableResizer\": `Resizer`,\n    \"dropzoneLabel\": `DropZone`,\n    \"colorSwatchPicker\": `Color swatches`\n};\n\n\nexport {$cafa55beb2fc5ef3$exports as default};\n//# sourceMappingURL=en-US.module.js.map\n","import $bK1z9$arAEmodulejs from \"./ar-AE.mjs\";\nimport $bK1z9$bgBGmodulejs from \"./bg-BG.mjs\";\nimport $bK1z9$csCZmodulejs from \"./cs-CZ.mjs\";\nimport $bK1z9$daDKmodulejs from \"./da-DK.mjs\";\nimport $bK1z9$deDEmodulejs from \"./de-DE.mjs\";\nimport $bK1z9$elGRmodulejs from \"./el-GR.mjs\";\nimport $bK1z9$enUSmodulejs from \"./en-US.mjs\";\nimport $bK1z9$esESmodulejs from \"./es-ES.mjs\";\nimport $bK1z9$etEEmodulejs from \"./et-EE.mjs\";\nimport $bK1z9$fiFImodulejs from \"./fi-FI.mjs\";\nimport $bK1z9$frFRmodulejs from \"./fr-FR.mjs\";\nimport $bK1z9$heILmodulejs from \"./he-IL.mjs\";\nimport $bK1z9$hrHRmodulejs from \"./hr-HR.mjs\";\nimport $bK1z9$huHUmodulejs from \"./hu-HU.mjs\";\nimport $bK1z9$itITmodulejs from \"./it-IT.mjs\";\nimport $bK1z9$jaJPmodulejs from \"./ja-JP.mjs\";\nimport $bK1z9$koKRmodulejs from \"./ko-KR.mjs\";\nimport $bK1z9$ltLTmodulejs from \"./lt-LT.mjs\";\nimport $bK1z9$lvLVmodulejs from \"./lv-LV.mjs\";\nimport $bK1z9$nbNOmodulejs from \"./nb-NO.mjs\";\nimport $bK1z9$nlNLmodulejs from \"./nl-NL.mjs\";\nimport $bK1z9$plPLmodulejs from \"./pl-PL.mjs\";\nimport $bK1z9$ptBRmodulejs from \"./pt-BR.mjs\";\nimport $bK1z9$ptPTmodulejs from \"./pt-PT.mjs\";\nimport $bK1z9$roROmodulejs from \"./ro-RO.mjs\";\nimport $bK1z9$ruRUmodulejs from \"./ru-RU.mjs\";\nimport $bK1z9$skSKmodulejs from \"./sk-SK.mjs\";\nimport $bK1z9$slSImodulejs from \"./sl-SI.mjs\";\nimport $bK1z9$srSPmodulejs from \"./sr-SP.mjs\";\nimport $bK1z9$svSEmodulejs from \"./sv-SE.mjs\";\nimport $bK1z9$trTRmodulejs from \"./tr-TR.mjs\";\nimport $bK1z9$ukUAmodulejs from \"./uk-UA.mjs\";\nimport $bK1z9$zhCNmodulejs from \"./zh-CN.mjs\";\nimport $bK1z9$zhTWmodulejs from \"./zh-TW.mjs\";\n\nvar $df39c1238ae2b5f3$exports = {};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$df39c1238ae2b5f3$exports = {\n    \"ar-AE\": $bK1z9$arAEmodulejs,\n    \"bg-BG\": $bK1z9$bgBGmodulejs,\n    \"cs-CZ\": $bK1z9$csCZmodulejs,\n    \"da-DK\": $bK1z9$daDKmodulejs,\n    \"de-DE\": $bK1z9$deDEmodulejs,\n    \"el-GR\": $bK1z9$elGRmodulejs,\n    \"en-US\": $bK1z9$enUSmodulejs,\n    \"es-ES\": $bK1z9$esESmodulejs,\n    \"et-EE\": $bK1z9$etEEmodulejs,\n    \"fi-FI\": $bK1z9$fiFImodulejs,\n    \"fr-FR\": $bK1z9$frFRmodulejs,\n    \"he-IL\": $bK1z9$heILmodulejs,\n    \"hr-HR\": $bK1z9$hrHRmodulejs,\n    \"hu-HU\": $bK1z9$huHUmodulejs,\n    \"it-IT\": $bK1z9$itITmodulejs,\n    \"ja-JP\": $bK1z9$jaJPmodulejs,\n    \"ko-KR\": $bK1z9$koKRmodulejs,\n    \"lt-LT\": $bK1z9$ltLTmodulejs,\n    \"lv-LV\": $bK1z9$lvLVmodulejs,\n    \"nb-NO\": $bK1z9$nbNOmodulejs,\n    \"nl-NL\": $bK1z9$nlNLmodulejs,\n    \"pl-PL\": $bK1z9$plPLmodulejs,\n    \"pt-BR\": $bK1z9$ptBRmodulejs,\n    \"pt-PT\": $bK1z9$ptPTmodulejs,\n    \"ro-RO\": $bK1z9$roROmodulejs,\n    \"ru-RU\": $bK1z9$ruRUmodulejs,\n    \"sk-SK\": $bK1z9$skSKmodulejs,\n    \"sl-SI\": $bK1z9$slSImodulejs,\n    \"sr-SP\": $bK1z9$srSPmodulejs,\n    \"sv-SE\": $bK1z9$svSEmodulejs,\n    \"tr-TR\": $bK1z9$trTRmodulejs,\n    \"uk-UA\": $bK1z9$ukUAmodulejs,\n    \"zh-CN\": $bK1z9$zhCNmodulejs,\n    \"zh-TW\": $bK1z9$zhTWmodulejs\n};\n\n\nexport {$df39c1238ae2b5f3$exports as default};\n//# sourceMappingURL=intlStrings.module.js.map\n","import $f3JOg$react, {createContext as $f3JOg$createContext, forwardRef as $f3JOg$forwardRef, useContext as $f3JOg$useContext, useCallback as $f3JOg$useCallback, useMemo as $f3JOg$useMemo} from \"react\";\n\n/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $612b8eb6cb90e02d$export$d188a835a7bc5783 = /*#__PURE__*/ (0, $f3JOg$createContext)({});\nconst $612b8eb6cb90e02d$export$f55761759794cf55 = /*#__PURE__*/ (0, $f3JOg$createContext)(null);\nconst $612b8eb6cb90e02d$export$62ed72bc21f6b8a6 = /*#__PURE__*/ (0, $f3JOg$forwardRef)(function DropIndicator(props, ref) {\n    let { render: render } = (0, $f3JOg$useContext)($612b8eb6cb90e02d$export$f55761759794cf55);\n    return /*#__PURE__*/ (0, $f3JOg$react).createElement((0, $f3JOg$react).Fragment, null, render(props, ref));\n});\nfunction $612b8eb6cb90e02d$export$971707d8a129a1f7(dragAndDropHooks, dropState) {\n    var _dragAndDropHooks_isVirtualDragging;\n    let renderDropIndicator = dragAndDropHooks === null || dragAndDropHooks === void 0 ? void 0 : dragAndDropHooks.renderDropIndicator;\n    let isVirtualDragging = dragAndDropHooks === null || dragAndDropHooks === void 0 ? void 0 : (_dragAndDropHooks_isVirtualDragging = dragAndDropHooks.isVirtualDragging) === null || _dragAndDropHooks_isVirtualDragging === void 0 ? void 0 : _dragAndDropHooks_isVirtualDragging.call(dragAndDropHooks);\n    let fn = (0, $f3JOg$useCallback)((target)=>{\n        // Only show drop indicators when virtual dragging or this is the current drop target.\n        if (isVirtualDragging || (dropState === null || dropState === void 0 ? void 0 : dropState.isDropTarget(target))) return renderDropIndicator ? renderDropIndicator(target) : /*#__PURE__*/ (0, $f3JOg$react).createElement($612b8eb6cb90e02d$export$62ed72bc21f6b8a6, {\n            target: target\n        });\n    // We invalidate whenever the target changes.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [\n        dropState === null || dropState === void 0 ? void 0 : dropState.target,\n        isVirtualDragging,\n        renderDropIndicator\n    ]);\n    return (dragAndDropHooks === null || dragAndDropHooks === void 0 ? void 0 : dragAndDropHooks.useDropIndicator) ? fn : undefined;\n}\nfunction $612b8eb6cb90e02d$export$d1e8e3fbb7461f6(selectionManager, dragAndDropHooks, dropState) {\n    var _dragAndDropHooks_isVirtualDragging, _dropState_target;\n    // Persist the focused key and the drop target key.\n    let focusedKey = selectionManager.focusedKey;\n    let dropTargetKey = null;\n    if ((dragAndDropHooks === null || dragAndDropHooks === void 0 ? void 0 : (_dragAndDropHooks_isVirtualDragging = dragAndDropHooks.isVirtualDragging) === null || _dragAndDropHooks_isVirtualDragging === void 0 ? void 0 : _dragAndDropHooks_isVirtualDragging.call(dragAndDropHooks)) && (dropState === null || dropState === void 0 ? void 0 : (_dropState_target = dropState.target) === null || _dropState_target === void 0 ? void 0 : _dropState_target.type) === 'item') {\n        dropTargetKey = dropState.target.key;\n        if (dropState.target.dropPosition === 'after') {\n            // Normalize to the \"before\" drop position since we only render those to the DOM.\n            let nextKey = dropState.collection.getKeyAfter(dropTargetKey);\n            let lastDescendantKey = null;\n            if (nextKey != null) {\n                var _dropState_collection_getItem;\n                var _dropState_collection_getItem_level;\n                let targetLevel = (_dropState_collection_getItem_level = (_dropState_collection_getItem = dropState.collection.getItem(dropTargetKey)) === null || _dropState_collection_getItem === void 0 ? void 0 : _dropState_collection_getItem.level) !== null && _dropState_collection_getItem_level !== void 0 ? _dropState_collection_getItem_level : 0;\n                // Skip over any rows that are descendants of the target (\"after\" position should be after all children)\n                while(nextKey){\n                    let node = dropState.collection.getItem(nextKey);\n                    // eslint-disable-next-line max-depth\n                    if (!node) break;\n                    // Skip over non-item nodes (e.g., loaders) since they can't be drop targets.\n                    // eslint-disable-next-line max-depth\n                    if (node.type !== 'item') {\n                        nextKey = dropState.collection.getKeyAfter(nextKey);\n                        continue;\n                    }\n                    var _node_level;\n                    // Stop once we find an item at the same level or higher\n                    // eslint-disable-next-line max-depth\n                    if (((_node_level = node.level) !== null && _node_level !== void 0 ? _node_level : 0) <= targetLevel) break;\n                    lastDescendantKey = nextKey;\n                    nextKey = dropState.collection.getKeyAfter(nextKey);\n                }\n            }\n            var _ref;\n            // If nextKey is null (end of collection), use the last descendant\n            dropTargetKey = (_ref = nextKey !== null && nextKey !== void 0 ? nextKey : lastDescendantKey) !== null && _ref !== void 0 ? _ref : dropTargetKey;\n        }\n    }\n    return (0, $f3JOg$useMemo)(()=>{\n        return new Set([\n            focusedKey,\n            dropTargetKey\n        ].filter((k)=>k != null));\n    }, [\n        focusedKey,\n        dropTargetKey\n    ]);\n}\n\n\nexport {$612b8eb6cb90e02d$export$d188a835a7bc5783 as DragAndDropContext, $612b8eb6cb90e02d$export$f55761759794cf55 as DropIndicatorContext, $612b8eb6cb90e02d$export$62ed72bc21f6b8a6 as DropIndicator, $612b8eb6cb90e02d$export$971707d8a129a1f7 as useRenderDropIndicator, $612b8eb6cb90e02d$export$d1e8e3fbb7461f6 as useDndPersistedKeys};\n//# sourceMappingURL=DragAndDrop.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {createLeafComponent as $i47tY$createLeafComponent, HeaderNode as $i47tY$HeaderNode} from \"@react-aria/collections\";\nimport $i47tY$react, {createContext as $i47tY$createContext} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $72a5793c14baf454$export$e0e4026c12a8bdbb = /*#__PURE__*/ (0, $i47tY$createContext)({});\nconst $72a5793c14baf454$export$8b251419efc915eb = /*#__PURE__*/ (0, $i47tY$createLeafComponent)((0, $i47tY$HeaderNode), function Header(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $72a5793c14baf454$export$e0e4026c12a8bdbb);\n    return /*#__PURE__*/ (0, $i47tY$react).createElement(\"header\", {\n        className: \"react-aria-Header\",\n        ...props,\n        ref: ref\n    }, props.children);\n});\n\n\nexport {$72a5793c14baf454$export$e0e4026c12a8bdbb as HeaderContext, $72a5793c14baf454$export$8b251419efc915eb as Header};\n//# sourceMappingURL=Header.module.js.map\n","import {useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {flushSync as $I3GNx$flushSync} from \"react-dom\";\nimport $I3GNx$react, {createContext as $I3GNx$createContext, useRef as $I3GNx$useRef, forwardRef as $I3GNx$forwardRef, useState as $I3GNx$useState, useContext as $I3GNx$useContext} from \"react\";\nimport {useLayoutEffect as $I3GNx$useLayoutEffect} from \"@react-aria/utils\";\nimport {useObjectRef as $I3GNx$useObjectRef} from \"react-aria\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nconst $c8a5a149f625efcf$var$SharedElementContext = /*#__PURE__*/ (0, $I3GNx$createContext)(null);\nfunction $c8a5a149f625efcf$export$758399f318e6385a(props) {\n    let ref = (0, $I3GNx$useRef)({});\n    return /*#__PURE__*/ (0, $I3GNx$react).createElement($c8a5a149f625efcf$var$SharedElementContext.Provider, {\n        value: ref\n    }, props.children);\n}\nconst $c8a5a149f625efcf$export$c34620ff8881d89f = /*#__PURE__*/ (0, $I3GNx$forwardRef)(function SharedElement(props, ref) {\n    let { name: name, isVisible: isVisible = true, children: children, className: className, style: style, ...divProps } = props;\n    let [state, setState] = (0, $I3GNx$useState)(isVisible ? 'visible' : 'hidden');\n    let scopeRef = (0, $I3GNx$useContext)($c8a5a149f625efcf$var$SharedElementContext);\n    if (!scopeRef) throw new Error('<SharedElement> must be rendered inside a <SharedElementTransition>');\n    if (isVisible && state === 'hidden') setState('visible');\n    ref = (0, $I3GNx$useObjectRef)(ref);\n    (0, $I3GNx$useLayoutEffect)(()=>{\n        let element = ref.current;\n        let scope = scopeRef.current;\n        let prevSnapshot = scope[name];\n        let frame = null;\n        if (element && isVisible && prevSnapshot) {\n            // Element is transitioning from a previous instance.\n            setState('visible');\n            let animations = element.getAnimations();\n            // Set properties to animate from.\n            let values = prevSnapshot.style.map(([property, prevValue])=>{\n                let value = element.style[property];\n                if (property === 'translate') {\n                    let prevRect = prevSnapshot.rect;\n                    let currentItem = element.getBoundingClientRect();\n                    let deltaX = prevRect.left - (currentItem === null || currentItem === void 0 ? void 0 : currentItem.left);\n                    let deltaY = prevRect.top - (currentItem === null || currentItem === void 0 ? void 0 : currentItem.top);\n                    element.style.translate = `${deltaX}px ${deltaY}px`;\n                } else element.style[property] = prevValue;\n                return [\n                    property,\n                    value\n                ];\n            });\n            // Cancel any new animations triggered by these properties.\n            for (let a of element.getAnimations())if (!animations.includes(a)) a.cancel();\n            // Remove overrides after one frame to animate to the current values.\n            frame = requestAnimationFrame(()=>{\n                frame = null;\n                for (let [property, value] of values)element.style[property] = value;\n            });\n            delete scope[name];\n        } else if (element && isVisible && !prevSnapshot) {\n            // No previous instance exists, apply the entering state.\n            queueMicrotask(()=>(0, $I3GNx$flushSync)(()=>setState('entering')));\n            frame = requestAnimationFrame(()=>{\n                frame = null;\n                setState('visible');\n            });\n        } else if (element && !isVisible) // Wait until layout effects finish, and check if a snapshot still exists.\n        // If so, no new SharedElement consumed it, so enter the exiting state.\n        queueMicrotask(()=>{\n            if (scope[name]) {\n                delete scope[name];\n                (0, $I3GNx$flushSync)(()=>setState('exiting'));\n                Promise.all(element.getAnimations().map((a)=>a.finished)).then(()=>setState('hidden')).catch(()=>{});\n            } else // Snapshot was consumed by another instance, unmount.\n            setState('hidden');\n        });\n        return ()=>{\n            if (frame != null) cancelAnimationFrame(frame);\n            if (element && element.isConnected && !element.hasAttribute('data-exiting')) {\n                // On unmount, store a snapshot of the rectangle and computed style for transitioning properties.\n                let style = window.getComputedStyle(element);\n                if (style.transitionProperty !== 'none') {\n                    let transitionProperty = style.transitionProperty.split(/\\s*,\\s*/);\n                    scope[name] = {\n                        rect: element.getBoundingClientRect(),\n                        style: transitionProperty.map((p)=>[\n                                p,\n                                style[p]\n                            ])\n                    };\n                }\n            }\n        };\n    }, [\n        ref,\n        scopeRef,\n        name,\n        isVisible\n    ]);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        children: children,\n        className: className,\n        style: style,\n        values: {\n            isEntering: state === 'entering',\n            isExiting: state === 'exiting'\n        }\n    });\n    if (state === 'hidden') return null;\n    return /*#__PURE__*/ (0, $I3GNx$react).createElement(\"div\", {\n        ...divProps,\n        ...renderProps,\n        ref: ref,\n        \"data-entering\": state === 'entering' || undefined,\n        \"data-exiting\": state === 'exiting' || undefined\n    });\n});\n\n\nexport {$c8a5a149f625efcf$export$758399f318e6385a as SharedElementTransition, $c8a5a149f625efcf$export$c34620ff8881d89f as SharedElement};\n//# sourceMappingURL=SharedElementTransition.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {SharedElement as $c8a5a149f625efcf$export$c34620ff8881d89f} from \"./SharedElementTransition.mjs\";\nimport $4GgyL$react, {createContext as $4GgyL$createContext, forwardRef as $4GgyL$forwardRef} from \"react\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $1d5b8b8664671ef2$export$c9549807523555e0 = /*#__PURE__*/ (0, $4GgyL$createContext)({\n    isSelected: false\n});\nconst $1d5b8b8664671ef2$export$17f80983afe4e444 = /*#__PURE__*/ (0, $4GgyL$forwardRef)(function SelectionIndicator(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $1d5b8b8664671ef2$export$c9549807523555e0);\n    let { isSelected: isSelected, ...otherProps } = props;\n    return /*#__PURE__*/ (0, $4GgyL$react).createElement((0, $c8a5a149f625efcf$export$c34620ff8881d89f), {\n        ...otherProps,\n        ref: ref,\n        className: props.className || 'react-aria-SelectionIndicator',\n        name: \"SelectionIndicator\",\n        isVisible: isSelected\n    });\n});\n\n\nexport {$1d5b8b8664671ef2$export$c9549807523555e0 as SelectionIndicatorContext, $1d5b8b8664671ef2$export$17f80983afe4e444 as SelectionIndicator};\n//# sourceMappingURL=SelectionIndicator.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport {useSeparator as $i9JCE$useSeparator} from \"react-aria\";\nimport {CollectionNode as $i9JCE$CollectionNode, createLeafComponent as $i9JCE$createLeafComponent} from \"@react-aria/collections\";\nimport {filterDOMProps as $i9JCE$filterDOMProps, mergeProps as $i9JCE$mergeProps} from \"@react-aria/utils\";\nimport $i9JCE$react, {createContext as $i9JCE$createContext} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nconst $431f98aba6844401$export$6615d83f6de245ce = /*#__PURE__*/ (0, $i9JCE$createContext)({});\nclass $431f98aba6844401$export$7750289ca694c0b5 extends (0, $i9JCE$CollectionNode) {\n    filter(collection, newCollection) {\n        let prevItem = newCollection.getItem(this.prevKey);\n        if (prevItem && prevItem.type !== 'separator') {\n            let clone = this.clone();\n            newCollection.addDescendants(clone, collection);\n            return clone;\n        }\n        return null;\n    }\n}\n$431f98aba6844401$export$7750289ca694c0b5.type = 'separator';\nconst $431f98aba6844401$export$1ff3c3f08ae963c0 = /*#__PURE__*/ (0, $i9JCE$createLeafComponent)($431f98aba6844401$export$7750289ca694c0b5, function Separator(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $431f98aba6844401$export$6615d83f6de245ce);\n    let { elementType: elementType, orientation: orientation, style: style, className: className, slot: slot, ...otherProps } = props;\n    let Element = elementType || 'hr';\n    if (Element === 'hr' && orientation === 'vertical') Element = 'div';\n    let { separatorProps: separatorProps } = (0, $i9JCE$useSeparator)({\n        ...otherProps,\n        elementType: elementType,\n        orientation: orientation\n    });\n    let DOMProps = (0, $i9JCE$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $i9JCE$react).createElement(Element, {\n        ...(0, $i9JCE$mergeProps)(DOMProps, separatorProps),\n        style: style,\n        className: className !== null && className !== void 0 ? className : 'react-aria-Separator',\n        ref: ref,\n        slot: slot || undefined\n    });\n});\n\n\nexport {$431f98aba6844401$export$6615d83f6de245ce as SeparatorContext, $431f98aba6844401$export$7750289ca694c0b5 as SeparatorNode, $431f98aba6844401$export$1ff3c3f08ae963c0 as Separator};\n//# sourceMappingURL=Separator.module.js.map\n","import {DEFAULT_SLOT as $64fa3d84918910a7$export$c62b8e45d58ddad9, Provider as $64fa3d84918910a7$export$2881499e37b75b9a, useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3, useSlot as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8} from \"./utils.mjs\";\nimport {CollectionRendererContext as $7135fc7d473fd974$export$4feb769f8ddf26c5, SectionContext as $7135fc7d473fd974$export$d40e14dec8b060a8} from \"./Collection.mjs\";\nimport {DragAndDropContext as $612b8eb6cb90e02d$export$d188a835a7bc5783, DropIndicatorContext as $612b8eb6cb90e02d$export$f55761759794cf55, useDndPersistedKeys as $612b8eb6cb90e02d$export$d1e8e3fbb7461f6, useRenderDropIndicator as $612b8eb6cb90e02d$export$971707d8a129a1f7} from \"./DragAndDrop.mjs\";\nimport {HeaderContext as $72a5793c14baf454$export$e0e4026c12a8bdbb} from \"./Header.mjs\";\nimport {SelectableCollectionContext as $4e85f108e88277b8$export$b0d3ecf7112093a7} from \"./RSPContexts.mjs\";\nimport {SelectionIndicatorContext as $1d5b8b8664671ef2$export$c9549807523555e0} from \"./SelectionIndicator.mjs\";\nimport {SeparatorContext as $431f98aba6844401$export$6615d83f6de245ce} from \"./Separator.mjs\";\nimport {SharedElementTransition as $c8a5a149f625efcf$export$758399f318e6385a} from \"./SharedElementTransition.mjs\";\nimport {TextContext as $514c0188e459b4c0$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useLocale as $e8Bmu$useLocale, useCollator as $e8Bmu$useCollator, ListKeyboardDelegate as $e8Bmu$ListKeyboardDelegate, useListBox as $e8Bmu$useListBox, useFocusRing as $e8Bmu$useFocusRing, FocusScope as $e8Bmu$FocusScope, mergeProps as $e8Bmu$mergeProps, useListBoxSection as $e8Bmu$useListBoxSection, useOption as $e8Bmu$useOption, useHover as $e8Bmu$useHover, useFocus as $e8Bmu$useFocus} from \"react-aria\";\nimport {CollectionBuilder as $e8Bmu$CollectionBuilder, Collection as $e8Bmu$Collection, createBranchComponent as $e8Bmu$createBranchComponent, SectionNode as $e8Bmu$SectionNode, createLeafComponent as $e8Bmu$createLeafComponent, ItemNode as $e8Bmu$ItemNode, LoaderNode as $e8Bmu$LoaderNode} from \"@react-aria/collections\";\nimport {useListState as $e8Bmu$useListState, UNSTABLE_useFilteredListState as $e8Bmu$UNSTABLE_useFilteredListState} from \"react-stately\";\nimport {filterDOMProps as $e8Bmu$filterDOMProps, useObjectRef as $e8Bmu$useObjectRef, useLoadMoreSentinel as $e8Bmu$useLoadMoreSentinel, inertValue as $e8Bmu$inertValue} from \"@react-aria/utils\";\nimport $e8Bmu$react, {createContext as $e8Bmu$createContext, forwardRef as $e8Bmu$forwardRef, useContext as $e8Bmu$useContext, useMemo as $e8Bmu$useMemo, useRef as $e8Bmu$useRef, useEffect as $e8Bmu$useEffect} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $eed445e0843c11d0$export$7ff8f37d2d81a48d = /*#__PURE__*/ (0, $e8Bmu$createContext)(null);\nconst $eed445e0843c11d0$export$7c5906fe4f1f2af2 = /*#__PURE__*/ (0, $e8Bmu$createContext)(null);\nconst $eed445e0843c11d0$export$41f133550aa26f48 = /*#__PURE__*/ (0, $e8Bmu$forwardRef)(function ListBox(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $eed445e0843c11d0$export$7ff8f37d2d81a48d);\n    let state = (0, $e8Bmu$useContext)($eed445e0843c11d0$export$7c5906fe4f1f2af2);\n    // The structure of ListBox is a bit strange because it needs to work inside other components like ComboBox and Select.\n    // Those components render two copies of their children so that the collection can be built even when the popover is closed.\n    // The first copy sends a collection document via context which we render the collection portal into.\n    // The second copy sends a ListState object via context which we use to render the ListBox without rebuilding the state.\n    // Otherwise, we have a standalone ListBox, so we need to create a collection and state ourselves.\n    if (state) return /*#__PURE__*/ (0, $e8Bmu$react).createElement($eed445e0843c11d0$var$ListBoxInner, {\n        state: state,\n        props: props,\n        listBoxRef: ref\n    });\n    return /*#__PURE__*/ (0, $e8Bmu$react).createElement((0, $e8Bmu$CollectionBuilder), {\n        content: /*#__PURE__*/ (0, $e8Bmu$react).createElement((0, $e8Bmu$Collection), props)\n    }, (collection)=>/*#__PURE__*/ (0, $e8Bmu$react).createElement($eed445e0843c11d0$var$StandaloneListBox, {\n            props: props,\n            listBoxRef: ref,\n            collection: collection\n        }));\n});\nfunction $eed445e0843c11d0$var$StandaloneListBox({ props: props, listBoxRef: listBoxRef, collection: collection }) {\n    props = {\n        ...props,\n        collection: collection,\n        children: null,\n        items: null\n    };\n    let { layoutDelegate: layoutDelegate } = (0, $e8Bmu$useContext)((0, $7135fc7d473fd974$export$4feb769f8ddf26c5));\n    let state = (0, $e8Bmu$useListState)({\n        ...props,\n        layoutDelegate: layoutDelegate\n    });\n    return /*#__PURE__*/ (0, $e8Bmu$react).createElement($eed445e0843c11d0$var$ListBoxInner, {\n        state: state,\n        props: props,\n        listBoxRef: listBoxRef\n    });\n}\nfunction $eed445e0843c11d0$var$ListBoxInner({ state: inputState, props: props, listBoxRef: listBoxRef }) {\n    [props, listBoxRef] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, listBoxRef, (0, $4e85f108e88277b8$export$b0d3ecf7112093a7));\n    let { dragAndDropHooks: dragAndDropHooks, layout: layout = 'stack', orientation: orientation = 'vertical', filter: filter } = props;\n    let state = (0, $e8Bmu$UNSTABLE_useFilteredListState)(inputState, filter);\n    let { collection: collection, selectionManager: selectionManager } = state;\n    let isListDraggable = !!(dragAndDropHooks === null || dragAndDropHooks === void 0 ? void 0 : dragAndDropHooks.useDraggableCollectionState);\n    let isListDroppable = !!(dragAndDropHooks === null || dragAndDropHooks === void 0 ? void 0 : dragAndDropHooks.useDroppableCollectionState);\n    let { direction: direction } = (0, $e8Bmu$useLocale)();\n    let { disabledBehavior: disabledBehavior, disabledKeys: disabledKeys } = selectionManager;\n    let collator = (0, $e8Bmu$useCollator)({\n        usage: 'search',\n        sensitivity: 'base'\n    });\n    let { isVirtualized: isVirtualized, layoutDelegate: layoutDelegate, dropTargetDelegate: ctxDropTargetDelegate, CollectionRoot: CollectionRoot } = (0, $e8Bmu$useContext)((0, $7135fc7d473fd974$export$4feb769f8ddf26c5));\n    let keyboardDelegate = (0, $e8Bmu$useMemo)(()=>props.keyboardDelegate || new (0, $e8Bmu$ListKeyboardDelegate)({\n            collection: collection,\n            collator: collator,\n            ref: listBoxRef,\n            disabledKeys: disabledKeys,\n            disabledBehavior: disabledBehavior,\n            layout: layout,\n            orientation: orientation,\n            direction: direction,\n            layoutDelegate: layoutDelegate\n        }), [\n        collection,\n        collator,\n        listBoxRef,\n        disabledBehavior,\n        disabledKeys,\n        orientation,\n        direction,\n        props.keyboardDelegate,\n        layout,\n        layoutDelegate\n    ]);\n    let { listBoxProps: listBoxProps } = (0, $e8Bmu$useListBox)({\n        ...props,\n        shouldSelectOnPressUp: isListDraggable || props.shouldSelectOnPressUp,\n        keyboardDelegate: keyboardDelegate,\n        isVirtualized: isVirtualized\n    }, state, listBoxRef);\n    let dragHooksProvided = (0, $e8Bmu$useRef)(isListDraggable);\n    let dropHooksProvided = (0, $e8Bmu$useRef)(isListDroppable);\n    (0, $e8Bmu$useEffect)(()=>{\n        if (process.env.NODE_ENV === 'production') return;\n        if (dragHooksProvided.current !== isListDraggable) console.warn('Drag hooks were provided during one render, but not another. This should be avoided as it may produce unexpected behavior.');\n        if (dropHooksProvided.current !== isListDroppable) console.warn('Drop hooks were provided during one render, but not another. This should be avoided as it may produce unexpected behavior.');\n    }, [\n        isListDraggable,\n        isListDroppable\n    ]);\n    let dragState = undefined;\n    let dropState = undefined;\n    let droppableCollection = undefined;\n    let isRootDropTarget = false;\n    let dragPreview = null;\n    let preview = (0, $e8Bmu$useRef)(null);\n    if (isListDraggable && dragAndDropHooks) {\n        dragState = dragAndDropHooks.useDraggableCollectionState({\n            collection: collection,\n            selectionManager: selectionManager,\n            preview: dragAndDropHooks.renderDragPreview ? preview : undefined\n        });\n        dragAndDropHooks.useDraggableCollection({}, dragState, listBoxRef);\n        let DragPreview = dragAndDropHooks.DragPreview;\n        dragPreview = dragAndDropHooks.renderDragPreview ? /*#__PURE__*/ (0, $e8Bmu$react).createElement(DragPreview, {\n            ref: preview\n        }, dragAndDropHooks.renderDragPreview) : null;\n    }\n    if (isListDroppable && dragAndDropHooks) {\n        dropState = dragAndDropHooks.useDroppableCollectionState({\n            collection: collection,\n            selectionManager: selectionManager\n        });\n        let dropTargetDelegate = dragAndDropHooks.dropTargetDelegate || ctxDropTargetDelegate || new dragAndDropHooks.ListDropTargetDelegate(collection, listBoxRef, {\n            orientation: orientation,\n            layout: layout,\n            direction: direction\n        });\n        droppableCollection = dragAndDropHooks.useDroppableCollection({\n            keyboardDelegate: keyboardDelegate,\n            dropTargetDelegate: dropTargetDelegate\n        }, dropState, listBoxRef);\n        isRootDropTarget = dropState.isDropTarget({\n            type: 'root'\n        });\n    }\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $e8Bmu$useFocusRing)();\n    let isEmpty = state.collection.size === 0;\n    let renderValues = {\n        isDropTarget: isRootDropTarget,\n        isEmpty: isEmpty,\n        isFocused: isFocused,\n        isFocusVisible: isFocusVisible,\n        layout: props.layout || 'stack',\n        state: state\n    };\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        className: props.className,\n        style: props.style,\n        defaultClassName: 'react-aria-ListBox',\n        values: renderValues\n    });\n    let emptyState = null;\n    if (isEmpty && props.renderEmptyState) emptyState = /*#__PURE__*/ (0, $e8Bmu$react).createElement(\"div\", {\n        // eslint-disable-next-line\n        role: \"option\",\n        style: {\n            display: 'contents'\n        }\n    }, props.renderEmptyState(renderValues));\n    let DOMProps = (0, $e8Bmu$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $e8Bmu$react).createElement((0, $e8Bmu$FocusScope), null, /*#__PURE__*/ (0, $e8Bmu$react).createElement(\"div\", {\n        ...(0, $e8Bmu$mergeProps)(DOMProps, renderProps, listBoxProps, focusProps, droppableCollection === null || droppableCollection === void 0 ? void 0 : droppableCollection.collectionProps),\n        ref: listBoxRef,\n        slot: props.slot || undefined,\n        onScroll: props.onScroll,\n        \"data-drop-target\": isRootDropTarget || undefined,\n        \"data-empty\": isEmpty || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-layout\": props.layout || 'stack',\n        \"data-orientation\": props.orientation || 'vertical'\n    }, /*#__PURE__*/ (0, $e8Bmu$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $eed445e0843c11d0$export$7ff8f37d2d81a48d,\n                props\n            ],\n            [\n                $eed445e0843c11d0$export$7c5906fe4f1f2af2,\n                state\n            ],\n            [\n                (0, $612b8eb6cb90e02d$export$d188a835a7bc5783),\n                {\n                    dragAndDropHooks: dragAndDropHooks,\n                    dragState: dragState,\n                    dropState: dropState\n                }\n            ],\n            [\n                (0, $431f98aba6844401$export$6615d83f6de245ce),\n                {\n                    elementType: 'div'\n                }\n            ],\n            [\n                (0, $612b8eb6cb90e02d$export$f55761759794cf55),\n                {\n                    render: $eed445e0843c11d0$var$ListBoxDropIndicatorWrapper\n                }\n            ],\n            [\n                (0, $7135fc7d473fd974$export$d40e14dec8b060a8),\n                {\n                    name: 'ListBoxSection',\n                    render: $eed445e0843c11d0$var$ListBoxSectionInner\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $e8Bmu$react).createElement((0, $c8a5a149f625efcf$export$758399f318e6385a), null, /*#__PURE__*/ (0, $e8Bmu$react).createElement(CollectionRoot, {\n        collection: collection,\n        scrollRef: listBoxRef,\n        persistedKeys: (0, $612b8eb6cb90e02d$export$d1e8e3fbb7461f6)(selectionManager, dragAndDropHooks, dropState),\n        renderDropIndicator: (0, $612b8eb6cb90e02d$export$971707d8a129a1f7)(dragAndDropHooks, dropState)\n    }))), emptyState, dragPreview));\n}\nfunction $eed445e0843c11d0$var$ListBoxSectionInner(props, ref, section, className = 'react-aria-ListBoxSection') {\n    let state = (0, $e8Bmu$useContext)($eed445e0843c11d0$export$7c5906fe4f1f2af2);\n    let { dragAndDropHooks: dragAndDropHooks, dropState: dropState } = (0, $e8Bmu$useContext)((0, $612b8eb6cb90e02d$export$d188a835a7bc5783));\n    let { CollectionBranch: CollectionBranch } = (0, $e8Bmu$useContext)((0, $7135fc7d473fd974$export$4feb769f8ddf26c5));\n    let [headingRef, heading] = (0, $64fa3d84918910a7$export$9d4c57ee4c6ffdd8)();\n    var _props_arialabel;\n    let { headingProps: headingProps, groupProps: groupProps } = (0, $e8Bmu$useListBoxSection)({\n        heading: heading,\n        'aria-label': (_props_arialabel = props['aria-label']) !== null && _props_arialabel !== void 0 ? _props_arialabel : undefined\n    });\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        defaultClassName: className,\n        className: props.className,\n        style: props.style,\n        values: {}\n    });\n    let DOMProps = (0, $e8Bmu$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $e8Bmu$react).createElement(\"section\", {\n        ...(0, $e8Bmu$mergeProps)(DOMProps, renderProps, groupProps),\n        ref: ref\n    }, /*#__PURE__*/ (0, $e8Bmu$react).createElement((0, $72a5793c14baf454$export$e0e4026c12a8bdbb).Provider, {\n        value: {\n            ...headingProps,\n            ref: headingRef\n        }\n    }, /*#__PURE__*/ (0, $e8Bmu$react).createElement(CollectionBranch, {\n        collection: state.collection,\n        parent: section,\n        renderDropIndicator: (0, $612b8eb6cb90e02d$export$971707d8a129a1f7)(dragAndDropHooks, dropState)\n    })));\n}\nconst $eed445e0843c11d0$export$dca12b0bb56e4fc = /*#__PURE__*/ (0, $e8Bmu$createBranchComponent)((0, $e8Bmu$SectionNode), $eed445e0843c11d0$var$ListBoxSectionInner);\nconst $eed445e0843c11d0$export$a11e76429ed99b4 = /*#__PURE__*/ (0, $e8Bmu$createLeafComponent)((0, $e8Bmu$ItemNode), function ListBoxItem(props, forwardedRef, item) {\n    let ref = (0, $e8Bmu$useObjectRef)(forwardedRef);\n    let state = (0, $e8Bmu$useContext)($eed445e0843c11d0$export$7c5906fe4f1f2af2);\n    let { dragAndDropHooks: dragAndDropHooks, dragState: dragState, dropState: dropState } = (0, $e8Bmu$useContext)((0, $612b8eb6cb90e02d$export$d188a835a7bc5783));\n    let { optionProps: optionProps, labelProps: labelProps, descriptionProps: descriptionProps, ...states } = (0, $e8Bmu$useOption)({\n        key: item.key,\n        'aria-label': props === null || props === void 0 ? void 0 : props['aria-label']\n    }, state, ref);\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $e8Bmu$useHover)({\n        isDisabled: !states.allowsSelection && !states.hasAction,\n        onHoverStart: item.props.onHoverStart,\n        onHoverChange: item.props.onHoverChange,\n        onHoverEnd: item.props.onHoverEnd\n    });\n    let { focusProps: focusProps } = (0, $e8Bmu$useFocus)(props);\n    let draggableItem = null;\n    if (dragState && dragAndDropHooks) draggableItem = dragAndDropHooks.useDraggableItem({\n        key: item.key,\n        hasAction: states.hasAction\n    }, dragState);\n    let droppableItem = null;\n    if (dropState && dragAndDropHooks) droppableItem = dragAndDropHooks.useDroppableItem({\n        target: {\n            type: 'item',\n            key: item.key,\n            dropPosition: 'on'\n        }\n    }, dropState, ref);\n    let isDragging = dragState && dragState.isDragging(item.key);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        id: undefined,\n        children: props.children,\n        defaultClassName: 'react-aria-ListBoxItem',\n        values: {\n            ...states,\n            isHovered: isHovered,\n            selectionMode: state.selectionManager.selectionMode,\n            selectionBehavior: state.selectionManager.selectionBehavior,\n            allowsDragging: !!dragState,\n            isDragging: isDragging,\n            isDropTarget: droppableItem === null || droppableItem === void 0 ? void 0 : droppableItem.isDropTarget\n        }\n    });\n    (0, $e8Bmu$useEffect)(()=>{\n        if (!item.textValue && process.env.NODE_ENV !== 'production') console.warn('A `textValue` prop is required for <ListBoxItem> elements with non-plain text children in order to support accessibility features such as type to select.');\n    }, [\n        item.textValue\n    ]);\n    let ElementType = props.href ? 'a' : 'div';\n    let DOMProps = (0, $e8Bmu$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    delete DOMProps.onClick;\n    if (ElementType === 'a' && optionProps.tabIndex == null) optionProps.tabIndex = -1;\n    return /*#__PURE__*/ (0, $e8Bmu$react).createElement(ElementType, {\n        ...(0, $e8Bmu$mergeProps)(DOMProps, renderProps, optionProps, hoverProps, focusProps, draggableItem === null || draggableItem === void 0 ? void 0 : draggableItem.dragProps, droppableItem === null || droppableItem === void 0 ? void 0 : droppableItem.dropProps),\n        ref: ref,\n        \"data-allows-dragging\": !!dragState || undefined,\n        \"data-selected\": states.isSelected || undefined,\n        \"data-disabled\": states.isDisabled || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focused\": states.isFocused || undefined,\n        \"data-focus-visible\": states.isFocusVisible || undefined,\n        \"data-pressed\": states.isPressed || undefined,\n        \"data-dragging\": isDragging || undefined,\n        \"data-drop-target\": (droppableItem === null || droppableItem === void 0 ? void 0 : droppableItem.isDropTarget) || undefined,\n        \"data-selection-mode\": state.selectionManager.selectionMode === 'none' ? undefined : state.selectionManager.selectionMode\n    }, /*#__PURE__*/ (0, $e8Bmu$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $514c0188e459b4c0$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        [(0, $64fa3d84918910a7$export$c62b8e45d58ddad9)]: labelProps,\n                        label: labelProps,\n                        description: descriptionProps\n                    }\n                }\n            ],\n            [\n                (0, $1d5b8b8664671ef2$export$c9549807523555e0),\n                {\n                    isSelected: states.isSelected\n                }\n            ]\n        ]\n    }, renderProps.children));\n});\nfunction $eed445e0843c11d0$var$ListBoxDropIndicatorWrapper(props, ref) {\n    ref = (0, $e8Bmu$useObjectRef)(ref);\n    let { dragAndDropHooks: dragAndDropHooks, dropState: dropState } = (0, $e8Bmu$useContext)((0, $612b8eb6cb90e02d$export$d188a835a7bc5783));\n    let { dropIndicatorProps: dropIndicatorProps, isHidden: isHidden, isDropTarget: isDropTarget } = dragAndDropHooks.useDropIndicator(props, dropState, ref);\n    if (isHidden) return null;\n    return /*#__PURE__*/ (0, $e8Bmu$react).createElement($eed445e0843c11d0$var$ListBoxDropIndicatorForwardRef, {\n        ...props,\n        dropIndicatorProps: dropIndicatorProps,\n        isDropTarget: isDropTarget,\n        ref: ref\n    });\n}\nfunction $eed445e0843c11d0$var$ListBoxDropIndicator(props, ref) {\n    let { dropIndicatorProps: dropIndicatorProps, isDropTarget: isDropTarget, ...otherProps } = props;\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...otherProps,\n        defaultClassName: 'react-aria-DropIndicator',\n        values: {\n            isDropTarget: isDropTarget\n        }\n    });\n    return /*#__PURE__*/ (0, $e8Bmu$react).createElement(\"div\", {\n        ...dropIndicatorProps,\n        ...renderProps,\n        // eslint-disable-next-line\n        role: \"option\",\n        ref: ref,\n        \"data-drop-target\": isDropTarget || undefined\n    });\n}\nconst $eed445e0843c11d0$var$ListBoxDropIndicatorForwardRef = /*#__PURE__*/ (0, $e8Bmu$forwardRef)($eed445e0843c11d0$var$ListBoxDropIndicator);\nconst $eed445e0843c11d0$export$8e6d031a08cf56a1 = (0, $e8Bmu$createLeafComponent)((0, $e8Bmu$LoaderNode), function ListBoxLoadingIndicator(props, ref, item) {\n    let state = (0, $e8Bmu$useContext)($eed445e0843c11d0$export$7c5906fe4f1f2af2);\n    let { isLoading: isLoading, onLoadMore: onLoadMore, scrollOffset: scrollOffset, ...otherProps } = props;\n    let sentinelRef = (0, $e8Bmu$useRef)(null);\n    let memoedLoadMoreProps = (0, $e8Bmu$useMemo)(()=>({\n            onLoadMore: onLoadMore,\n            collection: state === null || state === void 0 ? void 0 : state.collection,\n            sentinelRef: sentinelRef,\n            scrollOffset: scrollOffset\n        }), [\n        onLoadMore,\n        scrollOffset,\n        state === null || state === void 0 ? void 0 : state.collection\n    ]);\n    (0, $e8Bmu$useLoadMoreSentinel)(memoedLoadMoreProps, sentinelRef);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...otherProps,\n        id: undefined,\n        children: item.rendered,\n        defaultClassName: 'react-aria-ListBoxLoadingIndicator',\n        values: null\n    });\n    let optionProps = {\n        // For Android talkback\n        tabIndex: -1\n    };\n    return /*#__PURE__*/ (0, $e8Bmu$react).createElement((0, $e8Bmu$react).Fragment, null, /*#__PURE__*/ (0, $e8Bmu$react).createElement(\"div\", {\n        style: {\n            position: 'relative',\n            width: 0,\n            height: 0\n        },\n        inert: (0, $e8Bmu$inertValue)(true)\n    }, /*#__PURE__*/ (0, $e8Bmu$react).createElement(\"div\", {\n        \"data-testid\": \"loadMoreSentinel\",\n        ref: sentinelRef,\n        style: {\n            position: 'absolute',\n            height: 1,\n            width: 1\n        }\n    })), isLoading && renderProps.children && /*#__PURE__*/ (0, $e8Bmu$react).createElement(\"div\", {\n        ...(0, $e8Bmu$mergeProps)((0, $e8Bmu$filterDOMProps)(props, {\n            global: true\n        }), optionProps),\n        ...renderProps,\n        // aria-selected isn't needed here since this option is not selectable.\n        // eslint-disable-next-line jsx-a11y/role-has-required-aria-props\n        role: \"option\",\n        ref: ref\n    }, renderProps.children));\n});\n\n\nexport {$eed445e0843c11d0$export$7ff8f37d2d81a48d as ListBoxContext, $eed445e0843c11d0$export$7c5906fe4f1f2af2 as ListStateContext, $eed445e0843c11d0$export$41f133550aa26f48 as ListBox, $eed445e0843c11d0$export$dca12b0bb56e4fc as ListBoxSection, $eed445e0843c11d0$export$a11e76429ed99b4 as ListBoxItem, $eed445e0843c11d0$export$8e6d031a08cf56a1 as ListBoxLoadMoreItem};\n//# sourceMappingURL=ListBox.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {filterDOMProps as $8wt2Z$filterDOMProps} from \"@react-aria/utils\";\nimport $8wt2Z$react, {createContext as $8wt2Z$createContext, forwardRef as $8wt2Z$forwardRef} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $44f671af83e7d9e0$export$2de4954e8ae13b9f = /*#__PURE__*/ (0, $8wt2Z$createContext)({\n    placement: 'bottom'\n});\nconst $44f671af83e7d9e0$export$746d02f47f4d381 = /*#__PURE__*/ (0, $8wt2Z$forwardRef)(function OverlayArrow(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $44f671af83e7d9e0$export$2de4954e8ae13b9f);\n    let placement = props.placement;\n    let style = {\n        position: 'absolute',\n        transform: placement === 'top' || placement === 'bottom' ? 'translateX(-50%)' : 'translateY(-50%)'\n    };\n    if (placement != null) style[placement] = '100%';\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-OverlayArrow',\n        values: {\n            placement: placement\n        }\n    });\n    // remove undefined values from renderProps.style object so that it can be\n    // spread merged with the other style object\n    if (renderProps.style) Object.keys(renderProps.style).forEach((key)=>renderProps.style[key] === undefined && delete renderProps.style[key]);\n    let DOMProps = (0, $8wt2Z$filterDOMProps)(props);\n    return /*#__PURE__*/ (0, $8wt2Z$react).createElement(\"div\", {\n        ...DOMProps,\n        ...renderProps,\n        style: {\n            ...style,\n            ...renderProps.style\n        },\n        ref: ref,\n        \"data-placement\": placement\n    });\n});\n\n\nexport {$44f671af83e7d9e0$export$2de4954e8ae13b9f as OverlayArrowContext, $44f671af83e7d9e0$export$746d02f47f4d381 as OverlayArrow};\n//# sourceMappingURL=OverlayArrow.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {OverlayArrowContext as $44f671af83e7d9e0$export$2de4954e8ae13b9f} from \"./OverlayArrow.mjs\";\nimport {OverlayTriggerStateContext as $de32f1b87079253c$export$d2f961adcb0afbe} from \"./Dialog.mjs\";\nimport {useLocale as $ehFet$useLocale, usePopover as $ehFet$usePopover, DismissButton as $ehFet$DismissButton, Overlay as $ehFet$Overlay} from \"react-aria\";\nimport {useExitAnimation as $ehFet$useExitAnimation, useEnterAnimation as $ehFet$useEnterAnimation, useLayoutEffect as $ehFet$useLayoutEffect, mergeProps as $ehFet$mergeProps, filterDOMProps as $ehFet$filterDOMProps} from \"@react-aria/utils\";\nimport {focusSafely as $ehFet$focusSafely} from \"@react-aria/interactions\";\nimport {useOverlayTriggerState as $ehFet$useOverlayTriggerState} from \"react-stately\";\nimport $ehFet$react, {createContext as $ehFet$createContext, forwardRef as $ehFet$forwardRef, useContext as $ehFet$useContext, useRef as $ehFet$useRef, useState as $ehFet$useState, useEffect as $ehFet$useEffect, useMemo as $ehFet$useMemo} from \"react\";\nimport {useIsHidden as $ehFet$useIsHidden} from \"@react-aria/collections\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\nconst $07b14b47974efb58$export$9b9a0cd73afb7ca4 = /*#__PURE__*/ (0, $ehFet$createContext)(null);\n// Stores a ref for the portal container for a group of popovers (e.g. submenus).\nconst $07b14b47974efb58$var$PopoverGroupContext = /*#__PURE__*/ (0, $ehFet$createContext)(null);\nconst $07b14b47974efb58$export$5b6b19405a83ff9d = /*#__PURE__*/ (0, $ehFet$forwardRef)(function Popover(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $07b14b47974efb58$export$9b9a0cd73afb7ca4);\n    let contextState = (0, $ehFet$useContext)((0, $de32f1b87079253c$export$d2f961adcb0afbe));\n    let localState = (0, $ehFet$useOverlayTriggerState)(props);\n    let state = props.isOpen != null || props.defaultOpen != null || !contextState ? localState : contextState;\n    let isExiting = (0, $ehFet$useExitAnimation)(ref, state.isOpen) || props.isExiting || false;\n    let isHidden = (0, $ehFet$useIsHidden)();\n    let { direction: direction } = (0, $ehFet$useLocale)();\n    // If we are in a hidden tree, we still need to preserve our children.\n    if (isHidden) {\n        let children = props.children;\n        if (typeof children === 'function') children = children({\n            trigger: props.trigger || null,\n            placement: 'bottom',\n            isEntering: false,\n            isExiting: false,\n            defaultChildren: null\n        });\n        return /*#__PURE__*/ (0, $ehFet$react).createElement((0, $ehFet$react).Fragment, null, children);\n    }\n    if (state && !state.isOpen && !isExiting) return null;\n    return /*#__PURE__*/ (0, $ehFet$react).createElement($07b14b47974efb58$var$PopoverInner, {\n        ...props,\n        triggerRef: props.triggerRef,\n        state: state,\n        popoverRef: ref,\n        isExiting: isExiting,\n        dir: direction\n    });\n});\nfunction $07b14b47974efb58$var$PopoverInner({ state: state, isExiting: isExiting, UNSTABLE_portalContainer: UNSTABLE_portalContainer, clearContexts: clearContexts, ...props }) {\n    // Calculate the arrow size internally (and remove props.arrowSize from PopoverProps)\n    // Referenced from: packages/@react-spectrum/tooltip/src/TooltipTrigger.tsx\n    let arrowRef = (0, $ehFet$useRef)(null);\n    let containerRef = (0, $ehFet$useRef)(null);\n    let groupCtx = (0, $ehFet$useContext)($07b14b47974efb58$var$PopoverGroupContext);\n    let isSubPopover = groupCtx && props.trigger === 'SubmenuTrigger';\n    var _props_offset;\n    let { popoverProps: popoverProps, underlayProps: underlayProps, arrowProps: arrowProps, placement: placement, triggerAnchorPoint: triggerAnchorPoint } = (0, $ehFet$usePopover)({\n        ...props,\n        offset: (_props_offset = props.offset) !== null && _props_offset !== void 0 ? _props_offset : 8,\n        arrowRef: arrowRef,\n        // If this is a submenu/subdialog, use the root popover's container\n        // to detect outside interaction and add aria-hidden.\n        groupRef: isSubPopover ? groupCtx : containerRef\n    }, state);\n    let ref = props.popoverRef;\n    let isEntering = (0, $ehFet$useEnterAnimation)(ref, !!placement) || props.isEntering || false;\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-Popover',\n        values: {\n            trigger: props.trigger || null,\n            placement: placement,\n            isEntering: isEntering,\n            isExiting: isExiting\n        }\n    });\n    // Automatically render Popover with role=dialog except when isNonModal is true,\n    // or a dialog is already nested inside the popover.\n    let shouldBeDialog = !props.isNonModal || props.trigger === 'SubmenuTrigger';\n    let [isDialog, setDialog] = (0, $ehFet$useState)(false);\n    (0, $ehFet$useLayoutEffect)(()=>{\n        if (ref.current) setDialog(shouldBeDialog && !ref.current.querySelector('[role=dialog]'));\n    }, [\n        ref,\n        shouldBeDialog\n    ]);\n    // Focus the popover itself on mount, unless a child element is already focused.\n    // Skip this for submenus since hovering a submenutrigger should keep focus on the trigger\n    (0, $ehFet$useEffect)(()=>{\n        if (isDialog && props.trigger !== 'SubmenuTrigger' && ref.current && !ref.current.contains(document.activeElement)) (0, $ehFet$focusSafely)(ref.current);\n    }, [\n        isDialog,\n        ref,\n        props.trigger\n    ]);\n    let children = (0, $ehFet$useMemo)(()=>{\n        let children = renderProps.children;\n        if (clearContexts) for (let Context of clearContexts)children = /*#__PURE__*/ (0, $ehFet$react).createElement(Context.Provider, {\n            value: null\n        }, children);\n        return children;\n    }, [\n        renderProps.children,\n        clearContexts\n    ]);\n    let style = {\n        ...popoverProps.style,\n        '--trigger-anchor-point': triggerAnchorPoint ? `${triggerAnchorPoint.x}px ${triggerAnchorPoint.y}px` : undefined,\n        ...renderProps.style\n    };\n    let overlay = /*#__PURE__*/ (0, $ehFet$react).createElement(\"div\", {\n        ...(0, $ehFet$mergeProps)((0, $ehFet$filterDOMProps)(props, {\n            global: true\n        }), popoverProps),\n        ...renderProps,\n        role: isDialog ? 'dialog' : undefined,\n        tabIndex: isDialog ? -1 : undefined,\n        \"aria-label\": props['aria-label'],\n        \"aria-labelledby\": props['aria-labelledby'],\n        ref: ref,\n        slot: props.slot || undefined,\n        style: style,\n        dir: props.dir,\n        \"data-trigger\": props.trigger,\n        \"data-placement\": placement,\n        \"data-entering\": isEntering || undefined,\n        \"data-exiting\": isExiting || undefined\n    }, !props.isNonModal && /*#__PURE__*/ (0, $ehFet$react).createElement((0, $ehFet$DismissButton), {\n        onDismiss: state.close\n    }), /*#__PURE__*/ (0, $ehFet$react).createElement((0, $44f671af83e7d9e0$export$2de4954e8ae13b9f).Provider, {\n        value: {\n            ...arrowProps,\n            placement: placement,\n            ref: arrowRef\n        }\n    }, children), /*#__PURE__*/ (0, $ehFet$react).createElement((0, $ehFet$DismissButton), {\n        onDismiss: state.close\n    }));\n    // If this is a root popover, render an extra div to act as the portal container for submenus/subdialogs.\n    if (!isSubPopover) return /*#__PURE__*/ (0, $ehFet$react).createElement((0, $ehFet$Overlay), {\n        ...props,\n        shouldContainFocus: isDialog,\n        isExiting: isExiting,\n        portalContainer: UNSTABLE_portalContainer\n    }, !props.isNonModal && state.isOpen && /*#__PURE__*/ (0, $ehFet$react).createElement(\"div\", {\n        \"data-testid\": \"underlay\",\n        ...underlayProps,\n        style: {\n            position: 'fixed',\n            inset: 0\n        }\n    }), /*#__PURE__*/ (0, $ehFet$react).createElement(\"div\", {\n        ref: containerRef,\n        style: {\n            display: 'contents'\n        }\n    }, /*#__PURE__*/ (0, $ehFet$react).createElement($07b14b47974efb58$var$PopoverGroupContext.Provider, {\n        value: containerRef\n    }, overlay)));\n    var _ref;\n    // Submenus/subdialogs are mounted into the root popover's container.\n    return /*#__PURE__*/ (0, $ehFet$react).createElement((0, $ehFet$Overlay), {\n        ...props,\n        shouldContainFocus: isDialog,\n        isExiting: isExiting,\n        portalContainer: (_ref = UNSTABLE_portalContainer !== null && UNSTABLE_portalContainer !== void 0 ? UNSTABLE_portalContainer : groupCtx === null || groupCtx === void 0 ? void 0 : groupCtx.current) !== null && _ref !== void 0 ? _ref : undefined\n    }, overlay);\n}\n\n\nexport {$07b14b47974efb58$export$9b9a0cd73afb7ca4 as PopoverContext, $07b14b47974efb58$export$5b6b19405a83ff9d as Popover};\n//# sourceMappingURL=Popover.module.js.map\n","import {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport $3zqIJ$react, {createContext as $3zqIJ$createContext, forwardRef as $3zqIJ$forwardRef} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nconst $63df2425e2108aa8$export$744d98a3b8a94e1c = /*#__PURE__*/ (0, $3zqIJ$createContext)({});\nconst $63df2425e2108aa8$export$16e4d70cc375e707 = /*#__PURE__*/ (0, $3zqIJ$forwardRef)(function Keyboard(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $63df2425e2108aa8$export$744d98a3b8a94e1c);\n    return /*#__PURE__*/ (0, $3zqIJ$react).createElement(\"kbd\", {\n        dir: \"ltr\",\n        ...props,\n        ref: ref\n    });\n});\n\n\nexport {$63df2425e2108aa8$export$744d98a3b8a94e1c as KeyboardContext, $63df2425e2108aa8$export$16e4d70cc375e707 as Keyboard};\n//# sourceMappingURL=Keyboard.module.js.map\n","import {DEFAULT_SLOT as $64fa3d84918910a7$export$c62b8e45d58ddad9, Provider as $64fa3d84918910a7$export$2881499e37b75b9a, useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3, useSlot as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8, useSlottedContext as $64fa3d84918910a7$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {CollectionRendererContext as $7135fc7d473fd974$export$4feb769f8ddf26c5, SectionContext as $7135fc7d473fd974$export$d40e14dec8b060a8, usePersistedKeys as $7135fc7d473fd974$export$90e00781bc59d8f9} from \"./Collection.mjs\";\nimport {FieldInputContext as $4e85f108e88277b8$export$698f465ec27e93df, SelectableCollectionContext as $4e85f108e88277b8$export$b0d3ecf7112093a7} from \"./RSPContexts.mjs\";\nimport {HeaderContext as $72a5793c14baf454$export$e0e4026c12a8bdbb} from \"./Header.mjs\";\nimport {KeyboardContext as $63df2425e2108aa8$export$744d98a3b8a94e1c} from \"./Keyboard.mjs\";\nimport {OverlayTriggerStateContext as $de32f1b87079253c$export$d2f961adcb0afbe} from \"./Dialog.mjs\";\nimport {PopoverContext as $07b14b47974efb58$export$9b9a0cd73afb7ca4} from \"./Popover.mjs\";\nimport {SelectionIndicatorContext as $1d5b8b8664671ef2$export$c9549807523555e0} from \"./SelectionIndicator.mjs\";\nimport {SeparatorContext as $431f98aba6844401$export$6615d83f6de245ce} from \"./Separator.mjs\";\nimport {SharedElementTransition as $c8a5a149f625efcf$export$758399f318e6385a} from \"./SharedElementTransition.mjs\";\nimport {TextContext as $514c0188e459b4c0$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useMenuTrigger as $kM2ZM$useMenuTrigger, useSubmenuTrigger as $kM2ZM$useSubmenuTrigger, useMenu as $kM2ZM$useMenu, FocusScope as $kM2ZM$FocusScope, mergeProps as $kM2ZM$mergeProps, useMenuSection as $kM2ZM$useMenuSection, useMenuItem as $kM2ZM$useMenuItem, useHover as $kM2ZM$useHover} from \"react-aria\";\nimport {CollectionNode as $kM2ZM$CollectionNode, createBranchComponent as $kM2ZM$createBranchComponent, CollectionBuilder as $kM2ZM$CollectionBuilder, Collection as $kM2ZM$Collection, SectionNode as $kM2ZM$SectionNode, createLeafComponent as $kM2ZM$createLeafComponent, ItemNode as $kM2ZM$ItemNode} from \"@react-aria/collections\";\nimport {useMenuTriggerState as $kM2ZM$useMenuTriggerState, useSubmenuTriggerState as $kM2ZM$useSubmenuTriggerState, useTreeState as $kM2ZM$useTreeState} from \"react-stately\";\nimport {useResizeObserver as $kM2ZM$useResizeObserver, useObjectRef as $kM2ZM$useObjectRef, filterDOMProps as $kM2ZM$filterDOMProps} from \"@react-aria/utils\";\nimport {SelectionManager as $kM2ZM$SelectionManager, useMultipleSelectionState as $kM2ZM$useMultipleSelectionState} from \"@react-stately/selection\";\nimport {PressResponder as $kM2ZM$PressResponder} from \"@react-aria/interactions\";\nimport $kM2ZM$react, {createContext as $kM2ZM$createContext, useRef as $kM2ZM$useRef, useState as $kM2ZM$useState, useCallback as $kM2ZM$useCallback, useContext as $kM2ZM$useContext, forwardRef as $kM2ZM$forwardRef, useMemo as $kM2ZM$useMemo} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $3674c52c6b3c5bce$export$c7e742effb1c51e2 = /*#__PURE__*/ (0, $kM2ZM$createContext)(null);\nconst $3674c52c6b3c5bce$export$24aad8519b95b41b = /*#__PURE__*/ (0, $kM2ZM$createContext)(null);\nconst $3674c52c6b3c5bce$export$795aec4671cbae19 = /*#__PURE__*/ (0, $kM2ZM$createContext)(null);\nconst $3674c52c6b3c5bce$var$SelectionManagerContext = /*#__PURE__*/ (0, $kM2ZM$createContext)(null);\nfunction $3674c52c6b3c5bce$export$27d2ad3c5815583e(props) {\n    let state = (0, $kM2ZM$useMenuTriggerState)(props);\n    let ref = (0, $kM2ZM$useRef)(null);\n    let { menuTriggerProps: menuTriggerProps, menuProps: menuProps } = (0, $kM2ZM$useMenuTrigger)({\n        ...props,\n        type: 'menu'\n    }, state, ref);\n    // Allows menu width to match button\n    let [buttonWidth, setButtonWidth] = (0, $kM2ZM$useState)(null);\n    let onResize = (0, $kM2ZM$useCallback)(()=>{\n        if (ref.current) setButtonWidth(ref.current.offsetWidth + 'px');\n    }, [\n        ref\n    ]);\n    (0, $kM2ZM$useResizeObserver)({\n        ref: ref,\n        onResize: onResize\n    });\n    let scrollRef = (0, $kM2ZM$useRef)(null);\n    return /*#__PURE__*/ (0, $kM2ZM$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $3674c52c6b3c5bce$export$c7e742effb1c51e2,\n                {\n                    ...menuProps,\n                    ref: scrollRef\n                }\n            ],\n            [\n                (0, $de32f1b87079253c$export$d2f961adcb0afbe),\n                state\n            ],\n            [\n                $3674c52c6b3c5bce$export$795aec4671cbae19,\n                state\n            ],\n            [\n                (0, $07b14b47974efb58$export$9b9a0cd73afb7ca4),\n                {\n                    trigger: 'MenuTrigger',\n                    triggerRef: ref,\n                    scrollRef: scrollRef,\n                    placement: 'bottom start',\n                    style: {\n                        '--trigger-width': buttonWidth\n                    },\n                    'aria-labelledby': menuProps['aria-labelledby']\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $kM2ZM$react).createElement((0, $kM2ZM$PressResponder), {\n        ...menuTriggerProps,\n        ref: ref,\n        isPressed: state.isOpen\n    }, props.children));\n}\nconst $3674c52c6b3c5bce$var$SubmenuTriggerContext = /*#__PURE__*/ (0, $kM2ZM$createContext)(null);\nclass $3674c52c6b3c5bce$var$SubmenuTriggerNode extends (0, $kM2ZM$CollectionNode) {\n    filter(collection, newCollection, filterFn) {\n        let triggerNode = collection.getItem(this.firstChildKey);\n        if (triggerNode && filterFn(triggerNode.textValue, this)) {\n            let clone = this.clone();\n            newCollection.addDescendants(clone, collection);\n            return clone;\n        }\n        return null;\n    }\n}\n$3674c52c6b3c5bce$var$SubmenuTriggerNode.type = 'submenutrigger';\nconst $3674c52c6b3c5bce$export$ecabc99eeffab7ca = /*#__PURE__*/ (0, $kM2ZM$createBranchComponent)($3674c52c6b3c5bce$var$SubmenuTriggerNode, (props, ref, item)=>{\n    let { CollectionBranch: CollectionBranch } = (0, $kM2ZM$useContext)((0, $7135fc7d473fd974$export$4feb769f8ddf26c5));\n    let state = (0, $kM2ZM$useContext)($3674c52c6b3c5bce$export$24aad8519b95b41b);\n    let rootMenuTriggerState = (0, $kM2ZM$useContext)($3674c52c6b3c5bce$export$795aec4671cbae19);\n    let submenuTriggerState = (0, $kM2ZM$useSubmenuTriggerState)({\n        triggerKey: item.key\n    }, rootMenuTriggerState);\n    let submenuRef = (0, $kM2ZM$useRef)(null);\n    let itemRef = (0, $kM2ZM$useObjectRef)(ref);\n    let { parentMenuRef: parentMenuRef, shouldUseVirtualFocus: shouldUseVirtualFocus } = (0, $kM2ZM$useContext)($3674c52c6b3c5bce$var$SubmenuTriggerContext);\n    let { submenuTriggerProps: submenuTriggerProps, submenuProps: submenuProps, popoverProps: popoverProps } = (0, $kM2ZM$useSubmenuTrigger)({\n        parentMenuRef: parentMenuRef,\n        submenuRef: submenuRef,\n        delay: props.delay,\n        shouldUseVirtualFocus: shouldUseVirtualFocus\n    }, submenuTriggerState, itemRef);\n    return /*#__PURE__*/ (0, $kM2ZM$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $3674c52c6b3c5bce$var$MenuItemContext,\n                {\n                    ...submenuTriggerProps,\n                    onAction: undefined,\n                    ref: itemRef\n                }\n            ],\n            [\n                $3674c52c6b3c5bce$export$c7e742effb1c51e2,\n                {\n                    ref: submenuRef,\n                    ...submenuProps\n                }\n            ],\n            [\n                (0, $de32f1b87079253c$export$d2f961adcb0afbe),\n                submenuTriggerState\n            ],\n            [\n                (0, $07b14b47974efb58$export$9b9a0cd73afb7ca4),\n                {\n                    trigger: 'SubmenuTrigger',\n                    triggerRef: itemRef,\n                    placement: 'end top',\n                    'aria-labelledby': submenuProps['aria-labelledby'],\n                    ...popoverProps\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $kM2ZM$react).createElement(CollectionBranch, {\n        collection: state.collection,\n        parent: item\n    }), props.children[1]);\n}, (props)=>props.children[0]);\nconst $3674c52c6b3c5bce$export$d9b273488cd8ce6f = /*#__PURE__*/ (0, $kM2ZM$forwardRef)(function Menu(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $3674c52c6b3c5bce$export$c7e742effb1c51e2);\n    // Delay rendering the actual menu until we have the collection so that auto focus works properly.\n    return /*#__PURE__*/ (0, $kM2ZM$react).createElement((0, $kM2ZM$CollectionBuilder), {\n        content: /*#__PURE__*/ (0, $kM2ZM$react).createElement((0, $kM2ZM$Collection), props)\n    }, (collection)=>/*#__PURE__*/ (0, $kM2ZM$react).createElement($3674c52c6b3c5bce$var$MenuInner, {\n            props: props,\n            collection: collection,\n            menuRef: ref\n        }));\n});\nfunction $3674c52c6b3c5bce$var$MenuInner({ props: props, collection: collection, menuRef: ref }) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, (0, $4e85f108e88277b8$export$b0d3ecf7112093a7));\n    let { filter: filter, ...autocompleteMenuProps } = props;\n    let filteredCollection = (0, $kM2ZM$useMemo)(()=>filter ? collection.filter(filter) : collection, [\n        collection,\n        filter\n    ]);\n    let state = (0, $kM2ZM$useTreeState)({\n        ...props,\n        collection: filteredCollection,\n        children: undefined\n    });\n    let triggerState = (0, $kM2ZM$useContext)($3674c52c6b3c5bce$export$795aec4671cbae19);\n    let { isVirtualized: isVirtualized, CollectionRoot: CollectionRoot } = (0, $kM2ZM$useContext)((0, $7135fc7d473fd974$export$4feb769f8ddf26c5));\n    let { menuProps: menuProps } = (0, $kM2ZM$useMenu)({\n        ...props,\n        isVirtualized: isVirtualized,\n        onClose: props.onClose || (triggerState === null || triggerState === void 0 ? void 0 : triggerState.close)\n    }, state, ref);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        defaultClassName: 'react-aria-Menu',\n        className: props.className,\n        style: props.style,\n        values: {\n            isEmpty: state.collection.size === 0\n        }\n    });\n    let emptyState = null;\n    if (state.collection.size === 0 && props.renderEmptyState) emptyState = /*#__PURE__*/ (0, $kM2ZM$react).createElement(\"div\", {\n        role: \"menuitem\",\n        style: {\n            display: 'contents'\n        }\n    }, props.renderEmptyState());\n    let DOMProps = (0, $kM2ZM$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $kM2ZM$react).createElement((0, $kM2ZM$FocusScope), null, /*#__PURE__*/ (0, $kM2ZM$react).createElement(\"div\", {\n        ...(0, $kM2ZM$mergeProps)(DOMProps, renderProps, menuProps),\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-empty\": state.collection.size === 0 || undefined,\n        onScroll: props.onScroll\n    }, /*#__PURE__*/ (0, $kM2ZM$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $3674c52c6b3c5bce$export$24aad8519b95b41b,\n                state\n            ],\n            [\n                (0, $431f98aba6844401$export$6615d83f6de245ce),\n                {\n                    elementType: 'div'\n                }\n            ],\n            [\n                (0, $7135fc7d473fd974$export$d40e14dec8b060a8),\n                {\n                    name: 'MenuSection',\n                    render: $3674c52c6b3c5bce$var$MenuSectionInner\n                }\n            ],\n            [\n                $3674c52c6b3c5bce$var$SubmenuTriggerContext,\n                {\n                    parentMenuRef: ref,\n                    shouldUseVirtualFocus: autocompleteMenuProps === null || autocompleteMenuProps === void 0 ? void 0 : autocompleteMenuProps.shouldUseVirtualFocus\n                }\n            ],\n            [\n                $3674c52c6b3c5bce$var$MenuItemContext,\n                null\n            ],\n            [\n                (0, $4e85f108e88277b8$export$b0d3ecf7112093a7),\n                null\n            ],\n            [\n                (0, $4e85f108e88277b8$export$698f465ec27e93df),\n                null\n            ],\n            [\n                $3674c52c6b3c5bce$var$SelectionManagerContext,\n                state.selectionManager\n            ],\n            /* Ensure root MenuTriggerState is defined, in case Menu is rendered outside a MenuTrigger. */ /* We assume the context can never change between defined and undefined. */ /* eslint-disable-next-line react-hooks/rules-of-hooks */ [\n                $3674c52c6b3c5bce$export$795aec4671cbae19,\n                triggerState !== null && triggerState !== void 0 ? triggerState : (0, $kM2ZM$useMenuTriggerState)({})\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $kM2ZM$react).createElement((0, $c8a5a149f625efcf$export$758399f318e6385a), null, /*#__PURE__*/ (0, $kM2ZM$react).createElement(CollectionRoot, {\n        collection: state.collection,\n        persistedKeys: (0, $7135fc7d473fd974$export$90e00781bc59d8f9)(state.selectionManager.focusedKey),\n        scrollRef: ref\n    }))), emptyState));\n}\n// A subclass of SelectionManager that forwards focus-related properties to the parent,\n// but has its own local selection state.\nclass $3674c52c6b3c5bce$var$GroupSelectionManager extends (0, $kM2ZM$SelectionManager) {\n    get focusedKey() {\n        return this.parent.focusedKey;\n    }\n    get isFocused() {\n        return this.parent.isFocused;\n    }\n    setFocusedKey(key, childFocusStrategy) {\n        return this.parent.setFocusedKey(key, childFocusStrategy);\n    }\n    setFocused(isFocused) {\n        this.parent.setFocused(isFocused);\n    }\n    get childFocusStrategy() {\n        return this.parent.childFocusStrategy;\n    }\n    constructor(parent, state){\n        super(parent.collection, state);\n        this.parent = parent;\n    }\n}\nfunction $3674c52c6b3c5bce$var$MenuSectionInner(props, ref, section, className = 'react-aria-MenuSection') {\n    var _section_props, _section_props1;\n    let state = (0, $kM2ZM$useContext)($3674c52c6b3c5bce$export$24aad8519b95b41b);\n    let { CollectionBranch: CollectionBranch } = (0, $kM2ZM$useContext)((0, $7135fc7d473fd974$export$4feb769f8ddf26c5));\n    let [headingRef, heading] = (0, $64fa3d84918910a7$export$9d4c57ee4c6ffdd8)();\n    var _section_props_arialabel;\n    let { headingProps: headingProps, groupProps: groupProps } = (0, $kM2ZM$useMenuSection)({\n        heading: heading,\n        'aria-label': (_section_props_arialabel = section.props['aria-label']) !== null && _section_props_arialabel !== void 0 ? _section_props_arialabel : undefined\n    });\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        defaultClassName: className,\n        className: (_section_props = section.props) === null || _section_props === void 0 ? void 0 : _section_props.className,\n        style: (_section_props1 = section.props) === null || _section_props1 === void 0 ? void 0 : _section_props1.style,\n        values: {}\n    });\n    let parent = (0, $kM2ZM$useContext)($3674c52c6b3c5bce$var$SelectionManagerContext);\n    let selectionState = (0, $kM2ZM$useMultipleSelectionState)(props);\n    let manager = props.selectionMode != null ? new $3674c52c6b3c5bce$var$GroupSelectionManager(parent, selectionState) : parent;\n    let DOMProps = (0, $kM2ZM$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $kM2ZM$react).createElement(\"section\", {\n        ...(0, $kM2ZM$mergeProps)(DOMProps, renderProps, groupProps),\n        ref: ref\n    }, /*#__PURE__*/ (0, $kM2ZM$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $72a5793c14baf454$export$e0e4026c12a8bdbb),\n                {\n                    ...headingProps,\n                    ref: headingRef\n                }\n            ],\n            [\n                $3674c52c6b3c5bce$var$SelectionManagerContext,\n                manager\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $kM2ZM$react).createElement(CollectionBranch, {\n        collection: state.collection,\n        parent: section\n    })));\n}\nconst $3674c52c6b3c5bce$export$4b1545b4f2016d26 = /*#__PURE__*/ (0, $kM2ZM$createBranchComponent)((0, $kM2ZM$SectionNode), $3674c52c6b3c5bce$var$MenuSectionInner);\nconst $3674c52c6b3c5bce$var$MenuItemContext = /*#__PURE__*/ (0, $kM2ZM$createContext)(null);\nconst $3674c52c6b3c5bce$export$2ce376c2cc3355c8 = /*#__PURE__*/ (0, $kM2ZM$createLeafComponent)((0, $kM2ZM$ItemNode), function MenuItem(props, forwardedRef, item) {\n    var _useSlottedContext;\n    [props, forwardedRef] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, forwardedRef, $3674c52c6b3c5bce$var$MenuItemContext);\n    let id = (_useSlottedContext = (0, $64fa3d84918910a7$export$fabf2dc03a41866e)($3674c52c6b3c5bce$var$MenuItemContext)) === null || _useSlottedContext === void 0 ? void 0 : _useSlottedContext.id;\n    let state = (0, $kM2ZM$useContext)($3674c52c6b3c5bce$export$24aad8519b95b41b);\n    let ref = (0, $kM2ZM$useObjectRef)(forwardedRef);\n    let selectionManager = (0, $kM2ZM$useContext)($3674c52c6b3c5bce$var$SelectionManagerContext);\n    let { menuItemProps: menuItemProps, labelProps: labelProps, descriptionProps: descriptionProps, keyboardShortcutProps: keyboardShortcutProps, ...states } = (0, $kM2ZM$useMenuItem)({\n        ...props,\n        id: id,\n        key: item.key,\n        selectionManager: selectionManager\n    }, state, ref);\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $kM2ZM$useHover)({\n        isDisabled: states.isDisabled\n    });\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        id: undefined,\n        children: item.rendered,\n        defaultClassName: 'react-aria-MenuItem',\n        values: {\n            ...states,\n            isHovered: isHovered,\n            isFocusVisible: states.isFocusVisible,\n            selectionMode: selectionManager.selectionMode,\n            selectionBehavior: selectionManager.selectionBehavior,\n            hasSubmenu: !!props['aria-haspopup'],\n            isOpen: props['aria-expanded'] === 'true'\n        }\n    });\n    let ElementType = props.href ? 'a' : 'div';\n    let DOMProps = (0, $kM2ZM$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    delete DOMProps.onClick;\n    return /*#__PURE__*/ (0, $kM2ZM$react).createElement(ElementType, {\n        ...(0, $kM2ZM$mergeProps)(DOMProps, renderProps, menuItemProps, hoverProps),\n        ref: ref,\n        \"data-disabled\": states.isDisabled || undefined,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focused\": states.isFocused || undefined,\n        \"data-focus-visible\": states.isFocusVisible || undefined,\n        \"data-pressed\": states.isPressed || undefined,\n        \"data-selected\": states.isSelected || undefined,\n        \"data-selection-mode\": selectionManager.selectionMode === 'none' ? undefined : selectionManager.selectionMode,\n        \"data-has-submenu\": !!props['aria-haspopup'] || undefined,\n        \"data-open\": props['aria-expanded'] === 'true' || undefined\n    }, /*#__PURE__*/ (0, $kM2ZM$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $514c0188e459b4c0$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        [(0, $64fa3d84918910a7$export$c62b8e45d58ddad9)]: labelProps,\n                        label: labelProps,\n                        description: descriptionProps\n                    }\n                }\n            ],\n            [\n                (0, $63df2425e2108aa8$export$744d98a3b8a94e1c),\n                keyboardShortcutProps\n            ],\n            [\n                (0, $1d5b8b8664671ef2$export$c9549807523555e0),\n                {\n                    isSelected: states.isSelected\n                }\n            ]\n        ]\n    }, renderProps.children));\n});\n\n\nexport {$3674c52c6b3c5bce$export$c7e742effb1c51e2 as MenuContext, $3674c52c6b3c5bce$export$24aad8519b95b41b as MenuStateContext, $3674c52c6b3c5bce$export$795aec4671cbae19 as RootMenuTriggerStateContext, $3674c52c6b3c5bce$export$27d2ad3c5815583e as MenuTrigger, $3674c52c6b3c5bce$export$ecabc99eeffab7ca as SubmenuTrigger, $3674c52c6b3c5bce$export$d9b273488cd8ce6f as Menu, $3674c52c6b3c5bce$export$4b1545b4f2016d26 as MenuSection, $3674c52c6b3c5bce$export$2ce376c2cc3355c8 as MenuItem};\n//# sourceMappingURL=Menu.module.js.map\n","import {ButtonContext as $d2b4bc8c273e7be6$export$24d547caef80ccd1} from \"./Button.mjs\";\nimport {DEFAULT_SLOT as $64fa3d84918910a7$export$c62b8e45d58ddad9, Provider as $64fa3d84918910a7$export$2881499e37b75b9a, useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {HeadingContext as $4e85f108e88277b8$export$d688439359537581} from \"./RSPContexts.mjs\";\nimport {PopoverContext as $07b14b47974efb58$export$9b9a0cd73afb7ca4} from \"./Popover.mjs\";\nimport {RootMenuTriggerStateContext as $3674c52c6b3c5bce$export$795aec4671cbae19} from \"./Menu.mjs\";\nimport {useOverlayTrigger as $6IYYA$useOverlayTrigger, useId as $6IYYA$useId, useDialog as $6IYYA$useDialog} from \"react-aria\";\nimport {useResizeObserver as $6IYYA$useResizeObserver, filterDOMProps as $6IYYA$filterDOMProps, mergeProps as $6IYYA$mergeProps} from \"@react-aria/utils\";\nimport {useMenuTriggerState as $6IYYA$useMenuTriggerState} from \"react-stately\";\nimport {PressResponder as $6IYYA$PressResponder} from \"@react-aria/interactions\";\nimport $6IYYA$react, {createContext as $6IYYA$createContext, useRef as $6IYYA$useRef, useState as $6IYYA$useState, useCallback as $6IYYA$useCallback, forwardRef as $6IYYA$forwardRef, useContext as $6IYYA$useContext} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\nconst $de32f1b87079253c$export$8b93a07348a7730c = /*#__PURE__*/ (0, $6IYYA$createContext)(null);\nconst $de32f1b87079253c$export$d2f961adcb0afbe = /*#__PURE__*/ (0, $6IYYA$createContext)(null);\nfunction $de32f1b87079253c$export$2e1e1122cf0cba88(props) {\n    // Use useMenuTriggerState instead of useOverlayTriggerState in case a menu is embedded in the dialog.\n    // This is needed to handle submenus.\n    let state = (0, $6IYYA$useMenuTriggerState)(props);\n    let buttonRef = (0, $6IYYA$useRef)(null);\n    let { triggerProps: triggerProps, overlayProps: overlayProps } = (0, $6IYYA$useOverlayTrigger)({\n        type: 'dialog'\n    }, state, buttonRef);\n    // Allows popover width to match trigger element\n    let [buttonWidth, setButtonWidth] = (0, $6IYYA$useState)(null);\n    let onResize = (0, $6IYYA$useCallback)(()=>{\n        if (buttonRef.current) setButtonWidth(buttonRef.current.offsetWidth + 'px');\n    }, [\n        buttonRef\n    ]);\n    (0, $6IYYA$useResizeObserver)({\n        ref: buttonRef,\n        onResize: onResize\n    });\n    // Label dialog by the trigger as a fallback if there is no title slot.\n    // This is done in RAC instead of hooks because otherwise we cannot distinguish\n    // between context and props. Normally aria-labelledby overrides the title\n    // but when sent by context we want the title to win.\n    triggerProps.id = (0, $6IYYA$useId)();\n    overlayProps['aria-labelledby'] = triggerProps.id;\n    return /*#__PURE__*/ (0, $6IYYA$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $de32f1b87079253c$export$d2f961adcb0afbe,\n                state\n            ],\n            [\n                (0, $3674c52c6b3c5bce$export$795aec4671cbae19),\n                state\n            ],\n            [\n                $de32f1b87079253c$export$8b93a07348a7730c,\n                overlayProps\n            ],\n            [\n                (0, $07b14b47974efb58$export$9b9a0cd73afb7ca4),\n                {\n                    trigger: 'DialogTrigger',\n                    triggerRef: buttonRef,\n                    'aria-labelledby': overlayProps['aria-labelledby'],\n                    style: {\n                        '--trigger-width': buttonWidth\n                    }\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $6IYYA$react).createElement((0, $6IYYA$PressResponder), {\n        ...triggerProps,\n        ref: buttonRef,\n        isPressed: state.isOpen\n    }, props.children));\n}\nconst $de32f1b87079253c$export$3ddf2d174ce01153 = /*#__PURE__*/ (0, $6IYYA$forwardRef)(function Dialog(props, ref) {\n    let originalAriaLabelledby = props['aria-labelledby'];\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $de32f1b87079253c$export$8b93a07348a7730c);\n    let { dialogProps: dialogProps, titleProps: titleProps } = (0, $6IYYA$useDialog)({\n        ...props,\n        // Only pass aria-labelledby from props, not context.\n        // Context is used as a fallback below.\n        'aria-labelledby': originalAriaLabelledby\n    }, ref);\n    let state = (0, $6IYYA$useContext)($de32f1b87079253c$export$d2f961adcb0afbe);\n    if (!dialogProps['aria-label'] && !dialogProps['aria-labelledby']) {\n        // If aria-labelledby exists on props, we know it came from context.\n        // Use that as a fallback in case there is no title slot.\n        if (props['aria-labelledby']) dialogProps['aria-labelledby'] = props['aria-labelledby'];\n        else if (process.env.NODE_ENV !== 'production') console.warn('If a Dialog does not contain a <Heading slot=\"title\">, it must have an aria-label or aria-labelledby attribute for accessibility.');\n    }\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        defaultClassName: 'react-aria-Dialog',\n        className: props.className,\n        style: props.style,\n        children: props.children,\n        values: {\n            close: (state === null || state === void 0 ? void 0 : state.close) || (()=>{})\n        }\n    });\n    let DOMProps = (0, $6IYYA$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $6IYYA$react).createElement(\"section\", {\n        ...(0, $6IYYA$mergeProps)(DOMProps, renderProps, dialogProps),\n        ref: ref,\n        slot: props.slot || undefined\n    }, /*#__PURE__*/ (0, $6IYYA$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $4e85f108e88277b8$export$d688439359537581),\n                {\n                    slots: {\n                        [(0, $64fa3d84918910a7$export$c62b8e45d58ddad9)]: {},\n                        title: {\n                            ...titleProps,\n                            level: 2\n                        }\n                    }\n                }\n            ],\n            [\n                (0, $d2b4bc8c273e7be6$export$24d547caef80ccd1),\n                {\n                    slots: {\n                        [(0, $64fa3d84918910a7$export$c62b8e45d58ddad9)]: {},\n                        close: {\n                            onPress: ()=>state === null || state === void 0 ? void 0 : state.close()\n                        }\n                    }\n                }\n            ]\n        ]\n    }, renderProps.children));\n});\n\n\nexport {$de32f1b87079253c$export$8b93a07348a7730c as DialogContext, $de32f1b87079253c$export$d2f961adcb0afbe as OverlayTriggerStateContext, $de32f1b87079253c$export$2e1e1122cf0cba88 as DialogTrigger, $de32f1b87079253c$export$3ddf2d174ce01153 as Dialog};\n//# sourceMappingURL=Dialog.module.js.map\n","import {parseDateTime as $62z4d$parseDateTime, parseDate as $62z4d$parseDate} from \"@internationalized/date\";\nimport $62z4d$react from \"react\";\nimport {useVisuallyHidden as $62z4d$useVisuallyHidden} from \"react-aria\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $c699643d2073b351$var$dateSegments = [\n    'day',\n    'month',\n    'year'\n];\nconst $c699643d2073b351$var$granularityMap = {\n    'hour': 1,\n    'minute': 2,\n    'second': 3\n};\nfunction $c699643d2073b351$export$f6a685cd1acbd1fa(props, state) {\n    let { autoComplete: autoComplete, isDisabled: isDisabled, name: name } = props;\n    let { visuallyHiddenProps: visuallyHiddenProps } = (0, $62z4d$useVisuallyHidden)({\n        style: {\n            // Prevent page scrolling.\n            position: 'fixed',\n            top: 0,\n            left: 0\n        }\n    });\n    let inputStep = 60;\n    if (state.granularity === 'second') inputStep = 1;\n    else if (state.granularity === 'hour') inputStep = 3600;\n    let dateValue = state.value == null ? '' : state.value.toString();\n    let inputType = state.granularity === 'day' ? 'date' : 'datetime-local';\n    let timeSegments = [\n        'hour',\n        'minute',\n        'second'\n    ];\n    // Depending on the granularity, we only want to validate certain time segments\n    let end = 0;\n    if (timeSegments.includes(state.granularity)) {\n        end = $c699643d2073b351$var$granularityMap[state.granularity];\n        timeSegments = timeSegments.slice(0, end);\n    }\n    return {\n        containerProps: {\n            ...visuallyHiddenProps,\n            'aria-hidden': true,\n            // @ts-ignore\n            ['data-react-aria-prevent-focus']: true,\n            // @ts-ignore\n            ['data-a11y-ignore']: 'aria-hidden-focus'\n        },\n        inputProps: {\n            tabIndex: -1,\n            autoComplete: autoComplete,\n            disabled: isDisabled,\n            type: inputType,\n            // We set the form prop to an empty string to prevent the hidden date input's value from being submitted\n            form: '',\n            name: name,\n            step: inputStep,\n            value: dateValue,\n            onChange: (e)=>{\n                let targetString = e.target.value.toString();\n                if (targetString) try {\n                    let targetValue = (0, $62z4d$parseDateTime)(targetString);\n                    if (state.granularity === 'day') targetValue = (0, $62z4d$parseDate)(targetString);\n                    // We check to to see if setSegment exists in the state since it only exists in DateFieldState and not DatePickerState.\n                    // The setValue method has different behavior depending on if it's coming from DateFieldState or DatePickerState.\n                    // In DateFieldState, setValue firsts checks to make sure that each segment is filled before committing the newValue\n                    // which is why in the code below we first set each segment to validate it before committing the new value.\n                    // However, in DatePickerState, since we have to be able to commit values from the Calendar popover, we are also able to\n                    // set a new value when the field itself is empty.\n                    if ('setSegment' in state) for(let type in targetValue){\n                        // eslint-disable-next-line max-depth\n                        if ($c699643d2073b351$var$dateSegments.includes(type)) state.setSegment(type, targetValue[type]);\n                        // eslint-disable-next-line max-depth\n                        if (timeSegments.includes(type)) state.setSegment(type, targetValue[type]);\n                    }\n                    state.setValue(targetValue);\n                } catch  {\n                // ignore\n                }\n            }\n        }\n    };\n}\nfunction $c699643d2073b351$export$eefa3e19139f00f3(props) {\n    let { state: state } = props;\n    let { containerProps: containerProps, inputProps: inputProps } = $c699643d2073b351$export$f6a685cd1acbd1fa({\n        ...props\n    }, state);\n    return /*#__PURE__*/ (0, $62z4d$react).createElement(\"div\", {\n        ...containerProps,\n        \"data-testid\": \"hidden-dateinput-container\"\n    }, /*#__PURE__*/ (0, $62z4d$react).createElement(\"input\", inputProps));\n}\n\n\nexport {$c699643d2073b351$export$f6a685cd1acbd1fa as useHiddenDateInput, $c699643d2073b351$export$eefa3e19139f00f3 as HiddenDateInput};\n//# sourceMappingURL=HiddenDateInput.module.js.map\n","import {Provider as $64fa3d84918910a7$export$2881499e37b75b9a, removeDataAttributes as $64fa3d84918910a7$export$ef03459518577ad4, useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3, useSlot as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8, useSlottedContext as $64fa3d84918910a7$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {FieldErrorContext as $ee014567cb39d3f0$export$ff05c3ac10437e03} from \"./FieldError.mjs\";\nimport {FormContext as $d3e0e05bdfcf66bd$export$c24727297075ec6a} from \"./Form.mjs\";\nimport {Group as $a049562f99e7db0e$export$eb2fcfdbd7ba97d4, GroupContext as $a049562f99e7db0e$export$f9c6924e160136d1} from \"./Group.mjs\";\nimport {HiddenDateInput as $c699643d2073b351$export$eefa3e19139f00f3} from \"./HiddenDateInput.mjs\";\nimport {Input as $3985021b0ad6602f$export$f5b8910cec6cf069, InputContext as $3985021b0ad6602f$export$37fb8590cf2c088c} from \"./Input.mjs\";\nimport {LabelContext as $01b77f81d0f07f68$export$75b6ee27786ba447} from \"./Label.mjs\";\nimport {TextContext as $514c0188e459b4c0$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useLocale as $a9Sgq$useLocale, useDateField as $a9Sgq$useDateField, useTimeField as $a9Sgq$useTimeField, useDateSegment as $a9Sgq$useDateSegment, useFocusRing as $a9Sgq$useFocusRing, useHover as $a9Sgq$useHover, mergeProps as $a9Sgq$mergeProps} from \"react-aria\";\nimport {createCalendar as $a9Sgq$createCalendar} from \"@internationalized/date\";\nimport {useDateFieldState as $a9Sgq$useDateFieldState, useTimeFieldState as $a9Sgq$useTimeFieldState} from \"react-stately\";\nimport {filterDOMProps as $a9Sgq$filterDOMProps, useObjectRef as $a9Sgq$useObjectRef} from \"@react-aria/utils\";\nimport $a9Sgq$react, {createContext as $a9Sgq$createContext, forwardRef as $a9Sgq$forwardRef, useRef as $a9Sgq$useRef, useContext as $a9Sgq$useContext, cloneElement as $a9Sgq$cloneElement} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\nconst $40825cdb76e74f70$export$7b3e670c86da5fe8 = /*#__PURE__*/ (0, $a9Sgq$createContext)(null);\nconst $40825cdb76e74f70$export$8e17ddc448e87c1e = /*#__PURE__*/ (0, $a9Sgq$createContext)(null);\nconst $40825cdb76e74f70$export$3b08bebcf796eea0 = /*#__PURE__*/ (0, $a9Sgq$createContext)(null);\nconst $40825cdb76e74f70$export$5d8dc44abd10a920 = /*#__PURE__*/ (0, $a9Sgq$createContext)(null);\nconst $40825cdb76e74f70$export$d9781c7894a82487 = /*#__PURE__*/ (0, $a9Sgq$forwardRef)(function DateField(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $40825cdb76e74f70$export$7b3e670c86da5fe8);\n    let { validationBehavior: formValidationBehavior } = (0, $64fa3d84918910a7$export$fabf2dc03a41866e)((0, $d3e0e05bdfcf66bd$export$c24727297075ec6a)) || {};\n    var _props_validationBehavior, _ref;\n    let validationBehavior = (_ref = (_props_validationBehavior = props.validationBehavior) !== null && _props_validationBehavior !== void 0 ? _props_validationBehavior : formValidationBehavior) !== null && _ref !== void 0 ? _ref : 'native';\n    let { locale: locale } = (0, $a9Sgq$useLocale)();\n    let state = (0, $a9Sgq$useDateFieldState)({\n        ...props,\n        locale: locale,\n        createCalendar: $a9Sgq$createCalendar,\n        validationBehavior: validationBehavior\n    });\n    let fieldRef = (0, $a9Sgq$useRef)(null);\n    let [labelRef, label] = (0, $64fa3d84918910a7$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let inputRef = (0, $a9Sgq$useRef)(null);\n    let { labelProps: labelProps, fieldProps: fieldProps, inputProps: inputProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, ...validation } = (0, $a9Sgq$useDateField)({\n        ...(0, $64fa3d84918910a7$export$ef03459518577ad4)(props),\n        label: label,\n        inputRef: inputRef,\n        validationBehavior: validationBehavior\n    }, state, fieldRef);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...(0, $64fa3d84918910a7$export$ef03459518577ad4)(props),\n        values: {\n            state: state,\n            isInvalid: state.isInvalid,\n            isDisabled: state.isDisabled,\n            isReadOnly: state.isReadOnly\n        },\n        defaultClassName: 'react-aria-DateField'\n    });\n    let DOMProps = (0, $a9Sgq$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $a9Sgq$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $40825cdb76e74f70$export$3b08bebcf796eea0,\n                state\n            ],\n            [\n                (0, $a049562f99e7db0e$export$f9c6924e160136d1),\n                {\n                    ...fieldProps,\n                    ref: fieldRef,\n                    isInvalid: state.isInvalid,\n                    isDisabled: state.isDisabled\n                }\n            ],\n            [\n                (0, $3985021b0ad6602f$export$37fb8590cf2c088c),\n                {\n                    ...inputProps,\n                    ref: inputRef\n                }\n            ],\n            [\n                (0, $01b77f81d0f07f68$export$75b6ee27786ba447),\n                {\n                    ...labelProps,\n                    ref: labelRef,\n                    elementType: 'span'\n                }\n            ],\n            [\n                (0, $514c0188e459b4c0$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        description: descriptionProps,\n                        errorMessage: errorMessageProps\n                    }\n                }\n            ],\n            [\n                (0, $ee014567cb39d3f0$export$ff05c3ac10437e03),\n                validation\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $a9Sgq$react).createElement(\"div\", {\n        ...DOMProps,\n        ...renderProps,\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-invalid\": state.isInvalid || undefined,\n        \"data-disabled\": state.isDisabled || undefined,\n        \"data-readonly\": state.isReadOnly || undefined\n    }), /*#__PURE__*/ (0, $a9Sgq$react).createElement((0, $c699643d2073b351$export$eefa3e19139f00f3), {\n        autoComplete: props.autoComplete,\n        name: props.name,\n        isDisabled: props.isDisabled,\n        state: state\n    }));\n});\nconst $40825cdb76e74f70$export$5eaee2322dd727eb = /*#__PURE__*/ (0, $a9Sgq$forwardRef)(function TimeField(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $40825cdb76e74f70$export$8e17ddc448e87c1e);\n    let { validationBehavior: formValidationBehavior } = (0, $64fa3d84918910a7$export$fabf2dc03a41866e)((0, $d3e0e05bdfcf66bd$export$c24727297075ec6a)) || {};\n    var _props_validationBehavior, _ref;\n    let validationBehavior = (_ref = (_props_validationBehavior = props.validationBehavior) !== null && _props_validationBehavior !== void 0 ? _props_validationBehavior : formValidationBehavior) !== null && _ref !== void 0 ? _ref : 'native';\n    let { locale: locale } = (0, $a9Sgq$useLocale)();\n    let state = (0, $a9Sgq$useTimeFieldState)({\n        ...props,\n        locale: locale,\n        validationBehavior: validationBehavior\n    });\n    let fieldRef = (0, $a9Sgq$useRef)(null);\n    let [labelRef, label] = (0, $64fa3d84918910a7$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let inputRef = (0, $a9Sgq$useRef)(null);\n    let { labelProps: labelProps, fieldProps: fieldProps, inputProps: inputProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, ...validation } = (0, $a9Sgq$useTimeField)({\n        ...(0, $64fa3d84918910a7$export$ef03459518577ad4)(props),\n        label: label,\n        inputRef: inputRef,\n        validationBehavior: validationBehavior\n    }, state, fieldRef);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        values: {\n            state: state,\n            isInvalid: state.isInvalid,\n            isDisabled: state.isDisabled,\n            isReadOnly: state.isReadOnly\n        },\n        defaultClassName: 'react-aria-TimeField'\n    });\n    let DOMProps = (0, $a9Sgq$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $a9Sgq$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $40825cdb76e74f70$export$5d8dc44abd10a920,\n                state\n            ],\n            [\n                (0, $a049562f99e7db0e$export$f9c6924e160136d1),\n                {\n                    ...fieldProps,\n                    ref: fieldRef,\n                    isInvalid: state.isInvalid,\n                    isDisabled: state.isDisabled\n                }\n            ],\n            [\n                (0, $3985021b0ad6602f$export$37fb8590cf2c088c),\n                {\n                    ...inputProps,\n                    ref: inputRef\n                }\n            ],\n            [\n                (0, $01b77f81d0f07f68$export$75b6ee27786ba447),\n                {\n                    ...labelProps,\n                    ref: labelRef,\n                    elementType: 'span'\n                }\n            ],\n            [\n                (0, $514c0188e459b4c0$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        description: descriptionProps,\n                        errorMessage: errorMessageProps\n                    }\n                }\n            ],\n            [\n                (0, $ee014567cb39d3f0$export$ff05c3ac10437e03),\n                validation\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $a9Sgq$react).createElement(\"div\", {\n        ...DOMProps,\n        ...renderProps,\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-invalid\": state.isInvalid || undefined,\n        \"data-disabled\": state.isDisabled || undefined,\n        \"data-readonly\": state.isReadOnly || undefined\n    }));\n});\nconst $40825cdb76e74f70$export$7edc06cf1783b30f = /*#__PURE__*/ (0, $a9Sgq$forwardRef)(function DateInput(props, ref) {\n    // If state is provided by DateField/TimeField, just render.\n    // Otherwise (e.g. in DatePicker), we need to call hooks and create state ourselves.\n    let dateFieldState = (0, $a9Sgq$useContext)($40825cdb76e74f70$export$3b08bebcf796eea0);\n    let timeFieldState = (0, $a9Sgq$useContext)($40825cdb76e74f70$export$5d8dc44abd10a920);\n    return dateFieldState || timeFieldState ? /*#__PURE__*/ (0, $a9Sgq$react).createElement($40825cdb76e74f70$var$DateInputInner, {\n        ...props,\n        ref: ref\n    }) : /*#__PURE__*/ (0, $a9Sgq$react).createElement($40825cdb76e74f70$var$DateInputStandalone, {\n        ...props,\n        ref: ref\n    });\n});\nconst $40825cdb76e74f70$var$DateInputStandalone = /*#__PURE__*/ (0, $a9Sgq$forwardRef)((props, ref)=>{\n    let [dateFieldProps, fieldRef] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)({\n        slot: props.slot\n    }, ref, $40825cdb76e74f70$export$7b3e670c86da5fe8);\n    let { locale: locale } = (0, $a9Sgq$useLocale)();\n    let state = (0, $a9Sgq$useDateFieldState)({\n        ...dateFieldProps,\n        locale: locale,\n        createCalendar: $a9Sgq$createCalendar\n    });\n    let inputRef = (0, $a9Sgq$useRef)(null);\n    let { fieldProps: fieldProps, inputProps: inputProps } = (0, $a9Sgq$useDateField)({\n        ...dateFieldProps,\n        inputRef: inputRef\n    }, state, fieldRef);\n    return /*#__PURE__*/ (0, $a9Sgq$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $40825cdb76e74f70$export$3b08bebcf796eea0,\n                state\n            ],\n            [\n                (0, $3985021b0ad6602f$export$37fb8590cf2c088c),\n                {\n                    ...inputProps,\n                    ref: inputRef\n                }\n            ],\n            [\n                (0, $a049562f99e7db0e$export$f9c6924e160136d1),\n                {\n                    ...fieldProps,\n                    ref: fieldRef,\n                    isInvalid: state.isInvalid,\n                    isDisabled: state.isDisabled\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $a9Sgq$react).createElement($40825cdb76e74f70$var$DateInputInner, props));\n});\nconst $40825cdb76e74f70$var$DateInputInner = /*#__PURE__*/ (0, $a9Sgq$forwardRef)((props, ref)=>{\n    let { className: className, children: children } = props;\n    let dateFieldState = (0, $a9Sgq$useContext)($40825cdb76e74f70$export$3b08bebcf796eea0);\n    let timeFieldState = (0, $a9Sgq$useContext)($40825cdb76e74f70$export$5d8dc44abd10a920);\n    let state = dateFieldState !== null && dateFieldState !== void 0 ? dateFieldState : timeFieldState;\n    return /*#__PURE__*/ (0, $a9Sgq$react).createElement((0, $a9Sgq$react).Fragment, null, /*#__PURE__*/ (0, $a9Sgq$react).createElement((0, $a049562f99e7db0e$export$eb2fcfdbd7ba97d4), {\n        ...props,\n        ref: ref,\n        slot: props.slot || undefined,\n        className: className !== null && className !== void 0 ? className : 'react-aria-DateInput',\n        isReadOnly: state.isReadOnly,\n        isInvalid: state.isInvalid,\n        isDisabled: state.isDisabled\n    }, state.segments.map((segment, i)=>/*#__PURE__*/ (0, $a9Sgq$cloneElement)(children(segment), {\n            key: i\n        }))), /*#__PURE__*/ (0, $a9Sgq$react).createElement((0, $3985021b0ad6602f$export$f5b8910cec6cf069), {\n        className: \"\"\n    }));\n});\nconst $40825cdb76e74f70$export$336ab7fa954c4b5f = /*#__PURE__*/ (0, $a9Sgq$forwardRef)(function DateSegment({ segment: segment, ...otherProps }, ref) {\n    let dateFieldState = (0, $a9Sgq$useContext)($40825cdb76e74f70$export$3b08bebcf796eea0);\n    let timeFieldState = (0, $a9Sgq$useContext)($40825cdb76e74f70$export$5d8dc44abd10a920);\n    let state = dateFieldState !== null && dateFieldState !== void 0 ? dateFieldState : timeFieldState;\n    let domRef = (0, $a9Sgq$useObjectRef)(ref);\n    let { segmentProps: segmentProps } = (0, $a9Sgq$useDateSegment)(segment, state, domRef);\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $a9Sgq$useFocusRing)();\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $a9Sgq$useHover)({\n        ...otherProps,\n        isDisabled: state.isDisabled || segment.type === 'literal'\n    });\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...otherProps,\n        values: {\n            ...segment,\n            isReadOnly: state.isReadOnly,\n            isInvalid: state.isInvalid,\n            isDisabled: state.isDisabled,\n            isHovered: isHovered,\n            isFocused: isFocused,\n            isFocusVisible: isFocusVisible\n        },\n        defaultChildren: segment.text,\n        defaultClassName: 'react-aria-DateSegment'\n    });\n    return /*#__PURE__*/ (0, $a9Sgq$react).createElement(\"span\", {\n        ...(0, $a9Sgq$mergeProps)((0, $a9Sgq$filterDOMProps)(otherProps, {\n            global: true\n        }), segmentProps, focusProps, hoverProps),\n        ...renderProps,\n        style: segmentProps.style,\n        ref: domRef,\n        \"data-placeholder\": segment.isPlaceholder || undefined,\n        \"data-invalid\": state.isInvalid || undefined,\n        \"data-readonly\": state.isReadOnly || undefined,\n        \"data-disabled\": state.isDisabled || undefined,\n        \"data-type\": segment.type,\n        \"data-hovered\": isHovered || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined\n    });\n});\n\n\nexport {$40825cdb76e74f70$export$7b3e670c86da5fe8 as DateFieldContext, $40825cdb76e74f70$export$8e17ddc448e87c1e as TimeFieldContext, $40825cdb76e74f70$export$3b08bebcf796eea0 as DateFieldStateContext, $40825cdb76e74f70$export$5d8dc44abd10a920 as TimeFieldStateContext, $40825cdb76e74f70$export$d9781c7894a82487 as DateField, $40825cdb76e74f70$export$5eaee2322dd727eb as TimeField, $40825cdb76e74f70$export$7edc06cf1783b30f as DateInput, $40825cdb76e74f70$export$336ab7fa954c4b5f as DateSegment};\n//# sourceMappingURL=DateField.module.js.map\n","import {HeadingContext as $4e85f108e88277b8$export$d688439359537581} from \"./RSPContexts.mjs\";\nimport {useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415} from \"./utils.mjs\";\nimport $bt28J$react, {forwardRef as $bt28J$forwardRef} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $5cb03073d3f54797$export$a8a3e93435678ff9 = /*#__PURE__*/ (0, $bt28J$forwardRef)(function Heading(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, (0, $4e85f108e88277b8$export$d688439359537581));\n    let { children: children, level: level = 3, className: className, ...domProps } = props;\n    let Element = `h${level}`;\n    return /*#__PURE__*/ (0, $bt28J$react).createElement(Element, {\n        ...domProps,\n        ref: ref,\n        className: className !== null && className !== void 0 ? className : 'react-aria-Heading'\n    }, children);\n});\n\n\nexport {$5cb03073d3f54797$export$a8a3e93435678ff9 as Heading};\n//# sourceMappingURL=Heading.module.js.map\n","import {Provider as $64fa3d84918910a7$export$2881499e37b75b9a, useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {OverlayTriggerStateContext as $de32f1b87079253c$export$d2f961adcb0afbe} from \"./Dialog.mjs\";\nimport {useIsSSR as $daTMi$useIsSSR, useModalOverlay as $daTMi$useModalOverlay, Overlay as $daTMi$Overlay, DismissButton as $daTMi$DismissButton} from \"react-aria\";\nimport {useObjectRef as $daTMi$useObjectRef, useExitAnimation as $daTMi$useExitAnimation, useEnterAnimation as $daTMi$useEnterAnimation, useViewportSize as $daTMi$useViewportSize, isScrollable as $daTMi$isScrollable, mergeProps as $daTMi$mergeProps, filterDOMProps as $daTMi$filterDOMProps, mergeRefs as $daTMi$mergeRefs} from \"@react-aria/utils\";\nimport {useOverlayTriggerState as $daTMi$useOverlayTriggerState} from \"react-stately\";\nimport $daTMi$react, {createContext as $daTMi$createContext, forwardRef as $daTMi$forwardRef, useContext as $daTMi$useContext, useRef as $daTMi$useRef, useMemo as $daTMi$useMemo} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\nconst $f3f84453ead64de5$export$ab57792b9b6974a6 = /*#__PURE__*/ (0, $daTMi$createContext)(null);\nconst $f3f84453ead64de5$var$InternalModalContext = /*#__PURE__*/ (0, $daTMi$createContext)(null);\nconst $f3f84453ead64de5$export$2b77a92f1a5ad772 = /*#__PURE__*/ (0, $daTMi$forwardRef)(function Modal(props, ref) {\n    let ctx = (0, $daTMi$useContext)($f3f84453ead64de5$var$InternalModalContext);\n    if (ctx) {\n        if (process.env.NODE_ENV !== 'production' && (props.onOpenChange || props.defaultOpen !== undefined || props.isOpen !== undefined)) {\n            // create a list of props that are passed in but not allowed when using an external ModalOverlay\n            const invalidSet = new Set([\n                'isDismissable',\n                'isKeyboardDismissDisabled',\n                'isOpen',\n                'defaultOpen',\n                'onOpenChange',\n                'isEntering',\n                'isExiting',\n                'UNSTABLE_portalContainer',\n                'shouldCloseOnInteractOutside'\n            ]);\n            const invalidProps = Object.keys(props).filter((key)=>invalidSet.has(key));\n            console.warn(`This modal is already wrapped in a ModalOverlay, props [${invalidProps.join(', ')}] should be placed on the ModalOverlay instead.`);\n        }\n        return /*#__PURE__*/ (0, $daTMi$react).createElement($f3f84453ead64de5$var$ModalContent, {\n            ...props,\n            modalRef: ref\n        }, props.children);\n    }\n    let { isDismissable: isDismissable, isKeyboardDismissDisabled: isKeyboardDismissDisabled, isOpen: isOpen, defaultOpen: defaultOpen, onOpenChange: onOpenChange, children: children, isEntering: isEntering, isExiting: isExiting, UNSTABLE_portalContainer: UNSTABLE_portalContainer, shouldCloseOnInteractOutside: shouldCloseOnInteractOutside, ...otherProps } = props;\n    return /*#__PURE__*/ (0, $daTMi$react).createElement($f3f84453ead64de5$export$8948f78d83984c69, {\n        isDismissable: isDismissable,\n        isKeyboardDismissDisabled: isKeyboardDismissDisabled,\n        isOpen: isOpen,\n        defaultOpen: defaultOpen,\n        onOpenChange: onOpenChange,\n        isEntering: isEntering,\n        isExiting: isExiting,\n        UNSTABLE_portalContainer: UNSTABLE_portalContainer,\n        shouldCloseOnInteractOutside: shouldCloseOnInteractOutside\n    }, /*#__PURE__*/ (0, $daTMi$react).createElement($f3f84453ead64de5$var$ModalContent, {\n        ...otherProps,\n        modalRef: ref\n    }, children));\n});\nfunction $f3f84453ead64de5$var$ModalOverlayWithForwardRef(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $f3f84453ead64de5$export$ab57792b9b6974a6);\n    let contextState = (0, $daTMi$useContext)((0, $de32f1b87079253c$export$d2f961adcb0afbe));\n    let localState = (0, $daTMi$useOverlayTriggerState)(props);\n    let state = props.isOpen != null || props.defaultOpen != null || !contextState ? localState : contextState;\n    if (state === contextState) {\n        if (process.env.NODE_ENV !== 'production' && (props.onOpenChange || props.defaultOpen !== undefined || props.isOpen !== undefined)) console.warn('This modals state is controlled by a trigger, place onOpenChange on the trigger instead.');\n    }\n    let objectRef = (0, $daTMi$useObjectRef)(ref);\n    let modalRef = (0, $daTMi$useRef)(null);\n    let isOverlayExiting = (0, $daTMi$useExitAnimation)(objectRef, state.isOpen);\n    let isModalExiting = (0, $daTMi$useExitAnimation)(modalRef, state.isOpen);\n    let isExiting = isOverlayExiting || isModalExiting || props.isExiting || false;\n    let isSSR = (0, $daTMi$useIsSSR)();\n    if (!state.isOpen && !isExiting || isSSR) return null;\n    return /*#__PURE__*/ (0, $daTMi$react).createElement($f3f84453ead64de5$var$ModalOverlayInner, {\n        ...props,\n        state: state,\n        isExiting: isExiting,\n        overlayRef: objectRef,\n        modalRef: modalRef\n    });\n}\nconst $f3f84453ead64de5$export$8948f78d83984c69 = /*#__PURE__*/ (0, $daTMi$forwardRef)($f3f84453ead64de5$var$ModalOverlayWithForwardRef);\nfunction $f3f84453ead64de5$var$ModalOverlayInner({ UNSTABLE_portalContainer: UNSTABLE_portalContainer, ...props }) {\n    let modalRef = props.modalRef;\n    let { state: state } = props;\n    let { modalProps: modalProps, underlayProps: underlayProps } = (0, $daTMi$useModalOverlay)(props, state, modalRef);\n    let entering = (0, $daTMi$useEnterAnimation)(props.overlayRef) || props.isEntering || false;\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-ModalOverlay',\n        values: {\n            isEntering: entering,\n            isExiting: props.isExiting,\n            state: state\n        }\n    });\n    let viewport = (0, $daTMi$useViewportSize)();\n    let pageHeight = undefined;\n    if (typeof document !== 'undefined') {\n        let scrollingElement = (0, $daTMi$isScrollable)(document.body) ? document.body : document.scrollingElement || document.documentElement;\n        // Prevent Firefox from adding scrollbars when the page has a fractional height.\n        let fractionalHeightDifference = scrollingElement.getBoundingClientRect().height % 1;\n        pageHeight = scrollingElement.scrollHeight - fractionalHeightDifference;\n    }\n    let style = {\n        ...renderProps.style,\n        '--visual-viewport-height': viewport.height + 'px',\n        '--page-height': pageHeight !== undefined ? pageHeight + 'px' : undefined\n    };\n    return /*#__PURE__*/ (0, $daTMi$react).createElement((0, $daTMi$Overlay), {\n        isExiting: props.isExiting,\n        portalContainer: UNSTABLE_portalContainer\n    }, /*#__PURE__*/ (0, $daTMi$react).createElement(\"div\", {\n        ...(0, $daTMi$mergeProps)((0, $daTMi$filterDOMProps)(props, {\n            global: true\n        }), underlayProps),\n        ...renderProps,\n        style: style,\n        ref: props.overlayRef,\n        \"data-entering\": entering || undefined,\n        \"data-exiting\": props.isExiting || undefined\n    }, /*#__PURE__*/ (0, $daTMi$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $f3f84453ead64de5$var$InternalModalContext,\n                {\n                    modalProps: modalProps,\n                    modalRef: modalRef,\n                    isExiting: props.isExiting,\n                    isDismissable: props.isDismissable\n                }\n            ],\n            [\n                (0, $de32f1b87079253c$export$d2f961adcb0afbe),\n                state\n            ]\n        ]\n    }, renderProps.children)));\n}\nfunction $f3f84453ead64de5$var$ModalContent(props) {\n    let { modalProps: modalProps, modalRef: modalRef, isExiting: isExiting, isDismissable: isDismissable } = (0, $daTMi$useContext)($f3f84453ead64de5$var$InternalModalContext);\n    let state = (0, $daTMi$useContext)((0, $de32f1b87079253c$export$d2f961adcb0afbe));\n    let mergedRefs = (0, $daTMi$useMemo)(()=>(0, $daTMi$mergeRefs)(props.modalRef, modalRef), [\n        props.modalRef,\n        modalRef\n    ]);\n    let ref = (0, $daTMi$useObjectRef)(mergedRefs);\n    let entering = (0, $daTMi$useEnterAnimation)(ref);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-Modal',\n        values: {\n            isEntering: entering,\n            isExiting: isExiting,\n            state: state\n        }\n    });\n    return /*#__PURE__*/ (0, $daTMi$react).createElement(\"div\", {\n        ...(0, $daTMi$mergeProps)((0, $daTMi$filterDOMProps)(props, {\n            global: true\n        }), modalProps),\n        ...renderProps,\n        ref: ref,\n        \"data-entering\": entering || undefined,\n        \"data-exiting\": isExiting || undefined\n    }, isDismissable && /*#__PURE__*/ (0, $daTMi$react).createElement((0, $daTMi$DismissButton), {\n        onDismiss: state.close\n    }), renderProps.children);\n}\n\n\nexport {$f3f84453ead64de5$export$ab57792b9b6974a6 as ModalContext, $f3f84453ead64de5$export$2b77a92f1a5ad772 as Modal, $f3f84453ead64de5$export$8948f78d83984c69 as ModalOverlay};\n//# sourceMappingURL=Modal.module.js.map\n","import {ButtonContext as $d2b4bc8c273e7be6$export$24d547caef80ccd1} from \"./Button.mjs\";\nimport {Provider as $64fa3d84918910a7$export$2881499e37b75b9a, removeDataAttributes as $64fa3d84918910a7$export$ef03459518577ad4, useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3, useSlot as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8, useSlottedContext as $64fa3d84918910a7$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {FieldErrorContext as $ee014567cb39d3f0$export$ff05c3ac10437e03} from \"./FieldError.mjs\";\nimport {FieldInputContext as $4e85f108e88277b8$export$698f465ec27e93df} from \"./RSPContexts.mjs\";\nimport {FormContext as $d3e0e05bdfcf66bd$export$c24727297075ec6a} from \"./Form.mjs\";\nimport {GroupContext as $a049562f99e7db0e$export$f9c6924e160136d1} from \"./Group.mjs\";\nimport {InputContext as $3985021b0ad6602f$export$37fb8590cf2c088c} from \"./Input.mjs\";\nimport {LabelContext as $01b77f81d0f07f68$export$75b6ee27786ba447} from \"./Label.mjs\";\nimport {TextContext as $514c0188e459b4c0$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useSearchField as $8iEQ9$useSearchField} from \"react-aria\";\nimport {createHideableComponent as $8iEQ9$createHideableComponent} from \"@react-aria/collections\";\nimport {filterDOMProps as $8iEQ9$filterDOMProps} from \"@react-aria/utils\";\nimport $8iEQ9$react, {createContext as $8iEQ9$createContext, useRef as $8iEQ9$useRef} from \"react\";\nimport {useSearchFieldState as $8iEQ9$useSearchFieldState} from \"react-stately\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $440f4836bcb56932$export$d1c4e4c63cb03a11 = /*#__PURE__*/ (0, $8iEQ9$createContext)(null);\nconst $440f4836bcb56932$export$b94867ecbd698f21 = /*#__PURE__*/ (0, $8iEQ9$createHideableComponent)(function SearchField(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $440f4836bcb56932$export$d1c4e4c63cb03a11);\n    let { validationBehavior: formValidationBehavior } = (0, $64fa3d84918910a7$export$fabf2dc03a41866e)((0, $d3e0e05bdfcf66bd$export$c24727297075ec6a)) || {};\n    var _props_validationBehavior, _ref;\n    let validationBehavior = (_ref = (_props_validationBehavior = props.validationBehavior) !== null && _props_validationBehavior !== void 0 ? _props_validationBehavior : formValidationBehavior) !== null && _ref !== void 0 ? _ref : 'native';\n    let inputRef = (0, $8iEQ9$useRef)(null);\n    [props, inputRef] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, inputRef, (0, $4e85f108e88277b8$export$698f465ec27e93df));\n    let [labelRef, label] = (0, $64fa3d84918910a7$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let state = (0, $8iEQ9$useSearchFieldState)({\n        ...props,\n        validationBehavior: validationBehavior\n    });\n    let { labelProps: labelProps, inputProps: inputProps, clearButtonProps: clearButtonProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, ...validation } = (0, $8iEQ9$useSearchField)({\n        ...(0, $64fa3d84918910a7$export$ef03459518577ad4)(props),\n        label: label,\n        validationBehavior: validationBehavior\n    }, state, inputRef);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        values: {\n            isEmpty: state.value === '',\n            isDisabled: props.isDisabled || false,\n            isInvalid: validation.isInvalid || false,\n            isReadOnly: props.isReadOnly || false,\n            isRequired: props.isRequired || false,\n            state: state\n        },\n        defaultClassName: 'react-aria-SearchField'\n    });\n    let DOMProps = (0, $8iEQ9$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $8iEQ9$react).createElement(\"div\", {\n        ...DOMProps,\n        ...renderProps,\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-empty\": state.value === '' || undefined,\n        \"data-disabled\": props.isDisabled || undefined,\n        \"data-invalid\": validation.isInvalid || undefined,\n        \"data-readonly\": props.isReadOnly || undefined,\n        \"data-required\": props.isRequired || undefined\n    }, /*#__PURE__*/ (0, $8iEQ9$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                (0, $01b77f81d0f07f68$export$75b6ee27786ba447),\n                {\n                    ...labelProps,\n                    ref: labelRef\n                }\n            ],\n            [\n                (0, $3985021b0ad6602f$export$37fb8590cf2c088c),\n                {\n                    ...inputProps,\n                    ref: inputRef\n                }\n            ],\n            [\n                (0, $d2b4bc8c273e7be6$export$24d547caef80ccd1),\n                clearButtonProps\n            ],\n            [\n                (0, $514c0188e459b4c0$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        description: descriptionProps,\n                        errorMessage: errorMessageProps\n                    }\n                }\n            ],\n            [\n                (0, $a049562f99e7db0e$export$f9c6924e160136d1),\n                {\n                    isInvalid: validation.isInvalid,\n                    isDisabled: props.isDisabled || false\n                }\n            ],\n            [\n                (0, $ee014567cb39d3f0$export$ff05c3ac10437e03),\n                validation\n            ]\n        ]\n    }, renderProps.children));\n});\n\n\nexport {$440f4836bcb56932$export$d1c4e4c63cb03a11 as SearchFieldContext, $440f4836bcb56932$export$b94867ecbd698f21 as SearchField};\n//# sourceMappingURL=SearchField.module.js.map\n","import {ButtonContext as $d2b4bc8c273e7be6$export$24d547caef80ccd1} from \"./Button.mjs\";\nimport {Provider as $64fa3d84918910a7$export$2881499e37b75b9a, removeDataAttributes as $64fa3d84918910a7$export$ef03459518577ad4, useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3, useSlot as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8, useSlottedContext as $64fa3d84918910a7$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {FieldErrorContext as $ee014567cb39d3f0$export$ff05c3ac10437e03} from \"./FieldError.mjs\";\nimport {FormContext as $d3e0e05bdfcf66bd$export$c24727297075ec6a} from \"./Form.mjs\";\nimport $akiWb$intlStringsmodulejs from \"./intlStrings.mjs\";\nimport {LabelContext as $01b77f81d0f07f68$export$75b6ee27786ba447} from \"./Label.mjs\";\nimport {ListBoxContext as $eed445e0843c11d0$export$7ff8f37d2d81a48d, ListStateContext as $eed445e0843c11d0$export$7c5906fe4f1f2af2} from \"./ListBox.mjs\";\nimport {OverlayTriggerStateContext as $de32f1b87079253c$export$d2f961adcb0afbe} from \"./Dialog.mjs\";\nimport {PopoverContext as $07b14b47974efb58$export$9b9a0cd73afb7ca4} from \"./Popover.mjs\";\nimport {TextContext as $514c0188e459b4c0$export$9afb8bc826b033ea} from \"./Text.mjs\";\nimport {useFocusRing as $akiWb$useFocusRing, useSelect as $akiWb$useSelect, HiddenSelect as $akiWb$HiddenSelect, useListFormatter as $akiWb$useListFormatter, useLocalizedStringFormatter as $akiWb$useLocalizedStringFormatter} from \"react-aria\";\nimport {useSelectState as $akiWb$useSelectState} from \"react-stately\";\nimport {CollectionBuilder as $akiWb$CollectionBuilder, createHideableComponent as $akiWb$createHideableComponent} from \"@react-aria/collections\";\nimport {useResizeObserver as $akiWb$useResizeObserver, filterDOMProps as $akiWb$filterDOMProps, mergeProps as $akiWb$mergeProps} from \"@react-aria/utils\";\nimport $akiWb$react, {createContext as $akiWb$createContext, forwardRef as $akiWb$forwardRef, useMemo as $akiWb$useMemo, useRef as $akiWb$useRef, useState as $akiWb$useState, useCallback as $akiWb$useCallback, useContext as $akiWb$useContext, Fragment as $akiWb$Fragment} from \"react\";\n\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $82d7e5349645de74$export$7540cee5be7dc19b = /*#__PURE__*/ (0, $akiWb$createContext)(null);\nconst $82d7e5349645de74$export$ef445b55be0601bd = /*#__PURE__*/ (0, $akiWb$createContext)(null);\nconst $82d7e5349645de74$export$ef9b1a59e592288f = /*#__PURE__*/ (0, $akiWb$forwardRef)(function Select(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $82d7e5349645de74$export$7540cee5be7dc19b);\n    let { children: children, isDisabled: isDisabled = false, isInvalid: isInvalid = false, isRequired: isRequired = false } = props;\n    let content = (0, $akiWb$useMemo)(()=>typeof children === 'function' ? children({\n            isOpen: false,\n            isDisabled: isDisabled,\n            isInvalid: isInvalid,\n            isRequired: isRequired,\n            isFocused: false,\n            isFocusVisible: false,\n            defaultChildren: null\n        }) : children, [\n        children,\n        isDisabled,\n        isInvalid,\n        isRequired\n    ]);\n    return /*#__PURE__*/ (0, $akiWb$react).createElement((0, $akiWb$CollectionBuilder), {\n        content: content\n    }, (collection)=>/*#__PURE__*/ (0, $akiWb$react).createElement($82d7e5349645de74$var$SelectInner, {\n            props: props,\n            collection: collection,\n            selectRef: ref\n        }));\n});\n// Contexts to clear inside the popover.\nconst $82d7e5349645de74$var$CLEAR_CONTEXTS = [\n    (0, $01b77f81d0f07f68$export$75b6ee27786ba447),\n    (0, $d2b4bc8c273e7be6$export$24d547caef80ccd1),\n    (0, $514c0188e459b4c0$export$9afb8bc826b033ea)\n];\nfunction $82d7e5349645de74$var$SelectInner({ props: props, selectRef: ref, collection: collection }) {\n    let { validationBehavior: formValidationBehavior } = (0, $64fa3d84918910a7$export$fabf2dc03a41866e)((0, $d3e0e05bdfcf66bd$export$c24727297075ec6a)) || {};\n    var _props_validationBehavior, _ref;\n    let validationBehavior = (_ref = (_props_validationBehavior = props.validationBehavior) !== null && _props_validationBehavior !== void 0 ? _props_validationBehavior : formValidationBehavior) !== null && _ref !== void 0 ? _ref : 'native';\n    let state = (0, $akiWb$useSelectState)({\n        ...props,\n        collection: collection,\n        children: undefined,\n        validationBehavior: validationBehavior\n    });\n    let { isFocusVisible: isFocusVisible, focusProps: focusProps } = (0, $akiWb$useFocusRing)({\n        within: true\n    });\n    // Get props for child elements from useSelect\n    let buttonRef = (0, $akiWb$useRef)(null);\n    let [labelRef, label] = (0, $64fa3d84918910a7$export$9d4c57ee4c6ffdd8)(!props['aria-label'] && !props['aria-labelledby']);\n    let { labelProps: labelProps, triggerProps: triggerProps, valueProps: valueProps, menuProps: menuProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, hiddenSelectProps: hiddenSelectProps, ...validation } = (0, $akiWb$useSelect)({\n        ...(0, $64fa3d84918910a7$export$ef03459518577ad4)(props),\n        label: label,\n        validationBehavior: validationBehavior\n    }, state, buttonRef);\n    // Make menu width match input + button\n    let [buttonWidth, setButtonWidth] = (0, $akiWb$useState)(null);\n    let onResize = (0, $akiWb$useCallback)(()=>{\n        if (buttonRef.current) setButtonWidth(buttonRef.current.offsetWidth + 'px');\n    }, [\n        buttonRef\n    ]);\n    (0, $akiWb$useResizeObserver)({\n        ref: buttonRef,\n        onResize: onResize\n    });\n    // Only expose a subset of state to renderProps function to avoid infinite render loop\n    let renderPropsState = (0, $akiWb$useMemo)(()=>({\n            isOpen: state.isOpen,\n            isFocused: state.isFocused,\n            isFocusVisible: isFocusVisible,\n            isDisabled: props.isDisabled || false,\n            isInvalid: validation.isInvalid || false,\n            isRequired: props.isRequired || false\n        }), [\n        state.isOpen,\n        state.isFocused,\n        isFocusVisible,\n        props.isDisabled,\n        validation.isInvalid,\n        props.isRequired\n    ]);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        values: renderPropsState,\n        defaultClassName: 'react-aria-Select'\n    });\n    let DOMProps = (0, $akiWb$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    let scrollRef = (0, $akiWb$useRef)(null);\n    return /*#__PURE__*/ (0, $akiWb$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $82d7e5349645de74$export$7540cee5be7dc19b,\n                props\n            ],\n            [\n                $82d7e5349645de74$export$ef445b55be0601bd,\n                state\n            ],\n            [\n                $82d7e5349645de74$export$f8f745c04421623f,\n                valueProps\n            ],\n            [\n                (0, $01b77f81d0f07f68$export$75b6ee27786ba447),\n                {\n                    ...labelProps,\n                    ref: labelRef,\n                    elementType: 'span'\n                }\n            ],\n            [\n                (0, $d2b4bc8c273e7be6$export$24d547caef80ccd1),\n                {\n                    ...triggerProps,\n                    ref: buttonRef,\n                    isPressed: state.isOpen,\n                    autoFocus: props.autoFocus\n                }\n            ],\n            [\n                (0, $de32f1b87079253c$export$d2f961adcb0afbe),\n                state\n            ],\n            [\n                (0, $07b14b47974efb58$export$9b9a0cd73afb7ca4),\n                {\n                    trigger: 'Select',\n                    triggerRef: buttonRef,\n                    scrollRef: scrollRef,\n                    placement: 'bottom start',\n                    style: {\n                        '--trigger-width': buttonWidth\n                    },\n                    'aria-labelledby': menuProps['aria-labelledby'],\n                    clearContexts: $82d7e5349645de74$var$CLEAR_CONTEXTS\n                }\n            ],\n            [\n                (0, $eed445e0843c11d0$export$7ff8f37d2d81a48d),\n                {\n                    ...menuProps,\n                    ref: scrollRef\n                }\n            ],\n            [\n                (0, $eed445e0843c11d0$export$7c5906fe4f1f2af2),\n                state\n            ],\n            [\n                (0, $514c0188e459b4c0$export$9afb8bc826b033ea),\n                {\n                    slots: {\n                        description: descriptionProps,\n                        errorMessage: errorMessageProps\n                    }\n                }\n            ],\n            [\n                (0, $ee014567cb39d3f0$export$ff05c3ac10437e03),\n                validation\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $akiWb$react).createElement(\"div\", {\n        ...(0, $akiWb$mergeProps)(DOMProps, renderProps, focusProps),\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-focused\": state.isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-open\": state.isOpen || undefined,\n        \"data-disabled\": props.isDisabled || undefined,\n        \"data-invalid\": validation.isInvalid || undefined,\n        \"data-required\": props.isRequired || undefined\n    }, renderProps.children, /*#__PURE__*/ (0, $akiWb$react).createElement((0, $akiWb$HiddenSelect), {\n        ...hiddenSelectProps,\n        autoComplete: props.autoComplete\n    })));\n}\nconst $82d7e5349645de74$export$f8f745c04421623f = /*#__PURE__*/ (0, $akiWb$createContext)(null);\nconst $82d7e5349645de74$export$e288731fd71264f0 = /*#__PURE__*/ (0, $akiWb$createHideableComponent)(function SelectValue(props, ref) {\n    var _state_selectedItems_;\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $82d7e5349645de74$export$f8f745c04421623f);\n    let state = (0, $akiWb$useContext)($82d7e5349645de74$export$ef445b55be0601bd);\n    let { placeholder: placeholder } = (0, $64fa3d84918910a7$export$fabf2dc03a41866e)($82d7e5349645de74$export$7540cee5be7dc19b);\n    let rendered = state.selectedItems.map((item)=>{\n        var _item_props;\n        let rendered = (_item_props = item.props) === null || _item_props === void 0 ? void 0 : _item_props.children;\n        // If the selected item has a function as a child, we need to call it to render to React.JSX.\n        if (typeof rendered === 'function') {\n            let fn = rendered;\n            rendered = fn({\n                isHovered: false,\n                isPressed: false,\n                isSelected: false,\n                isFocused: false,\n                isFocusVisible: false,\n                isDisabled: false,\n                selectionMode: 'single',\n                selectionBehavior: 'toggle'\n            });\n        }\n        return rendered;\n    });\n    let formatter = (0, $akiWb$useListFormatter)();\n    let textValue = (0, $akiWb$useMemo)(()=>state.selectedItems.map((item)=>item === null || item === void 0 ? void 0 : item.textValue), [\n        state.selectedItems\n    ]);\n    let selectionMode = state.selectionManager.selectionMode;\n    let selectedText = (0, $akiWb$useMemo)(()=>{\n        var _textValue_;\n        return selectionMode === 'single' ? (_textValue_ = textValue[0]) !== null && _textValue_ !== void 0 ? _textValue_ : '' : formatter.format(textValue);\n    }, [\n        selectionMode,\n        formatter,\n        textValue\n    ]);\n    let defaultChildren = (0, $akiWb$useMemo)(()=>{\n        if (selectionMode === 'single') return rendered[0];\n        let parts = formatter.formatToParts(textValue);\n        if (parts.length === 0) return null;\n        let index = 0;\n        return parts.map((part)=>{\n            if (part.type === 'element') return /*#__PURE__*/ (0, $akiWb$react).createElement((0, $akiWb$Fragment), {\n                key: index\n            }, rendered[index++]);\n            else return part.value;\n        });\n    }, [\n        selectionMode,\n        formatter,\n        textValue,\n        rendered\n    ]);\n    let stringFormatter = (0, $akiWb$useLocalizedStringFormatter)((0, ($parcel$interopDefault($akiWb$intlStringsmodulejs))), 'react-aria-components');\n    var _ref, _state_selectedItems__value;\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        defaultChildren: (_ref = defaultChildren !== null && defaultChildren !== void 0 ? defaultChildren : placeholder) !== null && _ref !== void 0 ? _ref : stringFormatter.format('selectPlaceholder'),\n        defaultClassName: 'react-aria-SelectValue',\n        values: {\n            selectedItem: (_state_selectedItems__value = (_state_selectedItems_ = state.selectedItems[0]) === null || _state_selectedItems_ === void 0 ? void 0 : _state_selectedItems_.value) !== null && _state_selectedItems__value !== void 0 ? _state_selectedItems__value : null,\n            selectedItems: (0, $akiWb$useMemo)(()=>state.selectedItems.map((item)=>{\n                    var _item_value;\n                    return (_item_value = item.value) !== null && _item_value !== void 0 ? _item_value : null;\n                }), [\n                state.selectedItems\n            ]),\n            selectedText: selectedText,\n            isPlaceholder: state.selectedItems.length === 0,\n            state: state\n        }\n    });\n    let DOMProps = (0, $akiWb$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $akiWb$react).createElement(\"span\", {\n        ref: ref,\n        ...DOMProps,\n        ...renderProps,\n        \"data-placeholder\": state.selectedItems.length === 0 || undefined\n    }, /*#__PURE__*/ (0, $akiWb$react).createElement((0, $514c0188e459b4c0$export$9afb8bc826b033ea).Provider, {\n        value: undefined\n    }, renderProps.children));\n});\n\n\nexport {$82d7e5349645de74$export$7540cee5be7dc19b as SelectContext, $82d7e5349645de74$export$ef445b55be0601bd as SelectStateContext, $82d7e5349645de74$export$ef9b1a59e592288f as Select, $82d7e5349645de74$export$f8f745c04421623f as SelectValueContext, $82d7e5349645de74$export$e288731fd71264f0 as SelectValue};\n//# sourceMappingURL=Select.module.js.map\n","import {Provider as $64fa3d84918910a7$export$2881499e37b75b9a, useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3, useSlottedContext as $64fa3d84918910a7$export$fabf2dc03a41866e} from \"./utils.mjs\";\nimport {CollectionRendererContext as $7135fc7d473fd974$export$4feb769f8ddf26c5, DefaultCollectionRenderer as $7135fc7d473fd974$export$a164736487e3f0ae, usePersistedKeys as $7135fc7d473fd974$export$90e00781bc59d8f9} from \"./Collection.mjs\";\nimport {SelectionIndicatorContext as $1d5b8b8664671ef2$export$c9549807523555e0} from \"./SelectionIndicator.mjs\";\nimport {SharedElementTransition as $c8a5a149f625efcf$export$758399f318e6385a} from \"./SharedElementTransition.mjs\";\nimport {useFocusRing as $7aSLZ$useFocusRing, mergeProps as $7aSLZ$mergeProps, useTabList as $7aSLZ$useTabList, useTab as $7aSLZ$useTab, useHover as $7aSLZ$useHover, useTabPanel as $7aSLZ$useTabPanel} from \"react-aria\";\nimport {CollectionBuilder as $7aSLZ$CollectionBuilder, Collection as $7aSLZ$Collection, CollectionNode as $7aSLZ$CollectionNode, createLeafComponent as $7aSLZ$createLeafComponent, createHideableComponent as $7aSLZ$createHideableComponent} from \"@react-aria/collections\";\nimport {filterDOMProps as $7aSLZ$filterDOMProps, useObjectRef as $7aSLZ$useObjectRef, useLayoutEffect as $7aSLZ$useLayoutEffect, useExitAnimation as $7aSLZ$useExitAnimation, useEnterAnimation as $7aSLZ$useEnterAnimation, inertValue as $7aSLZ$inertValue} from \"@react-aria/utils\";\nimport {useTabListState as $7aSLZ$useTabListState} from \"react-stately\";\nimport $7aSLZ$react, {createContext as $7aSLZ$createContext, forwardRef as $7aSLZ$forwardRef, useMemo as $7aSLZ$useMemo, useContext as $7aSLZ$useContext, useRef as $7aSLZ$useRef, useState as $7aSLZ$useState} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\n\nconst $5e8ad37a45e1c704$export$cfa7aa87c26e7d1f = /*#__PURE__*/ (0, $7aSLZ$createContext)(null);\nconst $5e8ad37a45e1c704$export$364712098d2aa57c = /*#__PURE__*/ (0, $7aSLZ$createContext)(null);\nconst $5e8ad37a45e1c704$export$b2539bed5023c21c = /*#__PURE__*/ (0, $7aSLZ$forwardRef)(function Tabs(props, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $5e8ad37a45e1c704$export$cfa7aa87c26e7d1f);\n    let { children: children, orientation: orientation = 'horizontal' } = props;\n    children = (0, $7aSLZ$useMemo)(()=>typeof children === 'function' ? children({\n            orientation: orientation,\n            defaultChildren: null\n        }) : children, [\n        children,\n        orientation\n    ]);\n    return /*#__PURE__*/ (0, $7aSLZ$react).createElement((0, $7aSLZ$CollectionBuilder), {\n        content: children\n    }, (collection)=>/*#__PURE__*/ (0, $7aSLZ$react).createElement($5e8ad37a45e1c704$var$TabsInner, {\n            props: props,\n            collection: collection,\n            tabsRef: ref\n        }));\n});\nfunction $5e8ad37a45e1c704$var$TabsInner({ props: props, tabsRef: ref, collection: collection }) {\n    let { orientation: orientation = 'horizontal' } = props;\n    let state = (0, $7aSLZ$useTabListState)({\n        ...props,\n        collection: collection,\n        children: undefined\n    });\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $7aSLZ$useFocusRing)({\n        within: true\n    });\n    let values = (0, $7aSLZ$useMemo)(()=>({\n            orientation: orientation,\n            isFocusWithin: isFocused,\n            isFocusVisible: isFocusVisible\n        }), [\n        orientation,\n        isFocused,\n        isFocusVisible\n    ]);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-Tabs',\n        values: values\n    });\n    let DOMProps = (0, $7aSLZ$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $7aSLZ$react).createElement(\"div\", {\n        ...(0, $7aSLZ$mergeProps)(DOMProps, renderProps, focusProps),\n        ref: ref,\n        slot: props.slot || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-orientation\": orientation,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-disabled\": state.isDisabled || undefined\n    }, /*#__PURE__*/ (0, $7aSLZ$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $5e8ad37a45e1c704$export$cfa7aa87c26e7d1f,\n                props\n            ],\n            [\n                $5e8ad37a45e1c704$export$364712098d2aa57c,\n                state\n            ]\n        ]\n    }, renderProps.children));\n}\nconst $5e8ad37a45e1c704$export$e51a686c67fdaa2d = /*#__PURE__*/ (0, $7aSLZ$forwardRef)(function TabList(props, ref) {\n    let state = (0, $7aSLZ$useContext)($5e8ad37a45e1c704$export$364712098d2aa57c);\n    return state ? /*#__PURE__*/ (0, $7aSLZ$react).createElement($5e8ad37a45e1c704$var$TabListInner, {\n        props: props,\n        forwardedRef: ref\n    }) : /*#__PURE__*/ (0, $7aSLZ$react).createElement((0, $7aSLZ$Collection), props);\n});\nfunction $5e8ad37a45e1c704$var$TabListInner({ props: props, forwardedRef: ref }) {\n    let state = (0, $7aSLZ$useContext)($5e8ad37a45e1c704$export$364712098d2aa57c);\n    let { CollectionRoot: CollectionRoot } = (0, $7aSLZ$useContext)((0, $7135fc7d473fd974$export$4feb769f8ddf26c5));\n    let { orientation: orientation = 'horizontal', keyboardActivation: keyboardActivation = 'automatic' } = (0, $64fa3d84918910a7$export$fabf2dc03a41866e)($5e8ad37a45e1c704$export$cfa7aa87c26e7d1f);\n    let objectRef = (0, $7aSLZ$useObjectRef)(ref);\n    let { tabListProps: tabListProps } = (0, $7aSLZ$useTabList)({\n        ...props,\n        orientation: orientation,\n        keyboardActivation: keyboardActivation\n    }, state, objectRef);\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        children: null,\n        defaultClassName: 'react-aria-TabList',\n        values: {\n            orientation: orientation,\n            state: state\n        }\n    });\n    let DOMProps = (0, $7aSLZ$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    return /*#__PURE__*/ (0, $7aSLZ$react).createElement(\"div\", {\n        ...(0, $7aSLZ$mergeProps)(DOMProps, renderProps, tabListProps),\n        ref: objectRef,\n        \"data-orientation\": orientation || undefined\n    }, /*#__PURE__*/ (0, $7aSLZ$react).createElement((0, $c8a5a149f625efcf$export$758399f318e6385a), null, /*#__PURE__*/ (0, $7aSLZ$react).createElement(CollectionRoot, {\n        collection: state.collection,\n        persistedKeys: (0, $7135fc7d473fd974$export$90e00781bc59d8f9)(state.selectionManager.focusedKey)\n    })));\n}\nclass $5e8ad37a45e1c704$var$TabItemNode extends (0, $7aSLZ$CollectionNode) {\n}\n$5e8ad37a45e1c704$var$TabItemNode.type = 'item';\nconst $5e8ad37a45e1c704$export$3e41faf802a29e71 = /*#__PURE__*/ (0, $7aSLZ$createLeafComponent)($5e8ad37a45e1c704$var$TabItemNode, (props, forwardedRef, item)=>{\n    let state = (0, $7aSLZ$useContext)($5e8ad37a45e1c704$export$364712098d2aa57c);\n    let ref = (0, $7aSLZ$useObjectRef)(forwardedRef);\n    let { tabProps: tabProps, isSelected: isSelected, isDisabled: isDisabled, isPressed: isPressed } = (0, $7aSLZ$useTab)({\n        key: item.key,\n        ...props\n    }, state, ref);\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $7aSLZ$useFocusRing)();\n    let { hoverProps: hoverProps, isHovered: isHovered } = (0, $7aSLZ$useHover)({\n        isDisabled: isDisabled,\n        onHoverStart: props.onHoverStart,\n        onHoverEnd: props.onHoverEnd,\n        onHoverChange: props.onHoverChange\n    });\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        id: undefined,\n        children: item.rendered,\n        defaultClassName: 'react-aria-Tab',\n        values: {\n            isSelected: isSelected,\n            isDisabled: isDisabled,\n            isFocused: isFocused,\n            isFocusVisible: isFocusVisible,\n            isPressed: isPressed,\n            isHovered: isHovered\n        }\n    });\n    let ElementType = item.props.href ? 'a' : 'div';\n    let DOMProps = (0, $7aSLZ$filterDOMProps)(props, {\n        global: true\n    });\n    delete DOMProps.id;\n    delete DOMProps.onClick;\n    return /*#__PURE__*/ (0, $7aSLZ$react).createElement(ElementType, {\n        ...(0, $7aSLZ$mergeProps)(DOMProps, renderProps, tabProps, focusProps, hoverProps),\n        ref: ref,\n        \"data-selected\": isSelected || undefined,\n        \"data-disabled\": isDisabled || undefined,\n        \"data-focused\": isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        \"data-pressed\": isPressed || undefined,\n        \"data-hovered\": isHovered || undefined\n    }, /*#__PURE__*/ (0, $7aSLZ$react).createElement((0, $1d5b8b8664671ef2$export$c9549807523555e0).Provider, {\n        value: {\n            isSelected: isSelected\n        }\n    }, renderProps.children));\n});\nconst $5e8ad37a45e1c704$export$5dae8d435677f210 = /*#__PURE__*/ (0, $7aSLZ$createHideableComponent)(function TabPanels(props, forwardedRef) {\n    let state = (0, $7aSLZ$useContext)($5e8ad37a45e1c704$export$364712098d2aa57c);\n    let ref = (0, $7aSLZ$useObjectRef)(forwardedRef);\n    let selectedKeyRef = (0, $7aSLZ$useRef)(state.selectedKey);\n    let prevSize = (0, $7aSLZ$useRef)(null);\n    let hasTransition = (0, $7aSLZ$useRef)(null);\n    (0, $7aSLZ$useLayoutEffect)(()=>{\n        let el = ref.current;\n        if (!el) return;\n        if (hasTransition.current == null) hasTransition.current = /width|height|all/.test(window.getComputedStyle(el).transition);\n        if (hasTransition.current && selectedKeyRef.current != null && selectedKeyRef.current !== state.selectedKey) {\n            // Measure auto size.\n            el.style.setProperty('--tab-panel-width', 'auto');\n            el.style.setProperty('--tab-panel-height', 'auto');\n            let { width: width, height: height } = el.getBoundingClientRect();\n            if (prevSize.current && (prevSize.current.width !== width || prevSize.current.height !== height)) {\n                // Revert to previous size.\n                el.style.setProperty('--tab-panel-width', prevSize.current.width + 'px');\n                el.style.setProperty('--tab-panel-height', prevSize.current.height + 'px');\n                // Force style re-calculation to trigger animations.\n                window.getComputedStyle(el).height;\n                // Animate to current pixel size.\n                el.style.setProperty('--tab-panel-width', width + 'px');\n                el.style.setProperty('--tab-panel-height', height + 'px');\n                // When animations complete, revert back to auto size.\n                Promise.all(el.getAnimations().map((a)=>a.finished)).then(()=>{\n                    el.style.setProperty('--tab-panel-width', 'auto');\n                    el.style.setProperty('--tab-panel-height', 'auto');\n                }).catch(()=>{});\n            }\n        }\n        selectedKeyRef.current = state.selectedKey;\n    }, [\n        ref,\n        state.selectedKey\n    ]);\n    // Store previous size before DOM updates occur.\n    // This breaks the rules of hooks because there is no effect that runs _before_ DOM updates.\n    // eslint-disable-next-line rulesdir/pure-render\n    if (state.selectedKey != null && state.selectedKey !== selectedKeyRef.current && ref.current && hasTransition.current) // eslint-disable-next-line rulesdir/pure-render\n    prevSize.current = ref.current.getBoundingClientRect();\n    return /*#__PURE__*/ (0, $7aSLZ$react).createElement(\"div\", {\n        ...props,\n        ref: ref,\n        className: props.className || 'react-aria-TabPanels'\n    }, /*#__PURE__*/ (0, $7aSLZ$react).createElement((0, $7aSLZ$Collection), props));\n});\nconst $5e8ad37a45e1c704$export$3d96ec278d3efce4 = /*#__PURE__*/ (0, $7aSLZ$createHideableComponent)(function TabPanel(props, forwardedRef) {\n    const state = (0, $7aSLZ$useContext)($5e8ad37a45e1c704$export$364712098d2aa57c);\n    let ref = (0, $7aSLZ$useObjectRef)(forwardedRef);\n    // Track if the tab panel was initially selected on mount (after extra render to populate the collection).\n    // In this case, we don't want to trigger animations.\n    let isSelected = state.selectedKey === props.id;\n    let [isInitiallySelected, setInitiallySelected] = (0, $7aSLZ$useState)(state.selectedKey != null ? isSelected : null);\n    if (isInitiallySelected == null && state.selectedKey != null) setInitiallySelected(isSelected);\n    else if (!isSelected && isInitiallySelected) setInitiallySelected(false);\n    let isExiting = (0, $7aSLZ$useExitAnimation)(ref, isSelected);\n    if (!isSelected && !props.shouldForceMount && !isExiting) return null;\n    return /*#__PURE__*/ (0, $7aSLZ$react).createElement($5e8ad37a45e1c704$var$TabPanelInner, {\n        ...props,\n        tabPanelRef: ref,\n        isInitiallySelected: isInitiallySelected || false,\n        isExiting: isExiting\n    });\n});\nfunction $5e8ad37a45e1c704$var$TabPanelInner(props) {\n    let state = (0, $7aSLZ$useContext)($5e8ad37a45e1c704$export$364712098d2aa57c);\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    let { id: id, tabPanelRef: ref, isInitiallySelected: isInitiallySelected, isExiting: isExiting, ...otherProps } = props;\n    let { tabPanelProps: tabPanelProps } = (0, $7aSLZ$useTabPanel)(props, state, ref);\n    let { focusProps: focusProps, isFocused: isFocused, isFocusVisible: isFocusVisible } = (0, $7aSLZ$useFocusRing)();\n    let isSelected = state.selectedKey === props.id;\n    let isEntering = (0, $7aSLZ$useEnterAnimation)(ref) && !isInitiallySelected;\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-TabPanel',\n        values: {\n            isFocused: isFocused,\n            isFocusVisible: isFocusVisible,\n            // @ts-ignore - compatibility with React < 19\n            isInert: (0, $7aSLZ$inertValue)(!isSelected),\n            isEntering: isEntering,\n            isExiting: isExiting,\n            state: state\n        }\n    });\n    let DOMProps = (0, $7aSLZ$filterDOMProps)(otherProps, {\n        global: true\n    });\n    delete DOMProps.id;\n    let domProps = isSelected ? (0, $7aSLZ$mergeProps)(DOMProps, tabPanelProps, focusProps, renderProps) : (0, $7aSLZ$mergeProps)(DOMProps, renderProps);\n    return /*#__PURE__*/ (0, $7aSLZ$react).createElement(\"div\", {\n        ...domProps,\n        ref: ref,\n        \"data-focused\": isFocused || undefined,\n        \"data-focus-visible\": isFocusVisible || undefined,\n        // @ts-ignore\n        inert: (0, $7aSLZ$inertValue)(!isSelected || props.inert),\n        \"data-inert\": !isSelected ? 'true' : undefined,\n        \"data-entering\": isEntering || undefined,\n        \"data-exiting\": isExiting || undefined\n    }, /*#__PURE__*/ (0, $7aSLZ$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $5e8ad37a45e1c704$export$cfa7aa87c26e7d1f,\n                null\n            ],\n            [\n                $5e8ad37a45e1c704$export$364712098d2aa57c,\n                null\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $7aSLZ$react).createElement((0, $7135fc7d473fd974$export$4feb769f8ddf26c5).Provider, {\n        value: (0, $7135fc7d473fd974$export$a164736487e3f0ae)\n    }, renderProps.children)));\n}\n\n\nexport {$5e8ad37a45e1c704$export$cfa7aa87c26e7d1f as TabsContext, $5e8ad37a45e1c704$export$364712098d2aa57c as TabListStateContext, $5e8ad37a45e1c704$export$b2539bed5023c21c as Tabs, $5e8ad37a45e1c704$export$e51a686c67fdaa2d as TabList, $5e8ad37a45e1c704$export$3e41faf802a29e71 as Tab, $5e8ad37a45e1c704$export$5dae8d435677f210 as TabPanels, $5e8ad37a45e1c704$export$3d96ec278d3efce4 as TabPanel};\n//# sourceMappingURL=Tabs.module.js.map\n","import {Provider as $64fa3d84918910a7$export$2881499e37b75b9a, useContextProps as $64fa3d84918910a7$export$29f1550f4b0d4415, useRenderProps as $64fa3d84918910a7$export$4d86445c2cf5e3} from \"./utils.mjs\";\nimport {OverlayArrowContext as $44f671af83e7d9e0$export$2de4954e8ae13b9f} from \"./OverlayArrow.mjs\";\nimport {useTooltipTrigger as $cCslV$useTooltipTrigger, OverlayContainer as $cCslV$OverlayContainer, useOverlayPosition as $cCslV$useOverlayPosition, mergeProps as $cCslV$mergeProps, useTooltip as $cCslV$useTooltip} from \"react-aria\";\nimport {useExitAnimation as $cCslV$useExitAnimation, useEnterAnimation as $cCslV$useEnterAnimation, filterDOMProps as $cCslV$filterDOMProps} from \"@react-aria/utils\";\nimport {FocusableProvider as $cCslV$FocusableProvider} from \"@react-aria/focus\";\nimport {useTooltipTriggerState as $cCslV$useTooltipTriggerState} from \"react-stately\";\nimport $cCslV$react, {createContext as $cCslV$createContext, useRef as $cCslV$useRef, forwardRef as $cCslV$forwardRef, useContext as $cCslV$useContext} from \"react\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\nconst $4e3b923658d69c60$export$7a7623236eec67fa = /*#__PURE__*/ (0, $cCslV$createContext)(null);\nconst $4e3b923658d69c60$export$39ae08fa83328b12 = /*#__PURE__*/ (0, $cCslV$createContext)(null);\nfunction $4e3b923658d69c60$export$8c610744efcf8a1d(props) {\n    let state = (0, $cCslV$useTooltipTriggerState)(props);\n    let ref = (0, $cCslV$useRef)(null);\n    let { triggerProps: triggerProps, tooltipProps: tooltipProps } = (0, $cCslV$useTooltipTrigger)(props, state, ref);\n    return /*#__PURE__*/ (0, $cCslV$react).createElement((0, $64fa3d84918910a7$export$2881499e37b75b9a), {\n        values: [\n            [\n                $4e3b923658d69c60$export$7a7623236eec67fa,\n                state\n            ],\n            [\n                $4e3b923658d69c60$export$39ae08fa83328b12,\n                {\n                    ...tooltipProps,\n                    triggerRef: ref\n                }\n            ]\n        ]\n    }, /*#__PURE__*/ (0, $cCslV$react).createElement((0, $cCslV$FocusableProvider), {\n        ...triggerProps,\n        ref: ref\n    }, props.children));\n}\nconst $4e3b923658d69c60$export$28c660c63b792dea = /*#__PURE__*/ (0, $cCslV$forwardRef)(function Tooltip({ UNSTABLE_portalContainer: UNSTABLE_portalContainer, ...props }, ref) {\n    [props, ref] = (0, $64fa3d84918910a7$export$29f1550f4b0d4415)(props, ref, $4e3b923658d69c60$export$39ae08fa83328b12);\n    let contextState = (0, $cCslV$useContext)($4e3b923658d69c60$export$7a7623236eec67fa);\n    let localState = (0, $cCslV$useTooltipTriggerState)(props);\n    let state = props.isOpen != null || props.defaultOpen != null || !contextState ? localState : contextState;\n    let isExiting = (0, $cCslV$useExitAnimation)(ref, state.isOpen) || props.isExiting || false;\n    if (!state.isOpen && !isExiting) return null;\n    return /*#__PURE__*/ (0, $cCslV$react).createElement((0, $cCslV$OverlayContainer), {\n        portalContainer: UNSTABLE_portalContainer\n    }, /*#__PURE__*/ (0, $cCslV$react).createElement($4e3b923658d69c60$var$TooltipInner, {\n        ...props,\n        tooltipRef: ref,\n        isExiting: isExiting\n    }));\n});\nfunction $4e3b923658d69c60$var$TooltipInner(props) {\n    let state = (0, $cCslV$useContext)($4e3b923658d69c60$export$7a7623236eec67fa);\n    let arrowRef = (0, $cCslV$useRef)(null);\n    let { overlayProps: overlayProps, arrowProps: arrowProps, placement: placement, triggerAnchorPoint: triggerAnchorPoint } = (0, $cCslV$useOverlayPosition)({\n        placement: props.placement || 'top',\n        targetRef: props.triggerRef,\n        overlayRef: props.tooltipRef,\n        arrowRef: arrowRef,\n        offset: props.offset,\n        crossOffset: props.crossOffset,\n        isOpen: state.isOpen,\n        arrowBoundaryOffset: props.arrowBoundaryOffset,\n        shouldFlip: props.shouldFlip,\n        containerPadding: props.containerPadding,\n        onClose: ()=>state.close(true)\n    });\n    let isEntering = (0, $cCslV$useEnterAnimation)(props.tooltipRef, !!placement) || props.isEntering || false;\n    let renderProps = (0, $64fa3d84918910a7$export$4d86445c2cf5e3)({\n        ...props,\n        defaultClassName: 'react-aria-Tooltip',\n        values: {\n            placement: placement,\n            isEntering: isEntering,\n            isExiting: props.isExiting,\n            state: state\n        }\n    });\n    props = (0, $cCslV$mergeProps)(props, overlayProps);\n    let { tooltipProps: tooltipProps } = (0, $cCslV$useTooltip)(props, state);\n    let DOMProps = (0, $cCslV$filterDOMProps)(props, {\n        global: true\n    });\n    return /*#__PURE__*/ (0, $cCslV$react).createElement(\"div\", {\n        ...(0, $cCslV$mergeProps)(DOMProps, renderProps, tooltipProps),\n        ref: props.tooltipRef,\n        style: {\n            ...overlayProps.style,\n            '--trigger-anchor-point': triggerAnchorPoint ? `${triggerAnchorPoint.x}px ${triggerAnchorPoint.y}px` : undefined,\n            ...renderProps.style\n        },\n        \"data-placement\": placement !== null && placement !== void 0 ? placement : undefined,\n        \"data-entering\": isEntering || undefined,\n        \"data-exiting\": props.isExiting || undefined\n    }, /*#__PURE__*/ (0, $cCslV$react).createElement((0, $44f671af83e7d9e0$export$2de4954e8ae13b9f).Provider, {\n        value: {\n            ...arrowProps,\n            placement: placement,\n            ref: arrowRef\n        }\n    }, renderProps.children));\n}\n\n\nexport {$4e3b923658d69c60$export$7a7623236eec67fa as TooltipTriggerStateContext, $4e3b923658d69c60$export$39ae08fa83328b12 as TooltipContext, $4e3b923658d69c60$export$8c610744efcf8a1d as TooltipTrigger, $4e3b923658d69c60$export$28c660c63b792dea as Tooltip};\n//# sourceMappingURL=Tooltip.module.js.map\n","import * as React from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faInfoCircle } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"classnames\"\nimport {\n    TooltipTrigger,\n    Tooltip,\n    Button,\n    OverlayArrow,\n} from \"react-aria-components\"\n\nexport const LabeledSwitch = ({\n    className,\n    label,\n    value,\n    tooltip,\n    tracking,\n    disabled,\n    onToggle,\n}: {\n    value?: boolean\n    label?: string\n    tooltip?: string\n    tracking?: string\n    onToggle: () => any\n    className?: string\n    disabled?: boolean\n}): React.ReactElement => {\n    return (\n        <div\n            className={cx(\n                \"labeled-switch\",\n                { \"labeled-switch--disabled\": disabled },\n                className\n            )}\n        >\n            <label>\n                <input\n                    type=\"checkbox\"\n                    checked={value}\n                    disabled={disabled}\n                    onChange={onToggle}\n                    data-track-note={tracking}\n                />\n                <div data-track-note=\"\" className=\"outer\">\n                    <div className=\"inner\"></div>\n                </div>\n                {label}\n                {tooltip && (\n                    <TooltipTrigger delay={0}>\n                        <Button\n                            className=\"tooltip-trigger\"\n                            aria-label=\"More information about this setting\"\n                        >\n                            <FontAwesomeIcon icon={faInfoCircle} />\n                        </Button>\n                        <Tooltip\n                            className=\"react-aria-tooltip\"\n                            placement=\"top\"\n                            offset={8}\n                        >\n                            <OverlayArrow className=\"react-aria-tooltip__overlay-arrow\">\n                                <svg width={8} height={8} viewBox=\"0 0 8 8\">\n                                    <path d=\"M0 0 L4 4 L8 0\" />\n                                </svg>\n                            </OverlayArrow>\n                            {tooltip}\n                        </Tooltip>\n                    </TooltipTrigger>\n                )}\n            </label>\n            {tooltip && (\n                <div className=\"labeled-switch-subtitle\">{tooltip}</div>\n            )}\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCheck } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"classnames\"\n\nexport const Checkbox = ({\n    className,\n    checked,\n    onChange,\n    label,\n    disabled,\n    id,\n    \"data-test\": testHook,\n}: {\n    className?: string\n    checked: boolean\n    onChange: React.ChangeEventHandler<HTMLInputElement>\n    label: React.ReactNode\n    disabled?: boolean\n    id?: string\n    \"data-test\"?: string\n}) => {\n    return (\n        <div\n            className={cx(\n                \"checkbox\",\n                { \"checkbox--disabled\": disabled },\n                className\n            )}\n        >\n            <label>\n                <input\n                    id={id}\n                    type=\"checkbox\"\n                    data-test={testHook}\n                    checked={checked}\n                    onChange={onChange}\n                    disabled={disabled}\n                />\n                <div className=\"custom\">\n                    {checked && <FontAwesomeIcon icon={faCheck} />}\n                </div>\n                <div className=\"label\">{label}</div>\n            </label>\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport cx from \"classnames\"\n\nexport const RadioButton = ({\n    className,\n    checked,\n    onChange,\n    label,\n    group,\n    disabled,\n    id,\n    \"data-test\": testHook,\n}: {\n    className?: string\n    checked: boolean\n    onChange: React.ChangeEventHandler<HTMLInputElement>\n    label: React.ReactNode\n    group?: string\n    disabled?: boolean\n    id?: string\n    \"data-test\"?: string\n}) => {\n    return (\n        <div className={cx(\"radio\", className)}>\n            <label>\n                <input\n                    type=\"radio\"\n                    id={id}\n                    data-test={testHook}\n                    disabled={disabled}\n                    name={group}\n                    checked={checked}\n                    onChange={onChange}\n                />\n                <div className=\"outer\">\n                    {checked && <div className=\"inner\" />}\n                </div>\n                <div className=\"label\">{label}</div>\n            </label>\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport cx from \"classnames\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faXmark } from \"@fortawesome/free-solid-svg-icons\"\n\n// keep in sync with $size in CloseButton.scss\nexport const CLOSE_BUTTON_WIDTH = 32\nexport const CLOSE_BUTTON_HEIGHT = 32\n\nexport function CloseButton({\n    onClick,\n    className,\n}: {\n    onClick: React.MouseEventHandler<HTMLButtonElement>\n    className?: string\n}) {\n    return (\n        <button\n            type=\"button\"\n            className={cx(\"close-button\", className)}\n            onClick={onClick}\n            aria-label=\"Close\"\n        >\n            <FontAwesomeIcon icon={faXmark} />\n        </button>\n    )\n}\n","import * as React from \"react\"\nimport cx from \"classnames\"\nimport { CloseButton } from \"./closeButton/CloseButton.js\"\n\nexport function OverlayHeader({\n    title,\n    onTitleClick,\n    onDismiss,\n    className,\n}: {\n    title: string\n    onTitleClick?: () => void\n    onDismiss?: () => void\n    className?: string\n}): React.ReactElement {\n    return (\n        <div className={cx(\"overlay-header\", className)}>\n            <h2\n                className={cx(\"title\", {\n                    clickable: !!onTitleClick,\n                })}\n                onClick={onTitleClick}\n            >\n                {title}\n            </h2>\n            {onDismiss && <CloseButton onClick={onDismiss} />}\n        </div>\n    )\n}\n","import { useEffect, useState } from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCopy } from \"@fortawesome/free-solid-svg-icons\"\nimport { canWriteToClipboard, copyToClipboard } from \"@ourworldindata/utils\"\nimport cx from \"classnames\"\nimport { SimpleMarkdownText } from \"../SimpleMarkdownText\"\n\nexport const CodeSnippet = ({\n    className,\n    code,\n    theme = \"dark\",\n    isTruncated = false,\n    useMarkdown = false,\n\n    // If true, always show the copy button (even if clipboard API is not available).\n    // Useful for the admin, where we're often running in HTTP contexts, but have fallbacks\n    // for copying to clipboard.\n    forceShowCopyButton = false,\n}: {\n    className?: string\n    code: string\n    theme?: \"dark\" | \"light\"\n    isTruncated?: boolean\n    useMarkdown?: boolean\n    forceShowCopyButton?: boolean\n}) => {\n    const [canCopy, setCanCopy] = useState(false)\n    const [hasCopied, setHasCopied] = useState(false)\n\n    useEffect(() => {\n        void canWriteToClipboard().then(setCanCopy)\n    }, [])\n\n    const copy = async () => {\n        try {\n            const success = await copyToClipboard(code)\n            if (!success) return\n\n            setHasCopied(true)\n            // reset CSS animation\n            setTimeout(() => setHasCopied(false), 2000)\n        } catch (err) {\n            console.error(\n                \"Couldn't copy to clipboard using navigator.clipboard\",\n                err\n            )\n        }\n    }\n\n    return (\n        <div\n            className={cx(\n                `wp-code-snippet wp-code-snippet--${theme}`,\n                className\n            )}\n        >\n            <pre className=\"wp-block-code\">\n                <code\n                    className={cx(\"wp-code-snippet__code\", {\n                        \"wp-code-snippet__code--is-truncated\": isTruncated,\n                    })}\n                >\n                    {useMarkdown ? (\n                        <SimpleMarkdownText text={code} useParagraphs={false} />\n                    ) : (\n                        code\n                    )}\n                </code>\n            </pre>\n            {(canCopy || forceShowCopyButton) && (\n                <button\n                    className={cx(\"code-copy-button\", {\n                        \"code-copy-button--has-copied\": hasCopied,\n                    })}\n                    onClick={copy}\n                    aria-label=\"Copy to clipboard\"\n                >\n                    {hasCopied ? \"Copied!\" : <FontAwesomeIcon icon={faCopy} />}\n                </button>\n            )}\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport cx from \"classnames\"\nimport { ExpandableToggle } from \"../ExpandableToggle/ExpandableToggle.js\"\nimport { DisplaySource, formatSourceDate } from \"@ourworldindata/utils\"\nimport { SimpleMarkdownText } from \"../SimpleMarkdownText.js\"\nimport { CodeSnippet } from \"../CodeSnippet/CodeSnippet.js\"\nimport { REUSE_THIS_WORK_SECTION_ID } from \"../SharedDataPageConstants.js\"\nimport { makeLinks } from \"../IndicatorKeyData/IndicatorKeyData.js\"\n\nexport interface IndicatorSourcesProps {\n    sources: DisplaySource[]\n    isEmbeddedInADataPage?: boolean // true by default\n}\n\nexport const IndicatorSources = (props: IndicatorSourcesProps) => {\n    const isEmbeddedInADataPage = props.isEmbeddedInADataPage ?? true\n    const uniqueSources = _.uniqBy(props.sources, \"label\")\n\n    return (\n        <div\n            className={cx(\"indicator-sources\", {\n                \"indicator-sources--single\": uniqueSources.length === 1,\n            })}\n        >\n            {uniqueSources.map((source: DisplaySource, idx: number) => {\n                const isStacked = idx !== uniqueSources.length - 1\n                const content = (\n                    <SourceContent\n                        source={source}\n                        isEmbeddedInADataPage={isEmbeddedInADataPage}\n                    />\n                )\n                const useExpandableToggle =\n                    source.description || source.citation\n                return useExpandableToggle ? (\n                    <ExpandableToggle\n                        key={source.label}\n                        label={source.label}\n                        content={content}\n                        isStacked={isStacked}\n                        hasTeaser\n                    />\n                ) : (\n                    <NonExpandable\n                        key={source.label}\n                        label={source.label}\n                        isStacked={isStacked}\n                        content={content}\n                    />\n                )\n            })}\n        </div>\n    )\n}\n\nconst NonExpandable = (props: {\n    label: string\n    content: React.ReactNode\n    isStacked?: boolean\n}) => {\n    return (\n        <div\n            className={cx(\"NonExpandable\", {\n                \"NonExpandable--stacked\": props.isStacked,\n            })}\n        >\n            <h4 className=\"NonExpandable__title\">{props.label}</h4>\n            <div className=\"NonExpandable__content\">{props.content}</div>\n        </div>\n    )\n}\n\nconst SourceContent = (props: {\n    source: DisplaySource\n    isEmbeddedInADataPage: boolean\n}) => {\n    const { source } = props\n    const retrievedOn = formatSourceDate(source.retrievedOn, \"MMMM D, YYYY\")\n    const showKeyInfo =\n        source.dataPublishedBy ||\n        retrievedOn ||\n        (source.retrievedFrom && source.retrievedFrom.length > 0) ||\n        source.citation\n    return (\n        <div className=\"source\">\n            {source.description && (\n                <div className=\"description\">\n                    <SimpleMarkdownText text={source.description.trim()} />\n                </div>\n            )}\n            {showKeyInfo && (\n                <div className=\"source-key-data-blocks\">\n                    {source.dataPublishedBy && (\n                        <div className=\"source-key-data source-key-data--span-2\">\n                            <div className=\"source-key-data__title\">\n                                Data published by\n                            </div>\n                            <div className=\"source-key-data__content\">\n                                <SimpleMarkdownText\n                                    text={source.dataPublishedBy.trim()}\n                                />\n                            </div>\n                        </div>\n                    )}\n                    {retrievedOn && (\n                        <div\n                            className={cx(\"source-key-data\", {\n                                \"source-key-data--span-2\":\n                                    !source.retrievedFrom ||\n                                    source.retrievedFrom.length === 0,\n                            })}\n                        >\n                            <div className=\"source-key-data__title\">\n                                Retrieved on\n                            </div>\n                            <div className=\"source-key-data__content\">\n                                {retrievedOn}\n                            </div>\n                        </div>\n                    )}\n                    {source.retrievedFrom &&\n                        source.retrievedFrom.length > 0 && (\n                            <div\n                                className={cx(\"source-key-data\", {\n                                    \"source-key-data--span-2\": !retrievedOn,\n                                })}\n                            >\n                                <div className=\"source-key-data__title\">\n                                    Retrieved from\n                                </div>\n                                <div className=\"source-key-data__content\">\n                                    {makeLinks({ link: source.retrievedFrom })}\n                                </div>\n                            </div>\n                        )}\n                    {source.citation && (\n                        <div className=\"source-key-data source-key-data-citation source-key-data--span-2\">\n                            <div className=\"source-key-data__title\">\n                                Citation\n                            </div>\n                            <div className=\"source-key-data__content\">\n                                This is the citation of the original data\n                                obtained from the source, prior to any\n                                processing or adaptation by Our World in Data.{\" \"}\n                                {props.isEmbeddedInADataPage && (\n                                    <>\n                                        To cite data downloaded from this page,\n                                        please use the suggested citation given\n                                        in{\" \"}\n                                        <a\n                                            href={`#${REUSE_THIS_WORK_SECTION_ID}`}\n                                        >\n                                            Reuse This Work\n                                        </a>{\" \"}\n                                        below.\n                                    </>\n                                )}\n                                <CodeSnippet\n                                    code={source.citation.trim()}\n                                    theme=\"light\"\n                                    useMarkdown={true}\n                                />\n                            </div>\n                        </div>\n                    )}\n                </div>\n            )}\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport { forwardRef } from \"react\"\nimport cx from \"classnames\"\n\nexport type TextInputProps = React.InputHTMLAttributes<HTMLInputElement> & {\n    className?: string\n}\n\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n    function TextInput({ className, ...props }: TextInputProps, ref) {\n        return (\n            <input\n                className={cx(\"text-input\", className)}\n                ref={ref}\n                {...props}\n            />\n        )\n    }\n)\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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 Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n  if (31 === fiber.tag) {\n    var activityState = fiber.memoizedState;\n    null === activityState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (activityState = fiber.memoizedState));\n    if (null !== activityState) return activityState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return type.displayName || \"Context\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$1) {\n                control = x$1;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$2) {\n              control = x$2;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return fiber.child !== childFiber && null !== childFiber\n        ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n        : describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\",\n      previous = null;\n    do\n      (info += describeFiber(workInProgress, previous)),\n        (previous = workInProgress),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n  nextTransitionDeferredLane = 262144,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n      return lanes & 261888;\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 3932160;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$7 = 31 - clz32(remainingLanes),\n      lane = 1 << index$7;\n    entanglements[index$7] = 0;\n    expirationTimes[index$7] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$7];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$7] = null, index$7 = 0;\n        index$7 < hiddenUpdatesForLane.length;\n        index$7++\n      ) {\n        var update = hiddenUpdatesForLane[index$7];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$8 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$8;\n    (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n      (root[index$8] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n  var renderLane = renderLanes & -renderLanes;\n  renderLane =\n    0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n  return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n    ? 0\n    : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentHydrationBoundary(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentHydrationBoundary(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      31 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\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][: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]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$10 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n  var descriptor = Object.getOwnPropertyDescriptor(\n    node.constructor.prototype,\n    valueField\n  );\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  if (!node._valueTracker) {\n    var valueField = isCheckable(node) ? \"checked\" : \"value\";\n    node._valueTracker = trackValueOnNode(\n      node,\n      valueField,\n      \"\" + node[valueField]\n    );\n  }\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    ) {\n      track(element);\n      return;\n    }\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n  track(element);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n  track(element);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"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 scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$286;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_427 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_427) {\n      var element$jscomp$inline_428 = document.createElement(\"div\");\n      element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_427 =\n        \"function\" === typeof element$jscomp$inline_428.oninput;\n    }\n    JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n  } else JSCompiler_inline_result$jscomp$286 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$286 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle 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(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 65011712;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 65011714;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n  var fiber = createFiberImplClass(18, null, null, 0);\n  fiber.stateNode = dehydratedNode;\n  return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextId = suspendedContext.id;\n  treeContextOverflow = suspendedContext.overflow;\n  treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(\n    formatProdErrorMessage(\n      418,\n      1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n        ? \"text\"\n        : \"HTML\",\n      \"\"\n    )\n  );\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 31:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else if (31 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  globalMostRecentTransitionTime = now();\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nfunction resolveLazy(lazyType) {\n  try {\n    var init = lazyType._init;\n    return init(lazyType._payload);\n  } catch (x) {\n    if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n      throw ((suspendedThenable = x), SuspenseException);\n    throw x;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n  thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            createChild(returnFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateFromMap(\n              existingChildren,\n              returnFiber,\n              newIdx,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter$1 = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState$1 = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, fiber);\n  null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  22 === fiber.tag\n    ? (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary && (shellBoundary = fiber))\n    : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          isSuspenseInstancePending(state) ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (\n      19 === node.tag &&\n      (\"forwards\" === node.memoizedProps.revealOrder ||\n        \"backwards\" === node.memoizedProps.revealOrder ||\n        \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n        \"together\" === node.memoizedProps.revealOrder)\n    ) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter = 0,\n  thenableState = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter = 0;\n  thenableState = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n    thenableIndexCounter = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter = localIdCounter = 0;\n  thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  thenable = trackUsedThenable(thenableState, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$60 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                gesture: null,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$60 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$60 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            gesture: null,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          gesture: update.gesture,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$60 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n    subscribe\n  ]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 127) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n        (ReactSharedInternals.T = prevTransition);\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$66) {\n      onActionError(actionQueue, node, error$66);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n  tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((deps = create.next),\n      (create.next = tag),\n      (tag.next = deps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = mountWorkInProgressHook();\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    { destroy: void 0 },\n    create,\n    void 0 === deps ? null : deps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, deps) {\n  mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n  updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n  currentlyRenderingFiber.flags |= 4;\n  var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n  if (null === componentUpdateQueue)\n    (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n      (componentUpdateQueue.events = [payload]);\n  else {\n    var events = componentUpdateQueue.events;\n    null === events\n      ? (componentUpdateQueue.events = [payload])\n      : events.push(payload);\n  }\n}\nfunction updateEvent(callback) {\n  var ref = updateWorkInProgressHook().memoizedState;\n  useEffectEventImpl({ ref: ref, nextImpl: callback });\n  return function () {\n    if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n    return ref.impl.apply(void 0, arguments);\n  };\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (\n    void 0 === initialValue ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (\n    0 === (renderLanes & 42) ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var stateHook = ensureFormComponentIsStateful(formFiber);\n  null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n  dispatchSetStateInternal(\n    formFiber,\n    stateHook.next.queue,\n    {},\n    requestUpdateLane()\n  );\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$69 = enqueueUpdate(provider, fiber, lane);\n        null !== root$69 &&\n          (scheduleUpdateOnFiber(root$69, provider, lane),\n          entangleTransitions(root$69, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n  readContext: readContext,\n  use: use,\n  useCallback: throwInvalidHookError,\n  useContext: throwInvalidHookError,\n  useEffect: throwInvalidHookError,\n  useImperativeHandle: throwInvalidHookError,\n  useLayoutEffect: throwInvalidHookError,\n  useInsertionEffect: throwInvalidHookError,\n  useMemo: throwInvalidHookError,\n  useReducer: throwInvalidHookError,\n  useRef: throwInvalidHookError,\n  useState: throwInvalidHookError,\n  useDebugValue: throwInvalidHookError,\n  useDeferredValue: throwInvalidHookError,\n  useTransition: throwInvalidHookError,\n  useSyncExternalStore: throwInvalidHookError,\n  useId: throwInvalidHookError,\n  useHostTransitionStatus: throwInvalidHookError,\n  useFormState: throwInvalidHookError,\n  useActionState: throwInvalidHookError,\n  useOptimistic: throwInvalidHookError,\n  useMemoCache: throwInvalidHookError,\n  useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 127) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        { destroy: void 0 },\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"_\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"_\" +\n            identifierPrefix +\n            \"r_\" +\n            JSCompiler_inline_result.toString(32) +\n            \"_\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    },\n    useEffectEvent: function (callback) {\n      var hook = mountWorkInProgressHook(),\n        ref = { impl: callback };\n      hook.memoizedState = ref;\n      return function () {\n        if (0 !== (executionContext & 2))\n          throw Error(formatProdErrorMessage(440));\n        return ref.impl.apply(void 0, arguments);\n      };\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n  readContext: readContext,\n  use: use,\n  useCallback: updateCallback,\n  useContext: readContext,\n  useEffect: updateEffect,\n  useImperativeHandle: updateImperativeHandle,\n  useInsertionEffect: updateInsertionEffect,\n  useLayoutEffect: updateLayoutEffect,\n  useMemo: updateMemo,\n  useReducer: rerenderReducer,\n  useRef: updateRef,\n  useState: function () {\n    return rerenderReducer(basicStateReducer);\n  },\n  useDebugValue: mountDebugValue,\n  useDeferredValue: function (value, initialValue) {\n    var hook = updateWorkInProgressHook();\n    return null === currentHook\n      ? mountDeferredValueImpl(hook, value, initialValue)\n      : updateDeferredValueImpl(\n          hook,\n          currentHook.memoizedState,\n          value,\n          initialValue\n        );\n  },\n  useTransition: function () {\n    var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n      start = updateWorkInProgressHook().memoizedState;\n    return [\n      \"boolean\" === typeof booleanOrThenable\n        ? booleanOrThenable\n        : useThenable(booleanOrThenable),\n      start\n    ];\n  },\n  useSyncExternalStore: updateSyncExternalStore,\n  useId: updateId,\n  useHostTransitionStatus: useHostTransitionStatus,\n  useFormState: rerenderActionState,\n  useActionState: rerenderActionState,\n  useOptimistic: function (passthrough, reducer) {\n    var hook = updateWorkInProgressHook();\n    if (null !== currentHook)\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    hook.baseState = passthrough;\n    return [passthrough, hook.queue.dispatch];\n  },\n  useMemoCache: useMemoCache,\n  useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\n  }\n  return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$74) {\n    setTimeout(function () {\n      throw e$74;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$75) {\n    setTimeout(function () {\n      throw e$75;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 31:\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(\n  current,\n  workInProgress,\n  renderLanes,\n  nextProps\n) {\n  var nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  null === current &&\n    null === workInProgress.stateNode &&\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      prevState =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextProps = workInProgress.child = current.child;\n        for (nextChildren = 0; null !== nextProps; )\n          (nextChildren =\n            nextChildren | nextProps.lanes | nextProps.childLanes),\n            (nextProps = nextProps.sibling);\n        nextProps = nextChildren & ~prevState;\n      } else (nextProps = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        prevState,\n        renderLanes,\n        nextProps\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (nextProps = workInProgress.lanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes,\n          nextProps\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n  (null !== current && 22 === current.tag) ||\n    null !== workInProgress.stateNode ||\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes,\n  remainingChildLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  workInProgress.childLanes = remainingChildLanes;\n  return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n  nextProps = mountWorkInProgressOffscreenFiber(\n    { mode: nextProps.mode, children: nextProps.children },\n    workInProgress.mode\n  );\n  nextProps.ref = workInProgress.ref;\n  workInProgress.child = nextProps;\n  nextProps.return = workInProgress;\n  return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n  current.flags |= 2;\n  popSuspenseHandler(workInProgress);\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    didSuspend = 0 !== (workInProgress.flags & 128);\n  workInProgress.flags &= -129;\n  if (null === current) {\n    if (isHydrating) {\n      if (\"hidden\" === nextProps.mode)\n        return (\n          (current = mountActivityChildren(workInProgress, nextProps)),\n          (workInProgress.lanes = 536870912),\n          bailoutOffscreenComponent(null, current)\n        );\n      pushDehydratedActivitySuspenseHandler(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" === current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      workInProgress.lanes = 536870912;\n      return null;\n    }\n    return mountActivityChildren(workInProgress, nextProps);\n  }\n  var prevState = current.memoizedState;\n  if (null !== prevState) {\n    var dehydrated = prevState.dehydrated;\n    pushDehydratedActivitySuspenseHandler(workInProgress);\n    if (didSuspend)\n      if (workInProgress.flags & 256)\n        (workInProgress.flags &= -257),\n          (workInProgress = retryActivityComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          ));\n      else if (null !== workInProgress.memoizedState)\n        (workInProgress.child = current.child),\n          (workInProgress.flags |= 128),\n          (workInProgress = null);\n      else throw Error(formatProdErrorMessage(558));\n    else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (didSuspend = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || didSuspend)\n    ) {\n      nextProps = workInProgressRoot;\n      if (\n        null !== nextProps &&\n        ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n        0 !== dehydrated && dehydrated !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = dehydrated),\n          enqueueConcurrentRenderForLane(current, dehydrated),\n          scheduleUpdateOnFiber(nextProps, current, dehydrated),\n          SelectiveHydrationException)\n        );\n      renderDidSuspendDelayIfPossible();\n      workInProgress = retryActivityComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      (current = prevState.treeContext),\n        (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n        (hydrationParentFiber = workInProgress),\n        (isHydrating = !0),\n        (hydrationErrors = null),\n        (rootOrSingletonContext = !1),\n        null !== current &&\n          restoreSuspendedTreeContext(workInProgress, current),\n        (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n        (workInProgress.flags |= 4096);\n    return workInProgress;\n  }\n  current = createWorkInProgress(current.child, {\n    mode: nextProps.mode,\n    children: nextProps.children\n  });\n  current.ref = workInProgress.ref;\n  workInProgress.child = current;\n  current.return = workInProgress;\n  return current;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" !== current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      isSuspenseInstanceFallback(current)\n        ? (workInProgress.lanes = 32)\n        : (workInProgress.lanes = 536870912);\n      return null;\n    }\n    var nextPrimaryChildren = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextPrimaryChildren },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextPrimaryChildren.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextPrimaryChildren.sibling = nextProps),\n        (workInProgress.child = nextPrimaryChildren),\n        (nextProps = workInProgress.child),\n        (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        bailoutOffscreenComponent(null, nextProps)\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n  }\n  var prevState = current.memoizedState;\n  if (\n    null !== prevState &&\n    ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (nextPrimaryChildren = nextProps.fallback),\n            (showFallback = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              showFallback\n            )),\n            (nextPrimaryChildren = createFiberFromFragment(\n              nextPrimaryChildren,\n              showFallback,\n              renderLanes,\n              null\n            )),\n            (nextPrimaryChildren.flags |= 2),\n            (nextProps.return = workInProgress),\n            (nextPrimaryChildren.return = workInProgress),\n            (nextProps.sibling = nextPrimaryChildren),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextPrimaryChildren))\n    ) {\n      JSCompiler_temp =\n        nextPrimaryChildren.nextSibling &&\n        nextPrimaryChildren.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n        0 !== nextProps && nextProps !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      isSuspenseInstancePending(nextPrimaryChildren) ||\n        renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      isSuspenseInstancePending(nextPrimaryChildren)\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = prevState.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextPrimaryChildren.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            restoreSuspendedTreeContext(workInProgress, current),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (nextPrimaryChildren = nextProps.fallback),\n      (showFallback = workInProgress.mode),\n      (prevState = current.child),\n      (digest = prevState.sibling),\n      (nextProps = createWorkInProgress(prevState, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n      null !== digest\n        ? (nextPrimaryChildren = createWorkInProgress(\n            digest,\n            nextPrimaryChildren\n          ))\n        : ((nextPrimaryChildren = createFiberFromFragment(\n            nextPrimaryChildren,\n            showFallback,\n            renderLanes,\n            null\n          )),\n          (nextPrimaryChildren.flags |= 2)),\n      (nextPrimaryChildren.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = nextPrimaryChildren),\n      (workInProgress.child = nextProps),\n      bailoutOffscreenComponent(null, nextProps),\n      (nextProps = workInProgress.child),\n      (nextPrimaryChildren = current.child.memoizedState),\n      null === nextPrimaryChildren\n        ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n        : ((showFallback = nextPrimaryChildren.cachePool),\n          null !== showFallback\n            ? ((prevState = CacheContext._currentValue),\n              (showFallback =\n                showFallback.parent !== prevState\n                  ? { parent: prevState, pool: prevState }\n                  : showFallback))\n            : (showFallback = getSuspendedCache()),\n          (nextPrimaryChildren = {\n            baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n            cachePool: showFallback\n          })),\n      (nextProps.memoizedState = nextPrimaryChildren),\n      (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      bailoutOffscreenComponent(current.child, nextProps)\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode,\n  treeForkCount\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode,\n        treeForkCount: treeForkCount\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode),\n      (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  nextProps = nextProps.children;\n  var suspenseContext = suspenseStackCursor.current,\n    shouldForceFallback = 0 !== (suspenseContext & 2);\n  shouldForceFallback\n    ? ((suspenseContext = (suspenseContext & 1) | 2),\n      (workInProgress.flags |= 128))\n    : (suspenseContext &= 1);\n  push(suspenseStackCursor, suspenseContext);\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  nextProps = isHydrating ? treeForkCount : 0;\n  if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n    a: for (current = workInProgress.child; null !== current; ) {\n      if (13 === current.tag)\n        null !== current.memoizedState &&\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (19 === current.tag)\n        scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (null !== current.child) {\n        current.child.return = current;\n        current = current.child;\n        continue;\n      }\n      if (current === workInProgress) break a;\n      for (; null === current.sibling; ) {\n        if (null === current.return || current.return === workInProgress)\n          break a;\n        current = current.return;\n      }\n      current.sibling.return = current.return;\n      current = current.sibling;\n    }\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"backwards\":\n    case \"unstable_legacy-backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        null,\n        null,\n        void 0,\n        nextProps\n      );\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 31:\n      if (null !== workInProgress.memoizedState)\n        return (\n          (workInProgress.flags |= 128),\n          pushDehydratedActivitySuspenseHandler(workInProgress),\n          null\n        );\n      break;\n    case 13:\n      var state$102 = workInProgress.memoizedState;\n      if (null !== state$102) {\n        if (null !== state$102.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n      state$102 ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state$102)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state$102) break;\n      else return null;\n    case 22:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(\n          current,\n          workInProgress,\n          renderLanes,\n          workInProgress.pendingProps\n        )\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        var props = workInProgress.pendingProps;\n        current = resolveLazy(workInProgress.elementType);\n        workInProgress.type = current;\n        if (\"function\" === typeof current)\n          shouldConstruct(current)\n            ? ((props = resolveClassComponentProps(current, props)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== current && null !== current) {\n            var $$typeof = current.$$typeof;\n            if ($$typeof === REACT_FORWARD_REF_TYPE) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            } else if ($$typeof === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            }\n          }\n          workInProgress = getComponentNameFromType(current) || current;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (props = workInProgress.type),\n        ($$typeof = resolveClassComponentProps(\n          props,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          props,\n          $$typeof,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        props = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        $$typeof = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, props, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        props = nextState.cache;\n        pushProvider(workInProgress, CacheContext, props);\n        props !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        props = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: props,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else if (props !== $$typeof) {\n            $$typeof = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError($$typeof);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (props === $$typeof) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(current, workInProgress, props, renderLanes);\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (props = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (props[internalInstanceKey] = workInProgress),\n              (props[internalPropsKey] = current),\n              setInitialProperties(props, renderLanes, current),\n              markNodeAsHoistable(props),\n              (workInProgress.stateNode = props))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((props = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          ($$typeof = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n              (nextHydratableInstance = getNextHydratable(props.firstChild)))\n            : (nextHydratableInstance = $$typeof)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if (($$typeof = props = nextHydratableInstance))\n          (props = canHydrateInstance(\n            props,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== props\n              ? ((workInProgress.stateNode = props),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(props.firstChild)),\n                (rootOrSingletonContext = !1),\n                ($$typeof = !0))\n              : ($$typeof = !1);\n        $$typeof || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      $$typeof = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      props = prevState.children;\n      shouldSetTextContent($$typeof, prevState)\n        ? (props = null)\n        : null !== nextState &&\n          shouldSetTextContent($$typeof, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        (($$typeof = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = $$typeof));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, props, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (props = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            ))\n          : reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (props = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, props.value),\n        reconcileChildren(current, workInProgress, props.children, renderLanes),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        ($$typeof = workInProgress.type._context),\n        (props = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        ($$typeof = readContext($$typeof)),\n        (props = props($$typeof)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return updateActivityComponent(current, workInProgress, renderLanes);\n    case 22:\n      return updateOffscreenComponent(\n        current,\n        workInProgress,\n        renderLanes,\n        workInProgress.pendingProps\n      );\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (props = readContext(CacheContext)),\n        null === current\n          ? (($$typeof = peekCacheFromPool()),\n            null === $$typeof &&\n              (($$typeof = workInProgressRoot),\n              (prevState = createCache()),\n              ($$typeof.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n              ($$typeof = prevState)),\n            (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, $$typeof))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            ($$typeof = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            $$typeof.parent !== props\n              ? (($$typeof = { parent: props, cache: props }),\n                (workInProgress.memoizedState = $$typeof),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      $$typeof),\n                pushProvider(workInProgress, CacheContext, props))\n              : ((props = prevState.cache),\n                pushProvider(workInProgress, CacheContext, props),\n                props !== $$typeof.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n  workInProgress,\n  type,\n  oldProps,\n  newProps,\n  renderLanes\n) {\n  if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n  if (type) {\n    if (\n      ((workInProgress.flags |= 16777216),\n      (renderLanes & 335544128) === renderLanes)\n    )\n      if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n      else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n      else\n        throw (\n          ((suspendedThenable = noopSuspenseyCommitThenable),\n          SuspenseyCommitException)\n        );\n  } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n    if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n    else\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$106 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$106\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$106.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags & 65011712),\n        (subtreeFlags |= child$107.flags & 65011712),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  else\n    for (child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags),\n        (subtreeFlags |= child$107.flags),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      var type = workInProgress.type,\n        nextResource = workInProgress.memoizedState;\n      null === current\n        ? (markUpdate(workInProgress),\n          null !== nextResource\n            ? (bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              preloadInstanceAndSuspendIfNeeded(\n                workInProgress,\n                type,\n                null,\n                newProps,\n                renderLanes\n              )))\n        : nextResource\n          ? nextResource !== current.memoizedState\n            ? (markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217))\n          : ((current = current.memoizedProps),\n            current !== newProps && markUpdate(workInProgress),\n            bubbleProperties(workInProgress),\n            preloadInstanceAndSuspendIfNeeded(\n              workInProgress,\n              type,\n              current,\n              newProps,\n              renderLanes\n            ));\n      return null;\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        nextResource = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, nextResource);\n        else {\n          var ownerDocument = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (nextResource) {\n            case 1:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                type\n              );\n              break;\n            case 2:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                type\n              );\n              break;\n            default:\n              switch (type) {\n                case \"svg\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    type\n                  );\n                  break;\n                case \"math\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    type\n                  );\n                  break;\n                case \"script\":\n                  nextResource = ownerDocument.createElement(\"div\");\n                  nextResource.innerHTML = \"<script>\\x3c/script>\";\n                  nextResource = nextResource.removeChild(\n                    nextResource.firstChild\n                  );\n                  break;\n                case \"select\":\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(\"select\", {\n                          is: newProps.is\n                        })\n                      : ownerDocument.createElement(\"select\");\n                  newProps.multiple\n                    ? (nextResource.multiple = !0)\n                    : newProps.size && (nextResource.size = newProps.size);\n                  break;\n                default:\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(type, { is: newProps.is })\n                      : ownerDocument.createElement(type);\n              }\n          }\n          nextResource[internalInstanceKey] = workInProgress;\n          nextResource[internalPropsKey] = newProps;\n          a: for (\n            ownerDocument = workInProgress.child;\n            null !== ownerDocument;\n\n          ) {\n            if (5 === ownerDocument.tag || 6 === ownerDocument.tag)\n              nextResource.appendChild(ownerDocument.stateNode);\n            else if (\n              4 !== ownerDocument.tag &&\n              27 !== ownerDocument.tag &&\n              null !== ownerDocument.child\n            ) {\n              ownerDocument.child.return = ownerDocument;\n              ownerDocument = ownerDocument.child;\n              continue;\n            }\n            if (ownerDocument === workInProgress) break a;\n            for (; null === ownerDocument.sibling; ) {\n              if (\n                null === ownerDocument.return ||\n                ownerDocument.return === workInProgress\n              )\n                break a;\n              ownerDocument = ownerDocument.return;\n            }\n            ownerDocument.sibling.return = ownerDocument.return;\n            ownerDocument = ownerDocument.sibling;\n          }\n          workInProgress.stateNode = nextResource;\n          a: switch (\n            (setInitialProperties(nextResource, type, newProps), type)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              newProps = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              newProps = !0;\n              break a;\n            default:\n              newProps = !1;\n          }\n          newProps && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      preloadInstanceAndSuspendIfNeeded(\n        workInProgress,\n        workInProgress.type,\n        null === current ? null : current.memoizedProps,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress, !0);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 31:\n      renderLanes = workInProgress.memoizedState;\n      if (null === current || null !== current.memoizedState) {\n        newProps = popHydrationState(workInProgress);\n        if (null !== renderLanes) {\n          if (null === current) {\n            if (!newProps) throw Error(formatProdErrorMessage(318));\n            current = workInProgress.memoizedState;\n            current = null !== current ? current.dehydrated : null;\n            if (!current) throw Error(formatProdErrorMessage(557));\n            current[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          current = !1;\n        } else\n          (renderLanes = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = renderLanes),\n            (current = !0);\n        if (!current) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n        if (0 !== (workInProgress.flags & 128))\n          throw Error(formatProdErrorMessage(558));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      renderLanes &&\n        ((newProps = workInProgress.child),\n        (type = null),\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool),\n        (nextResource = null),\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (nextResource = newProps.memoizedState.cachePool.pool),\n        nextResource !== type && (newProps.flags |= 2048));\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      newProps = workInProgress.memoizedState;\n      if (null === newProps) return bubbleProperties(workInProgress), null;\n      type = 0 !== (workInProgress.flags & 128);\n      nextResource = newProps.rendering;\n      if (null === nextResource)\n        if (type) cutOffTailIfNeeded(newProps, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              nextResource = findFirstSuspended(current);\n              if (null !== nextResource) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(newProps, !1);\n                current = nextResource.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                isHydrating &&\n                  pushTreeFork(workInProgress, newProps.treeForkCount);\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== newProps.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (type = !0),\n            cutOffTailIfNeeded(newProps, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!type)\n          if (\n            ((current = findFirstSuspended(nextResource)), null !== current)\n          ) {\n            if (\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(newProps, !0),\n              null === newProps.tail &&\n                \"hidden\" === newProps.tailMode &&\n                !nextResource.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - newProps.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              cutOffTailIfNeeded(newProps, !1),\n              (workInProgress.lanes = 4194304));\n        newProps.isBackwards\n          ? ((nextResource.sibling = workInProgress.child),\n            (workInProgress.child = nextResource))\n          : ((current = newProps.last),\n            null !== current\n              ? (current.sibling = nextResource)\n              : (workInProgress.child = nextResource),\n            (newProps.last = nextResource));\n      }\n      if (null !== newProps.tail)\n        return (\n          (current = newProps.tail),\n          (newProps.rendering = current),\n          (newProps.tail = current.sibling),\n          (newProps.renderingStartTime = now()),\n          (current.sibling = null),\n          (renderLanes = suspenseStackCursor.current),\n          push(\n            suspenseStackCursor,\n            type ? (renderLanes & 1) | 2 : renderLanes & 1\n          ),\n          isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount),\n          current\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 31:\n      if (null !== workInProgress.memoizedState) {\n        popSuspenseHandler(workInProgress);\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 31:\n      null !== interruptedWork.memoizedState &&\n        popSuspenseHandler(interruptedWork);\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$140) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$140);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            if (\n              0 !== (root & 4) &&\n              ((root = firstChild.updateQueue),\n              (root = null !== root ? root.events : null),\n              null !== root)\n            )\n              for (\n                JSCompiler_temp = 0;\n                JSCompiler_temp < root.length;\n                JSCompiler_temp++\n              )\n                (anchorOffset = root[JSCompiler_temp]),\n                  (anchorOffset.ref.impl = anchorOffset.nextImpl);\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$139) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$139\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearHydrationBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n  ) {\n    finishedRoot = finishedRoot.dehydrated;\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 31:\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    if (!retryCache.has(wakeable)) {\n      retryCache.add(wakeable);\n      var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n      wakeable.then(retry, retry);\n    }\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13886)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (18 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                var instance = wasHidden.stateNode;\n                hoistableRoot\n                  ? hideOrUnhideDehydratedBoundary(instance, !0)\n                  : hideOrUnhideDehydratedBoundary(wasHidden.stateNode, !1);\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$141 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$141, \"\"), (hostParentFiber.flags &= -33));\n          var before$142 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$142, parent$141);\n          break;\n        case 3:\n        case 4:\n          var parent$143 = hostParentFiber.stateNode.containerInfo,\n            before$144 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$144,\n            parent$143\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 31:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 31:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256) || !1\n            ));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects &&\n    (0 !== (parentFiber.subtreeFlags & 10256) || !1);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(\n  parentFiber,\n  committedLanes,\n  suspendedState\n) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(\n        parentFiber,\n        committedLanes,\n        suspendedState\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(\n  fiber,\n  committedLanes,\n  suspendedState\n) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          suspendedState,\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    },\n    cacheSignal: function () {\n      return readContext(CacheContext).controller.signal;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  globalMostRecentTransitionTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  return 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes\n    ? workInProgressRootRenderLanes & -workInProgressRootRenderLanes\n    : null !== ReactSharedInternals.T\n      ? requestTransitionLane()\n      : resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  if (0 === workInProgressDeferredLane)\n    if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) {\n      var lane = nextTransitionDeferredLane;\n      nextTransitionDeferredLane <<= 1;\n      0 === (nextTransitionDeferredLane & 3932160) &&\n        (nextTransitionDeferredLane = 262144);\n      workInProgressDeferredLane = lane;\n    } else workInProgressDeferredLane = 536870912;\n  lane = suspenseHandlerStackCursor.current;\n  null !== lane && (lane.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 127) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes) break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          pendingEffectsLanes = lanes;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              \"Throttled\",\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          null,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  ) {\n    suspendedCommitReason = {\n      stylesheets: null,\n      count: 0,\n      imgCount: 0,\n      imgBytes: 0,\n      suspenseyImages: [],\n      waitingForImages: !0,\n      waitingForViewTransition: !1,\n      unsuspend: noop$1\n    };\n    accumulateSuspenseyCommitOnFiber(\n      finishedWork,\n      lanes,\n      suspendedCommitReason\n    );\n    var timeoutOffset =\n      (lanes & 62914560) === lanes\n        ? globalMostRecentFallbackTime - now()\n        : (lanes & 4194048) === lanes\n          ? globalMostRecentTransitionTime - now()\n          : 0;\n    timeoutOffset = waitForCommitToBeReady(\n      suspendedCommitReason,\n      timeoutOffset\n    );\n    if (null !== timeoutOffset) {\n      pendingEffectsLanes = lanes;\n      root.cancelPendingCommit = timeoutOffset(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          suspendedCommitReason,\n          null,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$6 = 31 - clz32(lanes),\n      lane = 1 << index$6;\n    didAttemptEntireTree[index$6] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState$1 = null),\n        (thenableIndexCounter$1 = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  pendingEffectsLanes = 0;\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$4 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$4;\n      lanes |= root[index$4];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction shouldRemainOnPreviousScreen() {\n  var handler = suspenseHandlerStackCursor.current;\n  return null === handler\n    ? !0\n    : (workInProgressRootRenderLanes & 4194048) ===\n        workInProgressRootRenderLanes\n      ? null === shellBoundary\n        ? !0\n        : !1\n      : (workInProgressRootRenderLanes & 62914560) ===\n            workInProgressRootRenderLanes ||\n          0 !== (workInProgressRootRenderLanes & 536870912)\n        ? handler === shellBoundary\n        : !1;\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$165) {\n      handleThrow(root, thrownValue$165);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (\n                  resource\n                    ? preloadResource(resource)\n                    : hostFiber.stateNode.complete\n                ) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$167) {\n      handleThrow(root, thrownValue$167);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState$1 = null;\n  thenableIndexCounter$1 = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? ((root.callbackNode = null),\n        (root.callbackPriority = 0),\n        scheduleCallback$1(NormalPriority$1, function () {\n          flushPassiveEffects();\n          return null;\n        }))\n      : ((root.callbackNode = null), (root.callbackPriority = 0));\n    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      remainingLanes = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 261930) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects() {\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects();\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 31:\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$170 = firstScheduledRoot; null !== root$170; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$170.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$170.suspendedLanes,\n                pingedLanes = root$170.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$170,\n                root$170 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$170.cancelPendingCommit ||\n                  -1 !== root$170.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$170, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n        root$170 = root$170.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    shouldAttemptEagerTransition() &&\n    (syncTransitionLanes = currentEventTransitionLane);\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||\n    flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n  0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$5 = 31 - clz32(lanes),\n      lane = 1 << index$5,\n      expirationTime = expirationTimes[index$5];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects() && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  if (0 === currentEventTransitionLane) {\n    var actionScopeLane = currentEntangledLane;\n    0 === actionScopeLane &&\n      ((actionScopeLane = nextTransitionUpdateLane),\n      (nextTransitionUpdateLane <<= 1),\n      0 === (nextTransitionUpdateLane & 261888) &&\n        (nextTransitionUpdateLane = 256));\n    currentEventTransitionLane = actionScopeLane;\n  }\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1577 = 0;\n  i$jscomp$inline_1577 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1577++\n) {\n  var eventName$jscomp$inline_1578 =\n      simpleEventPluginEvents[i$jscomp$inline_1577],\n    domEventName$jscomp$inline_1579 =\n      eventName$jscomp$inline_1578.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1580 =\n      eventName$jscomp$inline_1578[0].toUpperCase() +\n      eventName$jscomp$inline_1578.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1579,\n    \"on\" + capitalizedEvent$jscomp$inline_1580\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"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(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = getParent;\n                reactEventName = SyntheticEventCtor;\n                instance = reactEventType;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = inCapturePhase(_instance)\n                )\n                  lastHostComponent++;\n                _instance = 0;\n                for (var tempB = instance; tempB; tempB = inCapturePhase(tempB))\n                  _instance++;\n                for (; 0 < lastHostComponent - _instance; )\n                  (reactEventName = inCapturePhase(reactEventName)),\n                    lastHostComponent--;\n                for (; 0 < _instance - lastHostComponent; )\n                  (instance = inCapturePhase(instance)), _instance--;\n                for (; lastHostComponent--; ) {\n                  if (\n                    reactEventName === instance ||\n                    (null !== instance && reactEventName === instance.alternate)\n                  ) {\n                    inCapturePhase = reactEventName;\n                    break b;\n                  }\n                  reactEventName = inCapturePhase(reactEventName);\n                  instance = inCapturePhase(instance);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$184 = props[hasSrc];\n          if (null != propValue$184)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$184;\n                break;\n              case \"type\":\n                propValue = propValue$184;\n                break;\n              case \"checked\":\n                checked = propValue$184;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$184;\n                break;\n              case \"value\":\n                propKey = propValue$184;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$184;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$184)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$184, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$184 in props)\n          props.hasOwnProperty(propValue$184) &&\n            ((hasSrc = props[propValue$184]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$184,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$201 in nextProps) {\n        var propKey = nextProps[propKey$201];\n        lastProp = lastProps[propKey$201];\n        if (\n          nextProps.hasOwnProperty(propKey$201) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$201) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$201,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$201 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$201 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$201\n        ? updateOptions(domElement, !!lastProps, propKey$201, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$201 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$201 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$201, propKey);\n      return;\n    case \"option\":\n      for (var propKey$217 in lastProps)\n        if (\n          ((propKey$201 = lastProps[propKey$217]),\n          lastProps.hasOwnProperty(propKey$217) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$217))\n        )\n          switch (propKey$217) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$217,\n                null,\n                nextProps,\n                propKey$201\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$201 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$201 &&\n                \"function\" !== typeof propKey$201 &&\n                \"symbol\" !== typeof propKey$201;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$222 in lastProps)\n        (propKey$201 = lastProps[propKey$222]),\n          lastProps.hasOwnProperty(propKey$222) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$222) &&\n            setProp(domElement, tag, propKey$222, null, nextProps, propKey$201);\n      for (checked in nextProps)\n        if (\n          ((propKey$201 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$201)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$227 in lastProps)\n          (propKey$201 = lastProps[propKey$227]),\n            lastProps.hasOwnProperty(propKey$227) &&\n              void 0 !== propKey$201 &&\n              !nextProps.hasOwnProperty(propKey$227) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$227,\n                void 0,\n                nextProps,\n                propKey$201\n              );\n        for (defaultChecked in nextProps)\n          (propKey$201 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$201 === propKey ||\n              (void 0 === propKey$201 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$232 in lastProps)\n    (propKey$201 = lastProps[propKey$232]),\n      lastProps.hasOwnProperty(propKey$232) &&\n        null != propKey$201 &&\n        !nextProps.hasOwnProperty(propKey$232) &&\n        setProp(domElement, tag, propKey$232, null, nextProps, propKey$201);\n  for (lastProp in nextProps)\n    (propKey$201 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$201 === propKey ||\n        (null == propKey$201 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$201, nextProps, propKey);\n}\nfunction isLikelyStaticResource(initiatorType) {\n  switch (initiatorType) {\n    case \"css\":\n    case \"script\":\n    case \"font\":\n    case \"img\":\n    case \"image\":\n    case \"input\":\n    case \"link\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction estimateBandwidth() {\n  if (\"function\" === typeof performance.getEntriesByType) {\n    for (\n      var count = 0,\n        bits = 0,\n        resourceEntries = performance.getEntriesByType(\"resource\"),\n        i = 0;\n      i < resourceEntries.length;\n      i++\n    ) {\n      var entry = resourceEntries[i],\n        transferSize = entry.transferSize,\n        initiatorType = entry.initiatorType,\n        duration = entry.duration;\n      if (transferSize && duration && isLikelyStaticResource(initiatorType)) {\n        initiatorType = 0;\n        duration = entry.responseEnd;\n        for (i += 1; i < resourceEntries.length; i++) {\n          var overlapEntry = resourceEntries[i],\n            overlapStartTime = overlapEntry.startTime;\n          if (overlapStartTime > duration) break;\n          var overlapTransferSize = overlapEntry.transferSize,\n            overlapInitiatorType = overlapEntry.initiatorType;\n          overlapTransferSize &&\n            isLikelyStaticResource(overlapInitiatorType) &&\n            ((overlapEntry = overlapEntry.responseEnd),\n            (initiatorType +=\n              overlapTransferSize *\n              (overlapEntry < duration\n                ? 1\n                : (duration - overlapStartTime) /\n                  (overlapEntry - overlapStartTime))));\n        }\n        --i;\n        bits += (8 * (transferSize + initiatorType)) / (entry.duration / 1e3);\n        count++;\n        if (10 < count) break;\n      }\n    }\n    if (0 < count) return bits / count / 1e6;\n  }\n  return navigator.connection &&\n    ((count = navigator.connection.downlink), \"number\" === typeof count)\n    ? count\n    : 5;\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearHydrationBoundary(parentInstance, hydrationInstance) {\n  var node = hydrationInstance,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node || \"/&\" === node)) {\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(hydrationInstance);\n          return;\n        }\n        depth--;\n      } else if (\n        \"$\" === node ||\n        \"$?\" === node ||\n        \"$~\" === node ||\n        \"$!\" === node ||\n        \"&\" === node\n      )\n        depth++;\n      else if (\"html\" === node)\n        releaseSingletonInstance(parentInstance.ownerDocument.documentElement);\n      else if (\"head\" === node) {\n        node = parentInstance.ownerDocument.head;\n        releaseSingletonInstance(node);\n        for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n          var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n            nodeName = node$jscomp$0.nodeName;\n          node$jscomp$0[internalHoistableMarker] ||\n            \"SCRIPT\" === nodeName ||\n            \"STYLE\" === nodeName ||\n            (\"LINK\" === nodeName &&\n              \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n            node.removeChild(node$jscomp$0);\n          node$jscomp$0 = nextNode$jscomp$0;\n        }\n      } else\n        \"body\" === node &&\n          releaseSingletonInstance(parentInstance.ownerDocument.body);\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(hydrationInstance);\n}\nfunction hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n  var node = suspenseInstance;\n  suspenseInstance = 0;\n  do {\n    var nextNode = node.nextSibling;\n    1 === node.nodeType\n      ? isHidden\n        ? ((node._stashedDisplay = node.style.display),\n          (node.style.display = \"none\"))\n        : ((node.style.display = node._stashedDisplay || \"\"),\n          \"\" === node.getAttribute(\"style\") && node.removeAttribute(\"style\"))\n      : 3 === node.nodeType &&\n        (isHidden\n          ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n          : (node.nodeValue = node._stashedText || \"\"));\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node))\n        if (0 === suspenseInstance) break;\n        else suspenseInstance--;\n      else\n        (\"$\" !== node && \"$?\" !== node && \"$~\" !== node && \"$!\" !== node) ||\n          suspenseInstance++;\n    node = nextNode;\n  } while (node);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n  for (; 8 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n  return \"$?\" === instance.data || \"$~\" === instance.data;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"loading\" !== instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$~\" === instance.data) instance._reactRetry = callback;\n  else if (\"$?\" !== instance.data || \"loading\" !== ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"$~\" === nodeType ||\n        \"&\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType || \"/&\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) {\n  hydrationInstance = hydrationInstance.nextSibling;\n  for (var depth = 0; hydrationInstance; ) {\n    if (8 === hydrationInstance.nodeType) {\n      var data = hydrationInstance.data;\n      if (\"/$\" === data || \"/&\" === data) {\n        if (0 === depth)\n          return getNextHydratable(hydrationInstance.nextSibling);\n        depth--;\n      } else\n        (\"$\" !== data &&\n          \"$!\" !== data &&\n          \"$?\" !== data &&\n          \"$~\" !== data &&\n          \"&\" !== data) ||\n          depth++;\n    }\n    hydrationInstance = hydrationInstance.nextSibling;\n  }\n  return null;\n}\nfunction getParentHydrationBoundary(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\n        \"$\" === data ||\n        \"$!\" === data ||\n        \"$?\" === data ||\n        \"$~\" === data ||\n        \"&\" === data\n      ) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else (\"/$\" !== data && \"/&\" !== data) || depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$243 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$244 = styles$243.get(type);\n        resource$244 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$244 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$243.set(type, resource$244),\n          (styles$243 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$243._p &&\n            ((resource$244.instance = styles$243),\n            (resource$244.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$243 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$244.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$244;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$249 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$249)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$249),\n            markNodeAsHoistable(instance$249),\n            instance$249\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$249 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$249);\n        var linkInstance = instance$249;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$249, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$249, props.precedence, hoistableRoot);\n        return (resource.instance = instance$249);\n      case \"script\":\n        instance$249 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$249)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$249)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nfunction suspendResource(state, hoistableRoot, resource, props) {\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nvar estimatedBytesWithinLimit = 0;\nfunction waitForCommitToBeReady(state, timeoutOffset) {\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count || 0 < state.imgCount\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4 + timeoutOffset);\n        0 < state.imgBytes &&\n          0 === estimatedBytesWithinLimit &&\n          (estimatedBytesWithinLimit = 62500 * estimateBandwidth());\n        var imgTimer = setTimeout(\n          function () {\n            state.waitingForImages = !1;\n            if (\n              0 === state.count &&\n              (state.stylesheets &&\n                insertSuspendedStylesheets(state, state.stylesheets),\n              state.unsuspend)\n            ) {\n              var unsuspend = state.unsuspend;\n              state.unsuspend = null;\n              unsuspend();\n            }\n          },\n          (state.imgBytes > estimatedBytesWithinLimit ? 50 : 800) +\n            timeoutOffset\n        );\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n          clearTimeout(imgTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count && (0 === this.imgCount || !this.waitingForImages))\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  formState,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    onDefaultTransitionIndicator,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var lane = requestUpdateLane();\n    lane = getBumpedLaneForHydrationByLane(lane);\n    var root = enqueueConcurrentRenderForLane(fiber, lane);\n    null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n    markRetryLaneIfNotHydrated(fiber, lane);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 31:\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (31 === tag) {\n        targetNode = getActivityInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"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\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (31 === targetInst) {\n        if (\n          ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction defaultOnDefaultTransitionIndicator() {\n  function handleNavigate(event) {\n    event.canIntercept &&\n      \"react-transition\" === event.info &&\n      event.intercept({\n        handler: function () {\n          return new Promise(function (resolve) {\n            return (pendingResolve = resolve);\n          });\n        },\n        focusReset: \"manual\",\n        scroll: \"manual\"\n      });\n  }\n  function handleNavigateComplete() {\n    null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    isCancelled || setTimeout(startFakeNavigation, 20);\n  }\n  function startFakeNavigation() {\n    if (!isCancelled && !navigation.transition) {\n      var currentEntry = navigation.currentEntry;\n      currentEntry &&\n        null != currentEntry.url &&\n        navigation.navigate(currentEntry.url, {\n          state: currentEntry.getState(),\n          info: \"react-transition\",\n          history: \"replace\"\n        });\n    }\n  }\n  if (\"object\" === typeof navigation) {\n    var isCancelled = !1,\n      pendingResolve = null;\n    navigation.addEventListener(\"navigate\", handleNavigate);\n    navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n    navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n    setTimeout(startFakeNavigation, 100);\n    return function () {\n      isCancelled = !0;\n      navigation.removeEventListener(\"navigate\", handleNavigate);\n      navigation.removeEventListener(\"navigatesuccess\", handleNavigateComplete);\n      navigation.removeEventListener(\"navigateerror\", handleNavigateComplete);\n      null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    };\n  }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1840 = React.version;\nif (\n  \"19.2.4\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1840\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1840,\n      \"19.2.4\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2347 = {\n  bundleType: 0,\n  version: \"19.2.4\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.2.4\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2348 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2348.isDisabled &&\n    hook$jscomp$inline_2348.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2348.inject(\n        internals$jscomp$inline_2347\n      )),\n        (injectedHook = hook$jscomp$inline_2348);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    null,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    formState,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.2.4\";\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-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","import { CodeSnippet } from \"../CodeSnippet/CodeSnippet.js\"\n\nexport const DataCitation = (props: {\n    citationShort: string\n    citationLong: string\n}) => {\n    return (\n        <div className=\"data-citation\">\n            {props.citationShort && (\n                <div className=\"data-citation__item\">\n                    <p className=\"citation__paragraph\">\n                        <span className=\"citation__type\">In-line citation</span>\n                        If you have limited space (e.g. in data visualizations),\n                        you can use this abbreviated in-line citation:\n                    </p>\n                    <CodeSnippet\n                        code={props.citationShort}\n                        theme=\"light\"\n                        useMarkdown={true}\n                    />\n                </div>\n            )}\n            {props.citationLong && (\n                <div className=\"data-citation__item\">\n                    <p className=\"citation__paragraph\">\n                        <span className=\"citation__type\">Full citation</span>\n                    </p>\n                    <CodeSnippet\n                        code={props.citationLong}\n                        theme=\"light\"\n                        useMarkdown={true}\n                    />\n                </div>\n            )}\n        </div>\n    )\n}\n","import cx from \"classnames\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { IconDefinition, faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\n\ntype ButtonCommonProps = {\n    text?: string\n    className?: string\n    style?: React.CSSProperties\n    theme:\n        | \"solid-vermillion\"\n        | \"solid-blue\"\n        | \"solid-dark-blue\"\n        | \"solid-light-blue\"\n        | \"outline-vermillion\"\n        | \"outline-dark-blue\"\n        | \"outline-light-blue\"\n        | \"outline-white\"\n    /** Set to null to hide the icon */\n    icon?: IconDefinition | null\n    iconPosition?: \"left\" | \"right\"\n    dataTrackNote?: string\n    disabled?: boolean\n    ariaLabel?: string\n}\n\ntype WithHrefProps = {\n    href: string\n    onClick?: never\n    type?: never\n}\n\ntype WithOnClickProps = {\n    onClick?: () => void\n    href?: never\n    type?: \"button\" | \"submit\"\n}\n\nexport type ButtonProps =\n    | (ButtonCommonProps & WithHrefProps)\n    | (ButtonCommonProps & WithOnClickProps)\n\nexport const Button = ({\n    theme = \"solid-vermillion\",\n    className,\n    style,\n    href,\n    onClick,\n    text,\n    ariaLabel,\n    type = \"button\",\n    icon = faArrowRight,\n    iconPosition = \"right\",\n    dataTrackNote,\n    disabled,\n}: ButtonProps) => {\n    const classes = cx(\"owid-btn\", `owid-btn--${theme}`, className, {\n        \"owid-btn--icon-only\": icon && !text,\n    })\n    const content = (\n        <>\n            {iconPosition === \"left\" && icon && (\n                <FontAwesomeIcon\n                    className={cx({ \"owid-btn--icon-left\": text })}\n                    icon={icon}\n                />\n            )}\n            {text && <span>{text}</span>}\n            {iconPosition !== \"left\" && icon && (\n                <FontAwesomeIcon\n                    className={cx({ \"owid-btn--icon-right\": text })}\n                    icon={icon}\n                />\n            )}\n        </>\n    )\n\n    if (href) {\n        const aProps = {\n            href: disabled ? undefined : href,\n            className: classes,\n            style,\n            \"data-track-note\": dataTrackNote,\n            onClick: disabled\n                ? (e: React.MouseEvent) => e.preventDefault()\n                : undefined,\n            \"aria-label\": ariaLabel,\n            \"aria-disabled\": disabled,\n        }\n        return <a {...aProps}>{content}</a>\n    }\n\n    const buttonProps = {\n        type,\n        className: classes,\n        style,\n        onClick,\n        \"aria-label\": ariaLabel,\n        \"data-track-note\": dataTrackNote,\n        disabled,\n    }\n    return <button {...buttonProps}>{content}</button>\n}\n","import * as React from \"react\"\nimport { Color } from \"@ourworldindata/types\"\n\ninterface HaloProps {\n    id: string\n    children: React.ReactElement<React.HTMLAttributes<HTMLElement>>\n    show?: boolean\n    outlineWidth: number\n    outlineColor?: Color\n    style?: React.CSSProperties\n}\n\nconst defaultHaloStyle: React.CSSProperties = {\n    fill: \"#fff\",\n    stroke: \"#fff\",\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    userSelect: \"none\",\n}\n\nexport function Halo(props: HaloProps): React.ReactElement {\n    const show = props.show ?? true\n    if (!show) return props.children\n\n    const defaultStyle = {\n        ...defaultHaloStyle,\n        strokeWidth: props.outlineWidth,\n        fill: props.outlineColor ?? defaultHaloStyle.fill,\n        stroke: props.outlineColor ?? defaultHaloStyle.stroke,\n    }\n    const halo = React.cloneElement(props.children, {\n        id: props.id,\n        style: {\n            ...defaultStyle,\n            ...props.style,\n        },\n    })\n    return (\n        <React.Fragment key={props.id}>\n            {halo}\n            {props.children}\n        </React.Fragment>\n    )\n}\n","import * as React from \"react\"\nimport ReactDOM from \"react-dom\"\n\ninterface BodyPortalProps {\n    children: React.ReactNode\n    containerClassName?: string\n}\n\n/**\n * Renders a component on Body instead of inside the current tree.\n * See https://react.dev/reference/react-dom/createPortal\n */\nexport class BodyPortal extends React.Component<BodyPortalProps> {\n    private element: HTMLDivElement | null = null\n\n    override componentDidMount(): void {\n        if (typeof document !== \"undefined\") {\n            this.element = document.createElement(\"div\")\n            if (this.props.containerClassName)\n                this.element.className = this.props.containerClassName\n\n            document.body.appendChild(this.element)\n            // Force a re-render now that `this.el` is available for the portal\n            this.forceUpdate()\n        }\n    }\n\n    override componentWillUnmount(): void {\n        // Remove the element from the body if it was added\n        if (this.element && this.element.parentNode === document.body) {\n            document.body.removeChild(this.element)\n        }\n        this.element = null // Clean up the reference\n    }\n\n    override render(): React.ReactPortal | null {\n        if (!this.element) return null\n        return ReactDOM.createPortal(this.props.children, this.element)\n    }\n}\n","import * as React from \"react\"\nimport { Bounds } from \"@ourworldindata/utils\"\n\nconst DEFAULT_COLOR = \"#333\"\n\nexport const LoadingIndicator = (props: {\n    backgroundColor?: string\n    bounds?: Bounds\n    color?: string\n    title?: string\n}): React.ReactElement => {\n    return (\n        <div\n            className=\"loading-indicator\"\n            title={props.title}\n            style={{\n                backgroundColor: props.backgroundColor,\n                ...props.bounds?.toCSS(),\n            }}\n        >\n            <span\n                style={{\n                    borderColor: props.color || DEFAULT_COLOR,\n                }}\n            />\n        </div>\n    )\n}\n","import { createRoot } from \"react-dom/client\"\nimport { flushSync } from \"react-dom\"\n\nexport const reactRenderToStringClientOnly = (\n    element: React.ReactElement\n): string => {\n    if (typeof document === \"undefined\") {\n        throw new Error(\n            \"reactRenderToStringClientOnly can only be used in a browser environment\"\n        )\n    }\n\n    // This is the React-recommended way of rendering a component to HTML on the client-side, see https://react.dev/reference/react-dom/server/renderToString#removing-rendertostring-from-the-client-code\n    const div = document.createElement(\"div\")\n    const root = createRoot(div)\n    flushSync(() => root.render(element))\n    const html = div.innerHTML\n    root.unmount()\n    return html\n}\n","import * as React from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faChartBar,\n    faChartColumn,\n    faChartLine,\n    faEarthAmericas,\n    faTable,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    GRAPHER_CHART_TYPES,\n    GRAPHER_TAB_NAMES,\n    GrapherChartType,\n    GrapherTabName,\n} from \"@ourworldindata/types\"\n\nexport function GrapherTabIcon({\n    tab,\n    isLineChartThatTurnedIntoDiscreteBar,\n}: {\n    tab: GrapherTabName\n    isLineChartThatTurnedIntoDiscreteBar?: boolean\n}): React.ReactElement {\n    switch (tab) {\n        case GRAPHER_TAB_NAMES.Table:\n            return <FontAwesomeIcon className=\"GrapherTabIcon\" icon={faTable} />\n        case GRAPHER_TAB_NAMES.WorldMap:\n            return (\n                <FontAwesomeIcon\n                    className=\"GrapherTabIcon\"\n                    icon={faEarthAmericas}\n                />\n            )\n        default: {\n            const chartIcon =\n                tab === GRAPHER_TAB_NAMES.LineChart &&\n                isLineChartThatTurnedIntoDiscreteBar\n                    ? chartIcons[GRAPHER_CHART_TYPES.DiscreteBar]\n                    : chartIcons[tab]\n            return chartIcon\n        }\n    }\n}\n\nconst chartIcons: Record<GrapherChartType, React.ReactElement> = {\n    // line chart\n    [GRAPHER_CHART_TYPES.LineChart]: (\n        <FontAwesomeIcon className=\"GrapherTabIcon\" icon={faChartLine} />\n    ),\n\n    // bar charts\n    [GRAPHER_CHART_TYPES.DiscreteBar]: (\n        <FontAwesomeIcon className=\"GrapherTabIcon\" icon={faChartColumn} />\n    ),\n    [GRAPHER_CHART_TYPES.StackedBar]: (\n        <FontAwesomeIcon className=\"GrapherTabIcon\" icon={faChartColumn} />\n    ),\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar]: (\n        <FontAwesomeIcon className=\"GrapherTabIcon\" icon={faChartBar} />\n    ),\n\n    // scatter\n    [GRAPHER_CHART_TYPES.ScatterPlot]: (\n        <svg\n            className=\"GrapherTabIcon custom-icon scatter\"\n            width=\"16\"\n            height=\"16\"\n            viewBox=\"0 0 16 16\"\n            fill=\"none\"\n        >\n            <g clipPath=\"url(#a)\">\n                <path\n                    fill=\"currentColor\"\n                    fillRule=\"evenodd\"\n                    d=\"M13.2 14h-10A1.2 1.2 0 0 1 2 12.8v-10a.8.8 0 1 1 1.6 0V12c0 .22.18.4.4.4h9.2a.8.8 0 0 1 0 1.6Zm-.16-10a1.04 1.04 0 1 1-2.08 0 1.04 1.04 0 0 1 2.08 0Zm-.24 0Zm-1.36 3.6a1.04 1.04 0 1 1-2.08 0 1.04 1.04 0 0 1 2.08 0Zm-.24 0Zm-3.76 2a1.04 1.04 0 1 1-2.08 0 1.04 1.04 0 0 1 2.08 0Zm-.24 0Zm1.04-4.8a1.04 1.04 0 1 1-2.08 0 1.04 1.04 0 0 1 2.08 0Z\"\n                    clipRule=\"evenodd\"\n                />\n            </g>\n            <defs>\n                <clipPath id=\"a\">\n                    <path fill=\"#fff\" d=\"M0 0h16v16H0z\" />\n                </clipPath>\n            </defs>\n        </svg>\n    ),\n\n    // marimekko\n    [GRAPHER_CHART_TYPES.Marimekko]: (\n        <svg\n            className=\"GrapherTabIcon custom-icon marimekko\"\n            width=\"16\"\n            height=\"16\"\n            viewBox=\"0 0 16 16\"\n            fill=\"none\"\n        >\n            <g clipPath=\"url(#a)\">\n                <path\n                    fill=\"currentColor\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\".1\"\n                    d=\"M13.5 1.45h-11A1.051 1.051 0 0 0 1.45 2.5v11a1.051 1.051 0 0 0 1.05 1.05h11a1.051 1.051 0 0 0 1.05-1.05v-11a1.051 1.051 0 0 0-1.05-1.05Zm-.05 3.5h-2.9v-2.4h2.9v2.4Zm-4-1h-2.9v-1.4h2.9v1.4Zm0 1.1v3.9h-2.9v-3.9h2.9Zm-4 5.9h-2.9v-4.9h2.9v4.9Zm1.1-.9h2.9v3.4h-2.9v-3.4Zm4-4h2.9v1.9h-2.9v-1.9Zm-5.1-3.5v2.4h-2.9v-2.4h2.9Zm-2.9 9.5h2.9v1.4h-2.9v-1.4Zm8 1.4v-4.4h2.9v4.4h-2.9Z\"\n                />\n            </g>\n            <defs>\n                <clipPath id=\"a\">\n                    <path fill=\"#fff\" d=\"M0 0h16v16H0z\" />\n                </clipPath>\n            </defs>\n        </svg>\n    ),\n\n    // stacked area\n    [GRAPHER_CHART_TYPES.StackedArea]: (\n        <svg\n            className=\"GrapherTabIcon custom-icon stacked-area\"\n            width=\"14\"\n            height=\"14\"\n            viewBox=\"0 0 14 14\"\n            fill=\"none\"\n        >\n            <g\n                stroke=\"currentColor\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                strokeWidth=\"1.6\"\n            >\n                <path d=\"M1 12.458V1.542L5.764 4.06l7.145-2.52v10.917H1Z\" />\n                <path d=\"m1 9.481 4.764-1.985 7.145 1.191\" />\n            </g>\n        </svg>\n    ),\n\n    // slope chart\n    [GRAPHER_CHART_TYPES.SlopeChart]: (\n        <svg\n            className=\"GrapherTabIcon custom-icon slope\"\n            width=\"16\"\n            height=\"16\"\n            viewBox=\"0 0 16 16\"\n            fill=\"none\"\n        >\n            <g\n                stroke=\"currentColor\"\n                strokeWidth=\"1.6\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n            >\n                <path d=\"M2 2.30005V13.5667\" />\n                <path d=\"M14 2.30005V13.5667\" />\n                <path d=\"M2 3.30005L14 12.3\" />\n                <path d=\"M2 11L14 12\" />\n                <path d=\"M14 4.30005L2 9.30005\" />\n            </g>\n        </svg>\n    ),\n}\n","import cx from \"classnames\"\nimport { GrapherTrendArrowDirection } from \"@ourworldindata/types\"\n\nconst ARROW_PATHS = {\n    up: \"m14,0H5c-.552,0-1,.448-1,1s.448,1,1,1h6.586L.29303,13.29297l1.41394,1.414L13,3.41394v6.58606c0,.552.448,1,1,1s1-.448,1-1V1c0-.552-.448-1-1-1Z\",\n    down: \"m14,4c-.552,0-1,.448-1,1v6.586L1.56049.14648.14655,1.56042l11.43958,11.43958h-6.58612c-.552,0-1,.448-1,1s.448,1,1,1h9c.552,0,1-.448,1-1V5c0-.552-.448-1-1-1Z\",\n    right: \"m19.59198,6.82422L13.22803.46021c-.39105-.39099-1.02405-.39099-1.414,0-.39105.39001-.39105,1.02405,0,1.414l4.65698,4.65704H.5v2h15.97101l-4.65698,4.65698c-.39105.39001-.39105,1.02399,0,1.414.38995.39099,1.02295.39099,1.414,0l6.36395-6.36401c.39001-.39001.39001-1.02399,0-1.414Z\",\n} as const\n\nexport function GrapherTrendArrow({\n    direction,\n    isColored = true,\n    className,\n}: {\n    direction: GrapherTrendArrowDirection\n    isColored?: boolean\n    className?: string\n}): React.ReactElement {\n    return (\n        <svg\n            className={cx(\"GrapherTrendArrow\", direction, className, {\n                colored: isColored,\n            })}\n            xmlns=\"http://www.w3.org/2000/svg\"\n            viewBox={`0 0 ${direction === \"right\" ? 20 : 15} 15`}\n        >\n            <path d={ARROW_PATHS[direction]} />\n        </svg>\n    )\n}\n","// THIS IS A GENERATED FILE, DO NOT EDIT DIRECTLY\n\n// GENERATED BY devTools/schema/generate-default-object-from-schema.ts\n\nimport { GrapherInterface } from \"@ourworldindata/types\"\n\nexport const latestSchemaVersion = \"010\" as const\nexport const outdatedSchemaVersions = [\n    \"001\",\n    \"002\",\n    \"003\",\n    \"004\",\n    \"005\",\n    \"006\",\n    \"007\",\n    \"008\",\n    \"009\",\n] as const\n\nexport const defaultGrapherConfig = {\n    $schema: \"https://files.ourworldindata.org/schemas/grapher-schema.010.json\",\n    selectedEntityNames: [],\n    focusedSeriesNames: [],\n    excludedEntityNames: [],\n    includedEntityNames: [],\n    addCountryMode: \"add-country\",\n    entityType: \"country or region\",\n    entityTypePlural: \"countries and regions\",\n    facettingLabelByYVariables: \"metric\",\n    chartTypes: [\"LineChart\", \"DiscreteBar\"],\n    hasMapTab: false,\n    tab: \"chart\",\n    xAxis: {\n        removePointsOutsideDomain: false,\n        scaleType: \"linear\",\n        max: \"auto\",\n        canChangeScaleType: false,\n        facetDomain: \"shared\",\n    },\n    yAxis: {\n        removePointsOutsideDomain: false,\n        scaleType: \"linear\",\n        max: \"auto\",\n        canChangeScaleType: false,\n        facetDomain: \"shared\",\n    },\n    colorScale: {\n        binningStrategy: \"auto\",\n        midpoint: 0,\n        createBinForMidpoint: false,\n        customNumericColorsActive: false,\n        colorSchemeInvert: false,\n    },\n    map: {\n        region: \"World\",\n        hideTimeline: false,\n        colorScale: {\n            binningStrategy: \"auto\",\n            midpoint: 0,\n            createBinForMidpoint: false,\n            customNumericColorsActive: false,\n            colorSchemeInvert: false,\n        },\n        toleranceStrategy: \"closest\",\n        tooltipUseCustomLabels: false,\n        time: \"latest\",\n        selectedEntityNames: [],\n    },\n    invertColorScheme: false,\n    logo: \"owid\",\n    hideSeriesLabels: false,\n    hideLogo: false,\n    hideRelativeToggle: true,\n    hideConnectedScatterLines: false,\n    hideScatterLabels: false,\n    hideTotalValueLabel: false,\n    hideFacetControl: true,\n    hideAnnotationFieldsInTitle: {\n        entity: false,\n        time: false,\n        changeInPrefix: false,\n    },\n    minTime: \"earliest\",\n    maxTime: \"latest\",\n    timelineMinTime: \"earliest\",\n    timelineMaxTime: \"latest\",\n    hideTimeline: false,\n    stackMode: \"absolute\",\n    zoomToSelection: false,\n    showYearLabels: false,\n    showNoDataArea: true,\n    compareEndPointsOnly: false,\n    matchingEntitiesOnly: false,\n    missingDataStrategy: \"auto\",\n    scatterPointLabelStrategy: \"year\",\n    selectedFacetStrategy: \"none\",\n    sortBy: \"total\",\n    sortOrder: \"desc\",\n    comparisonLines: [],\n    relatedQuestions: [],\n} as GrapherInterface\n","import {\n    EntityName,\n    GRAPHER_CHART_TYPES,\n    GrapherChartType,\n} from \"@ourworldindata/types\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { defaultGrapherConfig } from \"../schema/defaultGrapherConfig.js\"\n\nexport const GRAPHER_PROD_URL = \"https://ourworldindata.org\"\n\nexport const GRAPHER_EMBEDDED_FIGURE_ATTR = \"data-grapher-src\"\n\nexport const GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR =\n    \"data-grapher-narrative-chart-config\"\n\nexport const GRAPHER_ROUTE_FOLDER = \"grapher\"\n\nexport const GRAPHER_PAGE_BODY_CLASS = \"StandaloneGrapherOrExplorerPage\"\nexport const GRAPHER_IS_IN_IFRAME_CLASS = \"IsInIframe\"\nexport const GRAPHER_TIMELINE_CLASS = \"GrapherTimeline\"\nexport const GRAPHER_SIDE_PANEL_CLASS = \"side-panel\"\nexport const GRAPHER_SETTINGS_CLASS = \"GrapherSettingsPopover\"\n\n// The Figma plugin uses these class names to identify sections of the chart\nexport const GRAPHER_CHART_AREA_CLASS = \"chart-area\"\nexport const GRAPHER_HEADER_CLASS = \"header\"\nexport const GRAPHER_FOOTER_CLASS = \"footer\"\n\nexport const DEFAULT_GRAPHER_ENTITY_TYPE = \"country or region\"\nexport const DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL = \"countries and regions\"\n\nexport const GRAPHER_LOADED_EVENT_NAME = \"grapherLoaded\"\n\nexport const DEFAULT_GRAPHER_WIDTH = 850\nexport const DEFAULT_GRAPHER_HEIGHT = 600\n\n// Keep in sync with $grapher-thumbnail-width and $grapher-thumbnail-height in Grapher.scss\nexport const GRAPHER_THUMBNAIL_WIDTH = 300\nexport const GRAPHER_THUMBNAIL_HEIGHT = 160\n\n// Image widths used for generating srcSet (1x and 2x for high-DPI displays)\nexport const GRAPHER_IMAGE_WIDTH_1X = 850\nexport const GRAPHER_IMAGE_WIDTH_2X = 1700\n\nexport const GRAPHER_SQUARE_SIZE = 540\n\nexport const DEFAULT_GRAPHER_BOUNDS = new Bounds(\n    0,\n    0,\n    DEFAULT_GRAPHER_WIDTH,\n    DEFAULT_GRAPHER_HEIGHT\n)\n\nexport const DEFAULT_GRAPHER_BOUNDS_SQUARE = new Bounds(\n    0,\n    0,\n    GRAPHER_SQUARE_SIZE,\n    GRAPHER_SQUARE_SIZE\n)\n\nexport const GRAPHER_FRAME_PADDING_VERTICAL = 16\nexport const GRAPHER_FRAME_PADDING_HORIZONTAL = 16\n\nexport const STATIC_EXPORT_DETAIL_SPACING = 8\n\nexport const GRAPHER_OPACITY_MUTED = 0.5\n\nexport const GRAPHER_AREA_OPACITY_DEFAULT = 0.8\nexport const GRAPHER_AREA_OPACITY_MUTED = 0.3\nexport const GRAPHER_AREA_OPACITY_HIGHLIGHTED = 1\n\nexport const GRAPHER_TEXT_OUTLINE_FACTOR = 0.25\n\nexport const BASE_FONT_SIZE = 16\n\nexport const GRAPHER_FONT_SCALE_9_6 = 9.6 / BASE_FONT_SIZE\nexport const GRAPHER_FONT_SCALE_10 = 10 / BASE_FONT_SIZE\nexport const GRAPHER_FONT_SCALE_10_5 = 10.5 / BASE_FONT_SIZE\nexport const GRAPHER_FONT_SCALE_11 = 11 / BASE_FONT_SIZE\nexport const GRAPHER_FONT_SCALE_11_2 = 11.2 / BASE_FONT_SIZE\nexport const GRAPHER_FONT_SCALE_12 = 12 / BASE_FONT_SIZE\nexport const GRAPHER_FONT_SCALE_12_8 = 12.8 / BASE_FONT_SIZE\nexport const GRAPHER_FONT_SCALE_13 = 13 / BASE_FONT_SIZE\nexport const GRAPHER_FONT_SCALE_14 = 14 / BASE_FONT_SIZE\nexport const GRAPHER_FONT_SCALE_18 = 18 / BASE_FONT_SIZE\n\n// keep in sync with $max-tooltip-width in Tooltip.scss\nexport const GRAPHER_MAX_TOOLTIP_WIDTH = 400\n\nexport const latestGrapherConfigSchema = defaultGrapherConfig.$schema\n\nexport enum CookieKey {\n    isAdmin = \"isAdmin\",\n}\n\nexport const WORLD_ENTITY_NAME = \"World\"\n\nexport const isWorldEntityName = (entityName: EntityName): boolean =>\n    entityName === WORLD_ENTITY_NAME\n\nexport const CONTINENTS_INDICATOR_ID = 900801 // \"Countries Continent\"\nexport const POPULATION_INDICATOR_ID_USED_IN_ADMIN = 953899 // \"Population (various sources, 2024-07-15)\"\nexport const GDP_PER_CAPITA_INDICATOR_ID_USED_IN_ADMIN = 1144914 // \"GDP per capita, PPP (constant 2021 international $)\"\n\nexport const isContinentsVariableId = (id: string | number): boolean =>\n    id.toString() === CONTINENTS_INDICATOR_ID.toString()\n\n// ETL paths are composed of channel/namespace/version/dataset/table#columnname\n// We want to identify the any version of these two columns (added whitespaces for readability):\n// grapher / demography / ANY VERSION / population / population # population\n// grapher / demography / ANY VERSION / population / historical # population_historical\nconst population_regex =\n    /^grapher\\/demography\\/[\\d-]+\\/population\\/(population#population|historical#population_historical)$/\n\n/**\n * Manually configured list of providers that define geographic regions.\n *\n * By convention, entities are named with the format 'RegionName (Provider)',\n * such as 'Africa (UN)' or 'Africa (FAO)'.\n *\n * These provider identifiers are used to compile groups of regions for the\n * filter dropdown in the entity selector and on the data tab.\n *\n * Ideally, all regions would be defined in the ETL's regions file,\n * but currently we need to maintain this manual configuration until the\n * regions file is more complete.\n */\nexport const ADDITIONAL_REGION_DATA_PROVIDERS = [\n    \"fao\",\n    \"ei\",\n    \"pip\",\n    \"ember\",\n    \"gcp\",\n    \"niaid\",\n    \"unicef\",\n    \"unaids\",\n    \"undp\",\n    \"wid\",\n    \"oecd\",\n    \"unsd\",\n    \"unm49\",\n    \"maddison\",\n    \"ilo\",\n] as const\n\nexport type AdditionalRegionDataProvider =\n    (typeof ADDITIONAL_REGION_DATA_PROVIDERS)[number]\n\nexport const isPopulationVariableETLPath = (path: string): boolean => {\n    return population_regex.test(path)\n}\n\nexport enum Patterns {\n    noDataPattern = \"noDataPattern\",\n    noDataPatternForMap = \"noDataPatternForMap\",\n    noDataPatternForGlobe = \"noDataPatternForGlobe\",\n    projectedDataPattern = \"projectedDataPattern\",\n    projectedDataPatternForLegend = \"projectedDataPatternForLegend\",\n}\n\nexport const SVG_STYLE_PROPS: React.CSSProperties = {\n    fontFamily:\n        \"Lato, 'Helvetica Neue', Helvetica, Arial, 'Liberation Sans', sans-serif\",\n    fontFeatureSettings: '\"liga\", \"kern\", \"calt\", \"lnum\"', // keep in sync with typography.scss$default-font-features\n    textRendering: \"geometricPrecision\",\n    WebkitFontSmoothing: \"antialiased\",\n}\n\nexport enum GrapherModal {\n    Sources = \"sources\",\n    Download = \"download\",\n    Embed = \"embed\",\n}\n\nexport const CHART_TYPES_THAT_SHOW_ALL_ENTITIES: GrapherChartType[] = [\n    GRAPHER_CHART_TYPES.ScatterPlot,\n    GRAPHER_CHART_TYPES.Marimekko,\n]\n\nexport interface FontSettings {\n    fontSize: number\n    fontWeight: number\n    lineHeight: number\n}\n","import { makeObservable } from \"mobx\";\nimport { useState } from \"react\";\nif (!useState) {\n    throw new Error(\"mobx-react-lite requires React with Hooks support\");\n}\nif (!makeObservable) {\n    throw new Error(\"mobx-react-lite@3 requires mobx at least version 6 to be available\");\n}\n//# sourceMappingURL=assertEnvironment.js.map","import { configure } from \"mobx\";\nexport function defaultNoopBatch(callback) {\n    callback();\n}\nexport function observerBatching(reactionScheduler) {\n    if (!reactionScheduler) {\n        reactionScheduler = defaultNoopBatch;\n        if (\"production\" !== process.env.NODE_ENV) {\n            console.warn(\"[MobX] Failed to get unstable_batched updates from react-dom / react-native\");\n        }\n    }\n    configure({ reactionScheduler: reactionScheduler });\n}\nexport var isObserverBatched = function () {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[MobX] Deprecated\");\n    }\n    return true;\n};\n//# sourceMappingURL=observerBatching.js.map","import { getDependencyTree } from \"mobx\";\nexport function printDebugValue(v) {\n    return getDependencyTree(v);\n}\n//# sourceMappingURL=printDebugValue.js.map","export var REGISTRY_FINALIZE_AFTER = 10000;\nexport var REGISTRY_SWEEP_INTERVAL = 10000;\nvar TimerBasedFinalizationRegistry = /** @class */ (function () {\n    function TimerBasedFinalizationRegistry(finalize) {\n        var _this = this;\n        Object.defineProperty(this, \"finalize\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: finalize\n        });\n        Object.defineProperty(this, \"registrations\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: new Map()\n        });\n        Object.defineProperty(this, \"sweepTimeout\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // Bound so it can be used directly as setTimeout callback.\n        Object.defineProperty(this, \"sweep\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: function (maxAge) {\n                if (maxAge === void 0) { maxAge = REGISTRY_FINALIZE_AFTER; }\n                // cancel timeout so we can force sweep anytime\n                clearTimeout(_this.sweepTimeout);\n                _this.sweepTimeout = undefined;\n                var now = Date.now();\n                _this.registrations.forEach(function (registration, token) {\n                    if (now - registration.registeredAt >= maxAge) {\n                        _this.finalize(registration.value);\n                        _this.registrations.delete(token);\n                    }\n                });\n                if (_this.registrations.size > 0) {\n                    _this.scheduleSweep();\n                }\n            }\n        });\n        // Bound so it can be exported directly as clearTimers test utility.\n        Object.defineProperty(this, \"finalizeAllImmediately\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: function () {\n                _this.sweep(0);\n            }\n        });\n    }\n    // Token is actually required with this impl\n    Object.defineProperty(TimerBasedFinalizationRegistry.prototype, \"register\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (target, value, token) {\n            this.registrations.set(token, {\n                value: value,\n                registeredAt: Date.now()\n            });\n            this.scheduleSweep();\n        }\n    });\n    Object.defineProperty(TimerBasedFinalizationRegistry.prototype, \"unregister\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function (token) {\n            this.registrations.delete(token);\n        }\n    });\n    Object.defineProperty(TimerBasedFinalizationRegistry.prototype, \"scheduleSweep\", {\n        enumerable: false,\n        configurable: true,\n        writable: true,\n        value: function () {\n            if (this.sweepTimeout === undefined) {\n                this.sweepTimeout = setTimeout(this.sweep, REGISTRY_SWEEP_INTERVAL);\n            }\n        }\n    });\n    return TimerBasedFinalizationRegistry;\n}());\nexport { TimerBasedFinalizationRegistry };\nexport var UniversalFinalizationRegistry = typeof FinalizationRegistry !== \"undefined\"\n    ? FinalizationRegistry\n    : TimerBasedFinalizationRegistry;\n//# sourceMappingURL=UniversalFinalizationRegistry.js.map","import { UniversalFinalizationRegistry } from \"./UniversalFinalizationRegistry\";\nexport var observerFinalizationRegistry = new UniversalFinalizationRegistry(function (adm) {\n    var _a;\n    (_a = adm.reaction) === null || _a === void 0 ? void 0 : _a.dispose();\n    adm.reaction = null;\n});\n//# sourceMappingURL=observerFinalizationRegistry.js.map","var __read = (this && this.__read) || function (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};\nimport { Reaction } from \"mobx\";\nimport React from \"react\";\nimport { printDebugValue } from \"./utils/printDebugValue\";\nimport { observerFinalizationRegistry } from \"./utils/observerFinalizationRegistry\";\nimport { isUsingStaticRendering } from \"./staticRendering\";\nfunction observerComponentNameFor(baseComponentName) {\n    return \"observer\".concat(baseComponentName);\n}\n/**\n * We use class to make it easier to detect in heap snapshots by name\n */\nvar ObjectToBeRetainedByReact = /** @class */ (function () {\n    function ObjectToBeRetainedByReact() {\n    }\n    return ObjectToBeRetainedByReact;\n}());\nfunction objectToBeRetainedByReactFactory() {\n    return new ObjectToBeRetainedByReact();\n}\nexport function useObserver(fn, baseComponentName) {\n    if (baseComponentName === void 0) { baseComponentName = \"observed\"; }\n    if (isUsingStaticRendering()) {\n        return fn();\n    }\n    var _a = __read(React.useState(objectToBeRetainedByReactFactory), 1), objectRetainedByReact = _a[0];\n    // Force update, see #2982\n    var _b = __read(React.useState(), 2), setState = _b[1];\n    var forceUpdate = function () { return setState([]); };\n    // StrictMode/ConcurrentMode/Suspense may mean that our component is\n    // rendered and abandoned multiple times, so we need to track leaked\n    // Reactions.\n    var admRef = React.useRef(null);\n    if (!admRef.current) {\n        // First render\n        admRef.current = {\n            reaction: null,\n            mounted: false,\n            changedBeforeMount: false\n        };\n    }\n    var adm = admRef.current;\n    if (!adm.reaction) {\n        // First render or component was not committed and reaction was disposed by registry\n        adm.reaction = new Reaction(observerComponentNameFor(baseComponentName), function () {\n            // Observable has changed, meaning we want to re-render\n            // BUT if we're a component that hasn't yet got to the useEffect()\n            // stage, we might be a component that _started_ to render, but\n            // got dropped, and we don't want to make state changes then.\n            // (It triggers warnings in StrictMode, for a start.)\n            if (adm.mounted) {\n                // We have reached useEffect(), so we're mounted, and can trigger an update\n                forceUpdate();\n            }\n            else {\n                // We haven't yet reached useEffect(), so we'll need to trigger a re-render\n                // when (and if) useEffect() arrives.\n                adm.changedBeforeMount = true;\n            }\n        });\n        observerFinalizationRegistry.register(objectRetainedByReact, adm, adm);\n    }\n    React.useDebugValue(adm.reaction, printDebugValue);\n    React.useEffect(function () {\n        observerFinalizationRegistry.unregister(adm);\n        adm.mounted = true;\n        if (adm.reaction) {\n            if (adm.changedBeforeMount) {\n                // Got a change before mount, force an update\n                adm.changedBeforeMount = false;\n                forceUpdate();\n            }\n        }\n        else {\n            // The reaction we set up in our render has been disposed.\n            // This can be due to bad timings of renderings, e.g. our\n            // component was paused for a _very_ long time, and our\n            // reaction got cleaned up\n            // Re-create the reaction\n            adm.reaction = new Reaction(observerComponentNameFor(baseComponentName), function () {\n                // We've definitely already been mounted at this point\n                forceUpdate();\n            });\n            forceUpdate();\n        }\n        return function () {\n            adm.reaction.dispose();\n            adm.reaction = null;\n            adm.mounted = false;\n            adm.changedBeforeMount = false;\n        };\n    }, []);\n    // render the original component, but have the\n    // reaction track the observables, so that rendering\n    // can be invalidated (see above) once a dependency changes\n    var rendering;\n    var exception;\n    adm.reaction.track(function () {\n        try {\n            rendering = fn();\n        }\n        catch (e) {\n            exception = e;\n        }\n    });\n    if (exception) {\n        throw exception; // re-throw any exceptions caught during rendering\n    }\n    return rendering;\n}\n//# sourceMappingURL=useObserver.js.map","import { forwardRef, memo } from \"react\";\nimport { isUsingStaticRendering } from \"./staticRendering\";\nimport { useObserver } from \"./useObserver\";\nvar warnObserverOptionsDeprecated = true;\nvar hasSymbol = typeof Symbol === \"function\" && Symbol.for;\n// Using react-is had some issues (and operates on elements, not on types), see #608 / #609\nvar ReactForwardRefSymbol = hasSymbol\n    ? Symbol.for(\"react.forward_ref\")\n    : typeof forwardRef === \"function\" && forwardRef(function (props) { return null; })[\"$$typeof\"];\nvar ReactMemoSymbol = hasSymbol\n    ? Symbol.for(\"react.memo\")\n    : typeof memo === \"function\" && memo(function (props) { return null; })[\"$$typeof\"];\n// n.b. base case is not used for actual typings or exported in the typing files\nexport function observer(baseComponent, \n// TODO remove in next major\noptions) {\n    var _a;\n    if (process.env.NODE_ENV !== \"production\" && warnObserverOptionsDeprecated && options) {\n        warnObserverOptionsDeprecated = false;\n        console.warn(\"[mobx-react-lite] `observer(fn, { forwardRef: true })` is deprecated, use `observer(React.forwardRef(fn))`\");\n    }\n    if (ReactMemoSymbol && baseComponent[\"$$typeof\"] === ReactMemoSymbol) {\n        throw new Error(\"[mobx-react-lite] You are trying to use `observer` on a function component wrapped in either another `observer` or `React.memo`. The observer already applies 'React.memo' for you.\");\n    }\n    // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307\n    if (isUsingStaticRendering()) {\n        return baseComponent;\n    }\n    var useForwardRef = (_a = options === null || options === void 0 ? void 0 : options.forwardRef) !== null && _a !== void 0 ? _a : false;\n    var render = baseComponent;\n    var baseComponentName = baseComponent.displayName || baseComponent.name;\n    // If already wrapped with forwardRef, unwrap,\n    // so we can patch render and apply memo\n    if (ReactForwardRefSymbol && baseComponent[\"$$typeof\"] === ReactForwardRefSymbol) {\n        useForwardRef = true;\n        render = baseComponent[\"render\"];\n        if (typeof render !== \"function\") {\n            throw new Error(\"[mobx-react-lite] `render` property of ForwardRef was not a function\");\n        }\n    }\n    var observerComponent = function (props, ref) {\n        return useObserver(function () { return render(props, ref); }, baseComponentName);\n    };\n    // Don't set `displayName` for anonymous components,\n    // so the `displayName` can be customized by user, see #3192.\n    if (baseComponentName !== \"\") {\n        ;\n        observerComponent.displayName = baseComponentName;\n    }\n    // Support legacy context: `contextTypes` must be applied before `memo`\n    if (baseComponent.contextTypes) {\n        ;\n        observerComponent.contextTypes = baseComponent.contextTypes;\n    }\n    if (useForwardRef) {\n        // `forwardRef` must be applied prior `memo`\n        // `forwardRef(observer(cmp))` throws:\n        // \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))\"\n        observerComponent = forwardRef(observerComponent);\n    }\n    // memo; we are not interested in deep updates\n    // in props; we assume that if deep objects are changed,\n    // this is in observables, which would have been tracked anyway\n    observerComponent = memo(observerComponent);\n    copyStaticProperties(baseComponent, observerComponent);\n    if (\"production\" !== process.env.NODE_ENV) {\n        Object.defineProperty(observerComponent, \"contextTypes\", {\n            set: function () {\n                var _a;\n                throw new Error(\"[mobx-react-lite] `\".concat(this.displayName || ((_a = this.type) === null || _a === void 0 ? void 0 : _a.displayName) || \"Component\", \".contextTypes` must be set before applying `observer`.\"));\n            }\n        });\n    }\n    return observerComponent;\n}\n// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\nvar hoistBlackList = {\n    $$typeof: true,\n    render: true,\n    compare: true,\n    type: true,\n    // Don't redefine `displayName`,\n    // it's defined as getter-setter pair on `memo` (see #3192).\n    displayName: true\n};\nfunction copyStaticProperties(base, target) {\n    Object.keys(base).forEach(function (key) {\n        if (!hoistBlackList[key]) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));\n        }\n    });\n}\n//# sourceMappingURL=observer.js.map","var _a;\nimport \"./utils/assertEnvironment\";\nimport { unstable_batchedUpdates as batch } from \"./utils/reactBatchedUpdates\";\nimport { observerBatching } from \"./utils/observerBatching\";\nimport { useDeprecated } from \"./utils/utils\";\nimport { useObserver as useObserverOriginal } from \"./useObserver\";\nimport { enableStaticRendering } from \"./staticRendering\";\nimport { observerFinalizationRegistry } from \"./utils/observerFinalizationRegistry\";\nobserverBatching(batch);\nexport { isUsingStaticRendering, enableStaticRendering } from \"./staticRendering\";\nexport { observer } from \"./observer\";\nexport { Observer } from \"./ObserverComponent\";\nexport { useLocalObservable } from \"./useLocalObservable\";\nexport { useLocalStore } from \"./useLocalStore\";\nexport { useAsObservableSource } from \"./useAsObservableSource\";\nexport var clearTimers = (_a = observerFinalizationRegistry[\"finalizeAllImmediately\"]) !== null && _a !== void 0 ? _a : (function () { });\nexport function useObserver(fn, baseComponentName) {\n    if (baseComponentName === void 0) { baseComponentName = \"observed\"; }\n    if (\"production\" !== process.env.NODE_ENV) {\n        useDeprecated(\"[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `<Observer>{fn}</Observer>` instead, or wrap the entire component in `observer`.\");\n    }\n    return useObserverOriginal(fn, baseComponentName);\n}\nexport { isObserverBatched, observerBatching } from \"./utils/observerBatching\";\nexport function useStaticRendering(enable) {\n    if (\"production\" !== process.env.NODE_ENV) {\n        console.warn(\"[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead\");\n    }\n    enableStaticRendering(enable);\n}\n//# sourceMappingURL=index.js.map","import { _allowStateReadsStart, _allowStateReadsEnd, $mobx, _allowStateChanges, createAtom, Reaction, untracked, isObservableMap, isObservableObject, isObservableArray, observable } from 'mobx';\nimport React__default, { PureComponent, Component } from 'react';\nimport { isUsingStaticRendering, observer as observer$1 } from 'mobx-react-lite';\nexport { Observer, enableStaticRendering, isUsingStaticRendering, observerBatching, useAsObservableSource, useLocalObservable, useLocalStore, useObserver, useStaticRendering } from 'mobx-react-lite';\n\nvar symbolId = 0;\n\nfunction createSymbol(name) {\n  if (typeof Symbol === \"function\") {\n    return Symbol(name);\n  }\n\n  var symbol = \"__$mobx-react \" + name + \" (\" + symbolId + \")\";\n  symbolId++;\n  return symbol;\n}\n\nvar createdSymbols = {};\nfunction newSymbol(name) {\n  if (!createdSymbols[name]) {\n    createdSymbols[name] = createSymbol(name);\n  }\n\n  return createdSymbols[name];\n}\nfunction shallowEqual(objA, objB) {\n  //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n  if (is(objA, objB)) {\n    return true;\n  }\n\n  if (typeof objA !== \"object\" || objA === null || typeof objB !== \"object\" || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  for (var i = 0; i < keysA.length; i++) {\n    if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction is(x, y) {\n  // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n} // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js\n\n\nvar hoistBlackList = {\n  $$typeof: 1,\n  render: 1,\n  compare: 1,\n  type: 1,\n  childContextTypes: 1,\n  contextType: 1,\n  contextTypes: 1,\n  defaultProps: 1,\n  getDefaultProps: 1,\n  getDerivedStateFromError: 1,\n  getDerivedStateFromProps: 1,\n  mixins: 1,\n  displayName: 1,\n  propTypes: 1\n};\nfunction copyStaticProperties(base, target) {\n  var protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base));\n  Object.getOwnPropertyNames(base).forEach(function (key) {\n    if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) {\n      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key));\n    }\n  });\n}\n/**\r\n * Helper to set `prop` to `this` as non-enumerable (hidden prop)\r\n * @param target\r\n * @param prop\r\n * @param value\r\n */\n\nfunction setHiddenProp(target, prop, value) {\n  if (!Object.hasOwnProperty.call(target, prop)) {\n    Object.defineProperty(target, prop, {\n      enumerable: false,\n      configurable: true,\n      writable: true,\n      value: value\n    });\n  } else {\n    target[prop] = value;\n  }\n}\n/**\r\n * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks\r\n * and the handler provided by mobx-react\r\n */\n\nvar mobxMixins = /*#__PURE__*/newSymbol(\"patchMixins\");\nvar mobxPatchedDefinition = /*#__PURE__*/newSymbol(\"patchedDefinition\");\n\nfunction getMixins(target, methodName) {\n  var mixins = target[mobxMixins] = target[mobxMixins] || {};\n  var methodMixins = mixins[methodName] = mixins[methodName] || {};\n  methodMixins.locks = methodMixins.locks || 0;\n  methodMixins.methods = methodMixins.methods || [];\n  return methodMixins;\n}\n\nfunction wrapper(realMethod, mixins) {\n  var _this = this;\n\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n\n  // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls\n  mixins.locks++;\n\n  try {\n    var retVal;\n\n    if (realMethod !== undefined && realMethod !== null) {\n      retVal = realMethod.apply(this, args);\n    }\n\n    return retVal;\n  } finally {\n    mixins.locks--;\n\n    if (mixins.locks === 0) {\n      mixins.methods.forEach(function (mx) {\n        mx.apply(_this, args);\n      });\n    }\n  }\n}\n\nfunction wrapFunction(realMethod, mixins) {\n  var fn = function fn() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    wrapper.call.apply(wrapper, [this, realMethod, mixins].concat(args));\n  };\n\n  return fn;\n}\n\nfunction patch(target, methodName, mixinMethod) {\n  var mixins = getMixins(target, methodName);\n\n  if (mixins.methods.indexOf(mixinMethod) < 0) {\n    mixins.methods.push(mixinMethod);\n  }\n\n  var oldDefinition = Object.getOwnPropertyDescriptor(target, methodName);\n\n  if (oldDefinition && oldDefinition[mobxPatchedDefinition]) {\n    // already patched definition, do not repatch\n    return;\n  }\n\n  var originalMethod = target[methodName];\n  var newDefinition = createDefinition(target, methodName, oldDefinition ? oldDefinition.enumerable : undefined, mixins, originalMethod);\n  Object.defineProperty(target, methodName, newDefinition);\n}\n\nfunction createDefinition(target, methodName, enumerable, mixins, originalMethod) {\n  var _ref;\n\n  var wrappedFunc = wrapFunction(originalMethod, mixins);\n  return _ref = {}, _ref[mobxPatchedDefinition] = true, _ref.get = function get() {\n    return wrappedFunc;\n  }, _ref.set = function set(value) {\n    if (this === target) {\n      wrappedFunc = wrapFunction(value, mixins);\n    } else {\n      // when it is an instance of the prototype/a child prototype patch that particular case again separately\n      // since we need to store separate values depending on wether it is the actual instance, the prototype, etc\n      // e.g. the method for super might not be the same as the method for the prototype which might be not the same\n      // as the method for the instance\n      var newDefinition = createDefinition(this, methodName, enumerable, mixins, value);\n      Object.defineProperty(this, methodName, newDefinition);\n    }\n  }, _ref.configurable = true, _ref.enumerable = enumerable, _ref;\n}\n\nvar mobxAdminProperty = $mobx || \"$mobx\"; // BC\n\nvar mobxObserverProperty = /*#__PURE__*/newSymbol(\"isMobXReactObserver\");\nvar mobxIsUnmounted = /*#__PURE__*/newSymbol(\"isUnmounted\");\nvar skipRenderKey = /*#__PURE__*/newSymbol(\"skipRender\");\nvar isForcingUpdateKey = /*#__PURE__*/newSymbol(\"isForcingUpdate\");\nfunction makeClassComponentObserver(componentClass) {\n  var target = componentClass.prototype;\n\n  if (componentClass[mobxObserverProperty]) {\n    var displayName = getDisplayName(target);\n    console.warn(\"The provided component class (\" + displayName + \")\\n                has already been declared as an observer component.\");\n  } else {\n    componentClass[mobxObserverProperty] = true;\n  }\n\n  if (target.componentWillReact) {\n    throw new Error(\"The componentWillReact life-cycle event is no longer supported\");\n  }\n\n  if (componentClass[\"__proto__\"] !== PureComponent) {\n    if (!target.shouldComponentUpdate) {\n      target.shouldComponentUpdate = observerSCU;\n    } else if (target.shouldComponentUpdate !== observerSCU) {\n      // n.b. unequal check, instead of existence check, as @observer might be on superclass as well\n      throw new Error(\"It is not allowed to use shouldComponentUpdate in observer based components.\");\n    }\n  } // this.props and this.state are made observable, just to make sure @computed fields that\n  // are defined inside the component, and which rely on state or props, re-compute if state or props change\n  // (otherwise the computed wouldn't update and become stale on props change, since props are not observable)\n  // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+\n\n\n  makeObservableProp(target, \"props\");\n  makeObservableProp(target, \"state\");\n\n  if (componentClass.contextType) {\n    makeObservableProp(target, \"context\");\n  }\n\n  var originalRender = target.render;\n\n  if (typeof originalRender !== \"function\") {\n    var _displayName = getDisplayName(target);\n\n    throw new Error(\"[mobx-react] class component (\" + _displayName + \") is missing `render` method.\" + \"\\n`observer` requires `render` being a function defined on prototype.\" + \"\\n`render = () => {}` or `render = function() {}` is not supported.\");\n  }\n\n  target.render = function () {\n    this.render = isUsingStaticRendering() ? originalRender : createReactiveRender.call(this, originalRender);\n    return this.render();\n  };\n\n  patch(target, \"componentDidMount\", function () {\n    this[mobxIsUnmounted] = false;\n\n    if (!this.render[mobxAdminProperty]) {\n      // Reaction is re-created automatically during render, but a component can re-mount and skip render #3395.\n      // To re-create the reaction and re-subscribe to relevant observables we have to force an update.\n      Component.prototype.forceUpdate.call(this);\n    }\n  });\n  patch(target, \"componentWillUnmount\", function () {\n    if (isUsingStaticRendering()) {\n      return;\n    }\n\n    var reaction = this.render[mobxAdminProperty];\n\n    if (reaction) {\n      reaction.dispose(); // Forces reaction to be re-created on next render\n\n      this.render[mobxAdminProperty] = null;\n    } else {\n      // Render may have been hot-swapped and/or overridden by a subclass.\n      var _displayName2 = getDisplayName(this);\n\n      console.warn(\"The reactive render of an observer class component (\" + _displayName2 + \")\\n                was overridden after MobX attached. This may result in a memory leak if the\\n                overridden reactive render was not properly disposed.\");\n    }\n\n    this[mobxIsUnmounted] = true;\n  });\n  return componentClass;\n} // Generates a friendly name for debugging\n\nfunction getDisplayName(comp) {\n  return comp.displayName || comp.name || comp.constructor && (comp.constructor.displayName || comp.constructor.name) || \"<component>\";\n}\n\nfunction createReactiveRender(originalRender) {\n  var _this = this;\n\n  /**\r\n   * If props are shallowly modified, react will render anyway,\r\n   * so atom.reportChanged() should not result in yet another re-render\r\n   */\n  setHiddenProp(this, skipRenderKey, false);\n  /**\r\n   * forceUpdate will re-assign this.props. We don't want that to cause a loop,\r\n   * so detect these changes\r\n   */\n\n  setHiddenProp(this, isForcingUpdateKey, false);\n  var initialName = getDisplayName(this);\n  var boundOriginalRender = originalRender.bind(this);\n  var isRenderingPending = false;\n\n  var createReaction = function createReaction() {\n    var reaction = new Reaction(initialName + \".render()\", function () {\n      if (!isRenderingPending) {\n        // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.test.tsx)\n        // This unidiomatic React usage but React will correctly warn about this so we continue as usual\n        // See #85 / Pull #44\n        isRenderingPending = true;\n\n        if (_this[mobxIsUnmounted] !== true) {\n          var hasError = true;\n\n          try {\n            setHiddenProp(_this, isForcingUpdateKey, true);\n\n            if (!_this[skipRenderKey]) {\n              Component.prototype.forceUpdate.call(_this);\n            }\n\n            hasError = false;\n          } finally {\n            setHiddenProp(_this, isForcingUpdateKey, false);\n\n            if (hasError) {\n              reaction.dispose(); // Forces reaction to be re-created on next render\n\n              _this.render[mobxAdminProperty] = null;\n            }\n          }\n        }\n      }\n    });\n    reaction[\"reactComponent\"] = _this;\n    return reaction;\n  };\n\n  function reactiveRender() {\n    var _reactiveRender$mobxA;\n\n    isRenderingPending = false; // Create reaction lazily to support re-mounting #3395\n\n    var reaction = (_reactiveRender$mobxA = reactiveRender[mobxAdminProperty]) != null ? _reactiveRender$mobxA : reactiveRender[mobxAdminProperty] = createReaction();\n    var exception = undefined;\n    var rendering = undefined;\n    reaction.track(function () {\n      try {\n        // TODO@major\n        // Optimization: replace with _allowStateChangesStart/End (not available in mobx@6.0.0)\n        rendering = _allowStateChanges(false, boundOriginalRender);\n      } catch (e) {\n        exception = e;\n      }\n    });\n\n    if (exception) {\n      throw exception;\n    }\n\n    return rendering;\n  }\n\n  return reactiveRender;\n}\n\nfunction observerSCU(nextProps, nextState) {\n  if (isUsingStaticRendering()) {\n    console.warn(\"[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side.\");\n  } // update on any state changes (as is the default)\n\n\n  if (this.state !== nextState) {\n    return true;\n  } // update if props are shallowly not equal, inspired by PureRenderMixin\n  // we could return just 'false' here, and avoid the `skipRender` checks etc\n  // however, it is nicer if lifecycle events are triggered like usually,\n  // so we return true here if props are shallowly modified.\n\n\n  return !shallowEqual(this.props, nextProps);\n}\n\nfunction makeObservableProp(target, propName) {\n  var valueHolderKey = newSymbol(\"reactProp_\" + propName + \"_valueHolder\");\n  var atomHolderKey = newSymbol(\"reactProp_\" + propName + \"_atomHolder\");\n\n  function getAtom() {\n    if (!this[atomHolderKey]) {\n      setHiddenProp(this, atomHolderKey, createAtom(\"reactive \" + propName));\n    }\n\n    return this[atomHolderKey];\n  }\n\n  Object.defineProperty(target, propName, {\n    configurable: true,\n    enumerable: true,\n    get: function get() {\n      var prevReadState = false; // Why this check? BC?\n      // @ts-expect-error\n\n      if (_allowStateReadsStart && _allowStateReadsEnd) {\n        prevReadState = _allowStateReadsStart(true);\n      }\n\n      getAtom.call(this).reportObserved(); // Why this check? BC?\n      // @ts-expect-error\n\n      if (_allowStateReadsStart && _allowStateReadsEnd) {\n        _allowStateReadsEnd(prevReadState);\n      }\n\n      return this[valueHolderKey];\n    },\n    set: function set(v) {\n      if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) {\n        setHiddenProp(this, valueHolderKey, v);\n        setHiddenProp(this, skipRenderKey, true);\n        getAtom.call(this).reportChanged();\n        setHiddenProp(this, skipRenderKey, false);\n      } else {\n        setHiddenProp(this, valueHolderKey, v);\n      }\n    }\n  });\n}\n\n/**\r\n * Observer function / decorator\r\n */\n\nfunction observer(component) {\n  if (component[\"isMobxInjector\"] === true) {\n    console.warn(\"Mobx observer: You are trying to use `observer` on a component that already has `inject`. Please apply `observer` before applying `inject`\");\n  }\n\n  if (Object.prototype.isPrototypeOf.call(Component, component) || Object.prototype.isPrototypeOf.call(PureComponent, component)) {\n    // Class component\n    return makeClassComponentObserver(component);\n  } else {\n    // Function component\n    return observer$1(component);\n  }\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nvar _excluded = [\"children\"];\nvar MobXProviderContext = /*#__PURE__*/React__default.createContext({});\nfunction Provider(props) {\n  var children = props.children,\n      stores = _objectWithoutPropertiesLoose(props, _excluded);\n\n  var parentValue = React__default.useContext(MobXProviderContext);\n  var mutableProviderRef = React__default.useRef(_extends({}, parentValue, stores));\n  var value = mutableProviderRef.current;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var newValue = _extends({}, value, stores); // spread in previous state for the context based stores\n\n\n    if (!shallowEqual(value, newValue)) {\n      throw new Error(\"MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error.\");\n    }\n  }\n\n  return React__default.createElement(MobXProviderContext.Provider, {\n    value: value\n  }, children);\n}\nProvider.displayName = \"MobXProvider\";\n\n/**\r\n * Store Injection\r\n */\n\nfunction createStoreInjector(grabStoresFn, component, injectNames, makeReactive) {\n  // Support forward refs\n  var Injector = React__default.forwardRef(function (props, ref) {\n    var newProps = _extends({}, props);\n\n    var context = React__default.useContext(MobXProviderContext);\n    Object.assign(newProps, grabStoresFn(context || {}, newProps) || {});\n\n    if (ref) {\n      newProps.ref = ref;\n    }\n\n    return React__default.createElement(component, newProps);\n  });\n  if (makeReactive) Injector = observer(Injector);\n  Injector[\"isMobxInjector\"] = true; // assigned late to suppress observer warning\n  // Static fields from component should be visible on the generated Injector\n\n  copyStaticProperties(component, Injector);\n  Injector[\"wrappedComponent\"] = component;\n  Injector.displayName = getInjectName(component, injectNames);\n  return Injector;\n}\n\nfunction getInjectName(component, injectNames) {\n  var displayName;\n  var componentName = component.displayName || component.name || component.constructor && component.constructor.name || \"Component\";\n  if (injectNames) displayName = \"inject-with-\" + injectNames + \"(\" + componentName + \")\";else displayName = \"inject(\" + componentName + \")\";\n  return displayName;\n}\n\nfunction grabStoresByName(storeNames) {\n  return function (baseStores, nextProps) {\n    storeNames.forEach(function (storeName) {\n      if (storeName in nextProps // prefer props over stores\n      ) return;\n      if (!(storeName in baseStores)) throw new Error(\"MobX injector: Store '\" + storeName + \"' is not available! Make sure it is provided by some Provider\");\n      nextProps[storeName] = baseStores[storeName];\n    });\n    return nextProps;\n  };\n}\n/**\r\n * higher order component that injects stores to a child.\r\n * takes either a varargs list of strings, which are stores read from the context,\r\n * or a function that manually maps the available stores from the context to props:\r\n * storesToProps(mobxStores, props, context) => newProps\r\n */\n\n\nfunction inject() {\n  for (var _len = arguments.length, storeNames = new Array(_len), _key = 0; _key < _len; _key++) {\n    storeNames[_key] = arguments[_key];\n  }\n\n  if (typeof arguments[0] === \"function\") {\n    var grabStoresFn = arguments[0];\n    return function (componentClass) {\n      return createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true);\n    };\n  } else {\n    return function (componentClass) {\n      return createStoreInjector(grabStoresByName(storeNames), componentClass, storeNames.join(\"-\"), false);\n    };\n  }\n}\n\nvar protoStoreKey = /*#__PURE__*/newSymbol(\"disposeOnUnmountProto\");\nvar instStoreKey = /*#__PURE__*/newSymbol(\"disposeOnUnmountInst\");\n\nfunction runDisposersOnWillUnmount() {\n  var _this = this;\n  [].concat(this[protoStoreKey] || [], this[instStoreKey] || []).forEach(function (propKeyOrFunction) {\n    var prop = typeof propKeyOrFunction === \"string\" ? _this[propKeyOrFunction] : propKeyOrFunction;\n\n    if (prop !== undefined && prop !== null) {\n      if (Array.isArray(prop)) prop.map(function (f) {\n        return f();\n      });else prop();\n    }\n  });\n}\n\nfunction disposeOnUnmount(target, propertyKeyOrFunction) {\n  if (Array.isArray(propertyKeyOrFunction)) {\n    return propertyKeyOrFunction.map(function (fn) {\n      return disposeOnUnmount(target, fn);\n    });\n  }\n\n  var c = Object.getPrototypeOf(target).constructor;\n  var c2 = Object.getPrototypeOf(target.constructor); // Special case for react-hot-loader\n\n  var c3 = Object.getPrototypeOf(Object.getPrototypeOf(target));\n\n  if (!(c === React__default.Component || c === React__default.PureComponent || c2 === React__default.Component || c2 === React__default.PureComponent || c3 === React__default.Component || c3 === React__default.PureComponent)) {\n    throw new Error(\"[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent.\");\n  }\n\n  if (typeof propertyKeyOrFunction !== \"string\" && typeof propertyKeyOrFunction !== \"function\" && !Array.isArray(propertyKeyOrFunction)) {\n    throw new Error(\"[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function.\");\n  } // decorator's target is the prototype, so it doesn't have any instance properties like props\n\n\n  var isDecorator = typeof propertyKeyOrFunction === \"string\"; // add property key / function we want run (disposed) to the store\n\n  var componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey];\n  var store = isDecorator ? // decorators are added to the prototype store\n  target[protoStoreKey] || (target[protoStoreKey] = []) : // functions are added to the instance store\n  target[instStoreKey] || (target[instStoreKey] = []);\n  store.push(propertyKeyOrFunction); // tweak the component class componentWillUnmount if not done already\n\n  if (!componentWasAlreadyModified) {\n    patch(target, \"componentWillUnmount\", runDisposersOnWillUnmount);\n  } // return the disposer as is if invoked as a non decorator\n\n\n  if (typeof propertyKeyOrFunction !== \"string\") {\n    return propertyKeyOrFunction;\n  }\n}\n\nfunction createChainableTypeChecker(validator) {\n  function checkType(isRequired, props, propName, componentName, location, propFullName) {\n    for (var _len = arguments.length, rest = new Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\n      rest[_key - 6] = arguments[_key];\n    }\n\n    return untracked(function () {\n      componentName = componentName || \"<<anonymous>>\";\n      propFullName = propFullName || propName;\n\n      if (props[propName] == null) {\n        if (isRequired) {\n          var actual = props[propName] === null ? \"null\" : \"undefined\";\n          return new Error(\"The \" + location + \" `\" + propFullName + \"` is marked as required \" + \"in `\" + componentName + \"`, but its value is `\" + actual + \"`.\");\n        }\n\n        return null;\n      } else {\n        // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise\n        return validator.apply(void 0, [props, propName, componentName, location, propFullName].concat(rest));\n      }\n    });\n  }\n\n  var chainedCheckType = checkType.bind(null, false); // Add isRequired to satisfy Requirable\n\n  chainedCheckType.isRequired = checkType.bind(null, true);\n  return chainedCheckType;\n} // Copied from React.PropTypes\n\n\nfunction isSymbol(propType, propValue) {\n  // Native Symbol.\n  if (propType === \"symbol\") {\n    return true;\n  } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n\n\n  if (propValue[\"@@toStringTag\"] === \"Symbol\") {\n    return true;\n  } // Fallback for non-spec compliant Symbols which are polyfilled.\n\n\n  if (typeof Symbol === \"function\" && propValue instanceof Symbol) {\n    return true;\n  }\n\n  return false;\n} // Copied from React.PropTypes\n\n\nfunction getPropType(propValue) {\n  var propType = typeof propValue;\n\n  if (Array.isArray(propValue)) {\n    return \"array\";\n  }\n\n  if (propValue instanceof RegExp) {\n    // Old webkits (at least until Android 4.0) return 'function' rather than\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n    // passes PropTypes.object.\n    return \"object\";\n  }\n\n  if (isSymbol(propType, propValue)) {\n    return \"symbol\";\n  }\n\n  return propType;\n} // This handles more types than `getPropType`. Only used for error messages.\n// Copied from React.PropTypes\n\n\nfunction getPreciseType(propValue) {\n  var propType = getPropType(propValue);\n\n  if (propType === \"object\") {\n    if (propValue instanceof Date) {\n      return \"date\";\n    } else if (propValue instanceof RegExp) {\n      return \"regexp\";\n    }\n  }\n\n  return propType;\n}\n\nfunction createObservableTypeCheckerCreator(allowNativeType, mobxType) {\n  return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {\n    return untracked(function () {\n      if (allowNativeType) {\n        if (getPropType(props[propName]) === mobxType.toLowerCase()) return null;\n      }\n\n      var mobxChecker;\n\n      switch (mobxType) {\n        case \"Array\":\n          mobxChecker = isObservableArray;\n          break;\n\n        case \"Object\":\n          mobxChecker = isObservableObject;\n          break;\n\n        case \"Map\":\n          mobxChecker = isObservableMap;\n          break;\n\n        default:\n          throw new Error(\"Unexpected mobxType: \" + mobxType);\n      }\n\n      var propValue = props[propName];\n\n      if (!mobxChecker(propValue)) {\n        var preciseType = getPreciseType(propValue);\n        var nativeTypeExpectationMessage = allowNativeType ? \" or javascript `\" + mobxType.toLowerCase() + \"`\" : \"\";\n        return new Error(\"Invalid prop `\" + propFullName + \"` of type `\" + preciseType + \"` supplied to\" + \" `\" + componentName + \"`, expected `mobx.Observable\" + mobxType + \"`\" + nativeTypeExpectationMessage + \".\");\n      }\n\n      return null;\n    });\n  });\n}\n\nfunction createObservableArrayOfTypeChecker(allowNativeType, typeChecker) {\n  return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) {\n    for (var _len2 = arguments.length, rest = new Array(_len2 > 5 ? _len2 - 5 : 0), _key2 = 5; _key2 < _len2; _key2++) {\n      rest[_key2 - 5] = arguments[_key2];\n    }\n\n    return untracked(function () {\n      if (typeof typeChecker !== \"function\") {\n        return new Error(\"Property `\" + propFullName + \"` of component `\" + componentName + \"` has \" + \"invalid PropType notation.\");\n      } else {\n        var error = createObservableTypeCheckerCreator(allowNativeType, \"Array\")(props, propName, componentName, location, propFullName);\n        if (error instanceof Error) return error;\n        var propValue = props[propName];\n\n        for (var i = 0; i < propValue.length; i++) {\n          error = typeChecker.apply(void 0, [propValue, i, componentName, location, propFullName + \"[\" + i + \"]\"].concat(rest));\n          if (error instanceof Error) return error;\n        }\n\n        return null;\n      }\n    });\n  });\n}\n\nvar observableArray = /*#__PURE__*/createObservableTypeCheckerCreator(false, \"Array\");\nvar observableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, false);\nvar observableMap = /*#__PURE__*/createObservableTypeCheckerCreator(false, \"Map\");\nvar observableObject = /*#__PURE__*/createObservableTypeCheckerCreator(false, \"Object\");\nvar arrayOrObservableArray = /*#__PURE__*/createObservableTypeCheckerCreator(true, \"Array\");\nvar arrayOrObservableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, true);\nvar objectOrObservableObject = /*#__PURE__*/createObservableTypeCheckerCreator(true, \"Object\");\nvar PropTypes = {\n  observableArray: observableArray,\n  observableArrayOf: observableArrayOf,\n  observableMap: observableMap,\n  observableObject: observableObject,\n  arrayOrObservableArray: arrayOrObservableArray,\n  arrayOrObservableArrayOf: arrayOrObservableArrayOf,\n  objectOrObservableObject: objectOrObservableObject\n};\n\nif (!Component) throw new Error(\"mobx-react requires React to be available\");\nif (!observable) throw new Error(\"mobx-react requires mobx to be available\");\n\nexport { MobXProviderContext, PropTypes, Provider, disposeOnUnmount, inject, observer };\n//# sourceMappingURL=mobxreact.esm.js.map\n","import { EntityName } from \"@ourworldindata/types\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\n\nexport class SelectionArray {\n    private store: Set<EntityName> = new Set()\n\n    constructor(selectedEntityNames: EntityName[] = []) {\n        makeObservable<SelectionArray, \"store\">(this, { store: observable })\n\n        for (const name of selectedEntityNames) {\n            this.store.add(name)\n        }\n    }\n\n    @computed get selectedEntityNames(): EntityName[] {\n        return [...this.store]\n    }\n\n    @computed get hasSelection(): boolean {\n        return this.numSelectedEntities > 0\n    }\n\n    @computed get isEmpty(): boolean {\n        return this.store.size === 0\n    }\n\n    has(entityName: EntityName): boolean {\n        return this.store.has(entityName)\n    }\n\n    @computed get numSelectedEntities(): number {\n        return this.store.size\n    }\n\n    @computed get selectedSet(): Set<EntityName> {\n        return new Set(this.store)\n    }\n\n    // Clears and sets selected entities\n    @action.bound setSelectedEntities(entityNames: EntityName[]): this {\n        this.clearSelection()\n        return this.addToSelection(entityNames)\n    }\n\n    @action.bound addToSelection(entityNames: EntityName[]): this {\n        for (const name of entityNames) this.selectEntity(name)\n        return this\n    }\n\n    @action.bound clearSelection(): void {\n        this.store.clear()\n    }\n\n    @action.bound toggleSelection(entityName: EntityName): this {\n        return this.store.has(entityName)\n            ? this.deselectEntity(entityName)\n            : this.selectEntity(entityName)\n    }\n\n    @action.bound selectEntity(entityName: EntityName): this {\n        this.store.add(entityName)\n        return this\n    }\n\n    @action.bound deselectEntity(entityName: EntityName): this {\n        this.store.delete(entityName)\n        return this\n    }\n\n    @action.bound selectEntities(entityNames: EntityName[]): this {\n        for (const name of entityNames) this.selectEntity(name)\n        return this\n    }\n\n    @action.bound deselectEntities(entityNames: EntityName[]): this {\n        for (const name of entityNames) this.deselectEntity(name)\n        return this\n    }\n}\n","/**\n * Previously when we get a blank for a value, or a string where we expect a number, etc,\n * we parse things as simply undefineds or nulls or NaN. Since authors are uploading data\n * from our sources at runtime, and errors in source data are extremely common, it may be helpful\n * to parse those invalid values into specific types, to provide better error message and perhaps\n * in the future suggested autocorrections or workarounds.\n *\n * For a good read on the \"Errors are values\" pattern: https://blog.golang.org/errors-are-values\n */\n\nimport { ErrorValue } from \"@ourworldindata/types\"\n\nclass NaNButShouldBeNumber extends ErrorValue {}\nexport class DroppedForTesting extends ErrorValue {}\nclass InvalidOnALogScale extends ErrorValue {}\nclass UndefinedButShouldBeNumber extends ErrorValue {}\nclass NullButShouldBeNumber extends ErrorValue {}\nclass BlankButShouldBeNumber extends ErrorValue {}\nclass UndefinedButShouldBeString extends ErrorValue {}\nclass NullButShouldBeString extends ErrorValue {}\nclass NotAParseableNumberButShouldBeNumber extends ErrorValue {}\nexport class DivideByZeroError extends ErrorValue {}\nclass NoValueWithinTolerance extends ErrorValue {}\nclass NoMatchingValueAfterJoin extends ErrorValue {}\nexport class ValueTooLow extends ErrorValue {}\nclass NoValueToCompareAgainst extends ErrorValue {}\nclass FilteredValue extends ErrorValue {}\nclass NoValueForInterpolation extends ErrorValue {}\nclass InvalidQuarterValue extends ErrorValue {}\nclass InvalidNegativeValue extends ErrorValue {}\nclass NoMatchingVariableId extends ErrorValue {}\n\n// todo: if we don't export this, get an error in Transforms. should be fixable, see: https://github.com/microsoft/TypeScript/issues/5711\nexport class MissingValuePlaceholder extends ErrorValue {}\n\nexport const ErrorValueTypes = {\n    NaNButShouldBeNumber: new NaNButShouldBeNumber(),\n    DroppedForTesting: new DroppedForTesting(),\n    InvalidOnALogScale: new InvalidOnALogScale(),\n    UndefinedButShouldBeNumber: new UndefinedButShouldBeNumber(),\n    NullButShouldBeNumber: new NullButShouldBeNumber(),\n    BlankButShouldBeNumber: new BlankButShouldBeNumber(),\n    UndefinedButShouldBeString: new UndefinedButShouldBeString(),\n    NullButShouldBeString: new NullButShouldBeString(),\n    MissingValuePlaceholder: new MissingValuePlaceholder(),\n    NotAParseableNumberButShouldBeNumber:\n        new NotAParseableNumberButShouldBeNumber(),\n    DivideByZeroError: new DivideByZeroError(),\n    NoValueWithinTolerance: new NoValueWithinTolerance(),\n    NoMatchingValueAfterJoin: new NoMatchingValueAfterJoin(),\n    ValueTooLow: new ValueTooLow(),\n    NoValueToCompareAgainst: new NoValueToCompareAgainst(),\n    FilteredValue: new FilteredValue(),\n    NoValueForInterpolation: new NoValueForInterpolation(),\n    InvalidQuarterValue: new InvalidQuarterValue(),\n    InvalidNegativeValue: new InvalidNegativeValue(),\n    NoMatchingVariableId: new NoMatchingVariableId(),\n}\n\n// https://github.com/robertmassaioli/ts-is-present\n// A predicate for filtering an array of valid and error values that returns the correct type\nexport const isNotErrorValue = <TYPE>(item: TYPE | ErrorValue): item is TYPE =>\n    !(item instanceof ErrorValue)\n\nexport const isNotErrorValueOrEmptyCell = <K>(\n    value: K\n): value is Exclude<K, ErrorValue | undefined> =>\n    value !== undefined && isNotErrorValue(value)\n\nexport const defaultIfErrorValue = <TYPE>(\n    item: TYPE | ErrorValue,\n    defaultValue?: TYPE\n): TYPE | undefined => (isNotErrorValue(item) ? item : defaultValue)\n","import {\n    ColumnSlug,\n    ColumnTypeNames,\n    CoreColumnDef,\n    OwidColumnDef,\n    OwidTableSlugs,\n} from \"@ourworldindata/types\"\nimport { CoreTable } from \"./CoreTable.js\"\n\nexport function timeColumnSlugFromColumnDef(\n    def: OwidColumnDef\n): OwidTableSlugs.day | OwidTableSlugs.year {\n    return def.isDailyMeasurement ? OwidTableSlugs.day : OwidTableSlugs.year\n}\n\nexport function makeOriginalTimeSlugFromColumnSlug(slug: ColumnSlug): string {\n    return `${slug}-originalTime`\n}\n\nexport function makeOriginalStartTimeSlugFromColumnSlug(\n    slug: ColumnSlug\n): string {\n    return `${slug}-originalStartTime`\n}\n\nexport function makeOriginalValueSlugFromColumnSlug(slug: ColumnSlug): string {\n    return `${slug}-originalValue`\n}\n\nexport const makeAnnotationsSlug = (columnSlug: string): string =>\n    `${columnSlug}-annotations`\n\nexport function getOriginalTimeColumnSlug(\n    table: CoreTable,\n    slug: ColumnSlug\n): ColumnSlug {\n    const originalTimeSlug = makeOriginalTimeSlugFromColumnSlug(slug)\n    if (table.has(originalTimeSlug)) return originalTimeSlug\n    return table.timeColumn.slug\n}\n\nexport function getOriginalStartTimeColumnSlug(\n    table: CoreTable,\n    slug: ColumnSlug\n): ColumnSlug {\n    const originalStartTimeSlug = makeOriginalStartTimeSlugFromColumnSlug(slug)\n    if (table.has(originalStartTimeSlug)) return originalStartTimeSlug\n    return table.timeColumn.slug\n}\n\nexport function getOriginalValueColumnSlug(\n    table: CoreTable,\n    slug: ColumnSlug\n): ColumnSlug | undefined {\n    const originalValueSlug = makeOriginalValueSlugFromColumnSlug(slug)\n    if (table.has(originalValueSlug)) return originalValueSlug\n    return undefined\n}\n\nexport function toPercentageColumnDef(\n    columnDef: CoreColumnDef,\n    type = ColumnTypeNames.Percentage\n): CoreColumnDef {\n    // drops all values that can hinder the correct display of a percentage column\n    // (e.g. a \"kWh\" unit or a numDecimalPlaces value of 0)\n    return {\n        ...columnDef,\n        type,\n        unit: undefined,\n        shortUnit: undefined,\n        display: {\n            ...columnDef.display,\n            unit: undefined,\n            shortUnit: undefined,\n            numDecimalPlaces: undefined,\n            conversionFactor: undefined,\n        },\n    }\n}\n","import * as _ from \"lodash-es\"\nimport {\n    anyToString,\n    csvEscape,\n    formatYear,\n    formatDay,\n    sortNumeric,\n    dateDiffInDays,\n    omitUndefinedValues,\n    isPresent,\n    dayjs,\n    OwidSource,\n    formatValue,\n    checkIsVeryShortUnit,\n    TickFormattingOptions,\n    OwidVariableDisplayConfigInterface,\n    ColumnSlug,\n    PrimitiveType,\n    imemo,\n    ToleranceStrategy,\n    IndicatorTitleWithFragments,\n    stripOuterParentheses,\n} from \"@ourworldindata/utils\"\nimport { CoreTable } from \"./CoreTable.js\"\nimport type { OwidTable } from \"./OwidTable.js\"\nimport {\n    Time,\n    JsTypes,\n    CoreValueType,\n    ColumnTypeNames,\n    CoreColumnDef,\n    OwidColumnDef,\n    EntityName,\n    OwidVariableRow,\n    ErrorValue,\n    OwidVariableRoundingMode,\n} from \"@ourworldindata/types\"\nimport { ErrorValueTypes, isNotErrorValue } from \"./ErrorValues.js\"\nimport {\n    getOriginalStartTimeColumnSlug,\n    getOriginalTimeColumnSlug,\n    getOriginalValueColumnSlug,\n} from \"./OwidTableUtil.js\"\nimport * as R from \"remeda\"\n\nexport abstract class AbstractCoreColumn<\n    JS_TYPE extends PrimitiveType,\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> {\n    def: DEF_TYPE\n    table: TABLE_TYPE\n\n    constructor(table: TABLE_TYPE, def: DEF_TYPE) {\n        this.table = table\n        this.def = def\n    }\n\n    abstract jsType: JsTypes\n\n    parse(val: unknown): any {\n        return val\n    }\n\n    /** Type guard to check if this column belongs to an OwidTable */\n    private isOwidColumn(): this is AbstractCoreColumn<\n        JS_TYPE,\n        OwidTable,\n        OwidColumnDef\n    > {\n        return this.table.isOwidTable()\n    }\n\n    @imemo get isMissing(): boolean {\n        return this instanceof MissingColumn\n    }\n\n    @imemo get isTimeColumn(): boolean {\n        return this instanceof TimeColumn\n    }\n\n    @imemo get hasNumberFormatting(): boolean {\n        return this instanceof AbstractColumnWithNumberFormatting\n    }\n\n    // todo: migrate from unitConversionFactor to computed columns instead. then delete this.\n    // note: unitConversionFactor is used >400 times in charts and >800 times in variables!!!\n    @imemo get unitConversionFactor(): number {\n        return this.display?.conversionFactor ?? 1\n    }\n\n    @imemo get isAllIntegers(): boolean {\n        return false\n    }\n\n    @imemo get tolerance(): number {\n        return this.display?.tolerance ?? this.def.tolerance ?? 0\n    }\n\n    @imemo get toleranceStrategy(): ToleranceStrategy | undefined {\n        return this.def.toleranceStrategy\n    }\n\n    @imemo get display(): OwidVariableDisplayConfigInterface | undefined {\n        return this.def.display\n    }\n\n    abstract formatValue(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string\n\n    formatValueForMobile(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return this.formatValue(value, options)\n    }\n\n    formatValueShortWithAbbreviations(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return this.formatValue(value, options)\n    }\n\n    formatValueShort(value: unknown, options?: TickFormattingOptions): string {\n        return this.formatValue(value, options)\n    }\n\n    formatValueLong(value: unknown, options?: TickFormattingOptions): string {\n        return this.formatValue(value, options)\n    }\n\n    formatForTick(value: unknown, options?: TickFormattingOptions): string {\n        return this.formatValueShort(value, options)\n    }\n\n    // A method for formatting for CSV\n    formatForCsv(value: JS_TYPE): string {\n        return csvEscape(anyToString(value))\n    }\n\n    formatTime(time: number): string {\n        return this.originalTimeColumn.formatValue(time)\n    }\n\n    @imemo get roundingMode(): OwidVariableRoundingMode {\n        return (\n            this.display?.roundingMode ?? OwidVariableRoundingMode.decimalPlaces\n        )\n    }\n\n    @imemo get roundsToFixedDecimals(): boolean {\n        return this.roundingMode === OwidVariableRoundingMode.decimalPlaces\n    }\n\n    @imemo get roundsToSignificantFigures(): boolean {\n        return this.roundingMode === OwidVariableRoundingMode.significantFigures\n    }\n\n    @imemo get numDecimalPlaces(): number {\n        return this.display?.numDecimalPlaces ?? 2\n    }\n\n    @imemo get numSignificantFigures(): number {\n        return this.display?.numSignificantFigures ?? 3\n    }\n\n    @imemo get unit(): string | undefined {\n        const unit = this.display?.unit ?? this.def.unit\n        return unit?.trim()\n    }\n\n    @imemo get shortUnit(): string | undefined {\n        const shortUnit =\n            this.display?.shortUnit ?? this.def.shortUnit ?? undefined\n        if (shortUnit !== undefined) return shortUnit\n\n        const unit = this.unit\n\n        if (!unit) return undefined\n\n        if (unit.length < 3) return unit\n        if (checkIsVeryShortUnit(unit[0])) return unit[0]\n\n        return undefined\n    }\n\n    /**\n     * Returns the full unit string for display, but only if it is different from the shortUnit.\n     * This avoids redundant display of units when the short and full units are the same.\n     * Also strips parentheses from the beginning and end of the unit.\n     */\n    @imemo get displayUnit(): string | undefined {\n        // The unit is considered trivial if it is the same as the short unit\n        const tooTrivial = this.unit === this.shortUnit\n        const displayUnit = !tooTrivial ? this.unit : undefined\n\n        // Remove parentheses from the beginning and end of the unit\n        const strippedUnit = displayUnit\n            ? stripOuterParentheses(displayUnit)\n            : undefined\n\n        return strippedUnit\n    }\n\n    // Returns a map where the key is a series slug such as \"name\" and the value is a set\n    // of all the unique values that this column has for that particular series.\n    getUniqueValuesGroupedBy(\n        indexColumnSlug: ColumnSlug\n    ): Map<PrimitiveType, Set<PrimitiveType>> {\n        const map = new Map<PrimitiveType, Set<PrimitiveType>>()\n        const values = this.values\n        const indexValues = this.table.getValuesAtIndices(\n            indexColumnSlug,\n            this.validRowIndices\n        ) as PrimitiveType[]\n        indexValues.forEach((indexVal, index) => {\n            if (!map.has(indexVal)) map.set(indexVal, new Set())\n            map.get(indexVal)!.add(values[index])\n        })\n        return map\n    }\n\n    @imemo get description(): string | undefined {\n        return this.def.description\n    }\n\n    @imemo get isEmpty(): boolean {\n        return this.valuesIncludingErrorValues.length === 0\n    }\n\n    @imemo get name(): string {\n        return this.def.name ?? this.def.slug\n    }\n\n    @imemo get nonEmptyName(): string {\n        return this.def.name || this.def.slug\n    }\n\n    @imemo get displayName(): string {\n        return (\n            this.display?.name ??\n            // this is a bit of an unusual fallback - if display.name is not given, titlePublic is the next best thing before name\n            this.def.presentation?.titlePublic ??\n            this.name ??\n            \"\"\n        )\n    }\n\n    @imemo get nonEmptyDisplayName(): string {\n        return (\n            this.display?.name ||\n            // this is a bit of an unusual fallback - if display.name is not given, titlePublic is the next best thing before name\n            this.def.presentation?.titlePublic ||\n            this.nonEmptyName\n        )\n    }\n\n    @imemo get titlePublicOrDisplayName(): IndicatorTitleWithFragments {\n        return this.def.presentation?.titlePublic\n            ? {\n                  title: this.def.presentation?.titlePublic,\n                  attributionShort: this.def.presentation?.attributionShort,\n                  titleVariant: this.def.presentation?.titleVariant,\n              }\n            : { title: this.display?.name || this.name || \"\" }\n    }\n\n    @imemo get datasetId(): number | undefined {\n        return this.def.datasetId\n    }\n\n    @imemo get datasetName(): string | undefined {\n        return this.def.datasetName\n    }\n\n    // todo: is the isString necessary?\n    @imemo get sortedUniqNonEmptyStringVals(): JS_TYPE[] {\n        return Array.from(\n            new Set(this.values.filter(R.isString).filter((i) => i))\n        ).sort()\n    }\n\n    @imemo get slug(): string {\n        return this.def.slug\n    }\n\n    @imemo get valuesToIndices(): Map<any, number[]> {\n        const map = new Map<any, number[]>()\n        this.valuesIncludingErrorValues.forEach((value, index) => {\n            if (!map.has(value)) map.set(value, [])\n            map.get(value)!.push(index)\n        })\n        return map\n    }\n\n    indicesWhere(value: JS_TYPE | JS_TYPE[]): any {\n        const queries = Array.isArray(value) ? value : [value]\n        return _.union(\n            ...queries\n                .map((val) => this.valuesToIndices.get(val))\n                .filter(isPresent)\n        )\n    }\n\n    // We approximate whether a column is parsed simply by looking at the first row.\n    needsParsing(value: unknown): boolean {\n        // Skip parsing if explicit flag is set\n        if (this.def.skipParsing) return false\n\n        // Never parse computeds. The computed should return the correct JS type. Ideally we can provide some error messaging around this.\n        if (this.def.transform) return false\n\n        // If we already tried to parse it and failed we consider it \"parsed\"\n        if (value instanceof ErrorValue) return false\n\n        // If the passed value is of the correct type consider the column parsed.\n        if (typeof value === this.jsType) return false\n        return true\n    }\n\n    @imemo get isProjection(): boolean {\n        return !!this.display?.isProjection\n    }\n\n    @imemo get uniqValues(): JS_TYPE[] {\n        const set = this.uniqValuesAsSet\n\n        // Turn into array, faster than spread operator\n        const arr = new Array(set.size)\n        let i = 0\n        set.forEach((val) => (arr[i++] = val))\n        return arr\n    }\n\n    @imemo get uniqValuesAsSet(): Set<JS_TYPE> {\n        return new Set(this.values)\n    }\n\n    /**\n     * Returns all values including ErrorValues..\n     * Normally you want just the valid values, like `[45000, 50000, ...]`. But sometimes you\n     * need the ErrorValues too like `[45000, DivideByZeroError, 50000,...]`\n     */\n    @imemo get valuesIncludingErrorValues(): CoreValueType[] {\n        const { table, slug } = this\n        return table.has(slug) ? table.columnStore[slug] : []\n    }\n\n    @imemo get validRowIndices(): number[] {\n        const indices: number[] = []\n        for (let i = 0; i < this.valuesIncludingErrorValues.length; i++) {\n            const value = this.valuesIncludingErrorValues[i]\n            if (isNotErrorValue(value)) indices.push(i)\n        }\n        return indices\n    }\n\n    @imemo get values(): JS_TYPE[] {\n        const values: JS_TYPE[] = []\n\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let i = 0; i < this.valuesIncludingErrorValues.length; i++) {\n            const value = this.valuesIncludingErrorValues[i]\n            if (isNotErrorValue(value)) values.push(value as JS_TYPE)\n        }\n        return values\n    }\n\n    @imemo get originalTimeColumnSlug(): string {\n        return getOriginalTimeColumnSlug(this.table, this.slug)\n    }\n\n    @imemo get originalTimeColumn(): CoreColumn {\n        return this.table.get(this.originalTimeColumnSlug)\n    }\n\n    @imemo get originalStartTimeColumnSlug(): string {\n        return getOriginalStartTimeColumnSlug(this.table, this.slug)\n    }\n\n    @imemo get originalStartTimeColumn(): CoreColumn {\n        return this.table.get(this.originalStartTimeColumnSlug)\n    }\n\n    @imemo get originalTimes(): number[] {\n        const { originalTimeColumnSlug } = this\n        if (!originalTimeColumnSlug) return []\n        return this.table.getValuesAtIndices(\n            originalTimeColumnSlug,\n            this.validRowIndices\n        ) as number[]\n    }\n\n    @imemo get originalValueColumnSlug(): string | undefined {\n        return getOriginalValueColumnSlug(this.table, this.slug)\n    }\n\n    @imemo get originalValues(): JS_TYPE[] {\n        const { originalValueColumnSlug } = this\n        if (!originalValueColumnSlug) return []\n        return this.table.getValuesAtIndices(\n            originalValueColumnSlug,\n            this.validRowIndices\n        ) as JS_TYPE[]\n    }\n\n    @imemo get minValue(): JS_TYPE | undefined {\n        return _.min(this.values)\n    }\n\n    @imemo get maxValue(): JS_TYPE | undefined {\n        return _.max(this.values)\n    }\n\n    @imemo get numErrorValues(): number {\n        return this.valuesIncludingErrorValues.length - this.numValues\n    }\n\n    // Number of correctly parsed values\n    @imemo get numValues(): number {\n        return this.values.length\n    }\n\n    @imemo get numUniqs(): number {\n        return this.uniqValuesAsSet.size\n    }\n\n    @imemo get valuesAscending(): JS_TYPE[] {\n        const values = this.values.slice()\n        return this.jsType === \"string\" ? values.sort() : sortNumeric(values)\n    }\n\n    get source(): OwidSource {\n        const { def } = this\n        return {\n            name: def.sourceName,\n            link: def.sourceLink,\n            dataPublishedBy: def.dataPublishedBy,\n            dataPublisherSource: def.dataPublisherSource,\n            retrievedDate: def.retrievedDate,\n            additionalInfo: def.additionalInfo,\n        }\n    }\n\n    @imemo private get allTimes(): Time[] {\n        return this.table.getTimesAtIndices(this.validRowIndices)\n    }\n\n    @imemo get uniqTimesAsc(): Time[] {\n        return sortNumeric(_.uniq(this.allTimes))\n    }\n\n    @imemo get maxTime(): Time {\n        return _.max(this.allTimes) as Time\n    }\n\n    @imemo get minTime(): Time {\n        return _.min(this.allTimes) as Time\n    }\n\n    @imemo get uniqEntityNames(): EntityName[] {\n        return _.uniq(this.allEntityNames)\n    }\n\n    @imemo private get allEntityNames(): EntityName[] {\n        // Type guard: early return if not OwidColumn\n        if (!this.isOwidColumn()) return []\n\n        return this.table.getValuesAtIndices(\n            this.table.entityNameSlug,\n            this.validRowIndices\n        ) as EntityName[]\n    }\n\n    // Assumes table is sorted by time\n    @imemo get owidRows(): OwidVariableRow<JS_TYPE>[] {\n        const entities = this.allEntityNames\n        const times = this.allTimes\n        const values = this.values\n        const originalTimes = this.originalTimes\n        const originalValues = this.originalValues\n        return _.range(0, originalTimes.length).map((index) => {\n            return omitUndefinedValues({\n                entityName: entities[index],\n                time: times[index],\n                value: values[index],\n                originalTime: originalTimes[index],\n                originalValue: originalValues[index],\n            })\n        })\n    }\n\n    @imemo get owidRowsByEntityName(): Map<\n        EntityName,\n        OwidVariableRow<JS_TYPE>[]\n    > {\n        const map = new Map<EntityName, OwidVariableRow<JS_TYPE>[]>()\n        this.owidRows.forEach((row) => {\n            if (!map.has(row.entityName)) map.set(row.entityName, [])\n            map.get(row.entityName)!.push(row)\n        })\n        return map\n    }\n\n    @imemo get owidRowByEntityNameAndTime(): Map<\n        EntityName,\n        Map<Time, OwidVariableRow<JS_TYPE>>\n    > {\n        const valueByEntityNameAndTime = new Map<\n            EntityName,\n            Map<Time, OwidVariableRow<JS_TYPE>>\n        >()\n        this.owidRows.forEach((row) => {\n            if (!valueByEntityNameAndTime.has(row.entityName))\n                valueByEntityNameAndTime.set(row.entityName, new Map())\n            valueByEntityNameAndTime.get(row.entityName)!.set(row.time, row)\n        })\n        return valueByEntityNameAndTime\n    }\n\n    @imemo get valuesByTime(): Map<Time, JS_TYPE[]> {\n        const map = new Map<Time, JS_TYPE[]>()\n        this.owidRows.forEach((row) => {\n            if (!map.has(row.time)) map.set(row.time, [])\n            map.get(row.time)!.push(row.value)\n        })\n        return map\n    }\n\n    @imemo get valueByTimeAndEntityName(): Map<Time, Map<EntityName, JS_TYPE>> {\n        const valueByTimeAndEntityName = new Map<\n            Time,\n            Map<EntityName, JS_TYPE>\n        >()\n        this.owidRows.forEach((row) => {\n            if (!valueByTimeAndEntityName.has(row.time))\n                valueByTimeAndEntityName.set(row.time, new Map())\n            valueByTimeAndEntityName\n                .get(row.time)!\n                .set(row.entityName, row.value)\n        })\n        return valueByTimeAndEntityName\n    }\n\n    // NOTE: this uses the original times, so any tolerance is effectively unapplied.\n    @imemo get valueByEntityNameAndOriginalTime(): Map<\n        EntityName,\n        Map<Time, JS_TYPE>\n    > {\n        const valueByEntityNameAndTime = new Map<\n            EntityName,\n            Map<Time, JS_TYPE>\n        >()\n        this.owidRows.forEach((row) => {\n            if (!valueByEntityNameAndTime.has(row.entityName))\n                valueByEntityNameAndTime.set(row.entityName, new Map())\n            valueByEntityNameAndTime\n                .get(row.entityName)!\n                .set(row.originalTime, row.value)\n        })\n        return valueByEntityNameAndTime\n    }\n}\n\nexport type CoreColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> = AbstractCoreColumn<any, TABLE_TYPE, DEF_TYPE>\n\nexport class MissingColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractCoreColumn<any, TABLE_TYPE, DEF_TYPE> {\n    jsType = JsTypes.string\n\n    formatValue(): string {\n        return \"\"\n    }\n}\n\nclass StringColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractCoreColumn<string, TABLE_TYPE, DEF_TYPE> {\n    jsType = JsTypes.string\n\n    formatValue(value: unknown): string {\n        return anyToString(value)\n    }\n\n    override parse(val: unknown): any {\n        if (val === null) return ErrorValueTypes.NullButShouldBeString\n        if (val === undefined) return ErrorValueTypes.UndefinedButShouldBeString\n        return String(val) || \"\"\n    }\n}\n\nclass SeriesAnnotationColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends StringColumn<TABLE_TYPE, DEF_TYPE> {}\nclass CategoricalColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends StringColumn<TABLE_TYPE, DEF_TYPE> {}\n\nclass OrdinalColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends CategoricalColumn<TABLE_TYPE, DEF_TYPE> {\n    @imemo get allowedValuesSorted(): string[] | undefined {\n        return this.def.sort\n    }\n\n    @imemo override get sortedUniqNonEmptyStringVals(): string[] {\n        return this.allowedValuesSorted\n            ? this.allowedValuesSorted\n            : super.sortedUniqNonEmptyStringVals\n    }\n}\n\nclass RegionColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends OrdinalColumn<TABLE_TYPE, DEF_TYPE> {}\nclass ContinentColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends RegionColumn<TABLE_TYPE, DEF_TYPE> {}\nclass ColorColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends CategoricalColumn<TABLE_TYPE, DEF_TYPE> {}\n\nclass BooleanColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractCoreColumn<boolean, TABLE_TYPE, DEF_TYPE> {\n    jsType = JsTypes.boolean\n\n    formatValue(value: unknown): \"true\" | \"false\" {\n        return value ? \"true\" : \"false\"\n    }\n\n    override parse(val: unknown): boolean {\n        return !!val\n    }\n}\n\nabstract class AbstractColumnWithNumberFormatting<\n    T extends PrimitiveType,\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractCoreColumn<T, TABLE_TYPE, DEF_TYPE> {\n    jsType = JsTypes.number\n\n    formatValue(value: unknown, options?: TickFormattingOptions): string {\n        if (_.isNumber(value)) {\n            return formatValue(value, {\n                roundingMode: this.roundingMode,\n                numDecimalPlaces: this.numDecimalPlaces,\n                numSignificantFigures: this.numSignificantFigures,\n                ...options,\n            })\n        }\n        return \"\"\n    }\n\n    override formatValueShortWithAbbreviations(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValueShortWithAbbreviations(value, {\n            numberAbbreviation: \"short\",\n            // only include a unit if it's very short (e.g. %, $ or £)\n            ...omitUndefinedValues({\n                unit:\n                    this.shortUnit !== undefined &&\n                    checkIsVeryShortUnit(this.shortUnit)\n                        ? this.shortUnit\n                        : undefined,\n            }),\n            ...options,\n        })\n    }\n\n    override formatValueShort(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValueShort(value, {\n            ...omitUndefinedValues({\n                unit: this.shortUnit,\n            }),\n            ...options,\n        })\n    }\n\n    override formatValueLong(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValueLong(value, {\n            ...omitUndefinedValues({\n                unit: this.unit,\n            }),\n            ...options,\n        })\n    }\n\n    @imemo override get isAllIntegers(): boolean {\n        return this.values.every(\n            (val) => typeof val === \"number\" && val % 1 === 0\n        )\n    }\n}\n\n/**\n * We strive to have clearly typed variables in the future, but for now our\n * grapher variables are still untyped. Most are number-only, but we also have some\n * string-only, and even some mixed ones.\n * Hence, NumberOrStringColumn is used to store grapher variables.\n * It extends AbstractColumnWithNumberFormatting, which ensures that we have\n * implementations of formatValueShortWithAbbreviations and the like already.\n * -- @marcelgerber, 2022-07-01\n */\nclass NumberOrStringColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractColumnWithNumberFormatting<\n    number | string,\n    TABLE_TYPE,\n    DEF_TYPE\n> {\n    override formatValue(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        if (_.isNumber(value)) {\n            return super.formatValue(value, options)\n        }\n        return anyToString(value)\n    }\n    override parse(val: unknown): number | string | ErrorValue {\n        if (val === null) return ErrorValueTypes.NullButShouldBeNumber\n        if (val === undefined) return ErrorValueTypes.UndefinedButShouldBeNumber\n        if (Number.isNaN(val)) return ErrorValueTypes.NaNButShouldBeNumber\n\n        const valAsString = String(val)\n        const num = parseFloat(valAsString)\n        if (Number.isNaN(num)) return valAsString // return string value\n\n        return num\n    }\n}\n\nabstract class AbstractNumericColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractColumnWithNumberFormatting<number, TABLE_TYPE, DEF_TYPE> {\n    override parse(val: unknown): number | ErrorValue {\n        if (val === null) return ErrorValueTypes.NullButShouldBeNumber\n        if (val === undefined) return ErrorValueTypes.UndefinedButShouldBeNumber\n        if (val === \"\") return ErrorValueTypes.BlankButShouldBeNumber\n        if (isNaN(Number(val))) return ErrorValueTypes.NaNButShouldBeNumber\n\n        const res = this._parse(val)\n        if (isNaN(res))\n            return ErrorValueTypes.NotAParseableNumberButShouldBeNumber\n\n        return res\n    }\n\n    protected _parse(val: unknown): number {\n        return parseFloat(String(val))\n    }\n}\n\nclass NumericColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractNumericColumn<TABLE_TYPE, DEF_TYPE> {}\nclass NumericCategoricalColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractNumericColumn<TABLE_TYPE, DEF_TYPE> {}\n\nclass IntegerColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {\n    override formatValue(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValue(value, {\n            numDecimalPlaces: 0,\n            ...options,\n        })\n    }\n\n    protected override _parse(val: unknown): number {\n        return parseInt(String(val))\n    }\n}\n\nclass CurrencyColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {\n    override formatValue(\n        value: unknown,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValue(value, {\n            roundingMode: OwidVariableRoundingMode.decimalPlaces,\n            numDecimalPlaces: 0,\n            unit: this.shortUnit,\n            ...options,\n        })\n    }\n\n    @imemo override get shortUnit(): string {\n        return \"$\"\n    }\n}\n\n// Expects 50% to be 50\nclass PercentageColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {\n    override formatValue(\n        value: number,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValue(value, {\n            unit: this.shortUnit,\n            numDecimalPlaces: 1,\n            ...options,\n        })\n    }\n\n    @imemo override get shortUnit(): string {\n        return \"%\"\n    }\n}\n\n// Same as %, but indicates it's part of a group of columns that add up to 100%.\n// Might not need this.\nclass RelativePercentageColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends PercentageColumn<TABLE_TYPE, DEF_TYPE> {}\n\nclass PercentChangeOverTimeColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends PercentageColumn<TABLE_TYPE, DEF_TYPE> {\n    override formatValue(\n        value: number,\n        options?: TickFormattingOptions\n    ): string {\n        return super.formatValue(value, {\n            showPlus: true,\n            ...options,\n        })\n    }\n}\n\nclass DecimalPercentageColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends PercentageColumn<TABLE_TYPE, DEF_TYPE> {}\nclass RatioColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {}\n\n// todo: remove. should not be in coretable\nclass EntityIdColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericCategoricalColumn<TABLE_TYPE, DEF_TYPE> {}\nclass EntityCodeColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends CategoricalColumn<TABLE_TYPE, DEF_TYPE> {}\nclass EntityNameColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends CategoricalColumn<TABLE_TYPE, DEF_TYPE> {}\n\n// todo: cleanup time columns. current schema is a little incorrect.\nexport abstract class TimeColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends AbstractCoreColumn<number, TABLE_TYPE, DEF_TYPE> {\n    jsType = JsTypes.number\n\n    abstract preposition: string\n\n    @imemo override get displayName(): string {\n        return _.capitalize(this.name)\n    }\n\n    override formatTime(time: number): string {\n        return this.formatValue(time)\n    }\n\n    override parse(val: unknown): number | ErrorValue {\n        return parseInt(String(val))\n    }\n}\n\nclass YearColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends TimeColumn<TABLE_TYPE, DEF_TYPE> {\n    preposition = \"in\"\n\n    formatValue(value: number): string {\n        // Include BCE\n        return formatYear(value)\n    }\n}\n\nclass DayColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends TimeColumn<TABLE_TYPE, DEF_TYPE> {\n    preposition = \"on\"\n\n    // We cache these values because running `formatDay` thousands of times takes some time.\n    static formatValueCache = new Map<number, string>()\n    formatValue(value: number): string {\n        if (!DayColumn.formatValueCache.has(value)) {\n            const formatted = formatDay(value)\n            DayColumn.formatValueCache.set(value, formatted)\n            return formatted\n        }\n        return DayColumn.formatValueCache.get(value)!\n    }\n\n    static formatValueForMobileCache = new Map<number, string>()\n    override formatValueForMobile(value: number): string {\n        if (!DayColumn.formatValueForMobileCache.has(value)) {\n            const formatted = formatDay(value, { format: \"MMM D, 'YY\" })\n            DayColumn.formatValueForMobileCache.set(value, formatted)\n            return formatted\n        }\n        return DayColumn.formatValueForMobileCache.get(value)!\n    }\n\n    static formatForCsvCache = new Map<number, string>()\n    override formatForCsv(value: number): string {\n        if (!DayColumn.formatForCsvCache.has(value)) {\n            const formatted = formatDay(value, { format: \"YYYY-MM-DD\" })\n            DayColumn.formatForCsvCache.set(value, formatted)\n            return formatted\n        }\n        return DayColumn.formatForCsvCache.get(value)!\n    }\n}\n\nconst dateToTimeCache = new Map<string, Time>() // Cache for performance\nclass DateColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends DayColumn<TABLE_TYPE, DEF_TYPE> {\n    override parse(val: unknown): number {\n        // skip parsing if a date is a number, it's already been parsed\n        if (typeof val === \"number\") return val\n        const valAsString = String(val)\n        if (!dateToTimeCache.has(valAsString))\n            dateToTimeCache.set(\n                valAsString,\n                dateDiffInDays(\n                    dayjs.utc(valAsString).toDate(),\n                    dayjs.utc(\"2020-01-21\").toDate()\n                )\n            )\n        return dateToTimeCache.get(valAsString)!\n    }\n}\n\nclass QuarterColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends TimeColumn<TABLE_TYPE, DEF_TYPE> {\n    preposition = \"in\"\n\n    private static regEx = /^([+-]?\\d+)-Q([1-4])$/\n\n    override parse(val: unknown): number | ErrorValue {\n        // skip parsing if a date is a number, it's already been parsed\n        if (typeof val === \"number\") return val\n        if (typeof val === \"string\") {\n            const match = val.match(QuarterColumn.regEx)\n            if (match) {\n                const [, year, quarter] = match\n                return parseInt(year) * 4 + (parseInt(quarter) - 1)\n            }\n        }\n        return ErrorValueTypes.InvalidQuarterValue\n    }\n\n    private static numToQuarter(value: number): number[] {\n        const year = Math.floor(value / 4)\n        const quarter = (Math.abs(value) % 4) + 1\n        return [year, quarter]\n    }\n\n    formatValue(value: number): string {\n        const [year, quarter] = QuarterColumn.numToQuarter(value)\n        return `Q${quarter}/${year}`\n    }\n\n    override formatForCsv(value: number): string {\n        const [year, quarter] = QuarterColumn.numToQuarter(value)\n        return `${year}-Q${quarter}`\n    }\n}\n\nclass PopulationColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends IntegerColumn<TABLE_TYPE, DEF_TYPE> {}\nclass PopulationDensityColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {}\n\nclass AgeColumn<\n    TABLE_TYPE extends CoreTable = CoreTable,\n    DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> extends NumericColumn<TABLE_TYPE, DEF_TYPE> {}\n\nexport const ColumnTypeMap = {\n    String: StringColumn,\n    SeriesAnnotation: SeriesAnnotationColumn,\n    Categorical: CategoricalColumn,\n    Ordinal: OrdinalColumn,\n    Region: RegionColumn,\n    Continent: ContinentColumn,\n    NumberOrString: NumberOrStringColumn,\n    Numeric: NumericColumn,\n    Day: DayColumn,\n    Date: DateColumn,\n    Year: YearColumn,\n    Quarter: QuarterColumn,\n    Time: TimeColumn,\n    Boolean: BooleanColumn,\n    Currency: CurrencyColumn,\n    Percentage: PercentageColumn,\n    RelativePercentage: RelativePercentageColumn,\n    Integer: IntegerColumn,\n    DecimalPercentage: DecimalPercentageColumn,\n    PercentChangeOverTime: PercentChangeOverTimeColumn,\n    Ratio: RatioColumn,\n    Color: ColorColumn,\n    EntityCode: EntityCodeColumn,\n    EntityId: EntityIdColumn,\n    EntityName: EntityNameColumn,\n    Population: PopulationColumn,\n    PopulationDensity: PopulationDensityColumn,\n    Age: AgeColumn,\n}\n\n// Keep this in. This is used as a compile-time check that ColumnTypeMap covers all\n// column names defined in ColumnTypeNames, since that is quite difficult to ensure\n// otherwise without losing inferred type information.\n\nconst _ColumnTypeMap: {\n    [key in ColumnTypeNames]: unknown\n} = ColumnTypeMap\n","/* @license\nPapa Parse\nv5.5.3\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n((e,t)=>{\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()})(this,function r(){var n=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n?n:{};var d,s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,v={};function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0<i){let e=this._config.newline;e||(r=this._config.quoteChar||'\"',e=this._handle.guessLineEndings(t,r)),t=[...t.split(e).slice(i)].join(e)}this.isFirstChunk&&U(this._config.beforeFirstChunk)&&void 0!==(r=this._config.beforeFirstChunk(t))&&(t=r),this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+t,r=(this._partialLine=\"\",this._handle.parse(i,this._baseIndex,!this._finished));if(!this._handle.paused()&&!this._handle.aborted()){t=r.meta.cursor,i=(this._finished||(this._partialLine=i.substring(t-this._baseIndex),this._baseIndex=t),r&&r.data&&(this._rowCount+=r.data.length),this._finished||this._config.preview&&this._rowCount>=this._config.preview);if(a)n.postMessage({results:r,workerId:v.WORKER_ID,finished:i});else if(U(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!U(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){U(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function f(e){var r;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!s),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader(\"Content-Range\"))?parseInt(e.substring(e.lastIndexOf(\"/\")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),u.call(this,e);var i,r,n=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=y(this._chunkLoaded,this),i.onerror=y(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input,t=(this._config.chunkSize&&(t=Math.min(this._start+this._config.chunkSize,this._input.size),e=r.call(e,this._start,t)),i.readAsText(e,this._config.encoding));n||this._chunkLoaded({target:{result:t}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function c(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,\"\"),this._finished=!i,this.parseChunk(t)}}function p(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,d=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,i=this,r=0,f=0,l=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(p&&a&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+v.DefaultDelimiter+\"'\"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),_()){if(p)if(Array.isArray(p.data[0])){for(var e=0;_()&&e<p.data.length;e++)p.data[e].forEach(t);p.data.splice(0,1)}else p.data.forEach(t);function t(e,t){U(m.transformHeader)&&(e=m.transformHeader(e,t)),c.push(e)}}function i(e,t){for(var i=m.header?{}:[],r=0;r<e.length;r++){var n=r,s=e[r],s=((e,t)=>(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h<e&&e<o)return 1}})(t)?parseFloat(t):d.test(t)?new Date(t):\"\"===t?null:t):t)(n=m.header?r>=c.length?\"__parsed_extra\":c[r]:n,s=m.transform?m.transform(s,n):s);\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+c.length+\" fields but parsed \"+r,f+t):r<c.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+c.length+\" fields but parsed \"+r,f+t)),i}var r;p&&(m.header||m.dynamicTyping||m.transform)&&(r=1,!p.data.length||Array.isArray(p.data[0])?(p.data=p.data.map(i),r=p.data.length):p.data=i(p.data,0),m.header&&p.meta&&(p.meta.fields=c),f+=r)}function _(){return m.header&&0===c.length}function k(e,t,i,r){e={type:e,code:t,message:i};void 0!==r&&(e.row=r),p.errors.push(e)}U(m.step)&&(t=m.step,m.step=function(e){p=e,_()?g():(g(),0!==p.data.length&&(r+=e.data.length,m.preview&&r>m.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'\"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?U(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",v.RECORD_SEP,v.UNIT_SEP];for(var u=0;u<n.length;u++){for(var d,f=n[u],l=0,c=0,p=0,g=(o=void 0,new E({comments:r,delimiter:f,newline:t,preview:10}).parse(e)),_=0;_<g.data.length;_++)i&&y(g.data[_])?p++:(d=g.data[_].length,c+=d,void 0===o?o=d:0<d&&(l+=Math.abs(d-o),o=d));0<g.data.length&&(c/=g.data.length-p),(void 0===a||l<=a)&&(void 0===h||h<c)&&1.99<c&&(a=l,s=f,h=c)}return{successful:!!(m.delimiter=s),bestDelimiter:s}})(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess)).successful?m.delimiter=r.bestDelimiter:(a=!0,m.delimiter=v.DefaultDelimiter),p.meta.delimiter=m.delimiter),b(m));return m.preview&&m.header&&r.preview++,n=e,s=new E(r),p=s.parse(n,t,i),g(),l?{meta:{paused:!0}}:p||{meta:{paused:!1}}},this.paused=function(){return l},this.pause=function(){l=!0,s.abort(),n=U(m.chunk)?\"\":n.substring(s.getCharIndex())},this.resume=function(){i.streamer._halted?(l=!1,i.streamer.parseChunk(n,!0)):setTimeout(i.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,s.abort(),p.meta.aborted=!0,U(m.complete)&&m.complete(p),n=\"\"},this.guessLineEndings=function(e,t){e=e.substring(0,1048576);var t=new RegExp(P(t)+\"([^]*?)\"+P(t),\"gm\"),i=(e=e.replace(t,\"\")).split(\"\\r\"),t=e.split(\"\\n\"),e=1<t.length&&t[0].length<i[0].length;if(1===i.length||e)return\"\\n\";for(var r=0,n=0;n<i.length;n++)\"\\n\"===i[n][0]&&r++;return r>=i.length/2?\"\\r\\n\":\"\\r\"}}function P(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,I=C.step,A=C.preview,T=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'\"':C.quoteChar,j=F;if(void 0!==C.escapeChar&&(j=C.escapeChar),(\"string\"!=typeof S||-1<v.BAD_DELIMITERS.indexOf(S))&&(S=\",\"),x===S)throw new Error(\"Comment character same as delimiter\");!0===x?x=\"#\":(\"string\"!=typeof x||-1<v.BAD_DELIMITERS.indexOf(x))&&(x=!1),\"\\n\"!==O&&\"\\r\"!==O&&\"\\r\\n\"!==O&&(O=\"\\n\");var z=0,M=!1;this.parse=function(i,t,r){if(\"string\"!=typeof i)throw new Error(\"Input must be a string\");var n=i.length,e=S.length,s=O.length,a=x.length,o=U(I),h=[],u=[],d=[],f=z=0;if(!i)return w();if(T||!1!==T&&-1===i.indexOf(F)){for(var l=i.split(O),c=0;c<l.length;c++){if(d=l[c],z+=d.length,c!==l.length-1)z+=O.length;else if(r)return w();if(!x||d.substring(0,a)!==x){if(o){if(h=[],k(d.split(S)),R(),M)return w()}else k(d.split(S));if(A&&A<=c)return h=h.slice(0,A),w(!0)}}return w()}for(var p=i.indexOf(S,z),g=i.indexOf(O,z),_=new RegExp(P(j)+P(F),\"g\"),m=i.indexOf(F,z);;)if(i[z]===F)for(m=z,z++;;){if(-1===(m=i.indexOf(F,m+1)))return r||u.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:h.length,index:z}),E();if(m===n-1)return E(i.substring(z,m).replace(_,F));if(F===j&&i[m+1]===j)m++;else if(F===j||0===m||i[m-1]!==j){-1!==p&&p<m+1&&(p=i.indexOf(S,m+1));var y=v(-1===(g=-1!==g&&g<m+1?i.indexOf(O,m+1):g)?p:Math.min(p,g));if(i.substr(m+1+y,e)===S){d.push(i.substring(z,m).replace(_,F)),i[z=m+1+y+e]!==F&&(m=i.indexOf(F,z)),p=i.indexOf(S,z),g=i.indexOf(O,z);break}y=v(g);if(i.substring(m+1+y,m+1+y+s)===O){if(d.push(i.substring(z,m).replace(_,F)),b(m+1+y+s),p=i.indexOf(S,z),m=i.indexOf(F,z),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:z}),m++}}else if(x&&0===d.length&&i.substring(z,z+a)===x){if(-1===g)return w();z=g+s,g=i.indexOf(O,z),p=i.indexOf(S,z)}else if(-1!==p&&(p<g||-1===g))d.push(i.substring(z,p)),z=p+e,p=i.indexOf(S,z);else{if(-1===g)break;if(d.push(i.substring(z,g)),b(g+s),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0)}return E();function k(e){h.push(e),f=z}function v(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&\"\"===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(z)),d.push(e),z=n,k(d),o&&R()),w()}function b(e){z=e,k(d),d=[],g=i.indexOf(O,z)}function w(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a=Object.create(null),o=new Set(s);let n=!1;for(let r=0;r<s.length;r++){let i=s[r];if(a[i=U(C.transformHeader)?C.transformHeader(i,r):i]){let e,t=a[i];for(;e=i+\"_\"+t,t++,o.has(e););o.add(e),s[r]=e,a[i]++,n=!0,(D=null===D?{}:D)[e]=i}else a[i]=1,s[r]=i;o.add(i)}n&&console.warn(\"Duplicate headers found and renamed.\"),L=!0}return{data:h,errors:u,meta:{delimiter:S,linebreak:O,aborted:M,truncated:!!e,cursor:f+(t||0),renamedHeaders:D}}}function R(){I(w()),h=[],u=[]}},this.abort=function(){M=!0},this.getCharIndex=function(){return z}}function g(e){var t=e.data,i=o[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,_(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:m,resume:m};if(U(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!r);s++);delete t.results}else U(i.userChunk)&&(i.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!r&&_(t.workerId,t.results)}function _(e,t){var i=o[e];U(i.userComplete)&&i.userComplete(t),i.terminate(),delete o[e]}function m(){throw new Error(\"Not implemented.\")}function b(e){if(\"object\"!=typeof e||null===e)return e;var t,i=Array.isArray(e)?[]:{};for(t in e)i[t]=b(e[t]);return i}function y(e,t){return function(){e.apply(t,arguments)}}function U(e){return\"function\"==typeof e}return v.parse=function(e,t){var i=(t=t||{}).dynamicTyping||!1;U(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!U(t.transform)&&t.transform,!t.worker||!v.WORKERS_SUPPORTED)return i=null,v.NODE_STREAM_INPUT,\"string\"==typeof e?(e=(e=>65279!==e.charCodeAt(0)?e:e.slice(1))(e),i=new(t.download?f:c)(t)):!0===e.readable&&U(e.read)&&U(e.on)?i=new p(t):(n.File&&e instanceof File||e instanceof Object)&&(i=new l(t)),i.stream(e);(i=(()=>{var e;return!!v.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return v.BLOB_URL||(v.BLOB_URL=e.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",t,\")();\"],{type:\"text/javascript\"})))})(),(e=new n.Worker(e)).onmessage=g,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=U(t.step),t.chunk=U(t.chunk),t.complete=U(t.complete),t.error=U(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},v.unparse=function(e,t){var n=!1,_=!0,m=\",\",y=\"\\r\\n\",s='\"',a=s+s,i=!1,r=null,o=!1,h=((()=>{if(\"object\"==typeof t){if(\"string\"!=typeof t.delimiter||v.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),\"boolean\"!=typeof t.quotes&&\"function\"!=typeof t.quotes&&!Array.isArray(t.quotes)||(n=t.quotes),\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),\"string\"==typeof t.newline&&(y=t.newline),\"string\"==typeof t.quoteChar&&(s=t.quoteChar),\"boolean\"==typeof t.header&&(_=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s),t.escapeFormulae instanceof RegExp?o=t.escapeFormulae:\"boolean\"==typeof t.escapeFormulae&&t.escapeFormulae&&(o=/^[=+\\-@\\t\\r].*$/)}})(),new RegExp(P(s),\"g\"));\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if(\"object\"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function u(e,t,i){var r=\"\",n=(\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0<e.length),s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(r+=m),r+=k(e[a],a);0<t.length&&(r+=y)}for(var o=0;o<t.length;o++){var h=(n?e:t[o]).length,u=!1,d=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u=\"greedy\"===i?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===i&&n){for(var f=[],l=0;l<h;l++){var c=s?e[l]:l;f.push(t[o][c])}u=\"\"===f.join(\"\").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!d&&(r+=m);var g=n&&s?e[p]:p;r+=k(t[o][g],p)}o<t.length-1&&(!i||0<h&&!d)&&(r+=y)}}return r}function k(e,t){var i,r;return null==e?\"\":e.constructor===Date?JSON.stringify(e).slice(1,25):(r=!1,o&&\"string\"==typeof e&&o.test(e)&&(e=\"'\"+e,r=!0),i=e.toString().replace(h,a),(r=r||!0===n||\"function\"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||((e,t)=>{for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1})(i,v.BAD_DELIMITERS)||-1<i.indexOf(m)||\" \"===i.charAt(0)||\" \"===i.charAt(i.length-1))?s+i+s:i)}},v.RECORD_SEP=String.fromCharCode(30),v.UNIT_SEP=String.fromCharCode(31),v.BYTE_ORDER_MARK=\"\\ufeff\",v.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',v.BYTE_ORDER_MARK],v.WORKERS_SUPPORTED=!s&&!!n.Worker,v.NODE_STREAM_INPUT=1,v.LocalChunkSize=10485760,v.RemoteChunkSize=5242880,v.DefaultDelimiter=\",\",v.Parser=E,v.ParserHandle=i,v.NetworkStreamer=f,v.FileStreamer=l,v.StringStreamer=c,v.ReadableStreamStreamer=p,n.jQuery&&((d=n.jQuery).fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&n.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0===h.length)U(o.complete)&&o.complete();else{var e,t,i,r,n=h[0];if(U(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,i=n.inputElem,r=s.reason,void(U(o.error)&&o.error({name:e},t,i,r));if(\"skip\"===s.action)return void u();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void u()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){U(a)&&a(e,n.file,n.inputElem),u()},v.parse(n.file,n.instanceConfig)}}function u(){h.splice(0,1),e()}}),a&&(n.onmessage=function(e){e=e.data;void 0===v.WORKER_ID&&e&&(v.WORKER_ID=e.workerId);\"string\"==typeof e.input?n.postMessage({workerId:v.WORKER_ID,results:v.parse(e.input,e.config),finished:!0}):(n.File&&e.input instanceof File||e.input instanceof Object)&&(e=v.parse(e.input,e.config))&&n.postMessage({workerId:v.WORKER_ID,results:e,finished:!0})}),(f.prototype=Object.create(u.prototype)).constructor=f,(l.prototype=Object.create(u.prototype)).constructor=l,(c.prototype=Object.create(c.prototype)).constructor=c,(p.prototype=Object.create(u.prototype)).constructor=p,v});","import * as _ from \"lodash-es\"\nimport * as Papa from \"papaparse\"\nimport * as R from \"remeda\"\nimport { sampleFrom, slugifySameCase, ColumnSlug } from \"@ourworldindata/utils\"\nimport {\n    CoreColumnStore,\n    CoreRow,\n    CoreMatrix,\n    Time,\n    CoreValueType,\n    ColumnTypeNames,\n    CoreColumnDef,\n    ErrorValue,\n    OwidEntityCodeColumnDef,\n    OwidEntityIdColumnDef,\n    OwidEntityNameColumnDef,\n    OwidTableSlugs,\n} from \"@ourworldindata/types\"\nimport { ErrorValueTypes, DroppedForTesting } from \"./ErrorValues.js\"\n\nexport const columnStoreToRows = (\n    columnStore: CoreColumnStore\n): Record<string, CoreValueType>[] => {\n    const firstCol = Object.values(columnStore)[0]\n    if (!firstCol) return []\n    const slugs = Object.keys(columnStore)\n    return firstCol.map((val, index) => {\n        const newRow: Record<string, CoreValueType> = {}\n        slugs.forEach((slug) => {\n            newRow[slug] = columnStore[slug][index]\n        })\n        return newRow\n    })\n}\n\n// If string exceeds maxLength, will replace the end char with a ... and drop the rest\nexport const truncate = (str: string, maxLength: number): string =>\n    str.length > maxLength ? `${str.substr(0, maxLength - 3)}...` : str\n\n// Picks a type for each column from the first row then autotypes all rows after that so all values in\n// a column will have the same type. Only chooses between strings and numbers.\nconst numberOnly = /^-?\\d+\\.?\\d*$/\ntype RawRow = Record<string, unknown> | undefined\ntype ParsedRow = Record<string, string | number | ErrorValue> | undefined | null\nexport const makeAutoTypeFn = (\n    numericSlugs?: ColumnSlug[]\n): ((object?: RawRow) => ParsedRow) => {\n    const slugToType: any = {}\n    numericSlugs?.forEach((slug) => {\n        slugToType[slug] = \"number\"\n    })\n    return (object: RawRow): ParsedRow => {\n        for (const columnSlug in object) {\n            const value = object[columnSlug]\n            const type = slugToType[columnSlug]\n            if (type === \"string\") {\n                object[columnSlug] = value\n                continue\n            }\n\n            const number = parseFloat(value as string) // The \"+\" type casting that d3 does for perf converts \"\" to 0, so use parseFloat.\n            if (type === \"number\") {\n                object[columnSlug] = isNaN(number)\n                    ? ErrorValueTypes.NaNButShouldBeNumber\n                    : number\n                continue\n            }\n\n            if (isNaN(number) || !numberOnly.test(value as string)) {\n                object[columnSlug] = value\n                slugToType[columnSlug] = \"string\"\n                continue\n            }\n\n            object[columnSlug] = number\n            slugToType[columnSlug] = \"number\"\n        }\n        return object as ParsedRow\n    }\n}\n\n// Removes whitespace and non-word characters from column slugs if any exist.\n// The original names are moved to the name property on the column def.\nexport const standardizeSlugs = (\n    rows: CoreRow[]\n): { rows: CoreRow[]; defs: { name: string; slug: string }[] } | undefined => {\n    const firstRow = rows[0] ?? {}\n    const colsToRename = Object.keys(firstRow)\n        .map((name) => {\n            return {\n                name,\n                slug: slugifySameCase(name),\n            }\n        })\n        .filter((col) => col.name !== col.slug)\n    if (!colsToRename.length) return undefined\n\n    rows.forEach((row: CoreRow) => {\n        colsToRename.forEach((col) => {\n            row[col.slug] = row[col.name]\n            delete row[col.name]\n        })\n    })\n\n    return { rows, defs: colsToRename }\n}\n\nexport const guessColumnDefFromSlugAndRow = (\n    slug: string,\n    sampleValue: unknown\n): CoreColumnDef => {\n    const valueType = typeof sampleValue\n\n    const name = slug\n\n    if (slug === \"Entity\")\n        return {\n            slug,\n            type: ColumnTypeNames.EntityName,\n            name,\n        }\n\n    if (slug === \"day\")\n        return {\n            slug,\n            type: ColumnTypeNames.Day,\n            name: \"Day\",\n        }\n\n    if (slug === \"year\" || slug === \"Year\")\n        return {\n            slug,\n            type: ColumnTypeNames.Year,\n            name: \"Year\",\n        }\n\n    if (slug === OwidTableSlugs.entityName) return OwidEntityNameColumnDef\n    if (slug === OwidTableSlugs.entityCode) return OwidEntityCodeColumnDef\n    if (slug === OwidTableSlugs.entityId) return OwidEntityIdColumnDef\n\n    if (slug === \"date\")\n        return {\n            slug,\n            type: ColumnTypeNames.Date,\n            name: \"Date\",\n        }\n\n    if (valueType === \"number\")\n        return {\n            slug,\n            type: ColumnTypeNames.Numeric,\n            name,\n        }\n\n    if (valueType === \"string\") {\n        if (String(sampleValue).match(/^\\d+$/))\n            return {\n                slug,\n                type: ColumnTypeNames.Numeric,\n                name,\n            }\n    }\n\n    return { slug, type: ColumnTypeNames.String, name }\n}\n\nexport const makeRowFromColumnStore = (\n    rowIndex: number,\n    columnStore: CoreColumnStore\n): CoreRow => {\n    const row: CoreRow = {}\n    Object.entries(columnStore).forEach(([slug, col]) => {\n        if (col.length <= rowIndex) row[slug] = undefined\n        else row[slug] = col[rowIndex]\n    })\n    return row\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface, @typescript-eslint/no-empty-object-type\nexport interface InterpolationContext {}\n\nexport interface LinearInterpolationContext extends InterpolationContext {\n    // whether to extrapolate a variable at the start or end, where we cannot do linear interpolation\n    // but need to just copy over the first/last value present over to empty fields.\n    // e.g. [Error, Error, 2, 3, 4] would become [2, 2, 2, 3, 4] with extrapolateAtStart=true.\n    extrapolateAtStart?: boolean\n    extrapolateAtEnd?: boolean\n}\n\nexport interface ToleranceInterpolationContext extends InterpolationContext {\n    timeToleranceForwards: number\n    timeToleranceBackwards: number\n}\n\nexport type InterpolationProvider<C extends InterpolationContext> = (\n    valuesSortedByTimeAsc: CoreValueType[],\n    timesAsc: Time[],\n    validIndices: number[],\n    context: C,\n    start: number,\n    end: number\n) => void\n\nexport function linearInterpolation(\n    valuesSortedByTimeAsc: CoreValueType[],\n    timesAsc: Time[],\n    validIndices: number[],\n    context: LinearInterpolationContext,\n    start: number = 0,\n    end: number = valuesSortedByTimeAsc.length\n): void {\n    if (!valuesSortedByTimeAsc.length) return\n\n    const startIndexInValidIndices = R.sortedIndex(validIndices, start)\n    const endIndexInValidIndices = R.sortedIndex(validIndices, end)\n\n    const distBetweenStartAndEnd =\n        endIndexInValidIndices - startIndexInValidIndices\n\n    if (distBetweenStartAndEnd === 0) {\n        // No valid values in this range, we can short-circuit\n        for (let index = start; index < end; index++) {\n            valuesSortedByTimeAsc[index] =\n                ErrorValueTypes.NoValueForInterpolation\n        }\n        return\n    }\n    // All values in this range are already valid, we don't need to do anything\n    else if (distBetweenStartAndEnd === end - start) {\n        return\n    }\n\n    let currentValidIndexPointer = startIndexInValidIndices\n    let prevNonBlankIndex: number | undefined = undefined\n    let nextNonBlankIndex: number | undefined = undefined\n\n    for (let index = start; index < end; index++) {\n        if (\n            nextNonBlankIndex !== -1 &&\n            (nextNonBlankIndex === undefined || nextNonBlankIndex <= index)\n        ) {\n            nextNonBlankIndex = validIndices[currentValidIndexPointer] ?? -1\n            if (nextNonBlankIndex >= end) {\n                nextNonBlankIndex = -1\n            }\n        }\n\n        // Check whether the current index has a valid value\n        if (index === nextNonBlankIndex) {\n            prevNonBlankIndex = index\n            currentValidIndexPointer++\n            continue\n        }\n\n        const timeOfCurrent = timesAsc[index]\n\n        const timeOfPrevIndex =\n            prevNonBlankIndex !== undefined\n                ? (timesAsc[prevNonBlankIndex] ?? -Infinity)\n                : -Infinity\n        const timeOfNextIndex = timesAsc[nextNonBlankIndex] ?? Infinity\n\n        const prevValue: number | undefined =\n            prevNonBlankIndex !== undefined\n                ? (valuesSortedByTimeAsc[prevNonBlankIndex] as\n                      | number\n                      | undefined)\n                : undefined\n        const nextValue: number | undefined = valuesSortedByTimeAsc[\n            nextNonBlankIndex\n        ] as number | undefined\n\n        let value\n        if (typeof prevValue === \"number\" && typeof nextValue === \"number\") {\n            const distLeft = timeOfCurrent - timeOfPrevIndex\n            const distRight = timeOfNextIndex - timeOfCurrent\n            value =\n                (prevValue * distRight + nextValue * distLeft) /\n                (distLeft + distRight)\n        } else if (typeof prevValue === \"number\" && context.extrapolateAtEnd)\n            value = prevValue\n        else if (typeof nextValue === \"number\" && context.extrapolateAtStart)\n            value = nextValue\n        else value = ErrorValueTypes.NoValueForInterpolation\n\n        valuesSortedByTimeAsc[index] = value\n    }\n}\n\nexport function toleranceInterpolation(\n    valuesSortedByTimeAsc: CoreValueType[],\n    timesAsc: Time[],\n    validIndices: number[],\n    context: ToleranceInterpolationContext,\n    start: number = 0,\n    end: number = valuesSortedByTimeAsc.length\n): void {\n    if (!valuesSortedByTimeAsc.length) return\n\n    // `validIndices` contains the indexes of all non-error values in `valuesSortedByTimeAsc`.\n    // Here, we find the *indexes* of where `start` and `end` appear in `validIndices` (note that\n    // `start` and `end` themselves are indexes into `valuesSortedByTimeAsc`).\n    const startIndexInValidIndices = R.sortedIndex(validIndices, start)\n    const endIndexInValidIndices = R.sortedIndex(validIndices, end)\n\n    const distBetweenStartAndEnd =\n        endIndexInValidIndices - startIndexInValidIndices\n\n    // If the two indices are the same, then there are no valid values in this range.\n    if (distBetweenStartAndEnd === 0) {\n        // No valid values in this range, we can short-circuit\n        for (let index = start; index < end; index++) {\n            valuesSortedByTimeAsc[index] =\n                ErrorValueTypes.NoValueWithinTolerance\n        }\n        return\n    }\n    // All values in this range are valid, we can short-circuit\n    else if (distBetweenStartAndEnd === end - start) {\n        return\n    }\n    // If the two indices differ by 1, then there is only one valid value in this range.\n    else if (distBetweenStartAndEnd === 1) {\n        // Only one valid value in this range, we can short-circuit\n        const onlyValidIndex = validIndices[startIndexInValidIndices]\n        const timeOfOnlyValid = timesAsc[onlyValidIndex]\n\n        for (let index = start; index < end; index++) {\n            if (index === onlyValidIndex) continue\n\n            const timeOfCurrent = timesAsc[index]\n            const timeDiff = timeOfOnlyValid - timeOfCurrent\n            if (\n                (timeDiff < 0 &&\n                    Math.abs(timeDiff) <= context.timeToleranceBackwards) ||\n                (timeDiff > 0 &&\n                    Math.abs(timeDiff) <= context.timeToleranceForwards)\n            ) {\n                valuesSortedByTimeAsc[index] =\n                    valuesSortedByTimeAsc[onlyValidIndex]\n                timesAsc[index] = timeOfOnlyValid\n            } else {\n                valuesSortedByTimeAsc[index] =\n                    ErrorValueTypes.NoValueWithinTolerance\n            }\n        }\n        return\n    }\n\n    let currentValidIndexPointer = startIndexInValidIndices\n    let prevNonBlankIndex: number | undefined = undefined\n    let nextNonBlankIndex: number | undefined = undefined\n\n    for (let index = start; index < end; index++) {\n        if (\n            nextNonBlankIndex !== -1 &&\n            (nextNonBlankIndex === undefined || nextNonBlankIndex <= index)\n        ) {\n            nextNonBlankIndex = validIndices[currentValidIndexPointer] ?? -1\n            if (nextNonBlankIndex >= end) {\n                nextNonBlankIndex = -1\n            }\n        }\n\n        // Check whether the current index has a valid value\n        if (index === nextNonBlankIndex) {\n            prevNonBlankIndex = index\n            currentValidIndexPointer++\n            continue\n        }\n\n        const timeOfCurrent = timesAsc[index]\n\n        const timeOfPrevIndex =\n            prevNonBlankIndex !== undefined\n                ? (timesAsc[prevNonBlankIndex] ?? -Infinity)\n                : -Infinity\n        const timeOfNextIndex = timesAsc[nextNonBlankIndex] ?? Infinity\n\n        const prevTimeDiff = timeOfCurrent - timeOfPrevIndex\n        const nextTimeDiff = timeOfNextIndex - timeOfCurrent\n\n        if (\n            nextNonBlankIndex !== undefined &&\n            nextNonBlankIndex !== -1 &&\n            nextTimeDiff <= prevTimeDiff &&\n            nextTimeDiff <= context.timeToleranceForwards\n        ) {\n            valuesSortedByTimeAsc[index] =\n                valuesSortedByTimeAsc[nextNonBlankIndex]\n            timesAsc[index] = timesAsc[nextNonBlankIndex]\n        } else if (\n            prevNonBlankIndex !== undefined &&\n            prevTimeDiff <= context.timeToleranceBackwards\n        ) {\n            valuesSortedByTimeAsc[index] =\n                valuesSortedByTimeAsc[prevNonBlankIndex]\n            timesAsc[index] = timesAsc[prevNonBlankIndex]\n        } else\n            valuesSortedByTimeAsc[index] =\n                ErrorValueTypes.NoValueWithinTolerance\n    }\n}\n\n// A dumb function for making a function that makes a key for a row given certain columns.\nexport const makeKeyFn = (\n    columnStore: CoreColumnStore,\n    columnSlugs: ColumnSlug[]\n): ((rowIndex: number) => string) => {\n    const cols = columnSlugs.map((slug) => columnStore[slug])\n\n    const toStr = (val: CoreValueType): string =>\n        val === null || val === undefined\n            ? \"\"\n            : typeof val === \"string\"\n              ? val\n              : (val as any) + \"\"\n\n    // perf: this function is performance-critical, and so for the common cases of 1, 2, or 3 columns, we can provide a\n    // faster implementation.\n    if (cols.length === 0) return () => \"\"\n    if (cols.length === 1) {\n        const col = cols[0]\n        return (rowIndex: number): string => toStr(col[rowIndex])\n    }\n    if (cols.length === 2) {\n        const col0 = cols[0],\n            col1 = cols[1]\n        return (rowIndex: number): string =>\n            `${toStr(col0[rowIndex])} ${toStr(col1[rowIndex])}`\n    }\n    if (cols.length === 3) {\n        const col0 = cols[0],\n            col1 = cols[1],\n            col2 = cols[2]\n        return (rowIndex: number): string =>\n            `${toStr(col0[rowIndex])} ${toStr(col1[rowIndex])} ${toStr(\n                col2[rowIndex]\n            )}`\n    }\n\n    return (rowIndex: number): string =>\n        // toString() handles `undefined` and `null` values, which can be in the table.\n        cols.map((col) => toStr(col[rowIndex])).join(\" \")\n}\n\nconst getColumnStoreLength = (store: CoreColumnStore): number => {\n    return _.max(Object.values(store).map((v) => v.length)) ?? 0\n}\n\nexport const concatColumnStores = (\n    stores: CoreColumnStore[],\n    slugsToKeep?: ColumnSlug[]\n): CoreColumnStore => {\n    if (!stores.length) return {}\n\n    const lengths = stores.map(getColumnStoreLength)\n    const slugs = slugsToKeep ?? Object.keys(R.first(stores)!)\n\n    const newColumnStore: CoreColumnStore = {}\n\n    // The below code is performance-critical.\n    // That's why it's written using for loops and mutable arrays rather than using map or flatMap:\n    // To this day, that's still faster in JS.\n    slugs.forEach((slug) => {\n        let newColumnValues: CoreValueType[] = []\n        for (const [i, store] of stores.entries()) {\n            const values = store[slug] ?? []\n            const toFill = Math.max(0, lengths[i] - values.length)\n\n            newColumnValues = newColumnValues.concat(values)\n            if (toFill > 0) {\n                newColumnValues = newColumnValues.concat(\n                    new Array(toFill).fill(\n                        ErrorValueTypes.MissingValuePlaceholder\n                    )\n                )\n            }\n        }\n        newColumnStore[slug] = newColumnValues\n    })\n    return newColumnStore\n}\n\nexport const rowsToColumnStore = (rows: CoreRow[]): CoreColumnStore => {\n    const columnsObject: CoreColumnStore = {}\n    if (!rows.length) return columnsObject\n\n    Object.keys(rows[0]).forEach((slug) => {\n        columnsObject[slug] = rows.map((row) => row[slug])\n    })\n    return columnsObject\n}\n\nconst guessColumnDefsFromRows = (\n    rows: CoreRow[],\n    definedSlugs: Map<ColumnSlug, any>\n): CoreColumnDef[] => {\n    if (!rows[0]) return []\n    return Object.keys(rows[0])\n        .filter((slug) => !definedSlugs.has(slug))\n        .map((slug) => {\n            const firstRowWithValue = rows.find(\n                (row) =>\n                    row[slug] !== undefined &&\n                    row[slug] !== null &&\n                    row[slug] !== \"\"\n            )\n            const firstValue = firstRowWithValue\n                ? firstRowWithValue[slug]\n                : undefined\n\n            return guessColumnDefFromSlugAndRow(slug, firstValue)\n        })\n}\n\nexport const autodetectColumnDefs = (\n    rowsOrColumnStore: CoreColumnStore | CoreRow[],\n    definedSlugs: Map<ColumnSlug, any>\n): CoreColumnDef[] => {\n    if (!Array.isArray(rowsOrColumnStore)) {\n        const columnStore = rowsOrColumnStore\n        return Object.keys(columnStore)\n            .filter((slug) => !definedSlugs.has(slug))\n            .map((slug) => {\n                return guessColumnDefFromSlugAndRow(\n                    slug,\n                    columnStore[slug].find(\n                        (val) => val !== undefined && val !== null\n                    )\n                )\n            })\n    }\n    return guessColumnDefsFromRows(rowsOrColumnStore, definedSlugs)\n}\n\n// Convenience method when you are replacing columns\nexport const replaceDef = <ColumnDef extends CoreColumnDef>(\n    defs: ColumnDef[],\n    newDefs: ColumnDef[]\n): ColumnDef[] =>\n    defs.map((def) => {\n        const newDef = newDefs.find((newDef) => newDef.slug === def.slug)\n        return newDef ?? def\n    })\n\nexport const renameColumnStore = (\n    columnStore: CoreColumnStore,\n    columnRenameMap: { [columnSlug: string]: ColumnSlug }\n): CoreColumnStore => {\n    const newStore: CoreColumnStore = {}\n    Object.keys(columnStore).forEach((slug) => {\n        if (columnRenameMap[slug])\n            newStore[columnRenameMap[slug]] = columnStore[slug]\n        else newStore[slug] = columnStore[slug]\n    })\n    return newStore\n}\n\n// Returns a Set of random indexes to drop in an array, preserving the order of the array\nexport const getDropIndexes = (\n    arrayLength: number,\n    howMany: number,\n    seed = Date.now()\n): Set<number> => new Set(sampleFrom(_.range(0, arrayLength), howMany, seed))\n\nexport const replaceRandomCellsInColumnStore = (\n    columnStore: CoreColumnStore,\n    howMany = 1,\n    columnSlugs: ColumnSlug[] = [],\n    seed = Date.now(),\n    replacementGenerator: () => any = (): DroppedForTesting =>\n        ErrorValueTypes.DroppedForTesting\n): CoreColumnStore => {\n    const newStore: CoreColumnStore = Object.assign({}, columnStore)\n    columnSlugs.forEach((slug) => {\n        const values = newStore[slug]\n        const indexesToDrop = getDropIndexes(values.length, howMany, seed)\n        newStore[slug] = values.map((value, index) =>\n            indexesToDrop.has(index) ? replacementGenerator() : value\n        )\n    })\n    return newStore\n}\n\nexport class Timer {\n    constructor() {\n        this._tickTime = Date.now()\n        this._firstTickTime = this._tickTime\n    }\n\n    private _tickTime: number\n    private _firstTickTime: number\n\n    tick(msg?: string): number {\n        const elapsed = Date.now() - this._tickTime\n        // eslint-disable-next-line no-console\n        if (msg) console.log(`${elapsed}ms ${msg}`)\n        this._tickTime = Date.now()\n        return elapsed\n    }\n\n    getTotalElapsedTime(): number {\n        return Date.now() - this._firstTickTime\n    }\n}\n\nexport const rowsFromMatrix = (matrix: CoreMatrix): any[] => {\n    const table = trimMatrix(matrix)\n    const header = table[0]\n    return table.slice(1).map((row) => {\n        const newRow: any = {}\n        header.forEach((col, index) => {\n            newRow[col] = row[index]\n        })\n        return newRow\n    })\n}\n\nconst trimEmptyColumns = (matrix: CoreMatrix): CoreMatrix =>\n    matrix.map(trimArray)\nexport const trimMatrix = (matrix: CoreMatrix): CoreMatrix =>\n    trimEmptyColumns(trimEmptyRows(matrix))\n\nexport const matrixToDelimited = (\n    table: CoreMatrix,\n    delimiter = \"\\t\"\n): string => {\n    return table\n        .map((row: any) =>\n            row\n                .map((cell: any) =>\n                    cell === null || cell === undefined ? \"\" : cell\n                )\n                .join(delimiter)\n        )\n        .join(\"\\n\")\n}\n\n/**\n * An array object representing all parsed rows. The array is enhanced with a property listing\n * the names of the parsed columns.\n */\nexport interface DSVParsedArray<T> extends Array<T> {\n    /**\n     * List of column names.\n     */\n    columns: Array<keyof T>\n}\n\nexport const parseDelimited = (\n    str: string,\n    delimiter?: string,\n    parseFn?: (rawRow: RawRow) => ParsedRow\n): DSVParsedArray<Record<string, any>> => {\n    // Convert PapaParse result to D3 format for backwards compatibility\n    const papaParseToD3 = ({\n        data,\n        meta,\n    }: Papa.ParseResult<any>): DSVParsedArray<Record<string, any>> => {\n        const dsvParsed = data as DSVParsedArray<Record<string, any>>\n        dsvParsed.columns = meta.fields || []\n\n        // Some downstream methods expect all rows to have fields for all columns,\n        // even if they are missing in that row. This loop ensures that.\n        for (const row of dsvParsed) {\n            for (const col of dsvParsed.columns) {\n                if (!(col in row)) row[col] = \"\"\n            }\n        }\n\n        return dsvParsed\n    }\n\n    const result = Papa.parse(str, {\n        delimiter: delimiter ?? detectDelimiter(str),\n        header: true,\n        skipEmptyLines: true,\n        transformHeader: (header: string) => header.trim(),\n        transform: (value: string) => value.trim(),\n    })\n\n    if (parseFn) {\n        result.data = result.data.map((rawRow) => parseFn(rawRow as RawRow))\n    }\n\n    return papaParseToD3(result)\n}\n\nexport const detectDelimiter = (str: string): \"\\t\" | \",\" | \" \" =>\n    str.includes(\"\\t\") ? \"\\t\" : str.includes(\",\") ? \",\" : \" \"\n\nexport const rowsToMatrix = (rows: any[]): CoreMatrix | undefined =>\n    rows.length\n        ? [Object.keys(rows[0]), ...rows.map((row) => Object.values(row))]\n        : undefined\n\nconst isRowEmpty = (row: any[]): boolean => row.every(isCellEmpty)\n\nexport const isCellEmpty = (cell: unknown): boolean =>\n    cell === null || cell === undefined || cell === \"\"\n\nexport const trimEmptyRows = (matrix: CoreMatrix): CoreMatrix => {\n    let trimAt = undefined\n    for (let rowIndex = matrix.length - 1; rowIndex >= 0; rowIndex--) {\n        if (!isRowEmpty(matrix[rowIndex])) break\n        trimAt = rowIndex\n    }\n    return trimAt === undefined ? matrix : matrix.slice(0, trimAt)\n}\n\nexport const trimArray = (arr: any[]): any[] => {\n    let rightIndex: number\n    for (rightIndex = arr.length - 1; rightIndex >= 0; rightIndex--) {\n        if (!isCellEmpty(arr[rightIndex])) break\n    }\n    return arr.slice(0, rightIndex + 1)\n}\n\nconst applyNewSortOrder = (arr: any[], newOrder: number[]): any[] => {\n    const newArr = new Array(arr.length)\n    for (let i = 0; i < newOrder.length; i++) {\n        const index = newOrder[i]\n        newArr[i] = arr[index]\n    }\n    return newArr\n}\n\nexport const sortColumnStore = (\n    columnStore: CoreColumnStore,\n    slugs: ColumnSlug[]\n): CoreColumnStore => {\n    const firstCol = Object.values(columnStore)[0]\n    if (!firstCol) return {}\n    const len = firstCol.length\n    const sortFn = makeSortByFn(columnStore, slugs)\n\n    // Check if column store is already sorted.\n    // If it's not sorted, we will detect that within the first few iterations usually.\n    let isSorted = true\n    for (let i = 0; i < len - 1; i++) {\n        if (sortFn(i, i + 1) > 0) {\n            isSorted = false\n            break\n        }\n    }\n    // Column store is already sorted; return existing store unchanged\n    if (isSorted) return columnStore\n\n    const newStore: CoreColumnStore = {}\n    // Compute an array of the new sort order, i.e. [0, 1, 2, ...] -> [2, 0, 1]\n    const newOrder = _.range(0, len).sort(sortFn)\n    Object.entries(columnStore).forEach(([slug, colValues]) => {\n        newStore[slug] = applyNewSortOrder(colValues, newOrder)\n    })\n\n    return newStore\n}\n\nconst makeSortByFn = (\n    columnStore: CoreColumnStore,\n    columnSlugs: ColumnSlug[]\n): ((indexA: number, indexB: number) => 1 | 0 | -1) => {\n    const cols = columnSlugs.map((slug) => columnStore[slug])\n\n    return (indexA: number, indexB: number): 1 | 0 | -1 => {\n        const nodeAFirst = -1\n        const nodeBFirst = 1\n\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let colIndex = 0; colIndex < cols.length; colIndex++) {\n            const col = cols[colIndex]\n            const av = col[indexA]\n            const bv = col[indexB]\n            if (av < bv) return nodeAFirst\n            if (av > bv) return nodeBFirst\n            // todo: handle ErrorValues\n        }\n        return 0\n    }\n}\n\nexport const emptyColumnsInFirstRowInDelimited = (str: string): string[] => {\n    // todo: don't split a big string here, just do a faster first line scan\n    const shortCsv = parseDelimited(str.split(\"\\n\").slice(0, 2).join(\"\\n\"))\n    const firstRow: any = shortCsv[0] ?? {}\n    const emptySlugs: string[] = []\n    Object.keys(firstRow).forEach((slug) => {\n        if (firstRow[slug] === \"\") emptySlugs.push(slug)\n    })\n    return emptySlugs\n}\n","import * as _ from \"lodash-es\"\nimport { ColumnSlug } from \"@ourworldindata/utils\"\nimport {\n    ErrorValue,\n    CoreColumnDef,\n    CoreColumnStore,\n    Time,\n    CoreValueType,\n} from \"@ourworldindata/types\"\nimport {\n    ErrorValueTypes,\n    isNotErrorValue,\n    MissingValuePlaceholder,\n    ValueTooLow,\n    DivideByZeroError,\n} from \"./ErrorValues.js\"\nimport * as R from \"remeda\"\n\nexport enum TransformParamType {\n    /** Column with time */\n    TimeSlug = \"TimeSlug\",\n    /** Column with entity */\n    EntitySlug = \"EntitySlug\",\n    /** Column with data */\n    DataSlug = \"DataSlug\",\n    Number = \"Number\",\n    String = \"String\",\n}\n\ninterface TransformParam {\n    type: TransformParamType\n}\n\ninterface Transform {\n    params: TransformParam[]\n    fn: (...args: any[]) => CoreValueType[]\n}\n\n// In Grapher we return just the years for which we have values for. This puts MissingValuePlaceholder\n// in the spots where we are missing values (added to make computing rolling windows easier).\n// Takes an array of value/year pairs and expands it so that there is an undefined\n// for each missing value from the first year to the last year, preserving the position of\n// the existing values.\nexport const insertMissingValuePlaceholders = (\n    values: number[],\n    times: number[]\n): (number | MissingValuePlaceholder)[] => {\n    const startTime = times[0]\n    const endTime = times[times.length - 1]\n    const filledRange = []\n    let time = startTime\n    const timeToValueIndex = new Map()\n    times.forEach((time, index) => {\n        timeToValueIndex.set(time, index)\n    })\n    while (time <= endTime) {\n        filledRange.push(\n            timeToValueIndex.has(time)\n                ? values[timeToValueIndex.get(time)]\n                : ErrorValueTypes.MissingValuePlaceholder\n        )\n        time++\n    }\n    return filledRange\n}\n\n// todo: add the precision param to ensure no floating point effects\nexport function computeRollingAverage(\n    numbers: (number | undefined | null | ErrorValue)[],\n    windowSize: number,\n    align: \"right\" | \"center\" = \"right\"\n): (number | ErrorValue)[] {\n    const result: (number | ErrorValue)[] = []\n\n    for (let valueIndex = 0; valueIndex < numbers.length; valueIndex++) {\n        // If a value is undefined in the original input, keep it undefined in the output\n        const currentVal = numbers[valueIndex]\n        if (currentVal === null) {\n            result[valueIndex] = ErrorValueTypes.NullButShouldBeNumber\n            continue\n        } else if (currentVal === undefined) {\n            result[valueIndex] = ErrorValueTypes.UndefinedButShouldBeNumber\n            continue\n        } else if (currentVal instanceof ErrorValue) {\n            result[valueIndex] = currentVal\n            continue\n        }\n\n        // Take away 1 for the current value (windowSize=1 means no smoothing & no expansion)\n        const expand = windowSize - 1\n\n        // With centered smoothing, expand uneven windows asymmetrically (ceil & floor) to ensure\n        // a correct number of window values get taken into account.\n        // Arbitrarily biased towards left (past).\n        const expandLeft = align === \"center\" ? Math.ceil(expand / 2) : expand\n        const expandRight = align === \"center\" ? Math.floor(expand / 2) : 0\n\n        const startIndex = Math.max(valueIndex - expandLeft, 0)\n        const endIndex = Math.min(valueIndex + expandRight, numbers.length - 1)\n\n        let count = 0\n        let sum = 0\n        for (\n            let windowIndex = startIndex;\n            windowIndex <= endIndex;\n            windowIndex++\n        ) {\n            const value = numbers[windowIndex]\n            if (\n                value !== undefined &&\n                value !== null &&\n                !(value instanceof ErrorValue)\n            ) {\n                sum += value\n                count++\n            }\n        }\n\n        result[valueIndex] = sum / count\n    }\n\n    return result\n}\n\n// Assumptions: data is sorted by entity, then time\n// todo: move tests over from CE\nconst timeSinceEntityExceededThreshold: Transform = {\n    params: [\n        { type: TransformParamType.TimeSlug },\n        { type: TransformParamType.EntitySlug },\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.String },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        timeSlug: ColumnSlug,\n        entitySlug: ColumnSlug,\n        columnSlug: ColumnSlug,\n        thresholdAsString: string\n    ): (number | ValueTooLow)[] => {\n        const threshold = parseFloat(thresholdAsString)\n        const groupValues = columnStore[entitySlug] as string[]\n        const columnValues = columnStore[columnSlug] as number[]\n        const timeValues = columnStore[timeSlug] as number[]\n        let currentGroup: string\n        let groupExceededThresholdAtTime: number\n        return columnValues.map((value, index) => {\n            const group = groupValues[index]\n            const currentTime = timeValues[index]\n            if (group !== currentGroup) {\n                if (!isNotErrorValue(value)) return value\n                if (value < threshold) return ErrorValueTypes.ValueTooLow\n\n                currentGroup = group\n                groupExceededThresholdAtTime = currentTime\n            }\n            return currentTime - groupExceededThresholdAtTime\n        })\n    },\n}\n\n// Assumptions: data is sorted by entity, then time\n// todo: move tests over from CE\nconst rollingAverage: Transform = {\n    params: [\n        { type: TransformParamType.TimeSlug },\n        { type: TransformParamType.EntitySlug },\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.Number },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        timeSlug: ColumnSlug,\n        entitySlug: ColumnSlug,\n        columnSlug: ColumnSlug,\n        windowSize: number\n    ): (number | ErrorValue)[] => {\n        const entityNames = columnStore[entitySlug] as string[]\n        const columnValues = columnStore[columnSlug] as number[]\n        const timeValues = columnStore[timeSlug] as number[]\n        const len = entityNames.length\n        if (!len) return []\n        let currentEntity = entityNames[0]\n        let currentValues: number[] = []\n        let currentTimes: Time[] = []\n\n        const groups: (number | ErrorValue)[][] = []\n        for (let rowIndex = 0; rowIndex <= len; rowIndex++) {\n            const entityName = entityNames[rowIndex]\n            const value = columnValues[rowIndex]\n            const time = timeValues[rowIndex]\n            if (currentEntity !== entityName) {\n                const averages = computeRollingAverage(\n                    insertMissingValuePlaceholders(currentValues, currentTimes),\n                    windowSize\n                ).filter(\n                    (value) =>\n                        !(value === ErrorValueTypes.MissingValuePlaceholder)\n                ) // filter the placeholders back out\n                groups.push(averages)\n                if (value === undefined) break // We iterate to <= so that we push the last row\n                currentValues = []\n                currentTimes = []\n                currentEntity = entityName\n            }\n            currentValues.push(value)\n            currentTimes.push(time)\n        }\n        return groups.flat()\n    },\n}\n\nconst divideBy: Transform = {\n    params: [\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.DataSlug },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        numeratorSlug: ColumnSlug,\n        denominatorSlug: ColumnSlug\n    ): (number | DivideByZeroError)[] => {\n        const numeratorValues = columnStore[numeratorSlug] as number[]\n        const denominatorValues = columnStore[denominatorSlug] as number[]\n        return denominatorValues.map((denominator, index) => {\n            if (denominator === 0) return ErrorValueTypes.DivideByZeroError\n            const numerator = numeratorValues[index]\n            if (!isNotErrorValue(numerator)) return numerator\n            if (!isNotErrorValue(denominator)) return denominator\n            return numerator / denominator\n        })\n    },\n}\n\nconst multiplyBy: Transform = {\n    params: [\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.Number },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        columnSlug: ColumnSlug,\n        factor: number\n    ): (number | ErrorValue)[] =>\n        columnStore[columnSlug].map((value) =>\n            isNotErrorValue(value) ? (value as number) * factor : value\n        ),\n}\n\nconst subtract: Transform = {\n    params: [\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.DataSlug },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        columnSlugA: ColumnSlug,\n        columnSlugB: ColumnSlug\n    ): number[] => {\n        const values = columnStore[columnSlugA] as number[]\n        const subValues = columnStore[columnSlugB] as number[]\n        return subValues.map((subValue, index) => {\n            const value = values[index]\n            if (!isNotErrorValue(value)) return value\n            if (!isNotErrorValue(subValue)) return subValue\n            return value - subValue\n        })\n    },\n}\n\n// Assumptions: data is sorted by entity, then time, and time is a continous integer with a row for each time step.\n// todo: move tests over from CE\nconst percentChange: Transform = {\n    params: [\n        { type: TransformParamType.TimeSlug },\n        { type: TransformParamType.EntitySlug },\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.Number },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        _timeSlug: ColumnSlug,\n        entitySlug: ColumnSlug,\n        columnSlug: ColumnSlug,\n        windowSize: number\n    ): (number | ErrorValue)[] => {\n        const entityNames = columnStore[entitySlug] as string[]\n        const columnValues = columnStore[columnSlug] as number[]\n\n        // If windowSize is 0 then there is zero change for every valid value\n        if (!windowSize)\n            return columnValues.map((val) => (isNotErrorValue(val) ? 0 : val))\n\n        let currentEntity: string\n        return columnValues.map((value: any, index) => {\n            const entity = entityNames[index]\n            const previousEntity = entityNames[index - windowSize] as any\n            const previousValue = columnValues[index - windowSize] as any\n            if (\n                !currentEntity ||\n                currentEntity !== entity ||\n                previousEntity !== entity\n            ) {\n                currentEntity = entity\n                return ErrorValueTypes.NoValueToCompareAgainst\n            }\n            if (previousValue instanceof ErrorValue) return previousValue\n            if (value instanceof ErrorValue) return value\n\n            if (previousValue === 0) return ErrorValueTypes.DivideByZeroError\n            if (previousValue === undefined)\n                return ErrorValueTypes.NoValueToCompareAgainst\n\n            return (100 * (value - previousValue)) / previousValue\n        })\n    },\n}\n\n// Todo: remove?\nconst asPercentageOf: Transform = {\n    params: [\n        { type: TransformParamType.DataSlug },\n        { type: TransformParamType.DataSlug },\n    ],\n    fn: (\n        columnStore: CoreColumnStore,\n        numeratorSlug: ColumnSlug,\n        denominatorSlug: ColumnSlug\n    ): (number | DivideByZeroError)[] =>\n        divideBy\n            .fn(columnStore, numeratorSlug, denominatorSlug)\n            .map((num: any) => (typeof num === \"number\" ? 100 * num : num)),\n}\n\nconst duplicate: Transform = {\n    params: [{ type: TransformParamType.DataSlug }],\n    fn: (\n        columnStore: CoreColumnStore,\n        columnSlug: ColumnSlug\n    ): CoreValueType[] => _.cloneDeep(columnStore[columnSlug]),\n}\n\nconst availableTransforms = {\n    asPercentageOf,\n    timeSinceEntityExceededThreshold,\n    divideBy,\n    rollingAverage,\n    percentChange,\n    multiplyBy,\n    subtract,\n    duplicate,\n} as const\n\ntype TransformName = keyof typeof availableTransforms\nexport const availableTransformNames = Object.keys(\n    availableTransforms\n) as TransformName[]\n\nconst isTransformName = (word: string): word is TransformName =>\n    availableTransformNames.includes(word as any)\n\n/**\n * Extracts the transform name and params from a transform string.\n *\n * For example, 'rollingAverage time entity population 5' is parsed as\n * {\n *     transformName: 'rollingAverage',\n *     params: [\n *        { type: TransformParamType.TimeSlug, value: 'time' },\n *        { type: TransformParamType.EntitySlug, value: 'entity' },\n *        { type: TransformParamType.DataSlug, value: 'population' },\n *        { type: TransformParamType.Number, value: '5' },\n *    ]\n * }\n */\nexport const parseTransformString = (\n    transform: string\n):\n    | {\n          transformName: TransformName\n          params: { type: TransformParamType; value: string }[]\n      }\n    | undefined => {\n    const words = transform.split(\" \")\n\n    const transformName = words.find((word) => isTransformName(word))\n\n    if (!transformName) {\n        console.warn(`Warning: transform '${transformName}' not found`)\n        return\n    }\n\n    const values = words.filter((word) => word !== transformName)\n\n    // Extract data slugs from transforms (i.e. columns with data, not time or entity)\n    const paramDefs = availableTransforms[transformName].params\n    const params = R.zip(paramDefs, values).map(([paramDef, value]) => {\n        return { type: paramDef.type, value }\n    })\n\n    return { transformName, params }\n}\n\nexport const applyTransforms = (\n    columnStore: CoreColumnStore,\n    defs: CoreColumnDef[]\n): CoreColumnStore => {\n    for (const def of defs) {\n        if (!def.transform || def.transformHasRun) continue\n        const { transformName, params = [] } =\n            parseTransformString(def.transform) ?? {}\n        const paramValues = params.map(({ value }) => value)\n        if (!transformName) continue\n        const { fn } = availableTransforms[transformName]\n        try {\n            columnStore[def.slug] = fn(columnStore, ...paramValues)\n            def.transformHasRun = true\n        } catch (err) {\n            console.error(\n                `Error performing transform '${def.transform}' for column '${\n                    def.slug\n                }'. Expected args: ${fn.length}. Provided args: ${\n                    1 + paramValues.length\n                }. Ran as ${transformName}(columnStore, ${paramValues\n                    .map((param) => `\"${param}\"`)\n                    .join(\",\")}).`\n            )\n            console.error(err)\n        }\n    }\n    return columnStore\n}\n","import * as _ from \"lodash-es\"\nimport {\n    intersection,\n    isPresent,\n    ColumnSlug,\n    PrimitiveType,\n    imemo,\n} from \"@ourworldindata/utils\"\nimport {\n    CoreColumn,\n    ColumnTypeMap,\n    MissingColumn,\n    TimeColumn,\n} from \"./CoreTableColumns.js\"\nimport {\n    CoreColumnStore,\n    CoreRow,\n    CoreTableInputOption,\n    Time,\n    TransformType,\n    ValueRange,\n    CoreQuery,\n    CoreValueType,\n    InputType,\n    CoreMatrix,\n    TableSlug,\n    ColumnTypeNames,\n    CoreColumnDef,\n    JsTypes,\n    OwidTableSlugs,\n} from \"@ourworldindata/types\"\nimport {\n    makeAutoTypeFn,\n    columnStoreToRows,\n    makeKeyFn,\n    makeRowFromColumnStore,\n    standardizeSlugs,\n    concatColumnStores,\n    rowsToColumnStore,\n    autodetectColumnDefs,\n    renameColumnStore,\n    replaceRandomCellsInColumnStore,\n    parseDelimited,\n    rowsFromMatrix,\n    sortColumnStore,\n    emptyColumnsInFirstRowInDelimited,\n    truncate,\n} from \"./CoreTableUtils.js\"\nimport {\n    ErrorValueTypes,\n    isNotErrorValue,\n    DroppedForTesting,\n} from \"./ErrorValues.js\"\nimport { applyTransforms, parseTransformString } from \"./Transforms.js\"\n\ninterface AdvancedOptions {\n    tableDescription?: string\n    transformCategory?: TransformType\n    parent?: CoreTable\n    filterMask?: FilterMask\n    tableSlug?: TableSlug\n    forceReuseColumnStore?: boolean\n}\n\n// The complex generic with default here just enables you to optionally specify a more\n// narrow interface for the input rows. This is helpful for OwidTable.\nexport class CoreTable<\n    ROW_TYPE extends CoreRow = CoreRow,\n    COL_DEF_TYPE extends CoreColumnDef = CoreColumnDef,\n> {\n    private _columns: Map<ColumnSlug, CoreColumn<this, COL_DEF_TYPE>> =\n        new Map()\n    protected parent?: this\n    tableDescription: string\n    private timeToLoad = 0\n    private initTime = Date.now()\n\n    private originalInput: CoreTableInputOption\n    private advancedOptions: AdvancedOptions\n\n    private inputColumnDefs: COL_DEF_TYPE[]\n    constructor(\n        input: CoreTableInputOption = [],\n        inputColumnDefs: COL_DEF_TYPE[] | string = [],\n        advancedOptions: AdvancedOptions = {}\n    ) {\n        const start = Date.now() // Perf aid\n        const { parent, tableDescription = \"\" } = advancedOptions\n\n        this.originalInput = input\n        this.tableDescription = tableDescription\n        this.parent = parent as this\n        this.inputColumnDefs =\n            typeof inputColumnDefs === \"string\"\n                ? columnDefinitionsFromInput<COL_DEF_TYPE>(inputColumnDefs)\n                : inputColumnDefs\n\n        // Column definitions with a \"duplicate\" transform are merged with the column definition of the specified source column\n        this.inputColumnDefs = this.inputColumnDefs.map((def) => {\n            if (!def.transform) return def\n            const transform = parseTransformString(def.transform)\n            if (transform?.transformName !== \"duplicate\") return def\n\n            const sourceSlug = transform.params[0].value\n            const sourceDef = this.inputColumnDefs.find(\n                (def) => def.slug === sourceSlug\n            )\n            return { ...sourceDef, ...def }\n        })\n\n        // If any values were passed in, copy those to column store now and then remove them from column definitions.\n        // todo: remove values property entirely? may be an anti-pattern.\n        this.inputColumnDefs = this.inputColumnDefs.map((def) => {\n            if (!def.values) return def\n            this.valuesFromColumnDefs[def.slug] = def.values\n            const copy = {\n                ...def,\n            }\n            delete copy.values\n            return copy\n        })\n\n        this.inputColumnDefs.forEach((def) => this.setColumn(def))\n\n        this.advancedOptions = advancedOptions\n\n        // If this has a parent table, than we expect all defs. This makes \"deletes\" and \"renames\" fast.\n        // If this is the first input table, then we do a simple check to generate any missing column defs.\n        if (!parent)\n            autodetectColumnDefs(this.inputColumnStore, this._columns).forEach(\n                (def) => this.setColumn(def as COL_DEF_TYPE)\n            )\n\n        this.timeToLoad = Date.now() - start // Perf aid\n    }\n\n    private valuesFromColumnDefs: CoreColumnStore = {}\n\n    // A method currently used just in debugging but may be useful in the author backend.\n    // If your charts look funny, a good thing to check is if the autodetected columns are wrong.\n    get autodetectedColumnDefs(): CoreTable {\n        const providedSlugs = new Set(\n            this.inputColumnDefs.map((def) => def.slug)\n        )\n        return new CoreTable(\n            this.defs.filter((def) => !providedSlugs.has(def.slug))\n        )\n    }\n\n    isOwidTable(): boolean {\n        return false\n    }\n\n    @imemo get transformCategory(): TransformType {\n        const { advancedOptions, inputType } = this\n        if (advancedOptions.transformCategory)\n            return advancedOptions.transformCategory\n\n        if (inputType === InputType.Delimited)\n            return TransformType.LoadFromDelimited\n        if (inputType === InputType.Matrix) return TransformType.LoadFromMatrix\n        if (inputType === InputType.RowStore)\n            return TransformType.LoadFromRowStore\n        return TransformType.LoadFromColumnStore\n    }\n\n    // If the input is a column store, returns that. If it is DSV, parses that and turns it into a column store.\n    // If it is a Rows[], turns it into a column store.\n    @imemo private get inputColumnStore(): CoreColumnStore {\n        const { originalInput, inputType } = this\n\n        if (inputType === InputType.Delimited)\n            return this.delimitedAsColumnStore\n        else if (inputType === InputType.Matrix)\n            return rowsToColumnStore(\n                rowsFromMatrix(originalInput as CoreMatrix)\n            )\n        else if (inputType === InputType.RowStore)\n            return rowsToColumnStore(originalInput as CoreRow[])\n        return originalInput as CoreColumnStore\n    }\n\n    // This can, in theory, be used to detect whether we can reuse the input column store, which can save us time parsing.\n    // However, I'm not entirely sure whether the conditions included here are complete, so we don't currently use it.\n    // We do use `advancedOptions.forceReuseColumnStore`, however.\n    @imemo get canReuseInputColumnStore(): boolean {\n        const { inputColumnDefs, valuesFromColumnDefs, columnSlugs } = this\n\n        const storeHasAllColumns = columnSlugs.every(\n            (slug) => slug in this.inputColumnStore\n        )\n\n        const columnsFromTransforms = inputColumnDefs.filter(\n            (def) => def.transform && !def.transformHasRun\n        )\n\n        return (\n            !this.colsToParse.length &&\n            storeHasAllColumns &&\n            !Object.keys(valuesFromColumnDefs).length &&\n            !columnsFromTransforms.length\n        )\n    }\n\n    @imemo get columnStore(): CoreColumnStore {\n        const { inputColumnStore, advancedOptions } = this\n\n        if (advancedOptions.forceReuseColumnStore) {\n            if (advancedOptions.filterMask)\n                return advancedOptions.filterMask.apply(inputColumnStore)\n            else return inputColumnStore\n        }\n\n        const {\n            valuesFromColumnDefs,\n            inputColumnsToParsedColumnStore,\n            inputColumnDefs,\n        } = this\n\n        // Set blank columns\n        let columnStore = Object.assign(\n            {},\n            this.blankColumnStore,\n            inputColumnStore,\n            valuesFromColumnDefs\n        )\n\n        // Overwrite any non-parsed columns with parsed values\n        if (Object.keys(inputColumnsToParsedColumnStore).length)\n            columnStore = Object.assign(\n                columnStore,\n                inputColumnsToParsedColumnStore\n            )\n\n        // If we ever pass Mobx observable arrays, we need to convert them to regular arrays.\n        // Otherwise, operations like `.concat()` will break in unexpected ways.\n        // See https://github.com/mobxjs/mobx/blob/mobx4and5/docs/best/pitfalls.md\n        // Also, see https://github.com/owid/owid-grapher/issues/2948 for an issue caused by this problem.\n        type CoreValueArrayThatMayBeMobxProxy = CoreValueType[] & {\n            toJS?: () => CoreValueType[]\n        }\n\n        for (const [slug, values] of Object.entries(columnStore)) {\n            const valuesThatMayBeMobxProxy =\n                values as CoreValueArrayThatMayBeMobxProxy\n            if (typeof valuesThatMayBeMobxProxy.toJS === \"function\") {\n                columnStore[slug] = valuesThatMayBeMobxProxy.toJS()\n            }\n        }\n\n        const columnsFromTransforms = inputColumnDefs.filter(\n            (def) => def.transform && !def.transformHasRun\n        ) // todo: sort by graph dependency order\n        if (columnsFromTransforms.length) {\n            columnStore = applyTransforms(columnStore, columnsFromTransforms)\n        }\n\n        return advancedOptions.filterMask\n            ? advancedOptions.filterMask.apply(columnStore)\n            : columnStore\n    }\n\n    private get blankColumnStore(): CoreColumnStore {\n        const columnsObject: CoreColumnStore = {}\n        this.columnSlugs.forEach((slug) => {\n            columnsObject[slug] = []\n        })\n        return columnsObject\n    }\n\n    @imemo private get delimitedAsColumnStore(): CoreColumnStore {\n        const { originalInput, _numericColumnSlugs } = this\n        const parsed = parseDelimited(\n            originalInput as string,\n            undefined,\n            makeAutoTypeFn(_numericColumnSlugs)\n        ) as any\n        // Remove the columns object from the parsed object\n        delete parsed.columns\n\n        const renamedRows = standardizeSlugs(parsed) // todo: pass renamed defs back in.\n        return rowsToColumnStore(renamedRows ? renamedRows.rows : parsed)\n    }\n\n    get tableSlug(): string | undefined {\n        return this.advancedOptions.tableSlug\n    }\n\n    private get inputColumnsToParsedColumnStore(): CoreColumnStore {\n        const { inputColumnStore, colsToParse } = this\n        const columnsObject: CoreColumnStore = {}\n        if (!colsToParse.length) return columnsObject\n        const missingCols: CoreColumn<this>[] = []\n        let len = 0\n        colsToParse.forEach((col) => {\n            const { slug } = col\n            const unparsedVals = inputColumnStore[slug]\n            if (!unparsedVals) {\n                missingCols.push(col)\n                return\n            }\n            columnsObject[slug] = unparsedVals.map((val) => col.parse(val))\n            len = columnsObject[slug].length\n        })\n\n        // If column defs were provided but there were no values provided for those columns, create blank columns the same size\n        // as the filled columns.\n        missingCols.forEach(\n            (col) =>\n                (columnsObject[col.slug] = _.range(0, len).map(() =>\n                    col.parse(undefined)\n                ))\n        )\n        return columnsObject\n    }\n\n    private get colsToParse(): CoreColumn<this>[] {\n        const { inputType, columnsAsArray, inputColumnStore } = this\n        const columnsToMaybeParse = columnsAsArray.filter(\n            (col) => !col.def.skipParsing\n        )\n        const firstInputRow = makeRowFromColumnStore(0, inputColumnStore)\n        if (inputType === InputType.Delimited) {\n            const missingTypes = new Set(\n                this.getColumns(\n                    emptyColumnsInFirstRowInDelimited(\n                        this.originalInput as string\n                    )\n                )\n            ) // Our autotyping is poor if the first value in a column is empty\n            return columnsToMaybeParse.filter(\n                (col) =>\n                    col.needsParsing(firstInputRow[col.slug]) ||\n                    missingTypes.has(col)\n            )\n        }\n\n        if (this.parent || !firstInputRow) return []\n\n        // The default behavior is to assume some missing or bad data in user data, so we always parse the full input the first time we load\n        // user data, with the exception of columns that have values passed directly.\n        // Todo: measure the perf hit and add a parameter to opt out of this this if you know the data is complete?\n        const alreadyTypedSlugs = new Set(\n            Object.keys(this.valuesFromColumnDefs)\n        )\n        if (this.isRoot) {\n            return columnsToMaybeParse.filter(\n                (col) => !alreadyTypedSlugs.has(col.slug)\n            )\n        }\n\n        return columnsToMaybeParse.filter(\n            (col) =>\n                !alreadyTypedSlugs.has(col.slug) ||\n                col.needsParsing(firstInputRow[col.slug])\n        )\n    }\n\n    private setColumn(def: COL_DEF_TYPE): void {\n        const { type, slug } = def\n        const ColumnType = (type && ColumnTypeMap[type]) || ColumnTypeMap.String\n        this._columns.set(slug, new ColumnType(this, def))\n    }\n\n    protected transform(\n        rowsOrColumnStore: ROW_TYPE[] | CoreColumnStore | CoreMatrix,\n        defs: COL_DEF_TYPE[],\n        tableDescription: string,\n        transformCategory: TransformType,\n        filterMask?: FilterMask\n    ): this {\n        // The combo of the \"this\" return type and then casting this to any allows subclasses to create transforms of the\n        // same type. The \"any\" typing is very brief (the returned type will have the same type as the instance being transformed).\n        return new (this.constructor as any)(rowsOrColumnStore, defs, {\n            parent: this,\n            tableDescription,\n            transformCategory,\n            filterMask,\n        } as AdvancedOptions)\n    }\n\n    protected noopTransform(tableDescription: string): this {\n        return new (this.constructor as any)(this.columnStore, this.defs, {\n            parent: this,\n            tableDescription,\n            transformCategory: TransformType.Noop,\n            forceReuseColumnStore: true,\n        } as AdvancedOptions)\n    }\n\n    // Time between when the parent table finished loading and this table started constructing.\n    // A large time may just be due to a transform only happening after a user action, or it\n    // could be do to other sync code executing between transforms.\n    private get betweenTime(): number {\n        return this.parent\n            ? this.initTime - (this.parent.initTime + this.parent.timeToLoad)\n            : 0\n    }\n\n    @imemo get rows(): ROW_TYPE[] {\n        return columnStoreToRows(this.columnStore) as ROW_TYPE[]\n    }\n\n    @imemo get indices(): number[] {\n        return _.range(0, this.numRows)\n    }\n\n    *[Symbol.iterator](): Generator<CoreRow, void, unknown> {\n        const { columnStore, numRows } = this\n        for (let index = 0; index < numRows; index++) {\n            yield makeRowFromColumnStore(index, columnStore)\n        }\n    }\n\n    getTimesAtIndices(indices: number[]): number[] {\n        if (!indices.length) return []\n        return this.getValuesAtIndices(this.timeColumn.slug, indices) as Time[]\n    }\n\n    getValuesAtIndices(\n        columnSlug: ColumnSlug,\n        indices: number[]\n    ): CoreValueType[] {\n        const values = this.get(columnSlug).valuesIncludingErrorValues\n        return indices.map((index) => values[index])\n    }\n\n    @imemo get firstRow(): ROW_TYPE {\n        return makeRowFromColumnStore(0, this.columnStore) as ROW_TYPE\n    }\n\n    @imemo get lastRow(): ROW_TYPE {\n        return makeRowFromColumnStore(\n            this.numRows - 1,\n            this.columnStore\n        ) as ROW_TYPE\n    }\n\n    @imemo get numRows(): number {\n        const firstColValues = Object.values(this.columnStore)[0]\n        return firstColValues ? firstColValues.length : 0\n    }\n\n    @imemo get numColumns(): number {\n        return this.columnSlugs.length\n    }\n\n    get(columnSlug: ColumnSlug | undefined): CoreColumn<this, COL_DEF_TYPE> {\n        if (columnSlug === undefined)\n            return new MissingColumn(this, {\n                slug: `undefined_slug`,\n            } as COL_DEF_TYPE)\n        return (\n            this._columns.get(columnSlug) ??\n            new MissingColumn(this, { slug: columnSlug } as COL_DEF_TYPE)\n        )\n    }\n\n    has(columnSlug: ColumnSlug | undefined): boolean {\n        if (columnSlug === undefined) return false\n        return this._columns.has(columnSlug)\n    }\n\n    getFirstColumnWithType(\n        columnTypeName: ColumnTypeNames\n    ): CoreColumn<this, COL_DEF_TYPE> | undefined {\n        return this.columnsAsArray.find(\n            (col) => col.def.type === columnTypeName\n        )\n    }\n\n    @imemo get timeColumn(): TimeColumn | MissingColumn {\n        // \"time\" is the canonical time column slug.\n        // See LegacyToOwidTable where this column is injected for all Graphers.\n        const maybeTimeColumn = this.get(OwidTableSlugs.time)\n        if (maybeTimeColumn instanceof ColumnTypeMap.Time)\n            return maybeTimeColumn\n        // If a valid \"time\" column doesn't exist, find _some_ time column to use.\n        // This is somewhat unreliable and currently only used to infer the time\n        // column on explorers.\n        return (this.columnsAsArray.find(\n            (col) => col instanceof ColumnTypeMap.Day\n        ) ??\n            this.columnsAsArray.find(\n                (col) => col instanceof ColumnTypeMap.Date\n            ) ??\n            this.columnsAsArray.find(\n                (col) => col instanceof ColumnTypeMap.Year\n            ) ??\n            this.columnsAsArray.find(\n                (col) => col instanceof ColumnTypeMap.Quarter\n            ) ??\n            maybeTimeColumn) as TimeColumn | MissingColumn\n    }\n\n    @imemo private get columnsWithParseErrors(): CoreColumn<this>[] {\n        return this.columnsAsArray.filter((col) => col.numErrorValues)\n    }\n\n    @imemo get numColumnsWithErrorValues(): number {\n        return this.columnsWithParseErrors.length\n    }\n\n    @imemo get numErrorValues(): number {\n        return _.sum(this.columnsAsArray.map((col) => col.numErrorValues))\n    }\n\n    @imemo get numValidCells(): number {\n        return _.sum(this.columnsAsArray.map((col) => col.numValues))\n    }\n\n    @imemo get colStoreIsEqualToParent(): boolean {\n        return this.parent\n            ? this.columnStore === this.parent.columnStore\n            : false\n    }\n\n    get rootTable(): this {\n        return this.parent ? this.parent.rootTable : this\n    }\n\n    /**\n     * Returns a string map (aka index) where the keys are the combined string values of columnSlug[], and the values\n     * are the indices for the rows that match.\n     *\n     * {country: \"USA\", population: 100}\n     *\n     * So `table.rowIndex([\"country\", \"population\"]).get(\"USA 100\")` would return [0].\n     *\n     */\n    rowIndex(columnSlugs: ColumnSlug[]): Map<string, number[]> {\n        const index = new Map<string, number[]>()\n        const keyFn = makeKeyFn(this.columnStore, columnSlugs)\n        for (let i = 0; i < this.numRows; i++) {\n            const key = keyFn(i)\n            if (index.has(key)) index.get(key)!.push(i)\n            else index.set(key, [i])\n        }\n        return index\n    }\n\n    /**\n     * Returns a map (aka index) where the keys are the values of the indexColumnSlug, and the values\n     * are the values of the valueColumnSlug.\n     *\n     * {country: \"USA\", population: 100}\n     *\n     * So `table.valueIndex(\"country\", \"population\").get(\"USA\")` would return 100.\n     *\n     */\n    protected valueIndex(\n        indexColumnSlug: ColumnSlug,\n        valueColumnSlug: ColumnSlug\n    ): Map<PrimitiveType, PrimitiveType> {\n        const indexCol = this.get(indexColumnSlug)\n        const valueCol = this.get(valueColumnSlug)\n        const indexValues = indexCol.valuesIncludingErrorValues\n        const valueValues = valueCol.valuesIncludingErrorValues\n        const valueIndices = new Set(valueCol.validRowIndices)\n        const intersection = indexCol.validRowIndices.filter((index) =>\n            valueIndices.has(index)\n        )\n\n        const map = new Map<PrimitiveType, PrimitiveType>()\n        intersection.forEach((index) => {\n            map.set(\n                indexValues[index] as PrimitiveType,\n                valueValues[index] as PrimitiveType\n            )\n        })\n        return map\n    }\n\n    grep(searchStringOrRegex: string | RegExp): this {\n        return this.rowFilter((row) => {\n            const line = Object.values(row).join(\" \")\n            return typeof searchStringOrRegex === \"string\"\n                ? line.includes(searchStringOrRegex)\n                : searchStringOrRegex.test(line)\n        }, `Kept rows that matched '${searchStringOrRegex.toString()}'`)\n    }\n\n    rowFilter(\n        predicate: (row: ROW_TYPE, index: number) => boolean,\n        opName: string\n    ): this {\n        const mask = new FilterMask(this.numRows, this.rows.map(predicate)) // Warning: this will be slow\n        if (mask.isNoop()) return this.noopTransform(opName)\n\n        return this.transform(\n            this.columnStore,\n            this.defs,\n            opName,\n            TransformType.FilterRows,\n            mask\n        )\n    }\n\n    columnFilter(\n        columnSlug: ColumnSlug,\n        predicate: (value: CoreValueType, index: number) => boolean,\n        opName: string\n    ): this {\n        const mask = new FilterMask(\n            this.numRows,\n            this.get(columnSlug).valuesIncludingErrorValues.map(predicate)\n        )\n        if (mask.isNoop()) return this.noopTransform(opName)\n\n        return this.transform(\n            this.columnStore,\n            this.defs,\n            opName,\n            TransformType.FilterRows,\n            mask\n        )\n    }\n\n    sortBy(slugs: ColumnSlug[]): this {\n        const description = `Sort by ${slugs.join(\",\")}`\n        const sorted = sortColumnStore(this.columnStore, slugs)\n\n        if (sorted === this.columnStore) return this.noopTransform(description)\n        else\n            return this.transform(\n                sorted,\n                this.defs,\n                description,\n                TransformType.SortRows\n            )\n    }\n\n    // Assumes table is sorted by columnSlug. Returns an array representing the starting index of each new group.\n    protected groupBoundaries(columnSlug: ColumnSlug): number[] {\n        const values = this.get(columnSlug).valuesIncludingErrorValues\n        const arr: number[] = []\n        let last: CoreValueType | undefined = undefined\n        for (let i = 0; i < values.length; i++) {\n            const val = values[i]\n            if (val !== last) {\n                arr.push(i)\n                last = val\n            }\n        }\n        // Include the end of the last group, which doesn't result in a change in value above.\n        if (values && values.length) {\n            arr.push(values.length)\n        }\n        return arr\n    }\n\n    @imemo get defs(): COL_DEF_TYPE[] {\n        return this.columnsAsArray.map((col) => col.def)\n    }\n\n    @imemo get columnNames(): string[] {\n        return this.columnsAsArray.map((col) => col.name)\n    }\n\n    @imemo get columnTypes(): (ColumnTypeNames | undefined)[] {\n        return this.columnsAsArray.map((col) => col.def.type)\n    }\n\n    @imemo get columnJsTypes(): JsTypes[] {\n        return this.columnsAsArray.map((col) => col.jsType)\n    }\n\n    @imemo get columnSlugs(): string[] {\n        return Array.from(this._columns.keys())\n    }\n\n    @imemo get numericColumnSlugs(): string[] {\n        return this._numericColumnSlugs\n    }\n\n    private get _numericColumnSlugs(): string[] {\n        return this._columnsAsArray\n            .filter((col) => col instanceof ColumnTypeMap.Numeric)\n            .map((col) => col.slug)\n    }\n\n    private get _columnsAsArray(): CoreColumn<this, COL_DEF_TYPE>[] {\n        return Array.from(this._columns.values())\n    }\n\n    @imemo get columnsAsArray(): CoreColumn<this, COL_DEF_TYPE>[] {\n        return this._columnsAsArray\n    }\n\n    getColumns(slugs: ColumnSlug[]): CoreColumn<this, COL_DEF_TYPE>[] {\n        return slugs.map((slug) => this.get(slug))\n    }\n\n    // Get the min and max for multiple columns at once\n    domainFor(slugs: ColumnSlug[]): ValueRange {\n        const cols = this.getColumns(slugs)\n        const mins = cols.map((col) => col.minValue)\n        const maxes = cols.map((col) => col.maxValue)\n        return [_.min(mins), _.max(maxes)]\n    }\n\n    private get isRoot(): boolean {\n        return !this.parent\n    }\n\n    dump(rowLimit = 30): void {\n        this.dumpPipeline()\n        this.dumpColumns()\n        this.dumpRows(rowLimit)\n    }\n\n    dumpPipeline(): void {\n        // eslint-disable-next-line no-console\n        console.table(this.ancestors.map((tb) => tb.explanation))\n    }\n\n    dumpColumns(): void {\n        // eslint-disable-next-line no-console\n        console.table(this.explainColumns)\n    }\n\n    rowsFrom(start: number, end: number): any {\n        if (start >= this.numRows) return []\n        if (end > this.numRows) end = this.numRows\n        return _.range(start, end).map((index) =>\n            makeRowFromColumnStore(index, this.columnStore)\n        )\n    }\n\n    dumpRows(rowLimit = 30): void {\n        // eslint-disable-next-line no-console\n        console.table(this.rowsFrom(0, rowLimit), this.columnSlugs)\n    }\n\n    dumpInputTable(): void {\n        // eslint-disable-next-line no-console\n        console.table(this.inputAsTable)\n    }\n\n    @imemo private get inputType(): InputType {\n        const { originalInput } = this\n        if (typeof originalInput === \"string\") return InputType.Delimited\n        if (Array.isArray(originalInput))\n            return Array.isArray(originalInput[0])\n                ? InputType.Matrix\n                : InputType.RowStore\n        return InputType.ColumnStore\n    }\n\n    @imemo private get inputColumnStoreToRows(): Record<\n        string,\n        CoreValueType\n    >[] {\n        return columnStoreToRows(this.inputColumnStore)\n    }\n\n    @imemo private get inputAsTable():\n        | Record<string, CoreValueType>[]\n        | CoreTableInputOption {\n        const { inputType } = this\n        return inputType === InputType.ColumnStore\n            ? this.inputColumnStoreToRows\n            : inputType === InputType.Matrix\n              ? rowsFromMatrix(this.originalInput as CoreMatrix)\n              : this.originalInput\n    }\n\n    @imemo private get explainColumns(): Record<string, unknown>[] {\n        return this.columnsAsArray.map((col) => {\n            const {\n                slug,\n                jsType,\n                name,\n                numValues,\n                numErrorValues,\n                displayName,\n                def,\n            } = col\n            return {\n                slug,\n                type: def.type,\n                jsType,\n                name,\n                numValues,\n                numErrorValues,\n                displayName,\n                color: def.color,\n            }\n        })\n    }\n\n    get ancestors(): this[] {\n        return this.parent ? [...this.parent.ancestors, this] : [this]\n    }\n\n    @imemo private get numColsToParse(): number {\n        return this.colsToParse.length\n    }\n\n    private static guids = 0\n    private guid = ++CoreTable.guids\n\n    private get explanation(): Record<string, unknown> {\n        // todo: is there a better way to do this in JS?\n        const {\n            tableDescription,\n            transformCategory,\n            guid,\n            numColumns,\n            numRows,\n            betweenTime,\n            timeToLoad,\n            numColsToParse,\n            numValidCells,\n            numErrorValues,\n            numColumnsWithErrorValues,\n            colStoreIsEqualToParent,\n        } = this\n        return {\n            tableDescription: truncate(tableDescription, 40),\n            transformCategory,\n            guid,\n            numColumns,\n            numRows,\n            betweenTime,\n            timeToLoad,\n            numColsToParse,\n            numValidCells,\n            numErrorValues,\n            numColumnsWithErrorValues,\n            colStoreIsEqualToParent,\n        }\n    }\n\n    rowsAt(indices: number[]): ROW_TYPE[] {\n        const { columnStore } = this\n        return indices.map(\n            (index) => makeRowFromColumnStore(index, columnStore) as ROW_TYPE\n        )\n    }\n\n    findRows(query: CoreQuery): ROW_TYPE[] {\n        return this.rowsAt(this.findRowsIndices(query))\n    }\n\n    findRowsIndices(query: CoreQuery): any {\n        const slugs = Object.keys(query)\n        if (!slugs.length) return this.indices\n        const arrs = this.getColumns(slugs).map((col) =>\n            col.indicesWhere(query[col.slug])\n        )\n        return intersection(...arrs)\n    }\n\n    indexOf(row: ROW_TYPE): any {\n        return this.findRowsIndices(row)[0] ?? -1\n    }\n\n    where(query: CoreQuery): this {\n        const rows = this.findRows(query)\n        const queryDescription = Object.entries(query)\n            .map(([col, value]) => `${col}=${value}`)\n            .join(\"&\")\n\n        return this.transform(\n            rows,\n            this.defs,\n            `Selecting ${rows.length} rows where ${queryDescription}`,\n            TransformType.FilterRows\n        )\n    }\n\n    appendRows(rows: ROW_TYPE[], opDescription: string): this {\n        return this.concat(\n            [\n                new (this.constructor as typeof CoreTable)(rows, this.defs, {\n                    parent: this,\n                }),\n            ],\n            opDescription\n        )\n    }\n\n    updateDefs(fn: (def: COL_DEF_TYPE) => COL_DEF_TYPE): this {\n        return this.transform(\n            this.columnStore,\n            this.defs.map(fn),\n            `Updated column defs`,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    select(slugs: ColumnSlug[]): this {\n        const newStore: CoreColumnStore = {}\n\n        // Build defs in the order specified by slugs\n        const defs = slugs\n            .filter((slug) => this.has(slug))\n            .map((slug) => this.get(slug).def)\n\n        // Build column store with the same columns\n        slugs.forEach((slug) => {\n            if (this.columnStore[slug] !== undefined) {\n                newStore[slug] = this.columnStore[slug]\n            }\n        })\n\n        return this.transform(\n            newStore,\n            defs,\n            `Kept columns '${slugs}'`,\n            TransformType.FilterColumns\n        )\n    }\n\n    dropColumns(slugs: ColumnSlug[], message?: string): this {\n        const columnsToDrop = new Set(slugs)\n        const newStore = {\n            ...this.columnStore,\n        }\n        const defs = this.columnsAsArray\n            .filter((col) => !columnsToDrop.has(col.slug))\n            .map((col) => col.def)\n        slugs.forEach((slug) => {\n            delete newStore[slug]\n        })\n        return this.transform(\n            newStore,\n            defs,\n            message ?? `Dropped columns '${slugs}'`,\n            TransformType.FilterColumns\n        )\n    }\n\n    isRowEmpty(index: number): boolean {\n        const { columnStore } = this\n        return (\n            this.columnSlugs\n                .map((slug) => columnStore[slug][index])\n                .filter((value) => isNotErrorValue(value) && value !== \"\")\n                .length === 0\n        )\n    }\n\n    dropEmptyRows(): this {\n        return this.dropRowsAt(\n            this.indices\n                .map((index) => (this.isRowEmpty(index) ? index : null))\n                .filter(isPresent)\n        )\n    }\n\n    dropRowsWithErrorValuesForAnyColumn(slugs: ColumnSlug[]): this {\n        return this.rowFilter(\n            (row) => slugs.every((slug) => isNotErrorValue(row[slug])),\n            `Drop rows with empty or ErrorValues in any column: ${slugs.join(\n                \", \"\n            )}`\n        )\n    }\n\n    dropRowsWithErrorValuesForAllColumns(slugs: ColumnSlug[]): this {\n        return this.rowFilter(\n            (row) => slugs.some((slug) => isNotErrorValue(row[slug])),\n            `Drop rows with empty or ErrorValues in every column: ${slugs.join(\n                \", \"\n            )}`\n        )\n    }\n\n    renameColumn(oldSlug: ColumnSlug, newSlug: ColumnSlug): this {\n        return this.renameColumns({ [oldSlug]: newSlug })\n    }\n\n    // Todo: improve typings. After renaming a column the row interface should change. Applies to some other methods as well.\n    renameColumns(columnRenameMap: { [columnSlug: string]: ColumnSlug }): this {\n        const oldSlugs = Object.keys(columnRenameMap)\n        const newSlugs = Object.values(columnRenameMap)\n\n        const message =\n            `Renamed ` +\n            oldSlugs\n                .map((name, index) => `'${name}' to '${newSlugs[index]}'`)\n                .join(\" and \")\n\n        return this.transform(\n            renameColumnStore(this.columnStore, columnRenameMap),\n            this.defs.map((def) =>\n                oldSlugs.includes(def.slug)\n                    ? {\n                          ...def,\n                          slug: newSlugs[oldSlugs.indexOf(def.slug)],\n                      }\n                    : def\n            ),\n            message,\n            TransformType.RenameColumns\n        )\n    }\n\n    dropRowsAt(indices: number[], message?: string): this {\n        const mask = new FilterMask(this.numRows, indices, false)\n        if (mask.isNoop())\n            return this.noopTransform(message ?? `Dropping 0 rows`)\n\n        return this.transform(\n            this.columnStore,\n            this.defs,\n            message ?? `Dropping ${indices.length} rows`,\n            TransformType.FilterRows,\n            mask\n        )\n    }\n\n    replaceCells(\n        columnSlugs: ColumnSlug[],\n        replaceFn: (val: CoreValueType, index: number) => CoreValueType\n    ): this {\n        const newStore: CoreColumnStore = { ...this.columnStore }\n        columnSlugs.forEach((slug) => {\n            newStore[slug] = newStore[slug].map(replaceFn)\n        })\n        return this.transform(\n            newStore,\n            this.defs,\n            `Replaced all cells across columns ${columnSlugs.join(\" and \")}`,\n            TransformType.UpdateRows\n        )\n    }\n\n    combineColumns(\n        columnSlugs: ColumnSlug[],\n        def: COL_DEF_TYPE,\n        combineFn: (\n            row: Record<ColumnSlug, { value: CoreValueType; time: Time }>,\n            time: Time\n        ) => CoreValueType\n    ): this {\n        if (columnSlugs.length === 0) return this\n        const newStore: CoreColumnStore = { ...this.columnStore }\n        newStore[def.slug] = this.indices.map((index) => {\n            const time = this.timeColumn.valuesIncludingErrorValues[index]\n\n            const row: Record<\n                ColumnSlug,\n                { value: CoreValueType; time: Time }\n            > = {}\n            columnSlugs.forEach((slug) => {\n                row[slug] = {\n                    value: this.get(slug).valuesIncludingErrorValues[index],\n                    time: this.get(slug).originalTimeColumn\n                        .valuesIncludingErrorValues[index] as Time,\n                }\n            })\n\n            return combineFn(row, time as Time)\n        })\n        return this.transform(\n            newStore,\n            [...this.defs, def],\n            `Combined columns '${columnSlugs.join(\", \")}' into '${def.slug}'`,\n            TransformType.CombineColumns\n        )\n    }\n\n    replaceNonPositiveCellsForLogScale(columnSlugs: ColumnSlug[] = []): this {\n        return this.replaceCells(columnSlugs, (val) =>\n            typeof val !== \"number\" || val <= 0\n                ? ErrorValueTypes.InvalidOnALogScale\n                : val\n        )\n    }\n\n    replaceNegativeCellsWithErrorValues(columnSlugs: ColumnSlug[] = []): this {\n        return this.replaceCells(columnSlugs, (val) =>\n            typeof val !== \"number\" || val < 0\n                ? ErrorValueTypes.InvalidNegativeValue\n                : val\n        )\n    }\n\n    replaceNonNumericCellsWithErrorValues(columnSlugs: ColumnSlug[]): this {\n        return this.replaceCells(columnSlugs, (val) =>\n            !_.isNumber(val) ? ErrorValueTypes.NaNButShouldBeNumber : val\n        )\n    }\n\n    replaceRandomCells(\n        howMany = 1,\n        columnSlugs: ColumnSlug[] = [],\n        seed = Date.now(),\n        replacementGenerator: () => any = (): DroppedForTesting =>\n            ErrorValueTypes.DroppedForTesting\n    ): this {\n        return this.transform(\n            replaceRandomCellsInColumnStore(\n                this.columnStore,\n                howMany,\n                columnSlugs,\n                seed,\n                replacementGenerator\n            ),\n            this.defs,\n            `Replaced a random ${howMany} cells in ${columnSlugs.join(\n                \" and \"\n            )}`,\n            TransformType.UpdateRows\n        )\n    }\n\n    appendColumns(defs: COL_DEF_TYPE[]): this {\n        return this.transform(\n            this.columnStore,\n            this.defs.concat(defs),\n            `Appended columns ${defs\n                .map((def) => `'${def.slug}'`)\n                .join(\" and \")}`,\n            TransformType.AppendColumns\n        )\n    }\n\n    duplicateColumn(slug: ColumnSlug, overrides: COL_DEF_TYPE): this {\n        return this.transform(\n            {\n                ...this.columnStore,\n                [overrides.slug]: this.columnStore[slug],\n            },\n            this.defs.concat([\n                {\n                    ...this.get(slug).def,\n                    ...overrides,\n                },\n            ]),\n            `Duplicated column '${slug}' to column '${overrides.slug}'`,\n            TransformType.AppendColumns\n        )\n    }\n\n    appendColumnsIfNew(defs: COL_DEF_TYPE[]): this {\n        return this.appendColumns(defs.filter((def) => !this.has(def.slug)))\n    }\n\n    toMatrix(): any[][] {\n        const slugs = this.columnSlugs\n        const rows = this.rows.map((row) =>\n            slugs.map((slug) =>\n                isNotErrorValue(row[slug]) ? row[slug] : undefined\n            )\n        )\n        return [this.columnSlugs, ...rows]\n    }\n\n    // Same as toMatrix, but preserves error types\n    toTypedMatrix(): any[][] {\n        const slugs = this.columnSlugs\n        const rows = this.rows.map((row) => slugs.map((slug) => row[slug]))\n        return [this.columnSlugs, ...rows]\n    }\n\n    concat(tables: CoreTable[], message: string = `Combined tables`): this {\n        const all = [this, ...tables] as CoreTable[]\n        const defs = all.flatMap((table) => table.defs) as COL_DEF_TYPE[]\n        const uniqDefs = _.uniqBy(defs, (def) => def.slug)\n        return this.transform(\n            concatColumnStores(\n                all.map((table) => table.columnStore),\n                uniqDefs.map((def) => def.slug)\n            ),\n            uniqDefs,\n            message,\n            TransformType.Concat\n        )\n    }\n\n    /**\n     * Ensure a row exists for all values in columnSlug1 × columnSlug2 × ...\n     *\n     * For example, if we have a table:\n     *\n     *   ```\n     *   entityName, year, …\n     *   UK, 2000, …\n     *   UK, 2005, …\n     *   USA, 2003, …\n     *   ```\n     *\n     * After `complete([\"entityName\", \"year\"])`, we'd get:\n     *\n     *   ```\n     *   entityName, year, …\n     *   UK, 2000, …\n     *   UK, 2003, …\n     *   UK, 2005, …\n     *   USA, 2000, …\n     *   USA, 2003, …\n     *   USA, 2005, …\n     *   ```\n     *\n     */\n    complete(columnSlugs: [ColumnSlug, ColumnSlug]): this {\n        if (columnSlugs.length !== 2)\n            throw new Error(\"Can only run complete() for exactly 2 columns\")\n\n        const [slug1, slug2] = columnSlugs\n        const col1 = this.get(slug1)\n        const col2 = this.get(slug2)\n\n        // The output table will have exactly this many rows, since we assume that [col1, col2] are primary keys\n        // (i.e. there are no two rows with the same key), and every combination that doesn't exist yet we will add.\n        const cartesianProductSize = col1.numUniqs * col2.numUniqs\n        if (this.numRows >= cartesianProductSize) {\n            if (this.numRows > cartesianProductSize)\n                throw new Error(\"Table has more rows than expected\")\n\n            // Table is already complete\n            return this\n        }\n\n        // Map that points from a value in col1 to a set of values in col2.\n        // It's filled with all the values that already exist in the table, so we\n        // can later take the difference.\n        const existingRowValues = new Map<CoreValueType, Set<CoreValueType>>()\n        for (const index of this.indices) {\n            const val1 = col1.values[index]\n            const val2 = col2.values[index]\n            if (!existingRowValues.has(val1))\n                existingRowValues.set(val1, new Set([val2]))\n            else existingRowValues.get(val1)!.add(val2)\n        }\n\n        // The below code should be as performant as possible, since it's often iterating over hundreds of thousands of rows.\n        // The below implementation has been benchmarked against a few alternatives (using flatMap, map, and Array.from), and\n        // is the fastest.\n        // See https://jsperf.app/zudoye.\n        const rowsToAddCol1: CoreValueType[] = []\n        const rowsToAddCol2: CoreValueType[] = []\n        const col2UniqValuesCount = col2.uniqValuesAsSet.size\n        // Add rows for all combinations of values that are not contained in `existingRowValues`.\n        for (const val1 of col1.uniqValuesAsSet) {\n            const existingVals2 = existingRowValues.get(val1)\n\n            // perf: if all values in col2 are already present for this value in col1, skip\n            // this iteration. This is a relatively common case, so we can save some time.\n            if (existingVals2?.size === col2UniqValuesCount) continue\n\n            // Find the values in col2 that need to be inserted for this value in col1: col2.uniqValuesAsSet - existingVals2\n            const diff = new Set(col2.uniqValuesAsSet)\n            for (const val2 of existingVals2 || []) diff.delete(val2)\n\n            for (const val2 of diff) {\n                rowsToAddCol1.push(val1)\n                rowsToAddCol2.push(val2)\n            }\n        }\n        const appendColumnStore: CoreColumnStore = {\n            [slug1]: rowsToAddCol1,\n            [slug2]: rowsToAddCol2,\n        }\n        const appendTable = new (this.constructor as typeof CoreTable)(\n            appendColumnStore,\n            this.defs,\n            { parent: this }\n        )\n\n        return this.concat(\n            [appendTable],\n            `Append missing combos of ${columnSlugs}`\n        )\n    }\n\n    static getPreposition(col: TimeColumn | CoreColumn): string {\n        return col instanceof TimeColumn ? col.preposition : \"in\"\n    }\n}\n\nclass FilterMask {\n    private mask: boolean[]\n    private numRows: number\n    constructor(\n        numRows: number,\n        input: boolean[] | number[],\n        keepThese = true\n    ) {\n        this.numRows = numRows\n        if (typeof input[0] === \"boolean\") this.mask = input as boolean[]\n        else {\n            const set = new Set(input as number[])\n            this.mask = _.range(0, numRows).map((index) =>\n                set.has(index) ? keepThese : !keepThese\n            )\n        }\n    }\n\n    isNoop(): boolean {\n        return this.mask.every((value) => value)\n    }\n\n    apply(columnStore: CoreColumnStore): CoreColumnStore {\n        const columnsObject: CoreColumnStore = {}\n        const keepIndexes: number[] = []\n        for (let i = 0; i < this.numRows; i++) {\n            if (this.mask[i]) keepIndexes.push(i)\n        }\n\n        // Optimization: early return if we're keeping all rows\n        if (keepIndexes.length === this.numRows) {\n            return columnStore\n        }\n\n        Object.keys(columnStore).forEach((slug) => {\n            const originalColumn = columnStore[slug]\n            const newColumn: CoreValueType[] = new Array(keepIndexes.length)\n            for (let i = 0; i < keepIndexes.length; i++) {\n                newColumn[i] = originalColumn[keepIndexes[i]]\n            }\n\n            columnsObject[slug] = newColumn\n        })\n        return columnsObject\n    }\n}\n\n/**\n * Allows you to store your column definitions in CSV/TSV like:\n * slug,name,type etc.\n *\n * todo: define all column def property types\n */\nexport const columnDefinitionsFromInput = <T extends CoreRow>(\n    input: CoreTableInputOption\n): T[] =>\n    new CoreTable<T>(input).columnFilter(\n        \"slug\",\n        (value) => !!value,\n        \"Keep only column defs with a slug\"\n    ).rows\n","import * as _ from \"lodash-es\"\nimport {\n    intersectionOfSets,\n    findClosestTimeIndex,\n    sortNumeric,\n    getClosestTimePairs,\n    sortedFindClosest,\n    cagr,\n    isPresent,\n    TimeBound,\n    ColumnSlug,\n    imemo,\n    ToleranceStrategy,\n    differenceOfSets,\n    sortedFindClosestIndex,\n    csvEscape,\n} from \"@ourworldindata/utils\"\nimport {\n    Time,\n    TransformType,\n    CoreColumnStore,\n    Color,\n    CoreValueType,\n    ColumnTypeNames,\n    EntityName,\n    OwidColumnDef,\n    OwidRow,\n    OwidTableSlugs,\n    ErrorValue,\n    ToleranceOptions,\n    CoreColumnDef,\n} from \"@ourworldindata/types\"\nimport { CoreTable } from \"./CoreTable.js\"\nimport { ErrorValueTypes, isNotErrorValue } from \"./ErrorValues.js\"\nimport {\n    getOriginalTimeColumnSlug,\n    makeOriginalValueSlugFromColumnSlug,\n    makeOriginalTimeSlugFromColumnSlug,\n    makeOriginalStartTimeSlugFromColumnSlug,\n    timeColumnSlugFromColumnDef,\n    toPercentageColumnDef,\n    makeAnnotationsSlug,\n} from \"./OwidTableUtil.js\"\nimport {\n    linearInterpolation,\n    toleranceInterpolation,\n    replaceDef,\n    InterpolationProvider,\n    InterpolationContext,\n} from \"./CoreTableUtils.js\"\nimport { CoreColumn, ColumnTypeMap } from \"./CoreTableColumns.js\"\n\nexport type OwidColumn = CoreColumn<OwidTable, OwidColumnDef>\n\n// An OwidTable is a subset of Table. An OwidTable always has EntityName, EntityCode, EntityId, and Time columns,\n// and value column(s). Whether or not we need in the long run is uncertain and it may just be a stepping stone\n// to go from our Variables paradigm to the Table paradigm.\nexport class OwidTable extends CoreTable<OwidRow, OwidColumnDef> {\n    override isOwidTable(): boolean {\n        return true\n    }\n\n    @imemo get availableEntityNames(): any[] {\n        return Array.from(this.availableEntityNameSet)\n    }\n\n    @imemo get availableEntityNameSet(): Set<string> {\n        return this.entityNameColumn.uniqValuesAsSet\n    }\n\n    @imemo get entityNameColumn(): OwidColumn {\n        return (\n            this.getFirstColumnWithType(ColumnTypeNames.EntityName) ??\n            this.get(OwidTableSlugs.entityName)\n        )\n    }\n\n    @imemo get entityNameSlug(): string {\n        return this.entityNameColumn.slug\n    }\n\n    @imemo get entityCodeColumn(): OwidColumn {\n        return (\n            this.getFirstColumnWithType(ColumnTypeNames.EntityCode) ??\n            this.get(OwidTableSlugs.entityCode)\n        )\n    }\n\n    @imemo get entityCodeSlug(): string {\n        return this.entityCodeColumn.slug\n    }\n\n    @imemo get entityIdColumn(): OwidColumn {\n        return (\n            this.getFirstColumnWithType(ColumnTypeNames.EntityId) ??\n            this.get(OwidTableSlugs.entityId)\n        )\n    }\n\n    @imemo get entityIdSlug(): string {\n        return this.entityIdColumn.slug\n    }\n\n    @imemo get minTime(): Time {\n        return _.min(this.allTimes) as Time\n    }\n\n    @imemo get maxTime(): number | undefined {\n        return _.max(this.allTimes)\n    }\n\n    @imemo private get allTimes(): Time[] {\n        return this.get(this.timeColumn.slug).values\n    }\n\n    @imemo get rowIndicesByEntityName(): Map<string, number[]> {\n        return this.rowIndex([this.entityNameSlug])\n    }\n\n    getAnnotationColumnSlug(columnDef: OwidColumnDef): string | undefined {\n        return _.isEmpty(columnDef?.annotationsColumnSlug)\n            ? makeAnnotationsSlug(columnDef.slug)\n            : columnDef.annotationsColumnSlug\n    }\n\n    // todo: instead of this we should probably make annotations another property on charts—something like \"annotationsColumnSlugs\"\n    getAnnotationColumnForColumn(columnSlug: ColumnSlug): OwidColumn {\n        const def = this.get(columnSlug).def\n        const slug = this.getAnnotationColumnSlug(def)\n        return this.get(slug)\n    }\n\n    getTimesUniqSortedAscForColumns(columnSlugs: ColumnSlug[]): number[] {\n        // todo: should be easy to speed up if necessary.\n        return sortNumeric(\n            _.uniq(\n                this.getColumns(columnSlugs)\n                    .filter((col) => col)\n                    .flatMap((col) => col.uniqTimesAsc)\n            )\n        )\n    }\n\n    timeDomainFor(slugs: ColumnSlug[]): [Time | undefined, Time | undefined] {\n        const cols = this.getColumns(slugs)\n        const mins = cols.map((col) => col.minTime)\n        const maxes = cols.map((col) => col.maxTime)\n        return [_.min(mins), _.max(maxes)]\n    }\n\n    originalTimeDomainFor(\n        slugs: ColumnSlug[]\n    ): [Time | undefined, Time | undefined] {\n        const cols = this.getColumns(slugs)\n        const mins = cols.map((col) => _.min(col.originalTimes))\n        const maxes = cols.map((col) => _.max(col.originalTimes))\n        return [_.min(mins), _.max(maxes)]\n    }\n\n    filterByEntityNames(names: EntityName[]): this {\n        const namesSet = new Set(names)\n        return this.columnFilter(\n            this.entityNameSlug,\n            (value) => namesSet.has(value as string),\n            `Filter out all entities except '${names}'`\n        )\n    }\n\n    filterByEntityNamesUsingIncludeExcludePattern({\n        excluded,\n        included,\n    }: {\n        excluded?: EntityName[]\n        included?: EntityName[]\n    }): this {\n        if (!included && !excluded) return this\n\n        const excludedSet = new Set(excluded)\n        const includedSet = new Set(included)\n\n        const excludeFilter = (entityName: EntityName): boolean =>\n            !excludedSet.has(entityName)\n        const includeFilter =\n            includedSet.size > 0\n                ? (entityName: EntityName): boolean =>\n                      includedSet.has(entityName)\n                : (): boolean => true\n\n        const filterFn = (entityName: any): boolean =>\n            excludeFilter(entityName) && includeFilter(entityName)\n\n        const excludedList = excluded ? excluded.join(\", \") : \"\"\n        const includedList = included ? included.join(\", \") : \"\"\n\n        return this.columnFilter(\n            this.entityNameSlug,\n            filterFn,\n            `Excluded entities specified by author: ${excludedList} - Included entities specified by author: ${includedList}`\n        )\n    }\n\n    // Does a stable sort by time. You can refer to this table for fast time filtering.\n    @imemo private get sortedByTime(): this {\n        if (this.timeColumn.isMissing) return this\n        return this.sortBy([this.timeColumn.slug])\n    }\n\n    filterByTimeRange(start: TimeBound, end: TimeBound): this {\n        if (this.isBlank) return this\n\n        // We may want to do this time adjustment in Grapher instead of here.\n        const adjustedStart = start === Infinity ? this.maxTime! : start\n        const adjustedEnd = end === -Infinity ? this.minTime : end\n        // todo: we should set a time column onload so we don't have to worry about it again.\n        const timeColumnSlug = this.timeColumn?.slug || OwidTableSlugs.time\n\n        const description = `Keep only rows with Time between ${adjustedStart} - ${adjustedEnd}`\n\n        // perf: if the time range is greater than the table's time range, we can skip the filter\n        if (adjustedStart <= this.minTime && adjustedEnd >= this.maxTime!)\n            return this.noopTransform(description).sortedByTime\n\n        return this.columnFilter(\n            timeColumnSlug,\n            (time) =>\n                (time as number) >= adjustedStart &&\n                (time as number) <= adjustedEnd,\n            description\n\n            // Sorting by time, because incidentally some parts of the code depended on this method\n            // returning sorted rows.\n        ).sortedByTime\n    }\n\n    filterByTargetTimes(targetTimes: Time[], tolerance = 0): this {\n        const timeColumn = this.timeColumn\n        const timeValues = timeColumn.valuesIncludingErrorValues\n\n        // The common case here is that the tolerance is set to 0, in which case we can simply filter\n        // the time column for the target times.\n        if (tolerance === 0) {\n            const targetTimesSet = new Set(targetTimes)\n            return this.columnFilter(\n                timeColumn.slug,\n                (time) => targetTimesSet.has(time as number),\n                `Keep only rows with time equal to one of the target times: ${targetTimes.join(\n                    \", \"\n                )}`\n            )\n        }\n\n        // If tolerance isn't 0, then we need to find the closest time for each entity, while incorporating the tolerance.\n        const entityNameToIndices = this.rowIndicesByEntityName\n        const matchingIndices = new Set<number>()\n        this.availableEntityNames.forEach((entityName) => {\n            const indices = entityNameToIndices.get(entityName) || []\n            const allTimesAsc = indices\n                .map((index) => ({ time: timeValues[index] as number, index }))\n                .sort((a, b) => a.time - b.time)\n\n            targetTimes.forEach((targetTime) => {\n                const index = findClosestTimeIndex(\n                    allTimesAsc.map((t) => t.time),\n                    targetTime,\n                    tolerance\n                )\n                const closest =\n                    index === undefined ? undefined : allTimesAsc[index]\n                if (closest !== undefined) matchingIndices.add(closest.index)\n            })\n        })\n\n        return this.columnFilter(\n            this.entityNameSlug,\n            (row, index) => matchingIndices.has(index),\n            `Keep a row for each entity for each of the closest times ${targetTimes.join(\n                \", \"\n            )} with tolerance ${tolerance}`\n        )\n    }\n\n    hasAnyColumnNoValidValue(slugs: ColumnSlug[]): boolean {\n        return slugs.some((slug) => this.get(slug).numValues === 0)\n    }\n\n    dropAllRows(): this {\n        return this.dropRowsAt(this.indices, \"Drop all rows\")\n    }\n\n    dropRowsWithErrorValuesForColumn(slug: ColumnSlug): this {\n        return this.columnFilter(\n            slug,\n            (value) => isNotErrorValue(value),\n            `Drop rows with empty or ErrorValues in ${slug} column`\n        )\n    }\n\n    // Drop _all rows_ for an entity if there is any column that has no valid values for that entity.\n    dropEntitiesThatHaveNoDataInSomeColumn(columnSlugs: ColumnSlug[]): this {\n        const indexesByEntityName = this.rowIndicesByEntityName\n\n        // Iterate over all entities, and remove them as we go if they have no data in some column\n        const entityNamesToKeep = new Set(indexesByEntityName.keys())\n\n        for (const slug of columnSlugs) {\n            const col = this.get(slug)\n\n            // Optimization, if there are no error values in this column, we can skip this column\n            if (col.numErrorValues === 0) continue\n\n            for (const entityName of entityNamesToKeep) {\n                const indicesForEntityName = indexesByEntityName.get(entityName)\n                if (!indicesForEntityName)\n                    throw new Error(\"Unexpected: entity not found in index map\")\n\n                // Optimization: We don't care about the number of valid/error values, we just need\n                // to know if there is at least one valid value\n                const hasSomeValidValueForEntityInCol =\n                    indicesForEntityName.some((index) =>\n                        isNotErrorValue(col.valuesIncludingErrorValues[index])\n                    )\n\n                // Optimization: If we find a column that this entity has no data in we can remove\n                // it immediately, no need to iterate over other columns also\n                if (!hasSomeValidValueForEntityInCol)\n                    entityNamesToKeep.delete(entityName)\n            }\n        }\n\n        const entityNamesToDrop = differenceOfSets([\n            this.availableEntityNameSet,\n            entityNamesToKeep,\n        ])\n        const droppedEntitiesStr =\n            entityNamesToDrop.size > 0\n                ? [...entityNamesToDrop].join(\", \")\n                : \"(None)\"\n\n        if (entityNamesToDrop.size === 0) {\n            return this.noopTransform(\n                `Drop entities that have no data in some column`\n            )\n        }\n\n        return this.columnFilter(\n            this.entityNameSlug,\n            (rowEntityName) => entityNamesToKeep.has(rowEntityName as string),\n            `Drop ${entityNamesToDrop.size} entities that have no data in some column: ${columnSlugs.join(\", \")}.\\nDropped entities: ${droppedEntitiesStr}`\n        )\n    }\n\n    // Drop _all rows_ for an entity if all columns have at least one invalid or missing value for that entity.\n    dropEntitiesThatHaveSomeMissingOrErrorValueInAllColumns(\n        columnSlugs: ColumnSlug[]\n    ): this {\n        const indexesByEntityName = this.rowIndicesByEntityName\n        const uniqTimes = new Set(this.allTimes)\n\n        // entity names to iterate over\n        const entityNamesToIterateOver = new Set(indexesByEntityName.keys())\n\n        // set of entities we want to keep\n        const entityNamesToKeep = new Set<string>()\n\n        // total number of entities\n        const entityCount = entityNamesToIterateOver.size\n\n        // helper function to generate operation name\n        const makeOpName = (entityNamesToKeep: Set<EntityName>): string => {\n            const entityNamesToDrop = differenceOfSets([\n                this.availableEntityNameSet,\n                entityNamesToKeep,\n            ])\n            const droppedEntitiesStr =\n                entityNamesToDrop.size > 0\n                    ? [...entityNamesToDrop].join(\", \")\n                    : \"(None)\"\n            return `Drop entities that have some missing or error value in all column: ${columnSlugs.join(\", \")}.\\nDropped entities: ${droppedEntitiesStr}`\n        }\n\n        // Optimization: if there is a column that has a valid data entry for\n        // every entity and every time, we are done\n        for (const slug of columnSlugs) {\n            const col = this.get(slug)\n\n            if (\n                col.numValues === entityCount * uniqTimes.size &&\n                col.numErrorValues === 0\n            ) {\n                const entityNamesToKeep = new Set(indexesByEntityName.keys())\n\n                return this.columnFilter(\n                    this.entityNameSlug,\n                    (rowEntityName) =>\n                        entityNamesToKeep.has(rowEntityName as string),\n                    makeOpName(entityNamesToKeep)\n                )\n            }\n        }\n\n        for (const slug of columnSlugs) {\n            const col = this.get(slug)\n\n            for (const entityName of entityNamesToIterateOver) {\n                const indicesForEntityName = indexesByEntityName.get(entityName)\n                if (!indicesForEntityName)\n                    throw new Error(\"Unexpected: entity not found in index map\")\n\n                // Optimization: If the column is missing values for the entity,\n                // we know we can't make a decision yet, so we skip this entity\n                if (indicesForEntityName.length < uniqTimes.size) continue\n\n                // Optimization: We don't care about the number of valid/error\n                // values, we just need to know if there is at least one invalid value\n                const hasSomeInvalidValueForEntityInCol =\n                    indicesForEntityName.some(\n                        (index) =>\n                            !isNotErrorValue(\n                                col.valuesIncludingErrorValues[index]\n                            )\n                    )\n\n                // Optimization: If all values are valid, we know we want to keep this entity,\n                // so we remove it from the entities to iterate over\n                if (!hasSomeInvalidValueForEntityInCol) {\n                    entityNamesToKeep.add(entityName)\n                    entityNamesToIterateOver.delete(entityName)\n                }\n            }\n        }\n\n        return this.columnFilter(\n            this.entityNameSlug,\n            (rowEntityName) => entityNamesToKeep.has(rowEntityName as string),\n            makeOpName(entityNamesToKeep)\n        )\n    }\n\n    private sumsByTime(columnSlug: ColumnSlug): Map<number, number> {\n        const timeValues = this.timeColumn.values\n        const values = this.get(columnSlug).values as number[]\n        if (timeValues.length !== values.length)\n            // Throwing here may seem drastic but this will lead to an error in any case if the lengths are different\n            // (can happen when dropping rows with errors is done incorrectly).\n            // When it happens then throwing here is an easier to diagnose error\n            throw Error(\n                `Tried to run sumsByTime when timeValues (${timeValues.length}) and values (${values.length}) had different length`\n            )\n        const map = new Map<number, number>()\n        timeValues.forEach((time, index) =>\n            map.set(time, (map.get(time) ?? 0) + values[index])\n        )\n        return map\n    }\n\n    // todo: this needs tests (and/or drop in favor of someone else's package)\n    // Shows how much each entity contributed to the given column for each time period\n    toPercentageFromEachEntityForEachTime(columnSlug: ColumnSlug): this {\n        if (!this.has(columnSlug)) return this\n        const timeColumn = this.timeColumn\n        const col = this.get(columnSlug)\n        const timeTotals = this.sumsByTime(columnSlug)\n        const timeValues = timeColumn.values\n        const newDefs = replaceDef(this.defs, [\n            toPercentageColumnDef(col.def, ColumnTypeNames.RelativePercentage),\n        ])\n        const newColumnStore: CoreColumnStore = {\n            ...this.columnStore,\n            [columnSlug]: this.columnStore[columnSlug].map((val, index) => {\n                const timeTotal = timeTotals.get(timeValues[index])\n                if (timeTotal === 0) return ErrorValueTypes.DivideByZeroError\n                return (100 * (val as number)) / timeTotal!\n            }),\n        }\n        return this.transform(\n            newColumnStore,\n            newDefs,\n            `Transformed ${columnSlug} column to be % contribution of each entity for that time`,\n            TransformType.UpdateColumnDefsAndApply\n        )\n    }\n\n    // If you want to see how much each column contributed to the entity for that year, use this.\n    // NB: Uses absolute value. So if one entity added 100, and another -100, they both would have contributed \"50%\" to that year.\n    // Otherwise we'd have NaN.\n    toPercentageFromEachColumnForEachEntityAndTime(\n        columnSlugs: ColumnSlug[]\n    ): this {\n        columnSlugs = columnSlugs.filter((slug) => this.has(slug))\n        if (!columnSlugs.length) return this\n\n        const newDefs = this.defs.map((def) => {\n            if (columnSlugs.includes(def.slug))\n                return toPercentageColumnDef(\n                    def,\n                    ColumnTypeNames.RelativePercentage\n                )\n            return def\n        })\n\n        const columnStore = this.columnStore\n        const columnStorePatch: CoreColumnStore = {}\n\n        const totals = new Array(this.numRows).fill(0).map((__, i) =>\n            _.sumBy(columnSlugs, (slug) => {\n                const value = columnStore[slug][i]\n                return _.isNumber(value) ? Math.abs(value) : 0\n            })\n        )\n\n        columnSlugs.forEach((slug) => {\n            columnStorePatch[slug] = columnStore[slug].map((value, i) => {\n                const total = totals[i]\n                if (!_.isNumber(value) || !_.isNumber(total)) return value\n                if (total === 0) return ErrorValueTypes.DivideByZeroError\n                return (100 * Math.abs(value)) / total\n            })\n        })\n\n        const newColumnStore = {\n            ...columnStore,\n            ...columnStorePatch,\n        }\n\n        return this.transform(\n            newColumnStore,\n            newDefs,\n            `Transformed columns from absolute numbers to % of abs sum of ${columnSlugs.join(\n                \",\"\n            )} `,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    // todo: this needs tests (and/or drop in favor of someone else's package)\n    // If you wanted to build a table showing something like GDP growth relative to 1950, use this.\n    toTotalGrowthForEachColumnComparedToStartTime(\n        startTimeBound: TimeBound,\n        columnSlugs: ColumnSlug[]\n    ): this {\n        if (this.timeColumn.isMissing) return this\n        const timeColumnSlug = this.timeColumn.slug\n        const newDefs = this.defs.map((def) => {\n            if (columnSlugs.includes(def.slug))\n                return toPercentageColumnDef(\n                    def,\n                    ColumnTypeNames.PercentChangeOverTime\n                )\n            return def\n        })\n        const newRows = Object.values(\n            _.groupBy(this.sortedByTime.rows, (row) => row[this.entityNameSlug])\n        ).flatMap((rowsForSingleEntity) => {\n            columnSlugs.forEach((valueSlug) => {\n                let comparisonValue: number\n                rowsForSingleEntity = rowsForSingleEntity.map(\n                    (row: Readonly<OwidRow>) => {\n                        const newRow = {\n                            ...row,\n                        }\n\n                        const value = row[valueSlug]\n\n                        if (row[timeColumnSlug] < startTimeBound) {\n                            newRow[valueSlug] =\n                                ErrorValueTypes.MissingValuePlaceholder\n                        } else if (!_.isNumber(value)) {\n                            newRow[valueSlug] =\n                                ErrorValueTypes.NaNButShouldBeNumber\n                        } else if (comparisonValue !== undefined) {\n                            // Note: comparisonValue can be negative!\n                            // +value / -comparisonValue = negative growth, which is incorrect.\n                            newRow[valueSlug] =\n                                (100 * (value - comparisonValue)) /\n                                Math.abs(comparisonValue)\n                        } else if (value === 0) {\n                            newRow[valueSlug] =\n                                ErrorValueTypes.MissingValuePlaceholder\n                        } else {\n                            comparisonValue = value\n                            newRow[valueSlug] = 0\n                        }\n\n                        return newRow\n                    }\n                )\n            })\n            return rowsForSingleEntity\n        })\n\n        return this.transform(\n            newRows,\n            newDefs,\n            `Transformed columns from absolute values to % of time ${startTimeBound} for columns ${columnSlugs.join(\n                \",\"\n            )} `,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    keepMinTimeAndMaxTimeForEachEntityOnly(): this {\n        const indexMap = this.rowIndicesByEntityName\n        const timeColumn = this.timeColumn\n        if (timeColumn.isMissing) return this\n        const timeValues = timeColumn.valuesIncludingErrorValues\n        const matchingIndices = new Set<number>()\n        indexMap.forEach((indices) =>\n            [_.minBy, _.maxBy]\n                .map((f) => f(indices, (index) => timeValues[index]))\n                .filter(isPresent)\n                .forEach((index) => matchingIndices.add(index))\n        )\n        return this.columnFilter(\n            timeColumn.slug,\n            (row, index) => matchingIndices.has(index),\n            `Keep minTime & maxTime rows only for each entity`\n        )\n    }\n\n    private getAverageAnnualChangeIndicesByEntity(\n        columnSlugs: ColumnSlug[]\n    ): Map<EntityName, [number, number]> {\n        const columns = columnSlugs.map((slug) => this.get(slug))\n        const indexMap = this.rowIndicesByEntityName\n        const timeValues = this.timeColumn.valuesIncludingErrorValues\n\n        // Find indices of min & max rows\n        const entityNameToIndices = new Map<EntityName, [number, number]>()\n        indexMap.forEach((indices, entityName) => {\n            // We are discarding every row which contains a 0 for any columnSlug.\n            // Technically, to be more correct, we should support distinct min/max indices for each\n            // columnSlug, but that only makes a tiny difference in a tiny subset of charts.\n            const nonZeroValueIndices = indices.filter((index) =>\n                columns.every((col) => {\n                    const value = col.valuesIncludingErrorValues[index]\n                    return _.isNumber(value) && value !== 0\n                })\n            )\n            const minIndex = _.minBy(\n                nonZeroValueIndices,\n                (index) => timeValues[index]\n            )\n            const maxIndex = _.maxBy(indices, (index) => timeValues[index])\n            if (minIndex === undefined || maxIndex === undefined) return\n\n            const allValuePairsHaveDistinctTime = columns.every((col) => {\n                const originalTimes =\n                    this.columnStore[col.originalTimeColumnSlug]\n                return originalTimes[minIndex] !== originalTimes[maxIndex]\n            })\n            if (allValuePairsHaveDistinctTime)\n                entityNameToIndices.set(entityName, [minIndex, maxIndex])\n        })\n\n        return entityNameToIndices\n    }\n\n    toAverageAnnualChangeForEachEntity(columnSlugs: ColumnSlug[]): this {\n        columnSlugs = columnSlugs.filter((slug) => this.has(slug))\n        if (\n            this.timeColumn.isMissing ||\n            !(this.timeColumn instanceof ColumnTypeMap.Year) ||\n            columnSlugs.length === 0\n        )\n            return this\n\n        const columns = columnSlugs.map((slug) => this.get(slug))\n        const entityNameToIndices =\n            this.getAverageAnnualChangeIndicesByEntity(columnSlugs)\n\n        // Overwrite table rows\n        const rows: OwidRow[] = []\n        entityNameToIndices.forEach((indices) => {\n            const [startRow, endRow] = this.rowsAt(indices)\n\n            const newRow: OwidRow = { ...endRow }\n            columns.forEach((col) => {\n                const timeSlug = col.originalTimeColumnSlug\n\n                const startTime = startRow[timeSlug]\n                const endTime = endRow[timeSlug]\n                const yearsElapsed = endTime - startTime\n\n                const startValue = startRow[col.slug]\n                const endValue = endRow[col.slug]\n\n                // Update to average annual change\n                newRow[col.slug] = cagr(startValue, endValue, yearsElapsed)\n\n                // Add original start time column\n                const startTimeSlug = makeOriginalStartTimeSlugFromColumnSlug(\n                    col.slug\n                )\n                newRow[startTimeSlug] = startTime\n            })\n\n            rows.push(newRow)\n        })\n\n        const newDefs: CoreColumnDef[] = [\n            ...replaceDef(\n                this.defs,\n                columns.map((col) =>\n                    toPercentageColumnDef(\n                        col.def,\n                        ColumnTypeNames.PercentChangeOverTime\n                    )\n                )\n            ),\n            ...columns.map((col) => {\n                return {\n                    ...this.timeColumn.def,\n                    slug: makeOriginalStartTimeSlugFromColumnSlug(col.slug),\n                    derivedFrom: {\n                        columnSlug: col.slug,\n                        relationship: \"originalStartTime\",\n                    },\n                } satisfies OwidColumnDef\n            }),\n        ]\n\n        return this.transform(\n            rows,\n            newDefs,\n            `Average annual change for columns: ${columnSlugs.join(\", \")}`,\n            TransformType.UpdateRows\n        )\n    }\n\n    toPrettyCsv(options?: {\n        excludeColumns?: ColumnSlug[]\n        sortBy?: ColumnSlug[]\n        useShortNames?: boolean\n    }): string {\n        const {\n            excludeColumns = [this.entityIdSlug],\n            sortBy = [this.entityNameSlug],\n            useShortNames = false,\n        } = options ?? {}\n\n        const makeShortName = (name: string): string =>\n            name.toLowerCase().replace(/\\s+/g, \"_\")\n\n        const getLabelForColumn = (col: OwidColumn): string => {\n            const def = col.def\n            return useShortNames\n                ? (def.shortName ?? makeShortName(col.nonEmptyDisplayName))\n                : col.nonEmptyDisplayName\n        }\n\n        const formatDataColumnName = (col: OwidColumn): string => {\n            const def = col.def\n\n            let label = getLabelForColumn(col)\n\n            if (def.targetTime !== undefined) {\n                const targetTime = col.formatTime(def.targetTime)\n                label += useShortNames\n                    ? `__in_${targetTime}`\n                    : ` in ${targetTime}`\n            }\n\n            if (def.display?.isProjection)\n                label += useShortNames ? \"__projected\" : \" (Projected)\"\n\n            if (col.def.derivedFrom?.relationship === \"annotations\") {\n                const dataSlug = col.def.derivedFrom.columnSlug\n                const dataColumn = this.get(dataSlug)\n                const suffix = useShortNames\n                    ? \"__annotations\"\n                    : \" (Annotations)\"\n                label = `${getLabelForColumn(dataColumn)}${suffix}`\n            }\n\n            return label\n        }\n\n        const formatTimeColumnName = (col: CoreColumn): string => {\n            const dayOrYear = col instanceof ColumnTypeMap.Day ? \"Day\" : \"Year\"\n            const timeString = useShortNames\n                ? makeShortName(dayOrYear)\n                : dayOrYear\n\n            if (col.def.derivedFrom?.relationship === \"originalTime\") {\n                const dataSlug = col.def.derivedFrom.columnSlug\n                const dataColumn = this.get(dataSlug)\n\n                const suffix = useShortNames\n                    ? `__original_${timeString.toLowerCase()}`\n                    : ` (Original ${timeString})`\n\n                return formatDataColumnName(dataColumn) + suffix\n            }\n\n            return timeString\n        }\n\n        const formatColumnName = (col: OwidColumn): string =>\n            col.isTimeColumn\n                ? formatTimeColumnName(col)\n                : formatDataColumnName(col)\n\n        return this.dropColumns(excludeColumns)\n            .sortBy(sortBy)\n            .toCsv({ formatColumnName })\n    }\n\n    toCsv(options?: {\n        delimiter?: string\n        formatColumnName?: (col: OwidColumn) => string\n    }): string {\n        const {\n            delimiter = \",\",\n            formatColumnName = (col: OwidColumn): string => col.slug,\n        } = options ?? {}\n\n        const header =\n            this.columnsAsArray\n                .map((col) => csvEscape(formatColumnName(col)))\n                .join(delimiter) + \"\\n\"\n\n        const body = this.rows\n            .map((row) =>\n                this.columnsAsArray.map((col) => {\n                    const value = row[col.slug]\n                    return isNotErrorValue(value)\n                        ? (col.formatForCsv(value) ?? \"\")\n                        : \"\"\n                })\n            )\n            .map((row) => row.join(delimiter))\n            .join(\"\\n\")\n\n        return header + body\n    }\n\n    @imemo get entityNameColorIndex(): Map<EntityName, Color> {\n        return this.valueIndex(\n            this.entityNameSlug,\n            OwidTableSlugs.entityColor\n        ) as Map<EntityName, Color>\n    }\n\n    getColorForEntityName(entityName: EntityName): Color | undefined {\n        return this.entityNameColorIndex.get(entityName)\n    }\n\n    @imemo get entityNameToCodeMap(): Map<EntityName, string> {\n        return this.valueIndex(this.entityNameSlug, this.entityCodeSlug) as Map<\n            EntityName,\n            string\n        >\n    }\n\n    @imemo get columnDisplayNameToColorMap(): Map<string, Color> {\n        return new Map(\n            this.columnsAsArray\n                .filter((col) => col.def.color)\n                .map((col) => [col.displayName, col.def.color!])\n        )\n    }\n\n    // This assumes the table is sorted where the times for entity names go in asc order.\n    // The whole table does not have to be sorted by time.\n    getLatestValueForEntity(\n        entityName: EntityName,\n        columnSlug: ColumnSlug\n    ): CoreValueType | undefined {\n        const indices = this.rowIndicesByEntityName.get(entityName)\n        if (!indices) return undefined\n        const values = this.get(columnSlug).valuesIncludingErrorValues\n        const descending = indices.toReversed()\n        const index = descending.find(\n            (index) => !(values[index] instanceof ErrorValue)\n        )\n        return index !== undefined ? values[index] : undefined\n    }\n\n    entitiesWith(columnSlugs: ColumnSlug[]): Set<EntityName> {\n        if (!columnSlugs.length) return new Set()\n        if (columnSlugs.length === 1)\n            return new Set(this.get(columnSlugs[0]).uniqEntityNames)\n\n        return intersectionOfSets<EntityName>(\n            columnSlugs.map((slug) => new Set(this.get(slug).uniqEntityNames))\n        )\n    }\n\n    // Retrieves the two columns `columnSlug` and `timeColumnSlug` from the table and\n    // passes their values to the respective interpolation method.\n    // `withAllRows` is expected to be completed and sorted.\n    private interpolate<K extends InterpolationContext>(\n        withAllRows: this,\n        columnSlug: ColumnSlug,\n        timeColumnSlug: ColumnSlug,\n        interpolation: InterpolationProvider<K>,\n        context: K\n    ): { values: CoreValueType[]; times: number[] } {\n        const groupBoundaries = withAllRows.groupBoundaries(this.entityNameSlug)\n        const col = withAllRows.get(columnSlug)\n        const validIndices = col.validRowIndices\n        const newValues = col.valuesIncludingErrorValues.slice()\n        const newTimes = withAllRows\n            .get(timeColumnSlug)\n            .valuesIncludingErrorValues.slice() as Time[]\n        groupBoundaries.forEach((_, index) => {\n            interpolation(\n                newValues,\n                newTimes,\n                validIndices,\n                context,\n                groupBoundaries[index],\n                groupBoundaries[index + 1]\n            )\n        })\n\n        return {\n            values: newValues,\n            times: newTimes,\n        }\n    }\n\n    // TODO generalize `interpolateColumnWithTolerance` and `interpolateColumnLinearly` more\n    // There are finicky details in both of them that complicate this\n    interpolateColumnWithTolerance(\n        columnSlug: ColumnSlug,\n        { toleranceStrategyOverride, toleranceOverride }: ToleranceOptions = {}\n    ): this {\n        // If the column doesn't exist, return the table unchanged.\n        if (!this.has(columnSlug)) return this\n\n        const column = this.get(columnSlug)\n        const columnDef = column.def\n        const tolerance = toleranceOverride ?? column.tolerance ?? 0\n        const toleranceStrategy =\n            toleranceStrategyOverride ??\n            column.toleranceStrategy ??\n            ToleranceStrategy.closest\n\n        const timeColumnOfTable = !this.timeColumn.isMissing\n            ? this.timeColumn\n            : // CovidTable does not have a day or year column so we need to use time.\n              this.get(OwidTableSlugs.time)\n\n        const maybeTimeColumnOfValue =\n            getOriginalTimeColumnSlug(this, columnSlug) ??\n            timeColumnSlugFromColumnDef(columnDef)\n        const timeColumnOfValue = this.get(maybeTimeColumnOfValue)\n        const originalTimeSlug = makeOriginalTimeSlugFromColumnSlug(columnSlug)\n\n        let columnStore: CoreColumnStore\n        if (tolerance) {\n            const withAllRows = this.complete([\n                this.entityNameSlug,\n                timeColumnOfTable.slug,\n            ]).sortBy([this.entityNameSlug, timeColumnOfTable.slug])\n\n            const interpolateInBothDirections =\n                !toleranceStrategy ||\n                toleranceStrategy === ToleranceStrategy.closest\n            const interpolateBackwards =\n                interpolateInBothDirections ||\n                toleranceStrategy === ToleranceStrategy.backwards\n            const interpolateForwards =\n                interpolateInBothDirections ||\n                toleranceStrategy === ToleranceStrategy.forwards\n\n            const interpolationResult = this.interpolate(\n                withAllRows,\n                columnSlug,\n                timeColumnOfValue.slug,\n                toleranceInterpolation,\n                {\n                    timeToleranceBackwards: interpolateBackwards\n                        ? tolerance\n                        : 0,\n                    timeToleranceForwards: interpolateForwards ? tolerance : 0,\n                }\n            )\n\n            columnStore = {\n                ...withAllRows.columnStore,\n                [columnSlug]: interpolationResult.values,\n                [originalTimeSlug]: interpolationResult.times,\n            }\n        } else {\n            // If there is no tolerance still append the tolerance column\n            columnStore = {\n                ...this.columnStore,\n                [originalTimeSlug]:\n                    timeColumnOfValue.valuesIncludingErrorValues,\n            }\n        }\n\n        return this.transform(\n            columnStore,\n            [\n                ...this.defs,\n                {\n                    ...timeColumnOfValue.def,\n                    slug: originalTimeSlug,\n                    display: { includeInTable: false },\n                    derivedFrom: { columnSlug, relationship: \"originalTime\" },\n                },\n            ],\n            `Interpolated values in column ${columnSlug} with tolerance ${tolerance} and appended column ${originalTimeSlug} with the original times`,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    interpolateColumnLinearly(\n        columnSlug: ColumnSlug,\n        extrapolate: boolean = false\n    ): this {\n        // If the column doesn't exist, return the table unchanged.\n        if (!this.has(columnSlug)) return this\n\n        const column = this.get(columnSlug)\n        const columnDef = column.def\n\n        const maybeTimeColumnSlug =\n            getOriginalTimeColumnSlug(this, columnSlug) ??\n            timeColumnSlugFromColumnDef(columnDef)\n        const timeColumn =\n            this.get(maybeTimeColumnSlug) ?? this.get(OwidTableSlugs.time) // CovidTable does not have a day or year column so we need to use time.\n\n        const originalColumnSlug =\n            makeOriginalValueSlugFromColumnSlug(columnSlug)\n        const originalColumnDef: OwidColumnDef = {\n            ...columnDef,\n            slug: originalColumnSlug,\n            display: { includeInTable: false },\n            derivedFrom: { columnSlug, relationship: \"originalValue\" },\n        }\n\n        // todo: we can probably do this once early in the pipeline so we dont have to do it again since complete and sort can be expensive.\n        const withAllRows = this.complete([\n            this.entityNameSlug,\n            timeColumn.slug,\n        ]).sortBy([this.entityNameSlug, timeColumn.slug])\n\n        const interpolationResult = this.interpolate(\n            withAllRows,\n            columnSlug,\n            timeColumn.slug,\n            linearInterpolation,\n            { extrapolateAtStart: extrapolate, extrapolateAtEnd: extrapolate }\n        )\n\n        const columnStore = {\n            ...withAllRows.columnStore,\n            [originalColumnSlug]: withAllRows.columnStore[columnSlug],\n            [columnSlug]: interpolationResult.values,\n        }\n\n        return this.transform(\n            columnStore,\n            [\n                ...this.defs,\n                originalColumnDef,\n                {\n                    ...timeColumn.def,\n                },\n            ],\n            `Interpolated values in column ${columnSlug} linearly and appended column ${originalColumnSlug} with the original values`,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    interpolateColumnsByClosestTimeMatch(\n        columnSlugA: ColumnSlug,\n        columnSlugB: ColumnSlug\n    ): this {\n        if (!this.has(columnSlugA) || !this.has(columnSlugB)) return this\n\n        const columnA = this.get(columnSlugA)\n        const columnB = this.get(columnSlugB)\n\n        const toleranceA = columnA.tolerance ?? 0\n        const toleranceB = columnB.tolerance ?? 0\n\n        // If the columns are of mismatching time types, then we can't do any time matching.\n        // This can happen when we have a ScatterPlot with days in one column, and a column with\n        // xOverrideYear.\n        // We also don't need to do any time matching when the tolerance of both columns is 0.\n        if (\n            this.timeColumn.isMissing ||\n            this.timeColumn.slug !== columnA.originalTimeColumnSlug ||\n            this.timeColumn.slug !== columnB.originalTimeColumnSlug ||\n            (toleranceA === 0 && toleranceB === 0)\n        ) {\n            return this\n        }\n\n        const maxDiff = Math.max(toleranceA, toleranceB)\n\n        const withAllRows = this.complete([\n            this.entityNameSlug,\n            this.timeColumn.slug,\n        ]).sortBy([this.entityNameSlug, this.timeColumn.slug])\n\n        // Existing columns\n        const valuesA = withAllRows.get(columnA.slug).valuesIncludingErrorValues\n        const valuesB = withAllRows.get(columnB.slug).valuesIncludingErrorValues\n        const times = withAllRows.timeColumn\n            .valuesIncludingErrorValues as Time[]\n\n        // New columns\n        const newValuesA = new Array(times.length).fill(\n            ErrorValueTypes.NoValueWithinTolerance\n        )\n        const newValuesB = new Array(times.length).fill(\n            ErrorValueTypes.NoValueWithinTolerance\n        )\n        const newTimesA = new Array(times.length).fill(\n            ErrorValueTypes.NoValueWithinTolerance\n        )\n        const newTimesB = new Array(times.length).fill(\n            ErrorValueTypes.NoValueWithinTolerance\n        )\n\n        const groupBoundaries = withAllRows.groupBoundaries(this.entityNameSlug)\n\n        for (let i = 1; i < groupBoundaries.length; i++) {\n            const startIndex = groupBoundaries[i - 1]\n            const endIndex = groupBoundaries[i]\n            const numRows = endIndex - startIndex\n\n            const availableTimesA = []\n            const availableTimesB = []\n\n            for (let index = startIndex; index < endIndex; index++) {\n                if (isNotErrorValue(valuesA[index]))\n                    availableTimesA.push(times[index])\n                if (isNotErrorValue(valuesB[index]))\n                    availableTimesB.push(times[index])\n            }\n\n            if (availableTimesA.length === 0 || availableTimesB.length === 0) {\n                // If one of the columns has no values, we can't do any interpolation\n                continue\n            }\n            if (\n                availableTimesA.length === numRows &&\n                availableTimesB.length === numRows\n            ) {\n                // If all values are available, we can skip the interpolation and just copy all values\n                for (let index = startIndex; index < endIndex; index++) {\n                    newValuesA[index] = valuesA[index]\n                    newValuesB[index] = valuesB[index]\n                    newTimesA[index] = times[index]\n                    newTimesB[index] = times[index]\n                }\n                continue\n            }\n\n            const timePairs = getClosestTimePairs(\n                availableTimesA,\n                availableTimesB,\n                maxDiff\n            )\n            const timeAtoTimeB = new Map(timePairs)\n            const pairedTimesInA = sortNumeric(Array.from(timeAtoTimeB.keys()))\n\n            for (let index = startIndex; index < endIndex; index++) {\n                const currentTime = times[index]\n\n                const candidateTimeA = sortedFindClosest(\n                    pairedTimesInA,\n                    currentTime\n                )\n                if (candidateTimeA === undefined) continue\n\n                if (Math.abs(currentTime - candidateTimeA) > toleranceA)\n                    continue\n\n                const candidateTimeB = timeAtoTimeB.get(candidateTimeA)\n\n                if (\n                    candidateTimeB === undefined ||\n                    Math.abs(currentTime - candidateTimeB) > toleranceB\n                ) {\n                    continue\n                }\n\n                const candidateIndexA = sortedFindClosestIndex(\n                    times,\n                    candidateTimeA,\n                    startIndex,\n                    endIndex\n                )\n\n                const candidateIndexB = sortedFindClosestIndex(\n                    times,\n                    candidateTimeB,\n                    startIndex,\n                    endIndex\n                )\n\n                newValuesA[index] = valuesA[candidateIndexA]\n                newValuesB[index] = valuesB[candidateIndexB]\n                newTimesA[index] = times[candidateIndexA]\n                newTimesB[index] = times[candidateIndexB]\n            }\n        }\n\n        const originalTimeColumnASlug = makeOriginalTimeSlugFromColumnSlug(\n            columnA.slug\n        )\n        const originalTimeColumnBSlug = makeOriginalTimeSlugFromColumnSlug(\n            columnB.slug\n        )\n\n        const columnStore = {\n            ...withAllRows.columnStore,\n            [columnA.slug]: newValuesA,\n            [columnB.slug]: newValuesB,\n            [originalTimeColumnASlug]: newTimesA,\n            [originalTimeColumnBSlug]: newTimesB,\n        }\n\n        return withAllRows.transform(\n            columnStore,\n            [\n                ...withAllRows.defs,\n                {\n                    ...withAllRows.timeColumn.def,\n                    slug: originalTimeColumnASlug,\n                    derivedFrom: {\n                        columnSlug: columnA.slug,\n                        relationship: \"originalTime\",\n                    },\n                },\n                {\n                    ...withAllRows.timeColumn.def,\n                    slug: originalTimeColumnBSlug,\n                    derivedFrom: {\n                        columnSlug: columnB.slug,\n                        relationship: \"originalTime\",\n                    },\n                },\n            ],\n            `Interpolated values`,\n            TransformType.UpdateColumnDefs\n        )\n    }\n\n    sampleEntityName(howMany = 1): any[] {\n        return this.availableEntityNames.slice(0, howMany)\n    }\n\n    get isBlank(): boolean {\n        return !this.numRows\n    }\n}\n\nconst BLANK_TABLE_MESSAGE = `Table is empty.`\n\n// This just assures that even an emtpty OwidTable will have an entityName column. Probably a cleaner way to do this pattern (add a defaultColumns prop??)\nexport const BlankOwidTable = (\n    tableSlug = `blankOwidTable`,\n    extraTableDescription = \"\"\n): OwidTable =>\n    new OwidTable(\n        undefined,\n        [\n            { slug: OwidTableSlugs.entityName },\n            { slug: OwidTableSlugs.year, type: ColumnTypeNames.Year },\n        ],\n        {\n            tableDescription: BLANK_TABLE_MESSAGE + extraTableDescription,\n            tableSlug,\n        }\n    )\n","export class InteractionState {\n    /**\n     * Whether the series is currently interacted with\n     */\n    private _isInteractedWith = false\n\n    /**\n     * Whether _any_ series in a chart is currently interacted with\n     */\n    private _isInteractionModeActive = false\n\n    /**\n     * If `isInteractedWith` is true, then the given series is currently active,\n     * (typically hovered or focused). If `isInteractionModeActive` is true, then\n     * _any_ series in the chart is currently interacted with.\n     *\n     * If `isInteractedWith` is true, then `isInteractionModeActive` must also\n     * be true. If the series isn't currently interacted with, `isInteractionModeActive`\n     * can either be true (some other series is interacted with) or false\n     * (no series is interacted with).\n     */\n    constructor(isInteractedWith = false, isInteractionModeActive?: boolean) {\n        this._isInteractedWith = isInteractedWith\n        this._isInteractionModeActive = isInteractedWith\n            ? true // Must be active if the series is currently interacted with\n            : (isInteractionModeActive ?? isInteractedWith)\n    }\n\n    /**\n     * Creates an InteractionState by comparing a given value against the\n     * currently active value\n     */\n    static for<T>(\n        currentValue: T | undefined,\n        activeValue: T | undefined\n    ): InteractionState {\n        const isInteractedWith =\n            activeValue !== undefined && currentValue === activeValue\n        const isInteractionModeActive = activeValue !== undefined\n        return new InteractionState(isInteractedWith, isInteractionModeActive)\n    }\n\n    /**\n     * Whether the chart is in an idle state, i.e. no series are currently\n     * being interacted with\n     */\n    get idle(): boolean {\n        return !this._isInteractionModeActive\n    }\n\n    /**\n     * Whether the series is currently interacted with\n     */\n    get active(): boolean {\n        return this._isInteractedWith\n    }\n\n    /**\n     * Whether the series is in the foreground, i.e. either the chart isn't\n     * currently interacted with (i.e. all series are in the foreground by\n     * default) or the series itself is currently interacted with\n     */\n    get foreground(): boolean {\n        return !this._isInteractionModeActive || this._isInteractedWith\n    }\n\n    /**\n     * Whether the series is in the background, i.e. the chart is currently\n     * interacted with, but the given series isn't\n     */\n    get background(): boolean {\n        return this._isInteractionModeActive && !this._isInteractedWith\n    }\n}\n","import * as React from \"react\"\nimport {\n    Box,\n    excludeUndefined,\n    getRegionByName,\n    Url,\n} from \"@ourworldindata/utils\"\nimport {\n    SeriesStrategy,\n    EntityName,\n    SeriesName,\n    ColumnSlug,\n    GrapherTabName,\n    GRAPHER_TAB_NAMES,\n    ProjectionColumnInfo,\n    CoreValueType,\n    PrimitiveType,\n    ColumnTypeNames,\n    Time,\n} from \"@ourworldindata/types\"\nimport { LineChartSeries } from \"../lineCharts/LineChartConstants\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { ChartManager } from \"./ChartManager\"\nimport {\n    GRAPHER_SIDE_PANEL_CLASS,\n    GRAPHER_TIMELINE_CLASS,\n    GRAPHER_SETTINGS_CLASS,\n    SVG_STYLE_PROPS,\n    BASE_FONT_SIZE,\n    Patterns,\n    GRAPHER_IMAGE_WIDTH_1X,\n    GRAPHER_IMAGE_WIDTH_2X,\n} from \"../core/GrapherConstants\"\nimport { ChartSeries } from \"./ChartInterface\"\nimport {\n    ErrorValueTypes,\n    isNotErrorValueOrEmptyCell,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { GRAPHER_BACKGROUND_DEFAULT } from \"../color/ColorConstants\"\nimport { InteractionState } from \"../interaction/InteractionState\"\n\nexport const autoDetectYColumnSlugs = (manager: ChartManager): string[] => {\n    if (manager.yColumnSlugs && manager.yColumnSlugs.length)\n        return manager.yColumnSlugs\n    if (manager.yColumnSlug) return [manager.yColumnSlug]\n    return manager.table.numericColumnSlugs\n}\n\nexport const getDefaultFailMessage = (manager: ChartManager): string => {\n    if (manager.table.rootTable.isBlank) return `No table loaded yet`\n    if (manager.table.rootTable.entityNameColumn.isMissing)\n        return `Table is missing an EntityName column`\n    if (manager.table.rootTable.timeColumn.isMissing)\n        return `Table is missing a Time column`\n    const yColumnSlugs = autoDetectYColumnSlugs(manager)\n    if (!yColumnSlugs.length) return \"Missing Y axis column\"\n    const selection = makeSelectionArray(manager.selection)\n    if (!selection.hasSelection) return `No ${manager.entityType} selected`\n    return \"\"\n}\n\nexport const getSeriesKey = (\n    series: LineChartSeries,\n    index: number\n): string => {\n    return `${series.seriesName}-${series.color}-${\n        series.isProjection ? \"projection\" : \"\"\n    }-${index}`\n}\n\nexport const autoDetectSeriesStrategy = (\n    manager: ChartManager,\n    handleProjections: boolean = false\n): SeriesStrategy => {\n    if (manager.seriesStrategy) return manager.seriesStrategy\n\n    let columnThreshold: number = 1\n\n    if (handleProjections && manager.transformedTable) {\n        const yColumnSlugs = autoDetectYColumnSlugs(manager)\n        const yColumns = yColumnSlugs.map((slug) =>\n            manager.transformedTable!.get(slug)\n        )\n        const hasNormalAndProjectedSeries =\n            yColumns.some((col) => col.isProjection) &&\n            yColumns.some((col) => !col.isProjection)\n        if (hasNormalAndProjectedSeries) {\n            columnThreshold = 2\n        }\n    }\n\n    return autoDetectYColumnSlugs(manager).length > columnThreshold\n        ? SeriesStrategy.column\n        : SeriesStrategy.entity\n}\n\nexport interface ClipPath {\n    id: string\n    element: React.ReactElement\n}\n\nexport const makeClipPath = (props: {\n    name?: string\n    renderUid: number\n    box: Box\n}): {\n    id: string\n    element: React.ReactElement\n} => {\n    const name = props.name ?? \"boundsClip\"\n    const id = `${name}-${props.renderUid}`\n    return {\n        id: `url(#${id})`,\n        element: (\n            <defs>\n                <clipPath id={id}>\n                    <rect {...props.box}></rect>\n                </clipPath>\n            </defs>\n        ),\n    }\n}\n\nexport const makeSelectionArray = (\n    selection?: SelectionArray | EntityName[]\n): SelectionArray =>\n    selection instanceof SelectionArray\n        ? selection\n        : new SelectionArray(selection ?? [])\n\nexport function isElementInteractive(element: HTMLElement): boolean {\n    const interactiveTags = [\"a\", \"button\", \"input\"]\n    const interactiveClassNames = [\n        GRAPHER_TIMELINE_CLASS,\n        GRAPHER_SIDE_PANEL_CLASS,\n        GRAPHER_SETTINGS_CLASS,\n    ].map((className) => `.${className}`)\n\n    const selector = [...interactiveTags, ...interactiveClassNames].join(\", \")\n\n    // check if the target is an interactive element or contained within one\n    return element.closest(selector) !== null\n}\n\nexport function getShortNameForEntity(entityName: string): string | undefined {\n    const region = getRegionByName(entityName)\n    return region?.shortName\n}\n\nexport function isTargetOutsideElement(\n    target: EventTarget,\n    element: Node\n): boolean {\n    const targetNode = target as Node\n    return (\n        !element.contains(targetNode) &&\n        // check that the target is still mounted to the document (we also get\n        // click events on nodes that have since been removed by React)\n        document.contains(targetNode)\n    )\n}\n\nexport function getHoverStateForSeries(\n    series: ChartSeries,\n    props: {\n        hoveredSeriesNames: SeriesName[]\n        // Usually the hover mode is active when there is\n        // at least one hovered element. But sometimes the hover\n        // mode might be active although there are no hovered elements.\n        // For example, when the facet legend is hovered but a particular\n        // chart doesn't plot the hovered element.\n        isHoverModeActive?: boolean\n    }\n): InteractionState {\n    const hoveredSeriesNames = props.hoveredSeriesNames\n    const isHoverModeActive =\n        props.isHoverModeActive ?? hoveredSeriesNames.length > 0\n\n    const isActive = hoveredSeriesNames.includes(series.seriesName)\n\n    return new InteractionState(isActive, isHoverModeActive)\n}\n\n/** Useful for sorting series by their interaction state */\nexport function byHoverThenFocusState(series: {\n    hover: InteractionState\n    focus: InteractionState\n}): number {\n    // active series rank highest and hover trumps focus\n    if (series.hover.active) return 4\n    if (series.focus.active) return 3\n\n    // series in their default state rank in the middle\n    if (!series.hover.background && !series.focus.background) return 2\n\n    // background series rank lowest\n    return 1\n}\n\nexport function makeAxisLabel({\n    label,\n    displayUnit,\n}: {\n    label: string\n    displayUnit?: string\n}): {\n    mainLabel: string // shown in bold\n    unit?: string // shown in normal weight, usually in parens\n} {\n    // No unit to display\n    if (!displayUnit) return { mainLabel: label }\n\n    // Extract text in parens at the end of the label,\n    // e.g. \"Population (millions)\" is split into \"Population \" and \"(millions)\"\n    const [\n        _fullMatch,\n        untrimmedMainLabelText = undefined,\n        labelTextInParens = undefined,\n    ] = label.trim().match(/^(.*?)(\\([^()]*\\))?$/s) ?? []\n    const mainLabelText = untrimmedMainLabelText?.trim() ?? \"\"\n\n    // Don't show unit twice if it's contained in the label\n    const displayLabel =\n        labelTextInParens === `(${displayUnit})` ? mainLabelText : label\n\n    return { mainLabel: displayLabel, unit: displayUnit }\n}\n\n/**\n * Given a URL for a CF function grapher thumbnail, generate a srcSet for the image at different widths\n * @param defaultSrc - `https://ourworldindata.org/grapher/thumbnail/life-expectancy.png?tab=chart`\n * @returns srcSet - `https://ourworldindata.org/grapher/thumbnail/life-expectancy.png?tab=chart&imWidth=850 850w, https://ourworldindata.org/grapher/thumbnail/life-expectancy.png?tab=chart&imWidth=1700 1700w`\n */\nexport function generateGrapherImageSrcSet(defaultSrc: string): string {\n    const url = Url.fromURL(defaultSrc)\n    const existingQueryParams = url.queryParams\n    const imWidths = [\n        GRAPHER_IMAGE_WIDTH_1X.toString(),\n        GRAPHER_IMAGE_WIDTH_2X.toString(),\n    ]\n    const srcSet = imWidths\n        .map((imWidth) => {\n            return `${url.setQueryParams({ ...existingQueryParams, imWidth }).fullUrl} ${imWidth}w`\n        })\n        .join(\", \")\n\n    return srcSet\n}\n\nexport const isChartTab = (tab: GrapherTabName): boolean =>\n    tab !== GRAPHER_TAB_NAMES.Table && tab !== GRAPHER_TAB_NAMES.WorldMap\n\nexport const isMapTab = (tab: GrapherTabName): boolean =>\n    tab === GRAPHER_TAB_NAMES.WorldMap\n\nexport function combineHistoricalAndProjectionColumns(\n    table: OwidTable,\n    info: ProjectionColumnInfo,\n    options?: { shouldAddIsProjectionColumn: boolean }\n): OwidTable {\n    const {\n        historicalSlug,\n        projectedSlug,\n        combinedSlug,\n        slugForIsProjectionColumn,\n    } = info\n\n    const transformFn = (\n        row: Record<ColumnSlug, { value: CoreValueType; time: Time }>,\n        time: Time\n    ): { isProjection: boolean; value: PrimitiveType } | undefined => {\n        // It's possible to have both a historical and a projected value\n        // for a given year. In that case, we prefer the historical value.\n\n        const historical = row[historicalSlug]\n        const projected = row[projectedSlug]\n\n        const historicalTimeDiff = Math.abs(historical.time - time)\n        const projectionTimeDiff = Math.abs(projected.time - time)\n\n        if (\n            isNotErrorValueOrEmptyCell(historical.value) &&\n            // If tolerance was applied to the historical column, we need to\n            // make sure the interpolated historical value doesn't get picked\n            // over the actual projected value\n            historicalTimeDiff <= projectionTimeDiff\n        )\n            return { value: historical.value, isProjection: false }\n\n        if (isNotErrorValueOrEmptyCell(projected.value)) {\n            return { value: projected.value, isProjection: true }\n        }\n\n        return undefined\n    }\n\n    // Combine the historical and projected values into a single column\n    table = table.combineColumns(\n        [projectedSlug, historicalSlug],\n        { ...table.get(projectedSlug).def, slug: combinedSlug },\n        (row, time) =>\n            transformFn(row, time)?.value ??\n            ErrorValueTypes.MissingValuePlaceholder\n    )\n\n    // Add a column indicating whether the value is a projection or not\n    if (options?.shouldAddIsProjectionColumn)\n        table = table.combineColumns(\n            [projectedSlug, historicalSlug],\n            {\n                slug: slugForIsProjectionColumn,\n                type: ColumnTypeNames.Boolean,\n            },\n            (row, time) =>\n                transformFn(row, time)?.isProjection ??\n                ErrorValueTypes.MissingValuePlaceholder\n        )\n\n    return table\n}\n\nexport function NoDataPattern({\n    patternId = Patterns.noDataPattern,\n    scale = 1,\n}: {\n    patternId?: string\n    scale?: number\n}): React.ReactElement {\n    const patternTransforms = excludeUndefined([\n        `rotate(-45 2 2)`,\n        scale !== 1 ? `scale(${scale})` : undefined,\n    ])\n    return (\n        <pattern\n            id={patternId}\n            patternUnits=\"userSpaceOnUse\"\n            width=\"4\"\n            height=\"4\"\n            patternTransform={patternTransforms.join(\" \")}\n        >\n            <path d=\"M -1,2 l 6,0\" stroke=\"#ccc\" strokeWidth={0.7} />\n        </pattern>\n    )\n}\n\nexport function getChartSvgProps({\n    fontSize,\n    backgroundColor,\n}: {\n    fontSize?: number\n    backgroundColor?: string\n}): React.SVGProps<SVGSVGElement> {\n    return {\n        xmlns: \"http://www.w3.org/2000/svg\",\n        version: \"1.1\",\n        style: {\n            ...SVG_STYLE_PROPS,\n            fontSize: fontSize ?? BASE_FONT_SIZE,\n            // Needs to be set here or else pngs will have a black background\n            backgroundColor: backgroundColor ?? GRAPHER_BACKGROUND_DEFAULT,\n        },\n    }\n}\n","import * as React from \"react\"\nimport { action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { BodyPortal } from \"@ourworldindata/components\"\nimport { isTargetOutsideElement } from \"../chart/ChartUtils\"\n\ninterface FullScreenProps {\n    children: React.ReactNode\n    onDismiss: () => void\n    overlayColor?: string\n}\n\n@observer\nexport class FullScreen extends React.Component<FullScreenProps> {\n    content = React.createRef<HTMLDivElement>()\n\n    constructor(props: FullScreenProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound onDocumentClick(e: React.MouseEvent): void {\n        if (\n            this.content?.current &&\n            isTargetOutsideElement(e.target, this.content.current)\n        )\n            this.props.onDismiss()\n    }\n\n    @action.bound onDocumentKeyDown(e: KeyboardEvent): void {\n        if (e.key === \"Escape\") this.props.onDismiss()\n    }\n\n    override componentDidMount(): void {\n        document.addEventListener(\"keydown\", this.onDocumentKeyDown)\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"keydown\", this.onDocumentKeyDown)\n    }\n\n    override render() {\n        return (\n            <BodyPortal>\n                <div\n                    className=\"FullScreenOverlay\"\n                    role=\"dialog\"\n                    aria-modal=\"true\"\n                    onClick={this.onDocumentClick}\n                    style={{\n                        backgroundColor: this.props.overlayColor ?? \"#fff\",\n                    }}\n                >\n                    <div className=\"FullScreenContent\" ref={this.content}>\n                        {this.props.children}\n                    </div>\n                </div>\n            </BodyPortal>\n        )\n    }\n}\n","import * as React from \"react\"\nimport {\n    GrapherTooltipAnchor,\n    GrapherTrendArrowDirection,\n} from \"@ourworldindata/utils\"\nimport { IObservableValue } from \"mobx\"\n\nexport interface TooltipManager {\n    // We can't pass the property directly because we need it to be observable\n    tooltip?: IObservableValue<TooltipProps | undefined>\n}\n\n/**\n * Controls the fade transition behavior for tooltips.\n * - \"delayed\": Good for charts with gaps between targetable areas\n * - \"immediate\": Better if the tooltip is displayed for all points in the chart's bounds\n * - \"none\": Disables the fade transition altogether\n */\nexport type TooltipFadeMode = \"delayed\" | \"immediate\" | \"none\"\n\nexport enum TooltipFooterIcon {\n    Notice = \"notice\",\n    Stripes = \"stripes\",\n    Significance = \"significance\",\n    None = \"none\",\n}\n\nexport interface FooterItem {\n    icon: TooltipFooterIcon\n    text: string\n}\n\nexport interface TooltipProps {\n    id: number | string\n    x?: number\n    y?: number\n    offsetX?: number\n    offsetY?: number\n    offsetXDirection?: \"left\" | \"right\"\n    offsetYDirection?: \"upward\" | \"downward\"\n    title?: string | number // header text\n    titleAnnotation?: string // rendered next to the title, but muted\n    subtitle?: string | number // header deck\n    subtitleFormat?: \"notice\" | \"unit\" // optional postprocessing for subtitle\n    footer?: FooterItem[]\n    style?: React.CSSProperties // css overrides (particularly width/maxWidth)\n    dissolve?: TooltipFadeMode // flag that the tooltip should begin fading out\n    children?: React.ReactNode\n    dismiss?: () => void\n}\n\nexport interface TooltipValueProps {\n    label?: string\n    unit?: string\n    value?: string\n    color?: string\n    isProjection?: boolean\n    originalTime?: string // actual year data was drawn from (when ≠ target year)\n    isRoundedToSignificantFigures?: boolean\n    showSignificanceSuperscript?: boolean // show significance-s superscript if applicable\n    labelVariant?: \"label+unit\" | \"unit-only\"\n}\n\nexport interface TooltipValueRangeProps {\n    label?: string\n    unit?: string\n    values: [string | undefined, string | undefined]\n    trend?: GrapherTrendArrowDirection\n    colors?: string[] // value colors, matched by indices\n    originalTimes?: (string | undefined)[] // actual year data was drawn from (when ≠ target year)\n    isRoundedToSignificantFigures?: boolean\n    showSignificanceSuperscript?: boolean // show significance-s superscript if applicable\n    labelVariant?: \"label+unit\" | \"unit-only\"\n}\n\nexport interface TooltipTableProps {\n    columns: TooltipTableColumn[]\n    rows: TooltipTableRow[]\n    totals?: (number | undefined)[]\n}\n\ninterface TooltipTableColumn {\n    label: string\n    formatValue: (value: unknown) => string\n}\n\ninterface TooltipTableRow {\n    name: string\n    annotation?: string\n    swatch?: {\n        color?: string // css color string for the series's swatch\n        opacity?: number\n    }\n    focused?: boolean // highlighted (based on hovered series in chart)\n    blurred?: boolean // greyed out (typically due to missing data)\n    striped?: boolean // use textured swatch (to show data is extrapolated)\n    originalTime?: string // actual year data was drawn (when ≠ target year)\n    values: (string | number | undefined)[]\n}\n\nexport interface TooltipVariableProps {\n    label?: string\n    unit?: string\n    color?: string\n    isProjection?: boolean\n    originalTimes?: (string | undefined)[]\n    labelVariant?: \"label+unit\" | \"unit-only\"\n    children?: React.ReactNode\n}\n\nexport interface TooltipTableData {\n    value: number\n    fake?: boolean\n}\n\nexport interface TooltipContainerProps {\n    containerBounds?: { width: number; height: number }\n    anchor?: GrapherTooltipAnchor\n}\n\nexport const TooltipContext = React.createContext<\n    Pick<TooltipContainerProps, \"anchor\">\n>({})\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport classnames from \"classnames\"\nimport { NO_DATA_LABEL } from \"../color/ColorScale.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faInfoCircle, faS } from \"@fortawesome/free-solid-svg-icons\"\nimport { formatInlineList, GrapherTooltipAnchor } from \"@ourworldindata/utils\"\nimport { GrapherTrendArrow } from \"@ourworldindata/components\"\nimport {\n    TooltipValueProps,\n    TooltipValueRangeProps,\n    TooltipContext,\n    TooltipTableProps,\n    TooltipVariableProps,\n} from \"./TooltipProps\"\nimport { makeAxisLabel } from \"../chart/ChartUtils.js\"\nimport * as R from \"remeda\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\n\ntype TooltipValue = number | string | undefined\n\nexport const NO_DATA_COLOR = \"#999\"\n\nexport function TooltipValue({\n    label,\n    unit,\n    value,\n    color,\n    originalTime,\n    isProjection,\n    labelVariant = \"label+unit\",\n    isRoundedToSignificantFigures,\n    showSignificanceSuperscript,\n}: TooltipValueProps): React.ReactElement {\n    const displayValue = value || NO_DATA_LABEL\n    const displayColor = displayValue === NO_DATA_LABEL ? NO_DATA_COLOR : color\n\n    const showSuperscript =\n        showSignificanceSuperscript && isRoundedToSignificantFigures\n    const superscript = showSuperscript ? (\n        <SignificanceIcon asSuperscript={true} />\n    ) : null\n\n    return (\n        <Variable\n            label={label}\n            unit={unit}\n            color={displayColor}\n            isProjection={isProjection}\n            originalTimes={originalTime ? [originalTime] : undefined}\n            labelVariant={labelVariant}\n        >\n            <span>\n                {displayValue}\n                {superscript}\n            </span>\n        </Variable>\n    )\n}\n\nexport function TooltipValueRange({\n    label,\n    unit,\n    values,\n    colors,\n    originalTimes,\n    trend,\n    labelVariant = \"label+unit\",\n    isRoundedToSignificantFigures,\n    showSignificanceSuperscript,\n}: TooltipValueRangeProps): React.ReactElement | null {\n    const [firstTerm, lastTerm] = values\n\n    if (firstTerm === undefined && lastTerm === undefined) return null\n\n    const showSuperscript =\n        showSignificanceSuperscript && isRoundedToSignificantFigures\n    const superscript = showSuperscript ? (\n        <SignificanceIcon asSuperscript={true} />\n    ) : null\n\n    return (\n        <Variable\n            label={label}\n            unit={unit}\n            originalTimes={originalTimes}\n            labelVariant={labelVariant}\n        >\n            <span className=\"range\">\n                <span className=\"term\">\n                    <span style={{ color: colors?.[0] }}>{firstTerm}</span>\n                    {!lastTerm && superscript}\n                </span>\n                {trend && (\n                    <GrapherTrendArrow direction={trend} isColored={!colors} />\n                )}\n                {lastTerm && (\n                    <span className=\"term\">\n                        <span style={{ color: colors?.[1] }}>{lastTerm}</span>\n                        {superscript}\n                    </span>\n                )}\n            </span>\n        </Variable>\n    )\n}\n\nfunction Variable({\n    label,\n    unit,\n    children,\n    color,\n    originalTimes,\n    isProjection,\n    labelVariant = \"label+unit\",\n}: TooltipVariableProps): React.ReactElement {\n    const { mainLabel: columnName, unit: formattedUnit } = makeAxisLabel({\n        label: label || \"\",\n        displayUnit: unit,\n    })\n\n    const displayOriginalTimes =\n        _.uniq((originalTimes ?? []).filter((t) => t !== undefined)).join(\n            \"\\u2013\"\n        ) || null\n\n    return (\n        <div\n            className={classnames(\"variable\", {\n                \"variable--no-name\": labelVariant === \"unit-only\",\n            })}\n        >\n            <div className=\"definition\">\n                {columnName && <span className=\"name\">{columnName}</span>}\n                {formattedUnit && formattedUnit.length > 1 && (\n                    <span className=\"unit\">{formattedUnit}</span>\n                )}\n                {isProjection && (\n                    <span className=\"projection\">projected data</span>\n                )}\n            </div>\n            <div className=\"values\" style={{ color }}>\n                {children}\n                {displayOriginalTimes && (\n                    <span className=\"time-notice\">\n                        <FontAwesomeIcon icon={faInfoCircle} />\n                        {displayOriginalTimes}\n                    </span>\n                )}\n            </div>\n        </div>\n    )\n}\n\nexport function TooltipTable({\n    columns,\n    rows,\n    totals = [],\n}: TooltipTableProps): React.ReactElement | null {\n    const context = React.useContext(TooltipContext)\n    const focal = rows.some((row) => row.focused)\n    const swatched = rows.some((row) => row.swatch)\n\n    const tooEmpty =\n        rows.length < 2 ||\n        totals.every((value) => value === undefined) ||\n        rows.some(({ values }) => values.every((value) => value === undefined))\n    const tooTrivial = R.zip(columns, totals).every(\n        ([column, total]) => !!column?.formatValue(total).match(/^100(\\.0+)?%/)\n    )\n    const showTotals = totals && !(tooEmpty || tooTrivial)\n\n    // if the tooltip is pinned to the bottom, show the total at the top,\n    // so that it's always visible even if the tooltip is scrollable\n    const showTotalsAtTop = context?.anchor === GrapherTooltipAnchor.bottom\n\n    const totalsCells = R.zip(columns, totals).map(([column, total]) => (\n        <td key={column?.label} className=\"series-value\">\n            {column && total !== undefined ? column.formatValue(total) : null}\n        </td>\n    ))\n\n    return (\n        <table className={classnames(\"series-list\", { focal, swatched })}>\n            {columns.length > 1 && (\n                <thead>\n                    <tr>\n                        <td className=\"series-color\"></td>\n                        <td className=\"series-name\"></td>\n                        {columns.map((column) => (\n                            <td className=\"series-value\" key={column.label}>\n                                {column.label}\n                            </td>\n                        ))}\n                    </tr>\n                </thead>\n            )}\n            <tbody>\n                {showTotals && showTotalsAtTop && (\n                    <>\n                        <tr className=\"total--top\">\n                            <td className=\"series-color\"></td>\n                            <td className=\"series-name\">Total</td>\n                            {totalsCells}\n                        </tr>\n                        <tr className=\"spacer\"></tr>\n                    </>\n                )}\n                {rows.map((row) => {\n                    const {\n                        name,\n                        focused,\n                        blurred,\n                        striped,\n                        annotation,\n                        values,\n                        originalTime,\n                        swatch = {},\n                    } = row\n                    const {\n                        color: swatchColor = \"transparent\",\n                        opacity: swatchOpacity = 1,\n                    } = swatch\n\n                    const [_m, seriesName, seriesParenthetical] =\n                        name.trim().match(/^(.*?)(\\([^()]*\\))?$/) ?? []\n\n                    return (\n                        <tr\n                            key={name}\n                            className={classnames({\n                                focused,\n                                blurred,\n                                striped,\n                            })}\n                        >\n                            <td className=\"series-color\">\n                                <div\n                                    className=\"swatch\"\n                                    style={{\n                                        backgroundColor: swatchColor,\n                                        opacity: swatchOpacity,\n                                    }}\n                                />\n                            </td>\n                            <td className=\"series-name\">\n                                {seriesName}\n                                {seriesParenthetical && (\n                                    <span className=\"parenthetical\">\n                                        {seriesParenthetical}\n                                    </span>\n                                )}\n                                {annotation && (\n                                    <span className=\"annotation\">\n                                        {annotation}\n                                    </span>\n                                )}\n                            </td>\n                            {R.zip(columns, values).map(([column, value]) => {\n                                const missing = value === undefined\n                                return column ? (\n                                    <td\n                                        key={column.label}\n                                        className={classnames(\"series-value\", {\n                                            missing,\n                                        })}\n                                    >\n                                        {!missing && column.formatValue(value)}\n                                    </td>\n                                ) : null\n                            })}\n                            {originalTime && (\n                                <td className=\"time-notice\">\n                                    <FontAwesomeIcon icon={faInfoCircle} />{\" \"}\n                                    {originalTime}\n                                </td>\n                            )}\n                        </tr>\n                    )\n                })}\n                {showTotals && !showTotalsAtTop && (\n                    <>\n                        <tr className=\"spacer\"></tr>\n                        <tr className=\"total\">\n                            <td className=\"series-color\"></td>\n                            <td className=\"series-name\">Total</td>\n                            {totalsCells}\n                        </tr>\n                    </>\n                )}\n            </tbody>\n        </table>\n    )\n}\n\nexport function SignificanceIcon({\n    asSuperscript = false,\n}: {\n    asSuperscript?: boolean\n}): React.ReactElement {\n    return (\n        <div\n            className={classnames(\"icon-circled-s\", {\n                \"as-superscript\": asSuperscript,\n            })}\n        >\n            <div className=\"circle\" />\n            <FontAwesomeIcon icon={faS} />\n        </div>\n    )\n}\n\nexport function makeTooltipToleranceNotice(\n    targetYear: string,\n    { plural }: { plural: boolean } = { plural: false }\n): string {\n    const dataPoint = plural ? \"data points\" : \"data point\"\n    return `Data not available for ${targetYear}. Showing closest available ${dataPoint} instead`\n}\n\nexport function makeTooltipRoundingNotice(\n    numSignificantFigures: number[],\n    { plural }: { plural: boolean } = { plural: true }\n): string {\n    const uniqueNumSigFigs = _.uniq(numSignificantFigures)\n    const formattedNumSigFigs = formatInlineList(\n        _.sortBy(uniqueNumSigFigs),\n        \"or\"\n    )\n\n    const values = plural ? \"Values\" : \"Value\"\n    const are = plural ? \"are\" : \"is\"\n    const figures = formattedNumSigFigs === \"1\" ? \"figure\" : \"figures\"\n    return `${values} ${are} rounded to ${formattedNumSigFigs} significant ${figures}`\n}\n\nexport function toTooltipTableColumns(\n    columns: CoreColumn | CoreColumn[]\n): TooltipTableProps[\"columns\"] {\n    const columnsArray = Array.isArray(columns) ? columns : [columns]\n\n    return columnsArray.map((column) => ({\n        label: column.displayName,\n        formatValue: (value: unknown): string =>\n            column.formatValueShort(value, { trailingZeroes: true }),\n    }))\n}\n\nexport function formatTooltipRangeValues(\n    values: TooltipValue[],\n    column: CoreColumn\n): [string, string] {\n    const formatTooltipValueShort = (value: TooltipValue): string =>\n        formatTooltipValue(value, (value) => column.formatValueShort(value))\n    const formatTooltipValueShortWithAbbreviations = (\n        value: TooltipValue\n    ): string =>\n        formatTooltipValue(value, (value) =>\n            column.formatValueShortWithAbbreviations(value)\n        )\n\n    const [firstValue, lastValue] = values.map((v) =>\n        formatTooltipValueShort(v)\n    )\n\n    const [firstTerm, lastTerm] =\n        // TODO: would be nicer to actually measure the typeset text but we would need to\n        // add Lato's metrics to the `string-pixel-width` module to use Bounds.forText\n        _.sum([firstValue?.length, lastValue?.length]) > 20\n            ? values.map((v) => formatTooltipValueShortWithAbbreviations(v))\n            : [firstValue, lastValue]\n\n    return [firstTerm, lastTerm]\n}\n\nfunction formatTooltipValue(\n    value: TooltipValue,\n    formatValue: (value: number) => string\n): string {\n    if (value === undefined) return NO_DATA_LABEL\n    if (typeof value === \"string\") return value\n    return formatValue(value)\n}\n","import { observable, computed, action, makeObservable } from \"mobx\"\nimport { PointVector } from \"@ourworldindata/utils\"\nimport { TooltipFadeMode } from \"./TooltipProps\"\n\nconst TOOLTIP_FADE_DURATION = 400 // $fade-time + $fade-delay in scss\n\ninterface TooltipStateArgs {\n    fade?: TooltipFadeMode\n}\n\nexport class PlainTooltipState<T> {\n    position = new PointVector(0, 0)\n\n    protected _target: T | undefined = undefined\n    protected _timer: number | undefined = undefined\n    protected _fade: TooltipFadeMode\n\n    constructor({ fade }: TooltipStateArgs = {}) {\n        this._fade = fade ?? \"delayed\"\n    }\n\n    get target(): T | undefined {\n        return this._target\n    }\n\n    set target(newTarget: T | null) {\n        this.setTarget(newTarget)\n    }\n\n    get fading(): TooltipFadeMode | undefined {\n        // returns \"delayed\"|\"immediate\" during the timeout after clearing the target\n        return !!this._timer && !!this._target ? this._fade : undefined\n    }\n\n    protected setTarget(newTarget: T | null): void {\n        // delay clearing the target (and hiding the tooltip) for a bit to prevent\n        // flicker when frobbing between neighboring elements and allow an opacity\n        // transition to smoothly fade the tooltip out\n        clearTimeout(this._timer)\n\n        if (newTarget === null) {\n            const speed = { delayed: 1, immediate: 0.5, none: 0 }[this._fade]\n            this._timer = window.setTimeout(\n                () => this.resetTarget(),\n                speed * TOOLTIP_FADE_DURATION\n            )\n        } else {\n            this._target = newTarget\n            this._timer = undefined\n        }\n    }\n\n    protected resetTarget(): void {\n        this._target = undefined\n        this._timer = undefined\n    }\n}\n\nexport class TooltipState<T> extends PlainTooltipState<T> {\n    constructor(args?: TooltipStateArgs) {\n        super(args)\n\n        makeObservable<\n            this,\n            \"_target\" | \"_timer\" | \"setTarget\" | \"resetTarget\"\n        >(this, {\n            // observables\n            position: observable,\n            _target: observable,\n            _timer: observable,\n\n            // computed (getters)\n            target: computed,\n            fading: computed,\n\n            // actions\n            setTarget: action.bound,\n            resetTarget: action.bound,\n        })\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { faInfoCircle } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport classnames from \"classnames\"\nimport { match } from \"ts-pattern\"\nimport {\n    GrapherTooltipAnchor,\n    stripOuterParentheses,\n} from \"@ourworldindata/utils\"\nimport {\n    TooltipProps,\n    TooltipManager,\n    TooltipContainerProps,\n    TooltipContext,\n    TooltipFooterIcon,\n} from \"./TooltipProps\"\nimport { SignificanceIcon } from \"./TooltipContents.js\"\n\nexport * from \"./TooltipContents.js\"\nexport { TooltipState } from \"./TooltipState.js\"\nimport * as R from \"remeda\"\n\nexport class TooltipCard extends React.Component<\n    TooltipProps & TooltipContainerProps\n> {\n    private base = React.createRef<HTMLDivElement>()\n    private tooltipWidth: number = 0\n    private tooltipHeight: number = 0\n\n    private updateDimensions(): void {\n        if (this.base.current) {\n            const el = this.base.current\n            this.tooltipWidth = el.scrollWidth + 2 * el.clientLeft // account for left/right border\n            this.tooltipHeight = el.scrollHeight + 2 * el.clientTop // account for top/bottom border\n        }\n    }\n\n    private get tooltipStyle(): React.CSSProperties {\n        const { tooltipWidth, tooltipHeight } = this\n        const {\n            containerBounds,\n            anchor,\n            x = 0,\n            y = 0,\n            offsetX = 0,\n            offsetY = 0,\n        } = this.props\n        const isPinnedToBottom = anchor === GrapherTooltipAnchor.bottom\n\n        const containerWidth = containerBounds?.width\n        const containerHeight = containerBounds?.height\n\n        const style = { ...this.props.style }\n\n        // if container dimensions are given, we make sure the tooltip\n        // is positioned within the container bounds\n        if (containerWidth && containerHeight && !isPinnedToBottom) {\n            let adjustedOffsetY = offsetY\n            let adjustedOffsetX = offsetX\n\n            if (this.props.offsetYDirection === \"upward\") {\n                adjustedOffsetY = -offsetY - tooltipHeight\n            }\n\n            if (this.props.offsetXDirection === \"left\" && x > tooltipWidth) {\n                adjustedOffsetX = -offsetX - tooltipWidth\n            }\n\n            // Ensure tooltip remains inside chart\n            let left = x + adjustedOffsetX\n            let top = y + adjustedOffsetY\n            if (tooltipHeight && tooltipWidth) {\n                if (left + tooltipWidth > containerWidth)\n                    left -= tooltipWidth + 2 * adjustedOffsetX // flip left\n                if (top + tooltipHeight * 0.75 > containerHeight)\n                    top -= tooltipHeight + 2 * adjustedOffsetY // flip upwards eventually...\n\n                // Clamp to prevent any overflow\n                left = R.clamp(left, {\n                    min: 0,\n                    max: containerWidth - tooltipWidth,\n                })\n                top = R.clamp(top, {\n                    min: 0,\n                    max: containerHeight - tooltipHeight,\n                })\n            }\n\n            style.position = \"absolute\"\n            style.left = left\n            style.top = top\n\n            // Set a max-height to prevent the case where the tooltip contents grow, causing the tooltip to overflow the\n            // container briefly until it is rerendered with the updated bounds. The quickly-appearing scrollbar is\n            // jarring and causes unneeded, brief content reflows and resize events.\n            // The max-height together with overflow: clip prevents the tooltip from overflowing, instead briefly\n            // cutting off content until the bounds are updated in the next render.\n            style.maxHeight = containerHeight - top\n            style.overflow = \"clip\"\n        }\n\n        // ignore the given width and max-width if the tooltip position is fixed\n        // since we want to use the full width of the screen in that case\n        if (isPinnedToBottom && (style.width || style.maxWidth)) {\n            style.width = style.maxWidth = undefined\n        }\n\n        return style\n    }\n\n    override componentDidMount(): void {\n        this.updateDimensions()\n    }\n\n    override componentDidUpdate(): void {\n        this.updateDimensions()\n    }\n\n    override render(): React.ReactElement {\n        let {\n            id,\n            title,\n            titleAnnotation,\n            subtitle,\n            subtitleFormat,\n            footer,\n            dissolve,\n            children,\n            anchor,\n        } = this.props\n        const isPinnedToBottom = anchor === GrapherTooltipAnchor.bottom\n\n        // add a preposition to unit-based subtitles\n        const hasHeader = title !== undefined || subtitle !== undefined\n        if (!!subtitle && subtitleFormat === \"unit\") {\n            const unit = subtitle.toString()\n            const preposition = !unit.match(/^(per|in|\\() /i) ? \"in \" : \"\"\n            subtitle = preposition + stripOuterParentheses(unit)\n        }\n\n        // flag the year in the header and add note in footer (if necessary)\n        const timeNotice = !!subtitle && subtitleFormat === \"notice\"\n\n        // style the box differently if just displaying title/subtitle\n        const plain = hasHeader && !children\n\n        // skip transition delay if requested\n        const immediate = dissolve === \"immediate\"\n\n        return (\n            <TooltipContext.Provider value={{ anchor }}>\n                <div\n                    className={classnames(\"tooltip-container\", {\n                        \"fixed-bottom\": isPinnedToBottom,\n                    })}\n                >\n                    <div\n                        ref={this.base}\n                        id={id?.toString()}\n                        role=\"tooltip\"\n                        className={classnames(\"Tooltip\", {\n                            plain,\n                            dissolve,\n                            immediate,\n                        })}\n                        style={this.tooltipStyle}\n                    >\n                        {hasHeader && (\n                            <div className=\"frontmatter\">\n                                {title && (\n                                    <div className=\"title\">\n                                        {title}{\" \"}\n                                        <span className=\"annotation\">\n                                            {titleAnnotation}\n                                        </span>\n                                    </div>\n                                )}\n                                {subtitle && (\n                                    <div className=\"subtitle\">\n                                        {timeNotice && (\n                                            <TooltipIcon\n                                                icon={TooltipFooterIcon.Notice}\n                                            />\n                                        )}\n                                        <span>{subtitle}</span>\n                                    </div>\n                                )}\n                            </div>\n                        )}\n                        <div className=\"content-and-endmatter\">\n                            {children && (\n                                <div className=\"content\">{children}</div>\n                            )}\n                            {footer && footer.length > 0 && (\n                                <div\n                                    className={classnames(\"endmatter\", {\n                                        \"multiple-lines\": footer.length > 1,\n                                    })}\n                                >\n                                    {footer?.map(({ icon, text }) => (\n                                        <div\n                                            key={text}\n                                            className={classnames(\"line\", {\n                                                \"icon-sig\":\n                                                    icon ===\n                                                    TooltipFooterIcon.Significance,\n                                                \"no-icon\":\n                                                    icon ===\n                                                    TooltipFooterIcon.None,\n                                            })}\n                                        >\n                                            <TooltipIcon icon={icon} />\n                                            <p>{text}</p>\n                                        </div>\n                                    ))}\n                                </div>\n                            )}\n                        </div>\n                    </div>\n                </div>\n            </TooltipContext.Provider>\n        )\n    }\n}\n\ninterface ManagedTooltipContainerProps extends TooltipContainerProps {\n    tooltipManager: TooltipManager\n}\n\n@observer\nexport class TooltipContainer extends React.Component<ManagedTooltipContainerProps> {\n    constructor(props: ManagedTooltipContainerProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get tooltip(): TooltipProps | undefined {\n        const { tooltip } = this.props.tooltipManager\n        return tooltip?.get()\n    }\n\n    override render(): React.ReactElement | null {\n        const { props, tooltip } = this\n        if (!tooltip) return null\n        return <TooltipCard {...props} {...tooltip} />\n    }\n}\n\ninterface ManagedTooltipProps extends TooltipProps {\n    tooltipManager: TooltipManager\n}\n\n@observer\nexport class Tooltip extends React.Component<ManagedTooltipProps> {\n    constructor(props: ManagedTooltipProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    override componentDidMount(): void {\n        this.connectTooltipToContainer()\n    }\n\n    @action.bound private connectTooltipToContainer(): void {\n        this.props.tooltipManager.tooltip?.set(this.props)\n    }\n\n    @action.bound private removeToolTipFromContainer(): void {\n        this.props.tooltipManager.tooltip?.set(undefined)\n    }\n\n    override componentDidUpdate(): void {\n        this.connectTooltipToContainer()\n    }\n\n    override componentWillUnmount(): void {\n        this.removeToolTipFromContainer()\n    }\n\n    override render(): null {\n        return null\n    }\n}\n\nfunction TooltipIcon({\n    icon,\n}: {\n    icon: TooltipFooterIcon\n}): React.ReactElement | null {\n    return match(icon)\n        .with(TooltipFooterIcon.Notice, () => (\n            <FontAwesomeIcon className=\"icon\" icon={faInfoCircle} />\n        ))\n        .with(TooltipFooterIcon.Stripes, () => (\n            <div className=\"stripes icon\"></div>\n        ))\n        .with(TooltipFooterIcon.Significance, () => (\n            <div className=\"icon\">\n                <SignificanceIcon />\n            </div>\n        ))\n        .with(TooltipFooterIcon.None, () => null)\n        .exhaustive()\n}\n","import * as React from \"react\"\nimport { Bounds, bind } from \"@ourworldindata/utils\"\nimport {\n    isElementInteractive,\n    isTargetOutsideElement,\n} from \"../chart/ChartUtils\"\n\nexport class Modal extends React.Component<{\n    bounds: Bounds\n    onDismiss: () => void\n    children?: React.ReactNode\n    isHeightFixed?: boolean // by default, the modal height is not fixed but fits to the content\n    alignVertical?: \"top\" | \"center\" | \"bottom\"\n}> {\n    contentRef = React.createRef<HTMLDivElement>()\n\n    private get bounds(): Bounds {\n        return this.props.bounds\n    }\n\n    private get isHeightFixed(): boolean {\n        return this.props.isHeightFixed ?? false\n    }\n\n    private get alignVertical(): \"top\" | \"center\" | \"bottom\" {\n        return this.props.alignVertical ?? \"center\"\n    }\n\n    @bind onDocumentClick(e: MouseEvent): void {\n        if (\n            this.contentRef?.current &&\n            isTargetOutsideElement(e.target!, this.contentRef.current) &&\n            // clicking on an interactive element should not dismiss the modal\n            // (this is especially important for the suggested chart review tool)\n            !isElementInteractive(e.target as HTMLElement)\n        )\n            this.props.onDismiss()\n    }\n\n    @bind onDocumentKeyDown(e: KeyboardEvent): void {\n        if (e.key === \"Escape\") this.props.onDismiss()\n    }\n\n    override componentDidMount(): void {\n        document.addEventListener(\"click\", this.onDocumentClick)\n        document.addEventListener(\"keydown\", this.onDocumentKeyDown)\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"click\", this.onDocumentClick)\n        document.removeEventListener(\"keydown\", this.onDocumentKeyDown)\n    }\n\n    override render(): React.ReactElement {\n        const { bounds } = this\n\n        const contentStyle: React.CSSProperties = {\n            left: bounds.left,\n            width: bounds.width,\n            maxHeight: bounds.height,\n        }\n\n        if (this.isHeightFixed) {\n            contentStyle.height = bounds.height\n        }\n\n        if (this.alignVertical === \"bottom\") {\n            contentStyle.bottom = bounds.y\n        } else if (this.alignVertical === \"top\") {\n            contentStyle.top = bounds.y\n        } else {\n            contentStyle.top = \"50%\"\n            contentStyle.transform = \"translateY(-50%)\"\n        }\n\n        return (\n            <div className=\"modal-overlay\">\n                <div className=\"modal-wrapper\">\n                    <div\n                        className=\"modal-content\"\n                        style={contentStyle}\n                        ref={this.contentRef}\n                    >\n                        {this.props.children}\n                    </div>\n                </div>\n            </div>\n        )\n    }\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"indefinite\"] = factory();\n\telse\n\t\troot[\"indefinite\"] = factory();\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 769:\n/***/ ((__unused_webpack_module, exports) => {\n\nvar STARTS_WITH_VOWEL = /^[aeiouAEIOU]/;\n\n/**\n * Array#indexOf is faster IF the word starts with \"a\" (for example),\n * but negligibly faster when you have to .toLowerCase() the word, and\n * slower if the word happens to start with (e.g.) \"u.\"\n */\nexports.startsWithVowel = function (word) {\n  return STARTS_WITH_VOWEL.test(word);\n};\nexports.capitalize = function (article, opts) {\n  if (opts.capitalize) {\n    article = \"\".concat(article.charAt(0).toUpperCase()).concat(article.slice(1));\n  }\n  return article;\n};\n\n/***/ }),\n\n/***/ 393:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar _require = __webpack_require__(769),\n  capitalize = _require.capitalize;\nvar irregulars = __webpack_require__(725);\nvar rules = __webpack_require__(803);\nvar indefinite = function indefinite(word) {\n  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var article;\n\n  /**\n   * I'd really prefer to use for of here, but babel converts that\n   * to something using Symbol.iterator, which PhantomJS chokes on.\n   */\n  rules.some(function (rule) {\n    if (rule.check(word, opts)) {\n      article = rule.run(word, opts);\n      return true;\n    }\n  });\n  return handleOptions(article, opts, word);\n};\nvar handleOptions = function handleOptions(article, opts, word) {\n  article = capitalize(article, opts);\n  if (opts.articleOnly) {\n    return article;\n  }\n  return \"\".concat(article, \" \").concat(word);\n};\nindefinite.irregularWords = irregulars.list;\nmodule.exports = indefinite;\n\n/***/ }),\n\n/***/ 725:\n/***/ ((__unused_webpack_module, exports) => {\n\nexports.check = function (word, ending) {\n  if (ending) {\n    // If the word ends in the ending, remove it.\n    var regex = new RegExp(\"\".concat(ending, \"$\"));\n    word = word.replace(regex, '');\n    if (word.length <= 1) {\n      return false;\n    }\n  }\n  return exports.list.indexOf(word) > -1;\n};\n\n/**\n * Here follows a List of words that take irregular articles because their\n * first letter is either a consonant pronounced like a vowel (hour) or a\n * vowel proncounced like a consonant (ukelele). Note that this is not only\n * nouns because adjectives and adverbs that start with these letters could\n * also follow an article when they identify a later noun, as in \"a useless\n * tool.\"\n *\n * This is not an attempt at a complete list, but rather a collection of\n * words used in at least moderate frequency. A list of ALL irregular words\n * would be too exhaustive to compile without some sort of tool.\n * http://www.thefreedictionary.com/words-that-start-with-eu says there are\n * over 1800 words starting with \"eu\" alone.\n *\n * At least for now, this list omits proper names, as they aren't USUALLY\n * used in such a way as to require an _indefinite_ article. I can't think,\n * for example, of a case where you'd want to say \"a Eustace.\"\n */\nexports.list = [\n// Nouns: eu like y\n'eunuch', 'eucalyptus', 'eugenics', 'eulogy', 'euphemism', 'euphony', 'euphoria', 'eureka',\n// Adjectives: eu like y\n'euro', 'european', 'euphemistic', 'euphonic', 'euphoric',\n// Adverbs: eu like y\n'euphemistically', 'euphonically', 'euphorically',\n// Nouns: silent h\n'heir', 'heiress', 'herb', 'homage', 'honesty', 'honor', 'honour', 'honoree', 'hour',\n// Adjectives: silent h\n'honest', 'honorous', 'honorific', 'honorable', 'honourable',\n// Adverbs: silent h\n'honestly', 'hourly',\n// Nouns: o like w\n'one', 'ouija',\n// Adjectives: o like w\n'once',\n// Adverbs: o like w\n\n// Nouns: u like y\n'ubiquity', 'udometer', 'ufo', 'uke', 'ukelele', 'ululate', 'unicorn', 'unicycle', 'uniform', 'unify', 'union', 'unison', 'unit', 'unity', 'universe', 'university', 'upas', 'ural', 'uranium', 'urea', 'ureter', 'urethra', 'urine', 'urologist', 'urology', 'urus', 'usage', 'use', 'user', 'usual', 'usurp', 'usurper', 'usury', 'utensil', 'uterus', 'utility', 'utopia', 'utricle', 'uvarovite', 'uvea', 'uvula', 'utah', 'utahn',\n// Adjectives: u like y\n'ubiquitous', 'ugandan', 'ukrainian', 'unanimous', 'unicameral', 'unified', 'unique', 'unisex', 'universal', 'urinal', 'urological', 'useful', 'useless', 'usurious', 'utilitarian', 'utopic',\n// Adverbs: u like y\n'ubiquitously', 'unanimously', 'unicamerally', 'uniquely', 'universally', 'urologically', 'usefully', 'uselessly', 'usuriously',\n// Nouns: y like i\n'yttria', 'yggdrasil', 'ylem', 'yperite', 'ytterbia', 'ytterbium', 'yttrium',\n// Adjectives: y like i\n'ytterbous', 'ytterbic', 'yttric',\n// Single letters\n'f', 'h', 'l', 'm', 'n', 'r', 's', 'u', 'x'];\n\n/***/ }),\n\n/***/ 803:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports = [__webpack_require__(374), __webpack_require__(532), __webpack_require__(202)];\n\n/***/ }),\n\n/***/ 532:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\nvar _require = __webpack_require__(769),\n  startsWithVowel = _require.startsWithVowel;\nvar ACRONYM = /^[A-Z]+$/;\nvar IRREGULAR_ACRONYM = /^[UFHLMNRSX]/;\nvar isIrregularAcronym = function isIrregularAcronym(word) {\n  return IRREGULAR_ACRONYM.test(word.charAt(0));\n};\n\n/**\n * Both = a && b\n * Neither = !a && !b\n * In the case of Booleans, this means\n * either both true or both false, so\n * we can just compare the equality of\n * a and b.\n */\nvar bothOrNeither = function bothOrNeither(a, b) {\n  return a === b;\n};\n\n/**\n * If the entirety of the first word is capital letters\n * and case insensitivity is off, it's an acronym.\n */\nexports.check = function (word, _ref) {\n  var caseInsensitive = _ref.caseInsensitive;\n  return caseInsensitive ? false : ACRONYM.test(word.split(' ')[0]);\n};\nexports.run = function (word) {\n  var isIrregular = isIrregularAcronym(word);\n  var initialVowel = startsWithVowel(word);\n  /*\n   * If it starts with U: \"a\"\n   * If it starts with any other vowel: \"an\"\n   * If it starts with F, H, L, M, N, R, S, or X: \"an\"\n   * If it starts with any other consonant: \"a\"\n   */\n  var article = bothOrNeither(initialVowel, isIrregular) ? 'a' : 'an';\n  return article;\n};\n\n/***/ }),\n\n/***/ 374:\n/***/ ((__unused_webpack_module, exports) => {\n\nvar NUMBERS = /^([0-9,]+)/;\nvar EIGHT_ELEVEN_EIGHTEEN = /^(11|8|18)/;\nvar ELEVEN_EIGHTEEN = /^(11|18)/;\nexports.check = function (word) {\n  return NUMBERS.test(word);\n};\nexports.run = function (word, opts) {\n  var number = word.toString().match(NUMBERS)[1].replace(/,/g, '');\n  var article = 'a';\n  if (EIGHT_ELEVEN_EIGHTEEN.test(number)) {\n    var startsWith11Or18 = ELEVEN_EIGHTEEN.test(number);\n\n    // If the number starts with 11 or 18 and is of length 4,\n    // the pronunciation is ambiguous so check opts.numbers to see\n    // how to render it. Otherwise, if it starts with 11 or 18\n    // and has 2, 5, 8, 11, etc. digits, use 'an.' Finally, if it\n    // starts with an 8, use 'an.' For everything else, use 'a.'\n    if (startsWith11Or18 && number.length === 4) {\n      article = opts.numbers === 'colloquial' ? 'an' : 'a';\n    } else if (startsWith11Or18 && (number.length - 2) % 3 === 0) {\n      article = 'an';\n    } else {\n      article = number.startsWith('8') ? 'an' : 'a';\n    }\n  }\n  return article;\n};\n\n/***/ }),\n\n/***/ 202:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\nvar _require = __webpack_require__(769),\n  startsWithVowel = _require.startsWithVowel;\nvar irregulars = __webpack_require__(725);\nvar EXTRAS = /[\\s'-]/;\nvar getFirst = function getFirst(word) {\n  return word.split(EXTRAS)[0].toLowerCase();\n};\nvar xor = function xor(a, b) {\n  return (a || b) && !(a && b);\n};\n\n/**\n * Try some variations on the word to determine whether it's irregular.\n * Specifically, try trimming s, then es, then ed because those are common\n * forms of plurals and past tense verbs (which can be used like adjectives).\n */\nvar checkForIrregulars = function checkForIrregulars(part) {\n  return [null, 's', 'es', 'ed'].reduce(function (memo, ending) {\n    return memo || irregulars.check(part, ending);\n  }, false);\n};\nexports.check = function () {\n  return true;\n};\nexports.run = function (word, opts) {\n  // Only check the first word. Also, if it's hyphenated, only\n  // check the first part. Finally, if it's possessive, ignore\n  // the possessive part.\n  var first = getFirst(word);\n  var isIrregular = checkForIrregulars(first);\n\n  /**\n  * If it starts with a vowel and isn't irregular: \"an\"\n  * If it starts with a vowel and IS irregular: \"a\"\n  * If it starts with a consonant and isn't irregular: \"a\"\n  * If it starts with a consonant and IS irregular: \"an\"\n  */\n  var article = xor(startsWithVowel(word), isIrregular) ? 'an' : 'a';\n  return article;\n};\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(393);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","/*! @license Rematrix v0.2.2\n\n\tCopyright 2018 Fisssion LLC.\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy\n\tof this software and associated documentation files (the \"Software\"), to deal\n\tin the Software without restriction, including without limitation the rights\n\tto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\tcopies of the Software, and to permit persons to whom the Software is\n\tfurnished to do so, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in\n\tall copies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\tTHE SOFTWARE.\n*/\n/**\n * @module Rematrix\n */\n\n/**\n * Transformation matrices in the browser come in two flavors:\n *\n *  - `matrix` using 6 values (short)\n *  - `matrix3d` using 16 values (long)\n *\n * This utility follows this [conversion guide](https://goo.gl/EJlUQ1)\n * to expand short form matrices to their equivalent long form.\n *\n * @param  {array} source - Accepts both short and long form matrices.\n * @return {array}\n */\nfunction format(source) {\n\tif (source.constructor !== Array) {\n\t\tthrow new TypeError('Expected array.')\n\t}\n\tif (source.length === 16) {\n\t\treturn source\n\t}\n\tif (source.length === 6) {\n\t\tvar matrix = identity();\n\t\tmatrix[0] = source[0];\n\t\tmatrix[1] = source[1];\n\t\tmatrix[4] = source[2];\n\t\tmatrix[5] = source[3];\n\t\tmatrix[12] = source[4];\n\t\tmatrix[13] = source[5];\n\t\treturn matrix\n\t}\n\tthrow new RangeError('Expected array with either 6 or 16 values.')\n}\n\n/**\n * Returns a matrix representing no transformation. The product of any matrix\n * multiplied by the identity matrix will be the original matrix.\n *\n * > **Tip:** Similar to how `5 * 1 === 5`, where `1` is the identity.\n *\n * @return {array}\n */\nfunction identity() {\n\tvar matrix = [];\n\tfor (var i = 0; i < 16; i++) {\n\t\ti % 5 == 0 ? matrix.push(1) : matrix.push(0);\n\t}\n\treturn matrix\n}\n\n/**\n * Returns a matrix describing the inverse transformation of the source\n * matrix. The product of any matrix multiplied by its inverse will be the\n * identity matrix.\n *\n * > **Tip:** Similar to how `5 * (1/5) === 1`, where `1/5` is the inverse.\n *\n * @param  {array} source - Accepts both short and long form matrices.\n * @return {array}\n */\nfunction inverse(source) {\n\tvar m = format(source);\n\n\tvar s0 = m[0] * m[5] - m[4] * m[1];\n\tvar s1 = m[0] * m[6] - m[4] * m[2];\n\tvar s2 = m[0] * m[7] - m[4] * m[3];\n\tvar s3 = m[1] * m[6] - m[5] * m[2];\n\tvar s4 = m[1] * m[7] - m[5] * m[3];\n\tvar s5 = m[2] * m[7] - m[6] * m[3];\n\n\tvar c5 = m[10] * m[15] - m[14] * m[11];\n\tvar c4 = m[9] * m[15] - m[13] * m[11];\n\tvar c3 = m[9] * m[14] - m[13] * m[10];\n\tvar c2 = m[8] * m[15] - m[12] * m[11];\n\tvar c1 = m[8] * m[14] - m[12] * m[10];\n\tvar c0 = m[8] * m[13] - m[12] * m[9];\n\n\tvar determinant = 1 / (s0 * c5 - s1 * c4 + s2 * c3 + s3 * c2 - s4 * c1 + s5 * c0);\n\n\tif (isNaN(determinant) || determinant === Infinity) {\n\t\tthrow new Error('Inverse determinant attempted to divide by zero.')\n\t}\n\n\treturn [\n\t\t(m[5] * c5 - m[6] * c4 + m[7] * c3) * determinant,\n\t\t(-m[1] * c5 + m[2] * c4 - m[3] * c3) * determinant,\n\t\t(m[13] * s5 - m[14] * s4 + m[15] * s3) * determinant,\n\t\t(-m[9] * s5 + m[10] * s4 - m[11] * s3) * determinant,\n\n\t\t(-m[4] * c5 + m[6] * c2 - m[7] * c1) * determinant,\n\t\t(m[0] * c5 - m[2] * c2 + m[3] * c1) * determinant,\n\t\t(-m[12] * s5 + m[14] * s2 - m[15] * s1) * determinant,\n\t\t(m[8] * s5 - m[10] * s2 + m[11] * s1) * determinant,\n\n\t\t(m[4] * c4 - m[5] * c2 + m[7] * c0) * determinant,\n\t\t(-m[0] * c4 + m[1] * c2 - m[3] * c0) * determinant,\n\t\t(m[12] * s4 - m[13] * s2 + m[15] * s0) * determinant,\n\t\t(-m[8] * s4 + m[9] * s2 - m[11] * s0) * determinant,\n\n\t\t(-m[4] * c3 + m[5] * c1 - m[6] * c0) * determinant,\n\t\t(m[0] * c3 - m[1] * c1 + m[2] * c0) * determinant,\n\t\t(-m[12] * s3 + m[13] * s1 - m[14] * s0) * determinant,\n\t\t(m[8] * s3 - m[9] * s1 + m[10] * s0) * determinant\n\t]\n}\n\n/**\n * Returns a 4x4 matrix describing the combined transformations\n * of both arguments.\n *\n * > **Note:** Order is very important. For example, rotating 45°\n * along the Z-axis, followed by translating 500 pixels along the\n * Y-axis... is not the same as translating 500 pixels along the\n * Y-axis, followed by rotating 45° along on the Z-axis.\n *\n * @param  {array} m - Accepts both short and long form matrices.\n * @param  {array} x - Accepts both short and long form matrices.\n * @return {array}\n */\nfunction multiply(m, x) {\n\tvar fm = format(m);\n\tvar fx = format(x);\n\tvar product = [];\n\n\tfor (var i = 0; i < 4; i++) {\n\t\tvar row = [fm[i], fm[i + 4], fm[i + 8], fm[i + 12]];\n\t\tfor (var j = 0; j < 4; j++) {\n\t\t\tvar k = j * 4;\n\t\t\tvar col = [fx[k], fx[k + 1], fx[k + 2], fx[k + 3]];\n\t\t\tvar result =\n\t\t\t\trow[0] * col[0] + row[1] * col[1] + row[2] * col[2] + row[3] * col[3];\n\n\t\t\tproduct[i + k] = result;\n\t\t}\n\t}\n\n\treturn product\n}\n\n/**\n * Attempts to return a 4x4 matrix describing the CSS transform\n * matrix passed in, but will return the identity matrix as a\n * fallback.\n *\n * **Tip:** In virtually all cases, this method is used to convert\n * a CSS matrix (retrieved as a `string` from computed styles) to\n * its equivalent array format.\n *\n * @param  {string} source - String containing a valid CSS `matrix` or `matrix3d` property.\n * @return {array}\n */\nfunction parse(source) {\n\tif (typeof source === 'string') {\n\t\tvar match = source.match(/matrix(3d)?\\(([^)]+)\\)/);\n\t\tif (match) {\n\t\t\tvar raw = match[2].split(', ').map(parseFloat);\n\t\t\treturn format(raw)\n\t\t}\n\t}\n\treturn identity()\n}\n\n/**\n * Returns a 4x4 matrix describing Z-axis rotation.\n *\n * @param  {number} angle - Measured in degrees.\n * @return {array}\n */\nfunction rotate(angle) {\n\treturn rotateZ(angle)\n}\n\n/**\n * Returns a 4x4 matrix describing X-axis rotation.\n *\n * @param  {number} angle - Measured in degrees.\n * @return {array}\n */\nfunction rotateX(angle) {\n\tvar theta = Math.PI / 180 * angle;\n\tvar matrix = identity();\n\n\tmatrix[5] = matrix[10] = Math.cos(theta);\n\tmatrix[6] = matrix[9] = Math.sin(theta);\n\tmatrix[9] *= -1;\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Y-axis rotation.\n *\n * @param  {number} angle - Measured in degrees.\n * @return {array}\n */\nfunction rotateY(angle) {\n\tvar theta = Math.PI / 180 * angle;\n\tvar matrix = identity();\n\n\tmatrix[0] = matrix[10] = Math.cos(theta);\n\tmatrix[2] = matrix[8] = Math.sin(theta);\n\tmatrix[2] *= -1;\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Z-axis rotation.\n *\n * @param  {number} angle - Measured in degrees.\n * @return {array}\n */\nfunction rotateZ(angle) {\n\tvar theta = Math.PI / 180 * angle;\n\tvar matrix = identity();\n\n\tmatrix[0] = matrix[5] = Math.cos(theta);\n\tmatrix[1] = matrix[4] = Math.sin(theta);\n\tmatrix[4] *= -1;\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing 2D scaling. The first argument\n * is used for both X and Y-axis scaling, unless an optional\n * second argument is provided to explicitly define Y-axis scaling.\n *\n * @param  {number} scalar    - Decimal multiplier.\n * @param  {number} [scalarY] - Decimal multiplier.\n * @return {array}\n */\nfunction scale(scalar, scalarY) {\n\tvar matrix = identity();\n\n\tmatrix[0] = scalar;\n\tmatrix[5] = typeof scalarY === 'number' ? scalarY : scalar;\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing X-axis scaling.\n *\n * @param  {number} scalar - Decimal multiplier.\n * @return {array}\n */\nfunction scaleX(scalar) {\n\tvar matrix = identity();\n\tmatrix[0] = scalar;\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Y-axis scaling.\n *\n * @param  {number} scalar - Decimal multiplier.\n * @return {array}\n */\nfunction scaleY(scalar) {\n\tvar matrix = identity();\n\tmatrix[5] = scalar;\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Z-axis scaling.\n *\n * @param  {number} scalar - Decimal multiplier.\n * @return {array}\n */\nfunction scaleZ(scalar) {\n\tvar matrix = identity();\n\tmatrix[10] = scalar;\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing shear. The first argument\n * defines X-axis shearing, and an optional second argument\n * defines Y-axis shearing.\n *\n * @param  {number} angleX   - Measured in degrees.\n * @param  {number} [angleY] - Measured in degrees.\n * @return {array}\n */\nfunction skew(angleX, angleY) {\n\tvar thetaX = Math.PI / 180 * angleX;\n\tvar matrix = identity();\n\n\tmatrix[4] = Math.tan(thetaX);\n\n\tif (angleY) {\n\t\tvar thetaY = Math.PI / 180 * angleY;\n\t\tmatrix[1] = Math.tan(thetaY);\n\t}\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing X-axis shear.\n *\n * @param  {number} angle - Measured in degrees.\n * @return {array}\n */\nfunction skewX(angle) {\n\tvar theta = Math.PI / 180 * angle;\n\tvar matrix = identity();\n\n\tmatrix[4] = Math.tan(theta);\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Y-axis shear.\n *\n * @param  {number} angle - Measured in degrees\n * @return {array}\n */\nfunction skewY(angle) {\n\tvar theta = Math.PI / 180 * angle;\n\tvar matrix = identity();\n\n\tmatrix[1] = Math.tan(theta);\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing 2D translation. The first\n * argument defines X-axis translation, and an optional second\n * argument defines Y-axis translation.\n *\n * @param  {number} distanceX   - Measured in pixels.\n * @param  {number} [distanceY] - Measured in pixels.\n * @return {array}\n */\nfunction translate(distanceX, distanceY) {\n\tvar matrix = identity();\n\tmatrix[12] = distanceX;\n\n\tif (distanceY) {\n\t\tmatrix[13] = distanceY;\n\t}\n\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing X-axis translation.\n *\n * @param  {number} distance - Measured in pixels.\n * @return {array}\n */\nfunction translateX(distance) {\n\tvar matrix = identity();\n\tmatrix[12] = distance;\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Y-axis translation.\n *\n * @param  {number} distance - Measured in pixels.\n * @return {array}\n */\nfunction translateY(distance) {\n\tvar matrix = identity();\n\tmatrix[13] = distance;\n\treturn matrix\n}\n\n/**\n * Returns a 4x4 matrix describing Z-axis translation.\n *\n * @param  {number} distance - Measured in pixels.\n * @return {array}\n */\nfunction translateZ(distance) {\n\tvar matrix = identity();\n\tmatrix[14] = distance;\n\treturn matrix\n}\n\nexport { format, identity, inverse, multiply, parse, rotate, rotateX, rotateY, rotateZ, scale, scaleX, scaleY, scaleZ, skew, skewX, skewY, translate, translateX, translateY, translateZ };\n","import*as t from\"rematrix\";var e=function(t){return\"number\"==typeof t},i=function(t){return\"function\"==typeof t},n=function(t){return\"[object Object]\"===Object.prototype.toString.call(t)},r=function(t){return Array.prototype.slice.apply(t)},s=function(t){var e=t.reduce(function(t,e){return t[e]=(t[e]||0)+1,t},{});return Object.keys(e).filter(function(t){return e[t]>1})};function a(t){return[].slice.call(arguments,1).forEach(function(e){if(e)for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])}),t}var o,l=function(t,e,i){return t+(e-t)*i},p={__proto__:null,isNumber:e,isFunction:i,isObject:n,toArray:r,getDuplicateValsAsStrings:s,assign:a,tweenProp:l},c=\"data-flip-id\",u=\"data-inverse-flip-id\",d=\"data-portal-key\",f=\"data-exit-container\",h={__proto__:null,DATA_FLIP_ID:c,DATA_INVERSE_FLIP_ID:u,DATA_FLIP_COMPONENT_ID:\"data-flip-component-id\",DATA_FLIP_CONFIG:\"data-flip-config\",DATA_PORTAL_KEY:d,DATA_EXIT_CONTAINER:f},g={noWobble:{stiffness:200,damping:26},gentle:{stiffness:120,damping:14},veryGentle:{stiffness:130,damping:17},wobbly:{stiffness:180,damping:12},stiff:{stiffness:260,damping:26}},m=function(t){return n(t)?t:Object.keys(g).indexOf(t)>-1?g[t]:{}};\"undefined\"!=typeof window&&(o=window.requestAnimationFrame);var v=o=o||function(t){window.setTimeout(t,1e3/60)},y=Date.now(),_=\"object\"==typeof performance&&\"function\"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()-y};function S(t,e){var i=t.indexOf(e);-1!==i&&t.splice(i,1)}var E=/*#__PURE__*/function(){function t(){}return t.prototype.run=function(){var t=this;v(function(){t.springSystem.loop(_())})},t}(),A=function(){this.position=0,this.velocity=0},C=0,b=.001,I=/*#__PURE__*/function(){function t(t){this._id=\"s\"+C++,this._springSystem=t,this.listeners=[],this._startValue=0,this._currentState=new A,this._displacementFromRestThreshold=.001,this._endValue=0,this._overshootClampingEnabled=!1,this._previousState=new A,this._restSpeedThreshold=.001,this._tempState=new A,this._timeAccumulator=0,this._wasAtRest=!0,this._cachedSpringConfig={}}var e=t.prototype;return e.getId=function(){return this._id},e.destroy=function(){this.listeners=[],this._springSystem.deregisterSpring(this)},e.setSpringConfig=function(t){return this._springConfig=t,this},e.getCurrentValue=function(){return this._currentState.position},e.getDisplacementDistanceForState=function(t){return Math.abs(this._endValue-t.position)},e.setEndValue=function(t){if(t===this._endValue)return this;if(this.prevEndValue=t,this._endValue===t&&this.isAtRest())return this;this._startValue=this.getCurrentValue(),this._endValue=t,this._springSystem.activateSpring(this.getId());for(var e=0,i=this.listeners.length;e<i;e++){var n=this.listeners[e].onSpringEndStateChange;n&&n(this)}return this},e.setVelocity=function(t){return t===this._currentState.velocity||(this._currentState.velocity=t,this._springSystem.activateSpring(this.getId())),this},e.setCurrentValue=function(t){this._startValue=t,this._currentState.position=t;for(var e=0,i=this.listeners.length;e<i;e++){var n=this.listeners[e];n.onSpringUpdate&&n.onSpringUpdate(this)}return this},e.setAtRest=function(){return this._endValue=this._currentState.position,this._tempState.position=this._currentState.position,this._currentState.velocity=0,this},e.setOvershootClampingEnabled=function(t){return this._overshootClampingEnabled=t,this},e.isOvershooting=function(){var t=this._startValue,e=this._endValue;return this._springConfig.tension>0&&(t<e&&this.getCurrentValue()>e||t>e&&this.getCurrentValue()<e)},e.advance=function(t,e){var i=this.isAtRest();if(!i||!this._wasAtRest){var n=e;e>.064&&(n=.064),this._timeAccumulator+=n;for(var r,s,a,o,l,p,c=this._springConfig.tension,u=this._springConfig.friction,d=this._currentState.position,f=this._currentState.velocity,h=this._tempState.position,g=this._tempState.velocity;this._timeAccumulator>=b;)this._timeAccumulator-=b,this._timeAccumulator<b&&(this._previousState.position=d,this._previousState.velocity=f),s=c*(this._endValue-h)-u*f,o=c*(this._endValue-(h=d+(r=f)*b*.5))-u*(g=f+s*b*.5),p=c*(this._endValue-(h=d+(a=g)*b*.5))-u*(g=f+o*b*.5),h=d+(l=g)*b,d+=1/6*(r+2*(a+l)+(g=f+p*b))*b,f+=1/6*(s+2*(o+p)+(c*(this._endValue-h)-u*g))*b;this._tempState.position=h,this._tempState.velocity=g,this._currentState.position=d,this._currentState.velocity=f,this._timeAccumulator>0&&this._interpolate(this._timeAccumulator/b),(this.isAtRest()||this._overshootClampingEnabled&&this.isOvershooting())&&(this._springConfig.tension>0?(this._startValue=this._endValue,this._currentState.position=this._endValue):(this._endValue=this._currentState.position,this._startValue=this._endValue),this.setVelocity(0),i=!0);var m=!1;this._wasAtRest&&(this._wasAtRest=!1,m=!0);var v=!1;i&&(this._wasAtRest=!0,v=!0),this.notifyPositionUpdated(m,v)}},e.notifyPositionUpdated=function(t,e){var i=this;this.listeners.filter(Boolean).forEach(function(n){t&&n.onSpringActivate&&!i._onActivateCalled&&(n.onSpringActivate(i),i._onActivateCalled=!0),n.onSpringUpdate&&n.onSpringUpdate(i),e&&n.onSpringAtRest&&n.onSpringAtRest(i)})},e.systemShouldAdvance=function(){return!this.isAtRest()||!this.wasAtRest()},e.wasAtRest=function(){return this._wasAtRest},e.isAtRest=function(){return Math.abs(this._currentState.velocity)<this._restSpeedThreshold&&(this.getDisplacementDistanceForState(this._currentState)<=this._displacementFromRestThreshold||0===this._springConfig.tension)},e._interpolate=function(t){this._currentState.position=this._currentState.position*t+this._previousState.position*(1-t),this._currentState.velocity=this._currentState.velocity*t+this._previousState.velocity*(1-t)},e.addListener=function(t){return this.listeners.push(t),this},e.addOneTimeListener=function(t){var e=this;return Object.keys(t).forEach(function(i){var n;t[i]=(n=t[i],function(){n.apply(void 0,[].slice.call(arguments)),e.removeListener(t)})}),this.listeners.push(t),this},e.removeListener=function(t){return S(this.listeners,t),this},t}(),w=/*#__PURE__*/function(){function t(t){this.looper=t||new E,this.looper.springSystem=this,this.listeners=[],this._activeSprings=[],this._idleSpringIndices=[],this._isIdle=!0,this._lastTimeMillis=-1,this._springRegistry={}}var e=t.prototype;return e.createSpring=function(t,e){return this.createSpringWithConfig({tension:t,friction:e})},e.createSpringWithConfig=function(t){var e=new I(this);return this.registerSpring(e),e.setSpringConfig(t),e},e.getIsIdle=function(){return this._isIdle},e.registerSpring=function(t){this._springRegistry[t.getId()]=t},e.deregisterSpring=function(t){S(this._activeSprings,t),delete this._springRegistry[t.getId()]},e.advance=function(t,e){for(var i=this;this._idleSpringIndices.length>0;)this._idleSpringIndices.pop();for(this._activeSprings.filter(Boolean).forEach(function(n){n.systemShouldAdvance()?n.advance(t/1e3,e/1e3):i._idleSpringIndices.push(i._activeSprings.indexOf(n))});this._idleSpringIndices.length>0;){var n=this._idleSpringIndices.pop();n>=0&&this._activeSprings.splice(n,1)}},e.loop=function(t){var e;-1===this._lastTimeMillis&&(this._lastTimeMillis=t-1);var i=t-this._lastTimeMillis;this._lastTimeMillis=t;var n=0,r=this.listeners.length;for(n=0;n<r;n++)(e=this.listeners[n]).onBeforeIntegrate&&e.onBeforeIntegrate(this);for(this.advance(t,i),0===this._activeSprings.length&&(this._isIdle=!0,this._lastTimeMillis=-1),n=0;n<r;n++)(e=this.listeners[n]).onAfterIntegrate&&e.onAfterIntegrate(this);this._isIdle||this.looper.run()},e.activateSpring=function(t){var e=this._springRegistry[t];-1===this._activeSprings.indexOf(e)&&this._activeSprings.push(e),this.getIsIdle()&&(this._isIdle=!1,this.looper.run())},t}(),O=new w,x=function(t){var e=t.springConfig,i=e.overshootClamping,n=t.getOnUpdateFunc,r=t.onAnimationEnd,s=t.onSpringActivate,a=O.createSpring(e.stiffness,e.damping);a.setOvershootClampingEnabled(!!i);var o={onSpringActivate:s,onSpringAtRest:function(){a.destroy(),r()},onSpringUpdate:n({spring:a,onAnimationEnd:r})};return a.addListener(o),a},U=function(t){var e=x(t);return e.setEndValue(1),e},V=function(t,e){if(void 0===e&&(e={}),t&&t.length){e.reverse&&t.reverse();var i,n=\"number\"!=typeof(i=e.speed)?1.1:1+Math.min(Math.max(5*i,0),5),r=1/Math.max(Math.min(t.length,100),10),s=t.map(function(t,e){var i=t.getOnUpdateFunc;return t.getOnUpdateFunc=function(t){var a=i(t);return function(t){var i=t.getCurrentValue();(i=i<.01?0:i>.99?1:i)>=r&&s[e+1]&&s[e+1](Math.max(Math.min(i*n,1),0)),a(t)}},t}).map(function(t){var e=x(t);if(e)return e.setEndValue.bind(e)}).filter(Boolean);s[0]&&s[0](1)}},F=function(t){return[0,1,4,5,12,13].map(function(e){return t[e]})},P=function(t){return t.top<window.innerHeight&&t.bottom>0&&t.left<window.innerWidth&&t.right>0};function D(t){return JSON.parse(t.dataset.flipConfig||\"{}\")}var R=function(t,e){var i;return a(t,((i={})[e[0]]=e[1],i))},T=function(t,e){return r(e?document.querySelectorAll(\"[\"+d+'=\"'+e+'\"]'):t.querySelectorAll(\"[\"+c+\"]\"))},M=function(t){return t.map(function(t){return[t,t.getBoundingClientRect()]})},k=!0,j=function(){return k=!1},B=function(){return k=!0},N=function(){return k},L=function(n){var o=n.cachedOrderedFlipIds,p=void 0===o?[]:o,f=n.inProgressAnimations,h=void 0===f?{}:f,v=n.flippedElementPositionsBeforeUpdate,y=void 0===v?{}:v,_=n.flipCallbacks,S=void 0===_?{}:_,E=n.containerEl,A=n.applyTransformOrigin,C=n.spring,b=n.debug,I=n.portalKey,w=n.staggerConfig,O=void 0===w?{}:w,x=n.decisionData,j=void 0===x?{}:x,B=n.handleEnterUpdateDelete,N=n.onComplete,L=n.onStart;if(k&&!window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches){var q,X=M(T((q={element:E,portalKey:I}).element,q.portalKey)).map(function(t){var e=t[0],i=t[1],n=window.getComputedStyle(e);return[e.dataset.flipId,{element:e,rect:i,opacity:parseFloat(n.opacity),transform:n.transform}]}).reduce(R,{}),Y=function(t){var e=t.containerEl,i=t.portalKey;return i?function(t){return function(e){return r(document.querySelectorAll(\"[\"+d+'=\"'+t+'\"]'+e))}}(i):e?function(t){var e=Math.random().toFixed(5);return t.dataset.flipperId=e,function(i){return r(t.querySelectorAll('[data-flipper-id=\"'+e+'\"] '+i))}}(e):function(){return[]}}({containerEl:E,portalKey:I}),W=function(t){return function(e){return t(\"[\"+c+'=\"'+e+'\"]')[0]}}(Y),K=function(t){return y[t]&&X[t]},H=Object.keys(y).concat(Object.keys(X)).filter(function(t){return!K(t)}),J={flipCallbacks:S,getElement:W,flippedElementPositionsBeforeUpdate:y,flippedElementPositionsAfterUpdate:X,inProgressAnimations:h,decisionData:j},z=function(t){var e,i=t.unflippedIds,n=t.flipCallbacks,r=t.getElement,s=t.flippedElementPositionsBeforeUpdate,a=t.flippedElementPositionsAfterUpdate,o=t.inProgressAnimations,l=t.decisionData,p=i.filter(function(t){return a[t]}).filter(function(t){return n[t]&&n[t].onAppear}),c=i.filter(function(t){return s[t]&&n[t]&&n[t].onExit}),u=new Promise(function(t){e=t}),d=[],f=0,h=c.map(function(t,i){var r=s[t].domDataForExitAnimations,a=r.element,p=r.parent,c=r.childPosition,u=c.top,h=c.left,g=c.width,m=c.height;\"static\"===getComputedStyle(p).position&&(p.style.position=\"relative\"),a.style.transform=\"matrix(1, 0, 0, 1, 0, 0)\",a.style.position=\"absolute\",a.style.top=u+\"px\",a.style.left=h+\"px\",a.style.height=m+\"px\",a.style.width=g+\"px\";var v=d.filter(function(t){return t[0]===p})[0];v||(v=[p,document.createDocumentFragment()],d.push(v)),v[1].appendChild(a),f+=1;var y=function(){try{p.removeChild(a)}catch(t){}finally{0==(f-=1)&&e()}};return o[t]={stop:y},function(){return n[t].onExit(a,i,y,l)}});return d.forEach(function(t){t[0].appendChild(t[1])}),h.length||e(),{hideEnteringElements:function(){p.forEach(function(t){var e=r(t);e&&(e.style.opacity=\"0\")})},animateEnteringElements:function(){p.forEach(function(t,e){var i=r(t);i&&n[t].onAppear(i,e,l)})},animateExitingElements:function(){return h.forEach(function(t){return t()}),u}}}(a({},J,{unflippedIds:H})),G=z.hideEnteringElements,Q=z.animateEnteringElements,Z=z.animateExitingElements,$=a({},J,{containerEl:E,flippedIds:p.filter(K),applyTransformOrigin:A,spring:C,debug:b,staggerConfig:O,scopedSelector:Y,onComplete:N});L&&L(E,j);var tt=function(n){var o,p=n.flippedIds,c=n.flipCallbacks,d=n.inProgressAnimations,f=n.flippedElementPositionsBeforeUpdate,h=n.flippedElementPositionsAfterUpdate,v=n.applyTransformOrigin,y=n.spring,_=n.getElement,S=n.debug,E=n.staggerConfig,A=void 0===E?{}:E,C=n.decisionData,b=void 0===C?{}:C,I=n.onComplete,w=n.containerEl,O=new Promise(function(t){o=t});if(I&&O.then(function(){return I(w,b)}),!p.length)return function(){return o([]),O};var x=[],R=_(p[0]),T=R?R.ownerDocument.querySelector(\"body\"):document.querySelector(\"body\");s(p);var M=p.map(function(n){var s=f[n].rect,p=h[n].rect,_=f[n].opacity,S=h[n].opacity,E=p.width<1||p.height<1,A=h[n].element;if(!P(s)&&!P(p))return!1;if(!A)return!1;var C,I,w,O=D(A),U=(w=(I=void 0===(C={flipperSpring:y,flippedSpring:O.spring})?{}:C).flippedSpring,a({},g.noWobble,m(I.flipperSpring),m(w))),V=!0===O.stagger?\"default\":O.stagger,R={element:A,id:n,stagger:V,springConfig:U};if(c[n]&&c[n].shouldFlip&&!c[n].shouldFlip(b.previous,b.current))return!1;var k=Math.abs(s.left-p.left)+Math.abs(s.top-p.top),j=Math.abs(s.width-p.width)+Math.abs(s.height-p.height),B=Math.abs(S-_);if(0===s.height&&0===p.height||0===s.width&&0===p.width||k<.5&&j<.5&&B<.01)return!1;var N=t.parse(h[n].transform),L={matrix:N},q={matrix:[]},X=[N];O.translate&&(X.push(t.translateX(s.left-p.left)),X.push(t.translateY(s.top-p.top))),O.scale&&(X.push(t.scaleX(Math.max(s.width,1)/Math.max(p.width,1))),X.push(t.scaleY(Math.max(s.height,1)/Math.max(p.height,1)))),O.opacity&&(q.opacity=_,L.opacity=S);var Y=[];if(!c[n]||!c[n].shouldInvert||c[n].shouldInvert(b.previous,b.current)){var W=function(t,e){return r(t.querySelectorAll(\"[\"+u+'=\"'+e+'\"]'))}(A,n);Y=W.map(function(t){return[t,D(t)]})}q.matrix=F(X.reduce(t.multiply)),L.matrix=F(L.matrix);var K,H=function(t){var i=t.element,n=t.invertedChildren,r=t.body;return function(t){var s=t.matrix,a=t.opacity,o=t.forceMinVals;if(e(a)&&(i.style.opacity=a+\"\"),o&&(i.style.minHeight=\"1px\",i.style.minWidth=\"1px\"),s){var l=function(t){return\"matrix(\"+t.join(\", \")+\")\"}(s);i.style.transform=l,n&&function(t){var e=t.matrix,i=t.body;t.invertedChildren.forEach(function(t){var n=t[0],r=t[1];if(i.contains(n)){var s=e[0],a=e[3],o=e[5],l={translateX:0,translateY:0,scaleX:1,scaleY:1},p=\"\";r.translate&&(l.translateX=-e[4]/s,l.translateY=-o/a,p+=\"translate(\"+l.translateX+\"px, \"+l.translateY+\"px)\"),r.scale&&(l.scaleX=1/s,l.scaleY=1/a,p+=\" scale(\"+l.scaleX+\", \"+l.scaleY+\")\"),n.style.transform=p}})}({invertedChildren:n,matrix:s,body:r})}}}({element:A,invertedChildren:Y,body:T});if(c[n]&&c[n].onComplete){var J=c[n].onComplete;K=function(){return J(A,b)}}var z=e(q.opacity)&&e(L.opacity)&&q.opacity!==L.opacity,G=!1;return a({},R,{stagger:V,springConfig:U,getOnUpdateFunc:function(t){var e=t.spring,i=t.onAnimationEnd;return d[n]={destroy:e.destroy.bind(e),onAnimationEnd:i},function(t){c[n]&&c[n].onSpringUpdate&&c[n].onSpringUpdate(t.getCurrentValue()),G||(G=!0,c[n]&&c[n].onStart&&c[n].onStart(A,b));var e=t.getCurrentValue();if(T.contains(A)){var i={matrix:[]};i.matrix=q.matrix.map(function(t,i){return l(t,L.matrix[i],e)}),z&&(i.opacity=l(q.opacity,L.opacity,e)),H(i)}else t.destroy()}},initializeFlip:function(){H({matrix:q.matrix,opacity:z?q.opacity:void 0,forceMinVals:E}),c[n]&&c[n].onStartImmediate&&c[n].onStartImmediate(A,b),O.transformOrigin?A.style.transformOrigin=O.transformOrigin:v&&(A.style.transformOrigin=\"0 0\"),Y.forEach(function(t){var e=t[0],i=t[1];i.transformOrigin?e.style.transformOrigin=i.transformOrigin:v&&(e.style.transformOrigin=\"0 0\")})},onAnimationEnd:function(t){delete d[n],i(K)&&K(),A.style.transform=\"\",Y.forEach(function(t){t[0].style.transform=\"\"}),E&&A&&(A.style.minHeight=\"\",A.style.minWidth=\"\"),t||(x.push(n),x.length>=M.length&&o(x))},delayUntil:O.delayUntil})}).filter(Boolean);if(M.forEach(function(t){return(0,t.initializeFlip)()}),S)return function(){};var k=M.filter(function(t){return t.delayUntil&&(e=t.delayUntil,M.filter(function(t){return t.id===e}).length);var e}),j={},B={},N={};k.forEach(function(t){t.stagger?(N[t.stagger]=!0,B[t.delayUntil]?B[t.delayUntil].push(t.stagger):B[t.delayUntil]=[t.stagger]):j[t.delayUntil]?j[t.delayUntil].push(t):j[t.delayUntil]=[t]});var L=M.filter(function(t){return t.stagger}).reduce(function(t,e){return t[e.stagger]?t[e.stagger].push(e):t[e.stagger]=[e],t},{}),q=M.filter(function(t){return-1===k.indexOf(t)});return q.forEach(function(t){t.onSpringActivate=function(){j[t.id]&&j[t.id].forEach(U),B[t.id]&&Object.keys(B[t.id].reduce(function(t,e){var i;return a(t,((i={})[e]=!0,i))},{})).forEach(function(t){V(L[t],A[t])})}}),function(){return M.length||o([]),q.filter(function(t){return!t.stagger}).forEach(U),Object.keys(L).forEach(function(t){N[t]||V(L[t],A[t])}),O}}($);B?B({hideEnteringElements:G,animateEnteringElements:Q,animateExitingElements:Z,animateFlippedElements:tt}):(G(),Z().then(Q),tt())}},q=function(t){var e=t.element,i=t.flipCallbacks,n=void 0===i?{}:i,s=t.inProgressAnimations,o=void 0===s?{}:s,l=T(e,t.portalKey),p=r(e.querySelectorAll(\"[\"+u+\"]\")),c={},d=[],h={};l.filter(function(t){return n&&n[t.dataset.flipId]&&n[t.dataset.flipId].onExit}).forEach(function(t){var e=t.parentNode;if(t.closest){var i=t.closest(\"[\"+f+\"]\");i&&(e=i)}var n=d.findIndex(function(t){return t[0]===e});-1===n&&(d.push([e,e.getBoundingClientRect()]),n=d.length-1),c[t.dataset.flipId]=d[n][1],h[t.dataset.flipId]=e});var g=M(l),m=g.map(function(t){var e=t[0],i=t[1],r={};if(n&&n[e.dataset.flipId]&&n[e.dataset.flipId].onExit){var s=c[e.dataset.flipId];a(r,{element:e,parent:h[e.dataset.flipId],childPosition:{top:i.top-s.top,left:i.left-s.left,width:i.width,height:i.height}})}return[e.dataset.flipId,{rect:i,opacity:parseFloat(window.getComputedStyle(e).opacity||\"1\"),domDataForExitAnimations:r}]}).reduce(R,{});return function(t,e){Object.keys(t).forEach(function(e){t[e].destroy&&t[e].destroy(),t[e].onAnimationEnd&&t[e].onAnimationEnd(!0),delete t[e]}),e.forEach(function(t){t.style.transform=\"\",t.style.opacity=\"\"})}(o,l.concat(p)),{flippedElementPositions:m,cachedOrderedFlipIds:g.map(function(t){return t[0].dataset.flipId})}},X=/*#__PURE__*/function(){function t(t){this.element=void 0,this.staggerConfig=void 0,this.applyTransformOrigin=!0,this.handleEnterUpdateDelete=void 0,this.debug=void 0,this.spring=void 0,this.inProgressAnimations=void 0,this.flipCallbacks=void 0,this.snapshot=void 0,this.onComplete=void 0,this.onStart=void 0,a(this,t),this.inProgressAnimations={},this.flipCallbacks={},this.recordBeforeUpdate=this.recordBeforeUpdate.bind(this),this.update=this.update.bind(this),this.addFlipped=this.addFlipped.bind(this),this.addInverted=this.addInverted.bind(this)}var e=t.prototype;return e.recordBeforeUpdate=function(){this.snapshot=q({element:this.element,flipCallbacks:this.flipCallbacks,inProgressAnimations:this.inProgressAnimations})},e.update=function(t,e){this.snapshot&&(L({flippedElementPositionsBeforeUpdate:this.snapshot.flippedElementPositions,cachedOrderedFlipIds:this.snapshot.cachedOrderedFlipIds,containerEl:this.element,inProgressAnimations:this.inProgressAnimations,flipCallbacks:this.flipCallbacks,applyTransformOrigin:this.applyTransformOrigin,spring:this.spring,debug:this.debug,staggerConfig:this.staggerConfig,handleEnterUpdateDelete:this.handleEnterUpdateDelete,decisionData:{previous:t,current:e},onComplete:this.onComplete,onStart:this.onStart}),delete this.snapshot)},e.addFlipped=function(t){var e=t.element,i=t.flipId,n=t.opacity,r=t.translate,s=t.scale,o=t.transformOrigin,l=t.spring,p=t.stagger,c=t.delayUntil,u=t.onAppear,d=t.onStart,f=t.onSpringUpdate,h=t.onComplete,g=t.onExit,m=t.shouldFlip,v=t.shouldInvert;if(!e)throw new Error(\"no element provided\");if(!i)throw new Error(\"No flipId provided\");var y={scale:s,translate:r,opacity:n,transformOrigin:o,spring:l,stagger:p,delayUntil:c};y.scale||y.translate||y.opacity||a(y,{translate:!0,scale:!0,opacity:!0}),i&&(e.dataset.flipId=String(i)),e.dataset.flipConfig=JSON.stringify(y),this.flipCallbacks[i]={shouldFlip:m,shouldInvert:v,onAppear:u,onStart:d,onSpringUpdate:f,onComplete:h,onExit:g}},e.addInverted=function(t){var e=t.element,i=t.parent,n=t.opacity,r=t.translate,s=t.scale,o=t.transformOrigin;if(!e)throw new Error(\"no element provided\");if(!i)throw new Error(\"parent must be provided\");var l=i.dataset.flipId,p={scale:s,translate:r,opacity:n,transformOrigin:o};p.scale||p.translate||p.opacity||a(p,{translate:!0,scale:!0,opacity:!0}),e.dataset.inverseFlipId=l,e.dataset.flipConfig=JSON.stringify(p)},t}(),Y=new w,W=function(t){var e=t.values,i=t.onUpdate,n=t.delay,r=void 0===n?0:n,s=t.onComplete,o=a({},g.noWobble,m(t.config)),p=o.overshootClamping,c=Y.createSpring(o.stiffness,o.damping);return c.setOvershootClampingEnabled(!!p),c.addListener({onSpringAtRest:function(t){s&&s(),t.destroy()},onSpringUpdate:function(t){var n=t.getCurrentValue();if(!e)return i(n);var r=Object.keys(e).map(function(t){return[t,l(e[t][0],e[t][1],n)]}).reduce(function(t,e){var i;return Object.assign(t,((i={})[e[0]]=e[1],i))},{});i(r)}}),r?setTimeout(function(){c.setEndValue(1)},r):c.setEndValue(1),c};export{X as Flipper,h as constants,j as disableFlip,B as enableFlip,q as getFlippedElementPositionsBeforeUpdate,N as isFlipEnabled,L as onFlipKeyUpdate,W as spring,p as utilities};\n//# sourceMappingURL=index.es.js.map\n","import{getFlippedElementPositionsBeforeUpdate as e,onFlipKeyUpdate as t,utilities as r,constants as n}from\"flip-toolkit\";export{disableFlip,enableFlip,isFlipEnabled,spring}from\"flip-toolkit\";import i,{createContext as o,Component as p,Children as l,cloneElement as a}from\"react\";import\"prop-types\";function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},s.apply(this,arguments)}function c(e,t){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},c(e,t)}function d(e,t){if(null==e)return{};var r,n,i={},o=Object.keys(e);for(n=0;n<o.length;n++)t.indexOf(r=o[n])>=0||(i[r]=e[r]);return i}var f=/*#__PURE__*/o({}),u=/*#__PURE__*/o(\"portal\"),h=/*#__PURE__*/function(r){var n,o;function p(){for(var e,t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return(e=r.call.apply(r,[this].concat(n))||this).inProgressAnimations={},e.flipCallbacks={},e.el=void 0,e}o=r,(n=p).prototype=Object.create(o.prototype),n.prototype.constructor=n,c(n,o);var l=p.prototype;return l.getSnapshotBeforeUpdate=function(t){return t.flipKey!==this.props.flipKey&&this.el?e({element:this.el,flipCallbacks:this.flipCallbacks,inProgressAnimations:this.inProgressAnimations,portalKey:this.props.portalKey}):null},l.componentDidUpdate=function(e,r,n){this.props.flipKey!==e.flipKey&&this.el&&t({flippedElementPositionsBeforeUpdate:n.flippedElementPositions,cachedOrderedFlipIds:n.cachedOrderedFlipIds,containerEl:this.el,inProgressAnimations:this.inProgressAnimations,flipCallbacks:this.flipCallbacks,applyTransformOrigin:this.props.applyTransformOrigin,spring:this.props.spring,debug:this.props.debug,portalKey:this.props.portalKey,staggerConfig:this.props.staggerConfig,handleEnterUpdateDelete:this.props.handleEnterUpdateDelete,decisionData:{previous:e.decisionData,current:this.props.decisionData},onComplete:this.props.onComplete,onStart:this.props.onStart})},l.render=function(){var e=this,t=this.props,r=t.portalKey,n=/*#__PURE__*/i.createElement(f.Provider,{value:this.flipCallbacks},/*#__PURE__*/i.createElement(t.element,{className:t.className,ref:function(t){return e.el=t}},this.props.children));return r&&(n=/*#__PURE__*/i.createElement(u.Provider,{value:r},n)),n},p}(p);h.defaultProps={applyTransformOrigin:!0,element:\"div\"};var m=[\"children\",\"flipId\",\"inverseFlipId\",\"portalKey\"],y=[\"children\",\"flipId\",\"shouldFlip\",\"shouldInvert\",\"onAppear\",\"onStart\",\"onStartImmediate\",\"onComplete\",\"onExit\",\"onSpringUpdate\"],g=function(e){var t,i=e.children,o=e.flipId,p=e.inverseFlipId,s=e.portalKey,c=d(e,m),f=i,u=function(e){return\"function\"==typeof e}(f);if(!u)try{f=l.only(i)}catch(e){throw new Error(\"Each Flipped component must wrap a single child\")}c.scale||c.translate||c.opacity||r.assign(c,{translate:!0,scale:!0,opacity:!0});var h=((t={})[n.DATA_FLIP_CONFIG]=JSON.stringify(c),t);return void 0!==o?h[n.DATA_FLIP_ID]=String(o):p&&(h[n.DATA_INVERSE_FLIP_ID]=String(p)),void 0!==s&&(h[n.DATA_PORTAL_KEY]=s),u?f(h):/*#__PURE__*/a(f,h)},v=function(e){var t=e.children,n=e.flipId,o=e.shouldFlip,p=e.shouldInvert,l=e.onAppear,a=e.onStart,c=e.onStartImmediate,h=e.onComplete,m=e.onExit,v=e.onSpringUpdate,I=d(e,y);return t?I.inverseFlipId?/*#__PURE__*/i.createElement(g,s({},I),t):/*#__PURE__*/i.createElement(u.Consumer,null,function(e){/*#__PURE__*/return i.createElement(f.Consumer,null,function(d){return r.isObject(d)&&n&&(d[n]={shouldFlip:o,shouldInvert:p,onAppear:l,onStart:a,onStartImmediate:c,onComplete:h,onExit:m,onSpringUpdate:v}),/*#__PURE__*/i.createElement(g,s({flipId:n},I,{portalKey:e}),t)})}):null};v.displayName=\"Flipped\";var I=function(e){var t;/*#__PURE__*/return a(e.children,((t={})[n.DATA_EXIT_CONTAINER]=!0,t))};export{I as ExitContainer,v as Flipped,h as Flipper};\n//# sourceMappingURL=index.es.js.map\n","import * as React from \"react\"\nimport classnames from \"classnames\"\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core/index\"\nimport {\n    faSortAlphaUpAlt,\n    faSortAlphaDown,\n    faSortAmountUpAlt,\n    faSortAmountDown,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { SortOrder } from \"@ourworldindata/types\"\n\nexport function SortIcon(props: {\n    type?: \"text\" | \"numeric\"\n    isActiveIcon?: boolean\n    order: SortOrder\n}): React.ReactElement {\n    const type = props.type ?? \"numeric\"\n    const isActiveIcon = props.isActiveIcon ?? false\n\n    let faIcon: IconDefinition\n\n    if (type === \"text\")\n        faIcon =\n            props.order === SortOrder.desc ? faSortAlphaUpAlt : faSortAlphaDown\n    else\n        faIcon =\n            props.order === SortOrder.desc\n                ? faSortAmountDown\n                : faSortAmountUpAlt\n\n    return (\n        <span\n            className={classnames({ \"sort-icon\": true, active: isActiveIcon })}\n        >\n            <FontAwesomeIcon icon={faIcon} />\n        </span>\n    )\n}\n","import cx from \"classnames\"\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport {\n    Autocomplete,\n    Button,\n    Header,\n    Input,\n    Key,\n    ListBox,\n    ListBoxItem,\n    ListBoxSection,\n    Popover,\n    SearchField,\n    Select,\n    SelectValue,\n    useFilter,\n} from \"react-aria-components\"\nimport { faTimesCircle } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { isTouchDevice } from \"@ourworldindata/utils\"\n\nexport interface BasicDropdownOption {\n    trackNote?: string\n    value: string\n    label: React.ReactNode\n}\n\nexport interface DropdownOptionGroup<\n    DropdownOption extends BasicDropdownOption,\n> {\n    label: React.ReactNode\n    options: DropdownOption[]\n}\n\nexport type DropdownCollectionItem<DropdownOption extends BasicDropdownOption> =\n    | DropdownOption\n    | DropdownOptionGroup<DropdownOption>\n\nexport type DropdownCollection<DropdownOption extends BasicDropdownOption> =\n    DropdownCollectionItem<DropdownOption>[]\n\nexport interface DropdownProps<DropdownOption extends BasicDropdownOption> {\n    className?: string\n    menuClassName?: string\n    options: DropdownCollection<DropdownOption>\n    value?: DropdownOption | null\n    inputValue?: string\n    onChange?: (option: DropdownOption | null) => void\n    onInputChange?: (value: string) => void\n    placeholder?: string\n    isDisabled?: boolean\n    isClearable?: boolean\n    isLoading?: boolean\n    isSearchable?: boolean\n    renderTriggerValue?: (\n        option: DropdownOption | null\n    ) => React.ReactNode | undefined\n    renderMenuOption?: (option: DropdownOption) => React.ReactNode\n    portalContainer?: HTMLElement\n    \"data-track-note\"?: string\n    \"aria-label\"?: string\n}\n\nfunction isOptionGroup<DropdownOption extends BasicDropdownOption>(\n    item: DropdownCollectionItem<DropdownOption>\n): item is DropdownOptionGroup<DropdownOption> {\n    return (item as DropdownOptionGroup<DropdownOption>).options !== undefined\n}\n\nfunction flattenOptions<DropdownOption extends BasicDropdownOption>(\n    options: DropdownCollection<DropdownOption>\n): DropdownOption[] {\n    return options.flatMap((item) =>\n        isOptionGroup(item) ? item.options : [item]\n    )\n}\n\nexport function Dropdown<DropdownOption extends BasicDropdownOption>({\n    className,\n    // We use a separate prop for the menu's className because the Popover\n    // (menu) doesn't render as a child of the select, so it's not trivial to\n    // style it using the main className.\n    menuClassName,\n    options,\n    value,\n    inputValue,\n    onChange,\n    onInputChange,\n    placeholder,\n    isDisabled,\n    isClearable,\n    isLoading,\n    isSearchable,\n    renderTriggerValue,\n    renderMenuOption,\n    portalContainer,\n    ...otherProps\n}: DropdownProps<DropdownOption>): React.ReactElement {\n    const { contains } = useFilter({ sensitivity: \"base\" })\n    const flatOptions = useMemo(() => flattenOptions(options), [options])\n    const selectedValue = value ?? null\n\n    function handleSelectionChange(key: Key | null): void {\n        if (key === null) {\n            onChange?.(null)\n            return\n        }\n\n        if (typeof key === \"number\") return\n        const selected = flatOptions.find((option) => option.value === key)\n        if (selected) {\n            onChange?.(selected)\n        }\n    }\n\n    const listBox = (\n        <ListBox className=\"grapher-dropdown-listbox\">\n            {options.map((item, index) =>\n                isOptionGroup(item) ? (\n                    <ListBoxSection\n                        key={`section-${index}`}\n                        id={`section-${index}`}\n                        className=\"group\"\n                    >\n                        <Header className=\"group-heading\">{item.label}</Header>\n                        {item.options.map((option) => (\n                            <ListBoxItem\n                                className=\"option\"\n                                key={option.value}\n                                id={option.value}\n                                textValue={\n                                    typeof option.label === \"string\"\n                                        ? option.label\n                                        : String(option.value)\n                                }\n                                data-track-note={option.trackNote}\n                            >\n                                {renderMenuOption\n                                    ? renderMenuOption(option)\n                                    : option.label}\n                            </ListBoxItem>\n                        ))}\n                    </ListBoxSection>\n                ) : (\n                    <ListBoxItem\n                        className=\"option\"\n                        key={item.value}\n                        id={item.value}\n                        textValue={\n                            typeof item.label === \"string\"\n                                ? item.label\n                                : String(item.value)\n                        }\n                        data-track-note={item.trackNote}\n                    >\n                        {renderMenuOption ? renderMenuOption(item) : item.label}\n                    </ListBoxItem>\n                )\n            )}\n        </ListBox>\n    )\n\n    return (\n        <Select\n            className={cx(\"grapher-dropdown\", className)}\n            // null means no selection, undefined means the component is\n            // uncontrolled, so we need to set it explicitly.\n            selectedKey={value?.value ?? null}\n            onSelectionChange={handleSelectionChange}\n            placeholder={placeholder}\n            isDisabled={isDisabled}\n            {...otherProps}\n        >\n            <Button\n                className={cx(\"control\", {\n                    loading: isLoading,\n                })}\n            >\n                <SelectValue className=\"select-value\">\n                    {({ selectedItems, defaultChildren }) => {\n                        if (renderTriggerValue && selectedItems.length === 1) {\n                            return renderTriggerValue(selectedValue)\n                        }\n                        return defaultChildren\n                    }}\n                </SelectValue>\n            </Button>\n            {isClearable && value && (\n                <Button\n                    className=\"clear-indicator\"\n                    slot={null}\n                    type=\"button\"\n                    onPress={() => onChange?.(null)}\n                    aria-label=\"Clear selection\"\n                />\n            )}\n            {/* Note: \"portaled-popover\" class is used by SlideInDrawer to detect\n                clicks inside portaled popovers. Update both if renaming. */}\n            <Popover\n                className={cx(\n                    \"grapher-dropdown-menu\",\n                    \"portaled-popover\",\n                    menuClassName\n                )}\n                offset={4}\n                UNSTABLE_portalContainer={portalContainer}\n            >\n                {isSearchable ? (\n                    // If inputValue is provided, the component is controlled\n                    // and we expect the filtering to happen outside of it.\n                    <Autocomplete filter={inputValue ? undefined : contains}>\n                        <SearchField\n                            className=\"grapher-dropdown-search\"\n                            aria-label=\"Search\"\n                            autoFocus\n                            value={inputValue}\n                            onChange={onInputChange}\n                        >\n                            <span className=\"grapher-dropdown-search-icon\" />\n                            <Input\n                                className=\"grapher-dropdown-search-input\"\n                                style={{\n                                    fontSize: isTouchDevice() ? 16 : undefined,\n                                }}\n                            />\n                            <Button className=\"grapher-dropdown-search-reset\">\n                                <FontAwesomeIcon\n                                    icon={faTimesCircle}\n                                    aria-hidden\n                                />\n                            </Button>\n                        </SearchField>\n                        {listBox}\n                    </Autocomplete>\n                ) : (\n                    listBox\n                )}\n            </Popover>\n        </Select>\n    )\n}\n","import * as React from \"react\"\nimport cx from \"classnames\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { isTargetOutsideElement } from \"../chart/ChartUtils\"\n\nexport const DrawerContext = React.createContext<{\n    toggleDrawerVisibility?: () => void\n}>({})\n\ninterface SlideInDrawerProps {\n    active: boolean\n    toggle: () => void\n    children: React.ReactNode\n    grapherRef?: React.RefObject<HTMLDivElement | null>\n}\n\n@observer\nexport class SlideInDrawer extends React.Component<SlideInDrawerProps> {\n    visible: boolean = this.props.active // true while the drawer is active and during enter/exit transitions\n    drawerRef = React.createRef<HTMLDivElement>()\n\n    constructor(props: SlideInDrawerProps) {\n        super(props)\n\n        makeObservable(this, {\n            visible: observable.ref,\n        })\n    }\n\n    override componentDidMount(): void {\n        document.addEventListener(\"keydown\", this.onDocumentKeyDown)\n        document.addEventListener(\"pointerdown\", this.onDocumentPointerDown, {\n            capture: true,\n        })\n        document.addEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"keydown\", this.onDocumentKeyDown)\n        document.removeEventListener(\n            \"pointerdown\",\n            this.onDocumentPointerDown,\n            {\n                capture: true,\n            }\n        )\n        document.removeEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n    }\n\n    override componentDidUpdate(): void {\n        const grapherElement = this.props.grapherRef?.current\n        if (grapherElement) {\n            grapherElement.style.overflowX =\n                this.active || this.visible ? \"clip\" : \"visible\"\n        }\n    }\n\n    @action.bound onDocumentKeyDown(e: KeyboardEvent): void {\n        // dismiss menu on esc\n        if (this.active && e.key === \"Escape\") this.toggleVisibility()\n    }\n\n    // Handles mouse/touch/pen – fires before react-aria mounts its\n    // popover underlay, avoiding the race condition with portaled popovers.\n    @action.bound onDocumentPointerDown(e: PointerEvent): void {\n        this.dismissIfOutside(e)\n    }\n\n    // Handles keyboard-initiated activations (Enter/Space) which fire\n    // a synthetic click with detail === 0 and no preceding pointerdown.\n    @action.bound onDocumentClick(e: MouseEvent): void {\n        if (e.detail > 0) return // mouse click – already handled by pointerdown\n        this.dismissIfOutside(e)\n    }\n\n    private dismissIfOutside(e: Event): void {\n        if (\n            this.active &&\n            this.drawerRef?.current &&\n            isTargetOutsideElement(e.target!, this.drawerRef.current) &&\n            !this.isPortaledPopoverOpen()\n        )\n            this.toggleVisibility()\n    }\n\n    private isPortaledPopoverOpen(): boolean {\n        // React-aria popovers (e.g. dropdown menus) are portaled to document.body\n        // with a full-viewport underlay. While one is open, suppress drawer dismissal\n        // so that the first click closes the popover (handled by react-aria) and a\n        // subsequent click closes the drawer.\n        // Note: \"portaled-popover\" class is defined in Dropdown.tsx. Update both if renaming.\n        return document.querySelector(\".portaled-popover\") !== null\n    }\n\n    @action.bound toggleVisibility(e?: React.MouseEvent): void {\n        this.props.toggle()\n        if (this.active) this.visible = true\n        e?.stopPropagation()\n    }\n\n    @action.bound onAnimationEnd(): void {\n        if (!this.active) this.visible = false\n    }\n\n    @computed private get active(): boolean {\n        return this.props.active\n    }\n\n    private animationFor(selector: string): React.CSSProperties {\n        const phase = this.active ? \"enter\" : \"exit\"\n        return {\n            animationName: `${selector}-${phase}`,\n            animationDuration: \"333ms\",\n            animationFillMode: \"forwards\",\n        }\n    }\n\n    override render(): React.ReactElement | null {\n        const { visible, active } = this\n\n        if (active || visible) {\n            return (\n                <div\n                    className={cx(\"drawer\", { active: this.active })}\n                    ref={this.drawerRef}\n                >\n                    <div\n                        className=\"drawer-backdrop\"\n                        onClick={this.toggleVisibility}\n                        style={this.animationFor(\"drawer-backdrop\")}\n                        onAnimationEnd={this.onAnimationEnd} // triggers unmount\n                    ></div>\n                    <div\n                        className=\"drawer-contents\"\n                        style={{\n                            ...this.animationFor(\"drawer-contents\"),\n                        }}\n                    >\n                        <DrawerContext.Provider\n                            value={{\n                                toggleDrawerVisibility: this.toggleVisibility,\n                            }}\n                        >\n                            {this.props.children}\n                        </DrawerContext.Provider>\n                    </div>\n                </div>\n            )\n        }\n\n        return null\n    }\n}\n","import { computed, makeObservable } from \"mobx\"\nimport { SelectionArray } from \"./SelectionArray\"\nimport {\n    Aggregate,\n    checkHasMembers,\n    checkIsCountry,\n    Continent,\n    Country,\n    EntityName,\n    excludeUndefined,\n    getCountryNamesForRegion,\n    getRegionByName,\n    IncomeGroup,\n    Region,\n} from \"@ourworldindata/utils\"\nimport * as R from \"remeda\"\n\nexport class MapSelectionArray extends SelectionArray {\n    constructor(selectedEntityNames: EntityName[] = []) {\n        super(selectedEntityNames)\n\n        makeObservable(this)\n    }\n\n    @computed private get selectedEntitiesWithRegionInfo(): Region[] {\n        return excludeUndefined(\n            this.selectedEntityNames.map((name) => getRegionByName(name))\n        )\n    }\n\n    @computed get selectedCountries(): Country[] {\n        return this.selectedEntitiesWithRegionInfo.filter((region) =>\n            checkIsCountry(region)\n        )\n    }\n\n    @computed get selectedCountryNames(): EntityName[] {\n        return this.selectedCountries.map((country) => country.name)\n    }\n\n    @computed get hasCountries(): boolean {\n        return this.selectedCountries.length > 0\n    }\n\n    /**\n     * Subset of the selected countries that are part of the selected regions.\n     * Returns all selected countries if no region is selected.\n     */\n    @computed get selectedCountryNamesInForeground(): EntityName[] {\n        if (!this.hasRegions) return this.selectedCountryNames\n        const memberCountries = this.countryNamesForSelectedRegionsSet\n        return this.selectedCountries\n            .filter((country) => memberCountries.has(country.name))\n            .map((country) => country.name)\n    }\n\n    /**\n     * Complement of `selectedCountryNamesInForeground`.\n     * Subset of the selected countries that are not part of any selected region.\n     * Returns an empty list if no region is selected.\n     */\n    @computed get selectedCountryNamesInBackground(): EntityName[] {\n        return R.difference(\n            this.selectedCountryNames,\n            this.selectedCountryNamesInForeground\n        )\n    }\n\n    /**\n     * List of selected regions where a region is any geographic entity that\n     * is made up of a set of countries.\n     */\n    @computed get selectedRegions(): (Continent | Aggregate | IncomeGroup)[] {\n        return this.selectedEntitiesWithRegionInfo.filter(\n            (region): region is Continent | Aggregate | IncomeGroup =>\n                checkHasMembers(region) && region.code !== \"OWID_WRL\"\n        )\n    }\n\n    @computed get selectedRegionNames(): EntityName[] {\n        return this.selectedRegions.map((region) => region.name)\n    }\n\n    @computed get hasRegions(): boolean {\n        return this.selectedRegions.length > 0\n    }\n\n    @computed get countryNamesForSelectedRegionsSet(): Set<EntityName> {\n        return new Set(\n            this.selectedRegions.flatMap((region) =>\n                getCountryNamesForRegion(region)\n            )\n        )\n    }\n\n    @computed get countryNamesForSelectedRegions(): EntityName[] {\n        return Array.from(this.countryNamesForSelectedRegionsSet)\n    }\n}\n","import { ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { Bounds, ColumnSlug } from \"@ourworldindata/utils\"\nimport {\n    MapRegionName,\n    SeriesName,\n    GlobeRegionName,\n    ProjectionColumnInfo,\n    type GrapherInteractionEvent,\n    Time,\n} from \"@ourworldindata/types\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { MapConfig } from \"./MapConfig\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport { GlobeController } from \"./GlobeController\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray.js\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport * as R from \"remeda\"\nimport { InteractionState } from \"../interaction/InteractionState\"\n\nexport declare type SVGMouseEvent = React.MouseEvent<SVGElement>\n\nexport type GeoFeature = GeoJSON.Feature<GeoJSON.GeometryObject>\nexport type MapBracket = ColorScaleBin\n\nexport const MAP_HOVER_TARGET_RANGE = 20\n\nexport const DEFAULT_STROKE_COLOR = \"#333\"\nexport const HOVER_STROKE_COLOR = \"#111\"\n\nexport const DEFAULT_STROKE_WIDTH = 0.3\nexport const HOVER_STROKE_WIDTH = 1.5\nexport const SELECTED_STROKE_WIDTH = 1\nexport const PATTERN_STROKE_WIDTH = 0.7\n\nexport const BLUR_FILL_OPACITY = 0.2\nexport const BLUR_STROKE_OPACITY = 0.5\n\nexport const PROJECTED_DATA_LEGEND_COLOR = \"#ffffff\"\n\nexport const MAP_CHART_CLASSNAME = \"MapChart\"\nexport const CHOROPLETH_MAP_CLASSNAME = \"ChoroplethMap\"\nexport const GEO_FEATURES_CLASSNAME = \"GeoFeatures\"\n\nexport const DEFAULT_GLOBE_ZOOM = 1\nexport const GLOBE_MIN_ZOOM = 1\nexport const GLOBE_MAX_ZOOM = 5\nexport const GLOBE_COUNTRY_ZOOM = 2.5\n\nexport const GLOBE_LATITUDE_MIN = -65\nexport const GLOBE_LATITUDE_MAX = 65\n\nexport const DEFAULT_GLOBE_SIZE = 500 // defined by d3\nexport const DEFAULT_GLOBE_ROTATION: [number, number] = [-30, 20] // Atlantic ocean (i.e. Americas & Europe)\nexport const DEFAULT_GLOBE_ROTATIONS_FOR_TIME: Record<\n    \"UTC_MORNING\" | \"UTC_MIDDAY\" | \"UTC_EVENING\",\n    [number, number]\n> = {\n    UTC_MORNING: [110, 15], // Asia & Oceania\n    UTC_MIDDAY: [20, 20], // Europe & Africa\n    UTC_EVENING: [-90, 15], // North & South America\n}\n\nexport const ANNOTATION_COLOR_DARK = HOVER_STROKE_COLOR\nexport const ANNOTATION_COLOR_LIGHT = \"#fff\"\n\nexport const ANNOTATION_FONT_SIZE_INTERNAL_DEFAULT = 11\nexport const ANNOTATION_FONT_SIZE_INTERNAL_MIN = 7\nexport const ANNOTATION_FONT_SIZE_EXTERNAL_DEFAULT = 8\nexport const ANNOTATION_FONT_SIZE_EXTERNAL_MAX = 11\n\nexport const ANNOTATION_MARKER_LINE_LENGTH_DEFAULT = 6\nexport const ANNOTATION_MARKER_LINE_LENGTH_MAX = 10\n\nexport const MAP_REGION_LABELS: Record<MapRegionName, string> = {\n    World: \"World\",\n    Africa: \"Africa\",\n    NorthAmerica: \"North America\",\n    SouthAmerica: \"South America\",\n    Asia: \"Asia\",\n    Europe: \"Europe\",\n    Oceania: \"Oceania\",\n}\n\nexport const MAP_REGION_NAMES = R.invert(MAP_REGION_LABELS)\n\nexport interface ChoroplethSeries extends ChartSeries {\n    value: number | string\n    time: number\n    isProjection?: boolean\n}\n\nexport type ChoroplethSeriesByName = Map<SeriesName, ChoroplethSeries>\n\nexport interface ChoroplethMapManager {\n    choroplethData: ChoroplethSeriesByName\n    choroplethMapBounds: Bounds\n    mapConfig: MapConfig\n    mapColumn: CoreColumn\n    globeController?: GlobeController\n    selectionArray?: MapSelectionArray\n    fontSize?: number\n    getHoverState?: (featureId: string) => InteractionState\n    isSelected?: (featureId: string) => boolean\n    onMapMouseOver?: (d: GeoFeature) => void\n    onMapMouseLeave?: () => void\n    isMapSelectionEnabled?: boolean\n    isStatic?: boolean\n    binColors?: string[]\n    hasProjectedData?: boolean\n    mapViewport?: MapViewport\n    isFaceted?: boolean\n}\n\nexport enum RenderFeatureType {\n    Map = \"map\",\n    Globe = \"globe\",\n}\n\nexport interface RenderFeature {\n    type: RenderFeatureType\n    id: string\n    geo: GeoFeature\n    geoCentroid: [number, number] // unprojected\n    geoBounds: Bounds // unprojected\n}\n\nexport interface MapRenderFeature extends RenderFeature {\n    type: RenderFeatureType.Map\n    path: string\n    projBounds: Bounds\n}\n\nexport interface GlobeRenderFeature extends RenderFeature {\n    type: RenderFeatureType.Globe\n}\n\nexport interface MapChartManager extends ChartManager {\n    mapColumnSlug?: ColumnSlug\n    mapConfig?: MapConfig\n    targetTime?: Time\n    globeController?: GlobeController\n    isMapSelectionEnabled?: boolean\n    highlightedTimesInTooltip?: [Time, Time]\n    mapViewport?: MapViewport\n    isFaceted?: boolean\n    logGrapherInteractionEvent?: (\n        action: GrapherInteractionEvent,\n        target?: string\n    ) => void\n    projectionColumnInfoBySlug?: Map<ColumnSlug, ProjectionColumnInfo>\n}\n\nexport interface GlobeViewport {\n    rotation: [number, number]\n    zoom: number\n}\n\nexport interface MapViewport {\n    x: number\n    y: number\n    width: number\n    height: number\n    ratio: number\n}\n\nexport const GLOBE_VIEWPORTS: Record<GlobeRegionName, GlobeViewport> = {\n    Europe: { rotation: [10, 55], zoom: 2.95 },\n    Africa: { rotation: [20, 0], zoom: 1.55 },\n    NorthAmerica: { rotation: [-94.5, 43], zoom: 1.5 },\n    SouthAmerica: { rotation: [-62, -22], zoom: 1.75 },\n    Asia: { rotation: [81, 26], zoom: 1.85 },\n    Oceania: { rotation: [152.65, -18.8], zoom: 2 },\n}\n\n/** Viewport for each region, defined by center and width+height in fractional coordinates */\nexport const MAP_VIEWPORTS: Record<MapRegionName, MapViewport> = {\n    World: { x: 0.565, y: 0.5, width: 1.01, height: 1.01, ratio: 2.29 },\n    Europe: { x: 0.53, y: 0.21, width: 0.2, height: 0.2, ratio: 1.77 },\n    Africa: { x: 0.48, y: 0.7, width: 0.21, height: 0.38, ratio: 1.07 },\n    NorthAmerica: { x: 0.46, y: 0.4, width: 0.19, height: 0.35, ratio: 1.12 },\n    SouthAmerica: { x: 0.52, y: 0.815, width: 0.1, height: 0.26, ratio: 0.62 },\n    Asia: { x: 0.74, y: 0.45, width: 0.36, height: 0.5, ratio: 1.65 },\n    Oceania: { x: 0.51, y: 0.75, width: 0.1, height: 0.2, ratio: 1.47 },\n}\n\n// Custom viewport for faceted world map, which zooms in a little bit to make best use of the available space\nexport const MAP_VIEWPORT_FACETED_WORLD: MapViewport = {\n    x: 0.545,\n    y: 0.5,\n    width: 0.91,\n    height: 1.01,\n    ratio: 2.29,\n}\n\nexport interface Circle {\n    cx: number // center x\n    cy: number // center y\n    r: number // radius\n}\n\nexport interface Ellipse {\n    cx: number // center x\n    cy: number // center y\n    rx: number // radius on the x-axis\n    ry: number // radius on the y-axis\n}\n\n// ellipse expressed in lon/lat\nexport interface EllipseCoords {\n    cx: number\n    cy: number\n    left: number // left x\n    top: number // top y\n}\n\ninterface BaseAnnotation {\n    id: string\n    feature: RenderFeature\n    placedBounds: Bounds\n    text: string\n    fontSize: number\n    color: string\n}\n\nexport interface InternalAnnotation extends BaseAnnotation {\n    type: \"internal\"\n    ellipse: Ellipse\n}\n\nexport interface ExternalAnnotation extends BaseAnnotation {\n    type: \"external\"\n    direction: Direction\n    anchor: [number, number]\n}\n\nexport type Annotation = InternalAnnotation | ExternalAnnotation\n\nexport type Direction =\n    | \"left\"\n    | \"right\"\n    | \"top\"\n    | \"bottom\"\n    | \"leftTop\"\n    | \"leftBottom\"\n    | \"rightTop\"\n    | \"rightBottom\"\n\nexport type MapColumnInfo =\n    // the map column isn't a projection\n    | { type: \"historical\"; slug: ColumnSlug }\n    // the map column is a projection without an historical counterpart\n    | { type: \"projected\"; slug: ColumnSlug }\n    // the map column is a projection and has an historical counterpart\n    | ({\n          type: \"historical+projected\"\n          slug: ColumnSlug\n      } & ProjectionColumnInfo)\n","import { observable, makeObservable } from \"mobx\"\nimport {\n    GlobeConfig,\n    MapRegionName,\n    MapConfigInterface,\n    TimeBound,\n    EntityName,\n} from \"@ourworldindata/types\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport {\n    ColumnSlug,\n    Persistable,\n    updatePersistables,\n    objectWithPersistablesToObject,\n    deleteRuntimeAndUnchangedProps,\n    maxTimeBoundFromJSONOrPositiveInfinity,\n    maxTimeToJSON,\n    minTimeToJSON,\n    trimObject,\n    NoUndefinedValues,\n    ToleranceStrategy,\n    minTimeBoundFromJSONOrNegativeInfinity,\n} from \"@ourworldindata/utils\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray\"\nimport { DEFAULT_GLOBE_ROTATION, DEFAULT_GLOBE_ZOOM } from \"./MapChartConstants\"\nimport * as R from \"remeda\"\n\n// MapConfig holds the data and underlying logic needed by MapTab.\n// It wraps the map property on ChartConfig.\n// TODO: migrate database config & only pass legend props\nclass MapConfigDefaults {\n    columnSlug: ColumnSlug | undefined = undefined\n    time: TimeBound | undefined = undefined\n    startTime: TimeBound | undefined = undefined\n    timeTolerance: number | undefined = undefined\n    toleranceStrategy: ToleranceStrategy | undefined = undefined\n    hideTimeline: boolean | undefined = undefined\n    region = MapRegionName.World\n\n    globe: GlobeConfig = {\n        isActive: false,\n        rotation: DEFAULT_GLOBE_ROTATION, // specified as [lot, lan]\n        zoom: DEFAULT_GLOBE_ZOOM,\n    }\n\n    colorScale = new ColorScaleConfig()\n    // Show the label from colorSchemeLabels in the tooltip instead of the numeric value\n    tooltipUseCustomLabels: boolean | undefined = undefined\n\n    constructor() {\n        makeObservable(this, {\n            columnSlug: observable,\n            time: observable,\n            startTime: observable,\n            timeTolerance: observable,\n            toleranceStrategy: observable,\n            hideTimeline: observable,\n            region: observable,\n            globe: observable,\n            colorScale: observable,\n            tooltipUseCustomLabels: observable,\n        })\n    }\n}\n\nexport class MapConfig extends MapConfigDefaults implements Persistable {\n    // Runtime-only state\n    selection = new MapSelectionArray()\n    hoverCountry?: EntityName\n\n    updateFromObject(obj: Partial<MapConfigInterface>): void {\n        updatePersistables(this, obj)\n\n        this.time = maxTimeBoundFromJSONOrPositiveInfinity(obj.time)\n\n        // If a start time is provided, use it; otherwise, set it to the end time\n        // so that a single map (not a facetted one) is shown by default\n        if (obj.startTime) {\n            this.startTime = minTimeBoundFromJSONOrNegativeInfinity(\n                obj.startTime\n            )\n        } else {\n            this.startTime = this.time\n        }\n\n        // Map [lat, lon] to the internally used [lon, lat]\n        if (obj.globe?.rotation) {\n            this.globe = {\n                ...this.globe,\n                rotation: R.reverse(obj.globe.rotation),\n            }\n        }\n\n        // Update selection\n        if (obj.selectedEntityNames)\n            this.selection.setSelectedEntities(obj.selectedEntityNames)\n    }\n\n    toObject(): NoUndefinedValues<MapConfigInterface> {\n        const obj = objectWithPersistablesToObject(this) as MapConfigInterface\n        deleteRuntimeAndUnchangedProps(obj, new MapConfigDefaults())\n\n        if (obj.time) obj.time = maxTimeToJSON(this.time) as any\n        if (obj.startTime) obj.startTime = minTimeToJSON(this.startTime) as any\n\n        // No need to store the startTime if it's the same as the end time\n        if (obj.startTime === obj.time) delete obj.startTime\n\n        // Persist selection\n        obj.selectedEntityNames = this.selection.selectedEntityNames\n\n        // Don't persist globe settings if the globe isn't active\n        if (!obj.globe?.isActive) delete obj.globe\n\n        // Round rotation coordinates before persisting\n        if (obj.globe?.rotation)\n            obj.globe = {\n                ...obj.globe,\n                rotation: [\n                    // we use [lon, lat] internally, but persist [lat, lon]\n                    R.round(obj.globe.rotation[1], 2),\n                    R.round(obj.globe.rotation[0], 2),\n                ],\n            }\n\n        // Round zoom level before persisting\n        if (obj.globe?.zoom) {\n            obj.globe = {\n                ...obj.globe,\n                zoom: R.round(obj.globe.zoom, 2),\n            }\n        }\n\n        return trimObject(obj)\n    }\n\n    constructor(obj?: Partial<MapConfigInterface>) {\n        super()\n        makeObservable(this, {\n            selection: observable,\n            hoverCountry: observable,\n        })\n        if (obj) this.updateFromObject(obj)\n    }\n\n    isContinentActive(): this is MapConfigWithActiveContinent {\n        return this.region !== MapRegionName.World\n    }\n\n    is2dContinentActive(): this is MapConfigWithActiveContinent {\n        return this.isContinentActive() && !this.globe.isActive\n    }\n}\n\ntype MapConfigWithActiveContinent = MapConfig & {\n    region: Exclude<MapRegionName, \"World\">\n}\n","import * as _ from \"lodash-es\"\nimport { EntityName } from \"@ourworldindata/types\"\nimport {\n    RegionDataProvider,\n    getRegionDataProviders,\n    Country,\n    excludeUndefined,\n    getRegionByName,\n} from \"@ourworldindata/utils\"\nimport {\n    ADDITIONAL_REGION_DATA_PROVIDERS,\n    AdditionalRegionDataProvider,\n    isWorldEntityName,\n} from \"./GrapherConstants\"\nimport * as R from \"remeda\"\n\n/** Region data providers defined in the regions.data.ts file */\nconst regionDataProviders = getRegionDataProviders()\n/** Additional region data providers not specified by the ETL */\nconst additionalRegionDataProviders = ADDITIONAL_REGION_DATA_PROVIDERS.filter(\n    (provider) => !regionDataProviders.includes(provider as RegionDataProvider)\n)\n\nconst allRegionDataProviders = [\n    ...regionDataProviders,\n    ...additionalRegionDataProviders,\n]\nconst allRegionDataProviderSet = new Set(allRegionDataProviders)\n\nconst regionGroupKeys = [\n    \"countries\",\n    \"continents\", // OWID continents\n    \"incomeGroups\",\n    \"historicalCountries\", // e.g. USSR, Austria-Hungary\n    ...regionDataProviders,\n    ...additionalRegionDataProviders,\n] as const\nexport type RegionGroupKey = (typeof regionGroupKeys)[number]\n\nexport interface RegionGroup {\n    regionGroupKey: RegionGroupKey\n    entityNames: EntityName[]\n}\n\nexport type EntitiesByRegionGroup = Map<RegionGroupKey, EntityName[]>\n\nexport type AnyRegionDataProvider =\n    | RegionDataProvider\n    | AdditionalRegionDataProvider\n\nexport const regionGroupLabels: Record<RegionGroupKey, string> = {\n    countries: \"Countries\",\n    continents: \"Continents\", // OWID-defined continents\n    incomeGroups: \"Income groups\",\n    historicalCountries: \"Historical countries and regions\", // e.g. USSR, Austria-Hungary\n\n    // Regions defined by an institution, and where we have region definition about what constitutes these regions in regions.ts\n    who: \"World Health Organization regions\",\n    wb: \"World Bank regions\",\n    pew: \"Pew Research Center regions\",\n    un: \"United Nations regions\",\n    un_m49_1: \"United Nations regions\",\n    un_m49_2: \"United Nations regions\",\n    un_m49_3: \"United Nations regions\",\n\n    // Regions defined by an institution, but we don't have region definitions in regions.ts for these (we recognize them by their suffix)\n    maddison: \"Maddison Project Database regions\",\n    unsdg: \"UN Sustainable Development Goals regions\",\n    unm49: \"United Nations M49 regions\",\n    unsd: \"UN Statistics Division regions\",\n    fao: \"FAO regions\", // UN's Food and Agriculture Organization\n    ei: \"Education International regions\",\n    pip: \"PIP regions\", // World Bank’s Poverty and Inequality Platform\n    ember: \"Ember regions\",\n    gcp: \"Global Carbon Project regions\",\n    niaid: \"NIAID regions\", // National Institute of Allergy and Infectious Diseases\n    unicef: \"UNICEF regions\",\n    unaids: \"UNAIDS regions\", // Joint United Nations Programme on HIV and AIDS\n    undp: \"UN Development Programme regions\",\n    wid: \"World Inequality Database regions\",\n    oecd: \"OECD regions\", // Organisation for Economic Co-operation and Development\n    ilo: \"International Labour Organization regions\",\n}\n\nfunction toProviderKey(\n    providerSuffix: string\n): AnyRegionDataProvider | undefined {\n    const candidate = providerSuffix.toLowerCase().replaceAll(\" \", \"\")\n    return isAnyRegionDataProviderKey(candidate) ? candidate : undefined\n}\n\nexport function groupEntitiesByRegionType(\n    entityNames: EntityName[]\n): RegionGroup[] {\n    // The 'World' entity shouldn't show up in any of the groups\n    const availableEntityNames = entityNames.filter(\n        (entityName) => !isWorldEntityName(entityName)\n    )\n\n    // Map entities to their regions\n    const availableRegions = excludeUndefined(\n        availableEntityNames.map((entityName) => getRegionByName(entityName))\n    )\n\n    // Group regions by type\n    const regionsGroupedByType = _.groupBy(\n        availableRegions,\n        (r) => r.regionType\n    )\n\n    const entitiesByRegionGroup: RegionGroup[] = []\n\n    // Split countries into historical and non-historical\n    const [historicalCountries, nonHistoricalCountries] = R.partition(\n        regionsGroupedByType.country ?? [],\n        (country) => !!(country as Country).isHistorical\n    )\n\n    // Add the 'countries' group\n    if (nonHistoricalCountries.length > 0) {\n        entitiesByRegionGroup.push({\n            regionGroupKey: \"countries\",\n            entityNames: nonHistoricalCountries.map((region) => region.name),\n        })\n    }\n\n    // Add the 'continents' group\n    if (regionsGroupedByType.continent) {\n        entitiesByRegionGroup.push({\n            regionGroupKey: \"continents\",\n            entityNames: regionsGroupedByType.continent.map(\n                (region) => region.name\n            ),\n        })\n    }\n\n    // Add the 'incomeGroups' group\n    if (regionsGroupedByType.income_group) {\n        // match by name instead of relying on the regions file because\n        // some charts have income groups that aren't listed in the regions\n        // file, e.g. 'Lower-middle-income countries'\n        const incomeGroups = availableEntityNames.filter(\n            (entityName) =>\n                entityName.includes(\"income countries\") ||\n                // matches 'No income group available', for example\n                entityName.includes(\"income group\")\n        )\n\n        entitiesByRegionGroup.push({\n            regionGroupKey: \"incomeGroups\",\n            entityNames: incomeGroups,\n        })\n    }\n\n    const entitiesByProvider = new Map<AnyRegionDataProvider, EntityName[]>()\n    for (const entityName of availableEntityNames) {\n        const parsedEntityName = parseLabel(entityName)\n        if (parsedEntityName.providerKey) {\n            const providerKey = parsedEntityName.providerKey\n            if (!entitiesByProvider.get(providerKey))\n                entitiesByProvider.set(providerKey, [])\n            entitiesByProvider.get(providerKey)!.push(entityName)\n        }\n    }\n\n    for (const [provider, entityNames] of entitiesByProvider) {\n        entitiesByRegionGroup.push({ regionGroupKey: provider, entityNames })\n    }\n\n    // Add a group for historical countries\n    if (historicalCountries.length > 0) {\n        entitiesByRegionGroup.push({\n            regionGroupKey: \"historicalCountries\",\n            entityNames: historicalCountries.map((region) => region.name),\n        })\n    }\n\n    return entitiesByRegionGroup\n}\n\nexport interface ParsedLabel {\n    raw: string // e.g. \"Africa (UN)\"\n    name: string // e.g. \"Africa\"\n    suffix?: string // e.g. \"UN\"\n    providerKey?: AnyRegionDataProvider // e.g. \"un\"\n}\n\nexport function parseLabel(raw: string): ParsedLabel {\n    const match = raw.match(/^(.+)\\s+\\(([^)]+)\\)$/)\n    if (!match) return { raw, name: raw }\n\n    const [, name, suffix] = match\n\n    if (!suffix) return { raw, name: raw }\n\n    const providerKey = toProviderKey(suffix)\n    if (!providerKey || !isAnyRegionDataProviderKey(providerKey))\n        return { raw, name, suffix }\n\n    return { raw, name, suffix, providerKey }\n}\n\nexport function isAnyRegionDataProviderKey(\n    candidate: string\n): candidate is AnyRegionDataProvider {\n    return allRegionDataProviderSet.has(candidate as any)\n}\n\nexport function isEntityRegionGroupKey(\n    candidate: string\n): candidate is RegionGroupKey {\n    return regionGroupKeys.includes(candidate as any)\n}\n","import {\n    faCircleXmark,\n    faMagnifyingGlass,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport * as React from \"react\"\nimport { forwardRef } from \"react\"\nimport cx from \"classnames\"\nimport { isTouchDevice } from \"@ourworldindata/utils\"\n\nexport const SearchField = forwardRef<\n    HTMLInputElement,\n    {\n        className?: string\n        value: string\n        placeholder: string\n        trackNote: string\n        onChange: (value: string) => void\n        onClear: () => void\n        onKeyDown?: (event: KeyboardEvent) => void\n    }\n>(function SearchField(\n    { className, value, placeholder, trackNote, onChange, onClear, onKeyDown },\n    ref\n): React.ReactElement {\n    return (\n        <div\n            className={cx(className, \"grapher-search-field\", {\n                \"grapher-search-field--empty\": !value,\n            })}\n        >\n            <FontAwesomeIcon className=\"search-icon\" icon={faMagnifyingGlass} />\n            <input\n                ref={ref}\n                type=\"search\"\n                value={value}\n                onChange={(event) => onChange(event.currentTarget.value)}\n                onKeyDown={(event) => onKeyDown?.(event.nativeEvent)}\n                data-track-note={trackNote}\n                aria-label={placeholder}\n                // prevent auto-zoom on ios\n                style={{ fontSize: isTouchDevice() ? 16 : undefined }}\n            />\n            {/* We don't use the input's built-in placeholder because\n                we want the input text and placeholder text to have different\n                font sizes, which isn't well-supported across browsers.\n                The input text needs to be 16px to prevent auto-zoom on iOS,\n                but the placeholder text should have a smaller font size. */}\n            {!value && (\n                <span className=\"search-placeholder\">{placeholder}</span>\n            )}\n            {value && (\n                <button\n                    type=\"button\"\n                    className=\"clear\"\n                    onClick={() => onClear()}\n                >\n                    <FontAwesomeIcon icon={faCircleXmark} />\n                </button>\n            )}\n        </div>\n    )\n})\n","import * as _ from \"lodash-es\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    AdditionalGrapherDataFetchFn,\n    AssetMap,\n    CatalogDataForKey,\n    CatalogKey,\n    CatalogNumericDataPoint,\n    ColumnSlug,\n    ColumnTypeNames,\n    NumericCatalogKey,\n    OwidColumnDef,\n} from \"@ourworldindata/types\"\nimport { fetchJson, readFromAssetMap } from \"@ourworldindata/utils\"\n\n/**\n * Gets the asset map key for a catalog path.\n * E.g., \"population\" -> \"catalog/population.json\"\n */\nexport function getCatalogAssetKey(key: CatalogKey): string {\n    return `catalog/${key}.json`\n}\n\n/** Paths to catalog data files */\nconst catalogPaths: Record<CatalogKey, `${string}.json`> = {\n    population: \"population/population.json\",\n    gdp: \"gdp/gdp.json\",\n    neighbors: \"neighbours/neighbours.json\",\n}\n\n/** Column definitions with display metadata for numeric catalog data */\nexport const columnDefsByCatalogKey: Record<NumericCatalogKey, OwidColumnDef> =\n    {\n        population: {\n            slug: \"catalog-population\",\n            name: \"Population\",\n            type: ColumnTypeNames.Integer,\n        },\n        gdp: {\n            slug: \"catalog-gdp\",\n            name: \"GDP per capita\",\n            type: ColumnTypeNames.Integer,\n            shortUnit: \"$\",\n        },\n    }\n\n/** Loads indicator data from the OWID catalog */\nasync function _loadCatalogData<K extends CatalogKey>(\n    key: K,\n    { baseUrl, assetMap }: { baseUrl: string; assetMap?: AssetMap }\n): Promise<CatalogDataForKey<K>> {\n    const assetKey = getCatalogAssetKey(key)\n    const catalogPath = `${baseUrl}/external/owid_grapher/latest/${catalogPaths[key]}`\n    const url = readFromAssetMap(assetMap, {\n        path: assetKey,\n        fallback: catalogPath,\n    })\n    return fetchJson(url)\n}\n\nexport const loadCatalogData = _.memoize(_loadCatalogData)\n\n/** Creates an OwidTable from numeric catalog data points */\nfunction catalogDataToOwidTable(\n    data: CatalogNumericDataPoint[],\n    columnDef: OwidColumnDef\n): OwidTable {\n    const rows = data.map((point) => ({\n        entityName: point.entity,\n        year: point.year,\n        [columnDef.slug]: point.value,\n    }))\n\n    return new OwidTable(rows, [columnDef])\n}\n\n/** Loads numeric catalog data and transforms it into an OwidTable */\nexport async function loadCatalogDataAsOwidTable(\n    key: NumericCatalogKey,\n    loadCatalogDataFn: AdditionalGrapherDataFetchFn\n): Promise<{ table: OwidTable; slug: ColumnSlug }> {\n    const data = await loadCatalogDataFn(key)\n    const columnDef = columnDefsByCatalogKey[key]\n    const table = catalogDataToOwidTable(data, columnDef)\n    return { table, slug: columnDef.slug }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { observer } from \"mobx-react\"\nimport {\n    computed,\n    action,\n    comparer,\n    reaction,\n    when,\n    IReactionDisposer,\n    makeObservable,\n} from \"mobx\"\nimport cx from \"classnames\"\nimport a from \"indefinite\"\nimport {\n    isTouchDevice,\n    SortOrder,\n    isFiniteWithGuard,\n    CoreValueType,\n    getUserCountryInformation,\n    regions,\n    Tippy,\n    excludeUndefined,\n    FuzzySearch,\n    getUserNavigatorLanguagesNonEnglish,\n    getRegionAlternativeNames,\n    convertDaysSinceEpochToDate,\n    checkIsOwidIncomeGroupCode,\n    checkHasMembers,\n    Region,\n    getRegionByName,\n    makeSafeForCSS,\n} from \"@ourworldindata/utils\"\nimport {\n    Checkbox,\n    RadioButton,\n    OverlayHeader,\n} from \"@ourworldindata/components\"\nimport {\n    faLocationArrow,\n    faArrowRightArrowLeft,\n    faFilter,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { Flipper, Flipped } from \"react-flip-toolkit\"\nimport {\n    combineHistoricalAndProjectionColumns,\n    makeSelectionArray,\n} from \"../chart/ChartUtils.js\"\nimport {\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n    isPopulationVariableETLPath,\n    isWorldEntityName,\n} from \"../core/GrapherConstants\"\nimport { CoreColumn, OwidTable } from \"@ourworldindata/core-table\"\nimport { SortIcon } from \"../controls/SortIcon\"\nimport { Dropdown } from \"../controls/Dropdown\"\nimport { scaleLinear, type ScaleLinear } from \"d3-scale\"\nimport {\n    AdditionalGrapherDataFetchFn,\n    ColumnSlug,\n    EntityName,\n    NumericCatalogKey,\n    OwidColumnDef,\n    ProjectionColumnInfo,\n    Time,\n    ToleranceStrategy,\n    type EntitySelectorEvent,\n} from \"@ourworldindata/types\"\nimport { DrawerContext } from \"../slideInDrawer/SlideInDrawer.js\"\nimport * as R from \"remeda\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\nimport { match } from \"ts-pattern\"\nimport {\n    regionGroupLabels,\n    EntitiesByRegionGroup,\n    RegionGroupKey,\n    RegionGroup,\n    isAnyRegionDataProviderKey,\n    parseLabel,\n} from \"../core/RegionGroups\"\nimport { SearchField } from \"../controls/SearchField\"\nimport { MAP_REGION_LABELS } from \"../mapCharts/MapChartConstants.js\"\nimport {\n    columnDefsByCatalogKey,\n    loadCatalogDataAsOwidTable,\n} from \"../core/loadCatalogData.js\"\n\nexport type CoreColumnBySlug = Record<ColumnSlug, CoreColumn>\n\ntype EntityFilter = RegionGroupKey | \"all\"\n\ntype ValueBySlugAndTimeAndEntityName<T> = Map<\n    ColumnSlug,\n    Map<Time, Map<EntityName, T>>\n>\n\nexport interface EntitySelectorState {\n    searchInput: string\n    sortConfig: SortConfig\n    entityFilter: EntityFilter\n    localEntityNames?: string[]\n    interpolatedSortColumnsBySlug?: CoreColumnBySlug\n    isProjectionBySlugAndTimeAndEntityName?: ValueBySlugAndTimeAndEntityName<boolean>\n    isLoadingExternalSortColumn?: boolean\n}\n\nexport interface EntitySelectorManager {\n    entitySelectorState: Partial<EntitySelectorState>\n    table: OwidTable\n    tableForSelection: OwidTable\n    selection: SelectionArray\n    entityType?: string\n    entityTypePlural?: string\n    // TODO: Use the column slugs currently in use, if possible\n    inputColumnSlugs?: ColumnSlug[]\n    isEntitySelectorModalOrDrawerOpen?: boolean\n    canChangeEntity?: boolean\n    canHighlightEntities?: boolean\n    endTime?: Time\n    isOnMapTab?: boolean\n    isOnScatterTab?: boolean\n    xColumnSlug?: ColumnSlug\n    mapConfig?: MapConfig\n    mapColumnSlug?: ColumnSlug\n    isEntityMutedInSelector?: (entityName: EntityName) => boolean\n    onSelectEntity?: (entityName: EntityName) => void\n    onDeselectEntity?: (entityName: EntityName) => void\n    onClearEntities?: () => void\n    regionGroups?: RegionGroup[]\n    entitiesByRegionGroup?: EntitiesByRegionGroup\n    isReady?: boolean\n    logEntitySelectorEvent: (\n        action: EntitySelectorEvent,\n        target?: string\n    ) => void\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n    projectionColumnInfoBySlug?: Map<ColumnSlug, ProjectionColumnInfo>\n}\n\ninterface SortConfig {\n    slug: ColumnSlug\n    order: SortOrder\n}\n\ntype SearchableEntity = {\n    name: string\n    sortColumnValues: Record<ColumnSlug, CoreValueType | undefined>\n    isLocal?: boolean\n    alternativeNames?: string[]\n    regionInfo?: Region\n}\n\ninterface SortDropdownOption {\n    type:\n        | \"name\" // sorted by name\n        | \"chart-indicator\" // sorted by chart column\n        | \"external-indicator\" // sorted by an external indicator\n    value: string // slug\n    slug: string\n    label: string\n    formattedTime?: string\n    trackNote?: string // unused\n}\n\ninterface FilterDropdownOption {\n    value: EntityFilter\n    label: string\n    count: number\n    trackNote?: string // unused\n}\n\nexport const EXTERNAL_SORT_INDICATOR_DEFINITIONS = [\n    {\n        catalogKey: \"population\" satisfies NumericCatalogKey,\n        slug: columnDefsByCatalogKey[\"population\"].slug,\n        label: \"Population\",\n    },\n    {\n        catalogKey: \"gdp\" satisfies NumericCatalogKey,\n        slug: columnDefsByCatalogKey[\"gdp\"].slug,\n        label: \"GDP per capita (int. $)\",\n    },\n] as const\n\ntype ExternalSortIndicatorDefinition =\n    (typeof EXTERNAL_SORT_INDICATOR_DEFINITIONS)[number]\n\nconst regionNamesSet = new Set(regions.map((region) => region.name))\n\ninterface EntitySelectorProps {\n    manager: EntitySelectorManager\n    selection?: SelectionArray\n    autoFocus?: boolean\n    onDismiss?: () => void\n}\n\n@observer\nexport class EntitySelector extends React.Component<EntitySelectorProps> {\n    static override contextType = DrawerContext\n    declare context: React.ContextType<typeof DrawerContext>\n\n    scrollableContainer = React.createRef<HTMLDivElement>()\n    searchFieldRef = React.createRef<HTMLInputElement>()\n    contentRef = React.createRef<HTMLDivElement>()\n\n    private sortConfigByName: SortConfig = {\n        slug: this.table.entityNameSlug,\n        order: SortOrder.asc,\n    }\n\n    private disposers: IReactionDisposer[] = []\n\n    constructor(props: EntitySelectorProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    override componentDidMount(): void {\n        void this.populateLocalEntities()\n\n        if (this.props.autoFocus && !isTouchDevice())\n            this.searchFieldRef.current?.focus()\n\n        // scroll to the top when the search input changes\n        this.disposers.push(\n            reaction(\n                () => this.searchInput,\n                () => {\n                    if (this.scrollableContainer.current)\n                        this.scrollableContainer.current.scrollTop = 0\n                }\n            )\n        )\n\n        // the initial sorting strategy depends on data,\n        // which is why we wait for Grapher to be ready\n        this.disposers.push(\n            when(\n                () => !!this.manager.isReady,\n                () => this.initSortConfig()\n            )\n        )\n\n        // Mdims and explorers can change the columns available for sorting, and\n        // we need to change the sort config accordingly\n        this.disposers.push(\n            reaction(\n                () => ({\n                    slugs: this.sortOptions.map((option) => option.slug),\n                    isReady: this.manager.isReady,\n                }),\n                () => this.updateSortConfigIfOptionHasBecomeUnavailable(),\n                { equals: comparer.structural }\n            )\n        )\n    }\n\n    override componentWillUnmount(): void {\n        if (this.timeoutId) clearTimeout(this.timeoutId)\n        this.disposers.forEach((dispose) => dispose())\n    }\n\n    @action.bound private set(newState: Partial<EntitySelectorState>): void {\n        const correctedState = { ...newState }\n\n        if (newState.sortConfig !== undefined) {\n            const correctedSortConfig = { ...newState.sortConfig }\n\n            const shouldBeSortedByName =\n                newState.sortConfig.slug === this.table.entityNameSlug\n\n            // sort names in ascending order by default\n            if (shouldBeSortedByName && !this.isSortedByName) {\n                correctedSortConfig.order = SortOrder.asc\n            }\n\n            // sort values in descending order by default\n            if (!shouldBeSortedByName && this.isSortedByName) {\n                correctedSortConfig.order = SortOrder.desc\n            }\n\n            correctedState.sortConfig = correctedSortConfig\n        }\n\n        this.manager.entitySelectorState = {\n            ...this.manager.entitySelectorState,\n            ...correctedState,\n        }\n    }\n\n    getDefaultSortConfig(): SortConfig {\n        const chartIndicatorSortOptions = this.sortOptions.filter(\n            (option) => option.type === \"chart-indicator\"\n        )\n\n        // default to sorting by the first chart column if there is only one\n        if (chartIndicatorSortOptions.length === 1) {\n            const { slug } = chartIndicatorSortOptions[0]\n            this.setInterpolatedSortColumnBySlug(slug)\n            return { slug, order: SortOrder.desc }\n        }\n\n        return this.sortConfigByName\n    }\n\n    updateSortConfigIfOptionHasBecomeUnavailable() {\n        // We don't want to update the sort config when `sortOptions` are not ready,\n        // because the new chart dimensions are currently loading\n        if (!this.manager.isReady) return\n        if (!this.manager.inputColumnSlugs?.length) return\n\n        // Check whether the current sort option is still available in the newly-updated\n        // sortOptions\n        if (\n            !this.sortOptions.some(\n                (option) => option.slug === this.sortConfig.slug\n            )\n        ) {\n            this.set({ sortConfig: this.getDefaultSortConfig() })\n        }\n    }\n\n    initSortConfig(): void {\n        this.set({ sortConfig: this.getDefaultSortConfig() })\n    }\n\n    resetInterpolatedMapColumn(): void {\n        const { mapColumnSlug } = this.manager\n        const sortSlug = this.sortConfig.slug\n\n        // no need to reset the map column slug if it doesn't exist or isn't set\n        if (\n            !mapColumnSlug ||\n            !this.interpolatedSortColumnsBySlug[mapColumnSlug]\n        )\n            return\n\n        if (sortSlug === mapColumnSlug) {\n            // if the map column slug is currently selected, re-calculate its\n            // tolerance because the map and chart tab might have different\n            // tolerance settings\n            this.setInterpolatedSortColumn(\n                this.interpolateSortColumn(mapColumnSlug)\n            )\n        } else {\n            // otherwise, delete it and it will be re-calculated when necessary\n            delete this.manager.entitySelectorState\n                .interpolatedSortColumnsBySlug?.[mapColumnSlug]\n        }\n    }\n\n    @action.bound async populateLocalEntities(): Promise<void> {\n        try {\n            const localCountryInfo = await getUserCountryInformation()\n            if (!localCountryInfo) return\n\n            const countryRegionsWithoutIncomeGroups = localCountryInfo.regions\n                ? localCountryInfo.regions.filter(\n                      (region) => !checkIsOwidIncomeGroupCode(region)\n                  )\n                : []\n\n            const userEntityCodes = [\n                localCountryInfo.code,\n                ...countryRegionsWithoutIncomeGroups,\n            ]\n\n            const userRegions = regions.filter((region) =>\n                userEntityCodes.includes(region.code)\n            )\n\n            const sortedUserRegions = _.sortBy(userRegions, (region) =>\n                userEntityCodes.indexOf(region.code)\n            )\n\n            const localEntityNames = sortedUserRegions.map(\n                (region) => region.name\n            )\n\n            if (localEntityNames) this.set({ localEntityNames })\n        } catch {\n            // ignore\n        }\n    }\n\n    private setInterpolatedSortColumn(column: CoreColumn): void {\n        this.set({\n            interpolatedSortColumnsBySlug: {\n                ...this.interpolatedSortColumnsBySlug,\n                [column.slug]: column,\n            },\n        })\n    }\n\n    private setIsProjectionForSlug(\n        slug: ColumnSlug,\n        valuesByTimeAndEntityName: Map<Time, Map<EntityName, boolean>>\n    ): void {\n        const { isProjectionBySlugAndTimeAndEntityName } = this\n        isProjectionBySlugAndTimeAndEntityName.set(\n            slug,\n            valuesByTimeAndEntityName\n        )\n        this.set({ isProjectionBySlugAndTimeAndEntityName })\n    }\n\n    /** Time scatters plot time on the x-axis */\n    @computed private get isTimeScatter(): boolean {\n        return (\n            !!this.manager.isOnScatterTab &&\n            this.manager.xColumnSlug === undefined\n        )\n    }\n\n    @computed private get toleranceOverride(): {\n        value?: number\n        strategy?: ToleranceStrategy\n    } {\n        // For time scatters, use infinite tolerance so entities show data\n        // from any available time point instead of \"No data\"\n        if (this.isTimeScatter) return { value: Infinity }\n\n        // Use the given map tolerance if on the map tab\n        const tolerance = this.manager.isOnMapTab\n            ? this.mapConfig.timeTolerance\n            : undefined\n        const toleranceStrategy = this.manager.isOnMapTab\n            ? this.mapConfig.toleranceStrategy\n            : undefined\n\n        return { value: tolerance, strategy: toleranceStrategy }\n    }\n\n    private interpolateSortColumn(slug: ColumnSlug): CoreColumn {\n        return this.inputTable\n            .interpolateColumnWithTolerance(slug, {\n                toleranceOverride: this.toleranceOverride.value,\n                toleranceStrategyOverride: this.toleranceOverride.strategy,\n            })\n            .get(slug)\n    }\n\n    private interpolateAndCombineSortColumns(\n        info: ProjectionColumnInfo\n    ): OwidTable {\n        const { projectedSlug, historicalSlug } = info\n\n        // Interpolate the historical and projected columns separately\n        const table = this.table\n            .interpolateColumnWithTolerance(historicalSlug, {\n                toleranceOverride: this.toleranceOverride.value,\n                toleranceStrategyOverride: this.toleranceOverride.strategy,\n            })\n            .interpolateColumnWithTolerance(projectedSlug, {\n                toleranceOverride: this.toleranceOverride.value,\n                toleranceStrategyOverride: this.toleranceOverride.strategy,\n            })\n\n        // Combine the interpolated columns\n        return combineHistoricalAndProjectionColumns(table, info, {\n            shouldAddIsProjectionColumn: true,\n        })\n    }\n\n    private setInterpolatedSortColumnBySlug(slug: ColumnSlug): void {\n        if (this.interpolatedSortColumnsBySlug[slug]) return\n\n        // If the column is a projection and has an historical counterpart,\n        // then combine the projected and historical data into a single column\n        const projectionInfo = this.projectionColumnInfoByCombinedSlug.get(slug)\n        if (projectionInfo) {\n            const table = this.interpolateAndCombineSortColumns(projectionInfo)\n\n            const combinedColumn = table.get(projectionInfo.combinedSlug)\n            const isProjectionValues = table.get(\n                projectionInfo.slugForIsProjectionColumn\n            ).valueByTimeAndEntityName\n\n            this.setInterpolatedSortColumn(combinedColumn)\n            this.setIsProjectionForSlug(\n                projectionInfo.combinedSlug,\n                isProjectionValues\n            )\n\n            return\n        }\n\n        const column = this.interpolateSortColumn(slug)\n        this.setInterpolatedSortColumn(column)\n    }\n\n    private clearSearchInput(): void {\n        this.set({ searchInput: \"\" })\n    }\n\n    private resetEntityFilter(): void {\n        this.set({ entityFilter: undefined })\n    }\n\n    private updateSortSlug(newSlug: ColumnSlug) {\n        this.set({\n            sortConfig: {\n                slug: newSlug,\n                order: this.sortConfig.order,\n            },\n        })\n    }\n\n    private toggleSortOrder() {\n        const newOrder =\n            this.sortConfig.order === SortOrder.asc\n                ? SortOrder.desc\n                : SortOrder.asc\n        this.set({\n            sortConfig: {\n                slug: this.sortConfig.slug,\n                order: newOrder,\n            },\n        })\n    }\n\n    @computed private get chartHasDailyData(): boolean {\n        return this.numericalChartColumns.some(\n            (column) => column.display?.yearIsDay\n        )\n    }\n\n    /**\n     * Converts the given time to be compatible with the time format\n     * of the given column.\n     *\n     * This is necessary for external sort indicators when they're loaded\n     * for charts with daily data.\n     */\n    private toColumnCompatibleTime(time: Time, column: CoreColumn): Time {\n        const isExternal = this.externalSortIndicatorDefinitions.some(\n            (external) => column.slug === external.slug\n        )\n\n        // if the column comes from the chart, no conversion is needed\n        if (!isExternal) return time\n\n        // assumes that external indicators have yearly data\n        const year = this.chartHasDailyData\n            ? convertDaysSinceEpochToDate(time).year()\n            : time\n\n        // clamping is necessary since external indicators might not cover\n        // the entire time range of the chart\n        return R.clamp(year, { min: column.minTime, max: column.maxTime })\n    }\n\n    private formatTimeForSortColumnLabel(\n        time: Time,\n        column: CoreColumn\n    ): string {\n        const compatibleTime = this.toColumnCompatibleTime(time, column)\n        return column.formatTime(compatibleTime)\n    }\n\n    @computed private get manager(): EntitySelectorManager {\n        return this.props.manager\n    }\n\n    @computed private get endTime(): Time {\n        return this.manager.endTime ?? this.table.maxTime!\n    }\n\n    @computed private get mapConfig(): MapConfig {\n        return this.manager.mapConfig ?? new MapConfig()\n    }\n\n    private isEntityMuted(entityName: EntityName): boolean {\n        return this.manager.isEntityMutedInSelector?.(entityName) ?? false\n    }\n\n    @computed private get title(): string {\n        return this.manager.isOnMapTab\n            ? `Select ${this.entityType.plural}`\n            : this.manager.canHighlightEntities\n              ? `Select ${this.entityType.plural}`\n              : this.manager.canChangeEntity\n                ? `Choose ${a(this.entityType.singular)}`\n                : `Add/remove ${this.entityType.plural}`\n    }\n\n    @computed private get searchPlaceholderEntityType(): string {\n        if (isAnyRegionDataProviderKey(this.entityFilter)) return \"region\"\n\n        return match(this.entityFilter)\n            .with(\"all\", () => this.entityType.singular)\n            .with(\"countries\", () => \"country\")\n            .with(\"continents\", () => \"continent\")\n            .with(\"incomeGroups\", () => \"income group\")\n            .with(\"historicalCountries\", () => \"country or region\")\n            .exhaustive()\n    }\n\n    @computed private get searchInput(): string {\n        return this.manager.entitySelectorState.searchInput ?? \"\"\n    }\n\n    @computed get sortConfig(): SortConfig {\n        return (\n            this.manager.entitySelectorState.sortConfig ?? this.sortConfigByName\n        )\n    }\n\n    isSortSlugValid(slug: ColumnSlug): boolean {\n        return this.sortOptions.some((option) => option.value === slug)\n    }\n\n    isEntityFilterValid(entityFilter: EntityFilter): boolean {\n        return this.filterOptions.some(\n            (option) => option.value === entityFilter\n        )\n    }\n\n    @computed private get entityFilter(): EntityFilter {\n        return (\n            this.manager.entitySelectorState.entityFilter ??\n            this.filterOptions[0]?.value ??\n            \"all\"\n        )\n    }\n\n    @computed private get localEntityNames(): string[] | undefined {\n        return this.manager.entitySelectorState.localEntityNames\n    }\n\n    @computed private get interpolatedSortColumnsBySlug(): CoreColumnBySlug {\n        return (\n            this.manager.entitySelectorState.interpolatedSortColumnsBySlug ?? {}\n        )\n    }\n\n    @computed\n    private get isProjectionBySlugAndTimeAndEntityName(): ValueBySlugAndTimeAndEntityName<boolean> {\n        return (\n            this.manager.entitySelectorState\n                .isProjectionBySlugAndTimeAndEntityName ?? new Map()\n        )\n    }\n\n    @computed private get interpolatedSortColumns(): CoreColumn[] {\n        return Object.values(this.interpolatedSortColumnsBySlug)\n    }\n\n    @computed private get isLoadingExternalSortColumn(): boolean {\n        return (\n            this.manager.entitySelectorState.isLoadingExternalSortColumn ??\n            false\n        )\n    }\n\n    @computed private get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed private get table(): OwidTable {\n        return this.manager.tableForSelection\n    }\n\n    @computed private get someEntitiesAreRegions(): boolean {\n        if (!this.entitiesAreCountriesOrRegions) return false\n        return this.availableEntities.some((entity) =>\n            checkHasMembers(entity.regionInfo)\n        )\n    }\n\n    @computed private get entitiesAreCountriesOrRegions(): boolean {\n        // Ignore the World entity since we have charts that only have the\n        // World entity but no other countries or regions (e.g. 'World',\n        // 'Northern Hemisphere' and 'Southern hemisphere')\n        return this.availableEntityNames.some(\n            (entityName) =>\n                regionNamesSet.has(entityName) && !isWorldEntityName(entityName)\n        )\n    }\n\n    @computed private get supportsSortingByExternalIndicators(): boolean {\n        // If we can't dynamically load variables, don't ever the option to sort\n        // by external indicators\n        if (!this.manager.additionalDataLoaderFn) return false\n\n        // Adding external indicators like population and gdp per capita\n        // only makes sense for charts with countries or regions\n        return this.entitiesAreCountriesOrRegions\n    }\n\n    @computed private get numericalChartColumns(): CoreColumn[] {\n        const {\n            inputColumnSlugs = [],\n            mapColumnSlug,\n            isOnMapTab,\n        } = this.manager\n\n        const activeSlugs = isOnMapTab ? [mapColumnSlug] : inputColumnSlugs\n\n        return activeSlugs\n            .map((slug) => this.table.get(slug))\n            .filter((column) => column.hasNumberFormatting)\n    }\n\n    /**\n     * Map of chart columns that match external sort indicators.\n     * For example, if the chart has a column with population data,\n     * it will be used instead of the \"Population\" external indicator.\n     */\n    @computed\n    private get externalSortColumnsByCatalogKey(): Partial<\n        Record<NumericCatalogKey, CoreColumn>\n    > {\n        const matchingColumns: Partial<Record<NumericCatalogKey, CoreColumn>> =\n            {}\n        for (const external of EXTERNAL_SORT_INDICATOR_DEFINITIONS) {\n            const matchingColumn = this.numericalChartColumns.find((column) =>\n                isExternalSortIndicatorMatch(external.catalogKey, column)\n            )\n            if (matchingColumn)\n                matchingColumns[external.catalogKey] = matchingColumn\n        }\n        return matchingColumns\n    }\n\n    @computed\n    private get externalSortIndicatorDefinitions(): ExternalSortIndicatorDefinition[] {\n        if (!this.supportsSortingByExternalIndicators) return []\n\n        // If the chart has a column that matches an external sort indicator,\n        // prefer the chart column over the external indicator\n        const matchingKeys = Object.keys(this.externalSortColumnsByCatalogKey)\n        return EXTERNAL_SORT_INDICATOR_DEFINITIONS.filter(\n            (external) => !matchingKeys.includes(external.catalogKey)\n        )\n    }\n\n    @computed private get projectionColumnInfoByCombinedSlug(): Map<\n        ColumnSlug,\n        ProjectionColumnInfo\n    > {\n        if (!this.manager.projectionColumnInfoBySlug) return new Map()\n\n        const projectionColumnInfoByCombinedSlug: Map<\n            ColumnSlug,\n            ProjectionColumnInfo\n        > = new Map()\n\n        for (const info of this.manager.projectionColumnInfoBySlug.values()) {\n            projectionColumnInfoByCombinedSlug.set(info.combinedSlug, info)\n        }\n\n        return projectionColumnInfoByCombinedSlug\n    }\n\n    private combinedColumnHasHistoricalDataForTime(\n        slug: ColumnSlug,\n        time: Time\n    ): boolean | null {\n        const isProjectionByTimeAndEntityName =\n            this.isProjectionBySlugAndTimeAndEntityName.get(slug)\n\n        // We don't have data and thus can't make a decision\n        if (!isProjectionByTimeAndEntityName) return null\n\n        const values = isProjectionByTimeAndEntityName.get(time)?.values() ?? []\n        return Array.from(values)?.some((isProjection) => !isProjection)\n    }\n\n    private makeSortColumnLabelForCombinedColumn(\n        info: ProjectionColumnInfo,\n        time: Time\n    ): string {\n        const { table, isProjectionBySlugAndTimeAndEntityName } = this\n\n        const projectedLabel = getTitleForSortColumnLabel(\n            table.get(info.projectedSlug)\n        )\n        const historicalLabel = getTitleForSortColumnLabel(\n            table.get(info.historicalSlug)\n        )\n\n        const hasHistoricalDataForTime =\n            this.combinedColumnHasHistoricalDataForTime(info.combinedSlug, time)\n\n        // If the data for this column hasn't been computed yet, we can't\n        // determine if it has historical data, and thus which label to show.\n        // As a workaround, we check if any other (arbitrary) combined column\n        // has historical data for this time point, based on the assumption that\n        // projection columns typically share the same cut-off time.\n        if (hasHistoricalDataForTime === null) {\n            const arbitrarySlug = isProjectionBySlugAndTimeAndEntityName\n                .keys()\n                .next().value\n\n            if (arbitrarySlug) {\n                const hasHistoricalValues =\n                    this.combinedColumnHasHistoricalDataForTime(\n                        arbitrarySlug,\n                        time\n                    )\n                return hasHistoricalValues ? historicalLabel : projectedLabel\n            }\n\n            return projectedLabel\n        }\n\n        // If there is any historical value for the given time,\n        // we choose to show the label of the historical column\n        return hasHistoricalDataForTime ? historicalLabel : projectedLabel\n    }\n\n    @computed get sortOptions(): SortDropdownOption[] {\n        let options: SortDropdownOption[] = []\n\n        // the first dropdown option is always the entity name\n        options.push({\n            type: \"name\",\n            value: this.table.entityNameSlug,\n            slug: this.table.entityNameSlug,\n            label: \"Name\",\n        })\n\n        // add external indicators as sort options if applicable\n        if (this.supportsSortingByExternalIndicators) {\n            EXTERNAL_SORT_INDICATOR_DEFINITIONS.forEach((external) => {\n                // If the chart has a column that matches the external\n                // indicator, prefer it over the external indicator\n                const chartColumn =\n                    this.externalSortColumnsByCatalogKey[external.catalogKey]\n\n                if (chartColumn) {\n                    options.push({\n                        type: \"chart-indicator\",\n                        value: chartColumn.slug,\n                        slug: chartColumn.slug,\n                        label: getTitleForSortColumnLabel(chartColumn),\n                        formattedTime: this.formatTimeForSortColumnLabel(\n                            this.endTime,\n                            chartColumn\n                        ),\n                    })\n                } else {\n                    const column =\n                        this.interpolatedSortColumnsBySlug[external.slug]\n                    options.push({\n                        type: \"external-indicator\",\n                        value: external.slug,\n                        slug: external.slug,\n                        label: external.label,\n                        formattedTime: column\n                            ? this.formatTimeForSortColumnLabel(\n                                  this.endTime,\n                                  column\n                              )\n                            : undefined,\n                    })\n                }\n            })\n        }\n\n        // Add the remaining numerical chart columns as sort options,\n        // excluding columns that match external indicators (since those\n        // have already been added)\n        const matchingSlugs = Object.values(\n            this.externalSortColumnsByCatalogKey\n        ).map((column) => column.slug)\n        const columns = this.numericalChartColumns.filter(\n            (column) => !matchingSlugs.includes(column.slug)\n        )\n\n        // If we add data columns that combine historical and projected data,\n        // then we want to exclude the individual columns from the sort options\n        const slugsToExclude: Set<ColumnSlug> = new Set()\n\n        for (const column of columns) {\n            // Time scatters use values from any available time point,\n            // so we don't show a time label for them\n            const formattedTime = this.isTimeScatter\n                ? undefined\n                : this.formatTimeForSortColumnLabel(this.endTime, column)\n\n            const projectionInfo = this.manager.projectionColumnInfoBySlug?.get(\n                column.slug\n            )\n\n            // Combine projected and historical data\n            if (projectionInfo) {\n                const time = this.toColumnCompatibleTime(this.endTime, column)\n                const label = this.makeSortColumnLabelForCombinedColumn(\n                    projectionInfo,\n                    time\n                )\n\n                options.push({\n                    type: \"chart-indicator\",\n                    value: projectionInfo.combinedSlug,\n                    slug: projectionInfo.combinedSlug,\n                    label,\n                    formattedTime,\n                })\n\n                // We don't need a separate option for the historical data\n                // if it's part of the projection series\n                slugsToExclude.add(projectionInfo.historicalSlug)\n            } else {\n                options.push({\n                    type: \"chart-indicator\",\n                    value: column.slug,\n                    slug: column.slug,\n                    label: getTitleForSortColumnLabel(column),\n                    formattedTime,\n                })\n            }\n        }\n\n        options = options.filter((option) => !slugsToExclude.has(option.value))\n\n        return options\n    }\n\n    @computed get sortValue(): SortDropdownOption | null {\n        return (\n            this.sortOptions.find(\n                (option) => option.slug === this.sortConfig.slug\n            ) ?? null\n        )\n    }\n\n    private isEntityNameSlug(slug: ColumnSlug): boolean {\n        return slug === this.table.entityNameSlug\n    }\n\n    @computed private get isSortedByName(): boolean {\n        return this.isEntityNameSlug(this.sortConfig.slug)\n    }\n\n    @computed private get entityType(): { singular: string; plural: string } {\n        const entitiesAreCountriesOrRegions =\n            this.manager.isOnMapTab ||\n            (!this.manager.entityType && this.entitiesAreCountriesOrRegions)\n\n        if (entitiesAreCountriesOrRegions)\n            return this.someEntitiesAreRegions\n                ? {\n                      singular: \"country or region\",\n                      plural: \"countries and regions\",\n                  }\n                : { singular: \"country\", plural: \"countries\" }\n\n        return {\n            singular: this.manager.entityType ?? DEFAULT_GRAPHER_ENTITY_TYPE,\n            plural:\n                this.manager.entityTypePlural ??\n                DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n        }\n    }\n\n    @computed private get selectionArray(): SelectionArray {\n        return makeSelectionArray(\n            this.props.selection ?? this.manager.selection\n        )\n    }\n\n    @computed private get allEntitiesSelected(): boolean {\n        return (\n            this.selectionArray.numSelectedEntities ===\n            this.availableEntityNames.length\n        )\n    }\n\n    @computed private get availableEntityNames(): string[] {\n        return this.table.availableEntityNames\n    }\n\n    @computed private get availableEntityNameSet(): Set<string> {\n        return this.table.availableEntityNameSet\n    }\n\n    @computed private get availableEntities(): SearchableEntity[] {\n        const langs = getUserNavigatorLanguagesNonEnglish()\n\n        return this.availableEntityNames.map((entityName) => {\n            const searchableEntity: SearchableEntity = {\n                name: entityName,\n                sortColumnValues: {},\n                alternativeNames: getRegionAlternativeNames(entityName, langs),\n                regionInfo: getRegionByName(entityName),\n            }\n\n            if (this.localEntityNames) {\n                searchableEntity.isLocal =\n                    this.localEntityNames.includes(entityName)\n            }\n\n            for (const column of this.interpolatedSortColumns) {\n                const time = this.toColumnCompatibleTime(this.endTime, column)\n\n                // If we're dealing with a mixed column that has historical and\n                // projected data for the given time, then we choose not to\n                // show projected data since the dropdown is labelled with the\n                // display name of the historical column.\n                const projectionInfo =\n                    this.projectionColumnInfoByCombinedSlug.get(column.slug)\n                if (projectionInfo) {\n                    const isProjectedValue =\n                        this.isProjectionBySlugAndTimeAndEntityName\n                            ?.get(projectionInfo.combinedSlug)\n                            ?.get(time)\n                            ?.get(entityName)\n\n                    if (isProjectedValue) {\n                        const hasHistoricalValues =\n                            this.combinedColumnHasHistoricalDataForTime(\n                                projectionInfo.combinedSlug,\n                                time\n                            )\n                        if (hasHistoricalValues) continue\n                    }\n                }\n\n                const row = column.owidRowByEntityNameAndTime\n                    .get(entityName)\n                    ?.get(time)\n\n                searchableEntity.sortColumnValues[column.slug] = row?.value\n            }\n\n            return searchableEntity\n        })\n    }\n\n    @computed private get filteredAvailableEntities(): SearchableEntity[] {\n        const { availableEntities, entityFilter } = this\n\n        // Sort locals and maybe World to the top if we are looking at all entites\n        if (entityFilter === \"all\")\n            return this.sortEntities(availableEntities, {\n                sortLocalsToTop: true,\n            })\n\n        const entityNameSet = new Set(\n            this.manager.entitiesByRegionGroup?.get(entityFilter) ?? []\n        )\n        const filteredAvailableEntities = availableEntities.filter((entity) =>\n            entityNameSet.has(entity.name)\n        )\n\n        return this.sortEntities(filteredAvailableEntities, {\n            // Sort locals and maybe World to the top if looking at the long countries list, not for others\n            sortLocalsToTop: entityFilter === \"countries\",\n        })\n    }\n\n    private sortEntities(\n        entities: SearchableEntity[],\n        options: { sortLocalsToTop: boolean } = {\n            sortLocalsToTop: true,\n        }\n    ): SearchableEntity[] {\n        const { sortConfig } = this\n        const byName = (e: SearchableEntity) => e.name\n        const byValue = (e: SearchableEntity) =>\n            e.sortColumnValues[sortConfig.slug]\n\n        // Name sorting\n        if (this.isSortedByName) {\n            // Simple name sort without local/world prioritization\n            if (!options.sortLocalsToTop) {\n                return _.orderBy(entities, byName, sortConfig.order)\n            }\n\n            // Name sort with locals on top and World between locals and others\n            // We include \"World\" here (unlike when sorting by values, see notes below) because\n            // here it is useful.\n            const [[worldEntity], rest] = _.partition(entities, (e) =>\n                isWorldEntityName(e.name)\n            )\n            const [locals, others] = _.partition(rest, (e) => e.isLocal)\n\n            const sortedLocals = _.sortBy(locals, (e) =>\n                this.localEntityNames?.indexOf(e.name)\n            )\n            const sortedOthers = _.orderBy(others, byName, sortConfig.order)\n\n            return excludeUndefined([\n                ...sortedLocals,\n                worldEntity,\n                ...sortedOthers,\n            ])\n        }\n\n        // Value sorting: missing values go last\n        const [withValues, withoutValues] = _.partition(entities, (e) =>\n            isFiniteWithGuard(byValue(e))\n        )\n\n        let sortedWithValues: SearchableEntity[]\n        if (options.sortLocalsToTop) {\n            // We're not specially handling \"World\" here because we want to see the sorted\n            // items and the user should understand that these are sorted. we already pull\n            // up to three items (Germany, EU 27, Europe) up to the top and don't want to add\n            // a fourth item in such cases that is obviously not sorted and that doesn't have\n            // a \"local\" icon indicator\n            const [localWith, otherWith] = _.partition(\n                withValues,\n                (e) => e.isLocal\n            )\n\n            // Locals: keep user-preferred order (by localEntityNames index)\n            const sortedLocalWith = _.sortBy(localWith, (e) =>\n                this.localEntityNames?.indexOf(e.name)\n            )\n\n            // Others: sort by value according to selected order\n            const sortedOtherWith = _.orderBy(\n                otherWith,\n                byValue,\n                sortConfig.order\n            )\n\n            sortedWithValues = excludeUndefined([\n                ...sortedLocalWith,\n                ...sortedOtherWith,\n            ])\n        } else {\n            sortedWithValues = _.orderBy(withValues, byValue, sortConfig.order)\n        }\n\n        const sortedWithoutValues = _.orderBy(\n            withoutValues,\n            byName,\n            SortOrder.asc\n        )\n\n        return [...sortedWithValues, ...sortedWithoutValues]\n    }\n\n    @computed get isMultiMode(): boolean {\n        return !this.manager.canChangeEntity\n    }\n\n    @computed get fuzzy(): FuzzySearch<SearchableEntity> {\n        return FuzzySearch.withKeyArray(\n            this.filteredAvailableEntities,\n            (entity) => [entity.name, ...(entity.alternativeNames ?? [])],\n            (entity) => entity.name\n        )\n    }\n\n    @computed get searchResults(): SearchableEntity[] | undefined {\n        if (!this.searchInput) return undefined\n        return this.fuzzy.search(this.searchInput)\n    }\n\n    @computed get selectedEntities(): SearchableEntity[] {\n        const selected = this.availableEntities.filter((entity) =>\n            this.isEntitySelected(entity)\n        )\n        return this.sortEntities(selected, { sortLocalsToTop: false })\n    }\n\n    @action.bound onTitleClick(): void {\n        if (this.scrollableContainer.current)\n            this.scrollableContainer.current.scrollTop = 0\n    }\n\n    @action.bound onSearchKeyDown(e: KeyboardEvent): void {\n        const { searchResults } = this\n        if (e.key === \"Enter\" && searchResults && searchResults.length > 0) {\n            this.onChange(searchResults[0].name)\n            this.clearSearchInput()\n        }\n    }\n\n    @action.bound onDeselectEntities(entityNames: EntityName[]): void {\n        for (const entityName of entityNames) {\n            this.manager.onDeselectEntity?.(entityName)\n        }\n    }\n\n    private timeoutId?: number\n    @action.bound onChange(entityName: EntityName): void {\n        if (this.isMultiMode) {\n            this.selectionArray.toggleSelection(entityName)\n\n            if (this.selectionArray.selectedSet.has(entityName)) {\n                this.manager.onSelectEntity?.(entityName)\n                this.manager.logEntitySelectorEvent?.(\"select\", entityName)\n            } else {\n                this.manager.onDeselectEntity?.(entityName)\n                this.manager.logEntitySelectorEvent?.(\"deselect\", entityName)\n            }\n\n            if (this.selectionArray.numSelectedEntities === 0) {\n                this.manager.onClearEntities?.()\n            }\n        } else {\n            const dropEntityNames = this.selectionArray.selectedEntityNames\n            this.selectionArray.setSelectedEntities([entityName])\n            this.manager.onSelectEntity?.(entityName)\n            this.manager.logEntitySelectorEvent?.(\"select\", entityName)\n            this.onDeselectEntities(dropEntityNames)\n\n            // close the modal or drawer automatically after selection\n            if (this.manager.isEntitySelectorModalOrDrawerOpen) {\n                this.timeoutId = window.setTimeout(() => this.close(), 200)\n            }\n        }\n\n        this.clearSearchInput()\n    }\n\n    @action.bound onClear(): void {\n        const dropEntityNames = this.selectionArray.selectedEntityNames\n        this.selectionArray.clearSelection()\n        this.onDeselectEntities(dropEntityNames)\n        this.manager.onClearEntities?.()\n\n        this.resetEntityFilter()\n\n        this.manager.logEntitySelectorEvent?.(\"clear\")\n    }\n\n    @action.bound async loadAndSetExternalSortColumn(\n        external: ExternalSortIndicatorDefinition\n    ): Promise<void> {\n        const { catalogKey, slug } = external\n        const { additionalDataLoaderFn } = this.manager\n\n        // the indicator has already been loaded\n        if (this.interpolatedSortColumnsBySlug[slug]) return\n\n        // load the external indicator from the catalog\n        try {\n            this.set({ isLoadingExternalSortColumn: true })\n            if (additionalDataLoaderFn === undefined)\n                throw new Error(\n                    \"additionalDataLoaderFn is not set, can't load sort variables on demand\"\n                )\n            const { table } = await loadCatalogDataAsOwidTable(\n                catalogKey,\n                additionalDataLoaderFn\n            )\n            const column = table\n                .filterByEntityNames(this.inputTable.availableEntityNames)\n                .interpolateColumnWithTolerance(slug, {\n                    toleranceOverride: Infinity,\n                })\n                .get(slug)\n            if (column) this.setInterpolatedSortColumn(column)\n        } catch {\n            console.error(`Failed to load data from catalog: ${catalogKey}`)\n        } finally {\n            this.set({ isLoadingExternalSortColumn: false })\n        }\n    }\n\n    @action.bound async onChangeSortSlug(\n        selected: SortDropdownOption | null\n    ): Promise<void> {\n        if (selected) {\n            const { slug } = selected\n\n            // if an external indicator has been selected, load it\n            const external = this.externalSortIndicatorDefinitions.find(\n                (external) => external.slug === slug\n            )\n            if (external) await this.loadAndSetExternalSortColumn(external)\n\n            // apply tolerance if an indicator is selected for the first time\n            if (!external && !this.isEntityNameSlug(slug)) {\n                this.setInterpolatedSortColumnBySlug(slug)\n            }\n\n            this.updateSortSlug(slug)\n\n            const sortByTarget = this.isEntityNameSlug(slug)\n                ? \"name\"\n                : external\n                  ? external.catalogKey\n                  : \"value\"\n            this.manager.logEntitySelectorEvent(\"sortBy\", sortByTarget)\n        }\n    }\n\n    @action.bound onChangeSortOrder(): void {\n        this.toggleSortOrder()\n        this.manager.logEntitySelectorEvent(\"sortOrder\")\n    }\n\n    @action.bound private close(): void {\n        // if rendered into a drawer, we use a method provided by the\n        // `<SlideInDrawer />` component so that closing the drawer is animated\n        if (this.context.toggleDrawerVisibility) {\n            this.context.toggleDrawerVisibility()\n        } else {\n            this.manager.isEntitySelectorModalOrDrawerOpen = false\n        }\n    }\n\n    @computed get filterOptions(): FilterDropdownOption[] {\n        const { regionGroups = [] } = this.manager\n\n        const options: FilterDropdownOption[] = regionGroups\n            .map(({ regionGroupKey, entityNames }) => ({\n                value: regionGroupKey,\n                label: regionGroupLabels[regionGroupKey],\n                count: entityNames.filter((entityName) =>\n                    this.availableEntityNameSet.has(entityName)\n                ).length,\n            }))\n            .filter(({ count }) => count > 0)\n\n        return [\n            {\n                value: \"all\",\n                label: \"All\",\n                count: this.availableEntities.length,\n            },\n            ...options,\n        ]\n    }\n\n    @action.bound private onChangeEntityFilter(\n        selected: FilterDropdownOption | null\n    ): void {\n        if (selected) {\n            const option = selected\n            this.set({ entityFilter: option.value })\n\n            this.manager.logEntitySelectorEvent(\"filterBy\", option.value)\n        }\n    }\n\n    @computed private get filterValue(): FilterDropdownOption {\n        return (\n            this.filterOptions.find(\n                (option) => option.value === this.entityFilter\n            ) ?? this.filterOptions[0]\n        )\n    }\n\n    @computed get shouldShowFilterBar(): boolean {\n        return (\n            this.filterOptions.length > 1 &&\n            this.filterOptions[0].count !== this.filterOptions[1].count\n        )\n    }\n\n    private renderFilterBar(): React.ReactElement {\n        return (\n            <div className=\"entity-selector__filter-bar\">\n                <Dropdown<FilterDropdownOption>\n                    options={this.filterOptions}\n                    onChange={this.onChangeEntityFilter}\n                    value={this.filterValue}\n                    renderTriggerValue={renderFilterTriggerValue}\n                    renderMenuOption={renderFilterMenuOption}\n                    aria-label=\"Filter by type\"\n                />\n            </div>\n        )\n    }\n\n    private renderSearchBar(): React.ReactElement {\n        return (\n            <div className=\"entity-selector__search-bar\">\n                <SearchField\n                    ref={this.searchFieldRef}\n                    value={this.searchInput}\n                    onChange={(value) => this.set({ searchInput: value })}\n                    onClear={() => this.clearSearchInput()}\n                    placeholder={`Search for ${a(\n                        this.searchPlaceholderEntityType\n                    )}`}\n                    trackNote=\"entity_selector_search\"\n                    onKeyDown={this.onSearchKeyDown}\n                />\n            </div>\n        )\n    }\n\n    private renderSortBar(): React.ReactElement {\n        return (\n            <div className=\"entity-selector__sort-bar\">\n                <div className=\"entity-selector__sort-dropdown-and-button\">\n                    <Dropdown<SortDropdownOption>\n                        className=\"entity-selector__sort-dropdown\"\n                        menuClassName=\"entity-selector__sort-dropdown-menu\"\n                        options={this.sortOptions}\n                        onChange={this.onChangeSortSlug}\n                        value={this.sortValue}\n                        isLoading={this.isLoadingExternalSortColumn}\n                        renderTriggerValue={renderSortTriggerValue}\n                        renderMenuOption={renderSortMenuOption}\n                        aria-label=\"Sort by\"\n                    />\n                    <button\n                        type=\"button\"\n                        className=\"sort\"\n                        onClick={this.onChangeSortOrder}\n                    >\n                        <SortIcon\n                            type={this.isSortedByName ? \"text\" : \"numeric\"}\n                            order={this.sortConfig.order}\n                        />\n                    </button>\n                </div>\n            </div>\n        )\n    }\n\n    private renderSearchResults(): React.ReactElement {\n        if (!this.searchResults || this.searchResults.length === 0) {\n            return (\n                <div className=\"entity-search-results grapher_body-3-regular grapher_light\">\n                    There is no data for the {this.entityType.singular} you are\n                    looking for. You may want to try using different keywords or\n                    checking for typos.\n                </div>\n            )\n        }\n\n        return (\n            <ul className=\"entity-search-results\">\n                {this.searchResults.map((entity) => (\n                    <li key={entity.name}>\n                        <SelectableEntity\n                            name={entity.name}\n                            type={this.isMultiMode ? \"checkbox\" : \"radio\"}\n                            checked={this.isEntitySelected(entity)}\n                            bar={this.getBarConfigForEntity(entity)}\n                            onChange={this.onChange}\n                            isLocal={entity.isLocal}\n                            isMuted={this.isEntityMuted(entity.name)}\n                        />\n                    </li>\n                ))}\n            </ul>\n        )\n    }\n\n    private renderAllEntitiesInSingleMode(): React.ReactElement {\n        const { filteredAvailableEntities, shouldShowFilterBar } = this\n\n        return (\n            <>\n                {shouldShowFilterBar && this.renderFilterBar()}\n                <ul className={cx({ \"hide-top-border\": shouldShowFilterBar })}>\n                    {filteredAvailableEntities.map((entity) => (\n                        <li key={entity.name}>\n                            <SelectableEntity\n                                name={entity.name}\n                                type=\"radio\"\n                                checked={this.isEntitySelected(entity)}\n                                bar={this.getBarConfigForEntity(entity)}\n                                onChange={this.onChange}\n                                isLocal={entity.isLocal}\n                                isMuted={this.isEntityMuted(entity.name)}\n                            />\n                        </li>\n                    ))}\n                </ul>\n            </>\n        )\n    }\n\n    @computed private get selectedSortColumn(): CoreColumn | undefined {\n        const { sortConfig } = this\n        if (this.isSortedByName) return undefined\n        return this.interpolatedSortColumnsBySlug[sortConfig.slug]\n    }\n\n    @computed private get selectedSortColumnMaxValue(): number | undefined {\n        const { selectedSortColumn, endTime } = this\n        if (!selectedSortColumn) return undefined\n        const time = this.toColumnCompatibleTime(endTime, selectedSortColumn)\n        const values = selectedSortColumn.valuesByTime.get(time)\n        return _.max(values)\n    }\n\n    @computed private get barScale(): ScaleLinear<number, number> {\n        return scaleLinear()\n            .domain([0, this.selectedSortColumnMaxValue ?? 1])\n            .range([0, 1])\n    }\n\n    private getBarConfigForEntity(\n        entity: SearchableEntity\n    ): BarConfig | undefined {\n        const { selectedSortColumn, barScale } = this\n\n        if (!selectedSortColumn) return undefined\n\n        const value = entity.sortColumnValues[selectedSortColumn.slug]\n\n        if (!isFiniteWithGuard(value)) return { formattedValue: \"No data\" }\n\n        const formattedValue =\n            selectedSortColumn.formatValueShortWithAbbreviations(value)\n\n        if (value < 0) return { formattedValue, width: 0 }\n\n        return {\n            formattedValue,\n            width: R.clamp(barScale(value), { min: 0, max: 1 }),\n        }\n    }\n\n    private isEntitySelected(entity: SearchableEntity): boolean {\n        return this.selectionArray.selectedSet.has(entity.name)\n    }\n\n    private renderAllEntitiesInMultiMode(): React.ReactElement {\n        const {\n            filteredAvailableEntities,\n            selectedEntities,\n            shouldShowFilterBar,\n        } = this\n        const { numSelectedEntities, selectedEntityNames } = this.selectionArray\n\n        // having a \"Selection\" and \"Available entities\" section both looks odd\n        // when all entities are currently selected and there are only a few of them\n        const hasFewEntities = filteredAvailableEntities.length < 10\n        const shouldHideAvailableEntities =\n            !shouldShowFilterBar && hasFewEntities && this.allEntitiesSelected\n\n        const availableEntitiesTitle = this.mapConfig.is2dContinentActive()\n            ? `Countries in ${MAP_REGION_LABELS[this.mapConfig.region]}`\n            : `All ${this.entityType.plural}`\n\n        return (\n            <Flipper\n                spring={{ stiffness: 300, damping: 33 }}\n                flipKey={selectedEntityNames.join(\",\")}\n            >\n                <div className=\"entity-section\">\n                    {selectedEntities.length > 0 && (\n                        <Flipped flipId=\"__selection\" translate opacity>\n                            <div className=\"entity-section__header\">\n                                <div className=\"entity-section__title grapher_body-3-regular-italic grapher_light\">\n                                    Selection{\" \"}\n                                    {numSelectedEntities > 0 &&\n                                        `(${numSelectedEntities})`}\n                                </div>\n                                <button type=\"button\" onClick={this.onClear}>\n                                    Clear\n                                </button>\n                            </div>\n                        </Flipped>\n                    )}\n                    <ul>\n                        {selectedEntities.map((entity, entityIndex) => (\n                            <FlippedListItem\n                                index={entityIndex}\n                                key={entity.name}\n                                flipId={`selected_${makeSafeForCSS(\n                                    entity.name\n                                )}`}\n                            >\n                                <SelectableEntity\n                                    name={entity.name}\n                                    type=\"checkbox\"\n                                    checked={true}\n                                    bar={this.getBarConfigForEntity(entity)}\n                                    onChange={this.onChange}\n                                    isLocal={entity.isLocal}\n                                    isMuted={this.isEntityMuted(entity.name)}\n                                />\n                            </FlippedListItem>\n                        ))}\n                    </ul>\n                </div>\n\n                {shouldShowFilterBar && (\n                    <Flipped flipId=\"__filter-bar\" translate opacity>\n                        {this.renderFilterBar()}\n                    </Flipped>\n                )}\n\n                {!shouldHideAvailableEntities && (\n                    <div\n                        className={cx(\"entity-section\", {\n                            \"hide-top-border\": shouldShowFilterBar,\n                        })}\n                    >\n                        {!shouldShowFilterBar && (\n                            <Flipped flipId=\"__available\" translate opacity>\n                                <div className=\"entity-section__title grapher_body-3-regular-italic grapher_light\">\n                                    {availableEntitiesTitle}\n                                </div>\n                            </Flipped>\n                        )}\n\n                        <ul>\n                            {filteredAvailableEntities.map(\n                                (entity, entityIndex) => (\n                                    <FlippedListItem\n                                        index={entityIndex}\n                                        key={entity.name}\n                                        flipId={`available_${makeSafeForCSS(\n                                            entity.name\n                                        )}`}\n                                    >\n                                        <SelectableEntity\n                                            name={entity.name}\n                                            type=\"checkbox\"\n                                            checked={this.isEntitySelected(\n                                                entity\n                                            )}\n                                            bar={this.getBarConfigForEntity(\n                                                entity\n                                            )}\n                                            onChange={this.onChange}\n                                            isLocal={entity.isLocal}\n                                            isMuted={this.isEntityMuted(\n                                                entity.name\n                                            )}\n                                        />\n                                    </FlippedListItem>\n                                )\n                            )}\n                        </ul>\n                    </div>\n                )}\n            </Flipper>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <div className=\"entity-selector\">\n                <OverlayHeader\n                    title={this.title}\n                    onTitleClick={this.onTitleClick}\n                    onDismiss={this.close}\n                />\n\n                {this.renderSearchBar()}\n\n                <div ref={this.scrollableContainer} className=\"scrollable\">\n                    {!this.searchInput &&\n                        this.sortOptions.length > 1 &&\n                        this.renderSortBar()}\n\n                    <div\n                        ref={this.contentRef}\n                        className=\"entity-selector__content\"\n                    >\n                        {this.searchInput\n                            ? this.renderSearchResults()\n                            : this.isMultiMode\n                              ? this.renderAllEntitiesInMultiMode()\n                              : this.renderAllEntitiesInSingleMode()}\n                    </div>\n                </div>\n            </div>\n        )\n    }\n}\n\ntype BarConfig = { formattedValue: string; width?: number }\n\nfunction SelectableEntity({\n    name,\n    checked,\n    type,\n    bar,\n    onChange,\n    isLocal,\n    isMuted,\n}: {\n    name: string\n    checked: boolean\n    type: \"checkbox\" | \"radio\"\n    bar?: BarConfig\n    onChange: (entityName: EntityName) => void\n    isLocal?: boolean\n    isMuted?: boolean\n}) {\n    const Input = {\n        checkbox: Checkbox,\n        radio: RadioButton,\n    }[type]\n\n    const { name: displayName, suffix } = parseLabel(name)\n\n    const locationIcon = (\n        <span className=\"location-icon\">\n            {/* Non-breaking space prevents the icon from wrapping to a new line alone */}\n            {\"\\u00A0\"}\n            <Tippy\n                content=\"Your current location\"\n                theme=\"grapher-explanation--short\"\n                placement=\"top\"\n            >\n                <FontAwesomeIcon icon={faLocationArrow} />\n            </Tippy>\n        </span>\n    )\n\n    const label = (\n        <span>\n            {displayName}\n            {suffix && <span className=\"suffix\"> ({suffix})</span>}\n            {isLocal && locationIcon}\n        </span>\n    )\n\n    return (\n        <div\n            className={cx(\"selectable-entity\", {\n                \"selectable-entity--with-bar\": bar && bar.width !== undefined,\n                \"selectable-entity--muted\": isMuted,\n            })}\n        >\n            {bar && bar.width !== undefined && (\n                <div className=\"bar\" style={{ width: `${bar.width * 100}%` }} />\n            )}\n            <Input\n                label={label}\n                checked={checked}\n                onChange={() => onChange(name)}\n            />\n            {bar && (\n                <span className=\"value grapher_label-1-regular\">\n                    {bar.formattedValue}\n                </span>\n            )}\n        </div>\n    )\n}\n\nfunction FlippedListItem({\n    flipId,\n    index = 0,\n    children,\n}: {\n    flipId: string\n    index?: number\n    children: React.ReactNode\n}) {\n    return (\n        <Flipped\n            flipId={flipId}\n            translate\n            opacity\n            spring={{\n                stiffness: Math.max(300 - index, 180),\n                damping: 33,\n            }}\n        >\n            <li>{children}</li>\n        </Flipped>\n    )\n}\n\nfunction renderSortTriggerValue(\n    option: SortDropdownOption | null\n): React.ReactNode | undefined {\n    if (!option) return undefined\n    return (\n        <>\n            <span className=\"label\">\n                <FontAwesomeIcon icon={faArrowRightArrowLeft} size=\"sm\" />\n                {\"Sort by: \"}\n            </span>\n            {option.label}\n            {option.formattedTime && (\n                <span className=\"detail\">, {option.formattedTime}</span>\n            )}\n        </>\n    )\n}\n\nfunction renderSortMenuOption(option: SortDropdownOption): React.ReactNode {\n    return (\n        <>\n            {option.label}\n            {option.formattedTime && (\n                <span className=\"detail\">, {option.formattedTime}</span>\n            )}\n        </>\n    )\n}\n\nfunction renderFilterTriggerValue(\n    option: FilterDropdownOption | null\n): React.ReactNode | undefined {\n    if (!option) return undefined\n    return (\n        <>\n            <span className=\"label\">\n                <FontAwesomeIcon icon={faFilter} size=\"sm\" />\n                {\"Filter by type: \"}\n            </span>\n            {option.label} <span className=\"detail\">({option.count})</span>\n        </>\n    )\n}\n\nfunction renderFilterMenuOption(option: FilterDropdownOption): React.ReactNode {\n    return (\n        <>\n            {option.label} <span className=\"detail\">({option.count})</span>\n        </>\n    )\n}\n\nfunction getTitleForSortColumnLabel(column: CoreColumn): string {\n    return column.titlePublicOrDisplayName.title\n}\n\n/** Determines if a column matches a specific external sort indicator type */\nfunction isExternalSortIndicatorMatch(\n    key: NumericCatalogKey,\n    column: CoreColumn\n): boolean {\n    // Trivial if the slugs match\n    if (column.def.slug === columnDefsByCatalogKey[key].slug) return true\n\n    return match(key)\n        .with(\"population\", () => {\n            // Check the catalog path for population data\n            return isPopulationVariableETLPath(\n                (column.def as OwidColumnDef)?.catalogPath ?? \"\"\n            )\n        })\n        .with(\"gdp\", () => {\n            // Check the label for GDP per capita data\n            const label = getTitleForSortColumnLabel(column)\n            // Matches \"gdp per capita\" and content within parentheses\n            const potentialMatches =\n                label.match(/\\(.*?\\)|(\\bgdp per capita\\b)/gi) ?? []\n            // Filter for \"gdp per capita\" matches that are not within parentheses\n            const matches = potentialMatches.filter(\n                (match) => !match.includes(\"(\")\n            )\n            return matches.length > 0\n        })\n        .exhaustive()\n}\n","import * as React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { Modal } from \"./Modal\"\nimport {\n    EntitySelector,\n    EntitySelectorManager,\n} from \"../entitySelector/EntitySelector\"\nimport { DEFAULT_GRAPHER_BOUNDS } from \"../core/GrapherConstants\"\n\nexport interface EntitySelectorModalManager extends EntitySelectorManager {\n    isEntitySelectorModalOrDrawerOpen?: boolean\n    frameBounds?: Bounds\n}\n\n@observer\nexport class EntitySelectorModal extends React.Component<{\n    manager: EntitySelectorModalManager\n}> {\n    constructor(props: { manager: EntitySelectorModalManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get manager(): EntitySelectorModalManager {\n        return this.props.manager\n    }\n\n    @computed private get frameBounds(): Bounds {\n        return this.manager.frameBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get modalBounds(): Bounds {\n        const maxWidth = 366\n        const padWidth = Math.max(16, (this.frameBounds.width - maxWidth) / 2)\n        return this.frameBounds.padHeight(16).padWidth(padWidth)\n    }\n\n    @action.bound onDismiss(): void {\n        this.manager.isEntitySelectorModalOrDrawerOpen = false\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <Modal\n                onDismiss={this.onDismiss}\n                bounds={this.modalBounds}\n                isHeightFixed={true}\n            >\n                <EntitySelector\n                    manager={this.manager}\n                    onDismiss={this.onDismiss}\n                    autoFocus={true}\n                />\n            </Modal>\n        )\n    }\n}\n","import * as React from \"react\"\nimport cx from \"classnames\"\nimport { Tabs as AriaTabs, TabList, Tab } from \"react-aria-components\"\n\nexport interface TabItem<TabKey extends string = string> {\n    key: TabKey\n    element: React.ReactElement\n    buttonProps?: {\n        className?: string\n        ariaLabel?: string\n        dataTrackNote?: string\n        ref?: React.RefObject<HTMLDivElement | null>\n    }\n}\n\nexport const Tabs = <TabKey extends string = string>({\n    items,\n    selectedKey,\n    onChange,\n    className,\n    variant = \"default\",\n}: {\n    items: TabItem<TabKey>[]\n    selectedKey: TabKey\n    onChange: (key: TabKey) => void\n    className?: string\n    variant?: \"default\" | \"slim\" | \"stretch\" | \"scroll\"\n}) => {\n    return (\n        <AriaTabs\n            selectedKey={selectedKey}\n            onSelectionChange={(key) => {\n                if (typeof key === \"string\") onChange(key as TabKey)\n            }}\n        >\n            <TabList\n                className={cx(\"Tabs\", \"Tabs--variant-\" + variant, className)}\n            >\n                {items.map((item) => (\n                    <Tab\n                        key={item.key}\n                        id={item.key}\n                        data-track-note={item.buttonProps?.dataTrackNote}\n                        aria-label={item.buttonProps?.ariaLabel}\n                        className={cx(\"Tabs__Tab\", item.buttonProps?.className)}\n                        ref={item.buttonProps?.ref}\n                    >\n                        {item.element}\n                    </Tab>\n                ))}\n            </TabList>\n        </AriaTabs>\n    )\n}\n","export const DownloadIconFullDataset = () => (\n    <svg\n        width=\"34\"\n        height=\"24\"\n        viewBox=\"0 0 34 24\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n    >\n        <rect y=\"1\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect x=\"12\" y=\"1\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect x=\"24\" y=\"1\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect y=\"9\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect x=\"12\" y=\"9\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect x=\"24\" y=\"9\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect y=\"17\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect x=\"12\" y=\"17\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect x=\"24\" y=\"17\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n    </svg>\n)\n\nexport const DownloadIconSelected = () => (\n    <svg\n        width=\"34\"\n        height=\"24\"\n        viewBox=\"0 0 34 24\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n    >\n        <rect y=\"1\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect x=\"12\" y=\"1\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect x=\"24\" y=\"1\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#A4B6CA\" />\n        <rect y=\"9\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect x=\"12\" y=\"9\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#426591\" />\n        <rect x=\"24\" y=\"9\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#A4B6CA\" />\n        <rect y=\"17\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#A4B6CA\" />\n        <rect x=\"12\" y=\"17\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#A4B6CA\" />\n        <rect x=\"24\" y=\"17\" width=\"10\" height=\"6\" rx=\"3\" fill=\"#A4B6CA\" />\n    </svg>\n)\n","import * as _ from \"lodash-es\"\nimport { useCallback, useMemo, useState } from \"react\"\nimport * as React from \"react\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport cx from \"classnames\"\nimport {\n    Bounds,\n    canWriteToClipboard,\n    fetchWithTimeout,\n    formatValue,\n    getOriginAttributionFragments,\n    getPhraseForProcessingLevel,\n    triggerDownloadFromBlob,\n    triggerDownloadFromUrl,\n} from \"@ourworldindata/utils\"\nimport {\n    Checkbox,\n    CodeSnippet,\n    OverlayHeader,\n    RadioButton,\n} from \"@ourworldindata/components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faCircleExclamation,\n    faCopy,\n    faDownload,\n    faInfoCircle,\n    faSpinner,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    type GrapherQueryParams,\n    OwidColumnDef,\n    OwidOrigin,\n    QueryParams,\n    type GrapherImageDownloadEvent,\n} from \"@ourworldindata/types\"\nimport {\n    BlankOwidTable,\n    OwidTable,\n    CoreColumn,\n} from \"@ourworldindata/core-table\"\nimport { Modal } from \"./Modal\"\nimport { GrapherRasterizeFn } from \"../captionedChart/StaticChartRasterizer.js\"\nimport { TabItem, Tabs } from \"../tabs/Tabs.js\"\nimport {\n    DownloadIconFullDataset,\n    DownloadIconSelected,\n} from \"./DownloadIcons.js\"\nimport { match } from \"ts-pattern\"\nimport * as R from \"remeda\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    DEFAULT_GRAPHER_BOUNDS_SQUARE,\n    GrapherModal,\n} from \"../core/GrapherConstants\"\n\nexport interface DownloadModalManager {\n    displaySlug: string\n    rasterize: GrapherRasterizeFn\n    staticBounds?: Bounds\n    staticBoundsWithDetails?: Bounds\n    baseUrl?: string\n    queryStr?: string\n    externalQueryParams?: QueryParams\n    tableForDownload: OwidTable\n    filteredTableForDownload: OwidTable\n    yColumnsFromDimensionsOrSlugsOrAuto?: CoreColumn[]\n    detailsOrderedByReference?: string[]\n    activeModal?: GrapherModal\n    frameBounds?: Bounds\n    captionedChartBounds?: Bounds\n    isOnChartOrMapTab?: boolean\n    isOnArchivalPage?: boolean\n    hasArchivedPage?: boolean\n    showAdminControls?: boolean\n    isWikimediaExport?: boolean\n    isPublished?: boolean\n    inputColumnSlugs?: string[]\n    isServerSideDownloadAvailable?: boolean\n    logImageDownloadEvent?: (action: GrapherImageDownloadEvent) => void\n    activeDownloadModalTab: DownloadModalTabName\n    isOnMapTab?: boolean\n    isOnChartTab?: boolean\n    isOnTableTab?: boolean\n}\n\ninterface DownloadModalProps {\n    manager: DownloadModalManager\n}\n\nexport enum DownloadModalTabName {\n    \"Vis\" = \"Vis\",\n    \"Data\" = \"Data\",\n}\n\n@observer\nexport class DownloadModal extends React.Component<DownloadModalProps> {\n    constructor(props: DownloadModalProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    private get tabItems(): TabItem<DownloadModalTabName>[] {\n        return [\n            {\n                key: DownloadModalTabName.Vis,\n                element: <>Visualization</>,\n                buttonProps: {\n                    dataTrackNote: \"chart_download_modal_tab_visualization\",\n                },\n            },\n            {\n                key: DownloadModalTabName.Data,\n                element: <>Data</>,\n                buttonProps: {\n                    dataTrackNote: \"chart_download_modal_tab_data\",\n                },\n            },\n        ]\n    }\n\n    @computed private get frameBounds() {\n        return this.props.manager.frameBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get modalBounds() {\n        const maxWidth = 640\n        const padWidth = Math.max(16, (this.frameBounds.width - maxWidth) / 2)\n        return this.frameBounds.padHeight(16).padWidth(padWidth)\n    }\n\n    @computed private get activeTab(): DownloadModalTabName {\n        return this.props.manager.activeDownloadModalTab\n    }\n\n    @computed private get isVisTabActive() {\n        return this.activeTab === DownloadModalTabName.Vis\n    }\n\n    @computed private get isDataTabActive() {\n        return this.activeTab === DownloadModalTabName.Data\n    }\n\n    @action.bound private onTabChange(key: DownloadModalTabName) {\n        this.props.manager.activeDownloadModalTab = key\n    }\n\n    @action.bound private onDismiss() {\n        this.props.manager.activeModal = undefined\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <Modal\n                bounds={this.modalBounds}\n                onDismiss={this.onDismiss}\n                alignVertical=\"top\"\n            >\n                <div\n                    className=\"download-modal-content\"\n                    style={{ maxHeight: this.modalBounds.height }}\n                >\n                    <OverlayHeader\n                        title=\"Download\"\n                        onDismiss={this.onDismiss}\n                    />\n                    <div className=\"download-modal__tab-list\">\n                        <Tabs\n                            variant=\"slim\"\n                            items={this.tabItems}\n                            selectedKey={this.activeTab}\n                            onChange={this.onTabChange}\n                        />\n                    </div>\n\n                    {/* Tabs */}\n                    {/**\n                     * We only hide the inactive tab with display: none and don't unmount it,\n                     * so that the tab state (selected radio buttons, etc) is preserved\n                     * when switching between tabs.\n                     */}\n                    <div className=\"download-modal__tab-panel\" role=\"tabpanel\">\n                        <div\n                            className=\"download-modal__tab-content\"\n                            style={{\n                                display: this.isVisTabActive\n                                    ? undefined\n                                    : \"none\",\n                            }}\n                            role=\"tab\"\n                            aria-hidden={!this.isVisTabActive}\n                        >\n                            <DownloadModalVisTab {...this.props} />\n                        </div>\n                        <div\n                            className=\"download-modal__tab-content\"\n                            style={{\n                                display: this.isDataTabActive\n                                    ? undefined\n                                    : \"none\",\n                            }}\n                            role=\"tab\"\n                            aria-hidden={!this.isDataTabActive}\n                        >\n                            <DownloadModalDataTab {...this.props} />\n                        </div>\n                    </div>\n                </div>\n            </Modal>\n        )\n    }\n}\n\n@observer\nexport class DownloadModalVisTab extends React.Component<DownloadModalProps> {\n    constructor(props: DownloadModalProps) {\n        super(props)\n\n        makeObservable<\n            DownloadModalVisTab,\n            | \"svgBlob\"\n            | \"svgPreviewUrl\"\n            | \"pngBlob\"\n            | \"pngPreviewUrl\"\n            | \"canWriteToClipboard\"\n            | \"isReady\"\n            | \"shouldIncludeDetails\"\n        >(this, {\n            svgBlob: observable,\n            svgPreviewUrl: observable,\n            pngBlob: observable,\n            pngPreviewUrl: observable,\n            canWriteToClipboard: observable,\n            isReady: observable,\n            shouldIncludeDetails: observable,\n        })\n    }\n\n    @computed private get staticBounds(): Bounds {\n        return this.manager.staticBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get captionedChartBounds(): Bounds {\n        return this.manager.captionedChartBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get isExportingSquare(): boolean {\n        return (\n            this.manager.staticBounds?.width ===\n            this.manager.staticBounds?.height\n        )\n    }\n\n    @computed private get isWikimediaExport(): boolean {\n        return this.manager.isWikimediaExport ?? false\n    }\n\n    @computed private get targetBounds(): Bounds {\n        if (this.shouldIncludeDetails)\n            return this.manager.staticBoundsWithDetails ?? this.staticBounds\n        else return this.staticBounds\n    }\n\n    @computed private get targetWidth(): number {\n        return this.targetBounds.width\n    }\n\n    @computed private get targetHeight(): number {\n        return this.targetBounds.height\n    }\n\n    @computed private get manager(): DownloadModalManager {\n        return this.props.manager\n    }\n\n    private svgBlob: Blob | undefined = undefined\n    private svgPreviewUrl: string | undefined = undefined\n\n    private pngBlob: Blob | undefined = undefined\n    private pngPreviewUrl: string | undefined = undefined\n    private canWriteToClipboard: boolean = false\n\n    private isReady: boolean = false\n\n    private shouldIncludeDetails = true\n\n    @action.bound private export(): void {\n        // render the graphic then cache data-urls for display & blobs for downloads\n        this.manager\n            .rasterize({ includeDetails: this.shouldIncludeDetails })\n            .then(({ url, blob, svgUrl, svgBlob }) => {\n                this.pngPreviewUrl = url\n                this.pngBlob = blob\n                this.svgPreviewUrl = svgUrl\n                this.svgBlob = svgBlob\n                this.markAsReady()\n            })\n            .catch((err) => {\n                console.error(JSON.stringify(err))\n                this.markAsReady()\n            })\n    }\n\n    @action.bound private markAsReady(): void {\n        this.isReady = true\n    }\n\n    @action.bound private reset(): void {\n        this.isReady = false\n    }\n\n    @computed private get fallbackPngUrl(): string {\n        return `${this.manager.baseUrl || \"\"}.png${this.manager.queryStr || \"\"}`\n    }\n    @computed private get baseFilename(): string {\n        return this.manager.displaySlug\n    }\n\n    @action.bound private onPngDownload(): void {\n        const filename = this.baseFilename + \".png\"\n        if (this.pngBlob) {\n            triggerDownloadFromBlob(filename, this.pngBlob)\n        } else {\n            triggerDownloadFromUrl(filename, this.fallbackPngUrl)\n        }\n        this.manager.logImageDownloadEvent?.(\"chart_download_png\")\n    }\n\n    @action.bound private onSvgDownload(): void {\n        const filename = this.baseFilename + \".svg\"\n        if (this.svgBlob) {\n            triggerDownloadFromBlob(filename, this.svgBlob)\n        }\n        this.manager.logImageDownloadEvent?.(\"chart_download_svg\")\n    }\n\n    @action.bound private toggleExportFormat(): void {\n        this.manager.staticBounds = this.isExportingSquare\n            ? DEFAULT_GRAPHER_BOUNDS\n            : DEFAULT_GRAPHER_BOUNDS_SQUARE\n    }\n\n    @action.bound private toggleExportForUseOnWikimedia(): void {\n        this.manager.isWikimediaExport = !this.isWikimediaExport\n    }\n\n    @action.bound private toggleIncludeDetails(): void {\n        this.shouldIncludeDetails = !this.shouldIncludeDetails\n    }\n\n    @computed private get hasDetails(): boolean {\n        return !_.isEmpty(this.manager.detailsOrderedByReference)\n    }\n\n    @computed private get showExportControls(): boolean {\n        return this.hasDetails || !!this.manager.showAdminControls\n    }\n\n    @computed private get showInteractiveEmbedTip(): boolean {\n        return !!(this.manager.isOnArchivalPage || this.manager.hasArchivedPage)\n    }\n\n    @action.bound openEmbedDialog(): void {\n        this.manager.activeModal = GrapherModal.Embed\n    }\n\n    @computed get showCopyPngButton(): boolean {\n        return !!this.manager.showAdminControls && this.canWriteToClipboard\n    }\n\n    @action.bound async onCopyPng(): Promise<void> {\n        try {\n            if (!this.pngBlob) return\n            await navigator.clipboard.write([\n                new ClipboardItem({ \"image/png\": this.pngBlob }),\n            ])\n        } catch (err) {\n            console.error(\"couldn't copy PNG to clipboard\", err)\n        }\n    }\n\n    override componentDidMount(): void {\n        queueMicrotask(() => this.export())\n\n        void canWriteToClipboard().then(\n            (canWriteToClipboard) =>\n                (this.canWriteToClipboard = canWriteToClipboard)\n        )\n    }\n\n    override render(): React.ReactElement {\n        const {\n            manager,\n            svgPreviewUrl,\n            captionedChartBounds,\n            targetWidth,\n            targetHeight,\n            showInteractiveEmbedTip,\n        } = this\n        const pngPreviewUrl = this.pngPreviewUrl || this.fallbackPngUrl\n        const isRegenerating = !this.isReady\n\n        let previewWidth: number\n        let previewHeight: number\n        const boundScalar = 0.17\n        if (\n            captionedChartBounds.width / captionedChartBounds.height >\n            targetWidth / targetHeight\n        ) {\n            previewHeight = Math.min(\n                72,\n                captionedChartBounds.height * boundScalar\n            )\n            previewWidth = (targetWidth / targetHeight) * previewHeight\n        } else {\n            previewWidth = Math.min(\n                102,\n                captionedChartBounds.width * boundScalar\n            )\n            previewHeight = (targetHeight / targetWidth) * previewWidth\n        }\n\n        const imageStyle = {\n            minWidth: previewWidth,\n            minHeight: previewHeight,\n            maxWidth: previewWidth,\n            maxHeight: previewHeight,\n            opacity: this.isReady ? 1 : 0,\n        }\n\n        return (\n            <div>\n                {manager.isOnChartOrMapTab ? (\n                    <div className=\"download-modal__vis-section\">\n                        {showInteractiveEmbedTip && (\n                            <Callout\n                                title=\"Did you know?\"\n                                icon={<FontAwesomeIcon icon={faInfoCircle} />}\n                            >\n                                Instead of downloading a static image of this\n                                chart, you can also{\" \"}\n                                <a\n                                    onClick={this.openEmbedDialog}\n                                    data-track-note=\"chart_download_click_interactive_embed\"\n                                >\n                                    embed an interactive version\n                                </a>\n                                .{\" \"}\n                                {this.manager.isOnArchivalPage ? (\n                                    <>\n                                        The interactive version will stay fixed\n                                        over time and will always show the same\n                                        chart and data you are seeing now.\n                                    </>\n                                ) : (\n                                    <>\n                                        You can choose between a live embed that\n                                        always reflects our latest data updates,\n                                        or a snapshot embed that stays fixed at\n                                        the time you created it.\n                                    </>\n                                )}\n                            </Callout>\n                        )}\n                        <div>\n                            {this.showCopyPngButton && (\n                                <button\n                                    className=\"download-modal__download-button download-modal__download-button--variant-copy\"\n                                    onClick={this.onCopyPng}\n                                    disabled={isRegenerating}\n                                >\n                                    <FontAwesomeIcon icon={faCopy} />\n                                    Copy PNG\n                                </button>\n                            )}\n                            <DownloadButton\n                                title=\"Image (PNG)\"\n                                description=\"Suitable for most uses, widely compatible.\"\n                                previewImageUrl={pngPreviewUrl}\n                                onClick={this.onPngDownload}\n                                imageStyle={imageStyle}\n                                isRegenerating={isRegenerating}\n                            />\n                            <DownloadButton\n                                title=\"Vector graphic (SVG)\"\n                                description=\"For high quality prints, or further editing the chart in graphics software.\"\n                                previewImageUrl={svgPreviewUrl}\n                                onClick={this.onSvgDownload}\n                                imageStyle={imageStyle}\n                                isRegenerating={isRegenerating}\n                            />\n                        </div>\n                        {this.showExportControls && (\n                            <>\n                                {this.hasDetails && (\n                                    <Checkbox\n                                        checked={this.shouldIncludeDetails}\n                                        label=\"Include terminology definitions at bottom of chart\"\n                                        onChange={(): void => {\n                                            this.reset()\n                                            this.toggleIncludeDetails()\n                                            this.export()\n                                        }}\n                                    />\n                                )}\n                                {this.manager.showAdminControls && (\n                                    <Checkbox\n                                        checked={this.isExportingSquare}\n                                        label=\"Square format\"\n                                        onChange={action((): void => {\n                                            this.reset()\n                                            this.toggleExportFormat()\n                                            this.export()\n                                        })}\n                                    />\n                                )}\n                                {this.manager.showAdminControls && (\n                                    <Checkbox\n                                        checked={this.isWikimediaExport}\n                                        label=\"Optimize SVG for Wikipedia upload\"\n                                        onChange={action((): void => {\n                                            this.reset()\n                                            this.toggleExportForUseOnWikimedia()\n\n                                            this.export()\n                                        })}\n                                    />\n                                )}\n                            </>\n                        )}\n                    </div>\n                ) : (\n                    <Callout\n                        title=\"Chart can't currently be exported to image\"\n                        icon={<FontAwesomeIcon icon={faCircleExclamation} />}\n                    >\n                        Try switching to the \"Chart\" or \"Map\" tab to download a\n                        static image of this chart.\n                        <br />\n                        You can also download the data used in this chart by\n                        navigating to the \"Data\" tab.\n                    </Callout>\n                )}\n            </div>\n        )\n    }\n}\n\nenum CsvDownloadType {\n    Full = \"full\",\n    CurrentSelection = \"current_selection\",\n}\n\ninterface DataDownloadContextBase {\n    slug: string\n    searchParams: URLSearchParams\n    externalSearchParams: URLSearchParams\n    baseUrl: string\n}\n\ninterface DataDownloadContextServerSide extends DataDownloadContextBase {\n    // Configurable options\n    csvDownloadType: CsvDownloadType\n    shortColNames: boolean\n}\n\ninterface DataDownloadContextClientSide extends DataDownloadContextBase {\n    // Configurable options\n    csvDownloadType: CsvDownloadType\n    shortColNames: boolean\n\n    // Only needed for local CSV generation\n    fullTable: OwidTable\n    filteredTable: OwidTable\n    inputColumnSlugs: string[] | undefined\n}\n\nconst createCsvBlobLocally = async (ctx: DataDownloadContextClientSide) => {\n    const downloadTable =\n        ctx.csvDownloadType === CsvDownloadType.Full\n            ? ctx.fullTable\n            : ctx.filteredTable\n    const csv = downloadTable.toPrettyCsv({ useShortNames: ctx.shortColNames })\n\n    return new Blob([csv], { type: \"text/csv;charset=utf-8\" })\n}\n\nconst getDownloadSearchParams = (ctx: DataDownloadContextServerSide) => {\n    const searchParams = new URLSearchParams()\n    searchParams.set(\"v\", \"1\") // API versioning\n    searchParams.set(\n        \"csvType\",\n        match(ctx.csvDownloadType)\n            .with(CsvDownloadType.CurrentSelection, () => \"filtered\")\n            .with(CsvDownloadType.Full, () => \"full\")\n            .exhaustive()\n    )\n    searchParams.set(\"useColumnShortNames\", ctx.shortColNames.toString())\n\n    const otherParams =\n        ctx.csvDownloadType === CsvDownloadType.CurrentSelection\n            ? // Append all the current grapher settings, e.g.\n              // ?time=2020&selection=~USA + mdim dimensions.\n              ctx.searchParams\n            : // Use the base grapher settings + mdim dimensions.\n              ctx.externalSearchParams\n\n    const SEARCH_PARAMS_TO_EXCLUDE: string[] = [\n        \"overlay\", // always present when the modal is open, but just polluting the download URL\n    ] satisfies (keyof GrapherQueryParams)[]\n\n    for (const [key, value] of otherParams.entries()) {\n        if (SEARCH_PARAMS_TO_EXCLUDE.includes(key)) continue\n\n        searchParams.set(key, value)\n    }\n    return searchParams\n}\n\nconst getDownloadUrl = (\n    extension: \"csv\" | \"metadata.json\" | \"zip\",\n    ctx: DataDownloadContextServerSide\n) => {\n    const searchParams = getDownloadSearchParams(ctx)\n    const searchStr = searchParams.toString().replaceAll(\"%7E\", \"~\")\n    return `${ctx.baseUrl}.${extension}` + (searchStr ? `?${searchStr}` : \"\")\n}\n\nexport const getNonRedistributableInfo = (\n    table: OwidTable | undefined\n): { cols: CoreColumn[] | undefined; sourceLinks: string[] | undefined } => {\n    if (!table) return { cols: undefined, sourceLinks: undefined }\n\n    const nonRedistributableCols = table.columnsAsArray.filter(\n        (col) => col.def.nonRedistributable\n    )\n\n    if (!nonRedistributableCols.length)\n        return { cols: undefined, sourceLinks: undefined }\n\n    const sourceLinks = nonRedistributableCols\n        .map((col) => {\n            const def = col.def\n            return def.sourceLink ?? def.origins?.[0]?.urlMain\n        })\n        .filter((link): link is string => !!link)\n\n    return { cols: nonRedistributableCols, sourceLinks: _.uniq(sourceLinks) }\n}\n\nconst CodeExamplesBlock = (props: { csvUrl: string; metadataUrl: string }) => {\n    const code = {\n        \"Excel / Google Sheets\": `=IMPORTDATA(\"${props.csvUrl}\")`,\n        \"Python with Pandas\": `import pandas as pd\nimport requests\n\n# Fetch the data.\ndf = pd.read_csv(\"${props.csvUrl}\", storage_options = {'User-Agent': 'Our World In Data data fetch/1.0'})\n\n# Fetch the metadata\nmetadata = requests.get(\"${props.metadataUrl}\").json()`,\n        R: `library(jsonlite)\n\n# Fetch the data\ndf <- read.csv(\"${props.csvUrl}\")\n\n# Fetch the metadata\nmetadata <- fromJSON(\"${props.metadataUrl}\")`,\n        Stata: `import delimited \"${props.csvUrl}\", encoding(\"utf-8\") clear`,\n    }\n\n    return (\n        <div className=\"download-modal__data-section\">\n            <div className=\"download-modal__heading-with-caption\">\n                <h3 className=\"grapher_h3-semibold\">Code examples</h3>\n                <p className=\"grapher_label-2-regular\">\n                    Examples of how to load this data into different data\n                    analysis tools.\n                </p>\n            </div>\n            <div className=\"download-modal__code-blocks\">\n                {Object.entries(code).map(([name, snippet]) => (\n                    <div key={name}>\n                        <h4 className=\"grapher_body-2-medium\">{name}</h4>\n                        <CodeSnippet code={snippet} />\n                    </div>\n                ))}\n            </div>\n        </div>\n    )\n}\n\nconst SourceAndCitationSection = ({ table }: { table?: OwidTable }) => {\n    // Sources can come either from origins (new format) or from the source field of the column (old format)\n    const origins =\n        table?.defs\n            .flatMap((def) => def.origins ?? [])\n            ?.filter((o) => o !== undefined) ?? []\n\n    const otherSources =\n        table?.columnsAsArray\n            .map((col) => col.source)\n            .filter((s) => s !== undefined && s.dataPublishedBy !== undefined)\n            .map(\n                (s): OwidOrigin => ({\n                    producer: s.dataPublishedBy,\n                    urlMain: s.link,\n                })\n            ) ?? []\n\n    const originsUniq = _.uniqBy(\n        [...origins, ...otherSources],\n        (o) => o.urlMain ?? o.datePublished\n    )\n\n    const attributions = getOriginAttributionFragments(originsUniq)\n\n    const sourceLinks = R.zip(attributions, originsUniq).map(\n        ([attribution, origin]) => {\n            const link = origin?.urlMain\n\n            if (link)\n                return (\n                    <li key={link}>\n                        <a href={link}>{attribution}</a>\n                    </li>\n                )\n            else return <li key={attribution}>{attribution}</li>\n        }\n    )\n\n    // Find the highest processing level of all columns\n    const owidProcessingLevel = table?.columnsAsArray\n        .map((col) => col.def.owidProcessingLevel)\n        .reduce((prev, curr) => {\n            if (prev === \"major\" || curr === \"major\") return \"major\" as const\n            if (prev === \"minor\" || curr === \"minor\") return \"minor\" as const\n            return undefined\n        }, undefined)\n\n    const sourceIsOwid =\n        attributions.length === 1 &&\n        attributions[0].toLowerCase() === \"our world in data\"\n    const processingLevelPhrase = !sourceIsOwid\n        ? getPhraseForProcessingLevel(owidProcessingLevel)\n        : undefined\n    const fullProcessingPhrase = processingLevelPhrase ? (\n        <>\n            {\" \"}\n            – <i>{processingLevelPhrase} by Our World in Data</i>\n        </>\n    ) : undefined\n\n    return (\n        <div className=\"download-modal__data-section download-modal__sources\">\n            <h3 className=\"grapher_h3-semibold\">Source and citation</h3>\n            {sourceLinks.length > 0 && (\n                <div className=\"download-modal__data-sources\">\n                    <strong>Data sources:</strong>{\" \"}\n                    <ul className=\"download-modal__data-sources-list\">\n                        {sourceLinks}\n                    </ul>\n                    {fullProcessingPhrase}\n                </div>\n            )}\n            <div>\n                <strong>Citation guidance:</strong> Please credit all sources\n                listed above. Data provided by third-party sources through Our\n                World in Data remains subject to the original{\" \"}\n                {sourceLinks.length === 1 ? \"provider's\" : \"providers'\"} license\n                terms.\n            </div>\n        </div>\n    )\n}\n\nconst ApiAndCodeExamplesSection = (props: {\n    downloadCtxBase: DataDownloadContextBase\n    firstYColDef?: OwidColumnDef\n}) => {\n    const [onlyVisible, setOnlyVisible] = useState(false)\n    const [shortColNames, setShortColNames] = useState(true)\n\n    const exLongName = props.firstYColDef?.name\n    const exShortName = props.firstYColDef?.shortName\n\n    // Some charts, like pre-ETL ones or csv-based explorers, don't have short names available for their variables\n    const shortNamesAvailable = !!exShortName\n\n    const downloadCtx: DataDownloadContextServerSide = useMemo(\n        () => ({\n            ...props.downloadCtxBase,\n            csvDownloadType: onlyVisible\n                ? CsvDownloadType.CurrentSelection\n                : CsvDownloadType.Full,\n            shortColNames,\n        }),\n        [props.downloadCtxBase, onlyVisible, shortColNames]\n    )\n\n    const csvUrl = useMemo(\n        () => getDownloadUrl(\"csv\", downloadCtx),\n        [downloadCtx]\n    )\n    const metadataUrl = useMemo(\n        () => getDownloadUrl(\"metadata.json\", downloadCtx),\n        [downloadCtx]\n    )\n\n    return (\n        <>\n            <div className=\"download-modal__data-section\">\n                <div className=\"download-modal__heading-with-caption\">\n                    <h3 className=\"grapher_h3-semibold\">Data API</h3>\n                    <p className=\"grapher_label-2-regular\">\n                        Use these URLs to programmatically access this chart's\n                        data and configure your requests with the options below.{\" \"}\n                        <a\n                            href=\"https://docs.owid.io/projects/etl/api/\"\n                            data-track-note=\"chart_download_modal_api_docs\"\n                        >\n                            Our documentation provides more information\n                        </a>{\" \"}\n                        on how to use the API, and you can find a few code\n                        examples below.\n                    </p>\n                </div>\n\n                <section className=\"download-modal__api-urls\">\n                    <div>\n                        <h4 className=\"grapher_body-2-medium\">\n                            Data URL (CSV format)\n                        </h4>\n                        <CodeSnippet code={csvUrl} />\n                    </div>\n                    <div>\n                        <h4 className=\"grapher_body-2-medium\">\n                            Metadata URL (JSON format)\n                        </h4>\n                        <CodeSnippet code={metadataUrl} />\n                    </div>\n                </section>\n                <section className=\"download-modal__config-list\">\n                    <RadioButton\n                        label=\"Download full data, including all entities and time points\"\n                        group=\"onlyVisible\"\n                        checked={!onlyVisible}\n                        onChange={() => setOnlyVisible(false)}\n                    />\n                    <RadioButton\n                        label=\"Download only the currently selected data visible in the chart\"\n                        group=\"onlyVisible\"\n                        checked={onlyVisible}\n                        onChange={() => setOnlyVisible(true)}\n                    />\n                </section>\n                {shortNamesAvailable && (\n                    <section className=\"download-modal__config-list\">\n                        <div>\n                            <RadioButton\n                                label=\"Long column names\"\n                                group=\"shortColNames\"\n                                checked={!shortColNames}\n                                onChange={() => setShortColNames(false)}\n                            />\n                            <p>\n                                e.g. <code>{exLongName}</code>\n                            </p>\n                        </div>\n                        <div>\n                            <RadioButton\n                                label=\"Shortened column names\"\n                                group=\"shortColNames\"\n                                checked={shortColNames}\n                                onChange={() => setShortColNames(true)}\n                            />\n                            <p>\n                                e.g.{\" \"}\n                                <code style={{ wordBreak: \"break-all\" }}>\n                                    {exShortName}\n                                </code>\n                            </p>\n                        </div>\n                    </section>\n                )}\n            </div>\n\n            <CodeExamplesBlock csvUrl={csvUrl} metadataUrl={metadataUrl} />\n        </>\n    )\n}\n\nexport const DownloadModalDataTab = (props: DownloadModalProps) => {\n    const { yColumnsFromDimensionsOrSlugsOrAuto: yColumns } = props.manager\n\n    const { cols: nonRedistributableCols, sourceLinks } =\n        getNonRedistributableInfo(props.manager.tableForDownload)\n\n    // Server-side download is not necessarily available for all types of charts\n    const serverSideDownloadAvailable =\n        props.manager.isServerSideDownloadAvailable\n\n    const downloadCtx: Omit<\n        DataDownloadContextClientSide,\n        \"csvDownloadType\" | \"shortColNames\"\n    > = useMemo(() => {\n        const externalSearchParams = new URLSearchParams()\n        for (const [key, value] of Object.entries(\n            props.manager.externalQueryParams ?? {}\n        )) {\n            if (value) {\n                externalSearchParams.set(key, value)\n            }\n        }\n        return {\n            slug: props.manager.displaySlug,\n            searchParams: new URLSearchParams(props.manager.queryStr),\n            externalSearchParams,\n            baseUrl:\n                props.manager.baseUrl ??\n                `/grapher/${props.manager.displaySlug}`,\n\n            fullTable: props.manager.tableForDownload ?? BlankOwidTable(),\n            filteredTable:\n                props.manager.filteredTableForDownload ?? BlankOwidTable(),\n            inputColumnSlugs: props.manager.inputColumnSlugs,\n        }\n    }, [\n        props.manager.baseUrl,\n        props.manager.displaySlug,\n        props.manager.queryStr,\n        props.manager.externalQueryParams,\n        props.manager.tableForDownload,\n        props.manager.filteredTableForDownload,\n        props.manager.inputColumnSlugs,\n    ])\n\n    const onDownloadClick = useCallback(\n        async (csvDownloadType: CsvDownloadType) => {\n            const ctx = {\n                ...downloadCtx,\n                csvDownloadType,\n                // Hard code shortColNames here, since it's not obvious that the\n                // radio button to change shortColNames would influence what\n                // this button does. We use long names, since they are always\n                // available and more useful than short names in e.g. Excel,\n                // which is the more likely tool of choice for a casual user,\n                // who doesn't use the API.\n                shortColNames: false,\n            }\n            if (serverSideDownloadAvailable) {\n                try {\n                    const url = getDownloadUrl(\"zip\", ctx)\n                    const response = await fetchWithTimeout(url, 5000, {\n                        method: \"GET\",\n                        headers: { Accept: \"application/zip\" },\n                    })\n\n                    if (!response.ok) {\n                        throw new Error(\n                            `Server download failed: ${response.status}`\n                        )\n                    }\n\n                    const blob = await response.blob()\n                    const fullOrFiltered =\n                        csvDownloadType === CsvDownloadType.Full\n                            ? \"\"\n                            : \".filtered\"\n                    triggerDownloadFromBlob(\n                        ctx.slug + fullOrFiltered + \".zip\",\n                        blob\n                    )\n                } catch (error) {\n                    // Fallback to client-side CSV download\n                    console.warn(\n                        \"Server-side download failed, falling back to client-side\",\n                        error\n                    )\n                    const blob = await createCsvBlobLocally(ctx)\n                    triggerDownloadFromBlob(ctx.slug + \".csv\", blob)\n                }\n            } else {\n                // Direct client-side download\n                void createCsvBlobLocally(ctx).then((blob) => {\n                    triggerDownloadFromBlob(ctx.slug + \".csv\", blob)\n                })\n            }\n        },\n        [downloadCtx, serverSideDownloadAvailable]\n    )\n\n    if (nonRedistributableCols?.length) {\n        return (\n            <div>\n                <Callout\n                    title=\"The data in this chart is not available to download\"\n                    icon={<FontAwesomeIcon icon={faInfoCircle} />}\n                >\n                    The data is published under a license that doesn't allow us\n                    to redistribute it.\n                    {sourceLinks?.length && (\n                        <>\n                            {\" \"}\n                            Please visit the\n                            {sourceLinks.length > 1\n                                ? \" data publishers' websites \"\n                                : \" data publisher's website \"}\n                            for more details:\n                            <ul>\n                                {sourceLinks.map((link, i) => (\n                                    <li key={i}>\n                                        <a href={link}>{link}</a>\n                                    </li>\n                                ))}\n                            </ul>\n                        </>\n                    )}\n                </Callout>\n            </div>\n        )\n    }\n\n    const downloadHelpText = serverSideDownloadAvailable ? (\n        <p className=\"grapher_label-2-regular\">\n            Download the data shown in this chart as a ZIP file containing a CSV\n            file, metadata in JSON format, and a README. The CSV file can be\n            opened in Excel, Google Sheets, and other data analysis tools.\n        </p>\n    ) : (\n        <p className=\"grapher_label-2-regular\">\n            Download the data used to create this chart. The data is provided in\n            CSV format, which can be opened in Excel, Google Sheets, and other\n            data analysis tools.\n        </p>\n    )\n\n    const firstYColDef = yColumns?.[0]?.def as OwidColumnDef | undefined\n\n    const activeView = props.manager.isOnTableTab\n        ? \"table\"\n        : props.manager.isOnMapTab\n          ? \"map\"\n          : \"chart\"\n\n    const fullDataDescription = `Includes all entities and time points`\n    const filteredDataDescription = `Includes only the entities and time points currently visible in the ${activeView}`\n\n    const fullTableRowCountSnippet = makeNumberOfRowsSnippet(\n        downloadCtx.fullTable.numRows\n    )\n    const filteredTableRowCountSnippet = makeNumberOfRowsSnippet(\n        downloadCtx.filteredTable.numRows\n    )\n\n    return (\n        <>\n            <SourceAndCitationSection table={props.manager.tableForDownload} />\n            <div className=\"download-modal__data-section\">\n                <div className=\"download-modal__heading-with-caption\">\n                    <h3 className=\"grapher_h3-semibold\">Quick download</h3>\n                    {downloadHelpText}\n                </div>\n                <div>\n                    <DownloadButton\n                        title=\"Download full data\"\n                        description={\n                            fullDataDescription + fullTableRowCountSnippet\n                        }\n                        icon={<DownloadIconFullDataset />}\n                        onClick={() => onDownloadClick(CsvDownloadType.Full)}\n                        tracking={\n                            \"chart_download_full_data--\" +\n                            (serverSideDownloadAvailable ? \"server\" : \"client\")\n                        }\n                    />\n                    <DownloadButton\n                        title=\"Download displayed data\"\n                        description={\n                            filteredDataDescription +\n                            filteredTableRowCountSnippet\n                        }\n                        icon={<DownloadIconSelected />}\n                        onClick={() =>\n                            onDownloadClick(CsvDownloadType.CurrentSelection)\n                        }\n                        tracking={\n                            \"chart_download_filtered_data--\" +\n                            (serverSideDownloadAvailable ? \"server\" : \"client\")\n                        }\n                    />\n                </div>\n            </div>\n            {serverSideDownloadAvailable && (\n                <ApiAndCodeExamplesSection\n                    downloadCtxBase={downloadCtx}\n                    firstYColDef={firstYColDef}\n                />\n            )}\n        </>\n    )\n}\n\ninterface DownloadButtonProps {\n    title: string\n    description: string\n    onClick: () => void\n    icon?: React.ReactElement\n    previewImageUrl?: string\n    imageStyle?: React.CSSProperties\n    tracking?: string\n    isRegenerating?: boolean\n}\n\nfunction DownloadButton(props: DownloadButtonProps): React.ReactElement {\n    const { onClick, isRegenerating = false } = props\n\n    const [isDownloading, setIsDownloading] = useState(false)\n    const [showLoadingUI, setShowLoadingUI] = useState(false)\n\n    const handleClick = useCallback(async () => {\n        setIsDownloading(true)\n\n        // Delay showing the loading UI to prevent flashing for quick downloads\n        const loadingTimeout = setTimeout(() => setShowLoadingUI(true), 300)\n\n        try {\n            onClick()\n        } finally {\n            clearTimeout(loadingTimeout)\n            setIsDownloading(false)\n            setShowLoadingUI(false)\n        }\n    }, [onClick])\n\n    return (\n        <button\n            className={cx(\"download-modal__download-button\", {\n                \"download-modal__download-button--loading\": showLoadingUI,\n            })}\n            onClick={handleClick}\n            data-track-note={props.tracking}\n            disabled={isDownloading || isRegenerating}\n        >\n            {props.icon && (\n                <div className=\"download-modal__option-icon\">{props.icon}</div>\n            )}\n            {props.previewImageUrl && (\n                <div className=\"download-modal__download-preview-img\">\n                    <img src={props.previewImageUrl} style={props.imageStyle} />\n                </div>\n            )}\n            <div className=\"download-modal__download-button-content\">\n                <h4 className=\"grapher_body-2-semibold\">{props.title}</h4>\n                <div className=\"download-modal__download-button-description-wrapper\">\n                    <p className=\"grapher_label-1-regular download-modal__download-button-description\">\n                        {props.description}\n                    </p>\n                    {showLoadingUI && (\n                        <p className=\"grapher_label-1-regular download-modal__download-button-loading-label\">\n                            Loading…\n                        </p>\n                    )}\n                </div>\n            </div>\n            <div className=\"download-modal__download-icon\">\n                {showLoadingUI ? (\n                    <FontAwesomeIcon icon={faSpinner} spin />\n                ) : (\n                    <FontAwesomeIcon icon={faDownload} />\n                )}\n            </div>\n        </button>\n    )\n}\n\ninterface CalloutProps {\n    title: React.ReactNode\n    icon?: React.ReactElement\n    children: React.ReactNode\n}\n\nfunction Callout(props: CalloutProps): React.ReactElement {\n    return (\n        <div className=\"download-modal__callout\">\n            {props.title && (\n                <h4 className=\"title grapher_body-2-semibold\">\n                    {props.icon}\n                    {props.title}\n                </h4>\n            )}\n            <p className=\"grapher_label-2-regular grapher_light\">\n                {props.children}\n            </p>\n        </div>\n    )\n}\n\nfunction makeNumberOfRowsSnippet(numRows: number): string {\n    if (numRows <= 0) return \" (empty)\"\n    if (numRows === 1) return \" (1 row)\"\n    return ` (${formatValue(numRows, { numDecimalPlaces: 0 })} rows)`\n}\n","import { Fragment } from \"react\"\nimport cx from \"classnames\"\nimport { OwidProcessingLevel, excludeNull } from \"@ourworldindata/utils\"\nimport {\n    makeSource,\n    makeLastUpdated,\n    makeNextUpdate,\n    makeDateRange,\n    makeUnit,\n    makeUnitConversionFactor,\n    makeLinks,\n} from \"@ourworldindata/components\"\nimport * as R from \"remeda\"\n\ninterface SourcesKeyDataTableProps {\n    attribution?: string\n    dateRange?: string\n    lastUpdated?: string\n    nextUpdate?: string\n    unit?: string\n    owidProcessingLevel?: OwidProcessingLevel\n    link?: string\n    unitConversionFactor?: number\n    isEmbeddedInADataPage?: boolean // true by default\n}\n\nexport const SourcesKeyDataTable = (props: SourcesKeyDataTableProps) => {\n    const source = makeSource(props)\n    const lastUpdated = makeLastUpdated(props)\n    const nextUpdate = makeNextUpdate(props)\n    const dateRange = makeDateRange(props)\n    const unit = makeUnit(props)\n    const unitConversionFactor = makeUnitConversionFactor(props)\n    const links = makeLinks(props)\n\n    const keyDataWithoutSource = excludeNull([\n        lastUpdated ? { label: \"Last updated\", content: lastUpdated } : null,\n        nextUpdate\n            ? { label: \"Next expected update\", content: nextUpdate }\n            : null,\n        dateRange ? { label: \"Date range\", content: dateRange } : null,\n        unit ? { label: \"Unit\", content: unit } : null,\n        unitConversionFactor\n            ? {\n                  label: \"Unit conversion factor\",\n                  content: unitConversionFactor,\n              }\n            : null,\n        links ? { label: \"Links\", content: links } : null,\n    ])\n\n    const rows = R.chunk(keyDataWithoutSource, 2)\n\n    return (\n        <div className=\"sources-key-data-table\">\n            {source && (\n                <div className=\"key-data key-data--span\">\n                    <div className=\"key-data__title\">Source</div>\n                    <div className=\"key-data__content\">{source}</div>\n                </div>\n            )}\n            {rows.map(([first, second]) => (\n                <Fragment key={first.label}>\n                    <div\n                        className={cx(\"key-data\", {\n                            \"key-data--span\": !second,\n                        })}\n                    >\n                        <div className=\"key-data__title\">{first.label}</div>\n                        <div className=\"key-data__content\">{first.content}</div>\n                    </div>\n                    {second && (\n                        <div className=\"key-data\">\n                            <div className=\"key-data__title\">\n                                {second.label}\n                            </div>\n                            <div className=\"key-data__content\">\n                                {second.content}\n                            </div>\n                        </div>\n                    )}\n                </Fragment>\n            ))}\n        </div>\n    )\n}\n","import { faArrowDown } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    ExpandableToggle,\n    HtmlOrSimpleMarkdownText,\n    SimpleMarkdownText,\n} from \"@ourworldindata/components\"\n\ninterface SourcesDescriptionsProps {\n    descriptionShort?: string\n    descriptionKey?: string[]\n    descriptionFromProducer?: string\n    attributionShort?: string\n    additionalInfo?: string\n    hasFaqEntries: boolean\n    isEmbeddedInADataPage?: boolean // true by default\n}\n\nexport const SourcesDescriptions = (props: SourcesDescriptionsProps) => {\n    const isEmbeddedInADataPage = props.isEmbeddedInADataPage ?? true\n    return (\n        <div className=\"sources-descriptions\">\n            {props.descriptionKey && props.descriptionKey.length > 0 && (\n                <div className=\"sources-description-key\">\n                    <h3 className=\"sources-description-key__title\">\n                        What you should know about this data\n                    </h3>\n                    <div className=\"sources-description-key__content\">\n                        {props.descriptionKey.length === 1 ? (\n                            <SimpleMarkdownText\n                                text={props.descriptionKey[0].trim()}\n                            />\n                        ) : (\n                            <ul>\n                                {props.descriptionKey.map((text, i) => (\n                                    <li key={i}>\n                                        <SimpleMarkdownText\n                                            text={text.trim()}\n                                            useParagraphs={false}\n                                        />{\" \"}\n                                    </li>\n                                ))}\n                            </ul>\n                        )}\n                    </div>\n                    {isEmbeddedInADataPage && props.hasFaqEntries && (\n                        <a\n                            className=\"sources-description-key__learn-more\"\n                            href=\"#faqs\"\n                        >\n                            Learn more in the FAQs\n                            <FontAwesomeIcon icon={faArrowDown} />\n                        </a>\n                    )}\n                </div>\n            )}\n            <div className=\"expandable-info-blocks\">\n                {props.descriptionFromProducer && (\n                    <ExpandableToggle\n                        label={\n                            props.attributionShort\n                                ? `How is this data described by its producer - ${props.attributionShort}?`\n                                : \"How is this data described by its producer?\"\n                        }\n                        content={\n                            <SimpleMarkdownText\n                                text={props.descriptionFromProducer.trim()}\n                            />\n                        }\n                        isExpandedDefault={\n                            !(props.descriptionShort || props.descriptionKey)\n                        }\n                        isStacked={!!props.additionalInfo}\n                    />\n                )}\n                {props.additionalInfo && (\n                    <ExpandableToggle\n                        label=\"Additional information about this data\"\n                        content={\n                            <HtmlOrSimpleMarkdownText\n                                text={props.additionalInfo.trim()}\n                            />\n                        }\n                    />\n                )}\n            </div>\n        </div>\n    )\n}\n","import * as R from \"remeda\"\nimport cx from \"classnames\"\nimport { useState } from \"react\"\nimport {\n    Button,\n    MenuTrigger,\n    Popover,\n    Menu,\n    MenuItem,\n} from \"react-aria-components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faEllipsisVertical } from \"@fortawesome/free-solid-svg-icons\"\nimport { TabItem, Tabs } from \"./Tabs\"\n\nexport const TabsWithDropdown = <TabKey extends string = string>({\n    items,\n    selectedKey,\n    onChange,\n    numVisibleTabs,\n    className,\n    portalContainer,\n}: {\n    items: TabItem<TabKey>[]\n    selectedKey: TabKey\n    onChange: (key: TabKey) => void\n    numVisibleTabs: number\n    className?: string\n    portalContainer?: HTMLElement\n}) => {\n    const [isOpen, setIsOpen] = useState(false)\n\n    let visibleItems = R.take(items, numVisibleTabs)\n    let hiddenItems = items.filter(\n        (item) => !visibleItems.some((v) => v.key === item.key)\n    )\n\n    // If a hidden item is selected, swap it with the last visible item\n    const selectedHiddenItem = hiddenItems.find(\n        (item) => item.key === selectedKey\n    )\n    if (selectedHiddenItem && visibleItems.length > 0) {\n        const lastVisibleItem = visibleItems[visibleItems.length - 1]\n        visibleItems = R.pipe(\n            visibleItems,\n            R.dropLast(1),\n            R.concat([selectedHiddenItem])\n        )\n        hiddenItems = hiddenItems\n            .filter((item) => item.key !== selectedKey)\n            .concat(lastVisibleItem)\n    }\n\n    const handleSelect = (key: React.Key) => {\n        if (typeof key === \"string\") onChange(key as TabKey)\n        setIsOpen(false)\n    }\n\n    return (\n        <div className={cx(\"TabsWithDropdown\", className)}>\n            <div className=\"TabsWithDropdown__Row\">\n                <Tabs\n                    className=\"TabsWithDropdown__Tabs\"\n                    items={visibleItems}\n                    selectedKey={selectedKey}\n                    onChange={onChange}\n                    variant=\"stretch\"\n                />\n                {hiddenItems.length > 0 && (\n                    <MenuTrigger isOpen={isOpen} onOpenChange={setIsOpen}>\n                        <Button\n                            className=\"TabsWithDropdown__MoreButton\"\n                            aria-label=\"Show more tabs\"\n                            data-open={isOpen || undefined}\n                        >\n                            <FontAwesomeIcon\n                                icon={faEllipsisVertical}\n                                aria-hidden=\"true\"\n                            />\n                            <span>More</span>\n                        </Button>\n                        <Popover\n                            className=\"TabsWithDropdown__Popover\"\n                            placement=\"bottom end\"\n                            UNSTABLE_portalContainer={portalContainer}\n                        >\n                            <Menu\n                                className=\"TabsWithDropdown__Menu\"\n                                onAction={handleSelect}\n                            >\n                                {hiddenItems.map((item) => (\n                                    <MenuItem\n                                        key={item.key}\n                                        id={item.key}\n                                        className={cx(\n                                            \"TabsWithDropdown__MenuItem\",\n                                            item.buttonProps?.className\n                                        )}\n                                        data-track-note={\n                                            item.buttonProps?.dataTrackNote\n                                        }\n                                        aria-label={item.buttonProps?.ariaLabel}\n                                        ref={item.buttonProps?.ref}\n                                    >\n                                        {item.element}\n                                    </MenuItem>\n                                ))}\n                            </Menu>\n                        </Popover>\n                    </MenuTrigger>\n                )}\n            </div>\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    Bounds,\n    getAttributionFragmentsFromVariable,\n    getLastUpdatedFromVariable,\n    getNextUpdateFromVariable,\n    excludeUndefined,\n    DisplaySource,\n    prepareSourcesForDisplay,\n    OwidSource,\n    IndicatorTitleWithFragments,\n    joinTitleFragments,\n    getCitationShort,\n    getCitationLong,\n} from \"@ourworldindata/utils\"\nimport {\n    IndicatorSources,\n    IndicatorProcessing,\n    SimpleMarkdownText,\n    DataCitation,\n    OverlayHeader,\n    CLOSE_BUTTON_WIDTH,\n    CloseButton,\n    LoadingIndicator,\n} from \"@ourworldindata/components\"\nimport * as React from \"react\"\nimport cx from \"classnames\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { faPencilAlt } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { OwidColumnDef } from \"@ourworldindata/types\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport { Modal } from \"./Modal\"\nimport { SourcesKeyDataTable } from \"./SourcesKeyDataTable\"\nimport { SourcesDescriptions } from \"./SourcesDescriptions\"\nimport { TabItem, Tabs } from \"../tabs/Tabs\"\nimport { TabsWithDropdown } from \"../tabs/TabsWithDropdown\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    GrapherModal,\n    isContinentsVariableId,\n} from \"../core/GrapherConstants\"\n\n// keep in sync with variables in SourcesModal.scss\nconst MAX_CONTENT_WIDTH = 640\nconst TAB_PADDING = 8\nconst TAB_FONT_SIZE = 13\nconst TAB_GAP = 8\nconst TAB_TITLE_SPACING = 6\n\nexport interface SourcesModalManager {\n    isReady?: boolean\n    adminBaseUrl?: string\n    inputColumnsWithSources: CoreColumn[]\n    showAdminControls?: boolean\n    activeModal?: GrapherModal\n    frameBounds?: Bounds\n    isEmbeddedInADataPage?: boolean\n    isNarrow?: boolean\n    fontSize?: number\n}\n\ninterface SourcesModalProps {\n    manager: SourcesModalManager\n}\n\n@observer\nexport class SourcesModal extends React.Component<SourcesModalProps> {\n    private container = React.createRef<HTMLDivElement>()\n\n    private activeTabKey = \"\"\n\n    constructor(props: SourcesModalProps) {\n        super(props)\n        makeObservable<SourcesModal, \"activeTabKey\">(this, {\n            activeTabKey: observable,\n        })\n    }\n\n    @action override componentDidMount(): void {\n        this.activeTabKey = this.tabs[0]?.label.key ?? \"\"\n    }\n\n    @action.bound private setActiveTabKey(key: string): void {\n        this.activeTabKey = key\n    }\n\n    @computed private get manager(): SourcesModalManager {\n        return this.props.manager\n    }\n\n    @computed private get frameBounds(): Bounds {\n        return this.manager.frameBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get modalBounds(): Bounds {\n        const maxWidth = MAX_CONTENT_WIDTH + 220\n        // using 15px instead of 16px to make sure the modal fully covers the OWID logo in the header\n        const padWidth = Math.max(15, (this.frameBounds.width - maxWidth) / 2)\n        return this.frameBounds.padHeight(15).padWidth(padWidth)\n    }\n\n    @computed private get showStickyHeader(): boolean {\n        const modalWidth = this.modalBounds.width - 2 * this.modalPadding\n        return (modalWidth - MAX_CONTENT_WIDTH) / 2 < CLOSE_BUTTON_WIDTH + 2\n    }\n\n    @computed private get modalPadding(): number {\n        return 1.5 * (this.manager.fontSize ?? 16)\n    }\n\n    @computed private get editBaseUrl(): string | undefined {\n        if (!this.manager.showAdminControls) return undefined\n        return `${this.props.manager.adminBaseUrl}/admin`\n    }\n\n    @computed private get columns(): CoreColumn[] {\n        return this.manager.inputColumnsWithSources\n    }\n\n    private makeTabLabelString(title: string, attribution?: string): string {\n        return `${title} ${attribution ?? \"\"}`.trim()\n    }\n\n    private makeTabLabelElement(\n        title: string,\n        attribution?: string\n    ): React.ReactElement {\n        return (\n            <>\n                {title}\n                {attribution && (\n                    <span className=\"attribution\">{attribution}</span>\n                )}\n            </>\n        )\n    }\n\n    @computed private get tabs(): {\n        column: CoreColumn\n        label: TabItem\n    }[] {\n        return _.uniqBy(\n            this.columns.map((column) => {\n                const title = column.titlePublicOrDisplayName.title\n                const attribution = joinTitleFragments(\n                    column.titlePublicOrDisplayName.attributionShort,\n                    column.titlePublicOrDisplayName.titleVariant\n                )\n                return {\n                    column,\n                    label: {\n                        key: this.makeTabLabelString(title, attribution),\n                        element: this.makeTabLabelElement(title, attribution),\n                    },\n                }\n            }),\n            // deduplicate tabs by their label\n            (tab) => tab.label.key\n        )\n    }\n\n    @computed private get tabLabels(): TabItem[] {\n        return this.tabs.map(({ label }) => label)\n    }\n\n    @computed private get tabLabelWidths(): number[] {\n        return this.tabs.map(({ column }) => {\n            const title = `${column.titlePublicOrDisplayName.title}`\n            const fragments = joinTitleFragments(\n                column.titlePublicOrDisplayName.attributionShort,\n                column.titlePublicOrDisplayName.titleVariant\n            )\n            return measureTabWidth(title, fragments)\n        })\n    }\n\n    private renderSource(\n        column: CoreColumn | undefined\n    ): React.ReactElement | null {\n        if (!column) return null\n        return (\n            <Source\n                column={column}\n                editBaseUrl={this.editBaseUrl}\n                isEmbeddedInADataPage={\n                    this.manager.isEmbeddedInADataPage ?? false\n                }\n            />\n        )\n    }\n\n    private renderTabs(): React.ReactElement {\n        // Display horizontally scrolling tabs on mobile\n        if (this.manager.isNarrow) {\n            return (\n                <Tabs\n                    className=\"sources-modal-tabs\"\n                    items={this.tabLabels}\n                    selectedKey={this.activeTabKey}\n                    onChange={this.setActiveTabKey}\n                    variant=\"scroll\"\n                />\n            )\n        }\n\n        // Show all tabs if there are 4 or fewer\n        if (this.tabs.length <= 4) {\n            return (\n                <Tabs\n                    className=\"sources-modal-tabs\"\n                    items={this.tabLabels}\n                    selectedKey={this.activeTabKey}\n                    onChange={this.setActiveTabKey}\n                    variant=\"scroll\"\n                />\n            )\n        }\n\n        // Find the subset of tabs that fit into a single line\n        const getVisibleLabels = (labels: TabItem[]): TabItem[] => {\n            // Maximum width available for tabs\n            const maxWidth = Math.min(\n                MAX_CONTENT_WIDTH,\n                this.modalBounds.width - 2 * this.modalPadding\n            )\n\n            // Hardcoded width of the \"More\" button\n            const moreButtonWidth = 74\n\n            const visibleLabels: TabItem[] = []\n            let currentWidth = moreButtonWidth\n            for (const [label, labelWidth] of R.zip(\n                labels,\n                this.tabLabelWidths\n            )) {\n                currentWidth += labelWidth + TAB_GAP\n                if (currentWidth > maxWidth) break\n                visibleLabels.push(label)\n            }\n\n            return visibleLabels\n        }\n\n        const visibleLabels = getVisibleLabels(this.tabLabels)\n\n        // No need for a dropdown if all tabs are visible\n        if (visibleLabels.length === this.tabLabels.length) {\n            return (\n                <Tabs\n                    className=\"sources-modal-tabs\"\n                    items={this.tabLabels}\n                    selectedKey={this.activeTabKey}\n                    onChange={this.setActiveTabKey}\n                    variant=\"scroll\"\n                />\n            )\n        }\n\n        // Ensure at least 3 tabs are visible\n        const numVisibleTabs = Math.max(3, visibleLabels.length)\n\n        return (\n            <TabsWithDropdown\n                className=\"sources-modal-tabs\"\n                items={this.tabLabels}\n                selectedKey={this.activeTabKey}\n                onChange={this.setActiveTabKey}\n                numVisibleTabs={numVisibleTabs}\n                portalContainer={this.container.current ?? undefined}\n            />\n        )\n    }\n\n    private renderMultipleSources(): React.ReactElement {\n        const activeColumn = this.tabs.find(\n            (tab) => tab.label.key === this.activeTabKey\n        )?.column\n\n        return (\n            <>\n                <p className=\"note-multiple-indicators\">\n                    This chart is composed of multiple indicators. Select an\n                    indicator for more information.\n                </p>\n                {this.renderTabs()}\n                {this.renderSource(activeColumn)}\n            </>\n        )\n    }\n\n    private renderModalContent(): React.ReactElement | null {\n        return this.tabs.length === 1\n            ? this.renderSource(this.tabs[0].column)\n            : this.renderMultipleSources()\n    }\n\n    @action.bound private onDismiss(): void {\n        this.manager.activeModal = undefined\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <Modal\n                bounds={this.modalBounds}\n                isHeightFixed={true}\n                onDismiss={this.onDismiss}\n            >\n                <div className=\"sources-modal-content\" ref={this.container}>\n                    {this.showStickyHeader ? (\n                        <OverlayHeader title=\"\" onDismiss={this.onDismiss} />\n                    ) : (\n                        <CloseButton\n                            className=\"close-button--top-right\"\n                            onClick={this.onDismiss}\n                        />\n                    )}\n                    <div\n                        className={cx(\"scrollable\", {\n                            \"scrollable--pad-top\": !this.showStickyHeader,\n                        })}\n                    >\n                        <div className=\"centered\">\n                            {this.manager.isReady ? (\n                                this.renderModalContent()\n                            ) : (\n                                <LoadingIndicator />\n                            )}\n                        </div>\n                    </div>\n                </div>\n            </Modal>\n        )\n    }\n}\n\ninterface SourceProps {\n    column: CoreColumn\n    editBaseUrl?: string\n    isEmbeddedInADataPage?: boolean\n}\n\n@observer\nexport class Source extends React.Component<SourceProps> {\n    constructor(props: SourceProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get column(): CoreColumn {\n        return this.props.column\n    }\n\n    @computed get def(): OwidColumnDef & { source?: OwidSource } {\n        return { ...this.column.def, source: this.column.source }\n    }\n\n    @computed get citationShort(): string {\n        return getCitationShort(\n            this.def.origins ?? [],\n            getAttributionFragmentsFromVariable(this.def),\n            this.def.owidProcessingLevel\n        )\n    }\n\n    @computed get citationLong(): string {\n        return getCitationLong(\n            this.title,\n            this.def.origins ?? [],\n            this.source,\n            getAttributionFragmentsFromVariable(this.def),\n            this.def.presentation?.attributionShort,\n            this.def.presentation?.titleVariant,\n            this.def.owidProcessingLevel,\n            undefined,\n            undefined\n        )\n    }\n\n    @computed private get source(): OwidSource {\n        return this.def.source ?? {}\n    }\n\n    @computed private get title(): IndicatorTitleWithFragments {\n        return this.column.titlePublicOrDisplayName\n    }\n\n    @computed private get editUrl(): string | undefined {\n        if (!this.props.editBaseUrl) return undefined\n\n        // point user directly to the variable edit page if possible\n        if (this.def.owidVariableId) {\n            return `${this.props.editBaseUrl}/variables/${this.def.owidVariableId}`\n        }\n\n        // if that's not possible, point user to the dataset edit page\n        if (this.def.datasetId) {\n            return `${this.props.editBaseUrl}/datasets/${this.def.datasetId}`\n        }\n\n        // we can't link to an edit page for explorers that define the FASTT in TSV\n        return undefined\n    }\n\n    @computed private get producers(): string[] {\n        if (!this.def.origins) return []\n        return _.uniq(excludeUndefined(this.def.origins.map((o) => o.producer)))\n    }\n\n    @computed get attributions(): string | undefined {\n        const attributionFragments =\n            getAttributionFragmentsFromVariable(this.def) ?? this.producers\n        if (attributionFragments.length === 0) return undefined\n        return attributionFragments.join(\", \")\n    }\n\n    @computed get lastUpdated(): string | undefined {\n        return getLastUpdatedFromVariable(this.def)\n    }\n\n    @computed get nextUpdate(): string | undefined {\n        return getNextUpdateFromVariable(this.def)\n    }\n\n    @computed get unit(): string | undefined {\n        return this.column.unit\n    }\n\n    @computed private get datapageHasFAQSection(): boolean {\n        const faqCount = this.def.presentation?.faqs?.length ?? 0\n        return !!this.props.isEmbeddedInADataPage && faqCount > 0\n    }\n\n    @computed private get showDescriptions(): boolean {\n        return (\n            (this.def.descriptionKey && this.def.descriptionKey.length > 0) ||\n            !!this.def.descriptionFromProducer ||\n            !!this.source.additionalInfo\n        )\n    }\n\n    @computed private get sourcesForDisplay(): DisplaySource[] {\n        return prepareSourcesForDisplay(this.def)\n    }\n\n    @computed protected get sourcesSectionHeading(): string {\n        return \"The data of this indicator is based on the following sources:\"\n    }\n\n    @computed private get hideSourcesForDisplay(): boolean {\n        // the \"Continent\" variable curated by OWID is used in many charts but doesn't come with useful source information.\n        // that's why we hide the sources section for this indicator for now, but we might decide to show it in the future.\n        return (\n            !!this.def.owidVariableId &&\n            isContinentsVariableId(this.def.owidVariableId)\n        )\n    }\n\n    @computed private get descriptionBelowTitle(): string | undefined {\n        return this.def.descriptionShort || this.def.description\n    }\n\n    protected renderTitle(): React.ReactElement {\n        return (\n            <h2>\n                <span className=\"title\">{this.title.title}</span>{\" \"}\n                {(this.title.attributionShort || this.title.titleVariant) && (\n                    <>\n                        <span className=\"title-fragments\">\n                            {joinTitleFragments(\n                                this.title.attributionShort,\n                                this.title.titleVariant\n                            )}\n                        </span>{\" \"}\n                    </>\n                )}\n                {this.editUrl && (\n                    <a href={this.editUrl}>\n                        <FontAwesomeIcon icon={faPencilAlt} />\n                    </a>\n                )}\n            </h2>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <div className=\"source\">\n                {this.renderTitle()}\n                {this.descriptionBelowTitle && (\n                    <div className=\"description-below-title\">\n                        <SimpleMarkdownText text={this.descriptionBelowTitle} />\n                    </div>\n                )}\n                <SourcesKeyDataTable\n                    attribution={this.attributions}\n                    owidProcessingLevel={this.def.owidProcessingLevel}\n                    dateRange={this.def.timespan}\n                    lastUpdated={this.lastUpdated}\n                    nextUpdate={this.nextUpdate}\n                    unit={this.unit}\n                    link={this.source.link}\n                    unitConversionFactor={this.column.unitConversionFactor}\n                    isEmbeddedInADataPage={this.props.isEmbeddedInADataPage}\n                />\n                {this.showDescriptions && (\n                    <SourcesDescriptions\n                        descriptionShort={this.def.descriptionShort}\n                        descriptionKey={this.def.descriptionKey ?? []}\n                        hasFaqEntries={this.datapageHasFAQSection}\n                        descriptionFromProducer={\n                            this.def.descriptionFromProducer\n                        }\n                        attributionShort={\n                            this.def.presentation?.attributionShort\n                        }\n                        additionalInfo={this.source.additionalInfo}\n                        isEmbeddedInADataPage={this.props.isEmbeddedInADataPage}\n                    />\n                )}\n                {!this.hideSourcesForDisplay &&\n                    this.sourcesForDisplay &&\n                    this.sourcesForDisplay.length > 0 && (\n                        <>\n                            <h3 className=\"heading\">\n                                {this.sourcesSectionHeading}\n                            </h3>\n                            <IndicatorSources\n                                sources={this.sourcesForDisplay}\n                                isEmbeddedInADataPage={\n                                    this.props.isEmbeddedInADataPage\n                                }\n                            />\n                        </>\n                    )}\n                <h3 className=\"heading heading--tight\">\n                    How we process data at Our World in Data:\n                </h3>\n                <IndicatorProcessing\n                    descriptionProcessing={this.def.descriptionProcessing}\n                />\n                <h3 className=\"heading heading--tight\">\n                    How to cite this data:\n                </h3>\n                <DataCitation\n                    citationShort={this.citationShort}\n                    citationLong={this.citationLong}\n                />\n            </div>\n        )\n    }\n}\n\nconst measureTabWidth = (label: string, secondary?: string): number => {\n    const getWidth = (text: string) =>\n        Bounds.forText(text, { fontSize: TAB_FONT_SIZE }).width\n\n    const labelWidth = getWidth(label)\n    const secondaryTextWidth = secondary\n        ? getWidth(secondary) + TAB_TITLE_SPACING\n        : 0\n    const padding = 2 * TAB_PADDING\n    const borderWidth = 2\n\n    return labelWidth + secondaryTextWidth + padding + borderWidth\n}\n","import * as _ from \"lodash-es\"\nimport { BodyPortal } from \"@ourworldindata/components\"\nimport { observer } from \"mobx-react\"\nimport * as React from \"react\"\n\ndeclare type keyboardCombo = string\n\nexport interface Command {\n    combo: keyboardCombo\n    fn: () => void\n    title?: string\n    category?: string\n}\n\nconst CommandPaletteClassName = \"CommandPalette\"\n\ninterface CommandPaletteProps {\n    commands: Command[]\n    display: \"none\" | \"block\"\n}\n\n@observer\nexport class CommandPalette extends React.Component<CommandPaletteProps> {\n    static togglePalette(): void {\n        const element = document.getElementsByClassName(\n            CommandPaletteClassName\n        )[0] as HTMLElement\n        if (element)\n            element.style.display =\n                element.style.display === \"none\" ? \"block\" : \"none\"\n    }\n\n    override render(): React.ReactElement {\n        const style: any = {\n            display: this.props.display,\n        }\n        let lastCat = \"\"\n        const commands = this.props.commands.filter(\n            (command) => command.title && command.category\n        )\n        const sortedCommands = _.sortBy(commands, \"category\").map(\n            (command, index) => {\n                let cat = undefined\n                if (command.category !== lastCat) {\n                    lastCat = command.category!\n                    cat = <div className=\"commandCategory\">{lastCat}</div>\n                }\n                return (\n                    <div key={`command${index}`}>\n                        {cat}\n                        <div className=\"commandOption\">\n                            <span className=\"commandCombo\">\n                                {command.combo}\n                            </span>\n                            <a onClick={(): void => command.fn()}>\n                                {command.title}\n                            </a>\n                        </div>\n                    </div>\n                )\n            }\n        )\n\n        return (\n            <BodyPortal>\n                <div className={CommandPaletteClassName} style={style}>\n                    <div className=\"paletteTitle\">Keyboard Shortcuts</div>\n                    {sortedCommands}\n                </div>\n            </BodyPortal>\n        )\n    }\n}\n","import { observer } from \"mobx-react\"\nimport * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { Bounds, Url } from \"@ourworldindata/utils\"\nimport { Modal } from \"./Modal\"\nimport {\n    Checkbox,\n    CodeSnippet,\n    OverlayHeader,\n} from \"@ourworldindata/components\"\nimport { DEFAULT_GRAPHER_BOUNDS, GrapherModal } from \"../core/GrapherConstants\"\n\nexport interface EmbedModalManager {\n    embedUrl?: string\n    embedArchivedUrl?: string\n    activeModal?: GrapherModal\n    canHideExternalControlsInEmbed: boolean\n    hideExternalControlsInEmbedUrl: boolean\n    setHideExternalControlsInEmbedUrl: (value: boolean) => void\n    frameBounds?: Bounds\n}\n\ninterface EmbedModalProps {\n    manager: EmbedModalManager\n}\n\ninterface EmbedOptions {\n    title: string\n    description: React.ReactElement\n    url: string\n}\n\n@observer\nexport class EmbedModal extends React.Component<EmbedModalProps> {\n    constructor(props: EmbedModalProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get manager(): EmbedModalManager {\n        return this.props.manager\n    }\n\n    @computed private get frameBounds(): Bounds {\n        return this.manager.frameBounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get modalBounds(): Bounds {\n        const maxWidth = 940\n        const padWidth = Math.max(16, (this.frameBounds.width - maxWidth) / 2)\n        return this.frameBounds.padHeight(16).padWidth(padWidth)\n    }\n\n    @computed private get embedOptions(): EmbedOptions[] {\n        const { embedUrl, embedArchivedUrl } = this.manager\n\n        const opts: EmbedOptions[] = []\n\n        // We only check origins (domain + port) because:\n        // - Query params are not relevant\n        // - We use the /latest/ path prefix as an alias for the latest version\n        //   of the chart, which is not the same as the canonical URL\n        // - Archive and live versions live on a different domain\n        const areEmbedAndArchivedOriginsSame =\n            Url.fromURL(this.manager.embedUrl ?? \"\").origin ===\n            Url.fromURL(this.manager.embedArchivedUrl ?? \"\").origin\n\n        if (embedUrl && !areEmbedAndArchivedOriginsSame) {\n            opts.push({\n                title: \"Chart with data updates\",\n                description: (\n                    <span>\n                        To embed a version of this chart that will{\" \"}\n                        <strong>update</strong> when we update the data on our\n                        site, paste this code into an HTML page:\n                    </span>\n                ),\n                url: embedUrl,\n            })\n        }\n        if (embedArchivedUrl) {\n            opts.push({\n                title: \"Archived chart without data updates\",\n                description: (\n                    <span>\n                        To embed this specific version of the chart that will{\" \"}\n                        <strong>not update</strong> when we update the data on\n                        our site, paste this code into an HTML page:\n                    </span>\n                ),\n                url: embedArchivedUrl,\n            })\n        }\n        return opts\n    }\n\n    private codeSnippetForUrl(url: string): string {\n        return `<iframe src=\"${url}\" loading=\"lazy\" style=\"width: 100%; height: 600px; border: 0px none;\" allow=\"web-share; clipboard-write\"></iframe>`\n    }\n\n    @action.bound private onDismiss(): void {\n        this.manager.activeModal = undefined\n    }\n\n    override render() {\n        const { embedOptions } = this\n\n        if (!embedOptions.length) return null\n        return (\n            <Modal\n                bounds={this.modalBounds}\n                alignVertical=\"bottom\"\n                onDismiss={this.onDismiss}\n            >\n                <div\n                    className=\"embed-modal-content\"\n                    style={{ maxHeight: this.modalBounds.height }}\n                >\n                    <OverlayHeader title=\"Embed\" onDismiss={this.onDismiss} />\n                    <div className=\"scrollable\">\n                        <div className=\"embed-modal--options\">\n                            {embedOptions.map((option) => (\n                                <div\n                                    key={option.title}\n                                    className=\"embed-modal--option\"\n                                >\n                                    <h3 className=\"grapher_body-2-semibold embed-modal--option-title\">\n                                        {option.title}\n                                    </h3>\n                                    <p className=\"grapher_label-1-medium embed-modal--option-description\">\n                                        {option.description}\n                                    </p>\n                                    <CodeSnippet\n                                        code={this.codeSnippetForUrl(\n                                            option.url\n                                        )}\n                                    />\n                                </div>\n                            ))}\n                        </div>\n                        {this.manager.canHideExternalControlsInEmbed && (\n                            <Checkbox\n                                className=\"embed-modal-hide-controls\"\n                                label=\"Hide controls\"\n                                checked={\n                                    this.manager.hideExternalControlsInEmbedUrl\n                                }\n                                onChange={(event) =>\n                                    this.manager.setHideExternalControlsInEmbedUrl(\n                                        event.target.checked\n                                    )\n                                }\n                            />\n                        )}\n                    </div>\n                </div>\n            </Modal>\n        )\n    }\n}\n","/*global define:false */\n/**\n * Copyright 2012-2017 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.6.5\n * @url craig.is/killing/mice\n */\n(function(window, document, undefined) {\n\n    // Check if mousetrap is used inside browser, if not, return\n    if (!window) {\n        return;\n    }\n\n    /**\n     * mapping of special keycodes to their corresponding keys\n     *\n     * everything in this dictionary cannot use keypress events\n     * so it has to be here to map to the correct keycodes for\n     * keyup/keydown events\n     *\n     * @type {Object}\n     */\n    var _MAP = {\n        8: 'backspace',\n        9: 'tab',\n        13: 'enter',\n        16: 'shift',\n        17: 'ctrl',\n        18: 'alt',\n        20: 'capslock',\n        27: 'esc',\n        32: 'space',\n        33: 'pageup',\n        34: 'pagedown',\n        35: 'end',\n        36: 'home',\n        37: 'left',\n        38: 'up',\n        39: 'right',\n        40: 'down',\n        45: 'ins',\n        46: 'del',\n        91: 'meta',\n        93: 'meta',\n        224: 'meta'\n    };\n\n    /**\n     * mapping for special characters so they can support\n     *\n     * this dictionary is only used incase you want to bind a\n     * keyup or keydown event to one of these keys\n     *\n     * @type {Object}\n     */\n    var _KEYCODE_MAP = {\n        106: '*',\n        107: '+',\n        109: '-',\n        110: '.',\n        111 : '/',\n        186: ';',\n        187: '=',\n        188: ',',\n        189: '-',\n        190: '.',\n        191: '/',\n        192: '`',\n        219: '[',\n        220: '\\\\',\n        221: ']',\n        222: '\\''\n    };\n\n    /**\n     * this is a mapping of keys that require shift on a US keypad\n     * back to the non shift equivelents\n     *\n     * this is so you can use keyup events with these keys\n     *\n     * note that this will only work reliably on US keyboards\n     *\n     * @type {Object}\n     */\n    var _SHIFT_MAP = {\n        '~': '`',\n        '!': '1',\n        '@': '2',\n        '#': '3',\n        '$': '4',\n        '%': '5',\n        '^': '6',\n        '&': '7',\n        '*': '8',\n        '(': '9',\n        ')': '0',\n        '_': '-',\n        '+': '=',\n        ':': ';',\n        '\\\"': '\\'',\n        '<': ',',\n        '>': '.',\n        '?': '/',\n        '|': '\\\\'\n    };\n\n    /**\n     * this is a list of special strings you can use to map\n     * to modifier keys when you specify your keyboard shortcuts\n     *\n     * @type {Object}\n     */\n    var _SPECIAL_ALIASES = {\n        'option': 'alt',\n        'command': 'meta',\n        'return': 'enter',\n        'escape': 'esc',\n        'plus': '+',\n        'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n    };\n\n    /**\n     * variable to store the flipped version of _MAP from above\n     * needed to check if we should use keypress or not when no action\n     * is specified\n     *\n     * @type {Object|undefined}\n     */\n    var _REVERSE_MAP;\n\n    /**\n     * loop through the f keys, f1 to f19 and add them to the map\n     * programatically\n     */\n    for (var i = 1; i < 20; ++i) {\n        _MAP[111 + i] = 'f' + i;\n    }\n\n    /**\n     * loop through to map numbers on the numeric keypad\n     */\n    for (i = 0; i <= 9; ++i) {\n\n        // This needs to use a string cause otherwise since 0 is falsey\n        // mousetrap will never fire for numpad 0 pressed as part of a keydown\n        // event.\n        //\n        // @see https://github.com/ccampbell/mousetrap/pull/258\n        _MAP[i + 96] = i.toString();\n    }\n\n    /**\n     * cross browser add event method\n     *\n     * @param {Element|HTMLDocument} object\n     * @param {string} type\n     * @param {Function} callback\n     * @returns void\n     */\n    function _addEvent(object, type, callback) {\n        if (object.addEventListener) {\n            object.addEventListener(type, callback, false);\n            return;\n        }\n\n        object.attachEvent('on' + type, callback);\n    }\n\n    /**\n     * takes the event and returns the key character\n     *\n     * @param {Event} e\n     * @return {string}\n     */\n    function _characterFromEvent(e) {\n\n        // for keypress events we should return the character as is\n        if (e.type == 'keypress') {\n            var character = String.fromCharCode(e.which);\n\n            // if the shift key is not pressed then it is safe to assume\n            // that we want the character to be lowercase.  this means if\n            // you accidentally have caps lock on then your key bindings\n            // will continue to work\n            //\n            // the only side effect that might not be desired is if you\n            // bind something like 'A' cause you want to trigger an\n            // event when capital A is pressed caps lock will no longer\n            // trigger the event.  shift+a will though.\n            if (!e.shiftKey) {\n                character = character.toLowerCase();\n            }\n\n            return character;\n        }\n\n        // for non keypress events the special maps are needed\n        if (_MAP[e.which]) {\n            return _MAP[e.which];\n        }\n\n        if (_KEYCODE_MAP[e.which]) {\n            return _KEYCODE_MAP[e.which];\n        }\n\n        // if it is not in the special map\n\n        // with keydown and keyup events the character seems to always\n        // come in as an uppercase character whether you are pressing shift\n        // or not.  we should make sure it is always lowercase for comparisons\n        return String.fromCharCode(e.which).toLowerCase();\n    }\n\n    /**\n     * checks if two arrays are equal\n     *\n     * @param {Array} modifiers1\n     * @param {Array} modifiers2\n     * @returns {boolean}\n     */\n    function _modifiersMatch(modifiers1, modifiers2) {\n        return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n    }\n\n    /**\n     * takes a key event and figures out what the modifiers are\n     *\n     * @param {Event} e\n     * @returns {Array}\n     */\n    function _eventModifiers(e) {\n        var modifiers = [];\n\n        if (e.shiftKey) {\n            modifiers.push('shift');\n        }\n\n        if (e.altKey) {\n            modifiers.push('alt');\n        }\n\n        if (e.ctrlKey) {\n            modifiers.push('ctrl');\n        }\n\n        if (e.metaKey) {\n            modifiers.push('meta');\n        }\n\n        return modifiers;\n    }\n\n    /**\n     * prevents default for this event\n     *\n     * @param {Event} e\n     * @returns void\n     */\n    function _preventDefault(e) {\n        if (e.preventDefault) {\n            e.preventDefault();\n            return;\n        }\n\n        e.returnValue = false;\n    }\n\n    /**\n     * stops propogation for this event\n     *\n     * @param {Event} e\n     * @returns void\n     */\n    function _stopPropagation(e) {\n        if (e.stopPropagation) {\n            e.stopPropagation();\n            return;\n        }\n\n        e.cancelBubble = true;\n    }\n\n    /**\n     * determines if the keycode specified is a modifier key or not\n     *\n     * @param {string} key\n     * @returns {boolean}\n     */\n    function _isModifier(key) {\n        return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';\n    }\n\n    /**\n     * reverses the map lookup so that we can look for specific keys\n     * to see what can and can't use keypress\n     *\n     * @return {Object}\n     */\n    function _getReverseMap() {\n        if (!_REVERSE_MAP) {\n            _REVERSE_MAP = {};\n            for (var key in _MAP) {\n\n                // pull out the numeric keypad from here cause keypress should\n                // be able to detect the keys from the character\n                if (key > 95 && key < 112) {\n                    continue;\n                }\n\n                if (_MAP.hasOwnProperty(key)) {\n                    _REVERSE_MAP[_MAP[key]] = key;\n                }\n            }\n        }\n        return _REVERSE_MAP;\n    }\n\n    /**\n     * picks the best action based on the key combination\n     *\n     * @param {string} key - character for key\n     * @param {Array} modifiers\n     * @param {string=} action passed in\n     */\n    function _pickBestAction(key, modifiers, action) {\n\n        // if no action was picked in we should try to pick the one\n        // that we think would work best for this key\n        if (!action) {\n            action = _getReverseMap()[key] ? 'keydown' : 'keypress';\n        }\n\n        // modifier keys don't work as expected with keypress,\n        // switch to keydown\n        if (action == 'keypress' && modifiers.length) {\n            action = 'keydown';\n        }\n\n        return action;\n    }\n\n    /**\n     * Converts from a string key combination to an array\n     *\n     * @param  {string} combination like \"command+shift+l\"\n     * @return {Array}\n     */\n    function _keysFromString(combination) {\n        if (combination === '+') {\n            return ['+'];\n        }\n\n        combination = combination.replace(/\\+{2}/g, '+plus');\n        return combination.split('+');\n    }\n\n    /**\n     * Gets info for a specific key combination\n     *\n     * @param  {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n     * @param  {string=} action\n     * @returns {Object}\n     */\n    function _getKeyInfo(combination, action) {\n        var keys;\n        var key;\n        var i;\n        var modifiers = [];\n\n        // take the keys from this pattern and figure out what the actual\n        // pattern is all about\n        keys = _keysFromString(combination);\n\n        for (i = 0; i < keys.length; ++i) {\n            key = keys[i];\n\n            // normalize key names\n            if (_SPECIAL_ALIASES[key]) {\n                key = _SPECIAL_ALIASES[key];\n            }\n\n            // if this is not a keypress event then we should\n            // be smart about using shift keys\n            // this will only work for US keyboards however\n            if (action && action != 'keypress' && _SHIFT_MAP[key]) {\n                key = _SHIFT_MAP[key];\n                modifiers.push('shift');\n            }\n\n            // if this key is a modifier then add it to the list of modifiers\n            if (_isModifier(key)) {\n                modifiers.push(key);\n            }\n        }\n\n        // depending on what the key combination is\n        // we will try to pick the best event for it\n        action = _pickBestAction(key, modifiers, action);\n\n        return {\n            key: key,\n            modifiers: modifiers,\n            action: action\n        };\n    }\n\n    function _belongsTo(element, ancestor) {\n        if (element === null || element === document) {\n            return false;\n        }\n\n        if (element === ancestor) {\n            return true;\n        }\n\n        return _belongsTo(element.parentNode, ancestor);\n    }\n\n    function Mousetrap(targetElement) {\n        var self = this;\n\n        targetElement = targetElement || document;\n\n        if (!(self instanceof Mousetrap)) {\n            return new Mousetrap(targetElement);\n        }\n\n        /**\n         * element to attach key events to\n         *\n         * @type {Element}\n         */\n        self.target = targetElement;\n\n        /**\n         * a list of all the callbacks setup via Mousetrap.bind()\n         *\n         * @type {Object}\n         */\n        self._callbacks = {};\n\n        /**\n         * direct map of string combinations to callbacks used for trigger()\n         *\n         * @type {Object}\n         */\n        self._directMap = {};\n\n        /**\n         * keeps track of what level each sequence is at since multiple\n         * sequences can start out with the same sequence\n         *\n         * @type {Object}\n         */\n        var _sequenceLevels = {};\n\n        /**\n         * variable to store the setTimeout call\n         *\n         * @type {null|number}\n         */\n        var _resetTimer;\n\n        /**\n         * temporary state where we will ignore the next keyup\n         *\n         * @type {boolean|string}\n         */\n        var _ignoreNextKeyup = false;\n\n        /**\n         * temporary state where we will ignore the next keypress\n         *\n         * @type {boolean}\n         */\n        var _ignoreNextKeypress = false;\n\n        /**\n         * are we currently inside of a sequence?\n         * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n         *\n         * @type {boolean|string}\n         */\n        var _nextExpectedAction = false;\n\n        /**\n         * resets all sequence counters except for the ones passed in\n         *\n         * @param {Object} doNotReset\n         * @returns void\n         */\n        function _resetSequences(doNotReset) {\n            doNotReset = doNotReset || {};\n\n            var activeSequences = false,\n                key;\n\n            for (key in _sequenceLevels) {\n                if (doNotReset[key]) {\n                    activeSequences = true;\n                    continue;\n                }\n                _sequenceLevels[key] = 0;\n            }\n\n            if (!activeSequences) {\n                _nextExpectedAction = false;\n            }\n        }\n\n        /**\n         * finds all callbacks that match based on the keycode, modifiers,\n         * and action\n         *\n         * @param {string} character\n         * @param {Array} modifiers\n         * @param {Event|Object} e\n         * @param {string=} sequenceName - name of the sequence we are looking for\n         * @param {string=} combination\n         * @param {number=} level\n         * @returns {Array}\n         */\n        function _getMatches(character, modifiers, e, sequenceName, combination, level) {\n            var i;\n            var callback;\n            var matches = [];\n            var action = e.type;\n\n            // if there are no events related to this keycode\n            if (!self._callbacks[character]) {\n                return [];\n            }\n\n            // if a modifier key is coming up on its own we should allow it\n            if (action == 'keyup' && _isModifier(character)) {\n                modifiers = [character];\n            }\n\n            // loop through all callbacks for the key that was pressed\n            // and see if any of them match\n            for (i = 0; i < self._callbacks[character].length; ++i) {\n                callback = self._callbacks[character][i];\n\n                // if a sequence name is not specified, but this is a sequence at\n                // the wrong level then move onto the next match\n                if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {\n                    continue;\n                }\n\n                // if the action we are looking for doesn't match the action we got\n                // then we should keep going\n                if (action != callback.action) {\n                    continue;\n                }\n\n                // if this is a keypress event and the meta key and control key\n                // are not pressed that means that we need to only look at the\n                // character, otherwise check the modifiers as well\n                //\n                // chrome will not fire a keypress if meta or control is down\n                // safari will fire a keypress if meta or meta+shift is down\n                // firefox will fire a keypress if meta or control is down\n                if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {\n\n                    // when you bind a combination or sequence a second time it\n                    // should overwrite the first one.  if a sequenceName or\n                    // combination is specified in this call it does just that\n                    //\n                    // @todo make deleting its own method?\n                    var deleteCombo = !sequenceName && callback.combo == combination;\n                    var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;\n                    if (deleteCombo || deleteSequence) {\n                        self._callbacks[character].splice(i, 1);\n                    }\n\n                    matches.push(callback);\n                }\n            }\n\n            return matches;\n        }\n\n        /**\n         * actually calls the callback function\n         *\n         * if your callback function returns false this will use the jquery\n         * convention - prevent default and stop propogation on the event\n         *\n         * @param {Function} callback\n         * @param {Event} e\n         * @returns void\n         */\n        function _fireCallback(callback, e, combo, sequence) {\n\n            // if this event should not happen stop here\n            if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n                return;\n            }\n\n            if (callback(e, combo) === false) {\n                _preventDefault(e);\n                _stopPropagation(e);\n            }\n        }\n\n        /**\n         * handles a character key event\n         *\n         * @param {string} character\n         * @param {Array} modifiers\n         * @param {Event} e\n         * @returns void\n         */\n        self._handleKey = function(character, modifiers, e) {\n            var callbacks = _getMatches(character, modifiers, e);\n            var i;\n            var doNotReset = {};\n            var maxLevel = 0;\n            var processedSequenceCallback = false;\n\n            // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n            for (i = 0; i < callbacks.length; ++i) {\n                if (callbacks[i].seq) {\n                    maxLevel = Math.max(maxLevel, callbacks[i].level);\n                }\n            }\n\n            // loop through matching callbacks for this key event\n            for (i = 0; i < callbacks.length; ++i) {\n\n                // fire for all sequence callbacks\n                // this is because if for example you have multiple sequences\n                // bound such as \"g i\" and \"g t\" they both need to fire the\n                // callback for matching g cause otherwise you can only ever\n                // match the first one\n                if (callbacks[i].seq) {\n\n                    // only fire callbacks for the maxLevel to prevent\n                    // subsequences from also firing\n                    //\n                    // for example 'a option b' should not cause 'option b' to fire\n                    // even though 'option b' is part of the other sequence\n                    //\n                    // any sequences that do not match here will be discarded\n                    // below by the _resetSequences call\n                    if (callbacks[i].level != maxLevel) {\n                        continue;\n                    }\n\n                    processedSequenceCallback = true;\n\n                    // keep a list of which sequences were matches for later\n                    doNotReset[callbacks[i].seq] = 1;\n                    _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);\n                    continue;\n                }\n\n                // if there were no sequence matches but we are still here\n                // that means this is a regular match so we should fire that\n                if (!processedSequenceCallback) {\n                    _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n                }\n            }\n\n            // if the key you pressed matches the type of sequence without\n            // being a modifier (ie \"keyup\" or \"keypress\") then we should\n            // reset all sequences that were not matched by this event\n            //\n            // this is so, for example, if you have the sequence \"h a t\" and you\n            // type \"h e a r t\" it does not match.  in this case the \"e\" will\n            // cause the sequence to reset\n            //\n            // modifier keys are ignored because you can have a sequence\n            // that contains modifiers such as \"enter ctrl+space\" and in most\n            // cases the modifier key will be pressed before the next key\n            //\n            // also if you have a sequence such as \"ctrl+b a\" then pressing the\n            // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n            //\n            // the \"keydown\" is expected when there is a modifier, but the\n            // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n            // after and that causes the sequence to reset\n            //\n            // we ignore keypresses in a sequence that directly follow a keydown\n            // for the same character\n            var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;\n            if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {\n                _resetSequences(doNotReset);\n            }\n\n            _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';\n        };\n\n        /**\n         * handles a keydown event\n         *\n         * @param {Event} e\n         * @returns void\n         */\n        function _handleKeyEvent(e) {\n\n            // normalize e.which for key events\n            // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n            if (typeof e.which !== 'number') {\n                e.which = e.keyCode;\n            }\n\n            var character = _characterFromEvent(e);\n\n            // no character found then stop\n            if (!character) {\n                return;\n            }\n\n            // need to use === for the character check because the character can be 0\n            if (e.type == 'keyup' && _ignoreNextKeyup === character) {\n                _ignoreNextKeyup = false;\n                return;\n            }\n\n            self.handleKey(character, _eventModifiers(e), e);\n        }\n\n        /**\n         * called to set a 1 second timeout on the specified sequence\n         *\n         * this is so after each key press in the sequence you have 1 second\n         * to press the next key before you have to start over\n         *\n         * @returns void\n         */\n        function _resetSequenceTimer() {\n            clearTimeout(_resetTimer);\n            _resetTimer = setTimeout(_resetSequences, 1000);\n        }\n\n        /**\n         * binds a key sequence to an event\n         *\n         * @param {string} combo - combo specified in bind call\n         * @param {Array} keys\n         * @param {Function} callback\n         * @param {string=} action\n         * @returns void\n         */\n        function _bindSequence(combo, keys, callback, action) {\n\n            // start off by adding a sequence level record for this combination\n            // and setting the level to 0\n            _sequenceLevels[combo] = 0;\n\n            /**\n             * callback to increase the sequence level for this sequence and reset\n             * all other sequences that were active\n             *\n             * @param {string} nextAction\n             * @returns {Function}\n             */\n            function _increaseSequence(nextAction) {\n                return function() {\n                    _nextExpectedAction = nextAction;\n                    ++_sequenceLevels[combo];\n                    _resetSequenceTimer();\n                };\n            }\n\n            /**\n             * wraps the specified callback inside of another function in order\n             * to reset all sequence counters as soon as this sequence is done\n             *\n             * @param {Event} e\n             * @returns void\n             */\n            function _callbackAndReset(e) {\n                _fireCallback(callback, e, combo);\n\n                // we should ignore the next key up if the action is key down\n                // or keypress.  this is so if you finish a sequence and\n                // release the key the final key will not trigger a keyup\n                if (action !== 'keyup') {\n                    _ignoreNextKeyup = _characterFromEvent(e);\n                }\n\n                // weird race condition if a sequence ends with the key\n                // another sequence begins with\n                setTimeout(_resetSequences, 10);\n            }\n\n            // loop through keys one at a time and bind the appropriate callback\n            // function.  for any key leading up to the final one it should\n            // increase the sequence. after the final, it should reset all sequences\n            //\n            // if an action is specified in the original bind call then that will\n            // be used throughout.  otherwise we will pass the action that the\n            // next key in the sequence should match.  this allows a sequence\n            // to mix and match keypress and keydown events depending on which\n            // ones are better suited to the key provided\n            for (var i = 0; i < keys.length; ++i) {\n                var isFinal = i + 1 === keys.length;\n                var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n                _bindSingle(keys[i], wrappedCallback, action, combo, i);\n            }\n        }\n\n        /**\n         * binds a single keyboard combination\n         *\n         * @param {string} combination\n         * @param {Function} callback\n         * @param {string=} action\n         * @param {string=} sequenceName - name of sequence if part of sequence\n         * @param {number=} level - what part of the sequence the command is\n         * @returns void\n         */\n        function _bindSingle(combination, callback, action, sequenceName, level) {\n\n            // store a direct mapped reference for use with Mousetrap.trigger\n            self._directMap[combination + ':' + action] = callback;\n\n            // make sure multiple spaces in a row become a single space\n            combination = combination.replace(/\\s+/g, ' ');\n\n            var sequence = combination.split(' ');\n            var info;\n\n            // if this pattern is a sequence of keys then run through this method\n            // to reprocess each pattern one key at a time\n            if (sequence.length > 1) {\n                _bindSequence(combination, sequence, callback, action);\n                return;\n            }\n\n            info = _getKeyInfo(combination, action);\n\n            // make sure to initialize array if this is the first time\n            // a callback is added for this key\n            self._callbacks[info.key] = self._callbacks[info.key] || [];\n\n            // remove an existing match if there is one\n            _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);\n\n            // add this call back to the array\n            // if it is a sequence put it at the beginning\n            // if not put it at the end\n            //\n            // this is important because the way these are processed expects\n            // the sequence ones to come first\n            self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n                callback: callback,\n                modifiers: info.modifiers,\n                action: info.action,\n                seq: sequenceName,\n                level: level,\n                combo: combination\n            });\n        }\n\n        /**\n         * binds multiple combinations to the same callback\n         *\n         * @param {Array} combinations\n         * @param {Function} callback\n         * @param {string|undefined} action\n         * @returns void\n         */\n        self._bindMultiple = function(combinations, callback, action) {\n            for (var i = 0; i < combinations.length; ++i) {\n                _bindSingle(combinations[i], callback, action);\n            }\n        };\n\n        // start!\n        _addEvent(targetElement, 'keypress', _handleKeyEvent);\n        _addEvent(targetElement, 'keydown', _handleKeyEvent);\n        _addEvent(targetElement, 'keyup', _handleKeyEvent);\n    }\n\n    /**\n     * binds an event to mousetrap\n     *\n     * can be a single key, a combination of keys separated with +,\n     * an array of keys, or a sequence of keys separated by spaces\n     *\n     * be sure to list the modifier keys first to make sure that the\n     * correct key ends up getting bound (the last key in the pattern)\n     *\n     * @param {string|Array} keys\n     * @param {Function} callback\n     * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n     * @returns void\n     */\n    Mousetrap.prototype.bind = function(keys, callback, action) {\n        var self = this;\n        keys = keys instanceof Array ? keys : [keys];\n        self._bindMultiple.call(self, keys, callback, action);\n        return self;\n    };\n\n    /**\n     * unbinds an event to mousetrap\n     *\n     * the unbinding sets the callback function of the specified key combo\n     * to an empty function and deletes the corresponding key in the\n     * _directMap dict.\n     *\n     * TODO: actually remove this from the _callbacks dictionary instead\n     * of binding an empty function\n     *\n     * the keycombo+action has to be exactly the same as\n     * it was defined in the bind method\n     *\n     * @param {string|Array} keys\n     * @param {string} action\n     * @returns void\n     */\n    Mousetrap.prototype.unbind = function(keys, action) {\n        var self = this;\n        return self.bind.call(self, keys, function() {}, action);\n    };\n\n    /**\n     * triggers an event that has already been bound\n     *\n     * @param {string} keys\n     * @param {string=} action\n     * @returns void\n     */\n    Mousetrap.prototype.trigger = function(keys, action) {\n        var self = this;\n        if (self._directMap[keys + ':' + action]) {\n            self._directMap[keys + ':' + action]({}, keys);\n        }\n        return self;\n    };\n\n    /**\n     * resets the library back to its initial state.  this is useful\n     * if you want to clear out the current keyboard shortcuts and bind\n     * new ones - for example if you switch to another page\n     *\n     * @returns void\n     */\n    Mousetrap.prototype.reset = function() {\n        var self = this;\n        self._callbacks = {};\n        self._directMap = {};\n        return self;\n    };\n\n    /**\n     * should we stop this event before firing off callbacks\n     *\n     * @param {Event} e\n     * @param {Element} element\n     * @return {boolean}\n     */\n    Mousetrap.prototype.stopCallback = function(e, element) {\n        var self = this;\n\n        // if the element has the class \"mousetrap\" then no need to stop\n        if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n            return false;\n        }\n\n        if (_belongsTo(element, self.target)) {\n            return false;\n        }\n\n        // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,\n        // not the initial event target in the shadow tree. Note that not all events cross the\n        // shadow boundary.\n        // For shadow trees with `mode: 'open'`, the initial event target is the first element in\n        // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event\n        // target cannot be obtained.\n        if ('composedPath' in e && typeof e.composedPath === 'function') {\n            // For open shadow trees, update `element` so that the following check works.\n            var initialEventTarget = e.composedPath()[0];\n            if (initialEventTarget !== e.target) {\n                element = initialEventTarget;\n            }\n        }\n\n        // stop for input, select, and textarea\n        return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;\n    };\n\n    /**\n     * exposes _handleKey publicly so it can be overwritten by extensions\n     */\n    Mousetrap.prototype.handleKey = function() {\n        var self = this;\n        return self._handleKey.apply(self, arguments);\n    };\n\n    /**\n     * allow custom key mappings\n     */\n    Mousetrap.addKeycodes = function(object) {\n        for (var key in object) {\n            if (object.hasOwnProperty(key)) {\n                _MAP[key] = object[key];\n            }\n        }\n        _REVERSE_MAP = null;\n    };\n\n    /**\n     * Init the global mousetrap functions\n     *\n     * This method is needed to allow the global mousetrap functions to work\n     * now that mousetrap is a constructor function.\n     */\n    Mousetrap.init = function() {\n        var documentMousetrap = Mousetrap(document);\n        for (var method in documentMousetrap) {\n            if (method.charAt(0) !== '_') {\n                Mousetrap[method] = (function(method) {\n                    return function() {\n                        return documentMousetrap[method].apply(documentMousetrap, arguments);\n                    };\n                } (method));\n            }\n        }\n    };\n\n    Mousetrap.init();\n\n    // expose mousetrap to the global object\n    window.Mousetrap = Mousetrap;\n\n    // expose as a common js module\n    if (typeof module !== 'undefined' && module.exports) {\n        module.exports = Mousetrap;\n    }\n\n    // expose mousetrap as an AMD module\n    if (typeof define === 'function' && define.amd) {\n        define(function() {\n            return Mousetrap;\n        });\n    }\n}) (typeof window !== 'undefined' ? window : null, typeof  window !== 'undefined' ? document : null);\n","// todo: Remove this file when we've migrated OWID data and OWID charts to next version\n\nimport * as _ from \"lodash-es\"\nimport {\n    ColumnTypeNames,\n    CoreColumnDef,\n    StandardOwidColumnDefs,\n    OwidTableSlugs,\n    OwidColumnDef,\n    OwidVariableDimensions,\n    OwidVariableDataMetadataDimensions,\n    ErrorValue,\n    OwidChartDimensionInterfaceWithMandatorySlug,\n    OwidChartDimensionInterface,\n    EntityName,\n} from \"@ourworldindata/types\"\nimport {\n    OwidTable,\n    ErrorValueTypes,\n    makeKeyFn,\n    makeAnnotationsSlug,\n} from \"@ourworldindata/core-table\"\nimport {\n    diffDateISOStringInDays,\n    getYearFromISOStringAndDayOffset,\n    intersection,\n    trimObject,\n    OwidEntityKey,\n    MultipleOwidVariableDataDimensionsMap,\n    OwidVariableWithSource,\n    OwidVariableMixedData,\n    OwidVariableWithSourceAndDimension,\n    ColumnSlug,\n    EPOCH_DATE,\n    OwidVariableType,\n} from \"@ourworldindata/utils\"\nimport { isContinentsVariableId } from \"./GrapherConstants\"\nimport * as R from \"remeda\"\nimport { getDimensionColumnSlug } from \"../chart/ChartDimension.js\"\n\nexport const legacyToOwidTableAndDimensionsWithMandatorySlug = (\n    json: MultipleOwidVariableDataDimensionsMap,\n    dimensions: OwidChartDimensionInterface[],\n    selectedEntityColors:\n        | { [entityName: string]: string | undefined }\n        | undefined\n): OwidTable => {\n    const dimensionsWithSlug = dimensions?.map((dimension) => ({\n        ...dimension,\n        slug:\n            dimension.slug ??\n            getDimensionColumnSlug(dimension.variableId, dimension.targetYear),\n    }))\n    return legacyToOwidTableAndDimensions(\n        json,\n        dimensionsWithSlug,\n        selectedEntityColors\n    )\n}\n\nexport const legacyToOwidTableAndDimensions = (\n    json: MultipleOwidVariableDataDimensionsMap,\n    dimensions: OwidChartDimensionInterfaceWithMandatorySlug[],\n    selectedEntityColors:\n        | { [entityName: string]: string | undefined }\n        | undefined\n): OwidTable => {\n    // Entity meta map\n\n    const entityMeta = [...json.values()].flatMap(\n        (value) => value.metadata.dimensions.entities.values\n    )\n    const entityMetaById: OwidEntityKey = Object.fromEntries(\n        entityMeta.map((entity) => [entity.id.toString(), entity])\n    )\n\n    // Base column defs, shared by all variable tables\n\n    const baseColumnDefs: Map<ColumnSlug, CoreColumnDef> = new Map()\n    StandardOwidColumnDefs.forEach((def) => {\n        baseColumnDefs.set(def.slug, def)\n    })\n\n    // We need to create a column for each unique [variable, targetTime] pair. So there can be\n    // multiple columns for a single variable.\n    const dimensionColumns = _.uniqBy(dimensions, (dim) => dim.slug)\n\n    const variableTablesToJoinByYear: OwidTable[] = []\n    const variableTablesToJoinByDay: OwidTable[] = []\n    const variableTablesWithYearToJoinByEntityOnly: OwidTable[] = []\n    for (const dimension of dimensionColumns) {\n        const variable = json.get(dimension.variableId)\n\n        // TODO: this shouldn't happen but it does sometimes\n        // when adding dimensions in the chart editor\n        if (!variable) continue\n\n        // Copy the base columnDef\n        const columnDefs = new Map(baseColumnDefs)\n\n        // Time column\n        const timeColumnDef = timeColumnDefFromOwidVariable(variable.metadata)\n        columnDefs.set(timeColumnDef.slug, timeColumnDef)\n\n        // Value column\n        const valueColumnDef = columnDefFromOwidVariable(variable.metadata)\n        const valueColumnColor = dimension.display?.color\n        // Ensure the column slug is unique by copying it from the dimensions\n        // (there can be two columns of the same variable with different targetTimes)\n        if (dimension.slug) valueColumnDef.slug = dimension.slug\n        else throw new Error(\"Dimension slug was undefined\")\n        // Because database columns can contain mixed types, we want to avoid\n        // parsing for Grapher data until we fix that.\n        valueColumnDef.skipParsing = true\n        if (valueColumnColor) {\n            valueColumnDef.color = valueColumnColor\n        }\n        if (dimension) {\n            valueColumnDef.display = {\n                ...trimObject(valueColumnDef.display),\n                ...trimObject(dimension.display),\n            }\n        }\n        if (dimension.targetYear !== undefined)\n            valueColumnDef.targetTime = dimension.targetYear\n        columnDefs.set(valueColumnDef.slug, valueColumnDef)\n\n        // Annotations column\n        const [annotationMap, annotationColumnDef] =\n            annotationMapAndDefFromOwidVariable(variable.metadata)\n\n        // Column values\n\n        const times = timeColumnValuesFromOwidVariable(\n            variable.metadata,\n            variable.data\n        )\n        const entityIds = variable.data.entities ?? []\n        const entityNames = entityIds.map(\n            // if entityMetaById[id] does not exist, then we don't have entity\n            // from variable metadata in MySQL. This can happen because we take\n            // data from S3 and metadata from MySQL. After we unify it, it should\n            // no longer be a problem\n            (id) => entityMetaById[id]?.name ?? id.toString()\n        )\n        // see comment above about entityMetaById[id]\n        const entityCodes = entityIds.map((id) => entityMetaById[id]?.code)\n\n        // If there is a conversionFactor, apply it.\n        let values = variable.data.values || []\n        const conversionFactor = valueColumnDef.display?.conversionFactor\n        if (conversionFactor !== undefined) {\n            values = values.map((value) =>\n                _.isNumber(value) ? value * conversionFactor : value\n            )\n\n            // If a non-int conversion factor is applied to an integer column,\n            // we end up with a numeric column.\n            if (\n                valueColumnDef.type === ColumnTypeNames.Integer &&\n                !_.isInteger(conversionFactor)\n            )\n                valueColumnDef.type = ColumnTypeNames.Numeric\n        }\n\n        const columnStore: { [key: string]: any[] } = {\n            [OwidTableSlugs.entityId]: entityIds,\n            [OwidTableSlugs.entityCode]: entityCodes,\n            [OwidTableSlugs.entityName]: entityNames,\n            [timeColumnDef.slug]: times,\n            [valueColumnDef.slug]: values,\n        }\n\n        if (annotationColumnDef) {\n            columnStore[annotationColumnDef.slug] = entityNames.map(\n                (entityName) => annotationMap!.get(entityName)\n            )\n            columnDefs.set(annotationColumnDef.slug, annotationColumnDef)\n        }\n        // Build the tables\n\n        let variableTable = new OwidTable(\n            columnStore,\n            Array.from(columnDefs.values())\n        )\n\n        // If there is a targetTime set on the dimension, we need to perform the join on the\n        // entities columns only, excluding any time columns.\n        // We do this by dropping the column. We interpolate before which adds an originalTime\n        // column which can be used to recover the time.\n        const targetTime = dimension?.targetYear\n        if (_.isNumber(targetTime)) {\n            variableTable = variableTable\n                // interpolateColumnWithTolerance() won't handle injecting times beyond the current\n                // allTimes. So if targetYear is 2018, and we have data up to 2017, the\n                // interpolation won't add the 2018 rows (unless we apply the interpolation after\n                // the big join).\n                // This is why we use filterByTargetTimes() which handles that case.\n                .filterByTargetTimes(\n                    [targetTime],\n                    valueColumnDef.display?.tolerance\n                )\n                // Interpolate with 0 to add originalTimes column\n                .interpolateColumnWithTolerance(valueColumnDef.slug, {\n                    toleranceOverride: 0,\n                })\n                .dropColumns([timeColumnDef.slug])\n            // We keep variables that have a targetTime set in a special bucket and will join them\n            // on entity only (disregarding the year since we already filtered all other years out for\n            // those variables)\n            variableTablesWithYearToJoinByEntityOnly.push(variableTable)\n        } else if (variable.metadata.display?.yearIsDay)\n            variableTablesToJoinByDay.push(variableTable)\n        else variableTablesToJoinByYear.push(variableTable)\n    }\n\n    // If we only had years then all we would need to do is a single fullJoinTables call and\n    // we'd be done with it. But since we also have days this is a bit trickier. The\n    // basic approach is to say that if we have day variables then we should join those internally\n    // on day+entity first and day+entity becomes the primary index for our final table.\n    // We then join this merged days table with all the year based variables.\n    // The multi table join iterates over all the unique index values (day+entity).\n    // To join this with years we derive the year from the day. The fullJoinTables then uses a number\n    // of fallbacks when trying to find matching rows in the various tables: we first try to join by day+entity,\n    // then by year+entity and finally entity only.\n    // This last join by entity only is important so that variables that don't have values for years\n    // that come up in the day+entity index we still retain the values. E.g. our continents table\n    // has values for all countries but only for the year 2015. If we join that with covid era days\n    // we still want to retain the continents so we have the fallback to entity only (this was also\n    // the only behaviour prior to July 2022). Remember that tolerance will only be applied much later -\n    // here we are only concerned with merging multiple variables into an inputTable that retains information.\n    // Another approach would be to convert years into days when we have days - then we could simplify the fallback\n    // join key logic described above.\n    // Another caveat is that by switching to day+entity as the primary index that we use to join we can drop some entities.\n    // This happens e.g. with Antarctica if the continents table is used. Continents contains an entry for the entity Antarctica for 2015\n    // that maps it (and 3 other territories) to the Antarctica continent. If the days variables don't have values for any of the\n    // Antarctica entities then they will not be enumerated for the final join table and thus they will be dropped from the final table.\n    // This is maybe counter to what you would expect from a full join but is simply an artifact of making days+entities the primary\n    // index and not backporting years to days. We might want to revisit this in the future and/or also apply tolerance already\n    // at this level here.\n\n    // Merge all day based variables together (returns an empty table if there are none)\n    const variablesJoinedByDay = fullJoinTables(variableTablesToJoinByDay, [\n        OwidTableSlugs.day,\n        OwidTableSlugs.entityId,\n    ])\n\n    let joinedVariablesTable: OwidTable\n    // If we have both day and year based variables we need to do some special logic as described above\n    if (\n        variableTablesToJoinByYear.length > 0 &&\n        variableTablesToJoinByDay.length > 0\n    ) {\n        // Derive the year from the day column and add it to the joined days table\n        const daysColumn = variablesJoinedByDay.getColumns([\n            OwidTableSlugs.day,\n        ])[0]\n        const getYearFromISOStringMemoized = _.memoize((dayValue: number) =>\n            getYearFromISOStringAndDayOffset(EPOCH_DATE, dayValue)\n        )\n        const yearsForDaysValues = daysColumn.values.map((dayValue) =>\n            getYearFromISOStringMemoized(dayValue as number)\n        )\n\n        const newYearColumn = {\n            ...daysColumn,\n            slug: OwidTableSlugs.year,\n            name: OwidTableSlugs.year,\n            values: yearsForDaysValues,\n        } as OwidColumnDef\n        const variablesJoinedByDayWithYearFilled =\n            variablesJoinedByDay.appendColumns([newYearColumn])\n\n        // Now join the already merged days table with all the years. It is important\n        // to not join the years together into one table already before so that each\n        // table lookup for fallback values is looked at individually.\n        // See the longer comment above for the idea behind the fallback cascade here of\n        // trying to merge first by day+entity, then year+entity and finally entity only\n        joinedVariablesTable = fullJoinTables(\n            [variablesJoinedByDayWithYearFilled, ...variableTablesToJoinByYear],\n            [OwidTableSlugs.day, OwidTableSlugs.entityId],\n            [\n                [OwidTableSlugs.year, OwidTableSlugs.entityId],\n                [OwidTableSlugs.entityId],\n            ]\n        )\n        // If we have scatter/marimekko variables that had a targetTime set\n        // then these are now joined in by matching entity only\n        if (variableTablesWithYearToJoinByEntityOnly.length > 0)\n            joinedVariablesTable = fullJoinTables(\n                [\n                    joinedVariablesTable,\n                    ...variableTablesWithYearToJoinByEntityOnly,\n                ],\n                [OwidTableSlugs.day, OwidTableSlugs.entityId],\n                [[OwidTableSlugs.entityId]]\n            )\n    } else if (variableTablesToJoinByYear.length > 0) {\n        // If we only have year based variables then life is easy and we just join\n        // those together without any special cases\n        joinedVariablesTable = fullJoinTables(variableTablesToJoinByYear, [\n            OwidTableSlugs.year,\n            OwidTableSlugs.entityId,\n        ])\n\n        // If we have scatter/marimekko variables that had a targetTime set\n        // then these are now joined in by matching entity only\n        if (variableTablesWithYearToJoinByEntityOnly.length > 0)\n            joinedVariablesTable = fullJoinTables(\n                [\n                    joinedVariablesTable,\n                    ...variableTablesWithYearToJoinByEntityOnly,\n                ],\n                [OwidTableSlugs.year, OwidTableSlugs.entityId],\n                [[OwidTableSlugs.entityId]]\n            )\n    } else {\n        // If we only have day variables life is also easy but this case is rare\n        joinedVariablesTable = variablesJoinedByDay\n\n        // If we have scatter/marimekko variables that had a targetTime set\n        // then these are now joined in by matching entity only\n        if (variableTablesWithYearToJoinByEntityOnly.length > 0)\n            joinedVariablesTable = fullJoinTables(\n                [\n                    joinedVariablesTable,\n                    ...variableTablesWithYearToJoinByEntityOnly,\n                ],\n                [OwidTableSlugs.day, OwidTableSlugs.entityId],\n                [[OwidTableSlugs.entityId]]\n            )\n    }\n\n    // Inject a common \"time\" column that is used as the main time column for the table\n    // e.g. for the timeline.\n    for (const dayOrYearSlug of [OwidTableSlugs.day, OwidTableSlugs.year]) {\n        if (joinedVariablesTable.columnSlugs.includes(dayOrYearSlug)) {\n            joinedVariablesTable = joinedVariablesTable.duplicateColumn(\n                dayOrYearSlug,\n                { slug: OwidTableSlugs.time, name: OwidTableSlugs.time }\n            )\n            // Do not inject multiple columns, terminate after one is successful\n            break\n        }\n    }\n\n    // Append the entity color column if we have selected entity colors\n    if (!_.isEmpty(selectedEntityColors)) {\n        const entityColorColumnSlug = OwidTableSlugs.entityColor\n\n        const valueFn = (\n            entityName: EntityName | undefined\n        ): string | ErrorValue => {\n            if (!entityName) return ErrorValueTypes.UndefinedButShouldBeString\n            return entityName && selectedEntityColors\n                ? (selectedEntityColors[entityName] ??\n                      ErrorValueTypes.UndefinedButShouldBeString)\n                : ErrorValueTypes.UndefinedButShouldBeString\n        }\n\n        const values =\n            joinedVariablesTable.entityNameColumn.valuesIncludingErrorValues.map(\n                (entityName) => valueFn(entityName as EntityName)\n            )\n\n        joinedVariablesTable = joinedVariablesTable.appendColumns([\n            {\n                slug: entityColorColumnSlug,\n                name: entityColorColumnSlug,\n                type: ColumnTypeNames.Color,\n                values: values,\n            },\n        ])\n    }\n    return joinedVariablesTable\n}\n\nconst fullJoinTables = (\n    tables: OwidTable[],\n    indexColumnNames: OwidTableSlugs[],\n    mergeFallbackLookupColumns?: OwidTableSlugs[][]\n): OwidTable => {\n    // This function merges a number of OwidTables together using a given list of columns\n    // to be used as the merge key. The merge key columns are used to construct a full set\n    // of index values from the various tables - all tables are enumerated, we create\n    // a merged string value from the index column values for each row and then we create\n    // a set from all these string values.\n    // Note that not every table has to have values for all columns - not even all the index\n    // columns have to exist on all tables (the index columns have to exist on the first table though)!\n    // The reason for this and how this can possibly work\n    // is that we also have a list of fallback merge columns. This is required so we can handle\n    // not just the easy case where we have year+entity for every table to be merged (which in our\n    // data model is by far the most common default), but also handle cases where we merge year and\n    // day based variables together. For this latter case we need to still construct the set of index\n    // values for the final table, but then when we try to look up values in the various tables to\n    // merge together we will not find values by day+entity for the year based tables. So for this\n    // case we get a series of fallback column tuples that we try in turn if the main index lookup\n    // fails. These fallback tuples are year+entity first and then entity only. The reasoning here is\n    // that e.g. when merging population to a day variable we want to merge the values from the year\n    // matching the day from the population variable (year+entity lookup) but for variables that don't\n    // have overlapping years (e.g. continents that only has 2015 as the single year) we want to fall back\n    // to merging by entity alone as a last resort\n    if (tables.length === 0) return new OwidTable()\n    else if (tables.length === 1) return tables[0]\n\n    // Get all the index values per table and then figure out the full set of all stringified index values\n    const indexValuesPerTable: Map<string, number[]>[] = tables.map((table) =>\n        // When we get a mergeFallbackLookupColumn then it can happen that a table does not have all the\n        // columns of the main index. In this case, just return an empty map because that will lead all\n        // lookups by main index to fail and we'll try the fallback index\n        mergeFallbackLookupColumns &&\n        _.difference(indexColumnNames, table.columnSlugs).length > 0\n            ? new Map()\n            : table.rowIndex(indexColumnNames)\n    )\n\n    // Construct all the fallback index lookup values for all tables. mergeFallbackLookupColumns is an\n    // array of array that is supposed to be treated as a sequence of tuples of column names\n    const mergeFallbackLookupValuesPerTable = mergeFallbackLookupColumns\n        ? mergeFallbackLookupColumns.map((fallbackColumns) =>\n              tables.map((table) => table.rowIndex(fallbackColumns))\n          )\n        : undefined\n\n    // Figure out which column names are shared. Shared columns (the index columns but also in our\n    // data model stuff like entityCode and entityName that we usually have in addition to entityId)\n    // will end up only once in the final table. This is a bit of a footgun for arbitrary data models\n    // as we don't make sure that the values are equal for the same index values (we only assume that\n    // this is true) - but this is how we have handled it in the past and it works with the setup we\n    // have.\n    const sharedColumnNames = intersection(\n        ...tables.map((table) => table.columnSlugs)\n    )\n    const allIndexValuesArray = indexValuesPerTable.flatMap((index) => [\n        ...index.keys(),\n    ])\n    const allIndexValues = new Set(allIndexValuesArray)\n\n    // Now identify for each table which columns should be copied (i.e. all non-index columns).\n    const columnsToAddPerTable = tables.map((table) =>\n        _.difference(table.columnSlugs, sharedColumnNames)\n    )\n    // Prepare a special entry for the Table + column names tuple that we will zip and\n    // map in the next step. This special entry is the first table and contains only the\n    // unique columns (index + other tables that are shared among all tables).\n    // We will preferentially get the unique values from the first table but because\n    // the first table is not guaranteed to contain all index values we'll later on\n    // try other tables for these shared columns if the given row index does\n    // not exist in the first table\n    const firstTableDuplicateForIndices: [\n        OwidTable | undefined,\n        string[] | undefined,\n    ] = [tables[0], sharedColumnNames]\n    const defsToAddPerTable = [firstTableDuplicateForIndices]\n        .concat(R.zip(tables, columnsToAddPerTable))\n        .map(\n            (tableAndColumns) =>\n                tableAndColumns[0]!\n                    .getColumns(tableAndColumns[1]!)\n                    .map((col) => {\n                        const def = { ...col.def }\n                        def.values = []\n                        return def\n                    }) as OwidColumnDef[]\n        )\n    // Now loop over all unique index values and for each assemble as full a row as we can manage by looking\n    // up the values in the different source tables\n    for (const index of allIndexValues.values()) {\n        // First we handle the unique/index columns (defsToAddPerTable[0])\n        for (const def of defsToAddPerTable[0]) {\n            // The index columns are special - the first table might not have a value for each of the index columns\n            // at the current index (e.g. a year that does not exist in the first table). We therefore have to keep\n            // looking in the other tables until we find a table that has the values. Because the index values were\n            // generated from the combined set of all index values we are guaranteed to find a value eventually before\n            // we exceed the length of the tables array\n            let tableIndex = 0\n            let indexHits = indexValuesPerTable[tableIndex].get(index)\n            while (indexHits === undefined) {\n                tableIndex++\n                indexHits = indexValuesPerTable[tableIndex].get(index)\n            }\n            def.values?.push(\n                tables[tableIndex].columnStore[def.slug][indexHits[0]]\n            )\n        }\n        // Now figure out the fallback merge lookup index value from the first table.\n        // This is the fallback index we use when looking up values and we don't find a value in the normal index.\n        // This is the case when we join year and day variables and then use day+entityid as the key but the year\n        // variables don't have those - so for the year variables we then check if there is a match using year+entityId\n        // where the year to use comes from the first table that by convention HAS TO contain a year column with the\n        // value to merge years on.\n        const indexHits = indexValuesPerTable[0].get(index)\n        const fallbackMergeIndices =\n            mergeFallbackLookupColumns && indexHits\n                ? mergeFallbackLookupColumns.map((columnSet) =>\n                      makeKeyFn(tables[0].columnStore, columnSet)(indexHits[0])\n                  )\n                : undefined\n        // now add all the nonindex value columns. We now loop over all tables and for each non-shared column\n        // we look up the value for the current row. We find the value for the current row by first trying to\n        // look up a match based on the shared index values, indexValuesPerTable[i]. If we don't have a hit\n        // for this row in this table then we try the fallbackMergeIndices in turn to see if we can merge\n        // based on these fallback indexes. If no option leads to a match we store ErrorValueTypes.NoMatchingValueAfterJoin\n        // in the cell.\n\n        // note that defsToAddPerTable has one more element than tables (the one duplicate of the\n        // first table that we added in the beginning that we use as the primary source for the shared columns)\n        for (let i = 0; i < tables.length; i++) {\n            let indexHits = indexValuesPerTable[i].get(index)\n\n            if (indexHits !== undefined && indexHits.length > 1)\n                // This case should be rare but it can come up. The old algorithm ran into this often because it\n                // joined a lot more stuff on entity only and then when you look up by entity into a table that has\n                // several years you end up with multiple matches. The old algorithm used to just pick one value.\n                // We still do this ultimately but because we try to match even day and year variables by year+entity\n                // first we should usually be able to find a unique match. The error output is here so that when\n                // something is weird in an edge case then this shows up as a debugging hint in the console.\n                console.error(\n                    `Found more than one matching row in table ${tables[i].tableSlug}`\n                )\n            for (const def of defsToAddPerTable[i + 1]) {\n                // If the main index led to a hit then we just copy the value into the new row from the source table\n                if (indexHits !== undefined)\n                    def.values?.push(\n                        tables[i].columnStore[def.slug][indexHits[0]]\n                    )\n                else {\n                    // If the main index did not lead to a hit then we try the fallback indices in turn\n                    indexHits = undefined\n                    for (\n                        let fallbackIndex = 0;\n                        fallbackMergeIndices &&\n                        mergeFallbackLookupValuesPerTable &&\n                        indexHits === undefined &&\n                        fallbackIndex < fallbackMergeIndices.length;\n                        fallbackIndex++\n                    ) {\n                        indexHits = mergeFallbackLookupValuesPerTable[\n                            fallbackIndex\n                        ][i].get(fallbackMergeIndices[fallbackIndex])\n                    }\n                    if (indexHits !== undefined)\n                        // If any of the fallbacks led to a hit then we use this hit\n                        // Note that we choose the last of the indexHits entries to look up the row in the columnstore here.\n                        // In the usual case the fallback index should still have enough information to match just one row (e.g.\n                        // year+entity). But for cases when we join day and year variables we have as the ultimate fallback a match\n                        // by entity only and this can then of course result in many indexHits when looking up an entity like Germany\n                        // in e.g. the population variable. If this join here were properly time and tolerance aware then we could\n                        // avoid matching on entity alone as the ultimate fallback but for  now this function is not that clever.\n                        // For the cases when we do get multiple hits for an index we could thus choose any data point. Pre July 2022\n                        // the old code always chose the first datapoint, which is often the first year that the variable has data for\n                        // for the given entity. This is not great, e.g. when using a covid date based variable and joining it to\n                        // population or similar. What we do here now is to use indexHits.length - 1 as the index, i.e. the last\n                        // row that this variable has data for for this entity. This could in theory be pretty wrong as well but in\n                        // practice it often means a very close match.\n                        // The proper solution as mentioned above would be to never fall back to entity matches only and move\n                        // the tolerance matching into this function as well instead.\n                        def.values?.push(\n                            tables[i].columnStore[def.slug][\n                                indexHits[indexHits.length - 1]\n                            ]\n                        )\n                    // If none of the fallback values worked either we write ErrorValueTypes.NoMatchingValueAfterJoin into the cell\n                    else\n                        def.values?.push(\n                            ErrorValueTypes.NoMatchingValueAfterJoin as any\n                        )\n                }\n            }\n        }\n    }\n    return new OwidTable(\n        [],\n        defsToAddPerTable.flatMap((defs) => defs)\n    )\n}\n\nconst variableTypeToColumnType = (type: OwidVariableType): ColumnTypeNames => {\n    switch (type) {\n        case \"ordinal\":\n            return ColumnTypeNames.Ordinal\n        case \"string\":\n            return ColumnTypeNames.String\n        case \"int\":\n            return ColumnTypeNames.Integer\n        case \"float\":\n            return ColumnTypeNames.Numeric\n        case \"mixed\":\n        default:\n            return ColumnTypeNames.NumberOrString\n    }\n}\n\nconst getSortFromDimensions = (\n    dimensions: OwidVariableDimensions\n): string[] | undefined => {\n    const values = dimensions.values?.values\n    if (!values) return\n\n    const sort = values\n        .map((value) => value.name)\n        .filter((name) => name !== undefined)\n\n    if (sort.length === 0) return\n\n    return sort\n}\n\nconst columnDefFromOwidVariable = (\n    variable: OwidVariableWithSourceAndDimension\n): OwidColumnDef => {\n    const slug = variable.id.toString() // For now, the variableId will be the column slug\n    const {\n        unit,\n        shortUnit,\n        description,\n        coverage,\n        datasetId,\n        datasetName,\n        descriptionShort,\n        descriptionProcessing,\n        descriptionKey,\n        descriptionFromProducer,\n        source,\n        origins,\n        display,\n        timespan,\n        nonRedistributable,\n        presentation,\n        catalogPath,\n        updatePeriodDays,\n        shortName,\n    } = variable\n\n    const isContinent = isContinentsVariableId(variable.id)\n    const name = variable.name\n\n    // The column's type\n    const parsedType = variable.type\n        ? variableTypeToColumnType(variable.type)\n        : ColumnTypeNames.NumberOrString\n\n    // Override the column type for the special Continents variable\n    const type = isContinent ? ColumnTypeNames.Continent : parsedType\n\n    // Extract the sort order for ordinal variables from their dimension metadata.\n    // This preserves the author-specified ordering of categorical values\n    // (e.g., \"Low\", \"Medium\", \"High\").\n    const sort =\n        parsedType === ColumnTypeNames.Ordinal\n            ? getSortFromDimensions(variable.dimensions)\n            : undefined\n\n    return {\n        name,\n        slug,\n        isDailyMeasurement: display?.yearIsDay,\n        unit,\n        shortUnit,\n        description,\n        descriptionShort,\n        descriptionProcessing,\n        descriptionKey,\n        descriptionFromProducer,\n        coverage,\n        datasetId,\n        datasetName,\n        display,\n        color: display?.color,\n        nonRedistributable,\n        sourceLink: source?.link,\n        sourceName: source?.name,\n        dataPublishedBy: source?.dataPublishedBy,\n        dataPublisherSource: source?.dataPublisherSource,\n        retrievedDate: source?.retrievedDate,\n        additionalInfo: source?.additionalInfo,\n        timespan,\n        origins,\n        presentation,\n        catalogPath,\n        updatePeriodDays,\n        owidVariableId: variable.id,\n        owidProcessingLevel: variable.processingLevel,\n        owidSchemaVersion: variable.schemaVersion,\n        type,\n        sort,\n        shortName,\n    }\n}\n\nconst timeColumnDefFromOwidVariable = (\n    variableMetadata: OwidVariableWithSource\n): OwidColumnDef => {\n    return variableMetadata.display?.yearIsDay\n        ? {\n              slug: OwidTableSlugs.day,\n              type: ColumnTypeNames.Day,\n              name: \"Day\",\n          }\n        : {\n              slug: OwidTableSlugs.year,\n              type: ColumnTypeNames.Year,\n              name: \"Year\",\n          }\n}\n\nconst timeColumnValuesFromOwidVariable = (\n    variableMetadata: OwidVariableWithSource,\n    variableData: OwidVariableMixedData\n): number[] => {\n    const { display } = variableMetadata\n    const { years } = variableData\n    const yearsNeedTransform =\n        display &&\n        display.yearIsDay &&\n        display.zeroDay !== undefined &&\n        display.zeroDay !== EPOCH_DATE\n    const yearsRaw = years || []\n    return yearsNeedTransform\n        ? convertLegacyYears(yearsRaw, display.zeroDay!)\n        : yearsRaw\n}\n\nconst convertLegacyYears = (years: number[], zeroDay: string): number[] => {\n    // Only shift years if the variable zeroDay is different from EPOCH_DATE\n    // When the dataset uses days (`yearIsDay == true`), the days are expressed as integer\n    // days since the specified `zeroDay`, which can be different for different variables.\n    // In order to correctly join variables with different `zeroDay`s in a single chart, we\n    // normalize all days to be in reference to a single epoch date.\n    const diff = diffDateISOStringInDays(zeroDay, EPOCH_DATE)\n    return years.map((y) => y + diff)\n}\n\nconst annotationMapAndDefFromOwidVariable = (\n    variable: OwidVariableWithSourceAndDimension\n): [Map<string, string>, OwidColumnDef] | [] => {\n    if (variable.display?.entityAnnotationsMap) {\n        const slug = variable.id.toString()\n        const annotationsSlug = makeAnnotationsSlug(slug)\n        const annotationMap = annotationsToMap(\n            variable.display.entityAnnotationsMap\n        )\n        const columnDef: OwidColumnDef = {\n            slug: annotationsSlug,\n            type: ColumnTypeNames.SeriesAnnotation,\n            name: annotationsSlug,\n            display: { includeInTable: false },\n            derivedFrom: { columnSlug: slug, relationship: \"annotations\" },\n        }\n        return [annotationMap, columnDef]\n    }\n    return []\n}\n\nconst annotationsToMap = (annotations: string): Map<string, string> => {\n    // Todo: let's delete this and switch to traditional columns\n    const entityAnnotationsMap = new Map<string, string>()\n    const delimiter = \":\"\n    annotations.split(\"\\n\").forEach((line) => {\n        const [key, ...words] = line.split(delimiter)\n        entityAnnotationsMap.set(key.trim(), words.join(delimiter).trim())\n    })\n    return entityAnnotationsMap\n}\n\n/**\n * Loads a single variable into an OwidTable.\n */\nexport function buildVariableTable(\n    variable: OwidVariableDataMetadataDimensions\n): OwidTable {\n    const entityMeta = variable.metadata.dimensions.entities.values\n    const entityMetaById: OwidEntityKey = Object.fromEntries(\n        entityMeta.map((entity) => [entity.id.toString(), entity])\n    )\n\n    // Base column defs, present in all OwidTables\n    const baseColumnDefs: Map<ColumnSlug, CoreColumnDef> = new Map(\n        StandardOwidColumnDefs.map((def) => [def.slug, def])\n    )\n\n    const columnDefs = new Map(baseColumnDefs)\n\n    // Time column\n    const timeColumnDef = timeColumnDefFromOwidVariable(variable.metadata)\n    columnDefs.set(timeColumnDef.slug, timeColumnDef)\n\n    // Value column\n    const valueColumnDef = columnDefFromOwidVariable(variable.metadata)\n    // Because database columns can contain mixed types, we want to avoid\n    // parsing for Grapher data until we fix that.\n    valueColumnDef.skipParsing = true\n    columnDefs.set(valueColumnDef.slug, valueColumnDef)\n\n    // Column values\n\n    const times = timeColumnValuesFromOwidVariable(\n        variable.metadata,\n        variable.data\n    )\n    const entityIds = variable.data.entities ?? []\n    const entityNames = entityIds.map(\n        // if entityMetaById[id] does not exist, then we don't have entity\n        // from variable metadata in MySQL. This can happen because we take\n        // data from S3 and metadata from MySQL. After we unify it, it should\n        // no longer be a problem\n        (id) => entityMetaById[id]?.name ?? id.toString()\n    )\n    // see comment above about entityMetaById[id]\n    const entityCodes = entityIds.map((id) => entityMetaById[id]?.code)\n\n    // If there is a conversionFactor, apply it.\n    let values = variable.data.values || []\n    const conversionFactor = valueColumnDef.display?.conversionFactor\n    if (conversionFactor !== undefined) {\n        values = values.map((value) =>\n            _.isNumber(value) ? value * conversionFactor : value\n        )\n\n        // If a non-int conversion factor is applied to an integer column,\n        // we end up with a numeric column.\n        if (\n            valueColumnDef.type === ColumnTypeNames.Integer &&\n            !_.isInteger(conversionFactor)\n        )\n            valueColumnDef.type = ColumnTypeNames.Numeric\n    }\n\n    const columnStore: { [key: string]: any[] } = {\n        [OwidTableSlugs.entityId]: entityIds,\n        [OwidTableSlugs.entityCode]: entityCodes,\n        [OwidTableSlugs.entityName]: entityNames,\n        [timeColumnDef.slug]: times,\n        [valueColumnDef.slug]: values,\n    }\n\n    return new OwidTable(columnStore, Array.from(columnDefs.values()))\n}\n","import * as React from \"react\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { GRAPHER_SIDE_PANEL_CLASS } from \"../core/GrapherConstants.js\"\n\nexport const SidePanel = ({\n    bounds,\n    children,\n}: {\n    bounds: Bounds\n    children: React.ReactNode\n}) => {\n    return (\n        <div\n            className={GRAPHER_SIDE_PANEL_CLASS}\n            style={{\n                width: bounds.width,\n                height: bounds.height,\n            }}\n        >\n            {children}\n        </div>\n    )\n}\n","export const OWID_LOGO_SVG = `<svg className=\"owidLogo\" xmlns=\"http://www.w3.org/2000/svg\" width=\"65\" height=\"36\" viewBox=\"0 0 65 36\"  fill=\"none\"><path fill=\"#002147\" d=\"M0 0h64.8v36H0z\"/><path fill=\"#CE261E\" d=\"M0 33.3h64.8V36H0z\"/><path fill=\"#fff\" d=\"M13.796 10.575c0 .636-.106 1.226-.318 1.77a4.193 4.193 0 0 1-.894 1.404 4.084 4.084 0 0 1-1.386.93c-.54.22-1.138.33-1.794.33-.656 0-1.256-.11-1.8-.33a4.149 4.149 0 0 1-1.392-.93 4.193 4.193 0 0 1-.894-1.404A4.833 4.833 0 0 1 5 10.575c0-.636.106-1.224.318-1.764a4.18 4.18 0 0 1 .894-1.41 4.076 4.076 0 0 1 1.392-.924 4.684 4.684 0 0 1 1.8-.336c.656 0 1.254.112 1.794.336.54.224 1.002.534 1.386.93.384.392.682.86.894 1.404.212.54.318 1.128.318 1.764Zm-1.656 0c0-.476-.064-.902-.192-1.278a2.671 2.671 0 0 0-.54-.966 2.332 2.332 0 0 0-.864-.606 2.94 2.94 0 0 0-1.14-.21c-.424 0-.806.07-1.146.21-.34.14-.63.342-.87.606a2.742 2.742 0 0 0-.546.966 3.955 3.955 0 0 0-.192 1.278c0 .476.064.904.192 1.284.128.376.31.696.546.96.24.26.53.46.87.6.34.14.722.21 1.146.21.424 0 .804-.07 1.14-.21.34-.14.628-.34.864-.6.236-.264.416-.584.54-.96a4.01 4.01 0 0 0 .192-1.284ZM16.104 8.757v3.912c0 .376.086.668.258.876.176.204.438.306.786.306.256 0 .496-.056.72-.168a2.58 2.58 0 0 0 .636-.474V8.757h1.482v6.156h-.906c-.192 0-.318-.09-.378-.27l-.102-.492a4.65 4.65 0 0 1-.396.354 2.577 2.577 0 0 1-.438.27 2.35 2.35 0 0 1-.498.168 2.345 2.345 0 0 1-.57.066c-.336 0-.634-.056-.894-.168a1.821 1.821 0 0 1-.648-.486 2.157 2.157 0 0 1-.402-.738 3.233 3.233 0 0 1-.132-.948V8.757h1.482ZM21.328 14.913V8.757h.87c.152 0 .258.028.318.084.06.056.1.152.12.288l.09.744c.22-.38.478-.68.774-.9.296-.22.628-.33.996-.33.304 0 .556.07.756.21l-.192 1.11c-.012.072-.038.124-.078.156a.278.278 0 0 1-.162.042 1.01 1.01 0 0 1-.246-.042 1.646 1.646 0 0 0-.414-.042c-.308 0-.572.086-.792.258-.22.168-.406.416-.558.744v3.834h-1.482ZM27.347 6.237h1.356a.57.57 0 0 1 .348.102c.096.064.16.152.192.264l1.476 5.19c.036.128.068.268.096.42.032.148.062.306.09.474a5.968 5.968 0 0 1 .228-.894l1.704-5.19a.575.575 0 0 1 .186-.252.543.543 0 0 1 .348-.114h.474a.57.57 0 0 1 .348.102.497.497 0 0 1 .192.264l1.692 5.19c.088.256.164.54.228.852.028-.156.056-.306.084-.45.032-.144.064-.278.096-.402l1.476-5.19c.028-.1.09-.186.186-.258a.563.563 0 0 1 .348-.108h1.266l-2.694 8.676h-1.458l-1.896-5.928-.078-.246a9.504 9.504 0 0 1-.072-.282c-.024.1-.05.194-.078.282-.024.088-.048.17-.072.246l-1.914 5.928H30.04l-2.694-8.676ZM42.771 8.661c.46 0 .876.074 1.248.222.376.148.696.358.96.63s.468.604.612.996c.144.392.216.83.216 1.314 0 .488-.072.928-.216 1.32a2.85 2.85 0 0 1-.612 1.002 2.653 2.653 0 0 1-.96.636 3.35 3.35 0 0 1-1.248.222c-.46 0-.878-.074-1.254-.222a2.712 2.712 0 0 1-.966-.636 2.922 2.922 0 0 1-.618-1.002 3.807 3.807 0 0 1-.216-1.32c0-.484.072-.922.216-1.314.148-.392.354-.724.618-.996.268-.272.59-.482.966-.63a3.397 3.397 0 0 1 1.254-.222Zm0 5.202c.512 0 .89-.172 1.134-.516.248-.344.372-.848.372-1.512s-.124-1.17-.372-1.518c-.244-.348-.622-.522-1.134-.522-.52 0-.904.176-1.152.528-.248.348-.372.852-.372 1.512s.124 1.164.372 1.512c.248.344.632.516 1.152.516ZM46.723 14.913V8.757h.87c.152 0 .258.028.318.084.06.056.1.152.12.288l.09.744c.22-.38.478-.68.774-.9.296-.22.628-.33.996-.33.304 0 .556.07.756.21l-.192 1.11c-.012.072-.038.124-.078.156a.278.278 0 0 1-.162.042 1.01 1.01 0 0 1-.246-.042 1.646 1.646 0 0 0-.414-.042c-.308 0-.572.086-.792.258-.22.168-.406.416-.558.744v3.834h-1.482ZM52.96 5.997v8.916h-1.482V5.997h1.482ZM58.732 14.913c-.192 0-.318-.09-.378-.27l-.12-.594a3.68 3.68 0 0 1-.402.39c-.14.116-.292.216-.456.3-.16.084-.334.148-.522.192a2.372 2.372 0 0 1-.6.072c-.336 0-.644-.07-.924-.21a2.098 2.098 0 0 1-.726-.606 3.033 3.033 0 0 1-.468-.99 5.072 5.072 0 0 1-.162-1.344c0-.456.062-.88.186-1.272s.302-.732.534-1.02c.232-.288.51-.512.834-.672a2.384 2.384 0 0 1 1.092-.246 2.103 2.103 0 0 1 1.536.606V5.997h1.482v8.916h-.906Zm-1.974-1.086c.308 0 .57-.064.786-.192.216-.128.42-.31.612-.546v-2.76a1.452 1.452 0 0 0-.552-.432 1.597 1.597 0 0 0-.636-.126c-.224 0-.428.042-.612.126a1.21 1.21 0 0 0-.462.384c-.124.168-.22.384-.288.648-.068.26-.102.568-.102.924 0 .36.028.666.084.918.06.248.144.452.252.612.108.156.24.27.396.342.156.068.33.102.522.102ZM16.331 20.757v6.156H14.85v-6.156h1.481Zm.223-1.794a.844.844 0 0 1-.078.36.963.963 0 0 1-.21.294.995.995 0 0 1-.3.204.963.963 0 0 1-.372.072.948.948 0 0 1-.367-.072 1.018 1.018 0 0 1-.498-.498.963.963 0 0 1 0-.732.995.995 0 0 1 .205-.3.929.929 0 0 1 .293-.198.899.899 0 0 1 .738 0 .912.912 0 0 1 .3.198.943.943 0 0 1 .288.672ZM17.771 26.913v-6.156h.906c.192 0 .318.09.378.27l.102.486a2.934 2.934 0 0 1 .828-.618c.156-.076.322-.134.498-.174.176-.04.368-.06.576-.06.336 0 .634.058.894.174.26.112.476.272.648.48.176.204.308.45.396.738.092.284.138.598.138.942v3.918h-1.482v-3.918c0-.376-.088-.666-.264-.87-.172-.208-.432-.312-.78-.312-.256 0-.496.058-.72.174a2.58 2.58 0 0 0-.636.474v4.452h-1.482ZM34.22 22.575c0 .636-.106 1.22-.318 1.752-.212.532-.51.99-.894 1.374a4 4 0 0 1-1.386.894 4.87 4.87 0 0 1-1.794.318h-3.312v-8.676h3.312a4.79 4.79 0 0 1 1.794.324 4 4 0 0 1 1.386.894c.384.38.682.836.894 1.368.212.532.318 1.116.318 1.752Zm-1.65 0c0-.476-.064-.902-.192-1.278a2.68 2.68 0 0 0-.546-.96 2.332 2.332 0 0 0-.864-.606 2.94 2.94 0 0 0-1.14-.21h-1.686v6.108h1.686c.424 0 .804-.07 1.14-.21.34-.14.628-.34.864-.6a2.75 2.75 0 0 0 .546-.96 4.01 4.01 0 0 0 .192-1.284ZM39.98 26.913h-.665c-.14 0-.25-.02-.33-.06-.08-.044-.14-.13-.18-.258l-.132-.438c-.156.14-.31.264-.462.372a2.804 2.804 0 0 1-.462.264c-.16.072-.33.126-.51.162-.18.036-.38.054-.6.054-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.448 1.448 0 0 1-.366-.522 1.852 1.852 0 0 1-.132-.726c0-.232.06-.46.18-.684.124-.228.328-.432.612-.612.284-.184.662-.336 1.134-.456.472-.12 1.058-.188 1.758-.204v-.36c0-.412-.088-.716-.264-.912-.172-.2-.424-.3-.756-.3a1.837 1.837 0 0 0-1.02.276c-.116.068-.224.13-.324.186a.664.664 0 0 1-.33.084.429.429 0 0 1-.258-.078.614.614 0 0 1-.174-.192l-.27-.474c.708-.648 1.562-.972 2.562-.972.36 0 .68.06.96.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96v3.888Zm-2.88-.924c.153 0 .293-.014.42-.042.129-.028.249-.07.36-.126.117-.056.227-.124.33-.204.109-.084.217-.182.325-.294v-1.038c-.432.02-.794.058-1.086.114-.288.052-.52.12-.696.204a.923.923 0 0 0-.378.294.664.664 0 0 0-.108.366c0 .26.076.446.228.558.156.112.358.168.606.168ZM43.22 27.01c-.532 0-.942-.15-1.23-.45-.288-.305-.432-.723-.432-1.255v-3.438h-.624a.31.31 0 0 1-.21-.078c-.056-.052-.084-.13-.084-.234v-.588l.99-.162.312-1.68a.302.302 0 0 1 .108-.186.365.365 0 0 1 .222-.066h.768v1.938h1.62v1.056h-1.62v3.336c0 .192.048.342.144.45a.488.488 0 0 0 .384.162c.092 0 .168-.01.228-.03.064-.024.118-.048.162-.072.048-.024.09-.046.126-.066a.194.194 0 0 1 .108-.036.16.16 0 0 1 .108.036c.028.02.058.052.09.096l.444.72c-.216.18-.464.316-.744.408a2.77 2.77 0 0 1-.87.138ZM50.423 26.913h-.666c-.14 0-.25-.02-.33-.06-.08-.044-.14-.13-.18-.258l-.132-.438c-.156.14-.31.264-.462.372a2.804 2.804 0 0 1-.462.264c-.16.072-.33.126-.51.162-.18.036-.38.054-.6.054-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.448 1.448 0 0 1-.366-.522 1.852 1.852 0 0 1-.132-.726c0-.232.06-.46.18-.684.124-.228.328-.432.612-.612.284-.184.662-.336 1.134-.456.472-.12 1.058-.188 1.758-.204v-.36c0-.412-.088-.716-.264-.912-.172-.2-.424-.3-.756-.3a1.837 1.837 0 0 0-1.02.276c-.116.068-.224.13-.324.186a.664.664 0 0 1-.33.084.429.429 0 0 1-.258-.078.614.614 0 0 1-.174-.192l-.27-.474c.708-.648 1.562-.972 2.562-.972.36 0 .68.06.96.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96v3.888Zm-2.88-.924c.152 0 .292-.014.42-.042.128-.028.248-.07.36-.126.116-.056.226-.124.33-.204.108-.084.216-.182.324-.294v-1.038c-.432.02-.794.058-1.086.114-.288.052-.52.12-.696.204a.923.923 0 0 0-.378.294.664.664 0 0 0-.108.366c0 .26.076.446.228.558.156.112.358.168.606.168Z\"/></svg>`\n\nexport const SMALL_OWID_LOGO_SVG = `<svg className=\"owidLogo\" xmlns=\"http://www.w3.org/2000/svg\" width=\"51\" height=\"28\" viewBox=\"0 0 51 28\" fill=\"none\"><path fill=\"#002147\" d=\"M0 0h50.4v28H0z\"/><path fill=\"#CE261E\" d=\"M0 25.9h50.4V28H0z\"/><path fill=\"#fff\" d=\"M10.33 8.385c0 .53-.088 1.022-.265 1.475-.177.45-.425.84-.745 1.17-.32.33-.705.588-1.155.775-.45.183-.948.275-1.495.275a3.966 3.966 0 0 1-1.5-.275 3.458 3.458 0 0 1-1.16-.775c-.32-.33-.568-.72-.745-1.17A4.027 4.027 0 0 1 3 8.385c0-.53.088-1.02.265-1.47.177-.453.425-.845.745-1.175.323-.33.71-.587 1.16-.77.453-.187.953-.28 1.5-.28s1.045.093 1.495.28c.45.187.835.445 1.155.775.32.327.568.717.745 1.17.177.45.265.94.265 1.47Zm-1.38 0c0-.397-.053-.752-.16-1.065a2.226 2.226 0 0 0-.45-.805 1.944 1.944 0 0 0-.72-.505 2.45 2.45 0 0 0-.95-.175c-.353 0-.672.058-.955.175a1.99 1.99 0 0 0-.725.505c-.197.22-.348.488-.455.805-.107.313-.16.668-.16 1.065 0 .397.053.753.16 1.07.107.313.258.58.455.8.2.217.442.383.725.5.283.117.602.175.955.175s.67-.058.95-.175c.283-.117.523-.283.72-.5.197-.22.347-.487.45-.8.107-.317.16-.673.16-1.07ZM12.153 6.87v3.26c0 .313.072.557.215.73.147.17.365.255.655.255.213 0 .413-.047.6-.14.187-.097.363-.228.53-.395V6.87h1.235V12h-.755c-.16 0-.265-.075-.315-.225l-.085-.41a3.848 3.848 0 0 1-.33.295 1.956 1.956 0 0 1-.78.365 1.953 1.953 0 0 1-.475.055c-.28 0-.528-.047-.745-.14a1.519 1.519 0 0 1-.54-.405 1.799 1.799 0 0 1-.335-.615 2.695 2.695 0 0 1-.11-.79V6.87h1.235ZM16.407 12V6.87h.725c.126 0 .215.023.265.07.05.047.083.127.1.24l.075.62c.183-.317.398-.567.645-.75.246-.183.523-.275.83-.275.253 0 .463.058.63.175l-.16.925c-.01.06-.032.103-.065.13a.231.231 0 0 1-.135.035.842.842 0 0 1-.205-.035 1.371 1.371 0 0 0-.345-.035 1.04 1.04 0 0 0-.66.215c-.184.14-.339.347-.465.62V12h-1.235ZM21.222 4.77h1.13c.117 0 .214.028.29.085.08.053.134.127.16.22l1.23 4.325c.03.107.057.223.08.35.027.123.052.255.075.395a4.937 4.937 0 0 1 .19-.745l1.42-4.325a.479.479 0 0 1 .155-.21.453.453 0 0 1 .29-.095h.395c.117 0 .214.028.29.085.077.053.13.127.16.22l1.41 4.325c.074.213.137.45.19.71l.07-.375a9.95 9.95 0 0 1 .08-.335l1.23-4.325a.403.403 0 0 1 .155-.215.47.47 0 0 1 .29-.09h1.055L29.322 12h-1.215l-1.58-4.94-.065-.205a7.928 7.928 0 0 1-.06-.235 3.39 3.39 0 0 1-.065.235c-.02.073-.04.142-.06.205L24.682 12h-1.215l-2.245-7.23ZM33.976 6.79c.383 0 .73.062 1.04.185.313.123.58.298.8.525.22.227.39.503.51.83.12.327.18.692.18 1.095 0 .407-.06.773-.18 1.1-.12.327-.29.605-.51.835a2.21 2.21 0 0 1-.8.53c-.31.123-.657.185-1.04.185s-.732-.062-1.045-.185a2.26 2.26 0 0 1-.805-.53 2.436 2.436 0 0 1-.515-.835 3.173 3.173 0 0 1-.18-1.1c0-.403.06-.768.18-1.095.123-.327.295-.603.515-.83.223-.227.492-.402.805-.525a2.831 2.831 0 0 1 1.045-.185Zm0 4.335c.427 0 .742-.143.945-.43.207-.287.31-.707.31-1.26s-.103-.975-.31-1.265c-.203-.29-.518-.435-.945-.435-.433 0-.753.147-.96.44-.207.29-.31.71-.31 1.26s.103.97.31 1.26c.207.287.527.43.96.43ZM37.17 12V6.87h.724c.127 0 .215.023.266.07.05.047.083.127.1.24l.075.62c.183-.317.398-.567.645-.75.246-.183.523-.275.83-.275.253 0 .463.058.63.175l-.16.925c-.01.06-.032.103-.066.13a.231.231 0 0 1-.134.035.842.842 0 0 1-.206-.035 1.371 1.371 0 0 0-.345-.035 1.04 1.04 0 0 0-.66.215c-.183.14-.338.347-.465.62V12H37.17ZM42.267 4.57V12h-1.235V4.57h1.235ZM46.976 12c-.16 0-.265-.075-.315-.225l-.1-.495a3.07 3.07 0 0 1-.335.325c-.116.097-.243.18-.38.25-.133.07-.278.123-.435.16-.153.04-.32.06-.5.06-.28 0-.536-.058-.77-.175a1.75 1.75 0 0 1-.605-.505 2.525 2.525 0 0 1-.39-.825c-.09-.327-.135-.7-.135-1.12 0-.38.052-.733.155-1.06a2.58 2.58 0 0 1 .445-.85c.194-.24.425-.427.695-.56.27-.137.574-.205.91-.205a1.752 1.752 0 0 1 1.28.505V4.57h1.235V12h-.755Zm-1.645-.905c.257 0 .475-.053.655-.16.18-.107.35-.258.51-.455v-2.3a1.21 1.21 0 0 0-.46-.36 1.331 1.331 0 0 0-.53-.105c-.186 0-.356.035-.51.105-.15.07-.278.177-.385.32-.103.14-.183.32-.24.54a3.068 3.068 0 0 0-.085.77c0 .3.024.555.07.765.05.207.12.377.21.51.09.13.2.225.33.285.13.057.275.085.435.085ZM12.343 16.87V22h-1.235v-5.13h1.235Zm.185-1.495a.702.702 0 0 1-.065.3.802.802 0 0 1-.175.245.828.828 0 0 1-.25.17.802.802 0 0 1-.615 0 .848.848 0 0 1-.415-.415.803.803 0 0 1 0-.61.774.774 0 0 1 .415-.415.75.75 0 0 1 .615 0 .76.76 0 0 1 .25.165.784.784 0 0 1 .24.56ZM13.443 22v-5.13h.755c.16 0 .265.075.315.225l.085.405a2.435 2.435 0 0 1 .69-.515 1.91 1.91 0 0 1 .415-.145c.146-.033.306-.05.48-.05.28 0 .528.048.745.145.216.093.396.227.54.4.146.17.256.375.33.615.076.237.115.498.115.785V22h-1.235v-3.265c0-.313-.074-.555-.22-.725-.144-.173-.36-.26-.65-.26-.214 0-.414.048-.6.145a2.148 2.148 0 0 0-.53.395V22h-1.235ZM26.95 18.385a3.91 3.91 0 0 1-.265 1.46 3.354 3.354 0 0 1-.745 1.145c-.32.32-.705.568-1.155.745-.45.177-.948.265-1.495.265h-2.76v-7.23h2.76c.547 0 1.045.09 1.495.27.45.177.835.425 1.155.745.32.317.568.697.745 1.14.177.443.265.93.265 1.46Zm-1.375 0c0-.397-.053-.752-.16-1.065a2.234 2.234 0 0 0-.455-.8 1.945 1.945 0 0 0-.72-.505 2.45 2.45 0 0 0-.95-.175h-1.405v5.09h1.405c.353 0 .67-.058.95-.175.283-.117.523-.283.72-.5.197-.22.348-.487.455-.8.107-.317.16-.673.16-1.07ZM31.65 22h-.554a.624.624 0 0 1-.275-.05c-.067-.037-.117-.108-.15-.215l-.11-.365c-.13.117-.259.22-.385.31-.124.087-.252.16-.385.22-.134.06-.275.105-.425.135-.15.03-.317.045-.5.045-.217 0-.417-.028-.6-.085a1.347 1.347 0 0 1-.475-.265 1.207 1.207 0 0 1-.305-.435 1.542 1.542 0 0 1-.11-.605c0-.193.05-.383.15-.57.103-.19.273-.36.51-.51.236-.153.551-.28.945-.38.393-.1.881-.157 1.465-.17v-.3c0-.343-.074-.597-.22-.76-.144-.167-.354-.25-.63-.25a1.53 1.53 0 0 0-.85.23 16.12 16.12 0 0 1-.27.155.553.553 0 0 1-.275.07.357.357 0 0 1-.215-.065.51.51 0 0 1-.145-.16l-.225-.395c.59-.54 1.301-.81 2.135-.81.3 0 .566.05.8.15.236.097.436.233.6.41.163.173.286.382.37.625.086.243.13.51.13.8V22Zm-2.4-.77c.127 0 .244-.012.35-.035.107-.023.207-.058.3-.105.097-.047.189-.103.276-.17.09-.07.18-.152.27-.245v-.865a6.52 6.52 0 0 0-.905.095c-.24.043-.434.1-.58.17a.769.769 0 0 0-.315.245.553.553 0 0 0-.09.305c0 .217.063.372.19.465.13.093.298.14.505.14ZM34.25 22.08c-.443 0-.785-.125-1.025-.375-.24-.253-.36-.602-.36-1.045v-2.865h-.52a.26.26 0 0 1-.175-.065c-.047-.043-.07-.108-.07-.195v-.49l.825-.135.26-1.4a.252.252 0 0 1 .09-.155.304.304 0 0 1 .185-.055h.64v1.615h1.35v.88H34.1v2.78c0 .16.04.285.12.375.08.09.187.135.32.135a.61.61 0 0 0 .19-.025 2.716 2.716 0 0 0 .24-.115c.03-.02.06-.03.09-.03.037 0 .067.01.09.03a.35.35 0 0 1 .075.08l.37.6a1.87 1.87 0 0 1-.62.34 2.307 2.307 0 0 1-.725.115ZM40.152 22h-.555a.624.624 0 0 1-.275-.05c-.066-.037-.116-.108-.15-.215l-.11-.365c-.13.117-.258.22-.385.31a2.33 2.33 0 0 1-.385.22c-.133.06-.275.105-.425.135-.15.03-.316.045-.5.045-.216 0-.416-.028-.6-.085a1.349 1.349 0 0 1-.475-.265 1.208 1.208 0 0 1-.305-.435 1.544 1.544 0 0 1-.11-.605c0-.193.05-.383.15-.57.104-.19.274-.36.51-.51.237-.153.552-.28.945-.38.394-.1.882-.157 1.465-.17v-.3c0-.343-.073-.597-.22-.76-.143-.167-.353-.25-.63-.25a1.53 1.53 0 0 0-.85.23c-.096.057-.186.108-.27.155a.553.553 0 0 1-.275.07.358.358 0 0 1-.215-.065.512.512 0 0 1-.145-.16l-.225-.395c.59-.54 1.302-.81 2.135-.81.3 0 .567.05.8.15.237.097.437.233.6.41a1.7 1.7 0 0 1 .37.625c.087.243.13.51.13.8V22Zm-2.4-.77c.127 0 .244-.012.35-.035.107-.023.207-.058.3-.105.097-.047.189-.103.275-.17.09-.07.18-.152.27-.245v-.865c-.36.017-.661.048-.905.095-.24.043-.433.1-.58.17a.77.77 0 0 0-.315.245.553.553 0 0 0-.09.305c0 .217.064.372.19.465.13.093.299.14.505.14Z\"/></svg>`\n\nexport const CORE_LOGO_SVG = `<svg className=\"coreLogo\" xmlns=\"http://www.w3.org/2000/svg\" width=\"102\" height=\"37\" viewBox=\"0 0 102 37\" fill=\"none\"><g clip-path=\"url(#a)\"><path fill=\"#EA4148\" d=\"M47 0H0v37h47V0Z\"/><path fill=\"#fff\" d=\"M3.78 11.85c0-3.55 2.67-5.6 5.68-5.6a4.63 4.63 0 0 1 3.09 1.1l-1.7 2.36c-.31-.32-.74-.5-1.18-.52-1.36 0-2.16 1.03-2.16 2.66 0 1.62.89 2.65 2.03 2.65a2.93 2.93 0 0 0 1.7-.69l1.4 2.4a5.29 5.29 0 0 1-3.52 1.24c-3 0-5.34-2.05-5.34-5.6Z\"/><path fill=\"#fff\" d=\"M18.85 11.85c0-1.63-.42-2.66-1.52-2.66s-1.52 1.03-1.52 2.66c0 1.62.42 2.65 1.52 2.65s1.52-1.03 1.52-2.65Zm-6.77 0c0-3.55 2.54-5.6 5.25-5.6 2.7 0 5.25 2.05 5.25 5.6s-2.54 5.6-5.25 5.6-5.25-2.05-5.25-5.6ZM23.34 6.5h2.97l.25 1.84h.09c.78-1.46 1.97-2.1 3-2.1.45-.02.9.05 1.32.22l-.6 3.16c-.38-.1-.78-.16-1.18-.17-.76 0-1.7.47-2.2 1.8v5.94h-3.65V6.5Zm13.64 4.06c0-.81-.34-1.54-1.44-1.54-.8 0-1.49.47-1.7 1.54h3.14Zm-6.6 1.29c0-3.47 2.49-5.6 5.07-5.6 3.13 0 4.62 2.3 4.62 5.17 0 .52-.05 1.03-.15 1.54h-6.04c.34 1.28 1.27 1.71 2.46 1.71a4.3 4.3 0 0 0 2.16-.64l1.18 2.18a7.08 7.08 0 0 1-3.85 1.24c-3.09 0-5.46-2.05-5.46-5.6\"/><path fill=\"#1A1818\" d=\"M10.43 23.87c0-.81-.34-1.54-1.44-1.54-.8 0-1.48.47-1.69 1.54h3.13Zm-6.6 1.28c0-3.46 2.5-5.6 5.08-5.6 3.13 0 4.61 2.3 4.61 5.18 0 .51-.05 1.03-.15 1.54H7.34c.34 1.28 1.27 1.7 2.46 1.7.76-.01 1.5-.23 2.16-.63l1.18 2.18a7.08 7.08 0 0 1-3.85 1.24c-3.1 0-5.46-2.06-5.46-5.6m10.07-.01c0-3.55 2.67-5.6 5.68-5.6a4.63 4.63 0 0 1 3.09 1.11l-1.7 2.35c-.32-.31-.74-.5-1.18-.51-1.36 0-2.16 1.03-2.16 2.65 0 1.63.89 2.66 2.03 2.66a2.93 2.93 0 0 0 1.7-.69l1.39 2.4a5.29 5.29 0 0 1-3.51 1.24c-3 0-5.34-2.06-5.34-5.6\"/><path fill=\"#1A1818\" d=\"M28.97 25.15c0-1.62-.42-2.65-1.52-2.65s-1.52 1.03-1.52 2.65c0 1.63.42 2.66 1.52 2.66s1.52-1.03 1.52-2.66Zm-6.77 0c0-3.55 2.54-5.6 5.25-5.6 2.7 0 5.25 2.05 5.25 5.6s-2.54 5.6-5.25 5.6-5.25-2.04-5.25-5.6Zm11.34-5.35h2.97l.25 1.29h.09a4.76 4.76 0 0 1 3.34-1.54c2.33 0 3.3 1.71 3.3 4.36v6.6h-3.64v-6.13c0-1.37-.34-1.7-1.06-1.7-.67 0-1.05.3-1.6.8v7.02h-3.65V19.8Z\"/><path fill=\"#002147\" d=\"M48 0h54v33H48z\"/><path fill=\"#fff\" d=\"M58.375 11.247c0 .59-.099 1.138-.295 1.642a3.89 3.89 0 0 1-.83 1.303 3.788 3.788 0 0 1-1.285.863 4.373 4.373 0 0 1-1.665.306 4.415 4.415 0 0 1-1.67-.306 3.85 3.85 0 0 1-1.291-.863 3.891 3.891 0 0 1-.83-1.303 4.483 4.483 0 0 1-.295-1.642c0-.59.099-1.135.295-1.636.197-.505.474-.941.83-1.308.36-.368.79-.654 1.291-.858a4.345 4.345 0 0 1 1.67-.311c.609 0 1.164.104 1.665.311.5.208.93.496 1.285.863.357.364.633.798.83 1.303a4.44 4.44 0 0 1 .295 1.636Zm-1.536 0c0-.441-.06-.837-.179-1.185a2.48 2.48 0 0 0-.5-.897 2.165 2.165 0 0 0-.802-.562 2.727 2.727 0 0 0-1.058-.195 2.77 2.77 0 0 0-1.063.195c-.316.13-.585.317-.807.562a2.544 2.544 0 0 0-.507.897 3.67 3.67 0 0 0-.178 1.185c0 .442.06.839.178 1.191.119.35.288.646.507.891.222.241.492.427.807.557.315.13.67.195 1.063.195.394 0 .746-.065 1.058-.195.315-.13.582-.316.801-.557.22-.245.386-.542.501-.89a3.72 3.72 0 0 0 .179-1.192ZM60.404 9.56v3.63c0 .349.08.62.24.813.163.189.406.284.73.284.237 0 .46-.052.667-.156.208-.108.405-.254.59-.44v-4.13h1.375v5.71h-.84c-.179 0-.295-.083-.351-.25l-.095-.456a4.326 4.326 0 0 1-.367.328 2.18 2.18 0 0 1-.868.406c-.164.042-.34.062-.53.062a2.08 2.08 0 0 1-.829-.156 1.688 1.688 0 0 1-.601-.45 2.002 2.002 0 0 1-.373-.686 3 3 0 0 1-.123-.879V9.56h1.375ZM65.14 15.272V9.56h.807c.141 0 .24.026.295.078.056.052.093.14.112.267l.083.69c.204-.353.444-.63.718-.835.275-.204.583-.306.924-.306.282 0 .516.065.702.195l-.178 1.03c-.012.066-.036.114-.073.144a.258.258 0 0 1-.15.04.936.936 0 0 1-.228-.04 1.527 1.527 0 0 0-.385-.039c-.285 0-.53.08-.734.24-.204.155-.377.386-.518.69v3.557H65.14ZM70.501 7.223h1.258c.13 0 .238.031.323.094.09.06.149.141.178.245l1.37 4.815c.033.119.063.249.089.39.03.137.057.284.083.44a5.576 5.576 0 0 1 .212-.83l1.58-4.815a.534.534 0 0 1 .173-.234.504.504 0 0 1 .323-.105h.44c.13 0 .237.031.323.094.085.06.145.141.178.245l1.57 4.815c.081.238.152.501.211.79l.078-.417c.03-.133.06-.258.09-.373l1.369-4.815a.45.45 0 0 1 .172-.24.522.522 0 0 1 .323-.1h1.175l-2.5 8.05h-1.353l-1.758-5.5-.073-.228a8.82 8.82 0 0 1-.067-.262c-.022.093-.046.18-.072.262a5.844 5.844 0 0 1-.067.228l-1.776 5.5h-1.352l-2.5-8.05ZM84.7 9.472c.427 0 .813.068 1.158.206a2.5 2.5 0 0 1 .89.584c.246.252.435.56.568.924.134.364.2.77.2 1.22 0 .452-.066.86-.2 1.224a2.645 2.645 0 0 1-.567.93 2.463 2.463 0 0 1-.891.59 3.106 3.106 0 0 1-1.158.205 3.15 3.15 0 0 1-1.163-.206 2.517 2.517 0 0 1-.897-.59 2.712 2.712 0 0 1-.573-.93 3.532 3.532 0 0 1-.2-1.224c0-.449.067-.855.2-1.219.138-.364.329-.672.574-.924.248-.252.547-.447.896-.584a3.152 3.152 0 0 1 1.163-.206Zm0 4.826c.475 0 .826-.16 1.052-.479.23-.32.345-.787.345-1.403s-.115-1.085-.345-1.408c-.226-.323-.577-.484-1.052-.484-.482 0-.838.163-1.069.49-.23.322-.345.79-.345 1.402 0 .613.115 1.08.345 1.403.23.32.587.479 1.07.479ZM88.256 15.272V9.56h.807c.14 0 .24.026.295.078.055.052.093.14.111.267l.084.69c.204-.353.443-.63.718-.835.274-.204.582-.306.924-.306.282 0 .516.065.701.195l-.178 1.03c-.011.066-.035.114-.072.144a.258.258 0 0 1-.15.04.937.937 0 0 1-.229-.04 1.526 1.526 0 0 0-.384-.039c-.286 0-.53.08-.735.24-.204.155-.376.386-.517.69v3.557h-1.375ZM93.93 7v8.272h-1.375V7h1.375ZM99.174 15.272c-.178 0-.295-.084-.351-.25l-.111-.552a3.406 3.406 0 0 1-.373.362c-.13.108-.271.2-.423.278-.149.078-.31.138-.485.179-.17.044-.356.066-.556.066a1.89 1.89 0 0 1-.858-.194 1.947 1.947 0 0 1-.673-.563 2.817 2.817 0 0 1-.434-.918c-.1-.364-.15-.78-.15-1.247 0-.423.057-.816.172-1.18.115-.364.28-.68.495-.947.216-.267.474-.474.774-.623.3-.152.639-.228 1.013-.228a1.951 1.951 0 0 1 1.425.562V7h1.375v8.272h-.84Zm-1.832-1.008c.286 0 .53-.059.73-.178.2-.119.39-.287.567-.506v-2.56a1.345 1.345 0 0 0-.512-.402 1.48 1.48 0 0 0-.59-.117 1.35 1.35 0 0 0-.568.117c-.167.078-.31.197-.428.357a1.732 1.732 0 0 0-.267.6 3.417 3.417 0 0 0-.095.858c0 .334.026.618.078.852.055.23.133.419.234.567.1.145.222.25.367.318a1.2 1.2 0 0 0 .484.094ZM60.616 20.694v5.711H59.24v-5.711h1.375Zm.206-1.665c0 .12-.024.23-.073.334a.894.894 0 0 1-.194.273.924.924 0 0 1-.279.19.894.894 0 0 1-.684 0 .946.946 0 0 1-.462-.463.894.894 0 0 1 0-.68.923.923 0 0 1 .189-.277.86.86 0 0 1 .273-.184.833.833 0 0 1 .685 0c.107.045.2.106.278.184a.875.875 0 0 1 .267.623ZM61.84 26.405v-5.711h.84c.179 0 .296.083.352.25l.094.451a2.722 2.722 0 0 1 .768-.573c.145-.07.3-.125.462-.162.164-.037.342-.055.535-.055.311 0 .588.053.83.161.24.104.44.253.6.445.164.19.286.418.368.685.085.264.128.555.128.874v3.635h-1.375V22.77c0-.349-.082-.618-.245-.807-.16-.193-.4-.29-.724-.29-.237 0-.46.054-.668.162a2.394 2.394 0 0 0-.59.44v4.13H61.84ZM76.878 22.38c0 .59-.098 1.132-.295 1.626a3.734 3.734 0 0 1-.83 1.275 3.711 3.711 0 0 1-1.285.829 4.518 4.518 0 0 1-1.665.295h-3.072v-8.05h3.072c.609 0 1.164.101 1.665.301.5.197.93.474 1.286.83.356.352.632.775.829 1.269.197.494.295 1.035.295 1.625Zm-1.53 0c0-.441-.06-.836-.179-1.185a2.486 2.486 0 0 0-.506-.89 2.163 2.163 0 0 0-.802-.563 2.727 2.727 0 0 0-1.058-.195H71.24v5.667h1.564a2.73 2.73 0 0 0 1.058-.195c.315-.13.583-.316.802-.557a2.55 2.55 0 0 0 .506-.89c.119-.353.178-.75.178-1.192ZM82.111 26.405h-.618a.694.694 0 0 1-.306-.056c-.074-.04-.13-.12-.167-.239l-.122-.406c-.145.13-.288.245-.429.345-.137.096-.28.178-.428.245a2.2 2.2 0 0 1-.474.15c-.166.033-.352.05-.556.05-.241 0-.464-.032-.668-.095a1.502 1.502 0 0 1-.529-.295 1.343 1.343 0 0 1-.34-.484 1.717 1.717 0 0 1-.122-.673c0-.216.056-.427.167-.635.115-.212.304-.4.568-.568.263-.17.614-.311 1.052-.423.438-.111.981-.174 1.63-.19v-.333c0-.382-.08-.664-.244-.846-.16-.186-.393-.279-.702-.279a1.702 1.702 0 0 0-.946.257c-.107.063-.208.12-.3.172a.616.616 0 0 1-.306.078.398.398 0 0 1-.24-.072.569.569 0 0 1-.161-.178l-.25-.44c.656-.601 1.448-.902 2.376-.902.334 0 .631.056.89.167.264.108.487.26.669.456.182.193.319.425.412.696.096.271.144.568.144.89v3.608Zm-2.672-.857c.142 0 .271-.013.39-.04.119-.025.23-.064.334-.116a1.74 1.74 0 0 0 .306-.19c.1-.077.2-.168.3-.272v-.963c-.4.018-.736.054-1.007.106a2.602 2.602 0 0 0-.645.189.856.856 0 0 0-.351.273.616.616 0 0 0-.1.34c0 .24.07.413.211.517.145.104.332.156.563.156ZM85.005 26.494c-.493 0-.874-.14-1.14-.417-.268-.282-.402-.67-.402-1.164v-3.19h-.578a.289.289 0 0 1-.195-.072c-.052-.048-.078-.12-.078-.217v-.545l.918-.15.29-1.56a.28.28 0 0 1 .1-.172.339.339 0 0 1 .206-.061h.712v1.798h1.503v.98h-1.503v3.095c0 .178.045.317.134.417.089.1.208.15.356.15.085 0 .156-.009.212-.027.06-.023.11-.045.15-.067.044-.023.084-.043.117-.062a.18.18 0 0 1 .1-.033c.04 0 .074.011.1.034a.392.392 0 0 1 .084.088l.412.669c-.2.166-.43.293-.69.378-.26.085-.53.128-.808.128ZM91.576 26.405h-.618a.695.695 0 0 1-.306-.056c-.074-.04-.13-.12-.167-.239l-.122-.406c-.145.13-.288.245-.429.345-.137.096-.28.178-.428.245a2.2 2.2 0 0 1-.474.15c-.167.033-.352.05-.556.05-.242 0-.464-.032-.668-.095a1.502 1.502 0 0 1-.53-.295 1.343 1.343 0 0 1-.339-.484 1.717 1.717 0 0 1-.122-.673c0-.216.056-.427.167-.635.115-.212.304-.4.568-.568.263-.17.614-.311 1.052-.423.438-.111.981-.174 1.63-.19v-.333c0-.382-.08-.664-.244-.846-.16-.186-.393-.279-.702-.279a1.702 1.702 0 0 0-.946.257l-.3.172a.616.616 0 0 1-.307.078.398.398 0 0 1-.239-.072.569.569 0 0 1-.161-.178l-.25-.44c.656-.601 1.448-.902 2.376-.902.334 0 .63.056.89.167.264.108.487.26.669.456.181.193.319.425.412.696.096.271.144.568.144.89v3.608Zm-2.672-.857c.141 0 .271-.013.39-.04.119-.025.23-.064.334-.116a1.74 1.74 0 0 0 .306-.19c.1-.077.2-.168.3-.272v-.963c-.4.018-.736.054-1.007.106a2.602 2.602 0 0 0-.645.189.856.856 0 0 0-.351.273.616.616 0 0 0-.1.34c0 .24.07.413.211.517.145.104.332.156.562.156Z\"/><path fill=\"#CE261E\" d=\"M48 33h54v4H48z\"/></g><defs><clipPath id=\"a\"><path fill=\"#fff\" d=\"M0 0h102v37H0z\"/></clipPath></defs></svg>`\n\nexport const GV_LOGO_SVG = `<svg className=\"gvLogo\" xmlns=\"http://www.w3.org/2000/svg\" width=\"420\" height=\"350\" viewBox=\"0 0 420 350\" fill=\"none\"><g clip-path=\"url(#a)\"><mask id=\"b\" width=\"420\" height=\"350\" x=\"0\" y=\"0\" maskUnits=\"userSpaceOnUse\" style=\"mask-type:luminance\"><path fill=\"#fff\" d=\"M0 0h420v350H0V0Z\"/></mask><g mask=\"url(#b)\"><path fill=\"#fff\" d=\"M0 0h420v350H0V0Z\"/><path fill=\"#FF6400\" d=\"m55.6 284.6-16-9.1-16 9.1 16 9.2 16-9.2ZM37 316.7v-18.5l-16-9.1v18.5l16 9v.1Zm21.1-9.1V289l-16 9.1-.1 18.5 16.1-9.1v.1Z\"/><path fill=\"#0098A7\" d=\"M79.1 319.6v-42.8l-16 9.4v42.7l16-9.3Zm-21 12.3v-18.5L42 322.7v18.5l16.1-9.3ZM37 341v-18.5L0 301.1v18.5L37 341Zm-21-36.6v-18.2l-16-9.4v18.5l16 9.1Zm44.6-22.7 16-9.3-16-9.2-15.9 9.2 16 9.3h-.1Zm-21-30.7-37 21.4 15.9 9.3 37-21.4-15.9-9.3Z\"/><path fill=\"#00416B\" d=\"M103.8 267.5h24v7.2h-15.7v6.4h12.7v7.2H112v7.2h16v7.2h-24.1v-35.2h-.1Zm42.5 17.1-10.6-17h9.3l6.2 10.6 6.2-10.7h9l-11 17.3 11.2 17.7h-9.4l-6.6-10.9-6.6 10.9h-8.7l11-17.9Zm28.2-17.1h24.1v7.2H183v6.4h12.6v7.2H183v7.2h15.7v7.2h-24v-35.2h-.2Zm33.1 0h9.3l8.6 19.5 8.5-19.5h9.1v35H235v-21.2l-7 16.7h-5.5l-7-16.7v21.2h-8v-35h.1Zm45.3 0h19.4c4.7 0 7 2.2 7 7v10c0 4.6-2.3 7-7 7H261v11.2h-8.3v-35.2h.2Zm17.3 16.5c.7 0 1-.2 1-1v-7.5c0-.8-.3-1-1-1h-9v9.5h9Zm17.8-16.5h8.4v27.8H311v7.4h-23v-35.2Zm51.1 27.6h-11l-2 7.4h-8.5l10.7-35h11.4l10.7 35h-9l-2.3-7.4Zm-1.9-7-3.7-13.8-3.7 13.8h7.4Zm48.8 14.4h-8.8l-5.8-12h-4.8v12h-8.4v-35h19.4c4.7 0 7 2.2 7 7v8.8c0 3.8-1.5 6-4.8 6.6l6.2 12.6Zm-10.5-19c.8 0 1-.2 1-1v-7.2c0-.8-.2-1-1-1h-9v9h9v.2Zm17.9 12v-4.7h8.1v3.5c0 .8.2 1 1 1h8c.8 0 1-.2 1-1v-3.7c0-.7-.4-1-1.4-1.3l-9.3-2.3c-4.7-1.2-7.2-2.6-7.2-7.2v-5.9c0-4.6 2.3-7 7-7h11.8c4.7 0 7 2.2 7 7v4.3h-8.1v-3.1c0-.8-.2-1-1-1H403c-.8 0-1 .2-1 1v3.3c0 .8.4 1 1.4 1.4l9.3 2.3c4.7 1.2 7.2 2.5 7.2 7.2v6.2c0 4.7-2.3 7-7 7h-12.4c-4.9 0-7.2-2.3-7.2-7h.1ZM106 326h-2.2v-14h2.1v14h.1Zm17.6 0h-2.1l-6.6-10h-.2v10h-2.2v-14h2.2l6.6 10.3h.2V312h2.1v14Zm24.9-5.2c0 3.3-2.5 5.4-5.6 5.4-3.7 0-6.3-2.7-6.3-7.2 0-4.4 2.6-7.2 6-7.2 2.8 0 5 1.6 5.7 4.5l-2.1.2c-.6-1.8-2-2.7-3.5-2.7-2.2 0-4 1.7-4 5.2s1.8 5.3 4.2 5.3c2 0 3.6-1.4 3.6-3.5h-3V319h5.2v1.8h-.2Zm14.4 5.2h-8.4v-14h2.2v12h6.2v2Zm11.1.2c-3.6 0-6.3-2.7-6.3-7.2 0-4.4 2.6-7.2 6.2-7.2 3.5 0 6.3 2.8 6.3 7.2-.2 4.5-2.8 7.2-6.3 7.2h.1Zm0-12.2c-2.4 0-4.1 1.7-4.1 5.2s1.7 5.3 4 5.3c2.4 0 4.1-1.8 4.1-5.3s-2-5.2-4-5.2Zm12 12v-14h5c3.2 0 4.5 1.6 4.5 3.7 0 1.8-1 2.5-2.3 3v.1c1.3.2 2.7 1.4 2.7 3.5 0 2.2-1.5 3.7-4.7 3.7H186Zm2.1-7.8h2.8c1.5 0 2.5-.7 2.5-2s-.8-2-2.5-2H188v4h.1Zm3.1 1.6h-3v4.5h3c2 0 2.8-.8 2.8-2 0-1.3-1-2.5-2.8-2.5Zm9.6 6.2 5-14h2.4l5 14H211l-1.2-3.3h-5.6L203 326h-2.2Zm4-5h4.3l-2.1-6h-.2l-2 6Zm22.2 5h-8.4v-14h2.2v12h6.2v2Zm15.2-7.8h6.6v-6h2.1v14h-2.1v-6h-6.6v6H240v-14h2.2v6Zm24.1 7.8h-8.8v-14h8.8v2h-6.6v4.2h5.8v2h-5.8v4.3h6.6v1.5Zm5.2 0 5-14h2.4l5 14h-2.3l-1.1-3.3h-5.7l-1.1 3.3h-2.2Zm4.1-5h4.3l-2.2-6h-.2l-1.9 6Zm22.4 5h-8.4v-14h2.1v12h6.2v2h.1Zm13.7-12h-4.2v12h-2.2v-12h-4.2v-2h10.6v2Zm7.8 4.2h6.6v-6h2.2v14H326v-6h-6.6v6h-2.1v-14h2.1v6h.1Z\"/></g><path fill=\"#002147\" d=\"M0 0h420v232.615H0z\"/><path fill=\"#CE261E\" d=\"M0 213.231h420v19.385H0z\"/><path fill=\"#fff\" d=\"M89.203 68.331c0 4.11-.685 7.922-2.056 11.437-1.37 3.49-3.298 6.513-5.78 9.072-2.483 2.559-5.47 4.562-8.962 6.01-3.492 1.42-7.358 2.132-11.6 2.132s-8.121-.711-11.639-2.133c-3.491-1.447-6.491-3.45-9-6.009-2.483-2.559-4.41-5.583-5.78-9.072-1.371-3.515-2.057-7.327-2.057-11.437 0-4.11.686-7.909 2.057-11.398 1.37-3.515 3.297-6.552 5.78-9.11 2.509-2.56 5.509-4.55 9-5.971 3.518-1.447 7.398-2.171 11.64-2.171 4.24 0 8.107.724 11.599 2.17 3.491 1.448 6.479 3.451 8.962 6.01 2.482 2.533 4.41 5.557 5.78 9.072 1.37 3.49 2.056 7.289 2.056 11.398Zm-10.707 0c0-3.076-.414-5.828-1.242-8.258-.802-2.455-1.965-4.536-3.491-6.242-1.526-1.705-3.388-3.01-5.587-3.915-2.172-.905-4.63-1.357-7.37-1.357-2.742 0-5.212.452-7.41 1.357-2.2.905-4.074 2.21-5.626 3.916-1.526 1.705-2.703 3.786-3.53 6.241-.828 2.43-1.242 5.182-1.242 8.258 0 3.076.414 5.841 1.242 8.297.827 2.43 2.004 4.497 3.53 6.203 1.552 1.68 3.427 2.972 5.625 3.877 2.199.904 4.669 1.357 7.41 1.357 2.742 0 5.199-.453 7.371-1.357 2.199-.905 4.06-2.197 5.587-3.877 1.526-1.706 2.69-3.774 3.491-6.203.828-2.456 1.242-5.221 1.242-8.297ZM104.124 56.584v25.278c0 2.43.556 4.316 1.668 5.66 1.138 1.318 2.832 1.977 5.083 1.977a10.27 10.27 0 0 0 4.655-1.085c1.448-.75 2.819-1.77 4.112-3.063V56.584h9.583v39.777h-5.858c-1.242 0-2.057-.581-2.445-1.744l-.659-3.18a30.024 30.024 0 0 1-2.561 2.288 16.639 16.639 0 0 1-2.832 1.745c-.982.465-2.056.827-3.22 1.085-1.138.284-2.366.427-3.685.427-2.173 0-4.099-.362-5.781-1.086a11.777 11.777 0 0 1-4.19-3.14c-1.138-1.344-2.004-2.934-2.599-4.769-.569-1.86-.853-3.902-.853-6.125V56.584h9.582ZM137.904 96.361V56.584h5.625c.983 0 1.668.181 2.056.543.388.362.647.982.776 1.86l.582 4.808c1.423-2.455 3.091-4.394 5.005-5.815 1.914-1.422 4.06-2.133 6.44-2.133 1.965 0 3.595.453 4.888 1.358l-1.242 7.172c-.077.465-.245.801-.504 1.008-.258.18-.608.271-1.047.271-.388 0-.918-.09-1.591-.271-.672-.181-1.565-.272-2.677-.272-1.991 0-3.698.556-5.121 1.668-1.422 1.085-2.625 2.688-3.608 4.807V96.36h-9.582ZM176.82 40.301h8.768c.905 0 1.655.22 2.25.66a2.966 2.966 0 0 1 1.242 1.705l9.543 33.535c.233.828.44 1.732.621 2.714.207.956.401 1.977.582 3.063a63.34 63.34 0 0 1 .659-3.063c.259-.982.531-1.887.815-2.714l11.018-33.535c.207-.594.608-1.137 1.203-1.628.62-.491 1.37-.737 2.25-.737h3.065c.905 0 1.655.22 2.25.66.594.413 1.008.981 1.241 1.705l10.94 33.535c.569 1.655 1.061 3.49 1.475 5.506.181-1.008.362-1.978.543-2.908.207-.93.413-1.796.62-2.598l9.544-33.535c.181-.646.582-1.202 1.203-1.667.62-.465 1.37-.698 2.25-.698h8.186l-17.419 56.06h-9.428l-12.259-38.304-.504-1.59a61.35 61.35 0 0 1-.466-1.821 26.047 26.047 0 0 1-.504 1.822 41.855 41.855 0 0 1-.466 1.59L203.667 96.36h-9.428l-17.419-56.06ZM276.552 55.964c2.975 0 5.665.478 8.07 1.434 2.431.957 4.5 2.313 6.207 4.071 1.707 1.758 3.026 3.903 3.957 6.436s1.397 5.363 1.397 8.49c0 3.154-.466 5.996-1.397 8.53-.931 2.532-2.25 4.69-3.957 6.474-1.707 1.783-3.776 3.153-6.207 4.11-2.405.956-5.095 1.434-8.07 1.434-2.974 0-5.677-.478-8.108-1.434-2.431-.957-4.513-2.327-6.246-4.11-1.707-1.784-3.039-3.942-3.996-6.475-.931-2.533-1.396-5.376-1.396-8.529 0-3.127.465-5.957 1.396-8.49.957-2.533 2.289-4.678 3.996-6.436 1.733-1.758 3.815-3.114 6.246-4.07 2.431-.957 5.134-1.435 8.108-1.435Zm0 33.613c3.311 0 5.755-1.112 7.333-3.334 1.603-2.223 2.405-5.48 2.405-9.77 0-4.29-.802-7.56-2.405-9.809-1.578-2.249-4.022-3.373-7.333-3.373-3.362 0-5.845 1.138-7.448 3.412-1.604 2.248-2.406 5.505-2.406 9.77 0 4.264.802 7.521 2.406 9.77 1.603 2.222 4.086 3.334 7.448 3.334ZM302.108 96.361V56.584h5.625c.983 0 1.668.181 2.056.543.388.362.647.982.776 1.86l.582 4.808c1.422-2.455 3.091-4.394 5.004-5.815 1.914-1.422 4.061-2.133 6.44-2.133 1.966 0 3.595.453 4.889 1.358l-1.242 7.172c-.077.465-.246.801-.504 1.008-.259.18-.608.271-1.048.271-.388 0-.918-.09-1.59-.271-.673-.181-1.565-.272-2.677-.272-1.992 0-3.699.556-5.121 1.668-1.423 1.085-2.625 2.688-3.608 4.807V96.36h-9.582ZM342.432 38.75v57.611h-9.583v-57.61h9.583ZM379.751 96.361c-1.241 0-2.056-.581-2.444-1.744l-.776-3.838a23.74 23.74 0 0 1-2.599 2.52 16.135 16.135 0 0 1-2.948 1.938c-1.035.543-2.16.956-3.376 1.24-1.189.31-2.482.466-3.879.466-2.173 0-4.164-.452-5.975-1.357-1.81-.905-3.375-2.21-4.694-3.916-1.293-1.731-2.302-3.864-3.026-6.397-.698-2.532-1.047-5.427-1.047-8.684 0-2.946.401-5.686 1.202-8.219.802-2.533 1.953-4.73 3.453-6.59 1.5-1.862 3.298-3.31 5.393-4.343 2.095-1.06 4.448-1.59 7.06-1.59 2.225 0 4.126.362 5.703 1.086a14.604 14.604 0 0 1 4.229 2.83V38.75h9.582v57.611h-5.858Zm-12.763-7.017c1.991 0 3.685-.413 5.082-1.24 1.397-.828 2.716-2.004 3.957-3.528V66.742c-1.086-1.319-2.276-2.249-3.569-2.792-1.267-.543-2.638-.814-4.112-.814-1.449 0-2.768.271-3.958.814-1.163.543-2.159 1.37-2.987 2.481-.802 1.086-1.422 2.482-1.862 4.188-.44 1.68-.659 3.67-.659 5.97 0 2.326.181 4.303.543 5.932.388 1.602.931 2.92 1.629 3.954.698 1.008 1.552 1.745 2.561 2.21 1.008.44 2.133.66 3.375.66ZM105.597 134.123V173.9h-9.582v-39.777h9.582Zm1.436-11.592c0 .827-.168 1.602-.504 2.326a6.235 6.235 0 0 1-1.358 1.899 6.431 6.431 0 0 1-1.94 1.319c-.75.31-1.552.465-2.405.465a6.135 6.135 0 0 1-2.367-.465 6.58 6.58 0 0 1-1.9-1.319 6.574 6.574 0 0 1-1.32-1.899 5.839 5.839 0 0 1-.465-2.326c0-.853.155-1.655.465-2.404a6.428 6.428 0 0 1 1.32-1.939 6.015 6.015 0 0 1 1.9-1.279 5.724 5.724 0 0 1 2.367-.504c.853 0 1.655.168 2.405.504.75.31 1.397.737 1.94 1.279a6.107 6.107 0 0 1 1.358 1.939c.336.749.504 1.551.504 2.404ZM114.907 173.9v-39.777h5.858c1.242 0 2.056.581 2.444 1.744l.66 3.141a22.72 22.72 0 0 1 2.521-2.249 19.01 19.01 0 0 1 2.833-1.745 14.8 14.8 0 0 1 3.22-1.124c1.138-.258 2.379-.388 3.724-.388 2.172 0 4.099.375 5.78 1.125 1.681.723 3.078 1.757 4.19 3.101 1.138 1.318 1.992 2.908 2.561 4.769.595 1.835.892 3.864.892 6.087V173.9h-9.582v-25.316c0-2.43-.569-4.304-1.707-5.622-1.113-1.344-2.794-2.016-5.044-2.016a9.988 9.988 0 0 0-4.655 1.124c-1.449.75-2.819 1.771-4.112 3.063V173.9h-9.583ZM221.262 145.87c0 4.109-.686 7.883-2.056 11.32-1.371 3.438-3.298 6.397-5.781 8.878-2.483 2.482-5.47 4.407-8.962 5.777-3.491 1.37-7.358 2.055-11.599 2.055h-21.415v-56.06h21.415c4.241 0 8.108.697 11.599 2.093 3.492 1.37 6.479 3.295 8.962 5.777 2.483 2.455 4.41 5.402 5.781 8.839 1.37 3.438 2.056 7.211 2.056 11.321Zm-10.669 0c0-3.076-.414-5.829-1.241-8.258-.828-2.456-2.005-4.523-3.531-6.203-1.526-1.706-3.388-3.011-5.586-3.916-2.173-.905-4.63-1.357-7.371-1.357h-10.902v39.467h10.902c2.741 0 5.198-.452 7.371-1.357 2.198-.904 4.06-2.197 5.586-3.877 1.526-1.705 2.703-3.773 3.531-6.203.827-2.455 1.241-5.221 1.241-8.296ZM258.511 173.9h-4.307c-.905 0-1.616-.129-2.133-.388-.518-.284-.906-.84-1.164-1.667l-.854-2.83a33.66 33.66 0 0 1-2.987 2.404 18.132 18.132 0 0 1-2.987 1.705 15.276 15.276 0 0 1-3.298 1.047c-1.164.233-2.457.349-3.879.349-1.681 0-3.233-.22-4.656-.659-1.422-.465-2.651-1.15-3.685-2.055-1.009-.904-1.798-2.029-2.367-3.373-.569-1.344-.853-2.907-.853-4.691 0-1.499.388-2.972 1.164-4.419.801-1.474 2.12-2.792 3.957-3.955 1.836-1.189 4.28-2.171 7.332-2.946 3.052-.776 6.841-1.215 11.367-1.318v-2.327c0-2.662-.569-4.626-1.707-5.893-1.112-1.292-2.742-1.938-4.888-1.938-1.552 0-2.845.181-3.88.543-1.034.362-1.94.775-2.715 1.24-.75.44-1.449.84-2.095 1.202a4.295 4.295 0 0 1-2.134.543c-.647 0-1.203-.168-1.668-.504a3.959 3.959 0 0 1-1.125-1.241l-1.746-3.062c4.578-4.187 10.1-6.281 16.565-6.281 2.328 0 4.397.388 6.208 1.163 1.836.75 3.388 1.809 4.655 3.179 1.267 1.344 2.224 2.96 2.871 4.846.672 1.887 1.009 3.955 1.009 6.203V173.9Zm-18.622-5.971c.983 0 1.888-.09 2.716-.271a9.926 9.926 0 0 0 2.327-.814c.75-.362 1.462-.801 2.134-1.318a19.892 19.892 0 0 0 2.095-1.9v-6.707c-2.793.129-5.134.375-7.022.737-1.862.336-3.362.775-4.5 1.318-1.138.542-1.953 1.176-2.444 1.899a4.284 4.284 0 0 0-.699 2.365c0 1.68.492 2.882 1.475 3.606 1.008.724 2.314 1.085 3.918 1.085ZM279.455 174.52c-3.44 0-6.091-.969-7.953-2.908-1.862-1.964-2.793-4.665-2.793-8.102v-22.215h-4.035a2.01 2.01 0 0 1-1.358-.504c-.362-.336-.543-.84-.543-1.512v-3.799l6.401-1.047 2.018-10.856c.103-.517.336-.917.698-1.201.388-.285.866-.427 1.435-.427h4.966v12.523h10.475v6.823h-10.475v21.556c0 1.24.311 2.209.931 2.907.621.698 1.449 1.047 2.483 1.047.595 0 1.086-.065 1.474-.194.414-.155.763-.31 1.048-.465.31-.155.582-.297.815-.426.232-.156.465-.233.698-.233.284 0 .517.077.698.233.181.129.375.336.582.62l2.871 4.652c-1.397 1.163-3 2.042-4.811 2.636-1.81.595-3.685.892-5.625.892ZM326.026 173.9h-4.306c-.905 0-1.616-.129-2.134-.388-.517-.284-.905-.84-1.164-1.667l-.853-2.83a33.804 33.804 0 0 1-2.987 2.404 18.132 18.132 0 0 1-2.987 1.705 15.276 15.276 0 0 1-3.298 1.047c-1.164.233-2.457.349-3.88.349-1.681 0-3.233-.22-4.655-.659-1.422-.465-2.651-1.15-3.686-2.055-1.008-.904-1.797-2.029-2.366-3.373-.569-1.344-.854-2.907-.854-4.691 0-1.499.388-2.972 1.164-4.419.802-1.474 2.121-2.792 3.957-3.955 1.837-1.189 4.281-2.171 7.333-2.946 3.052-.776 6.841-1.215 11.367-1.318v-2.327c0-2.662-.569-4.626-1.707-5.893-1.112-1.292-2.742-1.938-4.888-1.938-1.552 0-2.845.181-3.88.543-1.035.362-1.94.775-2.716 1.24-.75.44-1.448.84-2.095 1.202a4.289 4.289 0 0 1-2.133.543c-.647 0-1.203-.168-1.669-.504a3.983 3.983 0 0 1-1.125-1.241l-1.745-3.062c4.577-4.187 10.099-6.281 16.565-6.281 2.328 0 4.397.388 6.207 1.163 1.837.75 3.389 1.809 4.656 3.179 1.267 1.344 2.224 2.96 2.871 4.846.672 1.887 1.008 3.955 1.008 6.203V173.9Zm-18.621-5.971c.982 0 1.888-.09 2.715-.271a9.918 9.918 0 0 0 2.328-.814 12.2 12.2 0 0 0 2.134-1.318 19.991 19.991 0 0 0 2.095-1.9v-6.707c-2.794.129-5.134.375-7.022.737-1.862.336-3.362.775-4.5 1.318-1.138.542-1.953 1.176-2.445 1.899a4.291 4.291 0 0 0-.698 2.365c0 1.68.492 2.882 1.474 3.606 1.009.724 2.315 1.085 3.919 1.085Z\"/></g><defs><clipPath id=\"a\"><path fill=\"#fff\" d=\"M0 0h420v350H0z\"/></clipPath></defs></svg>`\n","import * as React from \"react\"\nimport {\n    OWID_LOGO_SVG,\n    CORE_LOGO_SVG,\n    GV_LOGO_SVG,\n    SMALL_OWID_LOGO_SVG,\n} from \"./LogosSVG\"\nimport { LogoOption } from \"@ourworldindata/types\"\nimport { makeFigmaId } from \"@ourworldindata/utils\"\n\ninterface LogoAttributes {\n    svg: string\n    width: number\n    height: number\n    targetHeight: number\n    url?: string\n}\n\nconst logos: Record<LogoOption, LogoAttributes> = {\n    owid: {\n        svg: OWID_LOGO_SVG,\n        width: 65,\n        height: 36,\n        targetHeight: 36,\n        url: \"https://ourworldindata.org\",\n    },\n    \"core+owid\": {\n        svg: CORE_LOGO_SVG,\n        width: 102,\n        height: 37,\n        targetHeight: 36,\n    },\n    \"gv+owid\": {\n        svg: GV_LOGO_SVG,\n        width: 420,\n        height: 350,\n        targetHeight: 52,\n    },\n}\n\n// owid logo optimized for small sizes\nconst smallOwidLogo = {\n    svg: SMALL_OWID_LOGO_SVG,\n    width: 51,\n    height: 28,\n    targetHeight: 28,\n    url: \"https://ourworldindata.org\",\n}\n\ninterface LogoProps {\n    logo?: LogoOption\n    isLink: boolean\n    heightScale?: number\n    useSmallVersion?: boolean\n}\n\nexport class Logo {\n    props: LogoProps\n    constructor(props: LogoProps) {\n        this.props = props\n    }\n\n    private get logo(): LogoOption {\n        return this.props.logo ?? LogoOption.owid\n    }\n\n    private get spec(): LogoAttributes {\n        if (this.props.useSmallVersion && this.logo === LogoOption.owid) {\n            return smallOwidLogo\n        }\n        return logos[this.logo]\n    }\n\n    private get targetHeight(): number {\n        return (this.props.heightScale ?? 1) * this.spec.targetHeight\n    }\n\n    private get scale(): number {\n        return this.targetHeight / this.spec.height\n    }\n\n    get width(): number {\n        return this.spec.width * this.scale\n    }\n    get height(): number {\n        return this.spec.height * this.scale\n    }\n\n    renderSVG(targetX: number, targetY: number): React.ReactElement {\n        const { scale } = this\n        const svg =\n            (this.spec.svg.match(/<svg>(.*)<\\/svg>/) || \"\")[1] || this.spec.svg\n        return (\n            <g\n                id={makeFigmaId(\"logo\")}\n                transform={`translate(${Math.round(\n                    targetX\n                )}, ${targetY}) scale(${parseFloat(scale.toFixed(2))})`}\n                dangerouslySetInnerHTML={{ __html: svg }}\n            />\n        )\n    }\n\n    renderHTML(): React.ReactElement {\n        const { spec } = this\n        const props: React.HTMLAttributes<HTMLElement> = {\n            className: \"logo\",\n            dangerouslySetInnerHTML: { __html: spec.svg },\n            style: { height: `${this.targetHeight}px` },\n        }\n        if (this.props.isLink && spec.url)\n            return (\n                <a {...props} href={spec.url} target=\"_blank\" rel=\"noopener\" />\n            )\n        else return <div {...props} />\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport {\n    LogoOption,\n    makeFigmaId,\n    Bounds,\n    FontFamily,\n} from \"@ourworldindata/utils\"\nimport { MarkdownTextWrap, TextWrap } from \"@ourworldindata/components\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { Logo } from \"../captionedChart/Logos\"\n\nimport { HeaderManager } from \"./HeaderManager\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FRAME_PADDING_HORIZONTAL,\n    GRAPHER_FRAME_PADDING_VERTICAL,\n    GRAPHER_HEADER_CLASS,\n} from \"../core/GrapherConstants\"\nimport { GRAPHER_DARK_TEXT, GRAY_100 } from \"../color/ColorConstants\"\n\ninterface HeaderProps {\n    manager: HeaderManager\n    maxWidth?: number\n}\n\nabstract class AbstractHeader<\n    Props extends HeaderProps = HeaderProps,\n> extends React.Component<Props> {\n    protected verticalPadding = 4\n\n    constructor(props: Props) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed protected get manager(): HeaderManager {\n        return this.props.manager\n    }\n\n    @computed protected get maxWidth(): number {\n        return this.props.maxWidth ?? DEFAULT_GRAPHER_BOUNDS.width\n    }\n\n    @computed protected get useBaseFontSize(): boolean {\n        return !!this.manager.useBaseFontSize\n    }\n\n    @computed protected get baseFontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed protected get showTitle(): boolean {\n        return !this.manager.hideTitle && !!this.titleText\n    }\n\n    @computed protected get showSubtitle(): boolean {\n        return !this.manager.hideSubtitle && !!this.subtitleText\n    }\n\n    @computed protected get titleText(): string {\n        return this.manager.currentTitle?.trim() ?? \"\"\n    }\n\n    @computed private get subtitleText(): string {\n        return this.manager.currentSubtitle?.trim() ?? \"\"\n    }\n\n    @computed get logo(): Logo | undefined {\n        const { manager } = this\n        if (manager.hideLogo) return undefined\n        const isOwidLogo = !manager.logo || manager.logo === LogoOption.owid\n        return new Logo({\n            logo: manager.logo as any,\n            isLink: !!manager.shouldLinkToOwid,\n            // if it's the OWID logo, use the small version; otherwise, decrease the size\n            heightScale: manager.isSmall && !isOwidLogo ? 0.775 : 1,\n            useSmallVersion: manager.isSmall && isOwidLogo,\n        })\n    }\n\n    @computed protected get logoWidth(): number {\n        return this.logo ? this.logo.width : 0\n    }\n\n    @computed private get logoHeight(): number {\n        return this.logo ? this.logo.height : 0\n    }\n\n    @computed get titleFontWeight(): number {\n        return 600\n    }\n\n    @computed get titleLineHeight(): number {\n        return this.manager.isSmall ? 1.1 : 1.2\n    }\n\n    @computed get title(): TextWrap {\n        const logoPadding = this.manager.isNarrow\n            ? 12\n            : this.manager.isSmall\n              ? 16\n              : 24\n\n        const makeTitle = (fontSize: number): TextWrap =>\n            new TextWrap({\n                text: this.titleText,\n                maxWidth: this.maxWidth - this.logoWidth - logoPadding,\n                fontFamily: FontFamily.PlayfairDisplay,\n                fontWeight: this.titleFontWeight,\n                lineHeight: this.titleLineHeight,\n                fontSize,\n            })\n\n        const initialFontSize = this.manager.isStaticAndSmall\n            ? 25\n            : this.useBaseFontSize\n              ? (25 / BASE_FONT_SIZE) * this.baseFontSize\n              : this.manager.isNarrow\n                ? 18\n                : this.manager.isMedium\n                  ? 20\n                  : 25\n\n        let title = makeTitle(Math.round(initialFontSize))\n\n        // if the title is already a single line, no need to decrease font size\n        if (title.lines.length <= 1) return title\n\n        const originalLineCount = title.lines.length\n        // decrease the initial font size by no more than 15% using 0.5px steps\n        const potentialFontSizes = _.range(\n            initialFontSize,\n            initialFontSize * 0.85,\n            -0.5\n        )\n        // try to fit the title into a single line if possible-- but not if it would make the text too small\n        for (const fontSize of potentialFontSizes) {\n            title = makeTitle(fontSize)\n            const currentLineCount = title.lines.length\n            if (currentLineCount <= 1 || currentLineCount < originalLineCount)\n                break\n        }\n        // return the title at the new font size: either it now fits into a single line, or\n        // its size has been reduced so the multi-line title doesn't take up quite that much space\n        return title\n    }\n\n    @computed get useFullWidthForSubtitle(): boolean {\n        const subtitleWidth = Bounds.forText(this.subtitleText, {\n            fontSize: this.subtitleFontSize,\n        }).width\n        const isSmall =\n            this.manager.isSemiNarrow || this.manager.isStaticAndSmall\n        return (\n            // if the subtitle is entirely below the logo, we can go underneath it\n            this.title.height > this.logoHeight || // on narrow screens, long subtitles should also go underneath the logo\n            !!(isSmall && subtitleWidth > 2 * this.maxWidth)\n        )\n    }\n\n    @computed get subtitleMarginTop(): number {\n        let padding = this.verticalPadding\n\n        // make sure the subtitle doesn't overlap with the logo\n        if (\n            this.useFullWidthForSubtitle &&\n            this.logoHeight > this.title.height\n        ) {\n            padding += this.logoHeight - this.title.height\n        }\n\n        return padding\n    }\n\n    @computed get subtitleWidth(): number {\n        return this.useFullWidthForSubtitle\n            ? this.maxWidth\n            : this.maxWidth - this.logoWidth - 12\n    }\n\n    @computed get subtitleFontSize(): number {\n        if (this.manager.isStaticAndSmall) return 16\n        if (this.useBaseFontSize) {\n            return Math.round((15 / BASE_FONT_SIZE) * this.baseFontSize)\n        }\n        return this.manager.isSmall ? 12 : this.manager.isMedium ? 13 : 15\n    }\n\n    @computed get subtitleLineHeight(): number {\n        return this.manager.isMedium ? 1.2 : 1.28571\n    }\n\n    @computed get subtitle(): MarkdownTextWrap {\n        return new MarkdownTextWrap({\n            maxWidth: this.subtitleWidth,\n            fontSize: this.subtitleFontSize,\n            text: this.subtitleText,\n            lineHeight: this.subtitleLineHeight,\n            detailsOrderedByReference: this.manager.detailsOrderedByReference,\n        })\n    }\n\n    @computed get height(): number {\n        const {\n            title,\n            subtitle,\n            showTitle,\n            showSubtitle,\n            subtitleMarginTop,\n            logoHeight,\n        } = this\n        return Math.max(\n            (showTitle ? title.height : 0) +\n                (showSubtitle ? subtitle.height + subtitleMarginTop : 0),\n            logoHeight\n        )\n    }\n\n    private renderTitle(): React.ReactElement {\n        const { manager } = this\n\n        // avoid linking to a grapher/data page when we're already on it\n        if (manager.isOnCanonicalUrl && !this.manager.isInIFrame) {\n            return (\n                <h1 style={this.title.htmlStyle}>{this.title.renderHTML()}</h1>\n            )\n        }\n\n        // on smaller screens, make the whole width of the header clickable\n        if (manager.isMedium) {\n            return (\n                <a\n                    href={manager.canonicalUrl}\n                    data-track-note=\"chart_click_title\"\n                    {...(manager.isInIFrame && {\n                        target: \"_blank\",\n                        rel: \"noopener\",\n                    })}\n                >\n                    <h1 style={this.title.htmlStyle}>\n                        {this.title.renderHTML()}\n                    </h1>\n                </a>\n            )\n        }\n\n        // on larger screens, only make the title text itself clickable\n        return (\n            <h1 style={this.title.htmlStyle}>\n                <a\n                    href={manager.canonicalUrl}\n                    data-track-note=\"chart_click_title\"\n                    {...(manager.isInIFrame && {\n                        target: \"_blank\",\n                        rel: \"noopener\",\n                    })}\n                >\n                    {this.title.renderHTML()}\n                </a>\n            </h1>\n        )\n    }\n\n    private renderSubtitle(): React.ReactElement {\n        const style = {\n            ...this.subtitle.style,\n            marginTop: this.subtitleMarginTop,\n            width: this.useFullWidthForSubtitle ? \"100%\" : undefined,\n            // make sure there are no scrollbars on subtitle\n            overflowY: \"hidden\",\n        }\n        return <p style={style}>{this.subtitle.renderHTML()}</p>\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <div\n                className=\"HeaderHTML\"\n                style={{\n                    padding: `${GRAPHER_FRAME_PADDING_VERTICAL}px ${GRAPHER_FRAME_PADDING_HORIZONTAL}px`,\n                    paddingBottom: 0,\n                }}\n            >\n                {this.logo && this.logo.renderHTML()}\n                {(this.showTitle || this.showSubtitle) && (\n                    <div style={{ minHeight: this.height }}>\n                        {this.showTitle && this.renderTitle()}\n                        {this.showSubtitle && this.renderSubtitle()}\n                    </div>\n                )}\n            </div>\n        )\n    }\n}\n\ninterface StaticHeaderProps extends HeaderProps {\n    targetX: number\n    targetY: number\n}\n\n@observer\nexport class Header extends AbstractHeader<HeaderProps> {}\n\n@observer\nexport class StaticHeader extends AbstractHeader<StaticHeaderProps> {\n    protected override verticalPadding = 6\n\n    constructor(props: StaticHeaderProps) {\n        super(props)\n\n        makeObservable(this)\n    }\n\n    override get titleLineHeight(): number {\n        return this.manager.isStaticAndSmall ? 1.1 : 1.2\n    }\n\n    override get subtitleLineHeight(): number {\n        return 1.2\n    }\n\n    override render(): React.ReactElement {\n        const { targetX: x, targetY: y } = this.props\n        const { title, logo, subtitle, manager, maxWidth } = this\n        return (\n            <g id={makeFigmaId(GRAPHER_HEADER_CLASS)} className=\"HeaderView\">\n                {logo &&\n                    logo.height > 0 &&\n                    logo.renderSVG(x + maxWidth - logo.width, y)}\n                {this.showTitle && (\n                    <a\n                        id={makeFigmaId(\"title\")}\n                        href={manager.canonicalUrl}\n                        style={{\n                            fontFamily:\n                                \"'Playfair Display', Georgia, 'Times New Roman', 'Liberation Serif', serif\",\n                        }}\n                        {...(manager.isInIFrame && {\n                            target: \"_blank\",\n                            rel: \"noopener\",\n                        })}\n                    >\n                        {title.renderSVG(x, y, {\n                            textProps: { fill: GRAY_100 },\n                        })}\n                    </a>\n                )}\n                {this.showSubtitle &&\n                    subtitle.renderSVG(\n                        x,\n                        y +\n                            (this.showTitle\n                                ? title.height + this.subtitleMarginTop\n                                : 0),\n                        {\n                            id: makeFigmaId(\"subtitle\"),\n                            textProps: { fill: GRAPHER_DARK_TEXT },\n                            detailsMarker: this.manager.detailsMarkerInSvg,\n                        }\n                    )}\n            </g>\n        )\n    }\n}\n","import { observer } from \"mobx-react\"\nimport * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faCode,\n    faShareAlt,\n    faLink,\n    faEdit,\n    faPanorama,\n    faImage,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    canWriteToClipboard,\n    copyToClipboard,\n    isAndroid,\n    isIOS,\n} from \"@ourworldindata/utils\"\nimport { GrapherModal } from \"../core/GrapherConstants\"\nimport { isTargetOutsideElement } from \"../chart/ChartUtils.js\"\nimport { GrapherRasterizeFn } from \"../captionedChart/StaticChartRasterizer.js\"\n\nexport interface ShareMenuManager {\n    slug?: string\n    currentTitle?: string\n    canonicalUrl?: string\n    editUrl?: string\n    createNarrativeChartUrl?: string\n    activeModal?: GrapherModal\n    rasterize: GrapherRasterizeFn\n}\n\ninterface ShareMenuProps {\n    manager: ShareMenuManager\n    onDismiss?: () => void\n    right?: number\n}\n\ninterface ShareMenuState {\n    canWriteToClipboard: boolean\n    copiedLink: boolean\n    copiedPng: boolean\n}\n\ntype ShareApiManager = Pick<ShareMenuManager, \"canonicalUrl\" | \"currentTitle\">\n\nconst getShareData = (manager: ShareApiManager): ShareData | undefined => {\n    if (!manager.canonicalUrl) return undefined\n\n    return {\n        title: manager.currentTitle ?? \"\",\n        url: manager.canonicalUrl,\n    }\n}\n\nconst canUseShareApi = (manager: ShareApiManager): boolean => {\n    const shareData = getShareData(manager)\n    if (!shareData) return false\n\n    return (\n        \"share\" in navigator &&\n        \"canShare\" in navigator &&\n        navigator.canShare(shareData)\n    )\n}\n\n// On mobile OSs, the system-level share API does a way better job of providing\n// relevant options to the user than our own <ShareMenu> does - for example,\n// quick access to messaging apps, the user's frequent contacts, etc.\n// So, on Android and iOS, we want to just show the system-level share dialog\n// immediately when the user clicks the share button, rather than showing our\n// own menu.\n// See https://github.com/owid/owid-grapher/issues/3446\n// -@marcelgerber, 2024-04-24\nexport const shouldShareUsingShareApi = (manager: ShareApiManager): boolean =>\n    (isAndroid() || isIOS()) && canUseShareApi(manager)\n\nexport const shareUsingShareApi = async (\n    manager: ShareApiManager\n): Promise<void> => {\n    if (!navigator.share) return\n\n    const shareData = getShareData(manager)\n    if (!shareData) return\n\n    try {\n        await navigator.share(shareData)\n    } catch (err) {\n        console.error(\"couldn't share using navigator.share\", err)\n    }\n}\n\n@observer\nexport class ShareMenu extends React.Component<ShareMenuProps, ShareMenuState> {\n    private menuRef = React.createRef<HTMLDivElement>()\n\n    constructor(props: ShareMenuProps) {\n        super(props)\n\n        makeObservable(this)\n\n        this.state = {\n            canWriteToClipboard: false,\n            copiedLink: false,\n            copiedPng: false,\n        }\n    }\n\n    static shouldShow(manager: ShareMenuManager): boolean {\n        const test = new ShareMenu({ manager })\n        return test.showShareMenu\n    }\n\n    @computed get manager(): ShareMenuManager {\n        return this.props.manager\n    }\n\n    @computed get title(): string {\n        return this.manager.currentTitle ?? \"\"\n    }\n\n    @computed get showShareMenu(): boolean {\n        return !!this.canonicalUrl || !!this.manager.editUrl\n    }\n\n    @computed get canonicalUrl(): string | undefined {\n        return this.manager.canonicalUrl\n    }\n\n    @action.bound dismiss(): void {\n        this.props.onDismiss?.()\n    }\n\n    @action.bound onClickSomewhere(e: Event): void {\n        if (\n            this.menuRef.current &&\n            e.target &&\n            isTargetOutsideElement(e.target, this.menuRef.current)\n        ) {\n            this.dismiss()\n        }\n    }\n\n    override componentDidMount(): void {\n        document.addEventListener(\"click\", this.onClickSomewhere)\n        void canWriteToClipboard().then((canWriteToClipboard) =>\n            this.setState({ canWriteToClipboard })\n        )\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"click\", this.onClickSomewhere)\n    }\n\n    @action.bound onEmbed(e: React.MouseEvent): void {\n        const { canonicalUrl, manager } = this\n        if (!canonicalUrl) return\n        manager.activeModal = GrapherModal.Embed\n        this.dismiss()\n        e.stopPropagation()\n    }\n\n    @action.bound async onNavigatorShare(): Promise<void> {\n        await shareUsingShareApi(this.manager)\n    }\n\n    @action.bound async onCopyUrl(): Promise<void> {\n        if (!this.canonicalUrl) return\n\n        try {\n            this.setState({ copiedLink: false, copiedPng: false })\n            const success = await copyToClipboard(this.canonicalUrl)\n            if (success) {\n                this.setState({ copiedLink: true, copiedPng: false })\n            } else {\n                console.error(\"Failed to copy link to clipboard\")\n            }\n        } catch (err) {\n            console.error(\n                \"couldn't copy to clipboard using navigator.clipboard\",\n                err\n            )\n        }\n    }\n\n    @action.bound async onCopyPng(): Promise<void> {\n        const { manager } = this\n\n        try {\n            this.setState({ copiedLink: false, copiedPng: false })\n\n            const rasterizePromise = manager.rasterize({\n                // Don't include DoDs in the static export when copying PNG to clipboard\n                includeDetails: false,\n            })\n\n            // Safari needs the clipboard.write call to happen without a delay after the user interaction,\n            // so it's important that we pass a promise to ClipboardItem, not await the rasterization first\n            // see https://stackoverflow.com/a/68241516/10670163\n            await navigator.clipboard.write([\n                new ClipboardItem({\n                    \"image/png\": rasterizePromise.then(({ blob }) => blob),\n                }),\n            ])\n\n            this.setState({ copiedLink: false, copiedPng: true })\n        } catch (err) {\n            console.error(\"couldn't copy PNG to clipboard\", err)\n        }\n    }\n\n    @computed get canUseShareApi(): boolean {\n        return canUseShareApi(this.manager)\n    }\n\n    @computed get showCopyPngButton(): boolean {\n        return this.state.canWriteToClipboard\n    }\n\n    override render(): React.ReactElement {\n        const { canUseShareApi, manager, showCopyPngButton } = this\n        const { editUrl, createNarrativeChartUrl } = manager\n\n        const width = 200\n        const right = this.props.right ?? 0\n        const style: React.CSSProperties = {\n            width,\n            right: Math.max(-width * 0.5, -right),\n        }\n\n        return (\n            <div className=\"ShareMenu\" ref={this.menuRef} style={style}>\n                <h2>Share</h2>\n                {this.canonicalUrl && (\n                    <a\n                        className=\"embed\"\n                        title=\"Embed this interactive visualization in another HTML document, e.g. a blog post or website\"\n                        data-track-note=\"chart_share_embed\"\n                        onClick={this.onEmbed}\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faCode} />\n                        Embed this chart\n                    </a>\n                )}\n                {canUseShareApi && (\n                    <a\n                        title=\"Share this visualization with an app on your device\"\n                        data-track-note=\"chart_share_navigator\"\n                        onClick={this.onNavigatorShare}\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faShareAlt} />\n                        Share via&hellip;\n                    </a>\n                )}\n                {showCopyPngButton && (\n                    <a\n                        title=\"Copy an image of this chart to the clipboard\"\n                        data-track-note=\"chart_share_copy_png\"\n                        onClick={this.onCopyPng}\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faImage} />\n                        {this.state.copiedPng\n                            ? \"Chart copied!\"\n                            : \"Copy chart as image\"}\n                    </a>\n                )}\n                {this.state.canWriteToClipboard && this.canonicalUrl && (\n                    <a\n                        title=\"Copy a link to this chart to the clipboard\"\n                        data-track-note=\"chart_share_copylink\"\n                        onClick={this.onCopyUrl}\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faLink} />\n                        {this.state.copiedLink\n                            ? \"Link copied!\"\n                            : \"Copy link to chart\"}\n                    </a>\n                )}\n                {editUrl && (\n                    <a\n                        title=\"Edit chart\"\n                        href={editUrl}\n                        target=\"_blank\"\n                        rel=\"noopener\"\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faEdit} />\n                        Edit\n                    </a>\n                )}\n                {createNarrativeChartUrl && (\n                    <a\n                        title=\"Create a narrative chart\"\n                        href={createNarrativeChartUrl}\n                        target=\"_blank\"\n                        rel=\"noopener\"\n                    >\n                        <FontAwesomeIcon className=\"icon\" icon={faPanorama} />\n                        Create narrative chart\n                    </a>\n                )}\n            </div>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faShareNodes,\n    faExpand,\n    faCompress,\n    faDownload,\n    faArrowRight,\n    IconDefinition,\n    faHeart,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    ShareMenu,\n    ShareMenuManager,\n    shareUsingShareApi,\n    shouldShareUsingShareApi,\n} from \"./ShareMenu.js\"\nimport { Bounds, Tippy } from \"@ourworldindata/utils\"\nimport classNames from \"classnames\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    GrapherModal,\n} from \"../core/GrapherConstants.js\"\nimport { DownloadModalTabName } from \"../modal/DownloadModal.js\"\n\nexport interface ActionButtonsManager extends ShareMenuManager {\n    isAdmin?: boolean\n    isShareMenuActive?: boolean\n    hideShareButton?: boolean\n    hideExploreTheDataButton?: boolean\n    isInIFrame?: boolean\n    canonicalUrl?: string\n    isInFullScreenMode?: boolean\n    activeModal?: GrapherModal\n    activeDownloadModalTab?: DownloadModalTabName\n    isOnTableTab?: boolean\n    hideFullScreenButton?: boolean\n}\n\n// keep in sync with sass variables in ActionButtons.scss\nconst BUTTON_HEIGHT = 32\nconst PADDING_BETWEEN_BUTTONS = 8\nconst PADDING_BETWEEN_ICON_AND_LABEL = 8\nconst PADDING_X = 12\n\nconst BUTTON_WIDTH_ICON_ONLY = BUTTON_HEIGHT\n\ninterface ActionButtonsProps {\n    manager: ActionButtonsManager\n    maxWidth?: number\n}\n\n@observer\nexport class ActionButtons extends React.Component<ActionButtonsProps> {\n    constructor(props: ActionButtonsProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get manager(): ActionButtonsManager {\n        return this.props.manager\n    }\n\n    @computed protected get maxWidth(): number {\n        return this.props.maxWidth ?? DEFAULT_GRAPHER_BOUNDS.width\n    }\n\n    @computed get height(): number {\n        return BUTTON_HEIGHT\n    }\n\n    @computed private get widthWithButtonLabels(): number {\n        const {\n            buttonCount,\n            hasDownloadButton,\n            hasDonateButton,\n            hasShareButton,\n            hasFullScreenButton,\n            hasExploreTheDataButton,\n            downloadButtonWithLabelWidth,\n            donateButtonWithLabelWidth,\n            shareButtonWithLabelWidth,\n            fullScreenButtonWithLabelWidth,\n            exploreTheDataButtonWithLabelWidth,\n        } = this\n\n        let width = 0\n        if (hasDownloadButton) {\n            width += downloadButtonWithLabelWidth\n        }\n        if (hasShareButton) {\n            width += shareButtonWithLabelWidth\n        }\n        if (hasFullScreenButton) {\n            width += fullScreenButtonWithLabelWidth\n        }\n        if (hasDonateButton) {\n            width += donateButtonWithLabelWidth\n        }\n        if (hasExploreTheDataButton) {\n            width += exploreTheDataButtonWithLabelWidth\n        }\n\n        return width + (buttonCount - 1) * PADDING_BETWEEN_BUTTONS\n    }\n\n    @computed get widthWithIconsOnly(): number {\n        const {\n            buttonCount,\n            hasExploreTheDataButton,\n            exploreTheDataButtonWidth,\n        } = this\n\n        let width = 0\n        let remainingButtonCount = buttonCount\n\n        // When shown, the explore the data button always has a label\n        if (hasExploreTheDataButton) {\n            width += exploreTheDataButtonWidth\n            remainingButtonCount--\n        }\n        width += remainingButtonCount * BUTTON_WIDTH_ICON_ONLY\n        width += (buttonCount - 1) * PADDING_BETWEEN_BUTTONS\n\n        return width\n    }\n\n    @computed get showButtonLabels(): boolean {\n        const { maxWidth, widthWithButtonLabels } = this\n        return widthWithButtonLabels <= maxWidth\n    }\n\n    @computed get width(): number {\n        const { showButtonLabels, widthWithButtonLabels, widthWithIconsOnly } =\n            this\n        return showButtonLabels ? widthWithButtonLabels : widthWithIconsOnly\n    }\n\n    private static computeButtonWidth(label: string): number {\n        const labelWidth = Bounds.forText(label, { fontSize: 13 }).width\n        return (\n            2 * PADDING_X +\n            12 + // icon width\n            PADDING_BETWEEN_ICON_AND_LABEL +\n            labelWidth\n        )\n    }\n\n    @computed private get downloadButtonWithLabelWidth(): number {\n        return ActionButtons.computeButtonWidth(\"Download\")\n    }\n\n    @computed private get shareButtonWithLabelWidth(): number {\n        return ActionButtons.computeButtonWidth(\"Share\")\n    }\n\n    @computed private get fullScreenButtonLabel(): string {\n        const { isInFullScreenMode } = this.manager\n        return isInFullScreenMode ? \"Exit full-screen\" : \"Enter full-screen\"\n    }\n\n    @computed private get fullScreenButtonWithLabelWidth(): number {\n        return ActionButtons.computeButtonWidth(this.fullScreenButtonLabel)\n    }\n\n    @computed private get donateButtonWithLabelWidth(): number {\n        return ActionButtons.computeButtonWidth(\"Donate\")\n    }\n\n    @computed private get exploreTheDataButtonWithLabelWidth(): number {\n        return ActionButtons.computeButtonWidth(\"Explore the data\")\n    }\n\n    @computed private get downloadButtonWidth(): number {\n        const {\n            hasDownloadButton,\n            showButtonLabels,\n            downloadButtonWithLabelWidth,\n        } = this\n        if (!hasDownloadButton) return 0\n        if (!showButtonLabels) return BUTTON_WIDTH_ICON_ONLY\n        return downloadButtonWithLabelWidth\n    }\n\n    @computed private get shareButtonWidth(): number {\n        const { hasShareButton, showButtonLabels, shareButtonWithLabelWidth } =\n            this\n        if (!hasShareButton) return 0\n        if (!showButtonLabels) return BUTTON_WIDTH_ICON_ONLY\n        return shareButtonWithLabelWidth\n    }\n\n    @computed private get fullScreenButtonWidth(): number {\n        const {\n            hasFullScreenButton,\n            showButtonLabels,\n            fullScreenButtonWithLabelWidth,\n        } = this\n        if (!hasFullScreenButton) return 0\n        if (!showButtonLabels) return BUTTON_WIDTH_ICON_ONLY\n        return fullScreenButtonWithLabelWidth\n    }\n\n    @computed private get donateButtonWidth(): number {\n        const {\n            hasDonateButton,\n            showButtonLabels,\n            donateButtonWithLabelWidth,\n        } = this\n        if (!hasDonateButton) return 0\n        if (!showButtonLabels) return BUTTON_WIDTH_ICON_ONLY\n        return donateButtonWithLabelWidth\n    }\n\n    // the \"Explore the data\" button is never shown without a label\n    @computed private get exploreTheDataButtonWidth(): number {\n        const { hasExploreTheDataButton, exploreTheDataButtonWithLabelWidth } =\n            this\n        if (!hasExploreTheDataButton) return 0\n        return exploreTheDataButtonWithLabelWidth\n    }\n\n    @action.bound toggleShareMenu(): void {\n        if (shouldShareUsingShareApi(this.manager)) {\n            void shareUsingShareApi(this.manager)\n            return\n        }\n        this.manager.isShareMenuActive = !this.manager.isShareMenuActive\n    }\n\n    @action.bound toggleFullScreenMode(): void {\n        this.manager.isInFullScreenMode = !this.manager.isInFullScreenMode\n    }\n\n    @action.bound openDownloadModal(): void {\n        this.manager.activeModal = GrapherModal.Download\n\n        // Open the Data tab when opening from the table view, otherwise open the Vis tab\n        if (this.manager.isOnTableTab) {\n            this.manager.activeDownloadModalTab = DownloadModalTabName.Data\n        } else {\n            this.manager.activeDownloadModalTab = DownloadModalTabName.Vis\n        }\n    }\n\n    @computed private get hasDownloadButton(): boolean {\n        return true\n    }\n\n    @computed private get hasDonateButton(): boolean {\n        return !!this.manager.isInIFrame && !this.manager.isAdmin\n    }\n\n    @computed private get hasShareButton(): boolean {\n        return (\n            !this.manager.hideShareButton && ShareMenu.shouldShow(this.manager)\n        )\n    }\n\n    @computed private get hasFullScreenButton(): boolean {\n        return !this.manager.hideFullScreenButton && !this.manager.isInIFrame\n    }\n\n    @computed private get hasExploreTheDataButton(): boolean {\n        const { manager } = this\n        return !manager.hideExploreTheDataButton || !!manager.isInIFrame\n    }\n\n    @computed private get buttonCount(): number {\n        let count = 0\n        if (this.hasDownloadButton) count += 1\n        if (this.hasShareButton) count += 1\n        if (this.hasFullScreenButton) count += 1\n        if (this.hasDonateButton) count += 1\n        if (this.hasExploreTheDataButton) count += 1\n        return count\n    }\n\n    private renderShareMenu(): React.ReactElement {\n        // distance between the right edge of the share button and the inner border of the frame\n        let right = 0\n        if (this.hasFullScreenButton)\n            right += PADDING_BETWEEN_BUTTONS + this.fullScreenButtonWidth\n        if (this.hasExploreTheDataButton)\n            right += PADDING_BETWEEN_BUTTONS + this.exploreTheDataButtonWidth\n\n        return (\n            <ShareMenu\n                manager={this.manager}\n                onDismiss={this.toggleShareMenu}\n                right={right}\n            />\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { manager } = this\n        const { isShareMenuActive } = manager\n\n        return (\n            <div\n                className=\"ActionButtons\"\n                style={{ height: this.height, width: this.width }}\n            >\n                <ul>\n                    {this.hasDownloadButton && (\n                        <li style={{ width: this.downloadButtonWidth }}>\n                            <ActionButton\n                                label=\"Download\"\n                                dataTrackNote=\"chart_click_download\"\n                                showLabel={this.showButtonLabels}\n                                icon={faDownload}\n                                onClick={action((e): void => {\n                                    this.openDownloadModal()\n                                    e.stopPropagation()\n                                })}\n                            />\n                        </li>\n                    )}\n                    {this.hasShareButton && (\n                        <li style={{ width: this.shareButtonWidth }}>\n                            <ActionButton\n                                label=\"Share\"\n                                dataTrackNote=\"chart_click_share\"\n                                showLabel={this.showButtonLabels}\n                                icon={faShareNodes}\n                                onClick={action((e): void => {\n                                    this.toggleShareMenu()\n                                    e.stopPropagation()\n                                })}\n                                isActive={this.manager.isShareMenuActive}\n                            />\n                            {isShareMenuActive && this.renderShareMenu()}\n                        </li>\n                    )}\n                    {this.hasFullScreenButton && (\n                        <li style={{ width: this.fullScreenButtonWidth }}>\n                            <ActionButton\n                                label={this.fullScreenButtonLabel}\n                                dataTrackNote=\"chart_click_fullscreen\"\n                                showLabel={this.showButtonLabels}\n                                icon={\n                                    manager.isInFullScreenMode\n                                        ? faCompress\n                                        : faExpand\n                                }\n                                onClick={this.toggleFullScreenMode}\n                            />\n                        </li>\n                    )}\n                    {this.hasDonateButton && (\n                        <li style={{ width: this.donateButtonWidth }}>\n                            <ActionButton\n                                className=\"ActionButton--donate\"\n                                label=\"Donate\"\n                                dataTrackNote=\"chart_click_donate\"\n                                showLabel={this.showButtonLabels}\n                                icon={faHeart}\n                                href=\"https://ourworldindata.org/donate\"\n                            />\n                        </li>\n                    )}\n                    {this.hasExploreTheDataButton && (\n                        <li style={{ width: this.exploreTheDataButtonWidth }}>\n                            <ActionButton\n                                label=\"Explore the data\"\n                                dataTrackNote=\"chart_click_exploredata\"\n                                icon={faArrowRight}\n                                iconPlacement=\"right\"\n                                href={manager.canonicalUrl}\n                                className=\"ActionButton--exploreData\"\n                                showLabel={true}\n                            />\n                        </li>\n                    )}\n                </ul>\n            </div>\n        )\n    }\n}\n\nexport function ActionButton(props: {\n    label: string\n    icon: IconDefinition\n    iconPlacement?: \"left\" | \"right\"\n    href?: string\n    width?: number\n    dataTrackNote?: string\n    onClick?: React.MouseEventHandler<HTMLDivElement>\n    onMouseDown?: React.MouseEventHandler<HTMLDivElement>\n    showLabel?: boolean\n    isActive?: boolean\n    style?: React.CSSProperties\n    className?: string\n}): React.ReactElement {\n    const buttonClassnames = classNames({\n        active: props.isActive,\n        \"icon-only\": !props.showLabel,\n    })\n\n    const iconPlacement = props.iconPlacement ?? \"left\"\n\n    const buttonContents = (\n        <>\n            {iconPlacement === \"left\" && <FontAwesomeIcon icon={props.icon} />}\n            {props.showLabel && <span className=\"label\">{props.label}</span>}\n            {iconPlacement === \"right\" && <FontAwesomeIcon icon={props.icon} />}\n        </>\n    )\n\n    return (\n        <Tippy\n            content={props.label}\n            theme=\"grapher-dark\"\n            placement=\"top\"\n            arrow={false}\n            offset={[0, 4]}\n            trigger=\"mouseenter\"\n            touch={false}\n            disabled={props.showLabel}\n        >\n            <div\n                className={classNames(\"ActionButton\", props.className)}\n                style={props.style}\n                data-track-note={props.dataTrackNote}\n                onClick={props.onClick}\n                onMouseDown={props.onMouseDown}\n            >\n                {props.href ? (\n                    <a\n                        href={props.href}\n                        className={buttonClassnames}\n                        aria-label={props.label}\n                        target=\"_blank\"\n                        rel=\"noopener\"\n                    >\n                        {buttonContents}\n                    </a>\n                ) : (\n                    <button\n                        className={buttonClassnames}\n                        aria-label={props.label}\n                        type=\"button\"\n                    >\n                        {buttonContents}\n                    </button>\n                )}\n            </div>\n        </Tippy>\n    )\n}\n","import * as React from \"react\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    getRelativeMouse,\n    makeFigmaId,\n    Url,\n    Point,\n} from \"@ourworldindata/utils\"\nimport {\n    DATAPAGE_ABOUT_THIS_DATA_SECTION_ID,\n    MarkdownTextWrap,\n    TextWrap,\n} from \"@ourworldindata/components\"\nimport { Tooltip } from \"../tooltip/Tooltip\"\nimport { FooterManager } from \"./FooterManager\"\nimport { ActionButtons } from \"../controls/ActionButtons\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FOOTER_CLASS,\n    GRAPHER_FRAME_PADDING_HORIZONTAL,\n    GrapherModal,\n} from \"../core/GrapherConstants\"\nimport { GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants\"\n\n/*\n\nThe footer contains the sources, the note (optional), the action buttons and the license and origin URL (optional).\n\nIf all elements exist, they are laid out as follows:\n+-------------------------------------------------------+\n|  Sources                                              |\n+------------------------------------+------------------+\n|  Note                              |                  |\n+------------------------------------+  Action buttons  |\n|  Origin URL | CC BY                |                  |\n+-------------------------------------------------------+\n\nIf the note is long, it is placed below the sources:\n+-------------------------------------------------------+\n|  Sources                                              |\n+-------------------------------------------------------+\n|  Note                                                 |\n+------------------------------------+------------------+\n|  Origin URL | CC BY                |  Action buttons  |\n+------------------------------------+------------------+\n\nIf the origin url and license are short enough, they are placed next to the sources:\n+------------------------------+------------------------+\n|  Sources                     |    Origin URL | CC BY  |\n+------------------------------+-----+------------------+\n|  Note                              |  Action buttons  |\n+-------------------------------------------------------+\n\nIf the note is missing and the sources text is not too long, the sources are placed next to the action buttons:\n+------------------------------------+------------------+\n|  Sources                           |                  |\n+------------------------------------+  Action buttons  |\n|  Origin URL | CC BY                |                  |\n+-------------------------------------------------------+\n\n*/\n\n// keep in sync with sass variables in Footer.scss\nconst HORIZONTAL_PADDING = 8\n\ninterface FooterProps {\n    manager: FooterManager\n    maxWidth?: number\n}\n\nabstract class AbstractFooter<\n    Props extends FooterProps = FooterProps,\n> extends React.Component<Props> {\n    verticalPadding = 4\n\n    constructor(props: Props) {\n        super(props)\n\n        makeObservable(this, {\n            tooltipTarget: observable.ref,\n        })\n    }\n\n    @computed protected get manager(): FooterManager {\n        return this.props.manager\n    }\n\n    @computed protected get maxWidth(): number {\n        return this.props.maxWidth ?? DEFAULT_GRAPHER_BOUNDS.width\n    }\n\n    @computed protected get useBaseFontSize(): boolean {\n        return !!this.manager.useBaseFontSize\n    }\n\n    @computed protected get baseFontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed protected get hideOriginUrl(): boolean {\n        return !!this.manager.hideOriginUrl\n    }\n\n    @computed protected get sourcesLine(): string {\n        return this.manager.sourcesLine?.replace(/\\r\\n|\\n|\\r/g, \"\") ?? \"\"\n    }\n\n    @computed protected get sourcesText(): string {\n        return `Data source: ${this.sourcesLine} - Learn more about this data`\n    }\n\n    @computed protected get noteText(): string {\n        return this.manager.note ? `Note: ${this.manager.note}` : \"\"\n    }\n\n    @computed protected get markdownNoteText(): string {\n        return this.manager.note ? `**Note:** ${this.manager.note}` : \"\"\n    }\n\n    @computed protected get licenseText(): string {\n        if (this.manager.hasOWIDLogo) return \"CC BY\"\n        return \"Powered by ourworldindata.org\"\n    }\n\n    @computed protected get licenseUrl(): string {\n        if (this.manager.hasOWIDLogo)\n            return \"https://creativecommons.org/licenses/by/4.0/\"\n        return \"https://ourworldindata.org\"\n    }\n\n    @computed protected get originUrlWithProtocol(): string {\n        return this.manager.originUrlWithProtocol ?? \"http://localhost\"\n    }\n\n    @computed protected get finalUrl(): string {\n        const originUrl = this.originUrlWithProtocol\n        const url = Url.fromURL(originUrl)\n        return url.originAndPath ?? \"\"\n    }\n\n    @computed protected get correctedUrlText(): string | undefined {\n        const originUrl = this.originUrlWithProtocol\n\n        // Make sure the link back to OWID is consistent\n        if (!originUrl || !originUrl.toLowerCase().match(/^https?:\\/\\/./))\n            return undefined\n\n        const url = Url.fromURL(originUrl)\n        return url.originAndPath\n            ?.replace(/^https?:\\/\\//, \"\")\n            .replace(\"ourworldindata.org\", \"OurWorldinData.org\")\n            .replace(/\\/$/, \"\") // remove trailing slash\n    }\n\n    protected static constructLicenseAndOriginUrlText(\n        urlText: string | undefined,\n        licenseText: string\n    ): string {\n        if (!urlText) return licenseText\n        return [urlText, licenseText].join(\" | \")\n    }\n\n    @computed protected get finalUrlText(): string | undefined {\n        const {\n            correctedUrlText,\n            licenseText,\n            fontSize,\n            maxWidth,\n            actionButtons,\n        } = this\n\n        if (this.hideOriginUrl) return undefined\n\n        if (!correctedUrlText) return undefined\n\n        const licenseAndOriginUrlText =\n            AbstractFooter.constructLicenseAndOriginUrlText(\n                correctedUrlText,\n                licenseText\n            )\n        const licenseAndOriginUrlWidth = Bounds.forText(\n            licenseAndOriginUrlText,\n            { fontSize }\n        ).width\n\n        // If the URL is too long, don't show it\n        if (\n            licenseAndOriginUrlWidth + HORIZONTAL_PADDING >\n            maxWidth - actionButtons.width\n        )\n            return undefined\n\n        return correctedUrlText\n    }\n\n    @computed protected get licenseAndOriginUrlText(): string {\n        const { finalUrlText, licenseText } = this\n        return AbstractFooter.constructLicenseAndOriginUrlText(\n            finalUrlText,\n            licenseText\n        )\n    }\n\n    @computed protected get lineHeight(): number {\n        return this.manager.isSmall ? 1.1 : 1.2\n    }\n\n    @computed protected get fontSize(): number {\n        if (this.useBaseFontSize) {\n            return (11 / BASE_FONT_SIZE) * this.baseFontSize\n        }\n        return this.manager.isMedium ? 11 : 12\n    }\n\n    @computed protected get sourcesFontSize(): number {\n        if (this.useBaseFontSize) {\n            return (12 / BASE_FONT_SIZE) * this.baseFontSize\n        }\n        return this.manager.isSmall ? 12 : 13\n    }\n\n    @computed protected get showNote(): boolean {\n        return !this.manager.hideNote && !!this.noteText\n    }\n\n    @computed private get actionButtonsWidthWithIconsOnly(): number {\n        return new ActionButtons({\n            manager: this.manager,\n            maxWidth: this.maxWidth,\n        }).widthWithIconsOnly\n    }\n\n    @computed private get useFullWidthSources(): boolean {\n        const {\n            showNote,\n            sourcesFontSize,\n            maxWidth,\n            sourcesText,\n            actionButtonsWidthWithIconsOnly,\n        } = this\n        if (showNote) return true\n        const sourcesWidth = Bounds.forText(sourcesText, {\n            fontSize: sourcesFontSize,\n        }).width\n        return sourcesWidth > 2 * (maxWidth - actionButtonsWidthWithIconsOnly)\n    }\n\n    @computed private get useFullWidthNote(): boolean {\n        const {\n            fontSize,\n            maxWidth,\n            noteText,\n            actionButtonsWidthWithIconsOnly,\n        } = this\n        const noteWidth = Bounds.forText(noteText, { fontSize }).width\n        return noteWidth > 2 * (maxWidth - actionButtonsWidthWithIconsOnly)\n    }\n\n    @computed protected get sourcesMaxWidth(): number {\n        if (this.useFullWidthSources) return this.maxWidth\n        return this.maxWidth - this.actionButtons.width - HORIZONTAL_PADDING\n    }\n\n    @computed protected get noteMaxWidth(): number {\n        if (this.useFullWidthNote) return this.maxWidth\n        return this.maxWidth - this.actionButtons.width - HORIZONTAL_PADDING\n    }\n\n    @computed protected get licenseAndOriginUrlMaxWidth(): number {\n        return this.maxWidth\n    }\n\n    @computed protected get showLicenseNextToSources(): boolean {\n        const {\n            useFullWidthSources,\n            maxWidth,\n            sources,\n            licenseAndOriginUrl,\n            note,\n        } = this\n        if (!useFullWidthSources) return false\n        // if there's space, keep the license below the note\n        if (this.useFullWidthNote || note.htmlLines.length <= 1) return false\n        return (\n            sources.width + HORIZONTAL_PADDING + licenseAndOriginUrl.width <=\n            maxWidth\n        )\n    }\n\n    @computed protected get sources(): MarkdownTextWrap {\n        const { lineHeight } = this\n        return new MarkdownTextWrap({\n            text: this.sourcesText,\n            maxWidth: this.sourcesMaxWidth,\n            fontSize: this.sourcesFontSize,\n            lineHeight,\n        })\n    }\n\n    @computed protected get note(): MarkdownTextWrap {\n        const { fontSize, lineHeight, manager } = this\n        return new MarkdownTextWrap({\n            text: this.markdownNoteText,\n            maxWidth: this.noteMaxWidth,\n            fontSize,\n            lineHeight,\n            detailsOrderedByReference: manager.detailsOrderedByReference,\n        })\n    }\n\n    @computed protected get licenseAndOriginUrl(): TextWrap {\n        const { fontSize, lineHeight } = this\n        return new TextWrap({\n            text: this.licenseAndOriginUrlText,\n            maxWidth: this.licenseAndOriginUrlMaxWidth,\n            rawHtml: true,\n            fontSize,\n            lineHeight,\n        })\n    }\n\n    @computed private get actionButtonsMaxWidth(): number {\n        const {\n            correctedUrlText,\n            licenseText,\n            maxWidth,\n            fontSize,\n            sourcesFontSize,\n            useFullWidthSources,\n            sourcesText,\n            noteText,\n            showNote,\n            useFullWidthNote,\n        } = this\n\n        const sourcesWidth = Bounds.forText(sourcesText, {\n            fontSize: sourcesFontSize,\n        }).width\n        const noteWidth = Bounds.forText(noteText, { fontSize }).width\n\n        // text next to the action buttons\n        const leftTextWidth = !useFullWidthSources\n            ? sourcesWidth\n            : showNote && !useFullWidthNote\n              ? noteWidth\n              : 0\n        // text above the action buttons\n        // (taken into account to ensure the action buttons are not too close to clickable text)\n        const topTextWidth = useFullWidthSources\n            ? useFullWidthNote\n                ? noteWidth\n                : sourcesWidth\n            : 0\n        const licenseAndOriginUrlWidth = Bounds.forText(\n            AbstractFooter.constructLicenseAndOriginUrlText(\n                correctedUrlText,\n                licenseText\n            ),\n            { fontSize }\n        ).width\n\n        return (\n            maxWidth -\n            Math.max(topTextWidth, leftTextWidth, licenseAndOriginUrlWidth) -\n            HORIZONTAL_PADDING\n        )\n    }\n\n    @computed private get actionButtons(): ActionButtons {\n        return new ActionButtons({\n            manager: this.manager,\n            maxWidth: this.actionButtonsMaxWidth,\n        })\n    }\n\n    @computed get height(): number {\n        return this.topContentHeight + this.bottomContentHeight\n    }\n\n    base = React.createRef<HTMLDivElement>()\n    tooltipTarget: Point | undefined = undefined\n\n    @action.bound private onMouseMove(e: MouseEvent): void {\n        const cc = this.base.current?.querySelector(\".cclogo\")\n        if (cc && cc.matches(\":hover\")) {\n            const div = this.base.current as HTMLDivElement\n            const grapher = div.closest(\".GrapherComponent\")\n            if (grapher) {\n                const mouse = getRelativeMouse(grapher, e)\n                this.tooltipTarget = { x: mouse.x, y: mouse.y }\n            } else console.error(\"Grapher was falsy\")\n        } else this.tooltipTarget = undefined\n    }\n\n    override componentDidMount(): void {\n        window.addEventListener(\"mousemove\", this.onMouseMove)\n    }\n\n    override componentWillUnmount(): void {\n        window.removeEventListener(\"mousemove\", this.onMouseMove)\n    }\n\n    private renderLicense(): React.ReactElement {\n        return (\n            <div className=\"license\" style={this.licenseAndOriginUrl.htmlStyle}>\n                {this.finalUrlText && (\n                    <>\n                        <a\n                            href={this.finalUrl}\n                            {...(this.manager.isInIFrame && {\n                                target: \"_blank\",\n                                rel: \"noopener\",\n                            })}\n                        >\n                            {this.finalUrlText}\n                        </a>{\" \"}\n                        |{\" \"}\n                    </>\n                )}\n                <a\n                    className={this.manager.hasOWIDLogo ? \"cclogo\" : undefined}\n                    href={this.licenseUrl}\n                    style={{ textDecoration: \"none\" }}\n                    {...(this.manager.isInIFrame && {\n                        target: \"_blank\",\n                        rel: \"noopener\",\n                    })}\n                >\n                    {this.licenseText}\n                </a>\n            </div>\n        )\n    }\n\n    private renderSources(): React.ReactElement | null {\n        const sources = new MarkdownTextWrap({\n            text: `**Data source:** ${this.sourcesLine}`,\n            maxWidth: this.sourcesMaxWidth,\n            fontSize: this.sourcesFontSize,\n            lineHeight: this.lineHeight,\n        })\n\n        return (\n            <p className=\"sources\" style={sources.style}>\n                {sources.renderHTML()}\n                {\" – \"}\n                <a\n                    className=\"learn-more-about-data\"\n                    data-track-note=\"chart_click_sources\"\n                    tabIndex={0}\n                    onClick={action((e) => {\n                        e.stopPropagation()\n\n                        // if embbedded, open the sources modal\n                        if (\n                            this.manager.isEmbeddedInAnOwidPage ||\n                            this.manager.isInIFrame\n                        ) {\n                            this.manager.activeModal = GrapherModal.Sources\n                            return\n                        }\n\n                        // on data pages, scroll to the \"Sources and Processing\" section\n                        // on grapher pages, open the sources modal\n                        const datapageSectionId =\n                            DATAPAGE_ABOUT_THIS_DATA_SECTION_ID\n                        const sourcesElement =\n                            document.getElementById(datapageSectionId)\n                        if (sourcesElement && sourcesElement.scrollIntoView) {\n                            sourcesElement.scrollIntoView({\n                                behavior: \"smooth\",\n                            })\n                            this.manager.isInFullScreenMode = false\n                        } else if (sourcesElement) {\n                            window.location.hash = \"#\" + datapageSectionId\n                            this.manager.isInFullScreenMode = false\n                        } else {\n                            // on grapher pages, open the sources modal\n                            this.manager.activeModal = GrapherModal.Sources\n                        }\n                    })}\n                >\n                    Learn more about this data\n                </a>\n            </p>\n        )\n    }\n\n    private renderNote(): React.ReactElement {\n        return (\n            <p className=\"note\" style={this.note.style}>\n                {this.note.renderHTML()}\n            </p>\n        )\n    }\n\n    private renderVerticalSpace(): React.ReactElement {\n        return (\n            <div\n                style={{\n                    height: this.verticalPadding,\n                    width: \"100%\",\n                }}\n            />\n        )\n    }\n\n    @computed private get topContentHeight(): number {\n        const { sources, note } = this\n\n        const renderSources = this.useFullWidthSources\n        const renderNote = this.showNote && this.useFullWidthNote\n\n        if (!renderSources && !renderNote) return 0\n\n        return (\n            (renderSources ? sources.height : 0) +\n            (renderSources && renderNote ? this.verticalPadding : 0) +\n            (renderNote ? note.height : 0) +\n            this.verticalPadding\n        )\n    }\n\n    // renders the content above the action buttons\n    // make sure to keep this.topContentHeight in sync if you edit this method\n    private renderTopContent(): React.ReactElement | null {\n        const renderSources = this.useFullWidthSources\n        const renderNote = this.showNote && this.useFullWidthNote\n        const renderLicense = this.showLicenseNextToSources\n\n        if (!renderSources && !renderNote) return null\n\n        return (\n            <>\n                <div className=\"SourcesFooterHTMLTop\">\n                    {renderSources && (\n                        <div className=\"SourcesAndLicense\">\n                            {this.renderSources()}\n                            {renderLicense && this.renderLicense()}\n                        </div>\n                    )}\n                    {renderSources && renderNote && this.renderVerticalSpace()}\n                    {renderNote && this.renderNote()}\n                </div>\n                {this.renderVerticalSpace()}\n            </>\n        )\n    }\n\n    @computed private get bottomContentHeight(): number {\n        const { actionButtons, sources, note } = this\n\n        const renderSources = !this.useFullWidthSources\n        const renderNote = this.showNote && !this.useFullWidthNote\n        const renderLicense = !this.showLicenseNextToSources\n        const renderPadding = (renderSources || renderNote) && renderLicense\n\n        const textHeight =\n            (renderSources ? sources.height : renderNote ? note.height : 0) +\n            (renderPadding ? this.verticalPadding : 0) +\n            (renderLicense ? this.licenseAndOriginUrl.height : 0)\n\n        return Math.max(textHeight, actionButtons.height)\n    }\n\n    // renders the action buttons and the content next to it\n    // make sure to keep this.bottomContentHeight in sync if you edit this method\n    private renderBottomContent(): React.ReactElement {\n        const renderSources = !this.useFullWidthSources\n        const renderNote = this.showNote && !this.useFullWidthNote\n        const renderLicense = !this.showLicenseNextToSources\n        const renderPadding = (renderSources || renderNote) && renderLicense\n\n        const licenseOnly = !renderSources && !renderNote && renderLicense\n        const noteOnly = !renderSources && renderNote && !renderLicense\n\n        // center text next to the action buttons if it's only one or two lines\n        const style = {\n            alignItems:\n                licenseOnly || (noteOnly && this.note.htmlLines.length <= 2)\n                    ? \"center\"\n                    : \"flex-end\",\n        }\n\n        return (\n            <div className=\"SourcesFooterHTMLBottom\" style={style}>\n                <div>\n                    {renderSources\n                        ? this.renderSources()\n                        : renderNote\n                          ? this.renderNote()\n                          : null}\n                    {renderPadding && this.renderVerticalSpace()}\n                    {renderLicense && this.renderLicense()}\n                </div>\n                <ActionButtons\n                    manager={this.manager}\n                    maxWidth={this.actionButtonsMaxWidth}\n                />\n            </div>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { tooltipTarget } = this\n\n        return (\n            <footer\n                className=\"SourcesFooterHTML\"\n                style={{\n                    padding: `0 ${GRAPHER_FRAME_PADDING_HORIZONTAL}px`,\n                }}\n                ref={this.base}\n            >\n                {this.renderTopContent()}\n                {this.renderBottomContent()}\n                {tooltipTarget && (\n                    <Tooltip\n                        id=\"footer\"\n                        tooltipManager={this.manager}\n                        x={tooltipTarget.x}\n                        y={tooltipTarget.y}\n                        style={{\n                            textAlign: \"left\",\n                            maxWidth: \"304px\",\n                            whiteSpace: \"inherit\",\n                            fontSize: \"14px\",\n                            padding: \"0\",\n                            lineHeight: \"21px\",\n                            fontWeight: 400,\n                            letterSpacing: \"0.01em\",\n                        }}\n                    >\n                        <p>\n                            Our World in Data charts are licensed under Creative\n                            Commons; you are free to use, share, and adapt this\n                            material. Click through to the CC BY page for more\n                            information. Please bear in mind that the underlying\n                            source data for all our charts might be subject to\n                            different license terms from third-party authors.\n                        </p>\n                    </Tooltip>\n                )}\n            </footer>\n        )\n    }\n}\n\n@observer\nexport class Footer extends AbstractFooter<FooterProps> {}\n\ninterface StaticFooterProps extends FooterProps {\n    targetX: number\n    targetY: number\n}\n\n@observer\nexport class StaticFooter extends AbstractFooter<StaticFooterProps> {\n    override verticalPadding = 4.5\n\n    constructor(props: StaticFooterProps) {\n        super(props)\n\n        makeObservable(this)\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    override componentDidMount(): void {}\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    override componentWillUnmount(): void {}\n\n    protected override get hideOriginUrl(): boolean {\n        return !!this.manager.hideOriginUrl || !!this.manager.isStaticAndSmall\n    }\n\n    @computed private get textColor(): string {\n        return GRAPHER_LIGHT_TEXT\n    }\n\n    protected override get showLicenseNextToSources(): boolean {\n        return (\n            this.maxWidth - this.sources.width - HORIZONTAL_PADDING >\n            this.licenseAndOriginUrl.width\n        )\n    }\n\n    protected override get finalUrlText(): string | undefined {\n        const { correctedUrlText, licenseText, fontSize, maxWidth } = this\n\n        if (this.hideOriginUrl) return undefined\n\n        if (!correctedUrlText) return undefined\n\n        const licenseAndOriginUrlText = Footer.constructLicenseAndOriginUrlText(\n            correctedUrlText,\n            licenseText\n        )\n        const licenseAndOriginUrlWidth = Bounds.forText(\n            licenseAndOriginUrlText,\n            { fontSize }\n        ).width\n\n        // If the URL is too long, don't show it\n        if (licenseAndOriginUrlWidth > maxWidth) return undefined\n\n        return correctedUrlText\n    }\n\n    protected override get licenseAndOriginUrlText(): string {\n        const { finalUrl, finalUrlText, licenseText, licenseUrl, textColor } =\n            this\n        const linkStyle = `fill: ${textColor};`\n        const targetAttr = this.manager.isInIFrame\n            ? ' target=\"_blank\" rel=\"noopener\"'\n            : \"\"\n        const licenseSvg = `<a style=\"${linkStyle}\" href=\"${licenseUrl}\"${targetAttr}>${licenseText}</a>`\n        if (!finalUrlText) return licenseSvg\n        const originUrlSvg = `<a style=\"${linkStyle}\" href=\"${finalUrl}\"${targetAttr}>${finalUrlText}</a>`\n        return [originUrlSvg, licenseSvg].join(\" | \")\n    }\n\n    protected override get sourcesText(): string {\n        return `**Data source:** ${this.sourcesLine}`\n    }\n\n    protected override get fontSize(): number {\n        if (this.manager.isStaticAndSmall) return 14\n        return this.useBaseFontSize\n            ? Math.round((13 / BASE_FONT_SIZE) * this.baseFontSize)\n            : 13\n    }\n\n    protected override get sourcesFontSize(): number {\n        return this.fontSize\n    }\n\n    protected override get sourcesMaxWidth(): number {\n        return this.maxWidth\n    }\n\n    protected override get noteMaxWidth(): number {\n        return this.maxWidth\n    }\n\n    protected override get licenseAndOriginUrlMaxWidth(): number {\n        return this.maxWidth\n    }\n\n    override get height(): number {\n        return (\n            this.sources.height +\n            (this.showNote ? this.note.height + this.verticalPadding : 0) +\n            (this.showLicenseNextToSources\n                ? 0\n                : this.licenseAndOriginUrl.height + this.verticalPadding)\n        )\n    }\n\n    override render(): React.ReactElement {\n        const {\n            sources,\n            note,\n            licenseAndOriginUrl,\n            showLicenseNextToSources,\n            maxWidth,\n        } = this\n        const { targetX, targetY } = this.props\n\n        return (\n            <g\n                id={makeFigmaId(GRAPHER_FOOTER_CLASS)}\n                className=\"SourcesFooter\"\n                style={{ fill: this.textColor }}\n            >\n                {sources.renderSVG(targetX, targetY, {\n                    id: makeFigmaId(\"sources\"),\n                })}\n                {this.showNote &&\n                    note.renderSVG(\n                        targetX,\n                        targetY + sources.height + this.verticalPadding,\n                        {\n                            id: makeFigmaId(\"note\"),\n                            detailsMarker: this.manager.detailsMarkerInSvg,\n                        }\n                    )}\n                {showLicenseNextToSources\n                    ? licenseAndOriginUrl.renderSVG(\n                          targetX + maxWidth - licenseAndOriginUrl.width,\n                          targetY,\n                          { id: makeFigmaId(\"origin-url\") }\n                      )\n                    : licenseAndOriginUrl.renderSVG(\n                          targetX,\n                          targetY +\n                              sources.height +\n                              (this.showNote\n                                  ? note.height + this.verticalPadding\n                                  : 0) +\n                              this.verticalPadding,\n                          { id: makeFigmaId(\"origin-url\") }\n                      )}\n            </g>\n        )\n    }\n}\n","import * as R from \"remeda\"\nimport { Time } from \"@ourworldindata/types\"\nimport {\n    TimeBound,\n    TimeBoundValue,\n    sleep,\n    findClosestTime,\n    rollingMap,\n} from \"@ourworldindata/utils\"\nimport { action, computed } from \"mobx\"\nimport { TimeColumn } from \"@ourworldindata/core-table\"\n\n// Animation timing constants\nconst MIN_MS_PER_TICK = 100\nconst MAX_MS_PER_TICK = 200\nconst TARGET_ANIMATION_DURATION_MS = 4000\n\nexport enum TimelineDragTarget {\n    Start = \"start\",\n    End = \"end\",\n    Both = \"both\",\n}\n\nexport interface TimelineManager {\n    disablePlay?: boolean\n    formatTimeFn?: (time: Time) => string\n    timeColumn?: TimeColumn\n    isTimelineAnimationPlaying?: boolean\n    isTimelineAnimationActive?: boolean\n    animationStartTime?: Time\n    times: Time[]\n    startHandleTimeBound: TimeBound\n    endHandleTimeBound: TimeBound\n    areHandlesOnSameTimeBeforeAnimation?: boolean\n    isSingleTimeSelectionActive?: boolean\n    onlyTimeRangeSelectionPossible?: boolean\n    onPlay?: () => void\n    onTimelineClick?: () => void\n    timelineDragTarget?: TimelineDragTarget\n}\n\nexport class TimelineController {\n    manager: TimelineManager\n\n    constructor(manager: TimelineManager) {\n        this.manager = manager\n    }\n\n    get timesAsc(): number[] {\n        // Note: assumes times is sorted in asc\n        return this.manager.times\n    }\n\n    get startTime(): number {\n        return findClosestTime(\n            this.timesAsc,\n            this.manager.startHandleTimeBound\n        )!\n    }\n\n    get endTime(): number {\n        return findClosestTime(this.timesAsc, this.manager.endHandleTimeBound)!\n    }\n\n    get minTime(): number {\n        return this.timesAsc[0]\n    }\n\n    get maxTime(): number {\n        return R.last(this.timesAsc)!\n    }\n\n    get timespan(): number {\n        return this.maxTime - this.minTime\n    }\n\n    /** Adaptive animation speed based on the number of time points */\n    @computed get msPerTick(): number {\n        const numTimePoints = this.timesAsc.length\n        if (numTimePoints <= 1) return MAX_MS_PER_TICK\n\n        const duration = TARGET_ANIMATION_DURATION_MS / numTimePoints\n\n        return R.clamp(duration, { min: MIN_MS_PER_TICK, max: MAX_MS_PER_TICK })\n    }\n\n    /**\n     * Determines whether to use equal or proportional spacing for the timeline slider.\n     *\n     * When using equal spacing, each time point is given equal visual space on the slider.\n     * When using proportional spacing, time points are spaced based on their actual values.\n     */\n    @computed get shouldUseEqualSpacing(): boolean {\n        // Few time points always use continuous scale\n        if (this.timesAsc.length < 20) return false\n\n        // Short timespans always use continuous scale\n        if (this.timespan <= 500) return false\n\n        // Calculate gaps between consecutive time points\n        const gaps = rollingMap(this.timesAsc, (a, b) => b - a)\n\n        const topDecileSum = R.pipe(\n            gaps,\n            R.takeFirstBy(gaps.length * 0.1, [R.identity(), \"desc\"]),\n            R.sum()\n        )\n\n        return topDecileSum > this.timespan * 0.5\n    }\n\n    /**\n     * Converts a time value to a normalized progress value (0-1) representing\n     * its position on the timeline slider\n     */\n    timeToProgress(time: Time): number {\n        if (this.shouldUseEqualSpacing) {\n            // Equal spacing: each time point gets equal visual space\n            const index = this.timesAsc.indexOf(time)\n            if (index === -1) return 0\n            return this.timesAsc.length > 1\n                ? index / (this.timesAsc.length - 1)\n                : 0\n        } else {\n            // Proportional spacing: linear mapping based on time value\n            if (this.timespan === 0) return 0 // Handle single time point\n            return (time - this.minTime) / this.timespan\n        }\n    }\n\n    /**\n     * Converts a normalized progress value (0-1) to the corresponding time\n     * value on the timeline\n     */\n    progressToTime(progress: number): number {\n        if (this.shouldUseEqualSpacing) {\n            // Equal spacing: map progress to the nearest time index\n            if (this.timesAsc.length <= 1) return this.timesAsc[0]\n            const index = Math.round(progress * (this.timesAsc.length - 1))\n            return this.timesAsc[\n                R.clamp(index, { min: 0, max: this.timesAsc.length - 1 })\n            ]\n        } else {\n            // Proportional spacing: linear mapping based on time value\n            return this.minTime + progress * this.timespan\n        }\n    }\n\n    get startTimeProgress(): number {\n        return this.timeToProgress(this.startTime)\n    }\n\n    get endTimeProgress(): number {\n        return this.timeToProgress(this.endTime)\n    }\n\n    // Finds the index of `time` in the `timesAsc` array.\n    // Assumes the input time to be present in the array, and will throw otherwise.\n    private findIndexOfTime(time: number): number {\n        const index = R.sortedIndex(this.timesAsc, time)\n        if (this.timesAsc[index] === time) return index\n        else throw new Error(`Time ${time} not found in available times`)\n    }\n\n    getNextTime(time: number): number {\n        const index = this.findIndexOfTime(time)\n        return this.timesAsc[index + 1] ?? this.maxTime\n    }\n\n    getPrevTime(time: number): number {\n        const index = this.findIndexOfTime(time)\n        return this.timesAsc[index - 1] ?? this.minTime\n    }\n\n    getNextValidTime(time: number, avoidTime?: number): number {\n        const nextTime = this.getNextTime(time)\n\n        // If handles can't be on the same time and next time equals the avoid time,\n        // don't move (return current time)\n        if (\n            !this.allowHandlesOnSameTime &&\n            avoidTime !== undefined &&\n            nextTime === avoidTime\n        ) {\n            return time\n        }\n\n        return nextTime\n    }\n\n    getPrevValidTime(time: number, avoidTime?: number): number {\n        const prevTime = this.getPrevTime(time)\n\n        // If handles can't be on the same time and prev time equals the avoid time,\n        // don't move (return current time)\n        if (\n            !this.allowHandlesOnSameTime &&\n            avoidTime !== undefined &&\n            prevTime === avoidTime\n        ) {\n            return time\n        }\n\n        return prevTime\n    }\n\n    // By default, play means extend the endTime to the right. Toggle this to play one time unit at a time.\n    private rangeMode = true\n    toggleRangeMode(): this {\n        this.rangeMode = !this.rangeMode\n        return this\n    }\n\n    private isAtEnd(): boolean {\n        return this.endTime === this.maxTime\n    }\n\n    private get beginning(): number {\n        const { manager } = this\n        return manager.endHandleTimeBound !== manager.startHandleTimeBound\n            ? manager.startHandleTimeBound\n            : this.minTime\n    }\n\n    @action.bound private resetToBeginning(): void {\n        const { beginning } = this\n        this.manager.endHandleTimeBound = beginning\n        this.manager.startHandleTimeBound = beginning\n    }\n\n    @action.bound async play(numberOfTicks?: number): Promise<number> {\n        const { manager } = this\n\n        manager.isTimelineAnimationPlaying = true\n        manager.isTimelineAnimationActive = true\n\n        if (this.isAtEnd()) this.resetToBeginning()\n\n        if (manager.onPlay) manager.onPlay()\n\n        // Keep and return a tickCount for easier testability\n        let tickCount = 0\n        while (manager.isTimelineAnimationPlaying) {\n            const nextTime = this.getNextTime(this.endTime)\n            if (!this.rangeMode) this.updateStartTime(nextTime)\n            this.updateEndTime(nextTime)\n            tickCount++\n            if (nextTime >= this.maxTime || numberOfTicks === tickCount) {\n                this.stop()\n                break\n            }\n            await sleep(this.msPerTick)\n        }\n\n        return tickCount\n    }\n\n    get allowHandlesOnSameTime(): boolean {\n        return !this.manager.onlyTimeRangeSelectionPossible\n    }\n\n    increaseStartTime(): void {\n        const nextTime = this.getNextTime(this.startTime)\n        if (!this.allowHandlesOnSameTime && nextTime >= this.endTime) return\n        this.updateStartTime(nextTime)\n    }\n\n    decreaseStartTime(): void {\n        const prevTime = this.getPrevTime(this.startTime)\n        this.updateStartTime(prevTime)\n    }\n\n    increaseEndTime(): void {\n        const nextTime = this.getNextTime(this.endTime)\n        this.updateEndTime(nextTime)\n    }\n\n    decreaseEndTime(): void {\n        const prevTime = this.getPrevTime(this.endTime)\n        if (!this.allowHandlesOnSameTime && prevTime <= this.startTime) return\n        this.updateEndTime(prevTime)\n    }\n\n    // Jump forward by ~10% of available times\n    getLargeStepForward(currentTime: number, fraction = 0.1): number {\n        const currentIndex = this.findIndexOfTime(currentTime)\n        if (currentIndex === -1) return this.maxTime\n\n        const stepSize = Math.max(\n            1,\n            Math.floor(this.timesAsc.length * fraction)\n        )\n\n        const targetIndex = Math.min(\n            this.timesAsc.length - 1,\n            currentIndex + stepSize\n        )\n\n        return this.timesAsc[targetIndex]\n    }\n\n    // Jump backward by ~10% of available times\n    getLargeStepBackward(currentTime: number, fraction = 0.1): number {\n        const currentIndex = this.findIndexOfTime(currentTime)\n        if (currentIndex === -1) return this.minTime\n\n        const stepSize = Math.max(\n            1,\n            Math.floor(this.timesAsc.length * fraction)\n        )\n\n        const targetIndex = Math.max(0, currentIndex - stepSize)\n\n        return this.timesAsc[targetIndex]\n    }\n\n    increaseStartTimeByLargeStep(): void {\n        const nextTime = this.getLargeStepForward(this.startTime)\n        if (!this.allowHandlesOnSameTime && nextTime >= this.endTime) {\n            this.increaseStartTime()\n            return\n        }\n        this.updateStartTime(nextTime)\n    }\n\n    decreaseStartTimeByLargeStep(): void {\n        const prevTime = this.getLargeStepBackward(this.startTime)\n        this.updateStartTime(prevTime)\n    }\n\n    increaseEndTimeByLargeStep(): void {\n        const nextTime = this.getLargeStepForward(this.endTime)\n        this.updateEndTime(nextTime)\n    }\n\n    decreaseEndTimeByLargeStep(): void {\n        const prevTime = this.getLargeStepBackward(this.endTime)\n        if (!this.allowHandlesOnSameTime && prevTime <= this.startTime) {\n            this.decreaseEndTime()\n            return\n        }\n        this.updateEndTime(prevTime)\n    }\n\n    @action.bound stop(): void {\n        this.manager.isTimelineAnimationPlaying = false\n        this.manager.isTimelineAnimationActive = false\n        this.manager.animationStartTime = undefined\n        this.manager.areHandlesOnSameTimeBeforeAnimation = undefined\n    }\n\n    @action.bound private pause(): void {\n        this.manager.isTimelineAnimationPlaying = false\n    }\n\n    onDrag(): void {\n        this.stop()\n    }\n\n    @action.bound async togglePlay(): Promise<void> {\n        if (!this.manager.isTimelineAnimationActive) {\n            this.manager.areHandlesOnSameTimeBeforeAnimation =\n                this.manager.startHandleTimeBound ===\n                this.manager.endHandleTimeBound\n            this.manager.animationStartTime = this.isAtEnd()\n                ? findClosestTime(this.timesAsc, this.beginning)!\n                : this.startTime\n        }\n\n        if (this.manager.isTimelineAnimationPlaying) this.pause()\n        else await this.play()\n    }\n\n    /**\n     * Stores the offset between the drag start position and the handle positions.\n     * Used when dragging the range (both handles together) to preserve their relative spacing.\n     *\n     * Depends on the spacing mode:\n     * - In proportional spacing mode: stores time offsets (e.g., [-5, +10] for years)\n     * - In equal spacing mode: stores index offsets (e.g., [-2, +3] for array positions)\n     */\n    private dragOffsets: [number, number] = [0, 0]\n\n    private get isSingleDragMarker(): boolean {\n        return this.dragOffsets[0] === this.dragOffsets[1]\n    }\n\n    private timeToIndex(time: Time): number {\n        return R.sortedIndex(this.timesAsc, time)\n    }\n\n    private indexToTimeBound(index: number): TimeBound {\n        const minIndex = 0\n        const maxIndex = this.timesAsc.length - 1\n        const clampedIndex = R.clamp(index, { min: minIndex, max: maxIndex })\n        const time = this.timesAsc[clampedIndex]\n\n        // Convert to infinity at the edges\n        if (index <= minIndex) return TimeBoundValue.negativeInfinity\n        if (index >= maxIndex) return TimeBoundValue.positiveInfinity\n\n        return time\n    }\n\n    setDragOffsets(inputTime: number): void {\n        if (this.shouldUseEqualSpacing) {\n            this.setDragOffsetsEqualSpacing(inputTime)\n        } else {\n            this.setDragOffsetsProportional(inputTime)\n        }\n    }\n\n    private setDragOffsetsEqualSpacing(inputTime: number): void {\n        const closestTime =\n            findClosestTime(this.timesAsc, inputTime) ?? inputTime\n        const clickIndex = this.timeToIndex(closestTime)\n        const startIndex = this.timeToIndex(this.startTime)\n        const endIndex = this.timeToIndex(this.endTime)\n\n        this.dragOffsets = [startIndex - clickIndex, endIndex - clickIndex]\n    }\n\n    private setDragOffsetsProportional(inputTime: number): void {\n        const closestTime =\n            findClosestTime(this.timesAsc, inputTime) ?? inputTime\n        this.dragOffsets = [\n            this.startTime - closestTime,\n            this.endTime - closestTime,\n        ]\n    }\n\n    clampTimeBound(inputTime: Time): TimeBound {\n        if (inputTime < this.minTime) return TimeBoundValue.negativeInfinity\n        if (inputTime > this.maxTime) return TimeBoundValue.positiveInfinity\n        const closestTime =\n            findClosestTime(this.timesAsc, inputTime) ?? inputTime\n        return R.clamp(closestTime, { min: this.minTime, max: this.maxTime })\n    }\n\n    private dragRangeToTime(time: Time): void {\n        if (this.shouldUseEqualSpacing) {\n            this.dragRangeToTimeEqualSpacing(time)\n        } else {\n            this.dragRangeToTimeProportional(time)\n        }\n    }\n\n    private dragRangeToTimeEqualSpacing(time: Time): void {\n        const closestTime = findClosestTime(this.timesAsc, time) ?? time\n        const currentIndex = this.timeToIndex(closestTime)\n\n        // Apply index offsets\n        let startIndex = currentIndex + this.dragOffsets[0]\n        let endIndex = currentIndex + this.dragOffsets[1]\n\n        const minIndex = 0\n        const maxIndex = this.timesAsc.length - 1\n\n        // Handle edge clamping for ranges\n        if (!this.isSingleDragMarker) {\n            const indexSpan = this.dragOffsets[1] - this.dragOffsets[0]\n\n            if (startIndex < minIndex) {\n                startIndex = minIndex\n                endIndex = minIndex + indexSpan\n            } else if (endIndex > maxIndex) {\n                endIndex = maxIndex\n                startIndex = maxIndex - indexSpan\n            }\n        }\n\n        // Convert indices to TimeBounds\n        const startTimeBound = this.indexToTimeBound(startIndex)\n        const endTimeBound = this.indexToTimeBound(endIndex)\n\n        this.updateStartTime(startTimeBound)\n        this.updateEndTime(endTimeBound)\n    }\n\n    private dragRangeToTimeProportional(time: Time): void {\n        const { minTime, maxTime } = this\n\n        let startTime = this.clampTimeBound(this.dragOffsets[0] + time)\n        let endTime = this.clampTimeBound(this.dragOffsets[1] + time)\n\n        if (!this.isSingleDragMarker) {\n            if (startTime < minTime) {\n                endTime = this.clampTimeBound(\n                    minTime + (this.dragOffsets[1] - this.dragOffsets[0])\n                )\n            } else if (endTime > maxTime) {\n                startTime = this.clampTimeBound(\n                    maxTime + (this.dragOffsets[0] - this.dragOffsets[1])\n                )\n            }\n        }\n\n        this.updateStartTime(startTime)\n        this.updateEndTime(endTime)\n    }\n\n    dragHandleToTime(\n        handle: TimelineDragTarget,\n        inputTime: number\n    ): TimelineDragTarget {\n        const { manager } = this\n\n        let time = this.clampTimeBound(inputTime)\n\n        // Prevent handles from being on the same time if not allowed\n        if (!this.allowHandlesOnSameTime) {\n            const closestTime = findClosestTime(this.timesAsc, time) ?? time\n            if (\n                handle === TimelineDragTarget.Start &&\n                closestTime === this.endTime\n            ) {\n                time = this.getPrevTime(this.endTime)\n            } else if (\n                handle === TimelineDragTarget.End &&\n                closestTime === this.startTime\n            ) {\n                time = this.getNextTime(this.startTime)\n            }\n        }\n\n        const constrainedHandle =\n            handle === TimelineDragTarget.Start && time > this.endTime\n                ? TimelineDragTarget.End\n                : handle === TimelineDragTarget.End && time < this.startTime\n                  ? TimelineDragTarget.Start\n                  : handle\n\n        if (constrainedHandle !== handle) {\n            if (handle === TimelineDragTarget.Start)\n                this.updateStartTime(manager.endHandleTimeBound)\n            else this.updateEndTime(manager.startHandleTimeBound)\n        }\n\n        if (manager.isTimelineAnimationPlaying && !this.rangeMode) {\n            this.updateStartTime(time)\n            this.updateEndTime(time)\n        } else if (handle === TimelineDragTarget.Both)\n            this.dragRangeToTime(inputTime)\n        else if (constrainedHandle === TimelineDragTarget.Start)\n            this.updateStartTime(time)\n        else if (constrainedHandle === TimelineDragTarget.End)\n            this.updateEndTime(time)\n\n        return constrainedHandle\n    }\n\n    @action.bound private updateStartTime(timeBound: TimeBound): void {\n        this.manager.startHandleTimeBound = timeBound\n    }\n\n    @action.bound private updateEndTime(timeBound: TimeBound): void {\n        this.manager.endHandleTimeBound = timeBound\n    }\n\n    resetStartToMin(): void {\n        this.updateStartTime(TimeBoundValue.negativeInfinity)\n    }\n\n    resetEndToMax(): void {\n        this.updateEndTime(TimeBoundValue.positiveInfinity)\n    }\n\n    setStartToMax(): void {\n        this.updateStartTime(TimeBoundValue.positiveInfinity)\n    }\n\n    setEndToMin(): void {\n        this.updateEndTime(TimeBoundValue.negativeInfinity)\n    }\n\n    setStartAndEndTimeFromInput(time: number): void {\n        const timeBound = this.clampTimeBound(time)\n        this.updateStartTime(timeBound)\n        this.updateEndTime(timeBound)\n    }\n\n    setStartTimeFromInput(time: number): void {\n        let timeBound = this.clampTimeBound(time)\n\n        // Prevent handles from being on the same time if not allowed\n        const closestTime = findClosestTime(this.timesAsc, time) ?? time\n        if (!this.allowHandlesOnSameTime && closestTime === this.endTime) {\n            timeBound = this.getPrevTime(this.endTime)\n        }\n\n        // If new start time > current end time, swap them\n        if (timeBound > this.endTime) {\n            this.updateStartTime(this.manager.endHandleTimeBound)\n            this.updateEndTime(timeBound)\n        } else {\n            this.updateStartTime(timeBound)\n        }\n    }\n\n    setEndTimeFromInput(time: number): void {\n        let timeBound = this.clampTimeBound(time)\n\n        // Prevent handles from being on the same time if not allowed\n        const closestTime = findClosestTime(this.timesAsc, time) ?? time\n        if (!this.allowHandlesOnSameTime && closestTime === this.startTime) {\n            timeBound = this.getNextTime(this.startTime)\n        }\n\n        // If new end time < current start time, swap them\n        if (timeBound < this.startTime) {\n            this.updateEndTime(this.manager.startHandleTimeBound)\n            this.updateStartTime(timeBound)\n        } else {\n            this.updateEndTime(timeBound)\n        }\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { select } from \"d3-selection\"\nimport cx from \"classnames\"\nimport { match } from \"ts-pattern\"\nimport {\n    getRelativeMouse,\n    Bounds,\n    Time,\n    parseIntOrUndefined,\n    isTouchDevice,\n    convertDaysSinceEpochToDate,\n    diffDateISOStringInDays,\n    EPOCH_DATE,\n} from \"@ourworldindata/utils\"\nimport { observable, computed, action, makeObservable, reaction } from \"mobx\"\nimport { ColumnTypeMap } from \"@ourworldindata/core-table\"\nimport { observer } from \"mobx-react\"\nimport { faPlay, faPause } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    TimelineController,\n    TimelineManager,\n    TimelineDragTarget,\n} from \"./TimelineController\"\nimport { ActionButton } from \"../controls/ActionButtons\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FRAME_PADDING_HORIZONTAL,\n    GRAPHER_TIMELINE_CLASS,\n} from \"../core/GrapherConstants.js\"\nimport { DateField, DateInput, DateSegment } from \"react-aria-components\"\nimport { CalendarDate } from \"@internationalized/date\"\n\nexport const TIMELINE_HEIGHT = 32 // Keep in sync with $timelineHeight in TimelineComponent.scss\n\nconst HANDLE_DIAMETER = 20 // Keep in sync with $handle-diameter in TimelineComponent.scss\nconst HANDLE_TOOLTIP_FADE_TIME_MS_MOBILE = 1000 // Brief delay after drag on mobile\n\nconst SLIDER_CLASS = \"GrapherTimeline__Slider\"\nconst PLAY_BUTTON_CLASS = \"GrapherTimeline__PlayButton\"\n\nenum MarkerType {\n    Start = \"startMarker\",\n    End = \"endMarker\",\n    Hover = \"hoverMarker\",\n}\n\nconst NAVIGATION_KEYS = [\n    \"ArrowUp\",\n    \"ArrowDown\",\n    \"ArrowLeft\",\n    \"ArrowRight\",\n    \"PageUp\",\n    \"PageDown\",\n    \"Home\",\n    \"End\",\n] as const\n\ntype NavigationKey = (typeof NAVIGATION_KEYS)[number]\n\ninterface TimelineComponentProps {\n    timelineController: TimelineController\n    maxWidth?: number\n}\n\n@observer\nexport class TimelineComponent extends React.Component<TimelineComponentProps> {\n    base = React.createRef<HTMLDivElement>()\n\n    private hoverTime?: Time\n\n    private startTooltipVisible: boolean = false\n    private endTooltipVisible: boolean = false\n    private lastUpdatedTooltip?: MarkerType\n\n    private editHandle?: Exclude<MarkerType, MarkerType.Hover>\n\n    // Prevents the hover handle from appearing when hovering over tooltips\n    private isHoveringOverTooltip: boolean = false\n\n    private slider?: Element | HTMLElement | null\n    private playButton?: Element | HTMLElement | null\n    private disposers: (() => void)[] = []\n\n    constructor(props: TimelineComponentProps) {\n        super(props)\n\n        makeObservable<\n            TimelineComponent,\n            | \"startTooltipVisible\"\n            | \"endTooltipVisible\"\n            | \"lastUpdatedTooltip\"\n            | \"hoverTime\"\n            | \"editHandle\"\n            | \"isHoveringOverTooltip\"\n        >(this, {\n            startTooltipVisible: observable,\n            endTooltipVisible: observable,\n            lastUpdatedTooltip: observable,\n            hoverTime: observable,\n            editHandle: observable,\n            isHoveringOverTooltip: observable,\n        })\n    }\n\n    @computed protected get maxWidth(): number {\n        return this.props.maxWidth ?? DEFAULT_GRAPHER_BOUNDS.width\n    }\n\n    @computed private get dragTarget(): TimelineDragTarget | undefined {\n        return this.manager.timelineDragTarget\n    }\n\n    @computed private get isDragging(): boolean {\n        return !!this.dragTarget\n    }\n\n    @computed private get manager(): TimelineManager {\n        return this.props.timelineController.manager\n    }\n\n    @computed private get controller(): TimelineController {\n        return this.props.timelineController\n    }\n\n    @computed private get isTouchDevice(): boolean {\n        return isTouchDevice()\n    }\n\n    @computed private get canEditTimeViaTooltip(): boolean {\n        return !this.isTouchDevice\n    }\n\n    @computed private get isDailyData(): boolean {\n        const { timeColumn } = this.manager\n        return (\n            timeColumn !== undefined && timeColumn instanceof ColumnTypeMap.Day\n        )\n    }\n\n    private get sliderBounds(): Bounds {\n        return this.slider\n            ? Bounds.fromRect(this.slider.getBoundingClientRect())\n            : new Bounds(0, 0, 100, 100)\n    }\n\n    private getInputTimeFromMouse(\n        event: MouseEvent | TouchEvent\n    ): number | undefined {\n        if (!this.slider) return\n        const mouseX = getRelativeMouse(this.slider, event).x\n\n        const progress = mouseX / this.sliderBounds.width\n        return this.controller.progressToTime(progress)\n    }\n\n    @action.bound private onDrag(inputTime: number): void {\n        this.controller.onDrag()\n        this.manager.timelineDragTarget = this.controller.dragHandleToTime(\n            this.dragTarget!,\n            inputTime\n        )\n        this.showTooltips()\n    }\n\n    @action.bound private showStartTooltip(): void {\n        this.hideStartTooltipWithDelay.cancel()\n        this.startTooltipVisible = true\n    }\n\n    @action.bound private showEndTooltip(): void {\n        this.hideEndTooltipWithDelay.cancel()\n        this.endTooltipVisible = true\n    }\n\n    @action.bound private showTooltips(): void {\n        this.showStartTooltip()\n        this.showEndTooltip()\n\n        if (this.dragTarget === \"start\")\n            this.lastUpdatedTooltip = MarkerType.Start\n        if (this.dragTarget === \"end\") this.lastUpdatedTooltip = MarkerType.End\n        if (this.manager.startHandleTimeBound > this.manager.endHandleTimeBound)\n            this.lastUpdatedTooltip =\n                this.lastUpdatedTooltip === MarkerType.Start\n                    ? MarkerType.End\n                    : MarkerType.Start\n    }\n\n    private getDragTarget(\n        inputTime: number,\n        isStartMarker: boolean,\n        isEndMarker: boolean\n    ): TimelineDragTarget {\n        const { startHandleTimeBound, endHandleTimeBound } = this.manager\n\n        if (\n            startHandleTimeBound === endHandleTimeBound &&\n            (isStartMarker || isEndMarker)\n        )\n            return TimelineDragTarget.Both\n        else if (isStartMarker || inputTime <= startHandleTimeBound)\n            return TimelineDragTarget.Start\n        else if (isEndMarker || inputTime >= endHandleTimeBound)\n            return TimelineDragTarget.End\n        return TimelineDragTarget.Both\n    }\n\n    @action.bound private onMouseDown(event: MouseEvent | TouchEvent): void {\n        // Exit edit mode if dragging starts\n        this.resetEditState()\n\n        this.manager.onTimelineClick?.()\n\n        // Immediately hide the hover time handle\n        this.hoverTime = undefined\n\n        const targetEl = select(event.target as Element)\n\n        const inputTime = this.getInputTimeFromMouse(event)\n        if (inputTime === undefined) return\n\n        this.manager.timelineDragTarget = this.getDragTarget(\n            inputTime,\n            targetEl.classed(MarkerType.Start),\n            targetEl.classed(MarkerType.End)\n        )\n\n        if (this.dragTarget === \"both\")\n            this.controller.setDragOffsets(inputTime)\n\n        this.onDrag(inputTime)\n\n        event.preventDefault()\n    }\n\n    private queuedDrag?: boolean\n    @action.bound private onMouseMove(event: MouseEvent | TouchEvent): void {\n        const { dragTarget } = this\n        if (!dragTarget) return\n        if (this.queuedDrag) return\n\n        this.queuedDrag = true\n        const inputTime = this.getInputTimeFromMouse(event)\n        if (inputTime !== undefined) this.onDrag(inputTime)\n        this.queuedDrag = false\n    }\n\n    @action.bound private onMouseUp(): void {\n        this.manager.timelineDragTarget = undefined\n\n        if (this.manager.isTimelineAnimationPlaying) return\n\n        this.hideTooltipsAfterInteraction()\n    }\n\n    @computed private get areBothHandlesVisible(): boolean {\n        return this.controller.startTime !== this.controller.endTime\n    }\n\n    @computed private get shouldShowHoverTimeHandle(): boolean {\n        return (\n            !this.manager.isSingleTimeSelectionActive &&\n            !this.isDragging &&\n            !this.areBothHandlesVisible &&\n            !this.editHandle &&\n            !this.isHoveringOverTooltip\n        )\n    }\n\n    private setHoverTime(event: MouseEvent | TouchEvent): void {\n        if (!this.shouldShowHoverTimeHandle) return\n\n        const inputTime = this.getInputTimeFromMouse(event)\n        if (inputTime === undefined) return\n\n        if (!this.slider) return\n        const mouseX = getRelativeMouse(this.slider, event).x\n        const startX =\n            this.controller.startTimeProgress * this.slider.clientWidth\n\n        // Hide the hover handle when the mouse is positioned directly over\n        // the existing time handle\n        if (Math.abs(mouseX - startX) < HANDLE_DIAMETER) {\n            this.hoverTime = undefined\n            return\n        }\n\n        const timeBound = this.controller.clampTimeBound(inputTime)\n        if (!Number.isFinite(timeBound)) return\n\n        this.hoverTime = timeBound\n    }\n\n    @computed private get hoverTimeProgress(): number | undefined {\n        if (this.hoverTime === undefined) return undefined\n        return this.controller.timeToProgress(this.hoverTime)\n    }\n\n    private mouseHoveringOverTimeline: boolean = false\n    @action.bound private onMouseOverSlider(event: MouseEvent): void {\n        this.mouseHoveringOverTimeline = true\n\n        this.showStartTooltip()\n        this.showEndTooltip()\n\n        this.setHoverTime(event)\n    }\n\n    @action.bound private onMouseMoveSlider(event: MouseEvent): void {\n        this.setHoverTime(event)\n    }\n\n    @action.bound private onMouseLeaveSlider(): void {\n        if (\n            !this.manager.isTimelineAnimationPlaying &&\n            !this.isDragging &&\n            !this.editHandle\n        ) {\n            this.startTooltipVisible = false\n            this.endTooltipVisible = false\n        }\n        this.mouseHoveringOverTimeline = false\n        this.hoverTime = undefined\n        // Don't reset edit state when mouse leaves - let user complete editing\n        if (!this.editHandle) this.resetEditState()\n    }\n\n    private hideStartTooltipWithDelay = _.debounce(() => {\n        this.startTooltipVisible = false\n    }, HANDLE_TOOLTIP_FADE_TIME_MS_MOBILE)\n    private hideEndTooltipWithDelay = _.debounce(() => {\n        this.endTooltipVisible = false\n    }, HANDLE_TOOLTIP_FADE_TIME_MS_MOBILE)\n\n    @action.bound private hideTooltipsAfterInteraction(): void {\n        if (this.isTouchDevice) {\n            // On mobile, hide after a brief delay so user can see final values\n            this.hideStartTooltipWithDelay()\n            this.hideEndTooltipWithDelay()\n        } else if (!this.mouseHoveringOverTimeline) {\n            // On desktop, hide immediately if not hovering\n            this.startTooltipVisible = false\n            this.endTooltipVisible = false\n        }\n    }\n\n    @action.bound private onPlayTouchEnd(evt: Event): void {\n        evt.preventDefault()\n        evt.stopPropagation()\n\n        // Show tooltips when starting playback\n        if (!this.manager.isTimelineAnimationPlaying) {\n            this.showStartTooltip()\n            this.showEndTooltip()\n        }\n\n        void this.controller.togglePlay()\n    }\n\n    @action.bound private onSliderTouchStart(event: Event): void {\n        this.onMouseDown(event as TouchEvent)\n    }\n\n    override componentDidMount(): void {\n        const current = this.base.current\n\n        if (current) {\n            this.slider = current.querySelector(`.${SLIDER_CLASS}`)\n            this.playButton = current.querySelector(`.${PLAY_BUTTON_CLASS}`)\n        }\n\n        document.documentElement.addEventListener(\"mouseup\", this.onMouseUp)\n        document.documentElement.addEventListener(\"mouseleave\", this.onMouseUp)\n        document.documentElement.addEventListener(\"mousemove\", this.onMouseMove)\n        document.documentElement.addEventListener(\"touchend\", this.onMouseUp)\n        document.documentElement.addEventListener(\"touchmove\", this.onMouseMove)\n        this.slider?.addEventListener(\"touchstart\", this.onSliderTouchStart, {\n            passive: false,\n        })\n        this.playButton?.addEventListener(\"touchend\", this.onPlayTouchEnd, {\n            passive: false,\n        })\n\n        // Hide tooltips when playback stops\n        this.disposers.push(\n            reaction(\n                () => this.manager.isTimelineAnimationPlaying,\n                (isPlaying, wasPlaying) => {\n                    if (wasPlaying && !isPlaying)\n                        this.hideTooltipsAfterInteraction()\n                }\n            )\n        )\n    }\n\n    override componentWillUnmount(): void {\n        document.documentElement.removeEventListener(\"mouseup\", this.onMouseUp)\n        document.documentElement.removeEventListener(\n            \"mouseleave\",\n            this.onMouseUp\n        )\n        document.documentElement.removeEventListener(\n            \"mousemove\",\n            this.onMouseMove\n        )\n        document.documentElement.removeEventListener(\"touchend\", this.onMouseUp)\n        document.documentElement.removeEventListener(\n            \"touchmove\",\n            this.onMouseMove\n        )\n        this.slider?.removeEventListener(\"touchstart\", this.onSliderTouchStart)\n        this.playButton?.removeEventListener(\"touchend\", this.onPlayTouchEnd)\n\n        this.disposers.forEach((dispose) => dispose())\n    }\n\n    private formatTime(time: number): string {\n        return this.manager.formatTimeFn\n            ? this.manager.formatTimeFn(time)\n            : time.toString()\n    }\n\n    @action.bound private togglePlay(): void {\n        void this.controller.togglePlay()\n    }\n\n    @action.bound private onStartEditing(\n        handle: Exclude<MarkerType, MarkerType.Hover>\n    ): void {\n        this.editHandle = handle\n    }\n\n    @action.bound private resetEditState(): void {\n        this.editHandle = undefined\n    }\n\n    @action.bound private onTooltipMouseEnter(): void {\n        this.isHoveringOverTooltip = true\n        this.hoverTime = undefined\n    }\n\n    @action.bound private onTooltipMouseLeave(): void {\n        this.isHoveringOverTooltip = false\n    }\n\n    @action.bound private onEdgeButtonMouseEnter(): void {\n        this.hoverTime = undefined\n    }\n\n    @action.bound private onMinTimeButtonClick(): void {\n        if (this.areBothHandlesVisible) {\n            this.controller.resetStartToMin()\n        } else {\n            this.controller.setStartAndEndTimeFromInput(this.controller.minTime)\n        }\n    }\n\n    @action.bound private onMaxTimeButtonClick(): void {\n        if (this.areBothHandlesVisible) {\n            this.controller.resetEndToMax()\n        } else {\n            this.controller.setStartAndEndTimeFromInput(this.controller.maxTime)\n        }\n    }\n\n    @action.bound private onCompleteYear(year?: number): void {\n        // Only apply when the user has finished typing\n        if (year !== undefined && this.editHandle !== undefined)\n            this.onChangeYear(year)\n        this.resetEditState()\n    }\n\n    @action.bound private onChangeYear(year: number): void {\n        if (!this.areBothHandlesVisible) {\n            this.controller.setStartAndEndTimeFromInput(year)\n        } else if (this.editHandle === MarkerType.Start) {\n            this.controller.setStartTimeFromInput(year)\n        } else {\n            this.controller.setEndTimeFromInput(year)\n        }\n    }\n\n    @action.bound private onCompleteDate(date?: CalendarDate): void {\n        // Only apply when the user has finished typing\n        if (date && this.editHandle !== undefined) this.onChangeDate(date)\n        this.resetEditState()\n    }\n\n    @action.bound private onChangeDate(date: CalendarDate): void {\n        const daysSinceEpoch = calendarDateToDaysSinceEpoch(date)\n        if (!this.areBothHandlesVisible) {\n            this.controller.setStartAndEndTimeFromInput(daysSinceEpoch)\n        } else if (this.editHandle === MarkerType.Start) {\n            this.controller.setStartTimeFromInput(daysSinceEpoch)\n        } else {\n            this.controller.setEndTimeFromInput(daysSinceEpoch)\n        }\n    }\n\n    @action.bound private getStartTimeForNavigationKey(\n        key: NavigationKey\n    ): number {\n        const { controller } = this\n        const { startTime, endTime } = controller\n\n        return match(key)\n            .with(\"ArrowUp\", \"ArrowRight\", () =>\n                controller.getNextValidTime(startTime, endTime)\n            )\n            .with(\"ArrowDown\", \"ArrowLeft\", () =>\n                controller.getPrevValidTime(startTime, endTime)\n            )\n            .with(\"PageUp\", () => controller.getLargeStepForward(startTime))\n            .with(\"PageDown\", () => controller.getLargeStepBackward(startTime))\n            .with(\"Home\", () => controller.minTime)\n            .with(\"End\", () => controller.maxTime)\n            .exhaustive()\n    }\n\n    @action.bound private getEndTimeForNavigationKey(\n        key: NavigationKey\n    ): number {\n        const { controller } = this\n        const { startTime, endTime } = controller\n\n        return match(key)\n            .with(\"ArrowUp\", \"ArrowRight\", () =>\n                controller.getNextValidTime(endTime, startTime)\n            )\n            .with(\"ArrowDown\", \"ArrowLeft\", () =>\n                controller.getPrevValidTime(endTime, startTime)\n            )\n            .with(\"PageUp\", () => controller.getLargeStepForward(endTime))\n            .with(\"PageDown\", () => controller.getLargeStepBackward(endTime))\n            .with(\"Home\", () => controller.minTime)\n            .with(\"End\", () => controller.maxTime)\n            .exhaustive()\n    }\n\n    @action.bound updateStartTimeOnKeyDown(key: NavigationKey): void {\n        const { controller } = this\n        match(key)\n            .with(\"Home\", () => controller.resetStartToMin())\n            .with(\"End\", () => controller.setStartToMax())\n            .with(\"ArrowLeft\", \"ArrowDown\", () =>\n                controller.decreaseStartTime()\n            )\n            .with(\"ArrowRight\", \"ArrowUp\", () => controller.increaseStartTime())\n            .with(\"PageUp\", () => controller.increaseStartTimeByLargeStep())\n            .with(\"PageDown\", () => controller.decreaseStartTimeByLargeStep())\n            .exhaustive()\n    }\n\n    @action.bound updateEndTimeOnKeyDown(key: NavigationKey): void {\n        const { controller } = this\n        const shouldMoveBothHandles = !this.areBothHandlesVisible\n        match(key)\n            .with(\"Home\", () => controller.setEndToMin())\n            .with(\"End\", () => controller.resetEndToMax())\n            .with(\"ArrowLeft\", \"ArrowDown\", () => {\n                controller.decreaseEndTime()\n                if (shouldMoveBothHandles) controller.decreaseStartTime()\n            })\n            .with(\"ArrowRight\", \"ArrowUp\", () => {\n                controller.increaseEndTime()\n                if (shouldMoveBothHandles) controller.increaseStartTime()\n            })\n            .with(\"PageUp\", () => {\n                controller.increaseEndTimeByLargeStep()\n                if (shouldMoveBothHandles)\n                    controller.increaseStartTimeByLargeStep()\n            })\n            .with(\"PageDown\", () => {\n                controller.decreaseEndTimeByLargeStep()\n                if (shouldMoveBothHandles)\n                    controller.decreaseStartTimeByLargeStep()\n            })\n            .exhaustive()\n    }\n\n    convertToTime(time: number): number {\n        if (time === -Infinity) return this.controller.minTime\n        if (time === +Infinity) return this.controller.maxTime\n        return time\n    }\n\n    @computed private get startHandleTooltip(): React.ReactNode {\n        const { startTime } = this.controller\n\n        if (!this.startTooltipVisible || !this.areBothHandlesVisible) {\n            return undefined\n        }\n\n        const formattedStartTime = this.formatTime(this.controller.startTime)\n\n        if (!this.canEditTimeViaTooltip) {\n            return <SimpleTimeTooltip formattedTime={formattedStartTime} />\n        }\n\n        const isEditing = this.editHandle === MarkerType.Start\n\n        const isDateValid = (date: CalendarDate): boolean => {\n            const { minTime, endTime, allowHandlesOnSameTime } = this.controller\n            const time = calendarDateToDaysSinceEpoch(date)\n            if (time < minTime) return false\n            return allowHandlesOnSameTime ? time <= endTime : time < endTime\n        }\n\n        return this.isDailyData ? (\n            <EditableDateTooltip\n                position=\"left\"\n                isEditing={isEditing}\n                formattedTime={formattedStartTime}\n                currentTime={startTime}\n                isDateValid={isDateValid}\n                onStartEditing={() => this.onStartEditing(MarkerType.Start)}\n                onComplete={this.onCompleteDate}\n                onChange={this.onChangeDate}\n                onMouseEnter={this.onTooltipMouseEnter}\n                onMouseLeave={this.onTooltipMouseLeave}\n            />\n        ) : (\n            <EditableYearTooltip\n                position=\"left\"\n                isEditing={isEditing}\n                currentTime={startTime}\n                formattedTime={formattedStartTime}\n                onStartEditing={() => this.onStartEditing(MarkerType.Start)}\n                onComplete={this.onCompleteYear}\n                onChange={this.onChangeYear}\n                getTimeForKey={this.getStartTimeForNavigationKey}\n                onMouseEnter={this.onTooltipMouseEnter}\n                onMouseLeave={this.onTooltipMouseLeave}\n                onBlur={action(() => {\n                    this.startTooltipVisible = false\n                    this.endTooltipVisible = false\n                })}\n            />\n        )\n    }\n\n    @computed private get endHandleTooltip(): React.ReactNode {\n        const { endTime } = this.controller\n\n        if (!this.endTooltipVisible) return undefined\n\n        const formattedEndTime = this.formatTime(this.controller.endTime)\n\n        if (!this.canEditTimeViaTooltip) {\n            return <SimpleTimeTooltip formattedTime={formattedEndTime} />\n        }\n\n        // Avoid overlap with the hover tooltip when hovering to the right of the handle\n        const position =\n            this.hoverTime !== undefined &&\n            this.hoverTime > this.controller.endTime\n                ? \"left\"\n                : \"right\"\n\n        const isEditing = this.editHandle === MarkerType.End\n\n        const isDateValid = (date: CalendarDate): boolean => {\n            const { maxTime, startTime, allowHandlesOnSameTime } =\n                this.controller\n            const time = calendarDateToDaysSinceEpoch(date)\n            if (time > maxTime) return false\n            return allowHandlesOnSameTime ? time >= startTime : time > startTime\n        }\n\n        return this.isDailyData ? (\n            <EditableDateTooltip\n                position={position}\n                isEditing={isEditing}\n                formattedTime={formattedEndTime}\n                currentTime={endTime}\n                isDateValid={isDateValid}\n                onStartEditing={() => this.onStartEditing(MarkerType.End)}\n                onComplete={this.onCompleteDate}\n                onChange={this.onChangeDate}\n                onMouseEnter={this.onTooltipMouseEnter}\n                onMouseLeave={this.onTooltipMouseLeave}\n            />\n        ) : (\n            <EditableYearTooltip\n                position={position}\n                isEditing={isEditing}\n                currentTime={endTime}\n                formattedTime={formattedEndTime}\n                onStartEditing={() => this.onStartEditing(MarkerType.End)}\n                onComplete={this.onCompleteYear}\n                onChange={this.onChangeYear}\n                getTimeForKey={this.getEndTimeForNavigationKey}\n                onMouseEnter={this.onTooltipMouseEnter}\n                onMouseLeave={this.onTooltipMouseLeave}\n                onBlur={action(() => {\n                    this.startTooltipVisible = false\n                    this.endTooltipVisible = false\n                })}\n            />\n        )\n    }\n\n    @computed private get hoverTooltip(): React.ReactNode {\n        const { hoverTime } = this\n\n        if (!hoverTime) return undefined\n        const formattedHoverTime = this.formatTime(hoverTime)\n\n        if (!this.canEditTimeViaTooltip) {\n            return <SimpleTimeTooltip formattedTime={formattedHoverTime} />\n        }\n\n        // Show on the left if hovering to the left of the existing handle,\n        // right if hovering to the right of the existing handle\n        const position = hoverTime < this.controller.endTime ? \"left\" : \"right\"\n\n        // The hover tooltip is not editable (since it's impossible to click on\n        // the tooltip), but it uses the same component for consistent styling\n        return (\n            <EditableYearTooltip\n                position={position}\n                currentTime={hoverTime}\n                formattedTime={formattedHoverTime}\n            />\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { manager, controller, hoverTime } = this\n        const {\n            startTimeProgress,\n            endTimeProgress,\n            minTime,\n            maxTime,\n            startTime,\n            endTime,\n        } = controller\n\n        const formattedMinTime = this.formatTime(minTime)\n        const formattedMaxTime = this.formatTime(maxTime)\n        const formattedStartTime = this.formatTime(startTime)\n        const formattedEndTime = this.formatTime(endTime)\n        const formattedHoverTime =\n            hoverTime !== undefined ? this.formatTime(hoverTime) : undefined\n\n        return (\n            <div\n                ref={this.base}\n                className={cx(GRAPHER_TIMELINE_CLASS, {\n                    [`${GRAPHER_TIMELINE_CLASS}--hover`]:\n                        this.mouseHoveringOverTimeline,\n                    [`${GRAPHER_TIMELINE_CLASS}--touch`]: this.isTouchDevice,\n                })}\n                style={{ padding: `0 ${GRAPHER_FRAME_PADDING_HORIZONTAL}px` }}\n                role=\"group\"\n                aria-label=\"Timeline controls\"\n                onMouseOver={action((event) =>\n                    this.onMouseOverSlider(event.nativeEvent)\n                )}\n                onMouseLeave={this.onMouseLeaveSlider}\n                onMouseMove={action((event) =>\n                    this.onMouseMoveSlider(event.nativeEvent)\n                )}\n            >\n                {!this.manager.disablePlay && (\n                    <ActionButton\n                        className={PLAY_BUTTON_CLASS}\n                        dataTrackNote={\n                            manager.isTimelineAnimationPlaying\n                                ? \"timeline_pause\"\n                                : \"timeline_play\"\n                        }\n                        onMouseDown={(e): void => e.stopPropagation()}\n                        onClick={this.togglePlay}\n                        showLabel={false}\n                        label={\n                            (manager.isTimelineAnimationPlaying\n                                ? \"Pause\"\n                                : \"Play\") + \" time-lapse\"\n                        }\n                        icon={\n                            manager.isTimelineAnimationPlaying\n                                ? faPause\n                                : faPlay\n                        }\n                        isActive={manager.isTimelineAnimationPlaying}\n                        style={{ minWidth: TIMELINE_HEIGHT }}\n                    />\n                )}\n                <TimelineEdgeButton\n                    formattedTime={formattedMinTime}\n                    onClick={this.onMinTimeButtonClick}\n                    onMouseEnter={this.onEdgeButtonMouseEnter}\n                />\n                <div\n                    className={`${SLIDER_CLASS} clickable`}\n                    role=\"group\"\n                    aria-label=\"Time range slider\"\n                    onMouseDown={(event) => this.onMouseDown(event.nativeEvent)}\n                >\n                    <TimelineHandle\n                        className={MarkerType.Start}\n                        ariaLabel={`Start time: ${formattedStartTime}`}\n                        offsetPercent={startTimeProgress * 100}\n                        formattedMinTime={formattedMinTime}\n                        formattedMaxTime={formattedMaxTime}\n                        formattedCurrTime={formattedStartTime}\n                        tabIndex={this.areBothHandlesVisible ? 0 : -1}\n                        onKeyDown={action((e) => {\n                            if (isRelevantNavigationKey(e.key)) {\n                                e.preventDefault() // Prevent scrolling\n                                this.updateStartTimeOnKeyDown(e.key)\n                            }\n                        })}\n                        onFocus={action(() => this.showTooltips())}\n                        tooltip={this.startHandleTooltip}\n                        zIndex={\n                            this.lastUpdatedTooltip === MarkerType.Start ? 2 : 1\n                        }\n                    />\n                    <TimelineInterval\n                        startTimeProgress={startTimeProgress}\n                        endTimeProgress={endTimeProgress}\n                    />\n                    {this.hoverTimeProgress !== undefined && (\n                        <TimelineInterval\n                            className=\"GrapherTimeline__HoverInterval\"\n                            startTimeProgress={Math.min(\n                                startTimeProgress,\n                                this.hoverTimeProgress\n                            )}\n                            endTimeProgress={Math.max(\n                                startTimeProgress,\n                                this.hoverTimeProgress\n                            )}\n                            ariaHidden={true}\n                        />\n                    )}\n                    <TimelineHandle\n                        className={MarkerType.End}\n                        ariaLabel={`End time: ${formattedEndTime}`}\n                        offsetPercent={endTimeProgress * 100}\n                        formattedMinTime={formattedMinTime}\n                        formattedMaxTime={formattedMaxTime}\n                        formattedCurrTime={formattedEndTime}\n                        onKeyDown={action((e) => {\n                            if (isRelevantNavigationKey(e.key)) {\n                                e.preventDefault() // prevent scrolling\n                                this.updateEndTimeOnKeyDown(e.key)\n                            }\n                        })}\n                        onFocus={action(() => this.showTooltips())}\n                        tooltip={this.endHandleTooltip}\n                        zIndex={\n                            this.lastUpdatedTooltip === MarkerType.End ? 2 : 1\n                        }\n                    />\n                    {this.hoverTimeProgress !== undefined &&\n                        formattedHoverTime && (\n                            <TimelineHandle\n                                className={MarkerType.Hover}\n                                tabIndex={-1}\n                                offsetPercent={this.hoverTimeProgress * 100}\n                                formattedMinTime={formattedMinTime}\n                                formattedMaxTime={formattedMaxTime}\n                                formattedCurrTime={formattedHoverTime}\n                                tooltip={this.hoverTooltip}\n                                zIndex={3}\n                            />\n                        )}\n                </div>\n                <TimelineEdgeButton\n                    formattedTime={formattedMaxTime}\n                    onClick={this.onMaxTimeButtonClick}\n                    onMouseEnter={this.onEdgeButtonMouseEnter}\n                />\n            </div>\n        )\n    }\n}\n\nconst TimelineEdgeButton = ({\n    formattedTime,\n    onClick,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    formattedTime: string\n    onClick: () => void\n    onMouseEnter?: () => void\n    onMouseLeave?: () => void\n}): React.ReactElement => {\n    return (\n        <button\n            className=\"GrapherTimeline__TimelineEdgeButton\"\n            type=\"button\"\n            onClick={onClick}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n            aria-label={`Jump to ${formattedTime}`}\n        >\n            {formattedTime}\n        </button>\n    )\n}\n\nfunction TimelineHandle({\n    className,\n    ariaLabel,\n    offsetPercent,\n    formattedMinTime,\n    formattedMaxTime,\n    formattedCurrTime,\n    tooltip,\n    tabIndex = 0,\n    zIndex,\n    onKeyDown,\n    onFocus,\n    onBlur,\n}: {\n    className?: string\n    ariaLabel?: string\n    offsetPercent: number\n    formattedMinTime: string\n    formattedMaxTime: string\n    formattedCurrTime: string\n    tooltip?: React.ReactNode\n    tabIndex?: number\n    zIndex?: number\n    onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>\n    onFocus?: React.FocusEventHandler<HTMLDivElement>\n    onBlur?: React.FocusEventHandler<HTMLDivElement>\n}): React.ReactElement {\n    return (\n        // @ts-expect-error aria-value* fields expect a number, but if we're dealing with daily data,\n        // the numeric representation of a date is meaningless, so we pass the formatted date string instead.\n        <div\n            className={cx(\"GrapherTimeline__Handle\", className)}\n            style={{ left: `${offsetPercent}%`, zIndex }}\n            role=\"slider\"\n            tabIndex={tabIndex}\n            aria-valuemin={castToNumberIfPossible(formattedMinTime)}\n            aria-valuenow={castToNumberIfPossible(formattedCurrTime)}\n            aria-valuemax={castToNumberIfPossible(formattedMaxTime)}\n            aria-valuetext={formattedCurrTime}\n            aria-label={ariaLabel}\n            aria-description=\"Use arrow keys to adjust by one step, Page Up/Down for larger steps, Home/End to jump to minimum/maximum.\"\n            aria-orientation=\"horizontal\"\n            onFocus={onFocus}\n            onBlur={onBlur}\n            onKeyDown={onKeyDown}\n        >\n            <div className=\"GrapherTimeline__HandleKnob\" />\n            {tooltip}\n        </div>\n    )\n}\n\nfunction EditableYearTooltip({\n    position,\n    isEditing = false,\n    currentTime,\n    formattedTime,\n    onStartEditing,\n    onComplete,\n    onChange,\n    getTimeForKey,\n    onMouseEnter,\n    onMouseLeave,\n    onBlur,\n}: {\n    position: \"left\" | \"right\"\n    isEditing?: boolean\n    currentTime: number\n    formattedTime: string\n    onStartEditing?: () => void\n    onComplete?: (year?: number) => void\n    onChange?: (year: number) => void\n    getTimeForKey?: (key: NavigationKey) => number\n    onMouseEnter?: () => void\n    onMouseLeave?: () => void\n    onBlur?: () => void\n}): React.ReactElement {\n    const [inputValue, setInputValue] = React.useState(currentTime.toString())\n\n    React.useEffect(() => {\n        if (isEditing) setInputValue(currentTime.toString())\n    }, [isEditing, currentTime])\n\n    const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>): void => {\n        if (e.key === \".\") {\n            // Prevent entering decimal points\n            e.preventDefault()\n        } else if (e.key === \"Enter\") {\n            const parsed = parseIntOrUndefined(inputValue.trim())\n            onComplete?.(parsed)\n        } else if (e.key === \"Escape\") {\n            onComplete?.()\n        } else if (getTimeForKey && isRelevantNavigationKey(e.key)) {\n            // Prevent default browser increment/decrement behavior\n            e.preventDefault()\n\n            const newTime = getTimeForKey(e.key)\n            setInputValue(newTime.toString())\n            onChange?.(newTime)\n        }\n\n        e.stopPropagation()\n    }\n\n    const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n        const newValue = e.target.value\n        setInputValue(newValue)\n    }\n\n    const handleBlur = (): void => {\n        const parsed = parseIntOrUndefined(inputValue.trim())\n        onComplete?.(parsed)\n    }\n\n    return (\n        <div\n            className={cx(\"EditableTimeTooltip\", {\n                \"EditableTimeTooltip--left\": position === \"left\",\n                \"EditableTimeTooltip--right\": position === \"right\",\n            })}\n            onMouseDown={(e) => e.stopPropagation()}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n        >\n            {isEditing ? (\n                <div\n                    className=\"EditableTimeTooltip__InputWrapper\"\n                    data-value={inputValue}\n                >\n                    <input\n                        type=\"number\"\n                        className=\"EditableTimeTooltip__Input\"\n                        value={inputValue}\n                        onChange={handleChange}\n                        onBlur={handleBlur}\n                        onKeyDown={handleKeyDown}\n                        onFocus={(e) => e.target.select()}\n                        autoFocus\n                        aria-label=\"Edit year\"\n                    />\n                </div>\n            ) : (\n                <button\n                    type=\"button\"\n                    className=\"EditableTimeTooltip__Button\"\n                    onClick={onStartEditing}\n                    onBlur={onBlur}\n                    aria-label={`Current year: ${formattedTime}. Click to edit.`}\n                >\n                    {formattedTime}\n                </button>\n            )}\n        </div>\n    )\n}\n\nfunction EditableDateTooltip({\n    position,\n    isEditing = false,\n    currentTime,\n    formattedTime,\n    isDateValid = (): boolean => true,\n    onStartEditing,\n    onMouseEnter,\n    onMouseLeave,\n    onComplete,\n    onChange,\n}: {\n    position: \"left\" | \"right\"\n    isEditing?: boolean\n    currentTime: number\n    formattedTime: string\n    isDateValid?: (date: CalendarDate) => boolean\n    onStartEditing?: () => void\n    onMouseEnter?: () => void\n    onMouseLeave?: () => void\n    onComplete: (date?: CalendarDate) => void\n    onChange: (date: CalendarDate) => void\n}): React.ReactElement {\n    return (\n        <div\n            className={cx(\"EditableTimeTooltip\", {\n                \"EditableTimeTooltip--left\": position === \"left\",\n                \"EditableTimeTooltip--right\": position === \"right\",\n            })}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n            onMouseDown={(e) => e.stopPropagation()}\n        >\n            {isEditing ? (\n                <TimelineDateInput\n                    value={daysSinceEpochToCalendarDate(currentTime)}\n                    isDateValid={isDateValid}\n                    onComplete={onComplete}\n                    onChange={onChange}\n                />\n            ) : (\n                <button\n                    type=\"button\"\n                    className=\"EditableTimeTooltip__Button\"\n                    onClick={onStartEditing}\n                    aria-label={`Current date: ${formattedTime}. Click to edit.`}\n                >\n                    {formattedTime}\n                </button>\n            )}\n        </div>\n    )\n}\n\nconst TimelineDateInput = ({\n    value,\n    isDateValid,\n    onComplete,\n    onChange,\n}: {\n    value: CalendarDate\n    isDateValid: (date: CalendarDate) => boolean\n    onComplete: (date?: CalendarDate) => void\n    onChange?: (date: CalendarDate) => void\n}): React.ReactElement => {\n    const [currentValue, setCurrentValue] = React.useState(value)\n    const [shouldApplyImmediately, setShouldApplyImmediately] =\n        React.useState(false)\n\n    const handleKeyDown = (e: React.KeyboardEvent): void => {\n        if (e.key === \"Enter\") {\n            onComplete(currentValue)\n        } else if (e.key === \"Escape\") {\n            onComplete()\n        } else if (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n            // Apply immediately on arrow key changes\n            setShouldApplyImmediately(true)\n        } else {\n            // Reset flag when typing (any other key)\n            setShouldApplyImmediately(false)\n        }\n        e.stopPropagation()\n    }\n\n    const handleChange = (date: CalendarDate | null): void => {\n        if (!date) return\n\n        setCurrentValue(date)\n\n        // If this change was triggered by arrow keys,\n        // apply immediately without exiting edit mode\n        if (shouldApplyImmediately) {\n            if (!isDateValid(date)) return\n            onChange?.(date)\n            setShouldApplyImmediately(false)\n        }\n    }\n\n    return (\n        <DateField\n            value={currentValue}\n            onChange={handleChange}\n            onBlur={() => onComplete(currentValue)}\n            onKeyDown={handleKeyDown}\n            className=\"GrapherTimeline__DateInput\"\n            aria-label=\"Edit date\"\n        >\n            <DateInput className=\"GrapherTimeline__DateInputField\">\n                {(segment) => (\n                    <DateSegment\n                        segment={segment}\n                        className=\"GrapherTimeline__DateInputSegment\"\n                    />\n                )}\n            </DateInput>\n        </DateField>\n    )\n}\n\nconst TimelineInterval = ({\n    startTimeProgress,\n    endTimeProgress,\n    className,\n    ariaHidden,\n}: {\n    startTimeProgress: number\n    endTimeProgress: number\n    className?: string\n    ariaHidden?: boolean\n}): React.ReactElement => {\n    const left = startTimeProgress * 100\n    const right = 100 - endTimeProgress * 100\n    return (\n        <div\n            className={cx(\"GrapherTimeline__Interval\", className)}\n            style={{ left: `${left}%`, right: `${right}%` }}\n            role=\"presentation\"\n            aria-hidden={ariaHidden}\n        />\n    )\n}\n\nfunction SimpleTimeTooltip({\n    formattedTime,\n}: {\n    formattedTime: string\n}): React.ReactElement {\n    return <div className=\"SimpleTimeTooltip\">{formattedTime}</div>\n}\n\n/** Convert days-since-epoch integer to CalendarDate object */\nexport function daysSinceEpochToCalendarDate(\n    daysSinceEpoch: number\n): CalendarDate {\n    const date = convertDaysSinceEpochToDate(daysSinceEpoch)\n    return new CalendarDate(\n        date.year(),\n        date.month() + 1, // CalendarDate is 1-indexed, dayjs is 0-indexed\n        date.date()\n    )\n}\n\n/** Convert CalendarDate to days-since-epoch integer */\nexport function calendarDateToDaysSinceEpoch(date: CalendarDate): number {\n    const year = date.year\n    const month = date.month.toString().padStart(2, \"0\")\n    const day = date.day.toString().padStart(2, \"0\")\n    const isoString = `${year}-${month}-${day}`\n    return diffDateISOStringInDays(isoString, EPOCH_DATE)\n}\n\nfunction isRelevantNavigationKey(key: string): key is NavigationKey {\n    return NAVIGATION_KEYS.includes(key as NavigationKey)\n}\n\nfunction castToNumberIfPossible(s: string): string | number {\n    return isNumber(s) ? +s : s\n}\n\nfunction isNumber(s: string): boolean {\n    return /^\\d+$/.test(s)\n}\n","import {\n    ALL_GRAPHER_CHART_TYPES,\n    GRAPHER_CHART_TYPES,\n    GRAPHER_TAB_NAMES,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n    GRAPHER_TAB_QUERY_PARAMS,\n    GrapherChartType,\n    GrapherTabName,\n    GrapherTabConfigOption,\n    GrapherTabQueryParam,\n    DimensionProperty,\n} from \"@ourworldindata/types\"\nimport * as R from \"remeda\"\nimport { match } from \"ts-pattern\"\n\n/**\n * Chart type combinations that are currently supported. Every subset of these\n * combinations is valid. For example, [LineChart, SlopeChart, DiscreteBar]\n * makes all these combinations valid: [LineChart, SlopeChart, DiscreteBar],\n * [LineChart, SlopeChart], [LineChart, DiscreteBar], [SlopeChart, DiscreteBar]\n *\n * This also determines the order of chart types in the UI.\n */\nexport const VALID_CHART_TYPE_COMBINATIONS = [\n    [\n        GRAPHER_CHART_TYPES.LineChart,\n        GRAPHER_CHART_TYPES.SlopeChart,\n        GRAPHER_CHART_TYPES.DiscreteBar,\n        GRAPHER_CHART_TYPES.Marimekko,\n        GRAPHER_CHART_TYPES.ScatterPlot,\n    ],\n]\n\ntype ChartTabConfigOption = Exclude<\n    GrapherTabConfigOption,\n    \"table\" | \"map\" | \"chart\"\n>\n\nexport const CHART_TYPE_LABEL: Record<GrapherChartType, string> = {\n    [GRAPHER_CHART_TYPES.LineChart]: \"Line\",\n    [GRAPHER_CHART_TYPES.SlopeChart]: \"Slope\",\n    [GRAPHER_CHART_TYPES.ScatterPlot]: \"Scatter\",\n    [GRAPHER_CHART_TYPES.StackedArea]: \"Stacked area\",\n    [GRAPHER_CHART_TYPES.StackedBar]: \"Stacked bar\",\n    [GRAPHER_CHART_TYPES.DiscreteBar]: \"Bar\",\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar]: \"Stacked bar\",\n    [GRAPHER_CHART_TYPES.Marimekko]: \"Marimekko\",\n}\n\nexport const LONG_CHART_TYPE_LABEL: Record<GrapherChartType, string> = {\n    [GRAPHER_CHART_TYPES.LineChart]: \"Line chart\",\n    [GRAPHER_CHART_TYPES.SlopeChart]: \"Slope chart\",\n    [GRAPHER_CHART_TYPES.ScatterPlot]: \"Scatter plot\",\n    [GRAPHER_CHART_TYPES.StackedArea]: \"Stacked area chart\",\n    [GRAPHER_CHART_TYPES.StackedBar]: \"Bar chart\",\n    [GRAPHER_CHART_TYPES.DiscreteBar]: \"Bar chart\",\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar]: \"Bar chart\",\n    [GRAPHER_CHART_TYPES.Marimekko]: \"Marimekko chart\",\n}\n\nconst MAP_CHART_TAB_CONFIG_OPTION_TO_CHART_TYPE_NAME: Record<\n    ChartTabConfigOption,\n    GrapherChartType\n> = {\n    [GRAPHER_TAB_CONFIG_OPTIONS.line]: GRAPHER_CHART_TYPES.LineChart,\n    [GRAPHER_TAB_CONFIG_OPTIONS.slope]: GRAPHER_CHART_TYPES.SlopeChart,\n    [GRAPHER_TAB_CONFIG_OPTIONS.scatter]: GRAPHER_CHART_TYPES.ScatterPlot,\n    [GRAPHER_TAB_CONFIG_OPTIONS[\"stacked-area\"]]:\n        GRAPHER_CHART_TYPES.StackedArea,\n    [GRAPHER_TAB_CONFIG_OPTIONS[\"stacked-bar\"]]: GRAPHER_CHART_TYPES.StackedBar,\n    [GRAPHER_TAB_CONFIG_OPTIONS[\"discrete-bar\"]]:\n        GRAPHER_CHART_TYPES.DiscreteBar,\n    [GRAPHER_TAB_CONFIG_OPTIONS[\"stacked-discrete-bar\"]]:\n        GRAPHER_CHART_TYPES.StackedDiscreteBar,\n    [GRAPHER_TAB_CONFIG_OPTIONS.marimekko]: GRAPHER_CHART_TYPES.Marimekko,\n}\n\nconst MAP_CHART_TYPE_NAME_TO_CHART_TAB_CONFIG_OPTION = R.invert(\n    MAP_CHART_TAB_CONFIG_OPTION_TO_CHART_TYPE_NAME\n)\n\nexport function mapTabConfigOptionToChartTypeName(\n    tabOption: ChartTabConfigOption\n): GrapherChartType {\n    return MAP_CHART_TAB_CONFIG_OPTION_TO_CHART_TYPE_NAME[tabOption]\n}\n\nexport function mapChartTypeNameToTabConfigOption(\n    chartType: GrapherChartType\n): ChartTabConfigOption {\n    return MAP_CHART_TYPE_NAME_TO_CHART_TAB_CONFIG_OPTION[chartType]\n}\n\nexport function mapTabQueryParamToChartTypeName(\n    tab: ChartTabConfigOption\n): GrapherChartType {\n    return MAP_CHART_TAB_CONFIG_OPTION_TO_CHART_TYPE_NAME[tab]\n}\n\nexport function mapChartTypeNameToQueryParam(\n    chartType: GrapherChartType\n): ChartTabConfigOption {\n    return MAP_CHART_TYPE_NAME_TO_CHART_TAB_CONFIG_OPTION[chartType]\n}\n\nexport function mapGrapherTabNameToConfigOption(\n    tabName: GrapherTabName\n): GrapherTabConfigOption {\n    return match(tabName)\n        .with(GRAPHER_TAB_NAMES.Table, () => GRAPHER_TAB_CONFIG_OPTIONS.table)\n        .with(GRAPHER_TAB_NAMES.WorldMap, () => GRAPHER_TAB_CONFIG_OPTIONS.map)\n        .otherwise((tabName) => mapChartTypeNameToTabConfigOption(tabName))\n}\n\nexport const mapGrapherTabNameToQueryParam = mapGrapherTabNameToConfigOption\n\nexport function makeLabelForGrapherTab(\n    tab: GrapherTabName,\n    options?: { useGenericChartLabel?: boolean; format?: \"short\" | \"long\" }\n): string {\n    const { useGenericChartLabel = false, format = \"short\" } = options ?? {}\n\n    if (tab === GRAPHER_TAB_NAMES.Table) return \"Table\"\n    if (tab === GRAPHER_TAB_NAMES.WorldMap)\n        return format === \"short\" ? \"Map\" : \"World map\"\n\n    if (useGenericChartLabel) return \"Chart\"\n\n    return format === \"short\"\n        ? CHART_TYPE_LABEL[tab]\n        : LONG_CHART_TYPE_LABEL[tab]\n}\n\nexport function findPotentialChartTypeSiblings(\n    chartTypes: GrapherChartType[]\n): GrapherChartType[] | undefined {\n    for (const validCombination of VALID_CHART_TYPE_COMBINATIONS) {\n        const validSet: Set<GrapherChartType> = new Set(validCombination)\n        const hasIntersection = chartTypes.some((chartType) =>\n            validSet.has(chartType)\n        )\n        if (hasIntersection) return validCombination\n    }\n    return undefined\n}\n\nexport function findValidChartTypeCombination(\n    chartTypes: GrapherChartType[]\n): GrapherChartType[] | undefined {\n    const validCombination = findPotentialChartTypeSiblings(chartTypes)\n    return validCombination?.filter((chartType) =>\n        chartTypes.includes(chartType)\n    )\n}\n\nexport function isChartTypeName(\n    candidate: string\n): candidate is GrapherChartType {\n    return ALL_GRAPHER_CHART_TYPES.includes(candidate as any)\n}\n\nexport function isValidTabQueryParam(\n    candidate: string\n): candidate is GrapherTabQueryParam {\n    return Object.values(GRAPHER_TAB_QUERY_PARAMS).includes(candidate as any)\n}\n\nexport function isValidTabConfigOption(\n    candidate: string\n): candidate is GrapherTabConfigOption {\n    return Object.values(GRAPHER_TAB_CONFIG_OPTIONS).includes(candidate as any)\n}\n\nexport const isChartTab = (tab: GrapherTabName): tab is GrapherChartType =>\n    tab !== GRAPHER_TAB_NAMES.Table && tab !== GRAPHER_TAB_NAMES.WorldMap\n\nexport const isMapTab = (\n    tab: GrapherTabName\n): tab is typeof GRAPHER_TAB_NAMES.WorldMap =>\n    tab === GRAPHER_TAB_NAMES.WorldMap\n\n/**\n * Returns which dimension properties are supported for the given chart types.\n * Returns the union of all dimensions needed across all chart types.\n */\nexport const getSupportedDimensionsForChartTypes = (\n    chartTypes: GrapherChartType[]\n): DimensionProperty[] => {\n    const chartTypeSet = new Set(chartTypes)\n\n    const { y, x, color, size } = DimensionProperty\n\n    const hasScatter = chartTypeSet.has(GRAPHER_CHART_TYPES.ScatterPlot)\n    const hasMarimekko = chartTypeSet.has(GRAPHER_CHART_TYPES.Marimekko)\n    const hasLineChart = chartTypeSet.has(GRAPHER_CHART_TYPES.LineChart)\n    const hasDiscreteBar = chartTypeSet.has(GRAPHER_CHART_TYPES.DiscreteBar)\n\n    if (hasScatter) return [y, x, size, color]\n    if (hasMarimekko) return [y, x, color]\n    if (hasLineChart || hasDiscreteBar) return [y, color]\n    return [y]\n}\n","import * as React from \"react\"\nimport { action, computed, observable, makeObservable } from \"mobx\"\nimport cx from \"classnames\"\nimport { observer } from \"mobx-react\"\nimport { GrapherTabName } from \"@ourworldindata/types\"\nimport { TabItem, Tabs } from \"../tabs/Tabs.js\"\nimport { makeLabelForGrapherTab } from \"../chart/ChartTabs\"\nimport {\n    Button,\n    Menu,\n    MenuItem,\n    MenuTrigger,\n    Popover,\n} from \"react-aria-components\"\nimport { GrapherTabIcon } from \"@ourworldindata/components\"\n\nexport interface ContentSwitchersManager {\n    availableTabs?: GrapherTabName[]\n    activeTab?: GrapherTabName\n    hasMultipleChartTypes?: boolean\n    setTab: (tab: GrapherTabName) => void\n    onTabChange: (oldTab: GrapherTabName, newTab: GrapherTabName) => void\n    isMedium?: boolean\n}\n\nconst MAX_VISIBLE_TABS = 4\nconst MAX_VISIBLE_TABS_BEFORE_OVERFLOW = 3\n\n@observer\nexport class ContentSwitchers extends React.Component<{\n    manager: ContentSwitchersManager\n}> {\n    constructor(props: { manager: ContentSwitchersManager }) {\n        super(props)\n\n        makeObservable<ContentSwitchers, \"isOverflowMenuOpen\">(this, {\n            isOverflowMenuOpen: observable,\n        })\n    }\n\n    static shouldShow(manager: ContentSwitchersManager): boolean {\n        const test = new ContentSwitchers({ manager })\n        return test.shouldShow\n    }\n\n    private isOverflowMenuOpen = false\n\n    @computed private get manager(): ContentSwitchersManager {\n        return this.props.manager\n    }\n\n    @computed private get hasMultipleChartTypes(): boolean {\n        return !!this.manager.hasMultipleChartTypes\n    }\n\n    @computed private get availableTabs(): GrapherTabName[] {\n        return this.manager.availableTabs || []\n    }\n\n    @computed private get shouldShow(): boolean {\n        return this.availableTabs.length > 1\n    }\n\n    @computed private get visibleTabs(): GrapherTabName[] {\n        const { activeTab, availableTabs } = this\n\n        // If there are four or fewer tabs, show all of them\n        if (availableTabs.length <= MAX_VISIBLE_TABS) {\n            return availableTabs\n        }\n\n        // Otherwise, only show the first 3 tabs\n        const visibleTabs = availableTabs.slice(\n            0,\n            MAX_VISIBLE_TABS_BEFORE_OVERFLOW\n        )\n\n        // If the active tab is not visible, replace the last visible tab with it\n        if (!visibleTabs.includes(activeTab)) {\n            visibleTabs[visibleTabs.length - 1] = activeTab\n        }\n\n        return visibleTabs\n    }\n\n    @computed private get hiddenTabs(): GrapherTabName[] {\n        return this.availableTabs.filter(\n            (tab) => !this.visibleTabs.includes(tab)\n        )\n    }\n\n    @computed private get activeTab(): GrapherTabName {\n        return this.manager.activeTab ?? this.availableTabs[0]\n    }\n\n    @computed private get tabItems(): TabItem<GrapherTabName>[] {\n        const { hasMultipleChartTypes } = this\n\n        return this.visibleTabs.map((tab) => ({\n            key: tab,\n            element: (\n                <TabContent\n                    key={tab}\n                    tab={tab}\n                    hasMultipleChartTypes={hasMultipleChartTypes}\n                />\n            ),\n            buttonProps: {\n                className: cx({ active: tab === this.activeTab }),\n                dataTrackNote: \"chart_click_\" + tab,\n                ariaLabel: makeLabelForGrapherTab(tab, {\n                    useGenericChartLabel: !hasMultipleChartTypes,\n                }),\n            },\n        }))\n    }\n\n    @action.bound private setTab(selectedTab: GrapherTabName): void {\n        const oldTab = this.manager.activeTab\n        const newTab = selectedTab\n        this.manager.setTab(newTab)\n        this.manager.onTabChange?.(oldTab!, newTab)\n    }\n\n    @action.bound private showOverflowMenu(): void {\n        this.isOverflowMenuOpen = true\n    }\n\n    @action.bound private hideOverflowMenu(): void {\n        this.isOverflowMenuOpen = false\n    }\n\n    @action.bound private onTabChange(selectedKey: GrapherTabName): void {\n        this.setTab(selectedKey)\n    }\n\n    @action.bound private onOverflowMenuSelect(tab: GrapherTabName): void {\n        this.setTab(tab)\n    }\n\n    private renderOverflowMenu(): React.ReactElement {\n        const { hasMultipleChartTypes } = this\n\n        return (\n            <MenuTrigger\n                isOpen={this.isOverflowMenuOpen}\n                onOpenChange={(isOpen) => {\n                    if (isOpen) this.showOverflowMenu()\n                    else this.hideOverflowMenu()\n                }}\n            >\n                <Button\n                    className={cx(\n                        \"Tabs__Tab ContentSwitchers__OverflowMenuButton\",\n                        { \"is-open\": this.isOverflowMenuOpen }\n                    )}\n                    aria-label=\"Show more chart types\"\n                >\n                    +&#8202;{this.hiddenTabs.length}\n                </Button>\n                <Popover\n                    className=\"ContentSwitchers__OverflowMenu\"\n                    placement=\"bottom\"\n                >\n                    <Menu\n                        className=\"ContentSwitchers__OverflowMenuList\"\n                        onAction={(key) =>\n                            this.onOverflowMenuSelect(key as GrapherTabName)\n                        }\n                    >\n                        {this.hiddenTabs.map((tab) => (\n                            <MenuItem\n                                key={tab}\n                                id={tab}\n                                className=\"ContentSwitchers__OverflowMenuItem\"\n                            >\n                                <TabContent\n                                    tab={tab}\n                                    hasMultipleChartTypes={\n                                        hasMultipleChartTypes\n                                    }\n                                />\n                            </MenuItem>\n                        ))}\n                    </Menu>\n                </Popover>\n            </MenuTrigger>\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.shouldShow) return null\n\n        return (\n            <div className=\"ContentSwitchers__Container\">\n                <Tabs\n                    variant=\"slim\"\n                    className=\"ContentSwitchers\"\n                    items={this.tabItems}\n                    selectedKey={this.activeTab}\n                    onChange={this.onTabChange}\n                />\n                {this.hiddenTabs.length > 0 && this.renderOverflowMenu()}\n            </div>\n        )\n    }\n}\n\nfunction TabContent({\n    tab,\n    hasMultipleChartTypes,\n}: {\n    tab: GrapherTabName\n    hasMultipleChartTypes?: boolean\n}): React.ReactElement {\n    return (\n        <span>\n            <GrapherTabIcon tab={tab} />\n            <span className=\"label\">\n                {makeLabelForGrapherTab(tab, {\n                    useGenericChartLabel: !hasMultipleChartTypes,\n                })}\n            </span>\n        </span>\n    )\n}\n","import * as React from \"react\"\nimport { action, computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faEye, faRightLeft, faPen } from \"@fortawesome/free-solid-svg-icons\"\nimport classnames from \"classnames\"\nimport { GrapherWindowType } from \"@ourworldindata/types\"\n\nexport interface EntitySelectionManager {\n    canHighlightEntities?: boolean\n    canChangeEntity?: boolean\n    canAddEntities?: boolean\n    canChangeAddOrHighlightEntities?: boolean\n    entityType?: string\n    entityTypePlural?: string\n    isEntitySelectorModalOrDrawerOpen?: boolean\n    isOnChartTab?: boolean\n    isOnMapTab?: boolean\n    hideEntityControls?: boolean\n    shouldShowEntitySelectorAs?: GrapherWindowType\n}\n\ninterface EntitySelectionLabel {\n    icon: React.ReactElement\n    action: string\n    entity: string\n}\n\n@observer\nexport class EntitySelectionToggle extends React.Component<{\n    manager: EntitySelectionManager\n}> {\n    constructor(props: { manager: EntitySelectionManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: EntitySelectionManager): boolean {\n        const toggle = new EntitySelectionToggle({ manager })\n        return toggle.showToggle\n    }\n\n    @computed get showToggle(): boolean {\n        const {\n            isOnChartTab,\n            isOnMapTab,\n            hideEntityControls,\n            shouldShowEntitySelectorAs,\n            canChangeAddOrHighlightEntities,\n        } = this.props.manager\n\n        if (hideEntityControls) return false\n\n        const shouldShowDrawer =\n            shouldShowEntitySelectorAs === GrapherWindowType.drawer\n        const shouldShowModal =\n            shouldShowEntitySelectorAs === GrapherWindowType.modal\n\n        if (isOnMapTab) return shouldShowDrawer\n\n        return !!(\n            isOnChartTab &&\n            canChangeAddOrHighlightEntities &&\n            (shouldShowModal || shouldShowDrawer) &&\n            this.label\n        )\n    }\n\n    @computed get label(): EntitySelectionLabel | null {\n        const {\n            entityType = \"\",\n            entityTypePlural = \"\",\n            canHighlightEntities,\n            canChangeEntity,\n            canAddEntities,\n            isOnMapTab,\n        } = this.props.manager\n\n        if (isOnMapTab)\n            return {\n                action: \"Select\",\n                entity: \"countries\",\n                icon: <FontAwesomeIcon icon={faPen} />,\n            }\n\n        if (canHighlightEntities)\n            return {\n                action: \"Select\",\n                entity: entityTypePlural,\n                icon: <FontAwesomeIcon icon={faEye} />,\n            }\n\n        if (canChangeEntity)\n            return {\n                action: \"Change\",\n                entity: entityType,\n                icon: <FontAwesomeIcon icon={faRightLeft} />,\n            }\n\n        if (canAddEntities)\n            return {\n                action: \"Edit\",\n                entity: entityTypePlural,\n                icon: <FontAwesomeIcon icon={faPen} />,\n            }\n\n        return null\n    }\n\n    override render(): React.ReactElement | null {\n        const { showToggle, label } = this\n        const { isEntitySelectorModalOrDrawerOpen: active } = this.props.manager\n\n        return showToggle && label ? (\n            <div className=\"entity-selection-menu\">\n                <button\n                    className={classnames(\"menu-toggle\", { active })}\n                    onClick={action((e): void => {\n                        this.props.manager.isEntitySelectorModalOrDrawerOpen =\n                            !active\n                        e.stopPropagation()\n                    })}\n                    type=\"button\"\n                    data-track-note=\"chart_add_entity\"\n                    aria-label={`${label.action} ${label.entity}`}\n                >\n                    {label.icon}\n                    <label>\n                        {label.action} <span>{label.entity}</span>\n                    </label>\n                </button>\n            </div>\n        ) : null\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\nimport { MapRegionName } from \"@ourworldindata/types\"\nimport { Dropdown } from \"./Dropdown\"\nimport { MAP_REGION_LABELS } from \"../mapCharts/MapChartConstants\"\nimport { GlobeController } from \"../mapCharts/GlobeController\"\n\nexport interface MapRegionDropdownManager {\n    mapConfig?: MapConfig\n    globeController?: GlobeController\n    isOnMapTab?: boolean\n    isFaceted?: boolean\n}\n\ninterface MapRegionDropdownOption {\n    value: MapRegionName\n    label: string\n    trackNote: \"map_zoom_to_region\"\n}\n\n@observer\nexport class MapRegionDropdown extends React.Component<{\n    manager: MapRegionDropdownManager\n}> {\n    constructor(props: { manager: MapRegionDropdownManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: MapRegionDropdownManager): boolean {\n        const menu = new MapRegionDropdown({ manager })\n        return menu.showMenu\n    }\n\n    @computed private get manager(): MapRegionDropdownManager {\n        return this.props.manager\n    }\n\n    @computed private get mapConfig(): MapConfig {\n        return this.manager.mapConfig ?? new MapConfig()\n    }\n\n    @computed private get showMenu(): boolean {\n        const { isOnMapTab, isFaceted, mapConfig } = this.manager\n\n        return !!(\n            isOnMapTab &&\n            // Hide the dropdown when the globe is active\n            !mapConfig?.globe.isActive &&\n            // Hide the dropdown when the map is not faceted unless a 2d continent is active\n            !(this.mapConfig.region === MapRegionName.World && !isFaceted)\n        )\n    }\n\n    @action.bound onChange(selected: MapRegionDropdownOption | null): void {\n        const value = selected?.value\n        if (!value) return\n\n        // Update the current region\n        this.mapConfig.region = value\n\n        // It's confusing to have regions selected when switching to a continent\n        if (this.mapConfig.region !== MapRegionName.World) {\n            this.mapConfig.selection.deselectEntities(\n                this.mapConfig.selection.selectedRegionNames\n            )\n        }\n    }\n\n    @computed get options(): MapRegionDropdownOption[] {\n        const continentOptions: MapRegionDropdownOption[] = Object.values(\n            MapRegionName\n        ).map((region) => {\n            return {\n                value: region,\n                label: MAP_REGION_LABELS[region as MapRegionName],\n                trackNote: \"map_zoom_to_region\",\n            }\n        })\n\n        return continentOptions\n    }\n\n    @computed get value(): MapRegionDropdownOption | null {\n        const { region } = this.mapConfig\n        return this.options.find((opt) => opt.value === region) ?? null\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.showMenu) return null\n\n        return (\n            <Dropdown\n                className=\"map-region-dropdown\"\n                options={this.options}\n                onChange={this.onChange}\n                value={this.value}\n                aria-label=\"Select continent\"\n            />\n        )\n    }\n}\n","import * as React from \"react\"\nimport { action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ScaleType } from \"@ourworldindata/types\"\nimport { AxisConfig } from \"../../axis/AxisConfig\"\nimport classnames from \"classnames\"\n\ninterface AxisScaleToggleProps {\n    axis: AxisConfig\n    subtitle?: string\n    prefix?: string\n}\n\n@observer\nexport class AxisScaleToggle extends React.Component<AxisScaleToggleProps> {\n    constructor(props: AxisScaleToggleProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound private setAxisScale(scale: ScaleType): void {\n        this.props.axis.scaleType = scale\n    }\n\n    override render(): React.ReactElement {\n        const { linear, log } = ScaleType,\n            { axis, prefix, subtitle } = this.props,\n            isLinear = axis.scaleType === linear,\n            label = prefix ? `${prefix}: ` : undefined\n\n        return (\n            <>\n                <div className=\"config-toggle\">\n                    {subtitle && <label>{subtitle}</label>}\n                    <button\n                        className={classnames({ active: isLinear })}\n                        onClick={(): void => this.setAxisScale(linear)}\n                        data-track-note=\"chart_toggle_scale\"\n                    >\n                        {label}Linear\n                    </button>\n                    <button\n                        className={classnames({ active: !isLinear })}\n                        onClick={(): void => this.setAxisScale(log)}\n                        data-track-note=\"chart_toggle_scale\"\n                    >\n                        {label}Logarithmic\n                    </button>\n                </div>\n            </>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    GRAPHER_CHART_TYPES,\n    GrapherChartType,\n    StackMode,\n} from \"@ourworldindata/types\"\nimport { LabeledSwitch } from \"@ourworldindata/components\"\n\nconst { LineChart, ScatterPlot, SlopeChart } = GRAPHER_CHART_TYPES\n\nexport interface AbsRelToggleManager {\n    stackMode?: StackMode\n    relativeToggleLabel?: string\n    activeChartType?: GrapherChartType\n}\n\n@observer\nexport class AbsRelToggle extends React.Component<{\n    manager: AbsRelToggleManager\n}> {\n    constructor(props: { manager: AbsRelToggleManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound onToggle(): void {\n        this.manager.stackMode = this.isRelativeMode\n            ? StackMode.absolute\n            : StackMode.relative\n    }\n\n    @computed get isRelativeMode(): boolean {\n        return this.manager.stackMode === StackMode.relative\n    }\n\n    @computed get manager(): AbsRelToggleManager {\n        return this.props.manager\n    }\n\n    @computed get tooltip(): string {\n        const { activeChartType } = this.manager\n        return activeChartType === ScatterPlot\n            ? \"Show the percentage change per year over the the selected time range.\"\n            : activeChartType === LineChart || activeChartType === SlopeChart\n              ? \"Show proportional changes over time or actual values in their original units.\"\n              : \"Show values as their share of the total or as actual values in their original units.\"\n    }\n\n    override render(): React.ReactElement {\n        const label =\n            this.manager.relativeToggleLabel ?? \"Display relative values\"\n        return (\n            <LabeledSwitch\n                label={label}\n                value={this.isRelativeMode}\n                tooltip={this.tooltip}\n                onToggle={this.onToggle}\n                tracking=\"chart_abs_rel_toggle\"\n            />\n        )\n    }\n}\n","import * as React from \"react\"\nimport { action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { LabeledSwitch } from \"@ourworldindata/components\"\n\nexport interface ZoomToggleManager {\n    zoomToSelection?: boolean\n}\n\n@observer\nexport class ZoomToggle extends React.Component<{\n    manager: ZoomToggleManager\n}> {\n    constructor(props: { manager: ZoomToggleManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound onToggle(): void {\n        this.props.manager.zoomToSelection = this.props.manager.zoomToSelection\n            ? undefined\n            : true\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <LabeledSwitch\n                label=\"Zoom to selection\"\n                tooltip=\"Scale axes to focus on the currently highlighted data points.\"\n                value={this.props.manager.zoomToSelection}\n                onToggle={this.onToggle}\n                tracking=\"chart_zoom_to_selection\"\n            />\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { DEFAULT_GRAPHER_ENTITY_TYPE } from \"../../core/GrapherConstants\"\nimport { FacetStrategy } from \"@ourworldindata/utils\"\nimport classnames from \"classnames\"\n\nexport interface FacetStrategySelectionManager {\n    availableFacetStrategies: FacetStrategy[]\n    facetStrategy?: FacetStrategy\n    entityType?: string\n    facettingLabelByYVariables?: string\n}\n\n@observer\nexport class FacetStrategySelector extends React.Component<{\n    manager: FacetStrategySelectionManager\n}> {\n    constructor(props: { manager: FacetStrategySelectionManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get facetStrategyLabels(): { [key in FacetStrategy]: string } {\n        return {\n            [FacetStrategy.none]: \"All together\",\n            [FacetStrategy.entity]: `Split by ${this.entityName}`,\n            [FacetStrategy.metric]: `Split by ${this.metricName}`,\n        }\n    }\n\n    @computed get entityName(): string {\n        return this.props.manager.entityType ?? DEFAULT_GRAPHER_ENTITY_TYPE\n    }\n\n    @computed get metricName(): string {\n        return this.props.manager.facettingLabelByYVariables ?? \"metric\"\n    }\n\n    @computed get strategies(): FacetStrategy[] {\n        return (\n            this.props.manager.availableFacetStrategies || [\n                FacetStrategy.none,\n                FacetStrategy.entity,\n                FacetStrategy.metric,\n            ]\n        )\n    }\n\n    @computed get subtitle(): string {\n        const entityChoice = this.entityName.replace(/ or /, \"/\"),\n            byEntity = this.strategies.includes(FacetStrategy.entity),\n            byMetric = this.strategies.includes(FacetStrategy.metric)\n\n        if (byEntity || byMetric) {\n            const facet =\n                byEntity && byMetric\n                    ? `${this.metricName} or ${entityChoice}`\n                    : byEntity\n                      ? this.entityName\n                      : this.metricName\n            return (\n                \"Visualize the data all together in one chart or split it by \" +\n                facet\n            )\n        } else {\n            return \"\"\n        }\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <>\n                <div className=\"config-subtitle\">{this.subtitle}</div>\n                <div className=\"config-list\">\n                    {this.strategies.map((value: FacetStrategy) => {\n                        const label = this.facetStrategyLabels[value],\n                            active = value === this.facetStrategy,\n                            option = value.toString()\n\n                        return (\n                            <button\n                                key={option}\n                                className={classnames(option, { active })}\n                                onClick={(): void => {\n                                    this.props.manager.facetStrategy = value\n                                }}\n                                data-track-note={`chart_facet_${option}`}\n                            >\n                                <div className=\"faceting-icon\">\n                                    {_.range(value === \"none\" ? 1 : 6).map(\n                                        (i) => (\n                                            <span key={i}></span>\n                                        )\n                                    )}\n                                </div>\n                                {label}\n                            </button>\n                        )\n                    })}\n                </div>\n            </>\n        )\n    }\n\n    @computed get facetStrategy(): FacetStrategy {\n        return this.props.manager.facetStrategy || FacetStrategy.none\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { FacetAxisDomain, FacetStrategy } from \"@ourworldindata/types\"\nimport { AxisConfig } from \"../../axis/AxisConfig\"\nimport { LabeledSwitch } from \"@ourworldindata/components\"\n\nexport interface FacetYDomainToggleManager {\n    facetStrategy?: FacetStrategy\n    yAxis?: AxisConfig\n}\n\n@observer\nexport class FacetYDomainToggle extends React.Component<{\n    manager: FacetYDomainToggleManager\n}> {\n    constructor(props: { manager: FacetYDomainToggleManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound onToggle(): void {\n        const { yAxis } = this.props.manager\n        if (yAxis) {\n            yAxis.facetDomain = this.isYDomainShared\n                ? FacetAxisDomain.independent\n                : FacetAxisDomain.shared\n        }\n    }\n\n    @computed get isYDomainShared(): boolean {\n        const { yAxis } = this.props.manager\n        const facetDomain = yAxis?.facetDomain || FacetAxisDomain.shared\n        return facetDomain === FacetAxisDomain.shared\n    }\n\n    override render(): React.ReactElement | null {\n        const { yAxis, facetStrategy } = this.props.manager\n        if (!yAxis || facetStrategy === \"none\") return null\n\n        return (\n            <LabeledSwitch\n                label=\"Align axis scales\"\n                tooltip=\"Use the same minimum and maximum values on all charts or scale axes to fit the data in each chart\"\n                value={this.isYDomainShared}\n                onToggle={this.onToggle}\n                tracking=\"chart_facet_ydomain_toggle\"\n            />\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { LabeledSwitch } from \"@ourworldindata/components\"\n\nexport interface NoDataAreaToggleManager {\n    showNoDataArea?: boolean\n}\n\n@observer\nexport class NoDataAreaToggle extends React.Component<{\n    manager: NoDataAreaToggleManager\n}> {\n    constructor(props: { manager: NoDataAreaToggleManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @action.bound onToggle(): void {\n        this.manager.showNoDataArea = !this.manager.showNoDataArea\n    }\n\n    @computed get manager(): NoDataAreaToggleManager {\n        return this.props.manager\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <LabeledSwitch\n                label={\"Show \\u2018no data\\u2019 area\"}\n                value={this.manager.showNoDataArea}\n                tooltip=\"Include entities for which ‘no data’ is available in the chart.\"\n                onToggle={this.onToggle}\n                tracking=\"chart_no_data_area_toggle\"\n            />\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport classnames from \"classnames\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faGear } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    DialogTrigger,\n    Popover,\n    Dialog,\n    Heading,\n    Button,\n} from \"react-aria-components\"\nimport {\n    EntityName,\n    GRAPHER_CHART_TYPES,\n    FacetStrategy,\n    GrapherChartType,\n} from \"@ourworldindata/types\"\nimport { OverlayHeader } from \"@ourworldindata/components\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { ChartDimension } from \"../chart/ChartDimension\"\nimport { makeSelectionArray } from \"../chart/ChartUtils.js\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\n\nimport { AxisScaleToggle } from \"./settings/AxisScaleToggle\"\nimport { AbsRelToggle, AbsRelToggleManager } from \"./settings/AbsRelToggle\"\nimport { ZoomToggle, ZoomToggleManager } from \"./settings/ZoomToggle\"\nimport {\n    FacetStrategySelector,\n    FacetStrategySelectionManager,\n} from \"./settings/FacetStrategySelector\"\nimport {\n    FacetYDomainToggle,\n    FacetYDomainToggleManager,\n} from \"./settings/FacetYDomainToggle\"\nimport {\n    NoDataAreaToggle,\n    NoDataAreaToggleManager,\n} from \"./settings/NoDataAreaToggle\"\nimport { GRAPHER_SETTINGS_CLASS } from \"../core/GrapherConstants\"\n\nconst {\n    LineChart,\n    ScatterPlot,\n    StackedArea,\n    StackedDiscreteBar,\n    StackedBar,\n    Marimekko,\n    SlopeChart,\n} = GRAPHER_CHART_TYPES\n\nexport interface SettingsMenuManager\n    extends\n        AbsRelToggleManager,\n        NoDataAreaToggleManager,\n        FacetYDomainToggleManager,\n        ZoomToggleManager,\n        FacetStrategySelectionManager {\n    // ArchieML directives\n    hideFacetControl?: boolean\n    hideRelativeToggle?: boolean\n    hideEntityControls?: boolean\n\n    // chart state\n    activeChartType?: GrapherChartType\n    isRelativeMode?: boolean\n    selection?: SelectionArray | EntityName[]\n    canChangeAddOrHighlightEntities?: boolean\n    filledDimensions: ChartDimension[]\n    xColumnSlug?: string\n    xOverrideTime?: number\n    hasTimeline?: boolean\n    canToggleRelativeMode: boolean\n    isOnChartTab?: boolean\n\n    // linear/log scales\n    yAxis: AxisConfig\n    xAxis: AxisConfig\n\n    // TODO: show intermediate scatterplot points\n    compareEndPointsOnly?: boolean\n}\n\ninterface SettingsMenuProps {\n    manager: SettingsMenuManager\n    popoverMaxWidth?: number\n    popoverMaxHeight?: number\n}\n\n@observer\nexport class SettingsMenu extends React.Component<SettingsMenuProps> {\n    private active: boolean = false\n\n    constructor(props: SettingsMenuProps) {\n        super(props)\n\n        makeObservable<SettingsMenu, \"active\">(this, { active: observable.ref })\n    }\n\n    static shouldShow(manager: SettingsMenuManager): boolean {\n        const test = new SettingsMenu({ manager })\n        return test.showSettingsMenuToggle\n    }\n\n    @computed get chartType(): GrapherChartType {\n        return this.manager.activeChartType ?? GRAPHER_CHART_TYPES.LineChart\n    }\n\n    @computed get showYScaleToggle(): boolean | undefined {\n        if (this.manager.isRelativeMode) return false\n        if (\n            [\n                GRAPHER_CHART_TYPES.StackedArea,\n                GRAPHER_CHART_TYPES.StackedBar,\n                GRAPHER_CHART_TYPES.DiscreteBar,\n                GRAPHER_CHART_TYPES.StackedDiscreteBar,\n                GRAPHER_CHART_TYPES.Marimekko,\n            ].includes(this.chartType as any)\n        )\n            return false // We currently do not have these charts with log scale\n        return this.manager.yAxis.canChangeScaleType\n    }\n\n    @computed private get showXScaleToggle(): boolean | undefined {\n        if (this.manager.isRelativeMode) return false\n        return this.manager.xAxis.canChangeScaleType\n    }\n\n    @computed private get showFacetYDomainToggle(): boolean {\n        // don't offer to make the y range relative if the range is discrete\n        return (\n            this.manager.facetStrategy !== FacetStrategy.none &&\n            this.chartType !== StackedDiscreteBar\n        )\n    }\n\n    @computed get showZoomToggle(): boolean {\n        return (\n            this.chartType === ScatterPlot && this.selectionArray.hasSelection\n        )\n    }\n\n    @computed get showNoDataAreaToggle(): boolean {\n        return (\n            this.chartType === Marimekko &&\n            this.manager.xColumnSlug !== undefined\n        )\n    }\n\n    @computed private get showAbsRelToggle(): boolean {\n        const { canToggleRelativeMode, hasTimeline, xOverrideTime } =\n            this.manager\n        if (!canToggleRelativeMode) return false\n        if (this.chartType === ScatterPlot)\n            return xOverrideTime === undefined && !!hasTimeline\n        return [\n            StackedArea,\n            StackedBar,\n            StackedDiscreteBar,\n            ScatterPlot,\n            LineChart,\n            Marimekko,\n            SlopeChart,\n        ].includes(this.chartType as any)\n    }\n\n    @computed private get showFacetControl(): boolean {\n        const {\n            filledDimensions,\n            availableFacetStrategies,\n            hideFacetControl,\n            isOnChartTab,\n        } = this.manager\n\n        // if there's no choice to be made, don't display a lone button\n        if (availableFacetStrategies.length <= 1) return false\n\n        // heuristic: if the chart doesn't make sense unfaceted, then it probably\n        // also makes sense to let the user switch between entity/metric facets\n        if (!availableFacetStrategies.includes(FacetStrategy.none)) return true\n\n        const showFacetControlChartType = [\n            StackedArea,\n            StackedBar,\n            StackedDiscreteBar,\n            LineChart,\n            SlopeChart,\n        ].includes(this.chartType as any)\n\n        const hasProjection = filledDimensions.some(\n            (dim) => dim.display.isProjection\n        )\n\n        return (\n            showFacetControlChartType &&\n            !hideFacetControl &&\n            !hasProjection &&\n            !!isOnChartTab\n        )\n    }\n\n    @computed private get showSettingsMenuToggle(): boolean {\n        if (!this.manager.isOnChartTab) return false\n\n        return !!(\n            this.showYScaleToggle ||\n            this.showXScaleToggle ||\n            this.showFacetYDomainToggle ||\n            this.showZoomToggle ||\n            this.showNoDataAreaToggle ||\n            this.showFacetControl ||\n            this.showAbsRelToggle\n        )\n\n        // TODO: add a showCompareEndPointsOnlyToggle to complement compareEndPointsOnly\n    }\n\n    @action.bound private toggleVisibility(open?: boolean): void {\n        this.active = open ?? !this.active\n    }\n\n    @computed private get manager(): SettingsMenuManager {\n        return this.props.manager\n    }\n\n    @computed private get chartTypeLabel(): string {\n        return this.chartType.replace(/([A-Z])/g, \" $1\")\n    }\n\n    @computed private get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed private get menuContentsChart(): React.ReactElement {\n        const {\n            manager,\n            showYScaleToggle,\n            showXScaleToggle,\n            showZoomToggle,\n            showNoDataAreaToggle,\n            showFacetControl,\n            showFacetYDomainToggle,\n            showAbsRelToggle,\n        } = this\n\n        const {\n            yAxis,\n            xAxis,\n            // compareEndPointsOnly,\n            filledDimensions,\n            isOnChartTab,\n        } = manager\n\n        const yLabel =\n                filledDimensions.find((d: ChartDimension) => d.property === \"y\")\n                    ?.display.name ?? \"Y axis\",\n            xLabel =\n                filledDimensions.find((d: ChartDimension) => d.property === \"x\")\n                    ?.display.name ?? \"X axis\",\n            omitLoneAxisLabel =\n                showYScaleToggle && !showXScaleToggle && yLabel === \"Y axis\"\n\n        return (\n            <>\n                <SettingsGroup\n                    title=\"Chart view\"\n                    active={\n                        isOnChartTab &&\n                        (showAbsRelToggle ||\n                            showZoomToggle ||\n                            showNoDataAreaToggle ||\n                            showFacetControl ||\n                            showFacetYDomainToggle)\n                    }\n                >\n                    {showFacetControl && (\n                        <FacetStrategySelector manager={manager} />\n                    )}\n                    {showFacetYDomainToggle && (\n                        <FacetYDomainToggle manager={manager} />\n                    )}\n                    {showAbsRelToggle && <AbsRelToggle manager={manager} />}\n                    {showNoDataAreaToggle && (\n                        <NoDataAreaToggle manager={manager} />\n                    )}\n                    {showZoomToggle && <ZoomToggle manager={manager} />}\n                </SettingsGroup>\n                <SettingsGroup\n                    title=\"Axis scale\"\n                    active={\n                        isOnChartTab && (showYScaleToggle || showXScaleToggle)\n                    }\n                >\n                    {showYScaleToggle && (\n                        <AxisScaleToggle\n                            axis={yAxis}\n                            subtitle={omitLoneAxisLabel ? \"\" : yLabel}\n                        />\n                    )}\n                    {showXScaleToggle && (\n                        <AxisScaleToggle axis={xAxis} subtitle={xLabel} />\n                    )}\n                    <div className=\"config-subtitle\">\n                        A linear scale evenly spaces values, where each\n                        increment represents a consistent change. A logarithmic\n                        scale uses multiples of the starting value, with each\n                        increment representing the same percentage increase.\n                    </div>\n                </SettingsGroup>\n            </>\n        )\n    }\n\n    @computed private get menuTitle(): string {\n        const { chartTypeLabel } = this\n        return `${chartTypeLabel} settings`\n    }\n\n    private renderSettingsButtonAndPopup(): React.ReactElement {\n        const { active } = this\n\n        return (\n            <div className=\"settings-menu\">\n                <DialogTrigger\n                    isOpen={this.active}\n                    onOpenChange={this.toggleVisibility}\n                >\n                    <Button\n                        className={classnames(\"menu-toggle\", { active })}\n                        data-track-note=\"chart_settings_menu_toggle\"\n                        aria-label=\"Chart settings\"\n                    >\n                        <FontAwesomeIcon icon={faGear} />\n                        <span className=\"label\"> Settings</span>\n                    </Button>\n                    <Popover\n                        className={GRAPHER_SETTINGS_CLASS}\n                        placement=\"bottom end\"\n                        style={{\n                            maxWidth: this.props.popoverMaxWidth,\n                            maxHeight: this.props.popoverMaxHeight,\n                        }}\n                    >\n                        <Dialog>\n                            <Heading\n                                slot=\"title\"\n                                className=\"GrapherSettingsPopover__Header\"\n                            >\n                                <OverlayHeader\n                                    title={this.menuTitle}\n                                    onDismiss={() =>\n                                        this.toggleVisibility(false)\n                                    }\n                                />\n                            </Heading>\n                            <div className=\"GrapherSettingsPopover__Content\">\n                                {this.menuContentsChart}\n                            </div>\n                        </Dialog>\n                    </Popover>\n                </DialogTrigger>\n            </div>\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        const {\n            manager: { isOnChartTab },\n            showSettingsMenuToggle,\n        } = this\n\n        return isOnChartTab && showSettingsMenuToggle\n            ? this.renderSettingsButtonAndPopup()\n            : null\n    }\n}\n\ninterface SettingsGroupProps {\n    title: string\n    subtitle?: string\n    active?: boolean\n    children?: React.ReactNode\n}\n\n@observer\nclass SettingsGroup extends React.Component<SettingsGroupProps> {\n    override render(): React.ReactElement | null {\n        const { active, title, subtitle, children } = this.props\n        if (!active) return null\n\n        return (\n            <section>\n                <div className=\"config-name\">{title}</div>\n                {subtitle && <div className=\"config-subtitle\">{subtitle}</div>}\n                {children}\n            </section>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\nimport {\n    GrapherWindowType,\n    MapRegionName,\n    TimeBound,\n} from \"@ourworldindata/utils\"\nimport { GlobeController } from \"../mapCharts/GlobeController\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faRotateLeft } from \"@fortawesome/free-solid-svg-icons\"\nimport { match } from \"ts-pattern\"\n\ninterface MapResetButtonProps {\n    manager: MapResetButtonManager\n    action: \"resetView\" | \"resetZoom\"\n}\n\nexport interface MapResetButtonManager {\n    mapConfig?: MapConfig\n    isOnMapTab?: boolean\n    globeController?: GlobeController\n    isFaceted?: boolean\n    shouldShowEntitySelectorAs?: GrapherWindowType\n    startHandleTimeBound?: TimeBound\n    endHandleTimeBound?: TimeBound\n}\n\n@observer\nexport class MapResetButton extends React.Component<{\n    manager: MapResetButtonManager\n    action: \"resetView\" | \"resetZoom\"\n}> {\n    constructor(props: MapResetButtonProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(\n        manager: MapResetButtonManager,\n        action: \"resetView\" | \"resetZoom\"\n    ): boolean {\n        const menu = new MapResetButton({ manager, action })\n        return menu.showMenu\n    }\n\n    @computed private get showMenu(): boolean {\n        const { mapConfig } = this\n        const { isOnMapTab, isFaceted, shouldShowEntitySelectorAs } =\n            this.props.manager\n\n        if (!isOnMapTab) return false\n\n        const shouldShowPanel =\n            shouldShowEntitySelectorAs === GrapherWindowType.panel\n\n        const shouldShowResetViewButton =\n            shouldShowPanel && (isFaceted || mapConfig.is2dContinentActive())\n\n        const shouldShowResetZoomButton =\n            mapConfig.globe.isActive && !shouldShowResetViewButton\n\n        return match(this.props.action)\n            .with(\"resetView\", () => shouldShowResetViewButton)\n            .with(\"resetZoom\", () => shouldShowResetZoomButton)\n            .exhaustive()\n    }\n\n    @computed private get manager(): MapResetButtonManager {\n        return this.props.manager\n    }\n\n    @computed private get mapConfig(): MapConfig {\n        return this.manager.mapConfig ?? new MapConfig()\n    }\n\n    @computed private get label(): string {\n        return match(this.props.action)\n            .with(\"resetView\", () => \"Reset view\")\n            .with(\"resetZoom\", () => \"Reset zoom\")\n            .exhaustive()\n    }\n\n    @computed private get trackNote(): string {\n        return match(this.props.action)\n            .with(\"resetView\", () => \"map_reset_view\")\n            .with(\"resetZoom\", () => \"map_reset_zoom\")\n            .exhaustive()\n    }\n\n    @action.bound private onClick(): void {\n        this.mapConfig.region = MapRegionName.World\n        this.manager.globeController?.hideGlobe()\n        this.manager.globeController?.resetGlobe()\n\n        if (this.props.action === \"resetView\") {\n            this.manager.startHandleTimeBound = this.manager.endHandleTimeBound\n        }\n    }\n\n    override render(): React.ReactElement | null {\n        return this.showMenu ? (\n            <button\n                type=\"button\"\n                data-track-note={this.trackNote}\n                onClick={this.onClick}\n                className=\"menu-toggle\"\n            >\n                <FontAwesomeIcon icon={faRotateLeft} />\n                {this.label}\n            </button>\n        ) : null\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { Dropdown } from \"./Dropdown\"\nimport { EntityName } from \"@ourworldindata/utils\"\nimport { DataTableConfig } from \"../dataTable/DataTableConstants\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { makeSelectionArray } from \"../chart/ChartUtils\"\nimport { RegionGroup, regionGroupLabels } from \"../core/RegionGroups\"\n\nexport interface DataTableFilterDropdownManager {\n    dataTableConfig: DataTableConfig\n    tableForDisplayBeforeEntityFilter: OwidTable\n    isOnTableTab?: boolean\n    dataTableSelection?: SelectionArray | EntityName[]\n    canChangeAddOrHighlightEntities?: boolean\n    shouldShowSelectionOnlyInDataTable?: boolean\n    regionGroups?: RegionGroup[]\n    isSemiNarrow?: boolean\n}\n\ninterface DropdownOption {\n    label: string\n    value: DataTableConfig[\"filter\"]\n    count: number\n    trackNote: \"data_table_filter_by\"\n}\n\n@observer\nexport class DataTableFilterDropdown extends React.Component<{\n    manager: DataTableFilterDropdownManager\n}> {\n    constructor(props: { manager: DataTableFilterDropdownManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: DataTableFilterDropdownManager): boolean {\n        const menu = new DataTableFilterDropdown({ manager })\n        return menu.shouldShow\n    }\n\n    @computed private get manager(): DataTableFilterDropdownManager {\n        return this.props.manager\n    }\n\n    @computed private get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.dataTableSelection)\n    }\n\n    @computed private get shouldShow(): boolean {\n        return (\n            !!this.manager.isOnTableTab &&\n            this.options.length > 1 &&\n            this.options[0].count !== this.options[1].count &&\n            !this.manager.isSemiNarrow\n        )\n    }\n\n    @computed private get availableEntityNameSet(): Set<EntityName> {\n        return this.manager.tableForDisplayBeforeEntityFilter\n            .availableEntityNameSet\n    }\n\n    @action.bound private onChange(selected: DropdownOption | null): void {\n        if (selected?.value) {\n            this.manager.dataTableConfig.filter = selected.value\n            this.manager.dataTableConfig.search = \"\"\n        }\n    }\n\n    @computed\n    private get shouldShowSelectionOption(): boolean {\n        return (\n            !this.manager.shouldShowSelectionOnlyInDataTable &&\n            this.selectionArray.hasSelection &&\n            !!this.manager.canChangeAddOrHighlightEntities\n        )\n    }\n\n    @computed private get options(): DropdownOption[] {\n        const options: DropdownOption[] = [\n            {\n                value: \"all\",\n                label: \"All\",\n                count: this.availableEntityNameSet.size,\n                trackNote: \"data_table_filter_by\",\n            },\n        ]\n\n        if (this.shouldShowSelectionOption) {\n            options.push({\n                value: \"selection\",\n                label: \"Selection\",\n                count: this.selectionArray.numSelectedEntities,\n                trackNote: \"data_table_filter_by\",\n            })\n        }\n\n        if (this.manager.regionGroups) {\n            options.push(\n                ...this.manager.regionGroups\n                    .map(\n                        ({ regionGroupKey, entityNames }) =>\n                            ({\n                                value: regionGroupKey,\n                                label: regionGroupLabels[regionGroupKey],\n                                count: entityNames.filter((entityName) =>\n                                    this.availableEntityNameSet.has(entityName)\n                                ).length,\n                                trackNote: \"data_table_filter_by\",\n                            }) satisfies DropdownOption\n                    )\n                    .filter(({ count }) => count > 0)\n            )\n        }\n\n        return options\n    }\n\n    @computed private get value(): DropdownOption | null {\n        const { filter } = this.props.manager.dataTableConfig\n        return (\n            this.options.find((option) => filter === option.value) ??\n            this.options[0]\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.shouldShow) return null\n\n        return (\n            <Dropdown<DropdownOption>\n                className=\"data-table-filter-dropdown\"\n                menuClassName=\"data-table-filter-dropdown-menu\"\n                options={this.options}\n                onChange={this.onChange}\n                value={this.value}\n                renderTriggerValue={renderFilterTriggerValue}\n                renderMenuOption={renderFilterMenuOption}\n                aria-label=\"Filter by\"\n            />\n        )\n    }\n}\n\nfunction renderFilterTriggerValue(\n    option: DropdownOption | null\n): React.ReactNode | undefined {\n    if (!option) return undefined\n    return (\n        <>\n            <span className=\"label\">Filter by: </span>\n            {option.label} <span className=\"detail\">({option.count})</span>\n        </>\n    )\n}\n\nfunction renderFilterMenuOption(option: DropdownOption): React.ReactNode {\n    return (\n        <>\n            {option.label} <span className=\"detail\">({option.count})</span>\n        </>\n    )\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport a from \"indefinite\"\nimport { DataTableConfig } from \"../dataTable/DataTableConstants\"\nimport { SearchField } from \"./SearchField\"\nimport { DEFAULT_GRAPHER_ENTITY_TYPE } from \"../core/GrapherConstants\"\nimport { isAnyRegionDataProviderKey } from \"../core/RegionGroups\"\nimport { match } from \"ts-pattern\"\n\nexport interface DataTableSearchFieldManager {\n    dataTableConfig: DataTableConfig\n    isOnTableTab?: boolean\n    entityType?: string\n}\n\n@observer\nexport class DataTableSearchField extends React.Component<{\n    manager: DataTableSearchFieldManager\n}> {\n    constructor(props: { manager: DataTableSearchFieldManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: DataTableSearchFieldManager): boolean {\n        const menu = new DataTableSearchField({ manager })\n        return menu.shouldShow\n    }\n\n    @computed private get manager(): DataTableSearchFieldManager {\n        return this.props.manager\n    }\n\n    @computed private get config(): DataTableConfig {\n        return this.manager.dataTableConfig\n    }\n\n    @computed private get shouldShow(): boolean {\n        return !!this.manager.isOnTableTab\n    }\n\n    @computed private get entityType(): string {\n        return this.manager.entityType ?? DEFAULT_GRAPHER_ENTITY_TYPE\n    }\n\n    @computed private get placeholderEntityType(): string {\n        if (isAnyRegionDataProviderKey(this.config.filter)) return \"region\"\n\n        return match(this.config.filter)\n            .with(\"all\", () => this.entityType)\n            .with(\"selection\", () => this.entityType)\n            .with(\"countries\", () => \"country\")\n            .with(\"continents\", () => \"continent\")\n            .with(\"incomeGroups\", () => \"income group\")\n            .with(\"historicalCountries\", () => \"country or region\")\n            .exhaustive()\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.shouldShow) return null\n\n        return (\n            <SearchField\n                className=\"data-table-search-field\"\n                value={this.manager.dataTableConfig.search}\n                onChange={(value) => {\n                    // Reset filter to \"all\" when user starts typing\n                    // to allow searching across all entities\n                    if (\n                        value &&\n                        this.manager.dataTableConfig.filter !== \"all\"\n                    ) {\n                        this.manager.dataTableConfig.filter = \"all\"\n                    }\n                    this.manager.dataTableConfig.search = value\n                }}\n                onClear={() => (this.manager.dataTableConfig.search = \"\")}\n                trackNote=\"data_table_search\"\n                placeholder={`Search for ${a(this.placeholderEntityType)}`}\n            />\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\nimport { GlobeController } from \"../mapCharts/GlobeController\"\nimport { MapRegionName } from \"@ourworldindata/types\"\n\nexport interface MapZoomToSelectionButtonManager {\n    mapConfig?: MapConfig\n    isOnMapTab?: boolean\n    globeController?: GlobeController\n    isFaceted?: boolean\n    isMapSelectionEnabled?: boolean\n}\n\ninterface MapZoomToSelectionButtonProps {\n    manager: MapZoomToSelectionButtonManager\n}\n\n@observer\nexport class MapZoomToSelectionButton extends React.Component<MapZoomToSelectionButtonProps> {\n    constructor(props: MapZoomToSelectionButtonProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: MapZoomToSelectionButtonManager): boolean {\n        const menu = new MapZoomToSelectionButton({ manager })\n        return menu.showMenu\n    }\n\n    @computed private get showMenu(): boolean {\n        const { isOnMapTab, mapConfig, isMapSelectionEnabled } =\n            this.props.manager\n        return !!(\n            isOnMapTab &&\n            mapConfig?.selection.hasSelection &&\n            mapConfig?.region === MapRegionName.World &&\n            !mapConfig?.globe.isActive &&\n            !this.manager.isFaceted &&\n            isMapSelectionEnabled\n        )\n    }\n\n    @computed private get manager(): MapZoomToSelectionButtonManager {\n        return this.props.manager\n    }\n\n    @action.bound private onClick(): void {\n        this.manager.globeController?.rotateToSelection()\n        if (this.manager.mapConfig)\n            this.manager.mapConfig.region = MapRegionName.World\n    }\n\n    override render(): React.ReactElement | null {\n        return this.showMenu ? (\n            <button\n                onClick={this.onClick}\n                type=\"button\"\n                data-track-note=\"map_zoom_to_selection\"\n                className=\"menu-toggle\"\n            >\n                <GlobeIcon size={16} />\n                Zoom to selection\n            </button>\n        ) : null\n    }\n}\n\nfunction GlobeIcon({ size }: { size: number }): React.ReactElement {\n    return (\n        <svg\n            width=\"16\"\n            height=\"16\"\n            viewBox=\"0 0 16 16\"\n            fill=\"none\"\n            style={{ width: size, height: size }}\n        >\n            <path\n                fillRule=\"evenodd\"\n                clipRule=\"evenodd\"\n                d=\"M8 1.82812C11.4079 1.82814 14.1709 4.59162 14.1709 8C14.1709 11.4079 11.4084 14.1709 8 14.1709C4.59205 14.1709 1.82814 11.4079 1.82812 8C1.82812 4.59204 4.59204 1.82812 8 1.82812ZM9.29102 10.5557C8.44211 10.6265 7.55628 10.6265 6.70703 10.5557C6.79687 10.9936 6.95066 11.5812 7.16113 12.0859C7.28556 12.3843 7.42514 12.6442 7.57617 12.8262C7.72942 13.0108 7.87172 13.0898 8 13.0898C8.12823 13.0898 8.27065 13.0107 8.42383 12.8262C8.57479 12.6442 8.7145 12.3842 8.83887 12.0859C9.04923 11.5813 9.20136 10.9935 9.29102 10.5557ZM3.20117 9.69434C3.71202 11.1414 4.85773 12.2868 6.30469 12.7979C5.94514 12.0915 5.71773 11.221 5.58301 10.416C4.77795 10.2812 3.90745 10.054 3.20117 9.69434ZM12.7979 9.69336C12 10 11.2212 10.2813 10.416 10.416C10.2813 11.2212 10.0531 12.0914 9.69336 12.7979C11.1413 12.2869 12.287 11.1413 12.7979 9.69336ZM9.45508 6.54395C8.50773 6.44784 7.4917 6.44782 6.54492 6.54395C6.44877 7.49128 6.44884 8.50726 6.54492 9.4541C7.49232 9.55025 8.50821 9.55021 9.45508 9.4541C9.55116 8.50712 9.55124 7.49121 9.45508 6.54395ZM10.5557 6.70605C10.6267 7.55585 10.6266 8.44275 10.5557 9.29297C11.0165 9.20187 11.4337 9.08879 11.7949 8.95605C12.2543 8.78723 12.5864 8.6129 12.7998 8.44141C13.015 8.26846 13.0859 8.11873 13.0859 8C13.0859 7.88127 13.0149 7.73157 12.7998 7.55859C12.5864 7.38708 12.2543 7.21281 11.7949 7.04395C11.4336 6.91117 11.0166 6.79684 10.5557 6.70605ZM5.44336 6.70801C5.00545 6.7977 4.41756 6.9508 3.91309 7.16113C3.61495 7.28547 3.35574 7.42525 3.17383 7.57617C2.98922 7.7294 2.91016 7.87173 2.91016 8C2.91023 8.12821 2.98931 8.26969 3.17383 8.42285C3.35579 8.57388 3.61474 8.71445 3.91309 8.83887C4.41751 9.04919 5.00546 9.20131 5.44336 9.29102C5.3726 8.44265 5.37257 7.55635 5.44336 6.70801ZM9.69434 3.20117C10.054 3.9074 10.2812 4.77792 10.416 5.58301C11.221 5.71772 12.0915 5.94515 12.7979 6.30469C12.2867 4.85774 11.1414 3.71198 9.69434 3.20117ZM6.30371 3.20117C4.85759 3.71223 3.71219 4.85758 3.20117 6.30371C3.90732 5.94422 4.77817 5.71775 5.58301 5.58301C5.71775 4.77819 5.94422 3.90736 6.30371 3.20117ZM8 2.91016C7.87172 2.91016 7.7294 2.98922 7.57617 3.17383C7.42527 3.35575 7.28545 3.61497 7.16113 3.91309C6.95079 4.41757 6.7977 5.00545 6.70801 5.44336C7.55685 5.37254 8.44276 5.37255 9.29199 5.44336C9.20211 5.00543 9.04925 4.41752 8.83887 3.91309C8.71452 3.61498 8.57474 3.35575 8.42383 3.17383C8.27059 2.98923 8.12827 2.91017 8 2.91016Z\"\n                fill=\"currentColor\"\n            />\n        </svg>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\nimport {\n    EntityName,\n    FuzzySearch,\n    getRegionAlternativeNames,\n    getUserNavigatorLanguagesNonEnglish,\n    GlobeRegionName,\n    mappableCountries,\n    MapRegionName,\n    checkIsOwidIncomeGroupCode,\n    getUserCountryInformation,\n    regions,\n} from \"@ourworldindata/utils\"\nimport { GlobeController } from \"../mapCharts/GlobeController\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faLocationArrow } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    Dropdown,\n    DropdownCollection,\n    DropdownCollectionItem,\n    DropdownOptionGroup,\n} from \"./Dropdown.js\"\nimport { MAP_REGION_LABELS } from \"../mapCharts/MapChartConstants\"\nimport { match } from \"ts-pattern\"\nimport * as R from \"remeda\"\n\nexport interface MapZoomDropdownManager {\n    mapConfig?: MapConfig\n    isOnMapTab?: boolean\n    isMapSelectionEnabled?: boolean\n    globeController?: GlobeController\n}\n\ninterface DropdownOption {\n    type: \"country\" | \"continent\"\n    label: string\n    value: string\n    isLocal?: boolean\n    alternativeNames?: string[]\n    trackNote: \"map_zoom_mobile\"\n}\n\ntype GroupedDropdownOption = DropdownOptionGroup<DropdownOption>\n\nfunction isGroupedOption(\n    item: DropdownCollectionItem<DropdownOption>\n): item is GroupedDropdownOption {\n    return (item as GroupedDropdownOption).options !== undefined\n}\n\n@observer\nexport class MapZoomDropdown extends React.Component<{\n    manager: MapZoomDropdownManager\n}> {\n    private searchInput = \"\"\n    private localEntityNames: EntityName[] | undefined = undefined\n\n    constructor(props: { manager: MapZoomDropdownManager }) {\n        super(props)\n\n        makeObservable<MapZoomDropdown, \"searchInput\" | \"localEntityNames\">(\n            this,\n            { searchInput: observable, localEntityNames: observable }\n        )\n    }\n\n    static shouldShow(manager: MapZoomDropdownManager): boolean {\n        const menu = new MapZoomDropdown({ manager })\n        return menu.showMenu\n    }\n\n    @computed private get showMenu(): boolean {\n        const { isMapSelectionEnabled, isOnMapTab, mapConfig } =\n            this.props.manager\n        return !!(\n            isOnMapTab &&\n            !isMapSelectionEnabled &&\n            !mapConfig?.globe.isActive\n        )\n    }\n\n    @computed private get manager(): MapZoomDropdownManager {\n        return this.props.manager\n    }\n\n    @computed private get mapConfig(): MapConfig {\n        return this.manager.mapConfig ?? new MapConfig()\n    }\n\n    @computed get fuzzy(): FuzzySearch<DropdownOption> {\n        return FuzzySearch.withKeyArray(\n            this.flatOptions,\n            (entity) => [entity.label, ...(entity.alternativeNames ?? [])],\n            (entity) => entity.label\n        )\n    }\n\n    @action.bound private onChange(selected: DropdownOption | null): void {\n        if (!selected?.value) return\n\n        match(selected.type)\n            .with(\"country\", () => {\n                // reset the region if a non-world region is currently selected\n                if (this.mapConfig.region !== MapRegionName.World) {\n                    this.mapConfig.region = MapRegionName.World\n                }\n\n                // rotate to the country on the globe and show its tooltip\n                this.manager.globeController?.setFocusCountry(selected.value)\n                this.manager.globeController?.rotateToCountry(selected.value)\n            })\n            .with(\"continent\", () => {\n                this.manager.globeController?.rotateToOwidContinent(\n                    selected.value as GlobeRegionName\n                )\n            })\n            .exhaustive()\n\n        this.searchInput = \"\"\n    }\n\n    @computed private get sortedCountries(): EntityName[] {\n        return _.sortBy(mappableCountries.map((country) => country.name))\n    }\n\n    @computed private get options(): DropdownCollection<DropdownOption> {\n        const { localEntityNames = [] } = this\n        const langs = getUserNavigatorLanguagesNonEnglish()\n\n        const countryOptions: DropdownOption[] = this.sortedCountries.map(\n            (country) => ({\n                type: \"country\",\n                value: country,\n                label: country,\n                alternativeNames: getRegionAlternativeNames(country, langs),\n                isLocal: this.localEntityNames?.includes(country),\n                trackNote: \"map_zoom_mobile\",\n            })\n        )\n\n        const continentOptions: DropdownOption[] = Object.values(MapRegionName)\n            .filter((region) => region !== MapRegionName.World)\n            .map((region) => {\n                return {\n                    type: \"continent\",\n                    value: region,\n                    label: MAP_REGION_LABELS[region as MapRegionName],\n                    isLocal: this.localEntityNames?.includes(region),\n                    trackNote: \"map_zoom_mobile\",\n                }\n            })\n\n        const sortLocalEntitiesToTop = (\n            options: DropdownOption[]\n        ): DropdownOption[] => {\n            if (localEntityNames.length === 0) return options\n            const [local, nonLocal] = R.partition(\n                options,\n                (option) => !!option.isLocal\n            )\n            return [...local, ...nonLocal]\n        }\n\n        return [\n            {\n                label: \"Continents\",\n                options: sortLocalEntitiesToTop(continentOptions),\n            },\n            {\n                label: \"Countries\",\n                options: sortLocalEntitiesToTop(countryOptions),\n            },\n        ]\n    }\n\n    @computed private get flatOptions(): DropdownOption[] {\n        return this.options.flatMap((item) =>\n            isGroupedOption(item) ? item.options : [item]\n        )\n    }\n\n    @computed\n    private get filteredOptions(): DropdownCollection<DropdownOption> {\n        if (!this.searchInput) return this.options\n        return this.fuzzy.search(this.searchInput)\n    }\n\n    @computed private get value(): DropdownOption | null {\n        const { region } = this.mapConfig\n        const { focusCountry } = this.manager.mapConfig?.globe ?? {}\n        const currentValue = focusCountry ?? region\n        return (\n            this.flatOptions.find((opt) => currentValue === opt.value) ?? null\n        )\n    }\n\n    @action.bound async populateLocalCountryName(): Promise<void> {\n        try {\n            const localCountryInfo = await getUserCountryInformation()\n            if (!localCountryInfo) return\n\n            const countryRegionsWithoutIncomeGroups = localCountryInfo.regions\n                ? localCountryInfo.regions.filter(\n                      (region) => !checkIsOwidIncomeGroupCode(region)\n                  )\n                : []\n\n            const userEntityCodes = [\n                localCountryInfo.code,\n                ...countryRegionsWithoutIncomeGroups,\n            ]\n\n            const userRegions = regions.filter((region) =>\n                userEntityCodes.includes(region.code)\n            )\n\n            const sortedUserRegions = _.sortBy(userRegions, (region) =>\n                userEntityCodes.indexOf(region.code)\n            )\n\n            const localEntityNames = sortedUserRegions.map(\n                (region) => region.name\n            )\n\n            this.localEntityNames = localEntityNames\n        } catch {\n            // ignore\n        }\n    }\n\n    override componentDidMount(): void {\n        void this.populateLocalCountryName()\n    }\n\n    override render(): React.ReactElement | null {\n        return this.showMenu ? (\n            <div className=\"map-zoom-dropdown\">\n                <Dropdown\n                    options={\n                        this.searchInput ? this.filteredOptions : this.options\n                    }\n                    onChange={this.onChange}\n                    value={this.value}\n                    inputValue={this.searchInput}\n                    onInputChange={(inputValue) =>\n                        (this.searchInput = inputValue)\n                    }\n                    isSearchable\n                    placeholder=\"Zoom to...\"\n                    aria-label=\"Search for country or continent\"\n                    renderMenuOption={(option) => (\n                        <>\n                            {option.label}\n                            {option.isLocal && (\n                                <FontAwesomeIcon\n                                    className=\"map-zoom-dropdown-local-icon\"\n                                    icon={faLocationArrow}\n                                />\n                            )}\n                        </>\n                    )}\n                />\n            </div>\n        ) : null\n    }\n}\n","import { Component } from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\n\nimport { Bounds } from \"@ourworldindata/utils\"\n\nimport { ContentSwitchers, ContentSwitchersManager } from \"../ContentSwitchers\"\nimport {\n    EntitySelectionToggle,\n    EntitySelectionManager,\n} from \"../EntitySelectionToggle\"\nimport {\n    MapRegionDropdown,\n    MapRegionDropdownManager,\n} from \"../MapRegionDropdown\"\nimport { SettingsMenu, SettingsMenuManager } from \"../SettingsMenu\"\nimport { GRAPHER_FRAME_PADDING_HORIZONTAL } from \"../../core/GrapherConstants\"\nimport { MapResetButton, MapResetButtonManager } from \"../MapResetButton\"\nimport {\n    DataTableFilterDropdown,\n    DataTableFilterDropdownManager,\n} from \"../DataTableFilterDropdown\"\nimport {\n    DataTableSearchField,\n    DataTableSearchFieldManager,\n} from \"../DataTableSearchField\"\nimport {\n    MapZoomToSelectionButton,\n    MapZoomToSelectionButtonManager,\n} from \"../MapZoomToSelectionButton\"\nimport { MapZoomDropdown, MapZoomDropdownManager } from \"../MapZoomDropdown\"\n\nexport interface ControlsRowManager\n    extends\n        ContentSwitchersManager,\n        EntitySelectionManager,\n        SettingsMenuManager,\n        MapRegionDropdownManager,\n        MapResetButtonManager,\n        MapZoomToSelectionButtonManager,\n        MapZoomDropdownManager,\n        DataTableFilterDropdownManager,\n        DataTableSearchFieldManager {\n    sidePanelBounds?: Bounds\n    isSmall?: boolean\n}\n\ninterface ControlsRowProps {\n    manager: ControlsRowManager\n    maxWidth?: number\n    popoverMaxWidth?: number\n    popoverMaxHeight?: number\n}\n\n@observer\nexport class ControlsRow extends Component<ControlsRowProps> {\n    private framePaddingHorizontal = GRAPHER_FRAME_PADDING_HORIZONTAL\n\n    constructor(props: ControlsRowProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: ControlsRowManager): boolean {\n        const test = new ControlsRow({ manager })\n        return test.showControlsRow\n    }\n\n    @computed private get manager(): ControlsRowManager {\n        return this.props.manager\n    }\n\n    @computed private get showControlsRow(): boolean {\n        return (\n            ContentSwitchers.shouldShow(this.manager) ||\n            SettingsMenu.shouldShow(this.manager) ||\n            EntitySelectionToggle.shouldShow(this.manager) ||\n            // Map controls\n            MapRegionDropdown.shouldShow(this.manager) ||\n            MapZoomDropdown.shouldShow(this.manager) ||\n            MapZoomToSelectionButton.shouldShow(this.manager) ||\n            MapResetButton.shouldShow(this.manager, \"resetZoom\") ||\n            MapResetButton.shouldShow(this.manager, \"resetView\") ||\n            // Table controls\n            DataTableFilterDropdown.shouldShow(this.manager) ||\n            DataTableSearchField.shouldShow(this.manager)\n        )\n    }\n\n    private renderChartControls(): React.ReactElement {\n        return (\n            <div className=\"controls chart-controls\">\n                <EntitySelectionToggle manager={this.manager} />\n                <SettingsMenu\n                    manager={this.manager}\n                    popoverMaxWidth={this.props.popoverMaxWidth}\n                    popoverMaxHeight={this.props.popoverMaxHeight}\n                />\n            </div>\n        )\n    }\n\n    private renderTableControls(): React.ReactElement {\n        return (\n            <div className=\"controls table-controls\">\n                <DataTableFilterDropdown manager={this.manager} />\n                <DataTableSearchField manager={this.manager} />\n            </div>\n        )\n    }\n\n    private renderMapControls(): React.ReactElement {\n        return (\n            <div className=\"controls map-controls\">\n                {this.manager.isMapSelectionEnabled\n                    ? this.renderMapControlsForDesktop()\n                    : this.renderMapControlsForMobile()}\n            </div>\n        )\n    }\n\n    private renderMapControlsForDesktop(): React.ReactElement {\n        return (\n            <>\n                <MapResetButton manager={this.manager} action=\"resetZoom\" />\n                <MapZoomToSelectionButton manager={this.manager} />\n                <MapResetButton manager={this.manager} action=\"resetView\" />\n                <MapRegionDropdown manager={this.manager} />\n                <EntitySelectionToggle manager={this.manager} />\n            </>\n        )\n    }\n\n    private renderMapControlsForMobile(): React.ReactElement {\n        const shouldShowResetZoomButton = MapResetButton.shouldShow(\n            this.manager,\n            \"resetZoom\"\n        )\n\n        if (shouldShowResetZoomButton)\n            return <MapResetButton manager={this.manager} action=\"resetZoom\" />\n\n        return this.manager.isFaceted ? (\n            <MapRegionDropdown manager={this.manager} />\n        ) : (\n            <MapZoomDropdown manager={this.manager} />\n        )\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <nav\n                className=\"controlsRow\"\n                style={{ padding: `0 ${this.framePaddingHorizontal}px` }}\n            >\n                <div>\n                    <ContentSwitchers manager={this.manager} />\n                </div>\n                <div className=\"controls\">\n                    {this.manager.isOnMapTab\n                        ? this.renderMapControls()\n                        : this.manager.isOnTableTab\n                          ? this.renderTableControls()\n                          : this.renderChartControls()}\n                </div>\n            </nav>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport a from \"indefinite\"\nimport { Bounds, VerticalAlign, dyFromAlign } from \"@ourworldindata/utils\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n    GRAPHER_TEXT_OUTLINE_FACTOR,\n} from \"../core/GrapherConstants\"\nimport { Halo } from \"@ourworldindata/components\"\nimport { GRAPHER_DARK_TEXT, GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants\"\n\nexport interface NoDataModalManager {\n    canChangeEntity?: boolean\n    canAddEntities?: boolean\n    entityType?: string\n    entityTypePlural?: string\n    fontSize?: number\n    isStatic?: boolean\n}\n\ninterface NoDataModalProps {\n    bounds?: Bounds\n    message?: string\n    helpText?: string\n    hideTextOutline?: boolean\n    manager: NoDataModalManager\n}\n\n@observer\nexport class NoDataModal extends React.Component<NoDataModalProps> {\n    constructor(props: NoDataModalProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get manager(): NoDataModalManager {\n        return this.props.manager\n    }\n\n    @computed private get fontSize(): number {\n        // font sizes bigger than the base font size are too large for the no data text\n        return Math.min(this.manager.fontSize ?? BASE_FONT_SIZE, BASE_FONT_SIZE)\n    }\n\n    override render(): React.ReactElement {\n        const { bounds } = this\n        const { message } = this.props\n        const {\n            entityType = DEFAULT_GRAPHER_ENTITY_TYPE,\n            entityTypePlural = DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n            canAddEntities,\n            canChangeEntity,\n            isStatic,\n        } = this.manager\n\n        const defaultHelpText = canAddEntities\n            ? `Try adding ${entityTypePlural} to display data.`\n            : canChangeEntity\n              ? `Try choosing ${a(entityType)} to display data.`\n              : undefined\n        const helpText = this.props.helpText ?? defaultHelpText\n\n        const center = bounds.centerPos\n        const padding = 0.75 * this.fontSize\n        const showHelpText = !isStatic && !!helpText\n        const helpTextFontSize = 0.9 * this.fontSize\n\n        return (\n            <g className=\"no-data\">\n                <rect {...bounds.toProps()} fill=\"#fff\" opacity={0.6} />\n\n                <Halo\n                    id=\"no-data-message\"\n                    outlineWidth={GRAPHER_TEXT_OUTLINE_FACTOR * this.fontSize}\n                    show={!this.props.hideTextOutline}\n                >\n                    <text\n                        x={center.x}\n                        y={center.y}\n                        dy={\n                            showHelpText\n                                ? -padding / 2\n                                : dyFromAlign(VerticalAlign.middle)\n                        }\n                        textAnchor=\"middle\"\n                        fontSize={this.fontSize}\n                        fontWeight={500}\n                        fill={GRAPHER_DARK_TEXT}\n                    >\n                        {message || \"No available data\"}\n                    </text>\n                </Halo>\n\n                {showHelpText && (\n                    <Halo\n                        id=\"no-data-help\"\n                        outlineWidth={\n                            GRAPHER_TEXT_OUTLINE_FACTOR * helpTextFontSize\n                        }\n                        show={!this.props.hideTextOutline}\n                    >\n                        <text\n                            x={center.x}\n                            y={center.y + padding / 2}\n                            textAnchor=\"middle\"\n                            dy={dyFromAlign(VerticalAlign.bottom)}\n                            fontSize={helpTextFontSize}\n                            fill={GRAPHER_LIGHT_TEXT}\n                        >\n                            {helpText}\n                        </text>\n                    </Halo>\n                )}\n            </g>\n        )\n    }\n}\n","import { CoreColumn, OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    ColumnSlug,\n    EntityName,\n    IndicatorTitleWithFragments,\n    OwidVariableRow,\n    SortOrder,\n    Time,\n} from \"@ourworldindata/types\"\nimport { EntitiesByRegionGroup, RegionGroupKey } from \"../core/RegionGroups\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { TimelineDragTarget } from \"../timeline/TimelineController\"\n\n// Grapher's rendered data table is organized into groups, where\n// each group corresponds to an indicator from the core table.\n// Each indicator group contains a set of columns, depending on\n// the current time selection:\n// - Single time selection: one column per indicator showing the value\n// - Start and end time selection: two to four columns per indicator, including\n//   start value, end value, and optionally absolute change and relative change\n//   columns\n\nexport interface DataTableManager {\n    table: OwidTable // not used here, but required in type `ChartManager`\n    tableForDisplay: OwidTable\n    entityType?: string\n    endTime?: Time\n    startTime?: Time\n    dataTableSlugs?: ColumnSlug[]\n    isNarrow?: boolean\n    dataTableConfig: DataTableConfig\n    dataTableSelection?: SelectionArray | EntityName[]\n    entitiesByRegionGroup?: EntitiesByRegionGroup\n    timelineDragTarget?: TimelineDragTarget\n    closestTimelineMinTime?: Time\n    closestTimelineMaxTime?: Time\n}\n\n/**\n * DataTableDimension represents an indicator from the core table that is\n * displayed in the data table as a group with one or more columns.\n *\n * A DataTableDimension contains:\n * - columnDefinitions: Defines which columns to display for this indicator\n *   (e.g., start/end columns, change columns)\n * - valuesByEntityName: The actual data for each column, grouped by entity\n * - coreTableColumn: Reference to the original indicator from the core table\n */\nexport interface DataTableDimension {\n    columnDefinitions: DataTableColumnDefinition[]\n    valuesByEntityName: Map<EntityName, DataTableValuesForEntity>\n    coreTableColumn: CoreColumn\n}\n\n/**\n * DisplayDataTableDimension represents an indicator from the core table that is\n * displayed in the data table as a group with one or more columns. Unlike\n * DataTableDimension, it doesn't contain the actual data values but only the\n * metadata needed for display purposes.\n */\nexport interface DisplayDataTableDimension extends Omit<\n    DataTableDimension,\n    \"valuesByEntityName\"\n> {\n    sortable: boolean\n    display: { columnName: IndicatorTitleWithFragments; unit?: string }\n}\n\n/**\n * DataTableColumnDefinition defines the configuration for a single column\n * within a data table dimension. It specifies which type of data should be\n * displayed (e.g., start/end values or absolute/relative change).\n */\nexport interface DataTableColumnDefinition {\n    key: DataTableColumnKey\n    targetTime?: Time\n    sortable: boolean\n}\n\n/**\n * DataTableRow represents a single row in the data table, corresponding to\n * one entity. It contains the entity name and an array of data table values,\n * where each element maps to a data table dimension.\n */\nexport interface DataTableRow {\n    entityName: EntityName\n    values: (DataTableValuesForEntity | undefined)[] // TODO make it not undefined\n}\n\n/**\n * TargetTimeMode determines how time selection affects the data table display.\n * - point: Single time selection, showing one value per indicator\n * - range: Time range selection, showing start/end values and absolute/relative change\n */\nexport enum TargetTimeMode {\n    point = \"point\",\n    range = \"range\",\n}\n\nexport enum SparklineKey {\n    sparkline = \"sparkline\",\n}\n\n/**\n * PointColumnKey defines the available column types when displaying single\n * time point data. Used when TargetTimeMode is set to 'point'.\n * - single: The data value for the selected time\n */\nexport enum PointColumnKey {\n    single = \"single\",\n}\n\n/**\n * RangeColumnKey defines the available column types when displaying time\n * range data. Used when TargetTimeMode is set to 'range'.\n * - start: Value at the beginning of the time range\n * - end: Value at the end of the time range\n * - delta: Absolute change between start and end values\n * - deltaRatio: Relative change between start and end values\n */\nexport enum RangeColumnKey {\n    start = \"start\",\n    end = \"end\",\n    delta = \"delta\",\n    deltaRatio = \"deltaRatio\",\n}\n\n/**\n * PointValuesForEntity holds data for a single entity within a data table dimension\n * when TargetTimeMode is set to 'point' (single time selection).\n */\nexport type PointValuesForEntity = Partial<\n    Record<PointColumnKey, MinimalOwidRow> &\n        Record<SparklineKey, OwidVariableRow<number>[]>\n>\n\n/**\n * RangeValuesForEntity holds data for a single entity within a data table dimension\n * when TargetTimeMode is set to 'range' (time range selection). This includes\n * start and end values and absolute and relative change columns.\n */\nexport type RangeValuesForEntity = Partial<\n    Record<RangeColumnKey, MinimalOwidRow> &\n        Record<SparklineKey, OwidVariableRow<number>[]>\n>\n\nexport type DataTableValuesForEntity =\n    | PointValuesForEntity\n    | RangeValuesForEntity\n\nexport type DataTableColumnKey = PointColumnKey | RangeColumnKey | SparklineKey\n\nexport interface MinimalOwidRow {\n    value?: string | number\n    displayValue?: string\n    time?: Time\n}\n\nexport const COMMON_DATA_TABLE_FILTERS = [\"all\", \"selection\"] as const\nexport type CommonDataTableFilter = (typeof COMMON_DATA_TABLE_FILTERS)[number]\n\nexport type DataTableFilter = CommonDataTableFilter | RegionGroupKey\n\nexport interface DataTableConfig {\n    filter: DataTableFilter\n    search: string\n}\n\nexport interface DataTableState {\n    sort: DataTableSortState\n}\n\nexport interface DataTableSortState {\n    dimIndex: DimensionSortIndex\n    columnKey: DataTableColumnKey | undefined\n    order: SortOrder\n}\n\nexport type DimensionSortIndex = number\n\nexport interface SparklineHighlight {\n    time: Time\n    value?: number\n    showMarker?: boolean\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, observable, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport classnames from \"classnames\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowDownLong,\n    faArrowUpLong,\n    faInfoCircle,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { scaleLinear } from \"d3-scale\"\nimport { extent } from \"d3-array\"\nimport { line } from \"d3-shape\"\nimport {\n    SortOrder,\n    Time,\n    EntityName,\n    OwidTableSlugs,\n    OwidVariableRoundingMode,\n    OwidVariableRow,\n} from \"@ourworldindata/types\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\nimport {\n    valuesByEntityAtTimes,\n    es6mapValues,\n    exposeInstanceOnWindow,\n    DataValue,\n    Bounds,\n    TickFormattingOptions,\n    Tippy,\n    excludeUndefined,\n    joinTitleFragments,\n    FuzzySearch,\n} from \"@ourworldindata/utils\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    SVG_STYLE_PROPS,\n} from \"../core/GrapherConstants\"\nimport * as R from \"remeda\"\nimport { makeSelectionArray } from \"../chart/ChartUtils\"\nimport { isEntityRegionGroupKey } from \"../core/RegionGroups\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport {\n    DataTableColumnKey,\n    DisplayDataTableDimension,\n    DataTableRow,\n    DataTableDimension,\n    DataTableColumnDefinition,\n    DataTableValuesForEntity,\n    RangeValuesForEntity,\n    RangeColumnKey,\n    PointValuesForEntity,\n    PointColumnKey,\n    SparklineHighlight,\n    TargetTimeMode,\n    MinimalOwidRow,\n    DataTableConfig,\n    DataTableSortState,\n    DataTableState,\n    DimensionSortIndex,\n    DataTableManager,\n    CommonDataTableFilter,\n    COMMON_DATA_TABLE_FILTERS,\n    DataTableFilter,\n    SparklineKey,\n} from \"./DataTableConstants\"\nimport { GRAY_30 } from \"../color/ColorConstants\"\n\nconst ENTITY_SORT_INDEX = -1\n\nconst DEFAULT_SORT_STATE: DataTableSortState = {\n    dimIndex: ENTITY_SORT_INDEX,\n    columnKey: undefined,\n    order: SortOrder.asc,\n}\n\nconst columnNameByType: Record<DataTableColumnKey, string> = {\n    single: \"Value\",\n    start: \"Start\",\n    end: \"End\",\n    delta: \"Absolute Change\",\n    deltaRatio: \"Relative Change\",\n    sparkline: \"Sparkline\",\n}\n\nconst inverseSortOrder = (order: SortOrder): SortOrder =>\n    order === SortOrder.asc ? SortOrder.desc : SortOrder.asc\n\ninterface DataTableProps {\n    manager: DataTableManager\n    bounds?: Bounds\n}\n\n@observer\nexport class DataTable extends React.Component<DataTableProps> {\n    private storedState: DataTableState = {\n        sort: DEFAULT_SORT_STATE,\n    }\n\n    constructor(props: DataTableProps) {\n        super(props)\n        makeObservable<DataTable, \"storedState\">(this, {\n            storedState: observable,\n        })\n    }\n\n    @computed get manager(): DataTableManager {\n        return this.props.manager\n    }\n\n    @computed private get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.dataTableSelection)\n    }\n\n    @computed private get tableConfig(): DataTableConfig {\n        return this.manager.dataTableConfig\n    }\n\n    @computed private get timelineMinTime(): Time | undefined {\n        return this.manager.closestTimelineMinTime\n    }\n\n    @computed private get timelineMaxTime(): Time | undefined {\n        return this.manager.closestTimelineMaxTime\n    }\n\n    @computed get table(): OwidTable {\n        let table = this.manager.tableForDisplay\n\n        // make sure the given table doesn't contain any rows outside of the time range\n        table = table.filterByTimeRange(\n            this.manager.closestTimelineMinTime ?? -Infinity,\n            this.manager.closestTimelineMaxTime ?? Infinity\n        )\n\n        return table\n    }\n\n    @computed private get tableState(): DataTableState {\n        return { sort: this.sortState }\n    }\n\n    @computed private get sortState(): DataTableSortState {\n        let { dimIndex, columnKey, order } = {\n            ...DEFAULT_SORT_STATE,\n            ...this.storedState.sort,\n        }\n\n        // If not sorted by entity, then make sure the index of the chosen column exists\n        dimIndex = Math.min(dimIndex, this.table.numColumns - 1)\n        if (dimIndex !== ENTITY_SORT_INDEX) {\n            const availableColumns = this.dataTableDimensionsWithValues[\n                dimIndex\n            ].columnDefinitions.map((colDef) => colDef.key)\n            if (\n                columnKey === undefined ||\n                !availableColumns.includes(columnKey)\n            )\n                columnKey = availableColumns[0]\n        }\n\n        return {\n            dimIndex,\n            columnKey,\n            order,\n        }\n    }\n\n    @computed private get entityType(): string {\n        return this.manager.entityType ?? DEFAULT_GRAPHER_ENTITY_TYPE\n    }\n\n    @computed private get sortValueMapper(): (\n        row: DataTableRow\n    ) => number | string {\n        const { dimIndex: sortIndex, columnKey, order } = this.tableState.sort\n        if (sortIndex === ENTITY_SORT_INDEX)\n            return (row): string => row.entityName\n\n        return (row): string | number => {\n            const dv = row.values[sortIndex] as DataTableValuesForEntity\n\n            let value: number | string | undefined\n            if (dv) {\n                if (isSingleValue(dv)) {\n                    value = dv.single?.value\n                } else if (\n                    isRangeValue(dv) &&\n                    columnKey !== undefined &&\n                    isRangeColumnKey(columnKey)\n                ) {\n                    value = dv[columnKey]?.value\n                }\n            }\n\n            // We always want undefined values to be last\n            if (\n                value === undefined ||\n                (typeof value === \"number\" &&\n                    (!isFinite(value) || isNaN(value)))\n            )\n                return order === SortOrder.asc ? Infinity : -Infinity\n\n            return value\n        }\n    }\n\n    @computed private get hasSubheaders(): boolean {\n        return (\n            !this.hasDimensionHeaders ||\n            this.dataTableDimensionsWithValues.some(\n                (header) => header.columnDefinitions.length > 1\n            )\n        )\n    }\n\n    @action.bound private updateSort(\n        dimIndex: DimensionSortIndex,\n        columnKey?: DataTableColumnKey\n    ): void {\n        const { sort } = this.tableState\n        const order =\n            sort.dimIndex === dimIndex && sort.columnKey === columnKey\n                ? inverseSortOrder(sort.order)\n                : dimIndex === ENTITY_SORT_INDEX\n                  ? SortOrder.asc\n                  : SortOrder.desc\n\n        this.storedState.sort.dimIndex = dimIndex\n        this.storedState.sort.columnKey = columnKey\n        this.storedState.sort.order = order\n    }\n\n    private get entityHeaderText(): string {\n        return _.capitalize(this.entityType)\n    }\n\n    private get entityHeader(): React.ReactElement {\n        const { sort } = this.tableState\n        return (\n            <ColumnHeader\n                key=\"entity\"\n                sortable={this.entityCount > 1}\n                sortedCol={sort.dimIndex === ENTITY_SORT_INDEX}\n                sortOrder={sort.order}\n                onClick={(): void => this.updateSort(ENTITY_SORT_INDEX)}\n                headerText={this.entityHeaderText}\n                colType=\"entity\"\n            />\n        )\n    }\n\n    @computed private get hasDimensionHeaders(): boolean {\n        return this.dataTableDimensionsWithValues.length > 1\n    }\n\n    // If the table has a single data column, we move the data column\n    // closer to the entity column to make it easier to read the table\n    @computed private get singleDataColumnStyle():\n        | { minWidth: number; contentMaxWidth: number }\n        | undefined {\n        // no need to do this on mobile\n        if (this.manager.isNarrow) return\n\n        const hasSingleDataColumn =\n            this.displayDimensions.length === 1 &&\n            this.displayDimensions[0].columnDefinitions.length === 1\n\n        if (!hasSingleDataColumn) return\n\n        // header text\n        const dimension = this.displayDimensions[0]\n        const column = this.displayDimensions[0].columnDefinitions[0]\n        const headerText = this.subheaderText(column, dimension)\n\n        // display values\n        const values = excludeUndefined(\n            this.displayRows.map(\n                (row) => (row.values[0] as PointValuesForEntity).single\n            )\n        )\n\n        const accessor = (row: MinimalOwidRow): number | undefined =>\n            typeof row.value === \"string\" ? row.value.length : row.value\n        const maxValue = _.maxBy(values, accessor)\n        const minValue = _.minBy(values, accessor)\n\n        const measureWidth = (text: string): number =>\n            Bounds.forText(text, { fontSize: 14 }).width\n\n        // in theory, we should be measuring the length of all values\n        // but we might have a lot of values, so we just measure the length\n        // of the min and max values as a proxy\n        const contentMaxWidth = Math.ceil(\n            Math.max(\n                measureWidth(maxValue?.displayValue ?? \"\") + 20, // 20px accounts for a possible info icon\n                measureWidth(minValue?.displayValue ?? \"\") + 20, // 20px accounts for a possible info icon\n                measureWidth(headerText) + 26 // 26px accounts for the sort icon\n            )\n        )\n\n        // minimum width of the column\n        const minWidth = 0.66 * this.bounds.width\n\n        // only do this if there is an actual need\n        if (minWidth - contentMaxWidth < 320) return\n\n        return { minWidth, contentMaxWidth }\n    }\n\n    private get dimensionHeaders(): React.ReactElement[] | null {\n        const { sort } = this.tableState\n        return this.displayDimensions.map((dim, dimIndex) => {\n            const { coreTableColumn, display } = dim\n            const singleColumn = dim.columnDefinitions.find(\n                (column) => column.key === PointColumnKey.single\n            )\n            const targetTime = singleColumn?.targetTime\n\n            const title = _.upperFirst(display.columnName.title)\n            const titleFragments = joinTitleFragments(\n                display.columnName.attributionShort,\n                display.columnName.titleVariant\n            )\n\n            const dimensionHeaderText = (\n                <React.Fragment>\n                    <div\n                        className=\"name\"\n                        title={\n                            titleFragments\n                                ? `${title} – ${titleFragments}`\n                                : title\n                        }\n                    >\n                        <span className=\"title-text\">{title} </span>\n                        <span className=\"title-fragments\">\n                            {titleFragments}\n                        </span>\n                    </div>\n                    <div className=\"description\">\n                        <span className=\"unit\">{display.unit}</span>\n                        <span>\n                            {display.unit && targetTime !== undefined && \",\"}\n                        </span>{\" \"}\n                        <span className=\"time\">\n                            {targetTime !== undefined &&\n                                coreTableColumn.formatTime(targetTime)}\n                        </span>\n                    </div>\n                </React.Fragment>\n            )\n\n            const onClick = dim.sortable\n                ? (): void => this.updateSort(dimIndex, PointColumnKey.single)\n                : undefined\n\n            const props = {\n                sortable: dim.sortable,\n                sortedCol: dim.sortable && sort.dimIndex === dimIndex,\n                sortOrder: sort.order,\n                onClick,\n                colSpan: dim.columnDefinitions.length,\n                headerText: dimensionHeaderText,\n                colType: \"dimension\" as const,\n            }\n\n            return <ColumnHeader key={coreTableColumn.slug} {...props} />\n        })\n    }\n\n    private subheaderText(\n        column: DataTableColumnDefinition,\n        dimension: DisplayDataTableDimension\n    ): string {\n        const col = dimension.coreTableColumn\n\n        if (column.key === SparklineKey.sparkline) {\n            const minTime = col.formatTime(this.timelineMinTime!)\n            const maxTime = col.formatTime(this.timelineMaxTime!)\n            return `${minTime}–${maxTime}`\n        }\n\n        return isDeltaColumn(column.key)\n            ? columnNameByType[column.key]\n            : col.formatTime(column.targetTime!)\n    }\n\n    private get dimensionSubheaders(): React.ReactElement[][] {\n        const { sort } = this.tableState\n        return this.displayDimensions.map((dim, dimIndex) =>\n            dim.columnDefinitions.map((column, colIndex) => {\n                const headerText = this.subheaderText(column, dim)\n                const onClick = column.sortable\n                    ? (): void => this.updateSort(dimIndex, column.key)\n                    : undefined\n                return (\n                    <ColumnHeader\n                        key={column.key}\n                        sortable={column.sortable}\n                        sortedCol={\n                            sort.dimIndex === dimIndex &&\n                            sort.columnKey === column.key\n                        }\n                        sortOrder={sort.order}\n                        onClick={onClick}\n                        headerText={headerText}\n                        colType=\"subdimension\"\n                        classNames={classnames({\n                            \"subdimension-first\": colIndex === 0,\n                        })}\n                        minWidth={this.singleDataColumnStyle?.minWidth}\n                        contentMaxWidth={\n                            this.singleDataColumnStyle?.contentMaxWidth\n                        }\n                    />\n                )\n            })\n        )\n    }\n\n    private get headerRow(): React.ReactElement {\n        const { hasDimensionHeaders, hasSubheaders } = this\n        return hasDimensionHeaders && hasSubheaders ? (\n            <>\n                <tr>\n                    <th className=\"above-entity\" />\n                    {this.dimensionHeaders}\n                </tr>\n                <tr>\n                    {this.entityHeader}\n                    {this.dimensionSubheaders}\n                </tr>\n            </>\n        ) : (\n            <tr>\n                {this.entityHeader}\n                {hasSubheaders\n                    ? this.dimensionSubheaders\n                    : this.dimensionHeaders}\n            </tr>\n        )\n    }\n\n    private renderValueCellContent({\n        columnDefinition,\n        valuesForEntity,\n        formatTime,\n    }: {\n        columnDefinition: DataTableColumnDefinition\n        valuesForEntity?: DataTableValuesForEntity\n        formatTime: (time: Time) => string\n    }): React.ReactElement | null {\n        if (!valuesForEntity) return null\n        if (!(columnDefinition.key in valuesForEntity)) return null\n\n        const value = getValueForEntityByKey(\n            valuesForEntity,\n            columnDefinition.key\n        )\n        if (!value) return null\n\n        return (\n            <>\n                <ClosestTimeNotice\n                    value={value}\n                    columnDefinition={columnDefinition}\n                    formatTime={formatTime}\n                />\n                <span>{value.displayValue}</span>\n            </>\n        )\n    }\n\n    private renderSparklineCellContent({\n        columnDefinition,\n        valuesForEntity,\n        isProjection,\n    }: {\n        columnDefinition: DataTableColumnDefinition\n        valuesForEntity?: DataTableValuesForEntity\n        isProjection?: boolean\n    }): React.ReactElement | null {\n        if (\n            columnDefinition.key !== SparklineKey.sparkline ||\n            !valuesForEntity?.sparkline\n        )\n            return null\n\n        const highlights: SparklineHighlight[] = []\n\n        const start = isRangeValue(valuesForEntity)\n            ? valuesForEntity.start\n            : valuesForEntity.single\n        const startTime = start?.time ?? this.targetTimes?.[0]\n\n        const end = isRangeValue(valuesForEntity)\n            ? valuesForEntity.end\n            : valuesForEntity.single\n        const endTime = end?.time ?? this.targetTimes?.[1]\n\n        // Add a highlight for the start time\n        if (startTime !== undefined) {\n            const value =\n                typeof start?.value === \"string\" ? undefined : start?.value\n\n            const showMarker =\n                this.manager.timelineDragTarget === \"start\" ||\n                this.manager.timelineDragTarget === \"both\"\n\n            highlights.push({ time: startTime, value, showMarker })\n        }\n\n        // Add a highlight for the end time\n        if (endTime !== undefined && endTime !== startTime) {\n            const value =\n                typeof end?.value === \"string\" ? undefined : end?.value\n\n            const showMarker =\n                this.manager.timelineDragTarget === \"end\" ||\n                this.manager.timelineDragTarget === \"both\"\n\n            highlights.push({ time: endTime, value, showMarker })\n        }\n\n        return (\n            <Sparkline\n                owidRows={valuesForEntity.sparkline}\n                minTime={this.timelineMinTime!}\n                maxTime={this.timelineMaxTime!}\n                highlights={highlights}\n                strokeStyle={isProjection ? \"dotted\" : \"solid\"}\n            />\n        )\n    }\n\n    private renderEntityRow(\n        row: DataTableRow,\n        dimensions: DisplayDataTableDimension[]\n    ): React.ReactElement {\n        return (\n            <tr key={row.entityName}>\n                <td key=\"entity\" className={classnames({ entity: true })}>\n                    {row.entityName}\n                </td>\n\n                {row.values.map((valuesForEntity, dimIndex) => {\n                    const dimension = dimensions[dimIndex]\n                    const { isProjection } = dimension.coreTableColumn\n\n                    return dimension.columnDefinitions.map(\n                        (columnDefinition, colIndex) => {\n                            const key = `${dimIndex}-${colIndex}`\n                            const formatTime = (time: Time): string =>\n                                dimension.coreTableColumn.formatTime(time)\n\n                            if (columnDefinition.key === SparklineKey.sparkline)\n                                return (\n                                    <ValueCell\n                                        key={key}\n                                        columnKey={columnDefinition.key}\n                                        isFirstColumn={colIndex === 0}\n                                    >\n                                        {this.renderSparklineCellContent({\n                                            columnDefinition,\n                                            valuesForEntity,\n                                            isProjection,\n                                        })}\n                                    </ValueCell>\n                                )\n\n                            return (\n                                <ValueCell\n                                    key={key}\n                                    columnKey={columnDefinition.key}\n                                    isFirstColumn={colIndex === 0}\n                                    maxWidth={\n                                        this.singleDataColumnStyle\n                                            ?.contentMaxWidth\n                                    }\n                                >\n                                    {this.renderValueCellContent({\n                                        columnDefinition,\n                                        valuesForEntity,\n                                        formatTime,\n                                    })}\n                                </ValueCell>\n                            )\n                        }\n                    )\n                })}\n            </tr>\n        )\n    }\n\n    @computed get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get tableCaption(): React.ReactElement | null {\n        if (this.hasDimensionHeaders) return null\n        if (this.displayDimensions.length === 0) return null\n\n        const singleDimension = this.displayDimensions[0]\n        const titleFragments =\n            singleDimension.display.columnName.attributionShort ||\n            singleDimension.display.columnName.titleVariant\n                ? joinTitleFragments(\n                      singleDimension.display.columnName.attributionShort,\n                      singleDimension.display.columnName.titleVariant\n                  )\n                : undefined\n\n        return singleDimension ? (\n            <div className=\"caption\">\n                {singleDimension.display.columnName.title}{\" \"}\n                <span className=\"title-fragments\">\n                    {titleFragments}\n                    {singleDimension.display.unit &&\n                        ` (${singleDimension.display.unit})`}\n                </span>\n            </div>\n        ) : null\n    }\n\n    private renderNoDataModal(): React.ReactElement {\n        return (\n            <svg\n                width={this.bounds.width}\n                height={this.bounds.height}\n                style={SVG_STYLE_PROPS}\n            >\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={`No ${this.entityType} matches this query`}\n                    helpText=\"Try checking for typos or searching for something else\"\n                    hideTextOutline\n                />\n            </svg>\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        if (this.sortedDisplayRows.length === 0) return this.renderNoDataModal()\n\n        return (\n            <div className=\"DataTable\">\n                {this.tableCaption}\n                <div className=\"table-wrapper\">\n                    <table>\n                        <thead>{this.headerRow}</thead>\n                        <tbody>\n                            {this.sortedDisplayRows.map((row) =>\n                                this.renderEntityRow(\n                                    row,\n                                    this.displayDimensions\n                                )\n                            )}\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n        )\n    }\n\n    @computed private get loadedWithData(): boolean {\n        return this.columnsToShow.length > 0\n    }\n\n    private readonly AUTO_SELECTION_THRESHOLD_PERCENTAGE = 0.5\n\n    /**\n     * If the user or the editor hasn't specified a start, auto-select a start time\n     *  where AUTO_SELECTION_THRESHOLD_PERCENTAGE of the entities have values.\n     */\n    @computed get autoSelectedStartTime(): number | undefined {\n        let autoSelectedStartTime: number | undefined = undefined\n\n        if (!this.loadedWithData) return undefined\n\n        const numEntitiesInTable = this.entityNames.length\n\n        this.columnsToShow.forEach((column): boolean => {\n            const numberOfEntitiesWithDataSortedByTime = _.sortBy(\n                Object.entries(R.countBy(column.uniqTimesAsc, R.identity())),\n                ([time, _count]) => parseInt(time)\n            )\n\n            const firstTimeWithSufficientData =\n                numberOfEntitiesWithDataSortedByTime.find((time) => {\n                    const numEntitiesWithData = time[1]\n                    const percentEntitiesWithData =\n                        numEntitiesWithData / numEntitiesInTable\n                    return (\n                        percentEntitiesWithData >=\n                        this.AUTO_SELECTION_THRESHOLD_PERCENTAGE\n                    )\n                })?.[0]\n\n            if (firstTimeWithSufficientData) {\n                autoSelectedStartTime = parseInt(firstTimeWithSufficientData)\n                return false\n            }\n            return true\n        })\n\n        return autoSelectedStartTime\n    }\n\n    @computed private get columnsToShow(): CoreColumn[] {\n        const slugs = this.manager.dataTableSlugs ?? []\n        if (slugs.length)\n            return slugs\n                .map((slug: string) => {\n                    const col = this.table.get(slug)\n                    if (!col)\n                        console.warn(`Warning: column '${slug}' not found`)\n                    return col\n                })\n                .filter((col) => col)\n\n        const skips = new Set(Object.keys(OwidTableSlugs))\n        return this.table.columnsAsArray.filter(\n            (column) =>\n                !skips.has(column.slug) &&\n                //  dim.property !== \"color\" &&\n                (column.display?.includeInTable ?? true)\n        )\n    }\n\n    @computed private get availableEntityNames(): EntityName[] {\n        return _.union(\n            ...this.columnsToShow.map(\n                (col) => this.table.get(col.slug).uniqEntityNames\n            )\n        )\n    }\n\n    @computed get fuzzy(): FuzzySearch<string> {\n        return FuzzySearch.withKey(\n            this.availableEntityNames,\n            (entityName) => entityName\n        )\n    }\n\n    @computed private get entityNames(): EntityName[] {\n        if (!this.tableConfig.search) return this.availableEntityNames\n        return this.fuzzy.search(this.tableConfig.search)\n    }\n\n    @computed private get entityCount(): number {\n        return this.entityNames.length\n    }\n\n    @computed private get isSortable(): boolean {\n        return this.entityCount > 1\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this, \"dataTable\")\n    }\n\n    private formatValue(\n        column: CoreColumn,\n        value: number | string | undefined,\n        formattingOverrides?: TickFormattingOptions\n    ): string | undefined {\n        if (value === undefined) return undefined\n        return column.formatValueShort(value, {\n            roundingMode: OwidVariableRoundingMode.decimalPlaces,\n            numberAbbreviation: false,\n            trailingZeroes: true,\n            useNoBreakSpace: true,\n            ...formattingOverrides,\n        })\n    }\n\n    @computed get targetTimes(): [number] | [number, number] | undefined {\n        const { startTime, endTime } = this.manager\n        if (startTime === undefined || endTime === undefined) return undefined\n\n        if (startTime !== endTime) return [startTime, endTime]\n        return [endTime]\n    }\n\n    private getTargetTimesForColumn(\n        coreTableColumn: CoreColumn\n    ): [number] | [number, number] {\n        // Respect the column's target time if it's set\n        if (coreTableColumn.def.targetTime !== undefined)\n            return [coreTableColumn.def.targetTime]\n\n        // Otherwise, use the table's target times\n        if (this.targetTimes !== undefined) return this.targetTimes\n\n        return [coreTableColumn.maxTime]\n    }\n\n    @computed get dataTableDimensionsWithValues(): DataTableDimension[] {\n        return this.columnsToShow.map((coreTableColumn) => {\n            const targetTimes = this.getTargetTimesForColumn(coreTableColumn)\n            const targetTimeMode =\n                targetTimes.length < 2\n                    ? TargetTimeMode.point\n                    : TargetTimeMode.range\n\n            // Get values for the given target times and apply tolerance\n            const targetValuesByEntity = this.interpolateTargetValues({\n                coreTableColumn,\n                targetTimes,\n            })\n\n            // Add absolute and relative change columns if necessary\n            const valuesByEntityName =\n                this.calculateDataValuesForTargetTimeMode({\n                    targetValuesByEntity,\n                    coreTableColumn,\n                    targetTimeMode,\n                })\n\n            // Add data for sparklines\n            if (this.columnHasSparkline(coreTableColumn)) {\n                for (const [entityName, values] of valuesByEntityName) {\n                    values.sparkline =\n                        coreTableColumn.owidRowsByEntityName.get(entityName)\n                }\n            }\n\n            // Construct column definitions for the given target time mode\n            const columnDefinitions = this.constructColumnDefinitions({\n                coreTableColumn,\n                targetTimes,\n                targetTimeMode,\n            })\n\n            return { columnDefinitions, valuesByEntityName, coreTableColumn }\n        })\n    }\n\n    private columnHasSparkline(coreTableColumn: CoreColumn): boolean {\n        return (\n            this.timelineMinTime !== undefined &&\n            this.timelineMaxTime !== undefined &&\n            this.timelineMinTime !== this.timelineMaxTime &&\n            coreTableColumn.hasNumberFormatting &&\n            // For columns with a target time, the data table is fixed at that time.\n            // It thus doesn't make sense to show a sparkline\n            coreTableColumn.def.targetTime === undefined\n        )\n    }\n\n    private constructColumnDefinitions({\n        coreTableColumn,\n        targetTimes,\n        targetTimeMode,\n    }: {\n        coreTableColumn: CoreColumn\n        targetTimes: number[]\n        targetTimeMode: TargetTimeMode\n    }): DataTableColumnDefinition[] {\n        // Inject delta columns if the data is numerical and we have start & end\n        // values to compare in the table. One column for absolute difference,\n        // another for % difference.\n        const deltaColumns: DataTableColumnDefinition[] = []\n        if (coreTableColumn.hasNumberFormatting) {\n            if (targetTimeMode === TargetTimeMode.range) {\n                const { tableDisplay = {} } = coreTableColumn.display ?? {}\n                if (!tableDisplay.hideAbsoluteChange)\n                    deltaColumns.push({\n                        key: RangeColumnKey.delta,\n                        sortable: this.isSortable,\n                    })\n                if (!tableDisplay.hideRelativeChange)\n                    deltaColumns.push({\n                        key: RangeColumnKey.deltaRatio,\n                        sortable: this.isSortable,\n                    })\n            }\n        }\n\n        const valueColumns: DataTableColumnDefinition[] = targetTimes.map(\n            (targetTime, index) => ({\n                key:\n                    targetTimeMode === TargetTimeMode.range\n                        ? index === 0\n                            ? RangeColumnKey.start\n                            : RangeColumnKey.end\n                        : PointColumnKey.single,\n                targetTime,\n                sortable: this.isSortable,\n            })\n        )\n\n        // Show a column with sparklines if appropriate\n        const sparklineColumn = this.columnHasSparkline(coreTableColumn)\n            ? { key: SparklineKey.sparkline, sortable: false }\n            : undefined\n\n        return excludeUndefined([\n            ...valueColumns,\n            sparklineColumn,\n            ...deltaColumns,\n        ])\n    }\n\n    private interpolateTargetValues({\n        coreTableColumn,\n        targetTimes,\n    }: {\n        coreTableColumn: CoreColumn\n        targetTimes: number[]\n    }): Map<string, (DataValue | undefined)[]> {\n        return valuesByEntityAtTimes(\n            coreTableColumn.valueByEntityNameAndOriginalTime,\n            targetTimes,\n            coreTableColumn.tolerance\n        )\n    }\n\n    private calculateDataValuesForTargetTimeMode({\n        targetValuesByEntity,\n        targetTimeMode,\n        coreTableColumn,\n    }: {\n        targetValuesByEntity: Map<string, (DataValue | undefined)[]>\n        targetTimeMode: TargetTimeMode\n        coreTableColumn: CoreColumn\n    }): Map<string, DataTableValuesForEntity> {\n        return es6mapValues(targetValuesByEntity, (dvs) => {\n            // There is always a column, but not always a data value (in the delta column the\n            // value needs to be calculated)\n            if (targetTimeMode === TargetTimeMode.range) {\n                const [start, end]: (MinimalOwidRow | undefined)[] = dvs\n                const result: RangeValuesForEntity = {\n                    start: {\n                        ...start,\n                        displayValue: this.formatValue(\n                            coreTableColumn,\n                            start?.value\n                        ),\n                    },\n                    end: {\n                        ...end,\n                        displayValue: this.formatValue(\n                            coreTableColumn,\n                            end?.value\n                        ),\n                    },\n                    delta: undefined,\n                    deltaRatio: undefined,\n                }\n\n                if (\n                    start !== undefined &&\n                    end !== undefined &&\n                    typeof start.value === \"number\" &&\n                    typeof end.value === \"number\" &&\n                    // sanity check: start time should always be <= end time\n                    start.time !== undefined &&\n                    end.time !== undefined &&\n                    start.time <= end.time\n                ) {\n                    const deltaValue = end.value - start.value\n                    const deltaRatioValue = deltaValue / Math.abs(start.value)\n\n                    result.delta = {\n                        value: deltaValue,\n                        displayValue: this.formatValue(\n                            coreTableColumn,\n                            deltaValue,\n                            {\n                                showPlus: true,\n                                unit:\n                                    coreTableColumn.shortUnit === \"%\"\n                                        ? \"pp\"\n                                        : coreTableColumn.shortUnit,\n                            }\n                        ),\n                    }\n\n                    result.deltaRatio = {\n                        value: deltaRatioValue,\n                        displayValue:\n                            isFinite(deltaRatioValue) && !isNaN(deltaRatioValue)\n                                ? this.formatValue(\n                                      coreTableColumn,\n                                      deltaRatioValue * 100,\n                                      {\n                                          unit: \"%\",\n                                          numDecimalPlaces: 0,\n                                          showPlus: true,\n                                      }\n                                  )\n                                : undefined,\n                    }\n                }\n                return result\n            } else {\n                // if single time\n                const dv = dvs[0]\n                const result: PointValuesForEntity = {\n                    single: { ...dv },\n                }\n                if (dv !== undefined)\n                    result.single!.displayValue = this.formatValue(\n                        coreTableColumn,\n                        dv.value\n                    )\n                return result\n            }\n        })\n    }\n\n    @computed get displayDimensions(): DisplayDataTableDimension[] {\n        return this.dataTableDimensionsWithValues.map((d) => {\n            const coreTableColumn = d.coreTableColumn\n            const columnName = coreTableColumn.titlePublicOrDisplayName\n            const unit =\n                coreTableColumn.unit === \"%\" ? \"percent\" : coreTableColumn.unit\n\n            return {\n                coreTableColumn,\n                columnDefinitions: d.columnDefinitions,\n                display: { columnName, unit },\n                sortable: !this.hasSubheaders,\n            }\n        })\n    }\n\n    @computed private get displayRows(): DataTableRow[] {\n        return this.entityNames.map((entityName) => {\n            return {\n                entityName,\n                values: this.dataTableDimensionsWithValues.map((d) =>\n                    d.valuesByEntityName.get(entityName)\n                ),\n            }\n        })\n    }\n\n    @computed private get sortedDisplayRows(): DataTableRow[] {\n        const { order } = this.tableState.sort\n        return _.orderBy(this.displayRows, this.sortValueMapper, order)\n    }\n}\n\nfunction ColumnHeader(props: {\n    classNames?: string\n    sortable: boolean\n    sortedCol: boolean\n    sortOrder: SortOrder\n    onClick?: () => void\n    rowSpan?: number\n    colSpan?: number\n    headerText: React.ReactNode\n    colType: \"entity\" | \"dimension\" | \"subdimension\"\n    minWidth?: number\n    contentMaxWidth?: number\n}): React.ReactElement {\n    const { sortable, sortedCol, colType } = props\n    const isEntityColumn = colType === \"entity\"\n    const sortIcon = sortable && (\n        <SortIcon\n            isActiveIcon={sortedCol}\n            order={\n                sortedCol\n                    ? props.sortOrder\n                    : isEntityColumn\n                      ? SortOrder.asc\n                      : SortOrder.desc\n            }\n        />\n    )\n\n    return (\n        <th\n            className={classnames(props.classNames, colType, { sortable })}\n            rowSpan={props.rowSpan ?? 1}\n            colSpan={props.colSpan ?? 1}\n            onClick={props.onClick}\n            style={{ minWidth: props.minWidth }}\n        >\n            <CellContent maxWidth={props.contentMaxWidth}>\n                <div className=\"content\">\n                    {!isEntityColumn && sortIcon}\n                    <span>{props.headerText}</span>\n                    {isEntityColumn && sortIcon}\n                </div>\n            </CellContent>\n        </th>\n    )\n}\n\nfunction CellContent(props: {\n    maxWidth?: number\n    children?: React.ReactNode\n}): React.ReactElement {\n    if (!props.maxWidth) return <>{props.children}</>\n    return <div style={{ maxWidth: props.maxWidth }}>{props.children}</div>\n}\n\nfunction ValueCell(props: {\n    columnKey: DataTableColumnKey\n    isFirstColumn?: boolean\n    maxWidth?: number\n    children?: React.ReactNode\n}): React.ReactElement {\n    const className = classnames([\n        \"cell\",\n        `cell-${props.columnKey}`,\n        { \"cell-first\": props.isFirstColumn },\n    ])\n    return (\n        <td className={className}>\n            <CellContent maxWidth={props.maxWidth}>\n                {props.children}\n            </CellContent>\n        </td>\n    )\n}\n\nfunction SortIcon(props: {\n    isActiveIcon?: boolean\n    order: SortOrder\n}): React.ReactElement {\n    const isActiveIcon = props.isActiveIcon ?? false\n    const activeIcon =\n        props.order === SortOrder.desc ? faArrowUpLong : faArrowDownLong\n\n    return (\n        <span\n            className={classnames({ \"sort-icon\": true, active: isActiveIcon })}\n        >\n            {isActiveIcon ? (\n                <FontAwesomeIcon icon={activeIcon} />\n            ) : (\n                <span style={{ display: \"inline-block\", width: \"max-content\" }}>\n                    <FontAwesomeIcon icon={faArrowUpLong} />\n                    <FontAwesomeIcon\n                        icon={faArrowDownLong}\n                        style={{ marginLeft: \"-2px\" }}\n                    />\n                </span>\n            )}\n        </span>\n    )\n}\n\nfunction ClosestTimeNotice({\n    value,\n    columnDefinition,\n    formatTime,\n}: {\n    value: MinimalOwidRow\n    columnDefinition: DataTableColumnDefinition\n    formatTime: (time: Time) => string\n}): React.ReactElement | null {\n    const shouldShowClosestTimeNotice =\n        !isDeltaColumn(columnDefinition.key) &&\n        columnDefinition.targetTime !== value.time\n\n    if (\n        value.time === undefined ||\n        columnDefinition.targetTime === undefined ||\n        !shouldShowClosestTimeNotice\n    )\n        return null\n\n    const targetTime = formatTime(columnDefinition.targetTime)\n    const closestTime = formatTime(value.time)\n\n    return (\n        <Tippy\n            content={\n                <div className=\"closest-time-notice-tippy\">\n                    <strong>Data not available for {targetTime}</strong>\n                    <br />\n                    Showing closest available data point ({closestTime})\n                </div>\n            }\n            arrow={false}\n        >\n            <span className=\"closest-time-notice-icon\">\n                <span className=\"icon\">\n                    <FontAwesomeIcon icon={faInfoCircle} />\n                </span>\n            </span>\n        </Tippy>\n    )\n}\n\nfunction Sparkline({\n    width = 75,\n    height = 18,\n    owidRows,\n    minTime,\n    maxTime,\n    highlights = [],\n    dotSize = 3.5,\n    color = \"#4C6A9C\",\n    strokeStyle = \"solid\",\n}: {\n    width?: number\n    height?: number\n    owidRows: OwidVariableRow<number>[]\n    minTime: number\n    maxTime: number\n    highlights?: SparklineHighlight[]\n    dotSize?: number\n    color?: string\n    strokeStyle?: \"solid\" | \"dotted\"\n}): React.ReactElement | null {\n    if (owidRows.length <= 1) return null\n\n    // add a little padding so the dots don't overflow\n    const bounds = new Bounds(0, 0, width, height).padWidth(dotSize)\n\n    // calculate x-scale\n    const xDomain = [minTime, maxTime]\n    const xScale = scaleLinear()\n        .domain(xDomain)\n        .range([bounds.left, bounds.right])\n\n    // calculate y-scale\n    const yDomain = extent(owidRows.map((row) => row.value)) as [number, number]\n    const yScale = scaleLinear()\n        .domain(yDomain)\n        .range([bounds.bottom, bounds.top])\n\n    const makePath = line<OwidVariableRow<number>>()\n        .x((row) => xScale(row.originalTime))\n        .y((row) => yScale(row.value))\n\n    const path = makePath(owidRows)\n    if (!path) return null\n\n    const strokeDasharray = strokeStyle === \"dotted\" ? \"2,3\" : undefined\n\n    return (\n        <svg\n            width={width}\n            height={height}\n            viewBox={`0 0 ${width} ${height}`}\n            style={{ overflow: \"visible\" }}\n        >\n            {/* marker lines of highlights */}\n            {highlights\n                .filter((highlight) => highlight.showMarker)\n                .map((highlight) => (\n                    <line\n                        key={highlight.time}\n                        x1={xScale(highlight.time)}\n                        x2={xScale(highlight.time)}\n                        y1={0}\n                        y2={height}\n                        stroke={GRAY_30}\n                    />\n                ))}\n\n            {/* sparkline */}\n            <path\n                d={path}\n                stroke={color}\n                fill=\"none\"\n                strokeWidth={1.5}\n                strokeDasharray={strokeDasharray}\n            />\n\n            {/* highlighted data points */}\n            {highlights\n                .filter((highlight) => highlight.value !== undefined)\n                .map((highlight) => (\n                    <circle\n                        key={highlight.time}\n                        cx={xScale(highlight.time)}\n                        cy={yScale(highlight.value!)}\n                        r={dotSize}\n                        fill={color}\n                        stroke=\"#fff\"\n                    />\n                ))}\n        </svg>\n    )\n}\n\nfunction getValueForEntityByKey(\n    dimensionValue: DataTableValuesForEntity,\n    columnKey: DataTableColumnKey\n): MinimalOwidRow | undefined {\n    if (isSingleValue(dimensionValue)) {\n        return dimensionValue[columnKey as PointColumnKey] as MinimalOwidRow\n    } else if (isRangeValue(dimensionValue)) {\n        return dimensionValue[columnKey as RangeColumnKey] as MinimalOwidRow\n    }\n    return undefined\n}\n\nfunction isRangeColumnKey(key: string): key is RangeColumnKey {\n    return Object.values(RangeColumnKey).includes(key as any)\n}\n\nfunction isRangeValue(\n    value: DataTableValuesForEntity\n): value is RangeValuesForEntity {\n    return \"start\" in value\n}\n\nfunction isSingleValue(\n    value: DataTableValuesForEntity\n): value is PointValuesForEntity {\n    return \"single\" in value\n}\n\nfunction isDeltaColumn(columnKey?: DataTableColumnKey): boolean {\n    return columnKey === \"delta\" || columnKey === \"deltaRatio\"\n}\n\nfunction isCommonDataTableFilter(\n    candidate: string\n): candidate is CommonDataTableFilter {\n    return COMMON_DATA_TABLE_FILTERS.includes(candidate as any)\n}\n\nexport function isValidDataTableFilter(\n    candidate: string\n): candidate is DataTableFilter {\n    return (\n        isCommonDataTableFilter(candidate) || isEntityRegionGroupKey(candidate)\n    )\n}\n","import { InteractionState } from \"./InteractionState.js\"\n\nexport enum Emphasis {\n    Default = \"default\",\n    Highlighted = \"highlighted\",\n    Muted = \"muted\",\n}\n\nexport function resolveEmphasis({\n    hover,\n    focus,\n}: {\n    hover?: InteractionState\n    focus?: InteractionState\n}): Emphasis {\n    if (hover?.active || focus?.active) return Emphasis.Highlighted\n    if (hover?.background || focus?.background) return Emphasis.Muted\n    return Emphasis.Default\n}\n","import { ChartManager } from \"../chart/ChartManager\"\nimport { CoreValueType, EntityName, Time } from \"@ourworldindata/types\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport { Color } from \"@ourworldindata/utils\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\nimport { GRAPHER_OPACITY_MUTED } from \"../core/GrapherConstants\"\n\nexport const LINE_CHART_CLASS_NAME = \"LineChart\"\n\n// Line color\nexport const DEFAULT_LINE_COLOR = \"#000\"\n\n// Stroke width\nexport const DEFAULT_STROKE_WIDTH = 1.5\nexport const VARIABLE_COLOR_STROKE_WIDTH = 2.5\n\n// Marker radius\nexport const DEFAULT_MARKER_RADIUS = 1.8\nexport const VARIABLE_COLOR_MARKER_RADIUS = 2.2\nexport const DISCONNECTED_DOTS_MARKER_RADIUS = 2.6\nexport const STATIC_SMALL_MARKER_RADIUS = 3\n\n// Line outline\nexport const DEFAULT_LINE_OUTLINE_WIDTH = 0.5\nexport const VARIABLE_COLOR_LINE_OUTLINE_WIDTH = 1.0\n\nexport interface LineStyleConfig {\n    strokeWidthFactor: number // multiplied by the base stroke width\n    opacity: number\n    showOutline: boolean\n}\n\nconst DEFAULT_LINE_STYLE: LineStyleConfig = {\n    strokeWidthFactor: 1,\n    opacity: 1,\n    showOutline: true,\n}\n\nexport const LINE_STYLE: Record<Emphasis, LineStyleConfig> = {\n    [Emphasis.Default]: DEFAULT_LINE_STYLE,\n    [Emphasis.Highlighted]: DEFAULT_LINE_STYLE,\n    [Emphasis.Muted]: {\n        strokeWidthFactor: 0.66,\n        opacity: GRAPHER_OPACITY_MUTED,\n        showOutline: false,\n    },\n}\n\n// Legend\nexport const LEGEND_PADDING = 25\nexport const NUMERIC_LEGEND_STYLE: LegendStyleConfig = {\n    marker: { default: { stroke: \"#ffffff\", strokeWidth: 1 } },\n}\nexport const CATEGORICAL_LEGEND_STYLE: LegendStyleConfig = {\n    marker: {\n        default: { opacity: 1 },\n        muted: { opacity: GRAPHER_OPACITY_MUTED },\n    },\n    text: { muted: { opacity: GRAPHER_OPACITY_MUTED } },\n}\n\nexport interface LinePoint {\n    x: number\n    y: number\n    colorValue?: CoreValueType\n}\n\nexport interface PlacedPoint {\n    x: number\n    y: number\n    color: Color\n    time: number\n}\n\nexport interface LineChartSeries extends ChartSeries {\n    displayName: string\n    isProjection?: boolean\n    plotMarkersOnly?: boolean\n    points: LinePoint[]\n    entityName: EntityName\n    columnName: string\n    focus: InteractionState\n}\n\nexport interface PlacedLineChartSeries extends LineChartSeries {\n    placedPoints: PlacedPoint[]\n}\n\nexport interface RenderLineChartSeries extends PlacedLineChartSeries {\n    hover: InteractionState\n    emphasis: Emphasis\n}\n\nexport interface LineChartManager extends ChartManager {\n    highlightedTimesInLineChart?: Time[]\n    lineStrokeWidth?: number\n    canSelectMultipleEntities?: boolean // used to pick an appropriate series name\n    hasScatter?: boolean // x-axis config is ignored if a secondary scatter plot is present\n}\n","import * as R from \"remeda\"\nimport { Color } from \"@ourworldindata/utils\"\nimport { ColorScheme } from \"./ColorScheme\"\nimport { getLeastUsedColor } from \"./ColorUtils\"\n\ntype CategoryId = string\nexport type CategoricalColorMap = Map<CategoryId, Color>\nexport type CategoricalColorMapReadonly = ReadonlyMap<CategoryId, Color>\n\nexport interface CategoricalColorAssignerProps {\n    colorScheme: ColorScheme\n    invertColorScheme?: boolean\n\n    /** The custom color mappings (most likely author-specified) to use. */\n    colorMap?: CategoricalColorMap\n\n    /**\n     * A cache for custom colors or automatically selected colors for each identifier\n     * encountered.\n     *\n     * In the Grapher, this is persisted across charts, so that a line chart\n     * that turns into a bar chart will have a matching color scheme across\n     * both states.\n     */\n    autoColorMapCache?: CategoricalColorMap\n\n    numColorsInUse?: number\n}\n\n/**\n * Assigns custom categorical colors, e.g. specified by an author for entities or variables.\n *\n * When an identifier doesn't have an assigned color, it uses the least used color in the scheme.\n *\n * Keeps a cache so that identical identifiers are assigned consistent colors. See\n * Grapher#seriesColorMap for an example of a cache.\n */\nexport class CategoricalColorAssigner {\n    private colorScheme: ColorScheme\n    private invertColorScheme: boolean\n    private colorMap: CategoricalColorMapReadonly\n    private autoColorMapCache: CategoricalColorMap\n    private numColorsInUse?: number\n\n    constructor(props: CategoricalColorAssignerProps) {\n        this.colorScheme = props.colorScheme\n        this.invertColorScheme = props.invertColorScheme ?? false\n        this.colorMap = props.colorMap ?? new Map()\n        this.autoColorMapCache = props.autoColorMapCache ?? new Map()\n        this.numColorsInUse = props.numColorsInUse\n    }\n\n    private get usedColors(): Color[] {\n        const merged: CategoricalColorMap = new Map([\n            ...this.autoColorMapCache,\n            ...this.colorMap,\n        ])\n        return Array.from(merged.values())\n    }\n\n    private get availableColors(): Color[] {\n        // copy the colors array because we might need to reverse it\n        const colors =\n            (this.numColorsInUse !== undefined\n                ? this.colorScheme.getColors(this.numColorsInUse)\n                : R.last(this.colorScheme.colorSets)\n            )?.slice() ?? []\n        if (this.invertColorScheme) return colors.toReversed()\n        else return colors\n    }\n\n    private get leastUsedColor(): Color {\n        const leastUsedColor = getLeastUsedColor(\n            this.availableColors,\n            this.usedColors\n        )\n        // TODO handle this better?\n        if (leastUsedColor === undefined) {\n            // eslint-disable-next-line no-console\n            console.trace(\"Least used color is undefined, using black.\", {\n                availableColors: this.availableColors,\n                usedColors: this.usedColors,\n            })\n        }\n        return leastUsedColor ?? \"#000\"\n    }\n\n    assign(id: CategoryId): Color {\n        let color = this.colorMap.get(id)\n        if (color === undefined) color = this.autoColorMapCache.get(id)\n        if (color === undefined && this.colorScheme.colorMap)\n            color = this.colorScheme.colorMap[id]\n        if (color === undefined) color = this.leastUsedColor\n        this.autoColorMapCache.set(id, color)\n        return color\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    AxisAlign,\n    AxisConfigInterface,\n    ColumnSlug,\n    EntityName,\n    PrimitiveType,\n    ScaleType,\n    SeriesName,\n    SeriesStrategy,\n} from \"@ourworldindata/types\"\nimport {\n    LineChartSeries,\n    PlacedLineChartSeries,\n    PlacedPoint,\n    RenderLineChartSeries,\n} from \"./LineChartConstants\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { LineChartState } from \"./LineChartState\"\nimport { darkenColorForLine } from \"../color/ColorUtils\"\nimport {\n    byHoverThenFocusState,\n    getHoverStateForSeries,\n} from \"../chart/ChartUtils\"\nimport { resolveEmphasis } from \"../interaction/Emphasis\"\n\nexport type AnnotationsMap = Map<PrimitiveType, Set<PrimitiveType>>\n\nexport interface GetSeriesNameArgs {\n    entityName: EntityName\n    columnName: string\n    seriesStrategy: SeriesStrategy\n    hasMultipleEntitiesSelected?: boolean\n    allowsMultiEntitySelection?: boolean\n}\n\n/**\n * Unique identifier for a series that is shared between line and slope charts\n * since focus states are built on top of it.\n */\nexport function getSeriesName({\n    entityName,\n    columnName,\n    seriesStrategy,\n    hasMultipleEntitiesSelected,\n    allowsMultiEntitySelection,\n}: GetSeriesNameArgs): SeriesName {\n    // When plotting entities as series, use the entity name as the unique identifier\n    if (seriesStrategy === SeriesStrategy.entity) return entityName\n\n    // When plotting columns as series, use the column name. Prepend the entity\n    // name if multiple entities can be selected or are currently selected to\n    // ensure unique series names across all possible selection states\n    return allowsMultiEntitySelection || hasMultipleEntitiesSelected\n        ? `${entityName} - ${columnName}`\n        : columnName\n}\n\nexport function getDisplayName({\n    entityName,\n    columnName,\n    seriesStrategy,\n    hasMultipleEntitiesSelected,\n}: Omit<GetSeriesNameArgs, \"canSelectMultipleEntities\">): SeriesName {\n    // When plotting entities as series, each series represents one entity\n    if (seriesStrategy === SeriesStrategy.entity) return entityName\n\n    // When plotting columns as series, show just the column name by default.\n    // Only prepend the entity name when multiple entities are currently selected\n    // (this is different from series names that always include the entity name)\n    return hasMultipleEntitiesSelected\n        ? `${entityName} – ${columnName}` // Uses en dash for display\n        : columnName\n}\n\nexport function getColorKey({\n    entityName,\n    columnName,\n    seriesStrategy,\n    hasMultipleEntitiesSelected,\n}: Omit<GetSeriesNameArgs, \"canSelectMultipleEntities\">): SeriesName {\n    // When plotting entities as series, each entity gets its own color\n    if (seriesStrategy === SeriesStrategy.entity) return entityName\n\n    // When plotting columns as series, show just the column name by default.\n    // Only prepend the entity name when multiple entities are currently selected\n    // (this is different from series names that always include the entity name)\n    return hasMultipleEntitiesSelected\n        ? `${entityName} - ${columnName}`\n        : columnName\n}\n\nexport function getAnnotationsMap(\n    table: OwidTable,\n    slug: ColumnSlug\n): AnnotationsMap | undefined {\n    return table\n        .getAnnotationColumnForColumn(slug)\n        ?.getUniqueValuesGroupedBy(table.entityNameSlug)\n}\n\nexport function getAnnotationsForSeries(\n    annotationsMap: AnnotationsMap | undefined,\n    seriesName: SeriesName\n): string | undefined {\n    const annotations = annotationsMap?.get(seriesName)\n    if (!annotations) return undefined\n    return Array.from(annotations.values())\n        .filter((anno) => anno)\n        .join(\" & \")\n}\n\nexport function getYAxisConfigDefaults(\n    config?: AxisConfigInterface\n): AxisConfigInterface {\n    return {\n        nice: config?.scaleType !== ScaleType.log,\n        // If we only have a single y value (probably 0), we want the\n        // horizontal axis to be at the bottom of the chart.\n        // see https://github.com/owid/owid-grapher/pull/975#issuecomment-890798547\n        singleValueAxisPointAlign: AxisAlign.start,\n        // Default to 0 if not set\n        min: 0,\n    }\n}\n\nexport function toPlacedLineChartSeries(\n    series: readonly LineChartSeries[],\n    { chartState, dualAxis }: { chartState: LineChartState; dualAxis: DualAxis }\n): PlacedLineChartSeries[] {\n    const { horizontalAxis, verticalAxis } = dualAxis\n\n    return series.toReversed().map((series) => {\n        const placedPoints = series.points.map((point): PlacedPoint => {\n            const color = chartState.hasColorScale\n                ? darkenColorForLine(\n                      chartState.getColorScaleColor(point.colorValue)\n                  )\n                : series.color\n\n            return {\n                time: point.x,\n                x: _.round(horizontalAxis.place(point.x), 1),\n                y: _.round(verticalAxis.place(point.y), 1),\n                color,\n            }\n        })\n        return { ...series, placedPoints }\n    })\n}\n\nexport function toRenderLineChartSeries(\n    placedSeries: PlacedLineChartSeries[],\n    {\n        isFocusModeActive = false,\n        isHoverModeActive = false,\n        hoveredSeriesNames = [],\n    }: {\n        isFocusModeActive?: boolean\n        isHoverModeActive?: boolean\n        hoveredSeriesNames?: SeriesName[]\n    }\n): RenderLineChartSeries[] {\n    let series: RenderLineChartSeries[] = placedSeries.map((series) => {\n        const hover = getHoverStateForSeries(series, {\n            isHoverModeActive,\n            hoveredSeriesNames,\n        })\n        const emphasis = resolveEmphasis({ hover, focus: series.focus })\n\n        return { ...series, hover, emphasis }\n    })\n\n    // draw lines on top of markers-only series\n    series = _.sortBy(series, (series) => !series.plotMarkersOnly)\n\n    // sort by interaction state so that foreground series\n    // are drawn on top of background series\n    if (isFocusModeActive || isHoverModeActive) {\n        series = _.sortBy(series, byHoverThenFocusState)\n    }\n\n    return series\n}\n","import { action, computed, observable, makeObservable } from \"mobx\"\nimport { SeriesName } from \"@ourworldindata/types\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\n\nexport class FocusArray {\n    private store: Set<SeriesName> = new Set()\n\n    constructor() {\n        makeObservable<FocusArray, \"store\">(this, { store: observable })\n    }\n\n    @computed get seriesNameSet(): Set<SeriesName> {\n        return this.store\n    }\n\n    @computed get seriesNames(): SeriesName[] {\n        return Array.from(this.store)\n    }\n\n    @computed get isEmpty(): boolean {\n        return this.store.size === 0\n    }\n\n    @computed get hasFocusedSeries(): boolean {\n        return !this.isEmpty\n    }\n\n    @computed get length(): number {\n        return this.store.size\n    }\n\n    /**\n     * Whether a series is currently focused\n     */\n    has(seriesName: SeriesName): boolean {\n        return this.store.has(seriesName)\n    }\n\n    /**\n     * Get the interaction state of a series\n     */\n    state(seriesName: SeriesName): InteractionState {\n        return new InteractionState(this.has(seriesName), !this.isEmpty)\n    }\n\n    @action.bound add(...seriesNames: SeriesName[]): this {\n        for (const seriesName of seriesNames) {\n            this.store.add(seriesName)\n        }\n        return this\n    }\n\n    @action.bound remove(...seriesNames: SeriesName[]): this {\n        for (const seriesName of seriesNames) {\n            this.store.delete(seriesName)\n        }\n        return this\n    }\n\n    @action.bound clearAllAndAdd(...seriesNames: SeriesName[]): this {\n        this.clear()\n        this.add(...seriesNames)\n        return this\n    }\n\n    @action.bound toggle(...seriesNames: SeriesName[]): this {\n        for (const seriesName of seriesNames) {\n            if (this.has(seriesName)) {\n                this.remove(seriesName)\n            } else {\n                this.add(seriesName)\n            }\n        }\n        return this\n    }\n\n    @action.bound clear(): void {\n        this.store.clear()\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { Color } from \"@ourworldindata/utils\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    ScaleType,\n    EntityName,\n    SeriesStrategy,\n    FacetStrategy,\n    CoreValueType,\n    MissingDataStrategy,\n    ColorScaleConfigInterface,\n    ColorSchemeName,\n    ChartErrorInfo,\n} from \"@ourworldindata/types\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport {\n    LineChartSeries,\n    LineChartManager,\n    LinePoint,\n    DEFAULT_LINE_COLOR,\n} from \"./LineChartConstants\"\nimport {\n    OwidTable,\n    CoreColumn,\n    isNotErrorValue,\n} from \"@ourworldindata/core-table\"\nimport {\n    autoDetectSeriesStrategy,\n    autoDetectYColumnSlugs,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport { OWID_NO_DATA_GRAY } from \"../color/ColorConstants\"\nimport { CategoricalColorAssigner } from \"../color/CategoricalColorAssigner\"\nimport {\n    AnnotationsMap,\n    getAnnotationsMap,\n    getColorKey,\n    getDisplayName,\n    getSeriesName,\n} from \"./LineChartHelpers\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\n\nexport class LineChartState implements ChartState, ColorScaleManager {\n    manager: LineChartManager\n\n    colorScale: ColorScale\n    defaultBaseColorScheme = ColorSchemeName.OwidDistinctLines\n    defaultNoDataColor = OWID_NO_DATA_GRAY\n\n    constructor({ manager }: { manager: LineChartManager }) {\n        this.manager = manager\n        this.colorScale = manager.colorScaleOverride ?? new ColorScale(this)\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTableFromGrapher(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    @computed get transformedTable(): OwidTable {\n        let table = this.transformedTableFromGrapher\n        // The % growth transform cannot be applied in transformTable() because it will filter out\n        // any rows before startHandleTimeBound and change the timeline bounds.\n        const { isRelativeMode, startTime } = this.manager\n        if (isRelativeMode && startTime !== undefined) {\n            table = table.toTotalGrowthForEachColumnComparedToStartTime(\n                startTime,\n                this.manager.yColumnSlugs ?? []\n            )\n        }\n        return table\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        // Currently we set skipParsing=true on these columns to be backwards-compatible\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        if (this.isLogScale)\n            table = table.replaceNonPositiveCellsForLogScale(this.yColumnSlugs)\n\n        if (this.colorColumnSlug) {\n            table = table\n                // TODO: remove this filter once we don't have mixed type columns in datasets\n                // Currently we set skipParsing=true on these columns to be backwards-compatible\n                .replaceNonNumericCellsWithErrorValues([this.colorColumnSlug])\n                .interpolateColumnWithTolerance(this.colorColumnSlug)\n        }\n\n        // drop all data when the author chose to hide entities with missing data and\n        // at least one of the variables has no data for the current entity\n        if (\n            this.missingDataStrategy === MissingDataStrategy.hide &&\n            table.hasAnyColumnNoValidValue(this.yColumnSlugs)\n        ) {\n            table = table.dropAllRows()\n        }\n\n        return table\n    }\n\n    transformTableForSelection(table: OwidTable): OwidTable {\n        // if entities with partial data are not plotted,\n        // make sure they don't show up in the entity selector\n        if (this.missingDataStrategy === MissingDataStrategy.hide) {\n            table = table\n                .replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n                .dropEntitiesThatHaveNoDataInSomeColumn(this.yColumnSlugs)\n        }\n\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    @computed get yColumnSlugs(): string[] {\n        return autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get colorColumnSlug(): string | undefined {\n        return this.manager.colorColumnSlug\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.yColumnSlugs.map((slug) => this.transformedTable.get(slug))\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get colorColumn(): CoreColumn {\n        return this.transformedTable.get(this.colorColumnSlug)\n    }\n\n    @computed get isLogScale(): boolean {\n        return this.manager.yAxisConfig?.scaleType === ScaleType.log\n    }\n\n    @computed get colorScheme(): ColorScheme {\n        return (\n            (this.manager.baseColorScheme\n                ? ColorSchemes.get(this.manager.baseColorScheme)\n                : null) ?? ColorSchemes.get(this.defaultBaseColorScheme)\n        )\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        return (\n            // For faceted charts, we have to get the values of inputTable before it's filtered by\n            // the faceting logic.\n            this.manager.colorScaleColumnOverride ?? // We need to use inputTable in order to get consistent coloring for a variable across\n            // charts, e.g. each continent being assigned to the same color.\n            // inputTable is unfiltered, so it contains every value that exists in the variable.\n            this.inputTable.get(this.colorColumnSlug)\n        )\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return (\n            ColorScaleConfig.fromDSL(this.colorColumn.def) ??\n            this.manager.colorScale\n        )\n    }\n\n    @computed get categoricalColorAssigner(): CategoricalColorAssigner {\n        return new CategoricalColorAssigner({\n            colorScheme: this.colorScheme,\n            invertColorScheme: this.manager.invertColorScheme,\n            colorMap:\n                this.seriesStrategy === SeriesStrategy.entity\n                    ? this.inputTable.entityNameColorIndex\n                    : this.inputTable.columnDisplayNameToColorMap,\n            autoColorMapCache: this.manager.seriesColorMap,\n        })\n    }\n\n    @computed get hasColorScale(): boolean {\n        return !this.colorColumn.isMissing\n    }\n\n    getColorScaleColor(value: CoreValueType | undefined): Color {\n        return this.colorScale.getColor(value) ?? DEFAULT_LINE_COLOR\n    }\n\n    @computed get annotationsMap(): AnnotationsMap | undefined {\n        return getAnnotationsMap(this.inputTable, this.yColumnSlugs[0])\n    }\n\n    @computed get hasNoDataBin(): boolean {\n        if (!this.hasColorScale) return false\n        return this.colorColumn.valuesIncludingErrorValues.some(\n            (value) => !isNotErrorValue(value)\n        )\n    }\n\n    @computed get missingDataStrategy(): MissingDataStrategy {\n        return this.manager.missingDataStrategy || MissingDataStrategy.auto\n    }\n\n    @computed get seriesStrategy(): SeriesStrategy {\n        return autoDetectSeriesStrategy(this.manager, true)\n    }\n\n    @computed get series(): readonly LineChartSeries[] {\n        const series = this.yColumns.flatMap((col) =>\n            col.uniqEntityNames.map(\n                (entityName): LineChartSeries =>\n                    this.constructSingleSeries(entityName, col)\n            )\n        )\n\n        // The lines should be plotted in the order of the selected entities\n        const { selectedEntityNames } = this.selectionArray\n        const entityIndex = new Map(\n            selectedEntityNames.map((name, index) => [name, index])\n        )\n        const sortedSeries = _.sortBy(series, (series) =>\n            entityIndex.get(series.seriesName)\n        )\n\n        return sortedSeries\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        const strategies: FacetStrategy[] = [FacetStrategy.none]\n\n        if (this.selectionArray.numSelectedEntities > 1)\n            strategies.push(FacetStrategy.entity)\n\n        const numNonProjectionColumns = this.yColumns.filter(\n            (c) => !c.display?.isProjection\n        ).length\n        if (numNonProjectionColumns > 1) strategies.push(FacetStrategy.metric)\n\n        return strategies\n    }\n\n    private constructSingleSeries(\n        entityName: EntityName,\n        column: CoreColumn\n    ): LineChartSeries {\n        const {\n            manager: { canSelectMultipleEntities },\n            transformedTable: { availableEntityNames },\n            seriesStrategy,\n            hasColorScale,\n            colorColumn,\n        } = this\n\n        // Construct the points\n        const timeValues = column.originalTimeColumn.valuesIncludingErrorValues\n        const values = column.valuesIncludingErrorValues\n        const colorValues = colorColumn.valuesIncludingErrorValues\n        // If Y and Color are the same column, we need to get rid of any duplicate rows.\n        // Duplicates occur because Y doesn't have tolerance applied, but Color does.\n        const rowIndexes = _.sortedUniqBy(\n            this.transformedTable.rowIndicesByEntityName\n                .get(entityName)!\n                .filter((index) => _.isNumber(values[index])),\n            (index) => timeValues[index]\n        )\n        const points = rowIndexes.map((index) => {\n            const point: LinePoint = {\n                x: timeValues[index] as number,\n                y: values[index] as number,\n            }\n            if (hasColorScale) {\n                const colorValue = colorValues[index]\n                point.colorValue = isNotErrorValue(colorValue)\n                    ? colorValue\n                    : undefined\n            }\n            return point\n        })\n\n        // Construct series properties\n        const columnName = column.nonEmptyDisplayName\n        const hasMultipleEntitiesSelected = availableEntityNames.length > 1\n        const seriesName = getSeriesName({\n            entityName,\n            columnName,\n            seriesStrategy,\n            hasMultipleEntitiesSelected,\n            allowsMultiEntitySelection: canSelectMultipleEntities,\n        })\n        const shortEntityName = getShortNameForEntity(entityName)\n        const displayName = getDisplayName({\n            entityName: shortEntityName ?? entityName,\n            columnName,\n            seriesStrategy,\n            hasMultipleEntitiesSelected,\n        })\n\n        let seriesColor: Color\n        if (hasColorScale) {\n            const colorValue = R.last(points)?.colorValue\n            seriesColor = this.getColorScaleColor(colorValue)\n        } else {\n            seriesColor = this.categoricalColorAssigner.assign(\n                getColorKey({\n                    entityName,\n                    columnName,\n                    seriesStrategy,\n                    hasMultipleEntitiesSelected,\n                })\n            )\n        }\n\n        return {\n            points,\n            seriesName,\n            entityName,\n            columnName,\n            displayName,\n            isProjection: column.isProjection,\n            plotMarkersOnly: column.display?.plotMarkersOnlyInLineChart,\n            color: seriesColor,\n            focus: this.focusArray.state(seriesName),\n        }\n    }\n\n    toHorizontalAxis(config: AxisConfig): HorizontalAxis {\n        const axis = config.toHorizontalAxis()\n\n        // Update domain\n        axis.updateDomainPreservingUserSettings(\n            this.transformedTable.timeDomainFor(this.yColumnSlugs)\n        )\n\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.inputTable.timeColumn\n        axis.hideFractionalTicks = true\n\n        return axis\n    }\n\n    toVerticalAxis(config: AxisConfig): VerticalAxis {\n        const axis = config.toVerticalAxis()\n\n        // Update domain\n        const yDomain = this.transformedTable.domainFor(this.yColumnSlugs)\n        axis.updateDomainPreservingUserSettings([\n            Math.min(axis.domain[0], yDomain[0]),\n            Math.max(axis.domain[1], yDomain[1]),\n        ])\n\n        // All y axis points are integral, don't show fractional ticks in that case\n        axis.hideFractionalTicks = this.yColumns.every(\n            (yColumn) => yColumn.isAllIntegers\n        )\n\n        // Line charts don't have a y-axis label\n        axis.label = \"\"\n\n        axis.formatColumn = this.formatColumn\n\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n        if (!this.series.length)\n            return {\n                reason: `No data for the selected ${entityTypePlural}`,\n            }\n        return { reason: \"\" }\n    }\n}\n","import { computed, makeObservable } from \"mobx\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport {\n    SlopeChartManager,\n    RawSlopeChartSeries,\n    SlopeChartSeries,\n} from \"./SlopeChartConstants\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport {\n    ColumnSlug,\n    ScaleType,\n    MissingDataStrategy,\n    SeriesStrategy,\n    FacetStrategy,\n    Time,\n    EntityName,\n    ColorSchemeName,\n    ChartErrorInfo,\n} from \"@ourworldindata/types\"\nimport {\n    autoDetectSeriesStrategy,\n    autoDetectYColumnSlugs,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { CategoricalColorAssigner } from \"../color/CategoricalColorAssigner\"\nimport {\n    AnnotationsMap,\n    getAnnotationsForSeries,\n    getAnnotationsMap,\n    getColorKey,\n    getDisplayName,\n    getSeriesName,\n} from \"../lineCharts/LineChartHelpers\"\nimport { domainExtent } from \"@ourworldindata/utils\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { VerticalAxis } from \"../axis/Axis\"\n\nexport class SlopeChartState implements ChartState {\n    manager: SlopeChartManager\n\n    defaultBaseColorScheme = ColorSchemeName.OwidDistinctLines\n\n    constructor({ manager }: { manager: SlopeChartManager }) {\n        this.manager = manager\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTableFromGrapher(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    @computed get transformedTable(): OwidTable {\n        let table = this.transformedTableFromGrapher\n        // The % growth transform cannot be applied in transformTable() because it will filter out\n        // any rows before startTime and change the timeline bounds.\n        const { startTime } = this.manager\n        if (this.isRelativeMode && startTime !== undefined) {\n            table = table.toTotalGrowthForEachColumnComparedToStartTime(\n                startTime,\n                this.yColumnSlugs ?? []\n            )\n        }\n        return table\n    }\n\n    transformTable(table: OwidTable) {\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        if (this.isLogScale)\n            table = table.replaceNonPositiveCellsForLogScale(this.yColumnSlugs)\n\n        this.yColumnSlugs.forEach((slug) => {\n            table = table.interpolateColumnWithTolerance(slug)\n        })\n\n        return table\n    }\n\n    transformTableForSelection(table: OwidTable): OwidTable {\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        this.yColumnSlugs.forEach((slug) => {\n            table = table.interpolateColumnWithTolerance(slug)\n        })\n\n        // if time selection is disabled, then filter all entities that\n        // don't have data for the current time period\n        if (!this.manager.hasTimeline && this.startTime !== this.endTime) {\n            table = table\n                .filterByTargetTimes([this.startTime, this.endTime])\n                .dropEntitiesThatHaveSomeMissingOrErrorValueInAllColumns(\n                    this.yColumnSlugs\n                )\n        }\n\n        // if entities with partial data are not plotted,\n        // make sure they don't show up in the entity selector\n        if (this.missingDataStrategy === MissingDataStrategy.hide) {\n            table = table.dropEntitiesThatHaveNoDataInSomeColumn(\n                this.yColumnSlugs\n            )\n        }\n\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    @computed get yColumnSlugs(): ColumnSlug[] {\n        return autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.yColumnSlugs.map((slug) => this.transformedTable.get(slug))\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get isRelativeMode(): boolean {\n        return !!this.manager.isRelativeMode\n    }\n\n    @computed get isLogScale(): boolean {\n        return this.manager.yAxisConfig?.scaleType === ScaleType.log\n    }\n\n    @computed get missingDataStrategy(): MissingDataStrategy {\n        return this.manager.missingDataStrategy || MissingDataStrategy.auto\n    }\n\n    @computed get yScaleType(): ScaleType {\n        return this.manager.yAxisConfig?.scaleType ?? ScaleType.linear\n    }\n\n    @computed get colorScheme(): ColorScheme {\n        return (\n            (this.manager.baseColorScheme\n                ? ColorSchemes.get(this.manager.baseColorScheme)\n                : null) ?? ColorSchemes.get(this.defaultBaseColorScheme)\n        )\n    }\n\n    @computed get startTime(): Time {\n        return this.transformedTable.minTime ?? 0\n    }\n\n    @computed get endTime(): Time {\n        return this.transformedTable.maxTime ?? 0\n    }\n\n    @computed get seriesStrategy(): SeriesStrategy {\n        return autoDetectSeriesStrategy(this.manager, true)\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        const strategies: FacetStrategy[] = [FacetStrategy.none]\n\n        if (this.selectionArray.numSelectedEntities > 1)\n            strategies.push(FacetStrategy.entity)\n\n        if (this.yColumns.length > 1) strategies.push(FacetStrategy.metric)\n\n        return strategies\n    }\n\n    @computed get categoricalColorAssigner(): CategoricalColorAssigner {\n        return new CategoricalColorAssigner({\n            colorScheme: this.colorScheme,\n            invertColorScheme: this.manager.invertColorScheme,\n            colorMap:\n                this.seriesStrategy === SeriesStrategy.entity\n                    ? this.inputTable.entityNameColorIndex\n                    : this.inputTable.columnDisplayNameToColorMap,\n            autoColorMapCache: this.manager.seriesColorMap,\n        })\n    }\n\n    @computed get annotationsMap(): AnnotationsMap | undefined {\n        return getAnnotationsMap(this.inputTable, this.yColumnSlugs[0])\n    }\n\n    private constructSingleSeries(\n        entityName: EntityName,\n        column: CoreColumn\n    ): RawSlopeChartSeries {\n        const { startTime, endTime, seriesStrategy } = this\n        const { canSelectMultipleEntities } = this.manager\n        const { availableEntityNames } = this.transformedTable\n\n        const columnName = column.nonEmptyDisplayName\n        const hasMultipleEntitiesSelected = availableEntityNames.length > 1\n        const seriesName = getSeriesName({\n            entityName,\n            columnName,\n            seriesStrategy,\n            hasMultipleEntitiesSelected,\n            allowsMultiEntitySelection: canSelectMultipleEntities,\n        })\n        const shortEntityName = getShortNameForEntity(entityName)\n        const displayName = getDisplayName({\n            entityName: shortEntityName ?? entityName,\n            columnName,\n            seriesStrategy,\n            hasMultipleEntitiesSelected,\n        })\n\n        const owidRowByTime = column.owidRowByEntityNameAndTime.get(entityName)\n        const start = owidRowByTime?.get(startTime)\n        const end = owidRowByTime?.get(endTime)\n\n        const colorKey = getColorKey({\n            entityName,\n            columnName,\n            seriesStrategy,\n            hasMultipleEntitiesSelected,\n        })\n        const color = this.categoricalColorAssigner.assign(colorKey)\n\n        const annotation = getAnnotationsForSeries(\n            this.annotationsMap,\n            seriesName\n        )\n\n        const focus = this.focusArray.state(seriesName)\n\n        return {\n            column,\n            seriesName,\n            entityName,\n            displayName,\n            color,\n            start,\n            end,\n            annotation,\n            focus,\n        }\n    }\n\n    isSeriesValid(series: RawSlopeChartSeries): series is SlopeChartSeries {\n        const {\n            start,\n            end,\n            column: { tolerance },\n        } = series\n\n        // if the start or end value is missing, we can't draw the slope\n        if (start?.value === undefined || end?.value === undefined) return false\n\n        // sanity check (might happen if tolerance is enabled)\n        if (start.originalTime >= end.originalTime) return false\n\n        const isToleranceAppliedToStartValue =\n            start.originalTime !== this.startTime\n        const isToleranceAppliedToEndValue = end.originalTime !== this.endTime\n\n        // if tolerance has been applied to one of the values, then we require\n        // a minimal distance between the original times\n        if (isToleranceAppliedToStartValue || isToleranceAppliedToEndValue) {\n            return end.originalTime - start.originalTime >= tolerance\n        }\n\n        return true\n    }\n\n    // Usually we drop rows with missing data in the transformTable function.\n    // But if we did that for slope charts, we wouldn't know whether a slope\n    // has been dropped because it actually had no data or a sibling slope had\n    // no data. But we need that information for the \"No data\" section. That's\n    // why the filtering happens here, so that the noDataSeries can be populated\n    // correctly.\n    private shouldSeriesBePlotted(\n        series: RawSlopeChartSeries\n    ): series is SlopeChartSeries {\n        if (!this.isSeriesValid(series)) return false\n\n        // when the missing data strategy is set to \"hide\", we might\n        // choose not to plot a valid series\n        if (\n            this.seriesStrategy === SeriesStrategy.column &&\n            this.missingDataStrategy === MissingDataStrategy.hide\n        ) {\n            const allSeriesForEntity = this.rawSeriesByEntityName.get(\n                series.entityName\n            )\n            return !!allSeriesForEntity?.every((series) =>\n                this.isSeriesValid(series)\n            )\n        }\n\n        return true\n    }\n\n    @computed get rawSeries(): RawSlopeChartSeries[] {\n        return this.yColumns.flatMap((column) =>\n            this.selectionArray.selectedEntityNames.map((entityName) =>\n                this.constructSingleSeries(entityName, column)\n            )\n        )\n    }\n\n    @computed get rawSeriesByEntityName(): Map<\n        EntityName,\n        RawSlopeChartSeries[]\n    > {\n        const map = new Map<EntityName, RawSlopeChartSeries[]>()\n        this.rawSeries.forEach((series) => {\n            const { entityName } = series\n            if (!map.has(entityName)) map.set(entityName, [])\n            map.get(entityName)!.push(series)\n        })\n        return map\n    }\n\n    @computed get series(): SlopeChartSeries[] {\n        return this.rawSeries.filter((series) =>\n            this.shouldSeriesBePlotted(series)\n        )\n    }\n\n    @computed get allYValues(): number[] {\n        return this.series.flatMap((series) => [\n            series.start.value,\n            series.end.value,\n        ])\n    }\n\n    @computed get xDomain(): [number, number] {\n        return [this.startTime, this.endTime]\n    }\n\n    @computed get yDomainDefault(): [number, number] {\n        const defaultDomain: [number, number] = [Infinity, -Infinity]\n        return domainExtent(this.allYValues, this.yScaleType) ?? defaultDomain\n    }\n\n    toVerticalAxis(\n        config: AxisConfig,\n        {\n            yDomain,\n            yRange,\n        }: { yDomain: [number, number]; yRange: [number, number] }\n    ): VerticalAxis {\n        const axis = config.toVerticalAxis()\n        axis.domain = yDomain\n        axis.range = yRange\n        axis.formatColumn = this.yColumns[0]\n        axis.label = \"\"\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n        if (this.series.length === 0)\n            return {\n                reason: `No data for the selected ${entityTypePlural}`,\n            }\n        return { reason: \"\" }\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { match } from \"ts-pattern\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport {\n    DiscreteBarChartManager,\n    DiscreteBarItem,\n    DiscreteBarSeries,\n    YColumnMode,\n} from \"./DiscreteBarChartConstants\"\nimport {\n    CoreColumn,\n    isNotErrorValue,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport {\n    autoDetectSeriesStrategy,\n    autoDetectYColumnSlugs,\n    combineHistoricalAndProjectionColumns,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport {\n    AnnotationsMap,\n    getAnnotationsForSeries,\n    getAnnotationsMap,\n} from \"../lineCharts/LineChartHelpers\"\nimport {\n    ChartErrorInfo,\n    ColorScaleConfigInterface,\n    ColorSchemeName,\n    FacetStrategy,\n    ProjectionColumnInfo,\n    SeriesStrategy,\n    SortBy,\n    SortConfig,\n    SortOrder,\n} from \"@ourworldindata/types\"\nimport { OWID_ERROR_COLOR, OWID_NO_DATA_GRAY } from \"../color/ColorConstants\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport { FocusArray } from \"../focus/FocusArray\"\n\nexport class DiscreteBarChartState implements ChartState, ColorScaleManager {\n    manager: DiscreteBarChartManager\n\n    colorScale: ColorScale\n    defaultBaseColorScheme = ColorSchemeName.SingleColorDenim\n    defaultNoDataColor = OWID_NO_DATA_GRAY\n\n    constructor({ manager }: { manager: DiscreteBarChartManager }) {\n        this.manager = manager\n        this.colorScale = manager.colorScaleOverride ?? new ColorScale(this)\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        if (!this.yColumnSlugs.length) return table\n\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        // Combine historical and projected columns if needed\n        table = match(this.yColumnMode)\n            .with({ type: \"independent\" }, () =>\n                this.transformTableForIndependentColumns(table)\n            )\n            .with({ type: \"combined\" }, ({ info }) =>\n                this.transformTableForCombinedColumn(table, info)\n            )\n            .exhaustive()\n\n        if (this.colorColumnSlug) {\n            table = table\n                // TODO: remove this filter once we don't have mixed type columns in datasets\n                // Currently we set skipParsing=true on these columns to be backwards-compatible\n                .replaceNonNumericCellsWithErrorValues([this.colorColumnSlug])\n                .interpolateColumnWithTolerance(this.colorColumnSlug)\n        }\n\n        return table\n    }\n\n    private transformTableForIndependentColumns(table: OwidTable): OwidTable {\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        table = table.dropRowsWithErrorValuesForAllColumns(this.yColumnSlugs)\n\n        this.yColumnSlugs.forEach((slug) => {\n            table = table.interpolateColumnWithTolerance(slug)\n        })\n\n        return table\n    }\n\n    private transformTableForCombinedColumn(\n        table: OwidTable,\n        info: ProjectionColumnInfo\n    ): OwidTable {\n        const { historicalSlug, projectedSlug, combinedSlug } = info\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table.replaceNonNumericCellsWithErrorValues([\n            historicalSlug,\n            projectedSlug,\n        ])\n\n        // Interpolate both columns separately\n        table = table\n            .interpolateColumnWithTolerance(projectedSlug)\n            .interpolateColumnWithTolerance(historicalSlug)\n\n        table = combineHistoricalAndProjectionColumns(table, info, {\n            shouldAddIsProjectionColumn: true,\n        })\n\n        // Drop rows with error values for the combined column\n        table = table.dropRowsWithErrorValuesForColumn(combinedSlug)\n\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    /**\n     * Determines how Y columns should be processed for this chart.\n     *\n     * Returns \"combined\" mode when there is exactly one historical column and\n     * one projection column that form a valid pair. In this mode, they are merged\n     * into a single series.\n     *\n     * Falls back to \"independent\" mode otherwise, where each Y column is treated as\n     * an independent series.\n     */\n    @computed get yColumnMode(): YColumnMode {\n        const { projectionColumnInfoBySlug } = this.manager\n\n        const ySlugs = autoDetectYColumnSlugs(this.manager)\n\n        if (!projectionColumnInfoBySlug)\n            return { type: \"independent\", slugs: ySlugs }\n\n        const projectionSlugs = ySlugs.filter(\n            (slug) => this.inputTable.get(slug).isProjection\n        )\n\n        // We only support combining projected and historical data\n        // if there is exactly one column pair to combine\n        if (ySlugs.length !== 2 || projectionSlugs.length !== 1)\n            return { type: \"independent\", slugs: ySlugs }\n\n        // Get info for the projection column\n        const projectionSlug = projectionSlugs[0]\n        const info = projectionColumnInfoBySlug.get(projectionSlug)\n        if (!info) return { type: \"independent\", slugs: ySlugs }\n\n        // Verify the other slug is the matching historical column\n        const otherSlug = ySlugs.find((slug) => slug !== projectionSlug)\n        if (otherSlug !== info.historicalSlug)\n            return { type: \"independent\", slugs: ySlugs }\n\n        return { type: \"combined\", slugs: [info.combinedSlug], info }\n    }\n\n    @computed get yColumnSlugs(): string[] {\n        return this.yColumnMode.slugs\n    }\n\n    @computed get colorColumnSlug(): string | undefined {\n        return this.manager.colorColumnSlug\n    }\n\n    @computed get colorColumn(): CoreColumn {\n        return this.transformedTable.get(this.colorColumnSlug)\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.transformedTable.getColumns(this.yColumnSlugs)\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get annotationsMap(): AnnotationsMap | undefined {\n        const yColumnSlug =\n            this.yColumnMode.type === \"combined\"\n                ? this.yColumnMode.info.historicalSlug\n                : this.yColumnSlugs[0]\n        if (!yColumnSlug) return undefined\n        return getAnnotationsMap(this.inputTable, yColumnSlug)\n    }\n\n    @computed get hasProjectedData(): boolean {\n        return this.series.some((series) => series.isProjection)\n    }\n\n    /**\n     * The column that indicates whether each row is a projection.\n     * Only set when in combined mode.\n     */\n    @computed private get isProjectionColumn(): CoreColumn | undefined {\n        if (this.yColumnMode.type !== \"combined\") return undefined\n        return this.transformedTable.get(\n            this.yColumnMode.info.slugForIsProjectionColumn\n        )\n    }\n\n    @computed private get colorScheme(): ColorScheme {\n        const defaultColorScheme = this.defaultBaseColorScheme\n        const colorScheme = this.manager.baseColorScheme ?? defaultColorScheme\n\n        // Don't reuse the line chart's color scheme (typically owid-distinct)\n        // and use the default color scheme instead (single color)\n        return this.manager.hasLineChart || this.manager.hasSlopeChart\n            ? ColorSchemes.get(defaultColorScheme)\n            : ColorSchemes.get(colorScheme)\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        return (\n            // For faceted charts, we have to get the values of inputTable before it's filtered by\n            // the faceting logic.\n            this.manager.colorScaleColumnOverride ?? // We need to use inputTable in order to get consistent coloring for a variable across\n            // charts, e.g. each continent being assigned to the same color.\n            // inputTable is unfiltered, so it contains every value that exists in the variable.\n            this.inputTable.get(this.colorColumnSlug)\n        )\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return (\n            ColorScaleConfig.fromDSL(this.colorColumn.def) ??\n            this.manager.colorScale\n        )\n    }\n\n    @computed get hasColorScale(): boolean {\n        return !this.colorColumn.isMissing\n    }\n\n    @computed get hasNoDataBin(): boolean {\n        if (!this.hasColorScale) return false\n        return this.colorColumn.valuesIncludingErrorValues.some(\n            (value) => !isNotErrorValue(value)\n        )\n    }\n\n    @computed get seriesStrategy(): SeriesStrategy {\n        const autoStrategy = autoDetectSeriesStrategy(this.manager, true)\n        // TODO this is an inconsistency between LineChart and DiscreteBar.\n        // We should probably make it consistent at some point.\n        if (\n            autoStrategy === SeriesStrategy.column &&\n            this.selectionArray.numSelectedEntities > 1\n        ) {\n            return SeriesStrategy.entity\n        }\n        if (\n            autoStrategy === SeriesStrategy.entity &&\n            this.selectionArray.numSelectedEntities === 1 &&\n            this.yColumns.length > 1\n        ) {\n            return SeriesStrategy.column\n        }\n        return autoStrategy\n    }\n\n    private constructSeries(\n        col: CoreColumn,\n        indexes: number[]\n    ): DiscreteBarItem[] {\n        const {\n            transformedTable,\n            colorColumn,\n            hasColorScale,\n            isProjectionColumn,\n        } = this\n        const values = col.valuesIncludingErrorValues\n        const originalTimes = col.originalTimeColumn.valuesIncludingErrorValues\n        const entityNames =\n            transformedTable.entityNameColumn.valuesIncludingErrorValues\n        const colorValues = colorColumn.valuesIncludingErrorValues\n        const isProjectionValues =\n            isProjectionColumn?.valuesIncludingErrorValues\n        return indexes.map((index): DiscreteBarItem => {\n            const isColumnStrategy =\n                this.seriesStrategy === SeriesStrategy.column\n            const seriesName = isColumnStrategy\n                ? col.displayName\n                : (entityNames[index] as string)\n            const colorValue = isNotErrorValue(colorValues[index])\n                ? colorValues[index]\n                : undefined\n            const color = hasColorScale\n                ? this.colorScale.getColor(colorValue)\n                : isColumnStrategy\n                  ? col.def.color\n                  : transformedTable.getColorForEntityName(\n                        entityNames[index] as string\n                    )\n            const isProjection = isProjectionValues\n                ? (isProjectionValues[index] as boolean)\n                : col.isProjection\n            return {\n                yColumn: col,\n                seriesName,\n                value: values[index] as number,\n                time: originalTimes[index] as number,\n                colorValue,\n                color,\n                isProjection,\n            }\n        })\n    }\n\n    @computed get columnsAsSeries(): DiscreteBarItem[] {\n        return this.yColumns.flatMap((col) =>\n            this.constructSeries(col, col.validRowIndices.slice(0, 1))\n        )\n    }\n\n    @computed get entitiesAsSeries(): DiscreteBarItem[] {\n        const col = this.yColumns[0]\n        return this.constructSeries(col, col.validRowIndices)\n    }\n\n    @computed get sortConfig(): SortConfig {\n        return this.manager.sortConfig ?? {}\n    }\n\n    @computed get sortedRawSeries(): DiscreteBarItem[] {\n        const raw =\n            this.seriesStrategy === SeriesStrategy.entity\n                ? this.entitiesAsSeries\n                : this.columnsAsSeries\n\n        let sortByFunc: (item: DiscreteBarItem) => number | string | undefined\n        switch (this.sortConfig.sortBy) {\n            case SortBy.custom:\n                if (this.seriesStrategy === SeriesStrategy.entity) {\n                    sortByFunc = (item: DiscreteBarItem): number =>\n                        this.selectionArray.selectedEntityNames.indexOf(\n                            item.seriesName\n                        )\n                } else {\n                    sortByFunc = (): undefined => undefined\n                }\n                break\n            case SortBy.entityName:\n                sortByFunc = (item: DiscreteBarItem): string => item.seriesName\n                break\n            default:\n            case SortBy.total:\n            case SortBy.column: // we only have one yColumn, so total and column are the same\n                sortByFunc = (item: DiscreteBarItem): number => item.value\n                break\n        }\n        const sortedSeries = _.sortBy(raw, sortByFunc)\n        const sortOrder = this.sortConfig.sortOrder ?? SortOrder.desc\n        if (sortOrder === SortOrder.desc) return sortedSeries.toReversed()\n        else return sortedSeries\n    }\n\n    @computed private get valuesToColorsMap(): Map<number, string> {\n        const { manager, colorScheme, sortedRawSeries } = this\n\n        return colorScheme.getUniqValueColorMap(\n            _.uniq(sortedRawSeries.map((series) => series.value)),\n            !manager.invertColorScheme // negate here to be consistent with how things worked before\n        )\n    }\n\n    @computed get series(): DiscreteBarSeries[] {\n        const series = this.sortedRawSeries.map((rawSeries) => {\n            const {\n                value,\n                time,\n                colorValue,\n                seriesName,\n                color,\n                yColumn,\n                isProjection,\n            } = rawSeries\n            const series: DiscreteBarSeries = {\n                yColumn,\n                value,\n                time,\n                colorValue,\n                seriesName,\n                entityName: seriesName,\n                shortEntityName: getShortNameForEntity(seriesName),\n                annotation: getAnnotationsForSeries(\n                    this.annotationsMap,\n                    seriesName\n                ),\n                // the error color should never be used but I prefer it here instead of throwing an exception if something goes wrong\n                color:\n                    color ??\n                    this.valuesToColorsMap.get(value) ??\n                    OWID_ERROR_COLOR,\n                focus: this.focusArray.state(seriesName),\n                isProjection,\n            }\n            return series\n        })\n\n        return series\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        // if we have multi-dimension, multi-entity data (which is necessarily single-year),\n        // then *only* faceting makes sense. otherwise, faceting is not useful.\n        if (\n            this.yColumns.length > 1 &&\n            this.selectionArray.numSelectedEntities > 1\n        ) {\n            // if we have more than one unit, then faceting by entity is not allowed\n            // as comparing multiple units in a single chart isn't meaningful\n            const uniqueUnits = new Set(\n                this.yColumns.map((column) => column.shortUnit)\n            )\n            if (uniqueUnits.size > 1) {\n                return [FacetStrategy.metric]\n            }\n\n            return [FacetStrategy.entity, FacetStrategy.metric]\n        }\n\n        return [FacetStrategy.none]\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const column = this.yColumns[0]\n        if (!column) return { reason: \"No column to chart\" }\n\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n        // TODO is it better to use .series for this check?\n        return this.yColumns.every((col) => col.isEmpty)\n            ? {\n                  reason: `No data for the selected ${entityTypePlural}`,\n              }\n            : { reason: \"\" }\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { ChartState } from \"../chart/ChartInterface.js\"\nimport { ChartManager } from \"../chart/ChartManager.js\"\nimport {\n    ChartErrorInfo,\n    ColorSchemeName,\n    FacetStrategy,\n    MissingDataStrategy,\n    SeriesName,\n    SeriesStrategy,\n} from \"@ourworldindata/types\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    StackedPoint,\n    StackedRawSeries,\n    StackedSeries,\n} from \"./StackedConstants.js\"\nimport {\n    OwidTable,\n    CoreColumn,\n    isNotErrorValueOrEmptyCell,\n} from \"@ourworldindata/core-table\"\nimport {\n    autoDetectSeriesStrategy,\n    autoDetectYColumnSlugs,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils.js\"\nimport { ColorSchemes } from \"../color/ColorSchemes.js\"\nimport { SelectionArray } from \"../selection/SelectionArray.js\"\nimport {\n    CategoricalColorAssigner,\n    CategoricalColorMap,\n} from \"../color/CategoricalColorAssigner.js\"\nimport { BinaryMapPaletteE } from \"../color/CustomSchemes.js\"\nimport { FocusArray } from \"../focus/FocusArray.js\"\nimport { AxisConfig } from \"../axis/AxisConfig.js\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis.js\"\n\n// used in StackedBar charts to color negative and positive bars\nconst POSITIVE_COLOR = BinaryMapPaletteE.colorSets[0][0] // orange\nconst NEGATIVE_COLOR = BinaryMapPaletteE.colorSets[0][1] // blue\n\nexport abstract class AbstractStackedChartState implements ChartState {\n    manager: ChartManager\n\n    abstract shouldRunLinearInterpolation: boolean\n\n    abstract get series(): readonly StackedSeries<number>[]\n    abstract get yDomain(): [number, number]\n    abstract get useValueBasedColorScheme(): boolean\n\n    constructor({ manager }: { manager: ChartManager }) {\n        this.manager = manager\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table\n            .replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n            .dropRowsWithErrorValuesForAllColumns(this.yColumnSlugs)\n\n        if (this.shouldRunLinearInterpolation) {\n            this.yColumnSlugs.forEach((slug) => {\n                table = table.interpolateColumnLinearly(slug)\n            })\n        }\n\n        // Drop rows for which no valid data points exist for any display column\n        // after interpolation, which most likely means they lie at the start/end\n        // of the time range and were not extrapolated\n        if (this.missingDataStrategy !== MissingDataStrategy.show) {\n            table = table.dropRowsWithErrorValuesForAnyColumn(this.yColumnSlugs)\n        }\n\n        if (this.manager.isRelativeMode) {\n            table = this.isEntitySeries\n                ? table.toPercentageFromEachEntityForEachTime(\n                      this.yColumnSlugs[0]\n                  )\n                : table.toPercentageFromEachColumnForEachEntityAndTime(\n                      this.yColumnSlugs\n                  )\n        }\n        return table\n    }\n\n    transformTableForSelection(table: OwidTable): OwidTable {\n        // if entities with partial data are not plotted,\n        // make sure they don't show up in the entity selector\n        if (this.missingDataStrategy !== MissingDataStrategy.show) {\n            table = table\n                .replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n                .dropRowsWithErrorValuesForAllColumns(this.yColumnSlugs)\n\n            if (this.shouldRunLinearInterpolation) {\n                this.yColumnSlugs.forEach((slug) => {\n                    table = table.interpolateColumnLinearly(slug)\n                })\n            }\n\n            table = table.dropRowsWithErrorValuesForAnyColumn(this.yColumnSlugs)\n        }\n\n        return table\n    }\n\n    @computed get missingDataStrategy(): MissingDataStrategy {\n        return this.manager.missingDataStrategy || MissingDataStrategy.auto\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.transformedTable.getColumns(this.yColumnSlugs)\n    }\n\n    @computed get yColumnSlugs(): string[] {\n        return this.manager.yColumnSlugs ?? autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        // we can just use the first column for formatting, b/c we assume all columns have same type\n        return this.yColumns[0]\n    }\n\n    @computed get seriesStrategy(): SeriesStrategy {\n        return autoDetectSeriesStrategy(this.manager)\n    }\n\n    @computed\n    get columnsAsSeries(): readonly StackedRawSeries<number>[] {\n        return this.yColumns\n            .map((column) => {\n                return {\n                    isProjection: column.isProjection,\n                    seriesName: column.displayName,\n                    rows: column.owidRows,\n                    focus: this.focusArray.state(column.displayName),\n                }\n            })\n            .toReversed() // For stacked charts, we want the first selected series to be on top, so we reverse the order of the stacks.\n    }\n\n    @computed\n    get entitiesAsSeries(): readonly StackedRawSeries<number>[] {\n        if (!this.yColumns.length) return []\n\n        const { isProjection, owidRowsByEntityName } = this.yColumns[0]\n        return this.selectionArray.selectedEntityNames\n            .map((entityName) => {\n                return {\n                    isProjection,\n                    seriesName: entityName,\n                    shortEntityName: getShortNameForEntity(entityName),\n                    rows: owidRowsByEntityName.get(entityName) || [],\n                    focus: this.focusArray.state(entityName),\n                }\n            })\n            .toReversed() // For stacked charts, we want the first selected series to be on top, so we reverse the order of the stacks.\n    }\n\n    @computed\n    get rawSeries(): readonly StackedRawSeries<number>[] {\n        return this.isEntitySeries\n            ? this.entitiesAsSeries\n            : this.columnsAsSeries\n    }\n\n    @computed get seriesByName(): Map<SeriesName, StackedSeries<number>> {\n        return new Map(this.series.map((series) => [series.seriesName, series]))\n    }\n\n    @computed\n    get allStackedPoints(): readonly StackedPoint<number>[] {\n        return this.series.flatMap((series) => series.points)\n    }\n\n    @computed get colorMap(): CategoricalColorMap {\n        return this.isEntitySeries\n            ? this.inputTable.entityNameColorIndex\n            : this.inputTable.columnDisplayNameToColorMap\n    }\n\n    @computed get categoricalColorAssigner(): CategoricalColorAssigner {\n        const seriesCount = this.isEntitySeries\n            ? this.selectionArray.numSelectedEntities\n            : this.yColumns.length\n        return new CategoricalColorAssigner({\n            colorScheme:\n                (this.manager.baseColorScheme\n                    ? ColorSchemes.get(this.manager.baseColorScheme)\n                    : null) ??\n                ColorSchemes.get(ColorSchemeName.stackedAreaDefault),\n            invertColorScheme: this.manager.invertColorScheme,\n            colorMap: this.colorMap,\n            autoColorMapCache: this.manager.seriesColorMap,\n            numColorsInUse: seriesCount,\n        })\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    @computed get isEntitySeries(): boolean {\n        return this.seriesStrategy === SeriesStrategy.entity\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        const strategies: FacetStrategy[] = []\n\n        const { selectedEntityNames } = this.selectionArray\n        const areMultipleEntitiesSelected = selectedEntityNames.length > 1\n        const hasMultipleYColumns = this.yColumns.length > 1\n        const shortUnits = this.yColumns.map((column) => column.shortUnit)\n        const uniqueUnits = new Set(shortUnits)\n        const hasMultipleUnits = uniqueUnits.size > 1\n        const hasPercentageUnit = shortUnits.some(\n            (shortUnit) => shortUnit === \"%\"\n        )\n\n        // Normally StackedArea/StackedBar charts are always single-entity or single-column,\n        // but if we are ever in a mode where we have multiple entities selected and multiple columns, it only makes sense when faceted.\n        if (\n            // No facet strategy makes sense if columns are stacked and a single entity is selected\n            (!this.isEntitySeries && !areMultipleEntitiesSelected) ||\n            // No facet strategy makes sense if entities are stacked and we have a single column\n            (this.isEntitySeries && !hasMultipleYColumns)\n        )\n            strategies.push(FacetStrategy.none)\n\n        if (\n            // Facetting by entity makes sense if multiple entities are selected\n            areMultipleEntitiesSelected &&\n            // Stacking columns with different units isn't allowed\n            !hasMultipleUnits\n        )\n            strategies.push(FacetStrategy.entity)\n\n        if (\n            // Facetting by column makes sense if we have multiple columns\n            hasMultipleYColumns &&\n            // Stacking percentages doesn't make sense unless we're in relative mode\n            (!hasPercentageUnit || this.manager.isRelativeMode)\n        )\n            strategies.push(FacetStrategy.metric)\n\n        return strategies\n    }\n\n    @computed get unstackedSeries(): readonly StackedSeries<number>[] {\n        return this.rawSeries\n            .filter((series) => series.rows.length > 0)\n\n            .map((series) => {\n                const { isProjection, seriesName, rows } = series\n\n                const points = rows.map((row) => {\n                    const pointColor =\n                        row.value > 0 ? POSITIVE_COLOR : NEGATIVE_COLOR\n                    const time = row.originalTime\n                    return {\n                        position: time,\n                        time: time,\n                        formattedTime: this.formatColumn.formatTime(time),\n                        value: row.value,\n                        valueOffset: 0,\n                        interpolated:\n                            this.shouldRunLinearInterpolation &&\n                            isNotErrorValueOrEmptyCell(row.value) &&\n                            !isNotErrorValueOrEmptyCell(row.originalValue),\n                        // takes precedence over the series color if given\n                        color: this.useValueBasedColorScheme\n                            ? pointColor\n                            : undefined,\n                    }\n                })\n\n                return {\n                    seriesName,\n                    isProjection,\n                    points,\n                    isAllZeros: points.every((point) => point.value === 0),\n                    color: this.categoricalColorAssigner.assign(seriesName),\n                    focus: series.focus,\n                    shortEntityName: series.shortEntityName,\n                }\n            })\n    }\n\n    @computed get midpoints(): number[] {\n        let prevY = 0\n        return this.series.map((series) => {\n            const lastValue = R.last(series.points)\n            if (!lastValue) return 0\n\n            const y = lastValue.value + lastValue.valueOffset\n            const middleY = prevY + (y - prevY) / 2\n            prevY = y\n            return middleY\n        })\n    }\n\n    toHorizontalAxis(config: AxisConfig): HorizontalAxis {\n        const axis = config.toHorizontalAxis()\n\n        // Update domain\n        axis.updateDomainPreservingUserSettings(\n            this.transformedTable.timeDomainFor(this.yColumnSlugs)\n        )\n\n        axis.formatColumn = this.inputTable.timeColumn\n        axis.hideFractionalTicks = true\n\n        return axis\n    }\n\n    toVerticalAxis(config: AxisConfig): VerticalAxis {\n        const axis = config.toVerticalAxis()\n\n        // Use user settings for axis, unless relative mode\n        if (this.manager.isRelativeMode) axis.domain = [0, 100]\n        else axis.updateDomainPreservingUserSettings(this.yDomain)\n\n        axis.formatColumn = this.yColumns[0]\n\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n\n        const { yColumnSlugs } = this\n        if (!yColumnSlugs.length) return { reason: \"Missing variable\" }\n        if (!this.unstackedSeries.length)\n            return {\n                reason: `No data for the selected ${entityTypePlural}`,\n            }\n        if (!this.allStackedPoints.length)\n            return { reason: \"No matching points\" }\n        return { reason: \"\" }\n    }\n}\n","import * as R from \"remeda\"\nimport * as _ from \"lodash-es\"\nimport {\n    sortNumeric,\n    isArrayOfNumbers,\n    findGreatestCommonDivisorOfArray,\n    rollingMap,\n    omitUndefinedValues,\n    AxisConfigInterface,\n    lastOfNonEmptyArray,\n    Point,\n} from \"@ourworldindata/utils\"\nimport {\n    PlacedStackedAreaSeries,\n    StackedPoint,\n    StackedPointPositionType,\n    StackedSeries,\n    PlacedStackedBarSeries,\n} from \"./StackedConstants\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { Time } from \"@ourworldindata/types\"\nimport { StackedBarChartState } from \"./StackedBarChartState.js\"\n\n// This method shift up the Y Values of a Series with Points in place.\nexport const stackSeries = <PositionType extends StackedPointPositionType>(\n    seriesArr: readonly StackedSeries<PositionType>[]\n): readonly StackedSeries<PositionType>[] => {\n    seriesArr.forEach((series, seriesIndex) => {\n        if (!seriesIndex) return // The first series does not need to be shifted\n        series.points.forEach((point, pointIndex) => {\n            const pointBelowThisOne =\n                seriesArr[seriesIndex - 1].points[pointIndex]\n            point.valueOffset =\n                pointBelowThisOne.value + pointBelowThisOne.valueOffset\n        })\n    })\n    return seriesArr\n}\n\n// This method shifts up positive y values and shifts down negative y values of a Series with Points in place.\nexport const stackSeriesInBothDirections = <\n    PositionType extends StackedPointPositionType,\n>(\n    seriesArr: readonly StackedSeries<PositionType>[]\n): readonly StackedSeries<PositionType>[] => {\n    seriesArr.forEach((series, seriesIndex) => {\n        if (!seriesIndex) return // The first series does not need to be shifted\n        series.points.forEach((point, pointIndex) => {\n            const pointsBelowThisOne = seriesArr\n                .slice(0, seriesIndex)\n                .map((s) => s.points[pointIndex])\n            const pointBelowThisOne =\n                point.value < 0\n                    ? pointsBelowThisOne.findLast((p) => p.value < 0)\n                    : pointsBelowThisOne.findLast((p) => p.value >= 0)\n            point.valueOffset = pointBelowThisOne\n                ? pointBelowThisOne.value + pointBelowThisOne.valueOffset\n                : 0\n        })\n    })\n    return seriesArr\n}\n\n// Makes sure that values are evenly spaced\nexport function withUniformSpacing(values: number[]): number[] {\n    const deltas = rollingMap(values, (a, b) => b - a)\n    const gcd = findGreatestCommonDivisorOfArray(deltas)\n    if (gcd === null) return values\n    return _.range(values[0], values[values.length - 1] + gcd, gcd)\n}\n\n// Adds a Y = 0 value for each missing x value (where X is usually Time)\nexport const withMissingValuesAsZeroes = <\n    PositionType extends StackedPointPositionType,\n>(\n    seriesArr: readonly StackedSeries<PositionType>[],\n    { enforceUniformSpacing = false }: { enforceUniformSpacing?: boolean } = {}\n): StackedSeries<PositionType>[] => {\n    let allXValuesSorted = sortNumeric(\n        _.uniq(\n            seriesArr\n                .flatMap((series) => series.points)\n                .map((point) => point.position)\n        )\n    )\n\n    if (enforceUniformSpacing && isArrayOfNumbers(allXValuesSorted)) {\n        allXValuesSorted = withUniformSpacing(\n            allXValuesSorted\n        ) as PositionType[]\n    }\n\n    return seriesArr.map((series) => {\n        const pointsByPosition = _.keyBy(series.points, \"position\")\n        return {\n            ...series,\n            points: allXValuesSorted.map((position) => {\n                const point = pointsByPosition[position]\n                const value = point?.value ?? 0\n                const time = point?.time ?? 0\n                return omitUndefinedValues({\n                    time,\n                    position,\n                    value,\n                    valueOffset: 0,\n                    formattedTime: point?.formattedTime,\n                    missing: !point,\n                    interpolated: point?.interpolated,\n                    color: point?.color,\n                })\n            }),\n        }\n    })\n}\n\nexport function resolveCollision(\n    s1: StackedSeries<number>,\n    s2: StackedSeries<number>\n): StackedSeries<number> | undefined {\n    // Early return if one series is all zeroes\n    if (s1.isAllZeros && !s2.isAllZeros) return s2\n    if (s2.isAllZeros && !s1.isAllZeros) return s1\n\n    // Prefer series with a higher maximum value\n    const yMax1 = _.maxBy(s1.points, (p) => p.value)?.value ?? 0\n    const yMax2 = _.maxBy(s2.points, (p) => p.value)?.value ?? 0\n    if (yMax1 > yMax2) return s1\n    if (yMax2 > yMax1) return s2\n\n    // Prefer series with a higher last value\n    const yLast1 = R.last(s1.points)?.value ?? 0\n    const yLast2 = R.last(s2.points)?.value ?? 0\n    if (yLast1 > yLast2) return s1\n    if (yLast2 > yLast1) return s2\n\n    // Prefer series with a higher total area\n    const area1 = _.sumBy(s1.points, (p) => p.value)\n    const area2 = _.sumBy(s2.points, (p) => p.value)\n    if (area1 > area2) return s1\n    if (area2 > area1) return s2\n\n    return undefined // no preference\n}\n\nexport function getXAxisConfigDefaultsForStackedBar(\n    chartState: StackedBarChartState\n): AxisConfigInterface {\n    return {\n        hideGridlines: true,\n        domainValues: chartState.xValues,\n        ticks: chartState.xValues.map((value) => ({ value, priority: 2 })),\n    }\n}\n\nfunction placeStackedAreaPoint(\n    point: StackedPoint<number>,\n    dualAxis: DualAxis\n): Point {\n    const { horizontalAxis, verticalAxis } = dualAxis\n    return {\n        x: horizontalAxis.place(point.position),\n        y: verticalAxis.place(point.value + point.valueOffset),\n    }\n}\n\n// This places a whole series, but the points only represent the top of the area.\n// Later steps are necessary to display them as a filled area.\nfunction placeStackedAreaSeries(\n    series: StackedSeries<number>,\n    dualAxis: DualAxis\n): Point[] {\n    const { horizontalAxis, verticalAxis } = dualAxis\n\n    if (series.points.length > 1) {\n        return series.points.map((point) =>\n            placeStackedAreaPoint(point, dualAxis)\n        )\n    } else if (series.points.length === 1) {\n        // We only have one point, so make it so it stretches out over the whole x axis range\n        // There are two cases here that we need to consider:\n        // (1) In unfaceted charts, the x domain will be a single year, so we need to ensure that the area stretches\n        //     out over the full range of the x axis.\n        // (2) In faceted charts, the x domain may span multiple years, so we need to ensure that the area stretches\n        //     out only over year - 0.5 to year + 0.5, additionally making sure we don't put points outside the x range.\n        //\n        // -@marcelgerber, 2023-04-24\n        const point = series.points[0]\n        const y = verticalAxis.place(point.value + point.valueOffset)\n        const singleValueXDomain =\n            horizontalAxis.domain[0] === horizontalAxis.domain[1]\n\n        if (singleValueXDomain) {\n            // Case (1)\n            return [\n                { x: horizontalAxis.range[0], y },\n                { x: horizontalAxis.range[1], y },\n            ]\n        } else {\n            // Case (2)\n            const leftX = Math.max(\n                horizontalAxis.place(point.position - 0.5),\n                horizontalAxis.range[0]\n            )\n            const rightX = Math.min(\n                horizontalAxis.place(point.position + 0.5),\n                horizontalAxis.range[1]\n            )\n\n            return [\n                { x: leftX, y },\n                { x: rightX, y },\n            ]\n        }\n    } else return []\n}\n\n/** Calculates the polygon points for a filled area polygon */\nfunction makeStackedAreaPolygon(\n    placedPoints: Point[],\n    prevPlacedPoints: Point[] | undefined,\n    dualAxis: DualAxis\n): Point[] {\n    const baselineY = dualAxis.verticalAxis.range[0]\n    const prevPoints: Point[] = prevPlacedPoints ?? [\n        { x: placedPoints[0].x, y: baselineY }, // left baseline point\n        { x: lastOfNonEmptyArray(placedPoints).x, y: baselineY }, // right baseline point\n    ]\n    return [...placedPoints, ...prevPoints.toReversed()]\n}\n\nexport function toPlacedStackedAreaSeries(\n    series: readonly StackedSeries<Time>[],\n    dualAxis: DualAxis\n): PlacedStackedAreaSeries<Time>[] {\n    const validSeries = series.filter((series) => !series.isAllZeros)\n    const placedSeries: PlacedStackedAreaSeries<Time>[] = []\n\n    for (let index = 0; index < validSeries.length; index++) {\n        const series = validSeries[index]\n        const placedPoints = placeStackedAreaSeries(series, dualAxis)\n        const prevPlacedPoints = placedSeries[index - 1]?.placedPoints\n        const areaPoints = makeStackedAreaPolygon(\n            placedPoints,\n            prevPlacedPoints,\n            dualAxis\n        )\n        placedSeries.push({ ...series, placedPoints, areaPoints })\n    }\n\n    return placedSeries\n}\n\nexport function toPlacedStackedBarSeries(\n    series: readonly StackedSeries<Time>[],\n    dualAxis: DualAxis\n): readonly PlacedStackedBarSeries<Time>[] {\n    const { horizontalAxis, verticalAxis } = dualAxis\n    const barWidth = (horizontalAxis.bandWidth ?? 0) * 0.8\n\n    return series.map((series) => ({\n        ...series,\n        placedPoints: series.points.map((bar) => {\n            const x = horizontalAxis.place(bar.position) - barWidth / 2\n            const y1 = verticalAxis.place(bar.valueOffset)\n            const y2 = verticalAxis.place(bar.value + bar.valueOffset)\n            const y = Math.min(y1, y2)\n            const barHeight = Math.abs(y2 - y1)\n            return { ...bar, x, y, barWidth, barHeight }\n        }),\n    }))\n}\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { AbstractStackedChartState } from \"./AbstractStackedChartState.js\"\nimport { ChartState } from \"../chart/ChartInterface.js\"\nimport { StackedSeries } from \"./StackedConstants.js\"\nimport { stackSeries, withMissingValuesAsZeroes } from \"./StackedUtils.js\"\nimport { ChartManager } from \"../chart/ChartManager.js\"\n\nexport class StackedAreaChartState\n    extends AbstractStackedChartState\n    implements ChartState\n{\n    constructor(props: { manager: ChartManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    shouldRunLinearInterpolation = true\n\n    @computed get useValueBasedColorScheme(): boolean {\n        return false\n    }\n\n    @computed get series(): readonly StackedSeries<number>[] {\n        return stackSeries(withMissingValuesAsZeroes(this.unstackedSeries))\n    }\n\n    @computed get yDomain(): [number, number] {\n        const yValues = this.allStackedPoints.map(\n            (point) => point.value + point.valueOffset\n        )\n        return [0, _.max(yValues) ?? 0]\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { AbstractStackedChartState } from \"./AbstractStackedChartState.js\"\nimport { ChartState } from \"../chart/ChartInterface.js\"\nimport { StackedSeries } from \"./StackedConstants.js\"\nimport { ColumnTypeMap } from \"@ourworldindata/core-table\"\nimport {\n    stackSeriesInBothDirections,\n    withMissingValuesAsZeroes,\n} from \"./StackedUtils.js\"\nimport { ColorScaleManager } from \"../color/ColorScale.js\"\nimport {\n    ColorScaleConfigInterface,\n    ColorSchemeName,\n} from \"@ourworldindata/types\"\nimport { ChartManager } from \"../chart/ChartManager.js\"\n\nexport class StackedBarChartState\n    extends AbstractStackedChartState\n    implements ChartState, ColorScaleManager\n{\n    constructor(props: { manager: ChartManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    shouldRunLinearInterpolation = false\n\n    defaultBaseColorScheme = ColorSchemeName.stackedAreaDefault\n\n    @computed\n    get unstackedSeriesWithMissingValuesAsZeroes(): StackedSeries<number>[] {\n        // TODO: remove once monthly data is supported (https://github.com/owid/owid-grapher/issues/2007)\n        const enforceUniformSpacing = !(\n            this.transformedTable.timeColumn instanceof ColumnTypeMap.Day\n        )\n\n        return withMissingValuesAsZeroes(this.unstackedSeries, {\n            enforceUniformSpacing,\n        })\n    }\n\n    @computed get series(): readonly StackedSeries<number>[] {\n        return stackSeriesInBothDirections(\n            this.unstackedSeriesWithMissingValuesAsZeroes\n        )\n    }\n\n    @computed get xValues(): number[] {\n        return _.uniq(\n            this.unstackedSeriesWithMissingValuesAsZeroes.flatMap((s) =>\n                s.points.map((p) => p.position)\n            )\n        )\n    }\n\n    /** Colour positive and negative values differently in stacked bar charts */\n    @computed get useValueBasedColorScheme(): boolean {\n        // Switched on externally, e.g. in a faceted chart\n        if (this.manager.useValueBasedColorScheme) return true\n\n        // Check if there is only one series and that series has both positive and negative values\n        return (\n            this.rawSeries.length === 1 &&\n            this.rawSeries[0].rows.some((row) => row.value < 0) &&\n            this.rawSeries[0].rows.some((row) => row.value > 0)\n        )\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return this.manager.colorScale\n    }\n\n    @computed get yDomain(): [number, number] {\n        const yValues = this.allStackedPoints.map(\n            (point) => point.value + point.valueOffset\n        )\n        return [_.min([0, ...yValues]) ?? 0, _.max([0, ...yValues]) ?? 0]\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport { StackedDiscreteBarChartManager } from \"./StackedDiscreteBarChart\"\nimport { CoreColumn, OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    ChartErrorInfo,\n    ColorSchemeName,\n    EntityName,\n    FacetStrategy,\n    MissingDataStrategy,\n    SortBy,\n    SortConfig,\n    SortOrder,\n} from \"@ourworldindata/types\"\nimport {\n    autoDetectYColumnSlugs,\n    getDefaultFailMessage,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { StackedSeries } from \"./StackedConstants\"\nimport { DiscreteBarRow } from \"./StackedDiscreteBarChartConstants.js\"\nimport {\n    stackSeriesInBothDirections,\n    withMissingValuesAsZeroes,\n} from \"./StackedUtils\"\nimport { CategoricalColorAssigner } from \"../color/CategoricalColorAssigner\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { excludeUndefined } from \"@ourworldindata/utils\"\nimport { FocusArray } from \"../focus/FocusArray\"\n\nexport class StackedDiscreteBarChartState implements ChartState {\n    manager: StackedDiscreteBarChartManager\n\n    constructor({ manager }: { manager: StackedDiscreteBarChartManager }) {\n        this.manager = manager\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        if (!this.yColumnSlugs.length) return table\n\n        table = table.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table.replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n\n        table = table.dropRowsWithErrorValuesForAllColumns(this.yColumnSlugs)\n\n        this.yColumnSlugs.forEach((slug) => {\n            table = table.interpolateColumnWithTolerance(slug)\n        })\n\n        table = this.applyMissingDataStrategy(table)\n\n        if (this.manager.isRelativeMode) {\n            table = table\n                .replaceNegativeCellsWithErrorValues(this.yColumnSlugs)\n                .toPercentageFromEachColumnForEachEntityAndTime(\n                    this.yColumnSlugs\n                )\n\n            // Apply missing data strategy _again_ because we might've introduced new error values just now\n            table = this.applyMissingDataStrategy(table)\n        }\n\n        return table\n    }\n\n    transformTableForSelection(table: OwidTable): OwidTable {\n        table = table\n            .replaceNonNumericCellsWithErrorValues(this.yColumnSlugs)\n            .replaceNegativeCellsWithErrorValues(this.yColumnSlugs)\n            .dropRowsWithErrorValuesForAllColumns(this.yColumnSlugs)\n\n        table = this.applyMissingDataStrategy(table)\n\n        return table\n    }\n\n    private applyMissingDataStrategy(table: OwidTable): OwidTable {\n        // We want to remove all rows with missing data for at least one column if:\n        // - MissingDataStrategy is explicitly set to hide, or\n        // - We are in relative mode and MissingDataStrategy is not explicitly set to show:\n        //     If we are showing relative mode, we want to drop all rows that are missing data for\n        //     any column, because otherwise the displayed data will be misleading in that it may\n        //     suggest patterns that are not actually present.\n        //     see https://github.com/owid/owid-grapher/issues/2860\n\n        const shouldRemoveRows =\n            this.missingDataStrategy === MissingDataStrategy.hide ||\n            (this.manager.isRelativeMode &&\n                this.missingDataStrategy !== MissingDataStrategy.show)\n        if (shouldRemoveRows) {\n            // If MissingDataStrategy is explicitly set to hide, drop rows (= times) where one of\n            // the y columns has no data\n            return table.dropRowsWithErrorValuesForAnyColumn(this.yColumnSlugs)\n        }\n\n        // Otherwise, don't apply any special treatment\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    @computed get missingDataStrategy(): MissingDataStrategy {\n        return this.manager.missingDataStrategy || MissingDataStrategy.auto\n    }\n\n    @computed get yColumnSlugs(): string[] {\n        return this.manager.yColumnSlugs ?? autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.transformedTable.getColumns(this.yColumnSlugs)\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get sortColumnSlug(): string | undefined {\n        return this.sortConfig.sortColumnSlug\n    }\n\n    @computed get sortColumn(): CoreColumn | undefined {\n        return this.sortColumnSlug\n            ? this.transformedTable.getColumns([this.sortColumnSlug])[0]\n            : undefined\n    }\n\n    @computed get sortConfig(): SortConfig {\n        return this.manager.sortConfig ?? {}\n    }\n\n    @computed get colorScheme(): ColorScheme {\n        return (\n            (this.manager.baseColorScheme\n                ? ColorSchemes.get(this.manager.baseColorScheme)\n                : null) ?? ColorSchemes.get(ColorSchemeName[\"owid-distinct\"])\n        )\n    }\n\n    @computed get categoricalColorAssigner(): CategoricalColorAssigner {\n        const seriesCount = this.yColumns.length\n        return new CategoricalColorAssigner({\n            colorScheme: this.colorScheme,\n            invertColorScheme: this.manager.invertColorScheme,\n            colorMap: this.inputTable.columnDisplayNameToColorMap,\n            autoColorMapCache: this.manager.seriesColorMap,\n            numColorsInUse: seriesCount,\n        })\n    }\n\n    @computed get unstackedSeries(): StackedSeries<EntityName>[] {\n        return (\n            this.yColumns\n                .map((col) => {\n                    return {\n                        seriesName: col.displayName,\n                        columnSlug: col.slug,\n                        color: this.categoricalColorAssigner.assign(\n                            col.displayName\n                        ),\n                        points: col.owidRows.map((row) => ({\n                            time: row.originalTime,\n                            position: row.entityName,\n                            value: row.value,\n                            valueOffset: 0,\n                        })),\n                    }\n                })\n                // Do not plot columns without data\n                .filter((series) => series.points.length > 0)\n        )\n    }\n\n    @computed get series(): readonly StackedSeries<EntityName>[] {\n        return stackSeriesInBothDirections(\n            withMissingValuesAsZeroes(this.unstackedSeries)\n        )\n    }\n\n    @computed get rows(): readonly DiscreteBarRow[] {\n        const entityNames = this.selectionArray.selectedEntityNames\n        const rows = entityNames\n            .map((entityName) => {\n                let totalValue = 0\n                const bars = excludeUndefined(\n                    this.series.map((series) => {\n                        const point = series.points.find(\n                            (point) => point.position === entityName\n                        )\n                        if (!point) return undefined\n                        totalValue += point.value\n                        return {\n                            point,\n                            columnSlug: series.columnSlug!,\n                            color: series.color,\n                            seriesName: series.seriesName,\n                        }\n                    })\n                )\n\n                return {\n                    entityName,\n                    shortEntityName: getShortNameForEntity(entityName),\n                    bars,\n                    totalValue,\n                    focus: this.focusArray.state(entityName),\n                }\n            })\n            .filter((row) => row.bars.length)\n\n        return rows\n    }\n\n    @computed get sortedRows(): readonly DiscreteBarRow[] {\n        let sortByFunc: (row: DiscreteBarRow) => number | string | undefined\n        switch (this.sortConfig.sortBy) {\n            case SortBy.custom:\n                sortByFunc = (): undefined => undefined\n                break\n            case SortBy.entityName:\n                sortByFunc = (row: DiscreteBarRow): string => row.entityName\n                break\n            case SortBy.column: {\n                const owidRowsByEntityName =\n                    this.sortColumn?.owidRowsByEntityName\n                sortByFunc = (row: DiscreteBarRow): number => {\n                    const rows = owidRowsByEntityName?.get(row.entityName)\n                    return rows?.[0]?.value ?? 0\n                }\n                break\n            }\n            default:\n            case SortBy.total:\n                sortByFunc = (row: DiscreteBarRow): number => row.totalValue\n        }\n        const sortedRows = _.sortBy(this.rows, sortByFunc)\n        const sortOrder = this.sortConfig.sortOrder ?? SortOrder.desc\n        if (sortOrder === SortOrder.desc) return sortedRows.toReversed()\n        else return sortedRows\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        const strategies = [FacetStrategy.none]\n\n        if (this.yColumns.length > 1) strategies.push(FacetStrategy.metric)\n\n        return strategies\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const column = this.yColumns[0]\n\n        if (!column) return { reason: \"No column to chart\" }\n\n        const message = getDefaultFailMessage(this.manager)\n        if (message) return { reason: message }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n\n        // TODO is it better to use .series for this check?\n        return this.yColumns.every((col) => col.isEmpty)\n            ? {\n                  reason: `No data for the selected ${entityTypePlural}`,\n              }\n            : { reason: \"\" }\n    }\n}\n","import { ScaleLinear } from \"d3-scale\"\nimport { Quadtree } from \"d3-quadtree\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { NoDataModalManager } from \"../noDataModal/NoDataModal\"\nimport { ColorScale } from \"../color/ColorScale\"\nimport {\n    ScatterPointLabelStrategy,\n    EntitySelectionMode,\n    SeriesName,\n    Color,\n    Time,\n    EntityName,\n} from \"@ourworldindata/types\"\nimport {\n    GRAPHER_FONT_SCALE_10,\n    GRAPHER_FONT_SCALE_10_5,\n    GRAPHER_FONT_SCALE_12,\n    GRAPHER_FONT_SCALE_13,\n} from \"../core/GrapherConstants\"\n\nimport { Bounds, PointVector } from \"@ourworldindata/utils\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\n\nexport interface ScatterPlotManager extends ChartManager {\n    hideConnectedScatterLines?: boolean\n    scatterPointLabelStrategy?: ScatterPointLabelStrategy\n    addCountryMode?: EntitySelectionMode\n    xOverrideTime?: Time | undefined\n    tableAfterAuthorTimelineAndActiveChartTransform?: OwidTable\n    startTime?: Time\n    endTime?: Time\n    hasTimeline?: boolean\n    hideScatterLabels?: boolean\n    isModalOpen?: boolean\n    isSingleTimeScatterAnimationActive?: boolean\n    animationStartTime?: number\n    animationEndTime?: number\n}\n\nexport interface ScatterSeries extends ChartSeries {\n    label: string\n    points: SeriesPoint[]\n    isScaleColor?: boolean\n    focus: InteractionState\n}\n\nexport interface SeriesPoint {\n    x: number\n    y: number\n    size?: number\n    entityName?: EntityName\n    label: string\n    color?: number | Color\n    timeValue: Time\n    time: {\n        x: number\n        y: number\n        // Time span in relative mode for both axes\n        // Technically, to be more correct, we should support distinct\n        // start and end times for each axis, but for simplicity we use\n        // a single span (see getAverageAnnualChangeIndicesByEntity)\n        span?: [number, number]\n    }\n}\n\nexport interface ScatterRenderPoint {\n    position: PointVector\n    color: Color\n    size: number\n    label: string\n    time: {\n        x: number\n        y: number\n    }\n}\n\nexport const SCATTER_POINT_DEFAULT_COLOR = \"#932834\" // used when no color dimension is present\nexport const SCATTER_POINT_MIN_RADIUS: number = 2 // only enforced in rendered points, not in scale\nexport const SCATTER_POINT_MAX_RADIUS: number = 18\nexport const SCATTER_POINT_OPACITY: number = 0.8\nexport const SCATTER_POINT_STROKE_WIDTH: number = 0.5\nexport const SCATTER_POINT_DEFAULT_RADIUS: number = 3\nexport const SCATTER_LINE_MIN_WIDTH: number = 0.5 // only enforced in rendered lines, not in scale\nexport const SCATTER_LINE_MAX_WIDTH: number = 2\nexport const SCATTER_LINE_DEFAULT_WIDTH: number = 1\nexport const SCATTER_LABEL_MIN_FONT_SIZE_FACTOR: number = GRAPHER_FONT_SCALE_10\nexport const SCATTER_LABEL_MAX_FONT_SIZE_FACTOR: number = GRAPHER_FONT_SCALE_13\nexport const SCATTER_LABEL_DEFAULT_FONT_SIZE_FACTOR: number =\n    GRAPHER_FONT_SCALE_10_5\nexport const SCATTER_LABEL_FONT_SIZE_FACTOR_WHEN_HIDDEN_LINES: number =\n    GRAPHER_FONT_SCALE_12\n\nexport interface ScatterRenderSeries extends ChartSeries {\n    displayKey: string\n    size: number\n    fontSize: number\n    points: ScatterRenderPoint[]\n    text: string\n    isHover?: boolean\n    isTooltip?: boolean\n    isFocus?: boolean\n    isForeground?: boolean\n    offsetVector: PointVector\n    startLabel?: ScatterLabel\n    midLabels: ScatterLabel[]\n    endLabel?: ScatterLabel\n    allLabels: ScatterLabel[]\n}\n\nexport interface ScatterLabel {\n    text: string\n    fontSize: number\n    fontWeight: number\n    color: Color\n    bounds: Bounds\n    series: ScatterRenderSeries\n    isHidden?: boolean\n    isStart?: boolean\n    isMid?: boolean\n    isEnd?: boolean\n}\n\nexport interface ScatterPointsWithLabelsProps {\n    seriesArray: ScatterSeries[]\n    hoveredSeriesNames?: SeriesName[]\n    focusedSeriesNames?: SeriesName[]\n    isHoverModeActive?: boolean\n    tooltipSeriesName?: SeriesName\n    dualAxis: DualAxis\n    colorScale?: ColorScale\n    sizeScale: ScaleLinear<number, number>\n    fontScale?: ScaleLinear<number, number>\n    baseFontSize: number\n    onMouseEnter?: (series: ScatterSeries) => void\n    onMouseLeave?: () => void\n    onClick?: () => void\n    isConnected: boolean\n    hideConnectedScatterLines: boolean\n    noDataModalManager: NoDataModalManager\n    disableIntroAnimation?: boolean\n    hideScatterLabels?: boolean\n    hideEntityLabels?: boolean\n    quadtree?: Quadtree<ScatterPointQuadtreeNode>\n    backgroundColor?: Color\n    hideFocusRing?: boolean\n}\n\nexport const SCATTER_QUADTREE_SAMPLING_DISTANCE = 10\nexport const SCATTER_POINT_HOVER_TARGET_RANGE = 20\n\nexport interface ScatterPointQuadtreeNode {\n    series: ScatterSeries\n    x: number\n    y: number\n}\n","import {\n    ComparisonLineConfig,\n    VerticalComparisonLineConfig,\n} from \"@ourworldindata/types\"\n\nexport function isValidVerticalComparisonLineConfig(\n    lineConfig: ComparisonLineConfig\n): lineConfig is VerticalComparisonLineConfig {\n    return \"xEquals\" in lineConfig && lineConfig.xEquals !== undefined\n}\n","import * as _ from \"lodash-es\"\nimport { scaleLog, scaleLinear, ScaleLinear, ScaleLogarithmic } from \"d3-scale\"\nimport { observable, computed, makeObservable } from \"mobx\"\nimport {\n    rollingMap,\n    numberMagnitude,\n    Bounds,\n    AxisAlign,\n    HorizontalAlign,\n    Position,\n    ScaleType,\n    VerticalAlign,\n    TickFormattingOptions,\n    Tickmark,\n    ValueRange,\n    OwidVariableRoundingMode,\n} from \"@ourworldindata/utils\"\nimport { ComparisonLineConfig } from \"@ourworldindata/types\"\nimport { AxisConfig, AxisManager } from \"./AxisConfig\"\nimport { MarkdownTextWrap } from \"@ourworldindata/components\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport {\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FONT_SCALE_10_5,\n    GRAPHER_FONT_SCALE_11,\n    GRAPHER_FONT_SCALE_12,\n} from \"../core/GrapherConstants.js\"\nimport { makeAxisLabel } from \"../chart/ChartUtils\"\nimport * as R from \"remeda\"\nimport { isValidVerticalComparisonLineConfig } from \"../comparisonLine/ComparisonLineHelpers\"\n\ninterface TickLabelPlacement {\n    value: number\n    formattedValue: string\n    x: number\n    y: number\n    width: number\n    height: number\n    xAlign?: HorizontalAlign\n    yAlign?: VerticalAlign\n    isHidden: boolean\n}\n\ntype Scale = ScaleLinear<number, number> | ScaleLogarithmic<number, number>\n\nconst OUTER_PADDING = 4\n\nconst doIntersect = (bounds: Bounds, bounds2: Bounds): boolean => {\n    return bounds.intersects(bounds2)\n}\n\nconst boundsFromLabelPlacement = (label: TickLabelPlacement): Bounds => {\n    const { x, y, width, height, xAlign, yAlign } = label\n    const xShift =\n        xAlign === HorizontalAlign.center\n            ? -width / 2\n            : xAlign === HorizontalAlign.right\n              ? -width\n              : 0\n    const yShift =\n        yAlign === VerticalAlign.middle\n            ? -height / 2\n            : yAlign === VerticalAlign.bottom\n              ? -height\n              : 0\n    return new Bounds(x + xShift, y + yShift, width, height)\n}\n\nabstract class AbstractAxis {\n    config: AxisConfig\n    axisManager?: AxisManager\n\n    domain: ValueRange\n    formatColumn: CoreColumn | undefined = undefined // Pass the column purely for formatting reasons. Might be a better way to do this.\n    hideFractionalTicks = false\n    range: ValueRange = [0, 0]\n    private _scaleType: ScaleType | undefined = undefined\n    private _label: string | undefined = undefined\n\n    constructor(config: AxisConfig, axisManager?: AxisManager) {\n        makeObservable<AbstractAxis, \"_scaleType\" | \"_label\">(this, {\n            domain: observable.ref,\n            formatColumn: observable,\n            hideFractionalTicks: observable,\n            range: observable.struct,\n            _scaleType: observable,\n            _label: observable,\n        })\n        this.config = config\n        this.domain = [config.domain[0], config.domain[1]]\n        this.axisManager = axisManager\n    }\n\n    /**\n     * The orthogonal size of the axis.\n     * For horizontal axes, this is the height.\n     * For vertical axes, this is the width.\n     */\n    abstract get size(): number\n    abstract get orient(): Position\n    abstract get labelMaxWidth(): number\n\n    abstract placeTickLabel(value: number): TickLabelPlacement\n    abstract get tickLabels(): TickLabelPlacement[]\n\n    @computed get hideAxis(): boolean {\n        return this.config.hideAxis ?? false\n    }\n\n    @computed get hideGridlines(): boolean {\n        return this.config.hideGridlines ?? false\n    }\n\n    @computed get tickPadding(): number {\n        return this.config.tickPadding ?? 5\n    }\n\n    @computed get labelPadding(): number {\n        return this.config.labelPadding ?? 10\n    }\n\n    @computed get nice(): boolean {\n        return this.config.nice ?? false\n    }\n\n    @computed get fontSize(): number {\n        return this.config.fontSize\n    }\n\n    @computed protected get minTicks(): number {\n        return 2\n    }\n\n    @computed private get maxTicks(): number {\n        return this.config.maxTicks ?? 6\n    }\n\n    @computed get canChangeScaleType(): boolean | undefined {\n        return this.config.canChangeScaleType\n    }\n\n    @computed get scaleType(): ScaleType {\n        return this._scaleType ?? this.config.scaleType ?? ScaleType.linear\n    }\n\n    @computed get isLogScale(): boolean {\n        return this.scaleType === ScaleType.log\n    }\n\n    set scaleType(value: ScaleType) {\n        this._scaleType = value\n    }\n\n    @computed get label(): string {\n        return this._label ?? this.config.label ?? \"\"\n    }\n\n    set label(value: string) {\n        this._label = value\n    }\n\n    // This will expand the domain but never shrink.\n    // This will change the min unless the user's min setting is less\n    // This will change the max unless the user's max setting is greater\n    // Undefined values are ignored\n    updateDomainPreservingUserSettings(\n        domain: [number | undefined, number | undefined]\n    ): this {\n        const left =\n            domain[0] !== undefined\n                ? _.min([this.domain[0], domain[0]])\n                : this.domain[0]\n        const right =\n            domain[1] !== undefined\n                ? _.max([this.domain[1], domain[1]])\n                : this.domain[1]\n        this.domain = [left ?? 0, right ?? 0]\n        return this\n    }\n\n    // todo: refactor. switch to a parent pattern?\n    _update(parentAxis: AbstractAxis): this {\n        this.formatColumn = parentAxis.formatColumn\n        this.domain = parentAxis.domain.slice() as ValueRange\n        this.hideFractionalTicks = parentAxis.hideFractionalTicks\n        this.range = parentAxis.range.slice() as ValueRange\n        this._scaleType = parentAxis._scaleType\n        this._label = parentAxis._label\n        return this\n    }\n\n    private static calculateBandWidth({\n        values,\n        scale,\n    }: {\n        values: number[]\n        scale: Scale\n    }): number {\n        const range = scale.range()\n        const rangeSize = Math.abs(range[1] - range[0])\n        const maxBandWidth = 0.4 * rangeSize\n\n        if (values.length < 2) return maxBandWidth\n\n        // the band width is the smallest distance between\n        // two adjacent values placed on the axis\n        const sortedValues = _.sortBy(values)\n        const positions = sortedValues.map((value) => scale(value))\n        const diffs = positions\n            .slice(1)\n            .map((pos, index) => pos - positions[index])\n        const bandWidth = _.min(diffs) ?? 0\n\n        return _.min([bandWidth, maxBandWidth]) ?? 0\n    }\n\n    /**\n     * Maximum width a single value can take up on the axis.\n     * Not meaningful if no domain values are given.\n     */\n    @computed get bandWidth(): number | undefined {\n        const { domainValues } = this.config\n        if (!domainValues) return undefined\n        return AbstractAxis.calculateBandWidth({\n            values: domainValues,\n            scale: this.d3_scale,\n        })\n    }\n\n    private static makeScaleNice(\n        scale: ScaleLinear<number, number>,\n        totalTicksTarget: number\n    ): { scale: ScaleLinear<number, number>; ticks?: number[] } {\n        let ticks = scale.ticks(totalTicksTarget)\n\n        // use d3's nice function when there is only one tick\n        if (ticks.length < 2) return { scale: scale.nice(totalTicksTarget) }\n\n        const tickStep = ticks[1] - ticks[0]\n        const firstTick = ticks[0]\n        const lastTick = R.last(ticks)!\n\n        // if the the max or min value exceeds the last grid line by more than 25%,\n        // expand the domain to include an additional grid line\n        const [minValue, maxValue] = scale.domain()\n        if (maxValue > lastTick + 0.25 * tickStep) {\n            scale.domain([scale.domain()[0], lastTick + tickStep])\n            ticks = [...ticks, lastTick + tickStep]\n        }\n        if (minValue < firstTick - 0.25 * tickStep) {\n            scale.domain([firstTick - tickStep, scale.domain()[1]])\n            ticks = [firstTick - tickStep, ...ticks]\n        }\n\n        return { scale, ticks }\n    }\n\n    private niceTicks?: number[]\n    @computed private get d3_scale(): Scale {\n        const d3Scale = this.isLogScale ? scaleLog : scaleLinear\n        let scale = d3Scale().domain(this.domain).range(this.range)\n\n        if (this.nice && !this.isLogScale) {\n            const { scale: niceScale, ticks: niceTicks } =\n                AbstractAxis.makeScaleNice(scale, this.totalTicksTarget)\n            scale = niceScale\n            this.niceTicks = niceTicks\n        } else {\n            this.niceTicks = undefined\n        }\n\n        if (this.config.domainValues) {\n            // compute bandwidth and adjust the scale\n            const bandWidth = AbstractAxis.calculateBandWidth({\n                values: this.config.domainValues,\n                scale,\n            })\n            const offset = bandWidth / 2 + OUTER_PADDING\n            const r = scale.range()\n            return scale.range([r[0] + offset, r[1] - offset])\n        } else {\n            return scale\n        }\n    }\n\n    @computed get rangeSize(): number {\n        return Math.abs(this.range[1] - this.range[0])\n    }\n\n    @computed get rangeMax(): number {\n        return Math.max(this.range[1], this.range[0])\n    }\n\n    @computed get rangeMin(): number {\n        return Math.min(this.range[1], this.range[0])\n    }\n\n    @computed get rangeCenter(): number {\n        return this.rangeMin + this.rangeSize / 2\n    }\n\n    /** The number of ticks we should _aim_ to show, not necessarily a strict target. */\n    @computed private get totalTicksTarget(): number {\n        // Chose 1.8 here by trying a bunch of different faceted charts and figuring out what\n        // a reasonable lower bound is.\n        // NOTE: This setting is used between both log & linear axes, check both when tweaking.\n        // -@danielgavrilov, 2021-06-15\n        return Math.round(\n            R.clamp(this.rangeSize / (this.fontSize * 1.8), {\n                min: this.minTicks,\n                max: this.maxTicks,\n            })\n        )\n    }\n\n    getTickValues(): Tickmark[] {\n        const { d3_scale } = this\n\n        let ticks: Tickmark[]\n\n        if (this.config.ticks) {\n            // If custom ticks are supplied, use them without any transformations or additions.\n            const [minValue, maxValue] = d3_scale.domain()\n            const processedTicks = this.config.ticks\n                // replace ±Infinity with minimum/maximum\n                .map((tick) => {\n                    if (tick.value === -Infinity)\n                        return { ...tick, value: minValue }\n                    if (tick.value === Infinity)\n                        return { ...tick, value: maxValue }\n                    return tick\n                })\n                // filter out custom ticks outside the plottable area\n                .filter(\n                    (tick) => tick.value >= minValue && tick.value <= maxValue\n                )\n\n            return _.uniqBy(processedTicks, (tick) => tick.value)\n        } else if (this.isLogScale) {\n            // Show a bit more ticks for log axes\n            const maxLabelledTicks = Math.round(this.totalTicksTarget * 1.25)\n            const maxTicks = Math.round(this.totalTicksTarget * 3)\n\n            // This is a wild heuristic that decides how many tick lines and grid lines we want to\n            // show for log charts.\n            //\n            // It tries to achive multiple goals:\n            // * make it obvious for the user which values they're looking at\n            // * ideally, make it very clear that this is a log axis by looking like log paper\n            // * (but) don't overwhelm the user\n            // * avoid cases where only one tick is shown for the whole axis (we had those!)\n            //\n            // This code roughly works as follows:\n            // First, we let d3 generate ticks for the axis. d3 gives values of the form `y * 10^x`,\n            // with 0 < y < 10.\n            // We then assign priorities to these values:\n            // * priority 1 (highest) to values of the form `1 * 10^x` (e.g. 100)\n            // * priority 2 to values of the form `2 * 10^x` or `5 * 10^x` (e.g. 5, 2000)\n            // * priority 3 (lowest) to all other (\"in-between\") values (e.g. 70, 300)\n            //\n            // We then decide depending on the number of tick candidates what to do:\n            // * if we have less than `maxLabelledTicks`, just show all\n            // * if we have between `maxLabelledTicks` and `maxTicks`, show all \"in-between\" lines\n            //   as faint grid lines without labels to give the chart that log paper look.\n            //   We also show all priority 1 and 2 lines with labels, because there aren't too many\n            //   of them.\n            // * otherwise, remove priority 3 and, if necessary, priority 2 labels until we're below\n            //   `maxLabelledTicks` labels overall\n            //\n            // -@MarcelGerber, 2020-08-07\n            const tickCandidates = d3_scale.ticks(maxLabelledTicks)\n            ticks = tickCandidates.map((value) => {\n                // 10^x\n                if (Math.fround(Math.log10(value)) % 1 === 0)\n                    return { value, priority: 1 }\n                // 5 * 10^x\n                else if (Math.fround(Math.log10(value * 2)) % 1 === 0)\n                    return { value, priority: 2 }\n                // 2 * 10^x\n                else if (Math.fround(Math.log10(value / 2)) % 1 === 0)\n                    return { value, priority: 2 }\n                return { value, priority: 3 }\n            })\n\n            if (ticks.length > maxLabelledTicks) {\n                if (ticks.length <= maxTicks) {\n                    // Convert all \"in-between\" lines to faint grid lines without labels,\n                    // but only do so if there are at least 2 labelled ticks\n                    const priorityTicks = ticks.filter((t) => t.priority < 3)\n                    if (priorityTicks.length >= 2) {\n                        ticks = ticks.map((tick) =>\n                            tick.priority === 3\n                                ? { ...tick, faint: true, gridLineOnly: true }\n                                : tick\n                        )\n                    }\n                } else {\n                    // Remove some tickmarks again because the chart would get too overwhelming\n                    // otherwise\n                    for (let priority = 3; priority > 1; priority--) {\n                        if (ticks.length > maxLabelledTicks)\n                            ticks = ticks.filter(\n                                (tick) => tick.priority < priority\n                            )\n                    }\n                }\n            }\n        } else {\n            const d3_ticks =\n                this.niceTicks ?? d3_scale.ticks(this.totalTicksTarget)\n\n            // Only use priority 2 here because we want the start / end ticks\n            // to be priority 1\n            ticks = d3_ticks.map((tickValue) => ({\n                value: tickValue,\n                priority: 2,\n            }))\n        }\n\n        if (this.hideFractionalTicks)\n            ticks = ticks.filter((t) => t.value % 1 === 0)\n\n        // mark value=0 ticks as solid for non-time columns\n        if (!this.formatColumn?.isTimeColumn) {\n            ticks = ticks.map((tick) =>\n                tick.value === 0 ? { ...tick, solid: true } : tick\n            )\n        }\n\n        return _.uniq(ticks)\n    }\n\n    private getTickFormattingOptions(): TickFormattingOptions {\n        const options: TickFormattingOptions = {\n            ...this.config.tickFormattingOptions,\n            roundingMode: OwidVariableRoundingMode.decimalPlaces,\n        }\n\n        // The chart's tick formatting function is used by default to format axis ticks. This means\n        // that the chart's `numDecimalPlaces` is also used by default to format the axis ticks.\n        //\n        // However, the author-specified decimal places are not always appropriate for rendering\n        // ticks, because:\n        // 1. Subsets of the data may require higher fidelity, e.g. users can use the timeline to\n        //    end up in a subset of the dataset where values happen to be much lower than usual.\n        // 2. Ticks may be rendered at granularities that may not exist in the data, e.g. the data\n        //    may only contain 0 and 1, but we may show ticks in between those values.\n        //\n        // Therefore, when formatting ticks, we determine the `numDecimalPlaces` automatically, by\n        // finding the smallest difference between any pair of ticks and making sure that we have\n        // sufficient decimal places to express the difference to the first significant figure (the\n        // first non-zero digit).\n        //\n        // One significant figure is sufficient because we use D3's ticks() and that creates\n        // \"uniformly-spaced, nicely-rounded values [...] where each value is a power of ten\n        // multiplied by 1, 2 or 5\"\n        // See: https://github.com/d3/d3-array/blob/master/README.md#ticks\n        //\n        // -@danielgavrilov, 2020-05-27\n        const minDist = _.min(\n            rollingMap(this.baseTicks, (a, b) => Math.abs(a.value - b.value))\n        )\n        if (minDist !== undefined) {\n            // Find the decimal places required to reach the first non-zero digit\n            const dp = -numberMagnitude(minDist) + 1\n            if (dp >= 0) {\n                options.numDecimalPlaces = dp\n            }\n        }\n        return options\n    }\n\n    place(value: number): number {\n        if (!this.range) {\n            console.error(\n                \"Can't place value on scale without a defined output range\"\n            )\n            return value\n        } else if (this.isLogScale && value <= 0) {\n            console.error(`Can't have ${value} which is <= 0 on a log scale`)\n            return value\n        } else if (this.domain[0] === this.domain[1]) {\n            // When the domain is a single value, the D3 scale will by default place\n            // the value at the middle of the range.\n            // We instead want to customize what happens - sometimes we want to place the point\n            // at the start of the range instead.\n            // see https://github.com/owid/owid-grapher/pull/1367#issuecomment-1090845181.\n            //\n            // -@marcelgerber, 2022-04-12\n            switch (this.config.singleValueAxisPointAlign) {\n                case AxisAlign.start:\n                    return this.range[0]\n                case AxisAlign.end:\n                    return this.range[1]\n                case AxisAlign.middle:\n                default:\n                    return (this.range[0] + this.range[1]) / 2\n            }\n        }\n        const placedValue = this.d3_scale(value)\n        if (placedValue === undefined) {\n            console.error(`Placed value is undefined for ${value}`)\n            return value\n        }\n        return parseFloat(placedValue.toFixed(1))\n    }\n\n    /** This function returns the inverse of place - i.e. given a screen space\n     *  coordinate, it returns the corresponding domain value. This is useful\n     *  for cases where you want to make sure that something is at least one pixel high.\n     */\n    invert(value: number): number {\n        return this.d3_scale.invert(value)\n    }\n\n    @computed get tickFontSize(): number {\n        return Math.floor(GRAPHER_FONT_SCALE_12 * this.fontSize)\n    }\n\n    @computed protected get baseTicks(): Tickmark[] {\n        return this.getTickValues().filter((tick) => !tick.gridLineOnly)\n    }\n\n    formatTick(\n        tick: number,\n        formattingOptionsOverride?: TickFormattingOptions\n    ): string {\n        const tickFormattingOptions: TickFormattingOptions = {\n            ...this.getTickFormattingOptions(),\n            ...formattingOptionsOverride,\n        }\n        return (\n            this.formatColumn?.formatForTick(tick, tickFormattingOptions) ??\n            tick.toString()\n        )\n    }\n\n    @computed get labelFontSize(): number {\n        return Math.floor(GRAPHER_FONT_SCALE_12 * this.fontSize)\n    }\n\n    @computed get labelTextWrap(): MarkdownTextWrap | undefined {\n        if (!this.label) return\n\n        const textWrapProps = {\n            maxWidth: this.labelMaxWidth,\n            fontSize: this.labelFontSize,\n            lineHeight: 1,\n            detailsOrderedByReference:\n                this.axisManager?.detailsOrderedByReference,\n        }\n\n        const axisLabel = makeAxisLabel({\n            label: this.label,\n            displayUnit: this.formatColumn?.displayUnit,\n        })\n\n        const logScaleNotice = \"plotted on a logarithmic axis\"\n\n        if (axisLabel.unit) {\n            const secondaryText = this.isLogScale\n                ? `(${axisLabel.unit}; ${logScaleNotice})`\n                : `(${axisLabel.unit})`\n            return MarkdownTextWrap.fromFragments({\n                main: { text: axisLabel.mainLabel, bold: true },\n                secondary: { text: secondaryText },\n                newLine: \"avoid-wrap\",\n                textWrapProps,\n            })\n        }\n\n        if (this.isLogScale) {\n            return MarkdownTextWrap.fromFragments({\n                main: { text: axisLabel.mainLabel, bold: true },\n                secondary: { text: `(${logScaleNotice})` },\n                newLine: \"avoid-wrap\",\n                textWrapProps,\n            })\n        }\n\n        return new MarkdownTextWrap({\n            text: axisLabel.mainLabel,\n            fontWeight: 700,\n            ...textWrapProps,\n        })\n    }\n\n    @computed get labelHeight(): number {\n        return this.labelTextWrap\n            ? this.labelTextWrap.height + this.labelPadding\n            : 0\n    }\n}\n\nexport class HorizontalAxis extends AbstractAxis {\n    constructor(config: AxisConfig, axisManager?: AxisManager) {\n        super(config, axisManager)\n\n        makeObservable(this)\n    }\n\n    clone(): HorizontalAxis {\n        return new HorizontalAxis(this.config, this.axisManager)._update(this)\n    }\n\n    @computed get orient(): Position {\n        // Default to `bottom` unless overriden to `top`.\n        return this.config.orient === Position.top\n            ? Position.top\n            : Position.bottom\n    }\n\n    @computed get labelOffset(): number {\n        return this.labelHeight\n    }\n\n    @computed get labelMaxWidth(): number {\n        return this.rangeSize\n    }\n\n    // note that we intentionally don't take `hideAxisLabels` into account here.\n    // tick labels might be hidden in faceted charts. when faceted, it's important\n    // the axis size doesn't change as a result of hiding the axis labels, or else\n    // we might end up with misaligned axes.\n    @computed get height(): number {\n        if (this.hideAxis) return 0\n        const { labelOffset, tickPadding } = this\n        const maxTickHeight = _.max(this.tickLabels.map((tick) => tick.height))\n        const tickHeight = maxTickHeight ? maxTickHeight + tickPadding : 0\n        return Math.max(tickHeight + labelOffset, this.config.minSize ?? 0)\n    }\n\n    @computed get size(): number {\n        return this.height\n    }\n\n    protected override get baseTicks(): Tickmark[] {\n        let ticks = this.getTickValues().filter(\n            (tick): boolean => !tick.gridLineOnly\n        )\n        const { domain } = this\n\n        // Make sure the start and end values are present, if they're whole numbers\n        const startEndPrio = this.isLogScale ? 2 : 1\n        if (domain[0] % 1 === 0)\n            ticks = [\n                {\n                    value: domain[0],\n                    priority: startEndPrio,\n                },\n                ...ticks,\n            ]\n        if (domain[1] % 1 === 0 && this.hideFractionalTicks)\n            ticks = [\n                ...ticks,\n                {\n                    value: domain[1],\n                    priority: startEndPrio,\n                },\n            ]\n\n        // sort by value, then priority.\n        // this way, we don't end up with two ticks of the same value but different priorities.\n        // instead, we deduplicate by choosing the highest priority (i.e. lowest priority value).\n        const sortedTicks = _.sortBy(ticks, [\n            (t): number => t.value,\n            (t): number => t.priority,\n        ])\n        return _.sortedUniqBy(sortedTicks, (t) => t.value)\n    }\n\n    @computed get tickLabels(): TickLabelPlacement[] {\n        // Get ticks with coordinates, sorted by priority\n        const tickLabels = _.sortBy(\n            this.baseTicks,\n            (tick) => tick.priority\n        ).map((tick) => this.placeTickLabel(tick.value))\n        const visibleTickLabels = hideOverlappingTickLabels(tickLabels, {\n            padding: 3,\n        })\n        return visibleTickLabels\n    }\n\n    placeTickLabel(value: number): TickLabelPlacement {\n        const formattedValue = this.formatTick(value)\n        const { width, height } = Bounds.forText(formattedValue, {\n            fontSize: this.tickFontSize,\n        })\n        let x = this.place(value)\n        let xAlign = HorizontalAlign.center\n        const left = x - width / 2\n        const right = x + width / 2\n        const offset = this.bandWidth ? this.bandWidth / 2 + OUTER_PADDING : 0\n        if (left < this.rangeMin - offset) {\n            x = this.rangeMin\n            xAlign = HorizontalAlign.left\n        }\n        if (right > this.rangeMax + offset) {\n            x = this.rangeMax\n            xAlign = HorizontalAlign.right\n        }\n        return {\n            value,\n            formattedValue,\n            x,\n            y: 0,\n            width,\n            height,\n            xAlign,\n            isHidden: false,\n        }\n    }\n\n    // Add some padding before checking for intersection\n    protected doIntersect(bounds: Bounds, bounds2: Bounds): boolean {\n        return bounds.intersects(bounds2.padWidth(-5))\n    }\n}\n\nexport class VerticalAxis extends AbstractAxis {\n    constructor(config: AxisConfig, axisManager?: AxisManager) {\n        super(config, axisManager)\n\n        makeObservable(this)\n    }\n\n    clone(): VerticalAxis {\n        return new VerticalAxis(this.config, this.axisManager)._update(this)\n    }\n\n    @computed get orient(): Position {\n        return Position.left\n    }\n\n    @computed get labelMaxWidth(): number {\n        return this.axisManager?.axisBounds?.width ?? Infinity\n    }\n\n    @computed get labelOffsetTop(): number {\n        return this.labelHeight\n    }\n\n    // note that we intentionally don't take `hideAxisLabels` into account here.\n    // tick labels might be hidden in faceted charts. when faceted, it's important\n    // the axis size doesn't change as a result of hiding the axis labels, or else\n    // we might end up with misaligned axes.\n    @computed get width(): number {\n        if (this.hideAxis) return 0\n        const { tickPadding } = this\n        const maxTickWidth = _.max(this.tickLabels.map((tick) => tick.width))\n        const tickWidth =\n            maxTickWidth !== undefined ? maxTickWidth + tickPadding : 0\n        return Math.max(tickWidth, this.config.minSize ?? 0)\n    }\n\n    @computed get height(): number {\n        return this.rangeSize\n    }\n\n    @computed get size(): number {\n        return this.width\n    }\n\n    @computed get tickLabels(): TickLabelPlacement[] {\n        const { domain } = this\n\n        const tickLabels = _.sortBy(\n            this.baseTicks,\n            (tick) => tick.priority\n        ).map((tick) => this.placeTickLabel(tick.value))\n\n        // hide overlapping ticks, and allow for some padding\n        let visibleTicks = hideOverlappingTickLabels(tickLabels, { padding: 3 })\n\n        // if we end up with too few ticks, try again with less padding\n        if (visibleTicks.length < this.minTicks) {\n            visibleTicks = hideOverlappingTickLabels(tickLabels, { padding: 1 })\n        }\n\n        // if we still have too few ticks, de-prioritize the zero tick\n        // if it's a start or end value and drawn as a solid line\n        if (visibleTicks.length < this.minTicks) {\n            const updatedBaseTicks = _.cloneDeep(this.baseTicks)\n            if (domain[0] === 0 || domain[1] === 0) {\n                const zeroIndex = updatedBaseTicks\n                    .map((tick) => tick.value)\n                    .indexOf(0)\n                if (zeroIndex >= 0 && updatedBaseTicks[zeroIndex].solid) {\n                    updatedBaseTicks[zeroIndex] = {\n                        value: 0,\n                        priority: 3,\n                    }\n                }\n            }\n\n            const tickLabels = _.sortBy(\n                updatedBaseTicks,\n                (tick) => tick.priority\n            ).map((tick) => this.placeTickLabel(tick.value))\n            visibleTicks = hideOverlappingTickLabels(tickLabels, { padding: 1 })\n        }\n\n        return visibleTicks\n    }\n\n    placeTickLabel(value: number): TickLabelPlacement {\n        const formattedValue = this.formatTick(value)\n        const { width, height } = Bounds.forText(formattedValue, {\n            fontSize: this.tickFontSize,\n        })\n        const y = this.place(value)\n        return {\n            value,\n            formattedValue,\n            x: 0,\n            y,\n            width,\n            height,\n            xAlign: HorizontalAlign.right,\n            yAlign: VerticalAlign.middle,\n            isHidden: false,\n        }\n    }\n\n    @computed get shouldShowLogNotice(): boolean {\n        return this.isLogScale && !this.labelTextWrap\n    }\n\n    @computed get logNoticeTextWrap(): MarkdownTextWrap | undefined {\n        if (!this.shouldShowLogNotice) return undefined\n\n        const fontSize = Math.floor(GRAPHER_FONT_SCALE_11 * this.fontSize)\n\n        return new MarkdownTextWrap({\n            text: \"log axis\",\n            maxWidth: Infinity, // No line breaks\n            fontSize,\n        })\n    }\n\n    @computed get logNoticeWidth(): number {\n        return this.logNoticeTextWrap ? this.logNoticeTextWrap.width : 0\n    }\n\n    @computed get logNoticeHeight(): number {\n        const padding = this.tickFontSize\n        return this.logNoticeTextWrap\n            ? this.logNoticeTextWrap.height + padding\n            : 0\n    }\n}\n\ninterface DualAxisProps {\n    bounds?: Bounds\n    horizontalAxis: HorizontalAxis\n    verticalAxis: VerticalAxis\n    comparisonLines?: ComparisonLineConfig[]\n}\n\n// DualAxis has the important task of coordinating two axes so that they work together!\n// There is a *two-way dependency* between the bounding size of each axis.\n// e.g. if the y axis becomes wider because a label is present, the x axis then has less\n// space to work with, and vice versa\nexport class DualAxis {\n    private props: DualAxisProps\n    constructor(props: DualAxisProps) {\n        makeObservable(this)\n        this.props = props\n    }\n\n    @computed get horizontalAxis(): HorizontalAxis {\n        const axis = this.props.horizontalAxis.clone()\n        axis.range = this.innerBounds.xRange()\n        return axis\n    }\n\n    @computed get verticalAxis(): VerticalAxis {\n        const axis = this.props.verticalAxis.clone()\n        axis.range = this.innerBounds.yRange()\n        return axis\n    }\n\n    // We calculate an initial height from the range of the input bounds\n    @computed private get horizontalAxisSize(): number {\n        const axis = this.props.horizontalAxis.clone()\n        axis.range = [0, this.bounds.width]\n        return axis.size\n    }\n\n    // We calculate an initial width from the range of the input bounds\n    @computed private get verticalAxisSize(): number {\n        const axis = this.props.verticalAxis.clone()\n        axis.range = [0, this.bounds.height]\n        return axis.size\n    }\n\n    // Now we can determine the \"true\" inner bounds of the dual axis\n    @computed get innerBounds(): Bounds {\n        return (\n            this.bounds\n                // Add padding to account for the width of the vertical axis\n                // and the height of the horizontal axis\n                .pad({\n                    [this.props.horizontalAxis.orient]: this.horizontalAxisSize,\n                    [this.props.verticalAxis.orient]: this.verticalAxisSize,\n                })\n                // Make space for the y-axis label if plotted above the axis\n                .padTop(this.props.verticalAxis.labelOffsetTop)\n                // Make space for vertical comparison line labels if any\n                .padTop(this.comparisonLineLabelOffset)\n                .padTop(\n                    this.shouldShowLogNotice\n                        ? this.props.verticalAxis.logNoticeHeight\n                        : 0\n                )\n        )\n    }\n\n    @computed get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed get comparisonLines(): ComparisonLineConfig[] {\n        return this.props.comparisonLines ?? []\n    }\n\n    @computed get comparisonLineLabelFontSize(): number {\n        return Math.floor(\n            GRAPHER_FONT_SCALE_10_5 * this.props.verticalAxis.fontSize\n        )\n    }\n\n    @computed private get comparisonLineLabelOffset(): number {\n        const hasVerticalComparisonLines = this.comparisonLines.some((line) =>\n            isValidVerticalComparisonLineConfig(line)\n        )\n\n        if (!hasVerticalComparisonLines) return 0\n\n        return this.comparisonLineLabelFontSize\n    }\n\n    @computed private get shouldShowLogNotice(): boolean {\n        return (\n            this.props.verticalAxis.shouldShowLogNotice &&\n            // Only show the notice if it fits in the margin\n            this.props.verticalAxis.logNoticeWidth <= this.verticalAxisSize\n        )\n    }\n}\n\nfunction hideOverlappingTickLabels(\n    tickLabels: TickLabelPlacement[],\n    { padding = 0 }: { padding?: number } = {}\n): TickLabelPlacement[] {\n    for (let i = 0; i < tickLabels.length; i++) {\n        for (let j = i + 1; j < tickLabels.length; j++) {\n            const t1 = tickLabels[i],\n                t2 = tickLabels[j]\n            if (t1 === t2 || t1.isHidden || t2.isHidden) continue\n            if (\n                doIntersect(\n                    // Expand bounds so that labels aren't too close together.\n                    boundsFromLabelPlacement(t1).expand(padding),\n                    boundsFromLabelPlacement(t2).expand(padding)\n                )\n            )\n                t2.isHidden = true\n        }\n    }\n    return tickLabels.filter((tick) => !tick.isHidden)\n}\n","import * as _ from \"lodash-es\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport {\n    trimObject,\n    deleteRuntimeAndUnchangedProps,\n    Persistable,\n    AxisAlign,\n    Position,\n    TickFormattingOptions,\n    Bounds,\n} from \"@ourworldindata/utils\"\nimport { observable, computed, makeObservable } from \"mobx\"\nimport { HorizontalAxis, VerticalAxis } from \"./Axis\"\nimport {\n    AxisMinMaxValueStr,\n    AxisConfigInterface,\n    FacetAxisDomain,\n    ScaleType,\n    Tickmark,\n} from \"@ourworldindata/types\"\n\nexport interface AxisManager {\n    fontSize: number\n    axisBounds?: Bounds\n    detailsOrderedByReference?: string[]\n}\n\nclass AxisConfigDefaults implements AxisConfigInterface {\n    orient: Position | undefined = undefined\n    min: number | undefined = undefined\n    max: number | undefined = undefined\n    canChangeScaleType: boolean | undefined = undefined\n    removePointsOutsideDomain: boolean | undefined = undefined\n    minSize: number | undefined = undefined\n    hideAxis: boolean | undefined = undefined\n    hideGridlines: boolean | undefined = undefined\n    hideTickLabels: boolean | undefined = undefined\n    labelPadding: number | undefined = undefined\n    tickPadding: number | undefined = undefined\n    nice: boolean | undefined = undefined\n    maxTicks: number | undefined = undefined\n    tickFormattingOptions: TickFormattingOptions | undefined = undefined\n    scaleType: ScaleType | undefined = ScaleType.linear\n    facetDomain: FacetAxisDomain | undefined = undefined\n    ticks: Tickmark[] | undefined = undefined\n    singleValueAxisPointAlign: AxisAlign | undefined = undefined\n    label: string | undefined = undefined\n    domainValues: number[] | undefined = undefined\n\n    constructor() {\n        makeObservable(this, {\n            orient: observable.ref,\n            min: observable.ref,\n            max: observable.ref,\n            canChangeScaleType: observable.ref,\n            removePointsOutsideDomain: observable.ref,\n            minSize: observable.ref,\n            hideAxis: observable.ref,\n            hideGridlines: observable.ref,\n            hideTickLabels: observable.ref,\n            labelPadding: observable.ref,\n            tickPadding: observable.ref,\n            nice: observable.ref,\n            maxTicks: observable.ref,\n            tickFormattingOptions: observable.ref,\n            scaleType: observable.ref,\n            facetDomain: observable.ref,\n            ticks: observable.ref,\n            singleValueAxisPointAlign: observable.ref,\n            label: observable.ref,\n            domainValues: observable.ref,\n        })\n    }\n}\n\nfunction parseMinFromJSON(\n    value: AxisMinMaxValueStr.auto | number | undefined\n): number | undefined {\n    if (value === AxisMinMaxValueStr.auto) return Infinity\n    return value\n}\n\nfunction parseMaxFromJSON(\n    value: AxisMinMaxValueStr.auto | number | undefined\n): number | undefined {\n    if (value === AxisMinMaxValueStr.auto) return -Infinity\n    return value\n}\n\nexport class AxisConfig\n    extends AxisConfigDefaults\n    implements AxisConfigInterface, Persistable\n{\n    constructor(props?: AxisConfigInterface, axisManager?: AxisManager) {\n        super()\n        makeObservable(this)\n        this.updateFromObject(props)\n        this.axisManager = axisManager\n    }\n\n    axisManager?: AxisManager\n\n    // todo: test/refactor\n    updateFromObject(props?: AxisConfigInterface): void {\n        if (props) _.extend(this, props)\n        if (props?.min) this.min = parseMinFromJSON(props?.min)\n        if (props?.max) this.max = parseMaxFromJSON(props?.max)\n    }\n\n    toObject(): AxisConfigInterface {\n        const obj = trimObject({\n            orient: this.orient,\n            min: this.min,\n            max: this.max,\n            canChangeScaleType: this.canChangeScaleType,\n            removePointsOutsideDomain: this.removePointsOutsideDomain,\n            minSize: this.minSize,\n            hideAxis: this.hideAxis,\n            hideGridlines: this.hideGridlines,\n            hideTickLabels: this.hideTickLabels,\n            labelPadding: this.labelPadding,\n            nice: this.nice,\n            maxTicks: this.maxTicks,\n            tickFormattingOptions: this.tickFormattingOptions,\n            scaleType: this.scaleType,\n            label: this.label ? this.label : undefined,\n            facetDomain: this.facetDomain,\n            ticks: this.ticks,\n            singleValueAxisPointAlign: this.singleValueAxisPointAlign,\n            domainValues: this.domainValues,\n        }) as AxisConfigInterface\n\n        deleteRuntimeAndUnchangedProps(obj, new AxisConfigDefaults())\n\n        if (obj.min === Infinity) obj.min = AxisMinMaxValueStr.auto\n        if (obj.max === -Infinity) obj.max = AxisMinMaxValueStr.auto\n\n        return obj\n    }\n\n    @computed get fontSize(): number {\n        return this.axisManager?.fontSize || BASE_FONT_SIZE\n    }\n\n    // A log scale domain cannot have values <= 0, so we double check here\n    @computed private get constrainedMin(): number {\n        if (this.scaleType === ScaleType.log && (this.min ?? 0) <= 0)\n            return Infinity\n        return this.min ?? Infinity\n    }\n\n    // If the author has specified a min/max AND to remove points outside the domain, this should return true\n    shouldRemovePoint(value: number): boolean {\n        if (!this.removePointsOutsideDomain) return false\n        if (this.min !== undefined && value < this.min) return true\n        if (this.max !== undefined && value > this.max) return true\n        return false\n    }\n\n    @computed private get constrainedMax(): number {\n        if (this.scaleType === ScaleType.log && (this.max || 0) <= 0)\n            return -Infinity\n        return this.max ?? -Infinity\n    }\n\n    @computed get domain(): [number, number] {\n        return [this.constrainedMin, this.constrainedMax]\n    }\n\n    // Convert axis configuration to a finalized axis spec by supplying\n    // any needed information calculated from the data\n    toHorizontalAxis(): HorizontalAxis {\n        return new HorizontalAxis(this, this.axisManager)\n    }\n\n    toVerticalAxis(): VerticalAxis {\n        return new VerticalAxis(this, this.axisManager)\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    Bounds,\n    ColumnSlug,\n    PointVector,\n    ValueRange,\n} from \"@ourworldindata/utils\"\nimport {\n    SCATTER_LABEL_FONT_SIZE_FACTOR_WHEN_HIDDEN_LINES,\n    SCATTER_LINE_DEFAULT_WIDTH,\n    SCATTER_LINE_MAX_WIDTH,\n    SCATTER_POINT_DEFAULT_RADIUS,\n    SCATTER_POINT_MAX_RADIUS,\n    ScatterLabel,\n    ScatterRenderPoint,\n    ScatterRenderSeries,\n} from \"./ScatterPlotChartConstants\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants.js\"\nimport { ScatterPlotChartState } from \"./ScatterPlotChartState\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\n\nexport const labelPriority = (label: ScatterLabel): number => {\n    let priority = label.fontSize\n\n    if (label.series.isHover) priority += 10000\n    if (label.series.isFocus) priority += 1000\n    if (label.isEnd) priority += 100\n\n    return priority\n}\n\n// Create the start year label for a series\nexport const makeStartLabel = (\n    series: ScatterRenderSeries,\n    isSubtleForeground: boolean,\n    hideConnectedScatterLines: boolean,\n    baseFontSize: number\n): ScatterLabel | undefined => {\n    // No room to label the year if it's a single point\n    if (!series.isForeground || series.points.length <= 1) return undefined\n\n    const fontSize = hideConnectedScatterLines\n        ? SCATTER_LABEL_FONT_SIZE_FACTOR_WHEN_HIDDEN_LINES * baseFontSize\n        : series.isForeground\n          ? isSubtleForeground\n              ? (8 / BASE_FONT_SIZE) * baseFontSize\n              : (9 / BASE_FONT_SIZE) * baseFontSize\n          : (7 / BASE_FONT_SIZE) * baseFontSize\n    const firstValue = series.points[0]\n    const nextValue = series.points[1]\n    const nextSegment = nextValue.position.subtract(firstValue.position)\n\n    const pos = firstValue.position.subtract(nextSegment.normalize().times(5))\n    let bounds = Bounds.forText(firstValue.label, {\n        x: pos.x,\n        y: pos.y,\n        fontSize: fontSize,\n    })\n    if (pos.x < firstValue.position.x)\n        bounds = new Bounds(\n            bounds.x - bounds.width + 2,\n            bounds.y,\n            bounds.width,\n            bounds.height\n        )\n    if (pos.y > firstValue.position.y)\n        bounds = new Bounds(\n            bounds.x,\n            bounds.y + bounds.height / 2,\n            bounds.width,\n            bounds.height\n        )\n\n    return {\n        text: firstValue.label,\n        fontSize,\n        fontWeight: 400,\n        color: firstValue.color,\n        bounds,\n        series,\n        isStart: true,\n    }\n}\n\n// Make labels for the points between start and end on a series\n// Positioned using normals of the line segments\nexport const makeMidLabels = (\n    series: ScatterRenderSeries,\n    isSubtleForeground: boolean,\n    hideConnectedScatterLines: boolean,\n    baseFontSize: number\n): ScatterLabel[] => {\n    if (\n        !series.isForeground ||\n        series.points.length <= 1 ||\n        (!series.isHover && isSubtleForeground)\n    )\n        return []\n\n    const fontSize = hideConnectedScatterLines\n        ? SCATTER_LABEL_FONT_SIZE_FACTOR_WHEN_HIDDEN_LINES * baseFontSize\n        : series.isForeground\n          ? isSubtleForeground\n              ? (8 / BASE_FONT_SIZE) * baseFontSize\n              : (9 / BASE_FONT_SIZE) * baseFontSize\n          : (7 / BASE_FONT_SIZE) * baseFontSize\n    const fontWeight = 400\n\n    // label all the way to the end for the tooltip series, otherwise to n-1\n    const lastIndex = series.isTooltip && !series.isFocus ? Infinity : -1\n\n    return series.points.slice(1, lastIndex).map((v, i) => {\n        const prevPos = i > 0 && series.points[i - 1].position\n        const prevSegment = prevPos && v.position.subtract(prevPos)\n        const nextPos = series.points[i + 1].position\n        const nextSegment = nextPos.subtract(v.position)\n\n        let pos: PointVector\n        if (prevPos && prevSegment) {\n            const normals = prevSegment\n                .add(nextSegment)\n                .normalize()\n                .normals()\n                .map((x) => x.times(5))\n            const potentialSpots = normals.map((n) => v.position.add(n))\n            pos = _.maxBy(potentialSpots, (p) => {\n                return (\n                    PointVector.distance(p, prevPos) +\n                    PointVector.distance(p, nextPos)\n                )\n            }) as PointVector\n        } else {\n            pos = v.position.subtract(nextSegment.normalize().times(5))\n        }\n\n        let bounds = Bounds.forText(v.label, {\n            x: pos.x,\n            y: pos.y,\n            fontSize: fontSize,\n            fontWeight: fontWeight,\n        })\n        if (pos.x < v.position.x)\n            bounds = new Bounds(\n                bounds.x - bounds.width + 2,\n                bounds.y,\n                bounds.width,\n                bounds.height\n            )\n        if (pos.y > v.position.y)\n            bounds = new Bounds(\n                bounds.x,\n                bounds.y + bounds.height / 2,\n                bounds.width,\n                bounds.height\n            )\n\n        return {\n            text: v.label,\n            fontSize,\n            fontWeight,\n            color: v.color,\n            bounds,\n            series,\n            isMid: true,\n        }\n    })\n}\n\n// Make the end label (entity label) for a series. Will be pushed\n// slightly out based on the direction of the series if multiple values\n// are present\n// This is also the one label in the case of a single point\nexport const makeEndLabel = (\n    series: ScatterRenderSeries,\n    isSubtleForeground: boolean,\n    hideConnectedScatterLines: boolean,\n    baseFontSize: number\n): ScatterLabel => {\n    const lastValue = R.last(series.points) as ScatterRenderPoint\n    const lastPos = lastValue.position\n    const fontSize = hideConnectedScatterLines\n        ? SCATTER_LABEL_FONT_SIZE_FACTOR_WHEN_HIDDEN_LINES * baseFontSize\n        : series.fontSize *\n          (series.isForeground ? (isSubtleForeground ? 1.2 : 1.3) : 1.1)\n    const fontWeight =\n        series.isForeground && !hideConnectedScatterLines ? 700 : 400\n\n    let offsetVector = PointVector.up\n    if (series.points.length > 1) {\n        const prevValue = series.points[series.points.length - 2]\n        const prevPos = prevValue.position\n        offsetVector = lastPos.subtract(prevPos)\n    }\n    series.offsetVector = offsetVector\n\n    const labelPos = lastPos.add(\n        offsetVector\n            .normalize()\n            .times(series.points.length === 1 ? lastValue.size + 1 : 5)\n    )\n\n    let labelBounds = Bounds.forText(series.text, {\n        x: labelPos.x,\n        y: labelPos.y,\n        fontSize: fontSize,\n    })\n\n    if (labelPos.x < lastPos.x)\n        labelBounds = labelBounds.set({\n            x: labelBounds.x - labelBounds.width,\n        })\n    if (labelPos.y > lastPos.y)\n        labelBounds = labelBounds.set({\n            y: labelBounds.y + labelBounds.height / 2,\n        })\n\n    return {\n        text:\n            hideConnectedScatterLines && series.isForeground\n                ? lastValue.label\n                : series.isTooltip && !series.isFocus\n                  ? \"\" // don't doubly label the series name when the tooltip is visible\n                  : series.text,\n        fontSize,\n        fontWeight,\n        color: lastValue.color,\n        bounds: labelBounds,\n        series,\n        isEnd: true,\n    }\n}\n\nexport function toSizeRange(\n    chartState: ScatterPlotChartState,\n    bounds: Bounds\n): [number, number] {\n    if (chartState.sizeColumn.isMissing) {\n        // if the size column is missing, we want all points/lines to have the same width\n        return chartState.isConnected\n            ? [SCATTER_LINE_DEFAULT_WIDTH, SCATTER_LINE_DEFAULT_WIDTH]\n            : [SCATTER_POINT_DEFAULT_RADIUS, SCATTER_POINT_DEFAULT_RADIUS]\n    }\n\n    const maxLineWidth = SCATTER_LINE_MAX_WIDTH\n    const maxPointRadius = Math.min(\n        SCATTER_POINT_MAX_RADIUS,\n        _.round(Math.min(bounds.width, bounds.height) * 0.06, 1)\n    )\n\n    return chartState.isConnected\n        ? // Note that the scale starts at 0.\n          // When using the scale to plot marks, we need to make sure the minimums\n          // (e.g. `SCATTER_POINT_MIN_RADIUS`) are respected.\n          [0, maxLineWidth]\n        : [0, maxPointRadius]\n}\n\nexport function computeSizeDomain(\n    table: OwidTable,\n    slug: ColumnSlug\n): ValueRange {\n    const sizeValues = table.get(slug).values.filter(_.isNumber)\n    return [0, _.max(sizeValues) ?? 1]\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    CoreColumn,\n    defaultIfErrorValue,\n    isNotErrorValue,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport {\n    SCATTER_POINT_DEFAULT_COLOR,\n    ScatterPlotManager,\n    ScatterSeries,\n    SeriesPoint,\n} from \"./ScatterPlotChartConstants\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    autoDetectYColumnSlugs,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport {\n    ChartErrorInfo,\n    ColorSchemeName,\n    EntityName,\n    ScaleType,\n    ScatterPointLabelStrategy,\n    ColorScaleConfigInterface,\n    SeriesName,\n    ValueRange,\n} from \"@ourworldindata/types\"\nimport {\n    domainExtent,\n    intersection,\n    lowerCaseFirstLetterUnlessAbbreviation,\n} from \"@ourworldindata/utils\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport { OWID_NO_DATA_GRAY } from \"../color/ColorConstants\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { computeSizeDomain } from \"./ScatterUtils\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis.js\"\n\nexport class ScatterPlotChartState implements ChartState, ColorScaleManager {\n    manager: ScatterPlotManager\n\n    colorScale: ColorScale\n    defaultBaseColorScheme = ColorSchemeName.continents\n    defaultNoDataColor = OWID_NO_DATA_GRAY\n\n    constructor({ manager }: { manager: ScatterPlotManager }) {\n        this.manager = manager\n        this.colorScale = manager.colorScaleOverride ?? new ColorScale(this)\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTableFromGrapher(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    // TODO chunk this up into multiple computeds for better performance?\n    @computed get transformedTable(): OwidTable {\n        let table = this.transformedTableFromGrapher\n        // We don't want to apply this transform when relative mode is also enabled, it has a\n        // slightly different endpoints logic that drops initial zeroes to avoid DivideByZero error.\n        if (this.compareEndPointsOnly && !this.manager.isRelativeMode) {\n            table = table.keepMinTimeAndMaxTimeForEachEntityOnly()\n        }\n        if (this.manager.isRelativeMode) {\n            table = table.toAverageAnnualChangeForEachEntity([\n                this.xColumnSlug,\n                this.yColumnSlug,\n            ])\n        }\n        return table\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        // Drop all entities that have no data in either the X or Y column.\n        // For some charts, this can drop more than 50% of rows, so we do it first.\n        // If there's no data at all for an entity, then tolerance can also not \"recover\" any data, so this is safe to do.\n        table = table.dropEntitiesThatHaveNoDataInSomeColumn([\n            this.xColumnSlug,\n            this.yColumnSlug,\n        ])\n\n        if (this.xScaleType === ScaleType.log && this.xColumnSlug)\n            table = table.replaceNonPositiveCellsForLogScale([this.xColumnSlug])\n\n        if (this.yScaleType === ScaleType.log && this.yColumnSlug)\n            table = table.replaceNonPositiveCellsForLogScale([this.yColumnSlug])\n\n        if (this.colorColumnSlug && this.manager.matchingEntitiesOnly)\n            table = table.dropRowsWithErrorValuesForColumn(this.colorColumnSlug)\n\n        // We want to \"chop off\" any rows outside the time domain for X and Y to avoid creating\n        // leading and trailing timeline times that don't really exist in the dataset.\n        const [timeDomainStart, timeDomainEnd] = table.timeDomainFor([\n            this.xColumnSlug,\n            this.yColumnSlug,\n        ])\n        table = table.filterByTimeRange(\n            timeDomainStart ?? -Infinity,\n            timeDomainEnd ?? Infinity\n        )\n\n        if (this.xOverrideTime !== undefined) {\n            table = table.interpolateColumnWithTolerance(this.yColumnSlug)\n        } else {\n            table = table.interpolateColumnsByClosestTimeMatch(\n                this.xColumnSlug,\n                this.yColumnSlug\n            )\n        }\n\n        // Drop any rows which have non-number values for X or Y.\n        // This needs to be done after the tolerance, because the tolerance may fill in some gaps.\n        table = table\n            .columnFilter(\n                this.xColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in X column\"\n            )\n            .columnFilter(\n                this.yColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in Y column\"\n            )\n\n        // The tolerance application might lead to some data being dropped for some years.\n        // For example, if X times are [2000, 2005, 2010], and Y times are [2005], then for all 3\n        // rows we have the same match [[2005, 2005], [2005, 2005], [2005, 2005]].\n        // This means we can drop 2000 and 2010 from the timeline.\n        // It might not make a huge difference here, but it makes a difference when there are more\n        // entities covering different time periods.\n        const [originalTimeDomainStart, originalTimeDomainEnd] =\n            table.originalTimeDomainFor([this.xColumnSlug, this.yColumnSlug])\n        table = table.filterByTimeRange(\n            originalTimeDomainStart ?? -Infinity,\n            originalTimeDomainEnd ?? Infinity\n        )\n\n        return table\n    }\n\n    transformTableForDisplay(table: OwidTable): OwidTable {\n        // Drop any rows which have non-number values for X or Y.\n        table = table\n            .columnFilter(\n                this.xColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in X column\"\n            )\n            .columnFilter(\n                this.yColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in Y column\"\n            )\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    // todo: remove. do this at table filter level\n    @computed get seriesNamesToHighlight(): Set<SeriesName> {\n        const seriesNames = this.selectionArray.selectedEntityNames\n\n        if (this.manager.matchingEntitiesOnly && !this.colorColumn.isMissing)\n            return new Set(\n                intersection(seriesNames, this.colorColumn.uniqEntityNames)\n            )\n\n        return new Set(seriesNames)\n    }\n\n    // todo: remove this. Should be done as a simple column transform at the data level.\n    // Possible to override the x axis dimension to target a special year\n    // In case you want to graph say, education in the past and democracy today https://ourworldindata.org/grapher/correlation-between-education-and-democracy\n    @computed get xOverrideTime(): number | undefined {\n        return this.manager.xOverrideTime\n    }\n\n    @computed get compareEndPointsOnly(): boolean {\n        return !!this.manager.compareEndPointsOnly\n    }\n\n    @computed get xScaleType(): ScaleType {\n        return this.manager.isRelativeMode\n            ? ScaleType.linear\n            : (this.manager.xAxisConfig?.scaleType ?? ScaleType.linear)\n    }\n\n    @computed get yScaleType(): ScaleType {\n        return this.manager.isRelativeMode\n            ? ScaleType.linear\n            : (this.manager.yAxisConfig?.scaleType ?? ScaleType.linear)\n    }\n\n    @computed get yColumnSlug(): string {\n        return autoDetectYColumnSlugs(this.manager)[0]\n    }\n\n    @computed get yColumn(): CoreColumn {\n        return this.transformedTable.get(this.yColumnSlug)\n    }\n\n    @computed get xColumnSlug(): string {\n        const { xColumnSlug } = this.manager\n        return xColumnSlug ?? this.manager.table.timeColumn.slug\n    }\n\n    @computed get isTimeScatter(): boolean {\n        return this.manager.xColumnSlug === undefined\n    }\n\n    @computed get xColumn(): CoreColumn {\n        return this.transformedTable.get(this.xColumnSlug)\n    }\n\n    @computed get sizeColumnSlug(): string | undefined {\n        return this.manager.sizeColumnSlug\n    }\n\n    @computed get sizeColumn(): CoreColumn {\n        return this.transformedTable.get(this.sizeColumnSlug)\n    }\n\n    @computed get colorColumnSlug(): string | undefined {\n        return this.manager.colorColumnSlug\n    }\n\n    @computed get colorColumn(): CoreColumn {\n        return this.transformedTable.get(this.colorColumnSlug)\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        return (\n            // For faceted charts, we have to get the values of inputTable before it's filtered by\n            // the faceting logic.\n            this.manager.colorScaleColumnOverride ?? // We need to use inputTable in order to get consistent coloring for a variable across\n            // charts, e.g. each continent being assigned to the same color.\n            // inputTable is unfiltered, so it contains every value that exists in the variable.\n            this.inputTable.get(this.colorColumnSlug)\n        )\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return (\n            ColorScaleConfig.fromDSL(this.colorColumn.def) ??\n            this.manager.colorScale\n        )\n    }\n\n    @computed get hasNoDataBin(): boolean {\n        if (this.colorColumn.isMissing) return false\n        return this.colorColumn.valuesIncludingErrorValues.some(\n            (value) => !isNotErrorValue(value)\n        )\n    }\n\n    @computed private get allEntityNamesWithXAndY(): EntityName[] {\n        return intersection(\n            this.yColumn.uniqEntityNames,\n            this.xColumn.uniqEntityNames\n        )\n    }\n\n    private assignColorToSeries(\n        entityName: EntityName,\n        series: ScatterSeries\n    ): void {\n        if (series.points.length) {\n            const keyColor =\n                this.transformedTable.getColorForEntityName(entityName)\n            if (keyColor !== undefined) series.color = keyColor\n            else if (!this.colorColumn.isMissing) {\n                const colorValue = R.last(series.points)?.color\n                const color = this.colorScale.getColor(colorValue)\n                if (color !== undefined) {\n                    series.color = color\n                    series.isScaleColor = true\n                }\n            }\n        }\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        return new AxisConfig(this.manager.xAxisConfig, this)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(this.manager.yAxisConfig, this)\n    }\n\n    private removePointsOutsidePlane(points: SeriesPoint[]): SeriesPoint[] {\n        const { xAxisConfig, yAxisConfig } = this\n\n        if (\n            yAxisConfig.removePointsOutsideDomain ||\n            xAxisConfig.removePointsOutsideDomain\n        ) {\n            return points.filter((point) => {\n                return (\n                    !xAxisConfig.shouldRemovePoint(point.x) &&\n                    !yAxisConfig.shouldRemovePoint(point.y)\n                )\n            })\n        }\n        return points\n    }\n\n    private getPointLabel(rowIndex: number): string | undefined {\n        const strat = this.manager.scatterPointLabelStrategy\n        const { xColumn, yColumn } = this\n        const { timeColumn } = this.transformedTable\n        let label\n        if (strat === ScatterPointLabelStrategy.y) {\n            label = yColumn?.formatValue(\n                yColumn.valuesIncludingErrorValues[rowIndex]\n            )\n        } else if (strat === ScatterPointLabelStrategy.x) {\n            label = xColumn?.formatValue(\n                xColumn.valuesIncludingErrorValues[rowIndex]\n            )\n        } else {\n            label = timeColumn.formatTime(\n                timeColumn.valuesIncludingErrorValues[rowIndex] as number\n            )\n        }\n        return label\n    }\n\n    @computed private get allPointsBeforeEndpointsFilter(): SeriesPoint[] {\n        const { entityNameColumn, timeColumn } = this.transformedTable\n        const { xColumn, yColumn, sizeColumn, colorColumn } = this\n\n        // We are running this filter first because it only depends on author-specified config, not\n        // on any user interaction.\n        return this.removePointsOutsidePlane(\n            this.transformedTable.indices.map((rowIndex) => {\n                return {\n                    x: xColumn.valuesIncludingErrorValues[rowIndex] as number,\n                    y: yColumn.valuesIncludingErrorValues[rowIndex] as number,\n                    size: defaultIfErrorValue(\n                        sizeColumn.valuesIncludingErrorValues[rowIndex],\n                        undefined\n                    ) as number | undefined,\n                    color: defaultIfErrorValue(\n                        colorColumn.valuesIncludingErrorValues[rowIndex],\n                        undefined\n                    ) as string | number | undefined,\n                    entityName: entityNameColumn.valuesIncludingErrorValues[\n                        rowIndex\n                    ] as EntityName,\n                    label: this.getPointLabel(rowIndex) ?? \"\",\n                    timeValue: timeColumn.valuesIncludingErrorValues[\n                        rowIndex\n                    ] as number,\n                    time: {\n                        x: xColumn.originalTimeColumn\n                            .valuesIncludingErrorValues[rowIndex] as number,\n                        y: yColumn.originalTimeColumn\n                            .valuesIncludingErrorValues[rowIndex] as number,\n                        // Technically, to be more correct, we should support distinct\n                        // start and end times for each axis, but for simplicity we use\n                        // a single span (see getAverageAnnualChangeIndicesByEntity)\n                        span: this.manager.isRelativeMode\n                            ? [\n                                  yColumn.originalStartTimeColumn\n                                      .valuesIncludingErrorValues[\n                                      rowIndex\n                                  ] as number,\n                                  yColumn.originalTimeColumn\n                                      .valuesIncludingErrorValues[\n                                      rowIndex\n                                  ] as number,\n                              ]\n                            : undefined,\n                    },\n                }\n            })\n        )\n    }\n\n    @computed get series(): ScatterSeries[] {\n        return Object.entries(\n            _.groupBy(this.allPointsBeforeEndpointsFilter, (p) => p.entityName)\n        ).map(([entityName, points]) => {\n            const shortEntityName = getShortNameForEntity(entityName)\n            const series: ScatterSeries = {\n                seriesName: entityName,\n                label: shortEntityName ?? entityName,\n                color: SCATTER_POINT_DEFAULT_COLOR,\n                points,\n                focus: this.focusArray.state(entityName),\n            }\n            this.assignColorToSeries(entityName, series)\n            return series\n        })\n    }\n\n    /** Whether series are shown as lines (instead of single points) */\n    @computed get isConnected(): boolean {\n        return this.series.some((s) => s.points.length > 1)\n    }\n\n    @computed get allPoints(): SeriesPoint[] {\n        return this.series.flatMap((series) => series.points)\n    }\n\n    @computed private get selectedPoints(): SeriesPoint[] {\n        const seriesNamesSet = this.seriesNamesToHighlight\n        return this.allPoints.filter(\n            (point) => point.entityName && seriesNamesSet.has(point.entityName)\n        )\n    }\n\n    @computed get pointsForAxisDomains(): SeriesPoint[] {\n        if (\n            !this.selectionArray.numSelectedEntities ||\n            !this.manager.zoomToSelection\n        )\n            return this.allPoints\n\n        return this.selectedPoints.length ? this.selectedPoints : this.allPoints\n    }\n\n    // domains across the entire timeline\n    private domainDefault(property: \"x\" | \"y\"): [number, number] {\n        const scaleType = property === \"x\" ? this.xScaleType : this.yScaleType\n        const defaultDomain: [number, number] =\n            scaleType === ScaleType.log ? [1, 100] : [-1, 1]\n        return (\n            domainExtent(\n                this.pointsForAxisDomains.map((point) => point[property]),\n                scaleType,\n                this.manager.zoomToSelection && this.selectedPoints.length\n                    ? 1.1\n                    : 1\n            ) ?? defaultDomain\n        )\n    }\n\n    @computed get xDomainDefault(): [number, number] {\n        return this.domainDefault(\"x\")\n    }\n\n    @computed get yDomainDefault(): [number, number] {\n        return this.domainDefault(\"y\")\n    }\n\n    @computed get sizeDomain(): [number, number] {\n        if (this.sizeColumn.isMissing) return [1, 100]\n        if (\n            this.manager.isSingleTimeScatterAnimationActive &&\n            this.domainsForAnimation.size\n        ) {\n            return this.domainsForAnimation.size\n        }\n        return computeSizeDomain(this.transformedTable, this.sizeColumn.slug)\n    }\n\n    @computed get domainsForAnimation(): {\n        x?: ValueRange\n        y?: ValueRange\n        size?: ValueRange\n    } {\n        const { inputTable } = this\n        const { animationStartTime, animationEndTime } = this.manager\n\n        if (!animationStartTime || !animationEndTime) return {}\n\n        let table = inputTable.filterByTimeRange(\n            animationStartTime,\n            animationEndTime\n        )\n\n        if (this.manager.matchingEntitiesOnly && !this.colorColumn.isMissing) {\n            table = table.filterByEntityNames(\n                table.get(this.colorColumnSlug).uniqEntityNames\n            )\n        }\n\n        table = table\n            .columnFilter(\n                this.xColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in X column\"\n            )\n            .columnFilter(\n                this.yColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in Y column\"\n            )\n\n        const xValues = table.get(this.xColumnSlug).uniqValues\n        const yValues = table.get(this.yColumnSlug).uniqValues\n\n        return {\n            x: domainExtent(xValues, this.xScaleType),\n            y: domainExtent(yValues, this.yScaleType),\n            size: computeSizeDomain(table, this.sizeColumn.slug),\n        }\n    }\n\n    @computed get validValuesForAxisDomainX(): number[] {\n        const { xScaleType, pointsForAxisDomains } = this\n\n        const values = pointsForAxisDomains.map((point) => point.x)\n        return xScaleType === ScaleType.log\n            ? values.filter((v) => v > 0)\n            : values\n    }\n\n    @computed get validValuesForAxisDomainY(): number[] {\n        const { yScaleType, pointsForAxisDomains } = this\n\n        const values = pointsForAxisDomains.map((point) => point.y)\n        return yScaleType === ScaleType.log\n            ? values.filter((v) => v > 0)\n            : values\n    }\n\n    @computed get verticalAxisLabel(): string {\n        const yAxisConfig = this.manager.yAxisConfig\n\n        let label = yAxisConfig?.label || this.yColumn?.displayName || \"\"\n\n        if (this.manager.isRelativeMode && label && label.length > 1) {\n            label = `Average annual change in ${lowerCaseFirstLetterUnlessAbbreviation(\n                label\n            )}`\n        }\n\n        return label.trim()\n    }\n\n    @computed private get horizontalAxisLabelBase(): string {\n        const xDimName = this.xColumn?.displayName ?? \"\"\n        if (this.xOverrideTime !== undefined)\n            return `${xDimName} in ${this.xOverrideTime}`\n        return xDimName\n    }\n\n    @computed get horizontalAxisLabel(): string {\n        const xAxisConfig = this.manager.xAxisConfig\n\n        let label = xAxisConfig?.label || this.horizontalAxisLabelBase\n        if (this.manager.isRelativeMode && label && label.length > 1) {\n            label = `Average annual change in ${lowerCaseFirstLetterUnlessAbbreviation(\n                label\n            )}`\n        }\n\n        return label.trim()\n    }\n\n    toHorizontalAxis(config: AxisConfig): HorizontalAxis {\n        const axis = config.toHorizontalAxis()\n\n        axis.formatColumn = this.xColumn\n        axis.scaleType = this.xScaleType\n\n        if (this.horizontalAxisLabel) axis.label = this.horizontalAxisLabel\n\n        if (\n            this.manager.isSingleTimeScatterAnimationActive &&\n            this.domainsForAnimation.x\n        ) {\n            axis.updateDomainPreservingUserSettings(this.domainsForAnimation.x)\n        } else if (this.manager.isRelativeMode) {\n            axis.domain = this.xDomainDefault // Overwrite author's min/max\n        } else {\n            const isAnyValueOutsideUserDomain =\n                this.validValuesForAxisDomainX.some(\n                    (value) => value < axis.domain[0] || value > axis.domain[1]\n                )\n\n            // only overwrite the authors's min/max if there is more than one unique value along the x-axis\n            // or if respecting the author's setting would hide data points\n            if (\n                new Set(this.validValuesForAxisDomainX).size > 1 ||\n                isAnyValueOutsideUserDomain\n            ) {\n                axis.updateDomainPreservingUserSettings(this.xDomainDefault)\n            }\n        }\n\n        return axis\n    }\n\n    toVerticalAxis(config: AxisConfig): VerticalAxis {\n        const axis = config.toVerticalAxis()\n\n        axis.formatColumn = this.yColumn\n        axis.scaleType = this.yScaleType\n        if (this.verticalAxisLabel) axis.label = this.verticalAxisLabel\n\n        if (\n            this.manager.isSingleTimeScatterAnimationActive &&\n            this.domainsForAnimation.y\n        ) {\n            axis.updateDomainPreservingUserSettings(this.domainsForAnimation.y)\n        } else if (this.manager.isRelativeMode) {\n            axis.domain = this.yDomainDefault // Overwrite author's min/max\n        } else {\n            const isAnyValueOutsideUserDomain =\n                this.validValuesForAxisDomainY.some(\n                    (value) => value < axis.domain[0] || value > axis.domain[1]\n                )\n\n            // only overwrite the authors's min/max if there is more than one unique value along the y-axis\n            // or if respecting the author's setting would hide data points\n            if (\n                new Set(this.validValuesForAxisDomainY).size > 1 ||\n                isAnyValueOutsideUserDomain\n            ) {\n                axis.updateDomainPreservingUserSettings(this.yDomainDefault)\n            }\n        }\n\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        if (this.yColumn.isMissing) return { reason: \"Missing Y axis variable\" }\n\n        if (this.xColumn.isMissing) return { reason: \"Missing X axis variable\" }\n\n        const { entityTypePlural = \"entities\" } = this.manager\n        if (_.isEmpty(this.allEntityNamesWithXAndY)) {\n            if (\n                this.manager.isRelativeMode &&\n                this.manager.hasTimeline &&\n                this.manager.startTime === this.manager.endTime\n            ) {\n                return {\n                    reason: \"Please select a start and end point on the timeline below\",\n                }\n            }\n            return {\n                reason: `No ${entityTypePlural} with data for both X and Y`,\n            }\n        }\n\n        if (_.isEmpty(this.series))\n            return {\n                reason: `No data for any ${entityTypePlural}`,\n            }\n\n        return { reason: \"\" }\n    }\n}\n","import { ChartManager } from \"../chart/ChartManager\"\n\nimport {\n    Color,\n    SortConfig,\n    Time,\n    Bounds,\n    EntityName,\n    ColumnSlug,\n} from \"@ourworldindata/utils\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { StackedPoint } from \"./StackedConstants\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\n\nexport interface MarimekkoChartManager extends ChartManager {\n    endTime?: Time\n    matchingEntitiesOnly?: boolean\n    xOverrideTime?: number\n    tableAfterAuthorTimelineAndActiveChartTransform?: OwidTable\n    sortConfig?: SortConfig\n    hideNoDataArea?: boolean\n    hasScatter?: boolean // x-axis is ignored if a secondary scatter plot is present\n}\n\nexport interface EntityColorData {\n    color: Color\n    colorDomainValue: string\n}\n\n// Points used on the X axis\nexport interface SimplePoint {\n    value: number\n    entity: string\n    time: number\n}\n\nexport interface SimpleChartSeries {\n    seriesName: string\n    points: SimplePoint[]\n}\n\nexport enum BarShape {\n    Bar,\n    BarPlaceholder,\n}\n\nexport interface Bar {\n    kind: BarShape.Bar\n    color: Color // color from the variable\n    seriesName: string\n    yPoint: StackedPoint<EntityName>\n    columnSlug?: ColumnSlug\n}\n\nexport interface BarPlaceholder {\n    kind: BarShape.BarPlaceholder\n    seriesName: string\n    height: number\n}\n\nexport type BarOrPlaceholder = Bar | BarPlaceholder\n\nexport interface Item {\n    entityName: string\n    shortEntityName?: string\n    entityColor: EntityColorData | undefined\n    bars: Bar[] // contains the y values for every y variable\n    xPoint: SimplePoint | undefined // contains the single x value\n    focus: InteractionState\n}\n\nexport interface PlacedItem extends Item {\n    xPosition: number // x value (in pixel space) when placed in final sorted order and including shifts due to one pixel entity minimum\n}\n\nexport interface EntityWithSize {\n    entityName: string\n    shortEntityName?: string\n    xValue: number\n    ySortValue: number | undefined\n}\nexport interface LabelCandidate {\n    item: EntityWithSize\n    label: string\n    bounds: Bounds\n    isPicked: boolean\n    isSelected: boolean\n}\n\nexport interface LabelWithPlacement {\n    label: React.ReactElement\n    preferredPlacement: number\n    correctedPlacement: number\n    labelKey: string\n}\n\nexport interface LabelCandidateWithElement {\n    candidate: LabelCandidate\n    labelElement: React.ReactElement\n}\n\nexport interface MarimekkoBarProps {\n    bar: BarOrPlaceholder\n    barWidth: number\n    isHovered: boolean\n    isSelected: boolean\n    isFaint: boolean\n    focus: InteractionState\n    entityColor: string | undefined\n    y0: number\n    dualAxis: DualAxis\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport {\n    Bar,\n    BarShape,\n    EntityColorData,\n    Item,\n    MarimekkoChartManager,\n    SimpleChartSeries,\n    SimplePoint,\n} from \"./MarimekkoChartConstants\"\nimport { CoreColumn, OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    autoDetectYColumnSlugs,\n    getShortNameForEntity,\n    makeSelectionArray,\n} from \"../chart/ChartUtils\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\nimport {\n    ChartErrorInfo,\n    ColorSchemeName,\n    EntityName,\n    ColorScaleConfigInterface,\n    OwidVariableRow,\n    SortConfig,\n    SortBy,\n    SortOrder,\n    ScaleType,\n} from \"@ourworldindata/types\"\nimport { OWID_NO_DATA_GRAY } from \"../color/ColorConstants\"\nimport { StackedPoint, StackedSeries } from \"./StackedConstants\"\nimport { ColorScheme } from \"../color/ColorScheme\"\nimport { ColorSchemes } from \"../color/ColorSchemes\"\nimport { excludeUndefined } from \"@ourworldindata/utils\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { AxisConfig } from \"../axis/AxisConfig.js\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis.js\"\n\nexport class MarimekkoChartState implements ChartState, ColorScaleManager {\n    manager: MarimekkoChartManager\n\n    colorScale: ColorScale\n    defaultBaseColorScheme = ColorSchemeName.continents\n    defaultNoDataColor = OWID_NO_DATA_GRAY\n\n    constructor({ manager }: { manager: MarimekkoChartManager }) {\n        this.manager = manager\n        this.colorScale = manager.colorScaleOverride ?? new ColorScale(this)\n        makeObservable(this)\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        const { inputTable } = this\n        return this.manager.transformedTable ?? this.transformTable(inputTable)\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        const { yColumnSlugs, manager, colorColumnSlug, xColumnSlug } = this\n        if (!this.yColumnSlugs.length) return table\n\n        // TODO: remove this filter once we don't have mixed type columns in datasets\n        table = table.replaceNonNumericCellsWithErrorValues(yColumnSlugs)\n\n        if (colorColumnSlug && manager.matchingEntitiesOnly)\n            table = table.dropRowsWithErrorValuesForColumn(colorColumnSlug)\n\n        // We want to \"chop off\" any rows outside the time domain for X and Y to avoid creating\n        // leading and trailing timeline times that don't really exist in the dataset.\n        const xySlugs = xColumnSlug\n            ? [xColumnSlug, ...yColumnSlugs]\n            : [...yColumnSlugs]\n        const [timeDomainStart, timeDomainEnd] = table.timeDomainFor(xySlugs)\n        table = table.filterByTimeRange(\n            timeDomainStart ?? -Infinity,\n            timeDomainEnd ?? Infinity\n        )\n\n        yColumnSlugs.forEach((slug) => {\n            table = table.interpolateColumnWithTolerance(slug)\n        })\n\n        if (xColumnSlug)\n            table = table.interpolateColumnWithTolerance(xColumnSlug)\n\n        if (!manager.showNoDataArea)\n            table = table.dropRowsWithErrorValuesForAllColumns(yColumnSlugs)\n\n        if (xColumnSlug)\n            table = table.dropRowsWithErrorValuesForColumn(xColumnSlug)\n        if (manager.isRelativeMode) {\n            // TODO: this should not be necessary but we sometimes get NoMatchingValuesAfterJoin if both relative and showNoDataArea are set\n            table = table.dropRowsWithErrorValuesForColumn(\n                table.timeColumn.slug\n            )\n            if (xColumnSlug) {\n                table = table.toPercentageFromEachEntityForEachTime(xColumnSlug)\n\n                // relativized columns ditch their units, making \"Population %\" hard to parse. Add a sensible replacement\n                Object.assign(table.get(xColumnSlug)?.def, {\n                    unit: \"share of total\",\n                })\n            }\n        }\n\n        return table\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed get isFocusModeActive(): boolean {\n        return this.focusArray.hasFocusedSeries\n    }\n\n    @computed get yColumnSlugs(): string[] {\n        return this.manager.yColumnSlugs ?? autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed get yColumns(): CoreColumn[] {\n        return this.transformedTable.getColumns(this.yColumnSlugs)\n    }\n\n    @computed get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @computed get xColumnSlug(): string | undefined {\n        return this.manager.xColumnSlug\n    }\n\n    @computed get xColumn(): CoreColumn | undefined {\n        if (this.xColumnSlug === undefined) return undefined\n        const columnSlugs = this.xColumnSlug ? [this.xColumnSlug] : []\n        return this.transformedTable.getColumns(columnSlugs)[0]\n    }\n\n    @computed get colorColumnSlug(): string | undefined {\n        return this.manager.colorColumnSlug\n    }\n\n    @computed get colorColumn(): CoreColumn {\n        return this.transformedTable.get(this.colorColumnSlug)\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfigInterface | undefined {\n        return (\n            ColorScaleConfig.fromDSL(this.colorColumn.def) ??\n            this.manager.colorScale\n        )\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        const { manager, inputTable } = this\n        return (\n            // For faceted charts, we have to get the values of inputTable before it's filtered by\n            // the faceting logic.\n            manager.colorScaleColumnOverride ??\n            // We need to use filteredTable in order to get consistent coloring for a variable across\n            // charts, e.g. each continent being assigned to the same color.\n            // inputTable is unfiltered, so it contains every value that exists in the variable.\n\n            // 2022-05-25: I considered using the filtered table below to get rid of Antarctica automatically\n            // but the way things are currently done this leads to a shift in the colors assigned to continents\n            // (i.e. they are no longer consistent cross the site). I think this downside is heavier than the\n            // upside so I comment this out for now. Reconsider when we do colors differently.\n\n            // manager.tableAfterAuthorTimelineAndActiveChartTransform?.get(\n            //     this.colorColumnSlug\n            // ) ??\n            inputTable.get(this.colorColumnSlug)\n        )\n    }\n\n    @computed private get colorScheme(): ColorScheme {\n        return (\n            (this.manager.baseColorScheme\n                ? ColorSchemes.get(this.manager.baseColorScheme)\n                : undefined) ??\n            ColorSchemes.get(ColorSchemeName[\"owid-distinct\"])\n        )\n    }\n\n    @computed private get sortConfig(): SortConfig {\n        return this.manager.sortConfig ?? {}\n    }\n\n    @computed private get unstackedSeries(): StackedSeries<EntityName>[] {\n        const { colorScheme, yColumns } = this\n        return (\n            yColumns\n                .map((col, i) => {\n                    return {\n                        seriesName: col.displayName,\n                        columnSlug: col.slug,\n                        color:\n                            col.def.color ??\n                            colorScheme.getColors(yColumns.length)[i],\n                        points: col.owidRows.map((row) => ({\n                            time: row.originalTime,\n                            position: row.entityName,\n                            value: row.value,\n                            valueOffset: 0,\n                        })),\n                    }\n                })\n                // Do not plot columns without data\n                .filter((series) => series.points.length > 0)\n        )\n    }\n\n    @computed get series(): readonly StackedSeries<EntityName>[] {\n        const valueOffsets = new Map<string, number>()\n        return this.unstackedSeries.map((series) => ({\n            ...series,\n            points: series.points.map((point) => {\n                const offset = valueOffsets.get(point.position) ?? 0\n                const newPoint = { ...point, valueOffset: offset }\n                valueOffsets.set(point.position, offset + point.value)\n                return newPoint\n            }),\n        }))\n    }\n\n    @computed private get allPoints(): StackedPoint<EntityName>[] {\n        return this.series.flatMap((series) => series.points)\n    }\n\n    @computed get x0(): number {\n        return 0\n    }\n\n    @computed get y0(): number {\n        return 0\n    }\n\n    @computed get xSeries(): SimpleChartSeries | undefined {\n        const createStackedXPoints = (\n            rows: OwidVariableRow<any>[]\n        ): SimplePoint[] => {\n            const points: SimplePoint[] = []\n            for (const row of rows) {\n                points.push({\n                    time: row.originalTime,\n                    value: row.value,\n                    entity: row.entityName,\n                })\n            }\n            return points\n        }\n        if (this.xColumn === undefined) return undefined\n        const column = this.xColumn\n        return {\n            seriesName: column.displayName,\n            points: createStackedXPoints(column.owidRows),\n        }\n    }\n\n    @computed get domainColorForEntityMap(): Map<string, EntityColorData> {\n        const { colorColumn, colorScale, uniqueEntityNames } = this\n        const hasColorColumn = !colorColumn.isMissing\n        const colorRowsByEntity = hasColorColumn\n            ? colorColumn.owidRowsByEntityName\n            : undefined\n        const domainColorMap = new Map<string, EntityColorData>()\n        if (uniqueEntityNames !== undefined) {\n            for (const name of uniqueEntityNames) {\n                const colorDomainValue = colorRowsByEntity?.get(name)?.[0]\n\n                if (colorDomainValue) {\n                    const color = colorScale.getColor(colorDomainValue.value)\n                    if (color)\n                        domainColorMap.set(name, {\n                            color,\n                            colorDomainValue: colorDomainValue.value,\n                        })\n                }\n            }\n        }\n        return domainColorMap\n    }\n\n    @computed private get uniqueEntityNames(): EntityName[] | undefined {\n        return this.xColumn?.uniqEntityNames ?? this.yColumns[0].uniqEntityNames\n    }\n\n    @computed get items(): Item[] {\n        const { xSeries, series, domainColorForEntityMap, uniqueEntityNames } =\n            this\n\n        if (uniqueEntityNames === undefined) return []\n\n        const items: Item[] = uniqueEntityNames\n            .map((entityName) => {\n                const xPoint = xSeries\n                    ? xSeries.points.find(\n                          (point) => point.entity === entityName\n                      )\n                    : undefined\n                if (xSeries && !xPoint) return undefined\n\n                return {\n                    entityName,\n                    shortEntityName: getShortNameForEntity(entityName),\n                    xPoint: xPoint,\n                    entityColor: domainColorForEntityMap.get(entityName),\n                    bars: excludeUndefined(\n                        series.map((series): Bar | undefined => {\n                            const point = series.points.find(\n                                (point) => point.position === entityName\n                            )\n                            if (!point) return undefined\n                            return {\n                                kind: BarShape.Bar,\n                                yPoint: point,\n                                color: series.color,\n                                seriesName: series.seriesName,\n                                columnSlug: series.columnSlug,\n                            }\n                        })\n                    ),\n                    focus: this.focusArray.state(entityName),\n                }\n            })\n            .filter((item) => item !== undefined) satisfies Item[]\n\n        return items\n    }\n\n    @computed get sortedItems(): Item[] {\n        const { items, sortConfig } = this\n\n        let sortByFuncs: ((item: Item) => number | string | undefined)[]\n        switch (sortConfig.sortBy) {\n            case SortBy.custom:\n                sortByFuncs = [(): undefined => undefined]\n                break\n            case SortBy.entityName:\n                sortByFuncs = [(item: Item): string => item.entityName]\n                break\n            case SortBy.column: {\n                const sortColumnSlug = sortConfig.sortColumnSlug\n                sortByFuncs = [\n                    (item: Item): number =>\n                        item.bars.find((b) => b.seriesName === sortColumnSlug)\n                            ?.yPoint.value ?? 0,\n                    (item: Item): string => item.entityName,\n                ]\n                break\n            }\n            default:\n            case SortBy.total:\n                sortByFuncs = [\n                    (item: Item): number => {\n                        const lastPoint = R.last(item.bars)?.yPoint\n                        if (!lastPoint) return 0\n                        return lastPoint.valueOffset + lastPoint.value\n                    },\n                    (item: Item): string => item.entityName,\n                ]\n        }\n        const sortedItems = _.sortBy(items, sortByFuncs)\n        const sortOrder = sortConfig.sortOrder ?? SortOrder.desc\n        if (sortOrder === SortOrder.desc) sortedItems.reverse()\n\n        const [itemsWithValues, itemsWithoutValues] = _.partition(\n            sortedItems,\n            (item) => item.bars.length !== 0\n        )\n\n        return [...itemsWithValues, ...itemsWithoutValues]\n    }\n\n    @computed get selectedItems(): Item[] {\n        const selectedSet = this.selectionArray.selectedSet\n        if (selectedSet.size === 0) return []\n        return this.sortedItems.filter((item) =>\n            selectedSet.has(item.entityName)\n        )\n    }\n\n    @computed get yDomainDefault(): [number, number] {\n        const maxValues = this.allPoints.map(\n            (point) => point.value + point.valueOffset\n        )\n        return [\n            Math.min(this.y0, _.min(maxValues) as number),\n            Math.max(this.y0, _.max(maxValues) as number),\n        ]\n    }\n\n    @computed get xDomainDefault(): [number, number] {\n        if (this.xSeries !== undefined) {\n            const sum = _.sumBy(this.xSeries.points, (point) => point.value)\n\n            return [this.x0, sum]\n        } else return [this.x0, this.items.length]\n    }\n\n    @computed private get xAxisLabelBase(): string {\n        const xDimName = this.defaultXAxisLabel\n        if (this.manager.xOverrideTime !== undefined)\n            return `${xDimName} in ${this.manager.xOverrideTime}`\n        return xDimName ?? \"\" // This sets the axis label to emtpy if we don't have an x column - not entirely sure this is what we want\n    }\n\n    @computed private get defaultXAxisLabel(): string | undefined {\n        return this.xColumn?.displayName\n    }\n\n    @computed get horizontalAxisLabel(): string {\n        const { xAxisLabelBase } = this\n        const config = this.manager.xAxisConfig\n        return config?.label || xAxisLabelBase\n    }\n\n    toHorizontalAxis(config: AxisConfig): HorizontalAxis {\n        let axis = config.toHorizontalAxis()\n        if (this.manager.isRelativeMode && this.xColumn) {\n            // MobX and classes  interact in an annoying way here so we have to construct a new object via\n            // an object copy of the AxisConfig class instance to be able to set a property without\n            // making MobX unhappy about a mutation originating from a computed property\n            axis = new HorizontalAxis(\n                new AxisConfig(\n                    { ...config.toObject(), maxTicks: 10 },\n                    config.axisManager\n                ),\n                config.axisManager\n            )\n            axis.domain = [0, 100]\n        } else {\n            axis.updateDomainPreservingUserSettings(this.xDomainDefault)\n        }\n\n        // Marimekko charts should always use linear scale\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.xColumn\n\n        axis.label = this.horizontalAxisLabel\n\n        return axis\n    }\n\n    toVerticalAxis(config: AxisConfig): VerticalAxis {\n        const axis = config.toVerticalAxis()\n        axis.updateDomainPreservingUserSettings(this.yDomainDefault)\n\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.formatColumn\n        axis.label = \"\"\n\n        return axis\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        const column = this.yColumns[0]\n        const { yColumns } = this\n\n        if (!column) return { reason: \"No Y column to chart\" }\n\n        return yColumns.every((col) => col.isEmpty)\n            ? { reason: \"No matching data\" }\n            : { reason: \"\" }\n    }\n}\n","// This file is auto-generated by devTools/regionsUpdater/update.ts\n// Do not edit manually. Run `yarn runRegionsUpdater` to regenerate.\n\nexport const MapTopology = {\n    type: \"Topology\",\n    objects: {\n        world: {\n            type: \"GeometryCollection\",\n            geometries: [\n                {\n                    id: \"Afghanistan\",\n                    type: \"Polygon\",\n                    arcs: [[0, 1, 2, 3, 4, 5]],\n                },\n                {\n                    id: \"Albania\",\n                    type: \"Polygon\",\n                    arcs: [[13, 14, 15, 16, 17]],\n                },\n                {\n                    id: \"Algeria\",\n                    type: \"Polygon\",\n                    arcs: [[266, 267, 268, 269, 270, 271, 272, 273]],\n                },\n                { id: \"Andorra\", type: \"Polygon\", arcs: [[769]] },\n                {\n                    id: \"Angola\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[6, 7, 8, 9]], [[10, 11, 12]]],\n                },\n                {\n                    id: \"Antarctica\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[36]],\n                        [[37]],\n                        [[38]],\n                        [[39]],\n                        [[40]],\n                        [[41]],\n                        [[42]],\n                        [[43]],\n                    ],\n                },\n                {\n                    id: \"Antigua and Barbuda\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[760]], [[761]]],\n                },\n                {\n                    id: \"Argentina\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[23, 24]], [[25, 26, 27, 28, 29, 30]]],\n                },\n                {\n                    id: \"Armenia\",\n                    type: \"Polygon\",\n                    arcs: [[31, 32, 33, 34, 35]],\n                },\n                {\n                    id: \"Australia\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[44]], [[45]]],\n                },\n                {\n                    id: \"Austria\",\n                    type: \"Polygon\",\n                    arcs: [[46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56]],\n                },\n                {\n                    id: \"Azerbaijan\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[57, -35]], [[58, 59, -33, 60, 61]]],\n                },\n                {\n                    id: \"Bahamas\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[90]], [[91]], [[92]]],\n                },\n                { id: \"Bahrain\", type: \"Polygon\", arcs: [[735]] },\n                { id: \"Bangladesh\", type: \"Polygon\", arcs: [[81, 82, 83]] },\n                { id: \"Barbados\", type: \"Polygon\", arcs: [[762]] },\n                {\n                    id: \"Belarus\",\n                    type: \"Polygon\",\n                    arcs: [[97, 98, 99, 100, 101, 102, 103, 104]],\n                },\n                {\n                    id: \"Belgium\",\n                    type: \"Polygon\",\n                    arcs: [[66, 67, 68, 69, 70]],\n                },\n                { id: \"Belize\", type: \"Polygon\", arcs: [[105, 106, 107]] },\n                { id: \"Benin\", type: \"Polygon\", arcs: [[71, 72, 73, 74, 75]] },\n                { id: \"Bhutan\", type: \"Polygon\", arcs: [[123, 124]] },\n                {\n                    id: \"Bolivia\",\n                    type: \"Polygon\",\n                    arcs: [[108, 109, 110, 111, -31]],\n                },\n                {\n                    id: \"Bosnia and Herzegovina\",\n                    type: \"Polygon\",\n                    arcs: [[93, 94, 95, 96]],\n                },\n                {\n                    id: \"Botswana\",\n                    type: \"Polygon\",\n                    arcs: [[125, 126, 127, 128]],\n                },\n                {\n                    id: \"Brazil\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            -27, 112, -111, 113, 114, 115, 116, 117, 118, 119,\n                            120,\n                        ],\n                    ],\n                },\n                { id: \"Brunei\", type: \"Polygon\", arcs: [[121, 122]] },\n                {\n                    id: \"Bulgaria\",\n                    type: \"Polygon\",\n                    arcs: [[84, 85, 86, 87, 88, 89]],\n                },\n                {\n                    id: \"Burkina Faso\",\n                    type: \"Polygon\",\n                    arcs: [[76, 77, 78, -74, 79, 80]],\n                },\n                { id: \"Burundi\", type: \"Polygon\", arcs: [[62, 63, 64, 65]] },\n                {\n                    id: \"Cambodia\",\n                    type: \"Polygon\",\n                    arcs: [[449, 450, 451, 452]],\n                },\n                {\n                    id: \"Cameroon\",\n                    type: \"Polygon\",\n                    arcs: [[215, 216, 217, 218, 219, 220, 221, -136, 222]],\n                },\n                {\n                    id: \"Canada\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[136]],\n                        [[137]],\n                        [[138]],\n                        [[139]],\n                        [[140]],\n                        [[141]],\n                        [[142]],\n                        [[143]],\n                        [[144]],\n                        [[145]],\n                        [[146, 147, 148, 149, 150, 151]],\n                        [[152]],\n                        [[153]],\n                        [[154]],\n                        [[155]],\n                        [[156]],\n                        [[157]],\n                        [[158]],\n                        [[159]],\n                        [[160]],\n                        [[161]],\n                        [[162]],\n                        [[163]],\n                        [[164]],\n                        [[165]],\n                        [[166]],\n                        [[167]],\n                        [[168]],\n                        [[169]],\n                        [[170]],\n                    ],\n                },\n                {\n                    id: \"Cape Verde\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[722]],\n                        [[723]],\n                        [[724]],\n                        [[725]],\n                        [[726]],\n                        [[727]],\n                        [[728]],\n                        [[729]],\n                    ],\n                },\n                {\n                    id: \"Central African Republic\",\n                    type: \"Polygon\",\n                    arcs: [[129, 130, 131, 132, 133, 134, 135]],\n                },\n                {\n                    id: \"Chad\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            -537, 667, -535, 668, -533, -474, -638, -130, -222,\n                            669,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Chile\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[-24, 177]], [[-30, 178, 179, -109]]],\n                },\n                {\n                    id: \"China\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[180]],\n                        [\n                            [\n                                181, 182, 183, 184, 185, 186, 187, 188, 189,\n                                190, 191, 192, 193, 194, -125, 195, 196, 197,\n                                198, -4, 199, 200, 201, 202, 203, 204, 205, 206,\n                                207, 208, 209,\n                            ],\n                        ],\n                    ],\n                },\n                {\n                    id: \"Colombia\",\n                    type: \"Polygon\",\n                    arcs: [[236, 237, 238, 239, 240, -115, 241]],\n                },\n                {\n                    id: \"Comoros\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[730]], [[731]], [[732]]],\n                },\n                {\n                    id: \"Congo\",\n                    type: \"Polygon\",\n                    arcs: [[-12, 234, 235, -223, -135, -232]],\n                },\n                {\n                    id: \"Costa Rica\",\n                    type: \"Polygon\",\n                    arcs: [[242, 243, 244, 245]],\n                },\n                {\n                    id: \"Cote d'Ivoire\",\n                    type: \"Polygon\",\n                    arcs: [[210, 211, 212, 213, -77, 214]],\n                },\n                {\n                    id: \"Croatia\",\n                    type: \"Polygon\",\n                    arcs: [[359, 360, 361, -97, 362, 363, 364]],\n                },\n                { id: \"Cuba\", type: \"Polygon\", arcs: [[246]] },\n                { id: \"Cyprus\", type: \"Polygon\", arcs: [[247]] },\n                {\n                    id: \"Czechia\",\n                    type: \"Polygon\",\n                    arcs: [[-56, 248, 249, 250]],\n                },\n                {\n                    id: \"Democratic Republic of Congo\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            223, 224, 225, 226, -63, 227, 228, 229, -10, 230,\n                            -13, 231, -134, 232, 233,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Denmark\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[262]], [[-258, 263]]],\n                },\n                {\n                    id: \"Djibouti\",\n                    type: \"Polygon\",\n                    arcs: [[258, 259, 260, 261]],\n                },\n                { id: \"Dominica\", type: \"Polygon\", arcs: [[763]] },\n                {\n                    id: \"Dominican Republic\",\n                    type: \"Polygon\",\n                    arcs: [[264, 265]],\n                },\n                { id: \"East Timor\", type: \"Polygon\", arcs: [[676, -374]] },\n                { id: \"Ecuador\", type: \"Polygon\", arcs: [[274, -237, 275]] },\n                { id: \"Egypt\", type: \"Polygon\", arcs: [[276, 277, 278]] },\n                {\n                    id: \"El Salvador\",\n                    type: \"Polygon\",\n                    arcs: [[653, -352, -357]],\n                },\n                {\n                    id: \"Equatorial Guinea\",\n                    type: \"Polygon\",\n                    arcs: [[342, -217, -321]],\n                },\n                {\n                    id: \"Eritrea\",\n                    type: \"Polygon\",\n                    arcs: [[279, 280, 281, 282, 283, 284, 285, -262]],\n                },\n                {\n                    id: \"Estonia\",\n                    type: \"Polygon\",\n                    arcs: [[290, 291, 292, 293]],\n                },\n                { id: \"Eswatini\", type: \"Polygon\", arcs: [[664, -512]] },\n                {\n                    id: \"Ethiopia\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            294, 295, -280, -261, 296, 297, 298, 299, 300, 301,\n                            302, 303, -283,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Fiji\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[308]], [[309]], [[310]]],\n                },\n                {\n                    id: \"Finland\",\n                    type: \"Polygon\",\n                    arcs: [[304, 305, 306, 307]],\n                },\n                {\n                    id: \"France\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[311]],\n                        [[312, -254, -176, 313, 314, -288, 315, -70]],\n                    ],\n                },\n                {\n                    id: \"French Guiana\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[316, 317, 318, -119]]],\n                },\n                {\n                    id: \"French Southern Territories\",\n                    type: \"Polygon\",\n                    arcs: [[778]],\n                },\n                {\n                    id: \"Gabon\",\n                    type: \"Polygon\",\n                    arcs: [[319, 320, -216, -236]],\n                },\n                { id: \"Gambia\", type: \"Polygon\", arcs: [[338, 339]] },\n                {\n                    id: \"Georgia\",\n                    type: \"Polygon\",\n                    arcs: [[324, 325, 326, 327, 328, -61, -32, 329]],\n                },\n                {\n                    id: \"Germany\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            251, 252, -249, -55, -177, 253, 254, -68, 255, 256,\n                            257,\n                        ],\n                    ],\n                },\n                { id: \"Ghana\", type: \"Polygon\", arcs: [[330, -215, -81, 331]] },\n                {\n                    id: \"Greece\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[343]], [[344, -14, 345, -88, 346]]],\n                },\n                { id: \"Greenland\", type: \"Polygon\", arcs: [[777]] },\n                { id: \"Grenada\", type: \"Polygon\", arcs: [[764]] },\n                {\n                    id: \"Guatemala\",\n                    type: \"Polygon\",\n                    arcs: [[347, 348, -108, 349, 350, 351]],\n                },\n                {\n                    id: \"Guinea\",\n                    type: \"Polygon\",\n                    arcs: [[332, 333, 334, 335, 336, 337, -213]],\n                },\n                {\n                    id: \"Guinea-Bissau\",\n                    type: \"Polygon\",\n                    arcs: [[340, 341, -336]],\n                },\n                {\n                    id: \"Guyana\",\n                    type: \"Polygon\",\n                    arcs: [[352, 353, -117, 354]],\n                },\n                { id: \"Haiti\", type: \"Polygon\", arcs: [[-266, 365]] },\n                {\n                    id: \"Honduras\",\n                    type: \"Polygon\",\n                    arcs: [[355, 356, -351, 357, 358]],\n                },\n                {\n                    id: \"Hungary\",\n                    type: \"Polygon\",\n                    arcs: [[-47, 366, 367, 368, 369, 370, -365, 371]],\n                },\n                { id: \"Iceland\", type: \"Polygon\", arcs: [[407]] },\n                {\n                    id: \"India\",\n                    type: \"Polygon\",\n                    arcs: [[-198, 388, -196, -124, -195, 389, -84, 390, 391]],\n                },\n                {\n                    id: \"Indonesia\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[372]],\n                        [[373, 374]],\n                        [[375]],\n                        [[376]],\n                        [[377]],\n                        [[378]],\n                        [[379]],\n                        [[380]],\n                        [[381, 382]],\n                        [[383]],\n                        [[384]],\n                        [[385, 386]],\n                        [[387]],\n                    ],\n                },\n                {\n                    id: \"Iran\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [393, -6, 394, 395, 396, 397, 398, -58, -34, -60, 399],\n                    ],\n                },\n                {\n                    id: \"Iraq\",\n                    type: \"Polygon\",\n                    arcs: [[-397, 400, 401, 402, 403, 404, 405, 406]],\n                },\n                { id: \"Ireland\", type: \"Polygon\", arcs: [[392, -322]] },\n                {\n                    id: \"Israel\",\n                    type: \"Polygon\",\n                    arcs: [[408, 409, 410, 411, 412, 413, 414, 415]],\n                },\n                {\n                    id: \"Italy\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[416]], [[417]], [[418, 419, -314, -175, -49]]],\n                },\n                { id: \"Jamaica\", type: \"Polygon\", arcs: [[420]] },\n                {\n                    id: \"Japan\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[425]], [[426]], [[427]]],\n                },\n                {\n                    id: \"Jordan\",\n                    type: \"Polygon\",\n                    arcs: [[-409, 421, -404, 422, 423, -411, 424]],\n                },\n                {\n                    id: \"Kazakhstan\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            428, 429, 430, 431, 432, 433, 434, 435, 436, 437,\n                            438, 439, 440, -202, 441,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Kenya\",\n                    type: \"Polygon\",\n                    arcs: [[442, 443, 444, 445, -301, 446]],\n                },\n                { id: \"Kiribati\", type: \"Polygon\", arcs: [[775]] },\n                {\n                    id: \"Kosovo\",\n                    type: \"Polygon\",\n                    arcs: [[455, 456, 457, 458, 459]],\n                },\n                { id: \"Kuwait\", type: \"Polygon\", arcs: [[460, 461, -402]] },\n                {\n                    id: \"Kyrgyzstan\",\n                    type: \"Polygon\",\n                    arcs: [[-442, -201, 447, 448]],\n                },\n                {\n                    id: \"Laos\",\n                    type: \"Polygon\",\n                    arcs: [[462, 463, -193, 464, -451]],\n                },\n                {\n                    id: \"Latvia\",\n                    type: \"Polygon\",\n                    arcs: [[480, -294, 481, -99, -479]],\n                },\n                { id: \"Lebanon\", type: \"Polygon\", arcs: [[-415, 465, 466]] },\n                { id: \"Lesotho\", type: \"Polygon\", arcs: [[475]] },\n                {\n                    id: \"Liberia\",\n                    type: \"Polygon\",\n                    arcs: [[467, 468, -333, -212]],\n                },\n                {\n                    id: \"Libya\",\n                    type: \"Polygon\",\n                    arcs: [[469, -274, 470, 471, -278, 472, 473]],\n                },\n                {\n                    id: \"Liechtenstein\",\n                    type: \"Polygon\",\n                    arcs: [[-52, 770, -173, 771]],\n                },\n                {\n                    id: \"Lithuania\",\n                    type: \"Polygon\",\n                    arcs: [[476, 477, 478, -98, 479]],\n                },\n                {\n                    id: \"Luxembourg\",\n                    type: \"Polygon\",\n                    arcs: [[-255, -313, -69]],\n                },\n                { id: \"Madagascar\", type: \"Polygon\", arcs: [[486]] },\n                {\n                    id: \"Malawi\",\n                    type: \"Polygon\",\n                    arcs: [[-516, 519, 520, 521]],\n                },\n                {\n                    id: \"Malaysia\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[522, 523, 524, 525]], [[-386, 526, -123, 527]]],\n                },\n                {\n                    id: \"Maldives\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[736]], [[737]]],\n                },\n                {\n                    id: \"Mali\",\n                    type: \"Polygon\",\n                    arcs: [[492, -268, 493, -78, -214, -338, 494]],\n                },\n                { id: \"Malta\", type: \"Polygon\", arcs: [[772]] },\n                {\n                    id: \"Marshall Islands\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[738]], [[739]]],\n                },\n                {\n                    id: \"Mauritania\",\n                    type: \"Polygon\",\n                    arcs: [[516, 517, 518, -269, -493]],\n                },\n                { id: \"Mauritius\", type: \"Polygon\", arcs: [[733]] },\n                {\n                    id: \"Mexico\",\n                    type: \"Polygon\",\n                    arcs: [[-106, -349, 487, 488, 489]],\n                },\n                {\n                    id: \"Micronesia (country)\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[740]], [[741]], [[742]], [[743]], [[744]]],\n                },\n                { id: \"Moldova\", type: \"Polygon\", arcs: [[484, 485]] },\n                { id: \"Monaco\", type: \"Polygon\", arcs: [[773]] },\n                {\n                    id: \"Mongolia\",\n                    type: \"Polygon\",\n                    arcs: [[499, 500, 501, 502, 503, 504, 505, 506, -204]],\n                },\n                {\n                    id: \"Montenegro\",\n                    type: \"Polygon\",\n                    arcs: [[497, -96, 498, -458, -16]],\n                },\n                { id: \"Morocco\", type: \"Polygon\", arcs: [[-271, 482, 483]] },\n                {\n                    id: \"Mozambique\",\n                    type: \"Polygon\",\n                    arcs: [[507, 508, 509, 510, 511, 512, 513, 514, 515]],\n                },\n                {\n                    id: \"Myanmar\",\n                    type: \"Polygon\",\n                    arcs: [[495, -82, -390, -194, -464, 496]],\n                },\n                {\n                    id: \"Namibia\",\n                    type: \"Polygon\",\n                    arcs: [[528, -8, 529, -127, 530]],\n                },\n                { id: \"Nauru\", type: \"Polygon\", arcs: [[745]] },\n                { id: \"Nepal\", type: \"Polygon\", arcs: [[-389, -197]] },\n                {\n                    id: \"Netherlands\",\n                    type: \"Polygon\",\n                    arcs: [[-256, -67, 541]],\n                },\n                { id: \"New Caledonia\", type: \"Polygon\", arcs: [[531]] },\n                {\n                    id: \"New Zealand\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[547]], [[548]]],\n                },\n                {\n                    id: \"Nicaragua\",\n                    type: \"Polygon\",\n                    arcs: [[539, -359, 540, -244]],\n                },\n                {\n                    id: \"Niger\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            -79, -494, -267, -470, 532, 533, 534, 535, 536,\n                            -220, 537, -75,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Nigeria\",\n                    type: \"Polygon\",\n                    arcs: [[538, -76, -538, -219]],\n                },\n                {\n                    id: \"North Korea\",\n                    type: \"Polygon\",\n                    arcs: [[573, -455, 574, -190]],\n                },\n                {\n                    id: \"North Macedonia\",\n                    type: \"Polygon\",\n                    arcs: [[-460, 490, -89, -346, 491]],\n                },\n                {\n                    id: \"Norway\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[-308, 542, 543]], [[544]], [[545]], [[546]]],\n                },\n                {\n                    id: \"Oman\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[549, 550, -22, 551]], [[-20, 552]]],\n                },\n                {\n                    id: \"Pakistan\",\n                    type: \"Polygon\",\n                    arcs: [[-199, -392, 553, -395, -5]],\n                },\n                { id: \"Palau\", type: \"Polygon\", arcs: [[746]] },\n                {\n                    id: \"Palestine\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[-425, -410]], [[-413, 716]]],\n                },\n                {\n                    id: \"Panama\",\n                    type: \"Polygon\",\n                    arcs: [[554, -246, 555, -239]],\n                },\n                {\n                    id: \"Papua New Guinea\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[564]], [[565]], [[-382, 566]], [[567]]],\n                },\n                { id: \"Paraguay\", type: \"Polygon\", arcs: [[-112, -113, -26]] },\n                {\n                    id: \"Peru\",\n                    type: \"Polygon\",\n                    arcs: [[-180, 556, -276, -242, -114, -110]],\n                },\n                {\n                    id: \"Philippines\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[557]],\n                        [[558]],\n                        [[559]],\n                        [[560]],\n                        [[561]],\n                        [[562]],\n                        [[563]],\n                    ],\n                },\n                {\n                    id: \"Poland\",\n                    type: \"Polygon\",\n                    arcs: [[-253, 568, 569, -480, -105, 570, 571, -250]],\n                },\n                { id: \"Portugal\", type: \"Polygon\", arcs: [[-290, 575]] },\n                { id: \"Puerto Rico\", type: \"Polygon\", arcs: [[572]] },\n                { id: \"Qatar\", type: \"Polygon\", arcs: [[576, 577]] },\n                {\n                    id: \"Romania\",\n                    type: \"Polygon\",\n                    arcs: [[578, -486, 579, 580, -85, 581, -369]],\n                },\n                {\n                    id: \"Russia\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[582]],\n                        [[-570, 583, -477]],\n                        [[584]],\n                        [[585]],\n                        [[586]],\n                        [[587]],\n                        [[588]],\n                        [[589]],\n                        [[590]],\n                        [\n                            [\n                                -188, 591, 592, 593, -184, 594, -182, 595, -209,\n                                596, -207, 597, -205, -507, 598, 599, -504, 600,\n                                -502, 601, -500, -203, -441, 602, -439, 603,\n                                604, -436, 605, -434, 606, 607, 608, -62, 609,\n                                -328, 610, -326, 611, 612, 613, 614, 615, 616,\n                                617, 618, 619, -102, 620, -100, -482, -293, 621,\n                                622, -305, 623,\n                            ],\n                        ],\n                        [[624]],\n                        [[625]],\n                        [[626]],\n                    ],\n                },\n                {\n                    id: \"Rwanda\",\n                    type: \"Polygon\",\n                    arcs: [[627, 628, -64, -227, 629]],\n                },\n                {\n                    id: \"Saint Kitts and Nevis\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[765]], [[766]]],\n                },\n                { id: \"Saint Lucia\", type: \"Polygon\", arcs: [[767]] },\n                {\n                    id: \"Saint Vincent and the Grenadines\",\n                    type: \"Polygon\",\n                    arcs: [[768]],\n                },\n                { id: \"Samoa\", type: \"MultiPolygon\", arcs: [[[747]], [[748]]] },\n                { id: \"San Marino\", type: \"Polygon\", arcs: [[774]] },\n                { id: \"Sao Tome and Principe\", type: \"Polygon\", arcs: [[776]] },\n                {\n                    id: \"Saudi Arabia\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [631, -423, -403, -462, 632, -578, 633, -23, -551, 634],\n                    ],\n                },\n                {\n                    id: \"Senegal\",\n                    type: \"Polygon\",\n                    arcs: [[645, -517, -495, -337, -342, 646, -340]],\n                },\n                {\n                    id: \"Serbia\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            -90, -491, -459, -499, -95, 657, -361, 658, -370,\n                            -582,\n                        ],\n                    ],\n                },\n                { id: \"Seychelles\", type: \"Polygon\", arcs: [[734]] },\n                {\n                    id: \"Sierra Leone\",\n                    type: \"Polygon\",\n                    arcs: [[652, -334, -469]],\n                },\n                { id: \"Singapore\", type: \"Polygon\", arcs: [[523, 749]] },\n                {\n                    id: \"Slovakia\",\n                    type: \"Polygon\",\n                    arcs: [[-572, 661, -367, -57, -251]],\n                },\n                {\n                    id: \"Slovenia\",\n                    type: \"Polygon\",\n                    arcs: [[-48, -372, -364, 662, -419]],\n                },\n                {\n                    id: \"Solomon Islands\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[647]], [[648]], [[649]], [[650]], [[651]]],\n                },\n                {\n                    id: \"Somalia\",\n                    type: \"Polygon\",\n                    arcs: [[654, 655, -297, -260, 656, -447, -300]],\n                },\n                {\n                    id: \"South Africa\",\n                    type: \"Polygon\",\n                    arcs: [[-531, -126, 718, -513, -665, -511, 719], [-476]],\n                },\n                { id: \"South Korea\", type: \"Polygon\", arcs: [[453, 454]] },\n                {\n                    id: \"South Sudan\",\n                    type: \"Polygon\",\n                    arcs: [[641, -302, -446, 642, 643, -233, -133, 644, -636]],\n                },\n                { id: \"Spain\", type: \"Polygon\", arcs: [[286, 287, 288, 289]] },\n                { id: \"Sri Lanka\", type: \"Polygon\", arcs: [[474]] },\n                {\n                    id: \"Sudan\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            635, 636, -131, 637, -473, -277, 638, -285, 639,\n                            -304, 640,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Suriname\",\n                    type: \"Polygon\",\n                    arcs: [[659, -318, 660, -118, -354]],\n                },\n                { id: \"Sweden\", type: \"Polygon\", arcs: [[-543, -307, 663]] },\n                {\n                    id: \"Switzerland\",\n                    type: \"Polygon\",\n                    arcs: [[-54, 171, 172, 173, -50, 174, 175, 176]],\n                },\n                {\n                    id: \"Syria\",\n                    type: \"Polygon\",\n                    arcs: [[-422, -416, -467, 665, 666, -405]],\n                },\n                { id: \"Taiwan\", type: \"Polygon\", arcs: [[682]] },\n                {\n                    id: \"Tajikistan\",\n                    type: \"Polygon\",\n                    arcs: [[-448, -200, -3, 673]],\n                },\n                {\n                    id: \"Tanzania\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            -444, 683, 684, -508, 685, 686, 687, 688, -228, -66,\n                            689, -628, 690,\n                        ],\n                    ],\n                },\n                {\n                    id: \"Thailand\",\n                    type: \"Polygon\",\n                    arcs: [[671, -526, 672, -497, -463, -450]],\n                },\n                { id: \"Togo\", type: \"Polygon\", arcs: [[670, -332, -80, -73]] },\n                {\n                    id: \"Tonga\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[750]], [[751]], [[752]]],\n                },\n                { id: \"Trinidad and Tobago\", type: \"Polygon\", arcs: [[677]] },\n                { id: \"Tunisia\", type: \"Polygon\", arcs: [[-273, 678, -471]] },\n                {\n                    id: \"Turkey\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[-330, -36, -399, 679, -406, -667, 680]],\n                        [[-347, -87, 681]],\n                    ],\n                },\n                {\n                    id: \"Turkmenistan\",\n                    type: \"Polygon\",\n                    arcs: [[-394, 674, -430, 675, -1]],\n                },\n                {\n                    id: \"Tuvalu\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[753]],\n                        [[754]],\n                        [[755]],\n                        [[756]],\n                        [[757]],\n                        [[758]],\n                        [[759]],\n                    ],\n                },\n                {\n                    id: \"Uganda\",\n                    type: \"Polygon\",\n                    arcs: [[-630, -226, 691, -224, 692, -643, -445, -691]],\n                },\n                {\n                    id: \"Ukraine\",\n                    type: \"Polygon\",\n                    arcs: [\n                        [\n                            693, -619, 694, -617, 695, 696, 697, -613, 698,\n                            -580, -485, -579, -368, -662, -571, -104,\n                        ],\n                    ],\n                },\n                {\n                    id: \"United Arab Emirates\",\n                    type: \"Polygon\",\n                    arcs: [[18, 19, 20, 21, 22]],\n                },\n                {\n                    id: \"United Kingdom\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[321, 322]], [[323]]],\n                },\n                {\n                    id: \"United States\",\n                    type: \"MultiPolygon\",\n                    arcs: [\n                        [[700]],\n                        [[701]],\n                        [[702]],\n                        [[703]],\n                        [[704]],\n                        [[705, -489, 706, -147]],\n                        [[707]],\n                        [[708]],\n                        [[709]],\n                        [[-151, 710, -149, 711]],\n                    ],\n                },\n                { id: \"Uruguay\", type: \"Polygon\", arcs: [[-121, 699, -28]] },\n                {\n                    id: \"Uzbekistan\",\n                    type: \"Polygon\",\n                    arcs: [[-676, -429, -449, -674, -2]],\n                },\n                {\n                    id: \"Vanuatu\",\n                    type: \"MultiPolygon\",\n                    arcs: [[[714]], [[715]]],\n                },\n                {\n                    id: \"Venezuela\",\n                    type: \"Polygon\",\n                    arcs: [[712, -355, -116, -241]],\n                },\n                {\n                    id: \"Vietnam\",\n                    type: \"Polygon\",\n                    arcs: [[713, -452, -465, -192]],\n                },\n                {\n                    id: \"Western Sahara\",\n                    type: \"Polygon\",\n                    arcs: [[-483, -270, -519, 630]],\n                },\n                { id: \"Yemen\", type: \"Polygon\", arcs: [[717, -635, -550]] },\n                {\n                    id: \"Zambia\",\n                    type: \"Polygon\",\n                    arcs: [[-520, -515, 720, -128, -530, -7, -230, 721, -688]],\n                },\n                {\n                    id: \"Zimbabwe\",\n                    type: \"Polygon\",\n                    arcs: [[-719, -129, -721, -514]],\n                },\n            ],\n        },\n    },\n\n    // oxfmt-ignore\n    arcs: [\n      [[61.210817,35.650072],[62.230651,35.270664],[62.984662,35.404041],[63.193538,35.857166],[63.982896,36.007957],[64.546479,36.312073],[64.746105,37.111818],[65.588948,37.305217],[65.745631,37.661164],[66.217385,37.39379],[66.518607,37.362784]],\n      [[66.518607,37.362784],[67.075782,37.356144],[67.83,37.144994]],\n      [[67.83,37.144994],[68.135562,37.023115],[68.859446,37.344336],[69.196273,37.151144],[69.518785,37.608997],[70.116578,37.588223],[70.270574,37.735165],[70.376304,38.138396],[70.806821,38.486282],[71.348131,38.258905],[71.239404,37.953265],[71.541918,37.905774],[71.448693,37.065645],[71.844638,36.738171],[72.193041,36.948288],[72.63689,37.047558],[73.260056,37.495257],[73.948696,37.421566],[74.980002,37.41999]],\n      [[74.980002,37.41999],[75.158028,37.133031]],\n      [[75.158028,37.133031],[74.575893,37.020841],[74.067552,36.836176],[72.920025,36.720007],[71.846292,36.509942],[71.262348,36.074388],[71.498768,35.650563],[71.613076,35.153203],[71.115019,34.733126],[71.156773,34.348911],[70.881803,33.988856],[69.930543,34.02012],[70.323594,33.358533],[69.687147,33.105499],[69.262522,32.501944],[69.317764,31.901412],[68.926677,31.620189],[68.556932,31.71331],[67.792689,31.58293],[67.683394,31.303154],[66.938891,31.304911],[66.381458,30.738899],[66.346473,29.887943],[65.046862,29.472181],[64.350419,29.560031],[64.148002,29.340819],[63.550261,29.468331],[62.549857,29.318572],[60.874248,29.829239]],\n      [[60.874248,29.829239],[61.781222,30.73585],[61.699314,31.379506],[60.941945,31.548075],[60.863655,32.18292],[60.536078,32.981269],[60.9637,33.528832],[60.52843,33.676446],[60.803193,34.404102],[61.210817,35.650072]],\n      [[23.912215,-10.926826],[24.017894,-11.237298],[23.904154,-11.722282],[24.079905,-12.191297],[23.930922,-12.565848],[24.016137,-12.911046],[21.933886,-12.898437],[21.887843,-16.08031],[22.562478,-16.898451],[23.215048,-17.523116]],\n      [[23.215048,-17.523116],[21.377176,-17.930636],[18.956187,-17.789095],[18.263309,-17.309951],[14.209707,-17.353101],[14.058501,-17.423381],[13.462362,-16.971212],[12.814081,-16.941343],[12.215461,-17.111668],[11.734199,-17.301889]],\n      [[11.734199,-17.301889],[11.640096,-16.673142],[11.778537,-15.793816],[12.123581,-14.878316],[12.175619,-14.449144],[12.500095,-13.5477],[12.738479,-13.137906],[13.312914,-12.48363],[13.633721,-12.038645],[13.738728,-11.297863],[13.686379,-10.731076],[13.387328,-10.373578],[13.120988,-9.766897],[12.87537,-9.166934],[12.929061,-8.959091],[13.236433,-8.562629],[12.93304,-7.596539],[12.728298,-6.927122],[12.227347,-6.294448],[12.322432,-6.100092]],\n      [[12.322432,-6.100092],[12.735171,-5.965682],[13.024869,-5.984389],[13.375597,-5.864241],[16.326528,-5.87747],[16.57318,-6.622645],[16.860191,-7.222298],[17.089996,-7.545689],[17.47297,-8.068551],[18.134222,-7.987678],[18.464176,-7.847014],[19.016752,-7.988246],[19.166613,-7.738184],[19.417502,-7.155429],[20.037723,-7.116361],[20.091622,-6.94309],[20.601823,-6.939318],[20.514748,-7.299606],[21.728111,-7.290872],[21.746456,-7.920085],[21.949131,-8.305901],[21.801801,-8.908707],[21.875182,-9.523708],[22.208753,-9.894796],[22.155268,-11.084801],[22.402798,-10.993075],[22.837345,-11.017622],[23.456791,-10.867863],[23.912215,-10.926826]],\n      [[12.182337,-5.789931],[11.914963,-5.037987]],\n      [[11.914963,-5.037987],[12.318608,-4.60623],[12.62076,-4.438023],[12.995517,-4.781103]],\n      [[12.995517,-4.781103],[12.631612,-4.991271],[12.468004,-5.248362],[12.436688,-5.684304],[12.182337,-5.789931]],\n      [[21.02004,40.842727],[20.99999,40.580004],[20.674997,40.435],[20.615,40.110007],[20.150016,39.624998]],\n      [[20.150016,39.624998],[19.98,39.694993],[19.960002,39.915006],[19.406082,40.250773],[19.319059,40.72723],[19.40355,41.409566],[19.540027,41.719986],[19.371769,41.877548],[19.304486,42.195745],[19.738051,42.688247]],\n      [[19.738051,42.688247],[19.801613,42.500093],[20.0707,42.58863]],\n      [[20.0707,42.58863],[20.283755,42.32026],[20.52295,42.21787]],\n      [[20.52295,42.21787],[20.590247,41.855404],[20.463175,41.515089],[20.605182,41.086226],[21.02004,40.842727]],\n      [[51.579519,24.245497],[51.757441,24.294073],[51.794389,24.019826],[52.577081,24.177439],[53.404007,24.151317],[54.008001,24.121758],[54.693024,24.797892],[55.439025,25.439145],[56.070821,26.055464]],\n      [[56.070821,26.055464],[56.261042,25.714606]],\n      [[56.261042,25.714606],[56.396847,24.924732]],\n      [[56.396847,24.924732],[55.886233,24.920831],[55.804119,24.269604],[55.981214,24.130543],[55.528632,23.933604],[55.525841,23.524869],[55.234489,23.110993],[55.208341,22.70833]],\n      [[55.208341,22.70833],[55.006803,22.496948],[52.000733,23.001154],[51.617708,24.014219],[51.579519,24.245497]],\n      [[-66.95992,-54.89681],[-67.56244,-54.87001],[-68.63335,-54.8695],[-68.63401,-52.63637]],\n      [[-68.63401,-52.63637],[-68.25,-53.1],[-67.75,-53.85],[-66.45,-54.45],[-65.05,-54.7],[-65.5,-55.2],[-66.45,-55.25],[-66.95992,-54.89681]],\n      [[-62.685057,-22.249029],[-60.846565,-23.880713],[-60.028966,-24.032796],[-58.807128,-24.771459],[-57.777217,-25.16234],[-57.63366,-25.603657],[-58.618174,-27.123719],[-57.60976,-27.395899],[-56.486702,-27.548499],[-55.695846,-27.387837],[-54.788795,-26.621786],[-54.625291,-25.739255]],\n      [[-54.625291,-25.739255],[-54.13005,-25.547639],[-53.628349,-26.124865],[-53.648735,-26.923473],[-54.490725,-27.474757],[-55.162286,-27.881915],[-56.2909,-28.852761],[-57.625133,-30.216295]],\n      [[-57.625133,-30.216295],[-57.874937,-31.016556],[-58.14244,-32.044504],[-58.132648,-33.040567],[-58.349611,-33.263189],[-58.427074,-33.909454]],\n      [[-58.427074,-33.909454],[-58.495442,-34.43149],[-57.22583,-35.288027],[-57.362359,-35.97739],[-56.737487,-36.413126],[-56.788285,-36.901572],[-57.749157,-38.183871],[-59.231857,-38.72022],[-61.237445,-38.928425],[-62.335957,-38.827707],[-62.125763,-39.424105],[-62.330531,-40.172586],[-62.145994,-40.676897],[-62.745803,-41.028761],[-63.770495,-41.166789],[-64.73209,-40.802677],[-65.118035,-41.064315],[-64.978561,-42.058001],[-64.303408,-42.359016],[-63.755948,-42.043687],[-63.458059,-42.563138],[-64.378804,-42.873558],[-65.181804,-43.495381],[-65.328823,-44.501366],[-65.565269,-45.036786],[-66.509966,-45.039628],[-67.293794,-45.551896],[-67.580546,-46.301773],[-66.597066,-47.033925],[-65.641027,-47.236135],[-65.985088,-48.133289],[-67.166179,-48.697337],[-67.816088,-49.869669],[-68.728745,-50.264218],[-69.138539,-50.73251],[-68.815561,-51.771104],[-68.149995,-52.349983],[-68.571545,-52.299444]],\n      [[-68.571545,-52.299444],[-69.498362,-52.142761],[-71.914804,-52.009022],[-72.329404,-51.425956],[-72.309974,-50.67701],[-72.975747,-50.74145],[-73.328051,-50.378785],[-73.415436,-49.318436],[-72.648247,-48.878618],[-72.331161,-48.244238],[-72.447355,-47.738533],[-71.917258,-46.884838],[-71.552009,-45.560733],[-71.659316,-44.973689],[-71.222779,-44.784243],[-71.329801,-44.407522],[-71.793623,-44.207172],[-71.464056,-43.787611],[-71.915424,-43.408565],[-72.148898,-42.254888],[-71.746804,-42.051386],[-71.915734,-40.832339],[-71.680761,-39.808164],[-71.413517,-38.916022],[-70.814664,-38.552995],[-71.118625,-37.576827],[-71.121881,-36.658124],[-70.364769,-36.005089],[-70.388049,-35.169688],[-69.817309,-34.193571],[-69.814777,-33.273886],[-70.074399,-33.09121],[-70.535069,-31.36501],[-69.919008,-30.336339],[-70.01355,-29.367923],[-69.65613,-28.459141],[-69.001235,-27.521214],[-68.295542,-26.89934],[-68.5948,-26.506909],[-68.386001,-26.185016],[-68.417653,-24.518555],[-67.328443,-24.025303],[-66.985234,-22.986349],[-67.106674,-22.735925]],\n      [[-67.106674,-22.735925],[-66.273339,-21.83231],[-64.964892,-22.075862],[-64.377021,-22.798091],[-63.986838,-21.993644],[-62.846468,-22.034985],[-62.685057,-22.249029]],\n      [[43.582746,41.092143],[44.97248,41.248129]],\n      [[44.97248,41.248129],[45.179496,40.985354],[45.560351,40.81229],[45.359175,40.561504],[45.891907,40.218476],[45.610012,39.899994],[46.034534,39.628021],[46.483499,39.464155],[46.50572,38.770605]],\n      [[46.50572,38.770605],[46.143623,38.741201]],\n      [[46.143623,38.741201],[45.735379,39.319719],[45.739978,39.473999],[45.298145,39.471751],[45.001987,39.740004],[44.79399,39.713003]],\n      [[44.79399,39.713003],[44.400009,40.005],[43.656436,40.253564],[43.752658,40.740201],[43.582746,41.092143]],\n      [[-59.572095,-80.040179],[-59.865849,-80.549657],[-60.159656,-81.000327],[-62.255393,-80.863178],[-64.488125,-80.921934],[-65.741666,-80.588827],[-65.741666,-80.549657],[-66.290031,-80.255773],[-64.037688,-80.294944],[-61.883246,-80.39287],[-61.138976,-79.981371],[-60.610119,-79.628679],[-59.572095,-80.040179]],\n      [[-159.208184,-79.497059],[-161.127601,-79.634209],[-162.439847,-79.281465],[-163.027408,-78.928774],[-163.066604,-78.869966],[-163.712896,-78.595667],[-163.712896,-78.595667],[-163.105801,-78.223338],[-161.245113,-78.380176],[-160.246208,-78.693645],[-159.482405,-79.046338],[-159.208184,-79.497059]],\n      [[-45.154758,-78.04707],[-43.920828,-78.478103],[-43.48995,-79.08556],[-43.372438,-79.516645],[-43.333267,-80.026123],[-44.880537,-80.339644],[-46.506174,-80.594357],[-48.386421,-80.829485],[-50.482107,-81.025442],[-52.851988,-80.966685],[-54.164259,-80.633528],[-53.987991,-80.222028],[-51.853134,-79.94773],[-50.991326,-79.614623],[-50.364595,-79.183487],[-49.914131,-78.811209],[-49.306959,-78.458569],[-48.660616,-78.047018],[-48.660616,-78.047019],[-48.151396,-78.04707],[-46.662857,-77.831476],[-45.154758,-78.04707]],\n      [[-121.211511,-73.50099],[-119.918851,-73.657725],[-118.724143,-73.481353],[-119.292119,-73.834097],[-120.232217,-74.08881],[-121.62283,-74.010468],[-122.621735,-73.657778],[-122.621735,-73.657777],[-122.406245,-73.324619],[-121.211511,-73.50099]],\n      [[-125.559566,-73.481353],[-124.031882,-73.873268],[-124.619469,-73.834097],[-125.912181,-73.736118],[-127.28313,-73.461769],[-127.28313,-73.461768],[-126.558472,-73.246226],[-125.559566,-73.481353]],\n      [[-98.98155,-71.933334],[-97.884743,-72.070535],[-96.787937,-71.952971],[-96.20035,-72.521205],[-96.983765,-72.442864],[-98.198083,-72.482035],[-99.432013,-72.442864],[-100.783455,-72.50162],[-101.801868,-72.305663],[-102.330725,-71.894164],[-102.330725,-71.894164],[-101.703967,-71.717792],[-100.430919,-71.854993],[-98.98155,-71.933334]],\n      [[-68.451346,-70.955823],[-68.333834,-71.406493],[-68.510128,-71.798407],[-68.784297,-72.170736],[-69.959471,-72.307885],[-71.075889,-72.503842],[-72.388134,-72.484257],[-71.8985,-72.092343],[-73.073622,-72.229492],[-74.19004,-72.366693],[-74.953895,-72.072757],[-75.012625,-71.661258],[-73.915819,-71.269345],[-73.915819,-71.269344],[-73.230331,-71.15178],[-72.074717,-71.190951],[-71.780962,-70.681473],[-71.72218,-70.309196],[-71.741791,-69.505782],[-71.173815,-69.035475],[-70.253252,-68.87874],[-69.724447,-69.251017],[-69.489422,-69.623346],[-69.058518,-70.074016],[-68.725541,-70.505153],[-68.451346,-70.955823]],\n      [[-58.614143,-64.152467],[-59.045073,-64.36801],[-59.789342,-64.211223],[-60.611928,-64.309202],[-61.297416,-64.54433],[-62.0221,-64.799094],[-62.51176,-65.09303],[-62.648858,-65.484942],[-62.590128,-65.857219],[-62.120079,-66.190326],[-62.805567,-66.425505],[-63.74569,-66.503847],[-64.294106,-66.837004],[-64.881693,-67.150474],[-65.508425,-67.58161],[-65.665082,-67.953887],[-65.312545,-68.365335],[-64.783715,-68.678908],[-63.961103,-68.913984],[-63.1973,-69.227556],[-62.785955,-69.619419],[-62.570516,-69.991747],[-62.276736,-70.383661],[-61.806661,-70.716768],[-61.512906,-71.089045],[-61.375809,-72.010074],[-61.081977,-72.382351],[-61.003661,-72.774265],[-60.690269,-73.166179],[-60.827367,-73.695242],[-61.375809,-74.106742],[-61.96337,-74.439848],[-63.295201,-74.576997],[-63.74569,-74.92974],[-64.352836,-75.262847],[-65.860987,-75.635124],[-67.192818,-75.79191],[-68.446282,-76.007452],[-69.797724,-76.222995],[-70.600724,-76.634494],[-72.206776,-76.673665],[-73.969536,-76.634494],[-75.555977,-76.712887],[-77.24037,-76.712887],[-76.926979,-77.104802],[-75.399294,-77.28107],[-74.282876,-77.55542],[-73.656119,-77.908112],[-74.772536,-78.221633],[-76.4961,-78.123654],[-77.925858,-78.378419],[-77.984666,-78.789918],[-78.023785,-79.181833],[-76.848637,-79.514939],[-76.633224,-79.887216],[-75.360097,-80.259545],[-73.244852,-80.416331],[-71.442946,-80.69063],[-70.013163,-81.004151],[-68.191646,-81.317672],[-65.704279,-81.474458],[-63.25603,-81.748757],[-61.552026,-82.042692],[-59.691416,-82.37585],[-58.712121,-82.846106],[-58.222487,-83.218434],[-57.008117,-82.865691],[-55.362894,-82.571755],[-53.619771,-82.258235],[-51.543644,-82.003521],[-49.76135,-81.729171],[-47.273931,-81.709586],[-44.825708,-81.846735],[-42.808363,-82.081915],[-42.16202,-81.65083],[-40.771433,-81.356894],[-38.244818,-81.337309],[-36.26667,-81.121715],[-34.386397,-80.906172],[-32.310296,-80.769023],[-30.097098,-80.592651],[-28.549802,-80.337938],[-29.254901,-79.985195],[-29.685805,-79.632503],[-29.685805,-79.260226],[-31.624808,-79.299397],[-33.681324,-79.456132],[-35.639912,-79.456132],[-35.914107,-79.083855],[-35.77701,-78.339248],[-35.326546,-78.123654],[-33.896763,-77.888526],[-32.212369,-77.65345],[-30.998051,-77.359515],[-29.783732,-77.065579],[-28.882779,-76.673665],[-27.511752,-76.497345],[-26.160336,-76.360144],[-25.474822,-76.281803],[-23.927552,-76.24258],[-22.458598,-76.105431],[-21.224694,-75.909474],[-20.010375,-75.674346],[-18.913543,-75.439218],[-17.522982,-75.125698],[-16.641589,-74.79254],[-15.701491,-74.498604],[-15.40771,-74.106742],[-16.46532,-73.871614],[-16.112784,-73.460114],[-15.446855,-73.146542],[-14.408805,-72.950585],[-13.311973,-72.715457],[-12.293508,-72.401936],[-11.510067,-72.010074],[-11.020433,-71.539767],[-10.295774,-71.265416],[-9.101015,-71.324224],[-8.611381,-71.65733],[-7.416622,-71.696501],[-7.377451,-71.324224],[-6.868232,-70.93231],[-5.790985,-71.030289],[-5.536375,-71.402617],[-4.341667,-71.461373],[-3.048981,-71.285053],[-1.795492,-71.167438],[-0.659489,-71.226246],[-0.228637,-71.637745],[0.868195,-71.304639],[1.886686,-71.128267],[3.022638,-70.991118],[4.139055,-70.853917],[5.157546,-70.618789],[6.273912,-70.462055],[7.13572,-70.246512],[7.742866,-69.893769],[8.48711,-70.148534],[9.525135,-70.011333],[10.249845,-70.48164],[10.817821,-70.834332],[11.953824,-70.638375],[12.404287,-70.246512],[13.422778,-69.972162],[14.734998,-70.030918],[15.126757,-70.403247],[15.949342,-70.030918],[17.026589,-69.913354],[18.201711,-69.874183],[19.259373,-69.893769],[20.375739,-70.011333],[21.452985,-70.07014],[21.923034,-70.403247],[22.569403,-70.697182],[23.666184,-70.520811],[24.841357,-70.48164],[25.977309,-70.48164],[27.093726,-70.462055],[28.09258,-70.324854],[29.150242,-70.20729],[30.031583,-69.93294],[30.971733,-69.75662],[31.990172,-69.658641],[32.754053,-69.384291],[33.302443,-68.835642],[33.870419,-68.502588],[34.908495,-68.659271],[35.300202,-69.012014],[36.16201,-69.247142],[37.200035,-69.168748],[37.905108,-69.52144],[38.649404,-69.776205],[39.667894,-69.541077],[40.020431,-69.109941],[40.921358,-68.933621],[41.959434,-68.600514],[42.938702,-68.463313],[44.113876,-68.267408],[44.897291,-68.051866],[45.719928,-67.816738],[46.503343,-67.601196],[47.44344,-67.718759],[48.344419,-67.366068],[48.990736,-67.091718],[49.930885,-67.111303],[50.753471,-66.876175],[50.949325,-66.523484],[51.791547,-66.249133],[52.614133,-66.053176],[53.613038,-65.89639],[54.53355,-65.818049],[55.414943,-65.876805],[56.355041,-65.974783],[57.158093,-66.249133],[57.255968,-66.680218],[58.137361,-67.013324],[58.744508,-67.287675],[59.939318,-67.405239],[60.605221,-67.679589],[61.427806,-67.953887],[62.387489,-68.012695],[63.19049,-67.816738],[64.052349,-67.405239],[64.992447,-67.620729],[65.971715,-67.738345],[66.911864,-67.855909],[67.891133,-67.934302],[68.890038,-67.934302],[69.712624,-68.972791],[69.673453,-69.227556],[69.555941,-69.678226],[68.596258,-69.93294],[67.81274,-70.305268],[67.949889,-70.697182],[69.066307,-70.677545],[68.929157,-71.069459],[68.419989,-71.441788],[67.949889,-71.853287],[68.71377,-72.166808],[69.869307,-72.264787],[71.024895,-72.088415],[71.573285,-71.696501],[71.906288,-71.324224],[72.454627,-71.010703],[73.08141,-70.716768],[73.33602,-70.364024],[73.864877,-69.874183],[74.491557,-69.776205],[75.62756,-69.737034],[76.626465,-69.619419],[77.644904,-69.462684],[78.134539,-69.07077],[78.428371,-68.698441],[79.113859,-68.326216],[80.093127,-68.071503],[80.93535,-67.875546],[81.483792,-67.542388],[82.051767,-67.366068],[82.776426,-67.209282],[83.775331,-67.30726],[84.676206,-67.209282],[85.655527,-67.091718],[86.752359,-67.150474],[87.477017,-66.876175],[87.986289,-66.209911],[88.358411,-66.484261],[88.828408,-66.954568],[89.67063,-67.150474],[90.630365,-67.228867],[91.5901,-67.111303],[92.608539,-67.189696],[93.548637,-67.209282],[94.17542,-67.111303],[95.017591,-67.170111],[95.781472,-67.385653],[96.682399,-67.248504],[97.759646,-67.248504],[98.68021,-67.111303],[99.718182,-67.248504],[100.384188,-66.915346],[100.893356,-66.58224],[101.578896,-66.30789],[102.832411,-65.563284],[103.478676,-65.700485],[104.242557,-65.974783],[104.90846,-66.327527],[106.181561,-66.934931],[107.160881,-66.954568],[108.081393,-66.954568],[109.15864,-66.837004],[110.235835,-66.699804],[111.058472,-66.425505],[111.74396,-66.13157],[112.860378,-66.092347],[113.604673,-65.876805],[114.388088,-66.072762],[114.897308,-66.386283],[115.602381,-66.699804],[116.699161,-66.660633],[117.384701,-66.915346],[118.57946,-67.170111],[119.832924,-67.268089],[120.871,-67.189696],[121.654415,-66.876175],[122.320369,-66.562654],[123.221296,-66.484261],[124.122274,-66.621462],[125.160247,-66.719389],[126.100396,-66.562654],[127.001427,-66.562654],[127.882768,-66.660633],[128.80328,-66.758611],[129.704259,-66.58224],[130.781454,-66.425505],[131.799945,-66.386283],[132.935896,-66.386283],[133.85646,-66.288304],[134.757387,-66.209963],[135.031582,-65.72007],[135.070753,-65.308571],[135.697485,-65.582869],[135.873805,-66.033591],[136.206705,-66.44509],[136.618049,-66.778197],[137.460271,-66.954568],[138.596223,-66.895761],[139.908442,-66.876175],[140.809421,-66.817367],[142.121692,-66.817367],[143.061842,-66.797782],[144.374061,-66.837004],[145.490427,-66.915346],[146.195552,-67.228867],[145.999699,-67.601196],[146.646067,-67.895131],[147.723263,-68.130259],[148.839629,-68.385024],[150.132314,-68.561292],[151.483705,-68.71813],[152.502247,-68.874813],[153.638199,-68.894502],[154.284567,-68.561292],[155.165857,-68.835642],[155.92979,-69.149215],[156.811132,-69.384291],[158.025528,-69.482269],[159.181013,-69.599833],[159.670699,-69.991747],[160.80665,-70.226875],[161.570479,-70.579618],[162.686897,-70.736353],[163.842434,-70.716768],[164.919681,-70.775524],[166.11444,-70.755938],[167.309095,-70.834332],[168.425616,-70.971481],[169.463589,-71.20666],[170.501665,-71.402617],[171.20679,-71.696501],[171.089227,-72.088415],[170.560422,-72.441159],[170.109958,-72.891829],[169.75737,-73.24452],[169.287321,-73.65602],[167.975101,-73.812806],[167.387489,-74.165498],[166.094803,-74.38104],[165.644391,-74.772954],[164.958851,-75.145283],[164.234193,-75.458804],[163.822797,-75.870303],[163.568239,-76.24258],[163.47026,-76.693302],[163.489897,-77.065579],[164.057873,-77.457442],[164.273363,-77.82977],[164.743464,-78.182514],[166.604126,-78.319611],[166.995781,-78.750748],[165.193876,-78.907483],[163.666217,-79.123025],[161.766385,-79.162248],[160.924162,-79.730482],[160.747894,-80.200737],[160.316964,-80.573066],[159.788211,-80.945395],[161.120016,-81.278501],[161.629287,-81.690001],[162.490992,-82.062278],[163.705336,-82.395435],[165.095949,-82.708956],[166.604126,-83.022477],[168.895665,-83.335998],[169.404782,-83.825891],[172.283934,-84.041433],[172.477049,-84.117914],[173.224083,-84.41371],[175.985672,-84.158997],[178.277212,-84.472518],[180,-84.71338],[-179.942499,-84.721443],[-179.058677,-84.139412],[-177.256772,-84.452933],[-177.140807,-84.417941],[-176.084673,-84.099259],[-175.947235,-84.110449],[-175.829882,-84.117914],[-174.382503,-84.534323],[-173.116559,-84.117914],[-172.889106,-84.061019],[-169.951223,-83.884647],[-168.999989,-84.117914],[-168.530199,-84.23739],[-167.022099,-84.570497],[-164.182144,-84.82521],[-161.929775,-85.138731],[-158.07138,-85.37391],[-155.192253,-85.09956],[-150.942099,-85.295517],[-148.533073,-85.609038],[-145.888918,-85.315102],[-143.107718,-85.040752],[-142.892279,-84.570497],[-146.829068,-84.531274],[-150.060732,-84.296146],[-150.902928,-83.904232],[-153.586201,-83.68869],[-153.409907,-83.23802],[-153.037759,-82.82652],[-152.665637,-82.454192],[-152.861517,-82.042692],[-154.526299,-81.768394],[-155.29018,-81.41565],[-156.83745,-81.102129],[-154.408787,-81.160937],[-152.097662,-81.004151],[-150.648293,-81.337309],[-148.865998,-81.043373],[-147.22075,-80.671045],[-146.417749,-80.337938],[-146.770286,-79.926439],[-148.062947,-79.652089],[-149.531901,-79.358205],[-151.588416,-79.299397],[-153.390322,-79.162248],[-155.329376,-79.064269],[-155.975668,-78.69194],[-157.268302,-78.378419],[-158.051768,-78.025676],[-158.365134,-76.889207],[-157.875474,-76.987238],[-156.974573,-77.300759],[-155.329376,-77.202728],[-153.742832,-77.065579],[-152.920247,-77.496664],[-151.33378,-77.398737],[-150.00195,-77.183143],[-148.748486,-76.908845],[-147.612483,-76.575738],[-146.104409,-76.47776],[-146.143528,-76.105431],[-146.496091,-75.733154],[-146.20231,-75.380411],[-144.909624,-75.204039],[-144.322037,-75.537197],[-142.794353,-75.34124],[-141.638764,-75.086475],[-140.209007,-75.06689],[-138.85759,-74.968911],[-137.5062,-74.733783],[-136.428901,-74.518241],[-135.214583,-74.302699],[-134.431194,-74.361455],[-133.745654,-74.439848],[-132.257168,-74.302699],[-130.925311,-74.479019],[-129.554284,-74.459433],[-128.242038,-74.322284],[-126.890622,-74.420263],[-125.402082,-74.518241],[-124.011496,-74.479019],[-122.562152,-74.498604],[-121.073613,-74.518241],[-119.70256,-74.479019],[-118.684145,-74.185083],[-117.469801,-74.028348],[-116.216312,-74.243891],[-115.021552,-74.067519],[-113.944331,-73.714828],[-113.297988,-74.028348],[-112.945452,-74.38104],[-112.299083,-74.714198],[-111.261059,-74.420263],[-110.066325,-74.79254],[-108.714909,-74.910103],[-107.559346,-75.184454],[-106.149148,-75.125698],[-104.876074,-74.949326],[-103.367949,-74.988497],[-102.016507,-75.125698],[-100.645531,-75.302018],[-100.1167,-74.870933],[-100.763043,-74.537826],[-101.252703,-74.185083],[-102.545337,-74.106742],[-103.113313,-73.734413],[-103.328752,-73.362084],[-103.681289,-72.61753],[-102.917485,-72.754679],[-101.60524,-72.813436],[-100.312528,-72.754679],[-99.13738,-72.911414],[-98.118889,-73.20535],[-97.688037,-73.558041],[-96.336595,-73.616849],[-95.043961,-73.4797],[-93.672907,-73.283743],[-92.439003,-73.166179],[-91.420564,-73.401307],[-90.088733,-73.322914],[-89.226951,-72.558722],[-88.423951,-73.009393],[-87.268337,-73.185764],[-86.014822,-73.087786],[-85.192236,-73.4797],[-83.879991,-73.518871],[-82.665646,-73.636434],[-81.470913,-73.851977],[-80.687447,-73.4797],[-80.295791,-73.126956],[-79.296886,-73.518871],[-77.925858,-73.420892],[-76.907367,-73.636434],[-76.221879,-73.969541],[-74.890049,-73.871614],[-73.852024,-73.65602],[-72.833533,-73.401307],[-71.619215,-73.264157],[-70.209042,-73.146542],[-68.935916,-73.009393],[-67.956622,-72.79385],[-67.369061,-72.480329],[-67.134036,-72.049244],[-67.251548,-71.637745],[-67.56494,-71.245831],[-67.917477,-70.853917],[-68.230843,-70.462055],[-68.485452,-70.109311],[-68.544209,-69.717397],[-68.446282,-69.325535],[-67.976233,-68.953206],[-67.5845,-68.541707],[-67.427843,-68.149844],[-67.62367,-67.718759],[-67.741183,-67.326845],[-67.251548,-66.876175],[-66.703184,-66.58224],[-66.056815,-66.209963],[-65.371327,-65.89639],[-64.568276,-65.602506],[-64.176542,-65.171423],[-63.628152,-64.897073],[-63.001394,-64.642308],[-62.041686,-64.583552],[-61.414928,-64.270031],[-60.709855,-64.074074],[-59.887269,-63.95651],[-59.162585,-63.701745],[-58.594557,-63.388224],[-57.811143,-63.27066],[-57.223582,-63.525425],[-57.59573,-63.858532],[-58.614143,-64.152467]],\n      [[145.397978,-40.792549],[146.364121,-41.137695],[146.908584,-41.000546],[147.689259,-40.808258],[148.289068,-40.875438],[148.359865,-42.062445],[148.017301,-42.407024],[147.914052,-43.211522],[147.564564,-42.937689],[146.870343,-43.634597],[146.663327,-43.580854],[146.048378,-43.549745],[145.43193,-42.693776],[145.29509,-42.03361],[144.718071,-41.162552],[144.743755,-40.703975],[145.397978,-40.792549]],\n      [[143.561811,-13.763656],[143.922099,-14.548311],[144.563714,-14.171176],[144.894908,-14.594458],[145.374724,-14.984976],[145.271991,-15.428205],[145.48526,-16.285672],[145.637033,-16.784918],[145.888904,-16.906926],[146.160309,-17.761655],[146.063674,-18.280073],[146.387478,-18.958274],[147.471082,-19.480723],[148.177602,-19.955939],[148.848414,-20.39121],[148.717465,-20.633469],[149.28942,-21.260511],[149.678337,-22.342512],[150.077382,-22.122784],[150.482939,-22.556142],[150.727265,-22.402405],[150.899554,-23.462237],[151.609175,-24.076256],[152.07354,-24.457887],[152.855197,-25.267501],[153.136162,-26.071173],[153.161949,-26.641319],[153.092909,-27.2603],[153.569469,-28.110067],[153.512108,-28.995077],[153.339095,-29.458202],[153.069241,-30.35024],[153.089602,-30.923642],[152.891578,-31.640446],[152.450002,-32.550003],[151.709117,-33.041342],[151.343972,-33.816023],[151.010555,-34.31036],[150.714139,-35.17346],[150.32822,-35.671879],[150.075212,-36.420206],[149.946124,-37.109052],[149.997284,-37.425261],[149.423882,-37.772681],[148.304622,-37.809061],[147.381733,-38.219217],[146.922123,-38.606532],[146.317922,-39.035757],[145.489652,-38.593768],[144.876976,-38.417448],[145.032212,-37.896188],[144.485682,-38.085324],[143.609974,-38.809465],[142.745427,-38.538268],[142.17833,-38.380034],[141.606582,-38.308514],[140.638579,-38.019333],[139.992158,-37.402936],[139.806588,-36.643603],[139.574148,-36.138362],[139.082808,-35.732754],[138.120748,-35.612296],[138.449462,-35.127261],[138.207564,-34.384723],[137.71917,-35.076825],[136.829406,-35.260535],[137.352371,-34.707339],[137.503886,-34.130268],[137.890116,-33.640479],[137.810328,-32.900007],[136.996837,-33.752771],[136.372069,-34.094766],[135.989043,-34.890118],[135.208213,-34.47867],[135.239218,-33.947953],[134.613417,-33.222778],[134.085904,-32.848072],[134.273903,-32.617234],[132.990777,-32.011224],[132.288081,-31.982647],[131.326331,-31.495803],[129.535794,-31.590423],[128.240938,-31.948489],[127.102867,-32.282267],[126.148714,-32.215966],[125.088623,-32.728751],[124.221648,-32.959487],[124.028947,-33.483847],[123.659667,-33.890179],[122.811036,-33.914467],[122.183064,-34.003402],[121.299191,-33.821036],[120.580268,-33.930177],[119.893695,-33.976065],[119.298899,-34.509366],[119.007341,-34.464149],[118.505718,-34.746819],[118.024972,-35.064733],[117.295507,-35.025459],[116.625109,-35.025097],[115.564347,-34.386428],[115.026809,-34.196517],[115.048616,-33.623425],[115.545123,-33.487258],[115.714674,-33.259572],[115.679379,-32.900369],[115.801645,-32.205062],[115.689611,-31.612437],[115.160909,-30.601594],[114.997043,-30.030725],[115.040038,-29.461095],[114.641974,-28.810231],[114.616498,-28.516399],[114.173579,-28.118077],[114.048884,-27.334765],[113.477498,-26.543134],[113.338953,-26.116545],[113.778358,-26.549025],[113.440962,-25.621278],[113.936901,-25.911235],[114.232852,-26.298446],[114.216161,-25.786281],[113.721255,-24.998939],[113.625344,-24.683971],[113.393523,-24.384764],[113.502044,-23.80635],[113.706993,-23.560215],[113.843418,-23.059987],[113.736552,-22.475475],[114.149756,-21.755881],[114.225307,-22.517488],[114.647762,-21.82952],[115.460167,-21.495173],[115.947373,-21.068688],[116.711615,-20.701682],[117.166316,-20.623599],[117.441545,-20.746899],[118.229559,-20.374208],[118.836085,-20.263311],[118.987807,-20.044203],[119.252494,-19.952942],[119.805225,-19.976506],[120.85622,-19.683708],[121.399856,-19.239756],[121.655138,-18.705318],[122.241665,-18.197649],[122.286624,-17.798603],[122.312772,-17.254967],[123.012574,-16.4052],[123.433789,-17.268558],[123.859345,-17.069035],[123.503242,-16.596506],[123.817073,-16.111316],[124.258287,-16.327944],[124.379726,-15.56706],[124.926153,-15.0751],[125.167275,-14.680396],[125.670087,-14.51007],[125.685796,-14.230656],[126.125149,-14.347341],[126.142823,-14.095987],[126.582589,-13.952791],[127.065867,-13.817968],[127.804633,-14.276906],[128.35969,-14.86917],[128.985543,-14.875991],[129.621473,-14.969784],[129.4096,-14.42067],[129.888641,-13.618703],[130.339466,-13.357376],[130.183506,-13.10752],[130.617795,-12.536392],[131.223495,-12.183649],[131.735091,-12.302453],[132.575298,-12.114041],[132.557212,-11.603012],[131.824698,-11.273782],[132.357224,-11.128519],[133.019561,-11.376411],[133.550846,-11.786515],[134.393068,-12.042365],[134.678632,-11.941183],[135.298491,-12.248606],[135.882693,-11.962267],[136.258381,-12.049342],[136.492475,-11.857209],[136.95162,-12.351959],[136.685125,-12.887223],[136.305407,-13.29123],[135.961758,-13.324509],[136.077617,-13.724278],[135.783836,-14.223989],[135.428664,-14.715432],[135.500184,-14.997741],[136.295175,-15.550265],[137.06536,-15.870762],[137.580471,-16.215082],[138.303217,-16.807604],[138.585164,-16.806622],[139.108543,-17.062679],[139.260575,-17.371601],[140.215245,-17.710805],[140.875463,-17.369069],[141.07111,-16.832047],[141.274095,-16.38887],[141.398222,-15.840532],[141.702183,-15.044921],[141.56338,-14.561333],[141.63552,-14.270395],[141.519869,-13.698078],[141.65092,-12.944688],[141.842691,-12.741548],[141.68699,-12.407614],[141.928629,-11.877466],[142.118488,-11.328042],[142.143706,-11.042737],[142.51526,-10.668186],[142.79731,-11.157355],[142.866763,-11.784707],[143.115947,-11.90563],[143.158632,-12.325656],[143.522124,-12.834358],[143.597158,-13.400422],[143.561811,-13.763656]],\n      [[16.979667,48.123497],[16.903754,47.714866],[16.340584,47.712902],[16.534268,47.496171],[16.202298,46.852386]],\n      [[16.202298,46.852386],[16.011664,46.683611],[15.137092,46.658703],[14.632472,46.431817],[13.806475,46.509306]],\n      [[13.806475,46.509306],[12.376485,46.767559],[12.153088,47.115393],[11.164828,46.941579],[11.048556,46.751359],[10.442701,46.893546]],\n      [[10.442701,46.893546],[9.879180119440742,46.93372025967713],[9.871798391640267,47.02000494258236]],\n      [[9.871798391640267,47.02000494258236],[9.60754621634599,47.0613932427273]],\n      [[9.60754621634599,47.0613932427273],[9.63857721710096,47.095217766375],[9.62032689725713,47.1478826137045],[9.56494495232072,47.1709657502944],[9.57917146014346,47.2077927269191]],\n      [[9.57917146014346,47.2077927269191],[9.530220755311232,47.2730326940506],[9.629127151388623,47.364783895095464]],\n      [[9.629127151388623,47.364783895095464],[9.594226,47.525058]],\n      [[9.594226,47.525058],[9.896068,47.580197],[10.402084,47.302488],[10.544504,47.566399],[11.426414,47.523766],[12.141357,47.703083],[12.62076,47.672388],[12.932627,47.467646],[13.025851,47.637584],[12.884103,48.289146],[13.243357,48.416115],[13.595946,48.877172]],\n      [[13.595946,48.877172],[14.338898,48.555305],[14.901447,48.964402],[15.253416,49.039074],[16.029647,48.733899],[16.499283,48.785808],[16.960288,48.596982]],\n      [[16.960288,48.596982],[16.879983,48.470013],[16.979667,48.123497]],\n      [[46.143623,38.741201],[45.457722,38.874139],[44.952688,39.335765],[44.79399,39.713003]],\n      [[47.987283,41.405819],[48.584353,41.80887],[49.110264,41.282287],[49.618915,40.572924],[50.08483,40.526157],[50.392821,40.256561],[49.569202,40.176101],[49.395259,39.399482],[49.223228,39.049219],[48.856532,38.815486],[48.883249,38.320245]],\n      [[48.883249,38.320245],[48.634375,38.270378],[48.010744,38.794015],[48.355529,39.288765],[48.060095,39.582235],[47.685079,39.508364],[46.50572,38.770605]],\n      [[44.97248,41.248129],[45.217426,41.411452],[45.962601,41.123873],[46.501637,41.064445],[46.637908,41.181673],[46.145432,41.722802],[46.404951,41.860675]],\n      [[46.404951,41.860675],[46.686071,41.827137],[47.373315,41.219732],[47.815666,41.151416],[47.987283,41.405819]],\n      [[29.339998,-4.499983],[29.276384,-3.293907],[29.024926,-2.839258]],\n      [[29.024926,-2.839258],[29.632176,-2.917858],[29.938359,-2.348487],[30.469696,-2.413858]],\n      [[30.469696,-2.413858],[30.527677,-2.807632],[30.743013,-3.034285],[30.752263,-3.35933],[30.50556,-3.568567],[30.116333,-4.090138],[29.753512,-4.452389]],\n      [[29.753512,-4.452389],[29.339998,-4.499983]],\n      [[4.047071,51.267259],[4.973991,51.475024],[5.606976,51.037298],[6.156658,50.803721]],\n      [[6.156658,50.803721],[6.043073,50.128052]],\n      [[6.043073,50.128052],[5.782417,50.090328],[5.674052,49.529484]],\n      [[5.674052,49.529484],[4.799222,49.985373],[4.286023,49.907497],[3.588184,50.378992],[3.123252,50.780363],[2.658422,50.796848],[2.513573,51.148506]],\n      [[2.513573,51.148506],[3.314971,51.345781],[4.047071,51.267259]],\n      [[2.691702,6.258817],[1.865241,6.142158]],\n      [[1.865241,6.142158],[1.618951,6.832038],[1.664478,9.12859],[1.463043,9.334624],[1.425061,9.825395],[1.077795,10.175607],[0.772336,10.470808],[0.899563,10.997339]],\n      [[0.899563,10.997339],[1.24347,11.110511],[1.447178,11.547719],[1.935986,11.64115],[2.154474,11.94015]],\n      [[2.154474,11.94015],[2.490164,12.233052],[2.848643,12.235636],[3.61118,11.660167]],\n      [[3.61118,11.660167],[3.572216,11.327939],[3.797112,10.734746],[3.60007,10.332186],[3.705438,10.06321],[3.220352,9.444153],[2.912308,9.137608],[2.723793,8.506845],[2.749063,7.870734],[2.691702,6.258817]],\n      [[-2.827496,9.642461],[-3.511899,9.900326],[-3.980449,9.862344],[-4.330247,9.610835],[-4.779884,9.821985],[-4.954653,10.152714],[-5.404342,10.370737]],\n      [[-5.404342,10.370737],[-5.470565,10.95127],[-5.197843,11.375146],[-5.220942,11.713859],[-4.427166,12.542646],[-4.280405,13.228444],[-4.006391,13.472485],[-3.522803,13.337662],[-3.103707,13.541267],[-2.967694,13.79815],[-2.191825,14.246418],[-2.001035,14.559008],[-1.066363,14.973815],[-0.515854,15.116158],[-0.266257,14.924309],[0.374892,14.928908]],\n      [[0.374892,14.928908],[0.295646,14.444235],[0.429928,13.988733],[0.993046,13.33575],[1.024103,12.851826],[2.177108,12.625018],[2.154474,11.94015]],\n      [[0.899563,10.997339],[0.023803,11.018682]],\n      [[0.023803,11.018682],[-0.438702,11.098341],[-0.761576,10.93693],[-1.203358,11.009819],[-2.940409,10.96269],[-2.963896,10.395335],[-2.827496,9.642461]],\n      [[92.672721,22.041239],[92.652257,21.324048],[92.303234,21.475485],[92.368554,20.670883]],\n      [[92.368554,20.670883],[92.082886,21.192195],[92.025215,21.70157],[91.834891,22.182936],[91.417087,22.765019],[90.496006,22.805017],[90.586957,22.392794],[90.272971,21.836368],[89.847467,22.039146],[89.70205,21.857116],[89.418863,21.966179],[89.031961,22.055708]],\n      [[89.031961,22.055708],[88.876312,22.879146],[88.52977,23.631142],[88.69994,24.233715],[88.084422,24.501657],[88.306373,24.866079],[88.931554,25.238692],[88.209789,25.768066],[88.563049,26.446526],[89.355094,26.014407],[89.832481,25.965082],[89.920693,25.26975],[90.872211,25.132601],[91.799596,25.147432],[92.376202,24.976693],[91.915093,24.130414],[91.46773,24.072639],[91.158963,23.503527],[91.706475,22.985264],[91.869928,23.624346],[92.146035,23.627499],[92.672721,22.041239]],\n      [[22.65715,44.234923],[22.944832,43.823785],[23.332302,43.897011],[24.100679,43.741051],[25.569272,43.688445],[26.065159,43.943494],[27.2424,44.175986],[27.970107,43.812468],[28.558081,43.707462]],\n      [[28.558081,43.707462],[28.039095,43.293172],[27.673898,42.577892],[27.99672,42.007359]],\n      [[27.99672,42.007359],[27.135739,42.141485],[26.117042,41.826905]],\n      [[26.117042,41.826905],[26.106138,41.328899],[25.197201,41.234486],[24.492645,41.583896],[23.692074,41.309081],[22.952377,41.337994]],\n      [[22.952377,41.337994],[22.881374,41.999297],[22.380526,42.32026]],\n      [[22.380526,42.32026],[22.545012,42.461362],[22.436595,42.580321],[22.604801,42.898519],[22.986019,43.211161],[22.500157,43.642814],[22.410446,44.008063],[22.65715,44.234923]],\n      [[-77.53466,23.75975],[-77.78,23.71],[-78.03405,24.28615],[-78.40848,24.57564],[-78.19087,25.2103],[-77.89,25.17],[-77.54,24.34],[-77.53466,23.75975]],\n      [[-77.82,26.58],[-78.91,26.42],[-78.98,26.79],[-78.51,26.87],[-77.85,26.84],[-77.82,26.58]],\n      [[-77,26.59],[-77.17255,25.87918],[-77.35641,26.00735],[-77.34,26.53],[-77.78802,26.92516],[-77.79,27.04],[-77,26.59]],\n      [[19.005486,44.860234],[19.36803,44.863]],\n      [[19.36803,44.863],[19.11761,44.42307],[19.59976,44.03847],[19.454,43.5681],[19.21852,43.52384]],\n      [[19.21852,43.52384],[19.03165,43.43253],[18.70648,43.20011],[18.56,42.65]],\n      [[18.56,42.65],[17.674922,43.028563],[17.297373,43.446341],[16.916156,43.667722],[16.456443,44.04124],[16.23966,44.351143],[15.750026,44.818712],[15.959367,45.233777],[16.318157,45.004127],[16.534939,45.211608],[17.002146,45.233777],[17.861783,45.06774],[18.553214,45.08159],[19.005486,44.860234]],\n      [[23.484128,53.912498],[24.450684,53.905702],[25.536354,54.282423],[25.768433,54.846963],[26.588279,55.167176],[26.494331,55.615107]],\n      [[26.494331,55.615107],[27.10246,55.783314],[28.176709,56.16913]],\n      [[28.176709,56.16913],[29.229513,55.918344],[29.371572,55.670091],[29.896294,55.789463],[30.873909,55.550976],[30.971836,55.081548],[30.757534,54.811771],[31.384472,54.157056],[31.791424,53.974639],[31.731273,53.794029],[32.405599,53.618045],[32.693643,53.351421],[32.304519,53.132726]],\n      [[32.304519,53.132726],[31.497644,53.167427],[31.305201,53.073996]],\n      [[31.305201,53.073996],[31.540018,52.742052]],\n      [[31.540018,52.742052],[31.785998,52.101678]],\n      [[31.785998,52.101678],[30.927549,52.042353],[30.619454,51.822806],[30.555117,51.319503],[30.157364,51.416138],[29.254938,51.368234],[28.992835,51.602044],[28.617613,51.427714],[28.241615,51.572227],[27.454066,51.592303],[26.337959,51.832289],[25.327788,51.910656],[24.553106,51.888461],[24.005078,51.617444],[23.527071,51.578454]],\n      [[23.527071,51.578454],[23.508002,52.023647],[23.199494,52.486977],[23.799199,52.691099],[23.804935,53.089731],[23.527536,53.470122],[23.484128,53.912498]],\n      [[-89.14308,17.808319],[-89.150909,17.955468],[-89.029857,18.001511],[-88.848344,17.883198],[-88.490123,18.486831],[-88.300031,18.499982]],\n      [[-88.300031,18.499982],[-88.296336,18.353273],[-88.106813,18.348674],[-88.123479,18.076675],[-88.285355,17.644143],[-88.197867,17.489475],[-88.302641,17.131694],[-88.239518,17.036066],[-88.355428,16.530774],[-88.551825,16.265467],[-88.732434,16.233635],[-88.930613,15.887273]],\n      [[-88.930613,15.887273],[-89.229122,15.886938],[-89.150806,17.015577],[-89.14308,17.808319]],\n      [[-67.106674,-22.735925],[-67.82818,-22.872919],[-68.219913,-21.494347],[-68.757167,-20.372658],[-68.442225,-19.405068],[-68.966818,-18.981683],[-69.100247,-18.260125],[-69.590424,-17.580012]],\n      [[-69.590424,-17.580012],[-68.959635,-16.500698],[-69.389764,-15.660129],[-69.160347,-15.323974],[-69.339535,-14.953195],[-68.948887,-14.453639],[-68.929224,-13.602684],[-68.88008,-12.899729],[-68.66508,-12.5613],[-69.529678,-10.951734]],\n      [[-69.529678,-10.951734],[-68.786158,-11.03638],[-68.271254,-11.014521],[-68.048192,-10.712059],[-67.173801,-10.306812],[-66.646908,-9.931331],[-65.338435,-9.761988],[-65.444837,-10.511451],[-65.321899,-10.895872],[-65.402281,-11.56627],[-64.316353,-12.461978],[-63.196499,-12.627033],[-62.80306,-13.000653],[-62.127081,-13.198781],[-61.713204,-13.489202],[-61.084121,-13.479384],[-60.503304,-13.775955],[-60.459198,-14.354007],[-60.264326,-14.645979],[-60.251149,-15.077219],[-60.542966,-15.09391],[-60.15839,-16.258284],[-58.24122,-16.299573],[-58.388058,-16.877109],[-58.280804,-17.27171],[-57.734558,-17.552468],[-57.498371,-18.174188],[-57.676009,-18.96184],[-57.949997,-19.400004],[-57.853802,-19.969995],[-58.166392,-20.176701]],\n      [[-58.166392,-20.176701],[-58.183471,-19.868399],[-59.115042,-19.356906],[-60.043565,-19.342747],[-61.786326,-19.633737],[-62.265961,-20.513735],[-62.291179,-21.051635],[-62.685057,-22.249029]],\n      [[-54.625291,-25.739255],[-54.428946,-25.162185],[-54.293476,-24.5708],[-54.29296,-24.021014],[-54.652834,-23.839578],[-55.027902,-24.001274],[-55.400747,-23.956935],[-55.517639,-23.571998],[-55.610683,-22.655619],[-55.797958,-22.35693],[-56.473317,-22.0863],[-56.88151,-22.282154],[-57.937156,-22.090176],[-57.870674,-20.732688],[-58.166392,-20.176701]],\n      [[-69.529678,-10.951734],[-70.093752,-11.123972],[-70.548686,-11.009147],[-70.481894,-9.490118],[-71.302412,-10.079436],[-72.184891,-10.053598],[-72.563033,-9.520194],[-73.226713,-9.462213],[-73.015383,-9.032833],[-73.571059,-8.424447],[-73.987235,-7.52383],[-73.723401,-7.340999],[-73.724487,-6.918595],[-73.120027,-6.629931],[-73.219711,-6.089189],[-72.964507,-5.741251],[-72.891928,-5.274561],[-71.748406,-4.593983],[-70.928843,-4.401591],[-70.794769,-4.251265],[-69.893635,-4.298187]],\n      [[-69.893635,-4.298187],[-69.444102,-1.556287],[-69.420486,-1.122619],[-69.577065,-0.549992],[-70.020656,-0.185156],[-70.015566,0.541414],[-69.452396,0.706159],[-69.252434,0.602651],[-69.218638,0.985677],[-69.804597,1.089081],[-69.816973,1.714805],[-67.868565,1.692455],[-67.53781,2.037163],[-67.259998,1.719999],[-67.065048,1.130112],[-66.876326,1.253361]],\n      [[-66.876326,1.253361],[-66.325765,0.724452],[-65.548267,0.789254],[-65.354713,1.095282],[-64.611012,1.328731],[-64.199306,1.492855],[-64.083085,1.916369],[-63.368788,2.2009],[-63.422867,2.411068],[-64.269999,2.497006],[-64.408828,3.126786],[-64.368494,3.79721],[-64.816064,4.056445],[-64.628659,4.148481],[-63.888343,4.02053],[-63.093198,3.770571],[-62.804533,4.006965],[-62.08543,4.162124],[-60.966893,4.536468],[-60.601179,4.918098],[-60.733574,5.200277]],\n      [[-60.733574,5.200277],[-60.213683,5.244486],[-59.980959,5.014061],[-60.111002,4.574967],[-59.767406,4.423503],[-59.53804,3.958803],[-59.815413,3.606499],[-59.974525,2.755233],[-59.718546,2.24963],[-59.646044,1.786894],[-59.030862,1.317698],[-58.540013,1.268088],[-58.429477,1.463942],[-58.11345,1.507195],[-57.660971,1.682585],[-57.335823,1.948538],[-56.782704,1.863711],[-56.539386,1.899523]],\n      [[-56.539386,1.899523],[-55.995698,1.817667],[-55.9056,2.021996],[-56.073342,2.220795],[-55.973322,2.510364],[-55.569755,2.421506],[-55.097587,2.523748],[-54.524754,2.311849]],\n      [[-54.524754,2.311849],[-54.088063,2.105557],[-53.778521,2.376703],[-53.554839,2.334897],[-53.418465,2.053389],[-52.939657,2.124858],[-52.556425,2.504705],[-52.249338,3.241094],[-51.657797,4.156232]],\n      [[-51.657797,4.156232],[-51.317146,4.203491],[-51.069771,3.650398],[-50.508875,1.901564],[-49.974076,1.736483],[-49.947101,1.04619],[-50.699251,0.222984],[-50.388211,-0.078445],[-48.620567,-0.235489],[-48.584497,-1.237805],[-47.824956,-0.581618],[-46.566584,-0.941028],[-44.905703,-1.55174],[-44.417619,-2.13775],[-44.581589,-2.691308],[-43.418791,-2.38311],[-41.472657,-2.912018],[-39.978665,-2.873054],[-38.500383,-3.700652],[-37.223252,-4.820946],[-36.452937,-5.109404],[-35.597796,-5.149504],[-35.235389,-5.464937],[-34.89603,-6.738193],[-34.729993,-7.343221],[-35.128212,-8.996401],[-35.636967,-9.649282],[-37.046519,-11.040721],[-37.683612,-12.171195],[-38.423877,-13.038119],[-38.673887,-13.057652],[-38.953276,-13.79337],[-38.882298,-15.667054],[-39.161092,-17.208407],[-39.267339,-17.867746],[-39.583521,-18.262296],[-39.760823,-19.599113],[-40.774741,-20.904512],[-40.944756,-21.937317],[-41.754164,-22.370676],[-41.988284,-22.97007],[-43.074704,-22.967693],[-44.647812,-23.351959],[-45.352136,-23.796842],[-46.472093,-24.088969],[-47.648972,-24.885199],[-48.495458,-25.877025],[-48.641005,-26.623698],[-48.474736,-27.175912],[-48.66152,-28.186135],[-48.888457,-28.674115],[-49.587329,-29.224469],[-50.696874,-30.984465],[-51.576226,-31.777698],[-52.256081,-32.24537],[-52.7121,-33.196578],[-53.373662,-33.768378]],\n      [[-53.373662,-33.768378],[-53.650544,-33.202004],[-53.209589,-32.727666],[-53.787952,-32.047243],[-54.572452,-31.494511],[-55.60151,-30.853879],[-55.973245,-30.883076],[-56.976026,-30.109686],[-57.625133,-30.216295]],\n      [[114.204017,4.525874],[114.599961,4.900011],[115.45071,5.44773]],\n      [[115.45071,5.44773],[115.4057,4.955228],[115.347461,4.316636],[114.869557,4.348314],[114.659596,4.007637],[114.204017,4.525874]],\n      [[91.696657,27.771742],[92.103712,27.452614],[92.033484,26.83831],[91.217513,26.808648],[90.373275,26.875724],[89.744528,26.719403],[88.835643,27.098966],[88.814248,27.299316]],\n      [[88.814248,27.299316],[89.47581,28.042759],[90.015829,28.296439],[90.730514,28.064954],[91.258854,28.040614],[91.696657,27.771742]],\n      [[29.432188,-22.091313],[28.017236,-22.827754],[27.11941,-23.574323],[26.786407,-24.240691],[26.485753,-24.616327],[25.941652,-24.696373],[25.765849,-25.174845],[25.664666,-25.486816],[25.025171,-25.71967],[24.211267,-25.670216],[23.73357,-25.390129],[23.312097,-25.26869],[22.824271,-25.500459],[22.579532,-25.979448],[22.105969,-26.280256],[21.605896,-26.726534],[20.889609,-26.828543],[20.66647,-26.477453],[20.758609,-25.868136],[20.165726,-24.917962],[19.895768,-24.76779]],\n      [[19.895768,-24.76779],[19.895458,-21.849157],[20.881134,-21.814327],[20.910641,-18.252219],[21.65504,-18.219146],[23.196858,-17.869038],[23.579006,-18.281261],[24.217365,-17.889347],[24.520705,-17.887125],[25.084443,-17.661816]],\n      [[25.084443,-17.661816],[25.264226,-17.73654]],\n      [[25.264226,-17.73654],[25.649163,-18.536026],[25.850391,-18.714413],[26.164791,-19.293086],[27.296505,-20.39152],[27.724747,-20.499059],[27.727228,-20.851802],[28.02137,-21.485975],[28.794656,-21.639454],[29.432188,-22.091313]],\n      [[15.27946,7.421925],[16.106232,7.497088],[16.290562,7.754307],[16.456185,7.734774],[16.705988,7.508328],[17.96493,7.890914],[18.389555,8.281304],[18.911022,8.630895],[18.81201,8.982915],[19.094008,9.074847],[20.059685,9.012706],[21.000868,9.475985],[21.723822,10.567056],[22.231129,10.971889],[22.864165,11.142395]],\n      [[22.864165,11.142395],[22.977544,10.714463],[23.554304,10.089255],[23.55725,9.681218],[23.394779,9.265068],[23.459013,8.954286],[23.805813,8.666319]],\n      [[23.805813,8.666319],[24.567369,8.229188]],\n      [[24.567369,8.229188],[25.114932,7.825104],[25.124131,7.500085],[25.796648,6.979316],[26.213418,6.546603],[26.465909,5.946717],[27.213409,5.550953],[27.374226,5.233944]],\n      [[27.374226,5.233944],[27.044065,5.127853],[26.402761,5.150875],[25.650455,5.256088],[25.278798,5.170408],[25.128833,4.927245],[24.805029,4.897247],[24.410531,5.108784],[23.297214,4.609693],[22.84148,4.710126],[22.704124,4.633051],[22.405124,4.02916],[21.659123,4.224342],[20.927591,4.322786],[20.290679,4.691678],[19.467784,5.031528],[18.932312,4.709506],[18.542982,4.201785],[18.453065,3.504386]],\n      [[18.453065,3.504386],[17.8099,3.560196],[17.133042,3.728197],[16.537058,3.198255],[16.012852,2.26764]],\n      [[16.012852,2.26764],[15.907381,2.557389],[15.862732,3.013537],[15.405396,3.335301],[15.03622,3.851367],[14.950953,4.210389],[14.478372,4.732605],[14.558936,5.030598],[14.459407,5.451761],[14.53656,6.226959],[14.776545,6.408498],[15.27946,7.421925]],\n      [[-63.6645,46.55001],[-62.9393,46.41587],[-62.01208,46.44314],[-62.50391,46.03339],[-62.87433,45.96818],[-64.1428,46.39265],[-64.39261,46.72747],[-64.01486,47.03601],[-63.6645,46.55001]],\n      [[-61.806305,49.10506],[-62.29318,49.08717],[-63.58926,49.40069],[-64.51912,49.87304],[-64.17322,49.95718],[-62.85829,49.70641],[-61.835585,49.28855],[-61.806305,49.10506]],\n      [[-123.510002,48.510011],[-124.012891,48.370846],[-125.655013,48.825005],[-125.954994,49.179996],[-126.850004,49.53],[-127.029993,49.814996],[-128.059336,49.994959],[-128.444584,50.539138],[-128.358414,50.770648],[-127.308581,50.552574],[-126.695001,50.400903],[-125.755007,50.295018],[-125.415002,49.950001],[-124.920768,49.475275],[-123.922509,49.062484],[-123.510002,48.510011]],\n      [[-56.134036,50.68701],[-56.795882,49.812309],[-56.143105,50.150117],[-55.471492,49.935815],[-55.822401,49.587129],[-54.935143,49.313011],[-54.473775,49.556691],[-53.476549,49.249139],[-53.786014,48.516781],[-53.086134,48.687804],[-52.958648,48.157164],[-52.648099,47.535548],[-53.069158,46.655499],[-53.521456,46.618292],[-54.178936,46.807066],[-53.961869,47.625207],[-54.240482,47.752279],[-55.400773,46.884994],[-55.997481,46.91972],[-55.291219,47.389562],[-56.250799,47.632545],[-57.325229,47.572807],[-59.266015,47.603348],[-59.419494,47.899454],[-58.796586,48.251525],[-59.231625,48.523188],[-58.391805,49.125581],[-57.35869,50.718274],[-56.73865,51.287438],[-55.870977,51.632094],[-55.406974,51.588273],[-55.600218,51.317075],[-56.134036,50.68701]],\n      [[-132.710008,54.040009],[-132.710009,54.040009],[-132.710008,54.040009],[-132.710008,54.040009],[-131.74999,54.120004],[-132.04948,52.984621],[-131.179043,52.180433],[-131.57783,52.182371],[-132.180428,52.639707],[-132.549992,53.100015],[-133.054611,53.411469],[-133.239664,53.85108],[-133.180004,54.169975],[-132.710008,54.040009]],\n      [[-79.26582,62.158675],[-79.65752,61.63308],[-80.09956,61.7181],[-80.36215,62.01649],[-80.315395,62.085565],[-79.92939,62.3856],[-79.52002,62.36371],[-79.26582,62.158675]],\n      [[-81.89825,62.7108],[-83.06857,62.15922],[-83.77462,62.18231],[-83.99367,62.4528],[-83.25048,62.91409],[-81.87699,62.90458],[-81.89825,62.7108]],\n      [[-85.161308,65.657285],[-84.975764,65.217518],[-84.464012,65.371772],[-83.882626,65.109618],[-82.787577,64.766693],[-81.642014,64.455136],[-81.55344,63.979609],[-80.817361,64.057486],[-80.103451,63.725981],[-80.99102,63.411246],[-82.547178,63.651722],[-83.108798,64.101876],[-84.100417,63.569712],[-85.523405,63.052379],[-85.866769,63.637253],[-87.221983,63.541238],[-86.35276,64.035833],[-86.224886,64.822917],[-85.883848,65.738778],[-85.161308,65.657285]],\n      [[-75.86588,67.14886],[-76.98687,67.09873],[-77.2364,67.58809],[-76.81166,68.14856],[-75.89521,68.28721],[-75.1145,68.01036],[-75.10333,67.58202],[-75.21597,67.44425],[-75.86588,67.14886]],\n      [[-95.647681,69.10769],[-96.269521,68.75704],[-97.617401,69.06003],[-98.431801,68.9507],[-99.797401,69.40003],[-98.917401,69.71003],[-98.218261,70.14354],[-97.157401,69.86003],[-96.557401,69.68003],[-96.257401,69.49003],[-95.647681,69.10769]],\n      [[-67.13741,45.13753],[-67.79134,45.70281],[-67.79046,47.06636],[-68.23444,47.35486],[-68.905,47.185],[-69.237216,47.447781],[-69.99997,46.69307],[-70.305,45.915],[-70.66,45.46],[-71.08482,45.30524],[-71.405,45.255],[-71.50506,45.0082],[-73.34783,45.00738],[-74.867,45.00048],[-75.31821,44.81645],[-76.375,44.09631],[-76.5,44.018459],[-76.820034,43.628784],[-77.737885,43.629056],[-78.72028,43.625089],[-79.171674,43.466339],[-79.01,43.27],[-78.92,42.965],[-78.939362,42.863611],[-80.247448,42.3662],[-81.277747,42.209026],[-82.439278,41.675105],[-82.690089,41.675105],[-83.02981,41.832796],[-83.142,41.975681],[-83.12,42.08],[-82.9,42.43],[-82.43,42.98],[-82.137642,43.571088],[-82.337763,44.44],[-82.550925,45.347517],[-83.592851,45.816894],[-83.469551,45.994686],[-83.616131,46.116927],[-83.890765,46.116927],[-84.091851,46.275419],[-84.14212,46.512226],[-84.3367,46.40877],[-84.6049,46.4396],[-84.543749,46.538684],[-84.779238,46.637102],[-84.87608,46.900083],[-85.652363,47.220219],[-86.461991,47.553338],[-87.439793,47.94],[-88.378114,48.302918],[-89.272917,48.019808],[-89.6,48.01],[-90.83,48.27],[-91.64,48.14],[-92.61,48.45],[-93.63087,48.60926],[-94.32914,48.67074],[-94.64,48.84],[-94.81758,49.38905],[-95.15609,49.38425],[-95.15907,49],[-97.22872,49.0007],[-100.65,49],[-104.04826,48.99986],[-107.05,49],[-110.05,49],[-113,49],[-116.04818,49],[-117.03121,49],[-120,49],[-122.84,49]],\n      [[-122.84,49],[-122.97421,49.002538],[-124.91024,49.98456],[-125.62461,50.41656],[-127.43561,50.83061],[-127.99276,51.71583],[-127.85032,52.32961],[-129.12979,52.75538],[-129.30523,53.56159],[-130.51497,54.28757],[-130.53611,54.80278],[-129.98,55.285],[-130.00778,55.91583]],\n      [[-130.00778,55.91583],[-131.70781,56.55212],[-132.73042,57.69289]],\n      [[-132.73042,57.69289],[-133.35556,58.41028],[-134.27111,58.86111]],\n      [[-134.27111,58.86111],[-134.945,59.27056],[-135.47583,59.78778],[-136.47972,59.46389],[-137.4525,58.905],[-138.34089,59.56211]],\n      [[-138.34089,59.56211],[-139.039,60],[-140.013,60.27682],[-140.99778,60.30639],[-140.9925,66.00003],[-140.986,69.712],[-139.12052,69.47102],[-137.54636,68.99002],[-136.50358,68.89804],[-135.62576,69.31512],[-134.41464,69.62743],[-132.92925,69.50534],[-131.43136,69.94451],[-129.79471,70.19369],[-129.10773,69.77927],[-128.36156,70.01286],[-128.13817,70.48384],[-127.44712,70.37721],[-125.75632,69.48058],[-124.42483,70.1584],[-124.28968,69.39969],[-123.06108,69.56372],[-122.6835,69.85553],[-121.47226,69.79778],[-119.94288,69.37786],[-117.60268,69.01128],[-116.22643,68.84151],[-115.2469,68.90591],[-113.89794,68.3989],[-115.30489,67.90261],[-113.49727,67.68815],[-110.798,67.80612],[-109.94619,67.98104],[-108.8802,67.38144],[-107.79239,67.88736],[-108.81299,68.31164],[-108.16721,68.65392],[-106.95,68.7],[-106.15,68.8],[-105.34282,68.56122],[-104.33791,68.018],[-103.22115,68.09775],[-101.45433,67.64689],[-99.90195,67.80566],[-98.4432,67.78165],[-98.5586,68.40394],[-97.66948,68.57864],[-96.11991,68.23939],[-96.12588,67.29338],[-95.48943,68.0907],[-94.685,68.06383],[-94.23282,69.06903],[-95.30408,69.68571],[-96.47131,70.08976],[-96.39115,71.19482],[-95.2088,71.92053],[-93.88997,71.76015],[-92.87818,71.31869],[-91.51964,70.19129],[-92.40692,69.69997],[-90.5471,69.49766],[-90.55151,68.47499],[-89.21515,69.25873],[-88.01966,68.61508],[-88.31749,67.87338],[-87.35017,67.19872],[-86.30607,67.92146],[-85.57664,68.78456],[-85.52197,69.88211],[-84.10081,69.80539],[-82.62258,69.65826],[-81.28043,69.16202],[-81.2202,68.66567],[-81.96436,68.13253],[-81.25928,67.59716],[-81.38653,67.11078],[-83.34456,66.41154],[-84.73542,66.2573],[-85.76943,66.55833],[-86.0676,66.05625],[-87.03143,65.21297],[-87.32324,64.77563],[-88.48296,64.09897],[-89.91444,64.03273],[-90.70398,63.61017],[-90.77004,62.96021],[-91.93342,62.83508],[-93.15698,62.02469],[-94.24153,60.89865],[-94.62931,60.11021],[-94.6846,58.94882],[-93.21502,58.78212],[-92.76462,57.84571],[-92.29703,57.08709],[-90.89769,57.28468],[-89.03953,56.85172],[-88.03978,56.47162],[-87.32421,55.99914],[-86.07121,55.72383],[-85.01181,55.3026],[-83.36055,55.24489],[-82.27285,55.14832],[-82.4362,54.28227],[-82.12502,53.27703],[-81.40075,52.15788],[-79.91289,51.20842],[-79.14301,51.53393],[-78.60191,52.56208],[-79.12421,54.14145],[-79.82958,54.66772],[-78.22874,55.13645],[-77.0956,55.83741],[-76.54137,56.53423],[-76.62319,57.20263],[-77.30226,58.05209],[-78.51688,58.80458],[-77.33676,59.85261],[-77.77272,60.75788],[-78.10687,62.31964],[-77.41067,62.55053],[-75.69621,62.2784],[-74.6682,62.18111],[-73.83988,62.4438],[-72.90853,62.10507],[-71.67708,61.52535],[-71.37369,61.13717],[-69.59042,61.06141],[-69.62033,60.22125],[-69.2879,58.95736],[-68.37455,58.80106],[-67.64976,58.21206],[-66.20178,58.76731],[-65.24517,59.87071],[-64.58352,60.33558],[-63.80475,59.4426],[-62.50236,58.16708],[-61.39655,56.96745],[-61.79866,56.33945],[-60.46853,55.77548],[-59.56962,55.20407],[-57.97508,54.94549],[-57.3332,54.6265],[-56.93689,53.78032],[-56.15811,53.64749],[-55.75632,53.27036],[-55.68338,52.14664],[-56.40916,51.7707],[-57.12691,51.41972],[-58.77482,51.0643],[-60.03309,50.24277],[-61.72366,50.08046],[-63.86251,50.29099],[-65.36331,50.2982],[-66.39905,50.22897],[-67.23631,49.51156],[-68.51114,49.06836],[-69.95362,47.74488],[-71.10458,46.82171],[-70.25522,46.98606],[-68.65,48.3],[-66.55243,49.1331],[-65.05626,49.23278],[-64.17099,48.74248],[-65.11545,48.07085],[-64.79854,46.99297],[-64.47219,46.23849],[-63.17329,45.73902],[-61.52072,45.88377],[-60.51815,47.00793],[-60.4486,46.28264],[-59.80287,45.9204],[-61.03988,45.26525],[-63.25471,44.67014],[-64.24656,44.26553],[-65.36406,43.54523],[-66.1234,43.61867],[-66.16173,44.46512],[-64.42549,45.29204],[-66.02605,45.25931],[-67.13741,45.13753]],\n      [[-114.16717,73.12145],[-114.66634,72.65277],[-112.44102,72.9554],[-111.05039,72.4504],[-109.92035,72.96113],[-109.00654,72.63335],[-108.18835,71.65089],[-107.68599,72.06548],[-108.39639,73.08953],[-107.51645,73.23598],[-106.52259,73.07601],[-105.40246,72.67259],[-104.77484,71.6984],[-104.46476,70.99297],[-102.78537,70.49776],[-100.98078,70.02432],[-101.08929,69.58447],[-102.73116,69.50402],[-102.09329,69.11962],[-102.43024,68.75282],[-104.24,68.91],[-105.96,69.18],[-107.12254,69.11922],[-109,68.78],[-111.534149,68.630059],[-113.3132,68.53554],[-113.85496,69.00744],[-115.22,69.28],[-116.10794,69.16821],[-117.34,69.96],[-116.67473,70.06655],[-115.13112,70.2373],[-113.72141,70.19237],[-112.4161,70.36638],[-114.35,70.6],[-116.48684,70.52045],[-117.9048,70.54056],[-118.43238,70.9092],[-116.11311,71.30918],[-117.65568,71.2952],[-119.40199,71.55859],[-118.56267,72.30785],[-117.86642,72.70594],[-115.18909,73.31459],[-114.16717,73.12145]],\n      [[-104.5,73.42],[-105.38,72.76],[-106.94,73.46],[-106.6,73.6],[-105.26,73.64],[-104.5,73.42]],\n      [[-76.34,73.102685],[-76.251404,72.826385],[-77.314438,72.855545],[-78.39167,72.876656],[-79.486252,72.742203],[-79.775833,72.802902],[-80.876099,73.333183],[-80.833885,73.693184],[-80.353058,73.75972],[-78.064438,73.651932],[-76.34,73.102685]],\n      [[-86.562179,73.157447],[-85.774371,72.534126],[-84.850112,73.340278],[-82.31559,73.750951],[-80.600088,72.716544],[-80.748942,72.061907],[-78.770639,72.352173],[-77.824624,72.749617],[-75.605845,72.243678],[-74.228616,71.767144],[-74.099141,71.33084],[-72.242226,71.556925],[-71.200015,70.920013],[-68.786054,70.525024],[-67.91497,70.121948],[-66.969033,69.186087],[-68.805123,68.720198],[-66.449866,68.067163],[-64.862314,67.847539],[-63.424934,66.928473],[-61.851981,66.862121],[-62.163177,66.160251],[-63.918444,64.998669],[-65.14886,65.426033],[-66.721219,66.388041],[-68.015016,66.262726],[-68.141287,65.689789],[-67.089646,65.108455],[-65.73208,64.648406],[-65.320168,64.382737],[-64.669406,63.392927],[-65.013804,62.674185],[-66.275045,62.945099],[-68.783186,63.74567],[-67.369681,62.883966],[-66.328297,62.280075],[-66.165568,61.930897],[-68.877367,62.330149],[-71.023437,62.910708],[-72.235379,63.397836],[-71.886278,63.679989],[-73.378306,64.193963],[-74.834419,64.679076],[-74.818503,64.389093],[-77.70998,64.229542],[-78.555949,64.572906],[-77.897281,65.309192],[-76.018274,65.326969],[-73.959795,65.454765],[-74.293883,65.811771],[-73.944912,66.310578],[-72.651167,67.284576],[-72.92606,67.726926],[-73.311618,68.069437],[-74.843307,68.554627],[-76.869101,68.894736],[-76.228649,69.147769],[-77.28737,69.76954],[-78.168634,69.826488],[-78.957242,70.16688],[-79.492455,69.871808],[-81.305471,69.743185],[-84.944706,69.966634],[-87.060003,70.260001],[-88.681713,70.410741],[-89.51342,70.762038],[-88.467721,71.218186],[-89.888151,71.222552],[-90.20516,72.235074],[-89.436577,73.129464],[-88.408242,73.537889],[-85.826151,73.803816],[-86.562179,73.157447]],\n      [[-100.35642,73.84389],[-99.16387,73.63339],[-97.38,73.76],[-97.12,73.47],[-98.05359,72.99052],[-96.54,72.56],[-96.72,71.66],[-98.35966,71.27285],[-99.32286,71.35639],[-100.01482,71.73827],[-102.5,72.51],[-102.48,72.83],[-100.43836,72.70588],[-101.54,73.36],[-100.35642,73.84389]],\n      [[-93.196296,72.771992],[-94.269047,72.024596],[-95.409856,72.061881],[-96.033745,72.940277],[-96.018268,73.43743],[-95.495793,73.862417],[-94.503658,74.134907],[-92.420012,74.100025],[-90.509793,73.856732],[-92.003965,72.966244],[-93.196296,72.771992]],\n      [[-120.46,71.383602],[-123.09219,70.90164],[-123.62,71.34],[-125.928949,71.868688],[-125.5,72.292261],[-124.80729,73.02256],[-123.94,73.68],[-124.91775,74.29275],[-121.53788,74.44893],[-120.10978,74.24135],[-117.55564,74.18577],[-116.58442,73.89607],[-115.51081,73.47519],[-116.76794,73.22292],[-119.22,72.52],[-120.46,71.82],[-120.46,71.383602]],\n      [[-93.612756,74.979997],[-94.156909,74.592347],[-95.608681,74.666864],[-96.820932,74.927623],[-96.288587,75.377828],[-94.85082,75.647218],[-93.977747,75.29649],[-93.612756,74.979997]],\n      [[-98.5,76.72],[-97.735585,76.25656],[-97.704415,75.74344],[-98.16,75],[-99.80874,74.89744],[-100.88366,75.05736],[-100.86292,75.64075],[-102.50209,75.5638],[-102.56552,76.3366],[-101.48973,76.30537],[-99.98349,76.64634],[-98.57699,76.58859],[-98.5,76.72]],\n      [[-108.21141,76.20168],[-107.81943,75.84552],[-106.92893,76.01282],[-105.881,75.9694],[-105.70498,75.47951],[-106.31347,75.00527],[-109.7,74.85],[-112.22307,74.41696],[-113.74381,74.39427],[-113.87135,74.72029],[-111.79421,75.1625],[-116.31221,75.04343],[-117.7104,75.2222],[-116.34602,76.19903],[-115.40487,76.47887],[-112.59056,76.14134],[-110.81422,75.54919],[-109.0671,75.47321],[-110.49726,76.42982],[-109.5811,76.79417],[-108.54859,76.67832],[-108.21141,76.20168]],\n      [[-94.684086,77.097878],[-93.573921,76.776296],[-91.605023,76.778518],[-90.741846,76.449597],[-90.969661,76.074013],[-89.822238,75.847774],[-89.187083,75.610166],[-87.838276,75.566189],[-86.379192,75.482421],[-84.789625,75.699204],[-82.753445,75.784315],[-81.128531,75.713983],[-80.057511,75.336849],[-79.833933,74.923127],[-80.457771,74.657304],[-81.948843,74.442459],[-83.228894,74.564028],[-86.097452,74.410032],[-88.15035,74.392307],[-89.764722,74.515555],[-92.422441,74.837758],[-92.768285,75.38682],[-92.889906,75.882655],[-93.893824,76.319244],[-95.962457,76.441381],[-97.121379,76.751078],[-96.745123,77.161389],[-94.684086,77.097878]],\n      [[-116.198587,77.645287],[-116.335813,76.876962],[-117.106051,76.530032],[-118.040412,76.481172],[-119.899318,76.053213],[-121.499995,75.900019],[-122.854924,76.116543],[-122.854925,76.116543],[-121.157535,76.864508],[-119.103939,77.51222],[-117.570131,77.498319],[-116.198587,77.645287]],\n      [[-93.840003,77.519997],[-94.295608,77.491343],[-96.169654,77.555111],[-96.436304,77.834629],[-94.422577,77.820005],[-93.720656,77.634331],[-93.840003,77.519997]],\n      [[-110.186938,77.697015],[-112.051191,77.409229],[-113.534279,77.732207],[-112.724587,78.05105],[-111.264443,78.152956],[-109.854452,77.996325],[-110.186938,77.697015]],\n      [[-109.663146,78.601973],[-110.881314,78.40692],[-112.542091,78.407902],[-112.525891,78.550555],[-111.50001,78.849994],[-110.963661,78.804441],[-109.663146,78.601973]],\n      [[-95.830295,78.056941],[-97.309843,77.850597],[-98.124289,78.082857],[-98.552868,78.458105],[-98.631984,78.87193],[-97.337231,78.831984],[-96.754399,78.765813],[-95.559278,78.418315],[-95.830295,78.056941]],\n      [[-100.060192,78.324754],[-99.670939,77.907545],[-101.30394,78.018985],[-102.949809,78.343229],[-105.176133,78.380332],[-104.210429,78.67742],[-105.41958,78.918336],[-105.492289,79.301594],[-103.529282,79.165349],[-100.825158,78.800462],[-100.060192,78.324754]],\n      [[-87.02,79.66],[-85.81435,79.3369],[-87.18756,79.0393],[-89.03535,78.28723],[-90.80436,78.21533],[-92.87669,78.34333],[-93.95116,78.75099],[-93.93574,79.11373],[-93.14524,79.3801],[-94.974,79.37248],[-96.07614,79.70502],[-96.70972,80.15777],[-96.01644,80.60233],[-95.32345,80.90729],[-94.29843,80.97727],[-94.73542,81.20646],[-92.40984,81.25739],[-91.13289,80.72345],[-89.45,80.509322],[-87.81,80.32],[-87.02,79.66]],\n      [[-68.5,83.106322],[-65.82735,83.02801],[-63.68,82.9],[-61.85,82.6286],[-61.89388,82.36165],[-64.334,81.92775],[-66.75342,81.72527],[-67.65755,81.50141],[-65.48031,81.50657],[-67.84,80.9],[-69.4697,80.61683],[-71.18,79.8],[-73.2428,79.63415],[-73.88,79.430162],[-76.90773,79.32309],[-75.52924,79.19766],[-76.22046,79.01907],[-75.39345,78.52581],[-76.34354,78.18296],[-77.88851,77.89991],[-78.36269,77.50859],[-79.75951,77.20968],[-79.61965,76.98336],[-77.91089,77.022045],[-77.88911,76.777955],[-80.56125,76.17812],[-83.17439,76.45403],[-86.11184,76.29901],[-87.6,76.42],[-89.49068,76.47239],[-89.6161,76.95213],[-87.76739,77.17833],[-88.26,77.9],[-87.65,77.970222],[-84.97634,77.53873],[-86.34,78.18],[-87.96192,78.37181],[-87.15198,78.75867],[-85.37868,78.9969],[-85.09495,79.34543],[-86.50734,79.73624],[-86.93179,80.25145],[-84.19844,80.20836],[-83.408696,80.1],[-81.84823,80.46442],[-84.1,80.58],[-87.59895,80.51627],[-89.36663,80.85569],[-90.2,81.26],[-91.36786,81.5531],[-91.58702,81.89429],[-90.1,82.085],[-88.93227,82.11751],[-86.97024,82.27961],[-85.5,82.652273],[-84.260005,82.6],[-83.18,82.32],[-82.42,82.86],[-81.1,83.02],[-79.30664,83.13056],[-76.25,83.172059],[-75.71878,83.06404],[-72.83153,83.23324],[-70.665765,83.169781],[-68.5,83.106322]],\n      [[9.629127151388623,47.364783895095464],[9.53022075531123,47.273032694050606],[9.48531852772954,47.1784895080045]],\n      [[9.48531852772954,47.1784895080045],[9.51421363750238,47.0872683114241],[9.46686466993166,47.0615580974285],[9.55740711339162,47.0511647748693]],\n      [[9.55740711339162,47.0511647748693],[9.60754621634599,47.06139324272732],[9.871798391640267,47.02000494258236]],\n      [[10.442701,46.893546],[10.363378,46.483571],[9.922837,46.314899],[9.182882,46.440215],[8.966306,46.036932],[8.489952,46.005151],[8.31663,46.163642],[7.755992,45.82449],[7.273851,45.776948],[6.843593,45.991147]],\n      [[6.843593,45.991147],[6.5001,46.429673],[6.022609,46.27299],[6.037389,46.725779],[6.768714,47.287708],[6.736571,47.541801],[7.192202,47.449766],[7.466759,47.620582]],\n      [[7.466759,47.620582],[8.317301,47.61358],[8.522612,47.830828],[9.594226,47.525058]],\n      [[-66.95992,-54.89681],[-67.29103,-55.30124],[-68.14863,-55.61183],[-68.639991,-55.580018],[-69.2321,-55.49906],[-69.95809,-55.19843],[-71.00568,-55.05383],[-72.2639,-54.49514],[-73.2852,-53.95752],[-74.66253,-52.83749],[-73.8381,-53.04743],[-72.43418,-53.7154],[-71.10773,-54.07433],[-70.59178,-53.61583],[-70.26748,-52.93123],[-69.34565,-52.5183],[-68.63401,-52.63637]],\n      [[-68.571545,-52.299444],[-69.461284,-52.291951],[-69.94278,-52.537931],[-70.845102,-52.899201],[-71.006332,-53.833252],[-71.429795,-53.856455],[-72.557943,-53.53141],[-73.702757,-52.835069],[-73.702757,-52.83507],[-74.946763,-52.262754],[-75.260026,-51.629355],[-74.976632,-51.043396],[-75.479754,-50.378372],[-75.608015,-48.673773],[-75.18277,-47.711919],[-74.126581,-46.939253],[-75.644395,-46.647643],[-74.692154,-45.763976],[-74.351709,-44.103044],[-73.240356,-44.454961],[-72.717804,-42.383356],[-73.3889,-42.117532],[-73.701336,-43.365776],[-74.331943,-43.224958],[-74.017957,-41.794813],[-73.677099,-39.942213],[-73.217593,-39.258689],[-73.505559,-38.282883],[-73.588061,-37.156285],[-73.166717,-37.12378],[-72.553137,-35.50884],[-71.861732,-33.909093],[-71.43845,-32.418899],[-71.668721,-30.920645],[-71.370083,-30.095682],[-71.489894,-28.861442],[-70.905124,-27.64038],[-70.724954,-25.705924],[-70.403966,-23.628997],[-70.091246,-21.393319],[-70.16442,-19.756468],[-70.372572,-18.347975]],\n      [[-70.372572,-18.347975],[-69.858444,-18.092694],[-69.590424,-17.580012]],\n      [[110.339188,18.678395],[109.47521,18.197701],[108.655208,18.507682],[108.626217,19.367888],[109.119056,19.821039],[110.211599,20.101254],[110.786551,20.077534],[111.010051,19.69593],[110.570647,19.255879],[110.339188,18.678395]],\n      [[129.397818,49.4406],[130.582293,48.729687]],\n      [[130.582293,48.729687],[130.987282,47.790132],[132.506672,47.78897],[133.373596,48.183442]],\n      [[133.373596,48.183442],[135.026311,48.47823]],\n      [[135.026311,48.47823],[134.500814,47.57844],[134.112362,47.212467],[133.769644,46.116927]],\n      [[133.769644,46.116927],[133.097127,45.144066],[131.883454,45.321162]],\n      [[131.883454,45.321162],[131.025212,44.967953],[131.288555,44.11152]],\n      [[131.288555,44.11152],[131.144688,42.92999],[130.633866,42.903015]],\n      [[130.633866,42.903015],[130.640016,42.395009]],\n      [[130.640016,42.395009],[129.994267,42.985387],[129.596669,42.424982],[128.052215,41.994285],[128.208433,41.466772],[127.343783,41.503152],[126.869083,41.816569],[126.182045,41.107336],[125.079942,40.569824],[124.265625,39.928493]],\n      [[124.265625,39.928493],[122.86757,39.637788],[122.131388,39.170452],[121.054554,38.897471],[121.585995,39.360854],[121.376757,39.750261],[122.168595,40.422443],[121.640359,40.94639],[120.768629,40.593388],[119.639602,39.898056],[119.023464,39.252333],[118.042749,39.204274],[117.532702,38.737636],[118.059699,38.061476],[118.87815,37.897325],[118.911636,37.448464],[119.702802,37.156389],[120.823457,37.870428],[121.711259,37.481123],[122.357937,37.454484],[122.519995,36.930614],[121.104164,36.651329],[120.637009,36.11144],[119.664562,35.609791],[119.151208,34.909859],[120.227525,34.360332],[120.620369,33.376723],[121.229014,32.460319],[121.908146,31.692174],[121.891919,30.949352],[121.264257,30.676267],[121.503519,30.142915],[122.092114,29.83252],[121.938428,29.018022],[121.684439,28.225513],[121.125661,28.135673],[120.395473,27.053207],[119.585497,25.740781],[118.656871,24.547391],[117.281606,23.624501],[115.890735,22.782873],[114.763827,22.668074],[114.152547,22.22376],[113.80678,22.54834],[113.241078,22.051367],[111.843592,21.550494],[110.785466,21.397144],[110.444039,20.341033],[109.889861,20.282457],[109.627655,21.008227],[109.864488,21.395051],[108.522813,21.715212],[108.05018,21.55238]],\n      [[108.05018,21.55238],[107.04342,21.811899],[106.567273,22.218205],[106.725403,22.794268],[105.811247,22.976892],[105.329209,23.352063],[104.476858,22.81915],[103.504515,22.703757],[102.706992,22.708795],[102.170436,22.464753]],\n      [[102.170436,22.464753],[101.652018,22.318199],[101.80312,21.174367],[101.270026,21.201652],[101.180005,21.436573]],\n      [[101.180005,21.436573],[101.150033,21.849984],[100.416538,21.558839],[99.983489,21.742937],[99.240899,22.118314],[99.531992,22.949039],[98.898749,23.142722],[98.660262,24.063286],[97.60472,23.897405],[97.724609,25.083637],[98.671838,25.918703],[98.712094,26.743536],[98.68269,27.508812],[98.246231,27.747221],[97.911988,28.335945],[97.327114,28.261583]],\n      [[97.327114,28.261583],[96.248833,28.411031],[96.586591,28.83098],[96.117679,29.452802],[95.404802,29.031717],[94.56599,29.277438],[93.413348,28.640629],[92.503119,27.896876],[91.696657,27.771742]],\n      [[88.814248,27.299316],[88.730326,28.086865],[88.120441,27.876542]],\n      [[88.120441,27.876542],[86.954517,27.974262],[85.82332,28.203576],[85.011638,28.642774],[84.23458,28.839894],[83.898993,29.320226],[83.337115,29.463732],[82.327513,30.115268],[81.525804,30.422717],[81.111256,30.183481]],\n      [[81.111256,30.183481],[79.721367,30.882715],[78.738894,31.515906],[78.458446,32.618164],[79.176129,32.48378],[79.208892,32.994395],[78.811086,33.506198],[78.912269,34.321936],[77.837451,35.49401]],\n      [[77.837451,35.49401],[76.192848,35.898403],[75.896897,36.666806],[75.158028,37.133031]],\n      [[74.980002,37.41999],[74.829986,37.990007],[74.864816,38.378846],[74.257514,38.606507],[73.928852,38.505815],[73.675379,39.431237]],\n      [[73.675379,39.431237],[73.960013,39.660008],[73.822244,39.893973],[74.776862,40.366425],[75.467828,40.562072],[76.526368,40.427946],[76.904484,41.066486],[78.187197,41.185316],[78.543661,41.582243],[80.11943,42.123941],[80.25999,42.349999]],\n      [[80.25999,42.349999],[80.18015,42.920068],[80.866206,43.180362],[79.966106,44.917517],[81.947071,45.317027],[82.458926,45.53965],[83.180484,47.330031],[85.16429,47.000956],[85.720484,47.452969],[85.768233,48.455751],[86.598776,48.549182],[87.35997,49.214981]],\n      [[87.35997,49.214981],[87.751264,49.297198]],\n      [[87.751264,49.297198],[88.013832,48.599463],[88.854298,48.069082],[90.280826,47.693549],[90.970809,46.888146],[90.585768,45.719716],[90.94554,45.286073],[92.133891,45.115076],[93.480734,44.975472],[94.688929,44.352332],[95.306875,44.241331],[95.762455,43.319449],[96.349396,42.725635],[97.451757,42.74889],[99.515817,42.524691],[100.845866,42.663804],[101.83304,42.514873],[103.312278,41.907468],[104.522282,41.908347],[104.964994,41.59741],[106.129316,42.134328],[107.744773,42.481516],[109.243596,42.519446],[110.412103,42.871234],[111.129682,43.406834],[111.829588,43.743118],[111.667737,44.073176],[111.348377,44.457442],[111.873306,45.102079],[112.436062,45.011646],[113.463907,44.808893],[114.460332,45.339817],[115.985096,45.727235],[116.717868,46.388202],[117.421701,46.672733],[118.874326,46.805412],[119.66327,46.69268],[119.772824,47.048059],[118.866574,47.74706],[118.064143,48.06673],[117.295507,47.697709],[116.308953,47.85341],[115.742837,47.726545],[115.485282,48.135383],[116.191802,49.134598],[116.678801,49.888531]],\n      [[116.678801,49.888531],[117.879244,49.510983],[119.288461,50.142883]],\n      [[119.288461,50.142883],[119.279366,50.582908],[120.18205,51.643566],[120.738191,51.964115],[120.725789,52.516226]],\n      [[120.725789,52.516226],[120.177089,52.753886],[121.003085,53.251401],[122.245748,53.431726]],\n      [[122.245748,53.431726],[123.571507,53.458804],[125.068211,53.161045]],\n      [[125.068211,53.161045],[125.946349,52.792799],[126.564399,51.784255],[126.939157,51.353894],[127.287456,50.739797]],\n      [[127.287456,50.739797],[127.657407,49.76027],[129.397818,49.4406]],\n      [[-2.856125,4.994476],[-3.311084,4.984296],[-4.00882,5.179813],[-4.649917,5.168264],[-5.834496,4.993701],[-6.528769,4.705088],[-7.518941,4.338288],[-7.712159,4.364566]],\n      [[-7.712159,4.364566],[-7.635368,5.188159],[-7.539715,5.313345],[-7.570153,5.707352],[-7.993693,6.12619],[-8.311348,6.193033],[-8.60288,6.467564],[-8.385452,6.911801],[-8.485446,7.395208],[-8.439298,7.686043]],\n      [[-8.439298,7.686043],[-8.280703,7.68718],[-8.221792,8.123329],[-8.299049,8.316444],[-8.203499,8.455453],[-7.8321,8.575704],[-8.079114,9.376224],[-8.309616,9.789532],[-8.229337,10.12902],[-8.029944,10.206535]],\n      [[-8.029944,10.206535],[-7.89959,10.297382],[-7.622759,10.147236],[-6.850507,10.138994],[-6.666461,10.430811],[-6.493965,10.411303],[-6.205223,10.524061],[-6.050452,10.096361],[-5.816926,10.222555],[-5.404342,10.370737]],\n      [[-2.827496,9.642461],[-2.56219,8.219628],[-2.983585,7.379705],[-3.24437,6.250472],[-2.810701,5.389051],[-2.856125,4.994476]],\n      [[13.075822,2.267097],[12.951334,2.321616],[12.35938,2.192812],[11.751665,2.326758],[11.276449,2.261051]],\n      [[11.276449,2.261051],[9.649158,2.283866]],\n      [[9.649158,2.283866],[9.795196,3.073404],[9.404367,3.734527],[8.948116,3.904129],[8.744924,4.352215],[8.488816,4.495617],[8.500288,4.771983]],\n      [[8.500288,4.771983],[8.757533,5.479666],[9.233163,6.444491],[9.522706,6.453482],[10.118277,7.03877],[10.497375,7.055358],[11.058788,6.644427],[11.745774,6.981383],[11.839309,7.397042],[12.063946,7.799808],[12.218872,8.305824],[12.753672,8.717763],[12.955468,9.417772],[13.1676,9.640626],[13.308676,10.160362],[13.57295,10.798566],[14.415379,11.572369],[14.468192,11.904752],[14.577178,12.085361],[14.181336,12.483657]],\n      [[14.181336,12.483657],[14.213531,12.802035],[14.495787,12.859396]],\n      [[14.495787,12.859396],[14.893386,12.219048],[14.960152,11.555574]],\n      [[14.960152,11.555574],[14.923565,10.891325],[15.467873,9.982337],[14.909354,9.992129],[14.627201,9.920919],[14.171466,10.021378],[13.954218,9.549495],[14.544467,8.965861],[14.979996,8.796104],[15.120866,8.38215],[15.436092,7.692812],[15.27946,7.421925]],\n      [[16.012852,2.26764],[15.940919,1.727673],[15.146342,1.964015],[14.337813,2.227875],[13.075822,2.267097]],\n      [[31.174149,2.204465],[30.85267,1.849396],[30.468508,1.583805],[30.086154,1.062313],[29.875779,0.59738]],\n      [[29.875779,0.59738],[29.819503,-0.20531],[29.587838,-0.587406]],\n      [[29.587838,-0.587406],[29.579466,-1.341313]],\n      [[29.579466,-1.341313],[29.291887,-1.620056],[29.254835,-2.21511],[29.117479,-2.292211],[29.024926,-2.839258]],\n      [[29.339998,-4.499983],[29.519987,-5.419979],[29.419993,-5.939999]],\n      [[29.419993,-5.939999],[29.620032,-6.520015],[30.199997,-7.079981],[30.740015,-8.340007]],\n      [[30.740015,-8.340007],[30.346086,-8.238257],[29.002912,-8.407032],[28.734867,-8.526559],[28.449871,-9.164918],[28.673682,-9.605925],[28.49607,-10.789884],[28.372253,-11.793647],[28.642417,-11.971569],[29.341548,-12.360744],[29.616001,-12.178895],[29.699614,-13.257227],[28.934286,-13.248958],[28.523562,-12.698604],[28.155109,-12.272481],[27.388799,-12.132747],[27.16442,-11.608748],[26.553088,-11.92444],[25.75231,-11.784965],[25.418118,-11.330936],[24.78317,-11.238694],[24.314516,-11.262826],[24.257155,-10.951993],[23.912215,-10.926826]],\n      [[12.322432,-6.100092],[12.182337,-5.789931]],\n      [[12.995517,-4.781103],[13.25824,-4.882957],[13.600235,-4.500138],[14.144956,-4.510009],[14.209035,-4.793092],[14.582604,-4.970239],[15.170992,-4.343507],[15.75354,-3.855165],[16.00629,-3.535133],[15.972803,-2.712392],[16.407092,-1.740927],[16.865307,-1.225816],[17.523716,-0.74383],[17.638645,-0.424832],[17.663553,-0.058084],[17.82654,0.288923],[17.774192,0.855659],[17.898835,1.741832],[18.094276,2.365722],[18.393792,2.900443],[18.453065,3.504386]],\n      [[27.374226,5.233944],[27.979977,4.408413],[28.428994,4.287155],[28.696678,4.455077],[29.159078,4.389267],[29.715995,4.600805]],\n      [[29.715995,4.600805],[29.9535,4.173699],[30.83386,3.509166],[30.773347,2.339883],[31.174149,2.204465]],\n      [[11.914963,-5.037987],[11.093773,-3.978827]],\n      [[11.093773,-3.978827],[11.855122,-3.426871],[11.478039,-2.765619],[11.820964,-2.514161],[12.495703,-2.391688],[12.575284,-1.948511],[13.109619,-2.42874],[13.992407,-2.470805],[14.29921,-1.998276],[14.425456,-1.333407],[14.316418,-0.552627],[13.843321,0.038758],[14.276266,1.19693],[14.026669,1.395677],[13.282631,1.314184],[13.003114,1.830896],[13.075822,2.267097]],\n      [[-75.373223,-0.152032],[-75.801466,0.084801],[-76.292314,0.416047],[-76.57638,0.256936],[-77.424984,0.395687],[-77.668613,0.825893],[-77.855061,0.809925],[-78.855259,1.380924]],\n      [[-78.855259,1.380924],[-78.990935,1.69137],[-78.617831,1.766404],[-78.662118,2.267355],[-78.42761,2.629556],[-77.931543,2.696606],[-77.510431,3.325017],[-77.12769,3.849636],[-77.496272,4.087606],[-77.307601,4.667984],[-77.533221,5.582812],[-77.318815,5.845354],[-77.476661,6.691116],[-77.881571,7.223771]],\n      [[-77.881571,7.223771],[-77.753414,7.70984],[-77.431108,7.638061],[-77.242566,7.935278],[-77.474723,8.524286],[-77.353361,8.670505]],\n      [[-77.353361,8.670505],[-76.836674,8.638749],[-76.086384,9.336821],[-75.6746,9.443248],[-75.664704,9.774003],[-75.480426,10.61899],[-74.906895,11.083045],[-74.276753,11.102036],[-74.197223,11.310473],[-73.414764,11.227015],[-72.627835,11.731972],[-72.238195,11.95555],[-71.75409,12.437303],[-71.399822,12.376041],[-71.137461,12.112982],[-71.331584,11.776284]],\n      [[-71.331584,11.776284],[-71.973922,11.608672],[-72.227575,11.108702],[-72.614658,10.821975],[-72.905286,10.450344],[-73.027604,9.73677],[-73.304952,9.152],[-72.78873,9.085027],[-72.660495,8.625288],[-72.439862,8.405275],[-72.360901,8.002638],[-72.479679,7.632506],[-72.444487,7.423785],[-72.198352,7.340431],[-71.960176,6.991615],[-70.674234,7.087785],[-70.093313,6.960376],[-69.38948,6.099861],[-68.985319,6.206805],[-68.265052,6.153268],[-67.695087,6.267318],[-67.34144,6.095468],[-67.521532,5.55687],[-67.744697,5.221129],[-67.823012,4.503937],[-67.621836,3.839482],[-67.337564,3.542342],[-67.303173,3.318454],[-67.809938,2.820655],[-67.447092,2.600281],[-67.181294,2.250638],[-66.876326,1.253361]],\n      [[-69.893635,-4.298187],[-70.394044,-3.766591],[-70.692682,-3.742872],[-70.047709,-2.725156],[-70.813476,-2.256865],[-71.413646,-2.342802],[-71.774761,-2.16979],[-72.325787,-2.434218],[-73.070392,-2.308954],[-73.659504,-1.260491],[-74.122395,-1.002833],[-74.441601,-0.53082],[-75.106625,-0.057205],[-75.373223,-0.152032]],\n      [[-82.965783,8.225028],[-83.508437,8.446927],[-83.711474,8.656836],[-83.596313,8.830443],[-83.632642,9.051386],[-83.909886,9.290803],[-84.303402,9.487354],[-84.647644,9.615537],[-84.713351,9.908052],[-84.97566,10.086723],[-84.911375,9.795992],[-85.110923,9.55704],[-85.339488,9.834542],[-85.660787,9.933347],[-85.797445,10.134886],[-85.791709,10.439337],[-85.659314,10.754331],[-85.941725,10.895278],[-85.71254,11.088445]],\n      [[-85.71254,11.088445],[-85.561852,11.217119],[-84.903003,10.952303],[-84.673069,11.082657],[-84.355931,10.999226],[-84.190179,10.79345],[-83.895054,10.726839],[-83.655612,10.938764]],\n      [[-83.655612,10.938764],[-83.40232,10.395438],[-83.015677,9.992982],[-82.546196,9.566135]],\n      [[-82.546196,9.566135],[-82.932891,9.476812],[-82.927155,9.07433],[-82.719183,8.925709],[-82.868657,8.807266],[-82.829771,8.626295],[-82.913176,8.423517],[-82.965783,8.225028]],\n      [[-82.268151,23.188611],[-81.404457,23.117271],[-80.618769,23.10598],[-79.679524,22.765303],[-79.281486,22.399202],[-78.347434,22.512166],[-77.993296,22.277194],[-77.146422,21.657851],[-76.523825,21.20682],[-76.19462,21.220565],[-75.598222,21.016624],[-75.67106,20.735091],[-74.933896,20.693905],[-74.178025,20.284628],[-74.296648,20.050379],[-74.961595,19.923435],[-75.63468,19.873774],[-76.323656,19.952891],[-77.755481,19.855481],[-77.085108,20.413354],[-77.492655,20.673105],[-78.137292,20.739949],[-78.482827,21.028613],[-78.719867,21.598114],[-79.285,21.559175],[-80.217475,21.827324],[-80.517535,22.037079],[-81.820943,22.192057],[-82.169992,22.387109],[-81.795002,22.636965],[-82.775898,22.68815],[-83.494459,22.168518],[-83.9088,22.154565],[-84.052151,21.910575],[-84.54703,21.801228],[-84.974911,21.896028],[-84.447062,22.20495],[-84.230357,22.565755],[-83.77824,22.788118],[-83.267548,22.983042],[-82.510436,23.078747],[-82.268151,23.188611]],\n      [[32.73178,35.140026],[32.802474,35.145504],[32.946961,35.386703],[33.667227,35.373216],[34.576474,35.671596],[33.900804,35.245756],[33.973617,35.058506],[34.004881,34.978098],[32.979827,34.571869],[32.490296,34.701655],[32.256667,35.103232],[32.73178,35.140026]],\n      [[13.595946,48.877172],[13.031329,49.307068],[12.521024,49.547415],[12.415191,49.969121],[12.240111,50.266338],[12.966837,50.484076],[13.338132,50.733234],[14.056228,50.926918],[14.307013,51.117268],[14.570718,51.002339],[15.016996,51.106674]],\n      [[15.016996,51.106674],[15.490972,50.78473],[16.238627,50.697733],[16.176253,50.422607],[16.719476,50.215747],[16.868769,50.473974],[17.554567,50.362146],[17.649445,50.049038],[18.392914,49.988629],[18.853144,49.49623]],\n      [[18.853144,49.49623],[18.554971,49.495015],[18.399994,49.315001],[18.170498,49.271515],[18.104973,49.043983],[17.913512,48.996493],[17.886485,48.903475],[17.545007,48.800019],[17.101985,48.816969],[16.960288,48.596982]],\n      [[9.921906,54.983104],[9.93958,54.596642],[10.950112,54.363607],[10.939467,54.008693],[11.956252,54.196486],[12.51844,54.470371],[13.647467,54.075511],[14.119686,53.757029]],\n      [[14.119686,53.757029],[14.353315,53.248171],[14.074521,52.981263],[14.4376,52.62485],[14.685026,52.089947],[14.607098,51.745188],[15.016996,51.106674]],\n      [[7.466759,47.620582],[7.593676,48.333019],[8.099279,49.017784],[6.65823,49.201958],[6.18632,49.463803]],\n      [[6.18632,49.463803],[6.242751,49.902226],[6.043073,50.128052]],\n      [[6.156658,50.803721],[5.988658,51.851616],[6.589397,51.852029],[6.84287,52.22844],[7.092053,53.144043],[6.90514,53.482162]],\n      [[6.90514,53.482162],[7.100425,53.693932],[7.936239,53.748296],[8.121706,53.527792],[8.800734,54.020786],[8.572118,54.395646],[8.526229,54.962744]],\n      [[8.526229,54.962744],[9.282049,54.830865],[9.921906,54.983104]],\n      [[43.081226,12.699639],[43.317852,12.390148],[43.286381,11.974928],[42.715874,11.735641],[43.145305,11.46204]],\n      [[43.145305,11.46204],[42.776852,10.926879]],\n      [[42.776852,10.926879],[42.55493,11.10511],[42.31414,11.0342],[41.75557,11.05091],[41.73959,11.35511],[41.66176,11.6312],[42,12.1],[42.35156,12.54223]],\n      [[42.35156,12.54223],[42.779642,12.455416],[43.081226,12.699639]],\n      [[12.690006,55.609991],[12.089991,54.800015],[11.043543,55.364864],[10.903914,55.779955],[12.370904,56.111407],[12.690006,55.609991]],\n      [[8.526229,54.962744],[8.120311,55.517723],[8.089977,56.540012],[8.256582,56.809969],[8.543438,57.110003],[9.424469,57.172066],[9.775559,57.447941],[10.580006,57.730017],[10.546106,57.215733],[10.25,56.890016],[10.369993,56.609982],[10.912182,56.458621],[10.667804,56.081383],[10.369993,56.190007],[9.649985,55.469999],[9.921906,54.983104]],\n      [[-71.712361,19.714456],[-71.587304,19.884911],[-70.806706,19.880286],[-70.214365,19.622885],[-69.950815,19.648],[-69.76925,19.293267],[-69.222126,19.313214],[-69.254346,19.015196],[-68.809412,18.979074],[-68.317943,18.612198],[-68.689316,18.205142],[-69.164946,18.422648],[-69.623988,18.380713],[-69.952934,18.428307],[-70.133233,18.245915],[-70.517137,18.184291],[-70.669298,18.426886],[-70.99995,18.283329],[-71.40021,17.598564],[-71.657662,17.757573],[-71.708305,18.044997]],\n      [[-71.708305,18.044997],[-71.687738,18.31666],[-71.945112,18.6169],[-71.701303,18.785417],[-71.624873,19.169838],[-71.712361,19.714456]],\n      [[11.999506,23.471668],[8.572893,21.565661],[5.677566,19.601207],[4.267419,19.155265]],\n      [[4.267419,19.155265],[3.158133,19.057364],[3.146661,19.693579],[2.683588,19.85623],[2.060991,20.142233],[1.823228,20.610809],[-1.550055,22.792666],[-4.923337,24.974574]],\n      [[-4.923337,24.974574],[-8.6844,27.395744]],\n      [[-8.6844,27.395744],[-8.665124,27.589479],[-8.66559,27.6]],\n      [[-8.66559,27.6],[-8.674116,28.841289],[-7.059228,29.579228],[-6.060632,29.7317],[-5.242129,30.000443],[-4.859646,30.501188],[-3.690441,30.896952],[-3.647498,31.637294],[-3.06898,31.724498],[-2.616605,32.094346],[-1.307899,32.262889],[-1.124551,32.651522],[-1.388049,32.864015],[-1.733455,33.919713],[-1.792986,34.527919],[-2.169914,35.168396]],\n      [[-2.169914,35.168396],[-1.208603,35.714849],[-0.127454,35.888662],[0.503877,36.301273],[1.466919,36.605647],[3.161699,36.783905],[4.815758,36.865037],[5.32012,36.716519],[6.26182,37.110655],[7.330385,37.118381],[7.737078,36.885708],[8.420964,36.946427]],\n      [[8.420964,36.946427],[8.217824,36.433177],[8.376368,35.479876],[8.140981,34.655146],[7.524482,34.097376],[7.612642,33.344115],[8.430473,32.748337],[8.439103,32.506285],[9.055603,32.102692],[9.48214,30.307556]],\n      [[9.48214,30.307556],[9.805634,29.424638],[9.859998,28.95999],[9.683885,28.144174],[9.756128,27.688259],[9.629056,27.140953],[9.716286,26.512206],[9.319411,26.094325],[9.910693,25.365455],[9.948261,24.936954],[10.303847,24.379313],[10.771364,24.562532],[11.560669,24.097909],[11.999506,23.471668]],\n      [[-80.302561,-3.404856],[-79.770293,-2.657512],[-79.986559,-2.220794],[-80.368784,-2.685159],[-80.967765,-2.246943],[-80.764806,-1.965048],[-80.933659,-1.057455],[-80.58337,-0.906663],[-80.399325,-0.283703],[-80.020898,0.36034],[-80.09061,0.768429],[-79.542762,0.982938],[-78.855259,1.380924]],\n      [[-75.373223,-0.152032],[-75.233723,-0.911417],[-75.544996,-1.56161],[-76.635394,-2.608678],[-77.837905,-3.003021],[-78.450684,-3.873097],[-78.639897,-4.547784],[-79.205289,-4.959129],[-79.624979,-4.454198],[-80.028908,-4.346091],[-80.442242,-4.425724],[-80.469295,-4.059287],[-80.184015,-3.821162],[-80.302561,-3.404856]],\n      [[36.86623,22],[32.9,22],[29.02,22],[25,22]],\n      [[25,22],[25,25.6825],[25,29.238655],[24.70007,30.04419],[24.95762,30.6616],[24.80287,31.08929],[25.16482,31.56915]],\n      [[25.16482,31.56915],[26.49533,31.58568],[27.45762,31.32126],[28.45048,31.02577],[28.91353,30.87005],[29.68342,31.18686],[30.09503,31.4734],[30.97693,31.55586],[31.68796,31.4296],[31.96041,30.9336],[32.19247,31.26034],[32.99392,31.02407],[33.7734,30.96746],[34.26544,31.21936],[34.9226,29.50133],[34.64174,29.09942],[34.42655,28.34399],[34.15451,27.8233],[33.92136,27.6487],[33.58811,27.97136],[33.13676,28.41765],[32.42323,29.85108],[32.32046,29.76043],[32.73482,28.70523],[33.34876,27.69989],[34.10455,26.14227],[34.47387,25.59856],[34.79507,25.03375],[35.69241,23.92671],[35.49372,23.75237],[35.52598,23.10244],[36.69069,22.20485],[36.86623,22]],\n      [[42.35156,12.54223],[42.00975,12.86582],[41.59856,13.45209]],\n      [[41.59856,13.45209],[41.155194,13.77332],[40.8966,14.11864]],\n      [[40.8966,14.11864],[40.026219,14.519579],[39.34061,14.53155]],\n      [[39.34061,14.53155],[39.0994,14.74064],[38.51295,14.50547],[37.90607,14.95943],[37.59377,14.2131],[36.42951,14.42211]],\n      [[36.42951,14.42211],[36.323189,14.822481],[36.75386,16.291874],[36.85253,16.95655]],\n      [[36.85253,16.95655],[37.16747,17.26314],[37.904,17.42754],[38.41009,17.998307]],\n      [[38.41009,17.998307],[38.990623,16.840626],[39.26611,15.922723],[39.814294,15.435647],[41.179275,14.49108],[41.734952,13.921037],[42.276831,13.343992],[42.589576,13.000421],[43.081226,12.699639]],\n      [[-9.034818,41.880571],[-8.984433,42.592775],[-9.392884,43.026625],[-7.97819,43.748338],[-6.754492,43.567909],[-5.411886,43.57424],[-4.347843,43.403449],[-3.517532,43.455901],[-1.901351,43.422802]],\n      [[-1.901351,43.422802],[-1.502771,43.034014],[0.338047,42.579546],[0.701591,42.795734],[1.826793,42.343385],[2.985999,42.473015]],\n      [[2.985999,42.473015],[3.039484,41.89212],[2.091842,41.226089],[0.810525,41.014732],[0.721331,40.678318],[0.106692,40.123934],[-0.278711,39.309978],[0.111291,38.738514],[-0.467124,38.292366],[-0.683389,37.642354],[-1.438382,37.443064],[-2.146453,36.674144],[-3.415781,36.6589],[-4.368901,36.677839],[-4.995219,36.324708],[-5.37716,35.94685],[-5.866432,36.029817],[-6.236694,36.367677],[-6.520191,36.942913],[-7.453726,37.097788]],\n      [[-7.453726,37.097788],[-7.537105,37.428904],[-7.166508,37.803894],[-7.029281,38.075764],[-7.374092,38.373059],[-7.098037,39.030073],[-7.498632,39.629571],[-7.066592,39.711892],[-7.026413,40.184524],[-6.86402,40.330872],[-6.851127,41.111083],[-6.389088,41.381815],[-6.668606,41.883387],[-7.251309,41.918346],[-7.422513,41.792075],[-8.013175,41.790886],[-8.263857,42.280469],[-8.671946,42.134689],[-9.034818,41.880571]],\n      [[24.312863,57.793424],[24.428928,58.383413],[24.061198,58.257375],[23.42656,58.612753],[23.339795,59.18724],[24.604214,59.465854],[25.864189,59.61109],[26.949136,59.445803],[27.981114,59.475388],[28.131699,59.300825]],\n      [[28.131699,59.300825],[27.420166,58.724581],[27.716686,57.791899]],\n      [[27.716686,57.791899],[27.288185,57.474528]],\n      [[27.288185,57.474528],[26.463532,57.476389],[25.60281,57.847529],[25.164594,57.970157],[24.312863,57.793424]],\n      [[39.34061,14.53155],[40.02625,14.51959],[40.8966,14.11864]],\n      [[40.8966,14.11864],[41.1552,13.77333],[41.59856,13.45209]],\n      [[42.776852,10.926879],[42.55876,10.57258],[42.92812,10.02194]],\n      [[42.92812,10.02194],[43.29699,9.54048],[43.67875,9.18358]],\n      [[43.67875,9.18358],[46.94834,7.99688],[47.78942,8.003]],\n      [[47.78942,8.003],[44.9636,5.00162],[43.66087,4.95755],[42.76967,4.25259],[42.12861,4.23413],[41.855083,3.918912]],\n      [[41.855083,3.918912],[41.1718,3.91909],[40.76848,4.25702],[39.85494,3.83879],[39.559384,3.42206],[38.89251,3.50074],[38.67114,3.61607],[38.43697,3.58851],[38.120915,3.598605],[36.855093,4.447864],[36.159079,4.447864],[35.817448,4.776966],[35.817448,5.338232],[35.298007,5.506]],\n      [[35.298007,5.506],[34.70702,6.59422],[34.25032,6.82607],[34.0751,7.22595],[33.56829,7.71334],[32.95418,7.78497],[33.2948,8.35458],[33.8255,8.37916],[33.97498,8.68456]],\n      [[33.97498,8.68456],[33.96162,9.58358]],\n      [[33.96162,9.58358],[34.25745,10.63009],[34.73115,10.91017],[34.83163,11.31896],[35.26049,12.08286],[35.86363,12.57828],[36.27022,13.56333],[36.42951,14.42211]],\n      [[28.59193,69.064777],[28.445944,68.364613],[29.977426,67.698297],[29.054589,66.944286],[30.21765,65.80598],[29.54443,64.948672],[30.444685,64.204453],[30.035872,63.552814],[31.516092,62.867687],[31.139991,62.357693],[30.211107,61.780028]],\n      [[30.211107,61.780028],[28.069998,60.503517],[26.255173,60.423961],[24.496624,60.057316],[22.869695,59.846373],[22.290764,60.391921],[21.322244,60.72017],[21.544866,61.705329],[21.059211,62.607393],[21.536029,63.189735],[22.442744,63.81781],[24.730512,64.902344],[25.398068,65.111427],[25.294043,65.534346],[23.903379,66.006927]],\n      [[23.903379,66.006927],[23.56588,66.396051],[23.539473,67.936009],[21.978535,68.616846],[20.645593,69.106247]],\n      [[20.645593,69.106247],[21.244936,69.370443],[22.356238,68.841741],[23.66205,68.891247],[24.735679,68.649557],[25.689213,69.092114],[26.179622,69.825299],[27.732292,70.164193],[29.015573,69.766491],[28.59193,69.064777]],\n      [[178.3736,-17.33992],[178.71806,-17.62846],[178.55271,-18.15059],[177.93266,-18.28799],[177.38146,-18.16432],[177.28504,-17.72465],[177.67087,-17.38114],[178.12557,-17.50481],[178.3736,-17.33992]],\n      [[179.364143,-16.801354],[178.725059,-17.012042],[178.596839,-16.63915],[179.096609,-16.433984],[179.413509,-16.379054],[180,-16.067133],[180,-16.555217],[179.364143,-16.801354]],\n      [[-179.917369,-16.501783],[-180,-16.555217],[-180,-16.067133],[-179.79332,-16.020882],[-179.917369,-16.501783]],\n      [[9.560016,42.152492],[9.229752,41.380007],[8.775723,41.583612],[8.544213,42.256517],[8.746009,42.628122],[9.390001,43.009985],[9.560016,42.152492]],\n      [[5.674052,49.529484],[5.897759,49.442667],[6.18632,49.463803]],\n      [[6.843593,45.991147],[6.802355,45.70858],[7.096652,45.333099],[6.749955,45.028518],[7.007562,44.254767],[7.549596,44.127901],[7.435185,43.693845]],\n      [[7.435185,43.693845],[6.529245,43.128892],[4.556963,43.399651],[3.100411,43.075201],[2.985999,42.473015]],\n      [[-1.901351,43.422802],[-1.384225,44.02261],[-1.193798,46.014918],[-2.225724,47.064363],[-2.963276,47.570327],[-4.491555,47.954954],[-4.59235,48.68416],[-3.295814,48.901692],[-1.616511,48.644421],[-1.933494,49.776342],[-0.989469,49.347376],[1.338761,50.127173],[1.639001,50.946606],[2.513573,51.148506]],\n      [[-54.524754,2.311849],[-54.27123,2.738748],[-54.184284,3.194172],[-54.011504,3.62257],[-54.399542,4.212611]],\n      [[-54.399542,4.212611],[-54.478633,4.896756],[-53.958045,5.756548]],\n      [[-53.958045,5.756548],[-53.618453,5.646529],[-52.882141,5.409851],[-51.823343,4.565768],[-51.657797,4.156232]],\n      [[11.093773,-3.978827],[10.066135,-2.969483],[9.405245,-2.144313],[8.797996,-1.111301],[8.830087,-0.779074],[9.04842,-0.459351],[9.291351,0.268666],[9.492889,1.01012]],\n      [[9.492889,1.01012],[9.830284,1.067894],[11.285079,1.057662],[11.276449,2.261051]],\n      [[-6.197885,53.867565],[-6.95373,54.073702],[-7.572168,54.059956],[-7.366031,54.595841],[-7.572168,55.131622]],\n      [[-7.572168,55.131622],[-6.733847,55.17286],[-5.661949,54.554603],[-6.197885,53.867565]],\n      [[-3.005005,58.635],[-4.073828,57.553025],[-3.055002,57.690019],[-1.959281,57.6848],[-2.219988,56.870017],[-3.119003,55.973793],[-2.085009,55.909998],[-2.005676,55.804903],[-1.114991,54.624986],[-0.430485,54.464376],[0.184981,53.325014],[0.469977,52.929999],[1.681531,52.73952],[1.559988,52.099998],[1.050562,51.806761],[1.449865,51.289428],[0.550334,50.765739],[-0.787517,50.774989],[-2.489998,50.500019],[-2.956274,50.69688],[-3.617448,50.228356],[-4.542508,50.341837],[-5.245023,49.96],[-5.776567,50.159678],[-4.30999,51.210001],[-3.414851,51.426009],[-3.422719,51.426848],[-4.984367,51.593466],[-5.267296,51.9914],[-4.222347,52.301356],[-4.770013,52.840005],[-4.579999,53.495004],[-3.093831,53.404547],[-3.09208,53.404441],[-2.945009,53.985],[-3.614701,54.600937],[-3.630005,54.615013],[-4.844169,54.790971],[-5.082527,55.061601],[-4.719112,55.508473],[-5.047981,55.783986],[-5.586398,55.311146],[-5.644999,56.275015],[-6.149981,56.78501],[-5.786825,57.818848],[-5.009999,58.630013],[-4.211495,58.550845],[-3.005005,58.635]],\n      [[41.554084,41.535656],[41.703171,41.962943],[41.45347,42.645123],[40.875469,43.013628],[40.321394,43.128634],[39.955009,43.434998]],\n      [[39.955009,43.434998],[40.076965,43.553104]],\n      [[40.076965,43.553104],[40.922185,43.382159],[42.394395,43.220308],[43.756017,42.740828],[43.9312,42.554974],[44.537623,42.711993]],\n      [[44.537623,42.711993],[45.470279,42.502781]],\n      [[45.470279,42.502781],[45.77641,42.092444],[46.404951,41.860675]],\n      [[43.582746,41.092143],[42.619549,41.583173],[41.554084,41.535656]],\n      [[1.060122,5.928837],[-0.507638,5.343473],[-1.063625,5.000548],[-1.964707,4.710462],[-2.856125,4.994476]],\n      [[0.023803,11.018682],[-0.049785,10.706918],[0.36758,10.191213],[0.365901,9.465004],[0.461192,8.677223],[0.712029,8.312465],[0.490957,7.411744],[0.570384,6.914359],[0.836931,6.279979],[1.060122,5.928837]],\n      [[-8.439298,7.686043],[-8.722124,7.711674],[-8.926065,7.309037],[-9.208786,7.313921],[-9.403348,7.526905],[-9.33728,7.928534],[-9.755342,8.541055],[-10.016567,8.428504],[-10.230094,8.406206]],\n      [[-10.230094,8.406206],[-10.505477,8.348896],[-10.494315,8.715541],[-10.65477,8.977178],[-10.622395,9.26791],[-10.839152,9.688246],[-11.117481,10.045873],[-11.917277,10.046984],[-12.150338,9.858572],[-12.425929,9.835834],[-12.596719,9.620188],[-12.711958,9.342712],[-13.24655,8.903049]],\n      [[-13.24655,8.903049],[-13.685154,9.494744],[-14.074045,9.886167],[-14.330076,10.01572],[-14.579699,10.214467],[-14.693232,10.656301],[-14.839554,10.876572],[-15.130311,11.040412]],\n      [[-15.130311,11.040412],[-14.685687,11.527824],[-14.382192,11.509272],[-14.121406,11.677117],[-13.9008,11.678719],[-13.743161,11.811269],[-13.828272,12.142644],[-13.718744,12.247186],[-13.700476,12.586183]],\n      [[-13.700476,12.586183],[-13.217818,12.575874],[-12.499051,12.33209],[-12.278599,12.35444],[-12.203565,12.465648],[-11.658301,12.386583],[-11.513943,12.442988]],\n      [[-11.513943,12.442988],[-11.456169,12.076834],[-11.297574,12.077971],[-11.036556,12.211245],[-10.87083,12.177887],[-10.593224,11.923975],[-10.165214,11.844084],[-9.890993,12.060479],[-9.567912,12.194243],[-9.327616,12.334286],[-9.127474,12.30806],[-8.905265,12.088358],[-8.786099,11.812561],[-8.376305,11.393646],[-8.581305,11.136246],[-8.620321,10.810891],[-8.407311,10.909257],[-8.282357,10.792597],[-8.335377,10.494812],[-8.029944,10.206535]],\n      [[-16.841525,13.151394],[-16.713729,13.594959]],\n      [[-16.713729,13.594959],[-15.624596,13.623587],[-15.39877,13.860369],[-15.081735,13.876492],[-14.687031,13.630357],[-14.376714,13.62568],[-14.046992,13.794068],[-13.844963,13.505042],[-14.277702,13.280585],[-14.712197,13.298207],[-15.141163,13.509512],[-15.511813,13.27857],[-15.691001,13.270353],[-15.931296,13.130284],[-16.841525,13.151394]],\n      [[-15.130311,11.040412],[-15.66418,11.458474],[-16.085214,11.524594],[-16.314787,11.806515],[-16.308947,11.958702],[-16.613838,12.170911],[-16.677452,12.384852]],\n      [[-16.677452,12.384852],[-16.147717,12.547762],[-15.816574,12.515567],[-15.548477,12.62817],[-13.700476,12.586183]],\n      [[9.492889,1.01012],[9.305613,1.160911],[9.649158,2.283866]],\n      [[23.69998,35.705004],[24.246665,35.368022],[25.025015,35.424996],[25.769208,35.354018],[25.745023,35.179998],[26.290003,35.29999],[26.164998,35.004995],[24.724982,34.919988],[24.735007,35.084991],[23.514978,35.279992],[23.69998,35.705004]],\n      [[26.056942,40.824123],[25.447677,40.852545],[24.925848,40.947062],[23.714811,40.687129],[24.407999,40.124993],[23.899968,39.962006],[23.342999,39.960998],[22.813988,40.476005],[22.626299,40.256561],[22.849748,39.659311],[23.350027,39.190011],[22.973099,38.970903],[23.530016,38.510001],[24.025025,38.219993],[24.040011,37.655015],[23.115003,37.920011],[23.409972,37.409991],[22.774972,37.30501],[23.154225,36.422506],[22.490028,36.41],[21.670026,36.844986],[21.295011,37.644989],[21.120034,38.310323],[20.730032,38.769985],[20.217712,39.340235],[20.150016,39.624998]],\n      [[21.02004,40.842727],[21.674161,40.931275],[22.055378,41.149866],[22.597308,41.130487],[22.76177,41.3048],[22.952377,41.337994]],\n      [[26.117042,41.826905],[26.604196,41.562115],[26.294602,40.936261],[26.056942,40.824123]],\n      [[-90.095555,13.735338],[-90.608624,13.909771],[-91.23241,13.927832],[-91.689747,14.126218],[-92.22775,14.538829]],\n      [[-92.22775,14.538829],[-92.20323,14.830103],[-92.087216,15.064585],[-92.229249,15.251447],[-91.74796,16.066565],[-90.464473,16.069562],[-90.438867,16.41011],[-90.600847,16.470778],[-90.711822,16.687483],[-91.08167,16.918477],[-91.453921,17.252177],[-91.002269,17.254658],[-91.00152,17.817595],[-90.067934,17.819326],[-89.14308,17.808319]],\n      [[-88.930613,15.887273],[-88.604586,15.70638],[-88.518364,15.855389],[-88.225023,15.727722]],\n      [[-88.225023,15.727722],[-88.68068,15.346247],[-89.154811,15.066419],[-89.22522,14.874286],[-89.145535,14.678019],[-89.353326,14.424133]],\n      [[-89.353326,14.424133],[-89.587343,14.362586],[-89.534219,14.244816],[-89.721934,14.134228],[-90.064678,13.88197],[-90.095555,13.735338]],\n      [[-59.758285,8.367035],[-59.101684,7.999202],[-58.482962,7.347691],[-58.454876,6.832787],[-58.078103,6.809094],[-57.542219,6.321268],[-57.147436,5.97315]],\n      [[-57.147436,5.97315],[-57.307246,5.073567],[-57.914289,4.812626],[-57.86021,4.576801],[-58.044694,4.060864],[-57.601569,3.334655],[-57.281433,3.333492],[-57.150098,2.768927],[-56.539386,1.899523]],\n      [[-60.733574,5.200277],[-61.410303,5.959068],[-61.139415,6.234297],[-61.159336,6.696077],[-60.543999,6.856584],[-60.295668,7.043911],[-60.637973,7.415],[-60.550588,7.779603],[-59.758285,8.367035]],\n      [[-87.316654,12.984686],[-87.489409,13.297535],[-87.793111,13.38448]],\n      [[-87.793111,13.38448],[-87.723503,13.78505],[-87.859515,13.893312],[-88.065343,13.964626],[-88.503998,13.845486],[-88.541231,13.980155],[-88.843073,14.140507],[-89.058512,14.340029],[-89.353326,14.424133]],\n      [[-88.225023,15.727722],[-88.121153,15.688655],[-87.901813,15.864458],[-87.61568,15.878799],[-87.522921,15.797279],[-87.367762,15.84694],[-86.903191,15.756713],[-86.440946,15.782835],[-86.119234,15.893449],[-86.001954,16.005406],[-85.683317,15.953652],[-85.444004,15.885749],[-85.182444,15.909158],[-84.983722,15.995923],[-84.52698,15.857224],[-84.368256,15.835158],[-84.063055,15.648244],[-83.773977,15.424072],[-83.410381,15.270903],[-83.147219,14.995829]],\n      [[-83.147219,14.995829],[-83.489989,15.016267],[-83.628585,14.880074],[-83.975721,14.749436],[-84.228342,14.748764],[-84.449336,14.621614],[-84.649582,14.666805],[-84.820037,14.819587],[-84.924501,14.790493],[-85.052787,14.551541],[-85.148751,14.560197],[-85.165365,14.35437],[-85.514413,14.079012],[-85.698665,13.960078],[-85.801295,13.836055],[-86.096264,14.038187],[-86.312142,13.771356],[-86.520708,13.778487],[-86.755087,13.754845],[-86.733822,13.263093],[-86.880557,13.254204],[-87.005769,13.025794],[-87.316654,12.984686]],\n      [[18.829838,45.908878],[19.072769,45.521511]],\n      [[19.072769,45.521511],[19.390476,45.236516]],\n      [[19.390476,45.236516],[19.005486,44.860234]],\n      [[18.56,42.65],[18.450016,42.479991],[17.50997,42.849995],[16.930006,43.209998],[16.015385,43.507215],[15.174454,44.243191],[15.37625,44.317915],[14.920309,44.738484],[14.901602,45.07606],[14.258748,45.233777],[13.952255,44.802124],[13.656976,45.136935],[13.679403,45.484149],[13.71506,45.500324]],\n      [[13.71506,45.500324],[14.411968,45.466166],[14.595109,45.634941],[14.935244,45.471695],[15.327675,45.452316],[15.323954,45.731783],[15.67153,45.834154],[15.768733,46.238108],[16.564808,46.503751]],\n      [[16.564808,46.503751],[16.882515,46.380632],[17.630066,45.951769],[18.456062,45.759481],[18.829838,45.908878]],\n      [[-71.708305,18.044997],[-72.372476,18.214961],[-72.844411,18.145611],[-73.454555,18.217906],[-73.922433,18.030993],[-74.458034,18.34255],[-74.369925,18.664908],[-73.449542,18.526053],[-72.694937,18.445799],[-72.334882,18.668422],[-72.79165,19.101625],[-72.784105,19.483591],[-73.415022,19.639551],[-73.189791,19.915684],[-72.579673,19.871501],[-71.712361,19.714456]],\n      [[16.979667,48.123497],[17.488473,47.867466],[17.857133,47.758429],[18.696513,47.880954],[18.777025,48.081768],[19.174365,48.111379],[19.661364,48.266615],[19.769471,48.202691],[20.239054,48.327567],[20.473562,48.56285],[20.801294,48.623854],[21.872236,48.319971],[22.085608,48.422264]],\n      [[22.085608,48.422264],[22.64082,48.15024],[22.710531,47.882194]],\n      [[22.710531,47.882194],[22.099768,47.672439],[21.626515,46.994238],[21.021952,46.316088],[20.220192,46.127469]],\n      [[20.220192,46.127469],[19.596045,46.17173]],\n      [[19.596045,46.17173],[18.829838,45.908878]],\n      [[16.564808,46.503751],[16.370505,46.841327],[16.202298,46.852386]],\n      [[120.715609,-10.239581],[120.295014,-10.25865],[118.967808,-9.557969],[119.90031,-9.36134],[120.425756,-9.665921],[120.775502,-9.969675],[120.715609,-10.239581]],\n      [[124.968682,-8.89279],[125.07002,-9.089987],[125.08852,-9.393173]],\n      [[125.08852,-9.393173],[124.43595,-10.140001],[123.579982,-10.359987],[123.459989,-10.239995],[123.550009,-9.900016],[123.980009,-9.290027],[124.968682,-8.89279]],\n      [[117.900018,-8.095681],[118.260616,-8.362383],[118.87846,-8.280683],[119.126507,-8.705825],[117.970402,-8.906639],[117.277731,-9.040895],[116.740141,-9.032937],[117.083737,-8.457158],[117.632024,-8.449303],[117.900018,-8.095681]],\n      [[122.903537,-8.094234],[122.756983,-8.649808],[121.254491,-8.933666],[119.924391,-8.810418],[119.920929,-8.444859],[120.715092,-8.236965],[121.341669,-8.53674],[122.007365,-8.46062],[122.903537,-8.094234]],\n      [[108.623479,-6.777674],[110.539227,-6.877358],[110.759576,-6.465186],[112.614811,-6.946036],[112.978768,-7.594213],[114.478935,-7.776528],[115.705527,-8.370807],[114.564511,-8.751817],[113.464734,-8.348947],[112.559672,-8.376181],[111.522061,-8.302129],[110.58615,-8.122605],[109.427667,-7.740664],[108.693655,-7.6416],[108.277763,-7.766657],[106.454102,-7.3549],[106.280624,-6.9249],[105.365486,-6.851416],[106.051646,-5.895919],[107.265009,-5.954985],[108.072091,-6.345762],[108.486846,-6.421985],[108.623479,-6.777674]],\n      [[134.724624,-6.214401],[134.210134,-6.895238],[134.112776,-6.142467],[134.290336,-5.783058],[134.499625,-5.445042],[134.727002,-5.737582],[134.724624,-6.214401]],\n      [[127.249215,-3.459065],[126.874923,-3.790983],[126.183802,-3.607376],[125.989034,-3.177273],[127.000651,-3.129318],[127.249215,-3.459065]],\n      [[130.471344,-3.093764],[130.834836,-3.858472],[129.990547,-3.446301],[129.155249,-3.362637],[128.590684,-3.428679],[127.898891,-3.393436],[128.135879,-2.84365],[129.370998,-2.802154],[130.471344,-3.093764]],\n      [[141.00021,-2.600151],[141.017057,-5.859022],[141.033852,-9.117893]],\n      [[141.033852,-9.117893],[140.143415,-8.297168],[139.127767,-8.096043],[138.881477,-8.380935],[137.614474,-8.411683],[138.039099,-7.597882],[138.668621,-7.320225],[138.407914,-6.232849],[137.92784,-5.393366],[135.98925,-4.546544],[135.164598,-4.462931],[133.66288,-3.538853],[133.367705,-4.024819],[132.983956,-4.112979],[132.756941,-3.746283],[132.753789,-3.311787],[131.989804,-2.820551],[133.066845,-2.460418],[133.780031,-2.479848],[133.696212,-2.214542],[132.232373,-2.212526],[131.836222,-1.617162],[130.94284,-1.432522],[130.519558,-0.93772],[131.867538,-0.695461],[132.380116,-0.369538],[133.985548,-0.78021],[134.143368,-1.151867],[134.422627,-2.769185],[135.457603,-3.367753],[136.293314,-2.307042],[137.440738,-1.703513],[138.329727,-1.702686],[139.184921,-2.051296],[139.926684,-2.409052],[141.00021,-2.600151]],\n      [[125.240501,1.419836],[124.437035,0.427881],[123.685505,0.235593],[122.723083,0.431137],[121.056725,0.381217],[120.183083,0.237247],[120.04087,-0.519658],[120.935905,-1.408906],[121.475821,-0.955962],[123.340565,-0.615673],[123.258399,-1.076213],[122.822715,-0.930951],[122.38853,-1.516858],[121.508274,-1.904483],[122.454572,-3.186058],[122.271896,-3.5295],[123.170963,-4.683693],[123.162333,-5.340604],[122.628515,-5.634591],[122.236394,-5.282933],[122.719569,-4.464172],[121.738234,-4.851331],[121.489463,-4.574553],[121.619171,-4.188478],[120.898182,-3.602105],[120.972389,-2.627643],[120.305453,-2.931604],[120.390047,-4.097579],[120.430717,-5.528241],[119.796543,-5.6734],[119.366906,-5.379878],[119.653606,-4.459417],[119.498835,-3.494412],[119.078344,-3.487022],[118.767769,-2.801999],[119.180974,-2.147104],[119.323394,-1.353147],[119.825999,0.154254],[120.035702,0.566477],[120.885779,1.309223],[121.666817,1.013944],[122.927567,0.875192],[124.077522,0.917102],[125.065989,1.643259],[125.240501,1.419836]],\n      [[128.688249,1.132386],[128.635952,0.258486],[128.12017,0.356413],[127.968034,-0.252077],[128.379999,-0.780004],[128.100016,-0.899996],[127.696475,-0.266598],[127.39949,1.011722],[127.600512,1.810691],[127.932378,2.174596],[128.004156,1.628531],[128.594559,1.540811],[128.688249,1.132386]],\n      [[109.66326,2.006467],[109.830227,1.338136],[110.514061,0.773131],[111.159138,0.976478],[111.797548,0.904441],[112.380252,1.410121],[112.859809,1.49779],[113.80585,1.217549],[114.621355,1.430688],[115.134037,2.821482],[115.519078,3.169238],[115.865517,4.306559],[117.015214,4.306094],[117.882035,4.137551]],\n      [[117.882035,4.137551],[117.313232,3.234428],[118.04833,2.28769],[117.875627,1.827641],[118.996747,0.902219],[117.811858,0.784242],[117.478339,0.102475],[117.521644,-0.803723],[116.560048,-1.487661],[116.533797,-2.483517],[116.148084,-4.012726],[116.000858,-3.657037],[114.864803,-4.106984],[114.468652,-3.495704],[113.755672,-3.43917],[113.256994,-3.118776],[112.068126,-3.478392],[111.703291,-2.994442],[111.04824,-3.049426],[110.223846,-2.934032],[110.070936,-1.592874],[109.571948,-1.314907],[109.091874,-0.459507],[108.952658,0.415375],[109.069136,1.341934],[109.66326,2.006467]],\n      [[105.817655,-5.852356],[104.710384,-5.873285],[103.868213,-5.037315],[102.584261,-4.220259],[102.156173,-3.614146],[101.399113,-2.799777],[100.902503,-2.050262],[100.141981,-0.650348],[99.26374,0.183142],[98.970011,1.042882],[98.601351,1.823507],[97.699598,2.453184],[97.176942,3.308791],[96.424017,3.86886],[95.380876,4.970782],[95.293026,5.479821],[95.936863,5.439513],[97.484882,5.246321],[98.369169,4.26837],[99.142559,3.59035],[99.693998,3.174329],[100.641434,2.099381],[101.658012,2.083697],[102.498271,1.3987],[103.07684,0.561361],[103.838396,0.104542],[103.437645,-0.711946],[104.010789,-1.059212],[104.369991,-1.084843],[104.53949,-1.782372],[104.887893,-2.340425],[105.622111,-2.428844],[106.108593,-3.061777],[105.857446,-4.305525],[105.817655,-5.852356]],\n      [[81.111256,30.183481],[80.476721,29.729865],[80.088425,28.79447],[81.057203,28.416095],[81.999987,27.925479],[83.304249,27.364506],[84.675018,27.234901],[85.251779,26.726198],[86.024393,26.630985],[87.227472,26.397898],[88.060238,26.414615],[88.174804,26.810405],[88.043133,27.445819],[88.120441,27.876542]],\n      [[97.327114,28.261583],[97.402561,27.882536],[97.051989,27.699059],[97.133999,27.083774],[96.419366,27.264589],[95.124768,26.573572],[95.155153,26.001307],[94.603249,25.162495],[94.552658,24.675238],[94.106742,23.850741],[93.325188,24.078556],[93.286327,23.043658],[93.060294,22.703111],[93.166128,22.27846],[92.672721,22.041239]],\n      [[89.031961,22.055708],[88.888766,21.690588],[88.208497,21.703172],[86.975704,21.495562],[87.033169,20.743308],[86.499351,20.151638],[85.060266,19.478579],[83.941006,18.30201],[83.189217,17.671221],[82.192792,17.016636],[82.191242,16.556664],[81.692719,16.310219],[80.791999,15.951972],[80.324896,15.899185],[80.025069,15.136415],[80.233274,13.835771],[80.286294,13.006261],[79.862547,12.056215],[79.857999,10.357275],[79.340512,10.308854],[78.885345,9.546136],[79.18972,9.216544],[78.277941,8.933047],[77.941165,8.252959],[77.539898,7.965535],[76.592979,8.899276],[76.130061,10.29963],[75.746467,11.308251],[75.396101,11.781245],[74.864816,12.741936],[74.616717,13.992583],[74.443859,14.617222],[73.534199,15.990652],[73.119909,17.92857],[72.820909,19.208234],[72.824475,20.419503],[72.630533,21.356009],[71.175273,20.757441],[70.470459,20.877331],[69.16413,22.089298],[69.644928,22.450775],[69.349597,22.84318],[68.176645,23.691965]],\n      [[68.176645,23.691965],[68.842599,24.359134],[71.04324,24.356524],[70.844699,25.215102],[70.282873,25.722229],[70.168927,26.491872],[69.514393,26.940966],[70.616496,27.989196],[71.777666,27.91318],[72.823752,28.961592],[73.450638,29.976413],[74.42138,30.979815],[74.405929,31.692639],[75.258642,32.271105],[74.451559,32.7649],[74.104294,33.441473],[73.749948,34.317699],[74.240203,34.748887],[75.757061,34.504923],[76.871722,34.653544],[77.837451,35.49401]],\n      [[-6.197885,53.867565],[-6.032985,53.153164],[-6.788857,52.260118],[-8.561617,51.669301],[-9.977086,51.820455],[-9.166283,52.864629],[-9.688525,53.881363],[-8.327987,54.664519],[-7.572168,55.131622]],\n      [[53.921598,37.198918],[54.800304,37.392421],[55.511578,37.964117],[56.180375,37.935127],[56.619366,38.121394],[57.330434,38.029229],[58.436154,37.522309],[59.234762,37.412988],[60.377638,36.527383],[61.123071,36.491597],[61.210817,35.650072]],\n      [[60.874248,29.829239],[61.369309,29.303276],[61.771868,28.699334],[62.72783,28.259645],[62.755426,27.378923],[63.233898,27.217047],[63.316632,26.756532],[61.874187,26.239975],[61.497363,25.078237]],\n      [[61.497363,25.078237],[59.616134,25.380157],[58.525761,25.609962],[57.397251,25.739902],[56.970766,26.966106],[56.492139,27.143305],[55.72371,26.964633],[54.71509,26.480658],[53.493097,26.812369],[52.483598,27.580849],[51.520763,27.86569],[50.852948,28.814521],[50.115009,30.147773],[49.57685,29.985715],[48.941333,30.31709],[48.567971,29.926778]],\n      [[48.567971,29.926778],[48.014568,30.452457],[48.004698,30.985137],[47.685286,30.984853],[47.849204,31.709176],[47.334661,32.469155],[46.109362,33.017287],[45.416691,33.967798],[45.64846,34.748138],[46.151788,35.093259],[46.07634,35.677383],[45.420618,35.977546]],\n      [[45.420618,35.977546],[44.77267,37.17045],[44.225756,37.971584]],\n      [[44.225756,37.971584],[44.421403,38.281281],[44.109225,39.428136],[44.79399,39.713003]],\n      [[48.883249,38.320245],[49.199612,37.582874],[50.147771,37.374567],[50.842354,36.872814],[52.264025,36.700422],[53.82579,36.965031],[53.921598,37.198918]],\n      [[48.567971,29.926778],[47.974519,29.975819]],\n      [[47.974519,29.975819],[47.302622,30.05907],[46.568713,29.099025]],\n      [[46.568713,29.099025],[44.709499,29.178891],[41.889981,31.190009],[40.399994,31.889992],[39.195468,32.161009]],\n      [[39.195468,32.161009],[38.792341,33.378686]],\n      [[38.792341,33.378686],[41.006159,34.419372],[41.383965,35.628317],[41.289707,36.358815],[41.837064,36.605854],[42.349591,37.229873]],\n      [[42.349591,37.229873],[42.779126,37.385264],[43.942259,37.256228],[44.293452,37.001514],[44.772699,37.170445]],\n      [[44.772699,37.170445],[45.420618,35.977546]],\n      [[-14.508695,66.455892],[-14.739637,65.808748],[-13.609732,65.126671],[-14.909834,64.364082],[-17.794438,63.678749],[-18.656246,63.496383],[-19.972755,63.643635],[-22.762972,63.960179],[-21.778484,64.402116],[-23.955044,64.89113],[-22.184403,65.084968],[-22.227423,65.378594],[-24.326184,65.611189],[-23.650515,66.262519],[-22.134922,66.410469],[-20.576284,65.732112],[-19.056842,66.276601],[-17.798624,65.993853],[-16.167819,66.526792],[-14.508695,66.455892]],\n      [[35.719918,32.709192],[35.545665,32.393992]],\n      [[35.545665,32.393992],[35.18393,32.532511],[34.974641,31.866582],[35.225892,31.754341],[34.970507,31.616778],[34.927408,31.353435],[35.397561,31.489086]],\n      [[35.397561,31.489086],[35.420918,31.100066],[34.922603,29.501326]],\n      [[34.922603,29.501326],[34.265433,31.219361]],\n      [[34.265433,31.219361],[34.556372,31.548824],[34.488107,31.605539]],\n      [[34.488107,31.605539],[34.752587,32.072926],[34.955417,32.827376],[35.098457,33.080539],[35.126053,33.0909]],\n      [[35.126053,33.0909],[35.460709,33.08904],[35.552797,33.264275],[35.821101,33.277426]],\n      [[35.821101,33.277426],[35.836397,32.868123],[35.700798,32.716014],[35.719918,32.709192]],\n      [[15.520376,38.231155],[15.160243,37.444046],[15.309898,37.134219],[15.099988,36.619987],[14.335229,36.996631],[13.826733,37.104531],[12.431004,37.61295],[12.570944,38.126381],[13.741156,38.034966],[14.761249,38.143874],[15.520376,38.231155]],\n      [[9.210012,41.209991],[9.809975,40.500009],[9.669519,39.177376],[9.214818,39.240473],[8.806936,38.906618],[8.428302,39.171847],[8.388253,40.378311],[8.159998,40.950007],[8.709991,40.899984],[9.210012,41.209991]],\n      [[13.806475,46.509306],[13.69811,46.016778],[13.93763,45.591016]],\n      [[13.93763,45.591016],[13.141606,45.736692],[12.328581,45.381778],[12.383875,44.885374],[12.261453,44.600482],[12.589237,44.091366],[13.526906,43.587727],[14.029821,42.761008],[15.14257,41.95514],[15.926191,41.961315],[16.169897,41.740295],[15.889346,41.541082],[16.785002,41.179606],[17.519169,40.877143],[18.376687,40.355625],[18.480247,40.168866],[18.293385,39.810774],[17.73838,40.277671],[16.869596,40.442235],[16.448743,39.795401],[17.17149,39.4247],[17.052841,38.902871],[16.635088,38.843572],[16.100961,37.985899],[15.684087,37.908849],[15.687963,38.214593],[15.891981,38.750942],[16.109332,38.964547],[15.718814,39.544072],[15.413613,40.048357],[14.998496,40.172949],[14.703268,40.60455],[14.060672,40.786348],[13.627985,41.188287],[12.888082,41.25309],[12.106683,41.704535],[11.191906,42.355425],[10.511948,42.931463],[10.200029,43.920007],[9.702488,44.036279],[8.888946,44.366336],[8.428561,44.231228],[7.850767,43.767148],[7.435185,43.693845]],\n      [[-77.569601,18.490525],[-76.896619,18.400867],[-76.365359,18.160701],[-76.199659,17.886867],[-76.902561,17.868238],[-77.206341,17.701116],[-77.766023,17.861597],[-78.337719,18.225968],[-78.217727,18.454533],[-77.797365,18.524218],[-77.569601,18.490525]],\n      [[35.719918,32.709192],[36.834062,32.312938],[38.792341,33.378686]],\n      [[39.195468,32.161009],[39.004886,32.010217],[37.002166,31.508413],[37.998849,30.5085],[37.66812,30.338665],[37.503582,30.003776],[36.740528,29.865283],[36.501214,29.505254],[36.068941,29.197495],[34.956037,29.356555]],\n      [[34.956037,29.356555],[34.922603,29.501326]],\n      [[35.397561,31.489086],[35.545252,31.782505],[35.545665,32.393992]],\n      [[134.638428,34.149234],[134.766379,33.806335],[134.203416,33.201178],[133.79295,33.521985],[133.280268,33.28957],[133.014858,32.704567],[132.363115,32.989382],[132.371176,33.463642],[132.924373,34.060299],[133.492968,33.944621],[133.904106,34.364931],[134.638428,34.149234]],\n      [[140.976388,37.142074],[140.59977,36.343983],[140.774074,35.842877],[140.253279,35.138114],[138.975528,34.6676],[137.217599,34.606286],[135.792983,33.464805],[135.120983,33.849071],[135.079435,34.596545],[133.340316,34.375938],[132.156771,33.904933],[130.986145,33.885761],[132.000036,33.149992],[131.33279,31.450355],[130.686318,31.029579],[130.20242,31.418238],[130.447676,32.319475],[129.814692,32.61031],[129.408463,33.296056],[130.353935,33.604151],[130.878451,34.232743],[131.884229,34.749714],[132.617673,35.433393],[134.608301,35.731618],[135.677538,35.527134],[136.723831,37.304984],[137.390612,36.827391],[138.857602,37.827485],[139.426405,38.215962],[140.05479,39.438807],[139.883379,40.563312],[140.305783,41.195005],[141.368973,41.37856],[141.914263,39.991616],[141.884601,39.180865],[140.959489,38.174001],[140.976388,37.142074]],\n      [[143.910162,44.1741],[144.613427,43.960883],[145.320825,44.384733],[145.543137,43.262088],[144.059662,42.988358],[143.18385,41.995215],[141.611491,42.678791],[141.067286,41.584594],[139.955106,41.569556],[139.817544,42.563759],[140.312087,43.333273],[141.380549,43.388825],[141.671952,44.772125],[141.967645,45.551483],[143.14287,44.510358],[143.910162,44.1741]],\n      [[70.962315,42.266154],[70.388965,42.081308],[69.070027,41.384244],[68.632483,40.668681],[68.259896,40.662325],[67.985856,41.135991],[66.714047,41.168444],[66.510649,41.987644],[66.023392,41.994646],[66.098012,42.99766],[64.900824,43.728081],[63.185787,43.650075],[62.0133,43.504477],[61.05832,44.405817],[60.239972,44.784037],[58.689989,45.500014],[58.503127,45.586804],[55.928917,44.995858],[55.968191,41.308642]],\n      [[55.968191,41.308642],[55.455251,41.259859],[54.755345,42.043971],[54.079418,42.324109],[52.944293,42.116034],[52.50246,41.783316]],\n      [[52.50246,41.783316],[52.446339,42.027151],[52.692112,42.443895],[52.501426,42.792298],[51.342427,43.132975],[50.891292,44.031034],[50.339129,44.284016],[50.305643,44.609836],[51.278503,44.514854],[51.316899,45.245998],[52.16739,45.408391],[53.040876,45.259047],[53.220866,46.234646],[53.042737,46.853006],[52.042023,46.804637],[51.191945,47.048705],[50.034083,46.60899],[49.10116,46.39933]],\n      [[49.10116,46.39933],[48.593241,46.561034],[48.694734,47.075628]],\n      [[48.694734,47.075628],[48.057253,47.743753],[47.315231,47.715847],[46.466446,48.394152]],\n      [[46.466446,48.394152],[47.043672,49.152039],[46.751596,49.356006],[47.54948,50.454698],[48.577841,49.87476],[48.702382,50.605128],[50.766648,51.692762],[52.328724,51.718652],[54.532878,51.02624]],\n      [[54.532878,51.02624],[55.716941,50.621717],[56.777961,51.043551],[58.363291,51.063653],[59.642282,50.545442]],\n      [[59.642282,50.545442],[59.932807,50.842194],[61.337424,50.79907],[61.588003,51.272659],[59.967534,51.96042],[60.927269,52.447548],[60.739993,52.719986],[61.699986,52.979996],[60.978066,53.664993]],\n      [[60.978066,53.664993],[61.436591,54.006265],[65.178534,54.354228]],\n      [[65.178534,54.354228],[65.666876,54.601267],[68.1691,54.970392]],\n      [[68.1691,54.970392],[69.068167,55.38525],[70.865267,55.169734],[71.180131,54.133285],[72.22415,54.376655],[73.508516,54.035617],[73.425679,53.48981]],\n      [[73.425679,53.48981],[74.384845,53.546861],[76.8911,54.490524]],\n      [[76.8911,54.490524],[76.525179,54.177003],[77.800916,53.404415],[80.03556,50.864751],[80.568447,51.388336],[81.945986,50.812196],[83.383004,51.069183],[83.935115,50.889246],[84.416377,50.3114],[85.11556,50.117303],[85.54127,49.692859],[86.829357,49.826675],[87.35997,49.214981]],\n      [[80.25999,42.349999],[79.643645,42.496683],[79.142177,42.856092],[77.658392,42.960686],[76.000354,42.988022],[75.636965,42.8779],[74.212866,43.298339],[73.645304,43.091272],[73.489758,42.500894],[71.844638,42.845395],[71.186281,42.704293],[70.962315,42.266154]],\n      [[41.58513,-1.68325],[40.88477,-2.08255],[40.63785,-2.49979],[40.26304,-2.57309],[40.12119,-3.27768],[39.80006,-3.68116],[39.60489,-4.34653],[39.20222,-4.67677]],\n      [[39.20222,-4.67677],[37.7669,-3.67712],[37.69869,-3.09699],[34.07262,-1.05982],[33.903711,-0.95]],\n      [[33.903711,-0.95],[33.893569,0.109814],[34.18,0.515],[34.6721,1.17694],[35.03599,1.90584],[34.59607,3.05374],[34.47913,3.5556],[34.005,4.249885]],\n      [[34.005,4.249885],[34.620196,4.847123],[35.298007,5.506]],\n      [[41.855083,3.918912],[40.98105,2.78452],[40.993,-0.85829],[41.58513,-1.68325]],\n      [[73.675379,39.431237],[71.784694,39.279463],[70.549162,39.604198],[69.464887,39.526683],[69.55961,40.103211],[70.648019,39.935754],[71.014198,40.244366]],\n      [[71.014198,40.244366],[71.774875,40.145844],[73.055417,40.866033],[71.870115,41.3929],[71.157859,41.143587],[70.420022,41.519998],[71.259248,42.167711],[70.962315,42.266154]],\n      [[102.584932,12.186595],[102.348099,13.394247],[102.988422,14.225721],[104.281418,14.416743],[105.218777,14.273212]],\n      [[105.218777,14.273212],[106.043946,13.881091],[106.496373,14.570584],[107.382727,14.202441]],\n      [[107.382727,14.202441],[107.614548,13.535531],[107.491403,12.337206],[105.810524,11.567615],[106.24967,10.961812],[105.199915,10.88931],[104.334335,10.486544]],\n      [[104.334335,10.486544],[103.49728,10.632555],[103.09069,11.153661],[102.584932,12.186595]],\n      [[128.349716,38.612243],[129.21292,37.432392],[129.46045,36.784189],[129.468304,35.632141],[129.091377,35.082484],[128.18585,34.890377],[127.386519,34.475674],[126.485748,34.390046],[126.37392,34.93456],[126.559231,35.684541],[126.117398,36.725485],[126.860143,36.893924],[126.174759,37.749686]],\n      [[126.174759,37.749686],[126.237339,37.840378],[126.68372,37.804773],[127.073309,38.256115],[127.780035,38.304536],[128.205746,38.370397],[128.349716,38.612243]],\n      [[20.59023,41.85541],[20.52295,42.21787]],\n      [[20.52295,42.21787],[20.28374,42.32025],[20.0707,42.58863]],\n      [[20.0707,42.58863],[20.25758,42.81275]],\n      [[20.25758,42.81275],[20.49679,42.88469],[20.63508,43.21671],[20.81448,43.27205],[20.95651,43.13094],[21.143395,43.068685],[21.27421,42.90959],[21.43866,42.86255],[21.63302,42.67717],[21.77505,42.6827],[21.66292,42.43922],[21.54332,42.32025],[21.576636,42.245224]],\n      [[21.576636,42.245224],[21.3527,42.2068],[20.76216,42.05186],[20.71731,41.84711],[20.59023,41.85541]],\n      [[47.974519,29.975819],[48.183189,29.534477],[48.093943,29.306299],[48.416094,28.552004]],\n      [[48.416094,28.552004],[47.708851,28.526063],[47.459822,29.002519],[46.568713,29.099025]],\n      [[105.218777,14.273212],[105.544338,14.723934],[105.589039,15.570316],[104.779321,16.441865],[104.716947,17.428859],[103.956477,18.240954],[103.200192,18.309632],[102.998706,17.961695],[102.413005,17.932782],[102.113592,18.109102],[101.059548,17.512497],[101.035931,18.408928],[101.282015,19.462585],[100.606294,19.508344],[100.548881,20.109238],[100.115988,20.41785]],\n      [[100.115988,20.41785],[100.329101,20.786122],[101.180005,21.436573]],\n      [[102.170436,22.464753],[102.754896,21.675137],[103.203861,20.766562],[104.435,20.758733],[104.822574,19.886642],[104.183388,19.624668],[103.896532,19.265181],[105.094598,18.666975],[105.925762,17.485315],[106.556008,16.604284],[107.312706,15.908538],[107.564525,15.202173],[107.382727,14.202441]],\n      [[35.126053,33.0909],[35.482207,33.90545],[35.979592,34.610058],[35.998403,34.644914]],\n      [[35.998403,34.644914],[36.448194,34.593935],[36.61175,34.201789],[36.06646,33.824912],[35.821101,33.277426]],\n      [[-7.712159,4.364566],[-7.974107,4.355755],[-9.004794,4.832419],[-9.91342,5.593561],[-10.765384,6.140711],[-11.438779,6.785917]],\n      [[-11.438779,6.785917],[-11.199802,7.105846],[-11.146704,7.396706],[-10.695595,7.939464],[-10.230094,8.406206]],\n      [[14.8513,22.86295],[14.143871,22.491289],[13.581425,23.040506],[11.999506,23.471668]],\n      [[9.48214,30.307556],[9.970017,30.539325],[10.056575,30.961831],[9.950225,31.37607],[10.636901,31.761421],[10.94479,32.081815],[11.432253,32.368903],[11.488787,33.136996]],\n      [[11.488787,33.136996],[12.66331,32.79278],[13.08326,32.87882],[13.91868,32.71196],[15.24563,32.26508],[15.71394,31.37626],[16.61162,31.18218],[18.02109,30.76357],[19.08641,30.26639],[19.57404,30.52582],[20.05335,30.98576],[19.82033,31.75179],[20.13397,32.2382],[20.85452,32.7068],[21.54298,32.8432],[22.89576,32.63858],[23.2368,32.19149],[23.60913,32.18726],[23.9275,32.01667],[24.92114,31.89936],[25.16482,31.56915]],\n      [[25,22],[25,20.00304],[23.85,20],[23.83766,19.58047]],\n      [[23.83766,19.58047],[19.84926,21.49509],[15.86085,23.40972],[14.8513,22.86295]],\n      [[81.787959,7.523055],[81.637322,6.481775],[81.21802,6.197141],[80.348357,5.96837],[79.872469,6.763463],[79.695167,8.200843],[80.147801,9.824078],[80.838818,9.268427],[81.304319,8.564206],[81.787959,7.523055]],\n      [[28.978263,-28.955597],[29.325166,-29.257387],[29.018415,-29.743766],[28.8484,-30.070051],[28.291069,-30.226217],[28.107205,-30.545732],[27.749397,-30.645106],[26.999262,-29.875954],[27.532511,-29.242711],[28.074338,-28.851469],[28.5417,-28.647502],[28.978263,-28.955597]],\n      [[22.731099,54.327537],[22.651052,54.582741],[22.757764,54.856574],[22.315724,55.015299],[21.268449,55.190482]],\n      [[21.268449,55.190482],[21.0558,56.031076]],\n      [[21.0558,56.031076],[22.201157,56.337802],[23.878264,56.273671],[24.860684,56.372528],[25.000934,56.164531],[25.533047,56.100297],[26.494331,55.615107]],\n      [[23.484128,53.912498],[23.243987,54.220567],[22.731099,54.327537]],\n      [[21.0558,56.031076],[21.090424,56.783873],[21.581866,57.411871],[22.524341,57.753374],[23.318453,57.006236],[24.12073,57.025693],[24.312863,57.793424]],\n      [[27.288185,57.474528],[27.770016,57.244258],[27.855282,56.759326],[28.176709,56.16913]],\n      [[-8.66559,27.6],[-13.0953665818028,27.6]],\n      [[-13.0953665818028,27.6],[-12.360674033948428,28.164869967003586],[-10.900957,28.832142],[-10.399592,29.098586],[-9.564811,29.933574],[-9.814718,31.177736],[-9.434793,32.038096],[-9.300693,32.564679],[-8.657476,33.240245],[-7.654178,33.697065],[-6.912544,34.110476],[-6.244342,35.145865],[-5.929994,35.759988],[-5.193863,35.755182],[-4.591006,35.330712],[-3.640057,35.399855],[-2.604306,35.179093],[-2.169914,35.168396]],\n      [[26.619337,48.220726],[26.857824,48.368211],[27.522537,48.467119],[28.259547,48.155562],[28.670891,48.118149],[29.122698,47.849095],[29.050868,47.510227],[29.415135,47.346645],[29.559674,46.928583],[29.908852,46.674361],[29.83821,46.525326],[30.024659,46.423937],[29.759972,46.349988],[29.170654,46.379262],[29.072107,46.517678],[28.862972,46.437889],[28.933717,46.25883],[28.659987,45.939987],[28.485269,45.596907],[28.233554,45.488283]],\n      [[28.233554,45.488283],[28.054443,45.944586],[28.160018,46.371563],[28.12803,46.810476],[27.551166,47.405117],[27.233873,47.826771],[26.924176,48.123264],[26.619337,48.220726]],\n      [[49.543519,-12.469833],[49.808981,-12.895285],[50.056511,-13.555761],[50.217431,-14.758789],[50.476537,-15.226512],[50.377111,-15.706069],[50.200275,-16.000263],[49.860606,-15.414253],[49.672607,-15.710204],[49.863344,-16.451037],[49.774564,-16.875042],[49.498612,-17.106036],[49.435619,-17.953064],[49.041792,-19.118781],[48.548541,-20.496888],[47.930749,-22.391501],[47.547723,-23.781959],[47.095761,-24.94163],[46.282478,-25.178463],[45.409508,-25.601434],[44.833574,-25.346101],[44.03972,-24.988345],[43.763768,-24.460677],[43.697778,-23.574116],[43.345654,-22.776904],[43.254187,-22.057413],[43.433298,-21.336475],[43.893683,-21.163307],[43.89637,-20.830459],[44.374325,-20.072366],[44.464397,-19.435454],[44.232422,-18.961995],[44.042976,-18.331387],[43.963084,-17.409945],[44.312469,-16.850496],[44.446517,-16.216219],[44.944937,-16.179374],[45.502732,-15.974373],[45.872994,-15.793454],[46.312243,-15.780018],[46.882183,-15.210182],[47.70513,-14.594303],[48.005215,-14.091233],[47.869047,-13.663869],[48.293828,-13.784068],[48.84506,-13.089175],[48.863509,-12.487868],[49.194651,-12.040557],[49.543519,-12.469833]],\n      [[-92.22775,14.538829],[-93.359464,15.61543],[-93.875169,15.940164],[-94.691656,16.200975],[-95.250227,16.128318],[-96.053382,15.752088],[-96.557434,15.653515],[-97.263592,15.917065],[-98.01303,16.107312],[-98.947676,16.566043],[-99.697397,16.706164],[-100.829499,17.171071],[-101.666089,17.649026],[-101.918528,17.91609],[-102.478132,17.975751],[-103.50099,18.292295],[-103.917527,18.748572],[-104.99201,19.316134],[-105.493038,19.946767],[-105.731396,20.434102],[-105.397773,20.531719],[-105.500661,20.816895],[-105.270752,21.076285],[-105.265817,21.422104],[-105.603161,21.871146],[-105.693414,22.26908],[-106.028716,22.773752],[-106.90998,23.767774],[-107.915449,24.548915],[-108.401905,25.172314],[-109.260199,25.580609],[-109.444089,25.824884],[-109.291644,26.442934],[-109.801458,26.676176],[-110.391732,27.162115],[-110.641019,27.859876],[-111.178919,27.941241],[-111.759607,28.467953],[-112.228235,28.954409],[-112.271824,29.266844],[-112.809594,30.021114],[-113.163811,30.786881],[-113.148669,31.170966],[-113.871881,31.567608],[-114.205737,31.524045],[-114.776451,31.799532],[-114.9367,31.393485],[-114.771232,30.913617],[-114.673899,30.162681],[-114.330974,29.750432],[-113.588875,29.061611],[-113.424053,28.826174],[-113.271969,28.754783],[-113.140039,28.411289],[-112.962298,28.42519],[-112.761587,27.780217],[-112.457911,27.525814],[-112.244952,27.171727],[-111.616489,26.662817],[-111.284675,25.73259],[-110.987819,25.294606],[-110.710007,24.826004],[-110.655049,24.298595],[-110.172856,24.265548],[-109.771847,23.811183],[-109.409104,23.364672],[-109.433392,23.185588],[-109.854219,22.818272],[-110.031392,22.823078],[-110.295071,23.430973],[-110.949501,24.000964],[-111.670568,24.484423],[-112.182036,24.738413],[-112.148989,25.470125],[-112.300711,26.012004],[-112.777297,26.32196],[-113.464671,26.768186],[-113.59673,26.63946],[-113.848937,26.900064],[-114.465747,27.14209],[-115.055142,27.722727],[-114.982253,27.7982],[-114.570366,27.741485],[-114.199329,28.115003],[-114.162018,28.566112],[-114.931842,29.279479],[-115.518654,29.556362],[-115.887365,30.180794],[-116.25835,30.836464],[-116.721526,31.635744],[-117.12776,32.53534]],\n      [[-117.12776,32.53534],[-115.99135,32.61239],[-114.72139,32.72083],[-114.815,32.52528],[-113.30498,32.03914],[-111.02361,31.33472],[-109.035,31.34194],[-108.24194,31.34222],[-108.24,31.754854],[-106.50759,31.75452],[-106.1429,31.39995],[-105.63159,31.08383],[-105.03737,30.64402],[-104.70575,30.12173],[-104.45697,29.57196],[-103.94,29.27],[-103.11,28.97],[-102.48,29.76],[-101.6624,29.7793],[-100.9576,29.38071],[-100.45584,28.69612],[-100.11,28.11],[-99.52,27.54],[-99.3,26.84],[-99.02,26.37],[-98.24,26.06],[-97.53,25.84]],\n      [[-97.53,25.84],[-97.140008,25.869997],[-97.528072,24.992144],[-97.702946,24.272343],[-97.776042,22.93258],[-97.872367,22.444212],[-97.699044,21.898689],[-97.38896,21.411019],[-97.189333,20.635433],[-96.525576,19.890931],[-96.292127,19.320371],[-95.900885,18.828024],[-94.839063,18.562717],[-94.42573,18.144371],[-93.548651,18.423837],[-92.786114,18.524839],[-92.037348,18.704569],[-91.407903,18.876083],[-90.77187,19.28412],[-90.53359,19.867418],[-90.451476,20.707522],[-90.278618,20.999855],[-89.601321,21.261726],[-88.543866,21.493675],[-87.658417,21.458846],[-87.05189,21.543543],[-86.811982,21.331515],[-86.845908,20.849865],[-87.383291,20.255405],[-87.621054,19.646553],[-87.43675,19.472403],[-87.58656,19.04013],[-87.837191,18.259816],[-88.090664,18.516648],[-88.300031,18.499982]],\n      [[21.576636,42.245224],[21.91708,42.30364],[22.380526,42.32026]],\n      [[21.02004,40.842727],[20.60518,41.08622],[20.46315,41.51509],[20.59023,41.85541]],\n      [[-12.17075,14.616834],[-11.834208,14.799097],[-11.666078,15.388208],[-11.349095,15.411256],[-10.650791,15.132746],[-10.086846,15.330486],[-9.700255,15.264107],[-9.550238,15.486497],[-5.537744,15.50169],[-5.315277,16.201854],[-5.488523,16.325102],[-5.971129,20.640833],[-6.453787,24.956591],[-4.923337,24.974574]],\n      [[4.267419,19.155265],[4.27021,16.852227],[3.723422,16.184284],[3.638259,15.56812],[2.749993,15.409525],[1.385528,15.323561],[1.015783,14.968182],[0.374892,14.928908]],\n      [[-11.513943,12.442988],[-11.467899,12.754519],[-11.553398,13.141214],[-11.927716,13.422075],[-12.124887,13.994727],[-12.17075,14.616834]],\n      [[98.553551,9.93296],[98.457174,10.675266],[98.764546,11.441292],[98.428339,12.032987],[98.509574,13.122378],[98.103604,13.64046],[97.777732,14.837286],[97.597072,16.100568],[97.16454,16.928734],[96.505769,16.427241],[95.369352,15.71439],[94.808405,15.803454],[94.188804,16.037936],[94.533486,17.27724],[94.324817,18.213514],[93.540988,19.366493],[93.663255,19.726962],[93.078278,19.855145],[92.368554,20.670883]],\n      [[100.115988,20.41785],[99.543309,20.186598],[98.959676,19.752981],[98.253724,19.708203],[97.797783,18.62708],[97.375896,18.445438],[97.859123,17.567946],[98.493761,16.837836],[98.903348,16.177824],[98.537376,15.308497],[98.192074,15.123703],[98.430819,14.622028],[99.097755,13.827503],[99.212012,13.269294],[99.196354,12.804748],[99.587286,11.892763],[99.038121,10.960546],[98.553551,9.93296]],\n      [[19.738051,42.688247],[19.30449,42.19574],[19.37177,41.87755],[19.16246,41.95502],[18.88214,42.28151],[18.45,42.48],[18.56,42.65]],\n      [[19.21852,43.52384],[19.48389,43.35229],[19.63,43.21378],[19.95857,43.10604],[20.3398,42.89852],[20.25758,42.81275]],\n      [[87.751264,49.297198],[88.805567,49.470521],[90.713667,50.331812],[92.234712,50.802171]],\n      [[92.234712,50.802171],[93.104219,50.49529],[94.147566,50.480537]],\n      [[94.147566,50.480537],[94.815949,50.013433]],\n      [[94.815949,50.013433],[95.814028,49.977467],[97.259728,49.726061],[98.231762,50.422401]],\n      [[98.231762,50.422401],[97.82574,51.010995],[98.861491,52.047366],[99.981732,51.634006],[100.88948,51.516856]],\n      [[100.88948,51.516856],[102.065223,51.259921],[102.255909,50.510561],[103.676545,50.089966]],\n      [[103.676545,50.089966],[104.621552,50.275329],[105.886591,50.406019]],\n      [[105.886591,50.406019],[106.888804,50.274296],[107.868176,49.793705],[108.475167,49.282548],[109.402449,49.292961],[110.662011,49.130128],[111.581231,49.377968],[112.89774,49.543565],[114.362456,50.248303],[114.96211,50.140247],[115.485695,49.805177],[116.678801,49.888531]],\n      [[34.559989,-11.52002],[35.312398,-11.439146],[36.514082,-11.720938],[36.775151,-11.594537]],\n      [[36.775151,-11.594537],[37.471284,-11.568751],[37.827645,-11.268769],[38.427557,-11.285202]],\n      [[38.427557,-11.285202],[39.52103,-10.896854],[40.316589,-10.317096],[40.478387,-10.765441],[40.437253,-11.761711],[40.560811,-12.639177],[40.59962,-14.201975],[40.775475,-14.691764],[40.477251,-15.406294],[40.089264,-16.100774],[39.452559,-16.720891],[38.538351,-17.101023],[37.411133,-17.586368],[36.281279,-18.659688],[35.896497,-18.84226],[35.1984,-19.552811],[34.786383,-19.784012],[34.701893,-20.497043],[35.176127,-21.254361],[35.373428,-21.840837],[35.385848,-22.14],[35.562546,-22.09],[35.533935,-23.070788],[35.371774,-23.535359],[35.60747,-23.706563],[35.458746,-24.12261],[35.040735,-24.478351],[34.215824,-24.816314],[33.01321,-25.357573],[32.574632,-25.727318],[32.660363,-26.148584],[32.915955,-26.215867],[32.83012,-26.742192]],\n      [[32.83012,-26.742192],[32.071665,-26.73382]],\n      [[32.071665,-26.73382],[31.985779,-26.29178],[31.837778,-25.843332]],\n      [[31.837778,-25.843332],[31.752408,-25.484284],[31.930589,-24.369417],[31.670398,-23.658969],[31.191409,-22.25151]],\n      [[31.191409,-22.25151],[32.244988,-21.116489],[32.508693,-20.395292],[32.659743,-20.30429],[32.772708,-19.715592],[32.611994,-19.419383],[32.654886,-18.67209],[32.849861,-17.979057],[32.847639,-16.713398],[32.328239,-16.392074],[31.852041,-16.319417],[31.636498,-16.07199],[31.173064,-15.860944],[30.338955,-15.880839],[30.274256,-15.507787]],\n      [[30.274256,-15.507787],[30.179481,-14.796099],[33.214025,-13.97186]],\n      [[33.214025,-13.97186],[33.7897,-14.451831],[34.064825,-14.35995],[34.459633,-14.61301],[34.517666,-15.013709],[34.307291,-15.478641],[34.381292,-16.18356],[35.03381,-16.8013],[35.339063,-16.10744],[35.771905,-15.896859],[35.686845,-14.611046],[35.267956,-13.887834],[34.907151,-13.565425],[34.559989,-13.579998],[34.280006,-12.280025],[34.559989,-11.52002]],\n      [[-12.17075,14.616834],[-12.830658,15.303692],[-13.435738,16.039383],[-14.099521,16.304302],[-14.577348,16.598264],[-15.135737,16.587282],[-15.623666,16.369337],[-16.12069,16.455663],[-16.463098,16.135036]],\n      [[-16.463098,16.135036],[-16.549708,16.673892],[-16.270552,17.166963],[-16.146347,18.108482],[-16.256883,19.096716],[-16.377651,19.593817],[-16.277838,20.092521],[-16.536324,20.567866],[-17.063423,20.999752]],\n      [[-17.063423,20.999752],[-16.845194,21.333323],[-12.929102,21.327071],[-13.118754,22.77122],[-12.874222,23.284832],[-11.937224,23.374594],[-11.969419,25.933353],[-8.687294,25.881056],[-8.6844,27.395744]],\n      [[33.214025,-13.97186],[32.688165,-13.712858],[32.991764,-12.783871],[33.306422,-12.435778],[33.114289,-11.607198],[33.31531,-10.79655],[33.485688,-10.525559],[33.231388,-9.676722],[32.759375,-9.230599]],\n      [[32.759375,-9.230599],[33.739729,-9.417151],[33.940838,-9.693674]],\n      [[33.940838,-9.693674],[34.280006,-10.16],[34.559989,-11.52002]],\n      [[102.141187,6.221636],[102.371147,6.128205],[102.961705,5.524495],[103.381215,4.855001],[103.438575,4.181606],[103.332122,3.726698],[103.429429,3.382869],[103.502448,2.791019],[103.854674,2.515454],[104.24920028287048,1.629873113952467],[104.28557629432274,1.373567897681572],[104.126080087493,1.27402861451777]],\n      [[104.126080087493,1.27402861451777],[103.74037541366759,1.131348126577838],[103.562828617596,1.19209804885879]],\n      [[103.562828617596,1.19209804885879],[102.573615,1.967115],[101.390638,2.760814],[101.27354,3.270292],[100.695435,3.93914],[100.557408,4.76728],[100.196706,5.312493],[100.30626,6.040562],[100.085757,6.464489]],\n      [[100.085757,6.464489],[100.259596,6.642825],[101.075516,6.204867],[101.154219,5.691384],[101.814282,5.810808],[102.141187,6.221636]],\n      [[109.66326,2.006467],[110.396135,1.663775],[111.168853,1.850637],[111.370081,2.697303],[111.796928,2.885897],[112.995615,3.102395],[113.712935,3.893509],[114.204017,4.525874]],\n      [[115.45071,5.44773],[116.220741,6.143191],[116.725103,6.924771],[117.129626,6.928053],[117.643393,6.422166],[117.689075,5.98749],[118.347691,5.708696],[119.181904,5.407836],[119.110694,5.016128],[118.439727,4.966519],[118.618321,4.478202],[117.882035,4.137551]],\n      [[16.344977,-28.576705],[15.601818,-27.821247],[15.210472,-27.090956],[14.989711,-26.117372],[14.743214,-25.39292],[14.408144,-23.853014],[14.385717,-22.656653],[14.257714,-22.111208],[13.868642,-21.699037],[13.352498,-20.872834],[12.826845,-19.673166],[12.608564,-19.045349],[11.794919,-18.069129],[11.734199,-17.301889]],\n      [[23.215048,-17.523116],[24.033862,-17.295843],[24.682349,-17.353411],[25.07695,-17.578823],[25.084443,-17.661816]],\n      [[19.895768,-24.76779],[19.894734,-28.461105],[19.002127,-28.972443],[18.464899,-29.045462],[17.836152,-28.856378],[17.387497,-28.783514],[17.218929,-28.355943],[16.824017,-28.082162],[16.344977,-28.576705]],\n      [[165.77999,-21.080005],[166.599991,-21.700019],[167.120011,-22.159991],[166.740035,-22.399976],[166.189732,-22.129708],[165.474375,-21.679607],[164.829815,-21.14982],[164.167995,-20.444747],[164.029606,-20.105646],[164.459967,-20.120012],[165.020036,-20.459991],[165.460009,-20.800022],[165.77999,-21.080005]],\n      [[14.8513,22.86295],[15.096888,21.308519]],\n      [[15.096888,21.308519],[15.471077,21.048457],[15.487148,20.730415]],\n      [[15.487148,20.730415],[15.903247,20.387619],[15.685741,19.95718],[15.300441,17.92795],[15.247731,16.627306]],\n      [[15.247731,16.627306],[13.972202,15.684366],[13.540394,14.367134]],\n      [[13.540394,14.367134],[13.956699,13.996691],[13.954477,13.353449],[14.595781,13.330427],[14.495787,12.859396]],\n      [[14.181336,12.483657],[13.995353,12.461565],[13.318702,13.556356],[13.083987,13.596147],[12.302071,13.037189],[11.527803,13.32898],[10.989593,13.387323],[10.701032,13.246918],[10.114814,13.277252],[9.524928,12.851102],[9.014933,12.826659],[7.804671,13.343527],[7.330747,13.098038],[6.820442,13.115091],[6.445426,13.492768],[5.443058,13.865924],[4.368344,13.747482],[4.107946,13.531216],[3.967283,12.956109],[3.680634,12.552903],[3.61118,11.660167]],\n      [[8.500288,4.771983],[7.462108,4.412108],[7.082596,4.464689],[6.698072,4.240594],[5.898173,4.262453],[5.362805,4.887971],[5.033574,5.611802],[4.325607,6.270651],[3.57418,6.2583],[2.691702,6.258817]],\n      [[-85.71254,11.088445],[-86.058488,11.403439],[-86.52585,11.806877],[-86.745992,12.143962],[-87.167516,12.458258],[-87.668493,12.90991],[-87.557467,13.064552],[-87.392386,12.914018],[-87.316654,12.984686]],\n      [[-83.147219,14.995829],[-83.233234,14.899866],[-83.284162,14.676624],[-83.182126,14.310703],[-83.4125,13.970078],[-83.519832,13.567699],[-83.552207,13.127054],[-83.498515,12.869292],[-83.473323,12.419087],[-83.626104,12.32085],[-83.719613,11.893124],[-83.650858,11.629032],[-83.85547,11.373311],[-83.808936,11.103044],[-83.655612,10.938764]],\n      [[4.047071,51.267259],[3.314971,51.345755],[3.830289,51.620545],[4.705997,53.091798],[6.074183,53.510403],[6.90514,53.482162]],\n      [[20.645593,69.106247],[20.025269,69.065139],[19.87856,68.407194],[17.993868,68.567391],[17.729182,68.010552],[16.768879,68.013937],[16.108712,67.302456],[15.108411,66.193867],[13.55569,64.787028],[13.919905,64.445421],[13.571916,64.049114],[12.579935,64.066219],[11.930569,63.128318],[11.992064,61.800362],[12.631147,61.293572],[12.300366,60.117933],[11.468272,59.432393],[11.027369,58.856149]],\n      [[11.027369,58.856149],[10.356557,59.469807],[8.382,58.313288],[7.048748,58.078884],[5.665835,58.588155],[5.308234,59.663232],[4.992078,61.970998],[5.9129,62.614473],[8.553411,63.454008],[10.527709,64.486038],[12.358347,65.879726],[14.761146,67.810642],[16.435927,68.563205],[19.184028,69.817444],[21.378416,70.255169],[23.023742,70.202072],[24.546543,71.030497],[26.37005,70.986262],[28.165547,71.185474],[31.293418,70.453788],[30.005435,70.186259],[31.101079,69.55808],[29.399581,69.156916],[28.59193,69.064777]],\n      [[24.72412,77.85385],[22.49032,77.44493],[20.72601,77.67704],[21.41611,77.93504],[20.8119,78.25463],[22.88426,78.45494],[23.28134,78.07954],[24.72412,77.85385]],\n      [[18.25183,79.70175],[21.54383,78.95611],[19.02737,78.5626],[18.47172,77.82669],[17.59441,77.63796],[17.1182,76.80941],[15.91315,76.77045],[13.76259,77.38035],[14.66956,77.73565],[13.1706,78.02493],[11.22231,78.8693],[10.44453,79.65239],[13.17077,80.01046],[13.71852,79.66039],[15.14282,79.67431],[15.52255,80.01608],[16.99085,80.05086],[18.25183,79.70175]],\n      [[25.447625,80.40734],[27.407506,80.056406],[25.924651,79.517834],[23.024466,79.400012],[20.075188,79.566823],[19.897266,79.842362],[18.462264,79.85988],[17.368015,80.318896],[20.455992,80.598156],[21.907945,80.357679],[22.919253,80.657144],[25.447625,80.40734]],\n      [[173.020375,-40.919052],[173.247234,-41.331999],[173.958405,-40.926701],[174.247587,-41.349155],[174.248517,-41.770008],[173.876447,-42.233184],[173.22274,-42.970038],[172.711246,-43.372288],[173.080113,-43.853344],[172.308584,-43.865694],[171.452925,-44.242519],[171.185138,-44.897104],[170.616697,-45.908929],[169.831422,-46.355775],[169.332331,-46.641235],[168.411354,-46.619945],[167.763745,-46.290197],[166.676886,-46.219917],[166.509144,-45.852705],[167.046424,-45.110941],[168.303763,-44.123973],[168.949409,-43.935819],[169.667815,-43.555326],[170.52492,-43.031688],[171.12509,-42.512754],[171.569714,-41.767424],[171.948709,-41.514417],[172.097227,-40.956104],[172.79858,-40.493962],[173.020375,-40.919052]],\n      [[174.612009,-36.156397],[175.336616,-37.209098],[175.357596,-36.526194],[175.808887,-36.798942],[175.95849,-37.555382],[176.763195,-37.881253],[177.438813,-37.961248],[178.010354,-37.579825],[178.517094,-37.695373],[178.274731,-38.582813],[177.97046,-39.166343],[177.206993,-39.145776],[176.939981,-39.449736],[177.032946,-39.879943],[176.885824,-40.065978],[176.508017,-40.604808],[176.01244,-41.289624],[175.239567,-41.688308],[175.067898,-41.425895],[174.650973,-41.281821],[175.22763,-40.459236],[174.900157,-39.908933],[173.824047,-39.508854],[173.852262,-39.146602],[174.574802,-38.797683],[174.743474,-38.027808],[174.697017,-37.381129],[174.292028,-36.711092],[174.319004,-36.534824],[173.840997,-36.121981],[173.054171,-35.237125],[172.636005,-34.529107],[173.007042,-34.450662],[173.551298,-35.006183],[174.32939,-35.265496],[174.612009,-36.156397]],\n      [[53.108573,16.651051],[52.782184,17.349742],[52.00001,19.000003]],\n      [[52.00001,19.000003],[54.999982,19.999994],[55.666659,22.000001],[55.208341,22.70833]],\n      [[56.396847,24.924732],[56.84514,24.241673],[57.403453,23.878594],[58.136948,23.747931],[58.729211,23.565668],[59.180502,22.992395],[59.450098,22.660271],[59.80806,22.533612],[59.806148,22.310525],[59.442191,21.714541],[59.282408,21.433886],[58.861141,21.114035],[58.487986,20.428986],[58.034318,20.481437],[57.826373,20.243002],[57.665762,19.736005],[57.7887,19.06757],[57.694391,18.94471],[57.234264,18.947991],[56.609651,18.574267],[56.512189,18.087113],[56.283521,17.876067],[55.661492,17.884128],[55.269939,17.632309],[55.2749,17.228354],[54.791002,16.950697],[54.239253,17.044981],[53.570508,16.707663],[53.108573,16.651051]],\n      [[56.070821,26.055464],[56.362017,26.395934],[56.485679,26.309118],[56.391421,25.895991],[56.261042,25.714606]],\n      [[68.176645,23.691965],[67.443667,23.944844],[67.145442,24.663611],[66.372828,25.425141],[64.530408,25.237039],[62.905701,25.218409],[61.497363,25.078237]],\n      [[-77.881571,7.223771],[-78.214936,7.512255],[-78.429161,8.052041],[-78.182096,8.319182],[-78.435465,8.387705],[-78.622121,8.718124],[-79.120307,8.996092],[-79.557877,8.932375],[-79.760578,8.584515],[-80.164481,8.333316],[-80.382659,8.298409],[-80.480689,8.090308],[-80.00369,7.547524],[-80.276671,7.419754],[-80.421158,7.271572],[-80.886401,7.220541],[-81.059543,7.817921],[-81.189716,7.647906],[-81.519515,7.70661],[-81.721311,8.108963],[-82.131441,8.175393],[-82.390934,8.292362],[-82.820081,8.290864],[-82.850958,8.073823],[-82.965783,8.225028]],\n      [[-82.546196,9.566135],[-82.187123,9.207449],[-82.207586,8.995575],[-81.808567,8.950617],[-81.714154,9.031955],[-81.439287,8.786234],[-80.947302,8.858504],[-80.521901,9.111072],[-79.9146,9.312765],[-79.573303,9.61161],[-79.021192,9.552931],[-79.05845,9.454565],[-78.500888,9.420459],[-78.055928,9.24773],[-77.729514,8.946844],[-77.353361,8.670505]],\n      [[-70.372572,-18.347975],[-71.37525,-17.773799],[-71.462041,-17.363488],[-73.44453,-16.359363],[-75.237883,-15.265683],[-76.009205,-14.649286],[-76.423469,-13.823187],[-76.259242,-13.535039],[-77.106192,-12.222716],[-78.092153,-10.377712],[-79.036953,-8.386568],[-79.44592,-7.930833],[-79.760578,-7.194341],[-80.537482,-6.541668],[-81.249996,-6.136834],[-80.926347,-5.690557],[-81.410943,-4.736765],[-81.09967,-4.036394],[-80.302561,-3.404856]],\n      [[126.376814,8.414706],[126.478513,7.750354],[126.537424,7.189381],[126.196773,6.274294],[125.831421,7.293715],[125.363852,6.786485],[125.683161,6.049657],[125.396512,5.581003],[124.219788,6.161355],[123.93872,6.885136],[124.243662,7.36061],[123.610212,7.833527],[123.296071,7.418876],[122.825506,7.457375],[122.085499,6.899424],[121.919928,7.192119],[122.312359,8.034962],[122.942398,8.316237],[123.487688,8.69301],[123.841154,8.240324],[124.60147,8.514158],[124.764612,8.960409],[125.471391,8.986997],[125.412118,9.760335],[126.222714,9.286074],[126.306637,8.782487],[126.376814,8.414706]],\n      [[123.982438,10.278779],[123.623183,9.950091],[123.309921,9.318269],[122.995883,9.022189],[122.380055,9.713361],[122.586089,9.981045],[122.837081,10.261157],[122.947411,10.881868],[123.49885,10.940624],[123.337774,10.267384],[124.077936,11.232726],[123.982438,10.278779]],\n      [[118.504581,9.316383],[117.174275,8.3675],[117.664477,9.066889],[118.386914,9.6845],[118.987342,10.376292],[119.511496,11.369668],[119.689677,10.554291],[119.029458,10.003653],[118.504581,9.316383]],\n      [[121.883548,11.891755],[122.483821,11.582187],[123.120217,11.58366],[123.100838,11.165934],[122.637714,10.741308],[122.00261,10.441017],[121.967367,10.905691],[122.03837,11.415841],[121.883548,11.891755]],\n      [[125.502552,12.162695],[125.783465,11.046122],[125.011884,11.311455],[125.032761,10.975816],[125.277449,10.358722],[124.801819,10.134679],[124.760168,10.837995],[124.459101,10.88993],[124.302522,11.495371],[124.891013,11.415583],[124.87799,11.79419],[124.266762,12.557761],[125.227116,12.535721],[125.502552,12.162695]],\n      [[121.527394,13.06959],[121.26219,12.20556],[120.833896,12.704496],[120.323436,13.466413],[121.180128,13.429697],[121.527394,13.06959]],\n      [[121.321308,18.504065],[121.937601,18.218552],[122.246006,18.47895],[122.336957,18.224883],[122.174279,17.810283],[122.515654,17.093505],[122.252311,16.262444],[121.662786,15.931018],[121.50507,15.124814],[121.728829,14.328376],[122.258925,14.218202],[122.701276,14.336541],[123.950295,13.782131],[123.855107,13.237771],[124.181289,12.997527],[124.077419,12.536677],[123.298035,13.027526],[122.928652,13.55292],[122.671355,13.185836],[122.03465,13.784482],[121.126385,13.636687],[120.628637,13.857656],[120.679384,14.271016],[120.991819,14.525393],[120.693336,14.756671],[120.564145,14.396279],[120.070429,14.970869],[119.920929,15.406347],[119.883773,16.363704],[120.286488,16.034629],[120.390047,17.599081],[120.715867,18.505227],[121.321308,18.504065]],\n      [[155.880026,-6.819997],[155.599991,-6.919991],[155.166994,-6.535931],[154.729192,-5.900828],[154.514114,-5.139118],[154.652504,-5.042431],[154.759991,-5.339984],[155.062918,-5.566792],[155.547746,-6.200655],[156.019965,-6.540014],[155.880026,-6.819997]],\n      [[151.982796,-5.478063],[151.459107,-5.56028],[151.30139,-5.840728],[150.754447,-6.083763],[150.241197,-6.317754],[149.709963,-6.316513],[148.890065,-6.02604],[148.318937,-5.747142],[148.401826,-5.437756],[149.298412,-5.583742],[149.845562,-5.505503],[149.99625,-5.026101],[150.139756,-5.001348],[150.236908,-5.53222],[150.807467,-5.455842],[151.089672,-5.113693],[151.647881,-4.757074],[151.537862,-4.167807],[152.136792,-4.14879],[152.338743,-4.312966],[152.318693,-4.867661],[151.982796,-5.478063]],\n      [[141.00021,-2.600151],[142.735247,-3.289153],[144.583971,-3.861418],[145.27318,-4.373738],[145.829786,-4.876498],[145.981922,-5.465609],[147.648073,-6.083659],[147.891108,-6.614015],[146.970905,-6.721657],[147.191874,-7.388024],[148.084636,-8.044108],[148.734105,-9.104664],[149.306835,-9.071436],[149.266631,-9.514406],[150.038728,-9.684318],[149.738798,-9.872937],[150.801628,-10.293687],[150.690575,-10.582713],[150.028393,-10.652476],[149.78231,-10.393267],[148.923138,-10.280923],[147.913018,-10.130441],[147.135443,-9.492444],[146.567881,-8.942555],[146.048481,-8.067414],[144.744168,-7.630128],[143.897088,-7.91533],[143.286376,-8.245491],[143.413913,-8.983069],[142.628431,-9.326821],[142.068259,-9.159596],[141.033852,-9.117893]],\n      [[153.140038,-4.499983],[152.827292,-4.766427],[152.638673,-4.176127],[152.406026,-3.789743],[151.953237,-3.462062],[151.384279,-3.035422],[150.66205,-2.741486],[150.939965,-2.500002],[151.479984,-2.779985],[151.820015,-2.999972],[152.239989,-3.240009],[152.640017,-3.659983],[153.019994,-3.980015],[153.140038,-4.499983]],\n      [[14.119686,53.757029],[14.8029,54.050706],[16.363477,54.513159],[17.622832,54.851536],[18.620859,54.682606],[18.696255,54.438719],[19.66064,54.426084]],\n      [[19.66064,54.426084],[20.892245,54.312525],[22.731099,54.327537]],\n      [[23.527071,51.578454],[24.029986,50.705407],[23.922757,50.424881],[23.426508,50.308506],[22.51845,49.476774],[22.776419,49.027395],[22.558138,49.085738]],\n      [[22.558138,49.085738],[21.607808,49.470107],[20.887955,49.328772],[20.415839,49.431453],[19.825023,49.217125],[19.320713,49.571574],[18.909575,49.435846],[18.853144,49.49623]],\n      [[-66.282434,18.514762],[-65.771303,18.426679],[-65.591004,18.228035],[-65.847164,17.975906],[-66.599934,17.981823],[-67.184162,17.946553],[-67.242428,18.37446],[-67.100679,18.520601],[-66.282434,18.514762]],\n      [[130.640016,42.395009],[130.780007,42.220007],[130.400031,42.280004],[129.965949,41.941368],[129.667362,41.601104],[129.705189,40.882828],[129.188115,40.661808],[129.0104,40.485436],[128.633368,40.189847],[127.967414,40.025413],[127.533436,39.75685],[127.50212,39.323931],[127.385434,39.213472],[127.783343,39.050898],[128.349716,38.612243]],\n      [[126.174759,37.749686],[125.689104,37.94001],[125.568439,37.752089],[125.27533,37.669071],[125.240087,37.857224],[124.981033,37.948821],[124.712161,38.108346],[124.985994,38.548474],[125.221949,38.665857],[125.132859,38.848559],[125.38659,39.387958],[125.321116,39.551385],[124.737482,39.660344],[124.265625,39.928493]],\n      [[-7.453726,37.097788],[-7.855613,36.838269],[-8.382816,36.97888],[-8.898857,36.868809],[-8.746101,37.651346],[-8.839998,38.266243],[-9.287464,38.358486],[-9.526571,38.737429],[-9.446989,39.392066],[-9.048305,39.755093],[-8.977353,40.159306],[-8.768684,40.760639],[-8.790853,41.184334],[-8.990789,41.543459],[-9.034818,41.880571]],\n      [[50.810108,24.754743],[50.743911,25.482424],[51.013352,26.006992],[51.286462,26.114582],[51.589079,25.801113],[51.6067,25.21567],[51.389608,24.627386]],\n      [[51.389608,24.627386],[51.112415,24.556331],[50.810108,24.754743]],\n      [[22.710531,47.882194],[23.142236,48.096341],[23.760958,47.985598],[24.402056,47.981878],[24.866317,47.737526],[25.207743,47.891056],[25.945941,47.987149],[26.19745,48.220881],[26.619337,48.220726]],\n      [[28.233554,45.488283],[28.679779,45.304031],[29.149725,45.464925],[29.603289,45.293308]],\n      [[29.603289,45.293308],[29.626543,45.035391],[29.141612,44.82021],[28.837858,44.913874],[28.558081,43.707462]],\n      [[22.65715,44.234923],[22.474008,44.409228],[22.705726,44.578003],[22.459022,44.702517],[22.145088,44.478422],[21.562023,44.768947],[21.483526,45.18117],[20.874313,45.416375],[20.762175,45.734573],[20.220192,46.127469]],\n      [[143.648007,50.7476],[144.654148,48.976391],[143.173928,49.306551],[142.558668,47.861575],[143.533492,46.836728],[143.505277,46.137908],[142.747701,46.740765],[142.09203,45.966755],[141.906925,46.805929],[142.018443,47.780133],[141.904445,48.859189],[142.1358,49.615163],[142.179983,50.952342],[141.594076,51.935435],[141.682546,53.301966],[142.606934,53.762145],[142.209749,54.225476],[142.654786,54.365881],[142.914616,53.704578],[143.260848,52.74076],[143.235268,51.75666],[143.648007,50.7476]],\n      [[19.66064,54.426084],[19.888481,54.86616],[21.268449,55.190482]],\n      [[-175.01425,66.58435],[-174.33983,66.33556],[-174.57182,67.06219],[-171.85731,66.91308],[-169.89958,65.97724],[-170.89107,65.54139],[-172.53025,65.43791],[-172.555,64.46079],[-172.95533,64.25269],[-173.89184,64.2826],[-174.65392,64.63125],[-175.98353,64.92288],[-176.20716,65.35667],[-177.22266,65.52024],[-178.35993,65.39052],[-178.90332,65.74044],[-178.68611,66.11211],[-179.88377,65.87456],[-179.43268,65.40411],[-180,64.979709],[-180,68.963636],[-177.55,68.2],[-174.92825,67.20589],[-175.01425,66.58435]],\n      [[180,70.832199],[178.903425,70.78114],[178.7253,71.0988],[180,71.515714],[180,70.832199]],\n      [[-178.69378,70.89302],[-180,70.832199],[-180,71.515714],[-179.871875,71.55762],[-179.02433,71.55553],[-177.577945,71.26948],[-177.663575,71.13277],[-178.69378,70.89302]],\n      [[143.60385,73.21244],[142.08763,73.20544],[140.038155,73.31692],[139.86312,73.36983],[140.81171,73.76506],[142.06207,73.85758],[143.48283,73.47525],[143.60385,73.21244]],\n      [[150.73167,75.08406],[149.575925,74.68892],[147.977465,74.778355],[146.11919,75.17298],[146.358485,75.49682],[148.22223,75.345845],[150.73167,75.08406]],\n      [[145.086285,75.562625],[144.3,74.82],[140.61381,74.84768],[138.95544,74.61148],[136.97439,75.26167],[137.51176,75.94917],[138.831075,76.13676],[141.471615,76.09289],[145.086285,75.562625]],\n      [[57.535693,70.720464],[56.944979,70.632743],[53.677375,70.762658],[53.412017,71.206662],[51.601895,71.474759],[51.455754,72.014881],[52.478275,72.229442],[52.444169,72.774731],[54.427614,73.627548],[53.50829,73.749814],[55.902459,74.627486],[55.631933,75.081412],[57.868644,75.60939],[61.170044,76.251883],[64.498368,76.439055],[66.210977,76.809782],[68.15706,76.939697],[68.852211,76.544811],[68.180573,76.233642],[64.637326,75.737755],[61.583508,75.260885],[58.477082,74.309056],[56.986786,73.333044],[55.419336,72.371268],[55.622838,71.540595],[57.535693,70.720464]],\n      [[131.288555,44.11152],[131.02519,44.96796],[131.883454,45.321162]],\n      [[131.883454,45.321162],[133.09712,45.14409],[133.769644,46.116927]],\n      [[133.769644,46.116927],[134.11235,47.21248],[134.50081,47.57845],[135.026311,48.47823]],\n      [[133.373596,48.183442],[132.50669,47.78896],[130.98726,47.79013],[130.582293,48.729687]],\n      [[129.397818,49.4406],[127.6574,49.76027],[127.287456,50.739797]],\n      [[125.068211,53.161045],[123.57147,53.4588],[122.245748,53.431726]],\n      [[120.725789,52.516226],[120.7382,51.96411],[120.18208,51.64355],[119.27939,50.58292],[119.288461,50.142883]],\n      [[105.886591,50.406019],[104.62158,50.27532],[103.676545,50.089966]],\n      [[103.676545,50.089966],[102.25589,50.51056],[102.06521,51.25991],[100.88948,51.516856]],\n      [[98.231762,50.422401],[97.25976,49.72605],[95.81402,49.97746],[94.815949,50.013433]],\n      [[94.147566,50.480537],[93.10421,50.49529],[92.234712,50.802171]],\n      [[76.8911,54.490524],[74.38482,53.54685],[73.425679,53.48981]],\n      [[68.1691,54.970392],[65.66687,54.60125],[65.178534,54.354228]],\n      [[65.178534,54.354228],[61.4366,54.00625],[60.978066,53.664993]],\n      [[59.642282,50.545442],[58.36332,51.06364],[56.77798,51.04355],[55.71694,50.62171],[54.532878,51.02624]],\n      [[46.466446,48.394152],[47.31524,47.71585],[48.05725,47.74377],[48.694734,47.075628]],\n      [[48.694734,47.075628],[48.59325,46.56104],[49.10116,46.39933]],\n      [[49.10116,46.39933],[48.64541,45.80629],[47.67591,45.64149],[46.68201,44.6092],[47.59094,43.66016],[47.49252,42.98658],[48.58437,41.80888],[47.987283,41.405819]],\n      [[46.404951,41.860675],[45.7764,42.09244],[45.470279,42.502781]],\n      [[44.537623,42.711993],[43.93121,42.55496],[43.75599,42.74083],[42.3944,43.2203],[40.92219,43.38215],[40.076965,43.553104]],\n      [[39.955009,43.434998],[38.68,44.28],[37.53912,44.65721],[36.67546,45.24469],[37.40317,45.40451],[38.23295,46.24087],[37.67372,46.63657],[39.14767,47.04475],[39.1212,47.26336],[38.223538,47.10219]],\n      [[38.223538,47.10219],[38.255112,47.5464]],\n      [[38.255112,47.5464],[38.77057,47.82562],[39.738278,47.898937]],\n      [[39.738278,47.898937],[39.89562,48.23241],[39.67465,48.78382],[40.080789,49.30743]],\n      [[40.080789,49.30743],[40.06904,49.60105],[38.594988,49.926462]],\n      [[38.594988,49.926462],[38.010631,49.915662],[37.39346,50.383953],[36.626168,50.225591],[35.356116,50.577197]],\n      [[35.356116,50.577197],[35.37791,50.77394],[35.022183,51.207572]],\n      [[35.022183,51.207572],[34.224816,51.255993],[34.141978,51.566413],[34.391731,51.768882],[33.7527,52.335075],[32.715761,52.238465],[32.412058,52.288695]],\n      [[32.412058,52.288695],[32.15944,52.06125],[31.78597,52.10168],[31.540018,52.742052]],\n      [[31.305201,53.073996],[31.49764,53.16743],[32.304519,53.132726]],\n      [[27.716686,57.791899],[27.42015,58.72457],[28.131699,59.300825]],\n      [[28.131699,59.300825],[27.98112,59.47537],[29.1177,60.02805],[28.07,60.50352],[30.211107,61.780028]],\n      [[28.59193,69.064777],[29.39955,69.15692],[31.10108,69.55811],[32.13272,69.90595],[33.77547,69.30142],[36.51396,69.06342],[40.29234,67.9324],[41.05987,67.45713],[41.12595,66.79158],[40.01583,66.26618],[38.38295,65.99953],[33.91871,66.75961],[33.18444,66.63253],[34.81477,65.90015],[34.878574,65.436213],[34.94391,64.41437],[36.23129,64.10945],[37.01273,63.84983],[37.14197,64.33471],[36.539579,64.76446],[37.17604,65.14322],[39.59345,64.52079],[40.4356,64.76446],[39.7626,65.49682],[42.09309,66.47623],[43.01604,66.41858],[43.94975,66.06908],[44.53226,66.75634],[43.69839,67.35245],[44.18795,67.95051],[43.45282,68.57079],[46.25,68.25],[46.82134,67.68997],[45.55517,67.56652],[45.56202,67.01005],[46.34915,66.66767],[47.89416,66.88455],[48.13876,67.52238],[50.22766,67.99867],[53.71743,68.85738],[54.47171,68.80815],[53.48582,68.20131],[54.72628,68.09702],[55.44268,68.43866],[57.31702,68.46628],[58.802,68.88082],[59.94142,68.27844],[61.07784,68.94069],[60.03,69.52],[60.55,69.85],[63.504,69.54739],[64.888115,69.234835],[68.51216,68.09233],[69.18068,68.61563],[68.16444,69.14436],[68.13522,69.35649],[66.93008,69.45461],[67.25976,69.92873],[66.72492,70.70889],[66.69466,71.02897],[68.54006,71.9345],[69.19636,72.84336],[69.94,73.04],[72.58754,72.77629],[72.79603,72.22006],[71.84811,71.40898],[72.47011,71.09019],[72.79188,70.39114],[72.5647,69.02085],[73.66787,68.4079],[73.2387,67.7404],[71.28,66.32],[72.42301,66.17267],[72.82077,66.53267],[73.92099,66.78946],[74.18651,67.28429],[75.052,67.76047],[74.46926,68.32899],[74.93584,68.98918],[73.84236,69.07146],[73.60187,69.62763],[74.3998,70.63175],[73.1011,71.44717],[74.89082,72.12119],[74.65926,72.83227],[75.15801,72.85497],[75.68351,72.30056],[75.28898,71.33556],[76.35911,71.15287],[75.90313,71.87401],[77.57665,72.26717],[79.65202,72.32011],[81.5,71.75],[80.61071,72.58285],[80.51109,73.6482],[82.25,73.85],[84.65526,73.80591],[86.8223,73.93688],[86.00956,74.45967],[87.16682,75.11643],[88.31571,75.14393],[90.26,75.64],[92.90058,75.77333],[93.23421,76.0472],[95.86,76.14],[96.67821,75.91548],[98.92254,76.44689],[100.75967,76.43028],[101.03532,76.86189],[101.99084,77.28754],[104.3516,77.69792],[106.06664,77.37389],[104.705,77.1274],[106.97013,76.97419],[107.24,76.48],[108.1538,76.72335],[111.07726,76.71],[113.33151,76.22224],[114.13417,75.84764],[113.88539,75.32779],[112.77918,75.03186],[110.15125,74.47673],[109.4,74.18],[110.64,74.04],[112.11919,73.78774],[113.01954,73.97693],[113.52958,73.33505],[113.96881,73.59488],[115.56782,73.75285],[118.77633,73.58772],[119.02,73.12],[123.20066,72.97122],[123.25777,73.73503],[125.38,73.56],[126.97644,73.56549],[128.59126,73.03871],[129.05157,72.39872],[128.46,71.98],[129.71599,71.19304],[131.28858,70.78699],[132.2535,71.8363],[133.85766,71.38642],[135.56193,71.65525],[137.49755,71.34763],[138.23409,71.62803],[139.86983,71.48783],[139.14791,72.41619],[140.46817,72.84941],[149.5,72.2],[150.35118,71.60643],[152.9689,70.84222],[157.00688,71.03141],[158.99779,70.86672],[159.83031,70.45324],[159.70866,69.72198],[160.94053,69.43728],[162.27907,69.64204],[164.05248,69.66823],[165.94037,69.47199],[167.83567,69.58269],[169.57763,68.6938],[170.81688,69.01363],[170.0082,69.65276],[170.45345,70.09703],[173.64391,69.81743],[175.72403,69.87725],[178.6,69.4],[180,68.963636],[180,64.979709],[179.99281,64.97433],[178.7072,64.53493],[177.41128,64.60821],[178.313,64.07593],[178.90825,63.25197],[179.37034,62.98262],[179.48636,62.56894],[179.22825,62.3041],[177.3643,62.5219],[174.56929,61.76915],[173.68013,61.65261],[172.15,60.95],[170.6985,60.33618],[170.33085,59.88177],[168.90046,60.57355],[166.29498,59.78855],[165.84,60.16],[164.87674,59.7316],[163.53929,59.86871],[163.21711,59.21101],[162.01733,58.24328],[162.05297,57.83912],[163.19191,57.61503],[163.05794,56.15924],[162.12958,56.12219],[161.70146,55.28568],[162.11749,54.85514],[160.36877,54.34433],[160.02173,53.20257],[158.53094,52.95868],[158.23118,51.94269],[156.78979,51.01105],[156.42,51.7],[155.99182,53.15895],[155.43366,55.38103],[155.91442,56.76792],[156.75815,57.3647],[156.81035,57.83204],[158.36433,58.05575],[160.15064,59.31477],[161.87204,60.343],[163.66969,61.1409],[164.47355,62.55061],[163.25842,62.46627],[162.65791,61.6425],[160.12148,60.54423],[159.30232,61.77396],[156.72068,61.43442],[154.21806,59.75818],[155.04375,59.14495],[152.81185,58.88385],[151.26573,58.78089],[151.33815,59.50396],[149.78371,59.65573],[148.54481,59.16448],[145.48722,59.33637],[142.19782,59.03998],[138.95848,57.08805],[135.12619,54.72959],[136.70171,54.60355],[137.19342,53.97732],[138.1647,53.75501],[138.80463,54.25455],[139.90151,54.18968],[141.34531,53.08957],[141.37923,52.23877],[140.59742,51.23967],[140.51308,50.04553],[140.06193,48.44671],[138.55472,46.99965],[138.21971,46.30795],[136.86232,45.1435],[135.51535,43.989],[134.86939,43.39821],[133.53687,42.81147],[132.90627,42.79849],[132.27807,43.28456],[130.93587,42.55274],[130.78,42.22],[130.64,42.395],[130.633866,42.903015]],\n      [[105.07547,78.30689],[99.43814,77.921],[101.2649,79.23399],[102.08635,79.34641],[102.837815,79.28129],[105.37243,78.71334],[105.07547,78.30689]],\n      [[51.136187,80.54728],[49.793685,80.415428],[48.894411,80.339567],[48.754937,80.175468],[47.586119,80.010181],[46.502826,80.247247],[47.072455,80.559424],[44.846958,80.58981],[46.799139,80.771918],[48.318477,80.78401],[48.522806,80.514569],[49.09719,80.753986],[50.039768,80.918885],[51.522933,80.699726],[51.136187,80.54728]],\n      [[99.93976,78.88094],[97.75794,78.7562],[94.97259,79.044745],[93.31288,79.4265],[92.5454,80.14379],[91.18107,80.34146],[93.77766,81.0246],[95.940895,81.2504],[97.88385,80.746975],[100.186655,79.780135],[99.93976,78.88094]],\n      [[30.419105,-1.134659],[30.816135,-1.698914],[30.758309,-2.28725]],\n      [[30.758309,-2.28725],[30.469696,-2.413858]],\n      [[29.579466,-1.341313],[29.821519,-1.443322],[30.419105,-1.134659]],\n      [[-17.063423,20.999752],[-17.021343423606428,21.413313149941047],[-16.975648775331546,21.891687698419226],[-16.58061690573147,22.164556507225765],[-16.26002753409497,22.681019518875157],[-16.326419672079705,23.016952258555825],[-15.985200461416207,23.727032109699284],[-15.426731727820668,24.361869528783902],[-15.090619655087165,24.520185930758263],[-14.825599019285237,25.104586394725832],[-14.798998208222914,25.636368397001075],[-14.436699125374576,26.254418099501397],[-13.775188821299968,26.62089094274117],[-13.411005014422669,27.201816644327014],[-13.264710152455724,27.443546935398597],[-13.0953665818028,27.6]],\n      [[42.779332,16.347891],[42.649573,16.774635],[42.347989,17.075806],[42.270888,17.474722],[41.754382,17.833046],[41.221391,18.6716],[40.939341,19.486485],[40.247652,20.174635],[39.801685,20.338862],[39.139399,21.291905],[39.023696,21.986875],[39.066329,22.579656],[38.492772,23.688451],[38.02386,24.078686],[37.483635,24.285495],[37.154818,24.858483],[37.209491,25.084542],[36.931627,25.602959],[36.639604,25.826228],[36.249137,26.570136],[35.640182,27.37652],[35.130187,28.063352],[34.632336,28.058546],[34.787779,28.607427],[34.83222,28.957483],[34.956037,29.356555]],\n      [[48.416094,28.552004],[48.807595,27.689628],[49.299554,27.461218],[49.470914,27.109999],[50.152422,26.689663],[50.212935,26.277027],[50.113303,25.943972],[50.239859,25.60805],[50.527387,25.327808],[50.660557,24.999896],[50.810108,24.754743]],\n      [[51.389608,24.627386],[51.579519,24.245497]],\n      [[52.00001,19.000003],[49.116672,18.616668],[48.183344,18.166669],[47.466695,17.116682],[47.000005,16.949999],[46.749994,17.283338],[46.366659,17.233315],[45.399999,17.333335],[45.216651,17.433329],[44.062613,17.410359],[43.791519,17.319977],[43.380794,17.579987],[43.115798,17.08844],[43.218375,16.66689],[42.779332,16.347891]],\n      [[33.963393,9.464285],[33.824963,9.484061],[33.842131,9.981915],[33.721959,10.325262],[33.206938,10.720112],[33.086766,11.441141],[33.206938,12.179338],[32.743419,12.248008],[32.67475,12.024832],[32.073892,11.97333],[32.314235,11.681484],[32.400072,11.080626],[31.850716,10.531271],[31.352862,9.810241],[30.837841,9.707237],[29.996639,10.290927],[29.618957,10.084919],[29.515953,9.793074],[29.000932,9.604232],[28.966597,9.398224],[27.97089,9.398224],[27.833551,9.604232],[27.112521,9.638567],[26.752006,9.466893],[26.477328,9.55273],[25.962307,10.136421],[25.790633,10.411099],[25.069604,10.27376],[24.794926,9.810241],[24.537415,8.917538],[24.194068,8.728696],[23.88698,8.61973]],\n      [[23.88698,8.61973],[23.805813,8.666319]],\n      [[22.864165,11.142395],[22.87622,11.38461],[22.50869,11.67936],[22.49762,12.26024],[22.28801,12.64605],[21.93681,12.58818],[22.03759,12.95546],[22.29658,13.37232],[22.18329,13.78648],[22.51202,14.09318],[22.30351,14.32682],[22.56795,14.94429],[23.02459,15.68072],[23.88689,15.61084],[23.83766,19.58047]],\n      [[36.86623,22],[37.18872,21.01885],[36.96941,20.83744],[37.1147,19.80796],[37.48179,18.61409],[37.86276,18.36786],[38.41009,17.998307]],\n      [[36.85253,16.95655],[36.75389,16.29186],[36.32322,14.82249],[36.42951,14.42211]],\n      [[33.96162,9.58358],[33.963393,9.464285]],\n      [[33.963393,9.464285],[33.97498,8.68456]],\n      [[34.005,4.249885],[33.39,3.79],[32.68642,3.79232],[31.88145,3.55827],[31.24556,3.7819],[30.83385,3.50917]],\n      [[30.83385,3.50917],[29.95349,4.1737],[29.715995,4.600805]],\n      [[24.567369,8.229188],[23.88698,8.61973]],\n      [[-16.713729,13.594959],[-17.126107,14.373516],[-17.625043,14.729541],[-17.185173,14.919477],[-16.700706,15.621527],[-16.463098,16.135036]],\n      [[-16.677452,12.384852],[-16.841525,13.151394]],\n      [[162.119025,-10.482719],[162.398646,-10.826367],[161.700032,-10.820011],[161.319797,-10.204751],[161.917383,-10.446701],[162.119025,-10.482719]],\n      [[160.852229,-9.872937],[160.462588,-9.89521],[159.849447,-9.794027],[159.640003,-9.63998],[159.702945,-9.24295],[160.362956,-9.400304],[160.688518,-9.610162],[160.852229,-9.872937]],\n      [[161.679982,-9.599982],[161.529397,-9.784312],[160.788253,-8.917543],[160.579997,-8.320009],[160.920028,-8.320009],[161.280006,-9.120011],[161.679982,-9.599982]],\n      [[159.875027,-8.33732],[159.917402,-8.53829],[159.133677,-8.114181],[158.586114,-7.754824],[158.21115,-7.421872],[158.359978,-7.320018],[158.820001,-7.560003],[159.640003,-8.020027],[159.875027,-8.33732]],\n      [[157.538426,-7.34782],[157.33942,-7.404767],[156.90203,-7.176874],[156.491358,-6.765943],[156.542828,-6.599338],[157.14,-7.021638],[157.538426,-7.34782]],\n      [[-11.438779,6.785917],[-11.708195,6.860098],[-12.428099,7.262942],[-12.949049,7.798646],[-13.124025,8.163946],[-13.24655,8.903049]],\n      [[-87.793111,13.38448],[-87.904112,13.149017],[-88.483302,13.163951],[-88.843228,13.259734],[-89.256743,13.458533],[-89.812394,13.520622],[-90.095555,13.735338]],\n      [[47.78942,8.003],[46.948328,7.996877],[43.67875,9.18358]],\n      [[43.67875,9.18358],[43.296975,9.540477],[42.92812,10.02194]],\n      [[43.145305,11.46204],[43.47066,11.27771],[43.666668,10.864169],[44.117804,10.445538],[44.614259,10.442205],[45.556941,10.698029],[46.645401,10.816549],[47.525658,11.127228],[48.021596,11.193064],[48.378784,11.375482],[48.948206,11.410622],[48.942005,11.394266],[48.948205,11.410617],[49.26776,11.43033],[49.72862,11.5789],[50.25878,11.67957],[50.73202,12.0219],[51.1112,12.02464],[51.13387,11.74815],[51.04153,11.16651],[51.04531,10.6409],[50.83418,10.27972],[50.55239,9.19874],[50.07092,8.08173],[49.4527,6.80466],[48.59455,5.33911],[47.74079,4.2194],[46.56476,2.85529],[45.56399,2.04576],[44.06815,1.05283],[43.13597,0.2922],[42.04157,-0.91916],[41.81095,-1.44647],[41.58513,-1.68325]],\n      [[19.36803,44.863],[19.00548,44.86023],[19.390476,45.236516]],\n      [[19.072769,45.521511],[18.82982,45.90888],[19.596045,46.17173]],\n      [[-57.147436,5.97315],[-55.949318,5.772878],[-55.84178,5.953125],[-55.03325,6.025291],[-53.958045,5.756548]],\n      [[-54.399542,4.212611],[-54.006931,3.620038],[-54.181726,3.18978],[-54.269705,2.732392],[-54.524754,2.311849]],\n      [[22.558138,49.085738],[22.280842,48.825392],[22.085608,48.422264]],\n      [[13.71506,45.500324],[13.93763,45.591016]],\n      [[23.903379,66.006927],[22.183173,65.723741],[21.213517,65.026005],[21.369631,64.413588],[19.778876,63.609554],[17.847779,62.7494],[17.119555,61.341166],[17.831346,60.636583],[18.787722,60.081914],[17.869225,58.953766],[16.829185,58.719827],[16.44771,57.041118],[15.879786,56.104302],[14.666681,56.200885],[14.100721,55.407781],[12.942911,55.361737],[12.625101,56.30708],[11.787942,57.441817],[11.027369,58.856149]],\n      [[32.071665,-26.73382],[31.86806,-27.177927],[31.282773,-27.285879],[30.685962,-26.743845],[30.676609,-26.398078],[30.949667,-26.022649],[31.04408,-25.731452],[31.333158,-25.660191],[31.837778,-25.843332]],\n      [[35.998403,34.644914],[35.905023,35.410009],[36.149763,35.821535]],\n      [[36.149763,35.821535],[36.41755,36.040617],[36.685389,36.259699],[36.739494,36.81752],[37.066761,36.623036],[38.167727,36.90121],[38.699891,36.712927],[39.52258,36.716054],[40.673259,37.091276],[41.212089,37.074352],[42.349591,37.229873]],\n      [[13.540394,14.367134],[13.97217,15.68437],[15.247731,16.627306]],\n      [[15.487148,20.730415],[15.47106,21.04845],[15.096888,21.308519]],\n      [[14.960152,11.555574],[14.89336,12.21905],[14.495787,12.859396]],\n      [[1.865241,6.142158],[1.060122,5.928837]],\n      [[102.584932,12.186595],[101.687158,12.64574],[100.83181,12.627085],[100.978467,13.412722],[100.097797,13.406856],[100.018733,12.307001],[99.478921,10.846367],[99.153772,9.963061],[99.222399,9.239255],[99.873832,9.207862],[100.279647,8.295153],[100.459274,7.429573],[101.017328,6.856869],[101.623079,6.740622],[102.141187,6.221636]],\n      [[100.085757,6.464489],[99.690691,6.848213],[99.519642,7.343454],[98.988253,7.907993],[98.503786,8.382305],[98.339662,7.794512],[98.150009,8.350007],[98.25915,8.973923],[98.553551,9.93296]],\n      [[67.83,37.144994],[68.392033,38.157025],[68.176025,38.901553],[67.44222,39.140144],[67.701429,39.580478],[68.536416,39.533453],[69.011633,40.086158],[69.329495,40.727824],[70.666622,40.960213],[70.45816,40.496495],[70.601407,40.218527],[71.014198,40.244366]],\n      [[53.921598,37.198918],[53.735511,37.906136],[53.880929,38.952093],[53.101028,39.290574],[53.357808,39.975286],[52.693973,40.033629],[52.915251,40.876523],[53.858139,40.631034],[54.736845,40.951015],[54.008311,41.551211],[53.721713,42.123191],[52.91675,41.868117],[52.814689,41.135371],[52.50246,41.783316]],\n      [[55.968191,41.308642],[57.096391,41.32231],[56.932215,41.826026],[57.78653,42.170553],[58.629011,42.751551],[59.976422,42.223082],[60.083341,41.425146],[60.465953,41.220327],[61.547179,41.26637],[61.882714,41.084857],[62.37426,40.053886],[63.518015,39.363257],[64.170223,38.892407],[65.215999,38.402695],[66.54615,37.974685],[66.518607,37.362784]],\n      [[124.968682,-8.89279],[125.086246,-8.656887],[125.947072,-8.432095],[126.644704,-8.398247],[126.957243,-8.273345],[127.335928,-8.397317],[126.967992,-8.668256],[125.925885,-9.106007],[125.08852,-9.393173]],\n      [[-61.68,10.76],[-61.105,10.89],[-60.895,10.855],[-60.935,10.11],[-61.77,10],[-61.95,10.09],[-61.66,10.365],[-61.68,10.76]],\n      [[8.420964,36.946427],[9.509994,37.349994],[10.210002,37.230002],[10.18065,36.724038],[11.028867,37.092103],[11.100026,36.899996],[10.600005,36.41],[10.593287,35.947444],[10.939519,35.698984],[10.807847,34.833507],[10.149593,34.330773],[10.339659,33.785742],[10.856836,33.76874],[11.108501,33.293343],[11.488787,33.136996]],\n      [[44.225756,37.971584],[44.772699,37.170445]],\n      [[36.149763,35.821535],[35.782085,36.274995],[36.160822,36.650606],[35.550936,36.565443],[34.714553,36.795532],[34.026895,36.21996],[32.509158,36.107564],[31.699595,36.644275],[30.621625,36.677865],[30.391096,36.262981],[29.699976,36.144357],[28.732903,36.676831],[27.641187,36.658822],[27.048768,37.653361],[26.318218,38.208133],[26.8047,38.98576],[26.170785,39.463612],[27.28002,40.420014],[28.819978,40.460011],[29.240004,41.219991],[31.145934,41.087622],[32.347979,41.736264],[33.513283,42.01896],[35.167704,42.040225],[36.913127,41.335358],[38.347665,40.948586],[39.512607,41.102763],[40.373433,41.013673],[41.554084,41.535656]],\n      [[27.99672,42.007359],[28.115525,41.622886],[28.988443,41.299934],[28.806438,41.054962],[27.619017,40.999823],[27.192377,40.690566],[26.358009,40.151994],[26.043351,40.617754],[26.056942,40.824123]],\n      [[121.777818,24.394274],[121.175632,22.790857],[120.74708,21.970571],[120.220083,22.814861],[120.106189,23.556263],[120.69468,24.538451],[121.495044,25.295459],[121.951244,24.997596],[121.777818,24.394274]],\n      [[39.20222,-4.67677],[38.74054,-5.90895],[38.79977,-6.47566],[39.44,-6.84],[39.47,-7.1],[39.19469,-7.7039],[39.25203,-8.00781],[39.18652,-8.48551],[39.53574,-9.11237],[39.9496,-10.0984],[40.31659,-10.3171],[39.521,-10.89688],[38.427557,-11.285202]],\n      [[38.427557,-11.285202],[37.82764,-11.26879],[37.47129,-11.56876],[36.775151,-11.594537]],\n      [[34.559989,-11.52002],[34.28,-10.16],[33.940838,-9.693674]],\n      [[33.940838,-9.693674],[33.73972,-9.41715],[32.759375,-9.230599]],\n      [[32.759375,-9.230599],[32.191865,-8.930359],[31.556348,-8.762049],[31.157751,-8.594579]],\n      [[31.157751,-8.594579],[30.74,-8.34],[30.2,-7.08],[29.62,-6.52],[29.419993,-5.939999]],\n      [[29.753512,-4.452389],[30.11632,-4.09012],[30.50554,-3.56858],[30.75224,-3.35931],[30.74301,-3.03431],[30.52766,-2.80762],[30.46967,-2.41383],[30.758309,-2.28725]],\n      [[30.419105,-1.134659],[30.76986,-1.01455],[31.86617,-1.02736],[33.903711,-0.95]],\n      [[29.587838,-0.587406],[29.8195,-0.2053],[29.875779,0.59738]],\n      [[31.174149,2.204465],[30.77332,2.33989],[30.83385,3.50917]],\n      [[31.785998,52.101678],[32.159412,52.061267],[32.412058,52.288695]],\n      [[35.022183,51.207572],[35.377924,50.773955],[35.356116,50.577197]],\n      [[38.594988,49.926462],[40.069058,49.601055],[40.080789,49.30743]],\n      [[40.080789,49.30743],[39.674664,48.783818],[39.895632,48.232405],[39.738278,47.898937]],\n      [[39.738278,47.898937],[38.770585,47.825608],[38.255112,47.5464]],\n      [[38.223538,47.10219],[37.425137,47.022221],[36.759855,46.6987],[35.823685,46.645964],[34.962342,46.273197],[35.020788,45.651219],[35.510009,45.409993],[36.529998,45.46999],[36.334713,45.113216],[35.239999,44.939996],[33.882511,44.361479],[33.326421,44.564877],[33.546924,45.034771],[32.454174,45.327466],[32.630804,45.519186],[33.588162,45.851569],[33.298567,46.080598],[31.74414,46.333348],[31.675307,46.706245],[30.748749,46.5831],[30.377609,46.03241],[29.603289,45.293308]],\n      [[-53.373662,-33.768378],[-53.806426,-34.396815],[-54.935866,-34.952647],[-55.67409,-34.752659],[-56.215297,-34.859836],[-57.139685,-34.430456],[-57.817861,-34.462547],[-58.427074,-33.909454]],\n      [[-155.54211,19.08348],[-155.68817,18.91619],[-155.93665,19.05939],[-155.90806,19.33888],[-156.07347,19.70294],[-156.02368,19.81422],[-155.85008,19.97729],[-155.91907,20.17395],[-155.86108,20.26721],[-155.78505,20.2487],[-155.40214,20.07975],[-155.22452,19.99302],[-155.06226,19.8591],[-154.80741,19.50871],[-154.83147,19.45328],[-155.22217,19.23972],[-155.54211,19.08348]],\n      [[-156.07926,20.64397],[-156.41445,20.57241],[-156.58673,20.783],[-156.70167,20.8643],[-156.71055,20.92676],[-156.61258,21.01249],[-156.25711,20.91745],[-155.99566,20.76404],[-156.07926,20.64397]],\n      [[-156.75824,21.17684],[-156.78933,21.06873],[-157.32521,21.09777],[-157.25027,21.21958],[-156.75824,21.17684]],\n      [[-157.65283,21.32217],[-157.70703,21.26442],[-157.7786,21.27729],[-158.12667,21.31244],[-158.2538,21.53919],[-158.29265,21.57912],[-158.0252,21.71696],[-157.94161,21.65272],[-157.65283,21.32217]],\n      [[-159.34512,21.982],[-159.46372,21.88299],[-159.80051,22.06533],[-159.74877,22.1382],[-159.5962,22.23618],[-159.36569,22.21494],[-159.34512,21.982]],\n      [[-67.13741,45.13753],[-66.96466,44.8097],[-68.03252,44.3252],[-69.06,43.98],[-70.11617,43.68405],[-70.645476,43.090238],[-70.81489,42.8653],[-70.825,42.335],[-70.495,41.805],[-70.08,41.78],[-70.185,42.145],[-69.88497,41.92283],[-69.96503,41.63717],[-70.64,41.475],[-71.12039,41.49445],[-71.86,41.32],[-72.295,41.27],[-72.87643,41.22065],[-73.71,40.931102],[-72.24126,41.11948],[-71.945,40.93],[-73.345,40.63],[-73.982,40.628],[-73.952325,40.75075],[-74.25671,40.47351],[-73.96244,40.42763],[-74.17838,39.70926],[-74.90604,38.93954],[-74.98041,39.1964],[-75.20002,39.24845],[-75.52805,39.4985],[-75.32,38.96],[-75.071835,38.782032],[-75.05673,38.40412],[-75.37747,38.01551],[-75.94023,37.21689],[-76.03127,37.2566],[-75.72205,37.93705],[-76.23287,38.319215],[-76.35,39.15],[-76.542725,38.717615],[-76.32933,38.08326],[-76.989998,38.239992],[-76.30162,37.917945],[-76.25874,36.9664],[-75.9718,36.89726],[-75.86804,36.55125],[-75.72749,35.55074],[-76.36318,34.80854],[-77.397635,34.51201],[-78.05496,33.92547],[-78.55435,33.86133],[-79.06067,33.49395],[-79.20357,33.15839],[-80.301325,32.509355],[-80.86498,32.0333],[-81.33629,31.44049],[-81.49042,30.72999],[-81.31371,30.03552],[-80.98,29.18],[-80.535585,28.47213],[-80.53,28.04],[-80.056539,26.88],[-80.088015,26.205765],[-80.13156,25.816775],[-80.38103,25.20616],[-80.68,25.08],[-81.17213,25.20126],[-81.33,25.64],[-81.71,25.87],[-82.24,26.73],[-82.70515,27.49504],[-82.85526,27.88624],[-82.65,28.55],[-82.93,29.1],[-83.70959,29.93656],[-84.1,30.09],[-85.10882,29.63615],[-85.28784,29.68612],[-85.7731,30.15261],[-86.4,30.4],[-87.53036,30.27433],[-88.41782,30.3849],[-89.18049,30.31598],[-89.593831,30.159994],[-89.413735,29.89419],[-89.43,29.48864],[-89.21767,29.29108],[-89.40823,29.15961],[-89.77928,29.30714],[-90.15463,29.11743],[-90.880225,29.148535],[-91.626785,29.677],[-92.49906,29.5523],[-93.22637,29.78375],[-93.84842,29.71363],[-94.69,29.48],[-95.60026,28.73863],[-96.59404,28.30748],[-97.14,27.83],[-97.37,27.38],[-97.38,26.69],[-97.33,26.21],[-97.14,25.87],[-97.53,25.84]],\n      [[-117.12776,32.53534],[-117.295938,33.046225],[-117.944,33.621236],[-118.410602,33.740909],[-118.519895,34.027782],[-119.081,34.078],[-119.438841,34.348477],[-120.36778,34.44711],[-120.62286,34.60855],[-120.74433,35.15686],[-121.71457,36.16153],[-122.54747,37.55176],[-122.51201,37.78339],[-122.95319,38.11371],[-123.7272,38.95166],[-123.86517,39.76699],[-124.39807,40.3132],[-124.17886,41.14202],[-124.2137,41.99964],[-124.53284,42.76599],[-124.14214,43.70838],[-124.020535,44.615895],[-123.89893,45.52341],[-124.079635,46.86475],[-124.39567,47.72017],[-124.68721,48.184433],[-124.566101,48.379715],[-123.12,48.04],[-122.58736,47.096],[-122.34,47.36],[-122.5,48.18],[-122.84,49]],\n      [[-153.006314,57.115842],[-154.00509,56.734677],[-154.516403,56.992749],[-154.670993,57.461196],[-153.76278,57.816575],[-153.228729,57.968968],[-152.564791,57.901427],[-152.141147,57.591059],[-153.006314,57.115842]],\n      [[-165.579164,59.909987],[-166.19277,59.754441],[-166.848337,59.941406],[-167.455277,60.213069],[-166.467792,60.38417],[-165.67443,60.293607],[-165.579164,59.909987]],\n      [[-171.731657,63.782515],[-171.114434,63.592191],[-170.491112,63.694975],[-169.682505,63.431116],[-168.689439,63.297506],[-168.771941,63.188598],[-169.52944,62.976931],[-170.290556,63.194438],[-170.671386,63.375822],[-171.553063,63.317789],[-171.791111,63.405846],[-171.731657,63.782515]],\n      [[-134.27111,58.86111],[-133.355549,58.410285],[-132.73042,57.69289]],\n      [[-130.00778,55.91583],[-129.979994,55.284998],[-130.53611,54.802753],[-131.085818,55.178906],[-131.967211,55.497776],[-132.250011,56.369996],[-133.539181,57.178887],[-134.078063,58.123068],[-135.038211,58.187715],[-136.628062,58.212209],[-137.800006,58.499995],[-139.867787,59.537762],[-140.825274,59.727517],[-142.574444,60.084447],[-143.958881,59.99918],[-145.925557,60.45861],[-147.114374,60.884656],[-148.224306,60.672989],[-148.018066,59.978329],[-148.570823,59.914173],[-149.727858,59.705658],[-150.608243,59.368211],[-151.716393,59.155821],[-151.859433,59.744984],[-151.409719,60.725803],[-150.346941,61.033588],[-150.621111,61.284425],[-151.895839,60.727198],[-152.57833,60.061657],[-154.019172,59.350279],[-153.287511,58.864728],[-154.232492,58.146374],[-155.307491,57.727795],[-156.308335,57.422774],[-156.556097,56.979985],[-158.117217,56.463608],[-158.433321,55.994154],[-159.603327,55.566686],[-160.28972,55.643581],[-161.223048,55.364735],[-162.237766,55.024187],[-163.069447,54.689737],[-164.785569,54.404173],[-164.942226,54.572225],[-163.84834,55.039431],[-162.870001,55.348043],[-161.804175,55.894986],[-160.563605,56.008055],[-160.07056,56.418055],[-158.684443,57.016675],[-158.461097,57.216921],[-157.72277,57.570001],[-157.550274,58.328326],[-157.041675,58.918885],[-158.194731,58.615802],[-158.517218,58.787781],[-159.058606,58.424186],[-159.711667,58.93139],[-159.981289,58.572549],[-160.355271,59.071123],[-161.355003,58.670838],[-161.968894,58.671665],[-162.054987,59.266925],[-161.874171,59.633621],[-162.518059,59.989724],[-163.818341,59.798056],[-164.662218,60.267484],[-165.346388,60.507496],[-165.350832,61.073895],[-166.121379,61.500019],[-165.734452,62.074997],[-164.919179,62.633076],[-164.562508,63.146378],[-163.753332,63.219449],[-163.067224,63.059459],[-162.260555,63.541936],[-161.53445,63.455817],[-160.772507,63.766108],[-160.958335,64.222799],[-161.518068,64.402788],[-160.777778,64.788604],[-161.391926,64.777235],[-162.45305,64.559445],[-162.757786,64.338605],[-163.546394,64.55916],[-164.96083,64.446945],[-166.425288,64.686672],[-166.845004,65.088896],[-168.11056,65.669997],[-166.705271,66.088318],[-164.47471,66.57666],[-163.652512,66.57666],[-163.788602,66.077207],[-161.677774,66.11612],[-162.489715,66.735565],[-163.719717,67.116395],[-164.430991,67.616338],[-165.390287,68.042772],[-166.764441,68.358877],[-166.204707,68.883031],[-164.430811,68.915535],[-163.168614,69.371115],[-162.930566,69.858062],[-161.908897,70.33333],[-160.934797,70.44769],[-159.039176,70.891642],[-158.119723,70.824721],[-156.580825,71.357764],[-155.06779,71.147776],[-154.344165,70.696409],[-153.900006,70.889989],[-152.210006,70.829992],[-152.270002,70.600006],[-150.739992,70.430017],[-149.720003,70.53001],[-147.613362,70.214035],[-145.68999,70.12001],[-144.920011,69.989992],[-143.589446,70.152514],[-142.07251,69.851938],[-140.985988,69.711998],[-140.985988,69.711998],[-140.992499,66.000029],[-140.99777,60.306397],[-140.012998,60.276838],[-139.039,60.000007],[-138.34089,59.56211]],\n      [[-71.331584,11.776284],[-71.360006,11.539994],[-71.94705,11.423282],[-71.620868,10.96946],[-71.633064,10.446494],[-72.074174,9.865651],[-71.695644,9.072263],[-71.264559,9.137195],[-71.039999,9.859993],[-71.350084,10.211935],[-71.400623,10.968969],[-70.155299,11.375482],[-70.293843,11.846822],[-69.943245,12.162307],[-69.5843,11.459611],[-68.882999,11.443385],[-68.233271,10.885744],[-68.194127,10.554653],[-67.296249,10.545868],[-66.227864,10.648627],[-65.655238,10.200799],[-64.890452,10.077215],[-64.329479,10.389599],[-64.318007,10.641418],[-63.079322,10.701724],[-61.880946,10.715625],[-62.730119,10.420269],[-62.388512,9.948204],[-61.588767,9.873067],[-60.830597,9.38134],[-60.671252,8.580174],[-60.150096,8.602757],[-59.758285,8.367035]],\n      [[108.05018,21.55238],[106.715068,20.696851],[105.881682,19.75205],[105.662006,19.058165],[106.426817,18.004121],[107.361954,16.697457],[108.269495,16.079742],[108.877107,15.276691],[109.33527,13.426028],[109.200136,11.666859],[108.36613,11.008321],[107.220929,10.364484],[106.405113,9.53084],[105.158264,8.59976],[104.795185,9.241038],[105.076202,9.918491],[104.334335,10.486544]],\n      [[167.844877,-16.466333],[167.515181,-16.59785],[167.180008,-16.159995],[167.216801,-15.891846],[167.844877,-16.466333]],\n      [[167.107712,-14.93392],[167.270028,-15.740021],[167.001207,-15.614602],[166.793158,-15.668811],[166.649859,-15.392704],[166.629137,-14.626497],[167.107712,-14.93392]],\n      [[34.265433,31.219361],[34.488107,31.605539]],\n      [[53.108573,16.651051],[52.385206,16.382411],[52.191729,15.938433],[52.168165,15.59742],[51.172515,15.17525],[49.574576,14.708767],[48.679231,14.003202],[48.238947,13.94809],[47.938914,14.007233],[47.354454,13.59222],[46.717076,13.399699],[45.877593,13.347764],[45.62505,13.290946],[45.406459,13.026905],[45.144356,12.953938],[44.989533,12.699587],[44.494576,12.721653],[44.175113,12.58595],[43.482959,12.6368],[43.222871,13.22095],[43.251448,13.767584],[43.087944,14.06263],[42.892245,14.802249],[42.604873,15.213335],[42.805015,15.261963],[42.702438,15.718886],[42.823671,15.911742],[42.779332,16.347891]],\n      [[29.432188,-22.091313],[29.839037,-22.102216],[30.322883,-22.271612],[30.659865,-22.151567],[31.191409,-22.25151]],\n      [[32.83012,-26.742192],[32.580265,-27.470158],[32.462133,-28.301011],[32.203389,-28.752405],[31.521001,-29.257387],[31.325561,-29.401978],[30.901763,-29.909957],[30.622813,-30.423776],[30.055716,-31.140269],[28.925553,-32.172041],[28.219756,-32.771953],[27.464608,-33.226964],[26.419452,-33.61495],[25.909664,-33.66704],[25.780628,-33.944646],[25.172862,-33.796851],[24.677853,-33.987176],[23.594043,-33.794474],[22.988189,-33.916431],[22.574157,-33.864083],[21.542799,-34.258839],[20.689053,-34.417175],[20.071261,-34.795137],[19.616405,-34.819166],[19.193278,-34.462599],[18.855315,-34.444306],[18.424643,-33.997873],[18.377411,-34.136521],[18.244499,-33.867752],[18.25008,-33.281431],[17.92519,-32.611291],[18.24791,-32.429131],[18.221762,-31.661633],[17.566918,-30.725721],[17.064416,-29.878641],[17.062918,-29.875954],[16.344977,-28.576705]],\n      [[30.274256,-15.507787],[29.516834,-15.644678],[28.947463,-16.043051],[28.825869,-16.389749],[28.467906,-16.4684],[27.598243,-17.290831],[27.044427,-17.938026],[26.706773,-17.961229],[26.381935,-17.846042],[25.264226,-17.73654]],\n      [[30.740015,-8.340007],[31.157751,-8.594579]],\n      [[-24.320432043204306,14.84771426361388],[-24.3924392439244,14.812991084264695],[-24.464446444644466,14.830352673939288],[-24.53645364536453,14.917160622312252],[-24.5004500450045,14.969245391336017],[-24.3924392439244,15.021330160359796],[-24.35643564356434,15.003968570685203],[-24.320432043204306,14.917160622312252],[-24.320432043204306,14.84771426361388]],\n      [[-23.204320432043204,15.125499698407353],[-23.240324032403237,15.125499698407353],[-23.27632763276327,15.177584467431132],[-23.27632763276327,15.247030826129503],[-23.240324032403237,15.316477184827875],[-23.16831683168317,15.316477184827875],[-23.13231323132314,15.264392415804096],[-23.13231323132314,15.160222877756539],[-23.204320432043204,15.125499698407353]],\n      [[-23.456345634563462,15.003968570685203],[-23.528352835283528,14.89979903263766],[-23.67236723672366,14.917160622312252],[-23.81638163816382,15.073414929383574],[-23.81638163816382,15.160222877756539],[-23.780378037803786,15.22966923645491],[-23.780378037803786,15.316477184827875],[-23.70837083708369,15.316477184827875],[-23.70837083708369,15.264392415804096],[-23.56435643564356,15.125499698407353],[-23.456345634563462,15.003968570685203]],\n      [[-22.952295229522946,16.23664143758127],[-22.844284428442847,16.201918258232084],[-22.772277227722753,16.219279847906677],[-22.700270027002688,16.167195078882898],[-22.700270027002688,16.09774872018454],[-22.73627362736272,16.02830236148617],[-22.844284428442847,15.97621759246239],[-22.916291629162913,15.97621759246239],[-22.98829882988298,16.02830236148617],[-22.916291629162913,16.132471899533712],[-22.952295229522946,16.23664143758127]],\n      [[-24.10441044104411,16.618596410422313],[-24.068406840684077,16.566511641398534],[-24.10441044104411,16.54915005172394],[-24.24842484248424,16.583873231073127],[-24.284428442844273,16.566511641398534],[-24.35643564356434,16.47970369302557],[-24.428442844284433,16.60123482074772],[-24.428442844284433,16.6533195897715],[-24.3924392439244,16.670681179446078],[-24.284428442844273,16.635958000096906],[-24.10441044104411,16.618596410422313]],\n      [[-22.916291629162913,16.6533195897715],[-22.952295229522946,16.60123482074772],[-22.98829882988298,16.670681179446078],[-23.02430243024301,16.792212307168228],[-22.952295229522946,16.826935486517414],[-22.916291629162913,16.826935486517414],[-22.916291629162913,16.6533195897715]],\n      [[-24.896489648964888,16.80957389684282],[-25.040504050405048,16.792212307168228],[-25.112511251125113,16.826935486517414],[-25.07650765076508,16.8616586658666],[-24.968496849684954,16.913743434890378],[-24.896489648964888,16.844297076192007],[-24.896489648964888,16.80957389684282]],\n      [[-25.18451845184518,16.93110502456497],[-25.292529252925277,16.913743434890378],[-25.32853285328531,16.93110502456497],[-25.32853285328531,17.000551383263343],[-25.36453645364537,17.05263615228712],[-25.36453645364537,17.087359331636307],[-25.148514851485146,17.191528869683864],[-25.040504050405048,17.17416728000927],[-25.004500450044986,17.087359331636307],[-25.040504050405048,17.03527456261253],[-25.18451845184518,16.93110502456497]],\n      [[43.762376237623755,-12.323173577123328],[43.65436543654366,-12.357896756472499],[43.618361836183624,-12.288450397774142],[43.618361836183624,-12.253727218424956],[43.69036903690369,-12.271088808099549],[43.762376237623755,-12.323173577123328]],\n      [[44.446444644464464,-12.09747291135362],[44.51845184518453,-12.236365628750363],[44.51845184518453,-12.34053516679792],[44.482448244824496,-12.357896756472499],[44.446444644464464,-12.34053516679792],[44.37443744374437,-12.253727218424956],[44.194419441944206,-12.184280859726584],[44.26642664266427,-12.166919270051991],[44.302430243024304,-12.184280859726584],[44.37443744374437,-12.166919270051991],[44.37443744374437,-12.132196090702806],[44.41044104410443,-12.09747291135362],[44.446444644464464,-12.09747291135362]],\n      [[43.43834383438343,-11.906495424933098],[43.43834383438343,-11.923857014607691],[43.2943294329433,-11.85441065590932],[43.222322232223235,-11.76760270753637],[43.222322232223235,-11.437732503719104],[43.25832583258327,-11.403009324369918],[43.33033303330333,-11.385647734695326],[43.366336633663366,-11.420370914044511],[43.366336633663366,-11.628709990139626],[43.43834383438343,-11.76760270753637],[43.47434743474349,-11.871772245583912],[43.43834383438343,-11.906495424933098]],\n      [[57.623762376237636,-20.500482313856367],[57.51575157515751,-20.51784390353096],[57.37173717371738,-20.51784390353096],[57.29972997299731,-20.46575913450718],[57.335733573357345,-20.413674365483402],[57.335733573357345,-20.34422800678503],[57.37173717371738,-20.240058468737487],[57.40774077407741,-20.18797369971371],[57.479747974797476,-20.153250520364523],[57.479747974797476,-20.06644257199156],[57.55175517551757,-20.01435780296778],[57.623762376237636,-19.996996213293187],[57.731773177317734,-20.101165751340744],[57.76777677767777,-20.222696879062894],[57.76777677767777,-20.34422800678503],[57.6957695769577,-20.378951186134216],[57.6957695769577,-20.448397544832588],[57.623762376237636,-20.500482313856367]],\n      [[55.535553555355534,-4.701435709977233],[55.535553555355534,-4.788243658350197],[55.46354635463547,-4.770882068675604],[55.46354635463547,-4.701435709977233],[55.3915391539154,-4.666712530628047],[55.35553555355537,-4.614627761604268],[55.427542754275436,-4.5625429925804895],[55.535553555355534,-4.701435709977233]],\n      [[50.60306030603061,25.872323706980083],[50.56705670567058,25.80287734828171],[50.53105310531055,25.820238937956304],[50.459045904590454,25.959131655353048],[50.459045904590454,26.045939603726012],[50.42304230423042,26.184832321122755],[50.459045904590454,26.21955550047194],[50.56705670567058,26.236917090146534],[50.53105310531055,26.184832321122755],[50.60306030603061,26.115385962424384],[50.60306030603061,25.872323706980083]],\n      [[73.3933393339334,3.2154491816369273],[73.35733573357336,3.23281077131152],[73.35733573357336,3.267533950660706],[73.3933393339334,3.284895540335299],[73.42934293429343,3.267533950660706],[73.42934293429343,3.23281077131152],[73.3933393339334,3.2154491816369273]],\n      [[73.5013501350135,4.152975024064929],[73.46534653465346,4.152975024064929],[73.46534653465346,4.205059793088694],[73.5013501350135,4.222421382763287],[73.5013501350135,4.152975024064929]],\n      [[169.63096309630964,5.819687632825804],[169.59495949594958,5.85441081217499],[169.63096309630964,5.94121876054794],[169.6669666966697,5.923857170873347],[169.63096309630964,5.819687632825804]],\n      [[171.07110711071107,7.1218068584202285],[171.2151215121512,7.06972208939645],[171.3591359135914,7.104445268745636],[171.3591359135914,7.087083679071043],[171.25112511251126,7.052360499721857],[171.2151215121512,7.052360499721857],[171.07110711071107,7.104445268745636],[171.07110711071107,7.1218068584202285]],\n      [[162.97029702970298,5.31620153226261],[162.97029702970298,5.264116763238846],[162.8982898289829,5.2988399425880175],[162.93429342934297,5.333563121937203],[162.97029702970298,5.31620153226261]],\n      [[158.2898289828983,6.809298244277571],[158.25382538253825,6.774575064928385],[158.1818181818182,6.791936654602978],[158.14581458145818,6.878744602975942],[158.10981098109812,6.896106192650535],[158.10981098109812,6.930829371999721],[158.1818181818182,6.965552551348907],[158.2898289828983,6.948190961674314],[158.32583258325832,6.878744602975942],[158.2898289828983,6.8440214236267565],[158.2898289828983,6.809298244277571]],\n      [[151.62916291629165,7.330145934515343],[151.5931593159316,7.347507524189936],[151.5931593159316,7.382230703539122],[151.62916291629165,7.382230703539122],[151.62916291629165,7.330145934515343]],\n      [[151.8811881188119,7.416953882888308],[151.84518451845184,7.416953882888308],[151.84518451845184,7.4516770622374935],[151.8811881188119,7.4516770622374935],[151.8811881188119,7.416953882888308]],\n      [[138.12781278127812,9.500344643839398],[138.12781278127812,9.56979100253777],[138.16381638163818,9.587152592212362],[138.1998199819982,9.535067823188584],[138.16381638163818,9.500344643839398],[138.12781278127812,9.500344643839398]],\n      [[166.89468946894692,-0.5172925984004451],[166.93069306930693,-0.49993100872585217],[166.966696669667,-0.5172925984004451],[166.966696669667,-0.5520157777496308],[166.93069306930693,-0.5520157777496308],[166.89468946894692,-0.5520157777496308],[166.89468946894692,-0.534654188075038],[166.89468946894692,-0.5172925984004451]],\n      [[134.56345634563456,7.364869113864529],[134.52745274527456,7.347507524189936],[134.4914491449145,7.434315472562901],[134.4914491449145,7.521123420935865],[134.52745274527456,7.590569779634222],[134.59945994599462,7.607931369308815],[134.59945994599462,7.486400241586679],[134.56345634563456,7.434315472562901],[134.56345634563456,7.364869113864529]],\n      [[-171.46714671467146,-14.05933254458256],[-171.75517551755175,-14.05933254458256],[-171.8991899189919,-14.007247775558795],[-171.93519351935194,-14.007247775558795],[-172.04320432043204,-13.920439827185831],[-172.07920792079207,-13.868355058162052],[-172.007200720072,-13.833631878812866],[-171.86318631863188,-13.816270289138274],[-171.61116111611162,-13.885716647836645],[-171.57515751575158,-13.955163006535017],[-171.53915391539155,-13.955163006535017],[-171.46714671467146,-13.989886185884203],[-171.46714671467146,-14.05933254458256]],\n      [[-172.36723672367236,-13.46903849564643],[-172.22322232223223,-13.573208033693973],[-172.1872187218722,-13.694739161416123],[-172.25922592259226,-13.816270289138274],[-172.33123312331233,-13.781547109789088],[-172.51125112511252,-13.816270289138274],[-172.54725472547256,-13.79890869946368],[-172.76327632763275,-13.590569623368566],[-172.7992799279928,-13.521123264670194],[-172.6912691269127,-13.538484854344787],[-172.51125112511252,-13.486400085321009],[-172.36723672367236,-13.46903849564643]],\n      [[103.562828617596,1.19209804885879],[103.66539168093617,1.415549393564978],[103.72316284718511,1.461049419576995],[103.86289105136714,1.465021405443363],[104.00318672278996,1.42040107478995],[104.07707806368612,1.430908392589419],[104.08024877086231,1.356636222342184],[104.126080087493,1.27402861451777]],\n      [[-174.92349234923492,-21.31647702856222],[-174.92349234923492,-21.455369745958947],[-174.99549954995499,-21.38592338726059],[-174.99549954995499,-21.351200207911404],[-174.92349234923492,-21.31647702856222]],\n      [[-175.17551755175518,-21.177584311165475],[-175.13951395139514,-21.14286113181629],[-175.1035103510351,-21.177584311165475],[-175.17551755175518,-21.26439225953844],[-175.2115211521152,-21.229669080189254],[-175.35553555355534,-21.160222721490882],[-175.3195319531953,-21.125499542141696],[-175.24752475247524,-21.125499542141696],[-175.17551755175518,-21.177584311165475]],\n      [[-173.98739873987398,-18.64279221867497],[-174.02340234023401,-18.71223857737334],[-174.0954095409541,-18.64279221867497],[-174.02340234023401,-18.573345859976612],[-173.95139513951395,-18.590707449651205],[-173.95139513951395,-18.625430629000377],[-173.98739873987398,-18.64279221867497]],\n      [[178.30783078307832,-8.034860927498983],[178.37983798379838,-7.930691389451425],[178.45184518451845,-7.965414568800611],[178.37983798379838,-8.086945696522761],[178.30783078307832,-8.034860927498983]],\n      [[178.6678667866787,-7.461928468237431],[178.7038703870387,-7.479290057912024],[178.6678667866787,-7.496651647586617],[178.6678667866787,-7.461928468237431]],\n      [[179.13591359135916,-8.416815900340012],[179.17191719171916,-8.434177490014605],[179.20792079207922,-8.52098543838757],[179.0999099909991,-8.590431797085941],[179.0999099909991,-8.625154976435127],[179.0639063906391,-8.64251656610972],[179.0639063906391,-8.590431797085941],[179.02790279027903,-8.52098543838757],[179.0999099909991,-8.434177490014605],[179.13591359135916,-8.416815900340012]],\n      [[179.85598559855987,-9.354341742768014],[179.85598559855987,-9.371703332442607],[179.89198919891993,-9.3890649221172],[179.85598559855987,-9.441149691140978],[179.85598559855987,-9.423788101466386],[179.8199819981998,-9.371703332442607],[179.8199819981998,-9.354341742768014],[179.85598559855987,-9.354341742768014]],\n      [[176.97569756975696,-12.462066294520056],[177.15571557155715,-12.47942788419465],[177.15571557155715,-12.531512653218428],[177.01170117011702,-12.514151063543835],[176.97569756975696,-12.462066294520056]],\n      [[177.15571557155715,-7.253589392142317],[177.11971197119715,-7.184143033443959],[177.15571557155715,-7.201504623118552],[177.15571557155715,-7.253589392142317]],\n      [[176.0756075607561,-5.63896155240522],[176.11161116111612,-5.656323142079813],[176.14761476147618,-5.708407911103592],[176.11161116111612,-5.673684731754406],[176.03960396039605,-5.63896155240522],[176.0756075607561,-5.63896155240522]],\n      [[-61.72817281728173,17.03527456261253],[-61.764176417641764,16.98318979358875],[-61.87218721872186,17.000551383263343],[-61.90819081908191,17.05263615228712],[-61.90819081908191,17.087359331636307],[-61.83618361836183,17.15680569033468],[-61.692169216921684,17.087359331636307],[-61.692169216921684,17.05263615228712],[-61.72817281728173,17.03527456261253]],\n      [[-61.764176417641764,17.573483842524894],[-61.764176417641764,17.538760663175708],[-61.87218721872186,17.590845432199487],[-61.87218721872186,17.712376559921637],[-61.764176417641764,17.66029179089786],[-61.764176417641764,17.573483842524894]],\n      [[-59.4959495949595,13.076832116805448],[-59.53195319531953,13.059470527130856],[-59.63996399639963,13.094193706480041],[-59.675967596759676,13.14627847550382],[-59.675967596759676,13.302532782575142],[-59.6039603960396,13.302532782575142],[-59.45994599459945,13.14627847550382],[-59.4959495949595,13.076832116805448]],\n      [[-61.296129612961295,15.247030826129503],[-61.40414041404141,15.212307646780317],[-61.44014401440144,15.385923543526246],[-61.512151215121506,15.52481626092299],[-61.47614761476147,15.594262619621347],[-61.47614761476147,15.628985798970533],[-61.33213321332133,15.576901029946754],[-61.296129612961295,15.52481626092299],[-61.26012601260126,15.368561953851653],[-61.296129612961295,15.247030826129503]],\n      [[-61.72817281728173,12.000413556980718],[-61.764176417641764,12.035136736329903],[-61.764176417641764,12.104583095028275],[-61.692169216921684,12.226114222750411],[-61.62016201620162,12.208752633075818],[-61.65616561656165,12.052498326004496],[-61.72817281728173,12.000413556980718]],\n      [[-62.55625562556256,17.1047209213109],[-62.59225922592259,17.087359331636307],[-62.62826282628262,17.122082510985493],[-62.62826282628262,17.191528869683864],[-62.59225922592259,17.191528869683864],[-62.55625562556256,17.15680569033468],[-62.55625562556256,17.1047209213109]],\n      [[-62.664266426642655,17.22625204903305],[-62.736273627362735,17.278336818056815],[-62.8082808280828,17.295698407731408],[-62.84428442844285,17.330421587080593],[-62.84428442844285,17.382506356104372],[-62.8082808280828,17.399867945778965],[-62.736273627362735,17.347783176755186],[-62.7002700270027,17.278336818056815],[-62.664266426642655,17.26097522838222],[-62.664266426642655,17.22625204903305]],\n      [[-60.90009000900089,13.806018883138336],[-60.97209720972097,13.701849345090778],[-61.080108010801084,13.77129570378915],[-61.080108010801084,13.910188421185879],[-61.008100810081004,13.996996369558843],[-60.97209720972097,14.066442728257215],[-60.93609360936094,14.083804317931808],[-60.90009000900089,13.996996369558843],[-60.90009000900089,13.806018883138336]],\n      [[-61.18811881188118,13.14627847550382],[-61.224122412241215,13.128916885829227],[-61.296129612961295,13.198363244527599],[-61.296129612961295,13.285171192900549],[-61.224122412241215,13.319894372249735],[-61.18811881188118,13.35461755159892],[-61.15211521152115,13.35461755159892],[-61.15211521152115,13.198363244527599],[-61.18811881188118,13.14627847550382]],\n      [[1.4221422142214237,42.591534563612626],[1.4941494149414893,42.62625774296181],[1.5661566156615834,42.62625774296181],[1.7101710171017146,42.57417297393802],[1.7101710171017146,42.522088204914255],[1.6741674167416818,42.48736502556507],[1.4581458145814565,42.4179186668667],[1.4221422142214237,42.435280256541304],[1.4221422142214237,42.48736502556507],[1.386138613861391,42.522088204914255],[1.4221422142214237,42.591534563612626]],\n      [[9.60754621634599,47.0613932427273],[9.55740711339162,47.0511647748693]],\n      [[9.48531852772954,47.1784895080045],[9.53022075531123,47.2730326940506],[9.57917146014346,47.2077927269191]],\n      [[14.563456345634563,35.83787618019616],[14.52745274527453,35.803153000846976],[14.419441944194432,35.82051459052157],[14.347434743474366,35.855237769870755],[14.347434743474366,35.976768897592905],[14.52745274527453,35.87259935954535],[14.563456345634563,35.83787618019616]],\n      [[7.434743474347442,43.73739948213573],[7.362736273627377,43.72003789246112],[7.362736273627377,43.75476107181031],[7.434743474347442,43.73739948213573]],\n      [[12.367236723672363,43.928376968556236],[12.439243924392457,43.98046173758003],[12.511251125112523,43.94573855823084],[12.47524752475249,43.89365378920705],[12.403240324032396,43.89365378920705],[12.367236723672363,43.928376968556236]],\n      [[-157.42381751199986,2.020453192000062],[-157.38585364499994,1.990464585000097],[-157.32184811099995,1.972113348000136],[-157.3101293609999,1.973089911000116],[-157.3113907539999,1.962591864000061],[-157.31505286399994,1.952785549000112],[-157.32066809799994,1.945502020000021],[-157.33617102799994,1.939113674000083],[-157.34044348899988,1.930243231000048],[-157.34491939999992,1.907945054000095],[-157.3477270169999,1.860785223000107],[-157.32542883999992,1.835842190000079],[-157.28978430899988,1.818752346000139],[-157.25243079299992,1.795314846000153],[-157.2383927069999,1.783636786000073],[-157.22297115799995,1.773586330000086],[-157.20689856699988,1.766546942000033],[-157.19098873599995,1.763902085000126],[-157.17939205599993,1.753892320000148],[-157.17463131399992,1.733791408000016],[-157.1787817049999,1.718491929000052],[-157.1940811839999,1.722967841000099],[-157.20307369699995,1.717474677000084],[-157.21324622299989,1.71279531500015],[-157.22411048099988,1.709702867000161],[-157.23505611899995,1.709295966000155],[-157.24640865799992,1.71332428600013],[-157.2546280589999,1.720282294000128],[-157.26085364499988,1.726874091000099],[-157.27118893099987,1.732977606000176],[-157.2815649079999,1.747056382000125],[-157.28685462099986,1.750230210000012],[-157.30927486899986,1.751898505000113],[-157.41059322799993,1.78192780200007],[-157.44896399599995,1.800238348000036],[-157.48265540299994,1.825384833000101],[-157.50861568899995,1.849595445000105],[-157.5282690089999,1.86249420800003],[-157.53730221299992,1.856675523000149],[-157.5468236969999,1.85643138200011],[-157.56602942599994,1.863755601000037],[-157.58116614499994,1.880316473],[-157.57823645699995,1.907945054000095],[-157.5723363919999,1.912787177000084],[-157.54352779899986,1.929022528000033],[-157.53014075399986,1.93056875200007],[-157.52122962099992,1.927679755000042],[-157.51756751199986,1.923651434000149],[-157.51988684799994,1.921576239000132],[-157.53282630099994,1.916083075000117],[-157.54535885299993,1.90232982000019],[-157.54950924399986,1.884466864000132],[-157.53730221299992,1.866359768000123],[-157.5269262359999,1.864813544000086],[-157.5130509109999,1.866603908000073],[-157.50092525899993,1.865871486000046],[-157.49571692599994,1.856675523000149],[-157.4906713529999,1.850165106000077],[-157.47883053299995,1.847967841000084],[-157.4547826809999,1.847072658],[-157.43468176999994,1.83852773600016],[-157.4285375639999,1.838568427000055],[-157.43736731699994,1.850165106000077],[-157.44794674399986,1.857489325000159],[-157.45860755099991,1.862127997000016],[-157.4680883449999,1.868353583000058],[-157.47520911399988,1.880601304000038],[-157.46235104099995,1.876288153000118],[-157.45164954299992,1.876410223000093],[-157.4457901679999,1.883734442000105],[-157.44733639199993,1.901109117000175],[-157.4365942049999,1.893866278000147],[-157.43248450399986,1.883734442000105],[-157.43000240799995,1.872788804000123],[-157.42369544199988,1.863226630000057],[-157.4119766919999,1.858465887000136],[-157.40794837099992,1.866156317000076],[-157.41002356699988,1.879380601000193],[-157.42442786399994,1.901841539000102],[-157.42638098899988,1.912054755000057],[-157.42438717399995,1.921210028000118],[-157.41999264199995,1.929022528000033],[-157.40831458199995,1.921454169000157],[-157.40314693899995,1.924221096000124],[-157.4063207669999,1.942694403000147],[-157.39472408799992,1.935736395000063],[-157.39399166599986,1.926743882000139],[-157.39586341099994,1.91697825700011],[-157.3920792309999,1.907945054000095],[-157.38206946499992,1.902167059000135],[-157.37718665299985,1.90525950700011],[-157.3739721339999,1.911363023000192],[-157.36384029899995,1.917385158000116],[-157.3584692049999,1.923895575000103],[-157.35411536399988,1.931830145000077],[-157.3523656889999,1.938950914000117],[-157.3550512359999,1.94765859600011],[-157.36168372299994,1.951483466000113],[-157.3796280589999,1.955715236000131],[-157.40888424399992,1.969305731000091],[-157.4453018869999,1.994370835000012],[-157.45103919199988,1.997300523000121],[-157.45539303299995,2.002997137000094],[-157.4662979809999,2.013332424000112],[-157.47752844999994,2.018133856000091],[-157.48265540299994,2.007228908000116],[-157.48790442599994,2.000555731000162],[-157.4988907539999,2.002183335000083],[-157.50841223899988,2.010687567000033],[-157.5093888009999,2.024603583000015],[-157.4962865879999,2.034409898000121],[-157.4745987619999,2.033351955000072],[-157.42381751199986,2.020453192000062]],\n      [[6.662253442589007,0.416881758953456],[6.766597964464581,0.283008296118973],[6.664222207152696,0.119601901283034],[6.526408687694389,0.019194995035456],[6.461439457092617,0.212133437981513],[6.490970925547967,0.314508100511184],[6.662253442589007,0.416881758953456]],\n      [[-46.76379,82.62796],[-43.40644,83.22516],[-39.89753,83.18018],[-38.62214,83.54905],[-35.08787,83.64513],[-27.10046,83.51966],[-20.84539,82.72669],[-22.69182,82.34165],[-26.51753,82.29765],[-31.9,82.2],[-31.39646,82.02154],[-27.85666,82.13178],[-24.84448,81.78697],[-22.90328,82.09317],[-22.07175,81.73449],[-23.16961,81.15271],[-20.62363,81.52462],[-15.76818,81.91245],[-12.77018,81.71885],[-12.20855,81.29154],[-16.28533,80.58004],[-16.85,80.35],[-20.04624,80.17708],[-17.73035,80.12912],[-18.9,79.4],[-19.70499,78.75128],[-19.67353,77.63859],[-18.47285,76.98565],[-20.03503,76.94434],[-21.67944,76.62795],[-19.83407,76.09808],[-19.59896,75.24838],[-20.66818,75.15585],[-19.37281,74.29561],[-21.59422,74.22382],[-20.43454,73.81713],[-20.76234,73.46436],[-22.17221,73.30955],[-23.56593,73.30663],[-22.31311,72.62928],[-22.29954,72.18409],[-24.27834,72.59788],[-24.79296,72.3302],[-23.44296,72.08016],[-22.13281,71.46898],[-21.75356,70.66369],[-23.53603,70.471],[-24.30702,70.85649],[-25.54341,71.43094],[-25.20135,70.75226],[-26.36276,70.22646],[-23.72742,70.18401],[-22.34902,70.12946],[-25.02927,69.2588],[-27.74737,68.47046],[-30.67371,68.12503],[-31.77665,68.12078],[-32.81105,67.73547],[-34.20196,66.67974],[-36.35284,65.9789],[-37.04378,65.93768],[-38.37505,65.69213],[-39.81222,65.45848],[-40.66899,64.83997],[-40.68281,64.13902],[-41.1887,63.48246],[-42.81938,62.68233],[-42.41666,61.90093],[-42.86619,61.07404],[-43.3784,60.09772],[-44.7875,60.03676],[-46.26364,60.85328],[-48.26294,60.85843],[-49.23308,61.40681],[-49.90039,62.38336],[-51.63325,63.62691],[-52.14014,64.27842],[-52.27659,65.1767],[-53.66166,66.09957],[-53.30161,66.8365],[-53.96911,67.18899],[-52.9804,68.35759],[-51.47536,68.72958],[-51.08041,69.14781],[-50.87122,69.9291],[-52.013585,69.574925],[-52.55792,69.42616],[-53.45629,69.283625],[-54.68336,69.61003],[-54.75001,70.28932],[-54.35884,70.821315],[-53.431315,70.835755],[-51.39014,70.56978],[-53.10937,71.20485],[-54.00422,71.54719],[-55,71.406537],[-55.83468,71.65444],[-54.71819,72.58625],[-55.32634,72.95861],[-56.12003,73.64977],[-57.32363,74.71026],[-58.59679,75.09861],[-58.58516,75.51727],[-61.26861,76.10238],[-63.39165,76.1752],[-66.06427,76.13486],[-68.50438,76.06141],[-69.66485,76.37975],[-71.40257,77.00857],[-68.77671,77.32312],[-66.76397,77.37595],[-71.04293,77.63595],[-73.297,78.04419],[-73.15938,78.43271],[-69.37345,78.91388],[-65.7107,79.39436],[-65.3239,79.75814],[-68.02298,80.11721],[-67.15129,80.51582],[-63.68925,81.21396],[-62.23444,81.3211],[-62.65116,81.77042],[-60.28249,82.03363],[-57.20744,82.19074],[-54.13442,82.19962],[-53.04328,81.88833],[-50.39061,82.43883],[-48.00386,82.06481],[-46.59984,81.985945],[-44.523,81.6607],[-46.9007,82.19979],[-46.76379,82.62796]],\n      [[68.935,-48.625],[69.58,-48.94],[70.525,-49.065],[70.56,-49.255],[70.28,-49.71],[68.745,-49.775],[68.72,-49.2425],[68.8675,-48.83],[68.935,-48.625]],\n    ],\n    bbox: [-180, -85.609038, 180, 83.64513],\n}\n","import { Quadtree } from \"d3-quadtree\"\nimport {\n    EntityName,\n    getAggregates,\n    getContinents,\n    getIncomeGroups,\n    getCountryNamesForRegion,\n    getRelativeMouse,\n    lazy,\n} from \"@ourworldindata/utils\"\nimport { GlobeRegionName, MapRegionName } from \"@ourworldindata/types\"\nimport {\n    GEO_FEATURES_CLASSNAME,\n    MAP_HOVER_TARGET_RANGE,\n    RenderFeature,\n    MapRenderFeature,\n    RenderFeatureType,\n} from \"./MapChartConstants\"\nimport { MapTopology } from \"./MapTopology.js\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray.js\"\nimport * as R from \"remeda\"\n\nexport function detectNearbyFeature<Feature extends RenderFeature>({\n    quadtree,\n    element,\n    event,\n    distance = MAP_HOVER_TARGET_RANGE,\n}: {\n    quadtree: Quadtree<Feature>\n    element: SVGGElement\n    event: PointerEvent\n    distance?: number\n}): Feature | undefined {\n    const groupElement = element.querySelector(`.${GEO_FEATURES_CLASSNAME}`)\n    if (!groupElement) {\n        console.error(`.${GEO_FEATURES_CLASSNAME} doesn't exist`)\n        return\n    }\n\n    const { x, y } = getRelativeMouse(groupElement, event)\n    return quadtree.find(x, y, distance)\n}\n\nexport const sortFeaturesByInteractionStateAndSize = <\n    Feature extends RenderFeature,\n>(\n    features: Feature[],\n    {\n        isHovered,\n        isSelected,\n    }: {\n        isHovered: (featureId: string) => boolean\n        isSelected: (featureId: string) => boolean\n    }\n): Feature[] => {\n    const preferA = 1 as const\n    const preferB = -1 as const\n\n    return R.sort(features, (a, b) => {\n        if (isHovered(a.id) && !isHovered(b.id)) return preferA\n        if (!isHovered(a.id) && isHovered(b.id)) return preferB\n\n        if (isSelected(a.id) && !isSelected(b.id)) return preferA\n        if (!isSelected(a.id) && isSelected(b.id)) return preferB\n\n        return a.geoBounds.area < b.geoBounds.area ? preferA : preferB\n    })\n}\n\nexport const calculateDistance = (\n    p1: [number, number],\n    p2: [number, number]\n): number => {\n    return Math.hypot(p2[0] - p1[0], p2[1] - p1[1])\n}\n\n/**\n * Check if a country is visible on the rendered 3d globe from the current\n * viewing angle, without taking into account the zoom level.\n *\n * More specifically, this function checks if the feature's _centroid_ is\n * visible on the globe, i.e. parts of a country could still be visible\n * even if the centroid is not.\n */\nexport function isPointPlacedOnVisibleHemisphere(\n    point: [number, number],\n    rotation: [number, number],\n    threshold = 0 // 1 = at the exact center, 0 = anywhere on the visible hemisphere\n): boolean {\n    const toRadians = (degree: number): number => (degree * Math.PI) / 180\n\n    // convert centroid degrees to radians\n    const lambda = toRadians(point[0])\n    const phi = toRadians(point[1])\n\n    // get current rotation in radians\n    const rotationLambda = toRadians(rotation[0])\n    const rotationPhi = toRadians(rotation[1])\n\n    // calculate the cosine of the angular distance between the feature's\n    // center point and the center points of the current view\n    const cosDelta =\n        Math.sin(phi) * Math.sin(rotationPhi) +\n        Math.cos(phi) *\n            Math.cos(rotationPhi) *\n            Math.cos(lambda - rotationLambda)\n\n    return cosDelta > threshold\n}\n\nexport function getForegroundFeatures<Feature extends RenderFeature>(\n    features: Feature[],\n    selectionArray: MapSelectionArray\n): Feature[] {\n    // if no regions are selected, then all countries are in the foreground\n    if (!selectionArray.hasRegions) return features\n\n    // all countries within the selected regions are in the foreground\n    const countrySet = selectionArray.countryNamesForSelectedRegionsSet\n    return features.filter((feature) => countrySet.has(feature.id))\n}\n\n// A map of the form:\n// - Africa: [Algeria, Angola, ...]\n// - North America: [Canada, United States, ...]\nconst countriesByRegionMap = lazy(\n    () =>\n        new Map(\n            [...getContinents(), ...getAggregates(), ...getIncomeGroups()].map(\n                (region) => [\n                    region.name,\n                    new Set(getCountryNamesForRegion(region)),\n                ]\n            )\n        )\n)\n\nexport const getCountriesByRegion = (\n    regionName: string\n): Set<string> | undefined => countriesByRegionMap().get(regionName)\n\nlet _isOnTheMapCache: Set<string>\nexport const isOnTheMap = (entityName: EntityName): boolean => {\n    // Cache the result\n    if (!_isOnTheMapCache)\n        _isOnTheMapCache = new Set(\n            MapTopology.objects.world.geometries.map((region: any) => region.id)\n        )\n    return _isOnTheMapCache.has(entityName)\n}\n\nexport function isMapRenderFeature(\n    feature: RenderFeature\n): feature is MapRenderFeature {\n    return feature.type === RenderFeatureType.Map\n}\n\nexport function isValidMapRegionName(\n    candidate: string\n): candidate is MapRegionName {\n    return Object.values(MapRegionName).includes(candidate as any)\n}\n\nexport function isValidGlobeRegionName(\n    candidate: string\n): candidate is GlobeRegionName {\n    return isValidMapRegionName(candidate) && candidate !== MapRegionName.World\n}\n","import * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { ChartState } from \"../chart/ChartInterface\"\nimport {\n    ChoroplethSeries,\n    ChoroplethSeriesByName,\n    MAP_REGION_LABELS,\n    MapChartManager,\n    MapColumnInfo,\n} from \"./MapChartConstants\"\nimport {\n    CoreColumn,\n    ErrorValueTypes,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { match, P } from \"ts-pattern\"\nimport {\n    ChartErrorInfo,\n    Color,\n    ColorSchemeName,\n    ColumnSlug,\n    EntityName,\n    PrimitiveType,\n    TickFormattingOptions,\n    Time,\n} from \"@ourworldindata/types\"\nimport {\n    anyToString,\n    checkHasMembers,\n    isPresent,\n    mappableCountries,\n    regions,\n} from \"@ourworldindata/utils\"\nimport { MapConfig } from \"./MapConfig\"\nimport { combineHistoricalAndProjectionColumns } from \"../chart/ChartUtils\"\nimport { getCountriesByRegion, isOnTheMap } from \"./MapHelpers\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray\"\nimport { ColorScale, ColorScaleManager } from \"../color/ColorScale\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig\"\n\nexport type MapFormatValueForTooltip = (\n    d: PrimitiveType,\n    options?: TickFormattingOptions\n) => {\n    label: string\n    isCategorical: boolean\n}\n\nexport class MapChartState implements ChartState, ColorScaleManager {\n    manager: MapChartManager\n\n    colorScale: ColorScale\n    defaultBaseColorScheme = ColorSchemeName.BuGn\n    hasNoDataBin = true\n\n    constructor({ manager }: { manager: MapChartManager }) {\n        this.manager = manager\n        this.colorScale = new ColorScale(this)\n        makeObservable(this)\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        // Drop non-mappable entities from the table\n        table = this.dropNonMapEntities(table)\n\n        return match(this.mapColumnInfo)\n            .with({ type: P.union(\"historical\", \"projected\") }, (info) =>\n                this.transformTableForSingleMapColumn(table, info)\n            )\n            .with({ type: \"historical+projected\" }, (info) =>\n                this.transformTableForCombinedMapColumn(table, info)\n            )\n            .exhaustive()\n    }\n\n    private transformTableForSingleMapColumn(\n        table: OwidTable,\n        mapColumnInfo: Extract<\n            MapColumnInfo,\n            { type: \"historical\" | \"projected\" }\n        >\n    ): OwidTable {\n        return table\n            .dropRowsWithErrorValuesForColumn(mapColumnInfo.slug)\n            .interpolateColumnWithTolerance(mapColumnInfo.slug, {\n                toleranceOverride: this.mapConfig.timeTolerance,\n                toleranceStrategyOverride: this.mapConfig.toleranceStrategy,\n            })\n    }\n\n    private transformTableForCombinedMapColumn(\n        table: OwidTable,\n        mapColumnInfo: Extract<MapColumnInfo, { type: \"historical+projected\" }>\n    ): OwidTable {\n        const { historicalSlug, projectedSlug, combinedSlug } = mapColumnInfo\n\n        // Interpolate both columns separately\n        table = table\n            .interpolateColumnWithTolerance(projectedSlug, {\n                toleranceOverride: this.mapConfig.timeTolerance,\n                toleranceStrategyOverride: this.mapConfig.toleranceStrategy,\n            })\n            .interpolateColumnWithTolerance(historicalSlug, {\n                toleranceOverride: this.mapConfig.timeTolerance,\n                toleranceStrategyOverride: this.mapConfig.toleranceStrategy,\n            })\n\n        // Combine the projection column with its historical stem into one column\n        table = combineHistoricalAndProjectionColumns(table, mapColumnInfo, {\n            shouldAddIsProjectionColumn: true,\n        })\n\n        // Drop rows with error values for the combined column\n        table = table.dropRowsWithErrorValuesForColumn(combinedSlug)\n\n        return table\n    }\n\n    transformTableForSelection(table: OwidTable): OwidTable {\n        table = this.addMissingMapEntities(table)\n        table = this.dropNonMapEntitiesForSelection(table)\n        table = this.dropAntarctica(table)\n        return table\n    }\n\n    private dropAntarctica(table: OwidTable): OwidTable {\n        // We prefer to not offer Antarctica in the entity selector on the map\n        // tab to avoid confusion since it's shown on the globe, but not on the map.\n        return table.filterByEntityNamesUsingIncludeExcludePattern({\n            excluded: [\"Antarctica\"],\n        })\n    }\n\n    private dropNonMapEntities(table: OwidTable): OwidTable {\n        const entityNamesToSelect =\n            table.availableEntityNames.filter(isOnTheMap)\n        return table.filterByEntityNames(entityNamesToSelect)\n    }\n\n    private dropNonMapEntitiesForSelection(table: OwidTable): OwidTable {\n        const { selectionArray, mapConfig } = this\n\n        const allMappableCountryNames = mappableCountries.map((c) => c.name)\n        const allRegionNames = regions\n            .filter((r) => checkHasMembers(r) && r.code !== \"OWID_WRL\")\n            .map((r) => r.name)\n\n        const mappableCountryNameSet = new Set(allMappableCountryNames)\n\n        // If in 2D mode and a continent is selected, then all countries\n        // outside of the selected continent are disabled on the map\n        // and thus also not selectable\n        if (this.mapConfig.is2dContinentActive()) {\n            const countriesInRegionSet = getCountriesByRegion(\n                MAP_REGION_LABELS[mapConfig.region]\n            )\n            if (!countriesInRegionSet) return table\n\n            const countriesInRegion = Array.from(countriesInRegionSet)\n            const mappableCountriesInRegion = countriesInRegion.filter(\n                (countryName) => mappableCountryNameSet.has(countryName)\n            )\n\n            return table.filterByEntityNames(\n                R.unique([\n                    // only keep countries in the region\n                    ...mappableCountriesInRegion,\n                    // keep the user's selection\n                    ...selectionArray.selectedEntityNames,\n                ])\n            )\n        }\n\n        // if no regions are currently selected, keep all mappable countries and regions\n        if (!selectionArray.hasRegions) {\n            return table.filterByEntityNames([\n                ...allRegionNames,\n                ...allMappableCountryNames,\n            ])\n        }\n\n        return table.filterByEntityNames(\n            R.unique([\n                // keep all regions\n                ...allRegionNames,\n                // only keep those countries that are within the selected regions\n                ...selectionArray.countryNamesForSelectedRegions,\n                // keep the user's selection\n                ...selectionArray.selectedEntityNames,\n            ])\n        )\n    }\n\n    private addMissingMapEntities(table: OwidTable): OwidTable {\n        // the given table might not have data for all mappable countries, but\n        // on the map tab, we do want every country to be selectable, even if\n        // it doesn't have data for any of the years. that's why we add a\n        // missing-data row for every mappable country that isn't in the table\n\n        const missingMappableCountries = mappableCountries.filter(\n            (country) => !table.availableEntityNameSet.has(country.name)\n        )\n\n        const rows = missingMappableCountries.map((country) => ({\n            entityName: country.name,\n            time: table.maxTime!, // arbitrary time\n            value: ErrorValueTypes.MissingValuePlaceholder,\n        }))\n        table = table.appendRows(\n            rows,\n            `Append rows for mappable countries without data: ${rows.map((row) => row.entityName).join(\", \")}`\n        )\n\n        return table\n    }\n\n    @computed get inputTable(): OwidTable {\n        const { mapColumnInfo } = this\n        const { table } = this.manager\n\n        // For historical+projected data, we need to create the combined column\n        // on the input table. This ensures the color scale has access to the\n        // complete range of data across both columns\n        return mapColumnInfo.type === \"historical+projected\"\n            ? combineHistoricalAndProjectionColumns(table, mapColumnInfo)\n            : table\n    }\n\n    @computed get transformedTableFromGrapher(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    @computed get transformedTable(): OwidTable {\n        let table = this.transformedTableFromGrapher\n\n        // A target time is set for faceted maps\n        if (this.manager.targetTime !== undefined) {\n            table = table.filterByTargetTimes(\n                [this.manager.targetTime],\n                this.mapConfig.timeTolerance ??\n                    table.get(this.mapColumnSlug).tolerance\n            )\n        }\n\n        return table\n    }\n\n    @computed get selectionArray(): MapSelectionArray {\n        return this.mapConfig.selection\n    }\n\n    @computed get mapColumn(): CoreColumn {\n        return this.transformedTable.get(this.mapColumnSlug)\n    }\n\n    @computed get mapColumnInfo(): MapColumnInfo {\n        const mapColumnSlug = this.manager.mapColumnSlug!\n\n        // If projection info is available, then we can stitch together the\n        // historical and projected columns\n        const projectionInfo =\n            this.manager.projectionColumnInfoBySlug?.get(mapColumnSlug)\n        if (projectionInfo) {\n            return {\n                type: \"historical+projected\",\n                slug: projectionInfo.combinedSlug,\n                ...projectionInfo,\n            }\n        }\n\n        const type = this.manager.table.get(mapColumnSlug).isProjection\n            ? \"projected\"\n            : \"historical\"\n\n        return { type, slug: mapColumnSlug }\n    }\n\n    @computed get mapConfig(): MapConfig {\n        return this.manager.mapConfig || new MapConfig()\n    }\n\n    @computed get mapColumnSlug(): ColumnSlug {\n        return this.mapColumnInfo.slug\n    }\n\n    // The map column without tolerance and timeline filtering applied\n    @computed get mapColumnUntransformed(): CoreColumn {\n        return this.dropNonMapEntities(this.inputTable).get(this.mapColumnSlug)\n    }\n\n    @computed get colorScaleConfig(): ColorScaleConfig {\n        return (\n            ColorScaleConfig.fromDSL(this.mapColumn.def) ??\n            this.mapConfig.colorScale\n        )\n    }\n\n    @computed get colorScaleColumn(): CoreColumn {\n        // Use the table before any transforms to collect all possible values over time.\n        // Otherwise the legend changes as you slide the timeline handle.\n        return this.mapColumnUntransformed\n    }\n\n    @computed get hasProjectedData(): boolean {\n        return this.mapColumnInfo.type !== \"historical\"\n    }\n\n    @computed get hasProjectedDataBin(): boolean {\n        return this.hasProjectedData\n    }\n\n    @computed get targetTime(): number | undefined {\n        return this.manager.targetTime ?? this.manager.endTime\n    }\n\n    @computed get columnIsProjection(): CoreColumn | undefined {\n        const slugForIsProjectionColumn =\n            this.mapColumnInfo?.type === \"historical+projected\"\n                ? this.mapColumnInfo.slugForIsProjectionColumn\n                : undefined\n\n        return slugForIsProjectionColumn\n            ? this.transformedTable.get(slugForIsProjectionColumn)\n            : undefined\n    }\n\n    private checkIsProjection(\n        entityName: EntityName,\n        originalTime: Time\n    ): boolean {\n        return match(this.mapColumnInfo.type)\n            .with(\"historical\", () => false)\n            .with(\"projected\", () => true)\n            .with(\"historical+projected\", () =>\n                this.columnIsProjection?.valueByEntityNameAndOriginalTime\n                    .get(entityName)\n                    ?.get(originalTime)\n            )\n            .exhaustive()\n    }\n\n    @computed get noDataColor(): Color {\n        return this.colorScale.noDataColor\n    }\n\n    @computed get series(): ChoroplethSeries[] {\n        const { mapColumn, targetTime } = this\n        if (mapColumn.isMissing) return []\n        if (targetTime === undefined) return []\n\n        return mapColumn.owidRows\n            .map((row) => {\n                const { entityName, value, originalTime } = row\n                const color =\n                    this.colorScale.getColor(value) || this.noDataColor\n                const isProjection = this.checkIsProjection(\n                    entityName,\n                    originalTime\n                )\n                return {\n                    seriesName: entityName,\n                    time: originalTime,\n                    value,\n                    color,\n                    isProjection,\n                } satisfies ChoroplethSeries\n            })\n            .filter(isPresent)\n    }\n\n    @computed get seriesMap(): ChoroplethSeriesByName {\n        return new Map(this.series.map((series) => [series.seriesName, series]))\n    }\n\n    @computed get formatValueForTooltip(): MapFormatValueForTooltip {\n        const { mapConfig, colorScale } = this\n\n        return (d: PrimitiveType, options?: TickFormattingOptions) => {\n            if (mapConfig.tooltipUseCustomLabels) {\n                // Find the bin (and its label) that this value belongs to\n                const bin = colorScale.getBinForValue(d)\n                const label = bin?.label\n                if (label !== undefined && label !== \"\")\n                    return { label, isCategorical: true }\n            }\n\n            if (typeof d === \"number\") {\n                const label = this.mapColumn.formatValueShort(d, options)\n                return { label, isCategorical: false }\n            } else {\n                return { label: anyToString(d), isCategorical: true }\n            }\n        }\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        if (this.mapColumn.isMissing) return { reason: \"Missing map column\" }\n        return { reason: \"\" }\n    }\n}\n","export const COMPARISON_LINE_STYLE = {\n    opacity: 0.9,\n    fill: \"none\",\n    stroke: \"#ccc\",\n    strokeDasharray: \"2 2\",\n}\n\nexport const COMPARISON_LINE_LABEL_STYLE = {\n    fill: \"#999\",\n    opacity: 0.9,\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport * as _ from \"lodash-es\"\nimport {\n    Bounds,\n    dyFromAlign,\n    makeFigmaId,\n    VerticalAlign,\n} from \"@ourworldindata/utils\"\nimport {\n    COMPARISON_LINE_STYLE,\n    COMPARISON_LINE_LABEL_STYLE,\n} from \"./ComparisonLineConstants\"\nimport { ComparisonLineProps } from \"./ComparisonLine\"\nimport { VerticalComparisonLineConfig } from \"@ourworldindata/types\"\nimport { isValidVerticalComparisonLineConfig } from \"./ComparisonLineHelpers\"\n\n@observer\nexport class VerticalComparisonLine extends React.Component<\n    ComparisonLineProps<VerticalComparisonLineConfig>\n> {\n    constructor(props: ComparisonLineProps<VerticalComparisonLineConfig>) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get fontSize(): number {\n        return this.props.dualAxis.comparisonLineLabelFontSize\n    }\n\n    @computed private get labelHeight(): number {\n        // Since the label isn't wrapped, its height equals the font size\n        return this.fontSize\n    }\n\n    @computed private get lineConfig(): VerticalComparisonLineConfig {\n        return this.props.comparisonLine\n    }\n\n    @computed\n    private get otherVerticalComparisonLines(): VerticalComparisonLineConfig[] {\n        return this.props.dualAxis.comparisonLines.filter(\n            (lineConfig): lineConfig is VerticalComparisonLineConfig =>\n                isValidVerticalComparisonLineConfig(lineConfig) &&\n                lineConfig.xEquals !== this.props.comparisonLine.xEquals\n        )\n    }\n\n    /** Nearest comparison line to the left of this line */\n    @computed private get closestLeftLine():\n        | VerticalComparisonLineConfig\n        | undefined {\n        const linesOnTheLeft = this.otherVerticalComparisonLines.filter(\n            (otherLine) => otherLine.xEquals < this.lineConfig.xEquals\n        )\n        return _.maxBy(linesOnTheLeft, (line) => line.xEquals)\n    }\n\n    /** Nearest comparison line to the right of this line */\n    @computed private get closestRightLine():\n        | VerticalComparisonLineConfig\n        | undefined {\n        const linesOnTheRight = this.otherVerticalComparisonLines.filter(\n            (otherLine) => otherLine.xEquals > this.lineConfig.xEquals\n        )\n        return _.minBy(linesOnTheRight, (line) => line.xEquals)\n    }\n\n    /**\n     * X-coordinate of the leftmost boundary for label placement.\n     *\n     * Either the position of the nearest comparison line on the left\n     * or the chart's bound.\n     */\n    @computed private get leftBoundX(): number {\n        const { closestLeftLine } = this\n        const { innerBounds, horizontalAxis } = this.props.dualAxis\n\n        if (!closestLeftLine) return innerBounds.left\n\n        return Math.max(\n            horizontalAxis.place(closestLeftLine.xEquals),\n            innerBounds.left\n        )\n    }\n\n    /**\n     * X-coordinate of the rightmost boundary for label placement.\n     *\n     * Either the position of the nearest comparison line on the right\n     * or the chart's bound.\n     */\n    @computed private get rightBoundX(): number {\n        const { closestRightLine } = this\n        const { innerBounds, horizontalAxis } = this.props.dualAxis\n\n        if (!closestRightLine) return innerBounds.right\n\n        return Math.min(\n            horizontalAxis.place(closestRightLine.xEquals),\n            innerBounds.right\n        )\n    }\n\n    /** Screen coordinates for rendering the vertical line */\n    @computed private get lineCoordinates():\n        | { x: number; y1: number; y2: number }\n        | undefined {\n        const { dualAxis } = this.props\n        const { horizontalAxis, innerBounds } = dualAxis\n        const xValue = this.lineConfig.xEquals\n        const [minX, maxX] = horizontalAxis.domain\n\n        // Only render if the line is within the chart bounds\n        const isWithinBounds = xValue >= minX && xValue <= maxX\n        if (!isWithinBounds) return undefined\n\n        return {\n            x: horizontalAxis.place(xValue),\n            // The line extends outside of the chart area, so that the label\n            // isn't covered by any chart elements\n            y1: innerBounds.top - this.labelHeight,\n            y2: innerBounds.bottom,\n        }\n    }\n\n    /** Calculated position and alignment for the label text */\n    @computed private get labelPosition():\n        | { x: number; y: number; anchor: \"start\" | \"end\" }\n        | undefined {\n        const { fontSize, lineCoordinates, rightBoundX, leftBoundX } = this\n        const { label } = this.lineConfig\n\n        if (!label || !lineCoordinates) return undefined\n\n        const { x, y1: y } = lineCoordinates\n\n        // Calculate available space on both sides\n        const padding = 4 // padding between label and line\n        const availableSpaceRight = rightBoundX - x - 2 * padding\n        const availableSpaceLeft = x - leftBoundX - 2 * padding\n\n        // Determine label placement:\n        // - Prefer the right side if there's enough space\n        // - Otherwise, try placing the label on the left side\n        // - If neither side has enough space, hide the label\n        const labelWidth = Bounds.forText(label, { fontSize }).width\n        const side =\n            labelWidth <= availableSpaceRight\n                ? \"right\"\n                : labelWidth <= availableSpaceLeft\n                  ? \"left\"\n                  : null\n\n        // Can't fit the label\n        if (side === null) return undefined\n\n        // Add a bit of padding between label and line and determine text anchor\n        const labelX = side === \"right\" ? x + padding : x - padding\n        const anchor = side === \"right\" ? \"start\" : \"end\"\n\n        return { x: labelX, y, anchor }\n    }\n\n    private renderLabel(): React.ReactElement | null {\n        if (!this.labelPosition) return null\n\n        const { x, y, anchor } = this.labelPosition\n\n        return (\n            <text\n                {...COMPARISON_LINE_LABEL_STYLE}\n                x={x}\n                y={y}\n                fontSize={this.fontSize}\n                dy={dyFromAlign(VerticalAlign.bottom)}\n                textAnchor={anchor}\n            >\n                {this.lineConfig.label}\n            </text>\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.lineCoordinates || !this.labelPosition) return null\n\n        const { x, y1, y2 } = this.lineCoordinates\n\n        return (\n            <g id={makeFigmaId(\"comparison-line\", this.lineConfig.label)}>\n                <line\n                    x1={x}\n                    y1={y1}\n                    x2={x}\n                    y2={y2}\n                    style={COMPARISON_LINE_STYLE}\n                />\n                {this.renderLabel()}\n            </g>\n        )\n    }\n}\n","var $ = Object.defineProperty;\nvar O = (l, i, e) => i in l ? $(l, i, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[i] = e;\nvar n = (l, i, e) => (O(l, typeof i != \"symbol\" ? i + \"\" : i, e), e);\nconst g = {\n  PI: Math.PI,\n  E: Math.E,\n  LN2: Math.LN2,\n  LN10: Math.LN10,\n  LOG2E: Math.LOG2E,\n  LOG10E: Math.LOG10E,\n  SQRT1_2: Math.SQRT1_2,\n  SQRT2: Math.SQRT2\n};\nclass p {\n  static throwIfNotNumber(i) {\n    if (typeof i === \"string\")\n      throw new Error(\"Strings are not allowed in math operations\");\n  }\n}\nclass V {\n  static throwIfNotNumber(i) {\n    if (typeof i === \"string\")\n      throw new Error(\"Strings are not allowed in math operations\");\n  }\n}\nclass h {\n  static createOperatorExpression(i, e, t) {\n    if (i === \"^\")\n      return new b(e, t);\n    if ([\"*\", \"/\"].includes(i))\n      return new x(i, e, t);\n    if ([\"+\", \"-\"].includes(i))\n      return new E(i, e, t);\n    if ([\"<\", \">\", \"<=\", \">=\", \"=\", \"!=\"].includes(i))\n      return new d(i, e, t);\n    throw new Error(`Unknown operator: ${i}`);\n  }\n  evaluate(i = {}) {\n    throw new Error(\"Empty Expression - Must be defined in child classes\");\n  }\n  toString() {\n    return \"\";\n  }\n}\nclass S extends h {\n  constructor(e) {\n    super();\n    n(this, \"innerExpression\");\n    if (this.innerExpression = e, !(this.innerExpression instanceof h))\n      throw new Error(\"No inner expression given for bracket expression\");\n  }\n  evaluate(e = {}) {\n    return this.innerExpression.evaluate(e);\n  }\n  toString() {\n    return `(${this.innerExpression.toString()})`;\n  }\n}\nclass w extends h {\n  constructor(e, t = \"number\") {\n    super();\n    n(this, \"value\");\n    n(this, \"type\");\n    switch (this.value = Number(e), t) {\n      case \"number\":\n        if (this.value = Number(e), isNaN(this.value))\n          throw new Error(\"Cannot parse number: \" + e);\n        break;\n      case \"string\":\n        this.value = String(e);\n        break;\n      default:\n        throw new Error(\"Invalid value type: \" + t);\n    }\n    this.type = t;\n  }\n  evaluate() {\n    return this.value;\n  }\n  toString() {\n    switch (this.type) {\n      case \"number\":\n        return String(this.value);\n      case \"string\":\n        return '\"' + this.value + '\"';\n      default:\n        throw new Error(\"Invalid type\");\n    }\n  }\n}\nclass E extends h {\n  constructor(e, t, r) {\n    super();\n    n(this, \"operator\");\n    n(this, \"left\");\n    n(this, \"right\");\n    if (![\"+\", \"-\"].includes(e))\n      throw new Error(`Operator not allowed in Plus/Minus expression: ${e}`);\n    this.operator = e, this.left = t, this.right = r;\n  }\n  evaluate(e = {}) {\n    const t = this.left.evaluate(e), r = this.right.evaluate(e);\n    if (p.throwIfNotNumber(t), p.throwIfNotNumber(r), this.operator === \"+\")\n      return Number(t) + Number(r);\n    if (this.operator === \"-\")\n      return Number(t) - Number(r);\n    throw new Error(\"Unknown operator for PlusMinus expression\");\n  }\n  toString() {\n    return `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n  }\n}\nclass x extends h {\n  constructor(e, t, r) {\n    super();\n    n(this, \"operator\");\n    n(this, \"left\");\n    n(this, \"right\");\n    if (![\"*\", \"/\"].includes(e))\n      throw new Error(`Operator not allowed in Multiply/Division expression: ${e}`);\n    this.operator = e, this.left = t, this.right = r;\n  }\n  evaluate(e = {}) {\n    const t = this.left.evaluate(e), r = this.right.evaluate(e);\n    if (p.throwIfNotNumber(t), p.throwIfNotNumber(r), this.operator === \"*\")\n      return Number(t) * Number(r);\n    if (this.operator === \"/\")\n      return Number(t) / Number(r);\n    throw new Error(\"Unknown operator for MultDiv expression\");\n  }\n  toString() {\n    return `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n  }\n}\nclass b extends h {\n  constructor(e, t) {\n    super();\n    n(this, \"base\");\n    n(this, \"exponent\");\n    this.base = e, this.exponent = t;\n  }\n  evaluate(e = {}) {\n    const t = this.base.evaluate(e), r = this.exponent.evaluate(e);\n    return p.throwIfNotNumber(t), p.throwIfNotNumber(r), Math.pow(Number(t), Number(r));\n  }\n  toString() {\n    return `${this.base.toString()}^${this.exponent.toString()}`;\n  }\n}\nclass d extends h {\n  constructor(e, t, r) {\n    super();\n    n(this, \"operator\");\n    n(this, \"left\");\n    n(this, \"right\");\n    if (![\"<\", \">\", \"<=\", \">=\", \"=\", \"!=\"].includes(e))\n      throw new Error(`Operator not allowed in Logical expression: ${e}`);\n    this.operator = e, this.left = t, this.right = r;\n  }\n  evaluate(e = {}) {\n    const t = this.left.evaluate(e), r = this.right.evaluate(e);\n    switch (this.operator) {\n      case \"<\":\n        return t < r ? 1 : 0;\n      case \">\":\n        return t > r ? 1 : 0;\n      case \"<=\":\n        return t <= r ? 1 : 0;\n      case \">=\":\n        return t >= r ? 1 : 0;\n      case \"=\":\n        return t === r ? 1 : 0;\n      case \"!=\":\n        return t !== r ? 1 : 0;\n    }\n    throw new Error(\"Unknown operator for Logical expression\");\n  }\n  toString() {\n    return `${this.left.toString()} ${this.operator} ${this.right.toString()}`;\n  }\n}\nclass k extends h {\n  constructor(e, t, r = null) {\n    super();\n    n(this, \"fn\");\n    n(this, \"varPath\");\n    n(this, \"argumentExpressions\");\n    n(this, \"formulaObject\");\n    n(this, \"blacklisted\");\n    this.fn = e != null ? e : \"\", this.varPath = this.fn.split(\".\"), this.argumentExpressions = t || [], this.formulaObject = r, this.blacklisted = void 0;\n  }\n  evaluate(e = {}) {\n    var a;\n    e = e || {};\n    const t = this.argumentExpressions.map((s) => s.evaluate(e));\n    try {\n      let s = m(e, this.varPath, this.fn);\n      if (s instanceof Function)\n        return s.apply(this, t);\n    } catch (s) {\n    }\n    let r;\n    try {\n      r = m((a = this.formulaObject) != null ? a : {}, this.varPath, this.fn);\n    } catch (s) {\n    }\n    if (this.formulaObject && r instanceof Function) {\n      if (this.isBlacklisted())\n        throw new Error(\"Blacklisted function called: \" + this.fn);\n      return r.apply(this.formulaObject, t);\n    }\n    try {\n      const s = m(Math, this.varPath, this.fn);\n      if (s instanceof Function)\n        return t.forEach((o) => {\n          V.throwIfNotNumber(o);\n        }), s.apply(this, t);\n    } catch (s) {\n    }\n    throw new Error(\"Function not found: \" + this.fn);\n  }\n  toString() {\n    return `${this.fn}(${this.argumentExpressions.map((e) => e.toString()).join(\", \")})`;\n  }\n  isBlacklisted() {\n    return this.blacklisted === void 0 && (this.blacklisted = N.functionBlacklist.includes(\n      this.formulaObject ? this.formulaObject[this.fn] : null\n    )), this.blacklisted;\n  }\n}\nfunction m(l, i, e) {\n  let t = l;\n  for (let r of i) {\n    if (typeof t != \"object\")\n      throw new Error(`Cannot evaluate ${r}, property not found (from path ${e})`);\n    if (t[r] === void 0)\n      throw new Error(`Cannot evaluate ${r}, property not found (from path ${e})`);\n    t = t[r];\n  }\n  if (typeof t == \"object\")\n    throw new Error(\"Invalid value\");\n  return t;\n}\nclass y extends h {\n  constructor(e, t = null) {\n    super();\n    n(this, \"fullPath\");\n    n(this, \"varPath\");\n    n(this, \"formulaObject\");\n    this.formulaObject = t, this.fullPath = e, this.varPath = e.split(\".\");\n  }\n  evaluate(e = {}) {\n    var r;\n    let t;\n    try {\n      t = m(e, this.varPath, this.fullPath);\n    } catch (a) {\n    }\n    if (t === void 0 && (t = m((r = this.formulaObject) != null ? r : {}, this.varPath, this.fullPath)), typeof t == \"function\" || typeof t == \"object\")\n      throw new Error(`Cannot use ${this.fullPath} as value: It contains a non-numerical value.`);\n    return t;\n  }\n  toString() {\n    return `${this.varPath.join(\".\")}`;\n  }\n}\nconst u = class u {\n  /**\n   * Creates a new Formula instance\n   *\n   * Optional configuration can be set in the options object:\n   *\n   * - memoization (bool): If true, results are stored and re-used when evaluate() is called with the same parameters\n   *\n   * @param {String} fStr The formula string, e.g. 'sin(x)/cos(y)'\n   * @param {Object} options An options object. Supported options:\n   *    - memoization (bool): If true, results are stored and re-used when evaluate() is called with the same parameters\n   * @param {Formula} parentFormula Internally used to build a Formula AST\n   */\n  constructor(i, e = {}) {\n    n(this, \"formulaExpression\");\n    n(this, \"options\");\n    n(this, \"formulaStr\");\n    n(this, \"_variables\");\n    n(this, \"_memory\");\n    this.formulaExpression = null, this.options = { memoization: !1, ...e }, this.formulaStr = \"\", this._variables = [], this._memory = {}, this.setFormula(i);\n  }\n  /**\n   * Re-sets the given String and parses it to a formula expression. Can be used after initialization,\n   * to re-use the Formula object.\n   *\n   * @param {String} formulaString The formula string to set/parse\n   * @return {this} The Formula object (this)\n   */\n  setFormula(i) {\n    return i && (this.formulaExpression = null, this._variables = [], this._memory = {}, this.formulaStr = i, this.formulaExpression = this.parse(i)), this;\n  }\n  /**\n   * Enable memoization: An expression is only evaluated once for the same input.\n   * Further evaluations with the same input will return the in-memory stored result.\n   */\n  enableMemoization() {\n    this.options.memoization = !0;\n  }\n  /**\n   * Disable in-memory memoization: each call to evaluate() is executed from scratch.\n   */\n  disableMemoization() {\n    this.options.memoization = !1, this._memory = {};\n  }\n  /**\n   * Splits the given string by ',', makes sure the ',' is not within\n   * a sub-expression\n   * e.g.: str = \"x,pow(3,4)\" returns 2 elements: x and pow(3,4).\n   */\n  splitFunctionParams(i) {\n    let e = 0, t = \"\";\n    const r = [];\n    for (let a of i.split(\"\"))\n      if (a === \",\" && e === 0)\n        r.push(t), t = \"\";\n      else if (a === \"(\")\n        e++, t += a;\n      else if (a === \")\") {\n        if (e--, t += a, e < 0)\n          throw new Error(\"ERROR: Too many closing parentheses!\");\n      } else\n        t += a;\n    if (e !== 0)\n      throw new Error(\"ERROR: Too many opening parentheses!\");\n    return t.length > 0 && r.push(t), r;\n  }\n  /**\n   * Cleans the input string from unnecessary whitespace,\n   * and replaces some known constants:\n   */\n  cleanupInputFormula(i) {\n    const e = [];\n    return i.split('\"').forEach((r, a) => {\n      a % 2 === 0 && (r = r.replace(/[\\s]+/g, \"\"), Object.keys(g).forEach((s) => {\n        r = r.replace(new RegExp(`\\\\b${s}\\\\b`, \"g\"), `[${s}]`);\n      })), e.push(r);\n    }), e.join('\"');\n  }\n  /**\n   * Parses the given formula string by using a state machine into a single Expression object,\n   * which represents an expression tree (aka AST).\n   *\n   * First, we split the string into 'expression': An expression can be:\n   *   - a number, e.g. '3.45'\n   *   - an unknown variable, e.g. 'x'\n   *   - a single char operator, such as '*','+' etc...\n   *   - a named variable, in [], e.g. [myvar]\n   *   - a function, such as sin(x)\n   *   - a parenthessed expression, containing other expressions\n   *\n   * We want to create an expression tree out of the string. This is done in 2 stages:\n   * 1. form single expressions from the string: parse the string into known expression objects:\n   *   - numbers/[variables]/\"strings\"\n   *   - operators\n   *   - braces (with a sub-expression)\n   *   - functions (with sub-expressions (aka argument expressions))\n   *   This will lead to an array of expressions.\n   *  As an example:\n   *  \"2 + 3 * (4 + 3 ^ 5) * sin(PI * x)\" forms an array of the following expressions:\n   *  `[2, +, 3, *, bracketExpr(4,+,3,^,5), * , functionExpr(PI,*,x)]`\n   * 2. From the raw expression array we form an expression tree by evaluating the expressions in the correct order:\n   *    e.g.:\n   *  the expression array `[2, +, 3, *, bracketExpr(4,+,3,^,5), * , functionExpr(PI,*,x)]` will be transformed into the expression tree:\n   *  ```\n   *         root expr:  (+)\n   *                     / \\\n   *                    2    (*)\n   *                        / \\\n   *                     (*)  functionExpr(...)\n   *                     / \\\n   *                    3   (bracket(..))\n   * ```\n   *\n   * In the end, we have a single root expression node, which then can be evaluated in the evaluate() function.\n   *\n   * @param {String} str The formula string, e.g. '3*sin(PI/x)'\n   * @returns {Expression} An expression object, representing the expression tree\n   */\n  parse(i) {\n    return i = this.cleanupInputFormula(i), this._do_parse(i);\n  }\n  /**\n   * @see parse(): this is the recursive parse function, without the clean string part.\n   * @param {String} str\n   * @returns {Expression} An expression object, representing the expression tree\n   */\n  _do_parse(i) {\n    let e = i.length - 1, t = 0, r = \"initial\", a = [], s = \"\", o = \"\", v = null, f = 0, c = \"\";\n    for (; t <= e; ) {\n      switch (r) {\n        case \"initial\":\n          if (s = i.charAt(t), s.match(/[0-9.]/))\n            r = \"within-nr\", o = \"\", t--;\n          else if (this.isOperator(s)) {\n            if (s === \"-\" && (a.length === 0 || this.isOperatorExpr(a[a.length - 1]))) {\n              r = \"within-nr\", o = \"-\";\n              break;\n            }\n            if (t === e || this.isOperatorExpr(a[a.length - 1])) {\n              r = \"invalid\";\n              break;\n            } else\n              a.push(\n                h.createOperatorExpression(s, new h(), new h())\n              ), r = \"initial\";\n          } else if ([\">\", \"<\", \"=\", \"!\"].includes(s))\n            if (t === e) {\n              r = \"invalid\";\n              break;\n            } else\n              r = \"within-logical-operator\", o = s;\n          else\n            s === \"(\" ? (r = \"within-parentheses\", o = \"\", f = 0) : s === \"[\" ? (r = \"within-named-var\", o = \"\") : s.match(/[\"']/) ? (r = \"within-string\", c = s, o = \"\") : s.match(/[a-zA-Z]/) && (t < e && i.charAt(t + 1).match(/[a-zA-Z0-9_.]/) ? (o = s, r = \"within-func\") : (a.length > 0 && a[a.length - 1] instanceof w && a.push(\n              h.createOperatorExpression(\"*\", new h(), new h())\n            ), a.push(new y(s, this)), this.registerVariable(s), r = \"initial\", o = \"\"));\n          break;\n        case \"within-nr\":\n          s = i.charAt(t), s.match(/[0-9.]/) ? (o += s, t === e && (a.push(new w(o)), r = \"initial\")) : (o === \"-\" && (o = \"-1\"), a.push(new w(o)), o = \"\", r = \"initial\", t--);\n          break;\n        case \"within-func\":\n          if (s = i.charAt(t), s.match(/[a-zA-Z0-9_.]/))\n            o += s;\n          else if (s === \"(\")\n            v = o, o = \"\", f = 0, r = \"within-func-parentheses\";\n          else\n            throw new Error(\"Wrong character for function at position \" + t);\n          break;\n        case \"within-named-var\":\n          if (s = i.charAt(t), s === \"]\")\n            a.push(new y(o, this)), this.registerVariable(o), o = \"\", r = \"initial\";\n          else if (s.match(/[a-zA-Z0-9_.]/))\n            o += s;\n          else\n            throw new Error(\"Character not allowed within named variable: \" + s);\n          break;\n        case \"within-string\":\n          s = i.charAt(t), s === c ? (a.push(new w(o, \"string\")), o = \"\", r = \"initial\", c = \"\") : o += s;\n          break;\n        case \"within-parentheses\":\n        case \"within-func-parentheses\":\n          if (s = i.charAt(t), c)\n            s === c && (c = \"\"), o += s;\n          else if (s === \")\")\n            if (f <= 0) {\n              if (r === \"within-parentheses\")\n                a.push(new S(this._do_parse(o)));\n              else if (r === \"within-func-parentheses\") {\n                let M = this.splitFunctionParams(o).map((P) => this._do_parse(P));\n                a.push(new k(v, M, this)), v = null;\n              }\n              r = \"initial\";\n            } else\n              f--, o += s;\n          else\n            s === \"(\" ? (f++, o += s) : (s.match(/[\"']/) && (c = s), o += s);\n          break;\n        case \"within-logical-operator\":\n          s = i.charAt(t), s === \"=\" && (o += s, t++), a.push(h.createOperatorExpression(o, new h(), new h())), o = \"\", r = \"initial\", t--;\n          break;\n      }\n      t++;\n    }\n    if (r !== \"initial\")\n      throw new Error(\"Could not parse formula: Syntax error.\");\n    return this.buildExpressionTree(a);\n  }\n  /**\n   * @see parse(): Builds an expression tree from the given expression array.\n   * Builds a tree with a single root expression in the correct order of operator precedence.\n   *\n   * Note that the given expression objects are modified and linked.\n   *\n   * @param {*} expressions\n   * @return {Expression} The root Expression of the built expression tree\n   */\n  buildExpressionTree(i) {\n    if (i.length < 1)\n      throw new Error(\"No expression given!\");\n    const e = [...i];\n    let t = 0, r = null;\n    for (; t < e.length; )\n      if (r = e[t], r instanceof b) {\n        if (t === 0 || t === e.length - 1)\n          throw new Error(\"Wrong operator position!\");\n        r.base = e[t - 1], r.exponent = e[t + 1], e[t - 1] = r, e.splice(t, 2);\n      } else\n        t++;\n    for (t = 0, r = null; t < e.length; )\n      if (r = e[t], r instanceof x) {\n        if (t === 0 || t === e.length - 1)\n          throw new Error(\"Wrong operator position!\");\n        r.left = e[t - 1], r.right = e[t + 1], e[t - 1] = r, e.splice(t, 2);\n      } else\n        t++;\n    for (t = 0, r = null; t < e.length; )\n      if (r = e[t], r instanceof E) {\n        if (t === 0 || t === e.length - 1)\n          throw new Error(\"Wrong operator position!\");\n        r.left = e[t - 1], r.right = e[t + 1], e[t - 1] = r, e.splice(t, 2);\n      } else\n        t++;\n    for (t = 0, r = null; t < e.length; )\n      if (r = e[t], r instanceof d) {\n        if (t === 0 || t === e.length - 1)\n          throw new Error(\"Wrong operator position!\");\n        r.left = e[t - 1], r.right = e[t + 1], e[t - 1] = r, e.splice(t, 2);\n      } else\n        t++;\n    if (e.length !== 1)\n      throw new Error(\"Could not parse formula: incorrect syntax?\");\n    return e[0];\n  }\n  isOperator(i) {\n    return typeof i == \"string\" && i.match(/[+\\-*/^]/);\n  }\n  isOperatorExpr(i) {\n    return i instanceof E || i instanceof x || i instanceof b || i instanceof d;\n  }\n  registerVariable(i) {\n    this._variables.indexOf(i) < 0 && this._variables.push(i);\n  }\n  getVariables() {\n    return this._variables;\n  }\n  /**\n   * Evaluates a Formula by delivering values for the Formula's variables.\n   * E.g. if the formula is '3*x^2 + 2*x + 4', you should call `evaulate` as follows:\n   *\n   * evaluate({x:2}) --> Result: 20\n   *\n   * @param {ValueObject|Array<ValueObject>} valueObj An object containing values for variables and (unknown) functions,\n   *   or an array of such objects: If an array is given, all objects are evaluated and the results\n   *   also returned as array.\n   * @return {Number|String|(Number|String)[]} The evaluated result, or an array with results\n   */\n  evaluate(i) {\n    if (i instanceof Array)\n      return i.map((t) => this.evaluate(t));\n    let e = this.getExpression();\n    if (!(e instanceof h))\n      throw new Error(\"No expression set: Did you init the object with a Formula?\");\n    if (this.options.memoization) {\n      let t = this.resultFromMemory(i);\n      return t !== null || (t = e.evaluate({ ...g, ...i }), this.storeInMemory(i, t)), t;\n    }\n    return e.evaluate({ ...g, ...i });\n  }\n  hashValues(i) {\n    return JSON.stringify(i);\n  }\n  resultFromMemory(i) {\n    let e = this.hashValues(i), t = this._memory[e];\n    return t !== void 0 ? t : null;\n  }\n  storeInMemory(i, e) {\n    this._memory[this.hashValues(i)] = e;\n  }\n  getExpression() {\n    return this.formulaExpression;\n  }\n  getExpressionString() {\n    return this.formulaExpression ? this.formulaExpression.toString() : \"\";\n  }\n  static calc(i, e = null, t = {}) {\n    return e = e != null ? e : {}, new u(i, t).evaluate(e);\n  }\n};\nn(u, \"Expression\", h), n(u, \"BracketExpression\", S), n(u, \"PowerExpression\", b), n(u, \"MultDivExpression\", x), n(u, \"PlusMinusExpression\", E), n(u, \"LogicalExpression\", d), n(u, \"ValueExpression\", w), n(u, \"VariableExpression\", y), n(u, \"FunctionExpression\", k), n(u, \"MATH_CONSTANTS\", g), // Create a function blacklist:\nn(u, \"functionBlacklist\", Object.getOwnPropertyNames(u.prototype).filter((i) => u.prototype[i] instanceof Function).map((i) => u.prototype[i]));\nlet N = u;\nexport {\n  N as default\n};\n//# sourceMappingURL=fparser.js.map\n","import Formula from \"fparser\"\nimport { scaleLinear, scaleLog } from \"d3-scale\"\nimport { ScaleType } from \"@ourworldindata/types\"\n\nexport function generateComparisonLinePoints(\n    lineFunction: string = \"x\",\n    xScaleDomain: [number, number],\n    yScaleDomain: [number, number],\n    xScaleType: ScaleType,\n    yScaleType: ScaleType\n): [number, number][] {\n    const formula = parseEquation(lineFunction)\n    const yFunc = (x: number): number | undefined =>\n        evalFormula(formula, { x }, undefined)\n\n    // Construct control data by running the equation across sample points\n    const numPoints = 500\n\n    const scaleFunction = xScaleType === ScaleType.log ? scaleLog : scaleLinear\n    const scale = scaleFunction().domain(xScaleDomain).range([0, numPoints])\n\n    const controlData: Array<[number, number]> = []\n    for (let i = 0; i < numPoints; i++) {\n        const x = scale.invert(i)\n        const y = yFunc(x)\n\n        if (y === undefined || Number.isNaN(x) || Number.isNaN(y)) continue\n        if (xScaleType === ScaleType.log && x <= 0) continue\n        if (yScaleType === ScaleType.log && y <= 0) continue\n        if (y > yScaleDomain[1]) continue\n        controlData.push([x, y])\n    }\n\n    return controlData\n}\n\nexport function evalFormula<D>(\n    expr: Formula | undefined,\n    context: Record<string, number>,\n    defaultOnError: D\n): number | D {\n    if (expr === undefined) return defaultOnError\n    try {\n        return expr.evaluate(context) as number\n    } catch {\n        return defaultOnError\n    }\n}\n\nexport function parseEquation(equation: string): Formula | undefined {\n    try {\n        const formula = new Formula(equation)\n        formula.ln = Math.log\n        formula.e = Math.E\n        return formula\n    } catch (e) {\n        console.error(e)\n        return undefined\n    }\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { line as d3_line, curveLinear } from \"d3-shape\"\nimport { guid, PointVector, makeFigmaId } from \"@ourworldindata/utils\"\nimport { CustomComparisonLineConfig } from \"@ourworldindata/types\"\nimport { generateComparisonLinePoints } from \"./ComparisonLineGenerator\"\nimport { Halo } from \"@ourworldindata/components\"\nimport { GRAPHER_TEXT_OUTLINE_FACTOR } from \"../core/GrapherConstants\"\nimport { ClipPath, makeClipPath } from \"../chart/ChartUtils\"\nimport {\n    COMPARISON_LINE_STYLE,\n    COMPARISON_LINE_LABEL_STYLE,\n} from \"./ComparisonLineConstants\"\nimport { ComparisonLineProps } from \"./ComparisonLine\"\n\n@observer\nexport class CustomComparisonLine extends React.Component<\n    ComparisonLineProps<CustomComparisonLineConfig>\n> {\n    private renderUid = guid()\n    private pathId = `path-${this.renderUid}`\n\n    constructor(props: ComparisonLineProps<CustomComparisonLineConfig>) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get fontSize(): number {\n        return this.props.dualAxis.comparisonLineLabelFontSize\n    }\n\n    @computed private get haloOutlineWidth(): number {\n        return GRAPHER_TEXT_OUTLINE_FACTOR * this.fontSize\n    }\n\n    @computed get clipPath(): ClipPath {\n        return makeClipPath({\n            name: \"axisBounds\",\n            renderUid: this.renderUid,\n            box: this.props.dualAxis.innerBounds,\n        })\n    }\n\n    @computed private get controlData(): [number, number][] {\n        const { comparisonLine, dualAxis } = this.props\n        const { horizontalAxis, verticalAxis } = dualAxis\n\n        return generateComparisonLinePoints(\n            comparisonLine.yEquals,\n            horizontalAxis.domain,\n            verticalAxis.domain,\n            horizontalAxis.scaleType,\n            verticalAxis.scaleType\n        )\n    }\n\n    @computed private get linePath(): string | null {\n        const { controlData } = this\n        const { horizontalAxis, verticalAxis } = this.props.dualAxis\n        const line = d3_line()\n            .curve(curveLinear)\n            .x((d) => horizontalAxis.place(d[0]))\n            .y((d) => verticalAxis.place(d[1]))\n        return line(controlData)\n    }\n\n    @computed private get placedLabel():\n        | { x: number; y: number; angle: number; text: string }\n        | undefined {\n        const { label } = this.props.comparisonLine\n        if (!label) return\n\n        const { controlData } = this\n        const { horizontalAxis, verticalAxis, innerBounds } =\n            this.props.dualAxis\n\n        // Find the points of the line that are actually placeable on the chart\n        const linePoints = controlData\n            .map(\n                (d) =>\n                    new PointVector(\n                        horizontalAxis.place(d[0]),\n                        verticalAxis.place(d[1])\n                    )\n            )\n            .filter((p) => innerBounds.contains(p))\n        if (!linePoints.length) return\n\n        const labelPosition = linePoints[Math.floor(linePoints.length / 2)]\n        const p1 = linePoints[0]\n        const p2 = linePoints[linePoints.length - 1]\n        const angle = (Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180) / Math.PI\n\n        return {\n            x: labelPosition.x,\n            y: labelPosition.y,\n            angle: angle,\n            text: label,\n        }\n    }\n\n    private renderLabel(): React.ReactElement | null {\n        const { pathId, renderUid, placedLabel } = this\n\n        if (!placedLabel) return null\n\n        return (\n            <text\n                style={{\n                    ...COMPARISON_LINE_LABEL_STYLE,\n                    textAnchor: \"end\",\n                    fontSize: this.fontSize,\n                }}\n                clipPath={this.clipPath.id}\n            >\n                <Halo\n                    id={`halo-${renderUid}`}\n                    outlineWidth={this.haloOutlineWidth}\n                    outlineColor={this.props.backgroundColor}\n                >\n                    <textPath\n                        baselineShift=\"-0.2rem\"\n                        href={`#${pathId}`}\n                        startOffset=\"90%\"\n                    >\n                        {placedLabel.text}\n                    </textPath>\n                </Halo>\n            </text>\n        )\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.linePath) return null\n\n        return (\n            <g\n                id={makeFigmaId(\n                    \"comparison-line\",\n                    this.props.comparisonLine.label\n                )}\n            >\n                {this.clipPath.element}\n                <path\n                    style={COMPARISON_LINE_STYLE}\n                    id={this.pathId}\n                    d={this.linePath}\n                    clipPath={this.clipPath.id}\n                />\n                {this.renderLabel()}\n            </g>\n        )\n    }\n}\n","import { DualAxis } from \"../axis/Axis\"\nimport {\n    Color,\n    ComparisonLineConfig,\n    VerticalComparisonLineConfig,\n} from \"@ourworldindata/types\"\nimport { VerticalComparisonLine } from \"./VerticalComparisonLine\"\nimport { CustomComparisonLine } from \"./CustomComparisonLine\"\nimport { isValidVerticalComparisonLineConfig } from \"./ComparisonLineHelpers\"\n\nexport interface ComparisonLineProps<LineConfig extends ComparisonLineConfig> {\n    dualAxis: DualAxis\n    comparisonLine: LineConfig\n    backgroundColor?: Color\n}\n\nexport const ComparisonLine = <LineConfig extends ComparisonLineConfig>(\n    props: ComparisonLineProps<LineConfig>\n) => {\n    if (isVerticalComparisonLineProps(props)) {\n        return <VerticalComparisonLine {...props} />\n    } else {\n        return <CustomComparisonLine {...props} />\n    }\n}\n\nfunction isVerticalComparisonLineProps(\n    props: ComparisonLineProps<ComparisonLineConfig>\n): props is ComparisonLineProps<VerticalComparisonLineConfig> {\n    return isValidVerticalComparisonLineConfig(props.comparisonLine)\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport * as R from \"remeda\"\nimport {\n    Bounds,\n    HorizontalAlign,\n    Position,\n    VerticalAlign,\n    dyFromAlign,\n    textAnchorFromAlign,\n    makeFigmaId,\n    Point,\n} from \"@ourworldindata/utils\"\nimport { VerticalAxis, HorizontalAxis, DualAxis } from \"./Axis\"\nimport classNames from \"classnames\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\nimport { ScaleType, DetailsMarker } from \"@ourworldindata/types\"\nimport { ComparisonLine } from \"../comparisonLine/ComparisonLine\"\nimport { DEFAULT_GRAPHER_BOUNDS } from \"../core/GrapherConstants\"\n\nconst TICK_COLOR = \"#ddd\"\nconst FAINT_TICK_COLOR = \"#eee\"\nconst SOLID_TICK_COLOR = \"#999\"\n\ninterface VerticalAxisGridLinesProps {\n    verticalAxis: VerticalAxis\n    bounds: Bounds\n    strokeWidth?: number\n    dashPattern?: string\n}\n\n@observer\nexport class VerticalAxisGridLines extends React.Component<VerticalAxisGridLinesProps> {\n    override render(): React.ReactElement {\n        const { bounds, verticalAxis, strokeWidth } = this.props\n        const axis = verticalAxis.clone()\n        axis.range = bounds.yRange()\n\n        return (\n            <g\n                id={makeFigmaId(\"horizontal-grid-lines\")}\n                className={classNames(\"AxisGridLines\", \"horizontalLines\")}\n            >\n                {axis.getTickValues().map((t) => {\n                    const color = t.faint\n                        ? FAINT_TICK_COLOR\n                        : t.solid\n                          ? SOLID_TICK_COLOR\n                          : TICK_COLOR\n                    const dasharray = this.props.dashPattern ?? \"4,4\"\n\n                    const className = t.value === 0 ? \"zero-line\" : undefined\n\n                    return (\n                        <line\n                            id={makeFigmaId(verticalAxis.formatTick(t.value))}\n                            className={className}\n                            key={t.value}\n                            x1={bounds.left.toFixed(2)}\n                            y1={axis.place(t.value)}\n                            x2={bounds.right.toFixed(2)}\n                            y2={axis.place(t.value)}\n                            stroke={color}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={t.solid ? undefined : dasharray}\n                        />\n                    )\n                })}\n            </g>\n        )\n    }\n}\n\ninterface HorizontalAxisGridLinesProps {\n    horizontalAxis: HorizontalAxis\n    bounds?: Bounds\n    strokeWidth?: number\n    dashPattern?: string\n}\n\n@observer\nexport class HorizontalAxisGridLines extends React.Component<HorizontalAxisGridLinesProps> {\n    constructor(props: HorizontalAxisGridLinesProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    override render(): React.ReactElement {\n        const { horizontalAxis, strokeWidth } = this.props\n        const { bounds } = this\n        const axis = horizontalAxis.clone()\n        axis.range = bounds.xRange()\n\n        return (\n            <g\n                id={makeFigmaId(\"vertical-grid-lines\")}\n                className={classNames(\"AxisGridLines\", \"verticalLines\")}\n            >\n                {axis.getTickValues().map((t) => {\n                    const color = t.faint\n                        ? FAINT_TICK_COLOR\n                        : t.solid\n                          ? SOLID_TICK_COLOR\n                          : TICK_COLOR\n                    const dasharray = this.props.dashPattern ?? \"4,4\"\n\n                    return (\n                        <line\n                            id={makeFigmaId(horizontalAxis.formatTick(t.value))}\n                            key={t.value}\n                            x1={axis.place(t.value)}\n                            y1={bounds.bottom.toFixed(2)}\n                            x2={axis.place(t.value)}\n                            y2={bounds.top.toFixed(2)}\n                            stroke={color}\n                            strokeWidth={strokeWidth}\n                            strokeDasharray={t.solid ? undefined : dasharray}\n                        />\n                    )\n                })}\n            </g>\n        )\n    }\n}\n\ninterface HorizontalAxisZeroLineProps {\n    horizontalAxis: HorizontalAxis\n    bounds: Bounds\n    strokeWidth?: number\n    align?: HorizontalAlign\n}\n\n@observer\nexport class HorizontalAxisZeroLine extends React.Component<HorizontalAxisZeroLineProps> {\n    override render(): React.ReactElement {\n        const {\n            bounds,\n            horizontalAxis,\n            align = HorizontalAlign.center,\n            strokeWidth = 1,\n        } = this.props\n        const axis = horizontalAxis.clone()\n        axis.range = bounds.xRange()\n\n        // the zero line is either drawn at the center of the zero tick\n        // or at the edge of the tick, either to the left or to the right\n        const offset =\n            align === HorizontalAlign.center\n                ? 0\n                : align === HorizontalAlign.right\n                  ? -strokeWidth / 2\n                  : strokeWidth / 2\n        const x = axis.place(0) + offset\n\n        return (\n            <line\n                id={makeFigmaId(\"vertical-zero-line\")}\n                x1={x.toFixed(2)}\n                y1={bounds.bottom.toFixed(2)}\n                x2={x.toFixed(2)}\n                y2={bounds.top.toFixed(2)}\n                stroke={SOLID_TICK_COLOR}\n                strokeWidth={strokeWidth}\n            />\n        )\n    }\n}\n\ninterface VerticalAxisZeroLineProps {\n    verticalAxis: VerticalAxis\n    bounds: Bounds\n    stroke?: string\n    strokeWidth?: number\n    strokeDasharray?: string\n}\n\n@observer\nexport class VerticalAxisZeroLine extends React.Component<VerticalAxisZeroLineProps> {\n    override render(): React.ReactElement {\n        const {\n            bounds,\n            verticalAxis,\n            stroke = SOLID_TICK_COLOR,\n            strokeWidth = 1,\n            strokeDasharray,\n        } = this.props\n\n        const axis = verticalAxis.clone()\n        axis.range = bounds.yRange()\n\n        const y = axis.place(0)\n\n        return (\n            <line\n                id={makeFigmaId(\"horizontal-zero-line\")}\n                x1={bounds.left.toFixed(2)}\n                y1={y.toFixed(2)}\n                x2={bounds.right.toFixed(2)}\n                y2={y.toFixed(2)}\n                stroke={stroke}\n                strokeWidth={strokeWidth}\n                strokeDasharray={strokeDasharray}\n            />\n        )\n    }\n}\n\ninterface DualAxisViewProps {\n    dualAxis: DualAxis\n    highlightValue?: Point\n    showTickMarks?: boolean\n    labelColor?: string\n    tickColor?: string\n    lineWidth?: number\n    gridDashPattern?: string\n    detailsMarker?: DetailsMarker\n    backgroundColor?: string\n    showEndpointsOnly?: boolean\n}\n\n@observer\nexport class DualAxisComponent extends React.Component<DualAxisViewProps> {\n    override render(): React.ReactElement {\n        const {\n            dualAxis,\n            showTickMarks,\n            labelColor,\n            tickColor,\n            lineWidth,\n            gridDashPattern,\n            detailsMarker,\n            backgroundColor,\n            showEndpointsOnly,\n        } = this.props\n        const { bounds, horizontalAxis, verticalAxis, innerBounds } = dualAxis\n\n        const verticalGridlines = verticalAxis.hideGridlines ? null : (\n            <VerticalAxisGridLines\n                verticalAxis={verticalAxis}\n                bounds={innerBounds}\n                strokeWidth={lineWidth}\n                dashPattern={gridDashPattern}\n            />\n        )\n\n        const horizontalGridlines = horizontalAxis.hideGridlines ? null : (\n            <HorizontalAxisGridLines\n                horizontalAxis={horizontalAxis}\n                bounds={innerBounds}\n                strokeWidth={lineWidth}\n                dashPattern={gridDashPattern}\n            />\n        )\n\n        const verticalAxisComponent = verticalAxis.hideAxis ? null : (\n            <VerticalAxisComponent\n                bounds={bounds}\n                verticalAxis={verticalAxis}\n                labelColor={labelColor}\n                tickColor={tickColor}\n                detailsMarker={detailsMarker}\n                showEndpointsOnly={showEndpointsOnly}\n            />\n        )\n\n        const horizontalAxisComponent = horizontalAxis.hideAxis ? null : (\n            <HorizontalAxisComponent\n                bounds={bounds}\n                axis={horizontalAxis}\n                showTickMarks={showTickMarks}\n                preferredAxisPosition={innerBounds.bottom}\n                labelColor={labelColor}\n                tickColor={tickColor}\n                tickMarkWidth={lineWidth}\n                detailsMarker={detailsMarker}\n                showEndpointsOnly={showEndpointsOnly}\n            />\n        )\n\n        const comparisonLines = dualAxis.comparisonLines.map((line, index) => (\n            <ComparisonLine\n                key={`${line.label}-${index}`}\n                dualAxis={dualAxis}\n                comparisonLine={line}\n                backgroundColor={backgroundColor}\n            />\n        ))\n\n        return (\n            <>\n                {horizontalAxisComponent}\n                {verticalAxisComponent}\n                {verticalGridlines}\n                {horizontalGridlines}\n                {comparisonLines}\n            </>\n        )\n    }\n}\n\ninterface VerticalAxisComponentProps {\n    bounds: Bounds\n    verticalAxis: VerticalAxis\n    showTickMarks?: boolean\n    labelColor?: string\n    tickColor?: string\n    detailsMarker?: DetailsMarker\n    showEndpointsOnly?: boolean\n}\n\n@observer\nexport class VerticalAxisComponent extends React.Component<VerticalAxisComponentProps> {\n    override render(): React.ReactElement {\n        const {\n            bounds,\n            verticalAxis,\n            labelColor,\n            tickColor,\n            detailsMarker,\n            showTickMarks,\n            showEndpointsOnly,\n        } = this.props\n        const { tickLabels, labelTextWrap, logNoticeTextWrap, config } =\n            verticalAxis\n\n        let visibleTickLabels = tickLabels\n        if (showEndpointsOnly) {\n            visibleTickLabels = pickFirstAndLastElement(\n                R.sortBy(tickLabels, (label) => label.x)\n            )\n        }\n\n        const shouldShowLogNotice =\n            verticalAxis.shouldShowLogNotice &&\n            // Only show the notice if it fits in the margin\n            verticalAxis.logNoticeWidth <= verticalAxis.width\n\n        const tickX =\n            bounds.left + verticalAxis.width - verticalAxis.tickPadding\n\n        return (\n            <g id={makeFigmaId(\"vertical-axis\")} className=\"VerticalAxis\">\n                {shouldShowLogNotice && logNoticeTextWrap && (\n                    <React.Fragment key={logNoticeTextWrap.text}>\n                        {logNoticeTextWrap.renderSVG(tickX, bounds.top, {\n                            id: makeFigmaId(\"vertical-axis-log-notice\"),\n                            textProps: {\n                                fill: tickColor || GRAPHER_DARK_TEXT,\n                                textAnchor: textAnchorFromAlign(\n                                    HorizontalAlign.right\n                                ),\n                                fontStyle: \"italic\",\n                            },\n                            detailsMarker,\n                        })}\n                    </React.Fragment>\n                )}\n                {labelTextWrap && (\n                    <React.Fragment key={labelTextWrap.text}>\n                        {labelTextWrap.renderSVG(bounds.left, bounds.top, {\n                            id: makeFigmaId(\"vertical-axis-label\"),\n                            textProps: {\n                                fill: labelColor || GRAPHER_DARK_TEXT,\n                            },\n                            detailsMarker,\n                        })}\n                    </React.Fragment>\n                )}\n                {showTickMarks && (\n                    <g id={makeFigmaId(\"tick-marks\")}>\n                        {visibleTickLabels.map((label) => (\n                            <VerticalAxisTickMark\n                                id={makeFigmaId(label.formattedValue)}\n                                key={label.value}\n                                tickMarkYPosition={verticalAxis.place(\n                                    label.value\n                                )}\n                                tickMarkLeftPosition={\n                                    bounds.left + verticalAxis.width\n                                }\n                                color={SOLID_TICK_COLOR}\n                            />\n                        ))}\n                    </g>\n                )}\n                {!config.hideTickLabels && (\n                    <g id={makeFigmaId(\"tick-labels\")}>\n                        {visibleTickLabels.map((label) => {\n                            const { value, y, xAlign, yAlign, formattedValue } =\n                                label\n                            return (\n                                <text\n                                    key={value}\n                                    x={tickX.toFixed(2)}\n                                    y={y}\n                                    dy={dyFromAlign(\n                                        yAlign ?? VerticalAlign.middle\n                                    )}\n                                    textAnchor={textAnchorFromAlign(\n                                        xAlign ?? HorizontalAlign.right\n                                    )}\n                                    fill={tickColor || GRAPHER_DARK_TEXT}\n                                    fontSize={verticalAxis.tickFontSize}\n                                >\n                                    {formattedValue}\n                                </text>\n                            )\n                        })}\n                    </g>\n                )}\n            </g>\n        )\n    }\n}\n\nexport class HorizontalAxisComponent extends React.Component<{\n    bounds: Bounds\n    axis: HorizontalAxis\n    showTickMarks?: boolean\n    preferredAxisPosition?: number\n    labelColor?: string\n    tickColor?: string\n    tickMarkWidth?: number\n    detailsMarker?: DetailsMarker\n    showEndpointsOnly?: boolean\n}> {\n    constructor(props: {\n        bounds: Bounds\n        axis: HorizontalAxis\n        showTickMarks?: boolean\n        preferredAxisPosition?: number\n        labelColor?: string\n        tickColor?: string\n        tickMarkWidth?: number\n        detailsMarker?: DetailsMarker\n        showEndpointsOnly?: boolean\n    }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get scaleType(): ScaleType {\n        return this.props.axis.scaleType\n    }\n\n    set scaleType(scaleType: ScaleType) {\n        this.props.axis.config.scaleType = scaleType\n    }\n\n    // for scale selector. todo: cleanup\n    @computed get bounds(): Bounds {\n        const { bounds, axis } = this.props\n        if (axis.orient === Position.top)\n            return new Bounds(bounds.right, bounds.top + 30, 100, 100)\n        else return new Bounds(bounds.right, bounds.bottom - 30, 100, 100)\n    }\n\n    override render(): React.ReactElement {\n        const {\n            bounds,\n            axis,\n            showTickMarks,\n            preferredAxisPosition,\n            labelColor,\n            tickColor,\n            tickMarkWidth = 1,\n            detailsMarker,\n            showEndpointsOnly,\n        } = this.props\n        const { tickLabels, labelTextWrap: label, labelOffset, orient } = axis\n        const tickSize = 5\n        const horizontalAxisLabelsOnTop = orient === Position.top\n        const labelYPosition = horizontalAxisLabelsOnTop\n            ? bounds.top\n            : bounds.bottom - (label?.height ?? 0)\n\n        const tickMarksYPosition = horizontalAxisLabelsOnTop\n            ? bounds.top + axis.height - 5\n            : (preferredAxisPosition ?? bounds.bottom)\n\n        const tickLabelYPlacement = horizontalAxisLabelsOnTop\n            ? bounds.top + labelOffset + 10\n            : bounds.bottom - labelOffset\n\n        const showTickLabels = !axis.config.hideTickLabels\n\n        let visibleTickLabels = tickLabels\n        if (showEndpointsOnly) {\n            visibleTickLabels = pickFirstAndLastElement(\n                R.sortBy(tickLabels, (label) => label.x)\n            )\n        }\n\n        return (\n            <g id={makeFigmaId(\"horizontal-axis\")} className=\"HorizontalAxis\">\n                {label && (\n                    <React.Fragment key={label.text}>\n                        {label.renderSVG(axis.rangeCenter, labelYPosition, {\n                            id: makeFigmaId(\"horizontal-axis-label\"),\n                            textProps: {\n                                fill: labelColor || GRAPHER_DARK_TEXT,\n                                textAnchor: \"middle\",\n                            },\n                            detailsMarker,\n                        })}\n                    </React.Fragment>\n                )}\n                {showTickMarks && (\n                    <g id={makeFigmaId(\"tick-marks\")}>\n                        {visibleTickLabels.map((label) => (\n                            <line\n                                key={label.value}\n                                id={makeFigmaId(label.formattedValue)}\n                                x1={axis.place(label.value)}\n                                y1={tickMarksYPosition - tickMarkWidth / 2}\n                                x2={axis.place(label.value)}\n                                y2={tickMarksYPosition + tickSize}\n                                stroke={SOLID_TICK_COLOR}\n                                strokeWidth={tickMarkWidth}\n                            />\n                        ))}\n                    </g>\n                )}\n                {showTickLabels && (\n                    <g id={makeFigmaId(\"tick-labels\")}>\n                        {visibleTickLabels.map((label) => (\n                            <text\n                                key={label.value}\n                                x={label.x}\n                                y={tickLabelYPlacement}\n                                fill={tickColor || GRAPHER_DARK_TEXT}\n                                textAnchor={textAnchorFromAlign(\n                                    label.xAlign ?? HorizontalAlign.center\n                                )}\n                                fontSize={axis.tickFontSize}\n                            >\n                                {label.formattedValue}\n                            </text>\n                        ))}\n                    </g>\n                )}\n            </g>\n        )\n    }\n}\n\nexport class VerticalAxisTickMark extends React.Component<{\n    tickMarkLeftPosition: number\n    tickMarkYPosition: number\n    color: string\n    width?: number\n    id?: string\n}> {\n    override render(): React.ReactElement {\n        const { tickMarkYPosition, tickMarkLeftPosition, color, width, id } =\n            this.props\n        const tickSize = 5\n        const tickRight = tickMarkLeftPosition + tickSize\n        return (\n            <line\n                id={id}\n                x1={tickMarkLeftPosition}\n                y1={tickMarkYPosition}\n                x2={tickRight}\n                y2={tickMarkYPosition}\n                stroke={color}\n                strokeWidth={width}\n            />\n        )\n    }\n}\n\nfunction pickFirstAndLastElement<T>(array: T[]): T[] {\n    if (array.length < 2) return array\n    return [array.at(0), array.at(-1)] as [T, T]\n}\n","export default function(x) {\n  return x;\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","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","/* eslint-disable */\n/*\nDuplication of d3-geo-projection.geoPatterson and d3-geo-projection.geoRobinson\nfor webpack bundlesize purposes, as the original module wasn't tree-shakeable\n\nCopyright 2013-2021 Mike Bostock\n\nPermission to use, copy, modify, and/or distribute this software for any purpose\nwith or without fee is hereby granted, provided that the above copyright notice\nand this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\nOF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\nTHIS SOFTWARE.\n\nMIT License for https://github.com/scijs/integrate-adaptive-simpson\n\nThe MIT License (MIT)\n\nCopyright 2015 Ricky Reusser\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nimport { geoProjection, GeoProjection } from \"d3-geo\"\n\nconst epsilon = 1e-6\nconst epsilon2 = 1e-12\nconst pi = Math.PI\nconst halfPi = pi / 2\nconst degrees = 180 / pi\nconst radians = pi / 180\n\n// https://github.com/d3/d3-geo-projection/blob/main/src/patterson.js\nconst pattersonK1 = 1.0148,\n    pattersonK2 = 0.23185,\n    pattersonK3 = -0.14499,\n    pattersonK4 = 0.02406,\n    pattersonC1 = pattersonK1,\n    pattersonC2 = 5 * pattersonK2,\n    pattersonC3 = 7 * pattersonK3,\n    pattersonC4 = 9 * pattersonK4,\n    pattersonYmax = 1.790857183\n\nexport function pattersonRaw(lambda: number, phi: number): [number, number] {\n    const phi2 = phi * phi\n    return [\n        lambda,\n        phi *\n            (pattersonK1 +\n                phi2 *\n                    phi2 *\n                    (pattersonK2 + phi2 * (pattersonK3 + pattersonK4 * phi2))),\n    ]\n}\n\npattersonRaw.invert = function (x: number, y: number): [number, number] {\n    if (y > pattersonYmax) y = pattersonYmax\n    else if (y < -pattersonYmax) y = -pattersonYmax\n    let yc = y,\n        delta\n\n    do {\n        // Newton-Raphson\n        const y2 = yc * yc\n        yc -= delta =\n            (yc *\n                (pattersonK1 +\n                    y2 *\n                        y2 *\n                        (pattersonK2 + y2 * (pattersonK3 + pattersonK4 * y2))) -\n                y) /\n            (pattersonC1 +\n                y2 * y2 * (pattersonC2 + y2 * (pattersonC3 + pattersonC4 * y2)))\n    } while (Math.abs(delta) > epsilon)\n\n    return [x, yc]\n}\n\nexport function geoPatterson(): GeoProjection {\n    return geoProjection(pattersonRaw).scale(139.319)\n}\n\n// https://github.com/d3/d3-geo-projection/blob/main/src/robinson.js\nconst K = [\n    [0.9986, -0.062],\n    [1.0, 0.0],\n    [0.9986, 0.062],\n    [0.9954, 0.124],\n    [0.99, 0.186],\n    [0.9822, 0.248],\n    [0.973, 0.31],\n    [0.96, 0.372],\n    [0.9427, 0.434],\n    [0.9216, 0.4958],\n    [0.8962, 0.5571],\n    [0.8679, 0.6176],\n    [0.835, 0.6769],\n    [0.7986, 0.7346],\n    [0.7597, 0.7903],\n    [0.7186, 0.8435],\n    [0.6732, 0.8936],\n    [0.6213, 0.9394],\n    [0.5722, 0.9761],\n    [0.5322, 1.0],\n]\n\nK.forEach(function (d) {\n    d[1] *= 1.0144\n})\n\nexport function robinsonRaw(lambda: number, phi: number): [number, number] {\n    let k\n    let i = Math.min(18, (Math.abs(phi) * 36) / pi),\n        i0 = Math.floor(i),\n        di = i - i0,\n        ax = (k = K[i0])[0],\n        ay = k[1],\n        bx = (k = K[++i0])[0],\n        by = k[1],\n        cx = (k = K[Math.min(19, ++i0)])[0],\n        cy = k[1]\n    return [\n        lambda *\n            (bx + (di * (cx - ax)) / 2 + (di * di * (cx - 2 * bx + ax)) / 2),\n        (phi > 0 ? halfPi : -halfPi) *\n            (by + (di * (cy - ay)) / 2 + (di * di * (cy - 2 * by + ay)) / 2),\n    ]\n}\n\nrobinsonRaw.invert = function (x: number, y: number): [number, number] {\n    let yy = y / halfPi,\n        phi = yy * 90,\n        i = Math.min(18, Math.abs(phi / 5)),\n        i0 = Math.max(0, Math.floor(i))\n    do {\n        var ay = K[i0][1],\n            by = K[i0 + 1][1],\n            cy = K[Math.min(19, i0 + 2)][1],\n            u = cy - ay,\n            v = cy - 2 * by + ay,\n            t = (2 * (Math.abs(yy) - by)) / u,\n            c = v / u,\n            di = t * (1 - c * t * (1 - 2 * c * t))\n        if (di >= 0 || i0 === 1) {\n            phi = (y >= 0 ? 5 : -5) * (di + i)\n            var j = 50,\n                delta\n            do {\n                i = Math.min(18, Math.abs(phi) / 5)\n                i0 = Math.floor(i)\n                di = i - i0\n                ay = K[i0][1]\n                by = K[i0 + 1][1]\n                cy = K[Math.min(19, i0 + 2)][1]\n                phi -=\n                    (delta =\n                        (y >= 0 ? halfPi : -halfPi) *\n                            (by +\n                                (di * (cy - ay)) / 2 +\n                                (di * di * (cy - 2 * by + ay)) / 2) -\n                        y) * degrees\n            } while (Math.abs(delta) > epsilon2 && --j > 0)\n            break\n        }\n    } while (--i0 >= 0)\n    const ax = K[i0][0],\n        bx = K[i0 + 1][0],\n        cx = K[Math.min(19, i0 + 2)][0]\n    return [\n        x / (bx + (di * (cx - ax)) / 2 + (di * di * (cx - 2 * bx + ax)) / 2),\n        phi * radians,\n    ]\n}\n\nexport function geoRobinson(): GeoProjection {\n    return geoProjection(robinsonRaw).scale(152.63)\n}\n","import { geoConicConformal, geoAzimuthalEqualArea, GeoProjection } from \"d3-geo\"\nimport { geoRobinson, geoPatterson } from \"./d3-geo-projection.js\"\nimport { MapRegionName } from \"@ourworldindata/types\"\n\nexport const MAP_PROJECTIONS: Record<MapRegionName, GeoProjection> = {\n    World: geoRobinson(),\n\n    Africa: geoConicConformal()\n        .rotate([-25, 0])\n        .center([0, 0])\n        .parallels([30, -20]),\n\n    NorthAmerica: geoConicConformal()\n        .rotate([98, 0])\n        .center([0, 38])\n        .parallels([29.5, 45.5]),\n\n    SouthAmerica: geoConicConformal()\n        .rotate([68, 0])\n        .center([0, -14])\n        .parallels([10, -30]),\n\n    // From http://bl.ocks.org/dhoboy/ff8448ace9d5d567390a\n    Asia: geoPatterson()\n        .center([58, 54])\n        .scale(150)\n        .translate([0, 0])\n        .precision(0.1),\n\n    // From http://bl.ocks.org/espinielli/10587361\n    Europe: geoAzimuthalEqualArea()\n        .scale(200)\n        .translate([262, 1187])\n        .clipAngle(180 - 1e-3)\n        .precision(1),\n\n    Oceania: geoConicConformal()\n        .rotate([-135, 0])\n        .center([0, -20])\n        .parallels([-10, -30]),\n} as const\n","import * as topojson from \"topojson-client\"\nimport {\n    GeoFeature,\n    GlobeRenderFeature,\n    MapRenderFeature,\n    RenderFeatureType,\n} from \"./MapChartConstants\"\nimport { Bounds, lazy, MapRegionName, PointVector } from \"@ourworldindata/utils\"\nimport { MapTopology } from \"./MapTopology\"\nimport { geoBounds, geoCentroid, geoPath } from \"d3-geo\"\nimport { MAP_PROJECTIONS } from \"./MapProjections\"\n\n// Get the underlying geographical topology elements we're going to display\nexport const GeoFeatures: GeoFeature[] = (\n    topojson.feature(\n        MapTopology as any,\n        MapTopology.objects.world as any\n    ) as any\n).features\n\nexport const GeoFeaturesById = new Map(\n    GeoFeatures.map((feature) => [feature.id, feature])\n)\n\n// Get the svg path specification string for every feature\nconst geoPathCache = new Map<MapRegionName, string[]>()\nconst geoPathsFor = (regionName: MapRegionName): string[] => {\n    if (geoPathCache.has(regionName)) return geoPathCache.get(regionName)!\n\n    const projectionGeo = geoPath()\n        .digits(1)\n        .projection(MAP_PROJECTIONS[regionName])\n    const strs = GeoFeatures.map((feature) => projectionGeo(feature) ?? \"\")\n\n    geoPathCache.set(regionName, strs)\n    return geoPathCache.get(regionName)!\n}\n\n// Get the bounding box for every geographical feature\nconst geoBoundsCache = new Map<MapRegionName, Bounds[]>()\nconst geoBoundsFor = (regionName: MapRegionName): Bounds[] => {\n    if (geoBoundsCache.has(regionName)) return geoBoundsCache.get(regionName)!\n\n    const projectionGeo = geoPath().projection(MAP_PROJECTIONS[regionName])\n    const bounds = GeoFeatures.map((feature) => {\n        const corners = projectionGeo.bounds(feature)\n\n        const bounds = Bounds.fromCorners(\n            new PointVector(...corners[0]),\n            new PointVector(...corners[1])\n        )\n\n        // HACK (Mispy): The path generator calculates weird bounds for Fiji (probably it wraps around the map)\n        if (feature.id === \"Fiji\")\n            return bounds.set({\n                x: bounds.right - bounds.height,\n                width: bounds.height,\n            })\n\n        return bounds\n    })\n\n    geoBoundsCache.set(regionName, bounds)\n    return geoBoundsCache.get(regionName)!\n}\n\nconst geoCentroidsForFeatures = GeoFeatures.map((feature) =>\n    geoCentroid(feature.geometry)\n)\n\nconst geoBoundsForFeatures = GeoFeatures.map((feature) => {\n    const corners = geoBounds(feature)\n    return Bounds.fromCorners(\n        new PointVector(...corners[0]),\n        new PointVector(...corners[1])\n    )\n})\n\nconst geoFeaturesForMapCache = new Map<MapRegionName, MapRenderFeature[]>()\nexport const getGeoFeaturesForMap = (\n    regionName: MapRegionName\n): MapRenderFeature[] => {\n    if (geoFeaturesForMapCache.has(regionName))\n        return geoFeaturesForMapCache.get(regionName)!\n\n    const projBounds = geoBoundsFor(regionName)\n    const projPaths = geoPathsFor(regionName)\n\n    const features = (\n        GeoFeatures.map((geo, index) => ({\n            type: RenderFeatureType.Map,\n            id: geo.id as string,\n            geo: geo,\n            projBounds: projBounds[index], // projected\n            geoBounds: geoBoundsForFeatures[index], // unprojected\n            geoCentroid: geoCentroidsForFeatures[index], // unprojected\n            path: projPaths[index],\n        })) satisfies MapRenderFeature[]\n    ).filter((feature) => feature.id !== \"Antarctica\") // exclude Antarctica since it's distorted and uses up too much space\n\n    geoFeaturesForMapCache.set(regionName, features)\n    return geoFeaturesForMapCache.get(regionName)!\n}\n\nexport const getGeoFeaturesForGlobe = lazy((): GlobeRenderFeature[] => {\n    return GeoFeatures.map((geo, index) => {\n        const corners = geoBounds(geo)\n        const bounds = Bounds.fromCorners(\n            new PointVector(...corners[0]),\n            new PointVector(...corners[1])\n        )\n        return {\n            type: RenderFeatureType.Globe,\n            id: geo.id as string,\n            geo: geo,\n            geoCentroid: geoCentroidsForFeatures[index],\n            geoBounds: bounds,\n        }\n    }) satisfies GlobeRenderFeature[]\n})\n","import React, { useMemo } from \"react\"\nimport cx from \"classnames\"\nimport { Bounds, EntityName, MapRegionName } from \"@ourworldindata/utils\"\nimport { getGeoFeaturesForMap } from \"../mapCharts/GeoFeatures\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { GRAY_10 } from \"../color/ColorConstants.js\"\n\nconst NO_DATA_COLOR = GRAY_10\n\nexport function RegionMap({\n    countries,\n    highlightedRegion,\n    onRegionHover,\n    onRegionLeave,\n}: {\n    countries: Map<EntityName, { region: EntityName; color: string }>\n    highlightedRegion?: EntityName\n    onRegionHover?: (regionName: EntityName) => void\n    onRegionLeave?: () => void\n}): React.ReactElement {\n    const features = getGeoFeaturesForMap(MapRegionName.World)\n\n    const viewBox = useMemo(() => {\n        const allBounds = features.map((f) => f.projBounds)\n        return Bounds.merge(allBounds).toViewBox()\n    }, [features])\n\n    return (\n        <svg className=\"map\" viewBox={viewBox} onPointerLeave={onRegionLeave}>\n            {features.map((feature) => {\n                const entry = countries.get(feature.id)\n                return (\n                    <CountryPath\n                        key={feature.id}\n                        path={feature.path}\n                        color={entry?.color ?? NO_DATA_COLOR}\n                        interaction={InteractionState.for(\n                            entry?.region,\n                            highlightedRegion\n                        )}\n                        onPointerEnter={\n                            entry\n                                ? () => onRegionHover?.(entry.region)\n                                : onRegionLeave\n                        }\n                        onPointerLeave={onRegionLeave}\n                    />\n                )\n            })}\n        </svg>\n    )\n}\n\nfunction CountryPath({\n    path,\n    color,\n    interaction,\n    onPointerEnter,\n    onPointerLeave,\n}: {\n    path: string\n    color: string\n    interaction: InteractionState\n    onPointerEnter?: () => void\n    onPointerLeave?: () => void\n}): React.ReactElement {\n    return (\n        <path\n            className={cx({ muted: interaction.background })}\n            d={path}\n            fill={color}\n            onPointerEnter={onPointerEnter}\n            onPointerLeave={onPointerLeave}\n        />\n    )\n}\n","import * as R from \"remeda\"\nimport {\n    checkIsAggregate,\n    EntityName,\n    Aggregate,\n    Continent,\n    IncomeGroup,\n    getAggregatesByProvider,\n    getContinents,\n    getIncomeGroups,\n    Region,\n    RegionDataProvider,\n    RequiredBy,\n} from \"@ourworldindata/utils\"\nimport {\n    CategoricalMapPalette17,\n    MapContinentColors,\n} from \"../color/CustomSchemes.js\"\nimport { parseLabel } from \"../core/RegionGroups.js\"\nimport { getCountriesByRegion } from \"../mapCharts/MapHelpers.js\"\n\nexport type TooltipKey = RegionDataProvider | \"incomeGroups\" | \"continents\"\n\nexport interface TooltipRegion {\n    name: EntityName\n    displayName: string\n    color: string\n    members: string[]\n}\n\nconst continentColorsMap = MapContinentColors as Record<EntityName, string>\nconst categoricalMapColors = CategoricalMapPalette17\n\nconst descriptions: Record<TooltipKey, string> = {\n    wb: \"The **World Bank (WB)** defines [seven world regions](https://ourworldindata.org/world-region-map-definitions#world-bank-wb-continents):\",\n    who: \"The **World Health Organization (WHO)** defines [six world regions](https://ourworldindata.org/world-region-map-definitions#world-health-organization-who):\",\n    unsdg: \"When reporting data on the Sustainable Development Goals, the **United Nations (UN)** defines [eight world regions](https://ourworldindata.org/world-region-map-definitions#united-nations-sustainable-development-goals-un-sdg):\",\n    pew: \"The **Pew Research Center (Pew)** defines [six world regions](https://ourworldindata.org/world-region-map-definitions#pew-research-center-pew):\",\n    un: \"The **United Nations Statistical Division (UNSD)** establishes and maintains a geographic classification based on the [M49 coding system](https://unstats.un.org/unsd/methodology/m49). At the highest level, the M49 classification categorizes countries into [six regions](https://ourworldindata.org/world-region-map-definitions#united-nations-un):\",\n    un_m49_1:\n        \"The **United Nations Statistical Division (UNSD)** establishes and maintains a geographic classification based on the [M49 coding system](https://unstats.un.org/unsd/methodology/m49). At the highest level, the M49 classification categorizes countries into five regions:\",\n    un_m49_2:\n        \"The **United Nations Statistical Division (UNSD)** establishes and maintains a geographic classification based on the [M49 coding system](https://unstats.un.org/unsd/methodology/m49). At level 2, the M49 classification categorizes countries into 17 regions:\",\n    un_m49_3:\n        \"The **United Nations Statistical Division (UNSD)** establishes and maintains a geographic classification based on the [M49 coding system](https://unstats.un.org/unsd/methodology/m49). At level 3, the M49 classification provides more granular subdivisions, including separate regions for parts of Africa and the Americas:\",\n    incomeGroups:\n        \"The **World Bank** defines [four income groups](https://ourworldindata.org/world-bank-income-groups-explained):\",\n    continents:\n        \"Our team defines [six world regions](https://ourworldindata.org/world-region-map-definitions#our-world-in-data):\",\n}\n\n// Geographic display order: left-to-right on the map.\n// Providers without a custom order will be sorted alphabetically.\nconst customRegionDisplayOrder: Partial<Record<TooltipKey, string[]>> = {\n    continents: [\n        \"North America\",\n        \"South America\",\n        \"Africa\",\n        \"Europe\",\n        \"Asia\",\n        \"Oceania\",\n    ],\n    wb: [\n        \"North America (WB)\",\n        \"Latin America and Caribbean (WB)\",\n        \"Sub-Saharan Africa (WB)\",\n        \"Middle East, North Africa, Afghanistan and Pakistan (WB)\",\n        \"Europe and Central Asia (WB)\",\n        \"South Asia (WB)\",\n        \"East Asia and Pacific (WB)\",\n    ],\n    un: [\n        \"Northern America (UN)\",\n        \"Latin America and the Caribbean (UN)\",\n        \"Africa (UN)\",\n        \"Europe (UN)\",\n        \"Asia (UN)\",\n        \"Oceania (UN)\",\n    ],\n    who: [\n        \"Americas (WHO)\",\n        \"Africa (WHO)\",\n        \"Eastern Mediterranean (WHO)\",\n        \"Europe (WHO)\",\n        \"South-East Asia (WHO)\",\n        \"Western Pacific (WHO)\",\n    ],\n    unsdg: [\n        \"Europe and Northern America (UN SDG)\",\n        \"Latin America and the Caribbean (UN SDG)\",\n        \"Sub-Saharan Africa (UN SDG)\",\n        \"Northern Africa and Western Asia (UN SDG)\",\n        \"Central and Southern Asia (UN SDG)\",\n        \"Eastern and South-Eastern Asia (UN SDG)\",\n        \"Australia and New Zealand (UN SDG)\",\n        \"Oceania (UN SDG)\",\n    ],\n    pew: [\n        \"North America (Pew)\",\n        \"Latin America-Caribbean (Pew)\",\n        \"Sub-Saharan Africa (Pew)\",\n        \"Middle East-North Africa (Pew)\",\n        \"Europe (Pew)\",\n        \"Asia-Pacific (Pew)\",\n    ],\n    incomeGroups: [\n        \"Low-income countries\",\n        \"Lower-middle-income countries\",\n        \"Upper-middle-income countries\",\n        \"High-income countries\",\n    ],\n}\n\nexport function hasTooltipData(\n    region: Region\n): region is RequiredBy<Aggregate, \"definedBy\"> {\n    return checkIsAggregate(region) && region.definedBy !== undefined\n}\n\nexport function getDescriptionForKey(key: TooltipKey): string {\n    return descriptions[key]\n}\n\nexport function getRegionsForKey(key: TooltipKey): TooltipRegion[] {\n    const regions =\n        key === \"incomeGroups\"\n            ? getIncomeGroups()\n            : key === \"continents\"\n              ? getContinents()\n              : getAggregatesByProvider(key)\n\n    const customOrder = customRegionDisplayOrder[key]\n    const sortFn = (\n        region: Aggregate | IncomeGroup | Continent\n    ): number | string => {\n        if (customOrder) {\n            const index = customOrder.indexOf(region.name)\n            return index >= 0 ? index : Infinity\n        }\n        return parseLabel(region.name).name\n    }\n\n    return R.pipe(\n        regions,\n        R.sortBy(sortFn),\n        R.map((region, index) => ({\n            name: region.name,\n            displayName: parseLabel(region.name).name, // Strip suffix\n            color:\n                continentColorsMap[region.name] ??\n                categoricalMapColors[index % categoricalMapColors.length],\n            members: [...(getCountriesByRegion(region.name) ?? [])],\n        }))\n    )\n}\n\n/** Build a map from country name to its color and region */\nexport function buildCountryMap(\n    regions: TooltipRegion[]\n): Map<EntityName, { region: EntityName; color: string }> {\n    const map = new Map<string, { color: string; region: string }>()\n    for (const region of regions) {\n        for (const country of region.members) {\n            map.set(country, { color: region.color, region: region.name })\n        }\n    }\n    return map\n}\n","import { useCallback, useRef, useState } from \"react\"\n\n/**\n * Like useState, but clearing (setting to undefined) is debounced.\n * Setting a value is always immediate and cancels any pending clear.\n */\nexport function useStateWithDebouncedClear<T>(\n    initialValue: T | undefined,\n    clearDelay = 200\n): [value: T | undefined, set: (value: T) => void, clear: () => void] {\n    const [value, setValue] = useState<T | undefined>(initialValue)\n    const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n        undefined\n    )\n\n    const set = useCallback(\n        (newValue: T) => {\n            if (timerRef.current) clearTimeout(timerRef.current)\n            setValue(newValue)\n        },\n        [setValue]\n    )\n\n    const clear = useCallback(() => {\n        if (timerRef.current) clearTimeout(timerRef.current)\n        timerRef.current = setTimeout(() => setValue(undefined), clearDelay)\n    }, [setValue, clearDelay])\n\n    return [value, set, clear]\n}\n","import React, { useMemo } from \"react\"\nimport cx from \"classnames\"\nimport { SimpleMarkdownText } from \"@ourworldindata/components\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { RegionMap } from \"./RegionMap\"\nimport { buildCountryMap, TooltipRegion } from \"./RegionTooltipData.js\"\nimport { useStateWithDebouncedClear } from \"../hooks.js\"\n\nexport function RegionTooltip({\n    description,\n    regions,\n    initiallyHighlightedRegion,\n}: {\n    description: string\n    regions: TooltipRegion[]\n    initiallyHighlightedRegion: string\n}): React.ReactElement {\n    const [activeRegion, setActiveRegion, clearActiveRegion] =\n        useStateWithDebouncedClear(initiallyHighlightedRegion)\n\n    const countries = useMemo(() => buildCountryMap(regions), [regions])\n\n    return (\n        <div\n            className=\"region-tooltip\"\n            // Stop mouse events from bubbling through the React portal boundary.\n            // Without this, events reach the parent chart's handlers (e.g. LineChart's\n            // onMouseMove) because React portals propagate synthetic events through\n            // the React component tree, not the DOM tree\n            onMouseMove={(e) => e.stopPropagation()}\n            onMouseEnter={(e) => e.stopPropagation()}\n            onMouseLeave={(e) => e.stopPropagation()}\n        >\n            <SimpleMarkdownText text={description} />\n            <div className=\"map-container\">\n                <RegionMap\n                    countries={countries}\n                    highlightedRegion={activeRegion}\n                    onRegionHover={setActiveRegion}\n                    onRegionLeave={clearActiveRegion}\n                />\n            </div>\n            <RegionLegend\n                regions={regions}\n                highlightedRegion={activeRegion}\n                onRegionHover={setActiveRegion}\n                onRegionLeave={clearActiveRegion}\n            />\n        </div>\n    )\n}\n\nfunction RegionLegend({\n    regions,\n    highlightedRegion,\n    onRegionHover,\n    onRegionLeave,\n}: {\n    regions: TooltipRegion[]\n    highlightedRegion?: string\n    onRegionHover: (name: string) => void\n    onRegionLeave: () => void\n}): React.ReactElement {\n    return (\n        <ul className=\"legend\">\n            {regions.map((region) => (\n                <RegionLegendItem\n                    key={region.name}\n                    region={region}\n                    interaction={InteractionState.for(\n                        region.name,\n                        highlightedRegion\n                    )}\n                    onPointerEnter={() => onRegionHover(region.name)}\n                    onPointerLeave={onRegionLeave}\n                />\n            ))}\n        </ul>\n    )\n}\n\nfunction RegionLegendItem({\n    region,\n    interaction,\n    onPointerEnter,\n    onPointerLeave,\n}: {\n    region: TooltipRegion\n    interaction: InteractionState\n    onPointerEnter: () => void\n    onPointerLeave: () => void\n}): React.ReactElement {\n    return (\n        <li\n            className={cx(\"legend-item\", { muted: interaction.background })}\n            onPointerEnter={onPointerEnter}\n            onPointerLeave={onPointerLeave}\n        >\n            <span\n                className=\"swatch\"\n                style={{ backgroundColor: region.color }}\n            />\n            {region.displayName}\n        </li>\n    )\n}\n","import React, { useState } from \"react\"\nimport * as R from \"remeda\"\nimport Tippy from \"@tippyjs/react\"\nimport { hideAll } from \"tippy.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCircleInfo } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    GRAPHER_DARK_TEXT,\n    GRAPHER_LIGHT_TEXT,\n} from \"../color/ColorConstants.js\"\nimport {\n    SeriesLabelState,\n    PositionedTextFragment,\n    PositionedIconFragment,\n    TextRole,\n    SpanLine,\n} from \"./SeriesLabelState.js\"\nimport { Bounds, isTouchDevice } from \"@ourworldindata/utils\"\nimport { RegionTooltip } from \"./RegionTooltip.js\"\nimport { getDescriptionForKey, getRegionsForKey } from \"./RegionTooltipData.js\"\n\nconst defaultColors: Record<TextRole, string> = {\n    name: GRAPHER_DARK_TEXT,\n    value: GRAPHER_DARK_TEXT,\n    regionProviderSuffix: GRAPHER_LIGHT_TEXT,\n    regionIcon: GRAPHER_LIGHT_TEXT,\n}\n\nexport interface SeriesLabelProps {\n    state: SeriesLabelState\n    x: number\n    y: number\n    id?: string\n    color?: Partial<Record<TextRole, string>>\n    opacity?: number\n    onMouseEnter?: React.MouseEventHandler<SVGElement>\n    onMouseLeave?: React.MouseEventHandler<SVGElement>\n    onInfoTooltipShow?: () => void\n}\n\n/**\n * Renders a series label that consists of up to three fragments:\n * - The main label text (e.g. \"United States\")\n * - An optional suffix that describes the region provider (e.g. \"(WHO)\")\n * - An optional value label (e.g. \"70 years\")\n *\n * If the label includes a region provider suffix, an info icon may be\n * rendered next to the suffix, which shows a tooltip with more information\n * about the region provider on hover.\n */\nexport function SeriesLabel({\n    state,\n    x,\n    y,\n    id,\n    color,\n    opacity,\n    onMouseEnter,\n    onMouseLeave,\n    onInfoTooltipShow,\n}: SeriesLabelProps): React.ReactElement {\n    // Get the corrected position for SVG text rendering\n    const [renderX, renderY] = state.getPositionForSvgRendering(x, y)\n\n    const fontSize = state.fontSettings.fontSize.toFixed(2)\n    const colors = { ...defaultColors, ...color }\n    const props = { id, opacity, onMouseEnter, onMouseLeave }\n\n    // Rely on browser rendering if there are no icons\n    if (!state.hasIcon) {\n        return (\n            <NativeAlignedLabelText\n                x={renderX}\n                y={renderY}\n                spanLines={state.spanLines}\n                textAnchor={state.textAnchor}\n                fontSize={fontSize}\n                lineHeight={state.singleLineHeight}\n                colors={colors}\n                {...props}\n            />\n        )\n    }\n\n    // Otherwise, text and icon fragments are both manually positioned\n    const [textFragments, iconFragments] = R.partition(\n        state.positionedFragments,\n        (f) => f.type === \"text\"\n    )\n\n    return (\n        <g {...props}>\n            <LabelText\n                x={renderX}\n                y={renderY}\n                fragments={textFragments}\n                fontSize={fontSize}\n                colors={colors}\n            />\n            {iconFragments.map((fragment) => (\n                <IconFragment\n                    key={fragment.tooltipKey}\n                    x={renderX}\n                    y={renderY}\n                    fragment={fragment}\n                    fill={colors.regionProviderSuffix}\n                    regionName={fragment.regionName}\n                    onMouseEnter={onMouseEnter}\n                    onMouseLeave={onMouseLeave}\n                    onInfoTooltipShow={onInfoTooltipShow}\n                />\n            ))}\n        </g>\n    )\n}\n\nfunction NativeAlignedLabelText({\n    x,\n    y,\n    spanLines,\n    textAnchor,\n    fontSize,\n    lineHeight,\n    colors,\n    id,\n    opacity,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    x: number\n    y: number\n    spanLines: SpanLine[]\n    textAnchor: \"start\" | \"end\"\n    fontSize: string\n    lineHeight: number\n    colors: Record<TextRole, string>\n    id?: string\n    opacity?: number\n    onMouseEnter?: React.MouseEventHandler<SVGElement>\n    onMouseLeave?: React.MouseEventHandler<SVGElement>\n}): React.ReactElement {\n    return (\n        <text\n            id={id}\n            x={x.toFixed(1)}\n            y={y.toFixed(1)}\n            textAnchor={textAnchor}\n            fontSize={fontSize}\n            opacity={opacity}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n        >\n            {spanLines.map((spans, lineIndex) =>\n                spans.map((span, spanIndex) => {\n                    const isFirstLine = lineIndex === 0\n                    const isLineStart = spanIndex === 0\n\n                    const renderX = isLineStart ? x.toFixed(1) : undefined\n                    const renderY =\n                        isLineStart && !isFirstLine\n                            ? lineHeight.toFixed(1)\n                            : undefined\n\n                    return (\n                        <tspan\n                            key={span.text}\n                            x={renderX}\n                            dy={renderY}\n                            fontWeight={span.fontWeight}\n                            fill={colors[span.role]}\n                        >\n                            {span.text}\n                        </tspan>\n                    )\n                })\n            )}\n        </text>\n    )\n}\n\nfunction LabelText({\n    x,\n    y,\n    fragments,\n    fontSize,\n    colors,\n    id,\n    opacity,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    x: number\n    y: number\n    fragments: PositionedTextFragment[]\n    fontSize: string\n    colors: Record<TextRole, string>\n    id?: string\n    opacity?: number\n    onMouseEnter?: React.MouseEventHandler<SVGElement>\n    onMouseLeave?: React.MouseEventHandler<SVGElement>\n}): React.ReactElement {\n    if (fragments.length === 1) {\n        return (\n            <TextFragment\n                id={id}\n                x={x}\n                y={y}\n                fragment={fragments[0]}\n                fontSize={fontSize}\n                fill={colors[fragments[0].role]}\n                opacity={opacity}\n                onMouseEnter={onMouseEnter}\n                onMouseLeave={onMouseLeave}\n            />\n        )\n    }\n\n    return (\n        <text\n            id={id}\n            fontSize={fontSize}\n            opacity={opacity}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n        >\n            {fragments.map((fragment) => (\n                <TextSpanFragment\n                    key={fragment.text}\n                    x={x}\n                    y={y}\n                    fragment={fragment}\n                    fill={colors[fragment.role]}\n                />\n            ))}\n        </text>\n    )\n}\n\nfunction TextFragment({\n    x,\n    y,\n    fragment,\n    fontSize,\n    fill,\n    id,\n    opacity,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    x: number\n    y: number\n    fragment: PositionedTextFragment\n    fontSize: string\n    fill: string\n    id?: string\n    opacity?: number\n    onMouseEnter?: React.MouseEventHandler<SVGElement>\n    onMouseLeave?: React.MouseEventHandler<SVGElement>\n}): React.ReactElement {\n    return (\n        <text\n            id={id}\n            fontSize={fontSize}\n            opacity={opacity}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n        >\n            <TextSpanFragment x={x} y={y} fragment={fragment} fill={fill} />\n        </text>\n    )\n}\n\nfunction TextSpanFragment({\n    x,\n    y,\n    fragment,\n    fill,\n}: {\n    x: number\n    y: number\n    fragment: PositionedTextFragment\n    fill: string\n}): React.ReactElement {\n    return (\n        <tspan\n            x={(x + fragment.x).toFixed(1)}\n            y={(y + fragment.y).toFixed(1)}\n            fontWeight={fragment.fontWeight}\n            fill={fill}\n        >\n            {fragment.text}\n        </tspan>\n    )\n}\n\nfunction IconFragment({\n    x,\n    y,\n    fragment,\n    fill,\n    regionName,\n    onMouseEnter,\n    onMouseLeave,\n    onInfoTooltipShow,\n}: {\n    x: number\n    y: number\n    fragment: PositionedIconFragment\n    fill: string\n    regionName: string\n    onMouseEnter?: React.MouseEventHandler<SVGElement>\n    onMouseLeave?: React.MouseEventHandler<SVGElement>\n    onInfoTooltipShow?: () => void\n}): React.ReactElement {\n    // Used as react key to remount RegionTooltip with fresh state\n    const [tooltipRemountKey, setTooltipRemountKey] = useState(false)\n\n    const iconX = x + fragment.x\n    const iconY = y + fragment.y\n\n    const hitAreaSize = isTouchDevice() ? 40 : 20\n    const padding = Math.ceil((hitAreaSize - fragment.iconSize) / 2)\n    const hitAreaBounds = new Bounds(\n        iconX,\n        iconY,\n        fragment.iconSize,\n        fragment.iconSize\n    ).expand(padding)\n\n    return (\n        <g>\n            {/* Info icon */}\n            <g transform={`translate(${iconX}, ${iconY})`}>\n                <FontAwesomeIcon\n                    icon={faCircleInfo}\n                    width={fragment.iconSize}\n                    height={fragment.iconSize}\n                    color={fill}\n                />\n            </g>\n\n            {/* Hit area for tooltip interaction */}\n            <Tippy\n                theme=\"grapher-explanation\"\n                placement=\"top\"\n                interactive={!isTouchDevice()}\n                appendTo={() => document.body}\n                onShow={(instance) => {\n                    // Hide any other open tooltips\n                    hideAll({ exclude: instance })\n\n                    onInfoTooltipShow?.()\n                }}\n                // Changing the key forces RegionTooltip to remount on the\n                // next show, resetting its internal hover state back to\n                // the initially highlighted region\n                onHidden={() => setTooltipRemountKey((k) => !k)}\n                content={\n                    <RegionTooltip\n                        key={tooltipRemountKey.toString()}\n                        description={getDescriptionForKey(fragment.tooltipKey)}\n                        regions={getRegionsForKey(fragment.tooltipKey)}\n                        initiallyHighlightedRegion={regionName}\n                    />\n                }\n            >\n                <rect\n                    {...hitAreaBounds.toProps()}\n                    fill=\"transparent\"\n                    style={{ pointerEvents: \"auto\" }}\n                    onMouseEnter={onMouseEnter}\n                    onMouseLeave={onMouseLeave}\n                />\n            </Tippy>\n        </g>\n    )\n}\n","import { GRAPHER_OPACITY_MUTED } from \"../core/GrapherConstants.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\n\n// Minimum vertical space between two legend items\nexport const LEGEND_ITEM_MIN_SPACING = 4\n// Horizontal distance from the end of the chart to the start of the marker\nexport const MARKER_MARGIN = 4\n// Space between the label and the annotation\nexport const ANNOTATION_PADDING = 1\n\nexport const DEFAULT_CONNECTOR_LINE_WIDTH = 25\nexport const DEFAULT_FONT_WEIGHT = 400\n\nexport interface LabelStyleConfig {\n    opacity: number\n    connectorLineColor: string\n}\n\nconst DEFAULT_LABEL_STYLE: LabelStyleConfig = {\n    opacity: 1,\n    connectorLineColor: \"#999\",\n}\n\nexport const LABEL_STYLE: Record<Emphasis, LabelStyleConfig> = {\n    [Emphasis.Default]: DEFAULT_LABEL_STYLE,\n    [Emphasis.Highlighted]: DEFAULT_LABEL_STYLE,\n    [Emphasis.Muted]: {\n        opacity: GRAPHER_OPACITY_MUTED,\n        connectorLineColor: \"#eee\",\n    },\n}\n","import * as _ from \"lodash-es\"\nimport { SeriesName } from \"@ourworldindata/utils\"\nimport { PlacedLabelSeries } from \"./VerticalLabelsTypes\"\nimport { LEGEND_ITEM_MIN_SPACING } from \"./VerticalLabelsConstants\"\nimport * as R from \"remeda\"\n\ntype Bracket = [number, number]\n\nexport interface VerticalLabelsFilterAlgorithmContext {\n    candidates: Set<PlacedLabelSeries> // remaining candidates to be considered for placement\n    availableHeight: number\n    sortedKeepSeries: PlacedLabelSeries[] // series that have been picked to be labelled, sorted by their y position\n    keepSeriesHeight: number // total height of the picked series\n}\n\ninterface PickFromCandidateSubsetParams {\n    context: VerticalLabelsFilterAlgorithmContext\n    candidateSubset: PlacedLabelSeries[]\n    getCandidateFromSubset?: (\n        candidateSubset: PlacedLabelSeries[]\n    ) => PlacedLabelSeries | undefined\n}\n\nconst dist = (c1: PlacedLabelSeries, c2: PlacedLabelSeries) =>\n    Math.abs(c1.midY - c2.midY)\n\nfunction getNewHeight(\n    currentHeight: number,\n    candidate: PlacedLabelSeries\n): number {\n    // if the candidate is the first one, don't add padding\n    const padding = currentHeight === 0 ? 0 : LEGEND_ITEM_MIN_SPACING\n    return currentHeight + candidate.bounds.height + padding\n}\n\n/**\n * Given a sorted list of brackets, like [[0, 10], [10, 20], [20, 30]],\n * find the bracket that contains the given number n.\n */\nfunction findBracket(\n    sortedBrackets: Bracket[],\n    n: number\n): [number | undefined, number | undefined] {\n    if (sortedBrackets.length === 0) return [undefined, undefined]\n\n    const firstBracketValue = sortedBrackets[0][0]\n    const lastBracketValue = R.last(sortedBrackets)![1]\n\n    if (n < firstBracketValue) return [undefined, firstBracketValue]\n    if (n >= lastBracketValue) return [lastBracketValue, undefined]\n\n    for (const bracket of sortedBrackets) {\n        if (n >= bracket[0] && n < bracket[1]) return bracket\n    }\n\n    return [undefined, undefined]\n}\n\n/**\n * Add a candidate to the list of picked series and update the context accordingly.\n */\nexport function pickCandidate(\n    context: VerticalLabelsFilterAlgorithmContext,\n    candidate: PlacedLabelSeries\n): VerticalLabelsFilterAlgorithmContext {\n    let { candidates, sortedKeepSeries, keepSeriesHeight } = context\n\n    // insert into sortedKeepSeries at the right position\n    const insertIndex = R.sortedIndexBy(\n        context.sortedKeepSeries,\n        candidate,\n        (s) => s.midY\n    )\n    sortedKeepSeries.splice(insertIndex, 0, candidate)\n\n    // update keepSeriesHeight\n    keepSeriesHeight = getNewHeight(keepSeriesHeight, candidate)\n\n    // delete from candidates\n    candidates.delete(candidate)\n\n    return { ...context, candidates, sortedKeepSeries, keepSeriesHeight }\n}\n\n/**\n * Remove a candidate from the list of candidates to be considered for placement.\n */\nfunction dismissCandidate(\n    context: VerticalLabelsFilterAlgorithmContext,\n    candidate: PlacedLabelSeries\n) {\n    const { candidates } = context\n    candidates.delete(candidate)\n    return { ...context, candidates }\n}\n\n/**\n * Pick from a subset of candidates until one of the following conditions is met:\n * - no candidates are left or the maximum number of candidates to pick is reached\n * - no more candidates fit into the available space\n *\n * The order of candidates to consider for placement is determined by the\n * `getCandidateFromSubset` function. The function should return the next candidate\n * to consider. If the function returns `undefined`, the algorithm stops.\n *\n * If no custom function is provided, the algorithm picks candidates starting from\n * the end (!) of the given list.\n */\nfunction pickFromCandidateSubsetWithRetry(\n    params: PickFromCandidateSubsetParams & { maxCandidatesToPick?: number }\n): VerticalLabelsFilterAlgorithmContext {\n    let {\n        context,\n        candidateSubset,\n        getCandidateFromSubset,\n        maxCandidatesToPick,\n    } = params\n\n    if (candidateSubset.length === 0 || maxCandidatesToPick === 0)\n        return context\n\n    const remainingCandidates = [...candidateSubset]\n    let numPicked = 0\n\n    // if a custom function to get a candidate is provided, use it\n    // otherwise, pop the last candidate\n    const getCandidate = (): PlacedLabelSeries | undefined => {\n        if (getCandidateFromSubset) {\n            const candidate = getCandidateFromSubset(remainingCandidates)\n            if (candidate) {\n                const index = remainingCandidates.indexOf(candidate)\n                remainingCandidates.splice(index, 1)\n            }\n            return candidate\n        }\n\n        return remainingCandidates.pop()\n    }\n\n    while (remainingCandidates.length > 0) {\n        const candidate = getCandidate()\n        if (!candidate) break\n\n        // sanity check if this is a valid candidate\n        if (!context.candidates.has(candidate)) continue\n\n        // either pick or dismiss the candidate\n        const newHeight = getNewHeight(context.keepSeriesHeight, candidate)\n        if (newHeight <= context.availableHeight) {\n            context = pickCandidate(context, candidate)\n            numPicked++\n        } else {\n            context = dismissCandidate(context, candidate)\n        }\n\n        // stop if we picked enough candidates\n        if (numPicked === maxCandidatesToPick) break\n    }\n\n    return context\n}\n\n/**\n * Pick as many candidates as possible from a given subset.\n *\n * The order of candidates to consider for placement is determined by the\n * `getCandidateFromSubset` function. The function should return the next candidate\n * to consider. If the function returns `undefined`, the algorithm stops.\n *\n * If no custom function is provided, the algorithm picks candidates starting from\n * the end (!) of the given list.\n */\nexport function pickAsManyAsPossibleWithRetry(\n    params: PickFromCandidateSubsetParams\n): VerticalLabelsFilterAlgorithmContext {\n    return pickFromCandidateSubsetWithRetry(params)\n}\n\n/**\n * Pick a fixed number of candidates from a give subset.\n *\n * The order of candidates to consider for placement is determined by the\n * `getCandidateFromSubset` function. The function should return the next candidate\n * to consider. If the function returns `undefined`, the algorithm stops.\n *\n * If no custom function is provided, the algorithm picks candidates starting from\n * the end (!) of the given list.\n */\nexport function pickCandidateWithRetry(\n    params: PickFromCandidateSubsetParams\n): VerticalLabelsFilterAlgorithmContext {\n    return pickFromCandidateSubsetWithRetry({\n        ...params,\n        maxCandidatesToPick: 1,\n    })\n}\n\nexport function pickCandidateWithMaxDistanceToReferenceCandidate(params: {\n    context: VerticalLabelsFilterAlgorithmContext\n    candidateSubset: PlacedLabelSeries[]\n    referenceCandidate: PlacedLabelSeries\n}): VerticalLabelsFilterAlgorithmContext {\n    const { context, candidateSubset, referenceCandidate } = params\n\n    const getMaxDistCandidate = (candidates: PlacedLabelSeries[]) =>\n        _.maxBy(candidates, (c) => dist(c, referenceCandidate))\n\n    return pickCandidateWithRetry({\n        context,\n        candidateSubset,\n        getCandidateFromSubset: getMaxDistCandidate,\n    })\n}\n\n/**\n * Compute a score for each candidate based on how large the space between the\n * neighboring labels is and how far it is from the mid point of the neighboring\n * labels.\n */\nexport function computeCandidateScores(\n    candidates: PlacedLabelSeries[],\n    sortedKeepSeries: PlacedLabelSeries[]\n): Map<SeriesName, number> {\n    const scoreMap = new Map<SeriesName, number>()\n\n    const sortedBrackets = sortedKeepSeries\n        .slice(0, -1)\n        .map((s, i) => [s.midY, sortedKeepSeries[i + 1].midY])\n        .filter((bracket) => bracket[0] !== bracket[1]) as Bracket[]\n\n    // score each candidate based on how well it fits into the available space\n    for (const candidate of candidates) {\n        // find the bracket that the candidate is contained in\n        const [start, end] = findBracket(sortedBrackets, candidate.midY)\n\n        // if no bracket is found, return the worst possible score\n        if (end === undefined || start === undefined) {\n            scoreMap.set(candidate.seriesName, 0)\n            continue\n        }\n\n        // score the candidate based on how far it is from the\n        // middle of the bracket and how large the bracket is\n        const length = end - start\n        const midPoint = start + length / 2\n        const distanceFromMidPoint = Math.abs(candidate.midY - midPoint)\n        const score = length - distanceFromMidPoint\n\n        scoreMap.set(candidate.seriesName, score)\n    }\n\n    return scoreMap\n}\n\nexport function getSeriesKey(series: PlacedLabelSeries, index: number): string {\n    return `${series.seriesName}-${index}`\n}\n","import * as React from \"react\"\nimport { makeFigmaId } from \"@ourworldindata/utils\"\nimport { SeriesName } from \"@ourworldindata/types\"\nimport { SeriesLabel } from \"../seriesLabel/SeriesLabel.js\"\nimport { darkenColorForText } from \"../color/ColorUtils.js\"\nimport { ANNOTATION_PADDING, LABEL_STYLE } from \"./VerticalLabelsConstants.js\"\nimport { getSeriesKey } from \"./VerticalLabelsHelpers\"\nimport { PlacedLabelSeries, RenderLabelSeries } from \"./VerticalLabelsTypes\"\nimport { VerticalLabelsState } from \"./VerticalLabelsState\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\n\n/**\n * Series labels stacked vertically, with connector lines,\n * entity annotations, and interactive hover/focus states\n */\nexport function VerticalLabels({\n    state,\n    x = 0,\n    onMouseEnter,\n    onMouseLeave,\n    interactive = true,\n}: {\n    state: VerticalLabelsState\n    x?: number\n    onMouseEnter?: (key: SeriesName) => void\n    onMouseLeave?: () => void\n    interactive?: boolean\n}): React.ReactElement {\n    const { renderSeries, annotatedSeries, textAnchor } = state\n\n    return (\n        <g id={makeFigmaId(\"vertical-labels\")} transform={`translate(${x}, 0)`}>\n            {interactive && (\n                <InteractionOverlays\n                    series={state.placedSeries}\n                    anchor={textAnchor}\n                    onMouseEnter={onMouseEnter}\n                    onMouseLeave={onMouseLeave}\n                />\n            )}\n            {state.needsConnectorLines && (\n                <ConnectorLines series={renderSeries} />\n            )}\n            {state.hasAnnotatedSeries && (\n                <Annotations series={annotatedSeries} anchor={textAnchor} />\n            )}\n            <Labels\n                series={renderSeries}\n                onMouseEnter={onMouseEnter}\n                onMouseLeave={onMouseLeave}\n            />\n        </g>\n    )\n}\n\nfunction Labels({\n    series,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    series: RenderLabelSeries[]\n    onMouseEnter?: (key: SeriesName) => void\n    onMouseLeave?: (key: SeriesName) => void\n}): React.ReactElement {\n    return (\n        <g id={makeFigmaId(\"text-labels\")} style={{ pointerEvents: \"none\" }}>\n            {series.map((series, index) => {\n                const color = darkenColorForText(series.color)\n                const emphasis = series.emphasis ?? Emphasis.Default\n                return (\n                    <SeriesLabel\n                        key={getSeriesKey(series, index)}\n                        id={makeFigmaId(\"label\", series.seriesName)}\n                        state={series.seriesLabel}\n                        x={series.labelCoords.x}\n                        y={series.labelCoords.y}\n                        color={{ name: color, value: color }}\n                        opacity={LABEL_STYLE[emphasis].opacity}\n                        onMouseEnter={() => onMouseEnter?.(series.seriesName)}\n                        onMouseLeave={() => onMouseLeave?.(series.seriesName)}\n                    />\n                )\n            })}\n        </g>\n    )\n}\n\nfunction Annotations({\n    series,\n    anchor,\n}: {\n    series: RenderLabelSeries[]\n    anchor: \"start\" | \"end\"\n}): React.ReactElement | null {\n    return (\n        <g\n            id={makeFigmaId(\"text-annotations\")}\n            style={{ pointerEvents: \"none\" }}\n        >\n            {series.map((series, index) => {\n                if (!series.annotationTextWrap) return null\n                const emphasis = series.emphasis ?? Emphasis.Default\n                return (\n                    <React.Fragment key={getSeriesKey(series, index)}>\n                        {series.annotationTextWrap.renderSVG(\n                            series.labelCoords.x,\n                            series.labelCoords.y +\n                                series.seriesLabel.height +\n                                ANNOTATION_PADDING,\n                            {\n                                textProps: {\n                                    fill: \"#333\",\n                                    opacity: LABEL_STYLE[emphasis].opacity,\n                                    textAnchor: anchor,\n                                    style: { fontWeight: 300 },\n                                },\n                            }\n                        )}\n                    </React.Fragment>\n                )\n            })}\n        </g>\n    )\n}\n\nfunction ConnectorLines({\n    series,\n}: {\n    series: RenderLabelSeries[]\n}): React.ReactElement {\n    return (\n        <g id={makeFigmaId(\"connectors\")} style={{ pointerEvents: \"none\" }}>\n            {series.map((series, index) => {\n                const { startX, endX } = series.connectorLineCoords\n                const {\n                    level,\n                    totalLevels,\n                    origBounds: { centerY: leftCenterY },\n                    bounds: { centerY: rightCenterY },\n                } = series\n\n                const step = (endX - startX) / (totalLevels + 1)\n                const markerXMid = startX + step + level * step\n                const d = `M${startX},${leftCenterY} H${markerXMid} V${rightCenterY} H${endX}`\n\n                const emphasis = series.emphasis ?? Emphasis.Default\n                const lineColor = LABEL_STYLE[emphasis].connectorLineColor\n\n                return (\n                    <path\n                        id={makeFigmaId(series.seriesName)}\n                        key={getSeriesKey(series, index)}\n                        d={d}\n                        stroke={lineColor}\n                        strokeWidth={0.5}\n                        fill=\"none\"\n                    />\n                )\n            })}\n        </g>\n    )\n}\n\nfunction InteractionOverlays({\n    series,\n    anchor,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    series: PlacedLabelSeries[]\n    anchor: \"start\" | \"end\"\n    onMouseEnter?: (key: SeriesName) => void\n    onMouseLeave?: (key: SeriesName) => void\n}): React.ReactElement {\n    return (\n        <g>\n            {series.map((series, index) => {\n                const x =\n                    anchor === \"start\"\n                        ? series.origBounds.x\n                        : series.origBounds.x - series.bounds.width\n                return (\n                    <g\n                        key={getSeriesKey(series, index)}\n                        onMouseEnter={() => onMouseEnter?.(series.seriesName)}\n                        onMouseLeave={() => onMouseLeave?.(series.seriesName)}\n                    >\n                        <rect\n                            x={x}\n                            y={series.bounds.y}\n                            width={series.bounds.width}\n                            height={series.bounds.height}\n                            fill=\"#fff\"\n                            opacity={0}\n                        />\n                    </g>\n                )\n            })}\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { match } from \"ts-pattern\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    Bounds,\n    excludeUndefined,\n    RequiredBy,\n    getRegionByName,\n    getRegionByShortName,\n    EntityName,\n    checkIsIncomeGroup,\n    checkIsOwidContinent,\n    Point,\n} from \"@ourworldindata/utils\"\nimport { canAppendTextToLastLine, TextWrap } from \"@ourworldindata/components\"\nimport { ParsedLabel, parseLabel } from \"../core/RegionGroups.js\"\nimport { FontSettings } from \"../core/GrapherConstants.js\"\nimport { hasTooltipData, TooltipKey } from \"./RegionTooltipData.js\"\n\nexport interface SeriesLabelStateOptions {\n    text: string\n    maxWidth: number\n    fontSize: number\n    fontWeight?: number\n    lineHeight?: number\n    textAnchor?: \"start\" | \"end\"\n    formattedValue?: string\n    placeFormattedValueInNewLine?: boolean\n    showRegionTooltip?: boolean\n}\n\nexport type TextRole = \"name\" | \"value\" | \"regionProviderSuffix\" | \"regionIcon\"\n\nexport interface TextSpan {\n    role: TextRole\n    text: string\n    fontWeight: number\n}\n\nexport type SpanLine = TextSpan[]\n\ninterface TextFragment extends TextSpan {\n    type: \"text\"\n    width: number\n}\n\ninterface IconFragment {\n    type: \"icon\"\n    tooltipKey: TooltipKey // e.g. \"un\"\n    regionName: EntityName // e.g. \"Africa (UN)\"\n    iconSize: number\n    width: number\n}\n\ninterface SpaceFragment {\n    type: \"space\"\n    width: number\n}\n\ntype ContentFragment = TextFragment | IconFragment | SpaceFragment\n\ntype ContentLine = ContentFragment[]\n\nexport type PositionedTextFragment = TextFragment & Point\nexport type PositionedIconFragment = IconFragment & Point\n\nexport type PositionedFragment = PositionedTextFragment | PositionedIconFragment\n\n/**\n * Computes layout and positioning for a series label typically rendered\n * in the chart area\n *\n * A series label can consist of up to three parts:\n * 1. Name: The main label text (e.g. \"United States\")\n * 2. Suffix: An optional parenthetical suffix parsed from the name (e.g. \"(WHO)\")\n * 3. Value: An optional formatted value to display alongside the name (e.g. \"45.2%\")\n */\nexport class SeriesLabelState {\n    private initialOptions: SeriesLabelStateOptions\n\n    private defaultOptions = {\n        fontWeight: 400,\n        lineHeight: 1.1,\n        placeFormattedValueInNewLine: false,\n        showRegionTooltip: false,\n        textAnchor: \"start\",\n    } as const satisfies Partial<SeriesLabelStateOptions>\n\n    constructor(options: SeriesLabelStateOptions) {\n        this.initialOptions = options\n        makeObservable(this)\n    }\n\n    static fromTextWrap(\n        textWrap: TextWrap,\n        options?: Pick<\n            SeriesLabelStateOptions,\n            \"showRegionTooltip\" | \"textAnchor\"\n        >\n    ): SeriesLabelState {\n        return new SeriesLabelState({\n            text: textWrap.text,\n            maxWidth: textWrap.maxWidth,\n            fontSize: textWrap.fontSize,\n            fontWeight: textWrap?.fontWeight,\n            lineHeight: textWrap?.lineHeight,\n            showRegionTooltip: options?.showRegionTooltip,\n            textAnchor: options?.textAnchor,\n        })\n    }\n\n    getPositionForSvgRendering(x: number, y: number): [number, number] {\n        return this.nameWrap.getPositionForSvgRendering(x, y)\n    }\n\n    @computed private get options(): RequiredBy<\n        SeriesLabelStateOptions,\n        keyof typeof this.defaultOptions\n    > {\n        return { ...this.defaultOptions, ...this.initialOptions }\n    }\n\n    @computed get text(): string {\n        return this.options.text\n    }\n\n    @computed get textAnchor(): \"start\" | \"end\" {\n        return this.options.textAnchor\n    }\n\n    @computed private get parsedText(): ParsedLabel {\n        return parseLabel(this.options.text)\n    }\n\n    @computed private get name(): string {\n        // Only split the suffix from the main text if it's a region provider\n        return this.parsedText.providerKey\n            ? this.parsedText.name\n            : this.parsedText.raw\n    }\n\n    @computed private get nameWrap(): TextWrap {\n        return new TextWrap({\n            text: this.name,\n            maxWidth: this.options.maxWidth,\n            ...this.fontSettings,\n        })\n    }\n\n    @computed get fontSettings(): FontSettings {\n        return {\n            fontSize: this.options.fontSize,\n            lineHeight: this.options.lineHeight,\n            fontWeight: this.options.fontWeight,\n        }\n    }\n\n    @computed get singleLineHeight(): number {\n        return this.nameWrap.singleLineHeight\n    }\n\n    @computed private get iconSize(): number {\n        return Math.round(this.options.fontSize * 0.9)\n    }\n\n    @computed private get spaceWidth(): number {\n        return Bounds.forText(\" \", this.fontSettings).width\n    }\n\n    @computed private get spaceFragment(): SpaceFragment {\n        return { type: \"space\", width: this.spaceWidth }\n    }\n\n    @computed private get regionIconInfo():\n        | { tooltipKey: TooltipKey; regionName: EntityName }\n        | undefined {\n        if (!this.options.showRegionTooltip) return\n\n        const region =\n            getRegionByName(this.options.text) ??\n            getRegionByShortName(this.options.text)\n        if (!region) return\n\n        // Check if the region is an income group\n        if (checkIsIncomeGroup(region))\n            return { tooltipKey: \"incomeGroups\", regionName: region.name }\n\n        // Check if the region is an OWID continent\n        if (checkIsOwidContinent(region))\n            return { tooltipKey: \"continents\", regionName: region.name }\n\n        // Check if it's a region provider with tooltip data\n        if (this.parsedText.providerKey && hasTooltipData(region)) {\n            return {\n                tooltipKey: region.definedBy,\n                regionName: region.name,\n            }\n        }\n\n        return\n    }\n\n    /**\n     * Fragments for the parenthetical region provider suffix (e.g. \"(WHO)\")\n     *\n     * Some region providers have an associated tooltip, in which case we render\n     * an info icon inside the parentheses. If there is no info icon, the\n     * suffix is rendered in a muted style to visually differentiate it from\n     * the main name.\n     */\n    @computed private get suffixFragments(): ContentFragment[] | undefined {\n        if (!this.parsedText.providerKey) return undefined\n\n        const fontSettings = { ...this.fontSettings, fontWeight: 400 }\n\n        if (this.regionIconInfo && !this.regionIconFragments) {\n            const textBeforeIcon = `(${this.parsedText.suffix}`\n            const textAfterIcon = `)`\n\n            const textBeforeWidth = Bounds.forText(\n                textBeforeIcon,\n                fontSettings\n            ).width\n            const textAfterWidth = Bounds.forText(\n                textAfterIcon,\n                fontSettings\n            ).width\n\n            return [\n                {\n                    type: \"text\",\n                    role: \"regionProviderSuffix\",\n                    text: textBeforeIcon,\n                    width: textBeforeWidth,\n                    fontWeight: fontSettings.fontWeight,\n                },\n                this.spaceFragment,\n                {\n                    type: \"icon\",\n                    width: this.iconSize,\n                    iconSize: this.iconSize,\n                    ...this.regionIconInfo,\n                },\n                {\n                    type: \"text\",\n                    role: \"regionProviderSuffix\",\n                    text: textAfterIcon,\n                    width: textAfterWidth,\n                    fontWeight: fontSettings.fontWeight,\n                },\n            ]\n        } else {\n            const text = `(${this.parsedText.suffix})`\n            const width = Bounds.forText(text, fontSettings).width\n\n            return [\n                {\n                    type: \"text\",\n                    role: \"regionProviderSuffix\",\n                    text,\n                    width,\n                    fontWeight: fontSettings.fontWeight,\n                },\n            ]\n        }\n    }\n\n    @computed private get valueFragments(): ContentFragment[] | undefined {\n        if (!this.options.formattedValue) return undefined\n\n        const text = this.options.formattedValue\n        const fontSettings = { ...this.fontSettings, fontWeight: 400 }\n        const width = Bounds.forText(text, fontSettings).width\n\n        return [\n            {\n                type: \"text\",\n                role: \"value\",\n                text,\n                width,\n                fontWeight: fontSettings.fontWeight,\n            },\n        ]\n    }\n\n    @computed private get regionIconFragments(): ContentFragment[] | undefined {\n        if (!this.regionIconInfo || this.parsedText.providerKey)\n            return undefined\n\n        return [\n            {\n                type: \"icon\",\n                width: this.iconSize,\n                iconSize: this.iconSize,\n                ...this.regionIconInfo,\n            },\n        ]\n    }\n\n    /**\n     * Which fragment group (if any) shares the last line with the name.\n     *\n     * Only one of suffix or value can be placed on the same line as the name.\n     * Suffix has priority if present; value is only considered when there's\n     * no suffix and it's not forced to a new line.\n     */\n    @computed private get roleOnNameLine():\n        | Exclude<TextRole, \"name\">\n        | undefined {\n        // If there's a region icon (income group or continent),\n        // it must be placed on the same line as the name\n        if (this.regionIconFragments) return \"regionIcon\"\n\n        // Suffix has priority\n        if (this.suffixFragments) {\n            const suffixText = `(${this.parsedText.suffix})`\n            const reservedWidth = this.regionIconInfo\n                ? this.iconSize + this.spaceWidth\n                : 0\n            const fits = canAppendTextToLastLine({\n                existingTextWrap: this.nameWrap,\n                textToAppend: suffixText,\n                reservedWidth,\n            })\n            return fits ? \"regionProviderSuffix\" : undefined\n        }\n\n        // Only consider value if not forced to new line\n        if (this.valueFragments && !this.options.placeFormattedValueInNewLine) {\n            const fits = canAppendTextToLastLine({\n                existingTextWrap: this.nameWrap,\n                textToAppend: this.options.formattedValue!,\n            })\n            return fits ? \"value\" : undefined\n        }\n\n        return undefined\n    }\n\n    @computed private get fragmentGroups(): {\n        role: TextRole\n        fragments: ContentFragment[]\n    }[] {\n        return excludeUndefined([\n            this.suffixFragments\n                ? {\n                      role: \"regionProviderSuffix\",\n                      fragments: this.suffixFragments,\n                  }\n                : undefined,\n            this.regionIconFragments\n                ? {\n                      role: \"regionIcon\",\n                      fragments: this.regionIconFragments,\n                  }\n                : undefined,\n            this.valueFragments\n                ? { role: \"value\", fragments: this.valueFragments }\n                : undefined,\n        ])\n    }\n\n    /** Lines of content where each line consists of one or more fragments */\n    @computed private get contentLines(): ContentLine[] {\n        const {\n            nameWrap,\n            spaceFragment,\n            fragmentGroups,\n            roleOnNameLine,\n            fontSettings: { fontWeight },\n        } = this\n\n        // Map each line of the name to a fragment\n        const lines: ContentLine[] = nameWrap.lines.map((line) => [\n            {\n                type: \"text\",\n                role: \"name\",\n                text: line.text,\n                width: line.width,\n                fontWeight: nameWrap.fontWeight ?? fontWeight,\n            },\n        ])\n\n        // Reference to the last line of the name\n        const lastNameLine = lines[lines.length - 1]\n\n        // Append suffix and value fragments to the last line or add as new lines\n        for (const { role, fragments } of fragmentGroups) {\n            if (roleOnNameLine === role)\n                lastNameLine.push(spaceFragment, ...fragments)\n            else lines.push(fragments)\n        }\n\n        return lines\n    }\n\n    @computed get hasIcon(): boolean {\n        return this.contentLines.some((line) =>\n            line.some((f) => f.type === \"icon\")\n        )\n    }\n\n    @computed get width(): number {\n        const lineWidths = this.contentLines.map((line) =>\n            _.sumBy(line, (fragment) => fragment.width)\n        )\n        return lineWidths.length > 0 ? Math.max(...lineWidths) : 0\n    }\n\n    @computed get height(): number {\n        return this.contentLines.length * this.singleLineHeight\n    }\n\n    /** Content lines transformed for native SVG text rendering */\n    @computed get spanLines(): SpanLine[] {\n        return this.contentLines.map((line) => extractTextSpans(line))\n    }\n\n    /** List of positioned fragments ready for rendering */\n    @computed get positionedFragments(): PositionedFragment[] {\n        return this.contentLines.flatMap((fragments, lineIndex) =>\n            positionLineFragments({\n                fragments: fragments,\n                y: lineIndex * this.singleLineHeight,\n                textAnchor: this.options.textAnchor,\n            })\n        )\n    }\n}\n\n/** Convert line fragments to text spans, merging spaces into adjacent text */\nfunction extractTextSpans(line: ContentLine): TextSpan[] {\n    const fragments = line.filter(\n        (f) => f.type === \"text\" || f.type === \"space\"\n    )\n\n    return fragments\n        .map((fragment, i) => {\n            if (fragment.type === \"space\") return undefined\n            const followsSpace = fragments[i - 1]?.type === \"space\"\n            return {\n                text: followsSpace ? \" \" + fragment.text : fragment.text,\n                fontWeight: fragment.fontWeight,\n                role: fragment.role,\n            }\n        })\n        .filter((span) => span !== undefined)\n}\n\n/** Position fragments in a line based on their width and the textAnchor */\nfunction positionLineFragments({\n    fragments,\n    y,\n    textAnchor,\n}: {\n    fragments: ContentLine\n    y: number\n    textAnchor: SeriesLabelStateOptions[\"textAnchor\"]\n}): PositionedFragment[] {\n    const positionedFragments: PositionedFragment[] = []\n\n    // Calculate total line width\n    const totalWidth = _.sumBy(fragments, (f) => f.width)\n\n    // Starting x position based on textAnchor\n    let x = textAnchor === \"end\" ? -totalWidth : 0\n\n    for (const fragment of fragments) {\n        match(fragment)\n            .with({ type: \"text\" }, (fragment) => {\n                positionedFragments.push({ ...fragment, x, y })\n                x += fragment.width\n            })\n            .with({ type: \"icon\" }, (fragment) => {\n                const iconYOffset = -fragment.iconSize + 1.5 // Small visual correction\n                positionedFragments.push({ ...fragment, x, y: y + iconYOffset })\n                x += fragment.width\n            })\n            .with({ type: \"space\" }, (fragment) => {\n                // Account for space width but don't render anything\n                x += fragment.width\n            })\n            .exhaustive()\n    }\n\n    return positionedFragments\n}\n","import * as _ from \"lodash-es\"\nimport {\n    computeCandidateScores,\n    VerticalLabelsFilterAlgorithmContext,\n    pickAsManyAsPossibleWithRetry,\n    pickCandidate,\n    pickCandidateWithMaxDistanceToReferenceCandidate,\n    pickCandidateWithRetry,\n} from \"./VerticalLabelsHelpers\"\nimport { PlacedLabelSeries } from \"./VerticalLabelsTypes\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\n\n/**\n * Keep a subset of series that fit within the available height, prioritizing by\n * importance. Focused series have priority, even if they're less important.\n *\n * Note that more important (but longer) series names might be skipped if they don't fit.\n */\nexport function findImportantSeriesThatFitIntoTheAvailableSpace(\n    seriesSortedByImportance: PlacedLabelSeries[],\n    availableHeight: number\n) {\n    let context: VerticalLabelsFilterAlgorithmContext = {\n        candidates: new Set(seriesSortedByImportance),\n        availableHeight,\n        sortedKeepSeries: [],\n        keepSeriesHeight: 0,\n    }\n\n    const [highlightedCandidates, nonHighlightedCandidates] = _.partition(\n        seriesSortedByImportance,\n        (series) => series.emphasis === Emphasis.Highlighted\n    )\n\n    const importanceScore = new Map(\n        seriesSortedByImportance.map((series, index) => [\n            series.seriesName,\n            -index, // Higher index means lower importance\n        ])\n    )\n\n    const getMostImportantCandidate = (candidates: PlacedLabelSeries[]) =>\n        _.maxBy(candidates, (c) => importanceScore.get(c.seriesName))\n\n    // Highlighted series have priority\n    context = pickAsManyAsPossibleWithRetry({\n        context,\n        candidateSubset: highlightedCandidates,\n        getCandidateFromSubset: getMostImportantCandidate,\n    })\n\n    context = pickAsManyAsPossibleWithRetry({\n        context,\n        candidateSubset: nonHighlightedCandidates,\n        getCandidateFromSubset: getMostImportantCandidate,\n    })\n\n    return context.sortedKeepSeries\n}\n\n/**\n * Pick a subset of series that fit within the available height.\n *\n * The algorithm tries to pick labels in a 'balanced' way such that they're\n * spread out as much as possible. Focused series have priority.\n *\n * The algorithm works as follows: Given a set of placed labels and a set of\n * candidates, for each candidate, we find the two closest already placed labels,\n * one to each side, and calculate a score based on the available space between\n * the two placed labels (the bigger, the better) and the candidate's distance to\n * the midpoint (the smaller, the better). We then pick the candidate with the best\n * score that fits into the available space.\n */\nexport function findSeriesThatFitIntoTheAvailableSpace(\n    series: PlacedLabelSeries[],\n    availableHeight: number\n): PlacedLabelSeries[] {\n    let context: VerticalLabelsFilterAlgorithmContext = {\n        candidates: new Set(series),\n        availableHeight,\n        sortedKeepSeries: [],\n        keepSeriesHeight: 0,\n    }\n\n    const [highlightedCandidates, nonHighlightedCandidates] = _.partition(\n        series,\n        (series) => series.emphasis === Emphasis.Highlighted\n    )\n\n    // highlighted series have priority\n    context = pickAsManyAsPossibleWithRetry({\n        context,\n        candidateSubset: highlightedCandidates,\n    })\n\n    // We initially need to pick at least two candidates\n    const numPickedCandidates = context.sortedKeepSeries.length\n    if (numPickedCandidates === 0) {\n        // Pick two candidates with maximal distance to each other.\n        // by convention we pick the max candidate first, but we could also\n        // start by picking the min candidate\n        const maxCandidate = _.maxBy(nonHighlightedCandidates, (c) => c.midY)\n        if (maxCandidate) {\n            context = pickCandidate(context, maxCandidate)\n\n            context = pickCandidateWithMaxDistanceToReferenceCandidate({\n                context,\n                candidateSubset: nonHighlightedCandidates,\n                referenceCandidate: context.sortedKeepSeries[0],\n            })\n        }\n    } else if (numPickedCandidates === 1) {\n        // Pick the candidate that is furthest away from the focused label\n        context = pickCandidateWithMaxDistanceToReferenceCandidate({\n            context,\n            candidateSubset: nonHighlightedCandidates,\n            referenceCandidate: context.sortedKeepSeries[0],\n        })\n    }\n\n    // Pick candidates based on a scoring system\n    while (\n        context.candidates.size > 0 &&\n        context.keepSeriesHeight <= availableHeight\n    ) {\n        const candidates = Array.from(context.candidates)\n        const scoreMap = computeCandidateScores(\n            candidates,\n            context.sortedKeepSeries\n        )\n\n        // Pick the candidate with the highest score\n        const getBestCandidate = (candidates: PlacedLabelSeries[]) =>\n            _.maxBy(candidates, (c) => scoreMap.get(c.seriesName))\n\n        context = pickCandidateWithRetry({\n            context,\n            candidateSubset: candidates,\n            getCandidateFromSubset: getBestCandidate,\n        })\n    }\n\n    return context.sortedKeepSeries\n}\n","import * as _ from \"lodash-es\"\nimport { Bounds, excludeUndefined, RequiredBy } from \"@ourworldindata/utils\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { SeriesLabelState } from \"../seriesLabel/SeriesLabelState.js\"\nimport { computed } from \"mobx\"\nimport { VerticalAxis } from \"../axis/Axis.js\"\nimport { EntityName, SeriesName, VerticalAlign } from \"@ourworldindata/types\"\nimport {\n    BASE_FONT_SIZE,\n    GRAPHER_FONT_SCALE_12,\n} from \"../core/GrapherConstants.js\"\nimport { AxisConfig } from \"../axis/AxisConfig.js\"\nimport {\n    findImportantSeriesThatFitIntoTheAvailableSpace,\n    findSeriesThatFitIntoTheAvailableSpace,\n} from \"./VerticalLabelsFilterAlgorithms.js\"\nimport {\n    ANNOTATION_PADDING,\n    DEFAULT_CONNECTOR_LINE_WIDTH,\n    DEFAULT_FONT_WEIGHT,\n    LEGEND_ITEM_MIN_SPACING,\n    MARKER_MARGIN,\n} from \"./VerticalLabelsConstants.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\nimport {\n    LabelSeries,\n    PlacedLabelSeries,\n    SizedLabelSeries,\n    RenderLabelSeries,\n} from \"./VerticalLabelsTypes\"\n\nexport interface VerticalLabelsStateOptions {\n    yAxis?: () => VerticalAxis // Passed as getter to avoid MobX dependency cycles\n    yRange?: () => [number, number] // Passed as getter to avoid MobX dependency cycles\n    maxWidth?: number\n    fontSize?: number\n    fontWeight?: number\n    verticalAlign?: VerticalAlign\n    textAnchor?: \"start\" | \"end\"\n    showRegionTooltip?: boolean\n    seriesNamesSortedByImportance?: SeriesName[]\n}\n\n/**\n * Manages layout and visibility of vertical series labels, handling sizing,\n * placement, collision resolution, and filtering when space is limited\n */\nexport class VerticalLabelsState {\n    private initialSeries: LabelSeries[]\n    private initialOptions: VerticalLabelsStateOptions\n\n    private defaultOptions = {\n        fontSize: BASE_FONT_SIZE,\n        fontWeight: DEFAULT_FONT_WEIGHT,\n        maxWidth: Infinity,\n        verticalAlign: VerticalAlign.middle,\n        textAnchor: \"start\",\n        showRegionTooltip: true,\n    } as const satisfies Partial<VerticalLabelsStateOptions>\n\n    constructor(series: LabelSeries[], options: VerticalLabelsStateOptions) {\n        this.initialSeries = series\n        this.initialOptions = options\n    }\n\n    @computed private get options(): RequiredBy<\n        VerticalLabelsStateOptions,\n        keyof typeof this.defaultOptions\n    > {\n        return { ...this.defaultOptions, ...this.initialOptions }\n    }\n\n    @computed get textAnchor(): \"start\" | \"end\" {\n        return this.options.textAnchor\n    }\n\n    @computed get fontSize(): number {\n        return Math.floor(GRAPHER_FONT_SCALE_12 * this.options.fontSize)\n    }\n\n    @computed private get yAxis(): VerticalAxis {\n        return this.options.yAxis?.() ?? new VerticalAxis(new AxisConfig())\n    }\n\n    @computed private get textMaxWidth(): number {\n        return this.options.maxWidth - DEFAULT_CONNECTOR_LINE_WIDTH\n    }\n\n    private makeAnnotationTextWrap(series: LabelSeries): TextWrap | undefined {\n        if (!series.annotation) return undefined\n        const maxWidth = Math.min(this.textMaxWidth, 150)\n        return new TextWrap({\n            text: series.annotation,\n            maxWidth,\n            fontSize: this.fontSize * 0.9,\n            lineHeight: 1,\n        })\n    }\n\n    @computed.struct get sizedSeries(): SizedLabelSeries[] {\n        const { fontWeight: defaultFontWeight } = this.options\n        return this.initialSeries.map((series) => {\n            const seriesFontWeight = series.formattedValue ? 700 : undefined\n            const fontWeight = seriesFontWeight ?? defaultFontWeight\n\n            const seriesLabel = new SeriesLabelState({\n                text: series.label,\n                maxWidth: this.textMaxWidth,\n                fontSize: this.fontSize,\n                fontWeight,\n                textAnchor: this.options.textAnchor,\n                formattedValue: series.formattedValue,\n                placeFormattedValueInNewLine:\n                    series.placeFormattedValueInNewLine,\n                showRegionTooltip: this.options.showRegionTooltip,\n            })\n\n            const annotationTextWrap = this.makeAnnotationTextWrap(series)\n            const annotationWidth = annotationTextWrap?.width ?? 0\n            const annotationHeight = annotationTextWrap\n                ? ANNOTATION_PADDING + annotationTextWrap.height\n                : 0\n\n            return {\n                ...series,\n                seriesLabel,\n                annotationTextWrap,\n                width: Math.max(seriesLabel.width, annotationWidth),\n                height: seriesLabel.height + annotationHeight,\n            }\n        })\n    }\n\n    @computed private get maxLabelWidth(): number {\n        const { sizedSeries = [] } = this\n        return _.max(sizedSeries.map((d) => d.width)) ?? 0\n    }\n\n    /**\n     * Stable width that might be slightly inaccurate because it always\n     * includes space for connector lines. This is useful to prevent layout\n     * shifts when connector lines toggle on/off, and avoids circular\n     * dependencies in layout calculations\n     */\n    @computed get stableWidth(): number {\n        return this.maxLabelWidth + DEFAULT_CONNECTOR_LINE_WIDTH + MARKER_MARGIN\n    }\n\n    @computed get width(): number {\n        return this.needsConnectorLines\n            ? this.stableWidth\n            : this.maxLabelWidth + MARKER_MARGIN\n    }\n\n    @computed private get legendY(): [number, number] {\n        const range = this.options.yRange?.() ?? this.yAxis.range\n        return [Math.min(range[1], range[0]), Math.max(range[1], range[0])]\n    }\n\n    private getYPositionForSeriesLabel(series: SizedLabelSeries): number {\n        const y = this.yAxis.place(series.yValue)\n        const lineHeight = series.seriesLabel.singleLineHeight\n        switch (this.options.verticalAlign) {\n            case VerticalAlign.middle:\n                return y - series.height / 2\n            case VerticalAlign.top:\n                return y - lineHeight / 2\n            case VerticalAlign.bottom:\n                return y - series.height + lineHeight / 2\n        }\n    }\n\n    // Naive initial placement of each mark at the target height, before collision detection\n    @computed\n    private get initialPlacedSeries(): PlacedLabelSeries[] {\n        const { yAxis, legendY } = this\n        const legendX = 0\n\n        const [legendYMin, legendYMax] = legendY\n\n        return this.sizedSeries.map((series) => {\n            const labelHeight = series.height\n            const labelWidth = series.width + DEFAULT_CONNECTOR_LINE_WIDTH\n\n            const midY = yAxis.place(series.yValue)\n            const origBounds = new Bounds(\n                legendX,\n                midY - series.height / 2,\n                labelWidth,\n                labelHeight\n            )\n\n            // ensure label doesn't go beyond the top or bottom of the chart\n            const initialY = this.getYPositionForSeriesLabel(series)\n            const y = Math.min(\n                Math.max(initialY, legendYMin),\n                legendYMax - labelHeight\n            )\n            const bounds = new Bounds(legendX, y, labelWidth, labelHeight)\n\n            return {\n                ...series,\n                y,\n                midY,\n                origBounds,\n                bounds,\n                repositions: 0,\n                level: 0,\n                totalLevels: 0,\n            }\n        })\n    }\n\n    @computed get initialPlacedSeriesByName(): Map<\n        EntityName,\n        PlacedLabelSeries\n    > {\n        return new Map(this.initialPlacedSeries.map((d) => [d.seriesName, d]))\n    }\n\n    @computed get placedSeries(): PlacedLabelSeries[] {\n        const [yLegendMin, yLegendMax] = this.legendY\n\n        // ensure list is sorted by the visual position in ascending order\n        const sortedSeries = _.sortBy(\n            this.visiblePlacedSeries,\n            (label) => label.midY\n        )\n\n        const groups: PlacedLabelSeries[][] = sortedSeries.map((mark) => [\n            { ...mark },\n        ])\n\n        let hasOverlap\n\n        do {\n            hasOverlap = false\n            for (let i = 0; i < groups.length - 1; i++) {\n                const topGroup = groups[i]\n                const bottomGroup = groups[i + 1]\n                const topBounds = groupBounds(topGroup)\n                const bottomBounds = groupBounds(bottomGroup)\n                if (topBounds.intersects(bottomBounds)) {\n                    const overlapHeight =\n                        topBounds.bottom -\n                        bottomBounds.top +\n                        LEGEND_ITEM_MIN_SPACING\n                    const newHeight =\n                        topBounds.height +\n                        LEGEND_ITEM_MIN_SPACING +\n                        bottomBounds.height\n                    const targetY =\n                        topBounds.top -\n                        overlapHeight *\n                            (bottomGroup.length /\n                                (topGroup.length + bottomGroup.length))\n                    const overflowTop = Math.max(yLegendMin - targetY, 0)\n                    const overflowBottom = Math.max(\n                        targetY + newHeight - yLegendMax,\n                        0\n                    )\n                    const newY = targetY + overflowTop - overflowBottom\n                    const newGroup = [...topGroup, ...bottomGroup]\n                    stackGroupVertically(newGroup, newY)\n                    groups.splice(i, 2, newGroup)\n                    hasOverlap = true\n                    break\n                }\n            }\n        } while (hasOverlap && groups.length > 1)\n\n        for (const group of groups) {\n            let currentLevel = 0\n            let prevSign = 0\n            for (const series of group) {\n                const currentSign = Math.sign(\n                    series.bounds.y - series.origBounds.y\n                )\n                if (prevSign === currentSign) {\n                    currentLevel -= currentSign\n                }\n                series.level = currentLevel\n                prevSign = currentSign\n            }\n            const minLevel = _.min(group.map((mark) => mark.level)) as number\n            const maxLevel = _.max(group.map((mark) => mark.level)) as number\n            for (const mark of group) {\n                mark.level -= minLevel\n                mark.totalLevels = maxLevel - minLevel + 1\n            }\n        }\n\n        return groups.flat()\n    }\n\n    @computed private get seriesSortedByImportance():\n        | PlacedLabelSeries[]\n        | undefined {\n        if (!this.options.seriesNamesSortedByImportance) return undefined\n        return excludeUndefined(\n            this.options.seriesNamesSortedByImportance.map((seriesName) =>\n                this.initialPlacedSeriesByName.get(seriesName)\n            )\n        )\n    }\n\n    private computeHeight(series: PlacedLabelSeries[]): number {\n        return (\n            _.sumBy(series, (series) => series.bounds.height) +\n            (series.length - 1) * LEGEND_ITEM_MIN_SPACING\n        )\n    }\n\n    @computed get visiblePlacedSeries(): PlacedLabelSeries[] {\n        const { initialPlacedSeries, seriesSortedByImportance, legendY } = this\n        const availableHeight = Math.abs(legendY[1] - legendY[0])\n        const totalHeight = this.computeHeight(initialPlacedSeries)\n\n        // early return if filtering is not needed\n        if (totalHeight <= availableHeight) return initialPlacedSeries\n\n        // if a list of series sorted by importance is provided, use it\n        if (seriesSortedByImportance) {\n            return findImportantSeriesThatFitIntoTheAvailableSpace(\n                seriesSortedByImportance,\n                availableHeight\n            )\n        }\n\n        // otherwise use the default filtering\n        return findSeriesThatFitIntoTheAvailableSpace(\n            initialPlacedSeries,\n            availableHeight\n        )\n    }\n\n    @computed get visibleSeriesNames(): SeriesName[] {\n        return this.visiblePlacedSeries.map((series) => series.seriesName)\n    }\n\n    @computed get visibleSeriesHeight(): number {\n        return this.computeHeight(this.visiblePlacedSeries)\n    }\n\n    // Does this placement need line markers or is the position of the labels already clear?\n    @computed get needsConnectorLines(): boolean {\n        return this.placedSeries.some((series) => series.totalLevels > 1)\n    }\n\n    @computed get maxLevel(): number {\n        return _.max(this.placedSeries.map((series) => series.totalLevels)) ?? 0\n    }\n\n    @computed get renderSeries(): RenderLabelSeries[] {\n        const direction = this.options.textAnchor === \"start\" ? 1 : -1\n        const markerMargin = direction * MARKER_MARGIN\n        const connectorLineWidth = direction * DEFAULT_CONNECTOR_LINE_WIDTH\n\n        return this.placedSeries.map((series) => {\n            const { x } = series.origBounds\n            const connectorLineCoords = {\n                startX: x + markerMargin,\n                endX: x + connectorLineWidth - markerMargin,\n            }\n\n            const textX = this.needsConnectorLines\n                ? connectorLineCoords.endX + markerMargin\n                : x + markerMargin\n            const textY = series.bounds.y\n\n            const emphasis = series.emphasis ?? Emphasis.Default\n\n            return {\n                ...series,\n                labelCoords: { x: textX, y: textY },\n                connectorLineCoords,\n                emphasis,\n            }\n        })\n    }\n\n    @computed get annotatedSeries(): RenderLabelSeries[] {\n        return this.renderSeries.filter((series) => series.annotationTextWrap)\n    }\n\n    @computed get hasAnnotatedSeries(): boolean {\n        return this.annotatedSeries.length > 0\n    }\n}\n\nfunction groupBounds(group: PlacedLabelSeries[]): Bounds {\n    const first = group[0]\n    const last = group[group.length - 1]\n    const height = last.bounds.bottom - first.bounds.top\n    const width = Math.max(first.bounds.width, last.bounds.width)\n    return new Bounds(first.bounds.x, first.bounds.y, width, height)\n}\n\nfunction stackGroupVertically(\n    group: PlacedLabelSeries[],\n    y: number\n): PlacedLabelSeries[] {\n    let currentY = y\n    group.forEach((mark) => {\n        mark.bounds = mark.bounds.set({ y: currentY })\n        mark.repositions += 1\n        currentY += mark.bounds.height + LEGEND_ITEM_MIN_SPACING\n    })\n    return group\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { excludeUndefined } from \"@ourworldindata/utils\"\nimport { Time } from \"@ourworldindata/types\"\nimport { extent } from \"d3-array\"\nimport { RenderLineChartSeries } from \"./LineChartConstants\"\nimport { LineChartState } from \"./LineChartState.js\"\nimport { getAnnotationsForSeries } from \"./LineChartHelpers\"\nimport {\n    Tooltip,\n    TooltipState,\n    TooltipTable,\n    makeTooltipRoundingNotice,\n    toTooltipTableColumns,\n} from \"../tooltip/Tooltip\"\nimport {\n    FooterItem,\n    TooltipFooterIcon,\n    TooltipProps,\n    TooltipTableProps,\n} from \"../tooltip/TooltipProps.js\"\nimport { GRAPHER_OPACITY_MUTED } from \"../core/GrapherConstants\"\nimport { darkenColorForLine } from \"../color/ColorUtils\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\n\nexport interface LineChartTooltipProps {\n    id: number\n    chartState: LineChartState\n    tooltipState: TooltipState<{ time: Time }>\n    series: RenderLineChartSeries[]\n    xAxisLabel?: string\n    dismissTooltip: () => void\n}\n\n@observer\nexport class LineChartTooltip extends React.Component<LineChartTooltipProps> {\n    private get chartState(): LineChartState {\n        return this.props.chartState\n    }\n\n    private get target(): { time: Time } | undefined {\n        return this.props.tooltipState.target ?? undefined\n    }\n\n    private get series(): RenderLineChartSeries[] {\n        const { target } = this\n        if (!target) return []\n\n        // Duplicate seriesNames will be present if there is a projected-values line\n        const grouped = _.groupBy(this.props.series, \"seriesName\")\n\n        return excludeUndefined(\n            Object.values(grouped).map(\n                (segments) =>\n                    // Ideally pick series with a defined value at the target time\n                    segments.find((series) =>\n                        series.points.find((point) => point.x === target.time)\n                    ) ??\n                    // Otherwise pick the series whose start & end contains the target time\n                    // and display a \"No data\" notice.\n                    segments.find((series): boolean | void => {\n                        const [startX, endX] = extent(\n                            series.points,\n                            ({ x }) => x\n                        )\n                        return (\n                            _.isNumber(startX) &&\n                            _.isNumber(endX) &&\n                            startX < target.time &&\n                            target.time < endX\n                        )\n                    })\n            )\n        )\n    }\n\n    private get hasProjectedSeries(): boolean {\n        return this.series.some((series) => series.isProjection)\n    }\n\n    private get sortedSeries(): RenderLineChartSeries[] {\n        const { target, series } = this\n        if (!target) return []\n\n        return _.sortBy(series, (series) => {\n            const value = series.points.find((point) => point.x === target.time)\n            return value !== undefined ? -value.y : Infinity\n        })\n    }\n\n    private get projectionNotice(): FooterItem | undefined {\n        if (!this.hasProjectedSeries) return undefined\n\n        return { icon: TooltipFooterIcon.Stripes, text: \"Projected data\" }\n    }\n\n    private get roundingNotice(): FooterItem | undefined {\n        const { formatColumn } = this.chartState\n\n        if (!formatColumn.roundsToSignificantFigures) return undefined\n\n        return {\n            icon: TooltipFooterIcon.None,\n            text: makeTooltipRoundingNotice([\n                formatColumn.numSignificantFigures,\n            ]),\n        }\n    }\n\n    private get footer(): FooterItem[] {\n        return excludeUndefined([this.projectionNotice, this.roundingNotice])\n    }\n\n    private get title(): string {\n        const { target } = this\n        if (!target) return \"\"\n        return this.chartState.formatColumn.formatTime(target.time)\n    }\n\n    private get titleAnnotation(): string {\n        return this.props.xAxisLabel ? `(${this.props.xAxisLabel})` : \"\"\n    }\n\n    private get subtitle(): string | undefined {\n        const { isRelativeMode, startTime } = this.chartState.manager\n        const { formatColumn } = this.chartState\n\n        return isRelativeMode && startTime\n            ? `% change since ${formatColumn.formatTime(startTime)}`\n            : formatColumn.displayUnit\n    }\n\n    private get subtitleFormat(): TooltipProps[\"subtitleFormat\"] {\n        return this.subtitle === this.chartState.formatColumn.displayUnit\n            ? \"unit\"\n            : undefined\n    }\n\n    private get columns(): CoreColumn[] {\n        const { formatColumn, colorColumn, hasColorScale } = this.chartState\n\n        const columns = [formatColumn]\n        if (hasColorScale && colorColumn.slug !== formatColumn.slug)\n            columns.push(colorColumn)\n\n        return columns\n    }\n\n    private toTooltipTableRow(\n        series: RenderLineChartSeries\n    ): TooltipTableProps[\"rows\"][number] {\n        const { target } = this\n\n        const { seriesName, displayName, isProjection: striped } = series\n        const annotation = getAnnotationsForSeries(\n            this.chartState.annotationsMap,\n            seriesName\n        )\n\n        const point = series.points.find((point) => point.x === target!.time)\n\n        const blurred =\n            series.emphasis === Emphasis.Muted || point === undefined\n\n        const color = this.chartState.hasColorScale\n            ? darkenColorForLine(\n                  this.chartState.getColorScaleColor(point?.colorValue)\n              )\n            : series.color\n        const opacity = blurred ? GRAPHER_OPACITY_MUTED : 1\n        const swatch = { color, opacity }\n\n        const values = excludeUndefined([\n            point?.y,\n            point?.colorValue as undefined | number,\n        ])\n\n        return {\n            name: displayName,\n            annotation,\n            swatch,\n            blurred,\n            striped,\n            values,\n        }\n    }\n\n    override render(): React.ReactElement | null {\n        const { target } = this\n        const { position, fading } = this.props.tooltipState\n\n        if (!target) return null\n\n        return (\n            <Tooltip\n                id={this.props.id}\n                tooltipManager={this.chartState.manager}\n                x={position.x}\n                y={position.y}\n                style={{ maxWidth: \"400px\" }}\n                offsetXDirection=\"left\"\n                offsetX={20}\n                offsetY={-16}\n                title={this.title}\n                titleAnnotation={this.titleAnnotation}\n                subtitle={this.subtitle}\n                subtitleFormat={this.subtitleFormat}\n                footer={this.footer}\n                dissolve={fading}\n                dismiss={this.props.dismissTooltip}\n            >\n                <TooltipTable\n                    columns={toTooltipTableColumns(this.columns)}\n                    rows={this.sortedSeries.map((series) =>\n                        this.toTooltipTableRow(series)\n                    )}\n                />\n            </Tooltip>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    dyFromAlign,\n    removeAllWhitespace,\n    Bounds,\n    HorizontalAlign,\n    VerticalAlign,\n    makeFigmaId,\n} from \"@ourworldindata/utils\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport {\n    ColorScaleBin,\n    NumericBin,\n    CategoricalBin,\n} from \"../color/ColorScaleBin\"\nimport {\n    BASE_FONT_SIZE,\n    GRAPHER_FONT_SCALE_12,\n    GRAPHER_FONT_SCALE_12_8,\n    GRAPHER_FONT_SCALE_14,\n} from \"../core/GrapherConstants\"\nimport { darkenColorForLine } from \"../color/ColorUtils\"\nimport {\n    LegendStyleConfig,\n    LegendTextStyle,\n    LegendMarkerStyle,\n} from \"./LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\n\nexport interface PositionedBin {\n    x: number\n    width: number\n    bin: ColorScaleBin\n}\n\ninterface NumericLabel {\n    text: string\n    fontSize: number\n    bounds: Bounds\n    priority?: boolean\n    hidden: boolean\n    raised: boolean\n    bin: ColorScaleBin\n}\n\ninterface CategoricalMark {\n    x: number\n    y: number\n    rectSize: number\n    width: number\n    label: {\n        text: string\n        bounds: Bounds\n        fontSize: number\n    }\n    bin: CategoricalBin\n}\n\ninterface MarkLine {\n    totalWidth: number\n    marks: CategoricalMark[]\n}\n\n// TODO unify properties across categorical & numeric legend.\n// This would make multiple legends per chart less convenient (only used in Map), but we shouldn't\n// be using multiple anyway – instead the numeric should also handle categorical bins too.\nexport interface HorizontalColorLegendManager {\n    fontSize?: number\n    legendX?: number\n    legendAlign?: HorizontalAlign\n    legendTitle?: string\n    categoryLegendY?: number\n    numericLegendY?: number\n    legendWidth?: number\n    legendMaxWidth?: number\n    legendHeight?: number\n    legendTickSize?: number\n    legendCursor?: \"pointer\" | \"default\"\n    categoricalLegendData?: CategoricalBin[]\n    numericLegendData?: ColorScaleBin[]\n    numericBinSize?: number\n    onLegendMouseEnter?: (d: ColorScaleBin) => void\n    onLegendMouseLeave?: () => void\n    onLegendMouseOver?: (d: ColorScaleBin) => void\n    onLegendClick?: (d: ColorScaleBin) => void\n    isStatic?: boolean\n    resolveLegendBinEmphasis?: (bin: ColorScaleBin) => Emphasis\n    legendStyleConfig?: LegendStyleConfig\n    categoricalLegendStyleConfig?: LegendStyleConfig\n    numericLegendStyleConfig?: LegendStyleConfig\n}\n\nconst DEFAULT_NUMERIC_BIN_SIZE = 10\nconst DEFAULT_NUMERIC_BIN_STROKE = \"#333\"\nconst DEFAULT_NUMERIC_BIN_STROKE_WIDTH = 0.3\nconst DEFAULT_TEXT_COLOR = \"#111\"\nconst DEFAULT_TICK_SIZE = 3\n\nconst CATEGORICAL_BIN_MIN_WIDTH = 20\nconst SPACE_BETWEEN_CATEGORICAL_BINS = 7\nconst MINIMUM_LABEL_DISTANCE = 5\n\nexport abstract class HorizontalColorLegend extends React.Component<{\n    manager: HorizontalColorLegendManager\n}> {\n    constructor(props: { manager: HorizontalColorLegendManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed protected get manager(): HorizontalColorLegendManager {\n        return this.props.manager\n    }\n\n    @computed protected get legendX(): number {\n        return this.manager.legendX ?? 0\n    }\n\n    @computed protected get categoryLegendY(): number {\n        return this.manager.categoryLegendY ?? 0\n    }\n\n    @computed protected get numericLegendY(): number {\n        return this.manager.numericLegendY ?? 0\n    }\n\n    @computed protected get legendMaxWidth(): number | undefined {\n        return this.manager.legendMaxWidth\n    }\n\n    @computed protected get legendHeight(): number {\n        return this.manager.legendHeight ?? 200\n    }\n\n    @computed protected get legendAlign(): HorizontalAlign {\n        // Assume center alignment if none specified, for backwards-compatibility\n        return this.manager.legendAlign ?? HorizontalAlign.center\n    }\n\n    @computed protected get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed protected get legendTickSize(): number {\n        return this.manager.legendTickSize ?? DEFAULT_TICK_SIZE\n    }\n\n    protected getBinState(bin: ColorScaleBin): Emphasis {\n        return this.manager.resolveLegendBinEmphasis?.(bin) ?? Emphasis.Default\n    }\n\n    abstract get height(): number\n    abstract get width(): number\n}\n\n@observer\nexport class HorizontalNumericColorLegend extends HorizontalColorLegend {\n    base = React.createRef<SVGGElement>()\n\n    constructor(props: { manager: HorizontalColorLegendManager }) {\n        super(props)\n\n        makeObservable(this)\n    }\n\n    @computed private get numericLegendData(): ColorScaleBin[] {\n        return this.manager.numericLegendData ?? []\n    }\n\n    @computed private get visibleBins(): ColorScaleBin[] {\n        return this.numericLegendData.filter((bin) => !bin.isHidden)\n    }\n\n    @computed private get numericBins(): NumericBin[] {\n        return this.visibleBins.filter(\n            (bin): bin is NumericBin => bin instanceof NumericBin\n        )\n    }\n\n    @computed private get numericBinSize(): number {\n        return this.props.manager.numericBinSize ?? DEFAULT_NUMERIC_BIN_SIZE\n    }\n\n    @computed private get tickFontSize(): number {\n        return GRAPHER_FONT_SCALE_12 * this.fontSize\n    }\n\n    @computed private get itemMargin(): number {\n        return Math.round(this.fontSize * 1.125)\n    }\n\n    @computed private get maxWidth(): number {\n        return this.manager.legendMaxWidth ?? this.manager.legendWidth ?? 200\n    }\n\n    private getTickLabelWidth(label: string): number {\n        return Bounds.forText(label, {\n            fontSize: this.tickFontSize,\n        }).width\n    }\n\n    private getCategoricalBinWidth(bin: ColorScaleBin): number {\n        return Math.max(\n            this.getTickLabelWidth(bin.text),\n            CATEGORICAL_BIN_MIN_WIDTH\n        )\n    }\n\n    @computed private get totalCategoricalWidth(): number {\n        const { visibleBins, itemMargin } = this\n        const widths = visibleBins.map((bin) =>\n            bin instanceof CategoricalBin && !bin.isHidden\n                ? this.getCategoricalBinWidth(bin) + itemMargin\n                : 0\n        )\n        return _.sum(widths)\n    }\n\n    @computed private get isAutoWidth(): boolean {\n        return (\n            this.manager.legendWidth === undefined &&\n            this.manager.legendMaxWidth !== undefined\n        )\n    }\n\n    private getNumericLabelMinWidth(bin: NumericBin): number {\n        if (bin.text) {\n            const tickLabelWidth = this.getTickLabelWidth(bin.text)\n            return tickLabelWidth + MINIMUM_LABEL_DISTANCE\n        } else {\n            const combinedLabelWidths = _.sum(\n                [bin.minText, bin.maxText].map(\n                    (text) =>\n                        // because labels are center-aligned, only half the label space is required\n                        this.getTickLabelWidth(text) / 2\n                )\n            )\n            return combinedLabelWidths + MINIMUM_LABEL_DISTANCE * 2\n        }\n    }\n\n    // Overstretched legends don't look good.\n    // If the manager provides `legendMaxWidth`, then we calculate an _ideal_ width for the legend.\n    @computed private get idealNumericWidth(): number {\n        const binCount = this.numericBins.length\n        const spaceRequirements = this.numericBins.map((bin) => ({\n            labelSpace: this.getNumericLabelMinWidth(bin),\n        }))\n        // Make sure the legend is big enough to avoid overlapping labels (including `raisedMode`)\n\n        // Try to keep the minimum close to the size of the \"No data\" bin,\n        // so they look visually balanced somewhat.\n        const minBinWidth = this.fontSize * 3.25\n        const maxBinWidth =\n            _.max(\n                spaceRequirements.map(({ labelSpace }) =>\n                    Math.max(labelSpace, minBinWidth)\n                )\n            ) ?? 0\n        return Math.round(maxBinWidth * binCount)\n    }\n\n    @computed get width(): number {\n        if (this.isAutoWidth) {\n            return Math.min(\n                this.maxWidth,\n                this.legendTitleWidth +\n                    this.totalCategoricalWidth +\n                    this.idealNumericWidth\n            )\n        } else {\n            return this.maxWidth\n        }\n    }\n\n    @computed private get availableNumericWidth(): number {\n        return this.width - this.totalCategoricalWidth - this.legendTitleWidth\n    }\n\n    // Since we calculate the width automatically in some cases (when `isAutoWidth` is true),\n    // we need to shift X to align the legend horizontally (`legendAlign`).\n    @computed private get x(): number {\n        const { width, maxWidth, legendAlign, legendX } = this\n        const widthDiff = maxWidth - width\n        if (legendAlign === HorizontalAlign.center) {\n            return legendX + widthDiff / 2\n        } else if (legendAlign === HorizontalAlign.right) {\n            return legendX + widthDiff\n        } else {\n            return legendX // left align\n        }\n    }\n\n    @computed private get positionedBins(): PositionedBin[] {\n        const {\n            availableNumericWidth,\n            visibleBins,\n            numericBins,\n            legendTitleWidth,\n            x,\n        } = this\n\n        let xOffset = x + legendTitleWidth\n        let prevBin: ColorScaleBin | undefined\n\n        return visibleBins.map((bin, index) => {\n            const isFirst = index === 0\n            let width: number = this.getCategoricalBinWidth(bin)\n            let marginLeft: number = isFirst ? 0 : this.itemMargin\n\n            if (bin instanceof NumericBin) {\n                width = availableNumericWidth / numericBins.length\n\n                // Don't add any margin between numeric bins\n                if (prevBin instanceof NumericBin) {\n                    marginLeft = 0\n                }\n            }\n\n            const x = xOffset + marginLeft\n            xOffset = x + width\n            prevBin = bin\n\n            return {\n                x,\n                width,\n                bin,\n            }\n        })\n    }\n\n    @computed private get legendTitleFontSize(): number {\n        return this.fontSize * GRAPHER_FONT_SCALE_14\n    }\n\n    @computed private get legendTitle(): TextWrap | undefined {\n        const { legendTitle } = this.manager\n        return legendTitle\n            ? new TextWrap({\n                  text: legendTitle,\n                  fontSize: this.legendTitleFontSize,\n                  fontWeight: 700,\n                  maxWidth: this.maxWidth / 3,\n                  lineHeight: 1,\n              })\n            : undefined\n    }\n\n    @computed private get legendTitleWidth(): number {\n        return this.legendTitle ? this.legendTitle.width + this.itemMargin : 0\n    }\n\n    @computed private get numericLabels(): NumericLabel[] {\n        const { numericBinSize, positionedBins, tickFontSize } = this\n\n        const makeBoundaryLabel = (\n            bin: PositionedBin,\n            minOrMax: \"min\" | \"max\",\n            text: string\n        ): NumericLabel => {\n            const labelBounds = Bounds.forText(text, { fontSize: tickFontSize })\n            const x =\n                bin.x +\n                (minOrMax === \"min\" ? 0 : bin.width) -\n                labelBounds.width / 2\n            const y = -numericBinSize - labelBounds.height - this.legendTickSize\n\n            return {\n                text: text,\n                fontSize: tickFontSize,\n                bounds: labelBounds.set({ x: x, y: y }),\n                hidden: false,\n                raised: false,\n                bin: bin.bin,\n            }\n        }\n\n        const makeRangeLabel = (bin: PositionedBin): NumericLabel => {\n            const labelBounds = Bounds.forText(bin.bin.text, {\n                fontSize: tickFontSize,\n            })\n            const x = bin.x + bin.width / 2 - labelBounds.width / 2\n            const y = -numericBinSize - labelBounds.height - this.legendTickSize\n\n            return {\n                text: bin.bin.text,\n                fontSize: tickFontSize,\n                bounds: labelBounds.set({ x: x, y: y }),\n                priority: true,\n                hidden: false,\n                raised: false,\n                bin: bin.bin,\n            }\n        }\n\n        let labels: NumericLabel[] = []\n        for (const bin of positionedBins) {\n            if (bin.bin.text) labels.push(makeRangeLabel(bin))\n            else if (bin.bin instanceof NumericBin) {\n                if (bin.bin.minText)\n                    labels.push(makeBoundaryLabel(bin, \"min\", bin.bin.minText))\n                if (bin === R.last(positionedBins) && bin.bin.maxText)\n                    labels.push(makeBoundaryLabel(bin, \"max\", bin.bin.maxText))\n            }\n        }\n\n        for (let index = 0; index < labels.length; index++) {\n            const l1 = labels[index]\n            if (l1.hidden) continue\n\n            for (let j = index + 1; j < labels.length; j++) {\n                const l2 = labels[j]\n                if (\n                    l1.bounds.right + MINIMUM_LABEL_DISTANCE >\n                        l2.bounds.centerX ||\n                    (l2.bounds.left - MINIMUM_LABEL_DISTANCE <\n                        l1.bounds.centerX &&\n                        !l2.priority)\n                )\n                    l2.hidden = true\n            }\n        }\n\n        labels = labels.filter((label) => !label.hidden)\n\n        // If labels overlap, first we try alternating raised labels\n        let raisedMode = false\n        for (let index = 1; index < labels.length; index++) {\n            const l1 = labels[index - 1],\n                l2 = labels[index]\n            if (l1.bounds.right + MINIMUM_LABEL_DISTANCE > l2.bounds.left) {\n                raisedMode = true\n                break\n            }\n        }\n\n        if (raisedMode) {\n            for (let index = 1; index < labels.length; index++) {\n                const label = labels[index]\n                if (index % 2 !== 0) {\n                    label.bounds = label.bounds.set({\n                        y: label.bounds.y - label.bounds.height - 1,\n                    })\n                    label.raised = true\n                }\n            }\n        }\n\n        return labels\n    }\n\n    @computed get height(): number {\n        return Math.abs(\n            _.min(this.numericLabels.map((label) => label.bounds.y)) ?? 0\n        )\n    }\n\n    @computed private get legendStyleConfig(): LegendStyleConfig | undefined {\n        return (\n            this.manager.numericLegendStyleConfig ??\n            this.manager.legendStyleConfig\n        )\n    }\n\n    private getTextStyleConfig(bin: ColorScaleBin): LegendTextStyle {\n        const state = this.getBinState(bin)\n        const styleConfig = this.legendStyleConfig?.text\n        const defaultStyle = styleConfig?.default\n        const currentStyle = styleConfig?.[state]\n        return { color: GRAPHER_DARK_TEXT, ...defaultStyle, ...currentStyle }\n    }\n\n    private getMarkerStyleConfig(bin: ColorScaleBin): LegendMarkerStyle {\n        const state = this.getBinState(bin)\n        const styleConfig = this.legendStyleConfig?.marker\n        const defaultStyle = styleConfig?.default\n        const current = styleConfig?.[state]\n        return {\n            fill: bin.color,\n            stroke: DEFAULT_NUMERIC_BIN_STROKE,\n            strokeWidth: DEFAULT_NUMERIC_BIN_STROKE_WIDTH,\n            ...defaultStyle,\n            ...current,\n        }\n    }\n\n    override render(): React.ReactElement {\n        const { numericLabels, numericBinSize, positionedBins, height } = this\n\n        const bottomY = this.numericLegendY + height\n\n        const textColor =\n            this.legendStyleConfig?.text?.default?.color ?? DEFAULT_TEXT_COLOR\n\n        return (\n            <g\n                ref={this.base}\n                id={makeFigmaId(\"numeric-color-legend\")}\n                className=\"numericColorLegend\"\n            >\n                <g id={makeFigmaId(\"lines\")}>\n                    {numericLabels.map((label, index) => {\n                        const style = this.getMarkerStyleConfig(label.bin)\n                        return (\n                            <line\n                                key={index}\n                                id={makeFigmaId(label.text)}\n                                x1={label.bounds.x + label.bounds.width / 2}\n                                y1={bottomY - numericBinSize}\n                                x2={label.bounds.x + label.bounds.width / 2}\n                                y2={\n                                    bottomY +\n                                    label.bounds.y +\n                                    label.bounds.height\n                                }\n                                // if we use a light color for stroke (e.g. white), we want it to stay\n                                // \"invisible\", except for raised labels, where we want *some* contrast.\n                                stroke={\n                                    label.raised && style.stroke\n                                        ? darkenColorForLine(style.stroke)\n                                        : style.stroke\n                                }\n                                strokeWidth={style.strokeWidth}\n                            />\n                        )\n                    })}\n                </g>\n                <g id={makeFigmaId(\"swatches\")}>\n                    {_.sortBy(\n                        positionedBins.map((positionedBin, index) => {\n                            const bin = positionedBin.bin\n                            const style = this.getMarkerStyleConfig(bin)\n\n                            const fill = bin.patternRef\n                                ? `url(#${bin.patternRef})`\n                                : style.fill\n\n                            return (\n                                <NumericBinRect\n                                    key={index}\n                                    x={positionedBin.x}\n                                    y={bottomY - numericBinSize}\n                                    width={positionedBin.width}\n                                    height={numericBinSize}\n                                    fill={fill}\n                                    stroke={style.stroke}\n                                    strokeWidth={style.strokeWidth}\n                                    opacity={style.opacity}\n                                    isOpenLeft={\n                                        bin instanceof NumericBin\n                                            ? bin.props.isOpenLeft\n                                            : false\n                                    }\n                                    isOpenRight={\n                                        bin instanceof NumericBin\n                                            ? bin.props.isOpenRight\n                                            : false\n                                    }\n                                    onMouseEnter={() => {\n                                        this.manager.onLegendMouseEnter?.(bin)\n                                        this.manager.onLegendMouseOver?.(bin)\n                                    }}\n                                    onMouseLeave={() =>\n                                        this.manager.onLegendMouseLeave?.()\n                                    }\n                                />\n                            )\n                        }),\n                        (rect) => rect.props[\"strokeWidth\"]\n                    )}\n                </g>\n                <g id={makeFigmaId(\"labels\")}>\n                    {numericLabels.map((label, index) => {\n                        const style = this.getTextStyleConfig(label.bin)\n                        return (\n                            <text\n                                key={index}\n                                x={label.bounds.x}\n                                y={bottomY + label.bounds.y}\n                                // we can't use dominant-baseline to do proper alignment since our svg-to-png library Sharp\n                                // doesn't support that (https://github.com/lovell/sharp/issues/1996), so we'll have to make\n                                // do with some rough positioning.\n                                dy={dyFromAlign(VerticalAlign.bottom)}\n                                fontSize={label.fontSize}\n                                style={{ fill: style.color, ...style }}\n                            >\n                                {label.text}\n                            </text>\n                        )\n                    })}\n                </g>\n                {this.legendTitle?.renderSVG(\n                    this.x,\n                    // Align legend title baseline with bottom of color bins\n                    this.numericLegendY +\n                        height -\n                        this.legendTitle.height +\n                        this.legendTitleFontSize * 0.2,\n                    { textProps: { fill: textColor } }\n                )}\n            </g>\n        )\n    }\n}\n\ninterface NumericBinRectProps extends React.SVGAttributes<SVGElement> {\n    x: number\n    y: number\n    width: number\n    height: number\n    isOpenLeft?: boolean\n    isOpenRight?: boolean\n}\n\n/** The width of the arrowhead for open-ended bins (left or right) */\nconst ARROW_SIZE = 5\n\nconst NumericBinRect = (props: NumericBinRectProps) => {\n    const { isOpenLeft, isOpenRight, x, y, width, height, ...restProps } = props\n    if (isOpenRight) {\n        const a = ARROW_SIZE\n        const w = width - a\n        const d = removeAllWhitespace(`\n            M ${x}, ${y}\n            l ${w}, 0\n            l ${a}, ${height / 2}\n            l ${-a}, ${height / 2}\n            l ${-w}, 0\n            z\n        `)\n        return <path d={d} {...restProps} />\n    } else if (isOpenLeft) {\n        const a = ARROW_SIZE\n        const w = width - a\n        const d = removeAllWhitespace(`\n            M ${x + a}, ${y}\n            l ${w}, 0\n            l 0, ${height}\n            l ${-w}, 0\n            l ${-a}, ${-height / 2}\n            z\n        `)\n        return <path d={d} {...restProps} />\n    } else {\n        return <rect x={x} y={y} width={width} height={height} {...restProps} />\n    }\n}\n\n@observer\nexport class HorizontalCategoricalColorLegend extends HorizontalColorLegend {\n    private rectPadding = 5\n    private markPadding = 5\n\n    constructor(props: { manager: HorizontalColorLegendManager }) {\n        super(props)\n\n        makeObservable(this)\n    }\n\n    @computed get width(): number {\n        return this.manager.legendWidth ?? this.manager.legendMaxWidth ?? 200\n    }\n\n    @computed private get categoricalLegendData(): CategoricalBin[] {\n        return this.manager.categoricalLegendData ?? []\n    }\n\n    @computed private get visibleCategoricalBins(): CategoricalBin[] {\n        return this.categoricalLegendData.filter((bin) => !bin.isHidden)\n    }\n\n    @computed private get markLines(): MarkLine[] {\n        const fontSize = this.fontSize * GRAPHER_FONT_SCALE_12_8\n        const rectSize = this.fontSize * 0.75\n\n        const lines: MarkLine[] = []\n        let marks: CategoricalMark[] = []\n        let xOffset = 0\n        let yOffset = 0\n        this.visibleCategoricalBins.forEach((bin) => {\n            const labelBounds = Bounds.forText(bin.text, { fontSize })\n            const markWidth =\n                rectSize +\n                this.rectPadding +\n                labelBounds.width +\n                this.markPadding\n\n            if (xOffset + markWidth > this.width && marks.length > 0) {\n                lines.push({\n                    totalWidth: xOffset - this.markPadding,\n                    marks: marks,\n                })\n                marks = []\n                xOffset = 0\n                yOffset += rectSize + this.rectPadding\n            }\n\n            const markX = xOffset\n            const markY = yOffset\n\n            const label = {\n                text: bin.text,\n                bounds: labelBounds.set({\n                    x: markX + rectSize + this.rectPadding,\n                    y: markY + rectSize / 2,\n                }),\n                fontSize,\n            }\n\n            marks.push({\n                x: markX,\n                y: markY,\n                width: markWidth,\n                rectSize,\n                label,\n                bin,\n            })\n\n            xOffset += markWidth + SPACE_BETWEEN_CATEGORICAL_BINS\n        })\n\n        if (marks.length > 0)\n            lines.push({ totalWidth: xOffset - this.markPadding, marks: marks })\n\n        return lines\n    }\n\n    @computed private get contentWidth(): number {\n        return _.max(this.markLines.map((l) => l.totalWidth)) as number\n    }\n\n    @computed private get containerWidth(): number {\n        return this.width ?? this.contentWidth\n    }\n\n    @computed private get marks(): CategoricalMark[] {\n        const lines = this.markLines\n        const align = this.legendAlign\n        const width = this.containerWidth\n\n        // Center each line\n        lines.forEach((line) => {\n            // TODO abstract this\n            const xShift =\n                align === HorizontalAlign.center\n                    ? (width - line.totalWidth) / 2\n                    : align === HorizontalAlign.right\n                      ? width - line.totalWidth\n                      : 0\n            line.marks.forEach((mark) => {\n                mark.x += xShift\n                mark.label.bounds = mark.label.bounds.set({\n                    x: mark.label.bounds.x + xShift,\n                })\n            })\n        })\n\n        return lines.flatMap((l) => l.marks)\n    }\n\n    @computed get height(): number {\n        return _.max(this.marks.map((mark) => mark.y + mark.rectSize)) ?? 0\n    }\n\n    @computed private get legendStyleConfig(): LegendStyleConfig | undefined {\n        return (\n            this.manager.categoricalLegendStyleConfig ??\n            this.manager.legendStyleConfig\n        )\n    }\n\n    private getTextStyleConfig(bin: ColorScaleBin): LegendTextStyle {\n        const state = this.getBinState(bin)\n        const styleConfig = this.legendStyleConfig?.text\n        const defaultStyle = styleConfig?.default\n        const currentStyle = styleConfig?.[state]\n        return { color: GRAPHER_DARK_TEXT, ...defaultStyle, ...currentStyle }\n    }\n\n    protected getMarkerStyleConfig(bin: ColorScaleBin): LegendMarkerStyle {\n        const state = this.getBinState(bin)\n        const styleConfig = this.legendStyleConfig?.marker\n        const defaultStyle = styleConfig?.default\n        const currentStyle = styleConfig?.[state]\n        return {\n            fill: bin.color,\n            strokeWidth: 0.4,\n            ...defaultStyle,\n            ...currentStyle,\n        }\n    }\n\n    renderLabels(): React.ReactElement {\n        const { marks } = this\n\n        return (\n            <g id={makeFigmaId(\"labels\")}>\n                {marks.map((mark, index) => {\n                    const style = this.getTextStyleConfig(mark.bin)\n\n                    return (\n                        <text\n                            key={`${mark.label}-${index}`}\n                            x={this.legendX + mark.label.bounds.x}\n                            y={this.categoryLegendY + mark.label.bounds.y}\n                            // we can't use dominant-baseline to do proper alignment since our svg-to-png library Sharp\n                            // doesn't support that (https://github.com/lovell/sharp/issues/1996), so we'll have to make\n                            // do with some rough positioning.\n                            dy={dyFromAlign(VerticalAlign.middle)}\n                            fontSize={mark.label.fontSize}\n                            fontWeight={style.fontWeight}\n                            style={{ fill: style.color, ...style }}\n                        >\n                            {mark.label.text}\n                        </text>\n                    )\n                })}\n            </g>\n        )\n    }\n\n    renderSwatches(): React.ReactElement {\n        const { marks } = this\n\n        return (\n            <g id={makeFigmaId(\"swatches\")}>\n                {marks.map((mark, index) => {\n                    const style = this.getMarkerStyleConfig(mark.bin)\n\n                    const fill = mark.bin.patternRef\n                        ? `url(#${mark.bin.patternRef})`\n                        : style.fill\n\n                    return (\n                        <rect\n                            id={makeFigmaId(mark.label.text)}\n                            key={`${mark.label}-${index}`}\n                            x={this.legendX + mark.x}\n                            y={this.categoryLegendY + mark.y}\n                            width={mark.rectSize}\n                            height={mark.rectSize}\n                            style={{ ...style, fill }}\n                        />\n                    )\n                })}\n            </g>\n        )\n    }\n\n    renderInteractiveElements(): React.ReactElement {\n        const { manager, marks } = this\n\n        return (\n            <g>\n                {marks.map((mark, index) => {\n                    const mouseEnter = (): void =>\n                        manager.onLegendMouseEnter\n                            ? manager.onLegendMouseEnter(mark.bin)\n                            : undefined\n                    const mouseOver = (): void =>\n                        manager.onLegendMouseOver\n                            ? manager.onLegendMouseOver(mark.bin)\n                            : undefined\n                    const mouseLeave = (): void =>\n                        manager.onLegendMouseLeave\n                            ? manager.onLegendMouseLeave()\n                            : undefined\n                    const click = manager.onLegendClick\n                        ? (): void => manager.onLegendClick?.(mark.bin)\n                        : undefined\n\n                    return (\n                        <g\n                            key={`${mark.label}-${index}`}\n                            onMouseEnter={mouseEnter}\n                            onMouseOver={mouseOver}\n                            onMouseLeave={mouseLeave}\n                            onClick={click}\n                            style={{ cursor: manager.legendCursor }}\n                        >\n                            {/* for hover interaction */}\n                            <rect\n                                x={this.legendX + mark.x}\n                                y={\n                                    this.categoryLegendY +\n                                    mark.y -\n                                    this.rectPadding / 2\n                                }\n                                height={mark.rectSize + this.rectPadding}\n                                width={\n                                    mark.width + SPACE_BETWEEN_CATEGORICAL_BINS\n                                }\n                                fill=\"#fff\"\n                                opacity={0}\n                            />\n                        </g>\n                    )\n                })}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <g\n                id={makeFigmaId(\"categorical-color-legend\")}\n                className=\"categoricalColorLegend\"\n            >\n                {this.renderSwatches()}\n                {this.renderLabels()}\n                {!this.manager.isStatic && this.renderInteractiveElements()}\n            </g>\n        )\n    }\n}\n","import * as React from \"react\"\nimport * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\n\ninterface MultiColorPolylinePoint {\n    x: number\n    y: number\n    color: string\n}\n\ninterface Point {\n    x: number\n    y: number\n}\n\ninterface Segment {\n    points: Point[]\n    color: string\n}\n\nfunction getMidpoint(a: Point, b: Point): Point {\n    return {\n        x: (a.x + b.x) / 2,\n        y: (a.y + b.y) / 2,\n    }\n}\n\nfunction toPoint(point: MultiColorPolylinePoint): Point {\n    return {\n        x: point.x,\n        y: point.y,\n    }\n}\n\nexport function getSegmentsFromPoints(\n    points: MultiColorPolylinePoint[]\n): Segment[] {\n    const segments: Segment[] = []\n    points.forEach((currentPoint) => {\n        const currentSegment = R.last(segments)\n        if (currentSegment === undefined) {\n            segments.push({\n                points: [toPoint(currentPoint)],\n                color: currentPoint.color,\n            })\n        } else if (currentSegment.color === currentPoint.color) {\n            currentSegment.points.push(toPoint(currentPoint))\n        } else {\n            const midPoint = getMidpoint(\n                R.last(currentSegment.points)!,\n                currentPoint\n            )\n            currentSegment.points.push(midPoint)\n            segments.push({\n                points: [midPoint, toPoint(currentPoint)],\n                color: currentPoint.color,\n            })\n        }\n    })\n    return segments\n}\n\nfunction toSvgPoints(points: Point[]): string {\n    // TODO round to 1 decimal place to decrease SVG size?\n    return points.map((p) => `${p.x.toFixed(2)},${p.y.toFixed(2)}`).join(\" \")\n}\n\ntype MultiColorPolylineProps = Omit<\n    React.SVGProps<SVGPolylineElement>,\n    \"fill\" | \"stroke\" | \"points\" | \"strokeLinecap\"\n> & {\n    points: MultiColorPolylinePoint[]\n}\n\n// The current approach constructs multiple polylines and joins them together at midpoints.\n// Joining at midpoints allows clean miter joints, since we're joining two lines at an identical\n// angle.\n//\n// The benefit of this approach is that it generalises to work in most cases. Where it breaks:\n// - When a color transition happening at a midpoint is misleading.\n// - stroke-dasharray isn't handled well because the pattern restarts on every new line. This could\n//   be improved by specifying a `stroke-dashoffset` automatically.\n//   We can approximate the line length pretty well without rendering:\n//   https://observablehq.com/@danielgavrilov/does-gettotallength-of-polyline-path-equal-the-sum-of-coord\n//\n// Alternative approaches considered:\n// - Single line, color by gradient: this works if the line is monotonically increasing in one axis\n//   (X or Y), but otherwise doesn't (a spiral for example doesn't work).\n// - Compute meter joints ourselves (https://bl.ocks.org/mbostock/4163057): this results in the most\n//   accurate output, but is most complex & slow.\n//\n@observer\nexport class MultiColorPolyline extends React.Component<MultiColorPolylineProps> {\n    constructor(props: MultiColorPolylineProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get segments(): Segment[] {\n        return getSegmentsFromPoints(this.props.points)\n    }\n\n    override render(): React.ReactElement {\n        const { markerStart, markerMid, markerEnd, ...polylineProps } =\n            this.props\n        return (\n            <g id={this.props.id}>\n                {this.segments.map((group, index) => (\n                    <polyline\n                        {...polylineProps}\n                        key={index}\n                        points={toSvgPoints(group.points)}\n                        stroke={group.color}\n                        fill=\"none\"\n                        strokeLinecap=\"butt\" // `butt` allows us to have clean miter joints\n                        markerStart={index === 0 ? markerStart : undefined}\n                        markerMid={markerMid}\n                        markerEnd={\n                            index === this.segments.length - 1\n                                ? markerEnd\n                                : undefined\n                        }\n                    />\n                ))}\n            </g>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport {\n    Bounds,\n    PointVector,\n    makeFigmaId,\n    pointsToPath,\n} from \"@ourworldindata/utils\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    DEFAULT_LINE_COLOR,\n    DEFAULT_LINE_OUTLINE_WIDTH,\n    DEFAULT_MARKER_RADIUS,\n    DEFAULT_STROKE_WIDTH,\n    LINE_STYLE,\n    PlacedLineChartSeries,\n    RenderLineChartSeries,\n} from \"./LineChartConstants\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { getSeriesKey } from \"../chart/ChartUtils\"\nimport { GRAPHER_BACKGROUND_DEFAULT } from \"../color/ColorConstants\"\nimport { MultiColorPolyline } from \"../scatterCharts/MultiColorPolyline\"\nimport { DualAxis } from \"../axis/Axis.js\"\n\nexport interface LinesProps {\n    dualAxis: DualAxis\n    series: RenderLineChartSeries[]\n    hidePoints?: boolean\n    lineStrokeWidth?: number\n    lineOutlineWidth?: number\n    markerRadius?: number\n    isStatic?: boolean\n    multiColor?: boolean\n    backgroundColor?: string\n}\n\n@observer\nexport class Lines extends React.Component<LinesProps> {\n    constructor(props: LinesProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get bounds(): Bounds {\n        const { horizontalAxis, verticalAxis } = this.props.dualAxis\n        return Bounds.fromCorners(\n            new PointVector(horizontalAxis.range[0], verticalAxis.range[0]),\n            new PointVector(horizontalAxis.range[1], verticalAxis.range[1])\n        )\n    }\n\n    @computed private get markerRadius(): number {\n        return this.props.markerRadius ?? DEFAULT_MARKER_RADIUS\n    }\n\n    @computed private get baseStrokeWidth(): number {\n        return this.props.lineStrokeWidth ?? DEFAULT_STROKE_WIDTH\n    }\n\n    @computed private get outlineWidth(): number {\n        return this.props.lineOutlineWidth ?? DEFAULT_LINE_OUTLINE_WIDTH\n    }\n\n    @computed private get outlineColor(): string {\n        return this.props.backgroundColor ?? GRAPHER_BACKGROUND_DEFAULT\n    }\n\n    // Don't display point markers if there are very many of them for performance reasons\n    // Note that we're using circle elements instead of marker-mid because marker performance in Safari 10 is very poor for some reason\n    @computed private get hasMarkers(): boolean {\n        if (this.props.hidePoints) return false\n        const totalPoints = _.sum(\n            this.props.series\n                .filter((series) => this.seriesHasMarkers(series))\n                .map((series) => series.placedPoints.length)\n        )\n        return totalPoints < 500\n    }\n\n    @computed private get hasMarkersOnlySeries(): boolean {\n        return this.props.series.some((series) => series.plotMarkersOnly)\n    }\n\n    private seriesHasMarkers(series: RenderLineChartSeries): boolean {\n        // Don't show markers for projected data\n        if (series.isProjection) return false\n\n        // If the series has a line, but there is another one that hasn't, then\n        // don't show markers since the plotted line is likely a smoothed version\n        if (this.hasMarkersOnlySeries && !series.plotMarkersOnly) return false\n\n        return series.emphasis !== Emphasis.Muted\n    }\n\n    private renderLine(\n        series: RenderLineChartSeries\n    ): React.ReactElement | undefined {\n        if (series.plotMarkersOnly) return\n        const { isProjection } = series\n\n        const style = LINE_STYLE[series.emphasis]\n\n        const color = series.placedPoints[0]?.color ?? DEFAULT_LINE_COLOR\n\n        const strokeWidth = style.strokeWidthFactor * this.baseStrokeWidth\n        const strokeOpacity = style.opacity\n        const strokeDasharray = isProjection ? \"2,3\" : undefined\n\n        const showOutline = style.showOutline\n        const outlineColor = this.outlineColor\n        const outlineWidth = strokeWidth + this.outlineWidth * 2\n\n        const outline = (\n            <LinePath\n                id={makeFigmaId(\"outline\", series.displayName)}\n                placedPoints={series.placedPoints}\n                stroke={outlineColor}\n                strokeWidth={outlineWidth.toFixed(1)}\n            />\n        )\n\n        const line = this.props.multiColor ? (\n            <MultiColorPolyline\n                id={makeFigmaId(\"line\", series.seriesName)}\n                points={series.placedPoints}\n                strokeLinejoin=\"round\"\n                strokeWidth={strokeWidth.toFixed(1)}\n                strokeDasharray={strokeDasharray}\n                strokeOpacity={strokeOpacity}\n            />\n        ) : (\n            <LinePath\n                id={makeFigmaId(\"line\", series.seriesName)}\n                placedPoints={series.placedPoints}\n                stroke={color}\n                strokeWidth={strokeWidth.toFixed(1)}\n                strokeOpacity={strokeOpacity}\n                strokeDasharray={strokeDasharray}\n            />\n        )\n\n        return (\n            <>\n                {showOutline && outline}\n                {line}\n            </>\n        )\n    }\n\n    private renderLineMarkers(\n        series: RenderLineChartSeries\n    ): React.ReactElement | undefined {\n        const { horizontalAxis } = this.props.dualAxis\n\n        const forceMarkers =\n            // If the series only contains one point, then we will always want to\n            // show a marker/circle because we can't draw a line.\n            series.placedPoints.length === 1 ||\n            // If no line is plotted, we'll always want to show markers\n            series.plotMarkersOnly\n\n        // check if we should hide markers on the chart and series level\n        const hideMarkers = !this.hasMarkers || !this.seriesHasMarkers(series)\n\n        if (hideMarkers && !forceMarkers) return\n\n        const opacity = LINE_STYLE[series.emphasis].opacity\n\n        const outlineColor = series.plotMarkersOnly\n            ? this.outlineColor\n            : undefined\n        const outlineWidth = series.plotMarkersOnly\n            ? this.outlineWidth\n            : undefined\n\n        return (\n            <g id={makeFigmaId(\"datapoints\", series.displayName)}>\n                {series.placedPoints.map((value, index) => (\n                    <circle\n                        id={makeFigmaId(horizontalAxis.formatTick(value.time))}\n                        key={index}\n                        cx={value.x}\n                        cy={value.y}\n                        r={this.markerRadius}\n                        fill={value.color}\n                        stroke={outlineColor}\n                        strokeWidth={outlineWidth}\n                        opacity={opacity}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    private renderLines(): React.ReactElement {\n        return (\n            <>\n                {this.props.series.map((series, index) => (\n                    <React.Fragment key={getSeriesKey(series, index)}>\n                        {this.renderLine(series)}\n                        {this.renderLineMarkers(series)}\n                    </React.Fragment>\n                ))}\n            </>\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return <g id={makeFigmaId(\"lines\")}>{this.renderLines()}</g>\n    }\n\n    private renderInteractive(): React.ReactElement {\n        const { bounds } = this\n        return (\n            <g className=\"Lines\">\n                <rect\n                    x={Math.round(bounds.x)}\n                    y={Math.round(bounds.y)}\n                    width={Math.round(bounds.width)}\n                    height={Math.round(bounds.height)}\n                    fill=\"rgba(255,255,255,0)\"\n                    opacity={0}\n                />\n                {this.renderLines()}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return this.props.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n\ninterface LinePathProps extends React.SVGProps<SVGPathElement> {\n    placedPoints: PlacedLineChartSeries[\"placedPoints\"]\n}\n\nfunction LinePath(props: LinePathProps): React.ReactElement {\n    const { placedPoints, ...pathProps } = props\n    return (\n        <path\n            fill=\"none\"\n            strokeLinecap=\"butt\"\n            strokeLinejoin=\"round\"\n            stroke={DEFAULT_LINE_COLOR}\n            {...pathProps}\n            d={pointsToPath(placedPoints)}\n        />\n    )\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport * as R from \"remeda\"\nimport {\n    guid,\n    getRelativeMouse,\n    exposeInstanceOnWindow,\n    excludeUndefined,\n    isMobile,\n    Bounds,\n    HorizontalAlign,\n} from \"@ourworldindata/utils\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { select, type Selection, type BaseType } from \"d3-selection\"\nimport { easeLinear } from \"d3-ease\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { VerticalLabels } from \"../verticalLabels/VerticalLabels\"\nimport { VerticalLabelsState } from \"../verticalLabels/VerticalLabelsState\"\nimport { TooltipState } from \"../tooltip/Tooltip\"\nimport { LineChartTooltip } from \"./LineChartTooltip\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport { SeriesName, VerticalAlign, Time } from \"@ourworldindata/types\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_OPACITY_MUTED,\n} from \"../core/GrapherConstants\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport {\n    LineChartSeries,\n    LineChartManager,\n    LinePoint,\n    PlacedLineChartSeries,\n    RenderLineChartSeries,\n    CATEGORICAL_LEGEND_STYLE,\n    NUMERIC_LEGEND_STYLE,\n    LEGEND_PADDING,\n    VARIABLE_COLOR_STROKE_WIDTH,\n    DEFAULT_STROKE_WIDTH,\n    VARIABLE_COLOR_LINE_OUTLINE_WIDTH,\n    DEFAULT_LINE_OUTLINE_WIDTH,\n    DISCONNECTED_DOTS_MARKER_RADIUS,\n    VARIABLE_COLOR_MARKER_RADIUS,\n    STATIC_SMALL_MARKER_RADIUS,\n    DEFAULT_MARKER_RADIUS,\n    LINE_CHART_CLASS_NAME,\n} from \"./LineChartConstants\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport {\n    ClipPath,\n    getHoverStateForSeries,\n    getSeriesKey,\n    isTargetOutsideElement,\n    makeClipPath,\n} from \"../chart/ChartUtils\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { ColorScale } from \"../color/ColorScale\"\nimport { GRAPHER_BACKGROUND_DEFAULT } from \"../color/ColorConstants\"\nimport { darkenColorForLine } from \"../color/ColorUtils\"\nimport {\n    HorizontalColorLegendManager,\n    HorizontalNumericColorLegend,\n} from \"../legend/HorizontalColorLegends\"\nimport {\n    getAnnotationsForSeries,\n    getYAxisConfigDefaults,\n    toPlacedLineChartSeries,\n    toRenderLineChartSeries,\n} from \"./LineChartHelpers\"\nimport { LabelSeries } from \"../verticalLabels/VerticalLabelsTypes\"\nimport { Lines } from \"./Lines\"\nimport { LineChartState } from \"./LineChartState.js\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { resolveEmphasis, Emphasis } from \"../interaction/Emphasis\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\n\nexport type LineChartProps = ChartComponentProps<LineChartState>\n\n@observer\nexport class LineChart\n    extends React.Component<LineChartProps>\n    implements ChartInterface, HorizontalColorLegendManager, AxisManager\n{\n    private base = React.createRef<SVGGElement>()\n\n    private tooltipState = new TooltipState<{ time: Time }>({\n        fade: \"immediate\",\n    })\n\n    private hoveredLabelSeriesName: SeriesName | undefined = undefined\n    private hoverTimer: number | undefined = undefined\n\n    constructor(props: LineChartProps) {\n        super(props)\n\n        makeObservable<LineChart, \"tooltipState\" | \"hoveredLabelSeriesName\">(\n            this,\n            { tooltipState: observable, hoveredLabelSeriesName: observable }\n        )\n    }\n\n    @computed get chartState(): LineChartState {\n        return this.props.chartState\n    }\n\n    @computed get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed get detailsOrderedByReference(): string[] {\n        return this.manager.detailsOrderedByReference ?? []\n    }\n\n    @action.bound private dismissTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onCursorLeave(): void {\n        if (!this.manager.shouldPinTooltipToBottom) {\n            this.dismissTooltip()\n        }\n        this.debouncedClearVerticalLabelHover()\n    }\n\n    @computed private get allValues(): LinePoint[] {\n        return this.placedSeries.flatMap((series) => series.points)\n    }\n\n    @action.bound private onCursorMove(\n        ev: React.MouseEvent | React.TouchEvent\n    ): void {\n        const ref = this.base.current,\n            parentRef = this.manager.base?.current\n\n        // the tooltip's origin needs to be in the parent's coordinates\n        if (parentRef) {\n            this.tooltipState.position = getRelativeMouse(parentRef, ev)\n        }\n\n        if (!ref) return\n\n        const mouse = getRelativeMouse(ref, ev)\n        const boxPadding = isMobile() ? 44 : 25\n\n        // expand the box width, so it's easier to see the tooltip for the first & last timepoints\n        const boundedBox = this.dualAxis.innerBounds.expand({\n            left: boxPadding,\n            right: boxPadding,\n        })\n\n        let hoverTime\n        if (boundedBox.contains(mouse)) {\n            const invertedX = this.dualAxis.horizontalAxis.invert(mouse.x)\n\n            const closestValue = _.minBy(this.allValues, (point) =>\n                Math.abs(invertedX - point.x)\n            )\n            hoverTime = closestValue?.x\n        }\n\n        // be sure all lines are un-dimmed if the cursor is above the graph itself\n        if (this.dualAxis.innerBounds.contains(mouse)) {\n            this.clearVerticalLabelHover()\n        }\n\n        this.tooltipState.target =\n            hoverTime === undefined ? null : { time: hoverTime }\n    }\n\n    @computed private get manager(): LineChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get boundsWithoutColorLegend(): Bounds {\n        return this.bounds.padTop(\n            this.hasColorLegend ? this.legendHeight + LEGEND_PADDING : 0\n        )\n    }\n\n    @computed private get maxVerticalLabelsWidth(): number {\n        return this.bounds.width / 3\n    }\n\n    @computed private get lineStrokeWidth(): number {\n        if (this.manager.lineStrokeWidth) return this.manager.lineStrokeWidth\n        const factor = this.manager.isStaticAndSmall ? 2 : 1\n        return this.hasColorScale\n            ? factor * VARIABLE_COLOR_STROKE_WIDTH\n            : factor * DEFAULT_STROKE_WIDTH\n    }\n\n    @computed private get lineOutlineWidth(): number {\n        return this.hasColorScale\n            ? VARIABLE_COLOR_LINE_OUTLINE_WIDTH\n            : DEFAULT_LINE_OUTLINE_WIDTH\n    }\n\n    @computed private get markerRadius(): number {\n        if (this.hasMarkersOnlySeries) return DISCONNECTED_DOTS_MARKER_RADIUS\n        if (this.hasColorScale) return VARIABLE_COLOR_MARKER_RADIUS\n        if (this.manager.isStaticAndSmall) return STATIC_SMALL_MARKER_RADIUS\n        return DEFAULT_MARKER_RADIUS\n    }\n\n    @computed get activeTimes(): Time[] {\n        const { highlightedTimesInLineChart = [] } = this.manager\n        return _.uniq(\n            this.tooltipState.target?.time\n                ? [\n                      this.tooltipState.target.time,\n                      ...highlightedTimesInLineChart,\n                  ]\n                : highlightedTimesInLineChart\n        )\n    }\n\n    @computed private get activeXVerticalLines(): React.ReactElement | null {\n        const { activeTimes, dualAxis } = this\n        const { horizontalAxis, verticalAxis } = dualAxis\n\n        if (!activeTimes) return null\n\n        return (\n            <>\n                {activeTimes.map((time) => (\n                    <g className=\"hoverIndicator\" key={time}>\n                        <line\n                            x1={horizontalAxis.place(time)}\n                            y1={verticalAxis.range[0]}\n                            x2={horizontalAxis.place(time)}\n                            y2={verticalAxis.range[1]}\n                            stroke=\"rgba(180,180,180,.4)\"\n                        />\n                        {this.renderSeries.map((series, index) => {\n                            const point = series.points.find(\n                                (point) => point.x === time\n                            )\n                            if (!point || series.hover.background) return null\n\n                            const valueColor = this.hasColorScale\n                                ? darkenColorForLine(\n                                      this.chartState.getColorScaleColor(\n                                          point.colorValue\n                                      )\n                                  )\n                                : series.color\n                            const opacity =\n                                series.emphasis === Emphasis.Muted\n                                    ? GRAPHER_OPACITY_MUTED\n                                    : 1\n\n                            return (\n                                <circle\n                                    key={getSeriesKey(series, index)}\n                                    cx={horizontalAxis.place(point.x)}\n                                    cy={verticalAxis.place(point.y)}\n                                    r={this.lineStrokeWidth / 2 + 3.5}\n                                    fill={valueColor}\n                                    fillOpacity={opacity}\n                                    stroke={\n                                        this.manager.backgroundColor ??\n                                        GRAPHER_BACKGROUND_DEFAULT\n                                    }\n                                    strokeWidth={0.5}\n                                />\n                            )\n                        })}\n                    </g>\n                ))}\n            </>\n        )\n    }\n\n    @computed private get tooltipId(): number {\n        return this.renderUid\n    }\n\n    @computed private get isTooltipActive(): boolean {\n        return this.manager.tooltip?.get()?.id === this.tooltipId\n    }\n\n    @action.bound private onVerticalLabelMouseEnter(\n        seriesName: SeriesName\n    ): void {\n        this.chartState.focusArray.clear()\n        clearTimeout(this.hoverTimer)\n        this.hoveredLabelSeriesName = seriesName\n    }\n\n    @action.bound private clearVerticalLabelHover(): void {\n        this.hoveredLabelSeriesName = undefined\n    }\n\n    @action.bound private debouncedClearVerticalLabelHover(): void {\n        clearTimeout(this.hoverTimer)\n\n        // Wait before clearing selection in case the mouse is moving\n        // quickly over neighboring labels\n        this.hoverTimer = window.setTimeout(() => {\n            this.clearVerticalLabelHover()\n        }, 200)\n    }\n\n    @action.bound private onVerticalLabelMouseLeave(): void {\n        this.debouncedClearVerticalLabelHover()\n    }\n\n    @computed private get hoveredSeriesNames(): string[] {\n        const { externalLegendHoverBin } = this.manager\n        const hoveredSeriesNames = excludeUndefined([\n            this.hoveredLabelSeriesName,\n        ])\n        if (externalLegendHoverBin) {\n            hoveredSeriesNames.push(\n                ...this.series\n                    .map((s) => s.seriesName)\n                    .filter((name) => externalLegendHoverBin.contains(name))\n            )\n        }\n        return hoveredSeriesNames\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            this.hoveredSeriesNames.length > 0 ||\n            // if the external legend is hovered, we want to mute\n            // all non-hovered series even if the chart doesn't plot\n            // the currently hovered series\n            (!!this.manager.externalLegendHoverBin && !this.hasColorScale)\n        )\n    }\n\n    @computed private get hasTimeHighlights(): boolean {\n        const { highlightedTimesInLineChart = [] } = this.manager\n        return highlightedTimesInLineChart.length > 0\n    }\n\n    @action.bound private onDocumentClick(e: MouseEvent): void {\n        // only dismiss the tooltip if the click is outside of the chart area\n        // and outside of the chart areas of neighbouring facets\n        const chartContainer = this.manager.base?.current\n        if (!chartContainer) return\n        const chartAreas = chartContainer.getElementsByClassName(\n            LINE_CHART_CLASS_NAME\n        )\n        const isTargetOutsideChartAreas = Array.from(chartAreas).every(\n            (chartArea) => isTargetOutsideElement(e.target!, chartArea)\n        )\n        if (isTargetOutsideChartAreas) {\n            this.dismissTooltip()\n        }\n    }\n\n    private animSelection?: Selection<\n        BaseType,\n        unknown,\n        SVGGElement | null,\n        unknown\n    >\n    override componentDidMount(): void {\n        if (!this.manager.disableIntroAnimation) {\n            this.runFancyIntroAnimation()\n        }\n        exposeInstanceOnWindow(this)\n        document.addEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n    }\n\n    override componentWillUnmount(): void {\n        if (this.animSelection) this.animSelection.interrupt()\n        document.removeEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n    }\n\n    @computed private get renderUid(): number {\n        return guid()\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get fontWeight(): number {\n        return this.hasColorScale ? 700 : 400\n    }\n\n    @computed private get hidePoints(): boolean {\n        return !!this.manager.hidePoints\n    }\n\n    @computed private get verticalLabelsX(): number {\n        return this.bounds.right - this.verticalLabelsWidth\n    }\n\n    @computed private get verticalLabelsYRange(): [number, number] {\n        return [\n            this.boundsWithoutColorLegend.top,\n            this.boundsWithoutColorLegend.bottom,\n        ]\n    }\n\n    @computed private get clipPathBounds(): Bounds {\n        const { dualAxis, boundsWithoutColorLegend } = this\n        return boundsWithoutColorLegend\n            .set({ x: dualAxis.innerBounds.x })\n            .expand(10)\n    }\n\n    @computed private get clipPath(): ClipPath {\n        return makeClipPath({\n            renderUid: this.renderUid,\n            box: this.clipPathBounds,\n        })\n    }\n\n    private runFancyIntroAnimation(): void {\n        this.animSelection = select(this.base.current)\n            .selectAll(\"clipPath > rect\")\n            .attr(\"width\", 0)\n        this.animSelection\n            .transition()\n            .duration(800)\n            .ease(easeLinear)\n            .attr(\"width\", this.clipPathBounds.width)\n            .on(\"end\", () => this.forceUpdate()) // Important in case bounds changes during transition\n    }\n\n    @computed private get verticalLabelsState(): VerticalLabelsState {\n        return new VerticalLabelsState(this.verticalLabelsSeries, {\n            yAxis: () => this.yAxis,\n            yRange: () => this.verticalLabelsYRange,\n            maxWidth: this.maxVerticalLabelsWidth,\n            fontSize: this.fontSize,\n            fontWeight: this.fontWeight,\n            verticalAlign: VerticalAlign.top,\n            showRegionTooltip: !this.isStatic,\n        })\n    }\n\n    @computed private get verticalLabelsWidth(): number {\n        if (!this.manager.showSeriesLabels) return 0\n        return this.verticalLabelsState.stableWidth\n    }\n\n    private renderDualAxis(): React.ReactElement {\n        const { manager, dualAxis } = this\n\n        return (\n            <DualAxisComponent\n                dualAxis={dualAxis}\n                showTickMarks={true}\n                detailsMarker={manager.detailsMarkerInSvg}\n                backgroundColor={manager.backgroundColor}\n            />\n        )\n    }\n\n    private renderColorLegend(): React.ReactElement | null {\n        if (!this.hasColorLegend) return null\n        return <HorizontalNumericColorLegend manager={this} />\n    }\n\n    /**\n     * Render the lines themselves and their labels\n     */\n    private renderChartElements(): React.ReactElement {\n        const { manager } = this\n        return (\n            <>\n                {manager.showSeriesLabels && (\n                    <VerticalLabels\n                        state={this.verticalLabelsState}\n                        x={this.verticalLabelsX}\n                        onMouseEnter={this.onVerticalLabelMouseEnter}\n                        onMouseLeave={this.onVerticalLabelMouseLeave}\n                        interactive={!this.isStatic}\n                    />\n                )}\n                <Lines\n                    dualAxis={this.dualAxis}\n                    series={this.renderSeries}\n                    multiColor={this.hasColorScale}\n                    hidePoints={this.hidePoints}\n                    lineStrokeWidth={this.lineStrokeWidth}\n                    lineOutlineWidth={this.lineOutlineWidth}\n                    backgroundColor={this.manager.backgroundColor}\n                    markerRadius={this.markerRadius}\n                    isStatic={manager.isStatic}\n                />\n            </>\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderColorLegend()}\n                {this.renderDualAxis()}\n                {this.renderChartElements()}\n            </>\n        )\n    }\n\n    private renderInteractive(): React.ReactElement {\n        return (\n            <g\n                ref={this.base}\n                className={LINE_CHART_CLASS_NAME}\n                onMouseLeave={this.onCursorLeave}\n                onTouchEnd={this.onCursorLeave}\n                onTouchCancel={this.onCursorLeave}\n                onMouseMove={this.onCursorMove}\n                onTouchStart={this.onCursorMove}\n                onTouchMove={this.onCursorMove}\n            >\n                {/* The tiny bit of extra space in the clippath is to ensure circles\n                    centered on the very edge are still fully visible */}\n                {this.clipPath.element}\n                <rect {...this.bounds.toProps()} fillOpacity=\"0\">\n                    {/* This <rect> ensures that the parent <g> is big enough such that\n                        we get mouse hover events for the whole charting area, including\n                        the axis, the entity labels, and the whitespace next to them.\n                        We need these to be able to show the tooltip for the first/last\n                        year even if the mouse is outside the charting area. */}\n                </rect>\n                {this.renderColorLegend()}\n                {this.renderDualAxis()}\n                <g clipPath={this.clipPath.id}>{this.renderChartElements()}</g>\n\n                {(this.isTooltipActive || this.hasTimeHighlights) &&\n                    this.activeXVerticalLines}\n                <LineChartTooltip\n                    id={this.tooltipId}\n                    chartState={this.chartState}\n                    tooltipState={this.tooltipState}\n                    series={this.renderSeries}\n                    xAxisLabel={this.xAxis.label}\n                    dismissTooltip={this.dismissTooltip}\n                />\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { manager, dualAxis } = this\n\n        if (this.chartState.errorInfo.reason)\n            return (\n                <g>\n                    {this.renderDualAxis()}\n                    <NoDataModal\n                        manager={manager}\n                        bounds={dualAxis.innerBounds}\n                        message={this.chartState.errorInfo.reason}\n                    />\n                </g>\n            )\n\n        return manager.isStatic ? this.renderStatic() : this.renderInteractive()\n    }\n\n    @computed protected get yColumnSlugs(): string[] {\n        return this.chartState.yColumnSlugs\n    }\n\n    @computed private get colorColumn(): CoreColumn {\n        return this.chartState.colorColumn\n    }\n\n    @computed private get formatColumn(): CoreColumn {\n        return this.chartState.formatColumn\n    }\n\n    @computed private get hasColorScale(): boolean {\n        return this.chartState.hasColorScale\n    }\n\n    @computed private get hasColorLegend(): boolean {\n        return this.hasColorScale && !!this.manager.showLegend\n    }\n\n    @computed get legendX(): number {\n        return this.bounds.x\n    }\n\n    @computed get legendMaxWidth(): number {\n        return this.bounds.width\n    }\n\n    @computed get legendAlign(): HorizontalAlign {\n        return HorizontalAlign.center\n    }\n\n    @computed private get colorScale(): ColorScale {\n        return this.chartState.colorScale\n    }\n\n    // TODO just pass colorScale to legend and let it figure it out?\n    @computed get numericLegendData(): ColorScaleBin[] {\n        // Move CategoricalBins to end\n        return _.sortBy(\n            this.colorScale.legendBins,\n            (bin) => bin instanceof CategoricalBin\n        )\n    }\n\n    numericBinSize = 6\n    legendTickSize = 1\n\n    // Used when faceted\n    categoricalLegendStyleConfig: LegendStyleConfig = CATEGORICAL_LEGEND_STYLE\n\n    // Used when the lines are colored by a numeric scale\n    numericLegendStyleConfig = NUMERIC_LEGEND_STYLE\n\n    @computed private get numericLegend():\n        | HorizontalNumericColorLegend\n        | undefined {\n        return this.hasColorScale && this.manager.showLegend\n            ? new HorizontalNumericColorLegend({ manager: this })\n            : undefined\n    }\n\n    @computed get numericLegendY(): number {\n        return this.bounds.top\n    }\n\n    @computed get legendTitle(): string | undefined {\n        return this.hasColorScale\n            ? this.colorScale.legendDescription\n            : undefined\n    }\n\n    @computed get legendHeight(): number {\n        return this.numericLegend?.height ?? 0\n    }\n\n    // End of color legend props\n\n    @computed get series(): readonly LineChartSeries[] {\n        return this.chartState.series\n    }\n\n    @computed private get hasMarkersOnlySeries(): boolean {\n        return this.series.some((series) => series.plotMarkersOnly)\n    }\n\n    @computed get placedSeries(): PlacedLineChartSeries[] {\n        return toPlacedLineChartSeries(this.series, {\n            chartState: this.chartState,\n            dualAxis: this.dualAxis,\n        })\n    }\n\n    private hoverStateForSeries(series: LineChartSeries): InteractionState {\n        return getHoverStateForSeries(series, {\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: this.hoveredSeriesNames,\n        })\n    }\n\n    @computed private get renderSeries(): RenderLineChartSeries[] {\n        return toRenderLineChartSeries(this.placedSeries, {\n            isFocusModeActive: this.chartState.isFocusModeActive,\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: this.hoveredSeriesNames,\n        })\n    }\n\n    // Order of the legend items on a line chart should visually correspond\n    // to the order of the lines as the approach the legend\n    @computed private get verticalLabelsSeries(): LabelSeries[] {\n        // If there are any projections, ignore non-projection legends (bit of a hack)\n        let series = this.series\n        if (series.some((series) => !!series.isProjection))\n            series = series.filter((series) => series.isProjection)\n\n        // Deduplicate series by seriesName to avoid showing the same label multiple times\n        const deduplicatedSeries: LineChartSeries[] = []\n        const seriesGroupedByName = _.groupBy(series, \"seriesName\")\n        for (const duplicates of Object.values(seriesGroupedByName)) {\n            // keep only the label for the series with the most recent data\n            // (series are sorted by time, so we can just take the last one)\n            deduplicatedSeries.push(R.last(duplicates)!)\n        }\n\n        return deduplicatedSeries.map((series) => {\n            const { seriesName, displayName, color, focus } = series\n            const lastValue = R.last(series.points)!.y\n            const hover = this.hoverStateForSeries(series)\n            return {\n                color,\n                seriesName,\n                label: !this.manager.showSeriesLabels ? \"\" : displayName,\n                annotation: getAnnotationsForSeries(\n                    this.chartState.annotationsMap,\n                    seriesName\n                ),\n                yValue: lastValue,\n                emphasis: resolveEmphasis({ focus, hover }),\n            } satisfies LabelSeries\n        })\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const defaults = getYAxisConfigDefaults(yAxisConfig)\n        return new AxisConfig({ ...defaults, ...yAxisConfig }, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig, hasScatter } = this.manager\n        const customConfig = { hideGridlines: true }\n\n        // If a secondary scatter tab is present, then the xAxisConfig\n        // applies to the scatter's x-axis, not the line chart's time axis\n        const userConfig = hasScatter ? undefined : xAxisConfig\n\n        return new AxisConfig({ ...customConfig, ...userConfig }, this)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return (\n            this.boundsWithoutColorLegend\n                .padRight(\n                    this.manager.showSeriesLabels ? this.verticalLabelsWidth : 1\n                )\n                // The top padding leaves room for tick labels.\n                // No padding is needed when plotted on a log axis because the\n                // log scale notice leaves enough space for tick labels.\n                .padTop(this.chartState.isLogScale ? 0 : 6)\n                // The bottom padding avoids axis labels to be cut off at some resolutions\n                .padBottom(2)\n        )\n    }\n\n    @computed get dualAxis(): DualAxis {\n        return new DualAxis({\n            bounds: this.innerBounds,\n            verticalAxis: this.verticalAxisPart,\n            horizontalAxis: this.horizontalAxisPart,\n            comparisonLines: this.manager.comparisonLines,\n        })\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed get externalLegend(): HorizontalColorLegendManager | undefined {\n        if (!this.manager.showSeriesLabels) {\n            const numericLegendData = this.hasColorScale\n                ? this.numericLegendData\n                : []\n            const categoricalLegendData = this.hasColorScale\n                ? []\n                : this.series.map(\n                      (series, index) =>\n                          new CategoricalBin({\n                              index,\n                              value: series.seriesName,\n                              label: series.displayName,\n                              color: series.color,\n                          })\n                  )\n            return {\n                legendTitle: this.legendTitle,\n                legendTickSize: this.legendTickSize,\n                numericBinSize: this.numericBinSize,\n                numericLegendData,\n                categoricalLegendData,\n                categoricalLegendStyleConfig: this.categoricalLegendStyleConfig,\n                numericLegendStyleConfig: this.numericLegendStyleConfig,\n            }\n        }\n        return undefined\n    }\n}\n","import * as React from \"react\"\nimport { Bounds, HorizontalAlign } from \"@ourworldindata/utils\"\nimport {\n    GRAPHER_FONT_SCALE_11,\n    GRAPHER_FONT_SCALE_12,\n} from \"../core/GrapherConstants\"\nimport { GRAPHER_LIGHT_TEXT } from \"../color/ColorConstants\"\n\nexport function NoDataSection({\n    seriesNames,\n    bounds,\n    align = HorizontalAlign.left,\n    baseFontSize = 16,\n}: {\n    seriesNames: string[]\n    bounds: Bounds\n    align?: HorizontalAlign\n    baseFontSize?: number\n}): React.ReactElement {\n    {\n        const displayedNames = seriesNames.slice(0, 5)\n        const remaining = Math.max(\n            0,\n            seriesNames.length - displayedNames.length\n        )\n\n        const headingFontsize = GRAPHER_FONT_SCALE_11 * baseFontSize\n        const bodyFontsize = GRAPHER_FONT_SCALE_12 * baseFontSize\n\n        return (\n            <foreignObject\n                className=\"NoDataSection\"\n                {...bounds.toProps()}\n                style={{\n                    textAlign:\n                        align === HorizontalAlign.right ? \"right\" : \"left\",\n                    color: GRAPHER_LIGHT_TEXT,\n                }}\n            >\n                <div className=\"heading\" style={{ fontSize: headingFontsize }}>\n                    No data\n                </div>\n                <div className=\"body\" style={{ fontSize: bodyFontsize }}>\n                    <ul>\n                        {displayedNames.map((entityName) => (\n                            <li key={entityName}>{entityName}</li>\n                        ))}\n                    </ul>\n                    {remaining > 0 && (\n                        <div>& {remaining === 1 ? \"one\" : remaining} more</div>\n                    )}\n                </div>\n            </foreignObject>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport {\n    AxisConfigInterface,\n    PointVector,\n    ScaleType,\n    SeriesName,\n} from \"@ourworldindata/utils\"\nimport { VerticalAxis } from \"../axis/Axis\"\nimport {\n    PlacedSlopeChartSeries,\n    RenderSlopeChartSeries,\n    SlopeChartSeries,\n} from \"./SlopeChartConstants\"\nimport {\n    byHoverThenFocusState,\n    getHoverStateForSeries,\n} from \"../chart/ChartUtils\"\nimport { resolveEmphasis } from \"../interaction/Emphasis\"\n\nexport function getYAxisConfigDefaults(\n    config?: AxisConfigInterface\n): AxisConfigInterface {\n    return {\n        nice: config?.scaleType !== ScaleType.log,\n        // Default to 0 if not set\n        min: 0,\n    }\n}\n\nexport function toPlacedSlopeChartSeries(\n    series: SlopeChartSeries[],\n    {\n        yAxis,\n        startX,\n        endX,\n    }: { yAxis: VerticalAxis; startX: number; endX: number }\n): PlacedSlopeChartSeries[] {\n    return series.map((series) => {\n        const startY = yAxis.place(series.start.value)\n        const endY = yAxis.place(series.end.value)\n\n        const startPoint = new PointVector(startX, startY)\n        const endPoint = new PointVector(endX, endY)\n\n        return { ...series, startPoint, endPoint }\n    })\n}\n\nexport function toRenderSlopeChartSeries(\n    placedSeries: PlacedSlopeChartSeries[],\n    {\n        isFocusModeActive = false,\n        isHoverModeActive = false,\n        hoveredSeriesNames = [],\n    }: {\n        isFocusModeActive?: boolean\n        isHoverModeActive?: boolean\n        hoveredSeriesNames?: SeriesName[]\n    }\n): RenderSlopeChartSeries[] {\n    const series: RenderSlopeChartSeries[] = placedSeries.map((series) => {\n        const hover = getHoverStateForSeries(series, {\n            isHoverModeActive,\n            hoveredSeriesNames,\n        })\n        const emphasis = resolveEmphasis({ hover, focus: series.focus })\n        return { ...series, hover, emphasis }\n    })\n\n    // Sort by interaction state so that foreground series\n    // are drawn on top of background series\n    if (isHoverModeActive || isFocusModeActive) {\n        return _.sortBy(series, byHoverThenFocusState)\n    }\n\n    return series\n}\n","import { makeFigmaId, PointVector } from \"@ourworldindata/utils\"\nimport { RenderSlopeChartSeries } from \"./SlopeChartConstants\"\nimport { LINE_STYLE } from \"../lineCharts/LineChartConstants.js\"\n\ninterface SlopeProps {\n    series: RenderSlopeChartSeries\n    dotRadius?: number\n    strokeWidth?: number\n    outlineWidth?: number\n    outlineStroke?: string\n}\n\nexport function Slope({\n    series,\n    dotRadius = 3.5,\n    strokeWidth = 2,\n    outlineWidth = 0.5,\n    outlineStroke = \"#fff\",\n}: SlopeProps) {\n    const { displayName, startPoint, endPoint } = series\n\n    const style = LINE_STYLE[series.emphasis]\n    const lineWidth = style.strokeWidthFactor * strokeWidth\n\n    return (\n        <>\n            {style.showOutline && (\n                <LineWithDots\n                    id={makeFigmaId(\"outline\", displayName)}\n                    startPoint={startPoint}\n                    endPoint={endPoint}\n                    radius={dotRadius + 2 * outlineWidth}\n                    color={outlineStroke}\n                    lineWidth={lineWidth + 2 * outlineWidth}\n                />\n            )}\n            <LineWithDots\n                id={makeFigmaId(\"slope\", displayName)}\n                startPoint={startPoint}\n                endPoint={endPoint}\n                radius={dotRadius}\n                color={series.color}\n                lineWidth={lineWidth}\n                opacity={style.opacity}\n            />\n        </>\n    )\n}\n\nfunction LineWithDots({\n    id,\n    startPoint,\n    endPoint,\n    radius,\n    color,\n    lineWidth = 2,\n    opacity = 1,\n}: {\n    id?: string\n    startPoint: PointVector\n    endPoint: PointVector\n    radius: number\n    color: string\n    lineWidth?: number\n    opacity?: number\n}): React.ReactElement {\n    return (\n        <g id={id} opacity={opacity} className=\"slope\">\n            <circle\n                id={makeFigmaId(\"start-point\")}\n                cx={startPoint.x}\n                cy={startPoint.y}\n                r={radius}\n                fill={color}\n            />\n            <circle\n                id={makeFigmaId(\"end-point\")}\n                cx={endPoint.x}\n                cy={endPoint.y}\n                r={radius}\n                fill={color}\n            />\n            <line\n                id={makeFigmaId(\"line\")}\n                x1={startPoint.x}\n                y1={startPoint.y}\n                x2={endPoint.x}\n                y2={endPoint.y}\n                stroke={color}\n                strokeWidth={lineWidth.toFixed(1)}\n            />\n        </g>\n    )\n}\n","import { dyFromAlign, makeFigmaId, VerticalAlign } from \"@ourworldindata/utils\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\n\nexport function MarkX({\n    label,\n    x,\n    top,\n    bottom,\n    labelPadding,\n    fontSize,\n}: {\n    label: string\n    x: number\n    top: number\n    bottom: number\n    labelPadding: number\n    fontSize: number\n}) {\n    return (\n        <>\n            <line\n                id={makeFigmaId(label)}\n                x1={x}\n                y1={top}\n                x2={x}\n                y2={bottom}\n                stroke=\"#999\"\n            />\n            <text\n                x={x}\n                y={bottom + labelPadding}\n                dy={dyFromAlign(VerticalAlign.bottom)}\n                textAnchor=\"middle\"\n                fill={GRAPHER_DARK_TEXT}\n                fontSize={fontSize}\n            >\n                {label}\n            </text>\n        </>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport React from \"react\"\nimport {\n    Bounds,\n    exposeInstanceOnWindow,\n    PointVector,\n    makeFigmaId,\n    guid,\n    excludeUndefined,\n    getRelativeMouse,\n    dyFromAlign,\n    domainExtent,\n    calculateTrendDirection,\n} from \"@ourworldindata/utils\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FONT_SCALE_11,\n    GRAPHER_FONT_SCALE_12,\n    GRAPHER_TEXT_OUTLINE_FACTOR,\n} from \"../core/GrapherConstants\"\nimport {\n    SeriesName,\n    MissingDataStrategy,\n    Time,\n    SeriesStrategy,\n    VerticalAlign,\n    HorizontalAlign,\n} from \"@ourworldindata/types\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { scaleLinear, ScaleLinear } from \"d3-scale\"\nimport { select, type BaseType, type Selection } from \"d3-selection\"\nimport {\n    PlacedSlopeChartSeries,\n    RawSlopeChartSeries,\n    RenderSlopeChartSeries,\n    SlopeChartSeries,\n    SlopeChartManager,\n} from \"./SlopeChartConstants\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport { getHoverStateForSeries } from \"../chart/ChartUtils\"\nimport { VerticalAxis } from \"../axis/Axis\"\nimport { VerticalAxisZeroLine } from \"../axis/AxisViews\"\nimport { NoDataSection } from \"../scatterCharts/NoDataSection\"\n\nimport { VerticalLabels } from \"../verticalLabels/VerticalLabels\"\nimport {\n    VerticalLabelsState,\n    VerticalLabelsStateOptions,\n} from \"../verticalLabels/VerticalLabelsState\"\nimport {\n    formatTooltipRangeValues,\n    makeTooltipRoundingNotice,\n    makeTooltipToleranceNotice,\n    Tooltip,\n    TooltipState,\n    TooltipValueRange,\n} from \"../tooltip/Tooltip\"\nimport { TooltipFooterIcon } from \"../tooltip/TooltipProps\"\n\nimport { Halo } from \"@ourworldindata/components\"\nimport { HorizontalColorLegendManager } from \"../legend/HorizontalColorLegends\"\nimport { CategoricalBin } from \"../color/ColorScaleBin\"\nimport {\n    GRAPHER_BACKGROUND_DEFAULT,\n    GRAPHER_DARK_TEXT,\n} from \"../color/ColorConstants\"\nimport { LabelSeries } from \"../verticalLabels/VerticalLabelsTypes\"\nimport { resolveEmphasis } from \"../interaction/Emphasis\"\nimport { SlopeChartState } from \"./SlopeChartState\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport {\n    getYAxisConfigDefaults,\n    toPlacedSlopeChartSeries,\n    toRenderSlopeChartSeries,\n} from \"./SlopeChartHelpers\"\nimport { Slope } from \"./Slope\"\nimport { MarkX } from \"./MarkX\"\nimport { CATEGORICAL_LEGEND_STYLE } from \"../lineCharts/LineChartConstants\"\n\ntype SVGMouseOrTouchEvent =\n    | React.MouseEvent<SVGGElement>\n    | React.TouchEvent<SVGGElement>\n\nconst VERTICAL_LABELS_PADDING = 4\nconst SIDEBAR_MARGIN = 10\n\nexport type SlopeChartProps = ChartComponentProps<SlopeChartState>\n\n@observer\nexport class SlopeChart\n    extends React.Component<SlopeChartProps>\n    implements ChartInterface, AxisManager\n{\n    private slopeAreaRef = React.createRef<SVGGElement>()\n\n    private tooltipState = new TooltipState<{\n        series: SlopeChartSeries\n    }>({ fade: \"immediate\" })\n\n    private hoveredSeriesName: string | undefined = undefined\n\n    constructor(props: SlopeChartProps) {\n        super(props)\n\n        makeObservable<SlopeChart, \"hoveredSeriesName\" | \"tooltipState\">(this, {\n            hoveredSeriesName: observable,\n            tooltipState: observable,\n        })\n    }\n\n    @computed get chartState(): SlopeChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): SlopeChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.bounds\n            .padTop(6) // Leave room for overflowing dots\n            .padBottom(this.bottomPadding)\n            .padRight(this.sidebarWidth + SIDEBAR_MARGIN)\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get missingDataStrategy(): MissingDataStrategy {\n        return this.chartState.missingDataStrategy\n    }\n\n    @computed private get formatColumn(): CoreColumn {\n        return this.chartState.formatColumn\n    }\n\n    @computed private get lineStrokeWidth(): number {\n        return this.manager.isStaticAndSmall ? 3 : 1.5\n    }\n\n    @computed private get backgroundColor(): string {\n        return this.manager.backgroundColor ?? GRAPHER_BACKGROUND_DEFAULT\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            this.hoveredSeriesNames.length > 0 ||\n            // if the external legend is hovered, we want to mute\n            // all non-hovered series even if the chart doesn't plot\n            // the currently hovered series\n            !!this.manager.externalLegendHoverBin\n        )\n    }\n\n    @computed private get startTime(): Time {\n        return this.chartState.startTime\n    }\n\n    @computed private get endTime(): Time {\n        return this.chartState.endTime\n    }\n\n    @computed private get startX(): number {\n        return this.xScale(this.startTime)\n    }\n\n    @computed private get endX(): number {\n        return this.xScale(this.endTime)\n    }\n\n    @computed private get seriesStrategy(): SeriesStrategy {\n        return this.chartState.seriesStrategy\n    }\n\n    @computed get series(): SlopeChartSeries[] {\n        return this.chartState.series\n    }\n\n    @computed private get placedSeries(): PlacedSlopeChartSeries[] {\n        return toPlacedSlopeChartSeries(this.series, {\n            yAxis: this.yAxis,\n            startX: this.startX,\n            endX: this.endX,\n        })\n    }\n\n    private hoverStateForSeries(series: SlopeChartSeries): InteractionState {\n        return getHoverStateForSeries(series, {\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: this.hoveredSeriesNames,\n        })\n    }\n\n    @computed private get renderSeries(): RenderSlopeChartSeries[] {\n        return toRenderSlopeChartSeries(this.placedSeries, {\n            isFocusModeActive: this.chartState.isFocusModeActive,\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: this.hoveredSeriesNames,\n        })\n    }\n\n    @computed get noDataSeries(): RawSlopeChartSeries[] {\n        return this.chartState.rawSeries.filter(\n            (series) => !this.chartState.isSeriesValid(series)\n        )\n    }\n\n    @computed private get showNoDataSection(): boolean {\n        if (this.manager.hideNoDataSection) return false\n\n        // nothing to show if there are no series with missing data\n        if (this.noDataSeries.length === 0) return false\n\n        // the No Data section is HTML and won't show up in the SVG export\n        if (this.manager.isStatic) return false\n\n        // we usually don't show the no data section if columns are plotted\n        // (since columns don't appear in the entity selector there is no need\n        // to explain that a column is missing – it just adds noise). but if\n        // the missing data strategy is set to hide, then we do want to give\n        // feedback as to why a slope is currently not rendered\n        return (\n            this.seriesStrategy === SeriesStrategy.entity ||\n            this.missingDataStrategy === MissingDataStrategy.hide\n        )\n    }\n\n    @computed private get bottomPadding(): number {\n        return 1.5 * GRAPHER_FONT_SCALE_12 * this.fontSize\n    }\n\n    @computed private get xLabelPadding(): number {\n        return this.useCompactLayout ? 4 : 8\n    }\n\n    @computed get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const defaults = getYAxisConfigDefaults(yAxisConfig)\n        const custom = { hideAxis: true }\n        return new AxisConfig({ ...defaults, ...yAxisConfig, ...custom }, this)\n    }\n\n    @computed get yDomainDefault(): [number, number] {\n        const defaultDomain: [number, number] = [Infinity, -Infinity]\n        return (\n            domainExtent(\n                this.chartState.allYValues,\n                this.chartState.yScaleType\n            ) ?? defaultDomain\n        )\n    }\n\n    @computed get yDomain(): [number, number] {\n        const domain = this.yAxisConfig.domain || [Infinity, -Infinity]\n        const domainDefault = this.yDomainDefault\n        return [\n            Math.min(domain[0], domainDefault[0]),\n            Math.max(domain[1], domainDefault[1]),\n        ]\n    }\n\n    @computed private get yRange(): [number, number] {\n        return this.innerBounds.yRange()\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig, {\n            yDomain: this.yDomain,\n            yRange: this.yRange,\n        })\n    }\n\n    @computed private get yAxisWidth(): number {\n        return this.yAxis.width\n    }\n\n    @computed private get xScale(): ScaleLinear<number, number> {\n        const { xRange } = this\n        return scaleLinear().domain(this.chartState.xDomain).range(xRange)\n    }\n\n    @computed private get sidebarWidth(): number {\n        return this.showNoDataSection\n            ? R.clamp(this.bounds.width * 0.125, { min: 60, max: 140 })\n            : 0\n    }\n\n    @computed private get formattedStartTime(): string {\n        return this.formatColumn.formatTime(this.chartState.xDomain[0])\n    }\n\n    @computed private get formattedEndTime(): string {\n        return this.formatColumn.formatTime(this.chartState.xDomain[1])\n    }\n\n    @computed private get xMarkFontSize(): number {\n        return this.yAxis.tickFontSize\n    }\n\n    @computed private get xStartMarkWidth(): number {\n        return Bounds.forText(this.formattedStartTime, {\n            fontSize: this.xMarkFontSize,\n        }).width\n    }\n\n    @computed private get xEndMarkWidth(): number {\n        return Bounds.forText(this.formattedEndTime, {\n            fontSize: this.xMarkFontSize,\n        }).width\n    }\n\n    @computed get externalLegend(): HorizontalColorLegendManager | undefined {\n        if (!this.manager.showSeriesLabels) {\n            const categoricalLegendData = this.series.map(\n                (series, index) =>\n                    new CategoricalBin({\n                        index,\n                        value: series.seriesName,\n                        label: series.displayName,\n                        color: series.color,\n                    })\n            )\n            return {\n                categoricalLegendData,\n                categoricalLegendStyleConfig: CATEGORICAL_LEGEND_STYLE,\n            }\n        }\n        return undefined\n    }\n\n    @computed private get maxLabelsWidth(): number {\n        return 0.25 * this.innerBounds.width\n    }\n\n    @computed private get labelsFontSize(): number {\n        return this.rightLabelsState.fontSize\n    }\n\n    @computed private get labelsYRange(): [number, number] {\n        const top = this.bounds.top\n\n        const bottom =\n            this.bounds.bottom -\n            // leave space for the x-axis labels\n            this.bottomPadding +\n            // but allow for a little extra space\n            this.labelsFontSize / 2\n\n        return [top, bottom]\n    }\n\n    @computed\n    private get commonLabelsOptions(): VerticalLabelsStateOptions {\n        return {\n            yAxis: () => this.yAxis,\n            yRange: () => this.labelsYRange,\n            maxWidth: this.maxLabelsWidth,\n            fontSize: this.fontSize,\n            verticalAlign: VerticalAlign.top,\n            showRegionTooltip: !this.manager.isStatic,\n        }\n    }\n\n    @computed\n    private get rightLabelsOptions(): VerticalLabelsStateOptions {\n        return { textAnchor: \"start\" }\n    }\n\n    @computed\n    private get leftLabelsOptions(): VerticalLabelsStateOptions {\n        return {\n            textAnchor: \"end\",\n            seriesNamesSortedByImportance:\n                this.seriesSortedByImportanceForLeftLabels,\n        }\n    }\n\n    private formatValue(value: number): string {\n        return this.formatColumn.formatValueShortWithAbbreviations(value)\n    }\n\n    @computed private get leftLabelsMaxLevel(): number {\n        if (!this.manager.showSeriesLabels) return 0\n\n        // can't use `leftLabelsState` due to a circular dependency\n        const series = this.series.map((series) =>\n            this.constructSingleLabelSeries(\n                series,\n                (series) => series.start.value,\n                { showSeriesName: false }\n            )\n        )\n\n        return new VerticalLabelsState(series, {\n            ...this.commonLabelsOptions,\n            ...this.leftLabelsOptions,\n            seriesNamesSortedByImportance:\n                this.seriesSortedByImportanceForLeftLabels,\n        }).maxLevel\n    }\n\n    @computed private get leftLabelsState(): VerticalLabelsState {\n        return new VerticalLabelsState(this.leftLabelsSeries, {\n            ...this.commonLabelsOptions,\n            ...this.leftLabelsOptions,\n        })\n    }\n\n    @computed private get leftLabelsWidth(): number {\n        // We usually use the \"stable\" width of the line legend, which might be\n        // a bit too wide because the connector line width is always added, even\n        // it no connector lines are drawn. Using the stable width prevents\n        // layout shifts when the connector lines are toggled on and off.\n        // However, if the chart area is very narrow (like when it's faceted),\n        // the stable width of the line legend takes too much space, so we use the\n        // actual width instead.\n        return this.isNarrow\n            ? this.leftLabelsState.width\n            : this.leftLabelsState.stableWidth\n    }\n\n    @computed private get rightLabelsState(): VerticalLabelsState {\n        return new VerticalLabelsState(this.rightLabelsSeries, {\n            ...this.commonLabelsOptions,\n            ...this.rightLabelsOptions,\n        })\n    }\n\n    @computed private get rightLabelsWidth(): number {\n        // We usually use the \"stable\" width of the line legend, which might be\n        // a bit too wide because the connector line width is always added, even\n        // it no connector lines are drawn. Using the stable width prevents\n        // layout shifts when the connector lines are toggled on and off.\n        // However, if the chart area is very narrow (like when it's faceted),\n        // the stable width of the line legend takes too much space, so we use the\n        // actual width instead.\n        return this.isNarrow\n            ? this.rightLabelsState.width\n            : this.rightLabelsState.stableWidth\n    }\n\n    @computed\n    private get visibleRightLabels(): Set<SeriesName> {\n        return new Set(this.rightLabelsState?.visibleSeriesNames ?? [])\n    }\n\n    @computed\n    private get seriesSortedByImportanceForLeftLabels(): SeriesName[] {\n        return this.series\n            .map((s) => s.seriesName)\n            .sort((s1: SeriesName, s2: SeriesName): number => {\n                const PREFER_S1 = -1\n                const PREFER_S2 = 1\n\n                const s1_isLabelled = this.visibleRightLabels.has(s1)\n                const s2_isLabelled = this.visibleRightLabels.has(s2)\n\n                // prefer to show value labels for series that are already labelled\n                if (s1_isLabelled && !s2_isLabelled) return PREFER_S1\n                if (s2_isLabelled && !s1_isLabelled) return PREFER_S2\n\n                return 0\n            })\n    }\n\n    @computed private get xRange(): [number, number] {\n        const leftLabelsWidth = this.leftLabelsWidth + VERTICAL_LABELS_PADDING\n        const rightLabelsWidth = this.rightLabelsWidth + VERTICAL_LABELS_PADDING\n        const chartAreaWidth = this.innerBounds.width\n\n        // start and end value when the slopes are as wide as possible\n        const minStartX = this.innerBounds.x + this.yAxisWidth + leftLabelsWidth\n        const maxEndX = this.innerBounds.right - rightLabelsWidth\n\n        // use all available space if the chart is narrow\n        if (this.manager.isNarrow || this.isNarrow) {\n            return [minStartX, maxEndX]\n        }\n\n        const offset = 0.25\n        let startX = this.innerBounds.x + offset * chartAreaWidth\n        let endX = this.innerBounds.right - offset * chartAreaWidth\n\n        // make sure the start and end values are within the bounds\n        startX = Math.max(startX, minStartX)\n        endX = Math.min(endX, maxEndX)\n\n        // pick a reasonable max width based on an ideal aspect ratio\n        const idealAspectRatio = 0.9\n        const availableWidth =\n            chartAreaWidth -\n            this.yAxisWidth -\n            leftLabelsWidth -\n            rightLabelsWidth\n        const idealWidth = idealAspectRatio * this.bounds.height\n        const maxSlopeWidth = Math.min(idealWidth, availableWidth)\n\n        const currentSlopeWidth = endX - startX\n        if (currentSlopeWidth > maxSlopeWidth) {\n            const padding = currentSlopeWidth - maxSlopeWidth\n            startX += padding / 2\n            endX -= padding / 2\n        }\n\n        return [startX, endX]\n    }\n\n    @computed private get isNarrow(): boolean {\n        return this.bounds.width < 320\n    }\n\n    @computed private get useCompactLayout(): boolean {\n        return !!this.manager.isSemiNarrow || this.isNarrow\n    }\n\n    @computed private get hoveredSeriesNames(): SeriesName[] {\n        const hoveredSeriesNames: SeriesName[] = []\n\n        // hovered series name (either by hovering over a slope or a label)\n        if (this.hoveredSeriesName)\n            hoveredSeriesNames.push(this.hoveredSeriesName)\n\n        // hovered legend item in the external facet legend\n        if (this.manager.externalLegendHoverBin) {\n            hoveredSeriesNames.push(\n                ...this.series\n                    .map((s) => s.seriesName)\n                    .filter((name) =>\n                        this.manager.externalLegendHoverBin?.contains(name)\n                    )\n            )\n        }\n\n        return hoveredSeriesNames\n    }\n\n    private constructSingleLabelSeries(\n        series: SlopeChartSeries,\n        getValue: (series: SlopeChartSeries) => number,\n        {\n            showSeriesName,\n            showAnnotation,\n        }: {\n            showSeriesName?: boolean\n            showAnnotation?: boolean\n        }\n    ): LabelSeries {\n        const { seriesName, displayName, color, annotation } = series\n        const value = getValue(series)\n        const formattedValue = this.formatValue(value)\n        return {\n            color,\n            seriesName,\n            annotation: showAnnotation ? annotation : undefined,\n            label: showSeriesName ? displayName : formattedValue,\n            formattedValue: showSeriesName ? formattedValue : undefined,\n            placeFormattedValueInNewLine: this.useCompactLayout,\n            yValue: value,\n            emphasis: resolveEmphasis({\n                focus: series.focus,\n                hover: this.hoverStateForSeries(series),\n            }),\n        }\n    }\n\n    @computed private get leftLabelsSeries(): LabelSeries[] {\n        const { shouldShowSeriesNamesInLeftLabels: showSeriesName } = this\n        return this.series.map((series) =>\n            this.constructSingleLabelSeries(\n                series,\n                (series) => series.start.value,\n                { showSeriesName }\n            )\n        )\n    }\n\n    @computed private get rightLabelsSeries(): LabelSeries[] {\n        return this.series.map((series) =>\n            this.constructSingleLabelSeries(\n                series,\n                (series) => series.end.value,\n                {\n                    showSeriesName: this.manager.showSeriesLabels,\n                    showAnnotation: !this.useCompactLayout,\n                }\n            )\n        )\n    }\n\n    private animSelection?: Selection<\n        BaseType,\n        unknown,\n        SVGGElement | null,\n        unknown\n    >\n    private playIntroAnimation() {\n        // Nice little intro animation\n        this.animSelection = select(this.slopeAreaRef.current)\n            .selectAll(\".slope\")\n            .attr(\"stroke-dasharray\", \"100%\")\n            .attr(\"stroke-dashoffset\", \"100%\")\n\n        this.animSelection\n            .transition()\n            .duration(600)\n            .attr(\"stroke-dashoffset\", \"0%\")\n    }\n\n    override componentDidMount() {\n        exposeInstanceOnWindow(this)\n\n        if (!this.manager.disableIntroAnimation) {\n            this.playIntroAnimation()\n        }\n    }\n\n    override componentWillUnmount(): void {\n        if (this.animSelection) this.animSelection.interrupt()\n    }\n\n    @computed private get shouldShowSeriesNamesInLeftLabels(): boolean {\n        return this.leftLabelsMaxLevel >= 4 && !!this.manager.showSeriesLabels\n    }\n\n    private updateTooltipPosition(event: SVGMouseOrTouchEvent): void {\n        const ref = this.manager.base?.current\n        if (ref) this.tooltipState.position = getRelativeMouse(ref, event)\n    }\n\n    private detectHoveredSlope(event: SVGMouseOrTouchEvent): void {\n        const ref = this.slopeAreaRef.current\n        if (!ref) return\n\n        const mouse = getRelativeMouse(ref, event)\n        this.mouseFrame = requestAnimationFrame(() => {\n            if (this.placedSeries.length === 0) return\n\n            const distanceMap = new Map<PlacedSlopeChartSeries, number>()\n            for (const series of this.placedSeries) {\n                distanceMap.set(\n                    series,\n                    PointVector.distanceFromPointToLineSegmentSq(\n                        mouse,\n                        series.startPoint,\n                        series.endPoint\n                    )\n                )\n            }\n\n            const closestSlope = _.minBy(this.placedSeries, (s) =>\n                distanceMap.get(s)\n            )!\n            const distanceSq = distanceMap.get(closestSlope)!\n            const tolerance = 10\n            const toleranceSq = tolerance * tolerance\n\n            if (closestSlope && distanceSq < toleranceSq) {\n                this.onSlopeMouseOver(closestSlope)\n            } else {\n                this.onSlopeMouseLeave()\n            }\n        })\n    }\n\n    private hoverTimer?: number\n    @action.bound onVerticalLabelMouseEnter(seriesName: SeriesName): void {\n        this.chartState.focusArray.clear()\n        clearTimeout(this.hoverTimer)\n        this.hoveredSeriesName = seriesName\n    }\n\n    @action.bound private clearHoveredSeries(): void {\n        this.hoveredSeriesName = undefined\n    }\n\n    @action.bound private debouncedClearHoveredSeries(): void {\n        clearTimeout(this.hoverTimer)\n\n        // Wait before clearing selection in case the mouse is moving\n        // quickly over neighboring labels\n        this.hoverTimer = window.setTimeout(() => {\n            this.clearHoveredSeries()\n        }, 200)\n    }\n\n    @action.bound onVerticalLabelMouseLeave(): void {\n        this.debouncedClearHoveredSeries()\n    }\n\n    @action.bound onSlopeMouseOver(series: SlopeChartSeries): void {\n        this.chartState.focusArray.clear()\n        this.hoveredSeriesName = series.seriesName\n        this.tooltipState.target = { series }\n    }\n\n    @action.bound onSlopeMouseLeave(): void {\n        this.clearHoveredSeries()\n        this.tooltipState.target = null\n    }\n\n    mouseFrame?: number\n    @action.bound onMouseMove(event: SVGMouseOrTouchEvent): void {\n        this.updateTooltipPosition(event)\n        this.detectHoveredSlope(event)\n    }\n\n    @action.bound onMouseLeave(): void {\n        if (this.mouseFrame !== undefined) cancelAnimationFrame(this.mouseFrame)\n\n        this.onSlopeMouseLeave()\n    }\n\n    @computed private get renderUid(): number {\n        return guid()\n    }\n\n    @computed private get tooltip(): React.ReactElement | undefined {\n        const {\n            manager: { isRelativeMode },\n            tooltipState: { target, position, fading },\n            formatColumn,\n            startTime,\n            endTime,\n        } = this\n\n        const { series } = target || {}\n        if (!series) return\n\n        const formatTime = (time: Time) => formatColumn.formatTime(time)\n\n        const title = series.displayName\n        const titleAnnotation = series.annotation\n\n        const actualStartTime = series.start.originalTime\n        const actualEndTime = series.end.originalTime\n        const timeRange = `${formatTime(actualStartTime)} to ${formatTime(actualEndTime)}`\n        const timeLabel = isRelativeMode\n            ? `% change between ${formatColumn.formatTime(actualStartTime)} and ${formatColumn.formatTime(actualEndTime)}`\n            : timeRange\n\n        const constructTargetYearForToleranceNotice = () => {\n            const isStartValueOriginal = series.start.originalTime === startTime\n            const isEndValueOriginal = series.end.originalTime === endTime\n\n            if (!isStartValueOriginal && !isEndValueOriginal) {\n                return `${formatTime(startTime)} and ${formatTime(endTime)}`\n            } else if (!isStartValueOriginal) {\n                return formatTime(startTime)\n            } else if (!isEndValueOriginal) {\n                return formatTime(endTime)\n            } else {\n                return undefined\n            }\n        }\n\n        const targetYear = constructTargetYearForToleranceNotice()\n        const toleranceNotice = targetYear\n            ? {\n                  icon: TooltipFooterIcon.Notice,\n                  text: makeTooltipToleranceNotice(targetYear),\n              }\n            : undefined\n        const roundingNotice = series.column.roundsToSignificantFigures\n            ? {\n                  icon: TooltipFooterIcon.None,\n                  text: makeTooltipRoundingNotice(\n                      [series.column.numSignificantFigures],\n                      { plural: !isRelativeMode }\n                  ),\n              }\n            : undefined\n        const footer = excludeUndefined([toleranceNotice, roundingNotice])\n\n        const values = isRelativeMode\n            ? [series.end.value]\n            : [series.start.value, series.end.value]\n\n        return (\n            <Tooltip\n                id={this.renderUid}\n                tooltipManager={this.props.chartState.manager}\n                x={position.x}\n                y={position.y}\n                offsetX={20}\n                offsetY={-16}\n                style={{ maxWidth: \"250px\" }}\n                title={title}\n                titleAnnotation={titleAnnotation}\n                subtitle={timeLabel}\n                subtitleFormat={targetYear ? \"notice\" : undefined}\n                dissolve={fading}\n                footer={footer}\n                dismiss={() => (this.tooltipState.target = null)}\n            >\n                <TooltipValueRange\n                    label={series.column.displayName}\n                    unit={series.column.displayUnit}\n                    values={formatTooltipRangeValues(values, series.column)}\n                    trend={calculateTrendDirection(...values)}\n                    isRoundedToSignificantFigures={\n                        series.column.roundsToSignificantFigures\n                    }\n                    labelVariant=\"unit-only\"\n                />\n            </Tooltip>\n        )\n    }\n\n    private makeMissingDataLabel(series: RawSlopeChartSeries): string {\n        const { displayName, start, end } = series\n\n        const startTime = this.formatColumn.formatTime(this.startTime)\n        const endTime = this.formatColumn.formatTime(this.endTime)\n\n        // mention the start or end value if they're missing\n        if (start?.value === undefined && end?.value === undefined) {\n            return `${displayName} (${startTime} & ${endTime})`\n        } else if (start?.value === undefined) {\n            return `${displayName} (${startTime})`\n        } else if (end?.value === undefined) {\n            return `${displayName} (${endTime})`\n        }\n\n        // if both values are given but the series shows up in the No Data\n        // section, then tolerance has been applied to one of the values\n        // in such a way that we decided not to render the slope after all\n        // (e.g. when the original times are too close to each other)\n        const isToleranceAppliedToStartValue =\n            start.originalTime !== this.startTime\n        const isToleranceAppliedToEndValue = end.originalTime !== this.endTime\n        if (isToleranceAppliedToStartValue && isToleranceAppliedToEndValue) {\n            return `${displayName} (${startTime} & ${endTime})`\n        } else if (isToleranceAppliedToStartValue) {\n            return `${displayName} (${startTime})`\n        } else if (isToleranceAppliedToEndValue) {\n            return `${displayName} (${endTime})`\n        }\n\n        return displayName\n    }\n\n    private renderNoDataSection(): React.ReactElement | undefined {\n        if (!this.showNoDataSection) return\n\n        const bounds = new Bounds(\n            this.innerBounds.right + SIDEBAR_MARGIN,\n            this.bounds.top,\n            this.sidebarWidth,\n            this.bounds.height\n        )\n        const seriesNames = this.noDataSeries.map((series) =>\n            this.makeMissingDataLabel(series)\n        )\n\n        return (\n            <NoDataSection\n                seriesNames={seriesNames}\n                bounds={bounds}\n                align={HorizontalAlign.right}\n                baseFontSize={this.fontSize}\n            />\n        )\n    }\n\n    private renderSlopes() {\n        return (\n            <g id={makeFigmaId(\"slopes\")}>\n                {this.renderSeries.map((series) => (\n                    <Slope\n                        key={series.seriesName}\n                        series={series}\n                        strokeWidth={this.lineStrokeWidth}\n                        outlineWidth={0.5}\n                        outlineStroke={this.backgroundColor}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    private renderInteractiveSlopes(): React.ReactElement {\n        return (\n            <g\n                ref={this.slopeAreaRef}\n                onMouseMove={this.onMouseMove}\n                onTouchMove={this.onMouseMove}\n                onTouchStart={this.onMouseMove}\n                onMouseLeave={this.onMouseLeave}\n            >\n                <rect\n                    x={this.startX}\n                    y={this.bounds.y}\n                    width={this.endX - this.startX}\n                    height={this.bounds.height}\n                    fillOpacity={0}\n                />\n                {this.renderSlopes()}\n            </g>\n        )\n    }\n\n    private renderZeroLine(): React.ReactElement | null {\n        // Don't draw a zero line if all start values are zero,\n        // which is trivially true in relative mode\n        if (this.chartState.isRelativeMode) return null\n\n        // Don't draw a zero line if all start values are zero\n        const areAllStartValuesZero = !this.chartState.series.some(\n            (series) => series.start.value !== 0\n        )\n        if (areAllStartValuesZero) return null\n\n        // Don't show a zero line if it's not in the domain\n        const isZeroInDomain =\n            this.yAxis.domain[0] <= 0 && this.yAxis.domain[1] >= 0\n        if (!isZeroInDomain) return null\n\n        const fontSize = GRAPHER_FONT_SCALE_12 * this.fontSize\n        const tickLabelOffset = 5\n\n        const tickLabel = this.yAxis.formatTick(0)\n        const tickLabelLength = Bounds.forText(tickLabel, { fontSize }).width\n        const bounds = this.innerBounds.padLeft(\n            tickLabelLength + tickLabelOffset\n        )\n\n        return (\n            <>\n                {!this.yAxis.hideGridlines && (\n                    <VerticalAxisZeroLine\n                        bounds={bounds}\n                        verticalAxis={this.yAxis}\n                        stroke=\"#ddd\"\n                        strokeDasharray=\"3,2\"\n                    />\n                )}\n                <text\n                    x={this.innerBounds.left}\n                    y={this.yAxis.place(0).toFixed(2)}\n                    dy={dyFromAlign(VerticalAlign.middle)}\n                    fontSize={fontSize}\n                    fill={GRAPHER_DARK_TEXT}\n                >\n                    {tickLabel}\n                </text>\n            </>\n        )\n    }\n\n    private renderLogNotice(): React.ReactElement | null {\n        if (!this.chartState.isLogScale) return null\n\n        const fontSize = GRAPHER_FONT_SCALE_11 * this.fontSize\n\n        const longText = \"plotted on a logarithmic axis\"\n        const shortText = \"log axis\"\n\n        const longTextWidth = Bounds.forText(longText, { fontSize }).width\n        const shortTextWidth = Bounds.forText(shortText, { fontSize }).width\n\n        // Determine how much space is available for the log notice\n        const xDist = this.endX - this.startX\n        const rightPadding = 0.5 * this.xEndMarkWidth\n        const leftPadding = 0.5 * this.xStartMarkWidth\n        const maxWidth = xDist - rightPadding - leftPadding - 24\n\n        // Prefer the long text if it fits. If both texts are too long,\n        // don't display a notice\n        const renderedText =\n            longTextWidth <= maxWidth\n                ? longText\n                : shortTextWidth <= maxWidth\n                  ? shortText\n                  : null\n\n        if (!renderedText) return null\n\n        // Placed in between the start and end x marks\n        const midX = (this.startX + this.endX) / 2\n        const y = this.innerBounds.bottom + this.xLabelPadding\n\n        return (\n            <text\n                x={midX}\n                y={y}\n                fontSize={fontSize}\n                textAnchor=\"middle\"\n                dy={dyFromAlign(VerticalAlign.bottom)}\n                fill={GRAPHER_DARK_TEXT}\n                fontStyle=\"italic\"\n            >\n                {renderedText}\n            </text>\n        )\n    }\n\n    private renderYAxis(): React.ReactElement | null {\n        return (\n            <>\n                {this.renderZeroLine()}\n                {this.renderLogNotice()}\n            </>\n        )\n    }\n\n    private renderXAxis() {\n        const { startX, endX } = this\n\n        return (\n            <g id={makeFigmaId(\"horizontal-axis\")}>\n                <MarkX\n                    label={this.formattedStartTime}\n                    x={startX}\n                    top={this.innerBounds.top}\n                    bottom={this.innerBounds.bottom}\n                    labelPadding={this.xLabelPadding}\n                    fontSize={this.xMarkFontSize}\n                />\n                <MarkX\n                    label={this.formattedEndTime}\n                    x={endX}\n                    top={this.innerBounds.top}\n                    bottom={this.innerBounds.bottom}\n                    labelPadding={this.xLabelPadding}\n                    fontSize={this.xMarkFontSize}\n                />\n            </g>\n        )\n    }\n\n    private renderVerticalLabelsRight(): React.ReactElement {\n        return (\n            <VerticalLabels\n                state={this.rightLabelsState}\n                x={this.xRange[1] + VERTICAL_LABELS_PADDING}\n                onMouseEnter={this.onVerticalLabelMouseEnter}\n                onMouseLeave={this.onVerticalLabelMouseLeave}\n                interactive={!this.manager.isStatic}\n            />\n        )\n    }\n\n    private renderVerticalLabelsLeft(): React.ReactElement | null {\n        // don't show labels for the start values in relative mode since they're all trivially zero\n        if (this.manager.isRelativeMode) return null\n\n        const uniqYValues = _.uniq(\n            this.leftLabelsSeries.map((series) => series.yValue)\n        )\n        const allSlopesStartFromZero =\n            uniqYValues.length === 1 && uniqYValues[0] === 0\n\n        // if all values have a start value of 0, show the 0-label only once\n        if (allSlopesStartFromZero)\n            return (\n                <Halo\n                    id=\"x-axis-zero-label\"\n                    outlineWidth={\n                        GRAPHER_TEXT_OUTLINE_FACTOR * this.labelsFontSize\n                    }\n                    outlineColor={this.backgroundColor}\n                >\n                    <text\n                        x={this.startX}\n                        y={this.yAxis.place(0)}\n                        textAnchor=\"end\"\n                        dx={-VERTICAL_LABELS_PADDING - 4}\n                        dy={dyFromAlign(VerticalAlign.middle)}\n                        fontSize={this.labelsFontSize}\n                    >\n                        {this.formatValue(0)}\n                    </text>\n                </Halo>\n            )\n\n        return (\n            <VerticalLabels\n                state={this.leftLabelsState}\n                x={this.xRange[0] - VERTICAL_LABELS_PADDING}\n                onMouseEnter={this.onVerticalLabelMouseEnter}\n                onMouseLeave={this.onVerticalLabelMouseLeave}\n                interactive={!this.manager.isStatic}\n            />\n        )\n    }\n\n    private renderVerticalLabels(): React.ReactElement | undefined {\n        return (\n            <>\n                {this.renderVerticalLabelsLeft()}\n                {this.renderVerticalLabelsRight()}\n            </>\n        )\n    }\n\n    private renderInteractive(): React.ReactElement {\n        return (\n            <>\n                {this.renderYAxis()}\n                {this.renderXAxis()}\n                {this.renderInteractiveSlopes()}\n                {this.renderVerticalLabels()}\n                {this.renderNoDataSection()}\n                {this.tooltip}\n            </>\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderYAxis()}\n                {this.renderXAxis()}\n                {this.renderSlopes()}\n                {this.renderVerticalLabels()}\n            </>\n        )\n    }\n\n    override render() {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n","import { ChartManager } from \"../chart/ChartManager\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport {\n    Color,\n    CoreValueType,\n    ProjectionColumnInfo,\n    Time,\n} from \"@ourworldindata/types\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { ColumnSlug } from \"@ourworldindata/utils\"\nimport { SeriesLabelState } from \"../seriesLabel/SeriesLabelState.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\nimport {\n    GRAPHER_AREA_OPACITY_DEFAULT,\n    GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n    GRAPHER_AREA_OPACITY_MUTED,\n} from \"../core/GrapherConstants\"\n\nexport interface DiscreteBarSeries extends ChartSeries {\n    entityName: string\n    shortEntityName?: string\n    yColumn: CoreColumn\n    value: number\n    time: Time\n    colorValue?: CoreValueType\n    annotation?: string\n    focus: InteractionState\n    isProjection?: boolean\n}\n\nexport interface SizedDiscreteBarSeries extends DiscreteBarSeries {\n    label: SeriesLabelState\n    annotationTextWrap?: TextWrap\n}\n\nexport interface PlacedDiscreteBarSeries extends SizedDiscreteBarSeries {\n    // data bar\n    barX: number\n    barY: number\n    barWidth: number\n\n    // entity label, annotation, and value label positions\n    entityLabelX: number\n    entityLabelY: number\n    annotationY?: number\n    valueLabelX: number\n}\n\nexport interface RenderDiscreteBarSeries extends PlacedDiscreteBarSeries {\n    emphasis: Emphasis\n}\n\ninterface DiscreteBarStyle {\n    barOpacity: number\n    labelOpacity: number\n}\n\nexport const DISCRETE_BAR_STYLE: Record<Emphasis, DiscreteBarStyle> = {\n    [Emphasis.Default]: {\n        barOpacity: GRAPHER_AREA_OPACITY_DEFAULT,\n        labelOpacity: 1,\n    },\n    [Emphasis.Highlighted]: {\n        barOpacity: GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n        labelOpacity: 1,\n    },\n    [Emphasis.Muted]: {\n        barOpacity: GRAPHER_AREA_OPACITY_MUTED,\n        labelOpacity: 0.3,\n    },\n}\n\nexport interface DiscreteBarChartManager extends ChartManager {\n    showYearLabels?: boolean\n    endTime?: Time\n    hasLineChart?: boolean // used to pick color scheme\n    hasSlopeChart?: boolean // used to pick color scheme\n    projectionColumnInfoBySlug?: Map<ColumnSlug, ProjectionColumnInfo>\n}\n\nexport interface DiscreteBarItem {\n    yColumn: CoreColumn\n    seriesName: string\n    value: number\n    time: number\n    colorValue?: CoreValueType\n    color?: Color\n    isProjection?: boolean\n}\n\n/**\n * Describes how Y columns are handled.\n *\n * - \"independent\": Each Y column is treated independently and plotted as its own series.\n * - \"combined\": A historical and projection column pair are merged into a single\n *   series, with projections indicated appropriately.\n */\nexport type YColumnMode =\n    | { type: \"independent\"; slugs: ColumnSlug[] }\n    | { type: \"combined\"; slugs: ColumnSlug[]; info: ProjectionColumnInfo }\n\nexport const BACKGROUND_COLOR = \"#fff\"\nexport const BAR_SPACING_FACTOR = 0.35\n","import * as _ from \"lodash-es\"\nimport { TextWrap, shortenWithEllipsis } from \"@ourworldindata/components\"\nimport { EntityName } from \"@ourworldindata/types\"\nimport { FontSettings } from \"../core/GrapherConstants.js\"\nimport { SeriesLabelState } from \"../seriesLabel/SeriesLabelState.js\"\n\nconst ANNOTATION_PADDING = 2\n\n// Pattern IDs should be unique per document (!), not just per grapher instance.\n// Including the color in the id guarantees that the pattern uses the correct color,\n// even if it gets resolved to a striped pattern of a different grapher instance.\nexport function makeProjectedDataPatternId(color: string): string {\n    return `DiscreteBarChart_stripes_${color}`\n}\n\n/**\n * Creates a TextWrap for discrete bar chart labels that fits within the bar height.\n *\n * Strategy:\n * 1. Calculate the maximum number of lines that can fit in the bar height\n * 2. Use binary search to find the minimum width that produces at most maxLines\n * 3. If the label doesn't fit even at maxWidth, reduce font size until it fits\n * 4. If the label still doesn't fit, truncate the label with ellipsis\n */\nfunction wrapLabelForHeight({\n    label,\n    availableHeight,\n    minWidth,\n    maxWidth,\n    fontSettings,\n}: {\n    label: string\n    availableHeight: number\n    minWidth: number\n    maxWidth: number\n    fontSettings: { fontSize: number; fontWeight: number; lineHeight: number }\n}): { textWrap: TextWrap; needsTruncation?: boolean } {\n    const originalFontSize = fontSettings.fontSize\n\n    // Drop new line characters before processing\n    const cleanedLabel = label.replace(/\\n/g, \" \").trim()\n\n    // Helper to calculate max lines that can fit in available height\n    const computeMaxLineCount = (\n        availableHeight: number,\n        fontSettings: FontSettings\n    ): number => {\n        const lineHeight = fontSettings.fontSize * fontSettings.lineHeight\n        return Math.max(1, Math.floor(availableHeight / lineHeight))\n    }\n\n    // Helper to create TextWrap with given width and font size\n    const makeTextWrap = (maxWidth: number, fontSize: number): TextWrap =>\n        new TextWrap({\n            text: cleanedLabel,\n            maxWidth,\n            ...fontSettings,\n            fontSize, // Overrides the original font size\n        })\n\n    // Calculate max lines that can fit in the bar height\n    const maxLines = computeMaxLineCount(availableHeight, fontSettings)\n\n    // Find the minimum width that produces at most maxLines\n    const optimalWidth = findMinWidthForMaxLines({\n        label: cleanedLabel,\n        maxLines,\n        minWidth,\n        maxWidth,\n        fontSettings,\n    })\n\n    // Check if it fits at the best width with original font size\n    const labelWrap = makeTextWrap(optimalWidth, originalFontSize)\n    if (labelWrap.lines.length <= maxLines) return { textWrap: labelWrap }\n\n    // If not, reduce the font size until it fits (or the minimum font size is reached)\n    const minFontSize = Math.max(Math.floor(originalFontSize * 0.8), 6)\n    const optimalFontSize = findMaxFontSizeForHeight({\n        label: cleanedLabel,\n        maxWidth,\n        availableHeight,\n        maxFontSize: originalFontSize,\n        minFontSize,\n        fontSettings,\n    })\n\n    // Check if the label fits or if it needs truncation\n    const reducedFontWrap = makeTextWrap(maxWidth, optimalFontSize)\n    const optimalFontSettings = { ...fontSettings, fontSize: optimalFontSize }\n    const maxLinesAtReducedSize = computeMaxLineCount(\n        availableHeight,\n        optimalFontSettings\n    )\n    const needsTruncation = reducedFontWrap.lines.length > maxLinesAtReducedSize\n\n    return { textWrap: reducedFontWrap, needsTruncation }\n}\n\n/** Binary search to find the minimum width that produces at most maxLines */\nfunction findMinWidthForMaxLines({\n    label,\n    maxLines,\n    minWidth,\n    maxWidth,\n    fontSettings,\n}: {\n    label: string\n    maxLines: number\n    minWidth: number\n    maxWidth: number\n    fontSettings: FontSettings\n}): number {\n    let low = minWidth\n    let high = maxWidth\n    let bestWidth = maxWidth\n    const step = 1\n\n    while (low <= high) {\n        const mid = Math.floor((low + high) / 2)\n        const testWrap = new TextWrap({\n            text: label,\n            maxWidth: mid,\n            ...fontSettings,\n        })\n\n        if (testWrap.lines.length <= maxLines) {\n            // This width works, try smaller\n            bestWidth = mid\n            high = mid - step\n        } else {\n            // Too many lines, need larger width\n            low = mid + step\n        }\n    }\n\n    return bestWidth\n}\n\n/** Decrease font size until the label fits within availableHeight at maxWidth */\nfunction findMaxFontSizeForHeight({\n    label,\n    maxWidth,\n    availableHeight,\n    maxFontSize,\n    minFontSize,\n    fontSettings,\n}: {\n    label: string\n    maxWidth: number\n    availableHeight: number\n    maxFontSize: number\n    minFontSize: number\n    fontSettings: FontSettings\n}): number {\n    const step = 0.5\n\n    let fontSize = maxFontSize\n\n    while (fontSize >= minFontSize) {\n        const lineHeight = fontSize * fontSettings.lineHeight\n        const maxLines = Math.max(1, Math.floor(availableHeight / lineHeight))\n\n        const testWrap = new TextWrap({\n            text: label,\n            maxWidth,\n            ...fontSettings,\n            fontSize,\n        })\n\n        if (testWrap.lines.length <= maxLines) return fontSize\n\n        fontSize -= step\n    }\n\n    return minFontSize\n}\n\n/** Processes series to create sized labels that fit within available height */\nexport function enrichSeriesWithLabels<\n    TSeries extends {\n        entityName: EntityName\n        shortEntityName?: string\n        annotation?: string\n    },\n>({\n    series,\n    availableHeightPerSeries,\n    minLabelWidth,\n    maxLabelWidth,\n    fontSettings,\n    annotationFontSettings = {\n        fontSize: 13,\n        fontWeight: 300,\n        lineHeight: 1,\n    },\n    showRegionTooltip = false,\n}: {\n    series: readonly TSeries[]\n    availableHeightPerSeries: number\n    minLabelWidth: number\n    maxLabelWidth: number\n    fontSettings: FontSettings\n    annotationFontSettings?: FontSettings\n    showRegionTooltip?: boolean\n}): (TSeries & { label: SeriesLabelState; annotationTextWrap?: TextWrap })[] {\n    // Wrap labels and annotations to fit within the available space\n    const wrappedLabels = series.map((series) => {\n        const label = series.shortEntityName ?? series.entityName\n\n        // First, wrap the label without considering annotations\n        const {\n            textWrap: labelWrap,\n            needsTruncation: labelWrapNeedsTruncation,\n        } = wrapLabelForHeight({\n            label,\n            availableHeight: availableHeightPerSeries,\n            minWidth: minLabelWidth,\n            maxWidth: maxLabelWidth,\n            fontSettings,\n        })\n\n        // If there's no annotation, we're done\n        if (!series.annotation) return { labelWrap, labelWrapNeedsTruncation }\n\n        // Calculate remaining height for annotation (4px extra padding to avoid crowding)\n        const remainingHeightForAnnotation =\n            availableHeightPerSeries - labelWrap.height - ANNOTATION_PADDING - 4\n\n        // If there's not enough space for even one line of annotation, skip it\n        const minAnnotationHeight =\n            annotationFontSettings.fontSize * annotationFontSettings.lineHeight\n        if (remainingHeightForAnnotation < minAnnotationHeight)\n            return { labelWrap, labelWrapNeedsTruncation }\n\n        // Wrap annotation to fit in remaining space\n        const annotationWrap = new TextWrap({\n            text: series.annotation,\n            // 80px extra to give annotations more room than labels\n            maxWidth: Math.min(maxLabelWidth, labelWrap.width + 80),\n            ...annotationFontSettings,\n        })\n\n        // Check if annotation fits in remaining height\n        if (annotationWrap.height > remainingHeightForAnnotation) {\n            // Try again with a larger max width\n            const annotationWrap = new TextWrap({\n                text: series.annotation,\n                maxWidth: maxLabelWidth,\n                ...annotationFontSettings,\n            })\n\n            const annotationWrapNeedsTruncation =\n                annotationWrap.height > remainingHeightForAnnotation\n\n            return {\n                labelWrap,\n                labelWrapNeedsTruncation,\n                annotationWrap,\n                annotationWrapNeedsTruncation,\n            }\n        }\n\n        return {\n            labelWrap,\n            annotationWrap,\n            labelWrapNeedsTruncation,\n            annotationWrapNeedsTruncation: false,\n        }\n    })\n\n    // Return early if no labels or annotations need truncation\n    const needsTruncation = wrappedLabels.some(\n        (s) => s.labelWrapNeedsTruncation || s.annotationWrapNeedsTruncation\n    )\n    if (!needsTruncation)\n        return series.map((series, index) => ({\n            ...series,\n            label: SeriesLabelState.fromTextWrap(\n                wrappedLabels[index].labelWrap,\n                { showRegionTooltip, textAnchor: \"end\" }\n            ),\n            annotationTextWrap: wrappedLabels[index].annotationWrap,\n        }))\n\n    // The target width for truncation is the max width of non-truncated labels and annotations\n    const nonTruncatedLabelWidths = wrappedLabels\n        .filter((s) => !s.labelWrapNeedsTruncation)\n        .map((s) => s.labelWrap.width)\n    const nonTruncatedAnnotationWidths = wrappedLabels\n        .filter(\n            (s) =>\n                s.annotationWrap !== undefined &&\n                !s.annotationWrapNeedsTruncation\n        )\n        .map((s) => s.annotationWrap!.width)\n    const targetWidth = Math.max(\n        _.max(nonTruncatedLabelWidths) ?? 0,\n        _.max(nonTruncatedAnnotationWidths) ?? 0\n    )\n\n    const truncatedLabels = wrappedLabels.map(\n        ({ labelWrap, labelWrapNeedsTruncation }) => {\n            if (!labelWrapNeedsTruncation) return labelWrap\n\n            const truncatedText = shortenWithEllipsis(\n                labelWrap.text,\n                targetWidth,\n                fontSettings\n            )\n\n            return new TextWrap({\n                text: truncatedText,\n                maxWidth: Infinity, // Don't wrap truncated labels\n                ...fontSettings,\n            })\n        }\n    )\n\n    const truncatedAnnotations = wrappedLabels.map(\n        ({ annotationWrap, annotationWrapNeedsTruncation }) => {\n            if (!annotationWrap || !annotationWrapNeedsTruncation)\n                return annotationWrap\n\n            const truncatedText = shortenWithEllipsis(\n                annotationWrap.text,\n                targetWidth,\n                annotationFontSettings\n            )\n\n            return new TextWrap({\n                text: truncatedText,\n                maxWidth: Infinity, // Don't wrap truncated labels\n                ...annotationFontSettings,\n            })\n        }\n    )\n\n    return series.map((series, index) => ({\n        ...series,\n        label: SeriesLabelState.fromTextWrap(truncatedLabels[index], {\n            showRegionTooltip,\n            textAnchor: \"end\",\n        }),\n        annotationTextWrap: truncatedAnnotations[index],\n    }))\n}\n","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","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\";\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 _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 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 };","function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nexport { _assertThisInitialized as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","function _getPrototypeOf(t) {\n  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf 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 };","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(function(elapsed) {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer, total = delay;\n  if (delay == null) return t.restart(callback, delay, time), t;\n  delay = +delay, time = time == null ? now() : +time;\n  t.restart(function tick(elapsed) {\n    elapsed += total;\n    t.restart(tick, total += delay, time);\n    callback(elapsed);\n  }, delay, time);\n  return t;\n}\n","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar transitionId = 0;\nexport function getTransitionId() {\n  return ++transitionId;\n}\nexport function extend(obj, props) {\n  for (var i in props) {\n    obj[i] = props[i];\n  }\n}\nexport function once(func) {\n  var called = false;\n  return function transitionEvent() {\n    if (!called) {\n      called = true;\n      func.call(this);\n    }\n  };\n}\nexport function isNamespace(prop) {\n  return _typeof(prop) === 'object' && Array.isArray(prop) === false;\n}\n\nvar linear = function linear(t) {\n  return +t;\n};\n\nexport var timingDefaults = {\n  delay: 0,\n  duration: 250,\n  ease: linear\n};","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { once } from './utils';\nexport var Events = function Events(config) {\n  var _this = this;\n\n  _classCallCheck(this, Events);\n\n  this.start = null;\n  this.interrupt = null;\n  this.end = null;\n\n  if (config.events) {\n    Object.keys(config.events).forEach(function (d) {\n      if (typeof config.events[d] !== 'function') {\n        throw new Error('Event handlers must be a function');\n      } else {\n        _this[d] = once(config.events[d]);\n      }\n    });\n  }\n};\nexport default Events;","function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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\nimport { now, timer, timeout } from 'd3-timer';\nimport { timingDefaults, extend, getTransitionId, isNamespace } from './utils';\nimport Events from './Events';\n\nvar BaseNode = function () {\n  function BaseNode(state) {\n    _classCallCheck(this, BaseNode);\n\n    this.state = state || {};\n  }\n\n  _createClass(BaseNode, [{\n    key: \"transition\",\n    value: function transition(config) {\n      if (Array.isArray(config)) {\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = config[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var item = _step.value;\n            this.parse(item);\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return != null) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      } else {\n        this.parse(config);\n      }\n    }\n  }, {\n    key: \"isTransitioning\",\n    value: function isTransitioning() {\n      return !!this.transitionData;\n    }\n  }, {\n    key: \"stopTransitions\",\n    value: function stopTransitions() {\n      var transitions = this.transitionData;\n\n      if (transitions) {\n        Object.keys(transitions).forEach(function (t) {\n          transitions[t].timer.stop();\n        });\n      }\n    }\n  }, {\n    key: \"setState\",\n    value: function setState(update) {\n      if (typeof update === 'function') {\n        extend(this.state, update(this.state));\n      } else {\n        extend(this.state, update);\n      }\n    }\n  }, {\n    key: \"parse\",\n    value: function parse(config) {\n      var _this = this;\n\n      var clone = _objectSpread({}, config);\n\n      var events = new Events(clone);\n\n      if (clone.events) {\n        delete clone.events;\n      }\n\n      var timing = _objectSpread({}, timingDefaults, clone.timing || {}, {\n        time: now()\n      });\n\n      if (clone.timing) {\n        delete clone.timing;\n      }\n\n      Object.keys(clone).forEach(function (stateKey) {\n        var tweens = [];\n        var next = clone[stateKey];\n\n        if (isNamespace(next)) {\n          Object.keys(next).forEach(function (attr) {\n            var val = next[attr];\n\n            if (Array.isArray(val)) {\n              if (val.length === 1) {\n                tweens.push(_this.getTween(attr, val[0], stateKey));\n              } else {\n                _this.setState(function (state) {\n                  var _objectSpread2, _ref;\n\n                  return _ref = {}, _ref[stateKey] = _objectSpread({}, state[stateKey], (_objectSpread2 = {}, _objectSpread2[attr] = val[0], _objectSpread2)), _ref;\n                });\n\n                tweens.push(_this.getTween(attr, val[1], stateKey));\n              }\n            } else if (typeof val === 'function') {\n              var getNameSpacedCustomTween = function getNameSpacedCustomTween() {\n                var kapellmeisterNamespacedTween = function kapellmeisterNamespacedTween(t) {\n                  _this.setState(function (state) {\n                    var _objectSpread3, _ref2;\n\n                    return _ref2 = {}, _ref2[stateKey] = _objectSpread({}, state[stateKey], (_objectSpread3 = {}, _objectSpread3[attr] = val(t), _objectSpread3)), _ref2;\n                  });\n                };\n\n                return kapellmeisterNamespacedTween;\n              };\n\n              tweens.push(getNameSpacedCustomTween);\n            } else {\n              _this.setState(function (state) {\n                var _objectSpread4, _ref3;\n\n                return _ref3 = {}, _ref3[stateKey] = _objectSpread({}, state[stateKey], (_objectSpread4 = {}, _objectSpread4[attr] = val, _objectSpread4)), _ref3;\n              });\n\n              tweens.push(_this.getTween(attr, val, stateKey));\n            }\n          });\n        } else {\n          if (Array.isArray(next)) {\n            if (next.length === 1) {\n              tweens.push(_this.getTween(stateKey, next[0], null));\n            } else {\n              var _this$setState;\n\n              _this.setState((_this$setState = {}, _this$setState[stateKey] = next[0], _this$setState));\n\n              tweens.push(_this.getTween(stateKey, next[1], null));\n            }\n          } else if (typeof next === 'function') {\n            var getCustomTween = function getCustomTween() {\n              var kapellmeisterTween = function kapellmeisterTween(t) {\n                var _this$setState2;\n\n                _this.setState((_this$setState2 = {}, _this$setState2[stateKey] = next(t), _this$setState2));\n              };\n\n              return kapellmeisterTween;\n            };\n\n            tweens.push(getCustomTween);\n          } else {\n            var _this$setState3;\n\n            _this.setState((_this$setState3 = {}, _this$setState3[stateKey] = next, _this$setState3));\n\n            tweens.push(_this.getTween(stateKey, next, null));\n          }\n        }\n\n        _this.update({\n          stateKey: stateKey,\n          timing: timing,\n          tweens: tweens,\n          events: events,\n          status: 0\n        });\n      });\n    }\n  }, {\n    key: \"getTween\",\n    value: function getTween(attr, endValue, nameSpace) {\n      var _this2 = this;\n\n      return function () {\n        var begValue = nameSpace ? _this2.state[nameSpace][attr] : _this2.state[attr];\n\n        if (begValue === endValue) {\n          return null;\n        }\n\n        var i = _this2.getInterpolator(begValue, endValue, attr, nameSpace);\n\n        var stateTween;\n\n        if (nameSpace === null) {\n          stateTween = function stateTween(t) {\n            var _this2$setState;\n\n            _this2.setState((_this2$setState = {}, _this2$setState[attr] = i(t), _this2$setState));\n          };\n        } else {\n          stateTween = function stateTween(t) {\n            _this2.setState(function (state) {\n              var _objectSpread5, _ref4;\n\n              return _ref4 = {}, _ref4[nameSpace] = _objectSpread({}, state[nameSpace], (_objectSpread5 = {}, _objectSpread5[attr] = i(t), _objectSpread5)), _ref4;\n            });\n          };\n        }\n\n        return stateTween;\n      };\n    }\n  }, {\n    key: \"update\",\n    value: function update(transition) {\n      if (!this.transitionData) {\n        this.transitionData = {};\n      }\n\n      this.init(getTransitionId(), transition);\n    }\n  }, {\n    key: \"init\",\n    value: function init(id, transition) {\n      var _this3 = this;\n\n      var n = transition.tweens.length;\n      var tweens = new Array(n);\n\n      var queue = function queue(elapsed) {\n        transition.status = 1;\n        transition.timer.restart(start, transition.timing.delay, transition.timing.time);\n\n        if (transition.timing.delay <= elapsed) {\n          start(elapsed - transition.timing.delay);\n        }\n      };\n\n      this.transitionData[id] = transition;\n      transition.timer = timer(queue, 0, transition.timing.time);\n\n      var start = function start(elapsed) {\n        if (transition.status !== 1) return stop();\n\n        for (var tid in _this3.transitionData) {\n          var t = _this3.transitionData[tid];\n\n          if (t.stateKey !== transition.stateKey) {\n            continue;\n          }\n\n          if (t.status === 3) {\n            return timeout(start);\n          }\n\n          if (t.status === 4) {\n            t.status = 6;\n            t.timer.stop();\n\n            if (t.events.interrupt) {\n              t.events.interrupt.call(_this3);\n            }\n\n            delete _this3.transitionData[tid];\n          } else if (+tid < id) {\n            t.status = 6;\n            t.timer.stop();\n            delete _this3.transitionData[tid];\n          }\n        }\n\n        timeout(function () {\n          if (transition.status === 3) {\n            transition.status = 4;\n            transition.timer.restart(tick, transition.timing.delay, transition.timing.time);\n            tick(elapsed);\n          }\n        });\n        transition.status = 2;\n\n        if (transition.events.start) {\n          transition.events.start.call(_this3);\n        }\n\n        if (transition.status !== 2) {\n          return;\n        }\n\n        transition.status = 3;\n        var j = -1;\n\n        for (var i = 0; i < n; ++i) {\n          var res = transition.tweens[i]();\n\n          if (res) {\n            tweens[++j] = res;\n          }\n        }\n\n        tweens.length = j + 1;\n      };\n\n      var tick = function tick(elapsed) {\n        var t = 1;\n\n        if (elapsed < transition.timing.duration) {\n          t = transition.timing.ease(elapsed / transition.timing.duration);\n        } else {\n          transition.timer.restart(stop);\n          transition.status = 5;\n        }\n\n        var i = -1;\n\n        while (++i < tweens.length) {\n          tweens[i](t);\n        }\n\n        if (transition.status === 5) {\n          if (transition.events.end) {\n            transition.events.end.call(_this3);\n          }\n\n          stop();\n        }\n      };\n\n      var stop = function stop() {\n        transition.status = 6;\n        transition.timer.stop();\n        delete _this3.transitionData[id];\n\n        for (var _ in _this3.transitionData) {\n          return;\n        }\n\n        delete _this3.transitionData;\n      };\n    }\n  }]);\n\n  return BaseNode;\n}();\n\nexport default BaseNode;","function mergeKeys(currNodeKeys, currKeyIndex, nextNodeKeys, nextKeyIndex) {\n  var allKeys = [];\n\n  for (var i = 0; i < nextNodeKeys.length; i++) {\n    allKeys[i] = nextNodeKeys[i];\n  }\n\n  for (var _i = 0; _i < currNodeKeys.length; _i++) {\n    if (nextKeyIndex[currNodeKeys[_i]] === undefined) {\n      allKeys.push(currNodeKeys[_i]);\n    }\n  }\n\n  return allKeys.sort(function (a, b) {\n    var nextOrderA = nextKeyIndex[a];\n    var nextOrderB = nextKeyIndex[b];\n    var currOrderA = currKeyIndex[a];\n    var currOrderB = currKeyIndex[b];\n\n    if (nextOrderA != null && nextOrderB != null) {\n      return nextKeyIndex[a] - nextKeyIndex[b];\n    } else if (currOrderA != null && currOrderB != null) {\n      return currKeyIndex[a] - currKeyIndex[b];\n    } else if (nextOrderA != null) {\n      for (var _i2 = 0; _i2 < nextNodeKeys.length; _i2++) {\n        var pivot = nextNodeKeys[_i2];\n\n        if (!currKeyIndex[pivot]) {\n          continue;\n        }\n\n        if (nextOrderA < nextKeyIndex[pivot] && currOrderB > currKeyIndex[pivot]) {\n          return -1;\n        } else if (nextOrderA > nextKeyIndex[pivot] && currOrderB < currKeyIndex[pivot]) {\n          return 1;\n        }\n      }\n\n      return 1;\n    }\n\n    for (var _i3 = 0; _i3 < nextNodeKeys.length; _i3++) {\n      var _pivot = nextNodeKeys[_i3];\n\n      if (!currKeyIndex[_pivot]) {\n        continue;\n      }\n\n      if (nextOrderB < nextKeyIndex[_pivot] && currOrderA > currKeyIndex[_pivot]) {\n        return 1;\n      } else if (nextOrderB > nextKeyIndex[_pivot] && currOrderA < currKeyIndex[_pivot]) {\n        return -1;\n      }\n    }\n\n    return -1;\n  });\n}\n\nexport default mergeKeys;","export var ENTER = 'ENTER';\nexport var UPDATE = 'UPDATE';\nexport var LEAVE = 'LEAVE';","export function numeric(beg, end) {\n  var a = +beg;\n  var b = +end - a;\n  return function (t) {\n    return a + b * t;\n  };\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { BaseNode, interval } from 'kapellmeister';\nimport mergeKeys from '../core/mergeKeys';\nimport { ENTER, UPDATE, LEAVE } from '../core/types';\nimport { numeric } from '../utils';\n\nvar NodeGroup = function (_Component) {\n  _inherits(NodeGroup, _Component);\n\n  var _super = _createSuper(NodeGroup);\n\n  function NodeGroup(props) {\n    var _this;\n\n    _classCallCheck(this, NodeGroup);\n\n    _this = _super.call(this, props);\n\n    _defineProperty(_assertThisInitialized(_this), \"animate\", function () {\n      var _this$state = _this.state,\n          nodeKeys = _this$state.nodeKeys,\n          nodeHash = _this$state.nodeHash;\n\n      if (_this.unmounting) {\n        return;\n      }\n\n      var pending = false;\n      var nextNodeKeys = [];\n      var length = nodeKeys.length;\n\n      for (var i = 0; i < length; i++) {\n        var k = nodeKeys[i];\n        var n = nodeHash[k];\n        var isTransitioning = n.isTransitioning();\n\n        if (isTransitioning) {\n          pending = true;\n        }\n\n        if (n.type === LEAVE && !isTransitioning) {\n          delete nodeHash[k];\n        } else {\n          nextNodeKeys.push(k);\n        }\n      }\n\n      if (!pending) {\n        _this.interval.stop();\n      }\n\n      _this.setState(function () {\n        return {\n          nodeKeys: nextNodeKeys,\n          nodes: nextNodeKeys.map(function (key) {\n            return nodeHash[key];\n          })\n        };\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"interval\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"unmounting\", false);\n\n    var interpolation = props.interpolation;\n\n    var Node = function (_BaseNode) {\n      _inherits(Node, _BaseNode);\n\n      var _super2 = _createSuper(Node);\n\n      function Node(key, data) {\n        var _this2;\n\n        _classCallCheck(this, Node);\n\n        _this2 = _super2.call(this);\n\n        _defineProperty(_assertThisInitialized(_this2), \"getInterpolator\", interpolation);\n\n        _this2.key = key;\n        _this2.data = data;\n        _this2.type = ENTER;\n        return _this2;\n      }\n\n      return Node;\n    }(BaseNode);\n\n    _this.state = {\n      Node: Node,\n      nodeKeys: [],\n      nodeHash: {},\n      nodes: [],\n      data: null\n    };\n    return _this;\n  }\n\n  _createClass(NodeGroup, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.startInterval();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (prevProps.data !== this.props.data && !this.unmounting) {\n        this.startInterval();\n      }\n    }\n  }, {\n    key: \"startInterval\",\n    value: function startInterval() {\n      if (!this.interval) {\n        this.interval = interval(this.animate);\n      } else {\n        this.interval.restart(this.animate);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var _this$state2 = this.state,\n          nodeKeys = _this$state2.nodeKeys,\n          nodeHash = _this$state2.nodeHash;\n      this.unmounting = true;\n\n      if (this.interval) {\n        this.interval.stop();\n      }\n\n      nodeKeys.forEach(function (key) {\n        nodeHash[key].stopTransitions();\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var renderedChildren = this.props.children(this.state.nodes);\n      return renderedChildren && React.Children.only(renderedChildren);\n    }\n  }], [{\n    key: \"getDerivedStateFromProps\",\n    value: function getDerivedStateFromProps(nextProps, prevState) {\n      if (nextProps.data !== prevState.data) {\n        var data = nextProps.data,\n            keyAccessor = nextProps.keyAccessor,\n            start = nextProps.start,\n            enter = nextProps.enter,\n            update = nextProps.update,\n            leave = nextProps.leave;\n        var Node = prevState.Node,\n            nodeKeys = prevState.nodeKeys,\n            nodeHash = prevState.nodeHash;\n        var keyIndex = {};\n\n        for (var i = 0; i < nodeKeys.length; i++) {\n          keyIndex[nodeKeys[i]] = i;\n        }\n\n        var nextKeyIndex = {};\n        var nextNodeKeys = [];\n\n        for (var _i = 0; _i < data.length; _i++) {\n          var d = data[_i];\n          var k = keyAccessor(d, _i);\n          nextKeyIndex[k] = _i;\n          nextNodeKeys.push(k);\n\n          if (keyIndex[k] === undefined) {\n            var node = new Node();\n            node.key = k;\n            node.data = d;\n            node.type = ENTER;\n            nodeHash[k] = node;\n          }\n        }\n\n        for (var _i2 = 0; _i2 < nodeKeys.length; _i2++) {\n          var _k = nodeKeys[_i2];\n          var n = nodeHash[_k];\n\n          if (nextKeyIndex[_k] !== undefined) {\n            n.data = data[nextKeyIndex[_k]];\n            n.type = UPDATE;\n          } else {\n            n.type = LEAVE;\n          }\n        }\n\n        var mergedNodeKeys = mergeKeys(nodeKeys, keyIndex, nextNodeKeys, nextKeyIndex);\n\n        for (var _i3 = 0; _i3 < mergedNodeKeys.length; _i3++) {\n          var _k2 = mergedNodeKeys[_i3];\n          var _n = nodeHash[_k2];\n          var _d = _n.data;\n\n          if (_n.type === ENTER) {\n            _n.setState(start(_d, nextKeyIndex[_k2]));\n\n            _n.transition(enter(_d, nextKeyIndex[_k2]));\n          } else if (_n.type === LEAVE) {\n            _n.transition(leave(_d, keyIndex[_k2]));\n          } else {\n            _n.transition(update(_d, nextKeyIndex[_k2]));\n          }\n        }\n\n        return {\n          data: data,\n          nodes: mergedNodeKeys.map(function (key) {\n            return nodeHash[key];\n          }),\n          nodeHash: nodeHash,\n          nodeKeys: mergedNodeKeys\n        };\n      }\n\n      return null;\n    }\n  }]);\n\n  return NodeGroup;\n}(Component);\n\nNodeGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  data: PropTypes.array.isRequired,\n  keyAccessor: PropTypes.func.isRequired,\n  interpolation: PropTypes.func,\n  start: PropTypes.func.isRequired,\n  enter: PropTypes.func,\n  update: PropTypes.func,\n  leave: PropTypes.func,\n  children: PropTypes.func.isRequired\n} : {};\nNodeGroup.defaultProps = {\n  enter: function enter() {},\n  update: function update() {},\n  leave: function leave() {},\n  interpolation: numeric\n};\nexport default NodeGroup;","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport NodeGroup from '../NodeGroup';\nimport { numeric } from '../utils';\n\nvar keyAccessor = function keyAccessor() {\n  return '$$key$$';\n};\n\nvar Animate = function (_Component) {\n  _inherits(Animate, _Component);\n\n  var _super = _createSuper(Animate);\n\n  function Animate() {\n    _classCallCheck(this, Animate);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Animate, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          show = _this$props.show,\n          start = _this$props.start,\n          enter = _this$props.enter,\n          update = _this$props.update,\n          leave = _this$props.leave,\n          interpolation = _this$props.interpolation,\n          children = _this$props.children;\n      var data = typeof start === 'function' ? start() : start;\n      return React.createElement(NodeGroup, {\n        data: show ? [data] : [],\n        start: function start() {\n          return data;\n        },\n        keyAccessor: keyAccessor,\n        interpolation: interpolation,\n        enter: typeof enter === 'function' ? enter : function () {\n          return enter;\n        },\n        update: typeof update === 'function' ? update : function () {\n          return update;\n        },\n        leave: typeof leave === 'function' ? leave : function () {\n          return leave;\n        }\n      }, function (nodes) {\n        if (!nodes[0]) {\n          return null;\n        }\n\n        var renderedChildren = children(nodes[0].state);\n        return renderedChildren && React.Children.only(renderedChildren);\n      });\n    }\n  }]);\n\n  return Animate;\n}(Component);\n\nAnimate.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  show: PropTypes.bool,\n  interpolation: PropTypes.func,\n  start: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n  enter: PropTypes.oneOfType([PropTypes.func, PropTypes.array, PropTypes.object]),\n  update: PropTypes.oneOfType([PropTypes.func, PropTypes.array, PropTypes.object]),\n  leave: PropTypes.oneOfType([PropTypes.func, PropTypes.array, PropTypes.object]),\n  children: PropTypes.func.isRequired\n} : {};\nAnimate.defaultProps = {\n  show: true,\n  interpolation: numeric\n};\nexport default Animate;","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { select } from \"d3-selection\"\nimport {\n    exposeInstanceOnWindow,\n    Bounds,\n    Time,\n    HorizontalAlign,\n    AxisAlign,\n    makeFigmaId,\n    dyFromAlign,\n} from \"@ourworldindata/utils\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ScaleType, VerticalAlign } from \"@ourworldindata/types\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FONT_SCALE_12,\n    FontSettings,\n} from \"../core/GrapherConstants\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport { HorizontalAxisZeroLine } from \"../axis/AxisViews\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport {\n    BAR_SPACING_FACTOR,\n    DISCRETE_BAR_STYLE,\n    DiscreteBarChartManager,\n    DiscreteBarSeries,\n    PlacedDiscreteBarSeries,\n    RenderDiscreteBarSeries,\n    SizedDiscreteBarSeries,\n} from \"./DiscreteBarChartConstants\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport {\n    HorizontalColorLegendManager,\n    HorizontalNumericColorLegend,\n} from \"../legend/HorizontalColorLegends\"\nimport { DiscreteBarChartState } from \"./DiscreteBarChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport {\n    makeProjectedDataPatternId,\n    enrichSeriesWithLabels,\n} from \"./DiscreteBarChartHelpers\"\nimport { SeriesLabel } from \"../seriesLabel/SeriesLabel.js\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { HorizontalAxis } from \"../axis/Axis\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\nimport type { BaseType, Selection } from \"d3-selection\"\nimport { NUMERIC_LEGEND_STYLE } from \"../lineCharts/LineChartConstants\"\nimport { resolveEmphasis } from \"../interaction/Emphasis.js\"\nimport { HashMap, NodeGroup } from \"react-move\"\nimport { easeQuadOut } from \"d3-ease\"\n\nconst DEFAULT_PROJECTED_DATA_COLOR_IN_LEGEND = \"#787878\"\n\n/** The gap between the entity label and the bar */\nconst GAP__ENTITY_LABEL__BAR = 5\n\n/** The gap between the the entity label and negative value label */\nconst GAP__ENTITY_LABEL__VALUE_LABEL = 10\n\n/** The vertical padding between the entity label and the annotation */\nconst ANNOTATION_PADDING = 2\n\nexport interface Label {\n    valueString: string\n    timeString: string\n    width: number\n}\n\nexport type DiscreteBarChartProps = ChartComponentProps<DiscreteBarChartState>\n\n@observer\nexport class DiscreteBarChart\n    extends React.Component<DiscreteBarChartProps>\n    implements ChartInterface, AxisManager, HorizontalColorLegendManager\n{\n    base = React.createRef<SVGGElement>()\n\n    constructor(props: DiscreteBarChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): DiscreteBarChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): DiscreteBarChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return (this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS).padRight(10)\n    }\n\n    @computed private get targetTime(): Time | undefined {\n        return this.manager.endTime\n    }\n\n    @computed private get legendPadding(): number {\n        return 0.5 * this.legendHeight\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get barCount(): number {\n        return this.series.length\n    }\n\n    @computed private get labelFontSize(): number {\n        const availableHeight = this.bounds.height / this.barCount\n        return Math.min(\n            GRAPHER_FONT_SCALE_12 * this.fontSize,\n            1.1 * availableHeight\n        )\n    }\n\n    @computed private get entityLabelStyle(): FontSettings {\n        return {\n            fontSize: this.labelFontSize,\n            fontWeight: 700,\n            lineHeight: 1,\n        }\n    }\n\n    @computed private get entityAnnotationStyle(): FontSettings {\n        return {\n            fontSize: this.labelFontSize * 0.9,\n            fontWeight: 300,\n            lineHeight: 1,\n        }\n    }\n\n    @computed get sizedSeries(): SizedDiscreteBarSeries[] {\n        return enrichSeriesWithLabels({\n            series: this.series,\n            availableHeightPerSeries: this.bounds.height / this.barCount,\n            minLabelWidth: 0.3 * this.bounds.width,\n            maxLabelWidth: 0.66 * this.bounds.width,\n            fontSettings: this.entityLabelStyle,\n            annotationFontSettings: this.entityAnnotationStyle,\n            showRegionTooltip: !this.manager.isStatic,\n        })\n    }\n\n    @computed private get valueLabelStyle(): FontSettings {\n        return { fontSize: this.labelFontSize, fontWeight: 400, lineHeight: 1 }\n    }\n\n    @computed private get hasPositive(): boolean {\n        return this.series.some((d) => d.value >= 0)\n    }\n\n    @computed private get hasNegative(): boolean {\n        return this.series.some((d) => d.value < 0)\n    }\n\n    // The amount of space we need to allocate for bar end labels on the right\n    @computed private get rightValueLabelsWidth(): number {\n        if (!this.hasPositive) return 0\n\n        const labelsWidths = this.series\n            .filter((series) => series.value >= 0)\n            .map((series) => this.formatValue(series).width)\n\n        return _.max(labelsWidths) ?? 0\n    }\n\n    @computed private get x0(): number {\n        return 0\n    }\n\n    // Now we can work out the main x axis scale\n    @computed private get xDomainDefault(): [number, number] {\n        const allValues = this.series.map((d) => d.value)\n        return [\n            Math.min(this.x0, _.min(allValues) as number),\n            Math.max(this.x0, _.max(allValues) as number),\n        ]\n    }\n\n    @computed private get xRange(): [number, number] {\n        return this.innerBounds.xRange()\n    }\n\n    // NB: y-axis settings are used for the horizontal axis in DiscreteBarChart\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(\n            {\n                // if we have a single-value x axis, we want to have the vertical axis\n                // on the left of the chart\n                singleValueAxisPointAlign: AxisAlign.start,\n                ...this.manager.yAxisConfig,\n            },\n            this\n        )\n    }\n\n    @computed get yAxis(): HorizontalAxis {\n        // NB: We use the user's YAxis options here to make the XAxis\n        const axis = this.yAxisConfig.toHorizontalAxis()\n        axis.updateDomainPreservingUserSettings(this.xDomainDefault)\n\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.chartState.formatColumn\n        axis.range = this.xRange\n        axis.label = \"\"\n        return axis\n    }\n\n    /**\n     * The maximum width needed for labels positioned on the left side of the chart.\n     *\n     * For positive values, returns the width of entity labels and annotations.\n     * For negative values, returns the entity label width, annotation width, value label width\n     * and the padding between them.\n     */\n    @computed private get leftLabelsWidth(): number {\n        const labelWidths = this.sizedSeries.map((series) => {\n            const labelWidth = series.label?.width ?? 0\n            const annotationWidth = series.annotationTextWrap?.width ?? 0\n\n            // Use the maximum width between label and annotation\n            const textWidth = Math.max(labelWidth, annotationWidth)\n\n            if (series.value < 0) {\n                const valueWidth = this.formatValue(series).width\n                return textWidth + valueWidth + GAP__ENTITY_LABEL__VALUE_LABEL\n            } else {\n                return textWidth\n            }\n        })\n\n        return _.max(labelWidths) ?? 0\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.bounds\n            .padTop(\n                this.showColorLegend\n                    ? this.legendHeight + this.legendPadding\n                    : 0\n            )\n            .padLeft(this.leftLabelsWidth)\n            .padRight(this.rightValueLabelsWidth)\n    }\n\n    /** The total height of the series, i.e. the height of the bar + the white space around it */\n    @computed private get seriesHeight(): number {\n        return this.innerBounds.height / this.barCount\n    }\n\n    @computed private get barSpacing(): number {\n        return this.seriesHeight * BAR_SPACING_FACTOR\n    }\n\n    @computed private get barHeight(): number {\n        const totalWhiteSpace = this.barCount * this.barSpacing\n        return (this.innerBounds.height - totalWhiteSpace) / this.barCount\n    }\n\n    @computed private get barPlacements(): { x: number; width: number }[] {\n        const { series, yAxis } = this\n        return series.map((d) => {\n            const isNegative = d.value < 0\n            const barX = isNegative\n                ? yAxis.place(d.value)\n                : yAxis.place(this.x0)\n            const barWidth = isNegative\n                ? yAxis.place(this.x0) - barX\n                : yAxis.place(d.value) - barX\n\n            return { x: barX, width: barWidth }\n        })\n    }\n\n    @computed private get barWidths(): number[] {\n        return this.barPlacements.map((b) => b.width)\n    }\n\n    @computed private get placedSeries(): PlacedDiscreteBarSeries[] {\n        const yOffset =\n            this.innerBounds.top + this.barHeight / 2 + this.barSpacing / 2\n        return this.sizedSeries.map((series, index) => {\n            const barY = yOffset + index * (this.barHeight + this.barSpacing)\n            const isNegative = series.value < 0\n            const barX = isNegative\n                ? this.yAxis.place(series.value)\n                : this.yAxis.place(this.x0)\n            const barWidth = isNegative\n                ? this.yAxis.place(this.x0) - barX\n                : this.yAxis.place(series.value) - barX\n            const label = this.formatValue(series)\n\n            const entityLabelX = isNegative\n                ? barX - label.width - GAP__ENTITY_LABEL__VALUE_LABEL\n                : barX - GAP__ENTITY_LABEL__BAR\n            const valueLabelX =\n                this.yAxis.place(series.value) +\n                (isNegative ? -GAP__ENTITY_LABEL__BAR : GAP__ENTITY_LABEL__BAR)\n\n            const annotationHeight = series.annotationTextWrap\n                ? ANNOTATION_PADDING + series.annotationTextWrap.height\n                : 0\n            const totalLabelHeight = series.label.height + annotationHeight\n\n            const entityLabelY = barY - totalLabelHeight / 2\n            const annotationY = series.annotationTextWrap\n                ? entityLabelY + series.label.height + ANNOTATION_PADDING\n                : undefined\n\n            return {\n                ...series,\n                barX,\n                barY,\n                barWidth,\n                entityLabelX,\n                entityLabelY,\n                annotationY,\n                valueLabelX,\n            }\n        })\n    }\n\n    @computed private get renderSeries(): RenderDiscreteBarSeries[] {\n        return this.placedSeries.map((series) => {\n            const emphasis = resolveEmphasis({ focus: series.focus })\n            return { ...series, emphasis }\n        })\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n\n    private d3Bars(): Selection<\n        BaseType,\n        unknown,\n        SVGGElement | null,\n        unknown\n    > {\n        return select(this.base.current).selectAll(\"rect.bar\")\n    }\n\n    private animateBarWidth(): void {\n        this.d3Bars()\n            .transition()\n            .attr(\"width\", (_, i) => this.barWidths[i])\n    }\n\n    formatValue(series: DiscreteBarSeries): Label {\n        const { yColumn } = series\n\n        const showYearLabels =\n            this.manager.showYearLabels || series.time !== this.targetTime\n        const valueString = yColumn.formatValueShort(series.value)\n        let timeString = \"\"\n        if (showYearLabels) {\n            const { timeColumn } = this.chartState.transformedTable\n            const preposition = OwidTable.getPreposition(timeColumn)\n            timeString = ` ${preposition} ${timeColumn.formatTime(series.time)}`\n        }\n\n        const labelBounds = Bounds.forText(\n            valueString + timeString,\n            this.valueLabelStyle\n        )\n\n        return {\n            valueString,\n            timeString,\n            width: labelBounds.width,\n        }\n    }\n\n    private renderBar({\n        series,\n        barY,\n        yOffset,\n    }: {\n        series: RenderDiscreteBarSeries\n        barY: number\n        yOffset: number\n    }): React.ReactElement {\n        const barColor = series.isProjection\n            ? `url(#${makeProjectedDataPatternId(series.color)})`\n            : series.color\n\n        return (\n            <rect\n                key={`bar-${series.seriesName}`}\n                id={makeFigmaId(series.seriesName)}\n                x={0}\n                y={0}\n                transform={`translate(${series.barX}, ${barY + yOffset})`}\n                width={series.barWidth}\n                height={this.barHeight}\n                fill={barColor}\n                opacity={DISCRETE_BAR_STYLE[series.emphasis].barOpacity}\n                style={{ transition: \"height 200ms ease\" }}\n            />\n        )\n    }\n\n    private renderEntityLabel({\n        series,\n        barY,\n        labelY,\n    }: {\n        series: RenderDiscreteBarSeries\n        barY: number\n        labelY: number\n    }): React.ReactElement | null {\n        if (!series.label) return null\n\n        return (\n            <SeriesLabel\n                state={series.label}\n                x={series.entityLabelX}\n                y={barY + labelY}\n                opacity={DISCRETE_BAR_STYLE[series.emphasis].labelOpacity}\n            />\n        )\n    }\n\n    private renderEntityAnnotation({\n        series,\n        barY,\n        annotationY,\n    }: {\n        series: RenderDiscreteBarSeries\n        barY: number\n        annotationY: number | undefined\n    }): React.ReactElement | null {\n        if (!series.annotationTextWrap || annotationY === undefined) {\n            return null\n        }\n\n        return (\n            <g key={`annotation-${series.seriesName}`}>\n                {series.annotationTextWrap.renderSVG(\n                    series.entityLabelX,\n                    barY + annotationY,\n                    {\n                        textProps: {\n                            fill: \"#333\",\n                            textAnchor: \"end\",\n                            opacity:\n                                DISCRETE_BAR_STYLE[series.emphasis]\n                                    .labelOpacity,\n                        },\n                    }\n                )}\n            </g>\n        )\n    }\n\n    private renderValueLabel({\n        series,\n        label,\n        barY,\n        labelY,\n    }: {\n        series: RenderDiscreteBarSeries\n        label: Label\n        barY: number\n        labelY: number\n    }): React.ReactElement {\n        return (\n            <text\n                key={`value-label-${series.seriesName}`}\n                x={0}\n                y={0}\n                transform={`translate(${series.valueLabelX}, ${barY + labelY})`}\n                fill={GRAPHER_DARK_TEXT}\n                dy={dyFromAlign(VerticalAlign.middle)}\n                textAnchor={series.value < 0 ? \"end\" : \"start\"}\n                opacity={DISCRETE_BAR_STYLE[series.emphasis].labelOpacity}\n                fontSize={this.valueLabelStyle.fontSize}\n                fontWeight={this.valueLabelStyle.fontWeight}\n            >\n                {label.valueString}\n                <tspan fill=\"#999\">{label.timeString}</tspan>\n            </text>\n        )\n    }\n\n    private renderBars(): React.ReactElement {\n        const yOffset = -this.barHeight / 2\n        return (\n            <g id={makeFigmaId(\"bars\")}>\n                {this.renderSeries.map((series) =>\n                    this.renderBar({ series, barY: series.barY, yOffset })\n                )}\n            </g>\n        )\n    }\n\n    private renderEntityLabels(): React.ReactElement {\n        return (\n            <g id={makeFigmaId(\"entity-labels\")}>\n                {this.renderSeries.map((series) => {\n                    const labelY = series.entityLabelY - series.barY\n                    return (\n                        <React.Fragment\n                            key={`entity-label-${series.seriesName}`}\n                        >\n                            {this.renderEntityLabel({\n                                series,\n                                barY: series.barY,\n                                labelY,\n                            })}\n                        </React.Fragment>\n                    )\n                })}\n            </g>\n        )\n    }\n\n    private renderEntityAnnotations(): React.ReactElement | null {\n        const hasAnnotations = this.renderSeries.some(\n            (series) =>\n                series.annotationTextWrap && series.annotationY !== undefined\n        )\n\n        if (!hasAnnotations) return null\n\n        return (\n            <g id={makeFigmaId(\"entity-annotations\")}>\n                {this.renderSeries.map((series) => {\n                    const annotationY = series.annotationY\n                        ? series.annotationY - series.barY\n                        : undefined\n                    return this.renderEntityAnnotation({\n                        series,\n                        barY: series.barY,\n                        annotationY,\n                    })\n                })}\n            </g>\n        )\n    }\n\n    private renderValueLabels(): React.ReactElement {\n        return (\n            <g id={makeFigmaId(\"value-labels\")}>\n                {this.renderSeries.map((series) => {\n                    const label = this.formatValue(series)\n                    const labelY = 0 // Value label is centered on the bar\n                    return this.renderValueLabel({\n                        series,\n                        label,\n                        barY: series.barY,\n                        labelY,\n                    })\n                })}\n            </g>\n        )\n    }\n\n    private renderDefs(): React.ReactElement | null {\n        const projections = this.series.filter((series) => series.isProjection)\n        const uniqProjections = _.uniqBy(projections, (series) => series.color)\n        if (projections.length === 0) return null\n\n        return (\n            <defs>\n                {/* passed to the legend as pattern for the projected data legend item */}\n                <StripedProjectedDataPattern\n                    patternId={makeProjectedDataPatternId(\n                        this.projectedDataColorInLegend\n                    )}\n                    color={this.projectedDataColorInLegend}\n                />\n                {/* make a pattern for every series with a unique color */}\n                {uniqProjections.map((series) => (\n                    <StripedProjectedDataPattern\n                        key={series.color}\n                        patternId={makeProjectedDataPatternId(series.color)}\n                        color={series.color}\n                    />\n                ))}\n            </defs>\n        )\n    }\n\n    private renderRow({\n        series,\n        state,\n    }: {\n        series: RenderDiscreteBarSeries\n        state: { translateY: number }\n    }): React.ReactElement {\n        return (\n            <g\n                key={`row-${series.seriesName}`}\n                transform={`translate(0, ${state.translateY})`}\n            >\n                {this.renderBar({\n                    series,\n                    barY: 0,\n                    yOffset: -this.barHeight / 2,\n                })}\n                {this.renderEntityLabel({\n                    series,\n                    barY: 0,\n                    labelY: series.entityLabelY - series.barY,\n                })}\n                {this.renderEntityAnnotation({\n                    series,\n                    barY: 0,\n                    annotationY: series.annotationY\n                        ? series.annotationY - series.barY\n                        : undefined,\n                })}\n                {this.renderValueLabel({\n                    series,\n                    label: this.formatValue(series),\n                    barY: 0,\n                    labelY: 0,\n                })}\n            </g>\n        )\n    }\n\n    private renderAnimatedBars(): React.ReactElement {\n        const handlePositionUpdate = (d: RenderDiscreteBarSeries): HashMap => ({\n            translateY: [d.barY],\n            timing: { duration: 350, ease: easeQuadOut },\n        })\n\n        return (\n            <NodeGroup\n                data={this.renderSeries}\n                keyAccessor={(d: RenderDiscreteBarSeries): string =>\n                    d.seriesName\n                }\n                start={handlePositionUpdate}\n                update={handlePositionUpdate}\n            >\n                {(nodes): React.ReactElement => (\n                    <g id={makeFigmaId(\"bar-rows\")}>\n                        {nodes.map((node) =>\n                            this.renderRow({\n                                series: node.data,\n                                state: node.state,\n                            })\n                        )}\n                    </g>\n                )}\n            </NodeGroup>\n        )\n    }\n\n    private renderLegend(): React.ReactElement | null {\n        if (!this.showColorLegend) return null\n\n        return <HorizontalNumericColorLegend manager={this} />\n    }\n\n    private renderAxis(): React.ReactElement {\n        return (\n            <HorizontalAxisZeroLine\n                horizontalAxis={this.yAxis}\n                bounds={this.innerBounds}\n                strokeWidth={0.5}\n                // If the chart doesn't have negative values, then we\n                // move the zero line a little to the left to avoid\n                // overlap with the bars\n                align={\n                    this.hasNegative\n                        ? HorizontalAlign.center\n                        : HorizontalAlign.right\n                }\n            />\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderDefs()}\n                {this.renderLegend()}\n                {this.renderAxis()}\n                {this.renderBars()}\n                {this.renderValueLabels()}\n                {this.renderEntityLabels()}\n                {this.renderEntityAnnotations()}\n            </>\n        )\n    }\n\n    private renderInteractive(): React.ReactElement {\n        return (\n            <g ref={this.base} id={makeFigmaId(\"discrete-bar-chart\")}>\n                {this.renderDefs()}\n                {this.renderLegend()}\n                {this.renderAxis()}\n                {this.renderAnimatedBars()}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n\n    // Color legend props\n\n    @computed private get hasColorLegend(): boolean {\n        return this.chartState.hasColorScale || this.chartState.hasProjectedData\n    }\n\n    @computed private get showColorLegend(): boolean {\n        return this.hasColorLegend && !!this.manager.showLegend\n    }\n\n    @computed get legendX(): number {\n        return this.bounds.x\n    }\n\n    @computed get legendMaxWidth(): number {\n        return this.bounds.width\n    }\n\n    @computed get legendAlign(): HorizontalAlign {\n        return HorizontalAlign.center\n    }\n\n    // TODO just pass colorScale to legend and let it figure it out?\n    @computed get numericLegendData(): ColorScaleBin[] {\n        const legendBins = this.chartState.colorScale.legendBins.slice()\n\n        // Show a \"Projected data\" legend item with a striped pattern if appropriate\n        if (this.chartState.hasProjectedData) {\n            legendBins.push(\n                new CategoricalBin({\n                    color: this.projectedDataColorInLegend,\n                    label: \"Projected data\",\n                    index: 0,\n                    value: \"projected\",\n                    patternRef: makeProjectedDataPatternId(\n                        this.projectedDataColorInLegend\n                    ),\n                })\n            )\n        }\n\n        // Move CategoricalBins to end\n        return _.sortBy(legendBins, (bin) => bin instanceof CategoricalBin)\n    }\n\n    @computed private get projectedDataColorInLegend(): string {\n        // if a single color is in use, use that color in the legend\n        if (_.uniqBy(this.series, \"color\").length === 1)\n            return this.series[0].color\n        return DEFAULT_PROJECTED_DATA_COLOR_IN_LEGEND\n    }\n\n    // Used when the bars are colored by a numeric scale\n    numericLegendStyleConfig = NUMERIC_LEGEND_STYLE\n\n    @computed get externalLegend(): HorizontalColorLegendManager | undefined {\n        if (this.hasColorLegend) {\n            return {\n                numericLegendData: this.numericLegendData,\n                numericLegendStyleConfig: this.numericLegendStyleConfig,\n            }\n        }\n        return undefined\n    }\n\n    @computed get numericBinSize(): number {\n        return 0.625 * this.fontSize\n    }\n\n    legendTickSize = 1\n\n    @computed private get numericLegend():\n        | HorizontalNumericColorLegend\n        | undefined {\n        return this.manager.showLegend\n            ? new HorizontalNumericColorLegend({ manager: this })\n            : undefined\n    }\n\n    @computed get numericLegendY(): number {\n        return this.bounds.top\n    }\n\n    @computed get legendTitle(): string | undefined {\n        return this.chartState.hasColorScale\n            ? this.chartState.colorScale.legendDescription\n            : undefined\n    }\n\n    @computed get legendHeight(): number {\n        return this.numericLegend?.height ?? 0\n    }\n\n    // End of color legend props\n\n    @computed private get series(): DiscreteBarSeries[] {\n        return this.chartState.series\n    }\n}\n\nfunction StripedProjectedDataPattern({\n    patternId,\n    color,\n    opacity = 0.5,\n    size = 7,\n    strokeWidth = 10,\n}: {\n    patternId: string\n    color: string\n    opacity?: number\n    size?: number\n    strokeWidth?: number\n}): React.ReactElement {\n    return (\n        <pattern\n            id={patternId}\n            patternUnits=\"userSpaceOnUse\"\n            width={size}\n            height={size}\n            patternTransform=\"rotate(45)\"\n        >\n            {/* semi-transparent background */}\n            <rect width={size} height={size} fill={color} opacity={opacity} />\n\n            {/* stripes */}\n            <line\n                x1=\"0\"\n                y1=\"0\"\n                x2=\"0\"\n                y2={size}\n                stroke={color}\n                strokeWidth={strokeWidth}\n            />\n        </pattern>\n    )\n}\n","import { OwidVariableRow, SeriesName, Time } from \"@ourworldindata/types\"\nimport { ChartSeries } from \"../chart/ChartInterface\"\nimport {\n    GRAPHER_AREA_OPACITY_DEFAULT,\n    GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n    GRAPHER_AREA_OPACITY_MUTED,\n} from \"../core/GrapherConstants\"\nimport { Point } from \"@ourworldindata/utils\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\n\nconst opacityByEmphasis: Record<Emphasis, number> = {\n    [Emphasis.Default]: GRAPHER_AREA_OPACITY_DEFAULT,\n    [Emphasis.Highlighted]: GRAPHER_AREA_OPACITY_HIGHLIGHTED,\n    [Emphasis.Muted]: GRAPHER_AREA_OPACITY_MUTED,\n} as const\n\nexport interface StackedAreaStyleConfig {\n    fillOpacity: number\n    borderOpacity: number\n    borderWidth: number\n}\n\nexport interface StackedBarStyleConfig {\n    opacity: number\n}\n\nexport const STACKED_AREA_STYLE: Record<Emphasis, StackedAreaStyleConfig> = {\n    [Emphasis.Default]: {\n        fillOpacity: opacityByEmphasis.default,\n        borderOpacity: 0.7,\n        borderWidth: 0.5,\n    },\n    [Emphasis.Highlighted]: {\n        fillOpacity: opacityByEmphasis.highlighted,\n        borderOpacity: 1,\n        borderWidth: 1.5,\n    },\n    [Emphasis.Muted]: {\n        fillOpacity: opacityByEmphasis.muted,\n        borderOpacity: 0.3,\n        borderWidth: 0.5,\n    },\n}\n\nexport const STACKED_BAR_STYLE: Record<Emphasis, StackedBarStyleConfig> = {\n    [Emphasis.Default]: { opacity: opacityByEmphasis.default },\n    [Emphasis.Highlighted]: { opacity: opacityByEmphasis.highlighted },\n    [Emphasis.Muted]: { opacity: opacityByEmphasis.muted },\n}\n\nexport const LEGEND_STYLE_FOR_STACKED_CHARTS: LegendStyleConfig = {\n    marker: {\n        default: { opacity: opacityByEmphasis.default },\n        highlighted: { opacity: opacityByEmphasis.highlighted },\n        muted: { opacity: opacityByEmphasis.muted },\n    },\n    text: {\n        muted: { opacity: opacityByEmphasis.muted },\n    },\n}\n\n/** Either categorical (e.g. country names), or ordinal (e.g. years)  */\nexport type StackedPointPositionType = string | number\n\nexport interface StackedPoint<PositionType extends StackedPointPositionType> {\n    position: PositionType\n    value: number\n    valueOffset: number\n    time: number\n    formattedTime?: string\n    color?: string\n    missing?: boolean\n    interpolated?: boolean\n}\n\nexport interface PlacedStackedPoint<\n    PositionType extends StackedPointPositionType,\n> extends StackedPoint<PositionType> {\n    x: number\n    y: number\n    barWidth: number\n    barHeight: number\n}\n\nexport interface StackedRawSeries<\n    PositionType extends StackedPointPositionType,\n> {\n    seriesName: SeriesName\n    isProjection?: boolean\n    rows: OwidVariableRow<PositionType>[]\n    focus: InteractionState\n    shortEntityName?: string\n}\n\nexport interface StackedSeries<\n    PositionType extends StackedPointPositionType,\n> extends ChartSeries {\n    points: StackedPoint<PositionType>[]\n    columnSlug?: string\n    isProjection?: boolean\n    isAllZeros?: boolean\n    shortEntityName?: string\n    focus?: InteractionState\n}\n\nexport interface PlacedStackedBarSeries<\n    PositionType extends StackedPointPositionType,\n> extends StackedSeries<PositionType> {\n    placedPoints: PlacedStackedPoint<PositionType>[]\n}\n\nexport interface PlacedStackedAreaSeries<\n    PositionType extends StackedPointPositionType,\n> extends StackedSeries<PositionType> {\n    /** Top edge border of the area */\n    placedPoints: Point[]\n    /** Points defining the filled area polygon */\n    areaPoints: Point[]\n}\n\nexport interface RenderStackedBarSeries<\n    PositionType extends StackedPointPositionType,\n> extends PlacedStackedBarSeries<PositionType> {\n    emphasis?: Emphasis\n    hover?: InteractionState\n    hoverTime?: Time\n}\n\nexport interface RenderStackedAreaSeries<\n    PositionType extends StackedPointPositionType,\n> extends PlacedStackedAreaSeries<PositionType> {\n    emphasis?: Emphasis\n    hover?: InteractionState\n}\n","import * as React from \"react\"\nimport {\n    pointsToPath,\n    makeSafeForCSS,\n    makeFigmaId,\n} from \"@ourworldindata/utils\"\nimport { SeriesName, Time } from \"@ourworldindata/types\"\nimport { rgb } from \"d3-color\"\nimport { STACKED_AREA_STYLE, RenderStackedAreaSeries } from \"./StackedConstants\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\n\nexport function StackedAreas({\n    series,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    series: RenderStackedAreaSeries<Time>[]\n    onMouseEnter?: (seriesName: SeriesName) => void\n    onMouseLeave?: () => void\n}): React.ReactElement {\n    return (\n        <g className=\"Areas\" id={makeFigmaId(\"stacked-areas\")}>\n            <g id={makeFigmaId(\"areas\")}>\n                {series.map((series) => (\n                    <Area\n                        key={series.seriesName}\n                        series={series}\n                        onMouseEnter={onMouseEnter}\n                        onMouseLeave={onMouseLeave}\n                    />\n                ))}\n            </g>\n            <g id={makeFigmaId(\"borders\")}>\n                {series.map((series) => (\n                    <Border\n                        key={series.seriesName}\n                        series={series}\n                        onMouseEnter={onMouseEnter}\n                        onMouseLeave={onMouseLeave}\n                    />\n                ))}\n            </g>\n        </g>\n    )\n}\n\nfunction Area({\n    series,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    series: RenderStackedAreaSeries<Time>\n    onMouseEnter?: (seriesName: SeriesName) => void\n    onMouseLeave?: () => void\n}): React.ReactElement {\n    const style = STACKED_AREA_STYLE[series.emphasis ?? Emphasis.Default]\n\n    return (\n        <path\n            id={makeFigmaId(series.seriesName)}\n            className={makeSafeForCSS(series.seriesName) + \"-area\"}\n            key={series.seriesName + \"-area\"}\n            strokeLinecap=\"round\"\n            d={pointsToPath(series.areaPoints)}\n            fill={series.color}\n            fillOpacity={style.fillOpacity}\n            onMouseEnter={(): void => {\n                onMouseEnter?.(series.seriesName)\n            }}\n            onMouseLeave={(): void => {\n                onMouseLeave?.()\n            }}\n        />\n    )\n}\n\nfunction Border({\n    series,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    series: RenderStackedAreaSeries<Time>\n    onMouseEnter?: (seriesName: SeriesName) => void\n    onMouseLeave?: () => void\n}): React.ReactElement {\n    const style = STACKED_AREA_STYLE[series.emphasis ?? Emphasis.Default]\n\n    return (\n        <path\n            id={makeFigmaId(series.seriesName)}\n            className={makeSafeForCSS(series.seriesName) + \"-border\"}\n            key={series.seriesName + \"-border\"}\n            strokeLinecap=\"round\"\n            d={pointsToPath(series.placedPoints)}\n            stroke={rgb(series.color).darker(0.5).toString()}\n            strokeOpacity={style.borderOpacity}\n            strokeWidth={style.borderWidth}\n            fill=\"none\"\n            onMouseEnter={(): void => {\n                onMouseEnter?.(series.seriesName)\n            }}\n            onMouseLeave={(): void => {\n                onMouseLeave?.()\n            }}\n        />\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport * as R from \"remeda\"\nimport {\n    getRelativeMouse,\n    excludeUndefined,\n    isMobile,\n    Bounds,\n    guid,\n    exposeInstanceOnWindow,\n} from \"@ourworldindata/utils\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { SeriesName, SeriesStrategy, Time } from \"@ourworldindata/types\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport { observer } from \"mobx-react\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { VerticalLabels } from \"../verticalLabels/VerticalLabels\"\nimport { VerticalLabelsState } from \"../verticalLabels/VerticalLabelsState\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport { TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport {\n    Tooltip,\n    TooltipState,\n    TooltipTable,\n    makeTooltipRoundingNotice,\n    toTooltipTableColumns,\n} from \"../tooltip/Tooltip\"\nimport { StackedAreaChartState } from \"./StackedAreaChartState.js\"\nimport {\n    LEGEND_STYLE_FOR_STACKED_CHARTS,\n    PlacedStackedAreaSeries,\n    RenderStackedAreaSeries,\n    STACKED_AREA_STYLE,\n    StackedSeries,\n} from \"./StackedConstants\"\nimport {\n    makeClipPath,\n    isTargetOutsideElement,\n    getHoverStateForSeries,\n} from \"../chart/ChartUtils\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig.js\"\nimport { LabelSeries } from \"../verticalLabels/VerticalLabelsTypes\"\nimport { Emphasis, resolveEmphasis } from \"../interaction/Emphasis\"\nimport { easeLinear } from \"d3-ease\"\nimport { select, type BaseType, type Selection } from \"d3-selection\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { StackedAreas } from \"./StackedAreas\"\nimport { HorizontalColorLegendManager } from \"../legend/HorizontalColorLegends\"\nimport { CategoricalBin } from \"../color/ColorScaleBin\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { resolveCollision, toPlacedStackedAreaSeries } from \"./StackedUtils\"\n\nconst STACKED_AREA_CHART_CLASS_NAME = \"StackedArea\"\n\nexport type StackedAreaChartProps = ChartComponentProps<StackedAreaChartState>\n\n@observer\nexport class StackedAreaChart\n    extends React.Component<StackedAreaChartProps>\n    implements ChartInterface, AxisManager\n{\n    private tooltipState = new TooltipState<{\n        index: number // time-index into points array\n        series?: SeriesName\n    }>({ fade: \"immediate\" })\n\n    private hoveredLabelSeriesName: SeriesName | undefined = undefined\n    private hoverTimer: number | undefined = undefined\n\n    constructor(props: StackedAreaChartProps) {\n        super(props)\n\n        makeObservable<\n            StackedAreaChart,\n            \"tooltipState\" | \"hoveredLabelSeriesName\"\n        >(this, {\n            tooltipState: observable,\n            hoveredLabelSeriesName: observable,\n        })\n    }\n\n    @computed get chartState(): StackedAreaChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): ChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed private get renderUid(): number {\n        return guid()\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get detailsOrderedByReference(): string[] {\n        return this.manager.detailsOrderedByReference ?? []\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return (\n            this.bounds\n                .padRight(this.paddingForLegendRight)\n                // top padding leaves room for tick labels\n                .padTop(6)\n                // bottom padding avoids axis labels to be cut off at some resolutions\n                .padBottom(2)\n        )\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        const { horizontalAxisPart, verticalAxisPart } = this\n        return new DualAxis({\n            bounds: this.innerBounds,\n            horizontalAxis: horizontalAxisPart,\n            verticalAxis: verticalAxisPart,\n            comparisonLines: this.manager.comparisonLines,\n        })\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = { nice: true }\n        return new AxisConfig({ ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const custom = { hideGridlines: true }\n        return new AxisConfig({ ...custom, ...xAxisConfig }, this)\n    }\n\n    private hoverStateForSeries(series: StackedSeries<Time>): InteractionState {\n        return getHoverStateForSeries(series, {\n            isHoverModeActive: this.isHoverModeActive,\n            hoveredSeriesNames: excludeUndefined([this.hoveredSeriesName]),\n        })\n    }\n\n    @computed private get verticalLabelsSeries(): LabelSeries[] {\n        const isEntityStrategy =\n            this.chartState.seriesStrategy === SeriesStrategy.entity\n\n        return this.series\n            .map((series, index) => ({\n                color: series.color,\n                seriesName: series.seriesName,\n                label:\n                    isEntityStrategy && series.shortEntityName\n                        ? series.shortEntityName\n                        : series.seriesName,\n                yValue: this.chartState.midpoints[index],\n                isAllZeros: series.isAllZeros,\n                emphasis: resolveEmphasis({\n                    hover: this.hoverStateForSeries(series),\n                    focus: series.focus,\n                }),\n            }))\n            .filter((series) => !series.isAllZeros)\n            .toReversed()\n    }\n\n    @computed private get maxVerticalLabelsWidth(): number {\n        return Math.min(150, this.bounds.width / 3)\n    }\n\n    @computed private get showLegend(): boolean {\n        return (\n            !!this.manager.showSeriesLabels && !this.manager.useMinimalLabeling\n        )\n    }\n\n    @computed private get verticalLabelsState(): VerticalLabelsState {\n        return new VerticalLabelsState(this.verticalLabelsSeries, {\n            maxWidth: this.maxVerticalLabelsWidth,\n            fontSize: this.fontSize,\n            yAxis: () => this.yAxis,\n            yRange: () => this.verticalLabelsYRange,\n            seriesNamesSortedByImportance: this.seriesSortedByImportance,\n            showRegionTooltip: !this.isStatic,\n        })\n    }\n\n    @computed private get verticalLabelsWidth(): number {\n        if (!this.showLegend) return 0\n        return this.verticalLabelsState.stableWidth\n    }\n\n    @action.bound private onAreaMouseEnter(seriesName: SeriesName): void {\n        this.chartState.focusArray.clear()\n        if (this.tooltipState.target) {\n            _.extend(this.tooltipState.target, { series: seriesName })\n        } else {\n            this.tooltipState.target = {\n                index: 0, // might be incorrect but will be updated immediately by the move event handler\n                series: seriesName,\n            }\n        }\n    }\n\n    @action.bound private onAreaMouseLeave(): void {\n        _.extend(this.tooltipState.target, { series: undefined })\n    }\n\n    @computed private get paddingForLegendRight(): number {\n        return this.verticalLabelsWidth\n    }\n\n    @computed get externalLegend(): HorizontalColorLegendManager | undefined {\n        if (!this.showLegend) {\n            const categoricalLegendData = this.chartState.unstackedSeries\n                .map(\n                    (series, index) =>\n                        new CategoricalBin({\n                            index,\n                            value: series.seriesName,\n                            label: series.seriesName,\n                            color: series.color,\n                        })\n                )\n                .toReversed()\n\n            return {\n                categoricalLegendData,\n                legendStyleConfig: LEGEND_STYLE_FOR_STACKED_CHARTS,\n            }\n        }\n        return undefined\n    }\n\n    @computed private get seriesSortedByImportance(): string[] {\n        return this.series\n            .toSorted(\n                (s1: StackedSeries<Time>, s2: StackedSeries<Time>): number => {\n                    const PREFER_S1 = -1\n                    const PREFER_S2 = 1\n\n                    if (!s1) return PREFER_S2\n                    if (!s2) return PREFER_S1\n\n                    const picked = resolveCollision(s1, s2)\n                    if (picked === s1) return PREFER_S1\n                    if (picked === s2) return PREFER_S2\n\n                    return 0\n                }\n            )\n            .map((s) => s.seriesName)\n    }\n\n    @action.bound private onVerticalLabelMouseEnter(\n        seriesName: SeriesName\n    ): void {\n        this.chartState.focusArray.clear()\n        clearTimeout(this.hoverTimer)\n        this.hoveredLabelSeriesName = seriesName\n    }\n\n    @action.bound private clearVerticalLabelHover(): void {\n        this.hoveredLabelSeriesName = undefined\n    }\n\n    @action.bound private debouncedClearVerticalLabelHover(): void {\n        clearTimeout(this.hoverTimer)\n\n        // Wait before clearing selection in case the mouse is moving\n        // quickly over neighboring labels\n        this.hoverTimer = window.setTimeout(() => {\n            this.clearVerticalLabelHover()\n        }, 200)\n    }\n\n    @action.bound private onVerticalLabelMouseLeave(): void {\n        this.debouncedClearVerticalLabelHover()\n    }\n\n    @computed private get facetLegendHoveredSeriesName():\n        | SeriesName\n        | undefined {\n        const { externalLegendHoverBin } = this.manager\n        if (!externalLegendHoverBin) return undefined\n        // stacked area charts can't plot the same entity or column multiple times,\n        // so we just find the first series that matches the hovered legend item\n        const hoveredSeries = this.chartState.rawSeries.find((series) =>\n            externalLegendHoverBin.contains(series.seriesName)\n        )\n        return hoveredSeries?.seriesName\n    }\n\n    @computed private get hoveredSeriesName(): SeriesName | undefined {\n        return (\n            // If the chart area is hovered\n            this.tooltipState.target?.series ??\n            // If a label is hovered\n            this.hoveredLabelSeriesName ??\n            // If the facet legend is hovered\n            this.facetLegendHoveredSeriesName\n        )\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            !!this.hoveredSeriesName ||\n            // If the external legend is hovered, we want to mute\n            // all non-hovered series even if the chart doesn't plot\n            // the currently hovered series\n            !!this.manager.externalLegendHoverBin\n        )\n    }\n\n    @action.bound private onCursorMove(\n        ev: React.MouseEvent<SVGGElement> | React.TouchEvent<SVGElement>\n    ): void {\n        const ref = this.base.current,\n            parentRef = this.manager.base?.current\n\n        // the tooltip's origin needs to be in the parent's coordinates\n        if (parentRef) {\n            this.tooltipState.position = getRelativeMouse(parentRef, ev)\n        }\n\n        if (!ref) return undefined\n\n        const { series } = this\n        const mouse = getRelativeMouse(ref, ev.nativeEvent)\n        const boxPadding = isMobile() ? 44 : 25\n\n        // expand the box width, so it's easier to see the tooltip for the first & last timepoints\n        const boundedBox = this.dualAxis.innerBounds.expand({\n            left: boxPadding,\n            right: boxPadding,\n        })\n\n        let hoveredIndex\n        if (boundedBox.contains(mouse)) {\n            const invertedX = this.dualAxis.horizontalAxis.invert(mouse.x)\n            const closestPoint = _.minBy(series[0].points, (d) =>\n                Math.abs(d.position - invertedX)\n            )\n            if (closestPoint) {\n                const index = series[0].points.indexOf(closestPoint)\n                hoveredIndex = index\n            }\n        }\n        this.tooltipState.target =\n            hoveredIndex === undefined\n                ? null\n                : {\n                      index: hoveredIndex,\n                      series: this.tooltipState.target?.series,\n                  }\n    }\n\n    @action.bound private dismissTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onCursorLeave(): void {\n        if (!this.manager.shouldPinTooltipToBottom) {\n            this.dismissTooltip()\n        }\n        this.hoveredLabelSeriesName = undefined\n    }\n\n    @computed private get activeXVerticalLine():\n        | React.ReactElement\n        | undefined {\n        const { dualAxis, series } = this\n        const { horizontalAxis, verticalAxis } = dualAxis\n        const hoveredPointIndex = this.tooltipState.target?.index\n        if (hoveredPointIndex === undefined) return undefined\n\n        const xPoint = series[0].points[hoveredPointIndex]\n        if (xPoint === undefined) return undefined\n\n        return (\n            // Disable pointer events to avoid interfering with enter/leave tracking of areas\n            <g className=\"hoverIndicator\" style={{ pointerEvents: \"none\" }}>\n                {series.map((series) => {\n                    const point = series.points[hoveredPointIndex]\n                    if (\n                        !point ||\n                        point.missing ||\n                        point.interpolated ||\n                        point.value === 0\n                    )\n                        return null\n\n                    return (\n                        <circle\n                            key={series.seriesName}\n                            cx={horizontalAxis.place(point.position)}\n                            cy={verticalAxis.place(\n                                point.value + point.valueOffset\n                            )}\n                            r={2}\n                            fill={series.color}\n                        />\n                    )\n                })}\n                <line\n                    x1={horizontalAxis.place(xPoint.position)}\n                    y1={verticalAxis.range[0]}\n                    x2={horizontalAxis.place(xPoint.position)}\n                    y2={verticalAxis.range[1]}\n                    stroke=\"rgba(180,180,180,.4)\"\n                />\n            </g>\n        )\n    }\n\n    @computed private get tooltipId(): number {\n        return this.renderUid\n    }\n\n    @computed private get isTooltipActive(): boolean {\n        return this.manager.tooltip?.get()?.id === this.tooltipId\n    }\n\n    @computed private get tooltip(): React.ReactElement | undefined {\n        const { target, position, fading } = this.tooltipState\n        if (!target) return undefined\n\n        // Grab the first value to get the year from\n        const { series } = this\n        const hoveredPointIndex = target.index\n        const bottomSeriesPoint = series[0].points[hoveredPointIndex]\n        if (!bottomSeriesPoint) return undefined\n\n        const formatColumn = this.chartState.formatColumn,\n            formattedTime = formatColumn.formatTime(bottomSeriesPoint.position),\n            { displayUnit } = formatColumn\n\n        const title = formattedTime\n        const titleAnnotation = this.xAxis.label ? `(${this.xAxis.label})` : \"\"\n\n        const lastStackedPoint = R.last(series)!.points[hoveredPointIndex]\n        if (!lastStackedPoint) return undefined\n        const totalValue = lastStackedPoint.value + lastStackedPoint.valueOffset\n\n        const roundingNotice = formatColumn.roundsToSignificantFigures\n            ? {\n                  icon: TooltipFooterIcon.None,\n                  text: makeTooltipRoundingNotice([\n                      formatColumn.numSignificantFigures,\n                  ]),\n              }\n            : undefined\n        const footer = excludeUndefined([roundingNotice])\n\n        return (\n            <Tooltip\n                id={this.tooltipId}\n                tooltipManager={this.manager}\n                x={position.x}\n                y={position.y}\n                offsetY={-16}\n                offsetX={20}\n                offsetXDirection=\"left\"\n                style={{ maxWidth: \"50%\" }}\n                title={title}\n                titleAnnotation={titleAnnotation}\n                subtitle={displayUnit}\n                subtitleFormat=\"unit\"\n                footer={footer}\n                dissolve={fading}\n                dismiss={this.dismissTooltip}\n            >\n                <TooltipTable\n                    columns={toTooltipTableColumns(formatColumn)}\n                    totals={[totalValue]}\n                    rows={series.toReversed().map((series) => {\n                        const { seriesName: name, color, points } = series\n                        const point = points[hoveredPointIndex]\n                        const focused = name === target.series\n                        const values = [\n                            point?.missing || point?.interpolated\n                                ? undefined\n                                : point?.value,\n                        ]\n\n                        const emphasis = focused\n                            ? Emphasis.Highlighted\n                            : Emphasis.Default\n                        const opacity = STACKED_AREA_STYLE[emphasis].fillOpacity\n\n                        const swatch = { color, opacity }\n\n                        return {\n                            name,\n                            swatch,\n                            focused,\n                            values,\n                        }\n                    })}\n                />\n            </Tooltip>\n        )\n    }\n\n    @action.bound onDocumentClick(e: MouseEvent): void {\n        // only dismiss the tooltip if the click is outside of the chart area\n        // and outside of the chart areas of neighbouring facets\n        const chartContainer = this.manager.base?.current\n        if (!chartContainer) return\n        const chartAreas: Element[] = Array.from(\n            chartContainer.getElementsByClassName(STACKED_AREA_CHART_CLASS_NAME)\n        )\n        const isTargetOutsideChartAreas = chartAreas.every((chartArea) =>\n            isTargetOutsideElement(e.target!, chartArea)\n        )\n        if (isTargetOutsideChartAreas) {\n            this.dismissTooltip()\n        }\n    }\n\n    animSelection?: Selection<BaseType, unknown, SVGGElement | null, unknown>\n\n    base = React.createRef<SVGGElement>()\n    override componentDidMount(): void {\n        document.addEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n\n        if (!this.manager.disableIntroAnimation) {\n            // Fancy intro animation\n            this.animSelection = select(this.base.current)\n                .selectAll(\"clipPath > rect\")\n                .attr(\"width\", 0)\n\n            this.animSelection\n                .transition()\n                .duration(800)\n                .ease(easeLinear)\n                .attr(\"width\", this.bounds.width)\n                .on(\"end\", () => this.forceUpdate()) // Important in case bounds changes during transition\n        }\n        exposeInstanceOnWindow(this)\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"click\", this.onDocumentClick, {\n            capture: true,\n        })\n\n        if (this.animSelection) this.animSelection.interrupt()\n    }\n\n    renderAxis(): React.ReactElement {\n        const { manager } = this\n        return (\n            <DualAxisComponent\n                dualAxis={this.dualAxis}\n                showTickMarks={true}\n                detailsMarker={manager.detailsMarkerInSvg}\n                backgroundColor={this.manager.backgroundColor}\n            />\n        )\n    }\n\n    renderVerticalLabels(): React.ReactElement | undefined {\n        if (!this.showLegend) return\n        return (\n            <VerticalLabels\n                state={this.verticalLabelsState}\n                x={this.verticalLabelsX}\n                onMouseEnter={this.onVerticalLabelMouseEnter}\n                onMouseLeave={this.onVerticalLabelMouseLeave}\n                interactive={!this.isStatic}\n            />\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderAxis()}\n                {this.renderVerticalLabels()}\n                <StackedAreas series={this.renderSeries} />\n            </>\n        )\n    }\n\n    renderInteractive(): React.ReactElement {\n        const { bounds, dualAxis, renderUid } = this\n\n        const clipPath = makeClipPath({\n            renderUid,\n            box: {\n                ...bounds,\n                height: bounds.height * 2,\n                x: dualAxis.innerBounds.x,\n            },\n        })\n\n        return (\n            <g\n                ref={this.base}\n                className={STACKED_AREA_CHART_CLASS_NAME}\n                onMouseLeave={this.onCursorLeave}\n                onTouchEnd={this.onCursorLeave}\n                onTouchCancel={this.onCursorLeave}\n                onMouseMove={this.onCursorMove}\n                onTouchStart={this.onCursorMove}\n                onTouchMove={this.onCursorMove}\n            >\n                {clipPath.element}\n                <rect {...this.bounds.toProps()} fillOpacity=\"0\">\n                    {/* This <rect> ensures that the parent <g> is big enough such that we get mouse hover events for the\n                    whole charting area, including the axis, the entity labels, and the whitespace next to them.\n                    We need these to be able to show the tooltip for the first/last year even if the mouse is outside the charting area. */}\n                </rect>\n                {this.renderAxis()}\n                <g clipPath={clipPath.id}>\n                    {this.renderVerticalLabels()}\n                    <StackedAreas\n                        series={this.renderSeries}\n                        onMouseEnter={this.onAreaMouseEnter}\n                        onMouseLeave={this.onAreaMouseLeave}\n                    />\n                </g>\n                {this.isTooltipActive && this.activeXVerticalLine}\n                {this.tooltip}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <g>\n                    {this.renderAxis()}\n                    <NoDataModal\n                        manager={this.manager}\n                        bounds={this.dualAxis.bounds}\n                        message={this.chartState.errorInfo.reason}\n                    />\n                </g>\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n\n    @computed private get verticalLabelsX(): number {\n        return this.showLegend\n            ? this.bounds.right - this.verticalLabelsWidth\n            : 0\n    }\n\n    @computed private get verticalLabelsYRange(): [number, number] {\n        return [this.bounds.top, this.bounds.bottom]\n    }\n\n    @computed private get series(): readonly StackedSeries<Time>[] {\n        return this.chartState.series\n    }\n\n    @computed private get placedSeries(): PlacedStackedAreaSeries<Time>[] {\n        return toPlacedStackedAreaSeries(this.series, this.dualAxis)\n    }\n\n    @computed private get renderSeries(): RenderStackedAreaSeries<Time>[] {\n        return this.placedSeries.map((series) => {\n            const hover = this.hoverStateForSeries(series)\n            const emphasis = resolveEmphasis({ hover, focus: series.focus })\n            return { ...series, hover, emphasis }\n        })\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { makeFigmaId } from \"@ourworldindata/utils\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    GRAPHER_FONT_SCALE_11_2,\n    BASE_FONT_SIZE,\n} from \"../core/GrapherConstants\"\nimport { ColorScaleBin, NumericBin } from \"../color/ColorScaleBin\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\nimport {\n    LegendStyleConfig,\n    LegendMarkerStyle,\n    LegendTextStyle,\n} from \"./LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\n\nexport interface VerticalColorLegendManager {\n    maxLegendWidth?: number\n    fontSize?: number\n    categoricalLegendData: ColorScaleBin[]\n    legendTitle?: string\n    onLegendMouseOver?: (bin: ColorScaleBin) => void\n    onLegendClick?: (bin: ColorScaleBin) => void\n    onLegendMouseLeave?: () => void\n    legendX?: number\n    legendY?: number\n    isStatic?: boolean\n    resolveLegendBinEmphasis?: (bin: ColorScaleBin) => Emphasis\n    legendStyleConfig?: LegendStyleConfig\n    categoricalLegendStyleConfig?: LegendStyleConfig\n}\n\ninterface SizedLegendSeries {\n    bin: ColorScaleBin\n    textWrap: TextWrap\n    width: number\n    height: number\n    yOffset: number\n}\n\n@observer\nexport class VerticalColorLegend extends React.Component<{\n    manager: VerticalColorLegendManager\n}> {\n    constructor(props: { manager: VerticalColorLegendManager }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get manager(): VerticalColorLegendManager {\n        return this.props.manager\n    }\n\n    @computed private get maxLegendWidth(): number {\n        return this.manager.maxLegendWidth ?? 100\n    }\n\n    @computed private get fontSize(): number {\n        return (\n            GRAPHER_FONT_SCALE_11_2 * (this.manager.fontSize ?? BASE_FONT_SIZE)\n        )\n    }\n    @computed private get rectSize(): number {\n        return Math.round(this.fontSize / 1.4)\n    }\n\n    private rectPadding = 5\n    private lineHeight = 5\n\n    @computed private get title(): TextWrap | undefined {\n        if (!this.manager.legendTitle) return undefined\n        return new TextWrap({\n            maxWidth: this.maxLegendWidth,\n            fontSize: this.fontSize,\n            fontWeight: 700,\n            lineHeight: 1,\n            text: this.manager.legendTitle,\n            separators: [\" \", \"-\"],\n        })\n    }\n\n    @computed private get titleHeight(): number {\n        if (!this.title) return 0\n        return this.title.height + 5\n    }\n\n    @computed private get series(): SizedLegendSeries[] {\n        const {\n            manager,\n            fontSize,\n            rectSize,\n            rectPadding,\n            titleHeight,\n            lineHeight,\n        } = this\n\n        let runningYOffset = titleHeight\n        return manager.categoricalLegendData.map((bin) => {\n            // Get label, inferring from minText/maxText for numeric bins if needed\n            let label = bin.text\n            if (\n                !label &&\n                bin instanceof NumericBin &&\n                bin.minText &&\n                bin.maxText\n            ) {\n                label = `${bin.minText} – ${bin.maxText}`\n            }\n\n            const textWrap = new TextWrap({\n                maxWidth: this.maxLegendWidth,\n                fontSize,\n                lineHeight: 1,\n                text: label,\n                separators: [\" \", \"-\"],\n            })\n            const width = rectSize + rectPadding + textWrap.width\n            const height = Math.max(textWrap.height, rectSize)\n            const yOffset = runningYOffset\n\n            runningYOffset += height + lineHeight\n\n            return { bin, textWrap, width, height, yOffset }\n        })\n    }\n\n    @computed get width(): number {\n        const widths = this.series.map((series) => series.width)\n        if (this.title) widths.push(this.title.width)\n        return _.max(widths) ?? 0\n    }\n\n    @computed get height(): number {\n        return (\n            this.titleHeight +\n            _.sum(this.series.map((series) => series.height)) +\n            this.lineHeight * this.series.length\n        )\n    }\n\n    @computed get legendX(): number {\n        return this.manager.legendX ?? 0\n    }\n\n    @computed get legendY(): number {\n        return this.manager.legendY ?? 0\n    }\n\n    @computed private get legendStyleConfig(): LegendStyleConfig | undefined {\n        return (\n            this.manager.categoricalLegendStyleConfig ??\n            this.manager.legendStyleConfig\n        )\n    }\n\n    private getBinState(bin: ColorScaleBin): Emphasis {\n        return this.manager.resolveLegendBinEmphasis?.(bin) ?? Emphasis.Default\n    }\n\n    private getTextStyleConfig(bin: ColorScaleBin): LegendTextStyle {\n        const state = this.getBinState(bin)\n        const styleConfig = this.legendStyleConfig?.text\n        const defaultStyle = styleConfig?.default\n        const currentStyle = styleConfig?.[state]\n        return { color: GRAPHER_DARK_TEXT, ...defaultStyle, ...currentStyle }\n    }\n\n    private getMarkerStyleConfig(bin: ColorScaleBin): LegendMarkerStyle {\n        const state = this.getBinState(bin)\n        const styleConfig = this.legendStyleConfig?.marker\n        const defaultStyle = styleConfig?.default\n        const currentStyle = styleConfig?.[state]\n        return { fill: bin.color, ...defaultStyle, ...currentStyle }\n    }\n\n    renderLabels(): React.ReactElement {\n        const { series, rectSize, rectPadding } = this\n\n        return (\n            <g id={makeFigmaId(\"labels\")}>\n                {series.map((series) => {\n                    const style = this.getTextStyleConfig(series.bin)\n\n                    const textX = this.legendX + rectSize + rectPadding\n                    const textY = this.legendY + series.yOffset\n\n                    return (\n                        <React.Fragment key={series.textWrap.text}>\n                            {series.textWrap.renderSVG(textX, textY, {\n                                textProps: { fill: style.color, ...style },\n                            })}\n                        </React.Fragment>\n                    )\n                })}\n            </g>\n        )\n    }\n\n    renderSwatches(): React.ReactElement {\n        const { series, rectSize, rectPadding } = this\n\n        return (\n            <g id={makeFigmaId(\"swatches\")}>\n                {series.map((series) => {\n                    const style = this.getMarkerStyleConfig(series.bin)\n\n                    const textX = this.legendX + rectSize + rectPadding\n                    const textY = this.legendY + series.yOffset\n                    const renderedTextPosition =\n                        series.textWrap.getPositionForSvgRendering(textX, textY)\n\n                    return (\n                        <rect\n                            id={makeFigmaId(series.textWrap.text)}\n                            key={series.textWrap.text}\n                            x={this.legendX}\n                            y={renderedTextPosition[1] - rectSize}\n                            width={rectSize}\n                            height={rectSize}\n                            style={style}\n                        />\n                    )\n                })}\n            </g>\n        )\n    }\n\n    renderInteractiveElements(): React.ReactElement {\n        const { series, manager, lineHeight } = this\n        const { onLegendClick, onLegendMouseOver, onLegendMouseLeave } = manager\n        return (\n            <g>\n                {series.map((series) => {\n                    const label = series.textWrap.text\n                    const mouseOver = onLegendMouseOver\n                        ? (): void => onLegendMouseOver(series.bin)\n                        : undefined\n                    const mouseLeave = onLegendMouseLeave || undefined\n                    const click = onLegendClick\n                        ? (): void => onLegendClick(series.bin)\n                        : undefined\n\n                    const cursor = click ? \"pointer\" : \"default\"\n\n                    return (\n                        <g\n                            key={label}\n                            className=\"legendMark\"\n                            onMouseOver={mouseOver}\n                            onMouseLeave={mouseLeave}\n                            onClick={click}\n                            style={{ cursor }}\n                        >\n                            <rect\n                                x={this.legendX}\n                                y={\n                                    this.legendY +\n                                    series.yOffset -\n                                    lineHeight / 2\n                                }\n                                width={series.width}\n                                height={series.height + lineHeight}\n                                fill=\"#fff\"\n                                fillOpacity={0}\n                            />\n                        </g>\n                    )\n                })}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return (\n            <g\n                id={makeFigmaId(\"vertical-color-legend\")}\n                className=\"ScatterColorLegend clickable\"\n            >\n                {this.title &&\n                    this.title.renderSVG(this.legendX, this.legendY, {\n                        textProps: {\n                            fontWeight: 700,\n                        },\n                    })}\n                {this.renderLabels()}\n                {this.renderSwatches()}\n                {!this.manager.isStatic && this.renderInteractiveElements()}\n            </g>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { Time } from \"@ourworldindata/types\"\nimport {\n    PlacedStackedPoint,\n    RenderStackedBarSeries,\n    STACKED_BAR_STYLE,\n} from \"./StackedConstants\"\nimport { makeFigmaId, makeSafeForCSS } from \"@ourworldindata/utils\"\nimport { Emphasis } from \"../interaction/Emphasis\"\n\nexport function StackedBars({\n    series,\n    onMouseOver,\n    onMouseLeave,\n}: {\n    series: readonly RenderStackedBarSeries<Time>[]\n    onMouseOver?: (\n        bar: PlacedStackedPoint<Time>,\n        series: RenderStackedBarSeries<Time>\n    ) => void\n    onMouseLeave?: () => void\n}): React.ReactElement {\n    return (\n        <>\n            {series.map((series, index) => (\n                <g\n                    key={index}\n                    id={makeFigmaId(series.seriesName)}\n                    className={makeSafeForCSS(series.seriesName) + \"-segments\"}\n                >\n                    {series.placedPoints.map((bar, index) => {\n                        if (bar.missing) return null\n\n                        const isHovered = bar.time === series.hoverTime\n                        const emphasis = isHovered\n                            ? Emphasis.Highlighted\n                            : (series.emphasis ?? Emphasis.Default)\n                        const barOpacity = STACKED_BAR_STYLE[emphasis].opacity\n\n                        return (\n                            <rect\n                                key={index}\n                                id={makeFigmaId(bar.formattedTime)}\n                                x={bar.x}\n                                y={bar.y}\n                                width={bar.barWidth}\n                                height={bar.barHeight}\n                                fill={bar.color ?? series.color}\n                                opacity={barOpacity}\n                                onMouseOver={() => onMouseOver?.(bar, series)}\n                                onMouseLeave={() => onMouseLeave?.()}\n                            />\n                        )\n                    })}\n                </g>\n            ))}\n        </>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    Time,\n    getRelativeMouse,\n    excludeUndefined,\n    makeFigmaId,\n    guid,\n    exposeInstanceOnWindow,\n} from \"@ourworldindata/utils\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport {\n    VerticalColorLegend,\n    VerticalColorLegendManager,\n} from \"../legend/VerticalColorLegend\"\nimport { TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport {\n    Tooltip,\n    TooltipState,\n    TooltipTable,\n    makeTooltipRoundingNotice,\n    toTooltipTableColumns,\n} from \"../tooltip/Tooltip\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport { StackedBarChartState } from \"./StackedBarChartState.js\"\nimport {\n    LEGEND_STYLE_FOR_STACKED_CHARTS,\n    StackedPoint,\n    StackedSeries,\n    PlacedStackedBarSeries,\n    RenderStackedBarSeries,\n    STACKED_BAR_STYLE,\n} from \"./StackedConstants\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { Color, HorizontalAlign, SeriesName } from \"@ourworldindata/types\"\nimport { makeClipPath, getHoverStateForSeries } from \"../chart/ChartUtils\"\nimport { InteractionState } from \"../interaction/InteractionState\"\nimport { resolveEmphasis, Emphasis } from \"../interaction/Emphasis\"\nimport {\n    HorizontalCategoricalColorLegend,\n    HorizontalColorLegendManager,\n} from \"../legend/HorizontalColorLegends\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig.js\"\nimport { easeLinear } from \"d3-ease\"\nimport { select, type BaseType, type Selection } from \"d3-selection\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { StackedBars } from \"./StackedBars\"\nimport {\n    getXAxisConfigDefaultsForStackedBar,\n    toPlacedStackedBarSeries,\n} from \"./StackedUtils\"\n\nexport type StackedBarChartProps = ChartComponentProps<StackedBarChartState>\n\n@observer\nexport class StackedBarChart\n    extends React.Component<StackedBarChartProps>\n    implements\n        ChartInterface,\n        AxisManager,\n        VerticalColorLegendManager,\n        HorizontalColorLegendManager\n{\n    readonly minBarSpacing = 4\n\n    constructor(props: StackedBarChartProps) {\n        super(props)\n\n        makeObservable(this, {\n            legendHoverColor: observable,\n            tooltipState: observable,\n        })\n    }\n\n    /** Currently hovered legend color */\n    legendHoverColor: Color | undefined = undefined\n\n    tooltipState = new TooltipState<{\n        bar: StackedPoint<Time>\n        series: StackedSeries<Time>\n    }>()\n\n    legendStyleConfig = LEGEND_STYLE_FOR_STACKED_CHARTS\n\n    @computed get chartState(): StackedBarChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): ChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed private get renderUid(): number {\n        return guid()\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get detailsOrderedByReference(): string[] {\n        return this.manager.detailsOrderedByReference ?? []\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return (\n            this.bounds\n                .padTop(this.paddingForLegendTop)\n                .padRight(this.paddingForLegendRight)\n                // top padding leaves room for tick labels\n                .padTop(6)\n                // bottom padding avoids axis labels to be cut off at some resolutions\n                .padBottom(2)\n        )\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        const { horizontalAxisPart, verticalAxisPart } = this\n        return new DualAxis({\n            bounds: this.innerBounds,\n            horizontalAxis: horizontalAxisPart,\n            verticalAxis: verticalAxisPart,\n            comparisonLines: this.manager.comparisonLines,\n        })\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = { nice: true }\n        return new AxisConfig({ ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const defaults = getXAxisConfigDefaultsForStackedBar(this.chartState)\n        return new AxisConfig({ ...defaults, ...xAxisConfig }, this)\n    }\n\n    @computed\n    get allStackedPoints(): readonly StackedPoint<number>[] {\n        return this.series.flatMap((series) => series.points)\n    }\n\n    @computed private get showHorizontalLegend(): boolean {\n        return !!(this.manager.isSemiNarrow || this.manager.isStaticAndSmall)\n    }\n\n    @computed get legendAlign(): HorizontalAlign {\n        return HorizontalAlign.left\n    }\n\n    @computed private get paddingForLegendRight(): number {\n        return this.showHorizontalLegend\n            ? 0\n            : this.sidebarWidth > 0\n              ? this.sidebarWidth + 20\n              : 0\n    }\n\n    @computed private get paddingForLegendTop(): number {\n        return this.showHorizontalLegend\n            ? this.horizontalColorLegend.height + 8\n            : 0\n    }\n\n    /** Series names matching the currently hovered legend item in the color legend */\n    @computed private get legendHoveredSeriesNames(): SeriesName[] {\n        const { legendHoverColor } = this\n\n        if (!legendHoverColor) return []\n\n        return _.uniq(\n            this.series\n                .filter((g) => g.color === legendHoverColor)\n                .map((g) => g.seriesName)\n        )\n    }\n\n    /** Series names matching the currently hovered legend item in the external facet legend */\n    @computed private get externalLegendHoveredSeriesNames(): SeriesName[] {\n        const { externalLegendHoverBin } = this.manager\n\n        if (!externalLegendHoverBin) return []\n\n        return this.chartState.rawSeries\n            .map((g) => g.seriesName)\n            .filter((name) => externalLegendHoverBin.contains(name))\n    }\n\n    @computed private get hoveredSeriesNames(): SeriesName[] {\n        return _.uniq([\n            ...this.legendHoveredSeriesNames,\n            ...this.externalLegendHoveredSeriesNames,\n        ])\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            this.hoveredSeriesNames.length > 0 ||\n            !!this.manager.externalLegendHoverBin\n        )\n    }\n\n    private hoverStateForSeries(series: StackedSeries<Time>): InteractionState {\n        return getHoverStateForSeries(series, {\n            hoveredSeriesNames: this.hoveredSeriesNames,\n            isHoverModeActive: this.isHoverModeActive,\n        })\n    }\n\n    /** All colors that are currently hovered or focused */\n    @computed get activeColors(): string[] {\n        const hoveredSeriesNamesSet = new Set(this.hoveredSeriesNames)\n        const hoveredColors = this.series\n            .filter((g) => hoveredSeriesNamesSet.has(g.seriesName))\n            .map((g) => g.color)\n\n        const focusedColors = this.series\n            .filter((g) => g.focus?.active)\n            .map((g) => g.color)\n\n        const activeColors = _.uniq(\n            excludeUndefined([...focusedColors, ...hoveredColors])\n        )\n\n        return activeColors\n    }\n\n    resolveLegendBinEmphasis(bin: ColorScaleBin): Emphasis {\n        const isActive = this.activeColors?.includes(bin.color)\n\n        if (this.activeColors.length === 0) return Emphasis.Default\n\n        return isActive ? Emphasis.Highlighted : Emphasis.Muted\n    }\n\n    @computed get categoricalLegendData(): CategoricalBin[] {\n        return this.series\n            .map(\n                (series, index) =>\n                    new CategoricalBin({\n                        index,\n                        value: series.seriesName,\n                        label: series.seriesName,\n                        color: series.color,\n                    })\n            )\n            .toReversed() // Vertical legend orders things in the opposite direction we want\n    }\n\n    @computed get legendWidth(): number {\n        return this.showHorizontalLegend\n            ? this.bounds.width\n            : this.verticalColorLegend.width\n    }\n\n    @computed get maxLegendWidth(): number {\n        return this.showHorizontalLegend\n            ? this.bounds.width\n            : this.sidebarMaxWidth\n    }\n\n    @computed private get sidebarMaxWidth(): number {\n        return this.bounds.width / 5\n    }\n\n    @computed private get sidebarMinWidth(): number {\n        return 100\n    }\n\n    @computed private get showLegend(): boolean {\n        return !!this.manager.showLegend\n    }\n\n    @computed private get sidebarWidth(): number {\n        if (!this.showLegend) return 0\n        const {\n            sidebarMinWidth,\n            sidebarMaxWidth,\n            verticalColorLegend: legendDimensions,\n        } = this\n        return Math.max(\n            Math.min(legendDimensions.width, sidebarMaxWidth),\n            sidebarMinWidth\n        )\n    }\n\n    @computed private get verticalColorLegend(): VerticalColorLegend {\n        return new VerticalColorLegend({ manager: this })\n    }\n\n    @computed\n    private get horizontalColorLegend(): HorizontalCategoricalColorLegend {\n        return new HorizontalCategoricalColorLegend({ manager: this })\n    }\n\n    @computed get externalLegend(): HorizontalColorLegendManager | undefined {\n        if (!this.showLegend) {\n            const categoricalLegendData = this.chartState.unstackedSeries\n                .map(\n                    (series, index) =>\n                        new CategoricalBin({\n                            index,\n                            value: series.seriesName,\n                            label: series.seriesName,\n                            color: series.color,\n                        })\n                )\n                .toReversed()\n\n            return {\n                categoricalLegendData,\n                legendStyleConfig: this.legendStyleConfig,\n            }\n        }\n        return undefined\n    }\n\n    @computed private get tooltip(): React.ReactElement | undefined {\n        const {\n            tooltipState: { target, position, fading },\n            series,\n        } = this\n        const { formatColumn } = this.chartState\n\n        const { bar: hoverBar, series: hoverSeries } = target ?? {}\n        let hoverTime: number\n        if (hoverBar !== undefined) {\n            hoverTime = hoverBar.position\n        } else return\n\n        const title = formatColumn.formatTime(hoverTime)\n        const titleAnnotation = this.xAxis.label ? `(${this.xAxis.label})` : \"\"\n\n        const { displayUnit } = formatColumn\n\n        const totalValue = _.sum(\n            series.map(\n                ({ points }) =>\n                    points.find((bar) => bar.position === hoverTime)?.value ?? 0\n            )\n        )\n\n        const roundingNotice = formatColumn.roundsToSignificantFigures\n            ? {\n                  icon: TooltipFooterIcon.None,\n                  text: makeTooltipRoundingNotice([\n                      formatColumn.numSignificantFigures,\n                  ]),\n              }\n            : undefined\n        const footer = excludeUndefined([roundingNotice])\n\n        const hoverPoints = series.map((series) => {\n            const point = series.points.find(\n                (bar) => bar.position === hoverTime\n            )\n            return {\n                seriesName: series.seriesName,\n                seriesColor: series.color,\n                point,\n            }\n        })\n        const [positivePoints, negativePoints] = _.partition(\n            hoverPoints,\n            ({ point }) => (point?.value ?? 0) >= 0\n        )\n        const sortedHoverPoints = [\n            ...positivePoints.toReversed(),\n            ...negativePoints,\n        ]\n\n        return (\n            <Tooltip\n                id={this.renderUid}\n                tooltipManager={this.manager}\n                x={position.x}\n                y={position.y}\n                style={{ maxWidth: \"500px\" }}\n                offsetX={20}\n                offsetY={-16}\n                title={title}\n                titleAnnotation={titleAnnotation}\n                subtitle={displayUnit}\n                subtitleFormat=\"unit\"\n                footer={footer}\n                dissolve={fading}\n                dismiss={() => (this.tooltipState.target = null)}\n            >\n                <TooltipTable\n                    columns={toTooltipTableColumns(formatColumn)}\n                    totals={[totalValue]}\n                    rows={sortedHoverPoints.map(\n                        ({ point, seriesName: name, seriesColor }) => {\n                            const focused = hoverSeries?.seriesName === name\n                            const fake = point?.missing || point?.interpolated\n                            const blurred = fake ?? true\n                            const values = [fake ? undefined : point?.value]\n\n                            const color = point?.color ?? seriesColor\n                            const emphasis = focused\n                                ? Emphasis.Highlighted\n                                : Emphasis.Default\n                            const opacity = STACKED_BAR_STYLE[emphasis].opacity\n                            const swatch = { color, opacity }\n\n                            return { name, swatch, blurred, focused, values }\n                        }\n                    )}\n                />\n            </Tooltip>\n        )\n    }\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        this.chartState.focusArray.clear()\n        this.legendHoverColor = bin.color\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.legendHoverColor = undefined\n    }\n\n    @action.bound onBarMouseOver(\n        bar: StackedPoint<Time>,\n        series: StackedSeries<Time>\n    ): void {\n        this.chartState.focusArray.clear()\n        this.tooltipState.target = { bar, series }\n    }\n\n    @action.bound private onMouseMove(ev: React.MouseEvent): void {\n        const ref = this.manager.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, ev)\n        }\n    }\n\n    @action.bound onBarMouseLeave(): void {\n        this.tooltipState.target = null\n    }\n\n    renderLegend(): React.ReactElement | undefined {\n        const { showLegend, showHorizontalLegend } = this\n\n        if (!showLegend) return\n\n        return showHorizontalLegend ? (\n            <HorizontalCategoricalColorLegend manager={this} />\n        ) : (\n            <VerticalColorLegend manager={this} />\n        )\n    }\n\n    renderAxis(): React.ReactElement {\n        const { manager } = this\n\n        return (\n            <DualAxisComponent\n                dualAxis={this.dualAxis}\n                showTickMarks={true}\n                detailsMarker={manager.detailsMarkerInSvg}\n                backgroundColor={this.manager.backgroundColor}\n            />\n        )\n    }\n\n    renderBars(): React.ReactElement {\n        return (\n            <StackedBars\n                series={this.renderSeries}\n                onMouseOver={this.onBarMouseOver}\n                onMouseLeave={this.onBarMouseLeave}\n            />\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderAxis()}\n                <g id={makeFigmaId(\"bars\")}>{this.renderBars()}</g>\n                {this.renderLegend()}\n            </>\n        )\n    }\n\n    renderInteractive(): React.ReactElement {\n        const { dualAxis, renderUid, bounds } = this\n        const { innerBounds } = dualAxis\n\n        const clipPath = makeClipPath({\n            renderUid: renderUid,\n            box: innerBounds,\n        })\n\n        return (\n            <g\n                width={bounds.width}\n                height={bounds.height}\n                onMouseMove={this.onMouseMove}\n            >\n                {clipPath.element}\n                <rect\n                    x={bounds.left}\n                    y={bounds.top}\n                    width={bounds.width}\n                    height={bounds.height}\n                    opacity={0}\n                    fill=\"rgba(255,255,255,0)\"\n                />\n                {this.renderAxis()}\n                <g clipPath={clipPath.id}>{this.renderBars()}</g>\n                {this.renderLegend()}\n                {this.tooltip}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { dualAxis, bounds } = this\n\n        if (this.chartState.errorInfo.reason)\n            return (\n                <g width={bounds.width} height={bounds.height}>\n                    {this.renderAxis()}\n                    <NoDataModal\n                        manager={this.manager}\n                        bounds={dualAxis.innerBounds}\n                        message={this.chartState.errorInfo.reason}\n                    />\n                </g>\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n\n    @computed get categoryLegendY(): number {\n        return this.bounds.top\n    }\n\n    @computed get legendY(): number {\n        // Small offset aligns the legend with the chart area's top edge in relative mode\n        return this.bounds.top + 3\n    }\n\n    @computed get legendX(): number {\n        return this.showHorizontalLegend\n            ? this.bounds.left\n            : this.bounds.right - this.sidebarWidth\n    }\n\n    @computed get series(): readonly StackedSeries<Time>[] {\n        return this.chartState.series\n    }\n\n    @computed\n    private get placedSeries(): readonly PlacedStackedBarSeries<Time>[] {\n        return toPlacedStackedBarSeries(this.series, this.dualAxis)\n    }\n\n    @computed\n    private get renderSeries(): readonly RenderStackedBarSeries<Time>[] {\n        const { target } = this.tooltipState\n        return this.placedSeries.map((series) => {\n            const hover = this.hoverStateForSeries(series)\n            const emphasis = resolveEmphasis({ hover, focus: series.focus })\n\n            return {\n                ...series,\n                emphasis,\n                hover,\n                hoverTime:\n                    target?.series.seriesName === series.seriesName\n                        ? target.bar.time\n                        : undefined,\n            }\n        })\n    }\n\n    animSelection?: Selection<BaseType, unknown, SVGGElement | null, unknown>\n\n    base = React.createRef<SVGGElement>()\n    override componentDidMount(): void {\n        if (!this.manager.disableIntroAnimation) {\n            // Fancy intro animation\n            this.animSelection = select(this.base.current)\n                .selectAll(\"clipPath > rect\")\n                .attr(\"width\", 0)\n\n            this.animSelection\n                .transition()\n                .duration(800)\n                .ease(easeLinear)\n                .attr(\"width\", this.bounds.width)\n                .on(\"end\", () => this.forceUpdate()) // Important in case bounds changes during transition\n        }\n        exposeInstanceOnWindow(this)\n    }\n\n    override componentWillUnmount(): void {\n        if (this.animSelection) this.animSelection.interrupt()\n    }\n}\n","import { Color, EntityName } from \"@ourworldindata/types\"\nimport { StackedPoint } from \"./StackedConstants.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { SeriesLabelState } from \"../seriesLabel/SeriesLabelState.js\"\nimport { GRAPHER_AREA_OPACITY_MUTED } from \"../core/GrapherConstants.js\"\n\ninterface LabelStyleConfig {\n    opacity: number\n}\n\nexport const LABEL_STYLE: Record<Emphasis, LabelStyleConfig> = {\n    [Emphasis.Default]: { opacity: 1 },\n    [Emphasis.Highlighted]: { opacity: 1 },\n    [Emphasis.Muted]: { opacity: GRAPHER_AREA_OPACITY_MUTED },\n}\n\n/** One row in the stacked discrete bar chart, grouping all bar segments for a single entity */\nexport interface DiscreteBarRow {\n    entityName: string\n    shortEntityName?: string\n    bars: BarSegment[]\n    totalValue: number\n    focus: InteractionState\n}\n\nexport interface SizedDiscreteBarRow extends DiscreteBarRow {\n    label: SeriesLabelState\n}\n\nexport interface PlacedDiscreteBarRow extends SizedDiscreteBarRow {\n    yPosition: number\n    placedBars: PlacedBarSegment[]\n}\n\nexport interface RenderDiscreteBarRow extends PlacedDiscreteBarRow {\n    emphasis: Emphasis\n    segments: RenderBarSegment[]\n}\n\n/** A single colored slice within a stacked bar, representing one indicator for one entity */\nexport interface BarSegment {\n    seriesName: string\n    color: Color\n    columnSlug: string\n    point: StackedPoint<EntityName>\n}\n\nexport interface PlacedBarSegment extends BarSegment {\n    x: number\n    barWidth: number\n}\n\nexport interface RenderBarSegment extends PlacedBarSegment {\n    focus: InteractionState\n    hover: InteractionState\n    emphasis: Emphasis\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { Bounds, makeFigmaId, dyFromAlign } from \"@ourworldindata/utils\"\nimport { VerticalAlign } from \"@ourworldindata/types\"\nimport { STACKED_BAR_STYLE } from \"./StackedConstants\"\nimport {\n    LABEL_STYLE,\n    RenderBarSegment,\n    RenderDiscreteBarRow,\n} from \"./StackedDiscreteBarChartConstants.js\"\nimport { isDarkColor } from \"../color/ColorUtils\"\nimport { HorizontalAxis } from \"../axis/Axis\"\nimport { SeriesLabel } from \"../seriesLabel/SeriesLabel.js\"\n\nconst labelToBarPadding = 5\n\nexport function StackedDiscreteBarRow({\n    row,\n    translateY = row.yPosition,\n    barHeight,\n    labelFontSize,\n    yAxis,\n    showTotalValueLabel,\n    formatValueForLabel,\n    onEntityMouseEnter,\n    onEntityMouseLeave,\n    onClearTooltip,\n}: {\n    row: RenderDiscreteBarRow\n    translateY?: number\n    barHeight: number\n    labelFontSize: number\n    yAxis: HorizontalAxis\n    showTotalValueLabel: boolean\n    formatValueForLabel: (value: number) => string\n    onEntityMouseEnter: (entityName: string, seriesName?: string) => void\n    onEntityMouseLeave: () => void\n    onClearTooltip: () => void\n}): React.ReactElement {\n    const { entityName, label, segments, totalValue, emphasis } = row\n\n    const totalLabel = formatValueForLabel(totalValue)\n    const showLabelInsideBar = segments.length > 1\n\n    const labelStyle = LABEL_STYLE[emphasis]\n\n    // We can't just take the last segment here because if it has a negative value,\n    // its position on the chart might actually be leftmost rather than rightmost.\n    const lastValue =\n        _.max(segments.map((seg) => seg.point.valueOffset + seg.point.value)) ??\n        0\n\n    return (\n        <g\n            id={makeFigmaId(entityName)}\n            transform={`translate(0, ${translateY})`}\n            opacity={1}\n        >\n            {segments.map((segment) => (\n                <StackedDiscreteBar\n                    key={segment.seriesName}\n                    segment={segment}\n                    entityName={entityName}\n                    barHeight={barHeight}\n                    label={formatValueForLabel(segment.point.value)}\n                    labelFontSize={labelFontSize}\n                    showLabelInsideBar={showLabelInsideBar}\n                    onMouseEnter={onEntityMouseEnter}\n                    onMouseLeave={onEntityMouseLeave}\n                />\n            ))}\n            <SeriesLabel\n                state={label}\n                x={yAxis.place(0) - labelToBarPadding}\n                y={-label.height / 2}\n                onMouseEnter={(): void => onEntityMouseEnter(label.text)}\n                onMouseLeave={onEntityMouseLeave}\n                onInfoTooltipShow={onClearTooltip}\n                opacity={labelStyle.opacity}\n            />\n            {showTotalValueLabel && (\n                <text\n                    transform={`translate(${\n                        yAxis.place(lastValue) + labelToBarPadding\n                    }, 0)`}\n                    dy={dyFromAlign(VerticalAlign.middle)}\n                    opacity={labelStyle.opacity}\n                    fill=\"#555\"\n                    fontSize={labelFontSize}\n                >\n                    {totalLabel}\n                </text>\n            )}\n        </g>\n    )\n}\n\nfunction StackedDiscreteBar({\n    segment,\n    entityName,\n    barHeight,\n    label,\n    labelFontSize,\n    showLabelInsideBar,\n    onMouseEnter,\n    onMouseLeave,\n}: {\n    segment: RenderBarSegment\n    entityName: string\n    barHeight: number\n    label: string\n    labelFontSize: number\n    showLabelInsideBar: boolean\n    onMouseEnter: (entityName: string, seriesName: string) => void\n    onMouseLeave: () => void\n}): React.ReactElement {\n    const labelBounds = Bounds.forText(label, { fontSize: labelFontSize })\n    const canShowLabel =\n        showLabelInsideBar &&\n        labelBounds.width < 0.85 * segment.barWidth &&\n        labelBounds.height < 0.85 * barHeight\n    const labelColor = isDarkColor(segment.color) ? \"#fff\" : \"#000\"\n    const segmentStyle = STACKED_BAR_STYLE[segment.emphasis]\n\n    return (\n        <g\n            id={makeFigmaId(segment.seriesName)}\n            onMouseEnter={(): void =>\n                onMouseEnter(entityName, segment.seriesName)\n            }\n            onMouseLeave={onMouseLeave}\n        >\n            <rect\n                id={makeFigmaId(\"bar\")}\n                x={0}\n                y={0}\n                transform={`translate(${segment.x}, ${-barHeight / 2})`}\n                width={segment.barWidth}\n                height={barHeight}\n                fill={segment.color}\n                opacity={segmentStyle.opacity}\n                style={{ transition: \"height 200ms ease\" }}\n            />\n            {canShowLabel && (\n                <text\n                    x={segment.x + segment.barWidth / 2}\n                    y={0}\n                    width={segment.barWidth}\n                    height={barHeight}\n                    fill={labelColor}\n                    fontSize={labelFontSize}\n                    textAnchor=\"middle\"\n                    dy={dyFromAlign(VerticalAlign.middle)}\n                >\n                    {label}\n                </text>\n            )}\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport * as R from \"remeda\"\nimport {\n    Bounds,\n    Time,\n    HorizontalAlign,\n    EntityName,\n    excludeUndefined,\n    numberMagnitude,\n    getRelativeMouse,\n    exposeInstanceOnWindow,\n    makeFigmaId,\n    bind,\n} from \"@ourworldindata/utils\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ScaleType, SeriesName } from \"@ourworldindata/types\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    FontSettings,\n    GRAPHER_FONT_SCALE_12,\n} from \"../core/GrapherConstants\"\nimport {\n    HorizontalAxisComponent,\n    HorizontalAxisGridLines,\n    HorizontalAxisZeroLine,\n} from \"../axis/AxisViews\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\nimport { TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport {\n    Tooltip,\n    TooltipState,\n    TooltipTable,\n    makeTooltipRoundingNotice,\n    makeTooltipToleranceNotice,\n    toTooltipTableColumns,\n} from \"../tooltip/Tooltip\"\nimport {\n    LEGEND_STYLE_FOR_STACKED_CHARTS,\n    StackedPoint,\n    StackedSeries,\n} from \"./StackedConstants\"\nimport {\n    PlacedDiscreteBarRow,\n    RenderBarSegment,\n    RenderDiscreteBarRow,\n    SizedDiscreteBarRow,\n} from \"./StackedDiscreteBarChartConstants.js\"\nimport {\n    HorizontalCategoricalColorLegend,\n    HorizontalColorLegendManager,\n} from \"../legend/HorizontalColorLegends\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { Emphasis, resolveEmphasis } from \"../interaction/Emphasis\"\nimport { HorizontalAxis } from \"../axis/Axis\"\nimport { StackedDiscreteBarChartState } from \"./StackedDiscreteBarChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { StackedDiscreteBarRow } from \"./StackedDiscreteBarRow\"\nimport { HashMap, NodeGroup } from \"react-move\"\nimport { easeQuadOut } from \"d3-ease\"\nimport { enrichSeriesWithLabels } from \"../barCharts/DiscreteBarChartHelpers.js\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\n\nexport interface StackedDiscreteBarChartManager extends ChartManager {\n    endTime?: Time\n    hideTotalValueLabel?: boolean\n}\n\nconst BAR_SPACING_FACTOR = 0.35\n\ntype StackedDiscreteBarChartProps =\n    ChartComponentProps<StackedDiscreteBarChartState> & {\n        hideLegend?: boolean\n    }\n\n@observer\nexport class StackedDiscreteBarChart\n    extends React.Component<StackedDiscreteBarChartProps>\n    implements ChartInterface, HorizontalColorLegendManager\n{\n    private base = React.createRef<SVGGElement>()\n\n    private legendHoverSeriesName: SeriesName | undefined = undefined\n\n    private tooltipState = new TooltipState<{\n        entityName: string\n        seriesName?: string\n    }>()\n\n    constructor(props: StackedDiscreteBarChartProps) {\n        super(props)\n\n        makeObservable<\n            StackedDiscreteBarChart,\n            \"tooltipState\" | \"legendHoverSeriesName\"\n        >(this, {\n            legendHoverSeriesName: observable,\n            tooltipState: observable,\n        })\n    }\n\n    @computed get chartState(): StackedDiscreteBarChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): StackedDiscreteBarChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        // Bottom padding avoids axis labels to be cut off at some resolutions\n        return (this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS)\n            .padRight(10)\n            .padBottom(2)\n    }\n\n    @computed private get baseFontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed private get showLegend(): boolean {\n        return !this.props.hideLegend && !!this.manager.showLegend\n    }\n\n    @computed private get boundsWithoutLegend(): Bounds {\n        return this.bounds.padTop(\n            this.showLegend && this.legend.height > 0\n                ? this.legend.height + this.legendPaddingTop\n                : 0\n        )\n    }\n\n    @computed private get legendPaddingTop(): number {\n        return 0.5 * this.baseFontSize\n    }\n\n    @computed get legendX(): number {\n        return this.bounds.x\n    }\n\n    @computed get categoryLegendY(): number {\n        return this.bounds.top\n    }\n\n    @computed get legendWidth(): number {\n        return this.bounds.width\n    }\n\n    @computed get legendAlign(): HorizontalAlign {\n        return HorizontalAlign.left\n    }\n\n    @computed get fontSize(): number {\n        return this.baseFontSize\n    }\n\n    @computed private get legendBins(): CategoricalBin[] {\n        return this.series.map((series, index) => {\n            return new CategoricalBin({\n                index,\n                value: series.seriesName,\n                label: series.seriesName,\n                color: series.color,\n            })\n        })\n    }\n\n    @computed get categoricalLegendData(): CategoricalBin[] {\n        return this.showLegend ? this.legendBins : []\n    }\n\n    /**\n     * In stacked discrete bar charts, both entities and columns can be focused.\n     * This getter returns the focused series names, grouped by whether they are\n     * entities or columns.\n     */\n    @computed get focusedSeriesNamesByType(): Record<\n        \"entity\" | \"column\",\n        SeriesName[]\n    > {\n        const {\n            focusArray,\n            selectionArray: { selectedEntityNames },\n        } = this.chartState\n\n        const [focusedEntities, focusedColumns] = R.partition(\n            focusArray.seriesNames,\n            (seriesName) => selectedEntityNames.includes(seriesName)\n        )\n\n        return { entity: focusedEntities, column: focusedColumns }\n    }\n\n    resolveLegendBinEmphasis(bin: ColorScaleBin): Emphasis {\n        const { focusArray } = this.chartState\n\n        // If an entity is focused, then all legend bins are active\n        if (this.focusedSeriesNamesByType.entity.length > 0) {\n            return Emphasis.Default\n        }\n\n        // Check if the legend bin is currently hovered\n        if (this.legendHoverSeriesName) {\n            return bin.contains(this.legendHoverSeriesName)\n                ? Emphasis.Highlighted\n                : Emphasis.Muted\n        }\n\n        // Check if a bar segment is currently hovered that maps to the legend bin\n        if (this.tooltipState.target?.seriesName) {\n            return bin.contains(this.tooltipState.target.seriesName)\n                ? Emphasis.Highlighted\n                : Emphasis.Muted\n        }\n\n        // Check if a column is focused that corresponds to the legend bin\n        if (this.focusedSeriesNamesByType.column.length > 0) {\n            const binSeriesName = this.series.find((s) =>\n                bin.contains(s.seriesName)\n            )?.seriesName\n            return binSeriesName && focusArray.has(binSeriesName)\n                ? Emphasis.Highlighted\n                : Emphasis.Muted\n        }\n\n        return Emphasis.Default\n    }\n\n    legendStyleConfig = LEGEND_STYLE_FOR_STACKED_CHARTS\n\n    @computed get externalLegend(): HorizontalColorLegendManager | undefined {\n        if (!this.showLegend) {\n            return {\n                categoricalLegendData: this.legendBins,\n                legendStyleConfig: this.legendStyleConfig,\n            }\n        }\n        return undefined\n    }\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        this.chartState.focusArray.clear()\n        this.legendHoverSeriesName = R.first(\n            this.series\n                .map((s) => s.seriesName)\n                .filter((name) => bin.contains(name))\n        )\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.legendHoverSeriesName = undefined\n    }\n\n    @computed private get legend(): HorizontalCategoricalColorLegend {\n        return new HorizontalCategoricalColorLegend({ manager: this })\n    }\n\n    @action.bound private onMouseMove(ev: React.MouseEvent): void {\n        const ref = this.manager.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, ev)\n        }\n    }\n\n    @computed private get series(): readonly StackedSeries<EntityName>[] {\n        return this.chartState.series\n    }\n\n    @computed private get barCount(): number {\n        return this.chartState.rows.length\n    }\n\n    @computed private get labelFontSize(): number {\n        const availableHeight = this.boundsWithoutLegend.height / this.barCount\n        return Math.min(\n            GRAPHER_FONT_SCALE_12 * this.fontSize,\n            1.1 * availableHeight\n        )\n    }\n\n    @computed private get labelStyle(): FontSettings {\n        return { fontSize: this.labelFontSize, fontWeight: 700, lineHeight: 1 }\n    }\n\n    @computed private get totalValueLabelStyle(): Partial<FontSettings> {\n        return { fontSize: this.labelFontSize }\n    }\n\n    @computed private get sizedRows(): readonly SizedDiscreteBarRow[] {\n        return enrichSeriesWithLabels({\n            series: this.chartState.sortedRows,\n            availableHeightPerSeries:\n                this.boundsWithoutLegend.height / this.barCount,\n            minLabelWidth: 0.3 * this.boundsWithoutLegend.width,\n            maxLabelWidth: 0.66 * this.boundsWithoutLegend.width,\n            fontSettings: this.labelStyle,\n            showRegionTooltip: !this.manager.isStatic,\n        })\n    }\n\n    @computed private get labelWidth(): number {\n        return _.max(this.sizedRows.map((d) => d.label.width)) ?? 0\n    }\n\n    @computed private get showTotalValueLabel(): boolean {\n        return !this.manager.isRelativeMode && !this.manager.hideTotalValueLabel\n    }\n\n    @computed private get showHorizontalAxis(): boolean {\n        return !this.showTotalValueLabel\n    }\n\n    // The amount of space we need to allocate for total value labels on the right\n    @computed private get totalValueLabelWidth(): number {\n        if (!this.showTotalValueLabel) return 0\n\n        const labels = this.sizedRows.map((d) =>\n            this.formatValueForLabel(d.totalValue)\n        )\n        const longestLabel = _.maxBy(labels, (l) => l.length)\n        return Bounds.forText(longestLabel, this.totalValueLabelStyle).width\n    }\n\n    @computed private get x0(): number {\n        return 0\n    }\n\n    @computed private get allPoints(): StackedPoint<EntityName>[] {\n        return this.series.flatMap((series) => series.points)\n    }\n\n    @computed private get xDomainDefault(): [number, number] {\n        const maxValues = this.allPoints.map(\n            (point) => point.value + point.valueOffset\n        )\n        return [this.x0, Math.max(this.x0, _.max(maxValues) as number)]\n    }\n\n    @computed private get xRange(): [number, number] {\n        return [\n            this.boundsWithoutLegend.left + this.labelWidth,\n            this.boundsWithoutLegend.right - this.totalValueLabelWidth,\n        ]\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(this.manager.yAxisConfig, this)\n    }\n\n    @computed get yAxis(): HorizontalAxis {\n        const axis = this.yAxisConfig.toHorizontalAxis()\n        axis.updateDomainPreservingUserSettings(this.xDomainDefault)\n\n        axis.scaleType = ScaleType.linear\n        axis.formatColumn = this.yColumns[0]\n        axis.range = this.xRange\n        axis.label = \"\"\n        return axis\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.boundsWithoutLegend\n            .padLeft(this.labelWidth)\n            .padBottom(this.showHorizontalAxis ? this.yAxis.height : 0)\n            .padRight(this.totalValueLabelWidth)\n    }\n\n    /** The total height of the series, i.e. the height of the bar + the white space around it */\n    @computed private get seriesHeight(): number {\n        return this.innerBounds.height / this.barCount\n    }\n\n    @computed private get barSpacing(): number {\n        return this.seriesHeight * BAR_SPACING_FACTOR\n    }\n\n    @computed private get barHeight(): number {\n        const totalWhiteSpace = this.barCount * this.barSpacing\n        return (this.innerBounds.height - totalWhiteSpace) / this.barCount\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        return (\n            this.legendHoverSeriesName !== undefined ||\n            this.tooltipState.target?.seriesName !== undefined ||\n            this.tooltipState.target?.entityName !== undefined\n        )\n    }\n\n    @computed private get placedRows(): PlacedDiscreteBarRow[] {\n        const { innerBounds, barHeight, barSpacing, yAxis, x0 } = this\n\n        const topYOffset = innerBounds.top + barHeight / 2 + barSpacing / 2\n\n        return this.sizedRows.map((d, i) => ({\n            ...d,\n            yPosition: topYOffset + (barHeight + barSpacing) * i,\n            placedBars: d.bars.map((bar) => {\n                let barX = yAxis.place(x0 + bar.point.valueOffset)\n                const barWidth = Math.abs(\n                    yAxis.place(bar.point.value) - yAxis.place(x0)\n                )\n                if (bar.point.value < 0) barX -= barWidth\n                return { ...bar, x: barX, barWidth }\n            }),\n        }))\n    }\n\n    @computed private get renderRows(): RenderDiscreteBarRow[] {\n        const {\n            legendHoverSeriesName,\n            tooltipState: { target },\n            chartState: { focusArray },\n        } = this\n\n        return this.placedRows.map((row) => {\n            // Check if the row is focused\n            const rowFocus = focusArray.state(row.entityName)\n\n            // Check if any of the bar segments is focused\n            const segments: RenderBarSegment[] = row.placedBars.map(\n                (placedBar) => {\n                    // Check if the bar segment is hovered\n                    const isHovered =\n                        legendHoverSeriesName === placedBar.seriesName ||\n                        // The bar segment itself is hovered\n                        (target?.seriesName === placedBar.seriesName &&\n                            target.entityName === row.entityName) ||\n                        // The whole row is hovered\n                        (target?.entityName === row.entityName &&\n                            target.seriesName === undefined)\n\n                    // Check if the bar segment is focused\n                    const isFocused =\n                        rowFocus.active ||\n                        focusArray.state(placedBar.seriesName).active\n\n                    const hover = new InteractionState(\n                        isHovered,\n                        this.isHoverModeActive\n                    )\n                    const focus = new InteractionState(\n                        isFocused,\n                        !focusArray.isEmpty\n                    )\n\n                    const emphasis = resolveEmphasis({ hover, focus })\n\n                    return { ...placedBar, hover, focus, emphasis }\n                }\n            )\n\n            const hasHighlightedSegment = segments.some(\n                (segment) => segment.emphasis === Emphasis.Highlighted\n            )\n            const rowEmphasis = hasHighlightedSegment\n                ? Emphasis.Default\n                : resolveEmphasis({ focus: rowFocus })\n\n            return { ...row, emphasis: rowEmphasis, segments }\n        })\n    }\n\n    @computed private get formatColumn(): CoreColumn {\n        return this.yColumns[0]\n    }\n\n    @bind private formatValueForLabel(value: number): string {\n        // Compute how many decimal places we should show.\n        // Basically, this makes us show 2 significant digits, or no decimal places if the number\n        // is big enough already.\n        const magnitude = numberMagnitude(value)\n        return this.formatColumn.formatValueShort(value, {\n            numDecimalPlaces: Math.max(0, -magnitude + 2),\n        })\n    }\n\n    @computed private get inputTable(): OwidTable {\n        return this.chartState.inputTable\n    }\n\n    @computed private get yColumns(): CoreColumn[] {\n        return this.chartState.yColumns\n    }\n\n    @action.bound private clearTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onEntityMouseEnter(\n        entityName: string,\n        seriesName?: string\n    ): void {\n        this.chartState.focusArray.clear()\n        this.tooltipState.target = { entityName, seriesName }\n    }\n\n    @action.bound private onEntityMouseLeave(): void {\n        this.clearTooltip()\n    }\n\n    @computed private get tooltip(): React.ReactElement | undefined {\n        const {\n                tooltipState: { target, position, fading },\n                formatColumn: { displayUnit },\n                manager: { endTime: targetTime },\n                inputTable: { timeColumn },\n            } = this,\n            item = this.placedRows.find(\n                ({ entityName }) => entityName === target?.entityName\n            ),\n            hasNotice = item?.bars.some(\n                ({ point }) =>\n                    !point.missing &&\n                    !point.interpolated &&\n                    point.time !== targetTime\n            ),\n            targetNotice = hasNotice\n                ? timeColumn.formatValue(targetTime)\n                : undefined\n\n        const toleranceNotice = targetNotice\n            ? {\n                  icon: TooltipFooterIcon.Notice,\n                  text: makeTooltipToleranceNotice(targetNotice),\n              }\n            : undefined\n        const roundingNotice = this.formatColumn.roundsToSignificantFigures\n            ? {\n                  icon: TooltipFooterIcon.None,\n                  text: makeTooltipRoundingNotice([\n                      this.formatColumn.numSignificantFigures,\n                  ]),\n              }\n            : undefined\n        const footer = excludeUndefined([toleranceNotice, roundingNotice])\n\n        return (\n            target &&\n            item && (\n                <Tooltip\n                    id=\"stackedDiscreteBarTooltip\"\n                    tooltipManager={this.manager}\n                    x={position.x}\n                    y={position.y}\n                    style={{ maxWidth: \"400px\" }}\n                    offsetX={20}\n                    offsetY={-16}\n                    title={target.entityName}\n                    subtitle={displayUnit}\n                    subtitleFormat=\"unit\"\n                    footer={footer}\n                    dissolve={fading}\n                    dismiss={() => (this.tooltipState.target = null)}\n                >\n                    <TooltipTable\n                        columns={toTooltipTableColumns(this.formatColumn)}\n                        totals={[item.totalValue]}\n                        rows={item.bars.map((bar) => {\n                            const {\n                                seriesName: name,\n                                color,\n                                point: { value, time, missing, interpolated },\n                            } = bar\n\n                            const blurred = missing || interpolated\n\n                            return {\n                                name,\n                                swatch: { color },\n                                blurred,\n                                focused: name === target.seriesName,\n                                values: [!blurred ? value : undefined],\n                                originalTime:\n                                    !blurred && time !== targetTime\n                                        ? timeColumn.formatValue(time)\n                                        : undefined,\n                            }\n                        })}\n                    ></TooltipTable>\n                </Tooltip>\n            )\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n\n    private renderLegend(): React.ReactElement | undefined {\n        if (!this.showLegend) return\n        return <HorizontalCategoricalColorLegend manager={this} />\n    }\n\n    private renderAxis(): React.ReactElement {\n        const { boundsWithoutLegend: bounds, yAxis, innerBounds } = this\n\n        return (\n            <>\n                {this.showHorizontalAxis && (\n                    <>\n                        <HorizontalAxisComponent\n                            bounds={bounds}\n                            axis={yAxis}\n                            preferredAxisPosition={innerBounds.bottom}\n                        />\n                        <HorizontalAxisGridLines\n                            horizontalAxis={yAxis}\n                            bounds={innerBounds}\n                        />\n                    </>\n                )}\n                <HorizontalAxisZeroLine\n                    horizontalAxis={yAxis}\n                    bounds={innerBounds}\n                    strokeWidth={0.5}\n                    // Moves the zero line a little to the left\n                    // to avoid overlap with the bars\n                    align={HorizontalAlign.right}\n                />\n            </>\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderLegend()}\n                {this.renderAxis()}\n                <g id={makeFigmaId(\"bars\")}>\n                    {this.renderRows.map((row) => (\n                        <StackedDiscreteBarRow\n                            key={row.entityName}\n                            row={row}\n                            yAxis={this.yAxis}\n                            barHeight={this.barHeight}\n                            labelFontSize={this.labelFontSize}\n                            showTotalValueLabel={this.showTotalValueLabel}\n                            formatValueForLabel={this.formatValueForLabel}\n                            onEntityMouseEnter={this.onEntityMouseEnter}\n                            onEntityMouseLeave={this.onEntityMouseLeave}\n                            onClearTooltip={this.clearTooltip}\n                        />\n                    ))}\n                </g>\n            </>\n        )\n    }\n\n    private renderInteractive(): React.ReactElement {\n        const { bounds } = this\n\n        const handlePositionUpdate = (d: RenderDiscreteBarRow): HashMap => ({\n            translateY: [d.yPosition],\n            timing: { duration: 350, ease: easeQuadOut },\n        })\n\n        return (\n            <g ref={this.base} onMouseMove={this.onMouseMove}>\n                <rect\n                    x={bounds.left}\n                    y={bounds.top}\n                    width={bounds.width}\n                    height={bounds.height}\n                    opacity={0}\n                    fill=\"rgba(255,255,255,0)\"\n                />\n                {this.renderLegend()}\n                {this.renderAxis()}\n                <NodeGroup\n                    data={this.renderRows}\n                    keyAccessor={(d: RenderDiscreteBarRow): string =>\n                        d.entityName\n                    }\n                    start={handlePositionUpdate}\n                    update={handlePositionUpdate}\n                >\n                    {(nodes): React.ReactElement => (\n                        <g>\n                            {nodes.map((node) => (\n                                <StackedDiscreteBarRow\n                                    key={node.data.entityName}\n                                    row={node.data}\n                                    translateY={node.state.translateY ?? 0}\n                                    barHeight={this.barHeight}\n                                    labelFontSize={this.labelFontSize}\n                                    yAxis={this.yAxis}\n                                    showTotalValueLabel={\n                                        this.showTotalValueLabel\n                                    }\n                                    formatValueForLabel={\n                                        this.formatValueForLabel\n                                    }\n                                    onEntityMouseEnter={this.onEntityMouseEnter}\n                                    onEntityMouseLeave={this.onEntityMouseLeave}\n                                    onClearTooltip={this.clearTooltip}\n                                />\n                            ))}\n                        </g>\n                    )}\n                </NodeGroup>\n                {this.tooltip}\n            </g>\n        )\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n}\n","import * as React from \"react\"\nimport * as _ from \"lodash-es\"\n\ntype TriangleProps = Readonly<{\n    cx: number\n    cy: number\n    r: number\n    fill?: string\n    stroke?: string\n    strokeWidth?: number\n    rotation?: number\n}> &\n    React.SVGProps<SVGPolygonElement>\n\nexport const Triangle = (props: TriangleProps): React.ReactElement => {\n    const { cx, cy, r, rotation } = props\n    const x = cx - r,\n        y = cy - r\n    const points = [\n        [x, y + r * 2],\n        [x + (r * 2) / 2, y],\n        [x + r * 2, y + r * 2],\n    ]\n    const rotationRounded = rotation\n        ? [rotation, cx, cy].map((v) => _.round(v, 2))\n        : undefined\n\n    return (\n        <polygon\n            points={points\n                .map((p) => `${p[0].toFixed(2)},${p[1].toFixed(2)}`)\n                .join(\" \")}\n            transform={\n                rotationRounded\n                    ? `rotate(${rotationRounded.join(\", \")})`\n                    : undefined\n            }\n            {..._.omit(props, \"rotation\")}\n        />\n    )\n}\n","import * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { Triangle } from \"./Triangle\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants\"\nimport { makeFigmaId } from \"@ourworldindata/utils\"\nimport * as _ from \"lodash-es\"\nimport { GRAPHER_DARK_TEXT, GRAY_70 } from \"../color/ColorConstants.js\"\n\nexport interface ConnectedScatterLegendManager {\n    sidebarWidth: number\n    displayStartTime: string\n    displayEndTime: string\n    fontSize?: number\n    compareEndPointsOnly?: boolean\n    isStaticAndSmall?: boolean\n}\n\nexport class ConnectedScatterLegend {\n    manager: ConnectedScatterLegendManager\n\n    private lineToLabelSpacing = 8\n    private dotRadius = 2\n    private arrowRadius = 3\n    private padding = this.arrowRadius\n    private textColor = GRAPHER_DARK_TEXT\n    private arrowColor = GRAY_70\n    private outlineColor = \"#fff\"\n    private outlineWidth = 0.2\n\n    constructor(manager: ConnectedScatterLegendManager) {\n        makeObservable(this)\n        this.manager = manager\n    }\n\n    @computed get fontSize(): number {\n        const baseFontSize = this.manager.fontSize ?? BASE_FONT_SIZE\n        const fontScale = this.manager.isStaticAndSmall ? 0.5 : 0.7\n        return fontScale * baseFontSize\n    }\n\n    @computed get width(): number {\n        return this.manager.sidebarWidth\n    }\n\n    @computed get maxLabelWidth(): number {\n        return (this.width - 2) / 2\n    }\n\n    @computed get startLabel(): TextWrap {\n        const { manager, maxLabelWidth, fontSize } = this\n        return new TextWrap({\n            text: manager.displayStartTime,\n            fontSize,\n            maxWidth: maxLabelWidth,\n            lineHeight: 1,\n        })\n    }\n\n    @computed get endLabel(): TextWrap {\n        const { manager, maxLabelWidth, fontSize } = this\n        return new TextWrap({\n            text: manager.displayEndTime,\n            fontSize,\n            maxWidth: maxLabelWidth,\n            lineHeight: 1,\n        })\n    }\n\n    @computed get maxLabelHeight(): number {\n        return Math.max(this.startLabel.height, this.endLabel.height)\n    }\n\n    @computed get height(): number {\n        return this.maxLabelHeight + this.padding + this.lineToLabelSpacing\n    }\n\n    render(\n        targetX: number,\n        targetY: number,\n        renderOptions: React.SVGAttributes<SVGGElement> = {}\n    ): React.ReactElement {\n        const { startLabel, endLabel, padding, lineToLabelSpacing, width } =\n            this\n\n        // Arrow line\n        const lineLeft = targetX + padding\n        const lineRight = targetX + width - padding\n        const lineY = targetY + padding\n\n        // Labels below the line\n        const labelY = lineY + lineToLabelSpacing\n        const labelStartX = targetX\n        const labelEndX = targetX + width - endLabel.width\n        const labelProps = { textProps: { fill: this.textColor } }\n\n        return (\n            <g\n                id={makeFigmaId(\"arrow-legend\")}\n                className=\"ConnectedScatterLegend\"\n                {...renderOptions}\n            >\n                <rect\n                    x={targetX}\n                    y={targetY}\n                    width={this.width}\n                    height={this.height}\n                    fill=\"#fff\"\n                    opacity={0}\n                />\n                {startLabel.renderSVG(labelStartX, labelY, labelProps)}\n                {endLabel.renderSVG(labelEndX, labelY, labelProps)}\n                <line\n                    x1={lineLeft}\n                    y1={lineY}\n                    x2={lineRight}\n                    y2={lineY}\n                    stroke={this.arrowColor}\n                    strokeWidth={1}\n                />\n                <circle\n                    cx={lineLeft}\n                    cy={lineY}\n                    r={this.dotRadius}\n                    fill={this.arrowColor}\n                    stroke={this.outlineColor}\n                    strokeWidth={this.outlineWidth}\n                />\n                {!this.manager.compareEndPointsOnly && (\n                    <React.Fragment>\n                        <circle\n                            cx={lineLeft + (lineRight - lineLeft) / 3}\n                            cy={lineY}\n                            r={this.dotRadius}\n                            fill={this.arrowColor}\n                            stroke={this.outlineColor}\n                            strokeWidth={this.outlineWidth}\n                        />\n                        <circle\n                            cx={lineLeft + (2 * (lineRight - lineLeft)) / 3}\n                            cy={lineY}\n                            r={this.dotRadius}\n                            fill={this.arrowColor}\n                            stroke={this.outlineColor}\n                            strokeWidth={this.outlineWidth}\n                        />\n                    </React.Fragment>\n                )}\n                <Triangle\n                    cx={lineRight}\n                    cy={lineY}\n                    r={this.arrowRadius}\n                    rotation={90}\n                    fill={this.arrowColor}\n                    stroke={this.outlineColor}\n                    strokeWidth={this.outlineWidth}\n                />\n            </g>\n        )\n    }\n}\n","import * as R from \"remeda\"\nimport { PointVector, makeFigmaId } from \"@ourworldindata/utils\"\nimport { observer } from \"mobx-react\"\nimport * as React from \"react\"\nimport { MultiColorPolyline } from \"./MultiColorPolyline\"\nimport {\n    ScatterRenderSeries,\n    SCATTER_POINT_OPACITY,\n    SCATTER_POINT_STROKE_WIDTH,\n} from \"./ScatterPlotChartConstants\"\nimport { Triangle } from \"./Triangle\"\n\ninterface ScatterPointProps {\n    series: ScatterRenderSeries\n    hideFocusRing?: boolean\n    isLayerMode?: boolean\n    onMouseEnter?: (seriesName: string) => void\n    onMouseLeave?: () => void\n}\n\nexport const INACTIVE_SCATTER_POINT_COLOR = \"#e2e2e2\"\n\n// When there's only a single point in a series (e.g. single year mode)\n@observer\nexport class ScatterPoint extends React.Component<ScatterPointProps> {\n    override render(): React.ReactElement | null {\n        const {\n            series,\n            isLayerMode,\n            hideFocusRing,\n            onMouseEnter,\n            onMouseLeave,\n        } = this.props\n        const value = R.first(series.points)\n        if (value === undefined) return null\n\n        const color =\n            series.isFocus || !isLayerMode\n                ? value.color\n                : INACTIVE_SCATTER_POINT_COLOR\n\n        const isLabelled = series.allLabels.some((label) => !label.isHidden)\n        const size = value.size\n        const cx = value.position.x.toFixed(2)\n        const cy = value.position.y.toFixed(2)\n        const stroke = isLayerMode ? \"#bbb\" : isLabelled ? \"#333\" : \"#666\"\n\n        return (\n            <g\n                id={makeFigmaId(series.seriesName, \"datapoint\")}\n                key={series.displayKey}\n                className={series.displayKey}\n                onMouseEnter={\n                    onMouseEnter\n                        ? (): void => onMouseEnter(series.seriesName)\n                        : undefined\n                }\n                onMouseLeave={onMouseLeave}\n            >\n                {!hideFocusRing && series.isFocus && (\n                    <circle\n                        cx={cx}\n                        cy={cy}\n                        fill=\"none\"\n                        stroke={color}\n                        r={(size + 3).toFixed(2)}\n                    />\n                )}\n                <circle\n                    cx={cx}\n                    cy={cy}\n                    r={size.toFixed(2)}\n                    fill={color}\n                    opacity={SCATTER_POINT_OPACITY}\n                    stroke={stroke}\n                    strokeWidth={SCATTER_POINT_STROKE_WIDTH}\n                    style={{ transition: \"fill 250ms\" }}\n                />\n            </g>\n        )\n    }\n}\n\ninterface ScatterLineProps {\n    series: ScatterRenderSeries\n    isLayerMode: boolean\n    onMouseEnter?: (seriesName: string) => void\n    onMouseLeave?: () => void\n}\n\n@observer\nexport class ScatterLine extends React.Component<ScatterLineProps> {\n    override render(): React.ReactElement | null {\n        const { series, isLayerMode, onMouseEnter, onMouseLeave } = this.props\n\n        if (series.points.length === 1)\n            return (\n                <ScatterPoint\n                    series={series}\n                    isLayerMode={isLayerMode}\n                    onMouseEnter={onMouseEnter}\n                    onMouseLeave={onMouseLeave}\n                />\n            )\n\n        const firstValue = R.first(series.points)\n        const lastValue = R.last(series.points)\n        if (firstValue === undefined || lastValue === undefined) return null\n\n        let rotation = PointVector.angle(series.offsetVector, PointVector.up)\n        if (series.offsetVector.x < 0) rotation = -rotation\n\n        const opacity = 0.7\n\n        return (\n            <g\n                id={makeFigmaId(\"scatter-line\", series.displayKey)}\n                key={series.displayKey}\n                className={series.displayKey}\n            >\n                <circle\n                    cx={firstValue.position.x.toFixed(2)}\n                    cy={firstValue.position.y.toFixed(2)}\n                    r={(1 + firstValue.size / 2).toFixed(1)}\n                    fill={isLayerMode ? \"#e2e2e2\" : firstValue.color}\n                    stroke=\"none\"\n                    opacity={opacity}\n                />\n                <MultiColorPolyline\n                    points={series.points.map((v) => ({\n                        x: v.position.x,\n                        y: v.position.y,\n                        color: isLayerMode ? \"#ccc\" : v.color,\n                    }))}\n                    strokeWidth={series.size.toFixed(2)}\n                    opacity={opacity}\n                    style={{ transition: \"stroke 250ms\" }}\n                />\n                <Triangle\n                    cx={lastValue.position.x}\n                    cy={lastValue.position.y}\n                    r={1.5 + lastValue.size}\n                    rotation={rotation}\n                    fill={isLayerMode ? \"#e2e2e2\" : lastValue.color}\n                    opacity={opacity}\n                />\n            </g>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { type BaseType, type Selection, select } from \"d3-selection\"\nimport { ScaleLinear } from \"d3-scale\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport { SortOrder } from \"@ourworldindata/types\"\nimport {\n    Bounds,\n    PointVector,\n    sortNumeric,\n    makeSafeForCSS,\n    getRelativeMouse,\n    intersection,\n    guid,\n    makeFigmaId,\n} from \"@ourworldindata/utils\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport * as React from \"react\"\nimport { Halo } from \"@ourworldindata/components\"\nimport { MultiColorPolyline } from \"./MultiColorPolyline\"\nimport {\n    ScatterPointsWithLabelsProps,\n    ScatterRenderSeries,\n    ScatterLabel,\n    ScatterSeries,\n    SCATTER_LINE_MIN_WIDTH,\n    SCATTER_POINT_MIN_RADIUS,\n    SCATTER_POINT_HOVER_TARGET_RANGE,\n    ScatterRenderPoint,\n    SCATTER_LABEL_MIN_FONT_SIZE_FACTOR,\n} from \"./ScatterPlotChartConstants\"\nimport { ScatterLine, ScatterPoint } from \"./ScatterPoints\"\nimport {\n    makeStartLabel,\n    makeMidLabels,\n    makeEndLabel,\n    labelPriority,\n} from \"./ScatterUtils\"\nimport { Triangle } from \"./Triangle\"\nimport { ColorScale } from \"../color/ColorScale\"\nimport {\n    BASE_FONT_SIZE,\n    GRAPHER_TEXT_OUTLINE_FACTOR,\n} from \"../core/GrapherConstants\"\n\n// This is the component that actually renders the points. The higher level ScatterPlot class renders points, legends, comparison lines, etc.\n@observer\nexport class ScatterPointsWithLabels extends React.Component<ScatterPointsWithLabelsProps> {\n    base = React.createRef<SVGGElement>()\n\n    // closest point by quadtree search\n    private nearSeries: ScatterSeries | undefined = undefined\n    // currently hovered-over point via mouseenter/leave\n    private overSeries: ScatterSeries | undefined = undefined\n\n    constructor(props: ScatterPointsWithLabelsProps) {\n        super(props)\n\n        makeObservable<ScatterPointsWithLabels, \"nearSeries\" | \"overSeries\">(\n            this,\n            {\n                nearSeries: observable,\n                overSeries: observable,\n            }\n        )\n    }\n\n    @computed private get seriesArray(): ScatterSeries[] {\n        return this.props.seriesArray\n    }\n\n    @computed private get focusedSeriesNames(): string[] {\n        return (\n            intersection(\n                this.props.focusedSeriesNames || [],\n                this.seriesArray.map((g) => g.seriesName)\n            ) ?? []\n        )\n    }\n\n    @computed private get hoveredSeriesNames(): string[] {\n        return this.props.hoveredSeriesNames ?? []\n    }\n\n    @computed private get tooltipSeriesName(): string | undefined {\n        return this.props.tooltipSeriesName\n    }\n\n    // Layered mode occurs when any entity on the chart is hovered or focused\n    // Then, a special \"foreground\" set of entities is rendered over the background\n    @computed private get isLayerMode(): boolean {\n        return (\n            this.focusedSeriesNames.length > 0 ||\n            this.hoveredSeriesNames.length > 0 ||\n            this.props.isHoverModeActive ||\n            // if the user has selected entities that are not in the chart,\n            // we want to move all entities into the background\n            ((this.props.focusedSeriesNames ?? []).length > 0 &&\n                this.focusedSeriesNames.length === 0)\n        )\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.dualAxis.innerBounds\n    }\n\n    // When focusing multiple entities, we hide some information to declutter\n    @computed private get isSubtleForeground(): boolean {\n        return (\n            this.focusedSeriesNames.length > 1 &&\n            this.props.seriesArray.some((series) => series.points.length > 2)\n        )\n    }\n\n    @computed private get colorScale(): ColorScale | undefined {\n        return this.props.colorScale\n    }\n\n    @computed private get sizeScale(): ScaleLinear<number, number> {\n        return this.props.sizeScale\n    }\n\n    @computed private get fontScale(): ScaleLinear<number, number> | undefined {\n        return this.props.fontScale\n    }\n\n    @computed private get hideScatterLabels(): boolean {\n        return !!this.props.hideScatterLabels\n    }\n\n    @computed private get hideEntityLabels(): boolean {\n        return !!this.props.hideEntityLabels\n    }\n\n    private getPointRadius(value: number | undefined): number {\n        const radius =\n            value !== undefined\n                ? this.sizeScale(value)\n                : this.sizeScale.range()[0]\n        // We are enforcing the minimum radius/width just before render,\n        // it should not be enforced earlier than that.\n        return Math.max(\n            radius,\n            this.props.isConnected\n                ? SCATTER_LINE_MIN_WIDTH\n                : SCATTER_POINT_MIN_RADIUS\n        )\n    }\n\n    private getLabelFontSize(value: number | undefined): number {\n        if (!this.fontScale) return BASE_FONT_SIZE\n        const fontSize =\n            value !== undefined\n                ? this.fontScale(value)\n                : this.fontScale.range()[0]\n        return Math.max(\n            fontSize,\n            SCATTER_LABEL_MIN_FONT_SIZE_FACTOR * this.props.baseFontSize\n        )\n    }\n\n    @computed private get hideConnectedScatterLines(): boolean {\n        return this.props.hideConnectedScatterLines\n    }\n\n    // Pre-transform data for rendering\n    @computed private get initialRenderSeries(): ScatterRenderSeries[] {\n        const { seriesArray, colorScale, bounds } = this\n        const xAxis = this.props.dualAxis.horizontalAxis.clone()\n        xAxis.range = bounds.xRange()\n        const yAxis = this.props.dualAxis.verticalAxis.clone()\n        yAxis.range = this.bounds.yRange()\n\n        return sortNumeric(\n            seriesArray.map((series): ScatterRenderSeries => {\n                const points = series.points.map(\n                    (point): ScatterRenderPoint => {\n                        const scaleColor =\n                            colorScale !== undefined\n                                ? colorScale.getColor(point.color)\n                                : undefined\n                        return {\n                            position: new PointVector(\n                                Math.floor(xAxis.place(point.x)),\n                                Math.floor(yAxis.place(point.y))\n                            ),\n                            color: scaleColor ?? series.color,\n                            size: this.getPointRadius(point.size),\n                            time: point.time,\n                            label: point.label,\n                        }\n                    }\n                )\n\n                return {\n                    seriesName: series.seriesName,\n                    displayKey: \"key-\" + makeSafeForCSS(series.seriesName),\n                    color: series.color,\n                    size: R.last(points)!.size,\n                    fontSize: this.getLabelFontSize(\n                        R.last(series.points)!.size\n                    ),\n                    points,\n                    text: series.label,\n                    midLabels: [],\n                    allLabels: [],\n                    offsetVector: PointVector.zero,\n                }\n            }),\n            (d) => d.size,\n            SortOrder.desc\n        )\n    }\n\n    @computed private get renderSeries(): ScatterRenderSeries[] {\n        // Draw the largest points first so that smaller ones can sit on top of them\n        const renderData = this.initialRenderSeries\n\n        for (const series of renderData) {\n            series.isHover = this.hoveredSeriesNames.includes(series.seriesName)\n            series.isFocus = this.focusedSeriesNames.includes(series.seriesName)\n            series.isTooltip = this.tooltipSeriesName === series.seriesName\n            series.isForeground = series.isHover || series.isFocus\n            if (series.isHover) series.size += 1\n        }\n\n        for (const series of renderData) {\n            series.startLabel = makeStartLabel(\n                series,\n                this.isSubtleForeground,\n                this.hideConnectedScatterLines,\n                this.props.baseFontSize\n            )\n            series.midLabels = makeMidLabels(\n                series,\n                this.isSubtleForeground,\n                this.hideConnectedScatterLines,\n                this.props.baseFontSize\n            )\n            series.endLabel = makeEndLabel(\n                series,\n                this.isSubtleForeground,\n                this.hideConnectedScatterLines,\n                this.props.baseFontSize\n            )\n            series.allLabels = [series.startLabel]\n                .concat(series.midLabels)\n                .concat([series.endLabel])\n                .filter((x) => x) as ScatterLabel[]\n        }\n\n        const labels = renderData.flatMap((series) => series.allLabels)\n\n        // Ensure labels fit inside bounds\n        // Must do before collision detection since it'll change the positions\n        this.moveLabelsInsideChartBounds(labels, this.bounds)\n\n        const labelsByPriority = sortNumeric(\n            labels,\n            (l) => labelPriority(l),\n            SortOrder.desc\n        )\n        if (this.focusedSeriesNames.length > 0) {\n            this.hideUnselectedLabels(labelsByPriority)\n        }\n        if (this.hideScatterLabels) {\n            this.hideLabels(labelsByPriority, this.hoveredSeriesNames.length)\n        }\n        if (this.hideEntityLabels) {\n            this.hideEndLabels(labelsByPriority)\n        }\n\n        this.hideCollidingLabelsByPriority(labelsByPriority)\n\n        return renderData\n    }\n\n    private hideLabels(\n        labelsByPriority: ScatterLabel[],\n        nHoveredLabels: number\n    ): void {\n        labelsByPriority\n            .filter((label) => !(label.series.isHover && nHoveredLabels === 1))\n            .forEach((label) => (label.isHidden = true))\n    }\n\n    private hideEndLabels(labelsByPriority: ScatterLabel[]): void {\n        labelsByPriority\n            .filter((label) => label.isEnd)\n            .forEach((label) => (label.isHidden = true))\n    }\n\n    private hideUnselectedLabels(labelsByPriority: ScatterLabel[]): void {\n        labelsByPriority\n            .filter((label) => !label.series.isFocus && !label.series.isHover)\n            .forEach((label) => (label.isHidden = true))\n    }\n\n    private hideCollidingLabelsByPriority(\n        labelsByPriority: ScatterLabel[]\n    ): void {\n        for (let i = 0; i < labelsByPriority.length; i++) {\n            const higherPriorityLabel = labelsByPriority[i]\n            if (higherPriorityLabel.isHidden) continue\n\n            for (let j = i + 1; j < labelsByPriority.length; j++) {\n                const lowerPriorityLabel = labelsByPriority[j]\n                if (lowerPriorityLabel.isHidden) continue\n\n                const isHighlightedEndLabelOfEqualPriority =\n                    lowerPriorityLabel.isEnd &&\n                    (lowerPriorityLabel.series.isHover ||\n                        lowerPriorityLabel.series.isFocus) &&\n                    higherPriorityLabel.series.isHover ===\n                        lowerPriorityLabel.series.isHover &&\n                    higherPriorityLabel.series.isFocus ===\n                        lowerPriorityLabel.series.isFocus\n\n                if (\n                    isHighlightedEndLabelOfEqualPriority\n                        ? // For highlighted end labels of equal priority, we want to allow some\n                          // overlap – labels are still readable even if they overlap\n                          higherPriorityLabel.bounds\n                              .pad(6) // allow up to 6px of overlap\n                              .intersects(lowerPriorityLabel.bounds)\n                        : // For non-highlighted labels we want to leave more space between labels,\n                          // partly to have a less noisy chart, and partly to prevent readers from\n                          // thinking that \"everything is labelled\". In the past this has made\n                          // readers think that if a label doesn't exist, it isn't plotted on the\n                          // chart.\n                          higherPriorityLabel.bounds\n                              .pad(-6)\n                              .intersects(lowerPriorityLabel.bounds)\n                ) {\n                    lowerPriorityLabel.isHidden = true\n                }\n            }\n        }\n    }\n\n    // todo: move this to bounds class with a test\n    private moveLabelsInsideChartBounds(\n        labels: ScatterLabel[],\n        bounds: Bounds\n    ): void {\n        for (const label of labels) {\n            if (label.bounds.left < bounds.left - 1)\n                label.bounds = label.bounds.set({\n                    x: label.bounds.x + label.bounds.width,\n                })\n            else if (label.bounds.right > bounds.right + 1)\n                label.bounds = label.bounds.set({\n                    x: label.bounds.x - label.bounds.width,\n                })\n\n            if (label.bounds.top < bounds.top - 1)\n                label.bounds = label.bounds.set({ y: bounds.top })\n            else if (label.bounds.bottom > bounds.bottom + 1)\n                label.bounds = label.bounds.set({\n                    y: bounds.bottom - label.bounds.height,\n                })\n        }\n    }\n\n    // Use a hybrid approach to mouseover:\n    // If the mouse is near the centroid of an element, that is prioritized\n    // Otherwise we fall back to the dot that the cursor is currently hovering over (if any)\n\n    @action.bound onPointMouseEnter(seriesName: string): void {\n        this.overSeries = this.seriesArray.find(\n            (series) => series.seriesName === seriesName\n        )\n        // only select if we're not already close to another point's center\n        if (this.overSeries && !this.nearSeries)\n            this.props.onMouseEnter?.(this.overSeries)\n    }\n\n    @action.bound onPointMouseLeave(): void {\n        this.overSeries = undefined\n        if (!this.nearSeries) this.props.onMouseLeave?.()\n    }\n\n    @action.bound onMouseMove(ev: React.MouseEvent<SVGGElement>): void {\n        if (this.base.current) {\n            const { x, y } = getRelativeMouse(this.base.current, ev)\n\n            // be more fine grained about finding nearby points when the cursor is\n            // already hovering over a larger dot in the background\n            const range = this.overSeries\n                ? SCATTER_POINT_HOVER_TARGET_RANGE / 4\n                : SCATTER_POINT_HOVER_TARGET_RANGE\n\n            // search for closest point to cursor position within range\n            const nearby = this.props.quadtree?.find(x, y, range)?.series\n            if (nearby) {\n                // only trigger listener if the selection has changed\n                if (nearby.seriesName !== this.nearSeries?.seriesName) {\n                    this.props.onMouseEnter?.(nearby)\n                }\n            } else if (this.nearSeries) {\n                // if we've just moved out of range of a nearby point, fall back to\n                // the currently hovered-over dot (if there is one)\n                this.props.onMouseLeave?.()\n                if (this.overSeries) {\n                    this.props.onMouseEnter?.(this.overSeries)\n                }\n            }\n            this.nearSeries = nearby\n        }\n    }\n\n    @action.bound onMouseLeave(): void {\n        // hide tooltip and clear hover state when leaving the chart's bounds\n        this.nearSeries = undefined\n        this.overSeries = undefined\n        if (this.props.onMouseLeave) this.props.onMouseLeave()\n    }\n\n    @action.bound onClick(): void {\n        if (this.props.onClick) this.props.onClick()\n    }\n\n    @computed get backgroundSeries(): ScatterRenderSeries[] {\n        return this.renderSeries.filter((series) => !series.isForeground)\n    }\n\n    @computed get foregroundSeries(): ScatterRenderSeries[] {\n        return this.renderSeries.filter((series) => !!series.isForeground)\n    }\n\n    private renderBackgroundSeries(): React.ReactElement | null {\n        const { backgroundSeries, isLayerMode, hideConnectedScatterLines } =\n            this\n\n        if (hideConnectedScatterLines) return null\n\n        return (\n            <g id={makeFigmaId(\"points\")}>\n                {backgroundSeries.map((series) => (\n                    <ScatterLine\n                        key={series.seriesName}\n                        series={series}\n                        isLayerMode={isLayerMode}\n                        onMouseEnter={this.onPointMouseEnter}\n                        onMouseLeave={this.onPointMouseLeave}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    private renderBackgroundLabels(): React.ReactElement {\n        const { isLayerMode } = this\n        return (\n            <g\n                id={makeFigmaId(\"labels\")}\n                className=\"backgroundLabels\"\n                fill={!isLayerMode ? \"#333\" : \"#aaa\"}\n            >\n                {this.backgroundSeries.map((series) => {\n                    return series.allLabels\n                        .filter((label) => !label.isHidden)\n                        .map((label) => (\n                            <Halo\n                                key={series.displayKey + \"-endLabel\"}\n                                id={makeFigmaId(\"outline\", series.seriesName)}\n                                outlineWidth={\n                                    GRAPHER_TEXT_OUTLINE_FACTOR * label.fontSize\n                                }\n                                outlineColor={this.props.backgroundColor}\n                            >\n                                <text\n                                    id={makeFigmaId(\"label\", label.text)}\n                                    x={label.bounds.x.toFixed(2)}\n                                    y={(\n                                        label.bounds.y + label.bounds.height\n                                    ).toFixed(2)}\n                                    fontSize={label.fontSize.toFixed(2)}\n                                    fontWeight={label.fontWeight}\n                                    fill={isLayerMode ? \"#aaa\" : label.color}\n                                    style={{ pointerEvents: \"none\" }}\n                                >\n                                    {label.text}\n                                </text>\n                            </Halo>\n                        ))\n                })}\n            </g>\n        )\n    }\n\n    @computed get renderUid(): number {\n        return guid()\n    }\n\n    private renderForegroundSeries(): React.ReactElement {\n        const { isSubtleForeground, hideConnectedScatterLines } = this\n        return (\n            <g id={makeFigmaId(\"points\")}>\n                {this.foregroundSeries.map((series) => {\n                    const lastPoint = R.last(series.points)!\n                    const strokeWidth =\n                        (hideConnectedScatterLines\n                            ? 3\n                            : series.isHover\n                              ? 3\n                              : isSubtleForeground\n                                ? 1.5\n                                : 2) +\n                        lastPoint.size / 2\n\n                    if (series.points.length === 1)\n                        return (\n                            <ScatterPoint\n                                key={series.displayKey}\n                                series={series}\n                                hideFocusRing={this.props.hideFocusRing}\n                                onMouseEnter={this.onPointMouseEnter}\n                                onMouseLeave={this.onPointMouseLeave}\n                            />\n                        )\n\n                    const firstValue = R.first(series.points)\n                    const opacity = isSubtleForeground ? 0.9 : 1\n                    const radius = hideConnectedScatterLines\n                        ? strokeWidth\n                        : strokeWidth / 2 + 1\n                    let rotation = PointVector.angle(\n                        series.offsetVector,\n                        PointVector.up\n                    )\n                    if (series.offsetVector.x < 0) rotation = -rotation\n                    return (\n                        <g\n                            id={makeFigmaId(\"time-scatter\", series.displayKey)}\n                            key={series.displayKey}\n                            className={series.displayKey}\n                        >\n                            {!hideConnectedScatterLines && (\n                                <MultiColorPolyline\n                                    points={series.points.map((point) => ({\n                                        x: point.position.x,\n                                        y: point.position.y,\n                                        color: point.color,\n                                    }))}\n                                    strokeWidth={strokeWidth}\n                                    opacity={opacity}\n                                />\n                            )}\n                            {(series.isFocus || hideConnectedScatterLines) &&\n                                firstValue && (\n                                    <circle\n                                        cx={firstValue.position.x}\n                                        cy={firstValue.position.y}\n                                        r={radius}\n                                        fill={firstValue.color}\n                                        opacity={opacity}\n                                        stroke={firstValue.color}\n                                        strokeOpacity={0.6}\n                                    />\n                                )}\n                            {(series.isHover || hideConnectedScatterLines) &&\n                                series.points\n                                    .slice(\n                                        1,\n                                        hideConnectedScatterLines\n                                            ? undefined\n                                            : -1\n                                    )\n                                    .map((v, index) => (\n                                        <circle\n                                            key={index}\n                                            cx={v.position.x}\n                                            cy={v.position.y}\n                                            r={radius}\n                                            fill={v.color}\n                                            stroke=\"none\"\n                                        />\n                                    ))}\n                            {!hideConnectedScatterLines && (\n                                <Triangle\n                                    cx={lastPoint.position.x}\n                                    cy={lastPoint.position.y}\n                                    r={1.5 + strokeWidth}\n                                    rotation={rotation}\n                                    fill={lastPoint.color}\n                                    opacity={opacity}\n                                />\n                            )}\n                        </g>\n                    )\n                })}\n            </g>\n        )\n    }\n\n    private renderForegroundLabels(): React.ReactElement {\n        return (\n            <g id={makeFigmaId(\"labels\")}>\n                {this.foregroundSeries.map((series) => {\n                    return series.allLabels\n                        .filter((label) => !label.isHidden)\n                        .map((label, index) => (\n                            <Halo\n                                id={makeFigmaId(\"outline\", series.seriesName)}\n                                key={`${series.displayKey}-label-${index}`}\n                                outlineWidth={\n                                    GRAPHER_TEXT_OUTLINE_FACTOR * label.fontSize\n                                }\n                                outlineColor={this.props.backgroundColor}\n                            >\n                                <text\n                                    id={makeFigmaId(\"label\", series.seriesName)}\n                                    x={label.bounds.x.toFixed(2)}\n                                    y={(\n                                        label.bounds.y + label.bounds.height\n                                    ).toFixed(2)}\n                                    fontSize={label.fontSize}\n                                    fontWeight={label.fontWeight}\n                                    fill={label.color}\n                                >\n                                    {label.text}\n                                </text>\n                            </Halo>\n                        ))\n                })}\n            </g>\n        )\n    }\n\n    animSelection?: Selection<BaseType, unknown, SVGGElement | null, unknown>\n\n    private runAnimation(): void {\n        const radiuses: string[] = []\n        this.animSelection = select(this.base.current).selectAll(\"circle\")\n\n        this.animSelection\n            .each(function () {\n                const circle = this as SVGCircleElement\n                radiuses.push(circle.getAttribute(\"r\") as string)\n                circle.setAttribute(\"r\", \"0\")\n            })\n            .transition()\n            .duration(500)\n            .attr(\"r\", (_, i) => radiuses[i])\n            .on(\"end\", () => this.forceUpdate())\n    }\n\n    override componentDidMount(): void {\n        if (!this.props.disableIntroAnimation) {\n            this.runAnimation()\n        }\n    }\n\n    override componentWillUnmount(): void {\n        if (this.animSelection) this.animSelection.interrupt()\n    }\n\n    override render(): React.ReactElement {\n        const { bounds, renderSeries, renderUid } = this\n        const clipBounds = bounds.pad(-10)\n\n        if (_.isEmpty(renderSeries))\n            return (\n                <NoDataModal\n                    manager={this.props.noDataModalManager}\n                    bounds={bounds}\n                />\n            )\n\n        return (\n            <g\n                ref={this.base}\n                id={makeFigmaId(\"scatter-points\")}\n                className=\"PointsWithLabels clickable\"\n                clipPath={`url(#scatterBounds-${renderUid})`}\n                onMouseMove={this.onMouseMove}\n                onMouseLeave={this.onMouseLeave}\n                onClick={this.onClick}\n            >\n                <rect\n                    key=\"background\"\n                    x={bounds.x}\n                    y={bounds.y}\n                    width={bounds.width}\n                    height={bounds.height}\n                    fill=\"rgba(255,255,255,0)\"\n                />\n                <defs>\n                    <clipPath id={`scatterBounds-${renderUid}`}>\n                        <rect\n                            x={clipBounds.x}\n                            y={clipBounds.y}\n                            width={clipBounds.width}\n                            height={clipBounds.height}\n                        />\n                    </clipPath>\n                </defs>\n                {this.renderBackgroundSeries()}\n                {this.renderBackgroundLabels()}\n                {this.renderForegroundSeries()}\n                {this.renderForegroundLabels()}\n            </g>\n        )\n    }\n}\n","import * as React from \"react\"\nimport * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { scaleLinear, ScaleLinear } from \"d3-scale\"\nimport { TextWrap, Halo } from \"@ourworldindata/components\"\nimport {\n    Color,\n    makeFigmaId,\n    OwidVariableRoundingMode,\n} from \"@ourworldindata/utils\"\nimport {\n    BASE_FONT_SIZE,\n    GRAPHER_FONT_SCALE_10,\n    GRAPHER_FONT_SCALE_11,\n    GRAPHER_TEXT_OUTLINE_FACTOR,\n} from \"../core/GrapherConstants\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport {\n    ScatterSeries,\n    SCATTER_POINT_MAX_RADIUS,\n    SCATTER_POINT_OPACITY,\n    SCATTER_POINT_STROKE_WIDTH,\n    SCATTER_POINT_DEFAULT_RADIUS,\n} from \"./ScatterPlotChartConstants\"\nimport { darkenColorForText } from \"../color/ColorUtils\"\nimport {\n    GRAPHER_BACKGROUND_DEFAULT,\n    GRAPHER_DARK_TEXT,\n    GRAPHER_LIGHT_TEXT,\n} from \"../color/ColorConstants\"\n\nexport interface ScatterSizeLegendManager {\n    sidebarWidth: number\n    sizeColumn: CoreColumn\n    sizeScale: ScaleLinear<number, number>\n    fontSize?: number\n    tooltipSeries?: ScatterSeries\n    backgroundColor?: Color\n}\n\nconst LEGEND_PADDING = 3\nconst LEGEND_CIRCLE_COLOR = \"#bbb\"\nconst LEGEND_VALUE_COLOR = \"#444\"\nconst LABEL_PADDING = 2\nconst LABEL_COLOR = GRAPHER_LIGHT_TEXT\nconst TITLE_COLOR = GRAPHER_DARK_TEXT\n\nconst MIN_FONT_SIZE = 9\n\nexport class ScatterSizeLegend {\n    manager: ScatterSizeLegendManager\n    constructor(manager: ScatterSizeLegendManager) {\n        makeObservable(this)\n        this.manager = manager\n    }\n\n    @computed private get baseFontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get maxWidth(): number {\n        return this.manager.sidebarWidth\n    }\n\n    @computed private get ticks(): number[] {\n        const { sizeScale } = this.manager\n        const [domainStart, domainEnd] = sizeScale.domain()\n        if (domainStart === domainEnd) return [domainStart]\n        const [largestTick, ...restTicks] = sizeScale.ticks(6).toReversed()\n        if (largestTick === undefined) return []\n        const ticks = [largestTick]\n        restTicks.forEach((value) => {\n            if (\n                // make sure there is enough distance to prevent overlap with previous tick\n                sizeScale(value) <= sizeScale(R.last(ticks)!) - 6 &&\n                // don't go below the minimum tick radius\n                sizeScale(value) >= 6\n            ) {\n                ticks.push(value)\n            }\n        })\n        return ticks\n    }\n\n    private getPointRadius(value: number | undefined): number {\n        if (value === undefined) return SCATTER_POINT_DEFAULT_RADIUS\n        return this.manager.sizeScale(value)\n    }\n\n    // input radius, output font size\n    @computed private get fontSizeFromRadius(): ScaleLinear<number, number> {\n        return (\n            scaleLinear()\n                // choosing the domain & range somewhat arbitrarily here,\n                // by experimenting visually with font sizes\n                .domain([6, SCATTER_POINT_MAX_RADIUS])\n                .range([8, 11])\n                .clamp(true)\n        )\n    }\n\n    // Since it's circular, this is both the width and the height of the legend.\n    @computed private get legendSize(): number {\n        if (this.ticks.length === 0) return 0\n        const maxRadius = R.last(this.manager.sizeScale.range()) ?? 0\n        // adding some padding to account for label sticking out at the top\n        return 2 * maxRadius + 2\n    }\n\n    @computed private get label(): TextWrap {\n        const fontSize = Math.max(\n            MIN_FONT_SIZE,\n            GRAPHER_FONT_SCALE_10 * this.baseFontSize\n        )\n        return new TextWrap({\n            text: \"Circles sized by\",\n            // Allow text to _slightly_ go outside boundaries.\n            // Since we have padding left and right, this doesn't\n            // actually visibly overflow.\n            maxWidth: this.maxWidth + 12,\n            fontSize,\n            lineHeight: 1,\n        })\n    }\n\n    @computed private get title(): TextWrap {\n        const fontSize = Math.max(\n            MIN_FONT_SIZE,\n            GRAPHER_FONT_SCALE_11 * this.baseFontSize\n        )\n        return new TextWrap({\n            text: this.manager.sizeColumn.displayName,\n            // Allow text to _slightly_ go outside boundaries.\n            // Since we have padding left and right, this doesn't\n            // actually visibly overflow.\n            maxWidth: this.maxWidth + 10,\n            fontSize,\n            fontWeight: 700,\n            lineHeight: 1,\n        })\n    }\n\n    @computed get width(): number {\n        return this.manager.sidebarWidth\n    }\n\n    @computed get height(): number {\n        return (\n            this.legendSize +\n            LEGEND_PADDING +\n            this.label.height +\n            LABEL_PADDING +\n            this.title.height\n        )\n    }\n\n    @computed private get highlight():\n        | { value: number | undefined; color: string }\n        | undefined {\n        const { tooltipSeries } = this.manager\n        if (\n            tooltipSeries?.points.length === 1 &&\n            R.first(tooltipSeries.points)?.size !== undefined\n        ) {\n            return {\n                value: R.first(tooltipSeries.points)!.size,\n                color: tooltipSeries.color,\n            }\n        }\n        return undefined\n    }\n\n    private renderLegend(targetX: number, targetY: number): React.ReactElement {\n        const { highlight } = this\n        const cx = targetX + this.maxWidth / 2\n        return (\n            <React.Fragment>\n                {this.ticks.map((value) => {\n                    const radius = this.getPointRadius(value)\n                    return (\n                        <LegendItem\n                            key={value}\n                            label={this.manager.sizeColumn.formatValueShortWithAbbreviations(\n                                value,\n                                {\n                                    roundingMode:\n                                        OwidVariableRoundingMode.decimalPlaces,\n                                }\n                            )}\n                            cx={cx}\n                            cy={targetY + this.legendSize - radius}\n                            circleRadius={radius}\n                            circleStroke={\n                                highlight ? \"#ddd\" : LEGEND_CIRCLE_COLOR\n                            }\n                            labelFontSize={this.fontSizeFromRadius(radius)}\n                            labelFill={highlight ? \"#bbb\" : LEGEND_VALUE_COLOR}\n                            backgroundColor={this.manager.backgroundColor}\n                        />\n                    )\n                })}\n                {highlight && (\n                    <LegendItem\n                        key={highlight.value}\n                        label={this.manager.sizeColumn.formatValueShort(\n                            highlight.value\n                        )}\n                        cx={cx}\n                        cy={\n                            targetY +\n                            this.legendSize -\n                            this.getPointRadius(highlight.value)\n                        }\n                        circleFill={highlight.color}\n                        circleStroke={\"#333\"}\n                        circleStrokeWidth={SCATTER_POINT_STROKE_WIDTH}\n                        circleRadius={this.getPointRadius(highlight.value)}\n                        circleOpacity={SCATTER_POINT_OPACITY}\n                        labelFontSize={12}\n                        labelFill={darkenColorForText(highlight.color)}\n                        labelFontWeight={700}\n                        outsideLabel={true}\n                        backgroundColor={this.manager.backgroundColor}\n                    />\n                )}\n            </React.Fragment>\n        )\n    }\n\n    render(\n        targetX: number,\n        targetY: number,\n        renderOptions: React.SVGAttributes<SVGGElement> = {}\n    ): React.ReactElement {\n        const centerX = targetX + this.maxWidth / 2\n        return (\n            <g id={makeFigmaId(\"size-legend\")} {...renderOptions}>\n                {this.renderLegend(targetX, targetY)}\n                {this.label.renderSVG(\n                    centerX,\n                    targetY + this.legendSize + LEGEND_PADDING,\n                    {\n                        textProps: {\n                            fill: LABEL_COLOR,\n                            textAnchor: \"middle\",\n                        },\n                    }\n                )}\n                {this.title.renderSVG(\n                    centerX,\n                    targetY +\n                        this.legendSize +\n                        LEGEND_PADDING +\n                        this.label.height +\n                        LABEL_PADDING,\n                    {\n                        textProps: {\n                            fill: TITLE_COLOR,\n                            textAnchor: \"middle\",\n                        },\n                    }\n                )}\n            </g>\n        )\n    }\n}\n\nconst LegendItem = ({\n    label,\n    cx,\n    cy,\n    circleRadius,\n    circleFill = \"none\",\n    circleStroke = LEGEND_CIRCLE_COLOR,\n    circleStrokeWidth = 1.25,\n    circleOpacity = 1,\n    labelFill = LEGEND_VALUE_COLOR,\n    labelFontSize,\n    labelFontWeight = 400,\n    outsideLabel = false,\n    backgroundColor = GRAPHER_BACKGROUND_DEFAULT,\n}: {\n    label: string\n    cx: number\n    cy: number\n    circleRadius: number\n    circleFill?: string\n    circleStroke?: string\n    circleStrokeWidth?: number\n    circleOpacity?: number\n    labelFill?: string\n    labelFontSize: number\n    labelFontWeight?: number\n    outsideLabel?: boolean\n    backgroundColor?: Color\n}): React.ReactElement => {\n    return (\n        <g>\n            <circle\n                cx={cx}\n                cy={cy}\n                r={circleRadius}\n                fill={circleFill}\n                stroke={circleStroke}\n                strokeWidth={circleStrokeWidth}\n                opacity={circleOpacity}\n            />\n            <Halo\n                id={label}\n                outlineWidth={GRAPHER_TEXT_OUTLINE_FACTOR * labelFontSize}\n                outlineColor={backgroundColor}\n            >\n                <text\n                    x={cx}\n                    y={cy - circleRadius}\n                    dy={outsideLabel ? \"-.32em\" : \".47em\"}\n                    fill={labelFill}\n                    fontSize={labelFontSize}\n                    fontWeight={labelFontWeight}\n                    textAnchor=\"middle\"\n                >\n                    {label}\n                </text>\n            </Halo>\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { computed } from \"mobx\"\nimport {\n    excludeNullish,\n    excludeUndefined,\n    calculateTrendDirection,\n    Time,\n    RequiredBy,\n} from \"@ourworldindata/utils\"\nimport { ColumnTypeMap, CoreColumn } from \"@ourworldindata/core-table\"\nimport {\n    Tooltip,\n    TooltipState,\n    TooltipValueRange,\n    makeTooltipToleranceNotice,\n    makeTooltipRoundingNotice,\n    formatTooltipRangeValues,\n    TooltipValue,\n} from \"../tooltip/Tooltip\"\nimport { FooterItem, TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport { ScatterSeries, SeriesPoint } from \"./ScatterPlotChartConstants\"\nimport { ScatterPlotChartState } from \"./ScatterPlotChartState\"\n\nexport interface ScatterPlotTooltipProps {\n    chartState: ScatterPlotChartState\n    tooltipState: TooltipState<{ series: ScatterSeries }>\n}\n\ninterface TooltipValueRangeProps {\n    chartState: ScatterPlotChartState\n    points?: SeriesPoint[]\n    values: SeriesPoint[]\n    showSignificanceSuperscript?: boolean\n    showOriginalTimes?: boolean\n}\n\n@observer\nexport class ScatterPlotTooltip extends React.Component<ScatterPlotTooltipProps> {\n    @computed private get chartState(): ScatterPlotChartState {\n        return this.props.chartState\n    }\n\n    @computed private get points(): SeriesPoint[] {\n        return this.props.tooltipState.target?.series.points ?? []\n    }\n\n    @computed private get values(): SeriesPoint[] {\n        return excludeNullish(\n            _.uniq([R.first(this.points), R.last(this.points)])\n        )\n    }\n\n    @computed private get toleranceNotice(): FooterItem | undefined {\n        const { points, values } = this\n        const { xColumn, yColumn, manager, isTimeScatter } = this.chartState\n        const { startTime, endTime } = manager\n\n        // No tolerance notice needed if comparing the same variable across years\n        if (hasSameVariableWithTimeOverride(xColumn, yColumn, points)) {\n            return undefined\n        }\n\n        // No tolerance notice needed for time scatter plots\n        if (isTimeScatter) return undefined\n\n        // Check the time span in relative mode\n        if (manager.isRelativeMode) {\n            const [start, end] = points[0].time.span ?? []\n            const noticeNeeded = hasTimeMismatch({\n                actualStartTime: start,\n                actualEndTime: end,\n                targetStartTime: startTime,\n                targetEndTime: endTime,\n            })\n\n            if (!noticeNeeded) return undefined\n\n            return makeToleranceNotice({\n                startTime,\n                endTime,\n                formatTime: (time) => yColumn.formatTime(time),\n            })\n        }\n\n        const { x: xStart, y: yStart } = R.first(values)?.time ?? {}\n        const { x: xEnd, y: yEnd } = R.last(values)?.time ?? {}\n\n        const xNoticeNeeded = hasTimeMismatch({\n            actualStartTime: xStart,\n            actualEndTime: xEnd,\n            targetStartTime: startTime,\n            targetEndTime: endTime,\n        })\n        const yNoticeNeeded = hasTimeMismatch({\n            actualStartTime: yStart,\n            actualEndTime: yEnd,\n            targetStartTime: startTime,\n            targetEndTime: endTime,\n        })\n\n        if (!xNoticeNeeded && !yNoticeNeeded) return undefined\n\n        return makeToleranceNotice({\n            startTime,\n            endTime,\n            formatTime: (time) => yColumn.formatTime(time),\n        })\n    }\n\n    @computed private get roundingNotice(): FooterItem | undefined {\n        const { xColumn, yColumn, sizeColumn } = this.props.chartState\n\n        const columns = [xColumn, yColumn, sizeColumn].filter(\n            (column) => !column.isMissing && !column.isTimeColumn\n        )\n\n        const allRoundedToSigFigs = columns.every(\n            (column) => column.roundsToSignificantFigures\n        )\n        const anyRoundedToSigFigs = columns.some(\n            (column) => column.roundsToSignificantFigures\n        )\n\n        if (!anyRoundedToSigFigs) return undefined\n\n        const sigFigs = excludeUndefined(\n            columns.map((column) =>\n                column.roundsToSignificantFigures\n                    ? column.numSignificantFigures\n                    : undefined\n            )\n        )\n\n        return {\n            icon: allRoundedToSigFigs\n                ? TooltipFooterIcon.None\n                : TooltipFooterIcon.Significance,\n            text: makeTooltipRoundingNotice(sigFigs, {\n                plural: sigFigs.length > 1,\n            }),\n        }\n    }\n\n    @computed private get showSignificanceSuperscript(): boolean {\n        return this.roundingNotice?.icon === TooltipFooterIcon.Significance\n    }\n\n    @computed private get footer(): FooterItem[] {\n        return excludeUndefined([this.toleranceNotice, this.roundingNotice])\n    }\n\n    @computed private get subtitle(): string {\n        const { manager, yColumn, xColumn } = this.chartState\n        const { startTime, endTime, isRelativeMode } = manager\n\n        let times: Time[]\n        if (hasSameVariableWithTimeOverride(xColumn, yColumn, this.points)) {\n            times = _.sortBy([this.points[0].time.x, this.points[0].time.y])\n        } else if (this.chartState.isTimeScatter) {\n            times = _.uniq(excludeNullish(this.values.map((v) => v.time.y)))\n        } else {\n            times = _.uniq(excludeNullish([startTime, endTime]))\n        }\n\n        const timeRange = times.map((t) => yColumn.formatTime(t)).join(\" to \")\n\n        return timeRange + (isRelativeMode ? \" (avg. annual change)\" : \"\")\n    }\n\n    override render(): React.ReactElement | null {\n        const { showSignificanceSuperscript } = this\n        const { chartState, tooltipState } = this.props\n\n        const { target, position, fading } = tooltipState\n        if (!target) return null\n\n        const hasToleranceNotice = this.toleranceNotice !== undefined\n\n        return (\n            <Tooltip\n                id=\"scatterTooltip\"\n                tooltipManager={chartState.manager}\n                x={position.x}\n                y={position.y}\n                offsetX={20}\n                offsetY={-16}\n                style={{ maxWidth: \"250px\" }}\n                title={target.series.label}\n                subtitle={this.subtitle}\n                dissolve={fading}\n                footer={this.footer}\n                dismiss={() => (tooltipState.target = null)}\n            >\n                <TooltipValueRangeX\n                    chartState={chartState}\n                    points={this.points}\n                    values={this.values}\n                    showSignificanceSuperscript={showSignificanceSuperscript}\n                    showOriginalTimes={hasToleranceNotice}\n                />\n                <TooltipValueRangeY\n                    chartState={chartState}\n                    points={this.points}\n                    values={this.values}\n                    showSignificanceSuperscript={showSignificanceSuperscript}\n                    showOriginalTimes={hasToleranceNotice}\n                />\n                <TooltipValueRangeSize\n                    chartState={chartState}\n                    values={this.values}\n                    showSignificanceSuperscript={showSignificanceSuperscript}\n                />\n                <TooltipValueColor\n                    chartState={chartState}\n                    values={this.values}\n                />\n            </Tooltip>\n        )\n    }\n}\n\nfunction TooltipValueRangeX({\n    chartState,\n    points,\n    values,\n    showSignificanceSuperscript,\n    showOriginalTimes,\n}: RequiredBy<TooltipValueRangeProps, \"points\">): React.ReactElement | null {\n    const { xColumn } = chartState\n\n    if (xColumn.isMissing || xColumn.isTimeColumn) return null\n\n    const { values: xValues, originalTimes = [] } = getXValuesWithTimes(\n        chartState,\n        points,\n        values\n    )\n\n    const formattedOriginalTimes = showOriginalTimes\n        ? originalTimes.map((time) => formatTime(time, xColumn))\n        : []\n\n    return (\n        <TooltipValueRange\n            label={xColumn.displayName}\n            unit={xColumn.displayUnit}\n            values={formatTooltipRangeValues(xValues, xColumn)}\n            trend={calculateTrendDirection(...xValues)}\n            originalTimes={formattedOriginalTimes}\n            isRoundedToSignificantFigures={xColumn.roundsToSignificantFigures}\n            showSignificanceSuperscript={showSignificanceSuperscript}\n        />\n    )\n}\n\nfunction TooltipValueRangeY({\n    chartState,\n    points,\n    values,\n    showSignificanceSuperscript,\n    showOriginalTimes,\n}: RequiredBy<TooltipValueRangeProps, \"points\">): React.ReactElement | null {\n    const { yColumn } = chartState\n\n    if (yColumn.isMissing) return null\n\n    const { values: yValues, originalTimes = [] } = getYValuesWithTimes(\n        chartState,\n        points,\n        values\n    )\n\n    const formattedOriginalTimes = showOriginalTimes\n        ? originalTimes.map((time) => formatTime(time, yColumn))\n        : []\n\n    return (\n        <TooltipValueRange\n            label={yColumn.displayName}\n            unit={yColumn.displayUnit}\n            values={formatTooltipRangeValues(yValues, yColumn)}\n            trend={calculateTrendDirection(...yValues)}\n            originalTimes={formattedOriginalTimes}\n            isRoundedToSignificantFigures={yColumn.roundsToSignificantFigures}\n            showSignificanceSuperscript={showSignificanceSuperscript}\n        />\n    )\n}\n\nfunction TooltipValueRangeSize({\n    chartState,\n    values,\n    showSignificanceSuperscript,\n}: TooltipValueRangeProps): React.ReactElement | null {\n    const { sizeColumn } = chartState\n\n    if (sizeColumn.isMissing) return null\n\n    const sizeValues = excludeNullish(values.map((v) => v.size))\n\n    return (\n        <TooltipValueRange\n            label={sizeColumn.displayName}\n            unit={sizeColumn.displayUnit}\n            values={formatTooltipRangeValues(sizeValues, sizeColumn)}\n            trend={calculateTrendDirection(...sizeValues)}\n            isRoundedToSignificantFigures={\n                sizeColumn.roundsToSignificantFigures\n            }\n            showSignificanceSuperscript={showSignificanceSuperscript}\n        />\n    )\n}\n\nfunction TooltipValueColor({\n    chartState,\n    values,\n}: TooltipValueRangeProps): React.ReactElement | null {\n    const { colorColumn, colorScale } = chartState\n\n    if (colorColumn.isMissing || colorColumn instanceof ColumnTypeMap.Continent)\n        return null\n\n    const value = values.at(-1)\n    const colorValue = value?.color\n    if (!colorValue) return null\n\n    // Get the legend label for this color value\n    const bin = colorScale.getBinForValue(colorValue)\n    const displayValue = bin?.label ?? colorValue.toString()\n\n    return (\n        <TooltipValue\n            label={colorScale.legendDescription ?? colorColumn.displayName}\n            value={displayValue}\n        />\n    )\n}\n\n/**\n * Detects when a scatter plot compares the same variable across two different years.\n *\n * Example: GDP in 2020 (y-axis) vs GDP in 2010 (x-axis).\n */\nfunction hasSameVariableWithTimeOverride(\n    xColumn: CoreColumn,\n    yColumn: CoreColumn,\n    points: SeriesPoint[]\n): boolean {\n    // Check if there is exactly one point\n    if (points.length !== 1) return false\n\n    // Check if both axes use the same dataset/variable\n    const isSameDataset = xColumn.def.datasetId === yColumn.def.datasetId\n    if (!isSameDataset) return false\n\n    // Check if the point has different time points for x and y\n    const point = points[0]\n    const hasDifferentTimes =\n        point.time.x !== point.time.y &&\n        _.isNumber(point.time.x) &&\n        _.isNumber(point.time.y)\n\n    return hasDifferentTimes\n}\n\nfunction hasTimeMismatch({\n    actualStartTime,\n    actualEndTime,\n    targetStartTime,\n    targetEndTime,\n}: {\n    actualStartTime?: Time\n    actualEndTime?: Time\n    targetStartTime?: Time\n    targetEndTime?: Time\n}): boolean {\n    const startTimesDiffer =\n        actualStartTime !== undefined && actualStartTime !== targetStartTime\n    const endTimesDiffer =\n        actualEndTime !== undefined && actualEndTime !== targetEndTime\n\n    return startTimesDiffer || endTimesDiffer\n}\n\nfunction makeToleranceNotice({\n    startTime,\n    endTime,\n    formatTime,\n}: {\n    startTime?: Time\n    endTime?: Time\n    formatTime: (time: Time) => string\n}): FooterItem {\n    const targetNotice = _.uniq(excludeNullish([startTime, endTime]))\n        .map((t) => formatTime(t))\n        .join(\" to \")\n\n    return {\n        icon: TooltipFooterIcon.Notice,\n        text: makeTooltipToleranceNotice(targetNotice),\n    }\n}\n\nfunction getXValuesWithTimes(\n    chartState: ScatterPlotChartState,\n    points: SeriesPoint[],\n    values: SeriesPoint[]\n): {\n    values: number[]\n    originalTimes: (number | undefined)[]\n} {\n    const { xColumn, yColumn, manager } = chartState\n    const { startTime, endTime, isRelativeMode } = manager\n\n    const firstValue = R.first(values)\n    const lastValue = R.last(values)\n\n    if (!firstValue || !lastValue) return { values: [], originalTimes: [] }\n\n    // Handle the special case where the same variable is used for both axes\n    // with a different year's value on each\n    if (hasSameVariableWithTimeOverride(xColumn, yColumn, points)) {\n        const point = points[0]\n        const values =\n            point.time.x < point.time.y\n                ? [point.x, point.y]\n                : [point.y, point.x]\n        return { values, originalTimes: [] }\n    }\n\n    const xStart = firstValue.time.x\n    const xEnd = lastValue.time.x\n\n    const xValues = xStart === xEnd ? [firstValue.x] : values.map((v) => v.x)\n\n    if (isRelativeMode) {\n        const originalTimes = getOriginalTimesForRelativeMode({\n            span: firstValue.time.span,\n            startTime,\n            endTime,\n        })\n\n        return { values: xValues, originalTimes }\n    }\n\n    // Check if tolerance notice is needed\n    const noticeNeeded = hasTimeMismatch({\n        actualStartTime: xStart,\n        actualEndTime: xEnd,\n        targetStartTime: startTime,\n        targetEndTime: endTime,\n    })\n\n    const originalTimes = noticeNeeded\n        ? xStart === xEnd\n            ? [xEnd]\n            : [xStart, xEnd]\n        : []\n\n    return { values: xValues, originalTimes }\n}\n\nfunction getYValuesWithTimes(\n    chartState: ScatterPlotChartState,\n    points: SeriesPoint[],\n    values: SeriesPoint[]\n): {\n    values: number[]\n    originalTimes: (number | undefined)[]\n} {\n    const { xColumn, yColumn, manager } = chartState\n    const { startTime, endTime, isRelativeMode } = manager\n\n    // Handle the special case where the x-axis is time\n    if (chartState.isTimeScatter) {\n        return { values: values.map((v) => v.y), originalTimes: [] }\n    }\n\n    // Handle the special case where the same variable is used for both axes\n    // with a different year's value on each\n    if (hasSameVariableWithTimeOverride(xColumn, yColumn, points)) {\n        // Don't return anything (values shown on X axis)\n        return { values: [], originalTimes: [] }\n    }\n\n    const firstValue = R.first(values)\n    const lastValue = R.last(values)\n\n    if (!firstValue || !lastValue) {\n        return { values: [], originalTimes: [] }\n    }\n\n    const yStart = firstValue.time.y\n    const yEnd = lastValue.time.y\n\n    const yValues = yStart === yEnd ? [firstValue.y] : values.map((v) => v.y)\n\n    if (isRelativeMode) {\n        const originalTimes = getOriginalTimesForRelativeMode({\n            span: firstValue.time.span,\n            startTime,\n            endTime,\n        })\n\n        return { values: yValues, originalTimes }\n    }\n\n    // Check if tolerance notice is needed\n    const noticeNeeded = hasTimeMismatch({\n        actualStartTime: yStart,\n        actualEndTime: yEnd,\n        targetStartTime: startTime,\n        targetEndTime: endTime,\n    })\n\n    const originalTimes = noticeNeeded\n        ? yStart === yEnd\n            ? [yEnd]\n            : [yStart, yEnd]\n        : []\n\n    return { values: yValues, originalTimes }\n}\n\nfunction getOriginalTimesForRelativeMode({\n    startTime,\n    endTime,\n    span,\n}: {\n    span?: [number, number]\n    startTime?: Time\n    endTime?: Time\n}): (number | undefined)[] {\n    if (!span) return []\n\n    const [spanStart, spanEnd] = span\n    const noticeNeeded = hasTimeMismatch({\n        actualStartTime: spanStart,\n        actualEndTime: spanEnd,\n        targetStartTime: startTime,\n        targetEndTime: endTime,\n    })\n\n    return noticeNeeded\n        ? spanStart === spanEnd\n            ? [spanEnd]\n            : [spanStart, spanEnd]\n        : []\n}\n\nfunction formatTime(\n    time: Time | undefined,\n    column: CoreColumn\n): string | undefined {\n    if (time === undefined) return undefined\n    return column.formatTime(time)\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { EntitySelectionMode, SeriesName, Color } from \"@ourworldindata/types\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport { ScaleLinear, scaleSqrt } from \"d3-scale\"\nimport { Quadtree, quadtree } from \"d3-quadtree\"\nimport { pairs } from \"d3-array\"\nimport { quantize, interpolate } from \"d3-interpolate\"\nimport {\n    intersection,\n    excludeUndefined,\n    getRelativeMouse,\n    exposeInstanceOnWindow,\n    PointVector,\n    Bounds,\n    isTouchDevice,\n    makeFigmaId,\n    guid,\n} from \"@ourworldindata/utils\"\nimport { observer } from \"mobx-react\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport {\n    OwidTable,\n    isNotErrorValue,\n    CoreColumn,\n} from \"@ourworldindata/core-table\"\nimport {\n    ConnectedScatterLegend,\n    ConnectedScatterLegendManager,\n} from \"./ConnectedScatterLegend\"\nimport {\n    VerticalColorLegend,\n    VerticalColorLegendManager,\n} from \"../legend/VerticalColorLegend\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\n\nimport { ColorScale, NO_DATA_LABEL } from \"../color/ColorScale\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport {\n    ClipPath,\n    getShortNameForEntity,\n    makeClipPath,\n} from \"../chart/ChartUtils\"\nimport {\n    ScatterPlotManager,\n    ScatterSeries,\n    SCATTER_LABEL_DEFAULT_FONT_SIZE_FACTOR,\n    SCATTER_LABEL_MAX_FONT_SIZE_FACTOR,\n    SCATTER_LABEL_MIN_FONT_SIZE_FACTOR,\n    SCATTER_POINT_OPACITY,\n    SeriesPoint,\n    ScatterPointQuadtreeNode,\n    SCATTER_QUADTREE_SAMPLING_DISTANCE,\n} from \"./ScatterPlotChartConstants\"\nimport { ScatterPointsWithLabels } from \"./ScatterPointsWithLabels\"\nimport { ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport {\n    ScatterSizeLegend,\n    ScatterSizeLegendManager,\n} from \"./ScatterSizeLegend\"\nimport { TooltipState } from \"../tooltip/Tooltip\"\nimport { NoDataSection } from \"./NoDataSection\"\nimport { ScatterPlotChartState } from \"./ScatterPlotChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { toSizeRange } from \"./ScatterUtils.js\"\nimport { ScatterPlotTooltip } from \"./ScatterPlotTooltip\"\nimport { GRAY_100, GRAY_60 } from \"../color/ColorConstants\"\nimport { INACTIVE_SCATTER_POINT_COLOR } from \"./ScatterPoints\"\n\nexport type ScatterPlotChartProps = ChartComponentProps<ScatterPlotChartState>\n\n@observer\nexport class ScatterPlotChart\n    extends React.Component<ScatterPlotChartProps>\n    implements\n        ConnectedScatterLegendManager,\n        ScatterSizeLegendManager,\n        ChartInterface,\n        VerticalColorLegendManager,\n        AxisManager\n{\n    constructor(props: ScatterPlotChartProps) {\n        super(props)\n\n        makeObservable<ScatterPlotChart, \"hoveredLegendColor\">(this, {\n            hoveredLegendColor: observable,\n            tooltipState: observable,\n        })\n    }\n\n    // currently hovered legend color\n    private hoveredLegendColor: Color | undefined = undefined\n    // current hovered individual series + tooltip position\n    tooltipState = new TooltipState<{\n        series: ScatterSeries\n    }>()\n\n    legendStyleConfig: LegendStyleConfig = {\n        marker: {\n            default: { opacity: SCATTER_POINT_OPACITY },\n            muted: { fill: INACTIVE_SCATTER_POINT_COLOR },\n        },\n        text: { muted: { color: GRAY_60 }, highlighted: { color: GRAY_100 } },\n    }\n\n    @computed get chartState(): ScatterPlotChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): ScatterPlotManager {\n        return this.chartState.manager\n    }\n\n    @computed private get colorScale(): ColorScale {\n        return this.chartState.colorScale\n    }\n\n    @computed private get transformedTable(): OwidTable {\n        return this.chartState.transformedTable\n    }\n\n    @computed.struct private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return (\n            this.bounds\n                .padRight(this.sidebarWidth > 0 ? this.sidebarWidth + 20 : 0)\n                // top padding leaves room for tick labels\n                .padTop(this.chartState.verticalAxisLabel ? 0 : 6)\n                // bottom padding makes sure the x-axis label doesn't overflow\n                .padBottom(2)\n        )\n    }\n\n    @computed get axisBounds(): Bounds {\n        return this.innerBounds\n    }\n\n    @computed get isStatic(): boolean {\n        return !!this.manager.isStatic\n    }\n\n    @computed private get canAddCountry(): boolean {\n        const { addCountryMode } = this.manager\n        return (addCountryMode &&\n            addCountryMode !== EntitySelectionMode.Disabled) as boolean\n    }\n\n    @action.bound private onSelectEntity(entityName: SeriesName): void {\n        if (this.canAddCountry)\n            this.chartState.selectionArray.toggleSelection(entityName)\n    }\n\n    // Returns the colors that are used by all points, *across the whole timeline*.\n    // This is why we need the table before the timeline filter is applied.\n    @computed private get colorsInUse(): Color[] {\n        const allValues =\n            this.manager.tableAfterAuthorTimelineAndActiveChartTransform?.get(\n                this.colorColumnSlug\n            )?.valuesIncludingErrorValues ?? []\n\n        // Need to convert InvalidCell to undefined for color scale to assign correct color\n        const colorValues = _.uniq(\n            allValues.map((value: any) =>\n                isNotErrorValue(value) ? value : undefined\n            )\n        ) as (string | number)[]\n\n        return excludeUndefined(\n            colorValues.map((colorValue) =>\n                this.colorScale.getColor(colorValue)\n            )\n        )\n    }\n\n    @computed get detailsOrderedByReference(): string[] {\n        return this.manager.detailsOrderedByReference ?? []\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get isStaticAndSmall(): boolean {\n        return !!this.manager.isStaticAndSmall\n    }\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        if (isTouchDevice()) return\n        this.hoveredLegendColor = bin.color\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        if (isTouchDevice()) return\n        this.hoveredLegendColor = undefined\n    }\n\n    legendCursor = \"pointer\"\n\n    // When the color legend is clicked, toggle selection fo all associated keys\n    @action.bound onLegendClick(bin: ColorScaleBin): void {\n        const { selectionArray } = this.chartState\n        if (!this.canAddCountry) return\n\n        const color = bin.color\n\n        // Find all entities that match the clicked color\n        const colorMatchingSeriesNames = this.series\n            .filter((g) => g.color === color)\n            .map((g) => g.seriesName)\n\n        // Check if all these entities are already selected\n        const allColorMatchingSeriesAreSelected =\n            intersection(colorMatchingSeriesNames, this.selectedEntityNames)\n                .length === colorMatchingSeriesNames.length\n\n        // If all matching entities are selected, deselect them;\n        // Otherwise select them\n        if (allColorMatchingSeriesAreSelected)\n            selectionArray.setSelectedEntities(\n                _.without(this.selectedEntityNames, ...colorMatchingSeriesNames)\n            )\n        else\n            selectionArray.setSelectedEntities(\n                _.uniq(\n                    this.selectedEntityNames.concat(colorMatchingSeriesNames)\n                )\n            )\n    }\n\n    @computed private get hoveredSeriesNames(): string[] {\n        const { hoveredLegendColor, tooltipState } = this\n\n        const hoveredSeriesNames =\n            hoveredLegendColor === undefined\n                ? []\n                : _.uniq(\n                      this.series\n                          .filter((g) => g.color === hoveredLegendColor)\n                          .map((g) => g.seriesName)\n                  )\n\n        if (tooltipState.target) {\n            hoveredSeriesNames.push(tooltipState.target.series.seriesName)\n        }\n\n        return hoveredSeriesNames\n    }\n\n    @computed private get isHoverModeActive(): boolean {\n        const { hoveredLegendColor, tooltipState } = this\n        return !!(\n            hoveredLegendColor !== undefined ||\n            this.hoveredSeriesNames.length > 0 ||\n            tooltipState.target\n        )\n    }\n\n    @computed private get selectedEntityNames(): string[] {\n        return this.chartState.selectionArray.selectedEntityNames\n    }\n\n    @computed get displayStartTime(): string {\n        return this.transformedTable.timeColumn.formatTime(\n            this.transformedTable.minTime ?? 1900\n        )\n    }\n\n    @computed get displayEndTime(): string {\n        return this.transformedTable.timeColumn.formatTime(\n            this.transformedTable.maxTime ?? 2000\n        )\n    }\n\n    @computed private get arrowLegend(): ConnectedScatterLegend | undefined {\n        if (\n            this.displayStartTime === this.displayEndTime ||\n            this.xColumn.isTimeColumn ||\n            this.yColumn.isTimeColumn ||\n            this.manager.isRelativeMode ||\n            !this.manager.showLegend\n        )\n            return undefined\n\n        return new ConnectedScatterLegend(this)\n    }\n\n    @action.bound private onScatterMouseEnter(series: ScatterSeries): void {\n        this.tooltipState.target = { series }\n    }\n\n    @action.bound private onScatterMouseLeave(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onScatterMouseMove(\n        ev: React.MouseEvent<SVGGElement>\n    ): void {\n        const ref = this.manager?.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, ev)\n        }\n    }\n\n    @action.bound private onScatterClick(): void {\n        const { target } = this.tooltipState\n        if (target) this.onSelectEntity(target.series.seriesName)\n    }\n\n    @computed get tooltipSeries(): ScatterSeries | undefined {\n        return this.tooltipState.target?.series\n    }\n\n    @computed private get verticalColorLegend():\n        | VerticalColorLegend\n        | undefined {\n        if (this.categoricalLegendData.length === 0 || !this.manager.showLegend)\n            return undefined\n        return new VerticalColorLegend({ manager: this })\n    }\n\n    @computed get maxLegendWidth(): number {\n        return this.sidebarMaxWidth\n    }\n\n    @computed private get sidebarMinWidth(): number {\n        return Math.max(this.bounds.width * 0.1, 60)\n    }\n\n    @computed private get sidebarMaxWidth(): number {\n        return Math.max(this.bounds.width * 0.2, this.sidebarMinWidth)\n    }\n\n    @computed.struct get sidebarWidth(): number {\n        const { sidebarMinWidth, sidebarMaxWidth } = this\n\n        // No sidebar needed if there are no legends\n        if (\n            !this.verticalColorLegend &&\n            !this.sizeLegend &&\n            !this.arrowLegend &&\n            !this.hasNoDataSection\n        )\n            return 0\n\n        const colorLegendWidth = this.verticalColorLegend?.width ?? 0\n\n        return _.clamp(colorLegendWidth, sidebarMinWidth, sidebarMaxWidth)\n    }\n\n    @computed get dualAxis(): DualAxis {\n        const { horizontalAxisPart, verticalAxisPart } = this\n        return new DualAxis({\n            bounds: this.axisBounds,\n            horizontalAxis: horizontalAxisPart,\n            verticalAxis: verticalAxisPart,\n            comparisonLines: this.manager.comparisonLines,\n        })\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @action.bound private onToggleEndpoints(): void {\n        this.manager.compareEndPointsOnly =\n            !this.compareEndPointsOnly || undefined\n    }\n\n    /** Legend colors that are currently highlighted (either hovered or have at least one selected series) */\n    @computed get activeColors(): string[] {\n        const { hoveredSeriesNames, selectedEntityNames, hoveredLegendColor } =\n            this\n\n        const activeColorsSet = new Set<string>()\n\n        if (hoveredLegendColor !== undefined)\n            activeColorsSet.add(hoveredLegendColor)\n\n        // Add colors from selected/hovered series\n        const activeSeriesNames = hoveredSeriesNames.concat(selectedEntityNames)\n        if (activeSeriesNames.length > 0) {\n            const activeSeries = this.series.filter((g) =>\n                activeSeriesNames.includes(g.seriesName)\n            )\n\n            const colorValues = _.uniq(\n                activeSeries.flatMap((s) => s.points.map((p) => p.color))\n            )\n\n            excludeUndefined(\n                colorValues.map((color) => this.colorScale.getColor(color))\n            ).forEach((color) => activeColorsSet.add(color))\n        }\n\n        // If nothing is active (no hover, no selection), show all colors\n        if (activeColorsSet.size === 0) return this.colorsInUse\n\n        return Array.from(activeColorsSet)\n    }\n\n    resolveLegendBinEmphasis(bin: ColorScaleBin): Emphasis {\n        const isActive = this.activeColors.includes(bin.color)\n        return isActive ? Emphasis.Highlighted : Emphasis.Muted\n    }\n\n    @computed private get hideConnectedScatterLines(): boolean {\n        return !!this.manager.hideConnectedScatterLines\n    }\n\n    @computed private get hideScatterLabels(): boolean {\n        return !!this.manager.hideScatterLabels\n    }\n\n    @computed private get quadtree(): Quadtree<ScatterPointQuadtreeNode> {\n        const {\n            series: seriesArray,\n            dualAxis: { horizontalAxis, verticalAxis, innerBounds },\n        } = this\n\n        const xAxis = horizontalAxis.clone()\n        xAxis.range = innerBounds.xRange()\n        const yAxis = verticalAxis.clone()\n        yAxis.range = innerBounds.yRange()\n\n        const nodes: ScatterPointQuadtreeNode[] = seriesArray.flatMap(\n            (series) => {\n                const points = series.points.map((point) => {\n                    return new PointVector(\n                        xAxis.place(point.x),\n                        yAxis.place(point.y)\n                    )\n                })\n\n                // add single points as is\n                if (points.length < 2)\n                    return points.map((point) => ({\n                        series,\n                        x: point.x,\n                        y: point.y,\n                    }))\n\n                // sample points from line segments with a fixed step size\n                return pairs(points).flatMap(([a, b]) => {\n                    const numPoints =\n                            2 + // always include endpoints\n                            Math.floor(\n                                PointVector.distance(a, b) /\n                                    SCATTER_QUADTREE_SAMPLING_DISTANCE\n                            ),\n                        lineRange = interpolate(\n                            { x: a.x, y: a.y },\n                            { x: b.x, y: b.y }\n                        ),\n                        coords = quantize(\n                            (pct: number) => _.clone(lineRange(pct)),\n                            numPoints\n                        )\n\n                    return coords.map((point) => ({\n                        series,\n                        x: point.x,\n                        y: point.y,\n                    }))\n                })\n            }\n        )\n\n        return quadtree<ScatterPointQuadtreeNode>()\n            .x(({ x }) => x)\n            .y(({ y }) => y)\n            .addAll(nodes)\n    }\n\n    @computed private get points(): React.ReactElement {\n        return (\n            <ScatterPointsWithLabels\n                noDataModalManager={this.manager}\n                isConnected={this.chartState.isConnected}\n                hideConnectedScatterLines={this.hideConnectedScatterLines}\n                seriesArray={this.series}\n                dualAxis={this.dualAxis}\n                colorScale={\n                    !this.colorColumn.isMissing ? this.colorScale : undefined\n                }\n                sizeScale={this.sizeScale}\n                fontScale={this.fontScale}\n                baseFontSize={this.fontSize}\n                focusedSeriesNames={this.selectedEntityNames}\n                hoveredSeriesNames={this.hoveredSeriesNames}\n                isHoverModeActive={this.isHoverModeActive}\n                tooltipSeriesName={this.tooltipSeries?.seriesName}\n                disableIntroAnimation={this.manager.disableIntroAnimation}\n                hideScatterLabels={this.hideScatterLabels}\n                hideEntityLabels={!this.manager.showSeriesLabels}\n                onMouseEnter={this.onScatterMouseEnter}\n                onMouseLeave={this.onScatterMouseLeave}\n                onClick={this.onScatterClick}\n                quadtree={this.quadtree}\n                backgroundColor={this.manager.backgroundColor}\n            />\n        )\n    }\n\n    @computed private get colorColumnSlug(): string | undefined {\n        return this.chartState.colorColumnSlug\n    }\n\n    @computed private get colorColumn(): CoreColumn {\n        return this.chartState.colorColumn\n    }\n\n    @computed get categoricalLegendData(): ColorScaleBin[] {\n        return this.colorScale.legendBins.filter(\n            (bin) =>\n                this.colorsInUse.includes(bin.color) &&\n                bin.label !== NO_DATA_LABEL\n        )\n    }\n\n    @computed get legendTitle(): string | undefined {\n        return this.colorScale.legendDescription\n    }\n\n    @computed get sizeScale(): ScaleLinear<number, number> {\n        return scaleSqrt()\n            .domain(this.chartState.sizeDomain)\n            .range(this.sizeRange)\n    }\n\n    @computed private get fontScale(): ScaleLinear<number, number> {\n        const defaultFontSize =\n            SCATTER_LABEL_DEFAULT_FONT_SIZE_FACTOR * this.fontSize\n        const minFactor = this.manager.isNarrow\n            ? SCATTER_LABEL_DEFAULT_FONT_SIZE_FACTOR\n            : SCATTER_LABEL_MIN_FONT_SIZE_FACTOR\n        const maxFactor = this.manager.isNarrow\n            ? SCATTER_LABEL_DEFAULT_FONT_SIZE_FACTOR\n            : SCATTER_LABEL_MAX_FONT_SIZE_FACTOR\n        const minFontSize = minFactor * this.fontSize\n        const maxFontSize = maxFactor * this.fontSize\n        return scaleSqrt()\n            .domain(this.chartState.sizeDomain)\n            .range(\n                this.sizeColumn.isMissing\n                    ? // if the size column is missing, we want all labels to have the same font size\n                      [defaultFontSize, defaultFontSize]\n                    : [minFontSize, maxFontSize]\n            )\n    }\n\n    @computed private get sizeLegend(): ScatterSizeLegend | undefined {\n        if (this.chartState.isConnected || this.sizeColumn.isMissing)\n            return undefined\n        if (!this.manager.showLegend && !this.manager.useMinimalLabeling)\n            return undefined\n        return new ScatterSizeLegend(this)\n    }\n\n    @computed\n    private get selectedEntitiesWithoutData(): string[] {\n        const entitiesWithoutData = _.uniq(\n            _.difference(\n                this.selectedEntityNames,\n                this.series.map((s) => s.seriesName)\n            )\n        )\n\n        return entitiesWithoutData.map((entityName) => {\n            const shortName = getShortNameForEntity(entityName)\n            return shortName ?? entityName\n        })\n    }\n\n    @computed private get hasNoDataSection(): boolean {\n        return this.selectedEntitiesWithoutData.length > 0\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n\n    @computed private get renderUid(): number {\n        return guid()\n    }\n\n    @computed private get clipPath(): ClipPath {\n        return makeClipPath({ renderUid: this.renderUid, box: this.bounds })\n    }\n\n    renderSidebar(): React.ReactElement | null {\n        const {\n            bounds,\n            sizeLegend,\n            arrowLegend,\n            verticalColorLegend,\n            sidebarWidth,\n        } = this\n\n        const verticalLegendHeight = verticalColorLegend?.height ?? 0\n        const sizeLegendHeight = sizeLegend?.height ?? 0\n        const arrowLegendHeight = arrowLegend?.height ?? 0\n\n        const legendPadding = 16\n        const ySizeLegend =\n            this.legendY +\n            verticalLegendHeight +\n            (verticalLegendHeight > 0 ? legendPadding : 0)\n        const yArrowLegend =\n            ySizeLegend +\n            sizeLegendHeight +\n            (sizeLegendHeight > 0 ? legendPadding : 0)\n        const yNoDataSection =\n            yArrowLegend +\n            arrowLegendHeight +\n            (arrowLegendHeight > 0 ? legendPadding : 0)\n\n        const noDataSectionBounds = new Bounds(\n            this.legendX,\n            yNoDataSection,\n            sidebarWidth,\n            bounds.height - yNoDataSection\n        )\n\n        const separatorLine = (y: number): React.ReactElement | null =>\n            y > bounds.top ? (\n                <line\n                    id={makeFigmaId(\"separator\")}\n                    x1={this.legendX}\n                    y1={y - 0.5 * legendPadding}\n                    x2={bounds.right}\n                    y2={y - 0.5 * legendPadding}\n                    stroke=\"#e7e7e7\"\n                />\n            ) : null\n\n        return (\n            <>\n                {verticalColorLegend && <VerticalColorLegend manager={this} />}\n                {sizeLegend && (\n                    <>\n                        {verticalColorLegend && separatorLine(ySizeLegend)}\n                        {sizeLegend.render(this.legendX, ySizeLegend)}\n                    </>\n                )}\n                {arrowLegend && (\n                    <>\n                        {(verticalColorLegend || sizeLegend) &&\n                            separatorLine(yArrowLegend)}\n                        <g\n                            className=\"clickable\"\n                            onClick={this.onToggleEndpoints}\n                        >\n                            {arrowLegend.render(this.legendX, yArrowLegend)}\n                        </g>\n                    </>\n                )}\n                {this.hasNoDataSection && (\n                    <>\n                        {!this.manager.isStatic &&\n                            (verticalColorLegend ||\n                                sizeLegend ||\n                                arrowLegend) &&\n                            separatorLine(noDataSectionBounds.top)}\n                        <NoDataSection\n                            seriesNames={this.selectedEntitiesWithoutData}\n                            bounds={noDataSectionBounds}\n                            baseFontSize={this.fontSize}\n                        />\n                    </>\n                )}\n            </>\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.clipPath.element}\n                <DualAxisComponent\n                    dualAxis={this.dualAxis}\n                    showTickMarks={false}\n                    detailsMarker={this.manager.detailsMarkerInSvg}\n                    backgroundColor={this.manager.backgroundColor}\n                />\n                <g clipPath={this.clipPath.id}>\n                    {this.points}\n                    {this.renderSidebar()}\n                </g>\n            </>\n        )\n    }\n\n    renderInteractive(): React.ReactElement {\n        return (\n            <g onMouseMove={this.onScatterMouseMove}>\n                {this.clipPath.element}\n                <DualAxisComponent\n                    dualAxis={this.dualAxis}\n                    showTickMarks={false}\n                    detailsMarker={this.manager.detailsMarkerInSvg}\n                />\n                <g clipPath={this.clipPath.id}>\n                    {this.points}\n                    {this.renderSidebar()}\n                </g>\n                {this.tooltip}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n\n    @computed private get tooltip(): React.ReactElement | null {\n        return (\n            <ScatterPlotTooltip\n                chartState={this.chartState}\n                tooltipState={this.tooltipState}\n            />\n        )\n    }\n\n    @computed get legendY(): number {\n        return this.bounds.top + this.yAxis.labelHeight\n    }\n\n    @computed get legendX(): number {\n        return this.bounds.right - this.sidebarWidth\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig = {} } = this.manager\n        const config = {\n            ...yAxisConfig,\n            labelPadding: this.manager.isNarrow ? 10 : 14,\n        }\n        return new AxisConfig(config, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig = {} } = this.manager\n        const config = {\n            ...xAxisConfig,\n            labelPadding: this.manager.isNarrow ? 6 : undefined,\n        }\n        return new AxisConfig(config, this)\n    }\n\n    @computed private get yColumn(): CoreColumn {\n        return this.chartState.yColumn\n    }\n\n    @computed private get xColumn(): CoreColumn {\n        return this.chartState.xColumn\n    }\n\n    @computed get sizeColumn(): CoreColumn {\n        return this.chartState.sizeColumn\n    }\n\n    @computed get compareEndPointsOnly(): boolean {\n        return this.chartState.compareEndPointsOnly\n    }\n\n    @computed get allPoints(): SeriesPoint[] {\n        return this.chartState.allPoints\n    }\n\n    @computed private get sizeRange(): [number, number] {\n        return toSizeRange(this.chartState, this.innerBounds)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get series(): ScatterSeries[] {\n        return this.chartState.series\n    }\n}\n","import { makeFigmaId } from \"@ourworldindata/utils\"\nimport { DualAxis } from \"../axis/Axis\"\nimport {\n    Bar,\n    BarShape,\n    EntityColorData,\n    MarimekkoBarProps,\n} from \"./MarimekkoChartConstants\"\nimport { InteractionState } from \"../interaction/InteractionState.js\"\nimport { STACKED_BAR_STYLE } from \"./StackedConstants.js\"\nimport { Emphasis } from \"../interaction/Emphasis.js\"\n\ninterface MarimekkoBarsProps {\n    entityName: string\n    bars: Bar[]\n    entityColor: EntityColorData | undefined\n    isFaint: boolean\n    isHovered: boolean\n    isSelected: boolean\n    focus: InteractionState\n    barWidth: number\n    currentX: number\n    onEntityMouseOver?: (entityName: string, ev: React.MouseEvent) => void\n    onEntityMouseLeave?: () => void\n    onEntityClick?: (entityName: string) => void\n    labelYOffset: number\n    y0: number\n    noDataHeight: number\n    dualAxis: DualAxis\n}\n\nexport function MarimekkoBarsForOneEntity(\n    props: MarimekkoBarsProps\n): React.ReactElement {\n    const {\n        entityName,\n        bars,\n        entityColor,\n        isFaint,\n        isHovered,\n        isSelected,\n        focus,\n        barWidth,\n        currentX,\n        onEntityClick,\n        onEntityMouseLeave,\n        onEntityMouseOver,\n        labelYOffset,\n        y0,\n        noDataHeight,\n        dualAxis,\n    } = props\n\n    const content = bars.length ? (\n        bars.map((bar) => (\n            <MarimekkoBar\n                key={`${entityName}-${bar.seriesName}`}\n                bar={bar}\n                barWidth={barWidth}\n                isHovered={isHovered}\n                isSelected={isSelected}\n                focus={focus}\n                isFaint={isFaint}\n                entityColor={entityColor?.color}\n                y0={y0}\n                dualAxis={dualAxis}\n            />\n        ))\n    ) : (\n        <MarimekkoBar\n            key={`${entityName}-placeholder`}\n            bar={{\n                kind: BarShape.BarPlaceholder,\n                seriesName: entityName,\n                height: noDataHeight,\n            }}\n            barWidth={barWidth}\n            isHovered={isHovered}\n            isSelected={isSelected}\n            focus={focus}\n            isFaint={isFaint}\n            entityColor={entityColor?.color}\n            y0={y0}\n            dualAxis={dualAxis}\n        />\n    )\n\n    return (\n        <g\n            key={entityName}\n            id={makeFigmaId(\"bar\", entityName)}\n            className=\"bar\"\n            transform={`translate(${currentX}, ${labelYOffset})`}\n            onMouseOver={(ev): void => onEntityMouseOver?.(entityName, ev)}\n            onMouseLeave={(): void => onEntityMouseLeave?.()}\n            onClick={(): void => onEntityClick?.(entityName)}\n        >\n            {content}\n        </g>\n    )\n}\n\nfunction MarimekkoBar({\n    bar,\n    barWidth,\n    isHovered,\n    isSelected,\n    focus,\n    isFaint,\n    entityColor,\n    y0,\n    dualAxis,\n}: MarimekkoBarProps): React.ReactElement {\n    const { seriesName } = bar\n    const isPlaceholder = bar.kind === BarShape.BarPlaceholder\n    const barBaseColor =\n        entityColor ?? (bar.kind === BarShape.Bar ? bar.color : \"#555\")\n\n    const barColor = focus.background\n        ? \"#DADADA\"\n        : bar.kind === BarShape.BarPlaceholder\n          ? \"#555\"\n          : barBaseColor\n    const strokeColor = barColor\n    const strokeWidth = isHovered || isSelected ? 1 : 0.5\n    const strokeOpacity = isPlaceholder ? 0.8 : isFaint ? 0.2 : 1.0\n    const fillOpacity = isHovered\n        ? STACKED_BAR_STYLE[Emphasis.Highlighted].opacity\n        : isFaint\n          ? STACKED_BAR_STYLE[Emphasis.Muted].opacity\n          : isSelected\n            ? isPlaceholder\n                ? 0.3\n                : STACKED_BAR_STYLE[Emphasis.Default].opacity\n            : STACKED_BAR_STYLE[Emphasis.Default].opacity\n    const overalOpacity = isPlaceholder ? 0.2 : 1.0\n\n    let barY: number\n    let barHeight: number\n    if (bar.kind === BarShape.Bar) {\n        barY = dualAxis.verticalAxis.place(y0 + bar.yPoint.valueOffset)\n        barHeight =\n            dualAxis.verticalAxis.place(y0) -\n            dualAxis.verticalAxis.place(bar.yPoint.value)\n    } else {\n        barY = dualAxis.verticalAxis.place(y0)\n        barHeight = bar.height\n    }\n    const barX = 0\n\n    return (\n        <g key={seriesName}>\n            <rect\n                x={0}\n                y={0}\n                transform={`translate(${barX}, ${barY - barHeight})`}\n                width={barWidth}\n                height={barHeight}\n                fill={barColor}\n                fillOpacity={fillOpacity}\n                stroke={strokeColor}\n                strokeWidth={strokeWidth}\n                strokeOpacity={strokeOpacity}\n                opacity={overalOpacity}\n                style={{ transition: \"translate 200ms ease\" }}\n            />\n        </g>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { Bounds, dyFromAlign, VerticalAlign } from \"@ourworldindata/utils\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { TooltipState } from \"../tooltip/Tooltip\"\nimport { MarimekkoBarsForOneEntity } from \"./MarimekkoBarsForOneEntity\"\nimport { Item, PlacedItem } from \"./MarimekkoChartConstants\"\nimport { GRAPHER_FONT_SCALE_12, Patterns } from \"../core/GrapherConstants\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\n\ninterface MarimekkoBarsProps {\n    dualAxis: DualAxis\n    focusColorBin?: ColorScaleBin\n    placedItems: PlacedItem[]\n    tooltipState?: TooltipState<{ entityName: string }>\n    fontSize: number\n    onEntityMouseOver?: (entityName: string, ev: React.MouseEvent) => void\n    onEntityMouseLeave?: () => void\n    onEntityClick?: (entityName: string) => void\n    x0: number\n    y0: number\n    selectionArray: SelectionArray\n    selectedItems: Item[]\n    isFocusModeActive?: boolean\n}\n\nexport function MarimekkoBars(props: MarimekkoBarsProps): React.ReactElement {\n    const normalElements: React.ReactElement[] = []\n    const highlightedElements: React.ReactElement[] = [] // highlighted elements have a thicker stroke and should be drawn last to overlap others\n    const {\n        dualAxis,\n        focusColorBin,\n        placedItems,\n        tooltipState,\n        fontSize,\n        onEntityClick,\n        onEntityMouseLeave,\n        onEntityMouseOver,\n        x0,\n        y0,\n        selectionArray,\n        selectedItems,\n        isFocusModeActive,\n    } = props\n    const selectionSet = selectionArray.selectedSet\n    const labelYOffset = 0\n    const hasSelection = selectedItems.length > 0\n    let noDataAreaElement = undefined\n    let noDataLabel = undefined\n    const noDataHeight = Bounds.forText(\"no data\").height + 10\n\n    const firstNanValue = placedItems.findIndex((item) => !item.bars.length)\n    const anyNonNanAfterFirstNan =\n        firstNanValue >= 0\n            ? placedItems\n                  .slice(firstNanValue)\n                  .some((item) => item.bars.length !== 0)\n            : false\n\n    if (anyNonNanAfterFirstNan)\n        console.error(\"Found Non-NAN values after NAN value!\")\n\n    if (firstNanValue !== -1) {\n        const firstNanValueItem = placedItems[firstNanValue]\n        const lastItem = R.last(placedItems)!\n        const noDataRangeStartX =\n            firstNanValueItem.xPosition + dualAxis.horizontalAxis.place(x0)\n        const xValue = lastItem.xPoint?.value ?? 1\n        const noDataRangeEndX =\n            lastItem?.xPosition + dualAxis.horizontalAxis.place(xValue)\n        const yStart = dualAxis.verticalAxis.place(y0)\n\n        const noDataLabelX =\n            noDataRangeStartX + (noDataRangeEndX - noDataRangeStartX) / 2\n        const boundsForNoData = Bounds.forText(\"no data\")\n        const noDataLabelY = yStart - boundsForNoData.width\n        noDataLabel = (\n            <text\n                key={`noDataArea-label`}\n                x={0}\n                transform={`rotate(-90, ${noDataLabelX}, ${noDataLabelY})\n                translate(${noDataLabelX}, ${noDataLabelY})`}\n                y={0}\n                width={noDataRangeEndX - noDataRangeStartX}\n                height={noDataHeight}\n                fontWeight={700}\n                fill=\"#666\"\n                opacity={1}\n                fontSize={GRAPHER_FONT_SCALE_12 * fontSize}\n                textAnchor=\"middle\"\n                dy={dyFromAlign(VerticalAlign.middle)}\n                style={{ pointerEvents: \"none\" }}\n            >\n                no data\n            </text>\n        )\n\n        noDataAreaElement = (\n            <rect\n                key=\"noDataArea\"\n                x={noDataRangeStartX}\n                y={yStart - noDataHeight}\n                width={noDataRangeEndX - noDataRangeStartX}\n                height={noDataHeight}\n                fill={`url(#${Patterns.noDataPattern})`}\n                opacity={0.5}\n            ></rect>\n        )\n    }\n\n    for (const item of placedItems) {\n        const { entityName, bars, xPoint, entityColor } = item\n        const currentX = dualAxis.horizontalAxis.place(x0) + item.xPosition\n\n        const xValue = xPoint?.value ?? 1\n        const barWidth =\n            dualAxis.horizontalAxis.place(xValue) -\n            dualAxis.horizontalAxis.place(x0)\n\n        const isSelected = selectionSet.has(entityName)\n        const isHovered =\n            entityName === tooltipState?.target?.entityName &&\n            !tooltipState.fading\n        const isFaint =\n            item.focus.background ||\n            (focusColorBin !== undefined &&\n                !focusColorBin.contains(entityColor?.colorDomainValue)) ||\n            (focusColorBin === undefined && hasSelection && !isSelected) ||\n            (!isHovered &&\n                !isSelected &&\n                tooltipState?.target !== undefined &&\n                !tooltipState.fading)\n\n        // figure out what the minimum height in domain space has to be so\n        // that a bar is at least one pixel high in screen space.\n        const yAxisOnePixelDomainEquivalent =\n            dualAxis.verticalAxis.invert(dualAxis.verticalAxis.place(y0) - 1) -\n            dualAxis.verticalAxis.invert(dualAxis.verticalAxis.place(y0))\n        const adjustedBars = []\n        let currentY = 0\n        for (const bar of bars) {\n            const barCopy = _.cloneDeep(bar)\n            // we want to draw bars at least one pixel high so that they are guaranteed to have a\n            // visual representation in our chart (as a 1px line in this case)\n            barCopy.yPoint.value = Math.max(\n                barCopy.yPoint.value,\n                yAxisOnePixelDomainEquivalent\n            )\n            barCopy.yPoint.valueOffset = currentY\n            currentY += barCopy.yPoint.value\n            adjustedBars.push(barCopy)\n        }\n\n        const barsProps = {\n            entityName,\n            bars: adjustedBars,\n            xPoint,\n            entityColor,\n            isFaint,\n            isHovered,\n            isSelected,\n            focus: item.focus,\n            barWidth,\n            currentX,\n            onEntityClick,\n            onEntityMouseLeave,\n            onEntityMouseOver,\n            labelYOffset,\n            y0,\n            noDataHeight,\n            dualAxis,\n        }\n        const result = (\n            <MarimekkoBarsForOneEntity key={entityName} {...barsProps} />\n        )\n        if (isSelected || isHovered) highlightedElements.push(result)\n        else normalElements.push(result)\n    }\n\n    return (\n        <>\n            {noDataAreaElement}\n            {normalElements}\n            {highlightedElements}\n            {!isFocusModeActive && noDataLabel}\n        </>\n    )\n}\n","import { DualAxis } from \"../axis/Axis\"\nimport { PlacedItem } from \"./MarimekkoChartConstants\"\nimport { MarimekkoChartState } from \"./MarimekkoChartState\"\n\nexport function toPlacedMarimekkoItems(\n    chartState: MarimekkoChartState,\n    { dualAxis }: { dualAxis: DualAxis }\n): PlacedItem[] {\n    const { x0, sortedItems } = chartState\n    const placedItems: PlacedItem[] = []\n    let currentX = 0\n    for (const item of sortedItems) {\n        placedItems.push({ ...item, xPosition: currentX })\n        const xValue = item.xPoint?.value ?? 1 // one is the default here because if no x dim is given we make all bars the same width\n        const preciseX =\n            dualAxis.horizontalAxis.place(xValue) -\n            dualAxis.horizontalAxis.place(x0)\n        currentX += preciseX\n    }\n    return placedItems\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport * as R from \"remeda\"\nimport {\n    Bounds,\n    excludeUndefined,\n    HorizontalAlign,\n    Position,\n    SortConfig,\n    SortOrder,\n    getRelativeMouse,\n    EntitySelectionMode,\n    makeFigmaId,\n    dyFromAlign,\n    exposeInstanceOnWindow,\n} from \"@ourworldindata/utils\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FONT_SCALE_12,\n} from \"../core/GrapherConstants\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport {\n    EntityName,\n    VerticalAlign,\n    ColorScaleConfigInterface,\n} from \"@ourworldindata/types\"\nimport {\n    OwidTable,\n    CoreColumn,\n    ColumnTypeMap,\n} from \"@ourworldindata/core-table\"\nimport { getShortNameForEntity } from \"../chart/ChartUtils\"\nimport {\n    LEGEND_STYLE_FOR_STACKED_CHARTS,\n    StackedSeries,\n} from \"./StackedConstants\"\nimport { TooltipFooterIcon } from \"../tooltip/TooltipProps.js\"\nimport {\n    Tooltip,\n    TooltipValue,\n    TooltipState,\n    makeTooltipRoundingNotice,\n    makeTooltipToleranceNotice,\n} from \"../tooltip/Tooltip\"\nimport {\n    HorizontalCategoricalColorLegend,\n    HorizontalColorLegendManager,\n} from \"../legend/HorizontalColorLegends\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { ColorScale } from \"../color/ColorScale\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport {\n    MarimekkoChartManager,\n    Item,\n    PlacedItem,\n    EntityWithSize,\n    LabelCandidate,\n    LabelWithPlacement,\n    LabelCandidateWithElement,\n    Bar,\n} from \"./MarimekkoChartConstants\"\nimport { MarimekkoChartState } from \"./MarimekkoChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { MarimekkoBars } from \"./MarimekkoBars\"\nimport { toPlacedMarimekkoItems } from \"./MarimekkoChartHelpers\"\n\nconst MARKER_MARGIN: number = 4\nconst MARKER_AREA_HEIGHT: number = 25\nconst MAX_LABEL_COUNT: number = 20\n\nexport type MarimekkoChartProps = ChartComponentProps<MarimekkoChartState>\n\n@observer\nexport class MarimekkoChart\n    extends React.Component<MarimekkoChartProps>\n    implements ChartInterface, HorizontalColorLegendManager, AxisManager\n{\n    base = React.createRef<SVGGElement>()\n\n    constructor(props: MarimekkoChartProps) {\n        super(props)\n\n        makeObservable(this, {\n            focusColorBin: observable,\n            tooltipState: observable,\n        })\n    }\n\n    labelAngleInDegrees = -45 // 0 is horizontal, -90 is vertical from bottom to top, ...\n\n    // currently hovered legend color\n    focusColorBin: ColorScaleBin | undefined = undefined\n\n    // current tooltip target & position\n    tooltipState = new TooltipState<{\n        entityName: string\n    }>()\n\n    @computed get chartState(): MarimekkoChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): MarimekkoChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get inputTable(): OwidTable {\n        return this.chartState.inputTable\n    }\n\n    @computed private get series(): readonly StackedSeries<EntityName>[] {\n        return this.chartState.series\n    }\n\n    @computed private get yColumnSlugs(): string[] {\n        return this.chartState.yColumnSlugs\n    }\n\n    @computed private get xColumnSlug(): string | undefined {\n        return this.chartState.xColumnSlug\n    }\n\n    @computed private get xColumn(): CoreColumn | undefined {\n        return this.chartState.xColumn\n    }\n\n    @computed private get colorColumn(): CoreColumn | undefined {\n        return this.chartState.colorColumn\n    }\n\n    @computed private get latestTime(): number | undefined {\n        const times =\n            this.manager.tableAfterAuthorTimelineAndActiveChartTransform?.getTimesUniqSortedAscForColumns(\n                this.yColumnSlugs\n            )\n\n        return times ? R.last(times) : undefined\n    }\n    @computed private get tableAtLatestTimelineTimepoint():\n        | OwidTable\n        | undefined {\n        if (this.latestTime)\n            return this.manager.tableAfterAuthorTimelineAndActiveChartTransform?.filterByTargetTimes(\n                [this.latestTime],\n                0\n            )\n        else return undefined\n    }\n    @computed private get xColumnAtLastTimePoint(): CoreColumn | undefined {\n        if (this.xColumnSlug === undefined) return undefined\n        const columnSlug = [this.xColumnSlug]\n        if (this.tableAtLatestTimelineTimepoint)\n            return this.tableAtLatestTimelineTimepoint.getColumns(columnSlug)[0]\n        else return undefined\n    }\n\n    @computed private get yColumnsAtLastTimePoint(): CoreColumn[] {\n        const columnSlugs = this.yColumnSlugs\n        return (\n            this.tableAtLatestTimelineTimepoint?.getColumns(columnSlugs) ?? []\n        )\n    }\n\n    @computed private get yColumns(): CoreColumn[] {\n        return this.chartState.yColumns\n    }\n\n    @computed private get colorColumnSlug(): string | undefined {\n        return this.chartState.colorColumnSlug\n    }\n\n    @computed private get colorScale(): ColorScale {\n        return this.chartState.colorScale\n    }\n\n    @computed private get colorScaleConfig():\n        | ColorScaleConfigInterface\n        | undefined {\n        return this.chartState.colorScaleConfig\n    }\n\n    @computed private get sortConfig(): SortConfig {\n        return this.manager.sortConfig ?? {}\n    }\n\n    @computed private get bounds(): Bounds {\n        return (this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS).padRight(10)\n    }\n\n    @computed private get innerBounds(): Bounds {\n        // This is a workaround to get the actual width of the vertical axis - dualAxis does this\n        // internally but we can't access this.dualAxis here due to a dependency cycle\n        const axis = this.verticalAxisPart.clone()\n        axis.range = [0, this.bounds.height]\n        const verticalAxisTrueWidth = axis.width\n\n        const whiteSpaceOnLeft = this.bounds.left + verticalAxisTrueWidth\n        const labelLinesHeight = MARKER_AREA_HEIGHT\n        // only pad left by the amount the longest label would exceed whatever space the\n        // vertical axis needs anyhow for label and tickmarks\n        const marginToEnsureWidestEntityLabelFitsEvenIfAtX0 =\n            Math.max(whiteSpaceOnLeft, this.longestLabelWidth) -\n            whiteSpaceOnLeft\n        return this.bounds\n            .padBottom(this.longestLabelHeight + 2)\n            .padBottom(labelLinesHeight)\n            .padTop(\n                this.showLegend ? this.legend.height + this.legendPaddingTop : 0\n            )\n            .padLeft(marginToEnsureWidestEntityLabelFitsEvenIfAtX0)\n    }\n\n    @computed get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get xRange(): [number, number] {\n        return [this.bounds.left, this.bounds.right]\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(this.manager.yAxisConfig, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xColumnSlug } = this\n        return new AxisConfig(\n            {\n                ...this.manager.xAxisConfig,\n                orient: Position.top,\n                hideAxis: xColumnSlug === undefined,\n                hideGridlines: xColumnSlug === undefined,\n            },\n            this\n        )\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        return new DualAxis({\n            bounds: this.innerBounds,\n            verticalAxis: this.verticalAxisPart,\n            horizontalAxis: this.horizontalAxisPart,\n            comparisonLines: this.manager.comparisonLines,\n        })\n    }\n\n    @computed private get selectionArray(): SelectionArray {\n        return this.chartState.selectionArray\n    }\n\n    @computed private get items(): Item[] {\n        return this.chartState.items\n    }\n\n    @computed get placedItems(): PlacedItem[] {\n        return toPlacedMarimekkoItems(this.chartState, {\n            dualAxis: this.dualAxis,\n        })\n    }\n\n    @computed private get placedItemsMap(): Map<string, PlacedItem> {\n        return new Map(this.placedItems.map((item) => [item.entityName, item]))\n    }\n\n    // legend props\n\n    @computed private get legendPaddingTop(): number {\n        return this.legend.height > 0 ? this.fontSize : 0\n    }\n\n    @computed get legendX(): number {\n        return this.bounds.x\n    }\n\n    @computed get categoryLegendY(): number {\n        return this.bounds.top\n    }\n\n    @computed get legendWidth(): number {\n        return this.bounds.width\n    }\n\n    @computed get legendAlign(): HorizontalAlign {\n        return HorizontalAlign.left\n    }\n\n    @computed get detailsOrderedByReference(): string[] {\n        return this.manager.detailsOrderedByReference ?? []\n    }\n\n    @computed get categoricalLegendData(): CategoricalBin[] {\n        const { colorColumnSlug, colorScale, series } = this\n        if (colorColumnSlug) {\n            return colorScale.categoricalLegendBins\n        } else if (series.length > 0) {\n            const customHiddenCategories =\n                this.colorScaleConfig?.customHiddenCategories\n            return series.map((series, index) => {\n                return new CategoricalBin({\n                    index,\n                    value: series.seriesName,\n                    label: series.seriesName,\n                    color: series.color,\n                    isHidden: !!customHiddenCategories?.[series.seriesName],\n                })\n            })\n        }\n        return []\n    }\n\n    resolveLegendBinEmphasis(bin: ColorScaleBin): Emphasis {\n        const { focusColorBin } = this\n\n        // If nothing is focused, all items are active\n        if (!focusColorBin && this.hoverColors.length === 0)\n            return Emphasis.Default\n\n        const isHovered = this.hoverColors?.includes(bin.color)\n        if (isHovered) return Emphasis.Highlighted\n\n        // Check if this bin matches the focused color bin\n        const isFocused = focusColorBin && bin.equals(focusColorBin)\n        return isFocused ? Emphasis.Highlighted : Emphasis.Muted\n    }\n\n    legendStyleConfig: LegendStyleConfig = LEGEND_STYLE_FOR_STACKED_CHARTS\n\n    @computed get hoverColors(): string[] {\n        if (this.focusColorBin) return [this.focusColorBin.color]\n        if (this.tooltipItem?.entityColor)\n            return [this.tooltipItem.entityColor.color]\n        if (this.selectionArray.hasSelection) {\n            const selectedItems = this.items.filter((item) =>\n                this.selectionArray.selectedSet.has(item.entityName)\n            )\n            const uniqueSelectedColors = new Set(\n                selectedItems.map((item) => item.entityColor?.color)\n            )\n            return this.categoricalLegendData\n                .filter((bin) => uniqueSelectedColors.has(bin.color as any))\n                .map((bin) => bin.color)\n        }\n        return []\n    }\n\n    @computed private get showLegend(): boolean {\n        return (\n            (!!this.colorColumnSlug || this.categoricalLegendData.length > 1) &&\n            !!this.manager.showLegend\n        )\n    }\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        this.focusColorBin = bin\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.focusColorBin = undefined\n    }\n\n    @computed private get legend(): HorizontalCategoricalColorLegend {\n        return new HorizontalCategoricalColorLegend({ manager: this })\n    }\n\n    @action.bound private onEntityMouseOver(entityName: string): void {\n        this.tooltipState.target = { entityName }\n    }\n\n    @action.bound private onMouseMove(ev: React.MouseEvent): void {\n        const ref = this.manager.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, ev)\n        }\n    }\n\n    @action.bound private dismissTooltip(): void {\n        this.tooltipState.target = null\n    }\n\n    @action.bound private onEntityClick(entityName: string): void {\n        this.onSelectEntity(entityName)\n    }\n\n    @action.bound private onSelectEntity(entityName: string): void {\n        if (this.canAddCountry) this.selectionArray.toggleSelection(entityName)\n    }\n    @computed private get canAddCountry(): boolean {\n        const { addCountryMode } = this.manager\n        return (addCountryMode &&\n            addCountryMode !== EntitySelectionMode.Disabled) as boolean\n    }\n\n    @computed private get tooltipItem(): Item | undefined {\n        const { target } = this.tooltipState\n        return (\n            target &&\n            this.items.find(\n                ({ entityName }) => entityName === target.entityName\n            )\n        )\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this)\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        const {\n            manager,\n            bounds,\n            dualAxis,\n            tooltipItem,\n            xColumn,\n            yColumns,\n            colorColumn,\n            colorScale,\n            manager: { endTime, xOverrideTime },\n            inputTable: { timeColumn },\n            tooltipState: { target, position, fading },\n        } = this\n\n        const { entityName, xPoint, bars } = tooltipItem ?? {}\n\n        const yValues =\n            bars?.map((bar: Bar) => {\n                const column = this.chartState.transformedTable.get(\n                    bar.columnSlug\n                )\n\n                const shouldShowYTimeNotice =\n                    bar.yPoint.value !== undefined &&\n                    bar.yPoint.time !== endTime\n\n                return {\n                    name: bar.seriesName,\n                    value: bar.yPoint.value,\n                    column,\n                    originalTime: shouldShowYTimeNotice\n                        ? column.formatTime(bar.yPoint.time)\n                        : undefined,\n                }\n            }) ?? []\n\n        // TODO: when we have proper time support to work across date/year variables then\n        // this should be set properly and the x axis time be passed in on it's own.\n        // For now we disable x axis notices when the xOverrideTime is set which is\n        // usually the case when matching day and year variables\n        const shouldShowXTimeNotice =\n            xPoint && xPoint.time !== endTime && xOverrideTime === undefined\n        const xOriginalTime = shouldShowXTimeNotice ? xPoint?.time : undefined\n        const xOriginalTimeFormatted = xOriginalTime\n            ? xColumn?.formatTime(xOriginalTime)\n            : undefined\n        const targetNotice =\n            xOriginalTime || yValues.some(({ originalTime }) => !!originalTime)\n                ? timeColumn.formatValue(endTime)\n                : undefined\n        const toleranceNotice = targetNotice\n            ? {\n                  icon: TooltipFooterIcon.Notice,\n                  text: makeTooltipToleranceNotice(targetNotice),\n              }\n            : undefined\n\n        const columns = excludeUndefined([xColumn, ...yColumns])\n        const allRoundedToSigFigs = columns.every(\n            (column) => column.roundsToSignificantFigures\n        )\n        const anyRoundedToSigFigs = columns.some(\n            (column) => column.roundsToSignificantFigures\n        )\n        const sigFigs = excludeUndefined(\n            columns.map((column) =>\n                column.roundsToSignificantFigures\n                    ? column.numSignificantFigures\n                    : undefined\n            )\n        )\n        const roundingNotice = anyRoundedToSigFigs\n            ? {\n                  icon: allRoundedToSigFigs\n                      ? TooltipFooterIcon.None\n                      : TooltipFooterIcon.Significance,\n                  text: makeTooltipRoundingNotice(sigFigs, {\n                      plural: sigFigs.length > 1,\n                  }),\n              }\n            : undefined\n        const superscript =\n            !!roundingNotice && roundingNotice.icon !== TooltipFooterIcon.None\n\n        const footer = excludeUndefined([toleranceNotice, roundingNotice])\n\n        return (\n            <g\n                ref={this.base}\n                id={makeFigmaId(\"marimekko-chart\")}\n                onMouseMove={(ev): void => this.onMouseMove(ev)}\n                onMouseLeave={(): void => this.dismissTooltip()}\n            >\n                <rect\n                    x={bounds.left}\n                    y={bounds.top}\n                    width={bounds.width}\n                    height={bounds.height}\n                    opacity={0}\n                    fill=\"rgba(255,255,255,0)\"\n                />\n                <DualAxisComponent\n                    dualAxis={dualAxis}\n                    showTickMarks={true}\n                    detailsMarker={manager.detailsMarkerInSvg}\n                    backgroundColor={manager.backgroundColor}\n                />\n                {this.showLegend && (\n                    <HorizontalCategoricalColorLegend manager={this} />\n                )}\n                {this.renderBars()}\n                {this.labelLines}\n                {this.placedLabels}\n                {target && (\n                    <Tooltip\n                        id=\"marimekkoTooltip\"\n                        tooltipManager={this.manager}\n                        x={position.x}\n                        y={position.y}\n                        style={{ maxWidth: \"250px\" }}\n                        offsetX={20}\n                        offsetY={-16}\n                        title={entityName}\n                        subtitle={timeColumn.formatValue(endTime)}\n                        footer={footer}\n                        dissolve={fading}\n                        dismiss={() => (this.tooltipState.target = null)}\n                    >\n                        {yValues.map(\n                            ({ name, value, column, originalTime }) => (\n                                <TooltipValue\n                                    key={name}\n                                    label={column.displayName}\n                                    unit={column.displayUnit}\n                                    value={column.formatValueShort(value)}\n                                    originalTime={originalTime}\n                                    isRoundedToSignificantFigures={\n                                        column.roundsToSignificantFigures\n                                    }\n                                    showSignificanceSuperscript={superscript}\n                                />\n                            )\n                        )}\n                        {xColumn && !xColumn.isMissing && (\n                            <TooltipValue\n                                label={xColumn.displayName}\n                                unit={xColumn.displayUnit}\n                                value={xColumn.formatValueShort(xPoint?.value)}\n                                originalTime={xOriginalTimeFormatted}\n                                isRoundedToSignificantFigures={\n                                    xColumn.roundsToSignificantFigures\n                                }\n                                showSignificanceSuperscript={superscript}\n                            />\n                        )}\n                        {colorColumn &&\n                            !colorColumn.isMissing &&\n                            tooltipItem?.entityColor &&\n                            !(\n                                colorColumn instanceof ColumnTypeMap.Continent\n                            ) && (\n                                <TooltipValue\n                                    label={\n                                        colorScale.legendDescription ??\n                                        colorColumn.displayName\n                                    }\n                                    value={\n                                        colorScale.getBinForValue(\n                                            tooltipItem.entityColor\n                                                .colorDomainValue\n                                        )?.label ??\n                                        tooltipItem.entityColor.colorDomainValue\n                                    }\n                                />\n                            )}\n                    </Tooltip>\n                )}\n            </g>\n        )\n    }\n\n    private renderBars(): React.ReactElement {\n        return (\n            <MarimekkoBars\n                dualAxis={this.dualAxis}\n                focusColorBin={this.focusColorBin}\n                placedItems={this.placedItems}\n                tooltipState={this.tooltipState}\n                fontSize={this.fontSize}\n                x0={this.chartState.x0}\n                y0={this.chartState.y0}\n                selectionArray={this.selectionArray}\n                selectedItems={this.chartState.selectedItems}\n                onEntityClick={this.onEntityClick}\n                onEntityMouseLeave={this.dismissTooltip}\n                onEntityMouseOver={this.onEntityMouseOver}\n            />\n        )\n    }\n\n    private paddingInPixels = 5\n\n    private static labelCandidateFromItem(\n        item: EntityWithSize,\n        fontSize: number,\n        isSelected: boolean\n    ): LabelCandidate {\n        const label = item.shortEntityName ?? item.entityName\n        const labelBounds = Bounds.forText(label, { fontSize })\n\n        return {\n            item: item,\n            label,\n            bounds: labelBounds,\n            isPicked: isSelected,\n            isSelected,\n        }\n    }\n\n    /** This function splits label candidates into N groups so that each group has approximately\n    the same sum of x value metric. This is useful for picking labels because we want to have e.g.\n    20 labels relatively evenly spaced (in x domain space) and this function gives us 20 groups that\n    are roughly of equal size and then we can pick the largest of each group */\n    private static splitIntoEqualDomainSizeChunks(\n        items: Item[],\n        candidates: LabelCandidate[],\n        numChunks: number\n    ): LabelCandidate[][] {\n        // candidates contains all entities available in the chart for some time\n        // items is just the entities for the currently selected time, so can be a way smaller subset\n        const validItemNames = items.map(({ entityName }) => entityName)\n\n        // filter the list to remove any candidates that are not currently visible\n        // all further calculations are then done only with validCandidates\n        const validCandidates = candidates.filter((candidate) =>\n            validItemNames.includes(candidate.item.entityName)\n        )\n\n        const chunks: LabelCandidate[][] = []\n        let currentChunk: LabelCandidate[] = []\n        let domainSizeOfChunk = 0\n        const domainSizeThreshold = Math.ceil(\n            _.sumBy(validCandidates, (candidate) => candidate.item.xValue) /\n                numChunks\n        )\n        for (const candidate of validCandidates) {\n            while (domainSizeOfChunk > domainSizeThreshold) {\n                chunks.push(currentChunk)\n                currentChunk = []\n                domainSizeOfChunk -= domainSizeThreshold\n            }\n            domainSizeOfChunk += candidate.item.xValue\n            currentChunk.push(candidate)\n        }\n        chunks.push(currentChunk)\n\n        return chunks.filter((chunk) => chunk.length > 0)\n    }\n\n    @computed private get pickedLabelCandidates(): LabelCandidate[] {\n        const {\n            xColumnAtLastTimePoint,\n            yColumnsAtLastTimePoint,\n            xRange,\n            sortConfig,\n            paddingInPixels,\n            items,\n        } = this\n        const { selectedItems } = this.chartState\n\n        if (yColumnsAtLastTimePoint.length === 0) return []\n\n        // Measure the labels (before any rotation, just normal horizontal labels)\n        const selectedItemsSet = new Set(\n            selectedItems.map((item) => item.entityName)\n        )\n\n        // This is similar to what we would get with .sortedItems but\n        // we want this for the last year to pick all labels there - sortedItems\n        // changes with the time point the user selects\n        const ySizeMap: Map<string, number> = new Map(\n            yColumnsAtLastTimePoint[0].owidRows.map((row) => [\n                row.entityName,\n                row.value,\n            ])\n        )\n\n        // We want labels to be chosen according to the latest time point available in the chart.\n        // The reason for this is that it makes it so the labels are pretty consistent across time,\n        // and not very jumpy when the user drags across the timeline.\n        const labelCandidateSource = xColumnAtLastTimePoint\n            ? xColumnAtLastTimePoint\n            : yColumnsAtLastTimePoint[0]\n\n        let labelCandidates: LabelCandidate[] =\n            labelCandidateSource.owidRows.map((row) =>\n                MarimekkoChart.labelCandidateFromItem(\n                    {\n                        entityName: row.entityName,\n                        shortEntityName: getShortNameForEntity(row.entityName),\n                        xValue:\n                            xColumnAtLastTimePoint !== undefined\n                                ? row.value\n                                : 1,\n                        ySortValue: ySizeMap.get(row.entityName),\n                    },\n                    this.entityLabelFontSize,\n                    selectedItemsSet.has(row.entityName)\n                )\n            )\n\n        // If focus mode is active, only label focused series\n        if (this.chartState.focusArray.hasFocusedSeries) {\n            labelCandidates = labelCandidates.filter((candidate) =>\n                this.chartState.focusArray.has(candidate.item.entityName)\n            )\n        }\n\n        if (labelCandidates.length === 0) return []\n\n        labelCandidates.sort((a, b) => {\n            const yRowsForA = a.item.ySortValue\n            const yRowsForB = b.item.ySortValue\n\n            if (yRowsForA !== undefined && yRowsForB !== undefined) {\n                const diff = yRowsForB - yRowsForA\n                if (diff !== 0) return diff\n                else return b.item.entityName.localeCompare(a.item.entityName)\n            } else if (yRowsForA === undefined && yRowsForB !== undefined)\n                return -1\n            else if (yRowsForA !== undefined && yRowsForB === undefined)\n                return 1\n            // (yRowsForA === undefined && yRowsForB === undefined)\n            else return 0\n        })\n\n        if (sortConfig.sortOrder === SortOrder.desc) {\n            labelCandidates.reverse()\n        }\n\n        const [sortedLabelsWithValues, sortedLabelsWithoutValues] = _.partition(\n            labelCandidates,\n            (item) =>\n                item.item.ySortValue !== 0 && item.item.ySortValue !== undefined\n        )\n\n        if (sortedLabelsWithValues.length) {\n            R.first(sortedLabelsWithValues)!.isPicked = true\n            R.last(sortedLabelsWithValues)!.isPicked = true\n        }\n        if (sortedLabelsWithoutValues.length) {\n            if (sortConfig.sortOrder === SortOrder.desc)\n                R.first(sortedLabelsWithoutValues)!.isPicked = true\n            else R.last(sortedLabelsWithoutValues)!.isPicked = true\n        }\n        const availablePixels = xRange[1] - xRange[0]\n\n        const labelHeight = labelCandidates[0].bounds.height\n\n        const numLabelsToAdd = Math.floor(\n            Math.min(\n                availablePixels / (labelHeight + paddingInPixels) / 3, // factor 3 is arbitrary to taste\n                MAX_LABEL_COUNT\n            )\n        )\n        const chunks = MarimekkoChart.splitIntoEqualDomainSizeChunks(\n            items,\n            labelCandidates,\n            numLabelsToAdd\n        )\n        const picks = chunks.flatMap((chunk) => {\n            const picked = chunk.filter((candidate) => candidate.isPicked)\n            if (picked.length > 0) return picked\n            else {\n                return _.maxBy(chunk, (candidate) => candidate.item.xValue)\n            }\n        })\n        for (const max of picks) {\n            if (max) max.isPicked = true\n        }\n        const picked = labelCandidates.filter((candidate) => candidate.isPicked)\n\n        return picked\n    }\n\n    @computed private get labelsWithPlacementInfo(): LabelWithPlacement[] {\n        const {\n            dualAxis,\n            placedItemsMap,\n            labels,\n            unrotatedLongestLabelWidth,\n            unrotatedHighestLabelHeight,\n            labelAngleInDegrees,\n        } = this\n        const { x0 } = this.chartState\n        const labelsYPosition = dualAxis.verticalAxis.place(0)\n\n        const labelsWithPlacements: LabelWithPlacement[] = labels\n            .map(({ candidate, labelElement }) => {\n                const item = placedItemsMap.get(candidate.item.entityName)\n                if (!item)\n                    console.error(\"Could not find item in placedItemsMap\")\n                const xPoint = item?.xPoint?.value ?? 1\n                const barWidth =\n                    dualAxis.horizontalAxis.place(xPoint) -\n                    dualAxis.horizontalAxis.place(x0)\n\n                const labelId = candidate.item.entityName\n                if (!item) {\n                    console.error(\n                        \"Could not find item\",\n                        candidate.item.entityName\n                    )\n                    return null\n                } else {\n                    const currentX =\n                        dualAxis.horizontalAxis.place(x0) + item.xPosition\n                    const labelWithPlacement = {\n                        label: (\n                            <g\n                                transform={`translate(${0}, ${labelsYPosition})`}\n                            >\n                                {labelElement}\n                            </g>\n                        ),\n                        preferredPlacement: currentX + barWidth / 2,\n                        correctedPlacement: currentX + barWidth / 2,\n                        labelKey: labelId,\n                    }\n                    return labelWithPlacement\n                }\n            })\n            .filter(\n                (item: LabelWithPlacement | null): item is LabelWithPlacement =>\n                    item !== null\n            )\n\n        // This collision detection code is optimized for the particular\n        // case of distributing items in 1D, knowing that we picked a low\n        // enough number of labels that we will be able to fit all labels.\n        // The algorithm iterates the list twice, i.e. works in linear time\n        // with the number of labels to show\n        // The logic in pseudo code:\n        // for current, next in iterate-left-to-right-pairs:\n        //   if next.x < current.x + label-width:\n        //      next.x = current.x + label-width\n        // last.x = Math.min(last.x, max-x)\n        // for current, prev in iterate-right-to-left-pairs:\n        //   if prev.x > current.x - label-width:\n        //      prev.x = current.x - label-width\n\n        // The label width is uniform for now and starts with\n        // the height of a label when printed in normal horizontal layout\n        // Since labels are rotated we need to make a bit more space so that they\n        // stack correctly. Consider:\n        //     ╱---╱ ╱---╱\n        //    ╱   ╱ ╱   ╱\n        //   ╱   ╱ ╱   ╱\n        //  ╱---╱ ╱---╱\n        // If we would just use exactly the label width then the flatter the angle\n        // the more they would actually overlap so we need a correction factor. It turns\n        // out than tan(angle) is the correction factor we want, although for horizontal\n        // labels we don't want to use +infinity :) so we Math.min it with the longest label width\n        if (labelsWithPlacements.length === 0) return []\n\n        labelsWithPlacements.sort((a, b) => {\n            const diff = a.preferredPlacement - b.preferredPlacement\n            if (diff !== 0) return diff\n            else return a.labelKey.localeCompare(b.labelKey)\n        })\n\n        const labelWidth = unrotatedHighestLabelHeight\n        const correctionFactor =\n            1 +\n            Math.min(\n                unrotatedLongestLabelWidth / labelWidth,\n                Math.abs(Math.tan(labelAngleInDegrees))\n            )\n        const correctedLabelWidth = labelWidth * correctionFactor\n\n        for (let i = 0; i < labelsWithPlacements.length - 1; i++) {\n            const current = labelsWithPlacements[i]\n            const next = labelsWithPlacements[i + 1]\n            const minNextX = current.correctedPlacement + correctedLabelWidth\n            if (next.correctedPlacement < minNextX)\n                next.correctedPlacement = minNextX\n        }\n        labelsWithPlacements[\n            labelsWithPlacements.length - 1\n        ].correctedPlacement = Math.min(\n            labelsWithPlacements[labelsWithPlacements.length - 1]\n                .correctedPlacement,\n            dualAxis.horizontalAxis.rangeSize +\n                dualAxis.horizontalAxis.place(x0)\n        )\n        for (let i = labelsWithPlacements.length - 1; i > 0; i--) {\n            const current = labelsWithPlacements[i]\n            const previous = labelsWithPlacements[i - 1]\n            const maxPreviousX =\n                current.correctedPlacement - correctedLabelWidth\n            if (previous.correctedPlacement > maxPreviousX)\n                previous.correctedPlacement = maxPreviousX\n        }\n\n        return labelsWithPlacements\n    }\n\n    @computed private get labelLines(): React.ReactElement[] {\n        const { labelsWithPlacementInfo, dualAxis } = this\n        const { selectedItems } = this.chartState\n        const shiftedGroups: LabelWithPlacement[][] = []\n        const unshiftedElements: LabelWithPlacement[] = []\n        const selectedItemsKeys = new Set(\n            selectedItems.map((item) => item.entityName)\n        )\n        let startNewGroup = true\n\n        const barEndpointY = dualAxis.verticalAxis.place(0)\n\n        for (const labelWithPlacement of labelsWithPlacementInfo) {\n            if (\n                labelWithPlacement.preferredPlacement ===\n                labelWithPlacement.correctedPlacement\n            ) {\n                unshiftedElements.push(labelWithPlacement)\n                startNewGroup = true\n            } else {\n                if (startNewGroup) {\n                    shiftedGroups.push([labelWithPlacement])\n                    startNewGroup = false\n                } else {\n                    shiftedGroups[shiftedGroups.length - 1].push(\n                        labelWithPlacement\n                    )\n                }\n            }\n        }\n        // If we wanted to hide the label lines if all lines are straight\n        // then we could do this but this makes it jumpy over time\n        // if (shiftedGroups.length === 0) return []\n        // else {\n        const labelLines: React.ReactElement[] = []\n        for (const group of shiftedGroups) {\n            let indexInGroup = 0\n            for (const item of group) {\n                const lineColor = selectedItemsKeys.has(item.labelKey)\n                    ? \"#999\"\n                    : \"#bbb\"\n                const markerBarEndpointX = item.preferredPlacement\n                const markerTextEndpointX = item.correctedPlacement\n                const markerBarEndpointY = barEndpointY + MARKER_MARGIN\n                const markerTextEndpointY =\n                    barEndpointY + MARKER_AREA_HEIGHT - MARKER_MARGIN\n                const markerNetHeight = MARKER_AREA_HEIGHT - 2 * MARKER_MARGIN\n                const markerStepSize = markerNetHeight / (group.length + 1)\n                const directionUnawareMakerYMid =\n                    (indexInGroup + 1) * markerStepSize\n                const markerYMid =\n                    markerBarEndpointX > markerTextEndpointX\n                        ? directionUnawareMakerYMid\n                        : markerNetHeight - directionUnawareMakerYMid\n                labelLines.push(\n                    <g\n                        id={makeFigmaId(\"label-line\", item.labelKey)}\n                        className=\"indicator\"\n                        key={`labelline-${item.labelKey}`}\n                    >\n                        <path\n                            d={`M${markerBarEndpointX},${markerBarEndpointY} v${markerYMid} H${markerTextEndpointX} V${markerTextEndpointY}`}\n                            stroke={lineColor}\n                            strokeWidth={1}\n                            fill=\"none\"\n                        />\n                    </g>\n                )\n                indexInGroup++\n            }\n        }\n        for (const item of unshiftedElements) {\n            const lineColor = selectedItemsKeys.has(item.labelKey)\n                ? \"#555\"\n                : \"#bbb\"\n            const markerBarEndpointX = item.preferredPlacement\n            const markerBarEndpointY = barEndpointY + MARKER_MARGIN\n            const markerTextEndpointY =\n                barEndpointY + MARKER_AREA_HEIGHT - MARKER_MARGIN\n\n            labelLines.push(\n                <g\n                    id={makeFigmaId(\"label-line\", item.labelKey)}\n                    key={`labelline-${item.labelKey}`}\n                >\n                    <path\n                        d={`M${markerBarEndpointX},${markerBarEndpointY} V${markerTextEndpointY}`}\n                        stroke={lineColor}\n                        strokeWidth={1}\n                        fill=\"none\"\n                    />\n                </g>\n            )\n        }\n        return labelLines\n        //}\n    }\n\n    @computed private get placedLabels(): React.ReactElement[] {\n        const labelOffset = MARKER_AREA_HEIGHT\n        // old logic tried to hide labellines but that is too jumpy\n        // labelLines.length\n        //     ? MARKER_AREA_HEIGHT\n        //     : this.baseFontSize / 2\n        const placedLabels = this.labelsWithPlacementInfo.map((item) => (\n            <g\n                key={`label-${item.labelKey}`}\n                id={makeFigmaId(\"label\", item.labelKey)}\n                transform={`translate(${item.correctedPlacement}, ${labelOffset})`}\n            >\n                {item.label}\n            </g>\n        ))\n\n        return placedLabels\n    }\n\n    @computed private get unrotatedLongestLabelWidth(): number {\n        const widths = this.pickedLabelCandidates.map(\n            (candidate) => candidate.bounds.width\n        )\n        const maxWidth = Math.max(...widths)\n        return maxWidth\n    }\n\n    @computed private get unrotatedHighestLabelHeight(): number {\n        const heights = this.pickedLabelCandidates.map(\n            (candidate) => candidate.bounds.height\n        )\n        return Math.max(...heights)\n    }\n\n    @computed private get longestLabelHeight(): number {\n        // This takes the angle of rotation of the entity labels into account\n        // This is somewhat simplified as we treat this as a one-dimensional\n        // entity whereas in reality the textbox if of course 2D. To account\n        // for that we do max(fontSize, rotatedLabelHeight) in the end\n        // as a rough proxy\n        const rotatedLabelHeight =\n            this.unrotatedLongestLabelWidth *\n            Math.abs(Math.sin((this.labelAngleInDegrees * Math.PI) / 180))\n        return Math.max(this.fontSize, rotatedLabelHeight)\n    }\n\n    @computed private get longestLabelWidth(): number {\n        // This takes the angle of rotation of the entity labels into account\n        // This is somewhat simplified as we treat this as a one-dimensional\n        // entity whereas in reality the textbox if of course 2D. To account\n        // for that we do max(fontSize, rotatedLabelHeight) in the end\n        // as a rough proxy\n        const rotatedLabelWidth =\n            this.unrotatedLongestLabelWidth *\n            Math.abs(Math.cos((this.labelAngleInDegrees * Math.PI) / 180))\n        return Math.max(this.fontSize, rotatedLabelWidth)\n    }\n\n    @computed private get entityLabelFontSize(): number {\n        return GRAPHER_FONT_SCALE_12 * this.fontSize\n    }\n\n    @computed private get labels(): LabelCandidateWithElement[] {\n        const { labelAngleInDegrees, series } = this\n        const { domainColorForEntityMap } = this.chartState\n        return this.pickedLabelCandidates.map((candidate) => {\n            const domainColor = domainColorForEntityMap.get(\n                candidate.item.entityName\n            )\n            const seriesColor = series[0].color\n            const color = domainColor?.color ?? seriesColor ?? \"#000\"\n            return {\n                candidate,\n                labelElement: (\n                    <text\n                        key={`${candidate.item.entityName}-label`}\n                        y={0}\n                        fontWeight={candidate.isSelected ? 700 : 400}\n                        fill={color}\n                        transform={`rotate(${labelAngleInDegrees}, 0, 0)`}\n                        opacity={1}\n                        fontSize={this.entityLabelFontSize}\n                        textAnchor=\"end\"\n                        dy={dyFromAlign(VerticalAlign.middle)}\n                        onMouseOver={(): void =>\n                            this.onEntityMouseOver(candidate.item.entityName)\n                        }\n                        onMouseLeave={(): void => this.dismissTooltip()}\n                        onClick={(): void =>\n                            this.onEntityClick(candidate.item.entityName)\n                        }\n                    >\n                        {candidate.label}\n                    </text>\n                ),\n            }\n        })\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    AxisConfigInterface,\n    ColumnSlug,\n    EntityName,\n    OwidVariableRoundingMode,\n    Time,\n} from \"@ourworldindata/types\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport { LineChart } from \"../lineCharts/LineChart\"\nimport { LineChartState } from \"../lineCharts/LineChartState\"\nimport { Bounds, checkIsVeryShortUnit } from \"@ourworldindata/utils\"\nimport { LineChartManager } from \"../lineCharts/LineChartConstants\"\nimport { ColorScale } from \"../color/ColorScale.js\"\nimport * as R from \"remeda\"\nimport { MapColumnInfo } from \"./MapChartConstants\"\nimport type { MapFormatValueForTooltip } from \"./MapChartState.js\"\n\nconst DEFAULT_SPARKLINE_WIDTH = 250\nconst DEFAULT_SPARKLINE_HEIGHT = 87\n\nconst SPARKLINE_PADDING = 15\nconst SPARKLINE_NUDGE = 3 // step away from the axis\n\nexport interface MapSparklineManager {\n    mapColumnSlug: ColumnSlug\n    mapColumnInfo: MapColumnInfo\n    timeSeriesTable: OwidTable\n    targetTime?: Time\n    entityName: EntityName\n    lineColorScale?: ColorScale\n    highlightedTimesInSparkline?: Time[]\n    mapAndYColumnAreTheSame?: boolean\n    yAxisConfig?: AxisConfigInterface\n    formatValueForTooltip: MapFormatValueForTooltip\n}\n\ninterface MapSparklineProps {\n    manager: MapSparklineManager\n    sparklineWidth?: number\n    sparklineHeight?: number\n}\n\n@observer\nexport class MapSparkline extends React.Component<MapSparklineProps> {\n    constructor(props: MapSparklineProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    static shouldShow(manager: MapSparklineManager): boolean {\n        const test = new MapSparkline({ manager })\n        return test.showSparkline\n    }\n\n    @computed private get manager(): MapSparklineManager {\n        return this.props.manager\n    }\n\n    @computed private get mapColumnSlug(): ColumnSlug {\n        return this.manager.mapColumnSlug\n    }\n\n    @computed private get sparklineTable(): OwidTable {\n        return this.manager.timeSeriesTable\n            .filterByEntityNames([this.manager.entityName])\n            .columnFilter(\n                this.mapColumnSlug,\n                _.isNumber,\n                \"Drop rows with non-number values in Y column\"\n            )\n            .sortBy([this.manager.timeSeriesTable.timeColumn.slug])\n    }\n\n    @computed private get hasTimeSeriesData(): boolean {\n        return this.sparklineTable.numRows > 1\n    }\n\n    @computed private get showSparkline(): boolean {\n        return this.hasTimeSeriesData\n    }\n\n    @computed private get highlightedTimesInLineChart(): Time[] {\n        return this.props.manager.highlightedTimesInSparkline ?? []\n    }\n\n    @computed private get sparklineManager(): LineChartManager {\n        const { mapColumnInfo } = this.manager\n\n        // Plot projected and historical data as separate lines\n        const yColumnSlugs =\n            mapColumnInfo.type === \"historical+projected\"\n                ? [mapColumnInfo.projectedSlug, mapColumnInfo.historicalSlug]\n                : [mapColumnInfo.slug]\n\n        // Use the whole time range for the sparkline, not just the range where this series has data\n        let { minTime, maxTime } = this.manager.timeSeriesTable ?? {}\n        if (this.mapColumnSlug) {\n            const times =\n                this.manager.timeSeriesTable.getTimesUniqSortedAscForColumns([\n                    this.mapColumnSlug,\n                ])\n            minTime = R.first(times) ?? minTime\n            maxTime = R.last(times) ?? maxTime\n        }\n\n        // Pass down short units, while omitting long or undefined ones.\n        const unit = this.sparklineTable.get(this.mapColumnSlug).shortUnit\n        const yAxisUnit =\n            typeof unit === \"string\"\n                ? checkIsVeryShortUnit(unit)\n                    ? unit\n                    : \"\"\n                : \"\"\n\n        return {\n            table: this.sparklineTable,\n            transformedTable: this.sparklineTable,\n            yColumnSlugs,\n            colorColumnSlug: this.mapColumnSlug,\n            selection: [this.manager.entityName],\n            colorScaleOverride: this.manager.lineColorScale,\n            showLegend: false,\n            hidePoints: true,\n            fontSize: 11,\n            disableIntroAnimation: true,\n            lineStrokeWidth: 2,\n            highlightedTimesInLineChart: this.highlightedTimesInLineChart,\n            yAxisConfig: {\n                hideAxis: true,\n                hideGridlines: false,\n                tickFormattingOptions: {\n                    unit: yAxisUnit,\n                    numberAbbreviation: \"short\",\n                },\n                // Copy min/max from top-level Grapher config if Y column == Map column\n                min: this.manager.mapAndYColumnAreTheSame\n                    ? (this.manager.yAxisConfig?.min ?? 0) // Default to 0 if not specified\n                    : undefined,\n                max: this.manager.mapAndYColumnAreTheSame\n                    ? this.manager.yAxisConfig?.max\n                    : undefined,\n                ticks: [\n                    // Show minimum and zero (maximum is added by hand in render so it's never omitted)\n                    { value: -Infinity, priority: 2 },\n                    { value: 0, priority: 1 },\n                ],\n                nice: false,\n            },\n            xAxisConfig: {\n                hideAxis: false,\n                hideGridlines: true,\n                tickFormattingOptions: {},\n                min: minTime ?? this.manager.targetTime,\n                max: maxTime ?? this.manager.targetTime,\n                ticks: [\n                    // Show minimum and maximum\n                    { value: -Infinity, priority: 1 },\n                    { value: Infinity, priority: 1 },\n                ],\n            },\n        }\n    }\n\n    @computed private get sparklineWidth(): number {\n        return this.props.sparklineWidth ?? DEFAULT_SPARKLINE_WIDTH\n    }\n\n    @computed private get sparklineHeight(): number {\n        return this.props.sparklineHeight ?? DEFAULT_SPARKLINE_HEIGHT\n    }\n\n    @computed private get sparklineBounds(): Bounds {\n        // Add padding so that the edges of the plot doesn't get clipped.\n        // The plot can go out of boundaries due to line stroke thickness & labels.\n        return new Bounds(0, 0, this.sparklineWidth, this.sparklineHeight).pad({\n            top: 9,\n            left: SPARKLINE_PADDING,\n            right: SPARKLINE_PADDING,\n            bottom: 3,\n        })\n    }\n\n    @computed private get sparklineChartState(): LineChartState {\n        return new LineChartState({ manager: this.sparklineManager })\n    }\n\n    @computed private get sparklineChart(): LineChart {\n        return new LineChart({\n            bounds: this.sparklineBounds,\n            chartState: this.sparklineChartState,\n        })\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.showSparkline) return null\n\n        const { mapColumnSlug, formatValueForTooltip } = this.manager\n\n        const roundingMode = OwidVariableRoundingMode.decimalPlaces\n        const { yAxisConfig } = this.sparklineManager,\n            yColumn = this.sparklineTable.get(mapColumnSlug),\n            minVal = _.min([yColumn.minValue, yAxisConfig?.min]) ?? 0,\n            maxVal = _.max([yColumn.maxValue, yAxisConfig?.max]) ?? 0,\n            minLabel = formatValueForTooltip(minVal, { roundingMode }).label,\n            maxLabel = formatValueForTooltip(maxVal, { roundingMode }).label\n        const { innerBounds: axisBounds } = this.sparklineChart.dualAxis\n\n        const labelX = axisBounds.right - SPARKLINE_NUDGE\n        const labelTop = axisBounds.top - SPARKLINE_NUDGE\n        const labelBottom = axisBounds.bottom - SPARKLINE_NUDGE\n\n        return (\n            <div\n                className=\"sparkline\"\n                // negative margin to align the padding (added below) with the text labels\n                style={{ margin: `0 -${SPARKLINE_PADDING}px` }}\n            >\n                <svg\n                    className=\"plot\"\n                    width={this.sparklineWidth}\n                    height={this.sparklineHeight}\n                >\n                    <line\n                        className=\"max-line\"\n                        x1={axisBounds.left}\n                        y1={axisBounds.y}\n                        x2={axisBounds.right}\n                        y2={axisBounds.y}\n                    />\n                    <LineChart\n                        bounds={this.sparklineBounds}\n                        chartState={this.sparklineChartState}\n                    />\n                    {maxLabel !== minLabel && (\n                        <g className=\"max axis-label\">\n                            <text x={labelX} y={labelTop}>\n                                {maxLabel}\n                            </text>\n                        </g>\n                    )}\n                    <g className=\"min axis-label\">\n                        <text className=\"outline\" x={labelX} y={labelBottom}>\n                            {minLabel}\n                        </text>\n                        <text x={labelX} y={labelBottom}>\n                            {minLabel}\n                        </text>\n                    </g>\n                </svg>\n            </div>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    FooterItem,\n    TooltipFadeMode,\n    TooltipFooterIcon,\n} from \"../tooltip/TooltipProps.js\"\nimport {\n    Tooltip,\n    TooltipValue,\n    makeTooltipToleranceNotice,\n    makeTooltipRoundingNotice,\n    TooltipValueRange,\n    formatTooltipRangeValues,\n} from \"../tooltip/Tooltip\"\nimport { MapChartManager, MapColumnInfo } from \"./MapChartConstants\"\nimport { ColorScale } from \"../color/ColorScale\"\nimport {\n    Time,\n    EntityName,\n    OwidVariableRow,\n    AxisConfigInterface,\n    ColumnSlug,\n    PrimitiveType,\n} from \"@ourworldindata/types\"\nimport { CoreColumn, OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    calculateTrendDirection,\n    excludeUndefined,\n    PointVector,\n} from \"@ourworldindata/utils\"\nimport { darkenColorForHighContrastText } from \"../color/ColorUtils\"\nimport { MapSparkline, MapSparklineManager } from \"./MapSparkline.js\"\nimport { match } from \"ts-pattern\"\nimport { MapFormatValueForTooltip } from \"./MapChartState.js\"\n\ninterface MapTooltipProps {\n    entityName: EntityName\n    manager: MapChartManager\n    mapColumnSlug: ColumnSlug\n    mapColumnInfo: MapColumnInfo\n    position?: PointVector\n    lineColorScale: ColorScale\n    timeSeriesTable: OwidTable\n    targetTime?: Time // show tooltip values for a specific point in time\n    targetTimes?: [Time, Time] // show tooltip values for a specific time range (start and end times)\n    sparklineWidth?: number\n    sparklineHeight?: number\n    fading?: TooltipFadeMode\n    dismissTooltip?: () => void\n    formatValueForTooltip: MapFormatValueForTooltip\n}\n\n@observer\nexport class MapTooltip\n    extends React.Component<MapTooltipProps>\n    implements MapSparklineManager\n{\n    constructor(props: MapTooltipProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get mapColumnSlug(): ColumnSlug {\n        return this.props.mapColumnSlug\n    }\n\n    @computed get mapColumnInfo(): MapColumnInfo {\n        return this.props.mapColumnInfo\n    }\n\n    @computed private get mapColumn(): CoreColumn {\n        return this.entityTable.get(this.mapColumnSlug)\n    }\n\n    @computed get formatValueForTooltip(): MapFormatValueForTooltip {\n        return this.props.formatValueForTooltip\n    }\n\n    @computed get mapAndYColumnAreTheSame(): boolean {\n        const { mapColumnSlug } = this\n        const { yColumnSlug, yColumnSlugs } = this.props.manager\n        return yColumnSlugs\n            ? yColumnSlugs.includes(mapColumnSlug)\n            : yColumnSlug === mapColumnSlug\n    }\n\n    @computed get entityName(): EntityName {\n        return this.props.entityName\n    }\n\n    @computed private get shouldShowValueRange(): boolean {\n        return (\n            this.props.targetTimes !== undefined &&\n            // If both values are missing, we simply show a 'No data' tooltip\n            (this.startDatum?.value !== undefined ||\n                this.endDatum?.value !== undefined)\n        )\n    }\n\n    @computed private get startTime(): Time | undefined {\n        return this.props.targetTimes?.[0]\n    }\n\n    @computed private get endTime(): Time | undefined {\n        return this.props.targetTimes?.[1] ?? this.props.targetTime\n    }\n\n    // Table pre-filtered by targetTime, excludes time series\n    @computed private get entityTable(): OwidTable {\n        const table =\n            this.props.manager.transformedTable ?? this.props.manager.table\n        return table.filterByEntityNames([this.entityName])\n    }\n\n    @computed get timeSeriesTable(): OwidTable {\n        return this.props.timeSeriesTable\n    }\n\n    @computed private get startDatum():\n        | OwidVariableRow<number | string>\n        | undefined {\n        if (this.startTime === undefined) return undefined\n        return this.mapColumn.owidRowByEntityNameAndTime\n            .get(this.entityName)\n            ?.get(this.startTime)\n    }\n\n    @computed private get endDatum():\n        | OwidVariableRow<number | string>\n        | undefined {\n        if (this.endTime === undefined) return undefined\n        return this.mapColumn.owidRowByEntityNameAndTime\n            .get(this.entityName)\n            ?.get(this.endTime)\n    }\n\n    @computed\n    private get formattedStartValue():\n        | ReturnType<MapFormatValueForTooltip>\n        | undefined {\n        if (!this.startDatum) return undefined\n        return this.formatValueForTooltip(this.startDatum.value)\n    }\n\n    @computed\n    private get formattedEndValue():\n        | ReturnType<MapFormatValueForTooltip>\n        | undefined {\n        if (!this.endDatum) return undefined\n        return this.formatValueForTooltip(this.endDatum.value)\n    }\n\n    @computed get highlightedTimesInSparkline(): Time[] | undefined {\n        if (this.props.targetTimes) {\n            return [\n                this.startDatum?.originalTime ?? this.props.targetTimes[0],\n                this.endDatum?.originalTime ?? this.props.targetTimes[1],\n            ]\n        }\n\n        if (this.props.targetTime !== undefined)\n            return [this.endDatum?.originalTime ?? this.props.targetTime]\n\n        return []\n    }\n\n    @computed private get isProjection(): boolean {\n        return match(this.mapColumnInfo)\n            .with({ type: \"historical\" }, () => false)\n            .with({ type: \"projected\" }, () => true)\n            .with(\n                { type: \"historical+projected\" },\n                (info) =>\n                    this.entityTable.get(info.slugForIsProjectionColumn)\n                        .owidRows[0]?.value\n            )\n            .exhaustive()\n    }\n\n    @computed get lineColorScale(): ColorScale {\n        return this.props.lineColorScale\n    }\n\n    @computed get yAxisConfig(): AxisConfigInterface | undefined {\n        return this.props.manager.yAxisConfig\n    }\n\n    private formatTime(time?: Time): string | undefined {\n        if (time === undefined) return undefined\n\n        if (!this.entityTable.timeColumn.isMissing)\n            return this.entityTable.timeColumn.formatValue(time)\n\n        return time?.toString()\n    }\n\n    @computed private get tooltipSubtitle(): string | undefined {\n        const { startDatum, endDatum, startTime, endTime } = this\n\n        const originalStartTime = startDatum?.originalTime ?? startTime\n        const originalEndTime = endDatum?.originalTime ?? endTime\n\n        if (this.shouldShowValueRange) {\n            return [originalStartTime, originalEndTime]\n                .map((time) => this.formatTime(time))\n                .join(\" to \")\n        }\n\n        return this.formatTime(originalEndTime)\n    }\n\n    @computed private get toleranceNotice(): FooterItem | undefined {\n        const { startDatum, startTime, endDatum, endTime } = this\n\n        const startValueIsInterpolated =\n            startDatum && startDatum?.originalTime !== startTime\n        const endValueIsInterpolated =\n            endDatum && endDatum?.originalTime !== endTime\n\n        const formattedStartTime = this.formatTime(this.startTime)\n        const formattedEndTime = this.formatTime(this.endTime)\n\n        if (startValueIsInterpolated && endValueIsInterpolated)\n            return {\n                icon: TooltipFooterIcon.Notice,\n                text: makeTooltipToleranceNotice(\n                    `${formattedStartTime} and ${formattedEndTime}`,\n                    { plural: true }\n                ),\n            }\n\n        if (endValueIsInterpolated && formattedEndTime)\n            return {\n                icon: TooltipFooterIcon.Notice,\n                text: makeTooltipToleranceNotice(formattedEndTime),\n            }\n\n        if (startValueIsInterpolated && formattedStartTime)\n            return {\n                icon: TooltipFooterIcon.Notice,\n                text: makeTooltipToleranceNotice(formattedStartTime),\n            }\n\n        return undefined\n    }\n\n    @computed private get roundingNotice(): FooterItem | undefined {\n        const { mapColumn } = this\n\n        // Only show a rounding notice for rounding to sig figs\n        if (!mapColumn.roundsToSignificantFigures) return undefined\n\n        // Don't show a rounding notice if all values are missing\n        if (!this.startDatum && !this.endDatum) return undefined\n\n        // Don't show a rounding notice if both values are formatted as category strings\n        if (\n            this.formattedStartValue?.isCategorical &&\n            this.formattedEndValue?.isCategorical\n        )\n            return undefined\n\n        return {\n            icon: TooltipFooterIcon.None,\n            text: makeTooltipRoundingNotice([mapColumn.numSignificantFigures], {\n                plural: this.shouldShowValueRange,\n            }),\n        }\n    }\n\n    override render(): React.ReactElement {\n        const {\n            mapColumn,\n            startDatum,\n            endDatum,\n            entityName,\n            isProjection,\n            lineColorScale: colorScale,\n        } = this\n        const { position, fading } = this.props\n\n        const footer = excludeUndefined([\n            this.toleranceNotice,\n            this.roundingNotice,\n        ])\n\n        return (\n            <Tooltip\n                id=\"mapTooltip\"\n                tooltipManager={this.props.manager}\n                key=\"mapTooltip\"\n                x={position?.x}\n                y={position?.y}\n                style={{ maxWidth: \"250px\" }}\n                offsetX={20}\n                offsetY={-16}\n                offsetYDirection={\"downward\"}\n                title={entityName}\n                subtitle={this.tooltipSubtitle}\n                subtitleFormat={this.toleranceNotice ? \"notice\" : undefined}\n                footer={footer}\n                dissolve={fading}\n                dismiss={this.props.dismissTooltip}\n            >\n                {this.shouldShowValueRange ? (\n                    <MapTooltipRangeValues\n                        mapColumn={mapColumn}\n                        startDatum={startDatum}\n                        endDatum={endDatum}\n                        formattedStartValue={this.formattedStartValue}\n                        formattedEndValue={this.formattedEndValue}\n                        colorScale={colorScale}\n                    />\n                ) : (\n                    <MapTooltipValue\n                        mapColumn={mapColumn}\n                        datum={endDatum}\n                        formattedValue={this.formattedEndValue?.label}\n                        colorScale={colorScale}\n                        isProjection={isProjection}\n                    />\n                )}\n                <MapSparkline\n                    manager={this}\n                    sparklineWidth={this.props.sparklineWidth}\n                    sparklineHeight={this.props.sparklineHeight}\n                />\n            </Tooltip>\n        )\n    }\n}\n\nfunction MapTooltipValue({\n    mapColumn,\n    datum,\n    formattedValue,\n    colorScale,\n    isProjection = false,\n}: {\n    mapColumn: CoreColumn\n    datum?: OwidVariableRow<number | string>\n    formattedValue?: string\n    colorScale: ColorScale\n    isProjection?: boolean\n}): React.ReactElement {\n    const color = makeTextColorForValue(datum?.value, { colorScale })\n\n    return (\n        <TooltipValue\n            label={mapColumn.displayName}\n            unit={mapColumn.displayUnit}\n            value={formattedValue}\n            color={color}\n            isProjection={isProjection}\n            isRoundedToSignificantFigures={mapColumn.roundsToSignificantFigures}\n            labelVariant=\"unit-only\"\n        />\n    )\n}\n\nfunction MapTooltipRangeValues({\n    mapColumn,\n    startDatum,\n    endDatum,\n    formattedStartValue,\n    formattedEndValue,\n    colorScale,\n}: {\n    mapColumn: CoreColumn\n    startDatum?: OwidVariableRow<number | string>\n    endDatum?: OwidVariableRow<number | string>\n    formattedStartValue?: ReturnType<MapFormatValueForTooltip>\n    formattedEndValue?: ReturnType<MapFormatValueForTooltip>\n    colorScale: ColorScale\n}): React.ReactElement {\n    const hasCategoricalValueLabels =\n        formattedStartValue?.isCategorical || formattedEndValue?.isCategorical\n\n    const colors = [\n        makeTextColorForValue(startDatum?.value, { colorScale }),\n        makeTextColorForValue(endDatum?.value, { colorScale }),\n    ]\n\n    const values = hasCategoricalValueLabels\n        ? [formattedStartValue?.label, formattedEndValue?.label]\n        : [startDatum?.value, endDatum?.value]\n\n    return (\n        <TooltipValueRange\n            label={mapColumn.displayName}\n            unit={mapColumn.displayUnit}\n            values={formatTooltipRangeValues(values, mapColumn)}\n            colors={colors}\n            trend={calculateTrendDirection(...values) ?? \"right\"}\n            isRoundedToSignificantFigures={mapColumn.roundsToSignificantFigures}\n            labelVariant=\"unit-only\"\n        />\n    )\n}\n\nfunction makeTextColorForValue(\n    value: PrimitiveType | undefined,\n    { colorScale }: { colorScale: ColorScale }\n): string {\n    return darkenColorForHighContrastText(colorScale.getColor(value) ?? \"#333\")\n}\n","// From https://github.com/emeeks/d3-bboxCollide\n// Copy-pasted instead of relying on the distribution since the code hasn't\n// been touched in years and relies on an old version of d3-quadtree\n\nimport { quadtree } from \"d3-quadtree\"\n\nexport default function (bbox) {\n    function x(d) {\n        return d.x + d.vx\n    }\n\n    function y(d) {\n        return d.y + d.vy\n    }\n\n    function constant(x) {\n        return function () {\n            return x\n        }\n    }\n\n    var nodes,\n        boundingBoxes,\n        strength = 1,\n        iterations = 1\n\n    if (typeof bbox !== \"function\") {\n        bbox = constant(bbox === null ? [[0, 0][(1, 1)]] : bbox)\n    }\n\n    function force() {\n        var i, tree, node, xi, yi, bbi, nx1, ny1, nx2, ny2\n\n        var cornerNodes = []\n        nodes.forEach(function (d, i) {\n            cornerNodes.push({\n                node: d,\n                vx: d.vx,\n                vy: d.vy,\n                x: d.x + (boundingBoxes[i][1][0] + boundingBoxes[i][0][0]) / 2,\n                y: d.y + (boundingBoxes[i][0][1] + boundingBoxes[i][1][1]) / 2,\n            })\n            cornerNodes.push({\n                node: d,\n                vx: d.vx,\n                vy: d.vy,\n                x: d.x + boundingBoxes[i][0][0],\n                y: d.y + boundingBoxes[i][0][1],\n            })\n            cornerNodes.push({\n                node: d,\n                vx: d.vx,\n                vy: d.vy,\n                x: d.x + boundingBoxes[i][0][0],\n                y: d.y + boundingBoxes[i][1][1],\n            })\n            cornerNodes.push({\n                node: d,\n                vx: d.vx,\n                vy: d.vy,\n                x: d.x + boundingBoxes[i][1][0],\n                y: d.y + boundingBoxes[i][0][1],\n            })\n            cornerNodes.push({\n                node: d,\n                vx: d.vx,\n                vy: d.vy,\n                x: d.x + boundingBoxes[i][1][0],\n                y: d.y + boundingBoxes[i][1][1],\n            })\n        })\n        var cn = cornerNodes.length\n\n        for (var k = 0; k < iterations; ++k) {\n            tree = quadtree(cornerNodes, x, y).visitAfter(prepareCorners)\n\n            for (i = 0; i < cn; ++i) {\n                var nodeI = ~~(i / 5)\n                node = nodes[nodeI]\n                bbi = boundingBoxes[nodeI]\n                xi = node.x + node.vx\n                yi = node.y + node.vy\n                nx1 = xi + bbi[0][0]\n                ny1 = yi + bbi[0][1]\n                nx2 = xi + bbi[1][0]\n                ny2 = yi + bbi[1][1]\n                tree.visit(apply)\n            }\n        }\n\n        function apply(quad, x0, y0, x1, y1) {\n            var data = quad.data\n            if (data) {\n                var bWidth = bbLength(bbi, 0),\n                    bHeight = bbLength(bbi, 1)\n\n                if (data.node.index !== nodeI) {\n                    var dataNode = data.node\n                    var bbj = boundingBoxes[dataNode.index],\n                        dnx1 = dataNode.x + dataNode.vx + bbj[0][0],\n                        dny1 = dataNode.y + dataNode.vy + bbj[0][1],\n                        dnx2 = dataNode.x + dataNode.vx + bbj[1][0],\n                        dny2 = dataNode.y + dataNode.vy + bbj[1][1],\n                        dWidth = bbLength(bbj, 0),\n                        dHeight = bbLength(bbj, 1)\n\n                    if (\n                        nx1 <= dnx2 &&\n                        dnx1 <= nx2 &&\n                        ny1 <= dny2 &&\n                        dny1 <= ny2\n                    ) {\n                        var xSize = [\n                            Math.min.apply(null, [dnx1, dnx2, nx1, nx2]),\n                            Math.max.apply(null, [dnx1, dnx2, nx1, nx2]),\n                        ]\n                        var ySize = [\n                            Math.min.apply(null, [dny1, dny2, ny1, ny2]),\n                            Math.max.apply(null, [dny1, dny2, ny1, ny2]),\n                        ]\n\n                        var xOverlap = bWidth + dWidth - (xSize[1] - xSize[0])\n                        var yOverlap = bHeight + dHeight - (ySize[1] - ySize[0])\n\n                        var xBPush = xOverlap * strength * (yOverlap / bHeight)\n                        var yBPush = yOverlap * strength * (xOverlap / bWidth)\n\n                        var xDPush = xOverlap * strength * (yOverlap / dHeight)\n                        var yDPush = yOverlap * strength * (xOverlap / dWidth)\n\n                        if ((nx1 + nx2) / 2 < (dnx1 + dnx2) / 2) {\n                            node.vx -= xBPush\n                            dataNode.vx += xDPush\n                        } else {\n                            node.vx += xBPush\n                            dataNode.vx -= xDPush\n                        }\n                        if ((ny1 + ny2) / 2 < (dny1 + dny2) / 2) {\n                            node.vy -= yBPush\n                            dataNode.vy += yDPush\n                        } else {\n                            node.vy += yBPush\n                            dataNode.vy -= yDPush\n                        }\n                    }\n                }\n                return\n            }\n\n            return x0 > nx2 || x1 < nx1 || y0 > ny2 || y1 < ny1\n        }\n    }\n\n    function prepareCorners(quad) {\n        if (quad.data) {\n            return (quad.bb = boundingBoxes[quad.data.node.index])\n        }\n        quad.bb = [\n            [0, 0],\n            [0, 0],\n        ]\n        for (var i = 0; i < 4; ++i) {\n            if (quad[i] && quad[i].bb[0][0] < quad.bb[0][0]) {\n                quad.bb[0][0] = quad[i].bb[0][0]\n            }\n            if (quad[i] && quad[i].bb[0][1] < quad.bb[0][1]) {\n                quad.bb[0][1] = quad[i].bb[0][1]\n            }\n            if (quad[i] && quad[i].bb[1][0] > quad.bb[1][0]) {\n                quad.bb[1][0] = quad[i].bb[1][0]\n            }\n            if (quad[i] && quad[i].bb[1][1] > quad.bb[1][1]) {\n                quad.bb[1][1] = quad[i].bb[1][1]\n            }\n        }\n    }\n\n    function bbLength(bbox, heightWidth) {\n        return bbox[1][heightWidth] - bbox[0][heightWidth]\n    }\n\n    force.initialize = function (_) {\n        var i,\n            n = (nodes = _).length\n        boundingBoxes = new Array(n)\n        for (i = 0; i < n; ++i) boundingBoxes[i] = bbox(nodes[i], i, nodes)\n    }\n\n    force.iterations = function (_) {\n        return arguments.length ? ((iterations = +_), force) : iterations\n    }\n\n    force.strength = function (_) {\n        return arguments.length ? ((strength = +_), force) : strength\n    }\n\n    force.bbox = function (_) {\n        return arguments.length\n            ? ((bbox = typeof _ === \"function\" ? _ : constant(+_)), force)\n            : bbox\n    }\n\n    return force\n}\n","import { orient2d } from 'robust-predicates';\n\nfunction pointInPolygon(p, polygon) {\n    var i;\n    var ii;\n    var k = 0;\n    var f;\n    var u1;\n    var v1;\n    var u2;\n    var v2;\n    var currentP;\n    var nextP;\n\n    var x = p[0];\n    var y = p[1];\n\n    var numContours = polygon.length;\n    for (i = 0; i < numContours; i++) {\n        ii = 0;\n        var contour = polygon[i];\n        var contourLen = contour.length - 1;\n\n        currentP = contour[0];\n        if (currentP[0] !== contour[contourLen][0] &&\n            currentP[1] !== contour[contourLen][1]) {\n            throw new Error('First and last coordinates in a ring must be the same')\n        }\n\n        u1 = currentP[0] - x;\n        v1 = currentP[1] - y;\n\n        for (ii; ii < contourLen; ii++) {\n            nextP = contour[ii + 1];\n\n            u2 = nextP[0] - x;\n            v2 = nextP[1] - y;\n\n            if (v1 === 0 && v2 === 0) {\n                if ((u2 <= 0 && u1 >= 0) || (u1 <= 0 && u2 >= 0)) { return 0 }\n            } else if ((v2 >= 0 && v1 <= 0) || (v2 <= 0 && v1 >= 0)) {\n                f = orient2d(u1, u2, v1, v2, 0, 0);\n                if (f === 0) { return 0 }\n                if ((f > 0 && v2 > 0 && v1 <= 0) || (f < 0 && v2 <= 0 && v1 > 0)) { k++; }\n            }\n            currentP = nextP;\n            v1 = v2;\n            u1 = u2;\n        }\n    }\n\n    if (k % 2 === 0) { return false }\n    return true\n}\n\nexport { pointInPolygon as default };\n","// index.ts\nvar earthRadius = 63710088e-1;\nvar factors = {\n  centimeters: earthRadius * 100,\n  centimetres: earthRadius * 100,\n  degrees: 360 / (2 * Math.PI),\n  feet: earthRadius * 3.28084,\n  inches: earthRadius * 39.37,\n  kilometers: earthRadius / 1e3,\n  kilometres: earthRadius / 1e3,\n  meters: earthRadius,\n  metres: earthRadius,\n  miles: earthRadius / 1609.344,\n  millimeters: earthRadius * 1e3,\n  millimetres: earthRadius * 1e3,\n  nauticalmiles: earthRadius / 1852,\n  radians: 1,\n  yards: earthRadius * 1.0936\n};\nvar areaFactors = {\n  acres: 247105e-9,\n  centimeters: 1e4,\n  centimetres: 1e4,\n  feet: 10.763910417,\n  hectares: 1e-4,\n  inches: 1550.003100006,\n  kilometers: 1e-6,\n  kilometres: 1e-6,\n  meters: 1,\n  metres: 1,\n  miles: 386e-9,\n  nauticalmiles: 29155334959812285e-23,\n  millimeters: 1e6,\n  millimetres: 1e6,\n  yards: 1.195990046\n};\nfunction feature(geom, properties, options = {}) {\n  const feat = { type: \"Feature\" };\n  if (options.id === 0 || options.id) {\n    feat.id = options.id;\n  }\n  if (options.bbox) {\n    feat.bbox = options.bbox;\n  }\n  feat.properties = properties || {};\n  feat.geometry = geom;\n  return feat;\n}\nfunction geometry(type, coordinates, _options = {}) {\n  switch (type) {\n    case \"Point\":\n      return point(coordinates).geometry;\n    case \"LineString\":\n      return lineString(coordinates).geometry;\n    case \"Polygon\":\n      return polygon(coordinates).geometry;\n    case \"MultiPoint\":\n      return multiPoint(coordinates).geometry;\n    case \"MultiLineString\":\n      return multiLineString(coordinates).geometry;\n    case \"MultiPolygon\":\n      return multiPolygon(coordinates).geometry;\n    default:\n      throw new Error(type + \" is invalid\");\n  }\n}\nfunction point(coordinates, properties, options = {}) {\n  if (!coordinates) {\n    throw new Error(\"coordinates is required\");\n  }\n  if (!Array.isArray(coordinates)) {\n    throw new Error(\"coordinates must be an Array\");\n  }\n  if (coordinates.length < 2) {\n    throw new Error(\"coordinates must be at least 2 numbers long\");\n  }\n  if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n    throw new Error(\"coordinates must contain numbers\");\n  }\n  const geom = {\n    type: \"Point\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction points(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return point(coords, properties);\n    }),\n    options\n  );\n}\nfunction polygon(coordinates, properties, options = {}) {\n  for (const ring of coordinates) {\n    if (ring.length < 4) {\n      throw new Error(\n        \"Each LinearRing of a Polygon must have 4 or more Positions.\"\n      );\n    }\n    if (ring[ring.length - 1].length !== ring[0].length) {\n      throw new Error(\"First and last Position are not equivalent.\");\n    }\n    for (let j = 0; j < ring[ring.length - 1].length; j++) {\n      if (ring[ring.length - 1][j] !== ring[0][j]) {\n        throw new Error(\"First and last Position are not equivalent.\");\n      }\n    }\n  }\n  const geom = {\n    type: \"Polygon\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction polygons(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return polygon(coords, properties);\n    }),\n    options\n  );\n}\nfunction lineString(coordinates, properties, options = {}) {\n  if (coordinates.length < 2) {\n    throw new Error(\"coordinates must be an array of two or more positions\");\n  }\n  const geom = {\n    type: \"LineString\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction lineStrings(coordinates, properties, options = {}) {\n  return featureCollection(\n    coordinates.map((coords) => {\n      return lineString(coords, properties);\n    }),\n    options\n  );\n}\nfunction featureCollection(features, options = {}) {\n  const fc = { type: \"FeatureCollection\" };\n  if (options.id) {\n    fc.id = options.id;\n  }\n  if (options.bbox) {\n    fc.bbox = options.bbox;\n  }\n  fc.features = features;\n  return fc;\n}\nfunction multiLineString(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiLineString\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction multiPoint(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiPoint\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction multiPolygon(coordinates, properties, options = {}) {\n  const geom = {\n    type: \"MultiPolygon\",\n    coordinates\n  };\n  return feature(geom, properties, options);\n}\nfunction geometryCollection(geometries, properties, options = {}) {\n  const geom = {\n    type: \"GeometryCollection\",\n    geometries\n  };\n  return feature(geom, properties, options);\n}\nfunction round(num, precision = 0) {\n  if (precision && !(precision >= 0)) {\n    throw new Error(\"precision must be a positive number\");\n  }\n  const multiplier = Math.pow(10, precision || 0);\n  return Math.round(num * multiplier) / multiplier;\n}\nfunction radiansToLength(radians, units = \"kilometers\") {\n  const factor = factors[units];\n  if (!factor) {\n    throw new Error(units + \" units is invalid\");\n  }\n  return radians * factor;\n}\nfunction lengthToRadians(distance, units = \"kilometers\") {\n  const factor = factors[units];\n  if (!factor) {\n    throw new Error(units + \" units is invalid\");\n  }\n  return distance / factor;\n}\nfunction lengthToDegrees(distance, units) {\n  return radiansToDegrees(lengthToRadians(distance, units));\n}\nfunction bearingToAzimuth(bearing) {\n  let angle = bearing % 360;\n  if (angle < 0) {\n    angle += 360;\n  }\n  return angle;\n}\nfunction azimuthToBearing(angle) {\n  angle = angle % 360;\n  if (angle > 180) {\n    return angle - 360;\n  } else if (angle < -180) {\n    return angle + 360;\n  }\n  return angle;\n}\nfunction radiansToDegrees(radians) {\n  const normalisedRadians = radians % (2 * Math.PI);\n  return normalisedRadians * 180 / Math.PI;\n}\nfunction degreesToRadians(degrees) {\n  const normalisedDegrees = degrees % 360;\n  return normalisedDegrees * Math.PI / 180;\n}\nfunction convertLength(length, originalUnit = \"kilometers\", finalUnit = \"kilometers\") {\n  if (!(length >= 0)) {\n    throw new Error(\"length must be a positive number\");\n  }\n  return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nfunction convertArea(area, originalUnit = \"meters\", finalUnit = \"kilometers\") {\n  if (!(area >= 0)) {\n    throw new Error(\"area must be a positive number\");\n  }\n  const startFactor = areaFactors[originalUnit];\n  if (!startFactor) {\n    throw new Error(\"invalid original units\");\n  }\n  const finalFactor = areaFactors[finalUnit];\n  if (!finalFactor) {\n    throw new Error(\"invalid final units\");\n  }\n  return area / startFactor * finalFactor;\n}\nfunction isNumber(num) {\n  return !isNaN(num) && num !== null && !Array.isArray(num);\n}\nfunction isObject(input) {\n  return input !== null && typeof input === \"object\" && !Array.isArray(input);\n}\nfunction validateBBox(bbox) {\n  if (!bbox) {\n    throw new Error(\"bbox is required\");\n  }\n  if (!Array.isArray(bbox)) {\n    throw new Error(\"bbox must be an Array\");\n  }\n  if (bbox.length !== 4 && bbox.length !== 6) {\n    throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n  }\n  bbox.forEach((num) => {\n    if (!isNumber(num)) {\n      throw new Error(\"bbox must only contain numbers\");\n    }\n  });\n}\nfunction validateId(id) {\n  if (!id) {\n    throw new Error(\"id is required\");\n  }\n  if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n    throw new Error(\"id must be a number or a string\");\n  }\n}\nexport {\n  areaFactors,\n  azimuthToBearing,\n  bearingToAzimuth,\n  convertArea,\n  convertLength,\n  degreesToRadians,\n  earthRadius,\n  factors,\n  feature,\n  featureCollection,\n  geometry,\n  geometryCollection,\n  isNumber,\n  isObject,\n  lengthToDegrees,\n  lengthToRadians,\n  lineString,\n  lineStrings,\n  multiLineString,\n  multiPoint,\n  multiPolygon,\n  point,\n  points,\n  polygon,\n  polygons,\n  radiansToDegrees,\n  radiansToLength,\n  round,\n  validateBBox,\n  validateId\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { isNumber } from \"@turf/helpers\";\nfunction getCoord(coord) {\n  if (!coord) {\n    throw new Error(\"coord is required\");\n  }\n  if (!Array.isArray(coord)) {\n    if (coord.type === \"Feature\" && coord.geometry !== null && coord.geometry.type === \"Point\") {\n      return [...coord.geometry.coordinates];\n    }\n    if (coord.type === \"Point\") {\n      return [...coord.coordinates];\n    }\n  }\n  if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {\n    return [...coord];\n  }\n  throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nfunction getCoords(coords) {\n  if (Array.isArray(coords)) {\n    return coords;\n  }\n  if (coords.type === \"Feature\") {\n    if (coords.geometry !== null) {\n      return coords.geometry.coordinates;\n    }\n  } else {\n    if (coords.coordinates) {\n      return coords.coordinates;\n    }\n  }\n  throw new Error(\n    \"coords must be GeoJSON Feature, Geometry Object or an Array\"\n  );\n}\nfunction containsNumber(coordinates) {\n  if (coordinates.length > 1 && isNumber(coordinates[0]) && isNumber(coordinates[1])) {\n    return true;\n  }\n  if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n    return containsNumber(coordinates[0]);\n  }\n  throw new Error(\"coordinates must only contain numbers\");\n}\nfunction geojsonType(value, type, name) {\n  if (!type || !name) {\n    throw new Error(\"type and name required\");\n  }\n  if (!value || value.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + value.type\n    );\n  }\n}\nfunction featureOf(feature, type, name) {\n  if (!feature) {\n    throw new Error(\"No feature passed\");\n  }\n  if (!name) {\n    throw new Error(\".featureOf() requires a name\");\n  }\n  if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n    throw new Error(\n      \"Invalid input to \" + name + \", Feature with geometry required\"\n    );\n  }\n  if (!feature.geometry || feature.geometry.type !== type) {\n    throw new Error(\n      \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n    );\n  }\n}\nfunction collectionOf(featureCollection, type, name) {\n  if (!featureCollection) {\n    throw new Error(\"No featureCollection passed\");\n  }\n  if (!name) {\n    throw new Error(\".collectionOf() requires a name\");\n  }\n  if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n    throw new Error(\n      \"Invalid input to \" + name + \", FeatureCollection required\"\n    );\n  }\n  for (const feature of featureCollection.features) {\n    if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n      throw new Error(\n        \"Invalid input to \" + name + \", Feature with geometry required\"\n      );\n    }\n    if (!feature.geometry || feature.geometry.type !== type) {\n      throw new Error(\n        \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n      );\n    }\n  }\n}\nfunction getGeom(geojson) {\n  if (geojson.type === \"Feature\") {\n    return geojson.geometry;\n  }\n  return geojson;\n}\nfunction getType(geojson, _name) {\n  if (geojson.type === \"FeatureCollection\") {\n    return \"FeatureCollection\";\n  }\n  if (geojson.type === \"GeometryCollection\") {\n    return \"GeometryCollection\";\n  }\n  if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n    return geojson.geometry.type;\n  }\n  return geojson.type;\n}\nexport {\n  collectionOf,\n  containsNumber,\n  featureOf,\n  geojsonType,\n  getCoord,\n  getCoords,\n  getGeom,\n  getType\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport pip from \"point-in-polygon-hao\";\nimport { getCoord, getGeom } from \"@turf/invariant\";\nfunction booleanPointInPolygon(point, polygon, options = {}) {\n  if (!point) {\n    throw new Error(\"point is required\");\n  }\n  if (!polygon) {\n    throw new Error(\"polygon is required\");\n  }\n  const pt = getCoord(point);\n  const geom = getGeom(polygon);\n  const type = geom.type;\n  const bbox = polygon.bbox;\n  let polys = geom.coordinates;\n  if (bbox && inBBox(pt, bbox) === false) {\n    return false;\n  }\n  if (type === \"Polygon\") {\n    polys = [polys];\n  }\n  let result = false;\n  for (var i = 0; i < polys.length; ++i) {\n    const polyResult = pip(pt, polys[i]);\n    if (polyResult === 0) return options.ignoreBoundary ? false : true;\n    else if (polyResult) result = true;\n  }\n  return result;\n}\nfunction inBBox(pt, bbox) {\n  return bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1];\n}\nvar turf_boolean_point_in_polygon_default = booleanPointInPolygon;\nexport {\n  booleanPointInPolygon,\n  turf_boolean_point_in_polygon_default as default\n};\n//# sourceMappingURL=index.js.map","class TinyQueue {\n    constructor(data = [], compare = defaultCompare) {\n        this.data = data;\n        this.length = this.data.length;\n        this.compare = compare;\n\n        if (this.length > 0) {\n            for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n        }\n    }\n\n    push(item) {\n        this.data.push(item);\n        this.length++;\n        this._up(this.length - 1);\n    }\n\n    pop() {\n        if (this.length === 0) return undefined;\n\n        const top = this.data[0];\n        const bottom = this.data.pop();\n        this.length--;\n\n        if (this.length > 0) {\n            this.data[0] = bottom;\n            this._down(0);\n        }\n\n        return top;\n    }\n\n    peek() {\n        return this.data[0];\n    }\n\n    _up(pos) {\n        const {data, compare} = this;\n        const item = data[pos];\n\n        while (pos > 0) {\n            const parent = (pos - 1) >> 1;\n            const current = data[parent];\n            if (compare(item, current) >= 0) break;\n            data[pos] = current;\n            pos = parent;\n        }\n\n        data[pos] = item;\n    }\n\n    _down(pos) {\n        const {data, compare} = this;\n        const halfLength = this.length >> 1;\n        const item = data[pos];\n\n        while (pos < halfLength) {\n            let left = (pos << 1) + 1;\n            let best = data[left];\n            const right = left + 1;\n\n            if (right < this.length && compare(data[right], best) < 0) {\n                left = right;\n                best = data[right];\n            }\n            if (compare(best, item) >= 0) break;\n\n            data[pos] = best;\n            pos = left;\n        }\n\n        data[pos] = item;\n    }\n}\n\nfunction defaultCompare(a, b) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction checkWhichEventIsLeft (e1, e2) {\n    if (e1.p.x > e2.p.x) return 1\n    if (e1.p.x < e2.p.x) return -1\n\n    if (e1.p.y !== e2.p.y) return e1.p.y > e2.p.y ? 1 : -1\n    return 1\n}\n\nfunction checkWhichSegmentHasRightEndpointFirst (seg1, seg2) {\n    if (seg1.rightSweepEvent.p.x > seg2.rightSweepEvent.p.x) return 1\n    if (seg1.rightSweepEvent.p.x < seg2.rightSweepEvent.p.x) return -1\n\n    if (seg1.rightSweepEvent.p.y !== seg2.rightSweepEvent.p.y) return seg1.rightSweepEvent.p.y < seg2.rightSweepEvent.p.y ? 1 : -1\n    return 1\n}\n\nclass Event {\n\n    constructor (p, featureId, ringId, eventId) {\n        this.p = {\n            x: p[0],\n            y: p[1]\n        };\n        this.featureId = featureId;\n        this.ringId = ringId;\n        this.eventId = eventId;\n\n        this.otherEvent = null;\n        this.isLeftEndpoint = null;\n    }\n\n    isSamePoint (eventToCheck) {\n        return this.p.x === eventToCheck.p.x && this.p.y === eventToCheck.p.y\n    }\n}\n\nfunction fillEventQueue (geojson, eventQueue) {\n    if (geojson.type === 'FeatureCollection') {\n        const features = geojson.features;\n        for (let i = 0; i < features.length; i++) {\n            processFeature(features[i], eventQueue);\n        }\n    } else {\n        processFeature(geojson, eventQueue);\n    }\n}\n\nlet featureId = 0;\nlet ringId = 0;\nlet eventId = 0;\nfunction processFeature (featureOrGeometry, eventQueue) {\n    const geom = featureOrGeometry.type === 'Feature' ? featureOrGeometry.geometry : featureOrGeometry;\n    let coords = geom.coordinates;\n    // standardise the input\n    if (geom.type === 'Polygon' || geom.type === 'MultiLineString') coords = [coords];\n    if (geom.type === 'LineString') coords = [[coords]];\n\n    for (let i = 0; i < coords.length; i++) {\n        for (let ii = 0; ii < coords[i].length; ii++) {\n            let currentP = coords[i][ii][0];\n            let nextP = null;\n            ringId = ringId + 1;\n            for (let iii = 0; iii < coords[i][ii].length - 1; iii++) {\n                nextP = coords[i][ii][iii + 1];\n\n                const e1 = new Event(currentP, featureId, ringId, eventId);\n                const e2 = new Event(nextP, featureId, ringId, eventId + 1);\n\n                e1.otherEvent = e2;\n                e2.otherEvent = e1;\n\n                if (checkWhichEventIsLeft(e1, e2) > 0) {\n                    e2.isLeftEndpoint = true;\n                    e1.isLeftEndpoint = false;\n                } else {\n                    e1.isLeftEndpoint = true;\n                    e2.isLeftEndpoint = false;\n                }\n                eventQueue.push(e1);\n                eventQueue.push(e2);\n\n                currentP = nextP;\n                eventId = eventId + 1;\n            }\n        }\n    }\n    featureId = featureId + 1;\n}\n\nclass Segment {\n\n    constructor (event) {\n        this.leftSweepEvent = event;\n        this.rightSweepEvent = event.otherEvent;\n    }\n}\n\nfunction testSegmentIntersect (seg1, seg2) {\n    if (seg1 === null || seg2 === null) return false\n\n    if (seg1.leftSweepEvent.ringId === seg2.leftSweepEvent.ringId &&\n        (seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n        seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n        seg1.rightSweepEvent.isSamePoint(seg2.rightSweepEvent) ||\n        seg1.leftSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n        seg1.leftSweepEvent.isSamePoint(seg2.rightSweepEvent))) return false\n\n    const x1 = seg1.leftSweepEvent.p.x;\n    const y1 = seg1.leftSweepEvent.p.y;\n    const x2 = seg1.rightSweepEvent.p.x;\n    const y2 = seg1.rightSweepEvent.p.y;\n    const x3 = seg2.leftSweepEvent.p.x;\n    const y3 = seg2.leftSweepEvent.p.y;\n    const x4 = seg2.rightSweepEvent.p.x;\n    const y4 = seg2.rightSweepEvent.p.y;\n\n    const denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1));\n    const numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3));\n    const numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3));\n\n    if (denom === 0) {\n        if (numeA === 0 && numeB === 0) return false\n        return false\n    }\n\n    const uA = numeA / denom;\n    const uB = numeB / denom;\n\n    if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {\n        const x = x1 + (uA * (x2 - x1));\n        const y = y1 + (uA * (y2 - y1));\n        return [x, y]\n    }\n    return false\n}\n\n// import {debugEventAndSegments, debugRemovingSegment} from './debug'\n\nfunction runCheck (eventQueue, ignoreSelfIntersections) {\n    ignoreSelfIntersections = ignoreSelfIntersections ? ignoreSelfIntersections : false;\n\n    const intersectionPoints = [];\n    const outQueue = new TinyQueue([], checkWhichSegmentHasRightEndpointFirst);\n\n    while (eventQueue.length) {\n        const event = eventQueue.pop();\n        if (event.isLeftEndpoint) {\n            // debugEventAndSegments(event.p, outQueue.data)\n            const segment = new Segment(event);\n            for (let i = 0; i < outQueue.data.length; i++) {\n                const otherSeg = outQueue.data[i];\n                if (ignoreSelfIntersections) {\n                    if (otherSeg.leftSweepEvent.featureId === event.featureId) continue\n                }\n                const intersection = testSegmentIntersect(segment, otherSeg);\n                if (intersection !== false) intersectionPoints.push(intersection);\n            }\n            outQueue.push(segment);\n        } else if (event.isLeftEndpoint === false) {\n            outQueue.pop();\n            // const seg = outQueue.pop()\n            // debugRemovingSegment(event.p, seg)\n        }\n    }\n    return intersectionPoints\n}\n\nfunction sweeplineIntersections (geojson, ignoreSelfIntersections) {\n    const eventQueue = new TinyQueue([], checkWhichEventIsLeft);\n    fillEventQueue(geojson, eventQueue);\n    return runCheck(eventQueue, ignoreSelfIntersections)\n}\n\nexport default sweeplineIntersections;\n","// index.ts\nimport { feature, featureCollection, point } from \"@turf/helpers\";\n\n// lib/sweepline-intersections-export.ts\nimport lib from \"sweepline-intersections\";\nvar sweeplineIntersections = lib;\n\n// index.ts\nfunction lineIntersect(line1, line2, options = {}) {\n  const { removeDuplicates = true, ignoreSelfIntersections = true } = options;\n  let features = [];\n  if (line1.type === \"FeatureCollection\")\n    features = features.concat(line1.features);\n  else if (line1.type === \"Feature\") features.push(line1);\n  else if (line1.type === \"LineString\" || line1.type === \"Polygon\" || line1.type === \"MultiLineString\" || line1.type === \"MultiPolygon\") {\n    features.push(feature(line1));\n  }\n  if (line2.type === \"FeatureCollection\")\n    features = features.concat(line2.features);\n  else if (line2.type === \"Feature\") features.push(line2);\n  else if (line2.type === \"LineString\" || line2.type === \"Polygon\" || line2.type === \"MultiLineString\" || line2.type === \"MultiPolygon\") {\n    features.push(feature(line2));\n  }\n  const intersections = sweeplineIntersections(\n    featureCollection(features),\n    ignoreSelfIntersections\n  );\n  let results = [];\n  if (removeDuplicates) {\n    const unique = {};\n    intersections.forEach((intersection) => {\n      const key = intersection.join(\",\");\n      if (!unique[key]) {\n        unique[key] = true;\n        results.push(intersection);\n      }\n    });\n  } else {\n    results = intersections;\n  }\n  return featureCollection(results.map((r) => point(r)));\n}\nvar turf_line_intersect_default = lineIntersect;\nexport {\n  turf_line_intersect_default as default,\n  lineIntersect\n};\n//# sourceMappingURL=index.js.map","// index.js\nimport { feature, point, lineString, isObject } from \"@turf/helpers\";\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n  if (geojson === null) return;\n  var j, k, l, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type = geojson.type, isFeatureCollection = type === \"FeatureCollection\", isFeature = type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n  for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n    geometryMaybeCollection = isFeatureCollection ? geojson.features[featureIndex].geometry : isFeature ? geojson.geometry : geojson;\n    isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n    stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n    for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n      var multiFeatureIndex = 0;\n      var geometryIndex = 0;\n      geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;\n      if (geometry === null) continue;\n      coords = geometry.coordinates;\n      var geomType = geometry.type;\n      wrapShrink = excludeWrapCoord && (geomType === \"Polygon\" || geomType === \"MultiPolygon\") ? 1 : 0;\n      switch (geomType) {\n        case null:\n          break;\n        case \"Point\":\n          if (callback(\n            coords,\n            coordIndex,\n            featureIndex,\n            multiFeatureIndex,\n            geometryIndex\n          ) === false)\n            return false;\n          coordIndex++;\n          multiFeatureIndex++;\n          break;\n        case \"LineString\":\n        case \"MultiPoint\":\n          for (j = 0; j < coords.length; j++) {\n            if (callback(\n              coords[j],\n              coordIndex,\n              featureIndex,\n              multiFeatureIndex,\n              geometryIndex\n            ) === false)\n              return false;\n            coordIndex++;\n            if (geomType === \"MultiPoint\") multiFeatureIndex++;\n          }\n          if (geomType === \"LineString\") multiFeatureIndex++;\n          break;\n        case \"Polygon\":\n        case \"MultiLineString\":\n          for (j = 0; j < coords.length; j++) {\n            for (k = 0; k < coords[j].length - wrapShrink; k++) {\n              if (callback(\n                coords[j][k],\n                coordIndex,\n                featureIndex,\n                multiFeatureIndex,\n                geometryIndex\n              ) === false)\n                return false;\n              coordIndex++;\n            }\n            if (geomType === \"MultiLineString\") multiFeatureIndex++;\n            if (geomType === \"Polygon\") geometryIndex++;\n          }\n          if (geomType === \"Polygon\") multiFeatureIndex++;\n          break;\n        case \"MultiPolygon\":\n          for (j = 0; j < coords.length; j++) {\n            geometryIndex = 0;\n            for (k = 0; k < coords[j].length; k++) {\n              for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n                if (callback(\n                  coords[j][k][l],\n                  coordIndex,\n                  featureIndex,\n                  multiFeatureIndex,\n                  geometryIndex\n                ) === false)\n                  return false;\n                coordIndex++;\n              }\n              geometryIndex++;\n            }\n            multiFeatureIndex++;\n          }\n          break;\n        case \"GeometryCollection\":\n          for (j = 0; j < geometry.geometries.length; j++)\n            if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false)\n              return false;\n          break;\n        default:\n          throw new Error(\"Unknown Geometry Type\");\n      }\n    }\n  }\n}\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n  var previousValue = initialValue;\n  coordEach(\n    geojson,\n    function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n      if (coordIndex === 0 && initialValue === void 0)\n        previousValue = currentCoord;\n      else\n        previousValue = callback(\n          previousValue,\n          currentCoord,\n          coordIndex,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex\n        );\n    },\n    excludeWrapCoord\n  );\n  return previousValue;\n}\nfunction propEach(geojson, callback) {\n  var i;\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      for (i = 0; i < geojson.features.length; i++) {\n        if (callback(geojson.features[i].properties, i) === false) break;\n      }\n      break;\n    case \"Feature\":\n      callback(geojson.properties, 0);\n      break;\n  }\n}\nfunction propReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  propEach(geojson, function(currentProperties, featureIndex) {\n    if (featureIndex === 0 && initialValue === void 0)\n      previousValue = currentProperties;\n    else\n      previousValue = callback(previousValue, currentProperties, featureIndex);\n  });\n  return previousValue;\n}\nfunction featureEach(geojson, callback) {\n  if (geojson.type === \"Feature\") {\n    callback(geojson, 0);\n  } else if (geojson.type === \"FeatureCollection\") {\n    for (var i = 0; i < geojson.features.length; i++) {\n      if (callback(geojson.features[i], i) === false) break;\n    }\n  }\n}\nfunction featureReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  featureEach(geojson, function(currentFeature, featureIndex) {\n    if (featureIndex === 0 && initialValue === void 0)\n      previousValue = currentFeature;\n    else previousValue = callback(previousValue, currentFeature, featureIndex);\n  });\n  return previousValue;\n}\nfunction coordAll(geojson) {\n  var coords = [];\n  coordEach(geojson, function(coord) {\n    coords.push(coord);\n  });\n  return coords;\n}\nfunction geomEach(geojson, callback) {\n  var i, j, g, geometry, stopG, geometryMaybeCollection, isGeometryCollection, featureProperties, featureBBox, featureId, featureIndex = 0, isFeatureCollection = geojson.type === \"FeatureCollection\", isFeature = geojson.type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n  for (i = 0; i < stop; i++) {\n    geometryMaybeCollection = isFeatureCollection ? geojson.features[i].geometry : isFeature ? geojson.geometry : geojson;\n    featureProperties = isFeatureCollection ? geojson.features[i].properties : isFeature ? geojson.properties : {};\n    featureBBox = isFeatureCollection ? geojson.features[i].bbox : isFeature ? geojson.bbox : void 0;\n    featureId = isFeatureCollection ? geojson.features[i].id : isFeature ? geojson.id : void 0;\n    isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n    stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n    for (g = 0; g < stopG; g++) {\n      geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n      if (geometry === null) {\n        if (callback(\n          null,\n          featureIndex,\n          featureProperties,\n          featureBBox,\n          featureId\n        ) === false)\n          return false;\n        continue;\n      }\n      switch (geometry.type) {\n        case \"Point\":\n        case \"LineString\":\n        case \"MultiPoint\":\n        case \"Polygon\":\n        case \"MultiLineString\":\n        case \"MultiPolygon\": {\n          if (callback(\n            geometry,\n            featureIndex,\n            featureProperties,\n            featureBBox,\n            featureId\n          ) === false)\n            return false;\n          break;\n        }\n        case \"GeometryCollection\": {\n          for (j = 0; j < geometry.geometries.length; j++) {\n            if (callback(\n              geometry.geometries[j],\n              featureIndex,\n              featureProperties,\n              featureBBox,\n              featureId\n            ) === false)\n              return false;\n          }\n          break;\n        }\n        default:\n          throw new Error(\"Unknown Geometry Type\");\n      }\n    }\n    featureIndex++;\n  }\n}\nfunction geomReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  geomEach(\n    geojson,\n    function(currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n      if (featureIndex === 0 && initialValue === void 0)\n        previousValue = currentGeometry;\n      else\n        previousValue = callback(\n          previousValue,\n          currentGeometry,\n          featureIndex,\n          featureProperties,\n          featureBBox,\n          featureId\n        );\n    }\n  );\n  return previousValue;\n}\nfunction flattenEach(geojson, callback) {\n  geomEach(geojson, function(geometry, featureIndex, properties, bbox, id) {\n    var type = geometry === null ? null : geometry.type;\n    switch (type) {\n      case null:\n      case \"Point\":\n      case \"LineString\":\n      case \"Polygon\":\n        if (callback(\n          feature(geometry, properties, { bbox, id }),\n          featureIndex,\n          0\n        ) === false)\n          return false;\n        return;\n    }\n    var geomType;\n    switch (type) {\n      case \"MultiPoint\":\n        geomType = \"Point\";\n        break;\n      case \"MultiLineString\":\n        geomType = \"LineString\";\n        break;\n      case \"MultiPolygon\":\n        geomType = \"Polygon\";\n        break;\n    }\n    for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {\n      var coordinate = geometry.coordinates[multiFeatureIndex];\n      var geom = {\n        type: geomType,\n        coordinates: coordinate\n      };\n      if (callback(feature(geom, properties), featureIndex, multiFeatureIndex) === false)\n        return false;\n    }\n  });\n}\nfunction flattenReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  flattenEach(\n    geojson,\n    function(currentFeature, featureIndex, multiFeatureIndex) {\n      if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === void 0)\n        previousValue = currentFeature;\n      else\n        previousValue = callback(\n          previousValue,\n          currentFeature,\n          featureIndex,\n          multiFeatureIndex\n        );\n    }\n  );\n  return previousValue;\n}\nfunction segmentEach(geojson, callback) {\n  flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n    var segmentIndex = 0;\n    if (!feature2.geometry) return;\n    var type = feature2.geometry.type;\n    if (type === \"Point\" || type === \"MultiPoint\") return;\n    var previousCoords;\n    var previousFeatureIndex = 0;\n    var previousMultiIndex = 0;\n    var prevGeomIndex = 0;\n    if (coordEach(\n      feature2,\n      function(currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n        if (previousCoords === void 0 || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) {\n          previousCoords = currentCoord;\n          previousFeatureIndex = featureIndex;\n          previousMultiIndex = multiPartIndexCoord;\n          prevGeomIndex = geometryIndex;\n          segmentIndex = 0;\n          return;\n        }\n        var currentSegment = lineString(\n          [previousCoords, currentCoord],\n          feature2.properties\n        );\n        if (callback(\n          currentSegment,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex,\n          segmentIndex\n        ) === false)\n          return false;\n        segmentIndex++;\n        previousCoords = currentCoord;\n      }\n    ) === false)\n      return false;\n  });\n}\nfunction segmentReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  var started = false;\n  segmentEach(\n    geojson,\n    function(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n      if (started === false && initialValue === void 0)\n        previousValue = currentSegment;\n      else\n        previousValue = callback(\n          previousValue,\n          currentSegment,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex,\n          segmentIndex\n        );\n      started = true;\n    }\n  );\n  return previousValue;\n}\nfunction lineEach(geojson, callback) {\n  if (!geojson) throw new Error(\"geojson is required\");\n  flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n    if (feature2.geometry === null) return;\n    var type = feature2.geometry.type;\n    var coords = feature2.geometry.coordinates;\n    switch (type) {\n      case \"LineString\":\n        if (callback(feature2, featureIndex, multiFeatureIndex, 0, 0) === false)\n          return false;\n        break;\n      case \"Polygon\":\n        for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n          if (callback(\n            lineString(coords[geometryIndex], feature2.properties),\n            featureIndex,\n            multiFeatureIndex,\n            geometryIndex\n          ) === false)\n            return false;\n        }\n        break;\n    }\n  });\n}\nfunction lineReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  lineEach(\n    geojson,\n    function(currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n      if (featureIndex === 0 && initialValue === void 0)\n        previousValue = currentLine;\n      else\n        previousValue = callback(\n          previousValue,\n          currentLine,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex\n        );\n    }\n  );\n  return previousValue;\n}\nfunction findSegment(geojson, options) {\n  options = options || {};\n  if (!isObject(options)) throw new Error(\"options is invalid\");\n  var featureIndex = options.featureIndex || 0;\n  var multiFeatureIndex = options.multiFeatureIndex || 0;\n  var geometryIndex = options.geometryIndex || 0;\n  var segmentIndex = options.segmentIndex || 0;\n  var properties = options.properties;\n  var geometry;\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      if (featureIndex < 0)\n        featureIndex = geojson.features.length + featureIndex;\n      properties = properties || geojson.features[featureIndex].properties;\n      geometry = geojson.features[featureIndex].geometry;\n      break;\n    case \"Feature\":\n      properties = properties || geojson.properties;\n      geometry = geojson.geometry;\n      break;\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n    case \"Polygon\":\n    case \"MultiLineString\":\n    case \"MultiPolygon\":\n      geometry = geojson;\n      break;\n    default:\n      throw new Error(\"geojson is invalid\");\n  }\n  if (geometry === null) return null;\n  var coords = geometry.coordinates;\n  switch (geometry.type) {\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n      if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n      return lineString(\n        [coords[segmentIndex], coords[segmentIndex + 1]],\n        properties,\n        options\n      );\n    case \"Polygon\":\n      if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n      if (segmentIndex < 0)\n        segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n      return lineString(\n        [\n          coords[geometryIndex][segmentIndex],\n          coords[geometryIndex][segmentIndex + 1]\n        ],\n        properties,\n        options\n      );\n    case \"MultiLineString\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (segmentIndex < 0)\n        segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n      return lineString(\n        [\n          coords[multiFeatureIndex][segmentIndex],\n          coords[multiFeatureIndex][segmentIndex + 1]\n        ],\n        properties,\n        options\n      );\n    case \"MultiPolygon\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (geometryIndex < 0)\n        geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n      if (segmentIndex < 0)\n        segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n      return lineString(\n        [\n          coords[multiFeatureIndex][geometryIndex][segmentIndex],\n          coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]\n        ],\n        properties,\n        options\n      );\n  }\n  throw new Error(\"geojson is invalid\");\n}\nfunction findPoint(geojson, options) {\n  options = options || {};\n  if (!isObject(options)) throw new Error(\"options is invalid\");\n  var featureIndex = options.featureIndex || 0;\n  var multiFeatureIndex = options.multiFeatureIndex || 0;\n  var geometryIndex = options.geometryIndex || 0;\n  var coordIndex = options.coordIndex || 0;\n  var properties = options.properties;\n  var geometry;\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      if (featureIndex < 0)\n        featureIndex = geojson.features.length + featureIndex;\n      properties = properties || geojson.features[featureIndex].properties;\n      geometry = geojson.features[featureIndex].geometry;\n      break;\n    case \"Feature\":\n      properties = properties || geojson.properties;\n      geometry = geojson.geometry;\n      break;\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n    case \"Polygon\":\n    case \"MultiLineString\":\n    case \"MultiPolygon\":\n      geometry = geojson;\n      break;\n    default:\n      throw new Error(\"geojson is invalid\");\n  }\n  if (geometry === null) return null;\n  var coords = geometry.coordinates;\n  switch (geometry.type) {\n    case \"Point\":\n      return point(coords, properties, options);\n    case \"MultiPoint\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      return point(coords[multiFeatureIndex], properties, options);\n    case \"LineString\":\n      if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n      return point(coords[coordIndex], properties, options);\n    case \"Polygon\":\n      if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[geometryIndex].length + coordIndex;\n      return point(coords[geometryIndex][coordIndex], properties, options);\n    case \"MultiLineString\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[multiFeatureIndex].length + coordIndex;\n      return point(coords[multiFeatureIndex][coordIndex], properties, options);\n    case \"MultiPolygon\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (geometryIndex < 0)\n        geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n      return point(\n        coords[multiFeatureIndex][geometryIndex][coordIndex],\n        properties,\n        options\n      );\n  }\n  throw new Error(\"geojson is invalid\");\n}\nexport {\n  coordAll,\n  coordEach,\n  coordReduce,\n  featureEach,\n  featureReduce,\n  findPoint,\n  findSegment,\n  flattenEach,\n  flattenReduce,\n  geomEach,\n  geomReduce,\n  lineEach,\n  lineReduce,\n  propEach,\n  propReduce,\n  segmentEach,\n  segmentReduce\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { featureCollection, lineString, multiLineString } from \"@turf/helpers\";\nimport { getGeom } from \"@turf/invariant\";\nfunction polygonToLine(poly, options = {}) {\n  const geom = getGeom(poly);\n  if (!options.properties && poly.type === \"Feature\") {\n    options.properties = poly.properties;\n  }\n  switch (geom.type) {\n    case \"Polygon\":\n      return singlePolygonToLine(geom, options);\n    case \"MultiPolygon\":\n      return multiPolygonToLine(geom, options);\n    default:\n      throw new Error(\"invalid poly\");\n  }\n}\nfunction singlePolygonToLine(poly, options = {}) {\n  const geom = getGeom(poly);\n  const coords = geom.coordinates;\n  const properties = options.properties ? options.properties : poly.type === \"Feature\" ? poly.properties : {};\n  return coordsToLine(coords, properties);\n}\nfunction multiPolygonToLine(multiPoly, options = {}) {\n  const geom = getGeom(multiPoly);\n  const coords = geom.coordinates;\n  const properties = options.properties ? options.properties : multiPoly.type === \"Feature\" ? multiPoly.properties : {};\n  const lines = [];\n  coords.forEach((coord) => {\n    lines.push(coordsToLine(coord, properties));\n  });\n  return featureCollection(lines);\n}\nfunction coordsToLine(coords, properties) {\n  if (coords.length > 1) {\n    return multiLineString(coords, properties);\n  }\n  return lineString(coords[0], properties);\n}\nvar turf_polygon_to_line_default = polygonToLine;\nexport {\n  coordsToLine,\n  turf_polygon_to_line_default as default,\n  multiPolygonToLine,\n  polygonToLine,\n  singlePolygonToLine\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport { flattenEach } from \"@turf/meta\";\nimport { polygonToLine } from \"@turf/polygon-to-line\";\nfunction booleanDisjoint(feature1, feature2, {\n  ignoreSelfIntersections = true\n} = { ignoreSelfIntersections: true }) {\n  let bool = true;\n  flattenEach(feature1, (flatten1) => {\n    flattenEach(feature2, (flatten2) => {\n      if (bool === false) {\n        return false;\n      }\n      bool = disjoint(\n        flatten1.geometry,\n        flatten2.geometry,\n        ignoreSelfIntersections\n      );\n    });\n  });\n  return bool;\n}\nfunction disjoint(geom1, geom2, ignoreSelfIntersections) {\n  switch (geom1.type) {\n    case \"Point\":\n      switch (geom2.type) {\n        case \"Point\":\n          return !compareCoords(geom1.coordinates, geom2.coordinates);\n        case \"LineString\":\n          return !isPointOnLine(geom2, geom1);\n        case \"Polygon\":\n          return !booleanPointInPolygon(geom1, geom2);\n      }\n      break;\n    case \"LineString\":\n      switch (geom2.type) {\n        case \"Point\":\n          return !isPointOnLine(geom1, geom2);\n        case \"LineString\":\n          return !isLineOnLine(geom1, geom2, ignoreSelfIntersections);\n        case \"Polygon\":\n          return !isLineInPoly(geom2, geom1, ignoreSelfIntersections);\n      }\n      break;\n    case \"Polygon\":\n      switch (geom2.type) {\n        case \"Point\":\n          return !booleanPointInPolygon(geom2, geom1);\n        case \"LineString\":\n          return !isLineInPoly(geom1, geom2, ignoreSelfIntersections);\n        case \"Polygon\":\n          return !isPolyInPoly(geom2, geom1, ignoreSelfIntersections);\n      }\n  }\n  return false;\n}\nfunction isPointOnLine(lineString, pt) {\n  for (let i = 0; i < lineString.coordinates.length - 1; i++) {\n    if (isPointOnLineSegment(\n      lineString.coordinates[i],\n      lineString.coordinates[i + 1],\n      pt.coordinates\n    )) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction isLineOnLine(lineString1, lineString2, ignoreSelfIntersections) {\n  const doLinesIntersect = lineIntersect(lineString1, lineString2, {\n    ignoreSelfIntersections\n  });\n  if (doLinesIntersect.features.length > 0) {\n    return true;\n  }\n  return false;\n}\nfunction isLineInPoly(polygon, lineString, ignoreSelfIntersections) {\n  for (const coord of lineString.coordinates) {\n    if (booleanPointInPolygon(coord, polygon)) {\n      return true;\n    }\n  }\n  const doLinesIntersect = lineIntersect(lineString, polygonToLine(polygon), {\n    ignoreSelfIntersections\n  });\n  if (doLinesIntersect.features.length > 0) {\n    return true;\n  }\n  return false;\n}\nfunction isPolyInPoly(feature1, feature2, ignoreSelfIntersections) {\n  for (const coord1 of feature1.coordinates[0]) {\n    if (booleanPointInPolygon(coord1, feature2)) {\n      return true;\n    }\n  }\n  for (const coord2 of feature2.coordinates[0]) {\n    if (booleanPointInPolygon(coord2, feature1)) {\n      return true;\n    }\n  }\n  const doLinesIntersect = lineIntersect(\n    polygonToLine(feature1),\n    polygonToLine(feature2),\n    { ignoreSelfIntersections }\n  );\n  if (doLinesIntersect.features.length > 0) {\n    return true;\n  }\n  return false;\n}\nfunction isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt) {\n  const dxc = pt[0] - lineSegmentStart[0];\n  const dyc = pt[1] - lineSegmentStart[1];\n  const dxl = lineSegmentEnd[0] - lineSegmentStart[0];\n  const dyl = lineSegmentEnd[1] - lineSegmentStart[1];\n  const cross = dxc * dyl - dyc * dxl;\n  if (cross !== 0) {\n    return false;\n  }\n  if (Math.abs(dxl) >= Math.abs(dyl)) {\n    if (dxl > 0) {\n      return lineSegmentStart[0] <= pt[0] && pt[0] <= lineSegmentEnd[0];\n    } else {\n      return lineSegmentEnd[0] <= pt[0] && pt[0] <= lineSegmentStart[0];\n    }\n  } else if (dyl > 0) {\n    return lineSegmentStart[1] <= pt[1] && pt[1] <= lineSegmentEnd[1];\n  } else {\n    return lineSegmentEnd[1] <= pt[1] && pt[1] <= lineSegmentStart[1];\n  }\n}\nfunction compareCoords(pair1, pair2) {\n  return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\nvar turf_boolean_disjoint_default = booleanDisjoint;\nexport {\n  booleanDisjoint,\n  turf_boolean_disjoint_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { booleanDisjoint } from \"@turf/boolean-disjoint\";\nimport { flattenEach } from \"@turf/meta\";\nfunction booleanIntersects(feature1, feature2, {\n  ignoreSelfIntersections = true\n} = {}) {\n  let bool = false;\n  flattenEach(feature1, (flatten1) => {\n    flattenEach(feature2, (flatten2) => {\n      if (bool === true) {\n        return true;\n      }\n      bool = !booleanDisjoint(flatten1.geometry, flatten2.geometry, {\n        ignoreSelfIntersections\n      });\n    });\n  });\n  return bool;\n}\nvar turf_boolean_intersects_default = booleanIntersects;\nexport {\n  booleanIntersects,\n  turf_boolean_intersects_default as default\n};\n//# sourceMappingURL=index.js.map","import { GeoFeaturesById } from \"./GeoFeatures\"\nimport annotations from \"./MapAnnotationPlacements.json\"\nimport { Direction, EllipseCoords, GeoFeature } from \"./MapChartConstants\"\n\ninterface RawAnnotationPlacement {\n    id: string\n    ellipse?: EllipseCoords\n    direction?: Direction\n    anchorPoint?: [number, number]\n    bridgeCountries?: string[]\n}\n\ninterface EnrichedAnnotationPlacement extends Omit<\n    RawAnnotationPlacement,\n    \"bridgeCountries\"\n> {\n    bridgeFeatures?: GeoFeature[]\n}\n\nexport const annotationPlacementsById = new Map<\n    string,\n    EnrichedAnnotationPlacement\n>(\n    annotations.map((annotation) => {\n        const enrichedAnnotation = {\n            ...annotation,\n            bridgeFeatures: annotation.bridgeCountries?.map((name) =>\n                GeoFeaturesById.get(name)\n            ),\n        } as EnrichedAnnotationPlacement\n        return [annotation.id, enrichedAnnotation]\n    })\n)\n","import { Feature, GeoJsonProperties, Polygon } from \"geojson\"\nimport { GeoProjection } from \"d3-geo\"\nimport { forceSimulation, forceX, forceY, SimulationNodeDatum } from \"d3-force\"\n// @ts-expect-error no types available\nimport bboxCollide from \"./d3-bboxCollide\"\nimport { booleanIntersects } from \"@turf/boolean-intersects\"\nimport { Bounds, excludeUndefined, Point } from \"@ourworldindata/utils\"\nimport {\n    Direction,\n    Ellipse,\n    RenderFeature,\n    ExternalAnnotation,\n    Circle,\n    EllipseCoords,\n    InternalAnnotation,\n    GeoFeature,\n    ANNOTATION_FONT_SIZE_INTERNAL_DEFAULT,\n    ANNOTATION_FONT_SIZE_INTERNAL_MIN,\n    ANNOTATION_FONT_SIZE_EXTERNAL_DEFAULT,\n    ANNOTATION_FONT_SIZE_EXTERNAL_MAX,\n    ANNOTATION_MARKER_LINE_LENGTH_DEFAULT,\n    ANNOTATION_MARKER_LINE_LENGTH_MAX,\n} from \"./MapChartConstants\"\nimport * as R from \"remeda\"\nimport { annotationPlacementsById } from \"./MapAnnotationPlacements\"\nimport { GRAPHER_DARK_TEXT } from \"../color/ColorConstants\"\nimport { getGeoFeaturesForGlobe } from \"./GeoFeatures\"\n\nconst MARKER_TEXT_GAP = 2\n\nexport function makeInternalAnnotationForFeature({\n    feature,\n    projection,\n    formattedValue,\n    color,\n    fontSizeScale = 1,\n}: {\n    feature: RenderFeature\n    projection: GeoProjection\n    formattedValue: string\n    color?: string\n    fontSizeScale?: number\n}): InternalAnnotation | undefined {\n    const placement = annotationPlacementsById.get(feature.id)\n    if (!placement || !placement.ellipse) return\n\n    // project ellipse onto the map\n    const ellipse = makeEllipseForProjection({\n        ellipse: placement.ellipse,\n        projection,\n        paddingFactor: { x: 0.1 },\n    })\n\n    if (!ellipse) return\n\n    // place label at the center of the ellipse (decreases the font size if necessary)\n    const placedLabel = placeLabelAtEllipseCenter({\n        text: formattedValue,\n        ellipse,\n        fontSizeScale,\n    })\n\n    if (placedLabel)\n        return {\n            type: \"internal\",\n            id: feature.id,\n            feature,\n            placedBounds: placedLabel.placedBounds,\n            text: formattedValue,\n            ellipse,\n            fontSize: placedLabel.fontSize,\n            color: color ?? GRAPHER_DARK_TEXT,\n        }\n\n    return\n}\n\nexport function makeExternalAnnotationForFeature({\n    feature,\n    projection,\n    formattedValue,\n    fontSizeScale = 1,\n}: {\n    feature: RenderFeature\n    projection: GeoProjection\n    formattedValue: string\n    fontSizeScale?: number\n}): ExternalAnnotation | undefined {\n    const placement = annotationPlacementsById.get(feature.id)\n    if (!placement || !placement.anchorPoint || !placement.direction) return\n\n    const direction = placement.direction\n    const anchorPoint = projection(placement.anchorPoint)\n    if (!anchorPoint) return\n\n    const fontSize = Math.min(\n        ANNOTATION_FONT_SIZE_EXTERNAL_DEFAULT / fontSizeScale,\n        ANNOTATION_FONT_SIZE_EXTERNAL_MAX\n    )\n    const markerLength = Math.min(\n        ANNOTATION_MARKER_LINE_LENGTH_DEFAULT / fontSizeScale,\n        ANNOTATION_MARKER_LINE_LENGTH_MAX\n    )\n\n    // places the label outside of the country borders based on the\n    // given anchor point and direction\n    let placedBounds = placeExternalLabel({\n        text: formattedValue,\n        anchorPoint,\n        direction,\n        fontSize,\n        markerLength,\n    })\n\n    // make sure the labels of countries like Lesotho and Eswatini that are\n    // separated from the ocean by another country are placed in the ocean\n    if (placement.bridgeFeatures?.length)\n        placedBounds = moveExternalLabelIntoOcean({\n            bridgeFeatures: placement.bridgeFeatures,\n            placedBounds,\n            direction,\n            projection,\n            step: markerLength / 2,\n            maxSteps: 3,\n        })\n\n    return {\n        type: \"external\",\n        id: feature.id,\n        feature,\n        text: formattedValue,\n        placedBounds,\n        anchor: anchorPoint,\n        direction,\n        fontSize,\n        color: GRAPHER_DARK_TEXT,\n    }\n}\n\n/**\n * Given a list of naively placed external annotations that might overlap,\n * adjust label positions to minimise collisions and drop labels that can't\n * be rendered.\n */\nexport function repositionAndFilterExternalAnnotations({\n    annotations,\n    projection,\n    backgroundFeatureIdSet, // countries ignored for collision detection\n}: {\n    annotations: ExternalAnnotation[]\n    projection: GeoProjection\n    backgroundFeatureIdSet: Set<string>\n}): ExternalAnnotation[] {\n    const originalAnnotationsById = new Map(\n        annotations.map((annotation) => [annotation.id, annotation])\n    )\n\n    // re-position label annotations so that they're not overlapping\n    const nonOverlappingAnnotations = minimiseLabelCollisions(annotations)\n\n    // the re-positioned label annotations might overlap with other countries\n    const filteredAnnotations = nonOverlappingAnnotations.filter(\n        (annotation) => {\n            // we do these checks only for countries that are proximally close for performance reasons\n            let nearbyGeoFeatures = getGeoFeaturesWithinRadius(\n                annotation.feature\n            )\n\n            // exclude background countries from collision detection,\n            // i.e. showing a label on top of a background country is allowed\n            if (backgroundFeatureIdSet.size > 0)\n                nearbyGeoFeatures = nearbyGeoFeatures.filter(\n                    (feature) =>\n                        !backgroundFeatureIdSet.has(feature.id as string)\n                )\n\n            const nearbyAnnotations = excludeUndefined(\n                nearbyGeoFeatures.map((feature) =>\n                    originalAnnotationsById.get(feature.id as string)\n                )\n            )\n\n            return (\n                // hide an annotation if the line that connects the annotation\n                // with the anchor point crosses through other labels\n                !checkAnnotationMarkerCollidesWithSomeLabel({\n                    annotation,\n                    nearbyAnnotations,\n                }) &&\n                // hide an annotation if it overlaps with other countries\n                !checkAnnotationCollidesWithLandmass({\n                    annotation,\n                    nearbyGeoFeatures,\n                    projection,\n                })\n            )\n        }\n    )\n\n    if (filteredAnnotations.length < annotations.length) {\n        // reset the filtered annotations to their original position and\n        // re-position their labels again\n        return minimiseLabelCollisions(\n            filteredAnnotations.map((annotation) => {\n                const origBounds = originalAnnotationsById.get(\n                    annotation.id\n                )!.placedBounds\n                return { ...annotation, placedBounds: origBounds }\n            })\n        )\n    }\n\n    return filteredAnnotations\n}\n\nfunction placeLabelAtEllipseCenter({\n    text,\n    ellipse,\n    fontSizeScale = 1,\n}: {\n    text: string\n    ellipse: Ellipse\n    fontSizeScale?: number\n}): { placedBounds: Bounds; fontSize: number } | undefined {\n    const defaultFontSize =\n        ANNOTATION_FONT_SIZE_INTERNAL_DEFAULT / fontSizeScale\n\n    // place label at the center of the ellipse\n    const ellipseCenter = { x: ellipse.cx, y: ellipse.cy }\n    let placedBounds = makePlacedBoundsForText({\n        text,\n        fontSize: defaultFontSize,\n        fontWeight: 700,\n        position: ellipseCenter,\n        center: true,\n    })\n\n    // return early if the label fits into the ellipse\n    let textFits = checkPointIsInEllipse(placedBounds.topLeft, ellipse)\n    if (textFits) return { placedBounds, fontSize: defaultFontSize }\n\n    // decrease the font size to make the label fit into the ellipse\n    const step = 1\n    for (\n        let fontSize = ANNOTATION_FONT_SIZE_INTERNAL_DEFAULT - step;\n        fontSize >= ANNOTATION_FONT_SIZE_INTERNAL_MIN;\n        fontSize -= step\n    ) {\n        const scaledFontSize = fontSize / fontSizeScale\n        placedBounds = makePlacedBoundsForText({\n            text,\n            fontSize: scaledFontSize,\n            fontWeight: 700,\n            position: ellipseCenter,\n            center: true,\n        })\n\n        textFits = checkPointIsInEllipse(placedBounds.topLeft, ellipse)\n        if (textFits) return { placedBounds, fontSize: scaledFontSize }\n    }\n\n    // the label text didn't fit into the ellipse\n    return undefined\n}\n\nfunction placeExternalLabel({\n    text,\n    anchorPoint,\n    direction,\n    fontSize,\n    markerLength,\n    padding = MARKER_TEXT_GAP,\n}: {\n    text: string\n    anchorPoint: [number, number]\n    direction: Direction\n    fontSize: number\n    markerLength: number\n    padding?: number\n}): Bounds {\n    const textBounds = Bounds.forText(text, { fontSize, fontWeight: 700 })\n\n    const labelPosition = calculateExternalLabelPosition({\n        anchorPoint,\n        textBounds,\n        direction,\n        markerLength,\n        padding,\n    })\n\n    return textBounds.set({ x: labelPosition[0], y: labelPosition[1] })\n}\n\nfunction checkPointIsInEllipse(point: Point, ellipse: Ellipse): boolean {\n    const dx = point.x - ellipse.cx\n    const dy = point.y - ellipse.cy\n    return (\n        (dx * dx) / (ellipse.rx * ellipse.rx) +\n            (dy * dy) / (ellipse.ry * ellipse.ry) <=\n        1\n    )\n}\n\nfunction makeEllipseForProjection({\n    ellipse,\n    projection,\n    paddingFactor,\n}: {\n    ellipse: EllipseCoords\n    projection: GeoProjection\n    paddingFactor?: { x?: number; y?: number }\n}): Ellipse | undefined {\n    const projCenter = projection([ellipse.cx, ellipse.cy])\n    const projLeft = projection([ellipse.left, ellipse.cy])\n    const projTop = projection([ellipse.cx, ellipse.top])\n\n    if (!projCenter || !projLeft || !projTop) return undefined\n\n    const rx = Math.abs(projCenter[0] - projLeft[0])\n    const ry = Math.abs(projCenter[1] - projTop[1])\n\n    const padX = (paddingFactor?.x ?? 0) * rx\n    const padY = (paddingFactor?.y ?? 0) * ry\n\n    return {\n        cx: projCenter[0],\n        cy: projCenter[1],\n        rx: rx - padX,\n        ry: ry - padY,\n    }\n}\n\n/**\n * Calculate the top-left corner of the externally placed label given the\n * top-left corner of the anchor point and a direction\n */\nfunction calculateExternalLabelPosition({\n    anchorPoint,\n    textBounds,\n    direction,\n    markerLength,\n    padding = MARKER_TEXT_GAP,\n}: {\n    anchorPoint: [number, number]\n    textBounds: Bounds\n    direction: Direction\n    markerLength: number\n    padding?: number\n}): [number, number] {\n    const [x, y] = anchorPoint\n    const w = textBounds.width,\n        h = textBounds.height\n    const m = markerLength + padding\n\n    switch (direction) {\n        case \"right\":\n            return [x + m, y - h / 2]\n        case \"left\":\n            return [x - m - w, y - h / 2]\n        case \"bottom\":\n            return [x - w / 2, y + m]\n        case \"top\":\n            return [x - w / 2, y - h / 2 - m]\n        case \"leftTop\":\n            return [x - m - w, y - h / 2 - m / 2 - h]\n        case \"leftBottom\":\n            return [x - m - w, y - h / 2 + h + m / 2]\n        case \"rightTop\":\n            return [x + m, y - h / 2 - m / 2 - h]\n        case \"rightBottom\":\n            return [x + m, y - h / 2 + h + m / 2]\n    }\n}\n\nexport function getExternalMarkerEndPosition({\n    textBounds,\n    direction,\n    padding = MARKER_TEXT_GAP,\n}: {\n    textBounds: Bounds\n    direction: Direction\n    padding?: number\n}): [number, number] {\n    const { x, y, width, height } = textBounds\n\n    switch (direction) {\n        case \"right\":\n            return [x - padding, y + height / 2]\n        case \"left\":\n            return [x + width + padding, y + height / 2]\n        case \"bottom\":\n            return [x + width / 2, y - padding]\n        case \"top\":\n            return [x + width / 2, y + height + padding]\n        case \"leftTop\":\n            return [x + width, y + height]\n        case \"leftBottom\":\n            return [x + width, y]\n        case \"rightTop\":\n            return [x, y + height]\n        case \"rightBottom\":\n            return [x, y]\n    }\n}\n\nfunction makePlacedBoundsForText({\n    text,\n    fontSize,\n    fontWeight,\n    position,\n    center = false,\n}: {\n    text: string\n    fontSize: number\n    fontWeight: number\n    position: Point\n    center?: boolean\n}): Bounds {\n    // make bounds for text\n    const textBounds = Bounds.forText(text, { fontSize, fontWeight })\n\n    // place bounds at the given position\n    const x = center ? position.x - textBounds.width / 2 : position.x\n    const y = center ? position.y - textBounds.height / 2 : position.y\n    return textBounds.set({ x, y })\n}\n\nfunction moveExternalLabelIntoOcean({\n    bridgeFeatures,\n    direction,\n    placedBounds,\n    projection,\n    step,\n    maxSteps,\n}: {\n    bridgeFeatures: GeoFeature[]\n    direction: Direction\n    placedBounds: Bounds\n    projection: any\n    step: number\n    maxSteps: number\n}): Bounds {\n    // polygon in lon/lat coordinates that represents the annotation label\n    let annotationLabel = makePolygonFromBounds(placedBounds, (position) =>\n        projection.invert(position)\n    )\n\n    let newBounds = placedBounds\n    for (let tick = 0; tick < maxSteps; tick++) {\n        const intersectsWithSomeFeature = bridgeFeatures.some((bridgeFeature) =>\n            booleanIntersects(annotationLabel, bridgeFeature)\n        )\n        if (!intersectsWithSomeFeature) break\n\n        // update bounds\n        newBounds = newBounds.set(\n            moveIntoDirectionByStep({\n                position: newBounds.topLeft,\n                direction,\n                step,\n            })\n        )\n\n        // update label\n        annotationLabel = makePolygonFromBounds(newBounds, (position) =>\n            projection.invert(position)\n        )\n    }\n\n    return newBounds\n}\n\nfunction moveIntoDirectionByStep({\n    position: { x, y },\n    direction,\n    step,\n}: {\n    position: Point\n    direction: Direction\n    step: number\n}): Point {\n    switch (direction) {\n        case \"right\":\n            return { x: x + step, y }\n        case \"left\":\n            return { x: x - step, y }\n        case \"top\":\n            return { x, y: y - step }\n        case \"bottom\":\n            return { x, y: y + step }\n        case \"leftTop\":\n            return { x: x - step, y: y - step }\n        case \"rightTop\":\n            return { x: x + step, y: y - step }\n        case \"leftBottom\":\n            return { x: x - step, y: y + step }\n        case \"rightBottom\":\n            return { x: x + step, y: y + step }\n    }\n}\n\nconst _featuresWithinRadiusCache = new Map<string, GeoFeature[]>()\nfunction getGeoFeaturesWithinRadius(feature: RenderFeature): GeoFeature[] {\n    if (_featuresWithinRadiusCache.has(feature.id))\n        return _featuresWithinRadiusCache.get(feature.id)!\n\n    const circle = {\n        cx: feature.geoCentroid[0],\n        cy: feature.geoCentroid[1],\n        r: 10,\n    }\n\n    const nearbyGeoFeatures = getGeoFeaturesForGlobe()\n        .filter(\n            (candidate) =>\n                candidate.id !== feature.id &&\n                checkRectangleOverlapsWithCircle({\n                    circle,\n                    rectangle: candidate.geoBounds,\n                })\n        )\n        .map((feature) => feature.geo)\n\n    _featuresWithinRadiusCache.set(feature.id, nearbyGeoFeatures)\n    return nearbyGeoFeatures\n}\n\nfunction checkRectangleOverlapsWithCircle({\n    circle,\n    rectangle,\n}: {\n    circle: Circle\n    rectangle: Bounds\n}): boolean {\n    const closestX = R.clamp(circle.cx, {\n        min: rectangle.topLeft.x,\n        max: rectangle.bottomRight.x,\n    })\n    const closestY = R.clamp(circle.cy, {\n        min: rectangle.topLeft.y,\n        max: rectangle.bottomRight.y,\n    })\n\n    const dx = circle.cx - closestX\n    const dy = circle.cy - closestY\n\n    return dx * dx + dy * dy <= circle.r * circle.r\n}\n\ninterface SimulationNode extends SimulationNodeDatum {\n    annotation: ExternalAnnotation\n}\n\nfunction minimiseLabelCollisions(\n    annotations: ExternalAnnotation[],\n    padding = 1\n): ExternalAnnotation[] {\n    if (annotations.length < 2) return annotations\n\n    const simulationNodes: SimulationNode[] = annotations.map((annotation) => {\n        const { centerX, centerY } = annotation.placedBounds\n        const isTopOrBottom =\n            annotation.direction === \"top\" || annotation.direction === \"bottom\"\n        return {\n            annotation,\n            x: centerX,\n            y: centerY,\n            // fix the x or y position to make sure the simulation doesn't move\n            // a label into its anchor point\n            fx: !isTopOrBottom ? centerX : undefined,\n            fy: isTopOrBottom ? centerY : undefined,\n        }\n    })\n\n    // run force simulation that balances two concerns:\n    // - keeping the annotation close to its anchor point (x,y forces)\n    // - minimising collisions between labels (collide force)\n    forceSimulation(simulationNodes)\n        .force(\n            \"x\",\n            forceX((d: SimulationNode) => d.annotation.placedBounds.centerX)\n        )\n        .force(\n            \"y\",\n            forceY((d: SimulationNode) => d.annotation.placedBounds.centerY)\n        )\n        .force(\n            \"collide\",\n            bboxCollide((d: SimulationNode) => [\n                [\n                    -d.annotation.placedBounds.width / 2 - padding,\n                    -d.annotation.placedBounds.height / 2 - padding,\n                ],\n                [\n                    d.annotation.placedBounds.width / 2 + padding,\n                    d.annotation.placedBounds.height / 2 + padding,\n                ],\n            ])\n                // weak force since keeping labels close to their anchor point\n                // is more important than minimising collisions\n                .strength(0.1)\n        )\n        // simulating very few ticks is good enough since dramatic position\n        // changes are not needed in a typical setup\n        .tick(5)\n\n    // update the bounds of the original annotations\n    const updatedAnnotations = annotations.map((annotation, index) => {\n        const node = simulationNodes[index]\n        const originalBounds = annotation.placedBounds\n\n        // update placed bounds with the simulated position\n        const { x: centerX = 0, y: centerY = 0 } = node\n        const placedBounds = originalBounds.set({\n            x: centerX - originalBounds.width / 2,\n            y: centerY - originalBounds.height / 2,\n        })\n\n        return { ...annotation, placedBounds }\n    })\n\n    return updatedAnnotations\n}\n\nfunction checkAnnotationCollidesWithLandmass({\n    annotation,\n    nearbyGeoFeatures,\n    projection,\n}: {\n    annotation: ExternalAnnotation\n    nearbyGeoFeatures: GeoFeature[]\n    projection: any\n}): boolean {\n    const annotationLabel = makePolygonFromBounds(\n        annotation.placedBounds,\n        (position) => projection.invert(position)\n    )\n    return nearbyGeoFeatures.some((feature) =>\n        booleanIntersects(annotationLabel, feature)\n    )\n}\n\nfunction checkAnnotationMarkerCollidesWithSomeLabel({\n    annotation,\n    nearbyAnnotations,\n}: {\n    annotation: ExternalAnnotation\n    nearbyAnnotations: ExternalAnnotation[]\n}): boolean {\n    // marker line from the anchor point to the label\n    const markerStart = annotation.anchor\n    const markerEnd = getExternalMarkerEndPosition({\n        textBounds: annotation.placedBounds,\n        direction: annotation.direction,\n    })\n    const markerLine = makePolygonForLine(markerStart, markerEnd)\n\n    // check if the marker line crosses through any of the labels\n    return nearbyAnnotations.some((nearbyAnnotation) => {\n        const nearbyLabel = makePolygonFromBounds(nearbyAnnotation.placedBounds)\n        return booleanIntersects(markerLine, nearbyLabel)\n    })\n}\n\nfunction makePolygonFromBounds(\n    bounds: Bounds,\n    transform?: (position: number[]) => number[]\n): Feature<Polygon, GeoJsonProperties> {\n    let corners = [\n        [bounds.topLeft.x, bounds.topLeft.y],\n        [bounds.topRight.x, bounds.topRight.y],\n        [bounds.bottomRight.x, bounds.bottomRight.y],\n        [bounds.bottomLeft.x, bounds.bottomLeft.y],\n        [bounds.topLeft.x, bounds.topLeft.y], // close the polygon\n    ]\n    if (transform) {\n        corners = corners.map((position) => transform(position))\n    }\n    return {\n        type: \"Feature\",\n        properties: {},\n        geometry: {\n            type: \"Polygon\",\n            coordinates: [corners],\n        },\n    }\n}\n\nfunction makePolygonForLine(\n    start: [number, number],\n    end: [number, number],\n    lineWidth = 4\n): Feature<Polygon, GeoJsonProperties> {\n    // Calculate the vector direction of the line\n    const dx = end[0] - start[0]\n    const dy = end[1] - start[1]\n    const lineLength = Math.sqrt(dx * dx + dy * dy)\n\n    // Calculate normalized perpendicular vector\n    const perpX = (-dy / lineLength) * (lineWidth / 2)\n    const perpY = (dx / lineLength) * (lineWidth / 2)\n\n    // Create four corners of the rectangle\n    const corners = [\n        [start[0] + perpX, start[1] + perpY],\n        [start[0] - perpX, start[1] - perpY],\n        [end[0] - perpX, end[1] - perpY],\n        [end[0] + perpX, end[1] + perpY],\n        [start[0] + perpX, start[1] + perpY], // close the polygon\n    ]\n\n    return {\n        type: \"Feature\",\n        properties: {},\n        geometry: {\n            type: \"Polygon\",\n            coordinates: [corners],\n        },\n    }\n}\n","import React from \"react\"\nimport { makeFigmaId } from \"@ourworldindata/utils\"\nimport {\n    BLUR_FILL_OPACITY,\n    BLUR_STROKE_OPACITY,\n    ChoroplethSeries,\n    DEFAULT_STROKE_COLOR,\n    DEFAULT_STROKE_WIDTH,\n    HOVER_STROKE_COLOR,\n    HOVER_STROKE_WIDTH,\n    PATTERN_STROKE_WIDTH,\n    SELECTED_STROKE_WIDTH,\n    SVGMouseEvent,\n    RenderFeature,\n    InternalAnnotation,\n    ExternalAnnotation,\n} from \"./MapChartConstants\"\nimport { isMapRenderFeature } from \"./MapHelpers\"\nimport { getExternalMarkerEndPosition } from \"./MapAnnotations\"\nimport { Patterns } from \"../core/GrapherConstants\"\nimport { calculateLightnessScore, isDarkColor } from \"../color/ColorUtils\"\nimport { Halo } from \"@ourworldindata/components\"\nimport { InteractionState } from \"../interaction/InteractionState\"\n\nexport function BackgroundCountry<Feature extends RenderFeature>({\n    feature,\n    path,\n    strokeWidth = DEFAULT_STROKE_WIDTH,\n}: {\n    feature: Feature\n    path?: string\n    strokeWidth?: number\n}): React.ReactElement {\n    return (\n        <path\n            id={makeFigmaId(feature.id)}\n            d={isMapRenderFeature(feature) ? feature.path : path}\n            strokeWidth={strokeWidth}\n            stroke=\"#aaa\"\n            fill=\"#fff\"\n        />\n    )\n}\n\nexport function CountryWithData<Feature extends RenderFeature>({\n    feature,\n    series,\n    path,\n    isSelected = false,\n    hover,\n    strokeScale = 1,\n    onClick,\n    onPointerEnter,\n    onPointerLeave,\n}: {\n    feature: Feature\n    series: ChoroplethSeries\n    path?: string\n    isSelected?: boolean\n    hover?: InteractionState\n    strokeScale?: number\n    onClick?: (event: SVGMouseEvent) => void\n    onPointerEnter?: (feature: Feature, event: PointerEvent) => void\n    onPointerLeave?: (event: PointerEvent) => void\n}): React.ReactElement {\n    const isProjection = series.isProjection\n    const isHovered = hover?.active ?? false\n\n    const stroke =\n        isHovered || isSelected ? HOVER_STROKE_COLOR : DEFAULT_STROKE_COLOR\n    const strokeWidth = getStrokeWidth({ isHovered, isSelected }) / strokeScale\n    const strokeOpacity = hover?.background ? BLUR_STROKE_OPACITY : 1\n\n    const fill = isProjection\n        ? `url(#${makeProjectedDataPatternId(series.color)})`\n        : series.color\n    const fillOpacity = hover?.background ? BLUR_FILL_OPACITY : 1\n\n    return (\n        <path\n            id={makeFigmaId(feature.id)}\n            data-feature-id={feature.id}\n            d={isMapRenderFeature(feature) ? feature.path : path}\n            strokeWidth={strokeWidth}\n            stroke={stroke}\n            strokeOpacity={strokeOpacity}\n            cursor=\"pointer\"\n            fill={fill}\n            fillOpacity={fillOpacity}\n            onClick={onClick}\n            onPointerEnter={(e) => onPointerEnter?.(feature, e.nativeEvent)}\n            onPointerLeave={(e) => onPointerLeave?.(e.nativeEvent)}\n        />\n    )\n}\n\nexport function CountryWithNoData<Feature extends RenderFeature>({\n    feature,\n    path,\n    patternId,\n    isSelected = false,\n    hover,\n    strokeScale = 1,\n    onClick,\n    onPointerEnter,\n    onPointerLeave,\n}: {\n    feature: Feature\n    path?: string\n    patternId: string\n    isSelected?: boolean\n    hover?: InteractionState\n    strokeScale?: number\n    onClick?: (event: SVGMouseEvent) => void\n    onPointerEnter?: (feature: Feature, event: PointerEvent) => void\n    onPointerLeave?: (event: PointerEvent) => void\n}): React.ReactElement {\n    const isHovered = hover?.active ?? false\n\n    const stroke = isHovered || isSelected ? HOVER_STROKE_COLOR : \"#aaa\"\n    const strokeWidth = getStrokeWidth({ isHovered, isSelected }) / strokeScale\n    const strokeOpacity = hover?.background ? BLUR_STROKE_OPACITY : 1\n\n    const fillOpacity = hover?.background ? BLUR_FILL_OPACITY : 1\n\n    return (\n        <path\n            id={makeFigmaId(feature.id)}\n            data-feature-id={feature.id}\n            d={isMapRenderFeature(feature) ? feature.path : path}\n            strokeWidth={strokeWidth}\n            stroke={stroke}\n            strokeOpacity={strokeOpacity}\n            cursor=\"pointer\"\n            fill={`url(#${patternId})`}\n            fillOpacity={fillOpacity}\n            onClick={onClick}\n            onPointerEnter={(e) => onPointerEnter?.(feature, e.nativeEvent)}\n            onPointerLeave={(e) => onPointerLeave?.(e.nativeEvent)}\n        />\n    )\n}\n\nexport function NoDataPattern({\n    patternId,\n    scale = 1,\n}: {\n    patternId: string\n    scale?: number\n}): React.ReactElement {\n    return (\n        <pattern\n            id={patternId}\n            patternUnits=\"userSpaceOnUse\"\n            width=\"4\"\n            height=\"4\"\n            patternTransform={`rotate(-45 2 2) scale(${scale})`}\n        >\n            <path\n                d=\"M -1,2 l 6,0\"\n                stroke=\"#ccc\"\n                strokeWidth={PATTERN_STROKE_WIDTH}\n            />\n        </pattern>\n    )\n}\n\nexport function ProjectedDataPattern({\n    color,\n    scale = 1,\n    forLegend = false,\n}: {\n    color: string\n    scale?: number\n    forLegend?: boolean\n}): React.ReactElement {\n    return (\n        <DottedProjectedDataPattern\n            patternId={makeProjectedDataPatternId(color, { forLegend })}\n            color={color}\n            scale={scale}\n            dotOpacity={forLegend ? 0.2 : undefined}\n        />\n    )\n}\n\nfunction DottedProjectedDataPattern({\n    patternId,\n    color,\n    scale = 1,\n    patternSize = 4,\n    dotSize = patternSize / 4,\n    dotOpacity,\n}: {\n    patternId: string\n    color: string\n    scale?: number\n    patternSize?: number\n    dotSize?: number\n    dotOpacity?: number // inferred from color lightness if not provided\n}): React.ReactElement {\n    // Choose the dot opacity based on the lightness of the color:\n    // - If the color is light, make the dots more transparent\n    // - If the color is dark, make the dots more opaque\n    const lightness = calculateLightnessScore(color) ?? 0\n    const opacity = dotOpacity ?? Math.max(1 - lightness, 0.1)\n\n    return (\n        <pattern\n            id={patternId}\n            patternUnits=\"userSpaceOnUse\"\n            width={patternSize}\n            height={patternSize}\n            patternTransform={`rotate(45) scale(${scale})`}\n        >\n            {/* colored background */}\n            <rect width={patternSize} height={patternSize} fill={color} />\n\n            {/* dots */}\n            <circle\n                cx={patternSize / 2}\n                cy={patternSize / 2}\n                r={dotSize}\n                fill=\"black\"\n                fillOpacity={opacity}\n            />\n        </pattern>\n    )\n}\n\nexport function InternalValueAnnotation({\n    annotation,\n    strokeScale = 1,\n    showOutline = false,\n}: {\n    annotation: InternalAnnotation\n    strokeScale?: number\n    showOutline?: boolean\n}): React.ReactElement {\n    const { id, text, color, placedBounds, fontSize } = annotation\n\n    const showHalo = showOutline && isDarkColor(color)\n\n    return (\n        <Halo id={id} outlineWidth={3} show={showHalo}>\n            <text\n                id={makeFigmaId(id)}\n                x={placedBounds.topLeft.x}\n                y={placedBounds.topLeft.y + placedBounds.height - 1}\n                fontSize={fontSize}\n                fontWeight={700}\n                fill={color}\n                strokeWidth={DEFAULT_STROKE_WIDTH / strokeScale}\n                style={{ pointerEvents: \"none\" }}\n            >\n                {text}\n            </text>\n        </Halo>\n    )\n}\n\nexport function ExternalValueAnnotation({\n    annotation,\n    strokeScale = 1,\n    onPointerEnter,\n    onPointerLeave,\n}: {\n    annotation: ExternalAnnotation\n    strokeScale?: number\n    onPointerEnter?: (feature: RenderFeature, event: PointerEvent) => void\n    onPointerLeave?: (event: PointerEvent) => void\n}): React.ReactElement {\n    const { id, text, direction, anchor, placedBounds, fontSize } = annotation\n\n    const markerStart = anchor\n    const markerEnd = getExternalMarkerEndPosition({\n        textBounds: placedBounds,\n        direction,\n    })\n\n    return (\n        <g id={makeFigmaId(id)}>\n            <line\n                x1={markerStart[0]}\n                y1={markerStart[1]}\n                x2={markerEnd[0]}\n                y2={markerEnd[1]}\n                stroke={annotation.color}\n                strokeWidth={(0.5 * HOVER_STROKE_WIDTH) / strokeScale}\n                style={{ pointerEvents: \"none\" }}\n            />\n            <text\n                x={placedBounds.x}\n                y={placedBounds.y + placedBounds.height - 1}\n                fontSize={fontSize}\n                strokeWidth={DEFAULT_STROKE_WIDTH / strokeScale}\n                fill={annotation.color}\n                fontWeight={700}\n                onPointerEnter={(e) =>\n                    onPointerEnter?.(annotation.feature, e.nativeEvent)\n                }\n                onPointerLeave={(e) => onPointerLeave?.(e.nativeEvent)}\n            >\n                {text}\n            </text>\n        </g>\n    )\n}\n\nfunction getStrokeWidth({\n    isSelected,\n    isHovered,\n}: {\n    isSelected: boolean\n    isHovered: boolean\n}): number {\n    if (isHovered) return HOVER_STROKE_WIDTH\n    if (isSelected) return SELECTED_STROKE_WIDTH\n    return DEFAULT_STROKE_WIDTH\n}\n\nexport function makeProjectedDataPatternId(\n    color: string,\n    options?: { forLegend: boolean }\n): string {\n    const prefix = options?.forLegend\n        ? Patterns.projectedDataPatternForLegend\n        : Patterns.projectedDataPattern\n    return `${prefix}_${color}`\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport {\n    Bounds,\n    makeFigmaId,\n    excludeUndefined,\n    EntityName,\n    MapRegionName,\n} from \"@ourworldindata/utils\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { Quadtree, quadtree } from \"d3-quadtree\"\nimport {\n    MapRenderFeature,\n    SVGMouseEvent,\n    GEO_FEATURES_CLASSNAME,\n    ChoroplethMapManager,\n    ChoroplethSeriesByName,\n    CHOROPLETH_MAP_CLASSNAME,\n    ExternalAnnotation,\n    InternalAnnotation,\n    Annotation,\n    ANNOTATION_COLOR_LIGHT,\n    ANNOTATION_COLOR_DARK,\n    RenderFeature,\n    PROJECTED_DATA_LEGEND_COLOR,\n    MapViewport,\n    MAP_VIEWPORTS,\n    MAP_REGION_LABELS,\n} from \"./MapChartConstants\"\nimport { getGeoFeaturesForMap } from \"./GeoFeatures\"\nimport {\n    BackgroundCountry,\n    CountryWithData,\n    CountryWithNoData,\n    ExternalValueAnnotation,\n    InternalValueAnnotation,\n    NoDataPattern,\n    ProjectedDataPattern,\n} from \"./MapComponents\"\nimport { Patterns } from \"../core/GrapherConstants\"\nimport {\n    detectNearbyFeature,\n    getCountriesByRegion,\n    getForegroundFeatures,\n    sortFeaturesByInteractionStateAndSize,\n} from \"./MapHelpers\"\nimport {\n    makeInternalAnnotationForFeature,\n    makeExternalAnnotationForFeature,\n    repositionAndFilterExternalAnnotations,\n} from \"./MapAnnotations\"\nimport { isDarkColor } from \"../color/ColorUtils\"\nimport { MapConfig } from \"./MapConfig\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray\"\nimport { MAP_PROJECTIONS } from \"./MapProjections\"\n\n@observer\nexport class ChoroplethMap extends React.Component<{\n    manager: ChoroplethMapManager\n}> {\n    base = React.createRef<SVGGElement>()\n\n    private hoverEnterFeature: MapRenderFeature | undefined = undefined\n    private hoverNearbyFeature: MapRenderFeature | undefined = undefined\n\n    constructor(props: { manager: ChoroplethMapManager }) {\n        super(props)\n\n        makeObservable<\n            ChoroplethMap,\n            \"hoverEnterFeature\" | \"hoverNearbyFeature\"\n        >(this, {\n            hoverEnterFeature: observable,\n            hoverNearbyFeature: observable,\n        })\n    }\n\n    @computed private get manager(): ChoroplethMapManager {\n        return this.props.manager\n    }\n\n    @computed get mapConfig(): MapConfig {\n        return this.manager.mapConfig\n    }\n\n    @computed.struct private get bounds(): Bounds {\n        return this.manager.choroplethMapBounds\n    }\n\n    @computed private get selectionArray(): MapSelectionArray {\n        return this.manager.selectionArray ?? new MapSelectionArray()\n    }\n\n    @computed private get viewport(): MapViewport {\n        return this.manager.mapViewport ?? MAP_VIEWPORTS[this.mapConfig.region]\n    }\n\n    @computed.struct private get choroplethData(): ChoroplethSeriesByName {\n        return this.manager.choroplethData\n    }\n\n    @computed private get hoverFeature(): MapRenderFeature | undefined {\n        return this.hoverEnterFeature || this.hoverNearbyFeature\n    }\n\n    // Combine bounding boxes to get the extents of the entire map\n    @computed private get mapBounds(): Bounds {\n        const allBounds = this.features.map((feature) => feature.projBounds)\n        return Bounds.merge(allBounds)\n    }\n\n    // Calculate what scaling should be applied to the untransformed map to match the current viewport to the container\n    @computed private get viewportScale(): number {\n        const { bounds, viewport, mapBounds } = this\n        const viewportWidth = viewport.width * mapBounds.width\n        const viewportHeight = viewport.height * mapBounds.height\n        return Math.min(\n            bounds.width / viewportWidth,\n            bounds.height / viewportHeight\n        )\n    }\n\n    @computed private get viewportScaleSqrt(): number {\n        return Math.sqrt(this.viewportScale)\n    }\n\n    @computed private get matrixTransform(): string {\n        const { bounds, mapBounds, viewport, viewportScale } = this\n\n        // Calculate our reference dimensions. These values are independent of the current\n        // map translation and scaling.\n        const mapX = mapBounds.x + 1\n        const mapY = mapBounds.y + 1\n\n        // Work out how to center the map, accounting for the new scaling we've worked out\n        const newWidth = mapBounds.width * viewportScale\n        const newHeight = mapBounds.height * viewportScale\n        const boundsCenterX = bounds.left + bounds.width / 2\n        const boundsCenterY = bounds.top + bounds.height / 2\n        const newCenterX =\n            mapX + (viewportScale - 1) * mapBounds.x + viewport.x * newWidth\n        const newCenterY =\n            mapY + (viewportScale - 1) * mapBounds.y + viewport.y * newHeight\n        const newOffsetX = boundsCenterX - newCenterX\n        const newOffsetY = boundsCenterY - newCenterY\n\n        const matrixComponents = [\n            viewportScale,\n            0,\n            0,\n            viewportScale,\n            newOffsetX,\n            newOffsetY,\n        ]\n        const matrixComponentsRounded = matrixComponents.map((c) =>\n            _.round(c, 4)\n        )\n\n        const matrixStr = `matrix(${matrixComponentsRounded.join(\",\")})`\n        return matrixStr\n    }\n\n    @computed private get features(): MapRenderFeature[] {\n        return getGeoFeaturesForMap(this.mapConfig.region)\n    }\n\n    @computed private get featuresInRegion(): MapRenderFeature[] {\n        const { features, mapConfig } = this\n\n        if (mapConfig.region === MapRegionName.World) return features\n\n        const countriesByProjection = getCountriesByRegion(\n            MAP_REGION_LABELS[mapConfig.region]\n        )\n        if (countriesByProjection === undefined) return []\n\n        return features.filter((feature) =>\n            countriesByProjection.has(feature.id)\n        )\n    }\n\n    @computed private get featuresById(): Map<string, MapRenderFeature> {\n        return new Map(this.features.map((feature) => [feature.id, feature]))\n    }\n\n    @computed private get foregroundFeatures(): MapRenderFeature[] {\n        return getForegroundFeatures(this.featuresInRegion, this.selectionArray)\n    }\n\n    @computed\n    private get backgroundFeatures(): MapRenderFeature[] {\n        return _.difference(this.features, this.foregroundFeatures)\n    }\n\n    @computed private get backgroundFeatureIdSet(): Set<EntityName> {\n        return new Set(this.backgroundFeatures.map((feature) => feature.id))\n    }\n\n    @computed private get featuresWithData(): MapRenderFeature[] {\n        return this.foregroundFeatures.filter((feature) =>\n            this.choroplethData.has(feature.id)\n        )\n    }\n\n    @computed private get sortedFeaturesWithData(): MapRenderFeature[] {\n        // sort features so that hovered or selected features are rendered last\n        // and smaller countries are rendered on top of bigger ones\n        return sortFeaturesByInteractionStateAndSize(this.featuresWithData, {\n            isHovered: (featureId: string) =>\n                this.manager.getHoverState?.(featureId)?.active ?? false,\n            isSelected: (featureId) =>\n                this.manager.isSelected?.(featureId) ?? false,\n        })\n    }\n\n    @computed private get featuresWithNoData(): MapRenderFeature[] {\n        return _.difference(this.foregroundFeatures, this.featuresWithData)\n    }\n\n    @computed private get binColors(): string[] {\n        return this.manager.binColors ?? []\n    }\n\n    @computed private get quadtree(): Quadtree<MapRenderFeature> {\n        return quadtree<MapRenderFeature>()\n            .x((feature) => feature.projBounds.centerX)\n            .y((feature) => feature.projBounds.centerY)\n            .addAll(this.foregroundFeatures)\n    }\n\n    @computed private get projection(): any {\n        return MAP_PROJECTIONS[this.mapConfig.region]\n    }\n\n    @computed private get shouldShowAnnotations(): boolean {\n        return !!(\n            this.manager.mapColumn.hasNumberFormatting &&\n            !this.mapConfig.tooltipUseCustomLabels\n        )\n    }\n\n    private formatAnnotationLabel(value: string | number): string {\n        return this.manager.mapColumn.formatValueShortWithAbbreviations(value)\n    }\n\n    @computed private get annotationCandidateFeatures(): MapRenderFeature[] {\n        if (!this.shouldShowAnnotations) return []\n\n        return excludeUndefined(\n            this.mapConfig.selection.selectedCountryNamesInForeground.map(\n                (name) => this.featuresById.get(name)\n            )\n        ).filter((feature) => this.foregroundFeatures.includes(feature))\n    }\n\n    /* Naively placed annotations that might be overlapping */\n    @computed\n    private get annotationCandidates(): Annotation[] {\n        return excludeUndefined(\n            this.annotationCandidateFeatures.map((feature) => {\n                const series = this.choroplethData.get(feature.id)\n                if (!series) return\n\n                const labelColor = isDarkColor(series.color)\n                    ? ANNOTATION_COLOR_LIGHT\n                    : ANNOTATION_COLOR_DARK\n\n                const args = {\n                    feature,\n                    projection: this.projection,\n                    formattedValue: this.formatAnnotationLabel(series.value),\n                    fontSizeScale: this.viewportScale,\n                    color: labelColor,\n                }\n\n                // try to fit the annotation inside the feature\n                const internalAnnotation =\n                    makeInternalAnnotationForFeature(args)\n                if (internalAnnotation) return internalAnnotation\n\n                // place the annotation outside of the feature\n                const externalAnnotation =\n                    makeExternalAnnotationForFeature(args)\n                if (externalAnnotation) return externalAnnotation\n\n                return undefined\n            })\n        )\n    }\n\n    @computed\n    private get internalAnnotations(): InternalAnnotation[] {\n        return this.annotationCandidates.filter(\n            (annotation) => annotation.type === \"internal\"\n        )\n    }\n\n    @computed\n    private get externalAnnotations(): ExternalAnnotation[] {\n        const { projection, backgroundFeatureIdSet } = this\n        const annotations = this.annotationCandidates.filter(\n            (annotation) => annotation.type === \"external\"\n        )\n        return repositionAndFilterExternalAnnotations({\n            annotations,\n            projection,\n            backgroundFeatureIdSet,\n        })\n    }\n\n    // Map uses a hybrid approach to mouseover\n    // If mouse is inside an element, that is prioritized\n    // Otherwise we do a quadtree search for the closest center point of a feature bounds,\n    // so that we can hover very small countries without trouble\n    @action.bound private detectNearbyFeature(\n        event: PointerEvent\n    ): MapRenderFeature | undefined {\n        if (this.hoverEnterFeature || !this.base.current) return\n\n        const nearbyFeature = detectNearbyFeature({\n            quadtree: this.quadtree,\n            element: this.base.current,\n            event,\n        })\n\n        if (!nearbyFeature) {\n            this.hoverNearbyFeature = undefined\n            this.manager.onMapMouseLeave?.()\n            return\n        }\n\n        if (nearbyFeature.id !== this.hoverNearbyFeature?.id) {\n            this.hoverNearbyFeature = nearbyFeature\n            this.manager.onMapMouseOver?.(nearbyFeature.geo)\n        }\n\n        return nearbyFeature\n    }\n\n    @action.bound private onPointerMove(event: PointerEvent): void {\n        this.detectNearbyFeature(event)\n    }\n\n    @action.bound private onPointerEnter(\n        feature: MapRenderFeature,\n        event: PointerEvent\n    ): void {\n        // on touch, let the click handler set hover so the\n        // tooltip doesn't appear before the click event fires\n        if (event.pointerType === \"touch\") return\n        this.setHoverEnterFeature(feature)\n    }\n\n    @action.bound private onPointerLeave(event: PointerEvent): void {\n        // on touch, the tooltip is dismissed via the document pointerdown handler\n        if (event.pointerType === \"touch\") return\n\n        this.clearHoverEnterFeature()\n    }\n\n    @action.bound private setHoverEnterFeature(\n        feature: MapRenderFeature\n    ): void {\n        if (this.hoverEnterFeature?.id === feature.id) return\n\n        this.hoverEnterFeature = feature\n        this.manager.onMapMouseOver?.(feature.geo)\n    }\n\n    @action.bound private clearHoverEnterFeature(): void {\n        this.hoverEnterFeature = undefined\n        this.manager.onMapMouseLeave?.()\n    }\n\n    @action.bound private onClick(feature: MapRenderFeature): void {\n        const {\n            isMapSelectionEnabled,\n            mapConfig: { selection },\n            globeController,\n        } = this.manager\n\n        this.setHoverEnterFeature(feature)\n\n        const is2dContinentActive = this.mapConfig.is2dContinentActive()\n\n        if (isMapSelectionEnabled) {\n            // Select/deselect the country if allowed\n            selection.toggleSelection(feature.id)\n        } else if (\n            // Don't rotate if the maps shows a continent in 2d mode\n            !is2dContinentActive &&\n            // Don't rotate if the map is faceted\n            !this.manager.isFaceted &&\n            // Don't rotate if the user is zoomed in, otherwise they can get stuck in 3D mode\n            window?.visualViewport?.scale === 1\n        ) {\n            // Rotate to the selected country on the globe\n            globeController?.rotateToCountry(feature.id)\n        }\n    }\n\n    @action.bound private onDocumentPointerDown(): void {\n        this.manager.globeController?.dismissCountryFocus()\n        if (this.hoverEnterFeature || this.hoverNearbyFeature) {\n            this.hoverEnterFeature = undefined\n            this.hoverNearbyFeature = undefined\n            this.manager.onMapMouseLeave?.()\n        }\n    }\n\n    private renderInternalAnnotations(): React.ReactElement | undefined {\n        if (this.internalAnnotations.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"annotations-internal\")}>\n                {this.internalAnnotations.map((annotation) => (\n                    <InternalValueAnnotation\n                        key={annotation.id}\n                        annotation={annotation}\n                        strokeScale={this.viewportScaleSqrt}\n                        showOutline={\n                            this.choroplethData.get(annotation.id)?.isProjection\n                        }\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    private renderExternalAnnotations(): React.ReactElement | undefined {\n        if (this.externalAnnotations.length === 0) return\n\n        return (\n            <g\n                id={makeFigmaId(\"annotations-external\")}\n                className=\"ExternalAnnotations\"\n            >\n                {this.externalAnnotations.map((annotation) => (\n                    <ExternalValueAnnotation\n                        key={annotation.id}\n                        annotation={annotation}\n                        strokeScale={this.viewportScaleSqrt}\n                        onPointerEnter={action((feature: RenderFeature) =>\n                            this.setHoverEnterFeature(\n                                feature as MapRenderFeature\n                            )\n                        )}\n                        onPointerLeave={action(() =>\n                            this.clearHoverEnterFeature()\n                        )}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderFeaturesInBackground(): React.ReactElement | undefined {\n        if (this.backgroundFeatures.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"countries-background\")}>\n                {this.backgroundFeatures.map((feature) => (\n                    <BackgroundCountry key={feature.id} feature={feature} />\n                ))}\n            </g>\n        )\n    }\n\n    renderFeaturesWithoutData(): React.ReactElement | undefined {\n        if (this.featuresWithNoData.length === 0) return\n        const patternId = Patterns.noDataPatternForMap\n\n        return (\n            <g\n                id={makeFigmaId(\"countries-without-data\")}\n                className=\"noDataFeatures\"\n            >\n                <defs>\n                    <NoDataPattern\n                        patternId={patternId}\n                        scale={1 / this.viewportScale} // The scale is crucial and projection specific\n                    />\n                </defs>\n\n                {this.featuresWithNoData.map((feature) => (\n                    <CountryWithNoData\n                        key={feature.id}\n                        feature={feature}\n                        patternId={patternId}\n                        isSelected={this.manager.isSelected?.(feature.id)}\n                        hover={this.manager.getHoverState?.(feature.id)}\n                        strokeScale={this.viewportScaleSqrt}\n                        onClick={(event) => {\n                            // don't invoke a second click on parent that\n                            // catches clicks on 'nearby' features\n                            event.stopPropagation()\n\n                            this.onClick(feature)\n                        }}\n                        onPointerEnter={this.onPointerEnter}\n                        onPointerLeave={this.onPointerLeave}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderFeaturesWithData(): React.ReactElement | undefined {\n        if (this.sortedFeaturesWithData.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"countries-with-data\")}>\n                {this.manager.hasProjectedData && (\n                    <defs>\n                        {/* Pattern used by the map legend for the projected data bin */}\n                        <ProjectedDataPattern\n                            key={PROJECTED_DATA_LEGEND_COLOR}\n                            color={PROJECTED_DATA_LEGEND_COLOR}\n                            forLegend\n                        />\n                        {/* Patterns used by the map legend. The map legend can't re-use\n                            the features' patterns defined below because those are scaled\n                            by the viewport. */}\n                        {this.binColors.map((color, index) => (\n                            <ProjectedDataPattern\n                                key={`${color}-${index}`}\n                                color={color}\n                                forLegend\n                            />\n                        ))}\n\n                        {/* Pattern used by features */}\n                        {this.binColors.map((color, index) => (\n                            <ProjectedDataPattern\n                                key={`${color}-${index}`}\n                                color={color}\n                                scale={1 / this.viewportScale}\n                            />\n                        ))}\n                    </defs>\n                )}\n\n                {this.sortedFeaturesWithData.map((feature) => {\n                    const series = this.choroplethData.get(feature.id)\n                    if (!series) return null\n                    return (\n                        <CountryWithData\n                            key={feature.id}\n                            feature={feature}\n                            series={series}\n                            isSelected={this.manager.isSelected?.(feature.id)}\n                            hover={this.manager.getHoverState?.(feature.id)}\n                            strokeScale={this.viewportScaleSqrt}\n                            onClick={(event) => {\n                                // don't invoke a second click on parent that\n                                // catches clicks on 'nearby' features\n                                event.stopPropagation()\n\n                                this.onClick(feature)\n                            }}\n                            onPointerEnter={this.onPointerEnter}\n                            onPointerLeave={this.onPointerLeave}\n                        />\n                    )\n                })}\n            </g>\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <g id={makeFigmaId(\"map\")} transform={this.matrixTransform}>\n                {this.renderFeaturesInBackground()}\n                {this.renderFeaturesWithoutData()}\n                {this.renderFeaturesWithData()}\n                {this.renderInternalAnnotations()}\n                {this.renderExternalAnnotations()}\n            </g>\n        )\n    }\n\n    override componentDidMount(): void {\n        document.addEventListener(\"pointerdown\", this.onDocumentPointerDown, {\n            passive: true,\n        })\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"pointerdown\", this.onDocumentPointerDown)\n    }\n\n    renderInteractive(): React.ReactElement {\n        const { bounds, matrixTransform } = this\n\n        // this needs to be referenced here or it will be recomputed on every mousemove\n        const _cachedCentroids = this.quadtree\n\n        // SVG layering is based on order of appearance in the element tree (later elements rendered on top)\n        // The ordering here is quite careful\n        return (\n            <g\n                ref={this.base}\n                className={CHOROPLETH_MAP_CLASSNAME}\n                onMouseDown={\n                    (ev: SVGMouseEvent): void =>\n                        ev.preventDefault() /* Without this, title may get selected while shift clicking */\n                }\n                onPointerMove={(ev): void => this.onPointerMove(ev.nativeEvent)}\n                onPointerLeave={(e) => this.onPointerLeave(e.nativeEvent)}\n                onClick={() => {\n                    // invoke a click on a feature when clicking nearby one\n                    if (this.hoverNearbyFeature)\n                        this.onClick(this.hoverNearbyFeature)\n                }}\n                style={{\n                    cursor: this.hoverFeature ? \"pointer\" : undefined,\n                    // Remove the 300ms delay on click events and double-tap-to-zoom for touch devices\n                    touchAction: \"manipulation\",\n                }}\n            >\n                <rect\n                    x={bounds.x}\n                    y={bounds.y}\n                    width={bounds.width}\n                    height={bounds.height}\n                    fill=\"rgba(255,255,255,0)\"\n                    opacity={0}\n                />\n                <g\n                    className={GEO_FEATURES_CLASSNAME}\n                    transform={matrixTransform}\n                >\n                    {this.renderFeaturesInBackground()}\n                    {this.renderFeaturesWithoutData()}\n                    {this.renderFeaturesWithData()}\n                    {this.renderInternalAnnotations()}\n                    {this.renderExternalAnnotations()}\n                </g>\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n","const acos = Math.acos,\n    asin = Math.asin,\n    atan2 = Math.atan2,\n    cos = Math.cos,\n    hypot = Math.hypot,\n    max = Math.max,\n    min = Math.min,\n    PI = Math.PI,\n    sin = Math.sin,\n    radians = PI / 180,\n    degrees = 180 / PI;\n\nclass Versor {\n  static fromCartesian([x, y, z]) {\n    return [0, z, -y, x];\n  }\n  static fromAngles([l, p, g]) {\n    l *= radians / 2;\n    p *= radians / 2;\n    g = (g||0) * radians / 2;\n    const sl = sin(l), cl = cos(l);\n    const sp = sin(p), cp = cos(p);\n    const sg = sin(g), cg = cos(g);\n    return [\n      cl * cp * cg + sl * sp * sg,\n      sl * cp * cg - cl * sp * sg,\n      cl * sp * cg + sl * cp * sg,\n      cl * cp * sg - sl * sp * cg\n    ];\n  }\n  static toAngles([a, b, c, d]) {\n    return [\n      atan2(2 * (a * b + c * d), 1 - 2 * (b * b + c * c)) * degrees,\n      asin(max(-1, min(1, 2 * (a * c - d * b)))) * degrees,\n      atan2(2 * (a * d + b * c), 1 - 2 * (c * c + d * d)) * degrees\n    ];\n  }\n  static interpolateAngles(a, b) {\n    const i = Versor.interpolate(Versor.fromAngles(a), Versor.fromAngles(b));\n    return t => Versor.toAngles(i(t));\n  }\n  static interpolateLinear([a1, b1, c1, d1], [a2, b2, c2, d2]) {\n    a2 -= a1, b2 -= b1, c2 -= c1, d2 -= d1;\n    const x = new Array(4);\n    return t => {\n      const l = hypot(x[0] = a1 + a2 * t, x[1] = b1 + b2 * t, x[2] = c1 + c2 * t, x[3] = d1 + d2 * t);\n      x[0] /= l, x[1] /= l, x[2] /= l, x[3] /= l;\n      return x;\n    };\n  }\n  static interpolate([a1, b1, c1, d1], [a2, b2, c2, d2]) {\n    let dot = Versor.dot([a1, b1, c1, d1], [a2, b2, c2, d2]);\n    if (dot < 0) a2 = -a2, b2 = -b2, c2 = -c2, d2 = -d2, dot = -dot;\n    if (dot > 0.9995) return Versor.interpolateLinear([a1, b1, c1, d1], [a2, b2, c2, d2]); \n    const theta0 = acos(max(-1, min(1, dot)));\n    const x = new Array(4);\n    const l = hypot(a2 -= a1 * dot, b2 -= b1 * dot, c2 -= c1 * dot, d2 -= d1 * dot);\n    a2 /= l, b2 /= l, c2 /= l, d2 /= l;\n    return t => {\n      const theta = theta0 * t;\n      const s = sin(theta);\n      const c = cos(theta);\n      x[0] = a1 * c + a2 * s;\n      x[1] = b1 * c + b2 * s;\n      x[2] = c1 * c + c2 * s;\n      x[3] = d1 * c + d2 * s;\n      return x;\n    };\n  }\n  static dot([a1, b1, c1, d1], [a2, b2, c2, d2]) {\n    return a1 * a2 + b1 * b2 + c1 * c2 + d1 * d2;\n  }\n  static multiply([a1, b1, c1, d1], [a2, b2, c2, d2]) {\n    return [\n      a1 * a2 - b1 * b2 - c1 * c2 - d1 * d2,\n      a1 * b2 + b1 * a2 + c1 * d2 - d1 * c2,\n      a1 * c2 - b1 * d2 + c1 * a2 + d1 * b2,\n      a1 * d2 + b1 * c2 - c1 * b2 + d1 * a2\n    ];\n  }\n}\n\n/*\n * Old API\n */\n\n// Returns the unit quaternion for the given Euler rotation angles [λ, φ, γ].\nconst versor = Versor.fromAngles;\n\n// Returns the quaternion that represents q0 * q1.\nversor.multiply = Versor.multiply;\n\n// Returns the Euler rotation angles [λ, φ, γ] for the given quaternion.\nversor.rotation = Versor.toAngles;\n\n// interpolate angles\nversor.interpolate = Versor.interpolateAngles;\n\n// Returns Cartesian coordinates [x, y, z] given spherical coordinates [λ, φ].\nversor.cartesian = function(e) {\n  const l = e[0] * radians, p = e[1] * radians, cp = cos(p);\n  return [cp * cos(l), cp * sin(l), sin(p)];\n};\n\n// Returns the quaternion to rotate between two cartesian points on the sphere.\n// alpha for tweening [0,1]\n// see https://github.com/Fil/versor/issues/8\nversor.delta = function(v0, v1, alpha) {\n  if (arguments.length == 2) alpha = 1;\n\n  const sqrt = Math.sqrt;\n  function cross(v0, v1) {\n    return  [v0[1] * v1[2] - v0[2] * v1[1], v0[2] * v1[0] - v0[0] * v1[2], v0[0] * v1[1] - v0[1] * v1[0]];\n  }\n  function dot(v0, v1) {\n    return v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2];\n  }\n\n  const w = cross(v0, v1), l = sqrt(dot(w, w));\n  if (!l) return [1, 0, 0, 0];\n  const t = alpha * acos(max(-1, min(1, dot(v0, v1)))) / 2, s = sin(t); // t = θ / 2\n  return [cos(t), w[2] / l * s, -w[1] / l * s, w[0] / l * s];\n};\n\nexport default versor;","/**\n * [Simple linear regression](http://en.wikipedia.org/wiki/Simple_linear_regression)\n * is a simple way to find a fitted line\n * between a set of coordinates. This algorithm finds the slope and y-intercept of a regression line\n * using the least sum of squares.\n *\n * @param {Array<Array<number>>} data an array of two-element of arrays,\n * like `[[0, 1], [2, 3]]`\n * @returns {Object} object containing slope and intersect of regression line\n * @example\n * linearRegression([[0, 0], [1, 1]]); // => { m: 1, b: 0 }\n */\nfunction linearRegression(data) {\n    var m;\n    var b;\n\n    // Store data length in a local variable to reduce\n    // repeated object property lookups\n    var dataLength = data.length;\n\n    //if there's only one point, arbitrarily choose a slope of 0\n    //and a y-intercept of whatever the y of the initial point is\n    if (dataLength === 1) {\n        m = 0;\n        b = data[0][1];\n    } else {\n        // Initialize our sums and scope the `m` and `b`\n        // variables that define the line.\n        var sumX = 0;\n        var sumY = 0;\n        var sumXX = 0;\n        var sumXY = 0;\n\n        // Use local variables to grab point values\n        // with minimal object property lookups\n        var point;\n        var x;\n        var y;\n\n        // Gather the sum of all x values, the sum of all\n        // y values, and the sum of x^2 and (x*y) for each\n        // value.\n        //\n        // In math notation, these would be SS_x, SS_y, SS_xx, and SS_xy\n        for (var i = 0; i < dataLength; i++) {\n            point = data[i];\n            x = point[0];\n            y = point[1];\n\n            sumX += x;\n            sumY += y;\n\n            sumXX += x * x;\n            sumXY += x * y;\n        }\n\n        // `m` is the slope of the regression line\n        m =\n            (dataLength * sumXY - sumX * sumY) /\n            (dataLength * sumXX - sumX * sumX);\n\n        // `b` is the y-intercept of the line.\n        b = sumY / dataLength - (m * sumX) / dataLength;\n    }\n\n    // Return both values as an object.\n    return {\n        m: m,\n        b: b\n    };\n}\n\n/**\n * Given the output of `linearRegression`: an object\n * with `m` and `b` values indicating slope and intercept,\n * respectively, generate a line function that translates\n * x values into y values.\n *\n * @param {Object} mb object with `m` and `b` members, representing\n * slope and intersect of desired line\n * @returns {Function} method that computes y-value at any given\n * x-value on the line.\n * @example\n * var l = linearRegressionLine(linearRegression([[0, 0], [1, 1]]));\n * l(0) // = 0\n * l(2) // = 2\n * linearRegressionLine({ b: 0, m: 1 })(1); // => 1\n * linearRegressionLine({ b: 1, m: 1 })(1); // => 2\n */\nfunction linearRegressionLine(mb /*: { b: number, m: number }*/) {\n    // Return a function that computes a `y` value for each\n    // x value it is given, based on the values of `b` and `a`\n    // that we just computed.\n    return function (x) {\n        return mb.b + mb.m * x;\n    };\n}\n\n/**\n * Our default sum is the [Kahan-Babuska algorithm](https://pdfs.semanticscholar.org/1760/7d467cda1d0277ad272deb2113533131dc09.pdf).\n * This method is an improvement over the classical\n * [Kahan summation algorithm](https://en.wikipedia.org/wiki/Kahan_summation_algorithm).\n * It aims at computing the sum of a list of numbers while correcting for\n * floating-point errors. Traditionally, sums are calculated as many\n * successive additions, each one with its own floating-point roundoff. These\n * losses in precision add up as the number of numbers increases. This alternative\n * algorithm is more accurate than the simple way of calculating sums by simple\n * addition.\n *\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n * @param {Array<number>} x input\n * @return {number} sum of all input numbers\n * @example\n * sum([1, 2, 3]); // => 6\n */\nfunction sum(x) {\n    // If the array is empty, we needn't bother computing its sum\n    if (x.length === 0) {\n        return 0;\n    }\n\n    // Initializing the sum as the first number in the array\n    var sum = x[0];\n\n    // Keeping track of the floating-point error correction\n    var correction = 0;\n\n    var transition;\n\n    if (typeof sum !== \"number\") {\n        return Number.NaN;\n    }\n\n    for (var i = 1; i < x.length; i++) {\n        if (typeof x[i] !== \"number\") {\n            return Number.NaN;\n        }\n        transition = sum + x[i];\n\n        // Here we need to update the correction in a different fashion\n        // if the new absolute value is greater than the absolute sum\n        if (Math.abs(sum) >= Math.abs(x[i])) {\n            correction += sum - transition + x[i];\n        } else {\n            correction += x[i] - transition + sum;\n        }\n\n        sum = transition;\n    }\n\n    // Returning the corrected sum\n    return sum + correction;\n}\n\n/**\n * The mean, _also known as average_,\n * is the sum of all values over the number of values.\n * This is a [measure of central tendency](https://en.wikipedia.org/wiki/Central_tendency):\n * a method of finding a typical or central value of a set of numbers.\n *\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n * @param {Array<number>} x sample of one or more data points\n * @throws {Error} if the length of x is less than one\n * @returns {number} mean\n * @example\n * mean([0, 10]); // => 5\n */\nfunction mean(x) {\n    if (x.length === 0) {\n        throw new Error(\"mean requires at least one data point\");\n    }\n\n    return sum(x) / x.length;\n}\n\n/**\n * The sum of deviations to the Nth power.\n * When n=2 it's the sum of squared deviations.\n * When n=3 it's the sum of cubed deviations.\n *\n * @param {Array<number>} x\n * @param {number} n power\n * @returns {number} sum of nth power deviations\n *\n * @example\n * var input = [1, 2, 3];\n * // since the variance of a set is the mean squared\n * // deviations, we can calculate that with sumNthPowerDeviations:\n * sumNthPowerDeviations(input, 2) / input.length;\n */\nfunction sumNthPowerDeviations(x, n) {\n    var meanValue = mean(x);\n    var sum = 0;\n    var tempValue;\n    var i;\n\n    // This is an optimization: when n is 2 (we're computing a number squared),\n    // multiplying the number by itself is significantly faster than using\n    // the Math.pow method.\n    if (n === 2) {\n        for (i = 0; i < x.length; i++) {\n            tempValue = x[i] - meanValue;\n            sum += tempValue * tempValue;\n        }\n    } else {\n        for (i = 0; i < x.length; i++) {\n            sum += Math.pow(x[i] - meanValue, n);\n        }\n    }\n\n    return sum;\n}\n\n/**\n * The [variance](http://en.wikipedia.org/wiki/Variance)\n * is the sum of squared deviations from the mean.\n *\n * This is an implementation of variance, not sample variance:\n * see the `sampleVariance` method if you want a sample measure.\n *\n * @param {Array<number>} x a population of one or more data points\n * @returns {number} variance: a value greater than or equal to zero.\n * zero indicates that all values are identical.\n * @throws {Error} if x's length is 0\n * @example\n * variance([1, 2, 3, 4, 5, 6]); // => 2.9166666666666665\n */\nfunction variance(x) {\n    if (x.length === 0) {\n        throw new Error(\"variance requires at least one data point\");\n    }\n\n    // Find the mean of squared deviations between the\n    // mean value and each value.\n    return sumNthPowerDeviations(x, 2) / x.length;\n}\n\n/**\n * The [standard deviation](http://en.wikipedia.org/wiki/Standard_deviation)\n * is the square root of the variance. This is also known as the population\n * standard deviation. It's useful for measuring the amount\n * of variation or dispersion in a set of values.\n *\n * Standard deviation is only appropriate for full-population knowledge: for\n * samples of a population, {@link sampleStandardDeviation} is\n * more appropriate.\n *\n * @param {Array<number>} x input\n * @returns {number} standard deviation\n * @example\n * variance([2, 4, 4, 4, 5, 5, 7, 9]); // => 4\n * standardDeviation([2, 4, 4, 4, 5, 5, 7, 9]); // => 2\n */\nfunction standardDeviation(x) {\n    if (x.length === 1) {\n        return 0;\n    }\n    var v = variance(x);\n    return Math.sqrt(v);\n}\n\n/**\n * The [R Squared](http://en.wikipedia.org/wiki/Coefficient_of_determination)\n * value of data compared with a function `f`\n * is the sum of the squared differences between the prediction\n * and the actual value.\n *\n * @param {Array<Array<number>>} x input data: this should be doubly-nested\n * @param {Function} func function called on `[i][0]` values within the dataset\n * @returns {number} r-squared value\n * @example\n * var samples = [[0, 0], [1, 1]];\n * var regressionLine = linearRegressionLine(linearRegression(samples));\n * rSquared(samples, regressionLine); // = 1 this line is a perfect fit\n */\nfunction rSquared(x, func) {\n    if (x.length < 2) {\n        return 1;\n    }\n\n    // Compute the average y value for the actual\n    // data set in order to compute the\n    // _total sum of squares_\n    var sum = 0;\n    for (var i = 0; i < x.length; i++) {\n        sum += x[i][1];\n    }\n    var average = sum / x.length;\n\n    // Compute the total sum of squares - the\n    // squared difference between each point\n    // and the average of all points.\n    var sumOfSquares = 0;\n    for (var j = 0; j < x.length; j++) {\n        sumOfSquares += Math.pow(average - x[j][1], 2);\n    }\n\n    // Finally estimate the error: the squared\n    // difference between the estimate and the actual data\n    // value at each point.\n    var err = 0;\n    for (var k = 0; k < x.length; k++) {\n        err += Math.pow(x[k][1] - func(x[k][0]), 2);\n    }\n\n    // As the error grows larger, its ratio to the\n    // sum of squares increases and the r squared\n    // value grows lower.\n    return 1 - err / sumOfSquares;\n}\n\n/**\n * The [mode](https://en.wikipedia.org/wiki/Mode_%28statistics%29) is the number\n * that appears in a list the highest number of times.\n * There can be multiple modes in a list: in the event of a tie, this\n * algorithm will return the most recently seen mode.\n *\n * This is a [measure of central tendency](https://en.wikipedia.org/wiki/Central_tendency):\n * a method of finding a typical or central value of a set of numbers.\n *\n * This runs in `O(n)` because the input is sorted.\n *\n * @param {Array<number>} sorted a sample of one or more data points\n * @returns {number} mode\n * @throws {Error} if sorted is empty\n * @example\n * modeSorted([0, 0, 1]); // => 0\n */\nfunction modeSorted(sorted) {\n    // Handle edge cases:\n    // The mode of an empty list is undefined\n    if (sorted.length === 0) {\n        throw new Error(\"mode requires at least one data point\");\n    }\n    if (sorted.length === 1) {\n        return sorted[0];\n    }\n\n    // This assumes it is dealing with an array of size > 1, since size\n    // 0 and 1 are handled immediately. Hence it starts at index 1 in the\n    // array.\n    var last = sorted[0];\n    // store the mode as we find new modes\n    var value = Number.NaN;\n    // store how many times we've seen the mode\n    var maxSeen = 0;\n    // how many times the current candidate for the mode\n    // has been seen\n    var seenThis = 1;\n\n    // end at sorted.length + 1 to fix the case in which the mode is\n    // the highest number that occurs in the sequence. the last iteration\n    // compares sorted[i], which is undefined, to the highest number\n    // in the series\n    for (var i = 1; i < sorted.length + 1; i++) {\n        // we're seeing a new number pass by\n        if (sorted[i] !== last) {\n            // the last number is the new mode since we saw it more\n            // often than the old one\n            if (seenThis > maxSeen) {\n                maxSeen = seenThis;\n                value = last;\n            }\n            seenThis = 1;\n            last = sorted[i];\n            // if this isn't a new number, it's one more occurrence of\n            // the potential mode\n        } else {\n            seenThis++;\n        }\n    }\n    return value;\n}\n\n/**\n * Sort an array of numbers by their numeric value, ensuring that the\n * array is not changed in place.\n *\n * This is necessary because the default behavior of .sort\n * in JavaScript is to sort arrays as string values\n *\n *     [1, 10, 12, 102, 20].sort()\n *     // output\n *     [1, 10, 102, 12, 20]\n *\n * @param {Array<number>} x input array\n * @return {Array<number>} sorted array\n * @private\n * @example\n * numericSort([3, 2, 1]) // => [1, 2, 3]\n */\nfunction numericSort(x) {\n    return (\n        x\n            // ensure the array is not changed in-place\n            .slice()\n            // comparator function that treats input as numeric\n            .sort(function (a, b) {\n                return a - b;\n            })\n    );\n}\n\n/**\n * The [mode](https://en.wikipedia.org/wiki/Mode_%28statistics%29) is the number\n * that appears in a list the highest number of times.\n * There can be multiple modes in a list: in the event of a tie, this\n * algorithm will return the most recently seen mode.\n *\n * This is a [measure of central tendency](https://en.wikipedia.org/wiki/Central_tendency):\n * a method of finding a typical or central value of a set of numbers.\n *\n * This runs in `O(n log(n))` because it needs to sort the array internally\n * before running an `O(n)` search to find the mode.\n *\n * @param {Array<number>} x input\n * @returns {number} mode\n * @example\n * mode([0, 0, 1]); // => 0\n */\nfunction mode(x) {\n    // Sorting the array lets us iterate through it below and be sure\n    // that every time we see a new number it's new and we'll never\n    // see the same number twice\n    return modeSorted(numericSort(x));\n}\n\n/* globals Map: false */\n\n/**\n * The [mode](https://en.wikipedia.org/wiki/Mode_%28statistics%29) is the number\n * that appears in a list the highest number of times.\n * There can be multiple modes in a list: in the event of a tie, this\n * algorithm will return the most recently seen mode.\n *\n * modeFast uses a Map object to keep track of the mode, instead of the approach\n * used with `mode`, a sorted array. As a result, it is faster\n * than `mode` and supports any data type that can be compared with `==`.\n * It also requires a\n * [JavaScript environment with support for Map](https://kangax.github.io/compat-table/es6/#test-Map),\n * and will throw an error if Map is not available.\n *\n * This is a [measure of central tendency](https://en.wikipedia.org/wiki/Central_tendency):\n * a method of finding a typical or central value of a set of numbers.\n *\n * @param {Array<*>} x a sample of one or more data points\n * @returns {?*} mode\n * @throws {ReferenceError} if the JavaScript environment doesn't support Map\n * @throws {Error} if x is empty\n * @example\n * modeFast(['rabbits', 'rabbits', 'squirrels']); // => 'rabbits'\n */\nfunction modeFast(x) {\n    // This index will reflect the incidence of different values, indexing\n    // them like\n    // { value: count }\n    var index = new Map();\n\n    // A running `mode` and the number of times it has been encountered.\n    var mode;\n    var modeCount = 0;\n\n    for (var i = 0; i < x.length; i++) {\n        var newCount = index.get(x[i]);\n        if (newCount === undefined) {\n            newCount = 1;\n        } else {\n            newCount++;\n        }\n        if (newCount > modeCount) {\n            mode = x[i];\n            modeCount = newCount;\n        }\n        index.set(x[i], newCount);\n    }\n\n    if (modeCount === 0) {\n        throw new Error(\"mode requires at last one data point\");\n    }\n\n    return mode;\n}\n\n/**\n * The min is the lowest number in the array.\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n * @param {Array<number>} x sample of one or more data points\n * @throws {Error} if the length of x is less than one\n * @returns {number} minimum value\n * @example\n * min([1, 5, -10, 100, 2]); // => -10\n */\nfunction min(x) {\n    if (x.length === 0) {\n        throw new Error(\"min requires at least one data point\");\n    }\n\n    var value = x[0];\n    for (var i = 1; i < x.length; i++) {\n        if (x[i] < value) {\n            value = x[i];\n        }\n    }\n    return value;\n}\n\n/**\n * This computes the maximum number in an array.\n *\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n * @param {Array<number>} x sample of one or more data points\n * @returns {number} maximum value\n * @throws {Error} if the length of x is less than one\n * @example\n * max([1, 2, 3, 4]);\n * // => 4\n */\nfunction max(x) {\n    if (x.length === 0) {\n        throw new Error(\"max requires at least one data point\");\n    }\n\n    var value = x[0];\n    for (var i = 1; i < x.length; i++) {\n        if (x[i] > value) {\n            value = x[i];\n        }\n    }\n    return value;\n}\n\n/**\n * This computes the minimum & maximum number in an array.\n *\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n * @param {Array<number>} x sample of one or more data points\n * @returns {Array<number>} minimum & maximum value\n * @throws {Error} if the length of x is less than one\n * @example\n * extent([1, 2, 3, 4]);\n * // => [1, 4]\n */\nfunction extent(x) {\n    if (x.length === 0) {\n        throw new Error(\"extent requires at least one data point\");\n    }\n\n    var min = x[0];\n    var max = x[0];\n    for (var i = 1; i < x.length; i++) {\n        if (x[i] > max) {\n            max = x[i];\n        }\n        if (x[i] < min) {\n            min = x[i];\n        }\n    }\n    return [min, max];\n}\n\n/**\n * The minimum is the lowest number in the array. With a sorted array,\n * the first element in the array is always the smallest, so this calculation\n * can be done in one step, or constant time.\n *\n * @param {Array<number>} x input\n * @returns {number} minimum value\n * @example\n * minSorted([-100, -10, 1, 2, 5]); // => -100\n */\nfunction minSorted(x) {\n    return x[0];\n}\n\n/**\n * The maximum is the highest number in the array. With a sorted array,\n * the last element in the array is always the largest, so this calculation\n * can be done in one step, or constant time.\n *\n * @param {Array<number>} x input\n * @returns {number} maximum value\n * @example\n * maxSorted([-100, -10, 1, 2, 5]); // => 5\n */\nfunction maxSorted(x) {\n    return x[x.length - 1];\n}\n\n/**\n * The extent is the lowest & highest number in the array. With a sorted array,\n * the first element in the array is always the lowest while the last element is always the largest, so this calculation\n * can be done in one step, or constant time.\n *\n * @param {Array<number>} x input\n * @returns {Array<number>} minimum & maximum value\n * @example\n * extentSorted([-100, -10, 1, 2, 5]); // => [-100, 5]\n */\nfunction extentSorted(x) {\n    return [x[0], x[x.length - 1]];\n}\n\n/**\n * The simple [sum](https://en.wikipedia.org/wiki/Summation) of an array\n * is the result of adding all numbers together, starting from zero.\n *\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n * @param {Array<number>} x input\n * @return {number} sum of all input numbers\n * @example\n * sumSimple([1, 2, 3]); // => 6\n */\nfunction sumSimple(x) {\n    var value = 0;\n    for (var i = 0; i < x.length; i++) {\n        if (typeof x[i] !== \"number\") {\n            return Number.NaN;\n        }\n        value += x[i];\n    }\n    return value;\n}\n\n/**\n * The [product](https://en.wikipedia.org/wiki/Product_(mathematics)) of an array\n * is the result of multiplying all numbers together, starting using one as the multiplicative identity.\n *\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n * @param {Array<number>} x input\n * @return {number} product of all input numbers\n * @example\n * product([1, 2, 3, 4]); // => 24\n */\nfunction product(x) {\n    var value = 1;\n    for (var i = 0; i < x.length; i++) {\n        value *= x[i];\n    }\n    return value;\n}\n\n/**\n * This is the internal implementation of quantiles: when you know\n * that the order is sorted, you don't need to re-sort it, and the computations\n * are faster.\n *\n * @param {Array<number>} x sample of one or more data points\n * @param {number} p desired quantile: a number between 0 to 1, inclusive\n * @returns {number} quantile value\n * @throws {Error} if p ix outside of the range from 0 to 1\n * @throws {Error} if x is empty\n * @example\n * quantileSorted([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20], 0.5); // => 9\n */\nfunction quantileSorted(x, p) {\n    var idx = x.length * p;\n    if (x.length === 0) {\n        throw new Error(\"quantile requires at least one data point.\");\n    } else if (p < 0 || p > 1) {\n        throw new Error(\"quantiles must be between 0 and 1\");\n    } else if (p === 1) {\n        // If p is 1, directly return the last element\n        return x[x.length - 1];\n    } else if (p === 0) {\n        // If p is 0, directly return the first element\n        return x[0];\n    } else if (idx % 1 !== 0) {\n        // If p is not integer, return the next element in array\n        return x[Math.ceil(idx) - 1];\n    } else if (x.length % 2 === 0) {\n        // If the list has even-length, we'll take the average of this number\n        // and the next value, if there is one\n        return (x[idx - 1] + x[idx]) / 2;\n    } else {\n        // Finally, in the simple case of an integer value\n        // with an odd-length list, return the x value at the index.\n        return x[idx];\n    }\n}\n\n/**\n * Rearrange items in `arr` so that all items in `[left, k]` range are the smallest.\n * The `k`-th element will have the `(k - left + 1)`-th smallest value in `[left, right]`.\n *\n * Implements Floyd-Rivest selection algorithm https://en.wikipedia.org/wiki/Floyd-Rivest_algorithm\n *\n * @param {Array<number>} arr input array\n * @param {number} k pivot index\n * @param {number} [left] left index\n * @param {number} [right] right index\n * @returns {void} mutates input array\n * @example\n * var arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];\n * quickselect(arr, 8);\n * // = [39, 28, 28, 33, 21, 12, 22, 50, 53, 56, 59, 65, 90, 77, 95]\n */\nfunction quickselect(arr, k, left, right) {\n    left = left || 0;\n    right = right || arr.length - 1;\n\n    while (right > left) {\n        // 600 and 0.5 are arbitrary constants chosen in the original paper to minimize execution time\n        if (right - left > 600) {\n            var n = right - left + 1;\n            var m = k - left + 1;\n            var z = Math.log(n);\n            var s = 0.5 * Math.exp((2 * z) / 3);\n            var sd = 0.5 * Math.sqrt((z * s * (n - s)) / n);\n            if (m - n / 2 < 0) { sd *= -1; }\n            var newLeft = Math.max(left, Math.floor(k - (m * s) / n + sd));\n            var newRight = Math.min(\n                right,\n                Math.floor(k + ((n - m) * s) / n + sd)\n            );\n            quickselect(arr, k, newLeft, newRight);\n        }\n\n        var t = arr[k];\n        var i = left;\n        var j = right;\n\n        swap(arr, left, k);\n        if (arr[right] > t) { swap(arr, left, right); }\n\n        while (i < j) {\n            swap(arr, i, j);\n            i++;\n            j--;\n            while (arr[i] < t) { i++; }\n            while (arr[j] > t) { j--; }\n        }\n\n        if (arr[left] === t) { swap(arr, left, j); }\n        else {\n            j++;\n            swap(arr, j, right);\n        }\n\n        if (j <= k) { left = j + 1; }\n        if (k <= j) { right = j - 1; }\n    }\n}\n\nfunction swap(arr, i, j) {\n    var tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\n/**\n * The [quantile](https://en.wikipedia.org/wiki/Quantile):\n * this is a population quantile, since we assume to know the entire\n * dataset in this library. This is an implementation of the\n * [Quantiles of a Population](http://en.wikipedia.org/wiki/Quantile#Quantiles_of_a_population)\n * algorithm from wikipedia.\n *\n * Sample is a one-dimensional array of numbers,\n * and p is either a decimal number from 0 to 1 or an array of decimal\n * numbers from 0 to 1.\n * In terms of a k/q quantile, p = k/q - it's just dealing with fractions or dealing\n * with decimal values.\n * When p is an array, the result of the function is also an array containing the appropriate\n * quantiles in input order\n *\n * @param {Array<number>} x sample of one or more numbers\n * @param {Array<number> | number} p the desired quantile, as a number between 0 and 1\n * @returns {number} quantile\n * @example\n * quantile([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20], 0.5); // => 9\n */\nfunction quantile(x, p) {\n    var copy = x.slice();\n\n    if (Array.isArray(p)) {\n        // rearrange elements so that each element corresponding to a requested\n        // quantile is on a place it would be if the array was fully sorted\n        multiQuantileSelect(copy, p);\n        // Initialize the result array\n        var results = [];\n        // For each requested quantile\n        for (var i = 0; i < p.length; i++) {\n            results[i] = quantileSorted(copy, p[i]);\n        }\n        return results;\n    } else {\n        var idx = quantileIndex(copy.length, p);\n        quantileSelect(copy, idx, 0, copy.length - 1);\n        return quantileSorted(copy, p);\n    }\n}\n\nfunction quantileSelect(arr, k, left, right) {\n    if (k % 1 === 0) {\n        quickselect(arr, k, left, right);\n    } else {\n        k = Math.floor(k);\n        quickselect(arr, k, left, right);\n        quickselect(arr, k + 1, k + 1, right);\n    }\n}\n\nfunction multiQuantileSelect(arr, p) {\n    var indices = [0];\n    for (var i = 0; i < p.length; i++) {\n        indices.push(quantileIndex(arr.length, p[i]));\n    }\n    indices.push(arr.length - 1);\n    indices.sort(compare);\n\n    var stack = [0, indices.length - 1];\n\n    while (stack.length) {\n        var r = Math.ceil(stack.pop());\n        var l = Math.floor(stack.pop());\n        if (r - l <= 1) { continue; }\n\n        var m = Math.floor((l + r) / 2);\n        quantileSelect(\n            arr,\n            indices[m],\n            Math.floor(indices[l]),\n            Math.ceil(indices[r])\n        );\n\n        stack.push(l, m, m, r);\n    }\n}\n\nfunction compare(a, b) {\n    return a - b;\n}\n\nfunction quantileIndex(len, p) {\n    var idx = len * p;\n    if (p === 1) {\n        // If p is 1, directly return the last index\n        return len - 1;\n    } else if (p === 0) {\n        // If p is 0, directly return the first index\n        return 0;\n    } else if (idx % 1 !== 0) {\n        // If index is not integer, return the next index in array\n        return Math.ceil(idx) - 1;\n    } else if (len % 2 === 0) {\n        // If the list has even-length, we'll return the middle of two indices\n        // around quantile to indicate that we need an average value of the two\n        return idx - 0.5;\n    } else {\n        // Finally, in the simple case of an integer index\n        // with an odd-length list, return the index\n        return idx;\n    }\n}\n\n/* eslint no-bitwise: 0 */\n\n/**\n * This function returns the quantile in which one would find the given value in\n * the given array. With a sorted array, leveraging binary search, we can find\n * this information in logarithmic time.\n *\n * @param {Array<number>} x input\n * @returns {number} value value\n * @example\n * quantileRankSorted([1, 2, 3, 4], 3); // => 0.75\n * quantileRankSorted([1, 2, 3, 3, 4], 3); // => 0.7\n * quantileRankSorted([1, 2, 3, 4], 6); // => 1\n * quantileRankSorted([1, 2, 3, 3, 5], 4); // => 0.8\n */\nfunction quantileRankSorted(x, value) {\n    // Value is lesser than any value in the array\n    if (value < x[0]) {\n        return 0;\n    }\n\n    // Value is greater than any value in the array\n    if (value > x[x.length - 1]) {\n        return 1;\n    }\n\n    var l = lowerBound(x, value);\n\n    // Value is not in the array\n    if (x[l] !== value) {\n        return l / x.length;\n    }\n\n    l++;\n\n    var u = upperBound(x, value);\n\n    // The value exists only once in the array\n    if (u === l) {\n        return l / x.length;\n    }\n\n    // Here, we are basically computing the mean of the range of indices\n    // containing our searched value. But, instead, of initializing an\n    // array and looping over it, there is a dedicated math formula that\n    // we apply below to get the result.\n    var r = u - l + 1;\n    var sum = (r * (u + l)) / 2;\n    var mean = sum / r;\n\n    return mean / x.length;\n}\n\nfunction lowerBound(x, value) {\n    var mid = 0;\n    var lo = 0;\n    var hi = x.length;\n\n    while (lo < hi) {\n        mid = (lo + hi) >>> 1;\n\n        if (value <= x[mid]) {\n            hi = mid;\n        } else {\n            lo = -~mid;\n        }\n    }\n\n    return lo;\n}\n\nfunction upperBound(x, value) {\n    var mid = 0;\n    var lo = 0;\n    var hi = x.length;\n\n    while (lo < hi) {\n        mid = (lo + hi) >>> 1;\n\n        if (value >= x[mid]) {\n            lo = -~mid;\n        } else {\n            hi = mid;\n        }\n    }\n\n    return lo;\n}\n\n/**\n * This function returns the quantile in which one would find the given value in\n * the given array. It will copy and sort your array before each run, so\n * if you know your array is already sorted, you should use `quantileRankSorted`\n * instead.\n *\n * @param {Array<number>} x input\n * @returns {number} value value\n * @example\n * quantileRank([4, 3, 1, 2], 3); // => 0.75\n * quantileRank([4, 3, 2, 3, 1], 3); // => 0.7\n * quantileRank([2, 4, 1, 3], 6); // => 1\n * quantileRank([5, 3, 1, 2, 3], 4); // => 0.8\n */\nfunction quantileRank(x, value) {\n    // Cloning and sorting the array\n    var sortedCopy = numericSort(x);\n\n    return quantileRankSorted(sortedCopy, value);\n}\n\n/**\n * The [Interquartile range](http://en.wikipedia.org/wiki/Interquartile_range) is\n * a measure of statistical dispersion, or how scattered, spread, or\n * concentrated a distribution is. It's computed as the difference between\n * the third quartile and first quartile.\n *\n * @param {Array<number>} x sample of one or more numbers\n * @returns {number} interquartile range: the span between lower and upper quartile,\n * 0.25 and 0.75\n * @example\n * interquartileRange([0, 1, 2, 3]); // => 2\n */\nfunction interquartileRange(x) {\n    // Interquartile range is the span between the upper quartile,\n    // at `0.75`, and lower quartile, `0.25`\n    var q1 = quantile(x, 0.75);\n    var q2 = quantile(x, 0.25);\n\n    if (typeof q1 === \"number\" && typeof q2 === \"number\") {\n        return q1 - q2;\n    }\n}\n\n/**\n * The [median](http://en.wikipedia.org/wiki/Median) is\n * the middle number of a list. This is often a good indicator of 'the middle'\n * when there are outliers that skew the `mean()` value.\n * This is a [measure of central tendency](https://en.wikipedia.org/wiki/Central_tendency):\n * a method of finding a typical or central value of a set of numbers.\n *\n * The median isn't necessarily one of the elements in the list: the value\n * can be the average of two elements if the list has an even length\n * and the two central values are different.\n *\n * @param {Array<number>} x input\n * @returns {number} median value\n * @example\n * median([10, 2, 5, 100, 2, 1]); // => 3.5\n */\nfunction median(x) {\n    return +quantile(x, 0.5);\n}\n\n/**\n * The [Median Absolute Deviation](http://en.wikipedia.org/wiki/Median_absolute_deviation) is\n * a robust measure of statistical\n * dispersion. It is more resilient to outliers than the standard deviation.\n *\n * @param {Array<number>} x input array\n * @returns {number} median absolute deviation\n * @example\n * medianAbsoluteDeviation([1, 1, 2, 2, 4, 6, 9]); // => 1\n */\nfunction medianAbsoluteDeviation(x) {\n    var medianValue = median(x);\n    var medianAbsoluteDeviations = [];\n\n    // Make a list of absolute deviations from the median\n    for (var i = 0; i < x.length; i++) {\n        medianAbsoluteDeviations.push(Math.abs(x[i] - medianValue));\n    }\n\n    // Find the median value of that list\n    return median(medianAbsoluteDeviations);\n}\n\n/**\n * Split an array into chunks of a specified size. This function\n * has the same behavior as [PHP's array_chunk](http://php.net/manual/en/function.array-chunk.php)\n * function, and thus will insert smaller-sized chunks at the end if\n * the input size is not divisible by the chunk size.\n *\n * `x` is expected to be an array, and `chunkSize` a number.\n * The `x` array can contain any kind of data.\n *\n * @param {Array} x a sample\n * @param {number} chunkSize size of each output array. must be a positive integer\n * @returns {Array<Array>} a chunked array\n * @throws {Error} if chunk size is less than 1 or not an integer\n * @example\n * chunk([1, 2, 3, 4, 5, 6], 2);\n * // => [[1, 2], [3, 4], [5, 6]]\n */\nfunction chunk(x, chunkSize) {\n    // a list of result chunks, as arrays in an array\n    var output = [];\n\n    // `chunkSize` must be zero or higher - otherwise the loop below,\n    // in which we call `start += chunkSize`, will loop infinitely.\n    // So, we'll detect and throw in that case to indicate\n    // invalid input.\n    if (chunkSize < 1) {\n        throw new Error(\"chunk size must be a positive number\");\n    }\n\n    if (Math.floor(chunkSize) !== chunkSize) {\n        throw new Error(\"chunk size must be an integer\");\n    }\n\n    // `start` is the index at which `.slice` will start selecting\n    // new array elements\n    for (var start = 0; start < x.length; start += chunkSize) {\n        // for each chunk, slice that part of the array and add it\n        // to the output. The `.slice` function does not change\n        // the original array.\n        output.push(x.slice(start, start + chunkSize));\n    }\n    return output;\n}\n\n/**\n * Sampling with replacement is a type of sampling that allows the same\n * item to be picked out of a population more than once.\n *\n * @param {Array<*>} x an array of any kind of value\n * @param {number} n count of how many elements to take\n * @param {Function} [randomSource=Math.random] an optional entropy source that\n * returns numbers between 0 inclusive and 1 exclusive: the range [0, 1)\n * @return {Array} n sampled items from the population\n * @example\n * var values = [1, 2, 3, 4];\n * sampleWithReplacement(values, 2); // returns 2 random values, like [2, 4];\n */\nfunction sampleWithReplacement(x, n, randomSource) {\n    if (x.length === 0) {\n        return [];\n    }\n\n    // a custom random number source can be provided if you want to use\n    // a fixed seed or another random number generator, like\n    // [random-js](https://www.npmjs.org/package/random-js)\n    randomSource = randomSource || Math.random;\n\n    var length = x.length;\n    var sample = [];\n\n    for (var i = 0; i < n; i++) {\n        var index = Math.floor(randomSource() * length);\n\n        sample.push(x[index]);\n    }\n\n    return sample;\n}\n\n/**\n * A [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)\n * in-place - which means that it **will change the order of the original\n * array by reference**.\n *\n * This is an algorithm that generates a random [permutation](https://en.wikipedia.org/wiki/Permutation)\n * of a set.\n *\n * @param {Array} x sample of one or more numbers\n * @param {Function} [randomSource=Math.random] an optional entropy source that\n * returns numbers between 0 inclusive and 1 exclusive: the range [0, 1)\n * @returns {Array} x\n * @example\n * var x = [1, 2, 3, 4];\n * shuffleInPlace(x);\n * // x is shuffled to a value like [2, 1, 4, 3]\n */\nfunction shuffleInPlace(x, randomSource) {\n    // a custom random number source can be provided if you want to use\n    // a fixed seed or another random number generator, like\n    // [random-js](https://www.npmjs.org/package/random-js)\n    randomSource = randomSource || Math.random;\n\n    // store the current length of the x to determine\n    // when no elements remain to shuffle.\n    var length = x.length;\n\n    // temporary is used to hold an item when it is being\n    // swapped between indices.\n    var temporary;\n\n    // The index to swap at each stage.\n    var index;\n\n    // While there are still items to shuffle\n    while (length > 0) {\n        // choose a random index within the subset of the array\n        // that is not yet shuffled\n        index = Math.floor(randomSource() * length--);\n\n        // store the value that we'll move temporarily\n        temporary = x[length];\n\n        // swap the value at `x[length]` with `x[index]`\n        x[length] = x[index];\n        x[index] = temporary;\n    }\n\n    return x;\n}\n\n/**\n * A [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)\n * is a fast way to create a random permutation of a finite set. This is\n * a function around `shuffle_in_place` that adds the guarantee that\n * it will not modify its input.\n *\n * @param {Array} x sample of 0 or more numbers\n * @param {Function} [randomSource=Math.random] an optional entropy source that\n * returns numbers between 0 inclusive and 1 exclusive: the range [0, 1)\n * @return {Array} shuffled version of input\n * @example\n * var shuffled = shuffle([1, 2, 3, 4]);\n * shuffled; // = [2, 3, 1, 4] or any other random permutation\n */\nfunction shuffle(x, randomSource) {\n    // slice the original array so that it is not modified\n    var sample = x.slice();\n\n    // and then shuffle that shallow-copied array, in place\n    return shuffleInPlace(sample, randomSource);\n}\n\n/**\n * Create a [simple random sample](http://en.wikipedia.org/wiki/Simple_random_sample)\n * from a given array of `n` elements.\n *\n * The sampled values will be in any order, not necessarily the order\n * they appear in the input.\n *\n * @param {Array<any>} x input array. can contain any type\n * @param {number} n count of how many elements to take\n * @param {Function} [randomSource=Math.random] an optional entropy source that\n * returns numbers between 0 inclusive and 1 exclusive: the range [0, 1)\n * @return {Array} subset of n elements in original array\n *\n * @example\n * var values = [1, 2, 4, 5, 6, 7, 8, 9];\n * sample(values, 3); // returns 3 random values, like [2, 5, 8];\n */\nfunction sample(x, n, randomSource) {\n    // shuffle the original array using a fisher-yates shuffle\n    var shuffled = shuffle(x, randomSource);\n\n    // and then return a subset of it - the first `n` elements.\n    return shuffled.slice(0, n);\n}\n\n/**\n * Create a new column x row matrix.\n *\n * @private\n * @param {number} columns\n * @param {number} rows\n * @return {Array<Array<number>>} matrix\n * @example\n * makeMatrix(10, 10);\n */\nfunction makeMatrix(columns, rows) {\n    var matrix = [];\n    for (var i = 0; i < columns; i++) {\n        var column = [];\n        for (var j = 0; j < rows; j++) {\n            column.push(0);\n        }\n        matrix.push(column);\n    }\n    return matrix;\n}\n\n/**\n * For a sorted input, counting the number of unique values\n * is possible in constant time and constant memory. This is\n * a simple implementation of the algorithm.\n *\n * Values are compared with `===`, so objects and non-primitive objects\n * are not handled in any special way.\n *\n * @param {Array<*>} x an array of any kind of value\n * @returns {number} count of unique values\n * @example\n * uniqueCountSorted([1, 2, 3]); // => 3\n * uniqueCountSorted([1, 1, 1]); // => 1\n */\nfunction uniqueCountSorted(x) {\n    var uniqueValueCount = 0;\n    var lastSeenValue;\n    for (var i = 0; i < x.length; i++) {\n        if (i === 0 || x[i] !== lastSeenValue) {\n            lastSeenValue = x[i];\n            uniqueValueCount++;\n        }\n    }\n    return uniqueValueCount;\n}\n\n/**\n * Generates incrementally computed values based on the sums and sums of\n * squares for the data array\n *\n * @private\n * @param {number} j\n * @param {number} i\n * @param {Array<number>} sums\n * @param {Array<number>} sumsOfSquares\n * @return {number}\n * @example\n * ssq(0, 1, [-1, 0, 2], [1, 1, 5]);\n */\nfunction ssq(j, i, sums, sumsOfSquares) {\n    var sji; // s(j, i)\n    if (j > 0) {\n        var muji = (sums[i] - sums[j - 1]) / (i - j + 1); // mu(j, i)\n        sji =\n            sumsOfSquares[i] - sumsOfSquares[j - 1] - (i - j + 1) * muji * muji;\n    } else {\n        sji = sumsOfSquares[i] - (sums[i] * sums[i]) / (i + 1);\n    }\n    if (sji < 0) {\n        return 0;\n    }\n    return sji;\n}\n\n/**\n * Function that recursively divides and conquers computations\n * for cluster j\n *\n * @private\n * @param {number} iMin Minimum index in cluster to be computed\n * @param {number} iMax Maximum index in cluster to be computed\n * @param {number} cluster Index of the cluster currently being computed\n * @param {Array<Array<number>>} matrix\n * @param {Array<Array<number>>} backtrackMatrix\n * @param {Array<number>} sums\n * @param {Array<number>} sumsOfSquares\n */\nfunction fillMatrixColumn(\n    iMin,\n    iMax,\n    cluster,\n    matrix,\n    backtrackMatrix,\n    sums,\n    sumsOfSquares\n) {\n    if (iMin > iMax) {\n        return;\n    }\n\n    // Start at midpoint between iMin and iMax\n    var i = Math.floor((iMin + iMax) / 2);\n\n    matrix[cluster][i] = matrix[cluster - 1][i - 1];\n    backtrackMatrix[cluster][i] = i;\n\n    var jlow = cluster; // the lower end for j\n\n    if (iMin > cluster) {\n        jlow = Math.max(jlow, backtrackMatrix[cluster][iMin - 1] || 0);\n    }\n    jlow = Math.max(jlow, backtrackMatrix[cluster - 1][i] || 0);\n\n    var jhigh = i - 1; // the upper end for j\n    if (iMax < matrix[0].length - 1) {\n        /* c8 ignore start */\n        jhigh = Math.min(jhigh, backtrackMatrix[cluster][iMax + 1] || 0);\n        /* c8 ignore end */\n    }\n\n    var sji;\n    var sjlowi;\n    var ssqjlow;\n    var ssqj;\n    for (var j = jhigh; j >= jlow; --j) {\n        sji = ssq(j, i, sums, sumsOfSquares);\n\n        if (sji + matrix[cluster - 1][jlow - 1] >= matrix[cluster][i]) {\n            break;\n        }\n\n        // Examine the lower bound of the cluster border\n        sjlowi = ssq(jlow, i, sums, sumsOfSquares);\n\n        ssqjlow = sjlowi + matrix[cluster - 1][jlow - 1];\n\n        if (ssqjlow < matrix[cluster][i]) {\n            // Shrink the lower bound\n            matrix[cluster][i] = ssqjlow;\n            backtrackMatrix[cluster][i] = jlow;\n        }\n        jlow++;\n\n        ssqj = sji + matrix[cluster - 1][j - 1];\n        if (ssqj < matrix[cluster][i]) {\n            matrix[cluster][i] = ssqj;\n            backtrackMatrix[cluster][i] = j;\n        }\n    }\n\n    fillMatrixColumn(\n        iMin,\n        i - 1,\n        cluster,\n        matrix,\n        backtrackMatrix,\n        sums,\n        sumsOfSquares\n    );\n    fillMatrixColumn(\n        i + 1,\n        iMax,\n        cluster,\n        matrix,\n        backtrackMatrix,\n        sums,\n        sumsOfSquares\n    );\n}\n\n/**\n * Initializes the main matrices used in Ckmeans and kicks\n * off the divide and conquer cluster computation strategy\n *\n * @private\n * @param {Array<number>} data sorted array of values\n * @param {Array<Array<number>>} matrix\n * @param {Array<Array<number>>} backtrackMatrix\n */\nfunction fillMatrices(data, matrix, backtrackMatrix) {\n    var nValues = matrix[0].length;\n\n    // Shift values by the median to improve numeric stability\n    var shift = data[Math.floor(nValues / 2)];\n\n    // Cumulative sum and cumulative sum of squares for all values in data array\n    var sums = [];\n    var sumsOfSquares = [];\n\n    // Initialize first column in matrix & backtrackMatrix\n    for (var i = 0, shiftedValue = (void 0); i < nValues; ++i) {\n        shiftedValue = data[i] - shift;\n        if (i === 0) {\n            sums.push(shiftedValue);\n            sumsOfSquares.push(shiftedValue * shiftedValue);\n        } else {\n            sums.push(sums[i - 1] + shiftedValue);\n            sumsOfSquares.push(\n                sumsOfSquares[i - 1] + shiftedValue * shiftedValue\n            );\n        }\n\n        // Initialize for cluster = 0\n        matrix[0][i] = ssq(0, i, sums, sumsOfSquares);\n        backtrackMatrix[0][i] = 0;\n    }\n\n    // Initialize the rest of the columns\n    var iMin;\n    for (var cluster = 1; cluster < matrix.length; ++cluster) {\n        if (cluster < matrix.length - 1) {\n            iMin = cluster;\n        } else {\n            // No need to compute matrix[K-1][0] ... matrix[K-1][N-2]\n            iMin = nValues - 1;\n        }\n\n        fillMatrixColumn(\n            iMin,\n            nValues - 1,\n            cluster,\n            matrix,\n            backtrackMatrix,\n            sums,\n            sumsOfSquares\n        );\n    }\n}\n\n/**\n * Ckmeans clustering is an improvement on heuristic-based clustering\n * approaches like Jenks. The algorithm was developed in\n * [Haizhou Wang and Mingzhou Song](http://journal.r-project.org/archive/2011-2/RJournal_2011-2_Wang+Song.pdf)\n * as a [dynamic programming](https://en.wikipedia.org/wiki/Dynamic_programming) approach\n * to the problem of clustering numeric data into groups with the least\n * within-group sum-of-squared-deviations.\n *\n * Minimizing the difference within groups - what Wang & Song refer to as\n * `withinss`, or within sum-of-squares, means that groups are optimally\n * homogenous within and the data is split into representative groups.\n * This is very useful for visualization, where you may want to represent\n * a continuous variable in discrete color or style groups. This function\n * can provide groups that emphasize differences between data.\n *\n * Being a dynamic approach, this algorithm is based on two matrices that\n * store incrementally-computed values for squared deviations and backtracking\n * indexes.\n *\n * This implementation is based on Ckmeans 3.4.6, which introduced a new divide\n * and conquer approach that improved runtime from O(kn^2) to O(kn log(n)).\n *\n * Unlike the [original implementation](https://cran.r-project.org/web/packages/Ckmeans.1d.dp/index.html),\n * this implementation does not include any code to automatically determine\n * the optimal number of clusters: this information needs to be explicitly\n * provided.\n *\n * ### References\n * _Ckmeans.1d.dp: Optimal k-means Clustering in One Dimension by Dynamic\n * Programming_ Haizhou Wang and Mingzhou Song ISSN 2073-4859\n *\n * from The R Journal Vol. 3/2, December 2011\n * @param {Array<number>} x input data, as an array of number values\n * @param {number} nClusters number of desired classes. This cannot be\n * greater than the number of values in the data array.\n * @returns {Array<Array<number>>} clustered input\n * @throws {Error} if the number of requested clusters is higher than the size of the data\n * @example\n * ckmeans([-1, 2, -1, 2, 4, 5, 6, -1, 2, -1], 3);\n * // The input, clustered into groups of similar numbers.\n * //= [[-1, -1, -1, -1], [2, 2, 2], [4, 5, 6]]);\n */\nfunction ckmeans(x, nClusters) {\n    if (nClusters > x.length) {\n        throw new Error(\n            \"cannot generate more classes than there are data values\"\n        );\n    }\n\n    var sorted = numericSort(x);\n    // we'll use this as the maximum number of clusters\n    var uniqueCount = uniqueCountSorted(sorted);\n\n    // if all of the input values are identical, there's one cluster\n    // with all of the input in it.\n    if (uniqueCount === 1) {\n        return [sorted];\n    }\n\n    // named 'S' originally\n    var matrix = makeMatrix(nClusters, sorted.length);\n    // named 'J' originally\n    var backtrackMatrix = makeMatrix(nClusters, sorted.length);\n\n    // This is a dynamic programming way to solve the problem of minimizing\n    // within-cluster sum of squares. It's similar to linear regression\n    // in this way, and this calculation incrementally computes the\n    // sum of squares that are later read.\n    fillMatrices(sorted, matrix, backtrackMatrix);\n\n    // The real work of Ckmeans clustering happens in the matrix generation:\n    // the generated matrices encode all possible clustering combinations, and\n    // once they're generated we can solve for the best clustering groups\n    // very quickly.\n    var clusters = [];\n    var clusterRight = backtrackMatrix[0].length - 1;\n\n    // Backtrack the clusters from the dynamic programming matrix. This\n    // starts at the bottom-right corner of the matrix (if the top-left is 0, 0),\n    // and moves the cluster target with the loop.\n    for (var cluster = backtrackMatrix.length - 1; cluster >= 0; cluster--) {\n        var clusterLeft = backtrackMatrix[cluster][clusterRight];\n\n        // fill the cluster from the sorted input by taking a slice of the\n        // array. the backtrack matrix makes this easy - it stores the\n        // indexes where the cluster should start and end.\n        clusters[cluster] = sorted.slice(clusterLeft, clusterRight + 1);\n\n        if (cluster > 0) {\n            clusterRight = clusterLeft - 1;\n        }\n    }\n\n    return clusters;\n}\n\n/*\n * Pull Breaks Values for Jenks\n *\n * the second part of the jenks recipe: take the calculated matrices\n * and derive an array of n breaks.\n *\n * @private\n */\nfunction jenksBreaks(data, lowerClassLimits, nClasses) {\n    var k = data.length;\n    var kclass = [];\n    var countNum = nClasses;\n\n    // the calculation of classes will never include the upper\n    // bound, so we need to explicitly set it\n    kclass[nClasses] = data[data.length - 1];\n\n    // the lowerClassLimits matrix is used as indices into itself\n    // here: the `k` variable is reused in each iteration.\n    while (countNum > 0) {\n        kclass[countNum - 1] = data[lowerClassLimits[k][countNum] - 1];\n        k = lowerClassLimits[k][countNum] - 1;\n        countNum--;\n    }\n\n    return kclass;\n}\n\n/*\n * Compute Matrices for Jenks\n *\n * Compute the matrices required for Jenks breaks. These matrices\n * can be used for any classing of data with `classes <= nClasses`\n *\n * @private\n */\nfunction jenksMatrices(data, nClasses) {\n    // in the original implementation, these matrices are referred to\n    // as `LC` and `OP`\n    //\n    // * lowerClassLimits (LC): optimal lower class limits\n    // * varianceCombinations (OP): optimal variance combinations for all classes\n    var lowerClassLimits = [];\n    var varianceCombinations = [];\n    // loop counters\n    var i;\n    var j;\n    // the variance, as computed at each step in the calculation\n    var variance = 0;\n\n    // Initialize and fill each matrix with zeroes\n    for (i = 0; i < data.length + 1; i++) {\n        var tmp1 = [];\n        var tmp2 = [];\n        // despite these arrays having the same values, we need\n        // to keep them separate so that changing one does not change\n        // the other\n        for (j = 0; j < nClasses + 1; j++) {\n            tmp1.push(0);\n            tmp2.push(0);\n        }\n        lowerClassLimits.push(tmp1);\n        varianceCombinations.push(tmp2);\n    }\n\n    for (i = 1; i < nClasses + 1; i++) {\n        lowerClassLimits[1][i] = 1;\n        varianceCombinations[1][i] = 0;\n        // in the original implementation, 9999999 is used but\n        // since Javascript has `Infinity`, we use that.\n        for (j = 2; j < data.length + 1; j++) {\n            varianceCombinations[j][i] = Number.POSITIVE_INFINITY;\n        }\n    }\n\n    for (var l = 2; l < data.length + 1; l++) {\n        // `SZ` originally. this is the sum of the values seen thus\n        // far when calculating variance.\n        var sum = 0;\n        // `ZSQ` originally. the sum of squares of values seen\n        // thus far\n        var sumSquares = 0;\n        // `WT` originally. This is the number of\n        var w = 0;\n        // `IV` originally\n        var i4 = 0;\n\n        // in several instances, you could say `Math.pow(x, 2)`\n        // instead of `x * x`, but this is slower in some browsers\n        // introduces an unnecessary concept.\n        for (var m = 1; m < l + 1; m++) {\n            // `III` originally\n            var lowerClassLimit = l - m + 1;\n            var val = data[lowerClassLimit - 1];\n\n            // here we're estimating variance for each potential classing\n            // of the data, for each potential number of classes. `w`\n            // is the number of data points considered so far.\n            w++;\n\n            // increase the current sum and sum-of-squares\n            sum += val;\n            sumSquares += val * val;\n\n            // the variance at this point in the sequence is the difference\n            // between the sum of squares and the total x 2, over the number\n            // of samples.\n            variance = sumSquares - (sum * sum) / w;\n\n            i4 = lowerClassLimit - 1;\n\n            if (i4 !== 0) {\n                for (j = 2; j < nClasses + 1; j++) {\n                    // if adding this element to an existing class\n                    // will increase its variance beyond the limit, break\n                    // the class at this point, setting the `lowerClassLimit`\n                    // at this point.\n                    if (\n                        varianceCombinations[l][j] >=\n                        variance + varianceCombinations[i4][j - 1]\n                    ) {\n                        lowerClassLimits[l][j] = lowerClassLimit;\n                        varianceCombinations[l][j] =\n                            variance + varianceCombinations[i4][j - 1];\n                    }\n                }\n            }\n        }\n\n        lowerClassLimits[l][1] = 1;\n        varianceCombinations[l][1] = variance;\n    }\n\n    // return the two matrices. for just providing breaks, only\n    // `lowerClassLimits` is needed, but variances can be useful to\n    // evaluate goodness of fit.\n    return {\n        lowerClassLimits: lowerClassLimits,\n        varianceCombinations: varianceCombinations\n    };\n}\n\n/**\n * The **[jenks natural breaks optimization](http://en.wikipedia.org/wiki/Jenks_natural_breaks_optimization)**\n * is an algorithm commonly used in cartography and visualization to decide\n * upon groupings of data values that minimize variance within themselves\n * and maximize variation between themselves.\n *\n * For instance, cartographers often use jenks in order to choose which\n * values are assigned to which colors in a [choropleth](https://en.wikipedia.org/wiki/Choropleth_map)\n * map.\n *\n * @param {Array<number>} data input data, as an array of number values\n * @param {number} nClasses number of desired classes\n * @returns {Array<number>} array of class break positions\n * // split data into 3 break points\n * jenks([1, 2, 4, 5, 7, 9, 10, 20], 3) // = [1, 7, 20, 20]\n */\nfunction jenks(data, nClasses) {\n    if (nClasses > data.length) {\n        return null;\n    }\n\n    // sort data in numerical order, since this is expected\n    // by the matrices function\n    data = data.slice().sort(function (a, b) {\n        return a - b;\n    });\n\n    // get our basic matrices\n    var matrices = jenksMatrices(data, nClasses);\n    // we only need lower class limits here\n    var lowerClassLimits = matrices.lowerClassLimits;\n\n    // extract nClasses out of the computed matrices\n    return jenksBreaks(data, lowerClassLimits, nClasses);\n}\n\n/**\n * Given an array of x, this will find the extent of the\n * x and return an array of breaks that can be used\n * to categorize the x into a number of classes. The\n * returned array will always be 1 longer than the number of\n * classes because it includes the minimum value.\n *\n * @param {Array<number>} x an array of number values\n * @param {number} nClasses number of desired classes\n * @returns {Array<number>} array of class break positions\n * @example\n * equalIntervalBreaks([1, 2, 3, 4, 5, 6], 4); // => [1, 2.25, 3.5, 4.75, 6]\n */\nfunction equalIntervalBreaks(x, nClasses) {\n    if (x.length < 2) {\n        return x;\n    }\n\n    var theMin = min(x);\n    var theMax = max(x);\n\n    // the first break will always be the minimum value\n    // in the xset\n    var breaks = [theMin];\n\n    // The size of each break is the full range of the x\n    // divided by the number of classes requested\n    var breakSize = (theMax - theMin) / nClasses;\n\n    // In the case of nClasses = 1, this loop won't run\n    // and the returned breaks will be [min, max]\n    for (var i = 1; i < nClasses; i++) {\n        breaks.push(breaks[0] + breakSize * i);\n    }\n\n    // the last break will always be the\n    // maximum.\n    breaks.push(theMax);\n\n    return breaks;\n}\n\n/**\n * [Sample covariance](https://en.wikipedia.org/wiki/Sample_mean_and_covariance) of two datasets:\n * how much do the two datasets move together?\n * x and y are two datasets, represented as arrays of numbers.\n *\n * @param {Array<number>} x a sample of two or more data points\n * @param {Array<number>} y a sample of two or more data points\n * @throws {Error} if x and y do not have equal lengths\n * @throws {Error} if x or y have length of one or less\n * @returns {number} sample covariance\n * @example\n * sampleCovariance([1, 2, 3, 4, 5, 6], [6, 5, 4, 3, 2, 1]); // => -3.5\n */\nfunction sampleCovariance(x, y) {\n    // The two datasets must have the same length which must be more than 1\n    if (x.length !== y.length) {\n        throw new Error(\"sampleCovariance requires samples with equal lengths\");\n    }\n\n    if (x.length < 2) {\n        throw new Error(\n            \"sampleCovariance requires at least two data points in each sample\"\n        );\n    }\n\n    // determine the mean of each dataset so that we can judge each\n    // value of the dataset fairly as the difference from the mean. this\n    // way, if one dataset is [1, 2, 3] and [2, 3, 4], their covariance\n    // does not suffer because of the difference in absolute values\n    var xmean = mean(x);\n    var ymean = mean(y);\n    var sum = 0;\n\n    // for each pair of values, the covariance increases when their\n    // difference from the mean is associated - if both are well above\n    // or if both are well below\n    // the mean, the covariance increases significantly.\n    for (var i = 0; i < x.length; i++) {\n        sum += (x[i] - xmean) * (y[i] - ymean);\n    }\n\n    // this is Bessels' Correction: an adjustment made to sample statistics\n    // that allows for the reduced degree of freedom entailed in calculating\n    // values from samples rather than complete populations.\n    var besselsCorrection = x.length - 1;\n\n    // the covariance is weighted by the length of the datasets.\n    return sum / besselsCorrection;\n}\n\n/**\n * The [sample variance](https://en.wikipedia.org/wiki/Variance#Sample_variance)\n * is the sum of squared deviations from the mean. The sample variance\n * is distinguished from the variance by the usage of [Bessel's Correction](https://en.wikipedia.org/wiki/Bessel's_correction):\n * instead of dividing the sum of squared deviations by the length of the input,\n * it is divided by the length minus one. This corrects the bias in estimating\n * a value from a set that you don't know if full.\n *\n * References:\n * * [Wolfram MathWorld on Sample Variance](http://mathworld.wolfram.com/SampleVariance.html)\n *\n * @param {Array<number>} x a sample of two or more data points\n * @throws {Error} if the length of x is less than 2\n * @return {number} sample variance\n * @example\n * sampleVariance([1, 2, 3, 4, 5]); // => 2.5\n */\nfunction sampleVariance(x) {\n    if (x.length < 2) {\n        throw new Error(\"sampleVariance requires at least two data points\");\n    }\n\n    var sumSquaredDeviationsValue = sumNthPowerDeviations(x, 2);\n\n    // this is Bessels' Correction: an adjustment made to sample statistics\n    // that allows for the reduced degree of freedom entailed in calculating\n    // values from samples rather than complete populations.\n    var besselsCorrection = x.length - 1;\n\n    // Find the mean value of that list\n    return sumSquaredDeviationsValue / besselsCorrection;\n}\n\n/**\n * The [sample standard deviation](http://en.wikipedia.org/wiki/Standard_deviation#Sample_standard_deviation)\n * is the square root of the sample variance.\n *\n * @param {Array<number>} x input array\n * @returns {number} sample standard deviation\n * @example\n * sampleStandardDeviation([2, 4, 4, 4, 5, 5, 7, 9]).toFixed(2);\n * // => '2.14'\n */\nfunction sampleStandardDeviation(x) {\n    var sampleVarianceX = sampleVariance(x);\n    return Math.sqrt(sampleVarianceX);\n}\n\n/**\n * The [correlation](http://en.wikipedia.org/wiki/Correlation_and_dependence) is\n * a measure of how correlated two datasets are, between -1 and 1\n *\n * @param {Array<number>} x first input\n * @param {Array<number>} y second input\n * @returns {number} sample correlation\n * @example\n * sampleCorrelation([1, 2, 3, 4, 5, 6], [2, 2, 3, 4, 5, 60]).toFixed(2);\n * // => '0.69'\n */\nfunction sampleCorrelation(x, y) {\n    var cov = sampleCovariance(x, y);\n    var xstd = sampleStandardDeviation(x);\n    var ystd = sampleStandardDeviation(y);\n\n    return cov / xstd / ystd;\n}\n\n/**\n * The [rank correlation](https://en.wikipedia.org/wiki/Rank_correlation) is\n * a measure of the strength of monotonic relationship between two arrays\n *\n * @param {Array<number>} x first input\n * @param {Array<number>} y second input\n * @returns {number} sample rank correlation\n */\nfunction sampleRankCorrelation(x, y) {\n    var xIndexes = x\n        .map(function (value, index) { return [value, index]; })\n        .sort(function (a, b) { return a[0] - b[0]; })\n        .map(function (pair) { return pair[1]; });\n    var yIndexes = y\n        .map(function (value, index) { return [value, index]; })\n        .sort(function (a, b) { return a[0] - b[0]; })\n        .map(function (pair) { return pair[1]; });\n\n    // At this step, we have an array of indexes\n    // that map from sorted numbers to their original indexes. We reverse\n    // that so that it is an array of the sorted destination index.\n    var xRanks = Array(xIndexes.length);\n    var yRanks = Array(xIndexes.length);\n    for (var i = 0; i < xIndexes.length; i++) {\n        xRanks[xIndexes[i]] = i;\n        yRanks[yIndexes[i]] = i;\n    }\n\n    return sampleCorrelation(xRanks, yRanks);\n}\n\n/**\n * [Skewness](http://en.wikipedia.org/wiki/Skewness) is\n * a measure of the extent to which a probability distribution of a\n * real-valued random variable \"leans\" to one side of the mean.\n * The skewness value can be positive or negative, or even undefined.\n *\n * Implementation is based on the adjusted Fisher-Pearson standardized\n * moment coefficient, which is the version found in Excel and several\n * statistical packages including Minitab, SAS and SPSS.\n *\n * @since 4.1.0\n * @param {Array<number>} x a sample of 3 or more data points\n * @returns {number} sample skewness\n * @throws {Error} if x has length less than 3\n * @example\n * sampleSkewness([2, 4, 6, 3, 1]); // => 0.590128656384365\n */\nfunction sampleSkewness(x) {\n    if (x.length < 3) {\n        throw new Error(\"sampleSkewness requires at least three data points\");\n    }\n\n    var meanValue = mean(x);\n    var tempValue;\n    var sumSquaredDeviations = 0;\n    var sumCubedDeviations = 0;\n\n    for (var i = 0; i < x.length; i++) {\n        tempValue = x[i] - meanValue;\n        sumSquaredDeviations += tempValue * tempValue;\n        sumCubedDeviations += tempValue * tempValue * tempValue;\n    }\n\n    // this is Bessels' Correction: an adjustment made to sample statistics\n    // that allows for the reduced degree of freedom entailed in calculating\n    // values from samples rather than complete populations.\n    var besselsCorrection = x.length - 1;\n\n    // Find the mean value of that list\n    var theSampleStandardDeviation = Math.sqrt(\n        sumSquaredDeviations / besselsCorrection\n    );\n\n    var n = x.length;\n    var cubedS = Math.pow(theSampleStandardDeviation, 3);\n\n    return (n * sumCubedDeviations) / ((n - 1) * (n - 2) * cubedS);\n}\n\n/**\n * [Kurtosis](http://en.wikipedia.org/wiki/Kurtosis) is\n * a measure of the heaviness of a distribution's tails relative to its\n * variance. The kurtosis value can be positive or negative, or even undefined.\n *\n * Implementation is based on Fisher's excess kurtosis definition and uses\n * unbiased moment estimators. This is the version found in Excel and available\n * in several statistical packages, including SAS and SciPy.\n *\n * @param {Array<number>} x a sample of 4 or more data points\n * @returns {number} sample kurtosis\n * @throws {Error} if x has length less than 4\n * @example\n * sampleKurtosis([1, 2, 2, 3, 5]); // => 1.4555765595463122\n */\nfunction sampleKurtosis(x) {\n    var n = x.length;\n\n    if (n < 4) {\n        throw new Error(\"sampleKurtosis requires at least four data points\");\n    }\n\n    var meanValue = mean(x);\n    var tempValue;\n    var secondCentralMoment = 0;\n    var fourthCentralMoment = 0;\n\n    for (var i = 0; i < n; i++) {\n        tempValue = x[i] - meanValue;\n        secondCentralMoment += tempValue * tempValue;\n        fourthCentralMoment += tempValue * tempValue * tempValue * tempValue;\n    }\n\n    return (\n        ((n - 1) / ((n - 2) * (n - 3))) *\n        ((n * (n + 1) * fourthCentralMoment) /\n            (secondCentralMoment * secondCentralMoment) -\n            3 * (n - 1))\n    );\n}\n\n/**\n * Implementation of [Heap's Algorithm](https://en.wikipedia.org/wiki/Heap%27s_algorithm)\n * for generating permutations.\n *\n * @param {Array} elements any type of data\n * @returns {Array<Array>} array of permutations\n */\nfunction permutationsHeap(elements) {\n    var indexes = new Array(elements.length);\n    var permutations = [elements.slice()];\n\n    for (var i = 0; i < elements.length; i++) {\n        indexes[i] = 0;\n    }\n\n    for (var i$1 = 0; i$1 < elements.length; ) {\n        if (indexes[i$1] < i$1) {\n            // At odd indexes, swap from indexes[i] instead\n            // of from the beginning of the array\n            var swapFrom = 0;\n            if (i$1 % 2 !== 0) {\n                swapFrom = indexes[i$1];\n            }\n\n            // swap between swapFrom and i, using\n            // a temporary variable as storage.\n            var temp = elements[swapFrom];\n            elements[swapFrom] = elements[i$1];\n            elements[i$1] = temp;\n\n            permutations.push(elements.slice());\n            indexes[i$1]++;\n            i$1 = 0;\n        } else {\n            indexes[i$1] = 0;\n            i$1++;\n        }\n    }\n\n    return permutations;\n}\n\n/**\n * Implementation of Combinations\n * Combinations are unique subsets of a collection - in this case, k x from a collection at a time.\n * https://en.wikipedia.org/wiki/Combination\n * @param {Array} x any type of data\n * @param {int} k the number of objects in each group (without replacement)\n * @returns {Array<Array>} array of permutations\n * @example\n * combinations([1, 2, 3], 2); // => [[1,2], [1,3], [2,3]]\n */\n\nfunction combinations(x, k) {\n    var i;\n    var subI;\n    var combinationList = [];\n    var subsetCombinations;\n    var next;\n\n    for (i = 0; i < x.length; i++) {\n        if (k === 1) {\n            combinationList.push([x[i]]);\n        } else {\n            subsetCombinations = combinations(x.slice(i + 1, x.length), k - 1);\n            for (subI = 0; subI < subsetCombinations.length; subI++) {\n                next = subsetCombinations[subI];\n                next.unshift(x[i]);\n                combinationList.push(next);\n            }\n        }\n    }\n    return combinationList;\n}\n\n/**\n * Implementation of [Combinations](https://en.wikipedia.org/wiki/Combination) with replacement\n * Combinations are unique subsets of a collection - in this case, k x from a collection at a time.\n * 'With replacement' means that a given element can be chosen multiple times.\n * Unlike permutation, order doesn't matter for combinations.\n *\n * @param {Array} x any type of data\n * @param {int} k the number of objects in each group (without replacement)\n * @returns {Array<Array>} array of permutations\n * @example\n * combinationsReplacement([1, 2], 2); // => [[1, 1], [1, 2], [2, 2]]\n */\nfunction combinationsReplacement(x, k) {\n    var combinationList = [];\n\n    for (var i = 0; i < x.length; i++) {\n        if (k === 1) {\n            // If we're requested to find only one element, we don't need\n            // to recurse: just push `x[i]` onto the list of combinations.\n            combinationList.push([x[i]]);\n        } else {\n            // Otherwise, recursively find combinations, given `k - 1`. Note that\n            // we request `k - 1`, so if you were looking for k=3 combinations, we're\n            // requesting k=2. This -1 gets reversed in the for loop right after this\n            // code, since we concatenate `x[i]` onto the selected combinations,\n            // bringing `k` back up to your requested level.\n            // This recursion may go many levels deep, since it only stops once\n            // k=1.\n            var subsetCombinations = combinationsReplacement(\n                x.slice(i, x.length),\n                k - 1\n            );\n\n            for (var j = 0; j < subsetCombinations.length; j++) {\n                combinationList.push([x[i]].concat(subsetCombinations[j]));\n            }\n        }\n    }\n\n    return combinationList;\n}\n\n/**\n * When adding a new value to a list, one does not have to necessary\n * recompute the mean of the list in linear time. They can instead use\n * this function to compute the new mean by providing the current mean,\n * the number of elements in the list that produced it and the new\n * value to add.\n *\n * @since 2.5.0\n * @param {number} mean current mean\n * @param {number} n number of items in the list\n * @param {number} newValue the added value\n * @returns {number} the new mean\n *\n * @example\n * addToMean(14, 5, 53); // => 20.5\n */\nfunction addToMean(mean, n, newValue) {\n    return mean + (newValue - mean) / (n + 1);\n}\n\n/**\n * When combining two lists of values for which one already knows the means,\n * one does not have to necessary recompute the mean of the combined lists in\n * linear time. They can instead use this function to compute the combined\n * mean by providing the mean & number of values of the first list and the mean\n * & number of values of the second list.\n *\n * @since 3.0.0\n * @param {number} mean1 mean of the first list\n * @param {number} n1 number of items in the first list\n * @param {number} mean2 mean of the second list\n * @param {number} n2 number of items in the second list\n * @returns {number} the combined mean\n *\n * @example\n * combineMeans(5, 3, 4, 3); // => 4.5\n */\nfunction combineMeans(mean1, n1, mean2, n2) {\n    return (mean1 * n1 + mean2 * n2) / (n1 + n2);\n}\n\n/**\n * When combining two lists of values for which one already knows the variances,\n * one does not have to necessary recompute the variance of the combined lists\n * in linear time. They can instead use this function to compute the combined\n * variance by providing the variance, mean & number of values of the first list\n * and the variance, mean & number of values of the second list.\n *\n * @since 3.0.0\n * @param {number} variance1 variance of the first list\n * @param {number} mean1 mean of the first list\n * @param {number} n1 number of items in the first list\n * @param {number} variance2 variance of the second list\n * @param {number} mean2 mean of the second list\n * @param {number} n2 number of items in the second list\n * @returns {number} the combined mean\n *\n * @example\n * combineVariances(14 / 3, 5, 3, 8 / 3, 4, 3); // => 47 / 12\n */\nfunction combineVariances(variance1, mean1, n1, variance2, mean2, n2) {\n    var newMean = combineMeans(mean1, n1, mean2, n2);\n\n    return (\n        (n1 * (variance1 + Math.pow(mean1 - newMean, 2)) +\n            n2 * (variance2 + Math.pow(mean2 - newMean, 2))) /\n        (n1 + n2)\n    );\n}\n\n/**\n * The [Geometric Mean](https://en.wikipedia.org/wiki/Geometric_mean) is\n * a mean function that is more useful for numbers in different\n * ranges.\n *\n * This is the nth root of the input numbers multiplied by each other.\n *\n * The geometric mean is often useful for\n * **[proportional growth](https://en.wikipedia.org/wiki/Geometric_mean#Proportional_growth)**: given\n * growth rates for multiple years, like _80%, 16.66% and 42.85%_, a simple\n * mean will incorrectly estimate an average growth rate, whereas a geometric\n * mean will correctly estimate a growth rate that, over those years,\n * will yield the same end value.\n *\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n * @param {Array<number>} x sample of one or more data points\n * @returns {number} geometric mean\n * @throws {Error} if x is empty\n * @throws {Error} if x contains a negative number\n * @example\n * var growthRates = [1.80, 1.166666, 1.428571];\n * var averageGrowth = ss.geometricMean(growthRates);\n * var averageGrowthRates = [averageGrowth, averageGrowth, averageGrowth];\n * var startingValue = 10;\n * var startingValueMean = 10;\n * growthRates.forEach(function(rate) {\n *   startingValue *= rate;\n * });\n * averageGrowthRates.forEach(function(rate) {\n *   startingValueMean *= rate;\n * });\n * startingValueMean === startingValue;\n */\nfunction geometricMean(x) {\n    if (x.length === 0) {\n        throw new Error(\"geometricMean requires at least one data point\");\n    }\n\n    // the starting value.\n    var value = 1;\n\n    for (var i = 0; i < x.length; i++) {\n        // the geometric mean is only valid for positive numbers\n        if (x[i] < 0) {\n            throw new Error(\n                \"geometricMean requires only non-negative numbers as input\"\n            );\n        }\n\n        // repeatedly multiply the value by each number\n        value *= x[i];\n    }\n\n    return Math.pow(value, 1 / x.length);\n}\n\n/**\n * The [log average](https://en.wikipedia.org/wiki/https://en.wikipedia.org/wiki/Geometric_mean#Relationship_with_logarithms)\n * is an equivalent way of computing the geometric mean of an array suitable for large or small products.\n *\n * It's found by calculating the average logarithm of the elements and exponentiating.\n *\n * @param {Array<number>} x sample of one or more data points\n * @returns {number} geometric mean\n * @throws {Error} if x is empty\n * @throws {Error} if x contains a negative number\n */\nfunction logAverage(x) {\n    if (x.length === 0) {\n        throw new Error(\"logAverage requires at least one data point\");\n    }\n\n    var value = 0;\n    for (var i = 0; i < x.length; i++) {\n        if (x[i] < 0) {\n            throw new Error(\n                \"logAverage requires only non-negative numbers as input\"\n            );\n        }\n        value += Math.log(x[i]);\n    }\n\n    return Math.exp(value / x.length);\n}\n\n/**\n * The [Harmonic Mean](https://en.wikipedia.org/wiki/Harmonic_mean) is\n * a mean function typically used to find the average of rates.\n * This mean is calculated by taking the reciprocal of the arithmetic mean\n * of the reciprocals of the input numbers.\n *\n * This is a [measure of central tendency](https://en.wikipedia.org/wiki/Central_tendency):\n * a method of finding a typical or central value of a set of numbers.\n *\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n * @param {Array<number>} x sample of one or more data points\n * @returns {number} harmonic mean\n * @throws {Error} if x is empty\n * @throws {Error} if x contains a negative number\n * @example\n * harmonicMean([2, 3]).toFixed(2) // => '2.40'\n */\nfunction harmonicMean(x) {\n    if (x.length === 0) {\n        throw new Error(\"harmonicMean requires at least one data point\");\n    }\n\n    var reciprocalSum = 0;\n\n    for (var i = 0; i < x.length; i++) {\n        // the harmonic mean is only valid for positive numbers\n        if (x[i] <= 0) {\n            throw new Error(\n                \"harmonicMean requires only positive numbers as input\"\n            );\n        }\n\n        reciprocalSum += 1 / x[i];\n    }\n\n    // divide n by the reciprocal sum\n    return x.length / reciprocalSum;\n}\n\n/**\n * The mean, _also known as average_,\n * is the sum of all values over the number of values.\n * This is a [measure of central tendency](https://en.wikipedia.org/wiki/Central_tendency):\n * a method of finding a typical or central value of a set of numbers.\n *\n * The simple mean uses the successive addition method internally\n * to calculate it's result. Errors in floating-point addition are\n * not accounted for, so if precision is required, the standard {@link mean}\n * method should be used instead.\n *\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n *\n * @param {Array<number>} x sample of one or more data points\n * @throws {Error} if the length of x is less than one\n * @returns {number} mean\n * @example\n * mean([0, 10]); // => 5\n */\nfunction meanSimple(x) {\n    if (x.length === 0) {\n        throw new Error(\"meanSimple requires at least one data point\");\n    }\n\n    return sumSimple(x) / x.length;\n}\n\n/**\n * The [median](http://en.wikipedia.org/wiki/Median) is\n * the middle number of a list. This is often a good indicator of 'the middle'\n * when there are outliers that skew the `mean()` value.\n * This is a [measure of central tendency](https://en.wikipedia.org/wiki/Central_tendency):\n * a method of finding a typical or central value of a set of numbers.\n *\n * The median isn't necessarily one of the elements in the list: the value\n * can be the average of two elements if the list has an even length\n * and the two central values are different.\n *\n * @param {Array<number>} sorted input\n * @returns {number} median value\n * @example\n * medianSorted([10, 2, 5, 100, 2, 1]); // => 52.5\n */\nfunction medianSorted(sorted) {\n    return quantileSorted(sorted, 0.5);\n}\n\n/**\n * When removing a value from a list, one does not have to necessary\n * recompute the mean of the list in linear time. They can instead use\n * this function to compute the new mean by providing the current mean,\n * the number of elements in the list that produced it and the value to remove.\n *\n * @since 3.0.0\n * @param {number} mean current mean\n * @param {number} n number of items in the list\n * @param {number} value the value to remove\n * @returns {number} the new mean\n *\n * @example\n * subtractFromMean(20.5, 6, 53); // => 14\n */\nfunction subtractFromMean(mean, n, value) {\n    return (mean * n - value) / (n - 1);\n}\n\n/**\n * The Root Mean Square (RMS) is\n * a mean function used as a measure of the magnitude of a set\n * of numbers, regardless of their sign.\n * This is the square root of the mean of the squares of the\n * input numbers.\n * This runs in `O(n)`, linear time, with respect to the length of the array.\n *\n * @param {Array<number>} x a sample of one or more data points\n * @returns {number} root mean square\n * @throws {Error} if x is empty\n * @example\n * rootMeanSquare([-1, 1, -1, 1]); // => 1\n */\nfunction rootMeanSquare(x) {\n    if (x.length === 0) {\n        throw new Error(\"rootMeanSquare requires at least one data point\");\n    }\n\n    var sumOfSquares = 0;\n    for (var i = 0; i < x.length; i++) {\n        sumOfSquares += Math.pow(x[i], 2);\n    }\n\n    return Math.sqrt(sumOfSquares / x.length);\n}\n\n/**\n * The`coefficient of variation`_ is the ratio of the standard deviation to the mean.\n * .._`coefficient of variation`: https://en.wikipedia.org/wiki/Coefficient_of_variation\n *\n *\n * @param {Array} x input\n * @returns {number} coefficient of variation\n * @example\n * coefficientOfVariation([1, 2, 3, 4]).toFixed(3); // => 0.516\n * coefficientOfVariation([1, 2, 3, 4, 5]).toFixed(3); // => 0.527\n * coefficientOfVariation([-1, 0, 1, 2, 3, 4]).toFixed(3); // => 1.247\n */\nfunction coefficientOfVariation(x) {\n    return sampleStandardDeviation(x) / mean(x);\n}\n\n/**\n * This is to compute [a one-sample t-test](https://en.wikipedia.org/wiki/Student%27s_t-test#One-sample_t-test), comparing the mean\n * of a sample to a known value, x.\n *\n * in this case, we're trying to determine whether the\n * population mean is equal to the value that we know, which is `x`\n * here. Usually the results here are used to look up a\n * [p-value](http://en.wikipedia.org/wiki/P-value), which, for\n * a certain level of significance, will let you determine that the\n * null hypothesis can or cannot be rejected.\n *\n * @param {Array<number>} x sample of one or more numbers\n * @param {number} expectedValue expected value of the population mean\n * @returns {number} value\n * @example\n * tTest([1, 2, 3, 4, 5, 6], 3.385).toFixed(2); // => '0.16'\n */\nfunction tTest(x, expectedValue) {\n    // The mean of the sample\n    var sampleMean = mean(x);\n\n    // The standard deviation of the sample\n    var sd = standardDeviation(x);\n\n    // Square root the length of the sample\n    var rootN = Math.sqrt(x.length);\n\n    // returning the t value\n    return (sampleMean - expectedValue) / (sd / rootN);\n}\n\n/**\n * This is to compute [two sample t-test](http://en.wikipedia.org/wiki/Student's_t-test).\n * Tests whether \"mean(X)-mean(Y) = difference\", (\n * in the most common case, we often have `difference == 0` to test if two samples\n * are likely to be taken from populations with the same mean value) with\n * no prior knowledge on standard deviations of both samples\n * other than the fact that they have the same standard deviation.\n *\n * Usually the results here are used to look up a\n * [p-value](http://en.wikipedia.org/wiki/P-value), which, for\n * a certain level of significance, will let you determine that the\n * null hypothesis can or cannot be rejected.\n *\n * `diff` can be omitted if it equals 0.\n *\n * [This is used to reject](https://en.wikipedia.org/wiki/Exclusion_of_the_null_hypothesis)\n * a null hypothesis that the two populations that have been sampled into\n * `sampleX` and `sampleY` are equal to each other.\n *\n * @param {Array<number>} sampleX a sample as an array of numbers\n * @param {Array<number>} sampleY a sample as an array of numbers\n * @param {number} [difference=0]\n * @returns {number|null} test result\n *\n * @example\n * tTestTwoSample([1, 2, 3, 4], [3, 4, 5, 6], 0); // => -2.1908902300206643\n */\nfunction tTestTwoSample(sampleX, sampleY, difference) {\n    var n = sampleX.length;\n    var m = sampleY.length;\n\n    // If either sample doesn't actually have any values, we can't\n    // compute this at all, so we return `null`.\n    if (!n || !m) {\n        return null;\n    }\n\n    // default difference (mu) is zero\n    if (!difference) {\n        difference = 0;\n    }\n\n    var meanX = mean(sampleX);\n    var meanY = mean(sampleY);\n    var sampleVarianceX = sampleVariance(sampleX);\n    var sampleVarianceY = sampleVariance(sampleY);\n\n    if (\n        typeof meanX === \"number\" &&\n        typeof meanY === \"number\" &&\n        typeof sampleVarianceX === \"number\" &&\n        typeof sampleVarianceY === \"number\"\n    ) {\n        var weightedVariance =\n            ((n - 1) * sampleVarianceX + (m - 1) * sampleVarianceY) /\n            (n + m - 2);\n\n        return (\n            (meanX - meanY - difference) /\n            Math.sqrt(weightedVariance * (1 / n + 1 / m))\n        );\n    }\n}\n\n/**\n * This function calculates the Wilcoxon rank sum statistic for the first sample\n * with respect to the second. The Wilcoxon rank sum test is a non-parametric\n * alternative to the t-test which is equivalent to the\n * [Mann-Whitney U test](https://en.wikipedia.org/wiki/Mann%E2%80%93Whitney_U_test).\n * The statistic is calculated by pooling all the observations together, ranking them,\n * and then summing the ranks associated with one of the samples. If this rank sum is\n * sufficiently large or small we reject the hypothesis that the two samples come\n * from the same distribution in favor of the alternative that one is shifted with\n * respect to the other.\n *\n * @param {Array<number>} sampleX a sample as an array of numbers\n * @param {Array<number>} sampleY a sample as an array of numbers\n * @returns {number} rank sum for sampleX\n *\n * @example\n * wilcoxonRankSum([1, 4, 8], [9, 12, 15]); // => 6\n */\nfunction wilcoxonRankSum(sampleX, sampleY) {\n    if (!sampleX.length || !sampleY.length) {\n        throw new Error(\"Neither sample can be empty\");\n    }\n\n    var pooledSamples = sampleX\n        .map(function (x) { return ({ label: \"x\", value: x }); })\n        .concat(sampleY.map(function (y) { return ({ label: \"y\", value: y }); }))\n        .sort(function (a, b) { return a.value - b.value; });\n\n    for (var rank = 0; rank < pooledSamples.length; rank++) {\n        pooledSamples[rank].rank = rank;\n    }\n\n    var tiedRanks = [pooledSamples[0].rank];\n    for (var i = 1; i < pooledSamples.length; i++) {\n        if (pooledSamples[i].value === pooledSamples[i - 1].value) {\n            tiedRanks.push(pooledSamples[i].rank);\n            if (i === pooledSamples.length - 1) {\n                replaceRanksInPlace(pooledSamples, tiedRanks);\n            }\n        } else if (tiedRanks.length > 1) {\n            replaceRanksInPlace(pooledSamples, tiedRanks);\n        } else {\n            tiedRanks = [pooledSamples[i].rank];\n        }\n    }\n\n    function replaceRanksInPlace(pooledSamples, tiedRanks) {\n        var average = (tiedRanks[0] + tiedRanks[tiedRanks.length - 1]) / 2;\n        for (var i = 0; i < tiedRanks.length; i++) {\n            pooledSamples[tiedRanks[i]].rank = average;\n        }\n    }\n\n    var rankSum = 0;\n\n    for (var i$1 = 0; i$1 < pooledSamples.length; i$1++) {\n        var sample = pooledSamples[i$1];\n        if (sample.label === \"x\") {\n            rankSum += sample.rank + 1;\n        }\n    }\n\n    return rankSum;\n}\n\n/**\n * [Bayesian Classifier](http://en.wikipedia.org/wiki/Naive_Bayes_classifier)\n *\n * This is a naïve bayesian classifier that takes\n * singly-nested objects.\n *\n * @class\n * @example\n * var bayes = new BayesianClassifier();\n * bayes.train({\n *   species: 'Cat'\n * }, 'animal');\n * var result = bayes.score({\n *   species: 'Cat'\n * })\n * // result\n * // {\n * //   animal: 1\n * // }\n */\nvar BayesianClassifier = function BayesianClassifier() {\n    // The number of items that are currently\n    // classified in the model\n    this.totalCount = 0;\n    // Every item classified in the model\n    this.data = {};\n};\n\n/**\n * Train the classifier with a new item, which has a single\n * dimension of Javascript literal keys and values.\n *\n * @param {Object} item an object with singly-deep properties\n * @param {string} category the category this item belongs to\n * @return {undefined} adds the item to the classifier\n */\nBayesianClassifier.prototype.train = function train (item, category) {\n    // If the data object doesn't have any values\n    // for this category, create a new object for it.\n    if (!this.data[category]) {\n        this.data[category] = {};\n    }\n\n    // Iterate through each key in the item.\n    for (var k in item) {\n        var v = item[k];\n        // Initialize the nested object `data[category][k][item[k]]`\n        // with an object of keys that equal 0.\n        if (this.data[category][k] === undefined) {\n            this.data[category][k] = {};\n        }\n        if (this.data[category][k][v] === undefined) {\n            this.data[category][k][v] = 0;\n        }\n\n        // And increment the key for this key/value combination.\n        this.data[category][k][v]++;\n    }\n\n    // Increment the number of items classified\n    this.totalCount++;\n};\n\n/**\n * Generate a score of how well this item matches all\n * possible categories based on its attributes\n *\n * @param {Object} item an item in the same format as with train\n * @returns {Object} of probabilities that this item belongs to a\n * given category.\n */\nBayesianClassifier.prototype.score = function score (item) {\n    // Initialize an empty array of odds per category.\n    var odds = {};\n    var category;\n    // Iterate through each key in the item,\n    // then iterate through each category that has been used\n    // in previous calls to `.train()`\n    for (var k in item) {\n        var v = item[k];\n        for (category in this.data) {\n            // Create an empty object for storing key - value combinations\n            // for this category.\n            odds[category] = {};\n\n            // If this item doesn't even have a property, it counts for nothing,\n            // but if it does have the property that we're looking for from\n            // the item to categorize, it counts based on how popular it is\n            // versus the whole population.\n            if (this.data[category][k]) {\n                odds[category][k + \"_\" + v] =\n                    (this.data[category][k][v] || 0) / this.totalCount;\n            } else {\n                odds[category][k + \"_\" + v] = 0;\n            }\n        }\n    }\n\n    // Set up a new object that will contain sums of these odds by category\n    var oddsSums = {};\n\n    for (category in odds) {\n        // Tally all of the odds for each category-combination pair -\n        // the non-existence of a category does not add anything to the\n        // score.\n        oddsSums[category] = 0;\n        for (var combination in odds[category]) {\n            oddsSums[category] += odds[category][combination];\n        }\n    }\n\n    return oddsSums;\n};\n\n/**\n * This is a single-layer [Perceptron Classifier](http://en.wikipedia.org/wiki/Perceptron) that takes\n * arrays of numbers and predicts whether they should be classified\n * as either 0 or 1 (negative or positive examples).\n * @class\n * @example\n * // Create the model\n * var p = new PerceptronModel();\n * // Train the model with input with a diagonal boundary.\n * for (var i = 0; i < 5; i++) {\n *     p.train([1, 1], 1);\n *     p.train([0, 1], 0);\n *     p.train([1, 0], 0);\n *     p.train([0, 0], 0);\n * }\n * p.predict([0, 0]); // 0\n * p.predict([0, 1]); // 0\n * p.predict([1, 0]); // 0\n * p.predict([1, 1]); // 1\n */\nvar PerceptronModel = function PerceptronModel() {\n    // The weights, or coefficients of the model;\n    // weights are only populated when training with data.\n    this.weights = [];\n    // The bias term, or intercept; it is also a weight but\n    // it's stored separately for convenience as it is always\n    // multiplied by one.\n    this.bias = 0;\n};\n/**\n * **Predict**: Use an array of features with the weight array and bias\n * to predict whether an example is labeled 0 or 1.\n *\n * @param {Array<number>} features an array of features as numbers\n * @returns {number} 1 if the score is over 0, otherwise 0\n */\nPerceptronModel.prototype.predict = function predict (features) {\n    // Only predict if previously trained\n    // on the same size feature array(s).\n    if (features.length !== this.weights.length) {\n        return null;\n    }\n\n    // Calculate the sum of features times weights,\n    // with the bias added (implicitly times one).\n    var score = 0;\n    for (var i = 0; i < this.weights.length; i++) {\n        score += this.weights[i] * features[i];\n    }\n    score += this.bias;\n\n    // Classify as 1 if the score is over 0, otherwise 0.\n    if (score > 0) {\n        return 1;\n    } else {\n        return 0;\n    }\n};\n\n/**\n * **Train** the classifier with a new example, which is\n * a numeric array of features and a 0 or 1 label.\n *\n * @param {Array<number>} features an array of features as numbers\n * @param {number} label either 0 or 1\n * @returns {PerceptronModel} this\n */\nPerceptronModel.prototype.train = function train (features, label) {\n    // Require that only labels of 0 or 1 are considered.\n    if (label !== 0 && label !== 1) {\n        return null;\n    }\n    // The length of the feature array determines\n    // the length of the weight array.\n    // The perceptron will continue learning as long as\n    // it keeps seeing feature arrays of the same length.\n    // When it sees a new data shape, it initializes.\n    if (features.length !== this.weights.length) {\n        this.weights = features;\n        this.bias = 1;\n    }\n    // Make a prediction based on current weights.\n    var prediction = this.predict(features);\n    // Update the weights if the prediction is wrong.\n    if (typeof prediction === \"number\" && prediction !== label) {\n        var gradient = label - prediction;\n        for (var i = 0; i < this.weights.length; i++) {\n            this.weights[i] += gradient * features[i];\n        }\n        this.bias += gradient;\n    }\n    return this;\n};\n\n/**\n * We use `ε`, epsilon, as a stopping criterion when we want to iterate\n * until we're \"close enough\". Epsilon is a very small number: for\n * simple statistics, that number is **0.0001**\n *\n * This is used in calculations like the binomialDistribution, in which\n * the process of finding a value is [iterative](https://en.wikipedia.org/wiki/Iterative_method):\n * it progresses until it is close enough.\n *\n * Below is an example of using epsilon in [gradient descent](https://en.wikipedia.org/wiki/Gradient_descent),\n * where we're trying to find a local minimum of a function's derivative,\n * given by the `fDerivative` method.\n *\n * @example\n * // From calculation, we expect that the local minimum occurs at x=9/4\n * var x_old = 0;\n * // The algorithm starts at x=6\n * var x_new = 6;\n * var stepSize = 0.01;\n *\n * function fDerivative(x) {\n *   return 4 * Math.pow(x, 3) - 9 * Math.pow(x, 2);\n * }\n *\n * // The loop runs until the difference between the previous\n * // value and the current value is smaller than epsilon - a rough\n * // meaure of 'close enough'\n * while (Math.abs(x_new - x_old) > ss.epsilon) {\n *   x_old = x_new;\n *   x_new = x_old - stepSize * fDerivative(x_old);\n * }\n *\n * console.log('Local minimum occurs at', x_new);\n */\nvar epsilon = 0.0001;\n\n/**\n * A [Factorial](https://en.wikipedia.org/wiki/Factorial), usually written n!, is the product of all positive\n * integers less than or equal to n. Often factorial is implemented\n * recursively, but this iterative approach is significantly faster\n * and simpler.\n *\n * @param {number} n input, must be an integer number 1 or greater\n * @returns {number} factorial: n!\n * @throws {Error} if n is less than 0 or not an integer\n * @example\n * factorial(5); // => 120\n */\nfunction factorial(n) {\n    // factorial is mathematically undefined for negative numbers\n    if (n < 0) {\n        throw new Error(\"factorial requires a non-negative value\");\n    }\n\n    if (Math.floor(n) !== n) {\n        throw new Error(\"factorial requires an integer input\");\n    }\n\n    // typically you'll expand the factorial function going down, like\n    // 5! = 5 * 4 * 3 * 2 * 1. This is going in the opposite direction,\n    // counting from 2 up to the number in question, and since anything\n    // multiplied by 1 is itself, the loop only needs to start at 2.\n    var accumulator = 1;\n    for (var i = 2; i <= n; i++) {\n        // for each number up to and including the number `n`, multiply\n        // the accumulator my that number.\n        accumulator *= i;\n    }\n    return accumulator;\n}\n\n/**\n * Compute the [gamma function](https://en.wikipedia.org/wiki/Gamma_function) of a value using Nemes' approximation.\n * The gamma of n is equivalent to (n-1)!, but unlike the factorial function, gamma is defined for all real n except zero\n * and negative integers (where NaN is returned). Note, the gamma function is also well-defined for complex numbers,\n * though this implementation currently does not handle complex numbers as input values.\n * Nemes' approximation is defined [here](https://arxiv.org/abs/1003.6020) as Theorem 2.2.\n * Negative values use [Euler's reflection formula](https://en.wikipedia.org/wiki/Gamma_function#Properties) for computation.\n *\n * @param {number} n Any real number except for zero and negative integers.\n * @returns {number} The gamma of the input value.\n *\n * @example\n * gamma(11.5); // 11899423.084037038\n * gamma(-11.5); // 2.29575810481609e-8\n * gamma(5); // 24\n */\nfunction gamma(n) {\n    if (Number.isInteger(n)) {\n        if (n <= 0) {\n            // gamma not defined for zero or negative integers\n            return Number.NaN;\n        } else {\n            // use factorial for integer inputs\n            return factorial(n - 1);\n        }\n    }\n\n    // Decrement n, because approximation is defined for n - 1\n    n--;\n\n    if (n < 0) {\n        // Use Euler's reflection formula for negative inputs\n        // see:  https://en.wikipedia.org/wiki/Gamma_function#Properties\n        return Math.PI / (Math.sin(Math.PI * -n) * gamma(-n));\n    } else {\n        // Nemes' expansion approximation\n        var seriesCoefficient =\n            Math.pow(n / Math.E, n) * Math.sqrt(2 * Math.PI * (n + 1 / 6));\n\n        var seriesDenom = n + 1 / 4;\n\n        var seriesExpansion =\n            1 +\n            1 / 144 / Math.pow(seriesDenom, 2) -\n            1 / 12960 / Math.pow(seriesDenom, 3) -\n            257 / 207360 / Math.pow(seriesDenom, 4) -\n            52 / 2612736 / Math.pow(seriesDenom, 5) +\n            5741173 / 9405849600 / Math.pow(seriesDenom, 6) +\n            37529 / 18811699200 / Math.pow(seriesDenom, 7);\n\n        return seriesCoefficient * seriesExpansion;\n    }\n}\n\n// Define series coefficients\nvar COEFFICIENTS = [\n    0.99999999999999709182, 57.156235665862923517, -59.597960355475491248,\n    14.136097974741747174, -0.49191381609762019978, 0.33994649984811888699e-4,\n    0.46523628927048575665e-4, -0.98374475304879564677e-4,\n    0.15808870322491248884e-3, -0.21026444172410488319e-3,\n    0.2174396181152126432e-3, -0.16431810653676389022e-3,\n    0.84418223983852743293e-4, -0.2619083840158140867e-4,\n    0.36899182659531622704e-5\n];\n\nvar g = 607 / 128;\nvar LOGSQRT2PI = Math.log(Math.sqrt(2 * Math.PI));\n\n/**\n * Compute the logarithm of the [gamma function](https://en.wikipedia.org/wiki/Gamma_function) of a value using Lanczos' approximation.\n * This function takes as input any real-value n greater than 0.\n * This function is useful for values of n too large for the normal gamma function (n > 165).\n * The code is based on Lanczo's Gamma approximation, defined [here](http://my.fit.edu/~gabdo/gamma.txt).\n *\n * @param {number} n Any real number greater than zero.\n * @returns {number} The logarithm of gamma of the input value.\n *\n * @example\n * gammaln(500); // 2605.1158503617335\n * gammaln(2.4); // 0.21685932244884043\n */\nfunction gammaln(n) {\n    // Return infinity if value not in domain\n    if (n <= 0) {\n        return Number.POSITIVE_INFINITY;\n    }\n\n    // Decrement n, because approximation is defined for n - 1\n    n--;\n\n    // Create series approximation\n    var a = COEFFICIENTS[0];\n\n    for (var i = 1; i < 15; i++) {\n        a += COEFFICIENTS[i] / (n + i);\n    }\n\n    var tmp = g + 0.5 + n;\n\n    // Return natural logarithm of gamma(n)\n    return LOGSQRT2PI + Math.log(a) - tmp + (n + 0.5) * Math.log(tmp);\n}\n\n/**\n * The [Bernoulli distribution](http://en.wikipedia.org/wiki/Bernoulli_distribution)\n * is the probability discrete\n * distribution of a random variable which takes value 1 with success\n * probability `p` and value 0 with failure\n * probability `q` = 1 - `p`. It can be used, for example, to represent the\n * toss of a coin, where \"1\" is defined to mean \"heads\" and \"0\" is defined\n * to mean \"tails\" (or vice versa). It is\n * a special case of a Binomial Distribution\n * where `n` = 1.\n *\n * @param {number} p input value, between 0 and 1 inclusive\n * @returns {number[]} values of bernoulli distribution at this point\n * @throws {Error} if p is outside 0 and 1\n * @example\n * bernoulliDistribution(0.3); // => [0.7, 0.3]\n */\nfunction bernoulliDistribution(p) /*: number[] */ {\n    // Check that `p` is a valid probability (0 ≤ p ≤ 1)\n    if (p < 0 || p > 1) {\n        throw new Error(\n            \"bernoulliDistribution requires probability to be between 0 and 1 inclusive\"\n        );\n    }\n\n    return [1 - p, p];\n}\n\n/**\n * The [Binomial Distribution](http://en.wikipedia.org/wiki/Binomial_distribution) is the discrete probability\n * distribution of the number of successes in a sequence of n independent yes/no experiments, each of which yields\n * success with probability `probability`. Such a success/failure experiment is also called a Bernoulli experiment or\n * Bernoulli trial; when trials = 1, the Binomial Distribution is a Bernoulli Distribution.\n *\n * @param {number} trials number of trials to simulate\n * @param {number} probability\n * @returns {number[]} output\n */\nfunction binomialDistribution(trials, probability) /*: ?number[] */ {\n    // Check that `p` is a valid probability (0 ≤ p ≤ 1),\n    // that `n` is an integer, strictly positive.\n    if (probability < 0 || probability > 1 || trials <= 0 || trials % 1 !== 0) {\n        return undefined;\n    }\n\n    // We initialize `x`, the random variable, and `accumulator`, an accumulator\n    // for the cumulative distribution function to 0. `distribution_functions`\n    // is the object we'll return with the `probability_of_x` and the\n    // `cumulativeProbability_of_x`, as well as the calculated mean &\n    // variance. We iterate until the `cumulativeProbability_of_x` is\n    // within `epsilon` of 1.0.\n    var x = 0;\n    var cumulativeProbability = 0;\n    var cells = [];\n    var binomialCoefficient = 1;\n\n    // This algorithm iterates through each potential outcome,\n    // until the `cumulativeProbability` is very close to 1, at\n    // which point we've defined the vast majority of outcomes\n    do {\n        // a [probability mass function](https://en.wikipedia.org/wiki/Probability_mass_function)\n        cells[x] =\n            binomialCoefficient *\n            Math.pow(probability, x) *\n            Math.pow(1 - probability, trials - x);\n        cumulativeProbability += cells[x];\n        x++;\n        binomialCoefficient = (binomialCoefficient * (trials - x + 1)) / x;\n        // when the cumulativeProbability is nearly 1, we've calculated\n        // the useful range of this distribution\n    } while (cumulativeProbability < 1 - epsilon);\n\n    return cells;\n}\n\n/**\n * The [Poisson Distribution](http://en.wikipedia.org/wiki/Poisson_distribution)\n * is a discrete probability distribution that expresses the probability\n * of a given number of events occurring in a fixed interval of time\n * and/or space if these events occur with a known average rate and\n * independently of the time since the last event.\n *\n * The Poisson Distribution is characterized by the strictly positive\n * mean arrival or occurrence rate, `λ`.\n *\n * @param {number} lambda location poisson distribution\n * @returns {number[]} values of poisson distribution at that point\n */\nfunction poissonDistribution(lambda) /*: ?number[] */ {\n    // Check that lambda is strictly positive\n    if (lambda <= 0) {\n        return undefined;\n    }\n\n    // our current place in the distribution\n    var x = 0;\n    // and we keep track of the current cumulative probability, in\n    // order to know when to stop calculating chances.\n    var cumulativeProbability = 0;\n    // the calculated cells to be returned\n    var cells = [];\n    var factorialX = 1;\n\n    // This algorithm iterates through each potential outcome,\n    // until the `cumulativeProbability` is very close to 1, at\n    // which point we've defined the vast majority of outcomes\n    do {\n        // a [probability mass function](https://en.wikipedia.org/wiki/Probability_mass_function)\n        cells[x] = (Math.exp(-lambda) * Math.pow(lambda, x)) / factorialX;\n        cumulativeProbability += cells[x];\n        x++;\n        factorialX *= x;\n        // when the cumulativeProbability is nearly 1, we've calculated\n        // the useful range of this distribution\n    } while (cumulativeProbability < 1 - epsilon);\n\n    return cells;\n}\n\n/**\n * **Percentage Points of the χ2 (Chi-Squared) Distribution**\n *\n * The [χ2 (Chi-Squared) Distribution](http://en.wikipedia.org/wiki/Chi-squared_distribution) is used in the common\n * chi-squared tests for goodness of fit of an observed distribution to a theoretical one, the independence of two\n * criteria of classification of qualitative data, and in confidence interval estimation for a population standard\n * deviation of a normal distribution from a sample standard deviation.\n *\n * Values from Appendix 1, Table III of William W. Hines & Douglas C. Montgomery, \"Probability and Statistics in\n * Engineering and Management Science\", Wiley (1980).\n */\nvar chiSquaredDistributionTable = {\n    1: {\n        0.995: 0,\n        0.99: 0,\n        0.975: 0,\n        0.95: 0,\n        0.9: 0.02,\n        0.5: 0.45,\n        0.1: 2.71,\n        0.05: 3.84,\n        0.025: 5.02,\n        0.01: 6.63,\n        0.005: 7.88\n    },\n    2: {\n        0.995: 0.01,\n        0.99: 0.02,\n        0.975: 0.05,\n        0.95: 0.1,\n        0.9: 0.21,\n        0.5: 1.39,\n        0.1: 4.61,\n        0.05: 5.99,\n        0.025: 7.38,\n        0.01: 9.21,\n        0.005: 10.6\n    },\n    3: {\n        0.995: 0.07,\n        0.99: 0.11,\n        0.975: 0.22,\n        0.95: 0.35,\n        0.9: 0.58,\n        0.5: 2.37,\n        0.1: 6.25,\n        0.05: 7.81,\n        0.025: 9.35,\n        0.01: 11.34,\n        0.005: 12.84\n    },\n    4: {\n        0.995: 0.21,\n        0.99: 0.3,\n        0.975: 0.48,\n        0.95: 0.71,\n        0.9: 1.06,\n        0.5: 3.36,\n        0.1: 7.78,\n        0.05: 9.49,\n        0.025: 11.14,\n        0.01: 13.28,\n        0.005: 14.86\n    },\n    5: {\n        0.995: 0.41,\n        0.99: 0.55,\n        0.975: 0.83,\n        0.95: 1.15,\n        0.9: 1.61,\n        0.5: 4.35,\n        0.1: 9.24,\n        0.05: 11.07,\n        0.025: 12.83,\n        0.01: 15.09,\n        0.005: 16.75\n    },\n    6: {\n        0.995: 0.68,\n        0.99: 0.87,\n        0.975: 1.24,\n        0.95: 1.64,\n        0.9: 2.2,\n        0.5: 5.35,\n        0.1: 10.65,\n        0.05: 12.59,\n        0.025: 14.45,\n        0.01: 16.81,\n        0.005: 18.55\n    },\n    7: {\n        0.995: 0.99,\n        0.99: 1.25,\n        0.975: 1.69,\n        0.95: 2.17,\n        0.9: 2.83,\n        0.5: 6.35,\n        0.1: 12.02,\n        0.05: 14.07,\n        0.025: 16.01,\n        0.01: 18.48,\n        0.005: 20.28\n    },\n    8: {\n        0.995: 1.34,\n        0.99: 1.65,\n        0.975: 2.18,\n        0.95: 2.73,\n        0.9: 3.49,\n        0.5: 7.34,\n        0.1: 13.36,\n        0.05: 15.51,\n        0.025: 17.53,\n        0.01: 20.09,\n        0.005: 21.96\n    },\n    9: {\n        0.995: 1.73,\n        0.99: 2.09,\n        0.975: 2.7,\n        0.95: 3.33,\n        0.9: 4.17,\n        0.5: 8.34,\n        0.1: 14.68,\n        0.05: 16.92,\n        0.025: 19.02,\n        0.01: 21.67,\n        0.005: 23.59\n    },\n    10: {\n        0.995: 2.16,\n        0.99: 2.56,\n        0.975: 3.25,\n        0.95: 3.94,\n        0.9: 4.87,\n        0.5: 9.34,\n        0.1: 15.99,\n        0.05: 18.31,\n        0.025: 20.48,\n        0.01: 23.21,\n        0.005: 25.19\n    },\n    11: {\n        0.995: 2.6,\n        0.99: 3.05,\n        0.975: 3.82,\n        0.95: 4.57,\n        0.9: 5.58,\n        0.5: 10.34,\n        0.1: 17.28,\n        0.05: 19.68,\n        0.025: 21.92,\n        0.01: 24.72,\n        0.005: 26.76\n    },\n    12: {\n        0.995: 3.07,\n        0.99: 3.57,\n        0.975: 4.4,\n        0.95: 5.23,\n        0.9: 6.3,\n        0.5: 11.34,\n        0.1: 18.55,\n        0.05: 21.03,\n        0.025: 23.34,\n        0.01: 26.22,\n        0.005: 28.3\n    },\n    13: {\n        0.995: 3.57,\n        0.99: 4.11,\n        0.975: 5.01,\n        0.95: 5.89,\n        0.9: 7.04,\n        0.5: 12.34,\n        0.1: 19.81,\n        0.05: 22.36,\n        0.025: 24.74,\n        0.01: 27.69,\n        0.005: 29.82\n    },\n    14: {\n        0.995: 4.07,\n        0.99: 4.66,\n        0.975: 5.63,\n        0.95: 6.57,\n        0.9: 7.79,\n        0.5: 13.34,\n        0.1: 21.06,\n        0.05: 23.68,\n        0.025: 26.12,\n        0.01: 29.14,\n        0.005: 31.32\n    },\n    15: {\n        0.995: 4.6,\n        0.99: 5.23,\n        0.975: 6.27,\n        0.95: 7.26,\n        0.9: 8.55,\n        0.5: 14.34,\n        0.1: 22.31,\n        0.05: 25,\n        0.025: 27.49,\n        0.01: 30.58,\n        0.005: 32.8\n    },\n    16: {\n        0.995: 5.14,\n        0.99: 5.81,\n        0.975: 6.91,\n        0.95: 7.96,\n        0.9: 9.31,\n        0.5: 15.34,\n        0.1: 23.54,\n        0.05: 26.3,\n        0.025: 28.85,\n        0.01: 32,\n        0.005: 34.27\n    },\n    17: {\n        0.995: 5.7,\n        0.99: 6.41,\n        0.975: 7.56,\n        0.95: 8.67,\n        0.9: 10.09,\n        0.5: 16.34,\n        0.1: 24.77,\n        0.05: 27.59,\n        0.025: 30.19,\n        0.01: 33.41,\n        0.005: 35.72\n    },\n    18: {\n        0.995: 6.26,\n        0.99: 7.01,\n        0.975: 8.23,\n        0.95: 9.39,\n        0.9: 10.87,\n        0.5: 17.34,\n        0.1: 25.99,\n        0.05: 28.87,\n        0.025: 31.53,\n        0.01: 34.81,\n        0.005: 37.16\n    },\n    19: {\n        0.995: 6.84,\n        0.99: 7.63,\n        0.975: 8.91,\n        0.95: 10.12,\n        0.9: 11.65,\n        0.5: 18.34,\n        0.1: 27.2,\n        0.05: 30.14,\n        0.025: 32.85,\n        0.01: 36.19,\n        0.005: 38.58\n    },\n    20: {\n        0.995: 7.43,\n        0.99: 8.26,\n        0.975: 9.59,\n        0.95: 10.85,\n        0.9: 12.44,\n        0.5: 19.34,\n        0.1: 28.41,\n        0.05: 31.41,\n        0.025: 34.17,\n        0.01: 37.57,\n        0.005: 40\n    },\n    21: {\n        0.995: 8.03,\n        0.99: 8.9,\n        0.975: 10.28,\n        0.95: 11.59,\n        0.9: 13.24,\n        0.5: 20.34,\n        0.1: 29.62,\n        0.05: 32.67,\n        0.025: 35.48,\n        0.01: 38.93,\n        0.005: 41.4\n    },\n    22: {\n        0.995: 8.64,\n        0.99: 9.54,\n        0.975: 10.98,\n        0.95: 12.34,\n        0.9: 14.04,\n        0.5: 21.34,\n        0.1: 30.81,\n        0.05: 33.92,\n        0.025: 36.78,\n        0.01: 40.29,\n        0.005: 42.8\n    },\n    23: {\n        0.995: 9.26,\n        0.99: 10.2,\n        0.975: 11.69,\n        0.95: 13.09,\n        0.9: 14.85,\n        0.5: 22.34,\n        0.1: 32.01,\n        0.05: 35.17,\n        0.025: 38.08,\n        0.01: 41.64,\n        0.005: 44.18\n    },\n    24: {\n        0.995: 9.89,\n        0.99: 10.86,\n        0.975: 12.4,\n        0.95: 13.85,\n        0.9: 15.66,\n        0.5: 23.34,\n        0.1: 33.2,\n        0.05: 36.42,\n        0.025: 39.36,\n        0.01: 42.98,\n        0.005: 45.56\n    },\n    25: {\n        0.995: 10.52,\n        0.99: 11.52,\n        0.975: 13.12,\n        0.95: 14.61,\n        0.9: 16.47,\n        0.5: 24.34,\n        0.1: 34.28,\n        0.05: 37.65,\n        0.025: 40.65,\n        0.01: 44.31,\n        0.005: 46.93\n    },\n    26: {\n        0.995: 11.16,\n        0.99: 12.2,\n        0.975: 13.84,\n        0.95: 15.38,\n        0.9: 17.29,\n        0.5: 25.34,\n        0.1: 35.56,\n        0.05: 38.89,\n        0.025: 41.92,\n        0.01: 45.64,\n        0.005: 48.29\n    },\n    27: {\n        0.995: 11.81,\n        0.99: 12.88,\n        0.975: 14.57,\n        0.95: 16.15,\n        0.9: 18.11,\n        0.5: 26.34,\n        0.1: 36.74,\n        0.05: 40.11,\n        0.025: 43.19,\n        0.01: 46.96,\n        0.005: 49.65\n    },\n    28: {\n        0.995: 12.46,\n        0.99: 13.57,\n        0.975: 15.31,\n        0.95: 16.93,\n        0.9: 18.94,\n        0.5: 27.34,\n        0.1: 37.92,\n        0.05: 41.34,\n        0.025: 44.46,\n        0.01: 48.28,\n        0.005: 50.99\n    },\n    29: {\n        0.995: 13.12,\n        0.99: 14.26,\n        0.975: 16.05,\n        0.95: 17.71,\n        0.9: 19.77,\n        0.5: 28.34,\n        0.1: 39.09,\n        0.05: 42.56,\n        0.025: 45.72,\n        0.01: 49.59,\n        0.005: 52.34\n    },\n    30: {\n        0.995: 13.79,\n        0.99: 14.95,\n        0.975: 16.79,\n        0.95: 18.49,\n        0.9: 20.6,\n        0.5: 29.34,\n        0.1: 40.26,\n        0.05: 43.77,\n        0.025: 46.98,\n        0.01: 50.89,\n        0.005: 53.67\n    },\n    40: {\n        0.995: 20.71,\n        0.99: 22.16,\n        0.975: 24.43,\n        0.95: 26.51,\n        0.9: 29.05,\n        0.5: 39.34,\n        0.1: 51.81,\n        0.05: 55.76,\n        0.025: 59.34,\n        0.01: 63.69,\n        0.005: 66.77\n    },\n    50: {\n        0.995: 27.99,\n        0.99: 29.71,\n        0.975: 32.36,\n        0.95: 34.76,\n        0.9: 37.69,\n        0.5: 49.33,\n        0.1: 63.17,\n        0.05: 67.5,\n        0.025: 71.42,\n        0.01: 76.15,\n        0.005: 79.49\n    },\n    60: {\n        0.995: 35.53,\n        0.99: 37.48,\n        0.975: 40.48,\n        0.95: 43.19,\n        0.9: 46.46,\n        0.5: 59.33,\n        0.1: 74.4,\n        0.05: 79.08,\n        0.025: 83.3,\n        0.01: 88.38,\n        0.005: 91.95\n    },\n    70: {\n        0.995: 43.28,\n        0.99: 45.44,\n        0.975: 48.76,\n        0.95: 51.74,\n        0.9: 55.33,\n        0.5: 69.33,\n        0.1: 85.53,\n        0.05: 90.53,\n        0.025: 95.02,\n        0.01: 100.42,\n        0.005: 104.22\n    },\n    80: {\n        0.995: 51.17,\n        0.99: 53.54,\n        0.975: 57.15,\n        0.95: 60.39,\n        0.9: 64.28,\n        0.5: 79.33,\n        0.1: 96.58,\n        0.05: 101.88,\n        0.025: 106.63,\n        0.01: 112.33,\n        0.005: 116.32\n    },\n    90: {\n        0.995: 59.2,\n        0.99: 61.75,\n        0.975: 65.65,\n        0.95: 69.13,\n        0.9: 73.29,\n        0.5: 89.33,\n        0.1: 107.57,\n        0.05: 113.14,\n        0.025: 118.14,\n        0.01: 124.12,\n        0.005: 128.3\n    },\n    100: {\n        0.995: 67.33,\n        0.99: 70.06,\n        0.975: 74.22,\n        0.95: 77.93,\n        0.9: 82.36,\n        0.5: 99.33,\n        0.1: 118.5,\n        0.05: 124.34,\n        0.025: 129.56,\n        0.01: 135.81,\n        0.005: 140.17\n    }\n};\n\n/**\n * The [χ2 (Chi-Squared) Goodness-of-Fit Test](http://en.wikipedia.org/wiki/Goodness_of_fit#Pearson.27s_chi-squared_test)\n * uses a measure of goodness of fit which is the sum of differences between observed and expected outcome frequencies\n * (that is, counts of observations), each squared and divided by the number of observations expected given the\n * hypothesized distribution. The resulting χ2 statistic, `chiSquared`, can be compared to the chi-squared distribution\n * to determine the goodness of fit. In order to determine the degrees of freedom of the chi-squared distribution, one\n * takes the total number of observed frequencies and subtracts the number of estimated parameters. The test statistic\n * follows, approximately, a chi-square distribution with (k − c) degrees of freedom where `k` is the number of non-empty\n * cells and `c` is the number of estimated parameters for the distribution.\n *\n * @param {Array<number>} data\n * @param {Function} distributionType a function that returns a point in a distribution:\n * for instance, binomial, bernoulli, or poisson\n * @param {number} significance\n * @returns {number} chi squared goodness of fit\n * @example\n * // Data from Poisson goodness-of-fit example 10-19 in William W. Hines & Douglas C. Montgomery,\n * // \"Probability and Statistics in Engineering and Management Science\", Wiley (1980).\n * var data1019 = [\n *     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n *     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n *     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n *     2, 2, 2, 2, 2, 2, 2, 2, 2,\n *     3, 3, 3, 3\n * ];\n * ss.chiSquaredGoodnessOfFit(data1019, ss.poissonDistribution, 0.05); //= false\n */\nfunction chiSquaredGoodnessOfFit(data, distributionType, significance) {\n    // Estimate from the sample data, a weighted mean.\n    var inputMean = mean(data);\n    // Calculated value of the χ2 statistic.\n    var chiSquared = 0;\n    // Number of hypothesized distribution parameters estimated, expected to be supplied in the distribution test.\n    // Lose one degree of freedom for estimating `lambda` from the sample data.\n    var c = 1;\n    // The hypothesized distribution.\n    // Generate the hypothesized distribution.\n    var hypothesizedDistribution = distributionType(inputMean);\n    var observedFrequencies = [];\n    var expectedFrequencies = [];\n\n    // Create an array holding a histogram from the sample data, of\n    // the form `{ value: numberOfOcurrences }`\n    for (var i = 0; i < data.length; i++) {\n        if (observedFrequencies[data[i]] === undefined) {\n            observedFrequencies[data[i]] = 0;\n        }\n        observedFrequencies[data[i]]++;\n    }\n\n    // The histogram we created might be sparse - there might be gaps\n    // between values. So we iterate through the histogram, making\n    // sure that instead of undefined, gaps have 0 values.\n    for (var i$1 = 0; i$1 < observedFrequencies.length; i$1++) {\n        if (observedFrequencies[i$1] === undefined) {\n            observedFrequencies[i$1] = 0;\n        }\n    }\n\n    // Create an array holding a histogram of expected data given the\n    // sample size and hypothesized distribution.\n    for (var k in hypothesizedDistribution) {\n        if (k in observedFrequencies) {\n            expectedFrequencies[+k] = hypothesizedDistribution[k] * data.length;\n        }\n    }\n\n    // Working backward through the expected frequencies, collapse classes\n    // if less than three observations are expected for a class.\n    // This transformation is applied to the observed frequencies as well.\n    for (var k$1 = expectedFrequencies.length - 1; k$1 >= 0; k$1--) {\n        if (expectedFrequencies[k$1] < 3) {\n            expectedFrequencies[k$1 - 1] += expectedFrequencies[k$1];\n            expectedFrequencies.pop();\n\n            observedFrequencies[k$1 - 1] += observedFrequencies[k$1];\n            observedFrequencies.pop();\n        }\n    }\n\n    // Iterate through the squared differences between observed & expected\n    // frequencies, accumulating the `chiSquared` statistic.\n    for (var k$2 = 0; k$2 < observedFrequencies.length; k$2++) {\n        chiSquared +=\n            Math.pow(observedFrequencies[k$2] - expectedFrequencies[k$2], 2) /\n            expectedFrequencies[k$2];\n    }\n\n    // Calculate degrees of freedom for this test and look it up in the\n    // `chiSquaredDistributionTable` in order to\n    // accept or reject the goodness-of-fit of the hypothesized distribution.\n    // Degrees of freedom, calculated as (number of class intervals -\n    // number of hypothesized distribution parameters estimated - 1)\n    var degreesOfFreedom = observedFrequencies.length - c - 1;\n    return (\n        chiSquaredDistributionTable[degreesOfFreedom][significance] < chiSquared\n    );\n}\n\nvar SQRT_2PI$1 = Math.sqrt(2 * Math.PI);\n\n/**\n * [Well-known kernels](https://en.wikipedia.org/wiki/Kernel_(statistics)#Kernel_functions_in_common_use)\n * @private\n */\nvar kernels = {\n    /**\n     * The gaussian kernel.\n     * @private\n     */\n    gaussian: function (u) {\n        return Math.exp(-0.5 * u * u) / SQRT_2PI$1;\n    }\n};\n\n/**\n * Well known bandwidth selection methods\n * @private\n */\nvar bandwidthMethods = {\n    /**\n     * The [\"normal reference distribution\"\n     * rule-of-thumb](https://stat.ethz.ch/R-manual/R-devel/library/MASS/html/bandwidth.nrd.html),\n     * a commonly used version of [Silverman's\n     * rule-of-thumb](https://en.wikipedia.org/wiki/Kernel_density_estimation#A_rule-of-thumb_bandwidth_estimator).\n     * @private\n     */\n    nrd: function (x) {\n        var s = sampleStandardDeviation(x);\n        var iqr = interquartileRange(x);\n        if (typeof iqr === \"number\") {\n            s = Math.min(s, iqr / 1.34);\n        }\n        return 1.06 * s * Math.pow(x.length, -0.2);\n    }\n};\n\n/**\n * [Kernel density estimation](https://en.wikipedia.org/wiki/Kernel_density_estimation)\n * is a useful tool for, among other things, estimating the shape of the\n * underlying probability distribution from a sample.\n *\n * @name kernelDensityEstimation\n * @param X sample values\n * @param kernel The kernel function to use. If a function is provided, it should return non-negative values and integrate to 1. Defaults to 'gaussian'.\n * @param bandwidthMethod The \"bandwidth selection\" method to use, or a fixed bandwidth value. Defaults to \"nrd\", the commonly-used [\"normal reference distribution\" rule-of-thumb](https://stat.ethz.ch/R-manual/R-devel/library/MASS/html/bandwidth.nrd.html).\n * @returns {Function} An estimated [probability density function](https://en.wikipedia.org/wiki/Probability_density_function) for the given sample. The returned function runs in `O(X.length)`.\n */\nfunction kernelDensityEstimation(X, kernel, bandwidthMethod) {\n    var kernelFn;\n    if (kernel === undefined) {\n        kernelFn = kernels.gaussian;\n    } else if (typeof kernel === \"string\") {\n        if (!kernels[kernel]) {\n            throw new Error('Unknown kernel \"' + kernel + '\"');\n        }\n        kernelFn = kernels[kernel];\n    } else {\n        kernelFn = kernel;\n    }\n\n    var bandwidth;\n    if (typeof bandwidthMethod === \"undefined\") {\n        bandwidth = bandwidthMethods.nrd(X);\n    } else if (typeof bandwidthMethod === \"string\") {\n        if (!bandwidthMethods[bandwidthMethod]) {\n            throw new Error(\n                'Unknown bandwidth method \"' + bandwidthMethod + '\"'\n            );\n        }\n        bandwidth = bandwidthMethods[bandwidthMethod](X);\n    } else {\n        bandwidth = bandwidthMethod;\n    }\n\n    return function (x) {\n        var i = 0;\n        var sum = 0;\n        for (i = 0; i < X.length; i++) {\n            sum += kernelFn((x - X[i]) / bandwidth);\n        }\n        return sum / bandwidth / X.length;\n    };\n}\n\n/**\n * The [Z-Score, or Standard Score](http://en.wikipedia.org/wiki/Standard_score).\n *\n * The standard score is the number of standard deviations an observation\n * or datum is above or below the mean. Thus, a positive standard score\n * represents a datum above the mean, while a negative standard score\n * represents a datum below the mean. It is a dimensionless quantity\n * obtained by subtracting the population mean from an individual raw\n * score and then dividing the difference by the population standard\n * deviation.\n *\n * The z-score is only defined if one knows the population parameters;\n * if one only has a sample set, then the analogous computation with\n * sample mean and sample standard deviation yields the\n * Student's t-statistic.\n *\n * @param {number} x\n * @param {number} mean\n * @param {number} standardDeviation\n * @return {number} z score\n * @example\n * zScore(78, 80, 5); // => -0.4\n */\nfunction zScore(x, mean, standardDeviation) {\n    return (x - mean) / standardDeviation;\n}\n\nvar SQRT_2PI = Math.sqrt(2 * Math.PI);\n\nfunction cumulativeDistribution(z) {\n    var sum = z;\n    var tmp = z;\n\n    // 15 iterations are enough for 4-digit precision\n    for (var i = 1; i < 15; i++) {\n        tmp *= (z * z) / (2 * i + 1);\n        sum += tmp;\n    }\n    return (\n        Math.round((0.5 + (sum / SQRT_2PI) * Math.exp((-z * z) / 2)) * 1e4) /\n        1e4\n    );\n}\n\n/**\n * A standard normal table, also called the unit normal table or Z table,\n * is a mathematical table for the values of Φ (phi), which are the values of\n * the [cumulative distribution function](https://en.wikipedia.org/wiki/Normal_distribution#Cumulative_distribution_function)\n * of the normal distribution. It is used to find the probability that a\n * statistic is observed below, above, or between values on the standard\n * normal distribution, and by extension, any normal distribution.\n */\nvar standardNormalTable = [];\n\nfor (var z = 0; z <= 3.09; z += 0.01) {\n    standardNormalTable.push(cumulativeDistribution(z));\n}\n\n/**\n * **[Cumulative Standard Normal Probability](http://en.wikipedia.org/wiki/Standard_normal_table)**\n *\n * Since probability tables cannot be\n * printed for every normal distribution, as there are an infinite variety\n * of normal distributions, it is common practice to convert a normal to a\n * standard normal and then use the standard normal table to find probabilities.\n *\n * You can use `.5 + .5 * errorFunction(x / Math.sqrt(2))` to calculate the probability\n * instead of looking it up in a table.\n *\n * @param {number} z\n * @returns {number} cumulative standard normal probability\n */\nfunction cumulativeStdNormalProbability(z) {\n    // Calculate the position of this value.\n    var absZ = Math.abs(z);\n    // Each row begins with a different\n    // significant digit: 0.5, 0.6, 0.7, and so on. Each value in the table\n    // corresponds to a range of 0.01 in the input values, so the value is\n    // multiplied by 100.\n    var index = Math.min(\n        Math.round(absZ * 100),\n        standardNormalTable.length - 1\n    );\n\n    // The index we calculate must be in the table as a positive value,\n    // but we still pay attention to whether the input is positive\n    // or negative, and flip the output value as a last step.\n    if (z >= 0) {\n        return standardNormalTable[index];\n    } else {\n        // due to floating-point arithmetic, values in the table with\n        // 4 significant figures can nevertheless end up as repeating\n        // fractions when they're computed here.\n        return Math.round((1 - standardNormalTable[index]) * 1e4) / 1e4;\n    }\n}\n\n/**\n * **[Logistic Cumulative Distribution Function](https://en.wikipedia.org/wiki/Logistic_distribution)**\n *\n * @param {number} x\n * @returns {number} cumulative standard logistic probability\n */\nfunction cumulativeStdLogisticProbability(x) {\n    return 1 / (Math.exp(-x) + 1);\n}\n\n/**\n * **[Gaussian error function](http://en.wikipedia.org/wiki/Error_function)**\n *\n * The `errorFunction(x/(sd * Math.sqrt(2)))` is the probability that a value in a\n * normal distribution with standard deviation sd is within x of the mean.\n *\n * This function returns a numerical approximation to the exact value.\n * It uses Horner's method to evaluate the polynomial of τ (tau).\n *\n * @param {number} x input\n * @return {number} error estimation\n * @example\n * errorFunction(1).toFixed(2); // => '0.84'\n */\nfunction errorFunction(x) {\n    var t = 1 / (1 + 0.5 * Math.abs(x));\n    var tau =\n        t *\n        Math.exp(\n            -x * x +\n                ((((((((0.17087277 * t - 0.82215223) * t + 1.48851587) * t -\n                    1.13520398) *\n                    t +\n                    0.27886807) *\n                    t -\n                    0.18628806) *\n                    t +\n                    0.09678418) *\n                    t +\n                    0.37409196) *\n                    t +\n                    1.00002368) *\n                    t -\n                1.26551223\n        );\n    if (x >= 0) {\n        return 1 - tau;\n    } else {\n        return tau - 1;\n    }\n}\n\n/**\n * The Inverse [Gaussian error function](http://en.wikipedia.org/wiki/Error_function)\n * returns a numerical approximation to the value that would have caused\n * `errorFunction()` to return x.\n *\n * @param {number} x value of error function\n * @returns {number} estimated inverted value\n */\nfunction inverseErrorFunction(x) {\n    var a = (8 * (Math.PI - 3)) / (3 * Math.PI * (4 - Math.PI));\n\n    var inv = Math.sqrt(\n        Math.sqrt(\n            Math.pow(2 / (Math.PI * a) + Math.log(1 - x * x) / 2, 2) -\n                Math.log(1 - x * x) / a\n        ) -\n            (2 / (Math.PI * a) + Math.log(1 - x * x) / 2)\n    );\n\n    if (x >= 0) {\n        return inv;\n    } else {\n        return -inv;\n    }\n}\n\n/**\n * The [Probit](http://en.wikipedia.org/wiki/Probit)\n * is the inverse of cumulativeStdNormalProbability(),\n * and is also known as the normal quantile function.\n *\n * It returns the number of standard deviations from the mean\n * where the p'th quantile of values can be found in a normal distribution.\n * So, for example, probit(0.5 + 0.6827/2) ≈ 1 because 68.27% of values are\n * normally found within 1 standard deviation above or below the mean.\n *\n * @param {number} p\n * @returns {number} probit\n */\nfunction probit(p) {\n    if (p === 0) {\n        p = epsilon;\n    } else if (p >= 1) {\n        p = 1 - epsilon;\n    }\n    return Math.sqrt(2) * inverseErrorFunction(2 * p - 1);\n}\n\n/**\n * The [Logit](https://en.wikipedia.org/wiki/Logit)\n * is the inverse of cumulativeStdLogisticProbability,\n * and is also known as the logistic quantile function.\n *\n * @param {number} p\n * @returns {number} logit\n */\nfunction logit(p) {\n    if (p <= 0 || p >= 1) {\n        throw new Error(\"p must be strictly between zero and one\");\n    }\n    return Math.log(p / (1 - p));\n}\n\n/**\n * Conducts a [permutation test](https://en.wikipedia.org/wiki/Resampling_(statistics)#Permutation_tests)\n * to determine if two data sets are *significantly* different from each other, using\n * the difference of means between the groups as the test statistic.\n * The function allows for the following hypotheses:\n * - two_tail = Null hypothesis: the two distributions are equal.\n * - greater = Null hypothesis: observations from sampleX tend to be smaller than those from sampleY.\n * - less = Null hypothesis: observations from sampleX tend to be greater than those from sampleY.\n * [Learn more about one-tail vs two-tail tests.](https://en.wikipedia.org/wiki/One-_and_two-tailed_tests)\n *\n * @param {Array<number>} sampleX first dataset (e.g. treatment data)\n * @param {Array<number>} sampleY second dataset (e.g. control data)\n * @param {string} alternative alternative hypothesis, either 'two_sided' (default), 'greater', or 'less'\n * @param {number} k number of values in permutation distribution.\n * @param {Function} [randomSource=Math.random] an optional entropy source\n * @returns {number} p-value The probability of observing the difference between groups (as or more extreme than what we did), assuming the null hypothesis.\n *\n * @example\n * var control = [2, 5, 3, 6, 7, 2, 5];\n * var treatment = [20, 5, 13, 12, 7, 2, 2];\n * permutationTest(control, treatment); // ~0.1324\n */\nfunction permutationTest(sampleX, sampleY, alternative, k, randomSource) {\n    // Set default arguments\n    if (k === undefined) {\n        k = 10000;\n    }\n    if (alternative === undefined) {\n        alternative = \"two_side\";\n    }\n    if (\n        alternative !== \"two_side\" &&\n        alternative !== \"greater\" &&\n        alternative !== \"less\"\n    ) {\n        throw new Error(\n            \"`alternative` must be either 'two_side', 'greater', or 'less'.\"\n        );\n    }\n\n    // get means for each sample\n    var meanX = mean(sampleX);\n    var meanY = mean(sampleY);\n\n    // calculate initial test statistic. This will be our point of comparison with\n    // the generated test statistics.\n    var testStatistic = meanX - meanY;\n\n    // create test-statistic distribution\n    var testStatDsn = new Array(k);\n\n    // combine datsets so we can easily shuffle later\n    var allData = sampleX.concat(sampleY);\n    var midIndex = Math.floor(allData.length / 2);\n\n    for (var i = 0; i < k; i++) {\n        // 1. shuffle data assignments\n        shuffleInPlace(allData, randomSource);\n        var permLeft = allData.slice(0, midIndex);\n        var permRight = allData.slice(midIndex, allData.length);\n\n        // 2.re-calculate test statistic\n        var permTestStatistic = mean(permLeft) - mean(permRight);\n\n        // 3. store test statistic to build test statistic distribution\n        testStatDsn[i] = permTestStatistic;\n    }\n\n    // Calculate p-value depending on alternative\n    // For this test, we calculate the percentage of 'extreme' test statistics (subject to our hypothesis)\n    // more info on permutation test p-value calculations: https://onlinecourses.science.psu.edu/stat464/node/35\n    var numExtremeTStats = 0;\n    if (alternative === \"two_side\") {\n        for (var i$1 = 0; i$1 <= k; i$1++) {\n            if (Math.abs(testStatDsn[i$1]) >= Math.abs(testStatistic)) {\n                numExtremeTStats += 1;\n            }\n        }\n    } else if (alternative === \"greater\") {\n        for (var i$2 = 0; i$2 <= k; i$2++) {\n            if (testStatDsn[i$2] >= testStatistic) {\n                numExtremeTStats += 1;\n            }\n        }\n    } else {\n        // alternative === 'less'\n        for (var i$3 = 0; i$3 <= k; i$3++) {\n            /* c8 ignore start */\n            if (testStatDsn[i$3] <= testStatistic) {\n                numExtremeTStats += 1;\n            }\n            /* c8 ignore end */\n        }\n    }\n\n    return numExtremeTStats / k;\n}\n\n/**\n * [Sign](https://en.wikipedia.org/wiki/Sign_function) is a function\n * that extracts the sign of a real number\n *\n * @param {number} x input value\n * @returns {number} sign value either 1, 0 or -1\n * @throws {TypeError} if the input argument x is not a number\n * @private\n *\n * @example\n * sign(2); // => 1\n */\nfunction sign(x) {\n    if (typeof x === \"number\") {\n        if (x < 0) {\n            return -1;\n        } else if (x === 0) {\n            return 0;\n        } else {\n            return 1;\n        }\n    } else {\n        throw new TypeError(\"not a number\");\n    }\n}\n\n/**\n * [Bisection method](https://en.wikipedia.org/wiki/Bisection_method) is a root-finding\n * method that repeatedly bisects an interval to find the root.\n *\n * This function returns a numerical approximation to the exact value.\n *\n * @param {Function} func input function\n * @param {number} start - start of interval\n * @param {number} end - end of interval\n * @param {number} maxIterations - the maximum number of iterations\n * @param {number} errorTolerance - the error tolerance\n * @returns {number} estimated root value\n * @throws {TypeError} Argument func must be a function\n *\n * @example\n * bisect(Math.cos,0,4,100,0.003); // => 1.572265625\n */\nfunction bisect(func, start, end, maxIterations, errorTolerance) {\n    if (typeof func !== \"function\")\n        { throw new TypeError(\"func must be a function\"); }\n\n    for (var i = 0; i < maxIterations; i++) {\n        var output = (start + end) / 2;\n\n        if (\n            func(output) === 0 ||\n            Math.abs((end - start) / 2) < errorTolerance\n        ) {\n            return output;\n        }\n\n        if (sign(func(output)) === sign(func(start))) {\n            start = output;\n        } else {\n            end = output;\n        }\n    }\n\n    throw new Error(\"maximum number of iterations exceeded\");\n}\n\n/**\n * Calculate Euclidean distance between two points.\n * @param {Array<number>} left First N-dimensional point.\n * @param {Array<number>} right Second N-dimensional point.\n * @returns {number} Distance.\n */\nfunction euclideanDistance(left, right) {\n    var sum = 0;\n    for (var i = 0; i < left.length; i++) {\n        var diff = left[i] - right[i];\n        sum += diff * diff;\n    }\n    return Math.sqrt(sum);\n}\n\n/**\n * @typedef {Object} kMeansReturn\n * @property {Array<number>} labels The labels.\n * @property {Array<Array<number>>} centroids The cluster centroids.\n */\n\n/**\n * Perform k-means clustering.\n *\n * @param {Array<Array<number>>} points N-dimensional coordinates of points to be clustered.\n * @param {number} numCluster How many clusters to create.\n * @param {Function} randomSource An optional entropy source that generates uniform values in [0, 1).\n * @return {kMeansReturn} Labels (same length as data) and centroids (same length as numCluster).\n * @throws {Error} If any centroids wind up friendless (i.e., without associated points).\n *\n * @example\n * kMeansCluster([[0.0, 0.5], [1.0, 0.5]], 2); // => {labels: [0, 1], centroids: [[0.0, 0.5], [1.0 0.5]]}\n */\nfunction kMeansCluster(points, numCluster, randomSource) {\n    if ( randomSource === void 0 ) randomSource = Math.random;\n\n    var oldCentroids = null;\n    var newCentroids = sample(points, numCluster, randomSource);\n    var labels = null;\n    var change = Number.MAX_VALUE;\n    while (change !== 0) {\n        labels = labelPoints(points, newCentroids);\n        oldCentroids = newCentroids;\n        newCentroids = calculateCentroids(points, labels, numCluster);\n        change = calculateChange(newCentroids, oldCentroids);\n    }\n    return {\n        labels: labels,\n        centroids: newCentroids\n    };\n}\n\n/**\n * Label each point according to which centroid it is closest to.\n *\n * @private\n * @param {Array<Array<number>>} points Array of XY coordinates.\n * @param {Array<Array<number>>} centroids Current centroids.\n * @return {Array<number>} Group labels.\n */\nfunction labelPoints(points, centroids) {\n    return points.map(function (p) {\n        var minDist = Number.MAX_VALUE;\n        var label = -1;\n        for (var i = 0; i < centroids.length; i++) {\n            var dist = euclideanDistance(p, centroids[i]);\n            if (dist < minDist) {\n                minDist = dist;\n                label = i;\n            }\n        }\n        return label;\n    });\n}\n\n/**\n * Calculate centroids for points given labels.\n *\n * @private\n * @param {Array<Array<number>>} points Array of XY coordinates.\n * @param {Array<number>} labels Which groups points belong to.\n * @param {number} numCluster Number of clusters being created.\n * @return {Array<Array<number>>} Centroid for each group.\n * @throws {Error} If any centroids wind up friendless (i.e., without associated points).\n */\nfunction calculateCentroids(points, labels, numCluster) {\n    // Initialize accumulators.\n    var dimension = points[0].length;\n    var centroids = makeMatrix(numCluster, dimension);\n    var counts = Array(numCluster).fill(0);\n\n    // Add points to centroids' accumulators and count points per centroid.\n    var numPoints = points.length;\n    for (var i = 0; i < numPoints; i++) {\n        var point = points[i];\n        var label = labels[i];\n        var current = centroids[label];\n        for (var j = 0; j < dimension; j++) {\n            current[j] += point[j];\n        }\n        counts[label] += 1;\n    }\n\n    // Rescale centroids, checking for any that have no points.\n    for (var i$1 = 0; i$1 < numCluster; i$1++) {\n        if (counts[i$1] === 0) {\n            throw new Error((\"Centroid \" + i$1 + \" has no friends\"));\n        }\n        var centroid = centroids[i$1];\n        for (var j$1 = 0; j$1 < dimension; j$1++) {\n            centroid[j$1] /= counts[i$1];\n        }\n    }\n\n    return centroids;\n}\n\n/**\n * Calculate the difference between old centroids and new centroids.\n *\n * @private\n * @param {Array<Array<number>>} left One list of centroids.\n * @param {Array<Array<number>>} right Another list of centroids.\n * @return {number} Distance between centroids.\n */\nfunction calculateChange(left, right) {\n    var total = 0;\n    for (var i = 0; i < left.length; i++) {\n        total += euclideanDistance(left[i], right[i]);\n    }\n    return total;\n}\n\n/**\n * Calculate the [silhouette values](https://en.wikipedia.org/wiki/Silhouette_(clustering))\n * for clustered data.\n *\n * @param {Array<Array<number>>} points N-dimensional coordinates of points.\n * @param {Array<number>} labels Labels of points. This must be the same length as `points`,\n * and values must lie in [0..G-1], where G is the number of groups.\n * @return {Array<number>} The silhouette value for each point.\n *\n * @example\n * silhouette([[0.25], [0.75]], [0, 0]); // => [1.0, 1.0]\n */\nfunction silhouette(points, labels) {\n    if (points.length !== labels.length) {\n        throw new Error(\"must have exactly as many labels as points\");\n    }\n    var groupings = createGroups(labels);\n    var distances = calculateAllDistances(points);\n    var result = [];\n    for (var i = 0; i < points.length; i++) {\n        var s = 0;\n        if (groupings[labels[i]].length > 1) {\n            var a = meanDistanceFromPointToGroup(\n                i,\n                groupings[labels[i]],\n                distances\n            );\n            var b = meanDistanceToNearestGroup(\n                i,\n                labels,\n                groupings,\n                distances\n            );\n            s = (b - a) / Math.max(a, b);\n        }\n        result.push(s);\n    }\n    return result;\n}\n\n/**\n * Create a lookup table mapping group IDs to point IDs.\n *\n * @private\n * @param {Array<number>} labels Labels of points. This must be the same length as `points`,\n * and values must lie in [0..G-1], where G is the number of groups.\n * @return {Array<Array<number>>} An array of length G, each of whose entries is an array\n * containing the indices of the points in that group.\n */\nfunction createGroups(labels) {\n    var numGroups = 1 + max(labels);\n    var result = Array(numGroups);\n    for (var i = 0; i < labels.length; i++) {\n        var label = labels[i];\n        if (result[label] === undefined) {\n            result[label] = [];\n        }\n        result[label].push(i);\n    }\n    return result;\n}\n\n/**\n * Create a lookup table of all inter-point distances.\n *\n * @private\n * @param {Array<Array<number>>} points N-dimensional coordinates of points.\n * @return {Array<Array<number>>} A symmetric square array of inter-point distances\n * (zero on the diagonal).\n */\nfunction calculateAllDistances(points) {\n    var numPoints = points.length;\n    var result = makeMatrix(numPoints, numPoints);\n    for (var i = 0; i < numPoints; i++) {\n        for (var j = 0; j < i; j++) {\n            result[i][j] = euclideanDistance(points[i], points[j]);\n            result[j][i] = result[i][j];\n        }\n    }\n    return result;\n}\n\n/**\n * Calculate the mean distance between this point and all the points in the\n * nearest group (as determined by which point in another group is closest).\n *\n * @private\n * @param {number} which The index of this point.\n * @param {Array<number>} labels Labels of points.\n * @param {Array<Array<number>>} groupings An array whose entries are arrays\n * containing the indices of the points in that group.\n * @param {Array<Array<number>>} distances A symmetric square array of inter-point\n * distances.\n * @return {number} The mean distance from this point to others in the nearest\n * group.\n */\nfunction meanDistanceToNearestGroup(which, labels, groupings, distances) {\n    var label = labels[which];\n    var result = Number.MAX_VALUE;\n    for (var i = 0; i < groupings.length; i++) {\n        if (i !== label) {\n            var d = meanDistanceFromPointToGroup(\n                which,\n                groupings[i],\n                distances\n            );\n            if (d < result) {\n                result = d;\n            }\n        }\n    }\n    return result;\n}\n\n/**\n * Calculate the mean distance between a point and all the points in a group\n * (possibly its own).\n *\n * @private\n * @param {number} which The index of this point.\n * @param {Array<number>} group The indices of all the points in the group in\n * question.\n * @param {Array<Array<number>>} distances A symmetric square array of inter-point\n * distances.\n * @return {number} The mean distance from this point to others in the\n * specified group.\n */\nfunction meanDistanceFromPointToGroup(which, group, distances) {\n    var total = 0;\n    for (var i = 0; i < group.length; i++) {\n        total += distances[which][group[i]];\n    }\n    return total / group.length;\n}\n\n/**\n * Calculate the [silhouette metric](https://en.wikipedia.org/wiki/Silhouette_(clustering))\n * for a set of N-dimensional points arranged in groups. The metric is the largest\n * individual silhouette value for the data.\n *\n * @param {Array<Array<number>>} points N-dimensional coordinates of points.\n * @param {Array<number>} labels Labels of points. This must be the same length as `points`,\n * and values must lie in [0..G-1], where G is the number of groups.\n * @return {number} The silhouette metric for the groupings.\n *\n * @example\n * silhouetteMetric([[0.25], [0.75]], [0, 0]); // => 1.0\n */\nfunction silhouetteMetric(points, labels) {\n    var values = silhouette(points, labels);\n    return max(values);\n}\n\n/**\n * Relative error.\n *\n * This is more difficult to calculate than it first appears [1,2].  The usual\n * formula for the relative error between an actual value A and an expected\n * value E is `|(A-E)/E|`, but:\n *\n * 1. If the expected value is 0, any other value has infinite relative error,\n *    which is counter-intuitive: if the expected voltage is 0, getting 1/10th\n *    of a volt doesn't feel like an infinitely large error.\n *\n * 2. This formula does not satisfy the mathematical definition of a metric [3].\n *    [4] solved this problem by defining the relative error as `|ln(|A/E|)|`,\n *    but that formula only works if all values are positive: for example, it\n *    reports the relative error of -10 and 10 as 0.\n *\n * Our implementation sticks with convention and returns:\n *\n * - 0 if the actual and expected values are both zero\n * - Infinity if the actual value is non-zero and the expected value is zero\n * - `|(A-E)/E|` in all other cases\n *\n * [1] https://math.stackexchange.com/questions/677852/how-to-calculate-relative-error-when-true-value-is-zero\n * [2] https://en.wikipedia.org/wiki/Relative_change_and_difference\n * [3] https://en.wikipedia.org/wiki/Metric_(mathematics)#Definition\n * [4] F.W.J. Olver: \"A New Approach to Error Arithmetic.\" SIAM Journal on\n *     Numerical Analysis, 15(2), 1978, 10.1137/0715024.\n *\n * @param {number} actual The actual value.\n * @param {number} expected The expected value.\n * @return {number} The relative error.\n */\nfunction relativeError(actual, expected) {\n    // These lines are actually covered by tests, but it seems\n    // like c8 has a bug that marks them as not covered.\n    /* c8 ignore start */\n    if (actual === 0 && expected === 0) {\n        return 0;\n    }\n    /* c8 ignore end */\n    return Math.abs((actual - expected) / expected);\n}\n\n/**\n * Approximate equality.\n *\n * @param {number} actual The value to be tested.\n * @param {number} expected The reference value.\n * @param {number} tolerance The acceptable relative difference.\n * @return {boolean} Whether numbers are within tolerance.\n */\nfunction approxEqual(actual, expected, tolerance) {\n    if ( tolerance === void 0 ) tolerance = epsilon;\n\n    return relativeError(actual, expected) <= tolerance;\n}\n\nexport { BayesianClassifier, PerceptronModel, addToMean, approxEqual, mean as average, meanSimple as averageSimple, BayesianClassifier as bayesian, bernoulliDistribution, binomialDistribution, bisect, chiSquaredDistributionTable, chiSquaredGoodnessOfFit, chunk, ckmeans, coefficientOfVariation, combinations, combinationsReplacement, combineMeans, combineVariances, cumulativeStdLogisticProbability, cumulativeStdNormalProbability, epsilon, equalIntervalBreaks, errorFunction as erf, errorFunction, extent, extentSorted, factorial, gamma, gammaln, geometricMean, harmonicMean, interquartileRange, inverseErrorFunction, interquartileRange as iqr, jenks, kMeansCluster, kernelDensityEstimation as kde, kernelDensityEstimation, linearRegression, linearRegressionLine, logAverage, logit, medianAbsoluteDeviation as mad, max, maxSorted, mean, meanSimple, median, medianAbsoluteDeviation, medianSorted, min, minSorted, mode, modeFast, modeSorted, numericSort, PerceptronModel as perceptron, permutationTest, permutationsHeap, poissonDistribution, probit, product, quantile, quantileRank, quantileRankSorted, quantileSorted, quickselect, rSquared, relativeError, rootMeanSquare as rms, rootMeanSquare, sample, sampleCorrelation, sampleCovariance, sampleKurtosis, sampleRankCorrelation, sampleSkewness, sampleStandardDeviation, sampleVariance, sampleWithReplacement, shuffle, shuffleInPlace, sign, silhouette, silhouetteMetric, standardDeviation, standardNormalTable, subtractFromMean, sum, sumNthPowerDeviations, sumSimple, tTest, tTestTwoSample, uniqueCountSorted, variance, wilcoxonRankSum, zScore };\n//# sourceMappingURL=simple-statistics.mjs.map\n","// index.ts\nimport { coordEach } from \"@turf/meta\";\nfunction bbox(geojson, options = {}) {\n  if (geojson.bbox != null && true !== options.recompute) {\n    return geojson.bbox;\n  }\n  const result = [Infinity, Infinity, -Infinity, -Infinity];\n  coordEach(geojson, (coord) => {\n    if (result[0] > coord[0]) {\n      result[0] = coord[0];\n    }\n    if (result[1] > coord[1]) {\n      result[1] = coord[1];\n    }\n    if (result[2] < coord[0]) {\n      result[2] = coord[0];\n    }\n    if (result[3] < coord[1]) {\n      result[3] = coord[1];\n    }\n  });\n  return result;\n}\nvar turf_bbox_default = bbox;\nexport {\n  bbox,\n  turf_bbox_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { bbox } from \"@turf/bbox\";\nimport { point } from \"@turf/helpers\";\nfunction center(geojson, options = {}) {\n  const ext = bbox(geojson);\n  const x = (ext[0] + ext[2]) / 2;\n  const y = (ext[1] + ext[3]) / 2;\n  return point([x, y], options.properties, options);\n}\nvar turf_center_default = center;\nexport {\n  center,\n  turf_center_default as default\n};\n//# sourceMappingURL=index.js.map","import { FeatureCollection } from \"geojson\"\nimport { geoInterpolate, geoOrthographic, geoPath } from \"d3-geo\"\nimport { interpolateNumber } from \"d3-interpolate\"\nimport { easeCubicOut } from \"d3-ease\"\nimport * as R from \"remeda\"\nimport { EntityName, GlobeConfig, GlobeRegionName } from \"@ourworldindata/types\"\nimport {\n    Bounds,\n    excludeUndefined,\n    PartialBy,\n    PointVector,\n    checkIsOwidContinent,\n    getCountryNamesForRegion,\n    getRegionByName,\n    checkHasMembers,\n} from \"@ourworldindata/utils\"\nimport { MapConfig } from \"./MapConfig\"\nimport { getGeoFeaturesForGlobe } from \"./GeoFeatures\"\nimport {\n    DEFAULT_GLOBE_ROTATION,\n    DEFAULT_GLOBE_ROTATIONS_FOR_TIME,\n    DEFAULT_GLOBE_SIZE,\n    GeoFeature,\n    GLOBE_COUNTRY_ZOOM,\n    GLOBE_LATITUDE_MAX,\n    GLOBE_LATITUDE_MIN,\n    GLOBE_MAX_ZOOM,\n    GLOBE_MIN_ZOOM,\n    GLOBE_VIEWPORTS,\n    GlobeRenderFeature,\n    MAP_REGION_NAMES,\n} from \"./MapChartConstants\"\nimport { isPointPlacedOnVisibleHemisphere } from \"./MapHelpers\"\nimport { ckmeans } from \"simple-statistics\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray\"\nimport { center } from \"@turf/center\"\nimport { action } from \"mobx\"\n\nconst geoFeaturesById = new Map<string, GlobeRenderFeature>(\n    getGeoFeaturesForGlobe().map((f: GlobeRenderFeature) => [f.id, f])\n)\n\nconst LONGITUDE_OFFSET = 40\nconst ANIMATION_DURATION = 600\n\ninterface Target {\n    coords: [number, number]\n    zoom: number\n}\n\ninterface GlobeControllerManager {\n    mapConfig: MapConfig\n}\n\nexport class GlobeController {\n    private manager: GlobeControllerManager\n\n    constructor(manager: GlobeControllerManager) {\n        this.manager = manager\n    }\n\n    private get globeConfig(): GlobeConfig {\n        return this.manager.mapConfig.globe\n    }\n\n    @action.bound showGlobe(): void {\n        this.globeConfig.isActive = true\n    }\n\n    @action.bound hideGlobe(): void {\n        this.globeConfig.isActive = false\n    }\n\n    @action.bound toggleGlobe(): void {\n        this.globeConfig.isActive = !this.globeConfig.isActive\n    }\n\n    @action.bound resetGlobe(): void {\n        this.globeConfig.rotation = DEFAULT_GLOBE_ROTATION\n        this.globeConfig.zoom = 1\n        this.globeConfig.focusCountry = undefined\n    }\n\n    @action.bound setFocusCountry(country: EntityName): void {\n        this.globeConfig.focusCountry = country\n    }\n\n    @action.bound dismissCountryFocus(): void {\n        this.globeConfig.focusCountry = undefined\n    }\n\n    @action.bound private jumpTo(target: Partial<Target>): void {\n        if (target.coords) this.globeConfig.rotation = target.coords\n        if (target.zoom) this.globeConfig.zoom = target.zoom\n    }\n\n    private showGlobeAndRotateTo(target: Target): void {\n        // if the globe isn't currently shown, jump to the offset position\n        // before switching to it so that rotating is predictable\n        if (!this.globeConfig.isActive) {\n            this.jumpTo({ coords: addLongitudeOffset(target.coords) })\n            this.showGlobe()\n        }\n\n        void this.rotateTo(target)\n    }\n\n    jumpToOwidContinent(continent: GlobeRegionName): void {\n        const target = calculateTargetForOwidContinent(continent)\n        this.jumpTo(target)\n    }\n\n    rotateToCountry(country: EntityName, zoom?: number): void {\n        const target = calculateTargetForCountry(country, zoom)\n        if (target) this.showGlobeAndRotateTo(target)\n    }\n\n    rotateToOwidContinent(continent: GlobeRegionName): void {\n        const target = calculateTargetForOwidContinent(continent)\n        this.showGlobeAndRotateTo(target)\n    }\n\n    rotateToDefaultBasedOnTime(): void {\n        const target = calculateTargetBasedOnTime()\n        this.showGlobeAndRotateTo(target)\n    }\n\n    rotateToSelection(): void {\n        const target = calculateTargetForSelection(\n            this.manager.mapConfig.selection\n        )\n        if (target) this.showGlobeAndRotateTo(target)\n    }\n\n    rotateToRegion(regionName: string): void {\n        const target = calculateTargetForRegion(regionName)\n        if (target) this.showGlobeAndRotateTo(target)\n    }\n\n    private currentAnimation?: AbortController\n    private async rotateTo(target: PartialBy<Target, \"zoom\">): Promise<void> {\n        // cancel any ongoing rotation\n        if (this.currentAnimation) {\n            this.currentAnimation.abort()\n            this.currentAnimation = undefined\n        }\n\n        // set up a new abort controller\n        const controller = new AbortController()\n        this.currentAnimation = controller\n\n        try {\n            await this._rotateTo(controller.signal, target.coords, target.zoom)\n        } catch {\n            // aborted\n        } finally {\n            if (this.currentAnimation === controller) {\n                this.currentAnimation = undefined\n            }\n        }\n    }\n\n    private async _rotateTo(\n        signal: AbortSignal,\n        targetCoords: [number, number],\n        targetZoom?: number\n    ): Promise<void> {\n        const currentCoords = this.globeConfig.rotation\n        const animatedCoords = geoInterpolate(currentCoords, targetCoords)\n\n        const currentZoom = this.globeConfig.zoom\n        const animatedZoom =\n            targetZoom !== undefined\n                ? interpolateNumber(currentZoom, targetZoom)\n                : undefined\n\n        const animPromise = new Promise<void>((resolve, reject) => {\n            const now = Date.now()\n            const step = action((): void => {\n                const elapsed = Date.now() - now\n                const t = Math.min(1, elapsed / ANIMATION_DURATION)\n\n                // Check if the animation was canceled\n                if (signal.aborted) {\n                    reject()\n                    return\n                }\n\n                // animate globe rotation\n                this.globeConfig.rotation = animatedCoords(easeCubicOut(t))\n\n                // animate zoom\n                if (animatedZoom)\n                    this.globeConfig.zoom = animatedZoom(easeCubicOut(t))\n\n                if (t < 1) {\n                    requestAnimationFrame(step)\n                } else {\n                    resolve()\n                }\n            })\n            requestAnimationFrame(step)\n        })\n\n        await animPromise\n            .catch(() => {\n                // ignore\n            })\n            .then(\n                action(() => {\n                    // ensure we end exactly at the target values\n                    this.globeConfig.rotation = targetCoords\n                    if (targetZoom !== undefined)\n                        this.globeConfig.zoom = targetZoom\n                })\n            )\n    }\n}\n\nfunction calculateTargetForCountry(\n    country: EntityName,\n    zoom?: number\n): Target | undefined {\n    const geoFeature = geoFeaturesById.get(country)\n    if (!geoFeature) return\n\n    const coords: [number, number] = [\n        geoFeature.geoCentroid[0],\n        R.clamp(geoFeature.geoCentroid[1], {\n            min: GLOBE_LATITUDE_MIN,\n            max: GLOBE_LATITUDE_MAX,\n        }),\n    ]\n\n    // make sure the whole country is visible after zooming\n    const zoomToFit = calculateZoomToFitForGeoFeature(geoFeature.geo)\n    const targetZoom = Math.min(zoom ?? GLOBE_COUNTRY_ZOOM, zoomToFit)\n\n    return { coords, zoom: targetZoom }\n}\n\nfunction calculateZoomToFitForGeoFeature(geoFeature: GeoFeature): number {\n    const centerPoint = getCenterPoint(geoFeature)\n    const projection = geoOrthographic().rotate(negateCoords(centerPoint))\n\n    const corners = geoPath().projection(projection).bounds(geoFeature)\n    const bounds = Bounds.fromCorners(\n        new PointVector(...corners[0]),\n        new PointVector(...corners[1])\n    )\n\n    return calculateZoomToFitForBounds(bounds)\n}\n\nfunction calculateZoomToFitForBounds(bounds: Bounds): number {\n    // calculate the zoom needed for the bounds to be visible\n    let zoom = Math.min(\n        DEFAULT_GLOBE_SIZE / bounds.width,\n        DEFAULT_GLOBE_SIZE / bounds.height\n    )\n    if (Number.isNaN(zoom)) zoom = 1\n\n    // it's nicer to have a bit of padding around the zoomed-to area\n    zoom = zoom - 0.05\n\n    // clamp the zoom to the allowed range\n    zoom = R.clamp(zoom, { min: GLOBE_MIN_ZOOM, max: GLOBE_MAX_ZOOM })\n\n    return zoom\n}\n\nfunction calculateTargetForOwidContinent(continent: GlobeRegionName): Target {\n    const viewport = GLOBE_VIEWPORTS[continent]\n    return { coords: viewport.rotation, zoom: viewport.zoom }\n}\n\nfunction calculateTargetBasedOnTime(): Target {\n    const coords = getCoordsBasedOnTime()\n    return { coords, zoom: 1 }\n}\n\nfunction calculateTargetForRegion(regionName: string): Target | undefined {\n    const region = getRegionByName(regionName)\n    if (!region || !checkHasMembers(region)) return\n    const countryNames = getCountryNamesForRegion(region)\n    return calculateTargetForCountryCollection(countryNames)\n}\n\nfunction calculateTargetForSelection(\n    selection: MapSelectionArray\n): Target | undefined {\n    // if at least one country is selected, then rotate to the countries (and ignore the regions)\n    if (selection.selectedCountryNamesInForeground.length > 0) {\n        return calculateTargetForCountryCollection(\n            selection.selectedCountryNamesInForeground\n        )\n    }\n\n    // if a single owid continent is selected, then rotate to it\n    // (the hard-coded coords/zoom values are nicer than dynamically computing it)\n    if (\n        selection.selectedRegions.length === 1 &&\n        checkIsOwidContinent(selection.selectedRegions[0])\n    ) {\n        return calculateTargetForOwidContinent(\n            MAP_REGION_NAMES[\n                selection.selectedRegions[0].name\n            ] as GlobeRegionName\n        )\n    }\n\n    // rotate and zoom to all countries in the selected regions\n    const countryNames = [\n        ...selection.selectedCountryNamesInForeground,\n        ...selection.countryNamesForSelectedRegions,\n    ]\n    return calculateTargetForCountryCollection(countryNames)\n}\n\nfunction calculateTargetForCountryCollection(\n    countryNames: string[]\n): Target | undefined {\n    // early return if the selection is empty or a single country is selected\n    if (countryNames.length === 0) return\n    if (countryNames.length === 1) {\n        return calculateTargetForCountry(countryNames[0])\n    }\n\n    // find a subset of countries that can be shown on the globe,\n    // e.g. if 'Mexico', 'Guatemala' and 'Australia' are selected, then\n    // 'Australia' is dropped as it's on the opposite site from South America\n    const visibleCountries = findVisibleCountrySubset(countryNames)\n\n    // early return if no country or a single country is visible\n    if (visibleCountries.length === 0) return\n    if (visibleCountries.length === 1) {\n        return calculateTargetForCountry(visibleCountries[0])\n    }\n\n    // calculate target coords and zoom for two or more countries\n    return getCoordsAndZoomForCountryCollection(visibleCountries)\n}\n\nfunction getCoordsBasedOnTime(): [number, number] {\n    const date = new Date()\n    const hours = date.getUTCHours()\n\n    if (hours <= 7) {\n        return DEFAULT_GLOBE_ROTATIONS_FOR_TIME.UTC_MORNING\n    } else if (hours <= 15) {\n        return DEFAULT_GLOBE_ROTATIONS_FOR_TIME.UTC_MIDDAY\n    } else {\n        return DEFAULT_GLOBE_ROTATIONS_FOR_TIME.UTC_EVENING\n    }\n}\n\nfunction getCenterForCountryCollection(\n    countryNames: string[]\n): [number, number] {\n    const featureCollection = makeFeatureCollectionForCountries(countryNames)\n    return getCenterPoint(featureCollection)\n}\n\nfunction getCenterPoint(\n    geojson: GeoFeature | FeatureCollection\n): [number, number] {\n    const centerPoint = center(geojson)\n\n    return [\n        centerPoint.geometry.coordinates[0],\n        R.clamp(centerPoint.geometry.coordinates[1], {\n            min: GLOBE_LATITUDE_MIN,\n            max: GLOBE_LATITUDE_MAX,\n        }),\n    ]\n}\n\nfunction getCoordsAndZoomForCountryCollection(countryNames: string[]): {\n    coords: [number, number]\n    zoom: number\n} {\n    const centerPoint = getCenterForCountryCollection(countryNames)\n    const projection = geoOrthographic().rotate(negateCoords(centerPoint))\n\n    const bounds = excludeUndefined(\n        countryNames.map((countryName) => {\n            const feature = geoFeaturesById.get(countryName)\n            if (!feature) return\n            const corners = geoPath().projection(projection).bounds(feature.geo)\n            if (corners[0][0] === Number.POSITIVE_INFINITY) return\n            return Bounds.fromCorners(\n                new PointVector(...corners[0]),\n                new PointVector(...corners[1])\n            )\n        })\n    )\n\n    // merge bounds and calculate the zoom needed for the countries to be visible\n    const mergedBounds = Bounds.merge(bounds)\n    const zoom = calculateZoomToFitForBounds(mergedBounds)\n\n    return { coords: centerPoint, zoom }\n}\n\nfunction findVisibleCountrySubset(countryNames: string[]): string[] {\n    // rotate the globe to the center point of all given countries,\n    // and find all countries that are then visible on the globe\n    const centerPoint = getCenterForCountryCollection(countryNames)\n    const projection = geoOrthographic().rotate(negateCoords(centerPoint))\n    const visibleCountries = countryNames.filter((countryName) => {\n        const feature = geoFeaturesById.get(countryName)\n        if (!feature) return false\n\n        // check if the centroid is visible\n        const isCentroidVisible = isPointPlacedOnVisibleHemisphere(\n            feature.geoCentroid,\n            centerPoint\n        )\n        if (!isCentroidVisible) return false\n\n        // if the centroid is visible, then also check if the bounds are\n        // visible (if they're infinite, then they're not)\n        const corners = geoPath().projection(projection).bounds(feature.geo)\n        if (corners[0][0] === Number.POSITIVE_INFINITY) return false\n\n        return true\n    })\n\n    // it's possible for no country to be visible if the countries are on opposite\n    // sides from the globe. in that case, we need to drop a subset of countries\n    if (visibleCountries.length === 0) {\n        // cluster countries into two groups based on their centroid longitude\n        const clusters = clusterCountriesByCentroidLongitude(countryNames)\n\n        // keep the bigger cluster\n        // (if both clusters have the same number of countries, keep any)\n        return clusters[0].length > clusters[1].length\n            ? clusters[0]\n            : clusters[1]\n    }\n\n    return visibleCountries\n}\n\nfunction clusterCountriesByCentroidLongitude(\n    countryNames: string[]\n): string[][] {\n    const nameToLon: Record<string, number> = {}\n    const lonToName: Record<number, string> = {}\n\n    // map country names to their centroid's longitude and vice versa\n    // (assumes that no two countries have the same longitude)\n    countryNames.forEach((countryName) => {\n        const feature = geoFeaturesById.get(countryName)\n        if (!feature) return\n\n        const lon = R.round(feature.geoCentroid[0], 5)\n        nameToLon[countryName] = lon\n        lonToName[lon] = countryName\n    })\n\n    // cluster longitudes into two groups\n    const clusters = ckmeans(\n        excludeUndefined(countryNames.map((name) => nameToLon[name])),\n        2\n    )\n\n    // map longitudes back to country names\n    return clusters.map((cluster) =>\n        cluster.map((centroidLon) => lonToName[centroidLon])\n    )\n}\n\nfunction makeFeatureCollectionForCountries(\n    countryNames: string[]\n): FeatureCollection {\n    const features = excludeUndefined(\n        countryNames.map((name) => geoFeaturesById.get(name))\n    )\n\n    return {\n        type: \"FeatureCollection\",\n        features: features.map((feature) => feature.geo),\n    }\n}\n\nfunction addLongitudeOffset(\n    coords: [number, number],\n    offset = LONGITUDE_OFFSET\n): [number, number] {\n    return [coords[0] + offset, coords[1]]\n}\n\nfunction negateCoords(coords: [number, number]): [number, number] {\n    return [-coords[0], -coords[1]]\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { computed, action, observable, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    geoGraticule,\n    geoOrthographic,\n    GeoPath,\n    geoPath,\n    GeoPermissibleObjects,\n} from \"d3-geo\"\nimport { Quadtree, quadtree } from \"d3-quadtree\"\nimport { select } from \"d3-selection\"\nimport { zoom } from \"d3-zoom\"\n// @ts-expect-error no types available\nimport versor from \"versor\"\nimport {\n    makeFigmaId,\n    Bounds,\n    isTouchDevice,\n    getRelativeMouse,\n    checkIsTouchEvent,\n    PointVector,\n    MapRegionName,\n    excludeUndefined,\n    EntityName,\n} from \"@ourworldindata/utils\"\nimport {\n    Annotation,\n    ANNOTATION_COLOR_DARK,\n    ANNOTATION_COLOR_LIGHT,\n    ChoroplethMapManager,\n    ChoroplethSeriesByName,\n    DEFAULT_GLOBE_SIZE,\n    ExternalAnnotation,\n    GEO_FEATURES_CLASSNAME,\n    GLOBE_COUNTRY_ZOOM,\n    GLOBE_LATITUDE_MAX,\n    GLOBE_LATITUDE_MIN,\n    GLOBE_MAX_ZOOM,\n    GLOBE_MIN_ZOOM,\n    GlobeRenderFeature,\n    InternalAnnotation,\n    MAP_HOVER_TARGET_RANGE,\n    PROJECTED_DATA_LEGEND_COLOR,\n    RenderFeature,\n    SVGMouseEvent,\n} from \"./MapChartConstants\"\nimport { MapConfig } from \"./MapConfig\"\nimport { getGeoFeaturesForGlobe } from \"./GeoFeatures\"\nimport {\n    BackgroundCountry,\n    CountryWithData,\n    CountryWithNoData,\n    ExternalValueAnnotation,\n    InternalValueAnnotation,\n    NoDataPattern,\n    ProjectedDataPattern,\n} from \"./MapComponents\"\nimport { Patterns } from \"../core/GrapherConstants\"\nimport {\n    calculateDistance,\n    detectNearbyFeature,\n    isPointPlacedOnVisibleHemisphere,\n    sortFeaturesByInteractionStateAndSize,\n    getForegroundFeatures,\n    isValidGlobeRegionName,\n} from \"./MapHelpers\"\nimport {\n    makeInternalAnnotationForFeature,\n    makeExternalAnnotationForFeature,\n    repositionAndFilterExternalAnnotations,\n} from \"./MapAnnotations\"\nimport * as R from \"remeda\"\nimport { GlobeController } from \"./GlobeController\"\nimport { isDarkColor } from \"../color/ColorUtils\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray\"\n\nconst DEFAULT_SCALE = geoOrthographic().scale()\n\n@observer\nexport class ChoroplethGlobe extends React.Component<{\n    manager: ChoroplethMapManager\n}> {\n    base = React.createRef<SVGGElement>()\n\n    private hoverEnterFeature: GlobeRenderFeature | undefined = undefined\n    private hoverNearbyFeature: GlobeRenderFeature | undefined = undefined\n\n    private isPanningOrZooming = false\n\n    constructor(props: { manager: ChoroplethMapManager }) {\n        super(props)\n\n        makeObservable<\n            ChoroplethGlobe,\n            \"hoverEnterFeature\" | \"hoverNearbyFeature\"\n        >(this, {\n            hoverEnterFeature: observable,\n            hoverNearbyFeature: observable,\n        })\n    }\n\n    @computed private get isTouchDevice(): boolean {\n        return isTouchDevice()\n    }\n\n    @computed private get manager(): ChoroplethMapManager {\n        return this.props.manager\n    }\n\n    @computed get mapConfig(): MapConfig {\n        return this.manager.mapConfig\n    }\n\n    @computed private get globeController(): GlobeController {\n        return this.manager.globeController ?? new GlobeController(this)\n    }\n\n    @computed.struct private get bounds(): Bounds {\n        return this.manager.choroplethMapBounds\n    }\n\n    @computed private get selectionArray(): MapSelectionArray {\n        return this.manager.selectionArray ?? new MapSelectionArray()\n    }\n\n    @computed.struct private get choroplethData(): ChoroplethSeriesByName {\n        return this.manager.choroplethData\n    }\n\n    @computed private get features(): GlobeRenderFeature[] {\n        return getGeoFeaturesForGlobe()\n    }\n\n    @computed private get featuresById(): Map<string, GlobeRenderFeature> {\n        return new Map(this.features.map((feature) => [feature.id, feature]))\n    }\n\n    @computed private get foregroundFeatures(): GlobeRenderFeature[] {\n        return getForegroundFeatures(this.features, this.selectionArray)\n    }\n\n    @computed\n    private get backgroundFeatures(): GlobeRenderFeature[] {\n        return _.difference(this.features, this.foregroundFeatures)\n    }\n\n    @computed private get backgroundFeatureIdSet(): Set<EntityName> {\n        return new Set(this.backgroundFeatures.map((feature) => feature.id))\n    }\n\n    @computed private get featuresWithData(): GlobeRenderFeature[] {\n        return this.foregroundFeatures.filter((feature) =>\n            this.choroplethData.has(feature.id)\n        )\n    }\n\n    @computed private get sortedFeaturesWithData(): GlobeRenderFeature[] {\n        // sort features so that hovered or selected features are rendered last\n        // and smaller countries are rendered on top of bigger ones\n        return sortFeaturesByInteractionStateAndSize(this.featuresWithData, {\n            isHovered: (featureId: string) =>\n                this.manager.getHoverState?.(featureId).active ?? false,\n            isSelected: (featureId) =>\n                this.manager.isSelected?.(featureId) ?? false,\n        })\n    }\n\n    @computed private get featuresWithNoData(): GlobeRenderFeature[] {\n        return _.difference(this.foregroundFeatures, this.featuresWithData)\n    }\n\n    @computed private get binColors(): string[] {\n        return this.manager.binColors ?? []\n    }\n\n    // Map uses a hybrid approach to mouseover\n    // If mouse is inside an element, that is prioritized\n    // Otherwise we do a quadtree search for the closest center point of a feature bounds,\n    // so that we can hover very small countries without trouble\n    @action.bound private detectNearbyFeature(\n        event: PointerEvent,\n        maxDistance = MAP_HOVER_TARGET_RANGE\n    ): GlobeRenderFeature | undefined {\n        if (this.hoverEnterFeature || !this.base.current) return\n\n        const nearbyFeature = detectNearbyFeature({\n            quadtree: this.quadtree,\n            element: this.base.current,\n            event,\n            distance: maxDistance,\n        })\n\n        if (!nearbyFeature) {\n            this.hoverNearbyFeature = undefined\n            this.manager.onMapMouseLeave?.()\n            return\n        }\n\n        if (nearbyFeature.id !== this.hoverNearbyFeature?.id) {\n            this.hoverNearbyFeature = nearbyFeature\n            this.manager.onMapMouseOver?.(nearbyFeature.geo)\n        }\n\n        return nearbyFeature\n    }\n\n    @computed private get globeSize(): number {\n        return Math.min(this.bounds.width, this.bounds.height)\n    }\n\n    @computed private get globeCenter(): [number, number] {\n        return [\n            this.bounds.left + this.bounds.width / 2,\n            this.bounds.top + this.bounds.height / 2,\n        ]\n    }\n\n    private computeProjectionScale(zoomScale: number): number {\n        return zoomScale * DEFAULT_SCALE * (this.globeSize / DEFAULT_GLOBE_SIZE)\n    }\n\n    @computed private get minScale(): number {\n        return this.computeProjectionScale(GLOBE_MIN_ZOOM)\n    }\n\n    @computed private get maxScale(): number {\n        return this.computeProjectionScale(GLOBE_MAX_ZOOM)\n    }\n\n    @computed private get globeScale(): number {\n        return this.computeProjectionScale(this.zoomScale)\n    }\n\n    @computed private get globeRadius(): number {\n        return (this.globeSize / 2) * this.zoomScale\n    }\n\n    @computed private get globeRotation(): [number, number] {\n        // d3 projections expect [-lon, -lat] to rotate to [lon, lat]\n        return [\n            -this.mapConfig.globe.rotation[0],\n            -this.mapConfig.globe.rotation[1],\n        ]\n    }\n\n    @computed private get zoomScale(): number {\n        return this.mapConfig.globe.zoom\n    }\n\n    @computed private get projection(): any {\n        return geoOrthographic()\n            .scale(this.globeScale)\n            .translate(this.globeCenter)\n            .rotate(this.globeRotation)\n    }\n\n    @computed private get globePath(): GeoPath<any, GeoPermissibleObjects> {\n        return geoPath().digits(1).projection(this.projection)\n    }\n\n    private getPath(feature: GlobeRenderFeature): string {\n        return this.globePath(feature.geo) ?? \"\"\n    }\n\n    private isFeatureCentroidVisibleOnGlobe(\n        feature: GlobeRenderFeature,\n        threshold = 0 // 1 = at the exact center, 0 = anywhere on the visible hemisphere\n    ): boolean {\n        return isPointPlacedOnVisibleHemisphere(\n            feature.geoCentroid,\n            this.mapConfig.globe.rotation,\n            threshold\n        )\n    }\n\n    @computed private get graticulePath(): string {\n        const graticule = geoGraticule().step([10, 10])()\n        return this.globePath(graticule) ?? \"\"\n    }\n\n    @computed private get equatorPath(): string {\n        const equator = geoGraticule().step([0, 360])()\n        return this.globePath(equator) ?? \"\"\n    }\n\n    @computed private get visibleFeatures(): GlobeRenderFeature[] {\n        return this.foregroundFeatures.filter((feature) =>\n            this.isFeatureCentroidVisibleOnGlobe(feature)\n        )\n    }\n\n    @computed private get quadtree(): Quadtree<GlobeRenderFeature> {\n        return quadtree<GlobeRenderFeature>()\n            .x((feature) => this.projection(feature.geoCentroid)[0])\n            .y((feature) => this.projection(feature.geoCentroid)[1])\n            .addAll(this.visibleFeatures)\n    }\n\n    @computed private get shouldShowAnnotations(): boolean {\n        return !!(\n            this.manager.mapColumn.hasNumberFormatting &&\n            !this.mapConfig.tooltipUseCustomLabels\n        )\n    }\n\n    private formatAnnotationLabel(value: string | number): string {\n        return this.manager.mapColumn.formatValueShortWithAbbreviations(value)\n    }\n\n    @computed private get annotationCandidateFeatures(): GlobeRenderFeature[] {\n        if (!this.shouldShowAnnotations) return []\n\n        return excludeUndefined(\n            this.mapConfig.selection.selectedCountryNamesInForeground.map(\n                (name) => this.featuresById.get(name)\n            )\n        ).filter((feature) => this.foregroundFeatures.includes(feature))\n    }\n\n    /* Naively placed annotations that might be overlapping */\n    @computed\n    private get annotationCandidates(): Annotation[] {\n        return excludeUndefined(\n            this.annotationCandidateFeatures\n                .filter(\n                    (feature): feature is GlobeRenderFeature =>\n                        feature !== undefined &&\n                        // don't show annotations for countries that are currently\n                        // on the back side of the globe or at the edge\n                        this.isFeatureCentroidVisibleOnGlobe(feature, 0.3)\n                )\n                .map((feature) => {\n                    const series = this.choroplethData.get(feature.id)\n                    if (!series) return\n\n                    const labelColor = isDarkColor(series.color)\n                        ? ANNOTATION_COLOR_LIGHT\n                        : ANNOTATION_COLOR_DARK\n                    const fontSizeScale = 1 / this.zoomScale\n\n                    const args = {\n                        feature,\n                        projection: this.projection,\n                        formattedValue: this.formatAnnotationLabel(\n                            series.value\n                        ),\n                        color: labelColor,\n                    }\n\n                    // try to fit the annotation inside the feature\n                    const internalAnnotation =\n                        makeInternalAnnotationForFeature(args)\n                    if (internalAnnotation) return internalAnnotation\n\n                    // place the annotation outside of the feature\n                    const externalAnnotation = makeExternalAnnotationForFeature(\n                        { ...args, fontSizeScale }\n                    )\n                    if (externalAnnotation) return externalAnnotation\n\n                    return undefined\n                })\n        )\n    }\n\n    @computed\n    private get internalAnnotations(): InternalAnnotation[] {\n        return this.annotationCandidates.filter(\n            (annotation) => annotation.type === \"internal\"\n        )\n    }\n\n    @computed\n    private get externalAnnotations(): ExternalAnnotation[] {\n        const { projection, backgroundFeatureIdSet } = this\n        const annotations = this.annotationCandidates.filter(\n            (annotation) => annotation.type === \"external\"\n        )\n        return repositionAndFilterExternalAnnotations({\n            annotations,\n            projection,\n            backgroundFeatureIdSet,\n        })\n    }\n\n    @action.bound private rotateGlobe(targetCoords: [number, number]): void {\n        this.mapConfig.globe.rotation = [\n            -targetCoords[0],\n            // Clamping the latitude to [-90, 90] would allow rotation up to the poles.\n            // However, the panning strategy used doesn't work well around the poles.\n            // That's why we clamp the latitude to a narrower range.\n            -R.clamp(targetCoords[1], {\n                min: GLOBE_LATITUDE_MIN,\n                max: GLOBE_LATITUDE_MAX,\n            }),\n        ]\n    }\n\n    @action.bound private zoomGlobe(delta: number): void {\n        const sensitivity = 0.01\n        const newZoom = this.zoomScale * (1 + delta * sensitivity)\n        this.mapConfig.globe.zoom = R.clamp(newZoom, {\n            min: GLOBE_MIN_ZOOM,\n            max: GLOBE_MAX_ZOOM,\n        })\n    }\n\n    @computed private get hoverFeature(): GlobeRenderFeature | undefined {\n        return this.hoverEnterFeature || this.hoverNearbyFeature\n    }\n\n    @action.bound private clearHover(): void {\n        this.hoverEnterFeature = undefined\n        this.hoverNearbyFeature = undefined\n        this.manager.onMapMouseLeave?.()\n        this.globeController.dismissCountryFocus()\n    }\n\n    @action.bound private onPointerMove(event: PointerEvent): void {\n        this.detectNearbyFeature(event)\n    }\n\n    @action.bound private onPointerEnterFeature(\n        feature: GlobeRenderFeature,\n        event: PointerEvent\n    ): void {\n        // ignore pointer enter if panning or zooming\n        if (this.isPanningOrZooming) return\n        // on touch, let the click handler set hover so the\n        // tooltip doesn't appear before the click event fires\n        if (event.pointerType === \"touch\") return\n        this.setHoverEnterFeature(feature)\n    }\n\n    @action.bound private onPointerLeaveFeature(event: PointerEvent): void {\n        // on touch, the tooltip is dismissed via the document pointerdown handler\n        if (event.pointerType === \"touch\") return\n\n        this.clearHoverEnterFeature()\n    }\n\n    @action.bound private setHoverEnterFeature(\n        feature: GlobeRenderFeature\n    ): void {\n        if (this.hoverEnterFeature?.id === feature.id) return\n\n        this.hoverEnterFeature = feature\n        this.manager.onMapMouseOver?.(feature.geo)\n    }\n\n    @action.bound private clearHoverEnterFeature(): void {\n        this.hoverEnterFeature = undefined\n        this.manager.onMapMouseLeave?.()\n    }\n\n    @action.bound private onClick(feature: GlobeRenderFeature): void {\n        this.setHoverEnterFeature(feature)\n\n        // reset the region if necessary\n        this.mapConfig.region = MapRegionName.World\n\n        // select/deselect the country if allowed\n        const country = feature.id\n        if (this.manager.isMapSelectionEnabled) {\n            this.mapConfig.selection.toggleSelection(country)\n\n            // make sure country focus is dismissed for unselected countries\n            if (!this.mapConfig.selection.selectedSet.has(country))\n                this.globeController.dismissCountryFocus()\n        }\n\n        // rotate to the selected country on mobile\n        if (!this.manager.isMapSelectionEnabled) {\n            // only zoom in on click, never zoom out\n            const zoom = Math.max(GLOBE_COUNTRY_ZOOM, this.mapConfig.globe.zoom)\n            this.globeController.rotateToCountry(country, zoom)\n        }\n    }\n\n    @action.bound private onDocumentPointerDown(): void {\n        this.clearHover()\n    }\n\n    private setUpPanningAndZooming(): void {\n        const base = this.base.current\n        if (!base) return\n\n        // Possible interaction types are\n        // - zoom-scroll: zooming by scrolling via the wheel event\n        // - zoom-pinch: zooming by pinching using two fingers on touch devices\n        // - pan: panning by dragging the mouse or using a finger on touch devices\n        type InteractionType = \"zoom-scroll\" | \"zoom-pinch\" | \"pan\"\n\n        // Panning and zooming are powered by D3.\n        //\n        // Panning is adapted from https://observablehq.com/d/569d101dd5bd332b.\n        // The strategy ensures the geographic start point remains under the cursor\n        // where possible. See https://www.jasondavies.com/maps/rotate/ for more\n        // details.\n        //\n        // We could rely on D3's event.transform.k for zooming, but the\n        // transform value might be out of sync with the actual zoom level if\n        // the zoom level was changed elsewhere (e.g. by automatically zooming\n        // in on a country). That's why we compute the target zoom level ourselves.\n\n        const panAndZoom = (): any => {\n            let previousType: InteractionType | undefined\n\n            // for panning\n            let startCoords: [number, number, number],\n                startQuat: [number, number, number, number],\n                startRot: [number, number, number],\n                previousPos: [number, number]\n\n            // for zooming\n            let startDistance: number | undefined\n\n            const getInteractionType = (event: any): InteractionType => {\n                if (event.sourceEvent.type === \"wheel\") return \"zoom-scroll\"\n                if (isMultiTouchEvent(event.sourceEvent)) return \"zoom-pinch\"\n                return \"pan\"\n            }\n\n            const panningOrZoomingStart = (event: any): void => {\n                const type = getInteractionType(event)\n\n                const startPinching = (): void => {\n                    startDistance = calculatePinchDistance(event.sourceEvent)\n                }\n\n                const startPanning = (): void => {\n                    const posVector = getRelativeMouse(base, event.sourceEvent)\n                    const pos: [number, number] = [posVector.x, posVector.y]\n\n                    startCoords = versor.cartesian(this.projection.invert(pos))\n                    startRot = this.projection.rotate()\n                    startQuat = versor(startRot)\n                    previousPos = pos\n                }\n\n                if (type === \"zoom-pinch\") startPinching()\n                else if (type === \"pan\") startPanning()\n\n                previousType = type\n            }\n\n            const panningOrZooming = action((event: any): void => {\n                this.isPanningOrZooming = true\n\n                this.clearHover() // dismiss the tooltip\n                this.mapConfig.region = MapRegionName.World // reset region\n\n                const wheeling = (): void => {\n                    this.zoomGlobe(-event.sourceEvent.deltaY)\n                }\n\n                const pinching = (): void => {\n                    const distance = calculatePinchDistance(event.sourceEvent)\n\n                    if (!startDistance) {\n                        startDistance = distance\n                        return\n                    }\n\n                    const delta = distance - startDistance\n\n                    // We sometimes get two events for the same pinch gesture,\n                    // with one of the events having a delta of 0. We simply\n                    // ignore the delta-0 events. This fixes a bug where the\n                    // rendered SVG country paths would interfere with the\n                    // pinch-to-zoom gesture.\n                    if (delta === 0) return\n\n                    this.zoomGlobe(delta)\n                    startDistance = distance\n                }\n\n                const panning = (): void => {\n                    const posVector = getRelativeMouse(base, event.sourceEvent)\n                    const pos: [number, number] = [posVector.x, posVector.y]\n\n                    // True if the cursor is currently over the globe\n                    const isDraggingGlobe = isPointInCircle(posVector, {\n                        cx: this.globeCenter[0],\n                        cy: this.globeCenter[1],\n                        r: this.globeRadius,\n                    })\n\n                    if (isDraggingGlobe) {\n                        // If the user is dragging the globe, then use a\n                        // rotation strategy that ensures the geographic start\n                        // point remains under the cursor where possible\n\n                        const currCoords = versor.cartesian(\n                            this.projection.rotate(startRot).invert(pos)\n                        )\n                        const delta = versor.delta(startCoords, currCoords)\n                        const quat = versor.multiply(startQuat, delta)\n                        const rotation = versor.rotation(quat)\n\n                        // Ignore the gamma channel for more intuitive rotation\n                        // see https://observablehq.com/@d3/three-axis-rotation\n                        // for a visual explanation of three-axis rotation.\n                        // As a side effect, rotation around the poles feels off.\n                        this.rotateGlobe([rotation[0], rotation[1]])\n                    } else {\n                        // If the user's cursor is outside of the globe, then\n                        // adjust the globe's rotation based on the cursor's\n                        // movement, applying a sensitivity factor to control\n                        // the speed of rotation\n\n                        const sensitivity = 0.8\n                        const r = this.globeRotation\n                        const dx = pos[0] - previousPos[0]\n                        const dy = pos[1] - previousPos[1]\n                        this.rotateGlobe([\n                            r[0] + sensitivity * dx,\n                            r[1] - sensitivity * dy,\n                        ])\n                    }\n\n                    previousPos = pos\n                }\n\n                const type = getInteractionType(event)\n\n                // bail if a zoom-pinch gesture turned into a pan\n                // because this might lead to erratic jumps\n                if (previousType === \"zoom-pinch\" && type === \"pan\") return\n\n                if (type === \"zoom-scroll\") wheeling()\n                else if (type === \"zoom-pinch\") pinching()\n                else if (type === \"pan\") panning()\n\n                previousType = type\n            })\n\n            const panningOrZoomingEnd = (): void => {\n                this.isPanningOrZooming = false\n                startDistance = undefined\n                previousType = undefined\n            }\n\n            return zoom()\n                .scaleExtent([this.minScale, this.maxScale])\n                .touchable(() => this.isTouchDevice)\n                .on(\"start\", panningOrZoomingStart)\n                .on(\"zoom\", panningOrZooming)\n                .on(\"end\", panningOrZoomingEnd)\n        }\n\n        select(base).call(panAndZoom())\n    }\n\n    override componentDidMount(): void {\n        // rotate to the selected region\n        if (isValidGlobeRegionName(this.mapConfig.region)) {\n            this.globeController.jumpToOwidContinent(this.mapConfig.region)\n        }\n\n        document.addEventListener(\"pointerdown\", this.onDocumentPointerDown, {\n            passive: true,\n        })\n\n        this.setUpPanningAndZooming()\n    }\n\n    override componentWillUnmount(): void {\n        document.removeEventListener(\"pointerdown\", this.onDocumentPointerDown)\n    }\n\n    renderGlobeOutline(): React.ReactElement {\n        return (\n            <>\n                <circle\n                    id={makeFigmaId(\"globe-sphere\")}\n                    cx={this.globeCenter[0]}\n                    cy={this.globeCenter[1]}\n                    r={this.globeRadius}\n                    fill=\"#fafafa\"\n                />\n                <path\n                    id={makeFigmaId(\"globe-graticule\")}\n                    d={this.graticulePath}\n                    stroke=\"#e7e7e7\"\n                    strokeWidth={1}\n                    fill=\"none\"\n                    style={{ pointerEvents: \"none\" }}\n                />\n                <path\n                    id={makeFigmaId(\"globe-equator\")}\n                    d={this.equatorPath}\n                    stroke=\"#dadada\"\n                    strokeWidth={1}\n                    fill=\"none\"\n                    style={{ pointerEvents: \"none\" }}\n                />\n            </>\n        )\n    }\n\n    renderFeaturesInBackground(): React.ReactElement | undefined {\n        if (this.backgroundFeatures.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"countries-background\")}>\n                {this.backgroundFeatures.map((feature) => (\n                    <BackgroundCountry\n                        key={feature.id}\n                        feature={feature}\n                        path={this.getPath(feature)}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderFeaturesWithNoData(): React.ReactElement | undefined {\n        if (this.featuresWithNoData.length === 0) return\n\n        const patternId = Patterns.noDataPatternForGlobe\n\n        return (\n            <g\n                id={makeFigmaId(\"countries-without-data\")}\n                className=\"noDataFeatures\"\n            >\n                <defs>\n                    <NoDataPattern patternId={patternId} />\n                </defs>\n\n                {this.featuresWithNoData.map((feature) => (\n                    <CountryWithNoData\n                        key={feature.id}\n                        feature={feature}\n                        path={this.getPath(feature)}\n                        patternId={patternId}\n                        isSelected={this.manager.isSelected?.(feature.id)}\n                        hover={this.manager.getHoverState?.(feature.id)}\n                        onClick={(event) => {\n                            // don't invoke a second click on parent that\n                            // catches clicks on 'nearby' features\n                            event.stopPropagation()\n\n                            this.onClick(feature)\n                        }}\n                        onPointerEnter={this.onPointerEnterFeature}\n                        onPointerLeave={this.onPointerLeaveFeature}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderFeaturesWithData(): React.ReactElement | undefined {\n        if (this.sortedFeaturesWithData.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"countries-with-data\")}>\n                {this.manager.hasProjectedData && (\n                    <defs>\n                        {/* Pattern used by the map legend for the projected data bin */}\n                        <ProjectedDataPattern\n                            key={PROJECTED_DATA_LEGEND_COLOR}\n                            color={PROJECTED_DATA_LEGEND_COLOR}\n                            forLegend\n                        />\n\n                        {/* Patterns used by the map legend. These duplicate the patterns below,\n                            but use a legend-specific id */}\n                        {this.binColors.map((color, index) => (\n                            <ProjectedDataPattern\n                                key={`${color}-${index}`}\n                                color={color}\n                                forLegend\n                            />\n                        ))}\n\n                        {/* Pattern used by features */}\n                        {this.binColors.map((color, index) => (\n                            <ProjectedDataPattern\n                                key={`${color}-${index}`}\n                                color={color}\n                            />\n                        ))}\n                    </defs>\n                )}\n\n                {this.sortedFeaturesWithData.map((feature) => {\n                    const series = this.choroplethData.get(feature.id)\n                    if (!series) return null\n                    return (\n                        <CountryWithData\n                            key={feature.id}\n                            feature={feature}\n                            series={series}\n                            path={this.getPath(feature)}\n                            isSelected={this.manager.isSelected?.(feature.id)}\n                            hover={this.manager.getHoverState?.(feature.id)}\n                            onClick={(event) => {\n                                // don't invoke a second click on parent that\n                                // catches clicks on 'nearby' features\n                                event.stopPropagation()\n\n                                this.onClick(feature)\n                            }}\n                            onPointerEnter={this.onPointerEnterFeature}\n                            onPointerLeave={this.onPointerLeaveFeature}\n                        />\n                    )\n                })}\n            </g>\n        )\n    }\n\n    renderInternalAnnotations(): React.ReactElement | undefined {\n        if (this.internalAnnotations.length === 0) return\n\n        return (\n            <g id={makeFigmaId(\"annotations-internal\")}>\n                {this.internalAnnotations.map((annotation) => (\n                    <InternalValueAnnotation\n                        key={annotation.id}\n                        annotation={annotation}\n                        showOutline={\n                            this.choroplethData.get(annotation.id)?.isProjection\n                        }\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderExternalAnnotations(): React.ReactElement | undefined {\n        if (this.externalAnnotations.length === 0) return\n\n        return (\n            <g\n                id={makeFigmaId(\"annotations-external\")}\n                className=\"ExternalAnnotations\"\n            >\n                {this.externalAnnotations.map((annotation) => (\n                    <ExternalValueAnnotation\n                        key={annotation.id}\n                        annotation={annotation}\n                        onPointerEnter={action((feature: RenderFeature) =>\n                            this.setHoverEnterFeature(\n                                feature as GlobeRenderFeature\n                            )\n                        )}\n                        onPointerLeave={action(() =>\n                            this.clearHoverEnterFeature()\n                        )}\n                    />\n                ))}\n            </g>\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        return (\n            <>\n                {this.renderGlobeOutline()}\n                <g id={makeFigmaId(\"globe\")}>\n                    {this.renderFeaturesInBackground()}\n                    {this.renderFeaturesWithNoData()}\n                    {this.renderFeaturesWithData()}\n                    {this.renderInternalAnnotations()}\n                    {this.renderExternalAnnotations()}\n                </g>\n            </>\n        )\n    }\n\n    renderInteractive(): React.ReactElement {\n        // this needs to be referenced here or it will be recomputed on every mousemove\n        const _cachedCentroids = this.quadtree\n\n        return (\n            <g\n                ref={this.base}\n                onMouseDown={\n                    (ev: SVGMouseEvent): void =>\n                        ev.preventDefault() /* Without this, title may get selected while shift clicking */\n                }\n                onPointerMove={(ev): void => this.onPointerMove(ev.nativeEvent)}\n                onPointerLeave={(e) =>\n                    this.onPointerLeaveFeature(e.nativeEvent)\n                }\n                onClick={() => {\n                    // invoke a click on a feature when clicking nearby one\n                    if (this.hoverNearbyFeature)\n                        this.onClick(this.hoverNearbyFeature)\n                }}\n                style={{\n                    cursor: this.hoverFeature ? \"pointer\" : undefined,\n                    // Remove the 300ms delay on click events and double-tap-to-zoom for touch devices\n                    touchAction: \"manipulation\",\n                }}\n            >\n                {this.renderGlobeOutline()}\n                <g className={GEO_FEATURES_CLASSNAME}>\n                    {this.renderFeaturesInBackground()}\n                    {this.renderFeaturesWithNoData()}\n                    {this.renderFeaturesWithData()}\n                    {this.renderInternalAnnotations()}\n                    {this.renderExternalAnnotations()}\n                </g>\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n\nconst isMultiTouchEvent = (\n    event: MouseEvent | TouchEvent\n): event is TouchEvent => {\n    return checkIsTouchEvent(event) && event.touches.length >= 2\n}\n\nconst calculatePinchDistance = (event: TouchEvent): number => {\n    const { touches } = event\n    return calculateDistance(\n        [touches[0].clientX, touches[0].clientY],\n        [touches[1].clientX, touches[1].clientY]\n    )\n}\n\nfunction isPointInCircle(\n    point: PointVector,\n    circle: { cx: number; cy: number; r: number }\n): boolean {\n    const { x, y } = point\n    const { cx, cy, r } = circle\n\n    const distanceSquared = (x - cx) ** 2 + (y - cy) ** 2\n    const radiusSquared = r ** 2\n\n    return distanceSquared <= radiusSquared\n}\n","import {\n    Bounds,\n    getRelativeMouse,\n    guid,\n    exposeInstanceOnWindow,\n    Color,\n    HorizontalAlign,\n} from \"@ourworldindata/utils\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    HorizontalCategoricalColorLegend,\n    HorizontalColorLegendManager,\n    HorizontalNumericColorLegend,\n} from \"../legend/HorizontalColorLegends\"\nimport { select } from \"d3-selection\"\nimport { easeCubic } from \"d3-ease\"\nimport { MapTooltip } from \"./MapTooltip\"\nimport { TooltipState } from \"../tooltip/Tooltip.js\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport {\n    GeoFeature,\n    MapBracket,\n    MapChartManager,\n    ChoroplethSeriesByName,\n    ChoroplethMapManager,\n    DEFAULT_STROKE_COLOR,\n    HOVER_STROKE_COLOR,\n    HOVER_STROKE_WIDTH,\n    MAP_CHART_CLASSNAME,\n    MapColumnInfo,\n    PROJECTED_DATA_LEGEND_COLOR,\n    MapViewport,\n} from \"./MapChartConstants\"\nimport { MapConfig } from \"./MapConfig\"\nimport { ColorScale } from \"../color/ColorScale\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_MAX_TOOLTIP_WIDTH,\n    Patterns,\n} from \"../core/GrapherConstants\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport {\n    CategoricalBin,\n    ColorScaleBin,\n    isCategoricalBin,\n    isNoDataBin,\n    isNumericBin,\n    isProjectedDataBin,\n    NumericBin,\n} from \"../color/ColorScaleBin\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport {\n    ColumnSlug,\n    GrapherVariant,\n    MapRegionName,\n} from \"@ourworldindata/types\"\nimport { ClipPath, makeClipPath } from \"../chart/ChartUtils\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport { Component, createRef, PointerEvent } from \"react\"\nimport { ChoroplethMap } from \"./ChoroplethMap\"\nimport { ChoroplethGlobe } from \"./ChoroplethGlobe\"\nimport { GlobeController } from \"./GlobeController\"\nimport { MapSelectionArray } from \"../selection/MapSelectionArray.js\"\nimport { match } from \"ts-pattern\"\nimport { makeProjectedDataPatternId } from \"./MapComponents\"\nimport { MapChartState } from \"./MapChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { InteractionState } from \"../interaction/InteractionState\"\n\nexport type MapChartProps = ChartComponentProps<MapChartState>\n\nexport const PADDING_BETWEEN_MAP_AND_LEGEND = 8\nexport const PADDING_BELOW_MAP_LEGEND = 4\nexport const PADDING_BETWEEN_MAP_LEGENDS = 4\nexport const MAP_LEGEND_MAX_WIDTH_RATIO = 0.95\n\n@observer\nexport class MapChart\n    extends Component<MapChartProps>\n    implements\n        ChartInterface,\n        HorizontalColorLegendManager,\n        ChoroplethMapManager\n{\n    constructor(props: MapChartProps) {\n        super(props)\n\n        makeObservable(this, {\n            hoverBracket: observable,\n            tooltipState: observable,\n        })\n    }\n\n    /**\n     * The currently hovered map bracket.\n     *\n     * Hovering a map bracket highlights all countries within that bracket on the map.\n     */\n    hoverBracket: MapBracket | undefined = undefined\n\n    tooltipState = new TooltipState<{\n        featureId: string\n    }>()\n\n    @computed get chartState(): MapChartState {\n        return this.props.chartState\n    }\n\n    @computed get selectionArray(): MapSelectionArray {\n        return this.chartState.selectionArray\n    }\n\n    @computed get mapColumn(): CoreColumn {\n        return this.chartState.mapColumn\n    }\n\n    @computed private get mapColumnSlug(): ColumnSlug {\n        return this.chartState.mapColumnSlug\n    }\n\n    @computed private get mapColumnInfo(): MapColumnInfo {\n        return this.chartState.mapColumnInfo\n    }\n\n    @computed get hasProjectedData(): boolean {\n        return this.mapColumnInfo.type !== \"historical\"\n    }\n\n    @computed private get targetTime(): number | undefined {\n        return this.chartState.targetTime\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed get choroplethData(): ChoroplethSeriesByName {\n        return this.chartState.seriesMap\n    }\n\n    base = createRef<SVGGElement>()\n    @action.bound onMapMouseOver(feature: GeoFeature): void {\n        if (feature.id !== undefined) {\n            const featureId = feature.id as string\n            this.mapConfig.hoverCountry = featureId\n            this.tooltipState.target = { featureId }\n            this.manager.logGrapherInteractionEvent?.(\n                \"map_country_hover\",\n                featureId\n            )\n        }\n    }\n\n    @action.bound onMapPointerMove(ev: PointerEvent): void {\n        const ref = this.manager?.base?.current\n        if (ref) {\n            this.tooltipState.position = getRelativeMouse(ref, ev)\n        }\n    }\n\n    @action.bound onMapMouseLeave(): void {\n        this.mapConfig.hoverCountry = undefined\n        this.tooltipState.target = null\n    }\n\n    @computed private get manager(): MapChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get globeController(): GlobeController {\n        return this.manager.globeController ?? new GlobeController(this)\n    }\n\n    @computed get mapViewport(): MapViewport | undefined {\n        return this.manager.mapViewport\n    }\n\n    @computed get isFaceted(): boolean | undefined {\n        return this.manager.isFaceted\n    }\n\n    @computed get isMapSelectionEnabled(): boolean {\n        return !!this.manager.isMapSelectionEnabled\n    }\n\n    override componentWillUnmount(): void {\n        this.onMapMouseLeave()\n        this.onLegendMouseLeave()\n        document.removeEventListener(\"keydown\", this.onDocumentKeyDown)\n    }\n\n    @action.bound onLegendMouseEnter(bracket: MapBracket): void {\n        this.manager.logGrapherInteractionEvent?.(\n            \"map_legend_hover\",\n            bracket.label\n        )\n    }\n\n    @action.bound onLegendMouseOver(bracket: MapBracket): void {\n        this.hoverBracket = bracket\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.hoverBracket = undefined\n    }\n\n    @computed get mapConfig(): MapConfig {\n        return this.chartState.mapConfig\n    }\n\n    @action.bound onRegionChange(value: MapRegionName): void {\n        this.mapConfig.region = value\n    }\n\n    @computed private get colorScale(): ColorScale {\n        return this.chartState.colorScale\n    }\n\n    @action.bound onDocumentKeyDown(e: KeyboardEvent): void {\n        // Hide the globe on hitting the Escape key\n        if (e.key === \"Escape\" && this.mapConfig.globe.isActive) {\n            this.globeController.hideGlobe()\n            this.globeController.resetGlobe()\n            this.mapConfig.region = MapRegionName.World\n        }\n    }\n\n    @computed get externalLegend(): HorizontalColorLegendManager | undefined {\n        const {\n            numericLegendData,\n            categoricalLegendData,\n            legendMaxWidth,\n            legendStyleConfig,\n        } = this\n\n        if (this.manager.showLegend) return undefined\n\n        return {\n            numericLegendData,\n            categoricalLegendData,\n            legendMaxWidth,\n            legendStyleConfig,\n        }\n    }\n\n    @computed private get disableIntroAnimation(): boolean {\n        // The intro animation transitions from a neutral color to the actual color.\n        // That doesn't work if a pattern is used to fill the country outlines,\n        // which is the case for projected data.\n        if (this.mapColumnInfo.type !== \"historical\") return true\n\n        return !!this.manager.disableIntroAnimation\n    }\n\n    override componentDidMount(): void {\n        if (!this.disableIntroAnimation) {\n            select(this.base.current)\n                .selectAll(`.${MAP_CHART_CLASSNAME} path`)\n                .attr(\"data-fill\", function () {\n                    return (this as SVGPathElement).getAttribute(\"fill\")\n                })\n                .attr(\"fill\", this.colorScale.noDataColor)\n                .transition()\n                .duration(500)\n                .ease(easeCubic)\n                .attr(\"fill\", function () {\n                    return (this as SVGPathElement).getAttribute(\"data-fill\")\n                })\n                .attr(\"data-fill\", function () {\n                    return (this as SVGPathElement).getAttribute(\"fill\")\n                })\n        }\n        exposeInstanceOnWindow(this)\n\n        document.addEventListener(\"keydown\", this.onDocumentKeyDown)\n    }\n\n    @computed private get legendData(): ColorScaleBin[] {\n        return this.colorScale.legendBins.filter((bin) => !bin.isHidden)\n    }\n\n    /** The value of the currently hovered feature/country */\n    @computed private get hoverValue(): string | number | undefined {\n        if (!this.mapConfig.hoverCountry) return undefined\n\n        const series = this.choroplethData.get(this.mapConfig.hoverCountry)\n        if (!series) return \"No data\"\n\n        return series.value\n    }\n\n    private isHovered(featureId: string): boolean {\n        const { mapConfig, hoverBracket } = this\n        const { externalLegendHoverBin } = this.manager\n\n        // Check if a country is focused on the globe\n        if (mapConfig.globe.focusCountry === featureId) return true\n\n        // Check if a country is hovered\n        if (mapConfig.hoverCountry === featureId) return true\n\n        // Check if the legend bracket of a country is hovered\n        const series = this.choroplethData.get(featureId)\n        if (\n            hoverBracket?.contains(series?.value, {\n                isProjection: series?.isProjection,\n            })\n        )\n            return true\n\n        // Check if the external legend bracket of a country is hovered (used in faceted maps)\n        if (externalLegendHoverBin?.contains(series?.value)) return true\n\n        return false\n    }\n\n    isSelected(featureId: string): boolean {\n        return this.selectionArray.selectedSet.has(featureId)\n    }\n\n    getHoverState(featureId: string): InteractionState {\n        const isHovered = this.isHovered(featureId)\n        const isHoverModeActive = !!(\n            this.hoverBracket || this.manager.externalLegendHoverBin\n        )\n        return new InteractionState(isHovered, isHoverModeActive)\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get choroplethMapBounds(): Bounds {\n        return this.bounds.padBottom(\n            this.legendHeight\n                ? this.legendHeight +\n                      PADDING_BETWEEN_MAP_AND_LEGEND +\n                      PADDING_BELOW_MAP_LEGEND\n                : 0\n        )\n    }\n\n    @computed private get region(): MapRegionName {\n        return this.mapConfig.region\n    }\n\n    @computed private get shouldAddProjectionPatternToLegendBins(): boolean {\n        return match(this.mapColumnInfo)\n            .with({ type: \"historical\" }, () => false)\n            .with({ type: \"projected\" }, () => true)\n            .with({ type: \"historical+projected\" }, (info) =>\n                // Only add a pattern to the legend bins if _all_ values are projections.\n                // If there is even a single non-projected (historical) value, the legend\n                // should use solid colors.\n                this.chartState.transformedTable\n                    .get(info.slugForIsProjectionColumn)\n                    .values.every((value) => value === true)\n            )\n            .exhaustive()\n    }\n\n    private maybeAddPatternRefToBin<Bin extends ColorScaleBin>(bin: Bin): Bin {\n        if (isNoDataBin(bin))\n            return new CategoricalBin({\n                ...bin.props,\n                patternRef: Patterns.noDataPattern,\n            }) as Bin\n\n        if (isProjectedDataBin(bin)) {\n            const patternRef = makeProjectedDataPatternId(\n                PROJECTED_DATA_LEGEND_COLOR,\n                { forLegend: true }\n            )\n            return new CategoricalBin({ ...bin.props, patternRef }) as Bin\n        }\n\n        if (this.shouldAddProjectionPatternToLegendBins) {\n            const patternRef = makeProjectedDataPatternId(bin.color, {\n                forLegend: true,\n            })\n            return (\n                bin instanceof CategoricalBin\n                    ? new CategoricalBin({ ...bin.props, patternRef })\n                    : new NumericBin({ ...bin.props, patternRef })\n            ) as Bin\n        }\n\n        return bin\n    }\n\n    @computed get numericLegendData(): ColorScaleBin[] {\n        const hasNoDataBin = this.legendData.some((bin) => isNoDataBin(bin))\n        if (this.hasCategoricalLegendData || !hasNoDataBin)\n            return this.legendData\n                .filter((bin) => isNumericBin(bin))\n                .map((bin) => this.maybeAddPatternRefToBin(bin))\n\n        const bins: ColorScaleBin[] = this.legendData\n            .filter((bin) => isNumericBin(bin) || isNoDataBin(bin))\n            .map((bin) => this.maybeAddPatternRefToBin(bin))\n\n        // Move the no-data bin from the end to the start\n        return [bins[bins.length - 1], ...bins.slice(0, -1)]\n    }\n\n    @computed private get numMembersPerCategoricalBinByIndex(): Map<\n        number,\n        number\n    > {\n        const { chartState, legendData } = this\n        return new Map(\n            legendData\n                .filter((bin) => isCategoricalBin(bin))\n                .map((bin) => {\n                    const memberCount = chartState.series.filter((series) =>\n                        bin.contains(series.value)\n                    ).length\n                    return [bin.index, memberCount]\n                })\n        )\n    }\n\n    @computed get categoricalLegendData(): CategoricalBin[] {\n        let categoricalLegendData = this.legendData\n            .filter((bin) => isCategoricalBin(bin))\n            .map((bin) => this.maybeAddPatternRefToBin(bin))\n\n        // Hide empty bins in thumbnails\n        if (\n            this.isStatic &&\n            this.manager.variant === GrapherVariant.Thumbnail\n        ) {\n            categoricalLegendData = categoricalLegendData.filter((bin) => {\n                const memberCount =\n                    this.numMembersPerCategoricalBinByIndex.get(bin.index) ?? 0\n                return (\n                    isNoDataBin(bin) ||\n                    isProjectedDataBin(bin) ||\n                    memberCount > 0\n                )\n            })\n        }\n\n        return categoricalLegendData\n    }\n\n    @computed private get hasCategoricalLegendData(): boolean {\n        return this.categoricalLegendData.length > 1\n    }\n\n    @computed get binColors(): string[] {\n        return this.legendData.map((bin) => bin.color)\n    }\n\n    @computed private get numericHoverBracket(): ColorScaleBin | undefined {\n        const { hoverBracket, hoverValue, numericLegendData } = this\n        const { externalLegendHoverBin } = this.manager\n\n        if (hoverBracket) return hoverBracket\n\n        if (hoverValue !== undefined)\n            return numericLegendData.find((bin) => bin.contains(hoverValue))\n\n        return externalLegendHoverBin\n    }\n\n    @computed private get categoricalHoverBracket():\n        | CategoricalBin\n        | undefined {\n        const { hoverBracket, hoverValue, categoricalLegendData } = this\n\n        if (hoverBracket && hoverBracket instanceof CategoricalBin)\n            return hoverBracket\n\n        if (hoverValue !== undefined)\n            return categoricalLegendData.find((bin) => bin.contains(hoverValue))\n\n        return undefined\n    }\n\n    resolveLegendBinEmphasis(bin: ColorScaleBin): Emphasis {\n        if (!this.categoricalHoverBracket && !this.numericHoverBracket)\n            return Emphasis.Default\n\n        // Check if this bin is being hovered\n        if (\n            this.categoricalHoverBracket &&\n            bin.equals(this.categoricalHoverBracket)\n        ) {\n            return Emphasis.Highlighted\n        }\n        if (this.numericHoverBracket && bin.equals(this.numericHoverBracket)) {\n            return Emphasis.Highlighted\n        }\n\n        return Emphasis.Muted\n    }\n\n    legendStyleConfig: LegendStyleConfig = {\n        marker: {\n            default: { stroke: DEFAULT_STROKE_COLOR },\n            highlighted: {\n                stroke: HOVER_STROKE_COLOR,\n                strokeWidth: HOVER_STROKE_WIDTH,\n            },\n        },\n    }\n\n    @computed get legendMaxWidth(): number {\n        // it seems nice to have just a little bit of extra padding left and right\n        return this.bounds.width * MAP_LEGEND_MAX_WIDTH_RATIO\n    }\n\n    @computed get legendX(): number {\n        return this.bounds.x + (this.bounds.width - this.legendMaxWidth) / 2\n    }\n\n    @computed get legendHeight(): number {\n        return this.categoryLegendHeight + this.numericLegendHeight\n    }\n\n    @computed private get numericLegendHeight(): number {\n        return this.numericLegend ? this.numericLegend.height : 0\n    }\n\n    @computed private get categoryLegendHeight(): number {\n        return this.categoryLegend ? this.categoryLegend.height : 0\n    }\n\n    @computed private get categoryLegend():\n        | HorizontalCategoricalColorLegend\n        | undefined {\n        return this.manager.showLegend && this.categoricalLegendData.length > 1\n            ? new HorizontalCategoricalColorLegend({ manager: this })\n            : undefined\n    }\n\n    @computed private get numericLegend():\n        | HorizontalNumericColorLegend\n        | undefined {\n        return this.manager.showLegend && this.numericLegendData.length > 1\n            ? new HorizontalNumericColorLegend({ manager: this })\n            : undefined\n    }\n\n    @computed get categoryLegendY(): number {\n        if (!this.categoryLegend) return 0\n\n        return (\n            this.bounds.bottom -\n            this.categoryLegend.height -\n            PADDING_BELOW_MAP_LEGEND\n        )\n    }\n\n    @computed get legendAlign(): HorizontalAlign {\n        return HorizontalAlign.center\n    }\n\n    @computed get numericLegendY(): number {\n        if (!this.numericLegend) return 0\n        return (\n            this.bounds.bottom -\n            this.numericLegendHeight -\n            PADDING_BELOW_MAP_LEGEND -\n            // If present, the category legend is placed below the numeric legend\n            (this.categoryLegend\n                ? this.categoryLegendHeight + PADDING_BETWEEN_MAP_LEGENDS\n                : 0)\n        )\n    }\n\n    @computed get hoverColors(): Color[] | undefined {\n        if (!this.hoverBracket) return undefined\n        return [this.hoverBracket.color]\n    }\n\n    @computed get isStatic(): boolean {\n        return this.manager.isStatic ?? false\n    }\n\n    @computed private get renderUid(): number {\n        return guid()\n    }\n\n    @computed private get clipPath(): ClipPath {\n        return makeClipPath({\n            renderUid: this.renderUid,\n            box: this.choroplethMapBounds,\n        })\n    }\n\n    @computed get numericBinSize(): number {\n        return 0.625 * this.fontSize\n    }\n\n    renderMapLegend(): React.ReactElement {\n        const { numericLegend, categoryLegend } = this\n\n        return (\n            <>\n                {numericLegend && (\n                    <HorizontalNumericColorLegend manager={this} />\n                )}\n                {categoryLegend && (\n                    <HorizontalCategoricalColorLegend manager={this} />\n                )}\n            </>\n        )\n    }\n\n    renderMapOrGlobe({ clipping = true } = {}): React.ReactElement {\n        const mapOrGlobe = this.mapConfig.globe.isActive ? (\n            <ChoroplethGlobe manager={this} />\n        ) : (\n            <ChoroplethMap manager={this} />\n        )\n\n        if (!clipping) return mapOrGlobe\n\n        return (\n            <>\n                {this.clipPath.element}\n                <g clipPath={this.clipPath.id}>{mapOrGlobe}</g>\n            </>\n        )\n    }\n\n    renderStatic(): React.ReactElement {\n        // Clipping the chart area is only necessary when the map is\n        // zoomed in or we're showing the globe. If that isn't the case,\n        // then we don't add a clipping element since it introduces noise\n        // in SVG editing programs like Figma.\n        const clipping =\n            this.mapConfig.globe.isActive || this.region !== MapRegionName.World\n\n        return (\n            <>\n                {this.renderMapOrGlobe({ clipping })}\n                {this.renderMapLegend()}\n            </>\n        )\n    }\n\n    renderInteractive(): React.ReactElement {\n        const { tooltipState } = this\n\n        let sparklineWidth: number | undefined\n        if (this.manager.shouldPinTooltipToBottom) {\n            const windowWidth = window?.innerWidth ?? 240\n            sparklineWidth = Math.min(\n                GRAPHER_MAX_TOOLTIP_WIDTH,\n                windowWidth - 8\n            )\n        }\n\n        const tooltipCountry =\n            tooltipState.target?.featureId ??\n            // show a pinned-to-the-bottom tooltip when focused on a country\n            (this.manager.shouldPinTooltipToBottom\n                ? this.mapConfig.globe.focusCountry\n                : undefined)\n\n        return (\n            <g\n                ref={this.base}\n                className={MAP_CHART_CLASSNAME}\n                onPointerMove={this.onMapPointerMove}\n            >\n                {this.renderMapOrGlobe()}\n                {this.renderMapLegend()}\n                {tooltipCountry && (\n                    <MapTooltip\n                        mapColumnSlug={this.mapColumnSlug}\n                        mapColumnInfo={this.mapColumnInfo}\n                        entityName={tooltipCountry}\n                        position={tooltipState.position}\n                        fading={tooltipState.fading}\n                        timeSeriesTable={this.chartState.inputTable}\n                        formatValueForTooltip={\n                            this.chartState.formatValueForTooltip\n                        }\n                        manager={this.manager}\n                        lineColorScale={this.colorScale}\n                        targetTime={this.targetTime}\n                        targetTimes={this.manager.highlightedTimesInTooltip}\n                        sparklineWidth={sparklineWidth}\n                        dismissTooltip={action(() => {\n                            this.mapConfig.hoverCountry = undefined\n                            this.tooltipState.target = null\n                            this.globeController.dismissCountryFocus()\n                        })}\n                    />\n                )}\n            </g>\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return this.isStatic ? this.renderStatic() : this.renderInteractive()\n    }\n}\n","import * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { Bounds, RequiredBy, VerticalAlign } from \"@ourworldindata/utils\"\nimport { TextWrap } from \"@ourworldindata/components\"\nimport {\n    InitialSimpleLabelSeries,\n    SizedSimpleLabelSeries,\n    PlacedSimpleLabelSeries,\n} from \"./SimpleVerticalLabelsTypes.js\"\nimport { BASE_FONT_SIZE } from \"../core/GrapherConstants.js\"\n\ninterface SimpleVerticalLabelsOptions {\n    /** Font size for the labels */\n    fontSize?: number\n\n    /** Font weight for the labels */\n    fontWeight?: number\n\n    /** Line height multiplier for multi-line labels (defaults to 1) */\n    lineHeight?: number\n\n    /** Maximum width for labels (no restriction by default) */\n    maxWidth?: number\n\n    /** Labels outside of this range are hidden */\n    yRange?: [number, number]\n\n    /** Minimum space between labels in pixels to prevent overlap */\n    minSpacing?: number\n\n    /** Controls how the label is aligned relative to the y-position */\n    verticalAlign?: VerticalAlign\n\n    /** Function to resolve collisions between two overlapping labels by choosing which one to keep */\n    resolveCollision?: (\n        s1: InitialSimpleLabelSeries,\n        s2: InitialSimpleLabelSeries\n    ) => InitialSimpleLabelSeries\n}\n\n/**\n * Manages layout of simple vertical labels, handling sizing, placement,\n * and basic collision resolution by removing overlapping labels.\n */\nexport class SimpleVerticalLabelsState {\n    private initialSeries: InitialSimpleLabelSeries[]\n    private initialOptions: SimpleVerticalLabelsOptions\n\n    private defaultOptions = {\n        lineHeight: 1,\n        maxWidth: Infinity,\n        minSpacing: 5,\n        verticalAlign: VerticalAlign.middle,\n        fontWeight: 400,\n        fontSize: BASE_FONT_SIZE,\n    } as const satisfies Partial<SimpleVerticalLabelsOptions>\n\n    constructor(\n        series: InitialSimpleLabelSeries[],\n        options: SimpleVerticalLabelsOptions\n    ) {\n        this.initialSeries = series\n        this.initialOptions = options\n        makeObservable(this)\n    }\n\n    @computed private get options(): RequiredBy<\n        SimpleVerticalLabelsOptions,\n        keyof typeof this.defaultOptions\n    > {\n        return { ...this.defaultOptions, ...this.initialOptions }\n    }\n\n    @computed\n    private get sizedSeries(): SizedSimpleLabelSeries[] {\n        const { fontSize, fontWeight, maxWidth, verticalAlign, lineHeight } =\n            this.options\n\n        return this.initialSeries.map((series) => {\n            const { label, yPosition } = series\n\n            const textWrap = new TextWrap({\n                text: label,\n                maxWidth,\n                fontSize,\n                fontWeight,\n                lineHeight,\n                verticalAlign,\n            })\n\n            const [x, y] = textWrap.getPositionForSvgRendering(0, yPosition)\n            const bounds = new Bounds(x, y, textWrap.width, textWrap.height)\n\n            return { ...series, textWrap, bounds }\n        })\n    }\n\n    @computed get series(): PlacedSimpleLabelSeries[] {\n        const { minSpacing, resolveCollision, yRange } = this.options\n\n        const margin = minSpacing > 0 ? minSpacing / 2 : 0\n        const margins = { top: margin, bottom: margin }\n\n        const series = this.sizedSeries.map((series) => ({\n            ...series,\n            // Bounds used to detect collisions. They're a bit larger than the\n            // text bounds to account for the minimum spacing between labels.\n            collisionBounds: series.bounds.expand(margins),\n            // None of the series are initially hidden\n            isHidden: false,\n        }))\n\n        // Hide labels that are overlapping or too close to each other\n        for (let i = 0; i < series.length; i++) {\n            const s1 = series[i]\n            if (s1.isHidden) continue\n\n            // Check if the label is out of bounds\n            if (\n                yRange &&\n                (s1.bounds.top < yRange[1] || s1.bounds.bottom > yRange[0])\n            ) {\n                s1.isHidden = true\n                continue\n            }\n\n            // Check if the label is overlapping with any other label\n            for (let j = i + 1; j < series.length; j++) {\n                const s2 = series[j]\n                if (s2.isHidden) continue\n\n                if (s1.collisionBounds.hasVerticalOverlap(s2.collisionBounds)) {\n                    const picked = resolveCollision?.(s1, s2) ?? s1\n\n                    if (picked === s1) s2.isHidden = true\n                    else s1.isHidden = true\n                }\n            }\n        }\n\n        return series\n            .filter((series) => !series.isHidden)\n            .map((series) => R.omit(series, [\"isHidden\", \"collisionBounds\"]))\n    }\n\n    @computed get width(): number {\n        const labelWidths = this.series.map((series) => series.textWrap.width)\n        const maxLabelWidth = R.firstBy(labelWidths, [R.identity(), \"desc\"])\n        return maxLabelWidth ?? 0\n    }\n}\n","import React from \"react\"\nimport { VerticalAxis } from \"../axis/Axis\"\nimport { SimpleVerticalLabelsState } from \"./SimpleVerticalLabelsState\"\nimport { darkenColorForText } from \"../color/ColorUtils.js\"\n\nexport function SimpleVerticalLabels({\n    state,\n    yAxis,\n    x = 0,\n    xAnchor = \"start\",\n}: {\n    state: SimpleVerticalLabelsState\n    yAxis: VerticalAxis\n    x?: number\n    xAnchor?: \"start\" | \"end\"\n}): React.ReactElement {\n    return (\n        <g>\n            {state.series.map((series) => (\n                <React.Fragment key={series.yPosition}>\n                    {series.textWrap.renderSVG(x, yAxis.place(series.value), {\n                        textProps: {\n                            textAnchor: xAnchor,\n                            fill: darkenColorForText(series.color),\n                        },\n                    })}\n                </React.Fragment>\n            ))}\n        </g>\n    )\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport * as _ from \"lodash-es\"\nimport { Bounds, SeriesName } from \"@ourworldindata/utils\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { LineChartState } from \"./LineChartState\"\nimport { LineChartProps } from \"./LineChart.js\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport {\n    LineChartManager,\n    PlacedLineChartSeries,\n    PlacedPoint,\n    RenderLineChartSeries,\n} from \"./LineChartConstants\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FONT_SCALE_12,\n} from \"../core/GrapherConstants\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { Lines } from \"./Lines\"\nimport {\n    getYAxisConfigDefaults,\n    toPlacedLineChartSeries,\n    toRenderLineChartSeries,\n} from \"./LineChartHelpers\"\nimport {\n    HorizontalAxisComponent,\n    VerticalAxisZeroLine,\n} from \"../axis/AxisViews\"\nimport { InitialSimpleLabelSeries } from \"../verticalLabels/SimpleVerticalLabelsTypes\"\nimport { SimpleVerticalLabelsState } from \"../verticalLabels/SimpleVerticalLabelsState\"\nimport { SimpleVerticalLabels } from \"../verticalLabels/SimpleVerticalLabels\"\nimport { darkenColorForLine } from \"../color/ColorUtils.js\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\n\nconst DOT_RADIUS = 4\nconst SPACE_BETWEEN_DOT_AND_LABEL = 4\n\nconst LABEL_PADDING = DOT_RADIUS + SPACE_BETWEEN_DOT_AND_LABEL\n\n@observer\nexport class LineChartThumbnail\n    extends React.Component<LineChartProps>\n    implements ChartInterface, AxisManager\n{\n    constructor(props: LineChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): LineChartState {\n        return this.props.chartState\n    }\n\n    @computed private get manager(): LineChartManager {\n        return this.chartState.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.bounds\n            .padRight(this.paddedEndLabelsWidth)\n            .padLeft(this.paddedStartLabelsWidth)\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const defaults = getYAxisConfigDefaults(yAxisConfig)\n        const custom = { hideAxis: true }\n        return new AxisConfig({ ...defaults, ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const custom = { labelPadding: 0 }\n        return new AxisConfig({ ...custom, ...xAxisConfig }, this)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed get dualAxis(): DualAxis {\n        return new DualAxis({\n            bounds: this.innerBounds,\n            verticalAxis: this.verticalAxisPart,\n            horizontalAxis: this.horizontalAxisPart,\n        })\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get placedSeries(): PlacedLineChartSeries[] {\n        return toPlacedLineChartSeries(this.chartState.series, {\n            chartState: this.chartState,\n            dualAxis: this.dualAxis,\n        })\n    }\n\n    @computed private get renderSeries(): RenderLineChartSeries[] {\n        return toRenderLineChartSeries(this.placedSeries, {\n            isFocusModeActive: this.chartState.isFocusModeActive,\n        })\n    }\n\n    /** Start points displayed as dots */\n    @computed private get visibleStartPoints(): PlacedPoint[] {\n        return this.renderSeries\n            .filter(\n                (series) =>\n                    this.visibleStartLabels.has(series.seriesName) &&\n                    // Only show start points for historical series, not projected ones\n                    !series.isProjection\n            )\n            .map((series) =>\n                _.minBy(series.placedPoints, (point) => point.time)\n            )\n            .filter((point) => point !== undefined)\n    }\n\n    /** End points displayed as dots */\n    @computed private get visibleEndPoints(): PlacedPoint[] {\n        return this.renderSeries\n            .filter(\n                (series) =>\n                    this.visibleEndLabels.has(series.seriesName) &&\n                    // When projected series exist in the chart, only show end dots\n                    // for the projected series. Otherwise, show end dots for all series\n                    (!this.hasProjectedSeries || series.isProjection)\n            )\n            .map((series) =>\n                _.maxBy(series.placedPoints, (point) => point.time)\n            )\n            .filter((point) => point !== undefined)\n    }\n\n    // Same as dualAxis.verticalAxis, but doesn't depend on innerBounds\n    @computed get outerBoundsVerticalAxis(): VerticalAxis {\n        const yAxis = this.verticalAxisPart.clone()\n        yAxis.range = this.bounds.yRange()\n        return yAxis\n    }\n\n    @computed private get labelFontSize(): number {\n        return Math.floor(GRAPHER_FONT_SCALE_12 * this.fontSize)\n    }\n\n    private formatLabel(value: number): string {\n        return this.chartState.formatColumn.formatValueShortWithAbbreviations(\n            value\n        )\n    }\n\n    @computed private get hasProjectedSeries(): boolean {\n        return this.chartState.series.some((series) => !!series.isProjection)\n    }\n\n    @computed private get labelsRange(): [number, number] {\n        const {\n            horizontalAxisPart,\n            manager: { chartAreaPadding = 0 },\n        } = this\n\n        return this.bounds\n            .expand({\n                top: chartAreaPadding,\n                bottom: chartAreaPadding + horizontalAxisPart.height,\n            })\n            .yRange()\n    }\n\n    @computed private get endLabelsState():\n        | SimpleVerticalLabelsState\n        | undefined {\n        if (!this.manager.showSeriesLabels) return undefined\n\n        let labelCandidateSeries = this.chartState.series\n\n        // If there is a projected series, only show the labels for the projected ones\n        if (this.hasProjectedSeries)\n            labelCandidateSeries = labelCandidateSeries.filter(\n                (series) => series.isProjection\n            )\n\n        // If any series is focused, only show the labels for the focused ones\n        if (this.chartState.isFocusModeActive)\n            labelCandidateSeries = labelCandidateSeries.filter(\n                (series) => series.focus.active\n            )\n\n        const endPointBySeriesName = new Map(\n            labelCandidateSeries.map((series) => [\n                series.seriesName,\n                _.maxBy(series.points, (point) => point.x),\n            ])\n        )\n\n        const series = labelCandidateSeries.map((series) => {\n            const { seriesName } = series\n\n            const endPoint = endPointBySeriesName.get(series.seriesName)\n            const value = endPoint?.y ?? 0\n\n            const yPosition = this.outerBoundsVerticalAxis.place(value)\n            const label = this.formatLabel(value)\n\n            const color = this.chartState.hasColorScale\n                ? darkenColorForLine(\n                      this.chartState.getColorScaleColor(endPoint?.colorValue)\n                  )\n                : series.color\n\n            const labelSeries = { seriesName, value, label, yPosition, color }\n\n            return { ...labelSeries, point: endPoint }\n        })\n\n        return new SimpleVerticalLabelsState(series, {\n            fontSize: this.labelFontSize,\n            fontWeight: 500,\n            yRange: this.labelsRange,\n            minSpacing: 2,\n            resolveCollision: (\n                s1: InitialSimpleLabelSeries,\n                s2: InitialSimpleLabelSeries\n            ): InitialSimpleLabelSeries => {\n                const endPoint1 = endPointBySeriesName.get(s1.seriesName)\n                const endPoint2 = endPointBySeriesName.get(s2.seriesName)\n\n                const x1 = endPoint1?.x ?? 0\n                const x2 = endPoint2?.x ?? 0\n\n                // Prefer the series with the larger x value\n                if (x1 > x2) return s1\n                if (x2 > x1) return s2\n\n                return s1 // no preference\n            },\n        })\n    }\n\n    @computed private get startLabelsState():\n        | SimpleVerticalLabelsState\n        | undefined {\n        if (!this.manager.showSeriesLabels) return undefined\n\n        const showValueLabelsOnly = this.manager.useMinimalLabeling\n\n        let labelCandidateSeries = this.chartState.series\n\n        // If there is a projected series, only show the labels for the historical ones\n        if (this.hasProjectedSeries)\n            labelCandidateSeries = labelCandidateSeries.filter(\n                (series) => !series.isProjection\n            )\n\n        // If any series is focused, only show the labels for the focused ones\n        if (this.chartState.isFocusModeActive)\n            labelCandidateSeries = labelCandidateSeries.filter(\n                (series) => series.focus.active\n            )\n\n        const startPointBySeriesName = new Map(\n            labelCandidateSeries.map((series) => [\n                series.seriesName,\n                _.minBy(series.points, (point) => point.x),\n            ])\n        )\n\n        const series = labelCandidateSeries\n            .map((series) => {\n                const { seriesName } = series\n\n                // Don't show start label if there is only a single point\n                if (series.points.length < 2) return undefined\n\n                const startPoint = startPointBySeriesName.get(series.seriesName)\n                const value = startPoint?.y ?? 0\n\n                const yPosition = this.outerBoundsVerticalAxis.place(value)\n                const label = showValueLabelsOnly\n                    ? this.formatLabel(value)\n                    : seriesName\n\n                const color = this.chartState.hasColorScale\n                    ? darkenColorForLine(\n                          this.chartState.getColorScaleColor(\n                              startPoint?.colorValue\n                          )\n                      )\n                    : series.color\n\n                const labelSeries = {\n                    seriesName,\n                    value,\n                    label,\n                    yPosition,\n                    color,\n                }\n                return { ...labelSeries, point: startPoint }\n            })\n            .filter((series) => series !== undefined)\n\n        return new SimpleVerticalLabelsState(series, {\n            fontSize: this.labelFontSize,\n            fontWeight: 500,\n            maxWidth: showValueLabelsOnly\n                ? undefined\n                : 0.25 * this.bounds.width,\n            minSpacing: showValueLabelsOnly ? 2 : 5,\n            yRange: this.labelsRange,\n            resolveCollision: (\n                s1: InitialSimpleLabelSeries,\n                s2: InitialSimpleLabelSeries\n            ): InitialSimpleLabelSeries => {\n                // Prefer to label series that have an end label\n                if (this.visibleEndLabels.has(s1.seriesName)) return s1\n                if (this.visibleEndLabels.has(s2.seriesName)) return s2\n\n                const startPoint1 = startPointBySeriesName.get(s1.seriesName)\n                const startPoint2 = startPointBySeriesName.get(s2.seriesName)\n\n                const x1 = startPoint1?.x ?? 0\n                const x2 = startPoint2?.x ?? 0\n\n                // Prefer the series with the larger x value\n                if (x1 > x2) return s1\n                if (x2 > x1) return s2\n\n                return s1 // no preference\n            },\n        })\n    }\n\n    @computed private get endLabelsWidth(): number {\n        return this.endLabelsState?.width ?? 0\n    }\n\n    @computed private get startLabelsWidth(): number {\n        return this.startLabelsState?.width ?? 0\n    }\n\n    @computed private get paddedEndLabelsWidth(): number {\n        return this.endLabelsWidth > 0 ? this.endLabelsWidth + LABEL_PADDING : 0\n    }\n\n    @computed private get paddedStartLabelsWidth(): number {\n        return this.startLabelsWidth > 0\n            ? this.startLabelsWidth + LABEL_PADDING\n            : 0\n    }\n\n    @computed private get visibleStartLabels(): Set<SeriesName> {\n        return new Set(\n            this.startLabelsState?.series.map((series) => series.seriesName)\n        )\n    }\n\n    @computed private get visibleEndLabels(): Set<SeriesName> {\n        return new Set(\n            this.endLabelsState?.series.map((series) => series.seriesName)\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <>\n                <VerticalAxisZeroLine\n                    verticalAxis={this.dualAxis.verticalAxis}\n                    bounds={this.dualAxis.innerBounds}\n                />\n                <HorizontalAxisComponent\n                    axis={this.dualAxis.horizontalAxis}\n                    bounds={this.dualAxis.bounds}\n                    showEndpointsOnly\n                />\n                <Lines\n                    series={this.renderSeries}\n                    dualAxis={this.dualAxis}\n                    multiColor={this.chartState.hasColorScale}\n                    hidePoints\n                    lineStrokeWidth={1.5}\n                    lineOutlineWidth={0}\n                    isStatic={this.manager.isStatic}\n                />\n                {this.visibleStartPoints.map((point, index) => (\n                    <Dot key={index} point={point} />\n                ))}\n                {this.visibleEndPoints.map((point, index) => (\n                    <Dot key={index} point={point} />\n                ))}\n                {this.startLabelsState && (\n                    <SimpleVerticalLabels\n                        state={this.startLabelsState}\n                        yAxis={this.dualAxis.verticalAxis}\n                        x={this.innerBounds.left - LABEL_PADDING}\n                        xAnchor=\"end\"\n                    />\n                )}\n                {this.endLabelsState && (\n                    <SimpleVerticalLabels\n                        state={this.endLabelsState}\n                        yAxis={this.dualAxis.verticalAxis}\n                        x={this.innerBounds.right + LABEL_PADDING}\n                    />\n                )}\n            </>\n        )\n    }\n}\n\nfunction Dot({ point }: { point: PlacedPoint }): React.ReactElement | null {\n    return (\n        <circle cx={point.x} cy={point.y} r={DOT_RADIUS} fill={point.color} />\n    )\n}\n","import React from \"react\"\nimport * as _ from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { scaleLinear, ScaleLinear } from \"d3-scale\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { SlopeChartState } from \"./SlopeChartState.js\"\nimport { type SlopeChartProps } from \"./SlopeChart.js\"\nimport {\n    PlacedSlopeChartSeries,\n    RenderSlopeChartSeries,\n    SlopeChartManager,\n    SlopeChartSeries,\n} from \"./SlopeChartConstants\"\nimport {\n    getYAxisConfigDefaults,\n    toPlacedSlopeChartSeries,\n    toRenderSlopeChartSeries,\n} from \"./SlopeChartHelpers\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FONT_SCALE_12,\n} from \"../core/GrapherConstants\"\nimport { Bounds, SeriesName } from \"@ourworldindata/utils\"\nimport { VerticalAxis } from \"../axis/Axis\"\nimport { Slope } from \"./Slope\"\nimport { InitialSimpleLabelSeries } from \"../verticalLabels/SimpleVerticalLabelsTypes.js\"\nimport { SimpleVerticalLabelsState } from \"../verticalLabels/SimpleVerticalLabelsState\"\nimport { SimpleVerticalLabels } from \"../verticalLabels/SimpleVerticalLabels\"\nimport { MarkX } from \"./MarkX\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\n\nconst DOT_RADIUS = 3.5\nconst SPACE_BETWEEN_DOT_AND_LABEL = 4\n\nconst LABEL_PADDING = DOT_RADIUS + SPACE_BETWEEN_DOT_AND_LABEL\n\n@observer\nexport class SlopeChartThumbnail\n    extends React.Component<SlopeChartProps>\n    implements ChartInterface, AxisManager\n{\n    constructor(props: SlopeChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): SlopeChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): SlopeChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get formattedStartTime(): string {\n        return this.chartState.formatColumn.formatTime(\n            this.chartState.xDomain[0]\n        )\n    }\n\n    @computed private get formattedEndTime(): string {\n        return this.chartState.formatColumn.formatTime(\n            this.chartState.xDomain[1]\n        )\n    }\n\n    @computed private get xMarkFontSize(): number {\n        return this.outerBoundsVerticalAxis.tickFontSize\n    }\n\n    @computed private get xStartMarkWidth(): number {\n        return Bounds.forText(this.formattedStartTime, {\n            fontSize: this.xMarkFontSize,\n        }).width\n    }\n\n    @computed private get xEndMarkWidth(): number {\n        return Bounds.forText(this.formattedEndTime, {\n            fontSize: this.xMarkFontSize,\n        }).width\n    }\n\n    @computed private get xMarksHeight(): number {\n        return this.xMarkFontSize\n    }\n\n    @computed get innerBounds(): Bounds {\n        const rightPadding = Math.max(\n            this.paddedEndLabelsWidth, // width of end labels plus padding\n            0.5 * this.xEndMarkWidth // half the width of the end time label (since it's centered)\n        )\n        const leftPadding = Math.max(\n            this.paddedStartLabelsWidth, // width of start labels plus padding\n            0.5 * this.xStartMarkWidth // half the width of the start time label (since it's centered)\n        )\n\n        return this.bounds\n            .padBottom(this.xMarksHeight)\n            .padRight(rightPadding)\n            .padLeft(leftPadding)\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const defaults = getYAxisConfigDefaults(yAxisConfig)\n        const custom = { hideAxis: true }\n        return new AxisConfig({ ...defaults, ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed get yDomain(): [number, number] {\n        const domain = this.yAxisConfig.domain || [Infinity, -Infinity]\n        const domainDefault = this.chartState.yDomainDefault\n        return [\n            Math.min(domain[0], domainDefault[0]),\n            Math.max(domain[1], domainDefault[1]),\n        ]\n    }\n\n    @computed private get yRange(): [number, number] {\n        // Add vertical padding to prevent dots from being rendered at the edges\n        // and to ensure labels don't overlap with the x-axis time marks below\n        return this.innerBounds.padHeight(6).yRange()\n    }\n\n    @computed private get xRange(): [number, number] {\n        return this.innerBounds.xRange()\n    }\n\n    @computed private get xScale(): ScaleLinear<number, number> {\n        const { xRange } = this\n        return scaleLinear().domain(this.chartState.xDomain).range(xRange)\n    }\n\n    @computed private get startX(): number {\n        return this.xScale(this.chartState.startTime)\n    }\n\n    @computed private get endX(): number {\n        return this.xScale(this.chartState.endTime)\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig, {\n            yDomain: this.yDomain,\n            yRange: this.yRange,\n        })\n    }\n\n    @computed private get outerBoundsVerticalAxis(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig, {\n            yDomain: this.yDomain,\n            yRange: this.bounds.yRange(),\n        })\n    }\n\n    @computed private get placedSeries(): PlacedSlopeChartSeries[] {\n        return toPlacedSlopeChartSeries(this.chartState.series, {\n            yAxis: this.yAxis,\n            startX: this.startX,\n            endX: this.endX,\n        })\n    }\n\n    @computed private get renderSeries(): RenderSlopeChartSeries[] {\n        return toRenderSlopeChartSeries(this.placedSeries, {\n            isFocusModeActive: this.chartState.isFocusModeActive,\n        })\n    }\n\n    @computed private get labelFontSize(): number {\n        return Math.floor(GRAPHER_FONT_SCALE_12 * this.fontSize)\n    }\n\n    private formatLabel(value: number): string {\n        return this.chartState.formatColumn.formatValueShortWithAbbreviations(\n            value\n        )\n    }\n\n    @computed private get labelCandidateSeries(): SlopeChartSeries[] {\n        // If any series is focused, only show the labels for those\n        return this.chartState.isFocusModeActive\n            ? this.chartState.series.filter((series) => series.focus?.active)\n            : this.chartState.series\n    }\n\n    @computed private get labelsRange(): [number, number] {\n        const {\n            xMarksHeight,\n            manager: { chartAreaPadding = 0 },\n        } = this\n\n        return this.bounds\n            .expand({\n                top: chartAreaPadding,\n                bottom: chartAreaPadding + xMarksHeight,\n            })\n            .yRange()\n    }\n\n    @computed private get endLabelsState():\n        | SimpleVerticalLabelsState\n        | undefined {\n        if (!this.manager.showSeriesLabels) return undefined\n\n        const series = this.labelCandidateSeries.map((series) => {\n            const { seriesName, color } = series\n\n            const lastPoint = series.end\n            const value = lastPoint?.value ?? 0\n\n            const yPosition = this.outerBoundsVerticalAxis.place(value)\n            const label = this.formatLabel(value)\n\n            return {\n                seriesName,\n                value,\n                label,\n                yPosition,\n                color,\n                point: lastPoint,\n            }\n        })\n\n        return new SimpleVerticalLabelsState(series, {\n            fontSize: this.labelFontSize,\n            fontWeight: 500,\n            minSpacing: 2,\n            yRange: this.labelsRange,\n        })\n    }\n\n    @computed private get startLabelsState():\n        | SimpleVerticalLabelsState\n        | undefined {\n        if (!this.manager.showSeriesLabels) return undefined\n\n        const showValueLabelsOnly = this.manager.useMinimalLabeling\n\n        const series = this.labelCandidateSeries.map((series) => {\n            const { seriesName, color } = series\n            const firstPoint = series.start\n            const value = firstPoint?.value ?? 0\n            const yPosition = this.outerBoundsVerticalAxis.place(value)\n            const label = showValueLabelsOnly\n                ? this.formatLabel(value)\n                : seriesName\n            return {\n                seriesName,\n                value,\n                label,\n                yPosition,\n                color,\n                point: firstPoint,\n            }\n        })\n\n        return new SimpleVerticalLabelsState(series, {\n            fontSize: this.labelFontSize,\n            fontWeight: 500,\n            maxWidth: showValueLabelsOnly\n                ? undefined\n                : 0.25 * this.bounds.width,\n            minSpacing: showValueLabelsOnly ? 2 : 5,\n            yRange: this.labelsRange,\n            resolveCollision: (\n                s1: InitialSimpleLabelSeries,\n                s2: InitialSimpleLabelSeries\n            ): InitialSimpleLabelSeries => {\n                // Prefer to label series that have an end label\n                if (this.visibleEndLabels.has(s1.seriesName)) return s1\n                if (this.visibleEndLabels.has(s2.seriesName)) return s2\n\n                return s1 // no preference\n            },\n        })\n    }\n\n    @computed private get visibleEndLabels(): Set<SeriesName> {\n        return new Set(\n            this.endLabelsState?.series.map((series) => series.seriesName)\n        )\n    }\n\n    @computed private get endLabelsWidth(): number {\n        return this.endLabelsState?.width ?? 0\n    }\n\n    @computed private get startLabelsWidth(): number {\n        return this.startLabelsState?.width ?? 0\n    }\n\n    @computed private get paddedEndLabelsWidth(): number {\n        return this.endLabelsWidth > 0 ? this.endLabelsWidth + LABEL_PADDING : 0\n    }\n\n    @computed private get paddedStartLabelsWidth(): number {\n        return this.startLabelsWidth > 0\n            ? this.startLabelsWidth + LABEL_PADDING\n            : 0\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <>\n                <MarkX\n                    label={this.formattedStartTime}\n                    x={this.startX}\n                    top={this.innerBounds.top}\n                    bottom={this.innerBounds.bottom}\n                    labelPadding={4}\n                    fontSize={this.yAxis.tickFontSize}\n                />\n                <MarkX\n                    label={this.formattedEndTime}\n                    x={this.endX}\n                    top={this.innerBounds.top}\n                    bottom={this.innerBounds.bottom}\n                    labelPadding={4}\n                    fontSize={this.yAxis.tickFontSize}\n                />\n                <g>\n                    {this.renderSeries.map((series) => (\n                        <Slope\n                            key={series.seriesName}\n                            series={series}\n                            dotRadius={DOT_RADIUS}\n                            strokeWidth={1.5}\n                            outlineWidth={0}\n                            outlineStroke={this.manager.backgroundColor}\n                        />\n                    ))}\n                </g>\n                {this.startLabelsState && (\n                    <SimpleVerticalLabels\n                        state={this.startLabelsState}\n                        yAxis={this.yAxis}\n                        x={this.innerBounds.left - LABEL_PADDING}\n                        xAnchor=\"end\"\n                    />\n                )}\n                {this.endLabelsState && (\n                    <SimpleVerticalLabels\n                        state={this.endLabelsState}\n                        yAxis={this.yAxis}\n                        x={this.innerBounds.right + LABEL_PADDING}\n                    />\n                )}\n            </>\n        )\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { DiscreteBarChartState } from \"./DiscreteBarChartState\"\nimport {\n    DiscreteBarChart,\n    type DiscreteBarChartProps,\n} from \"./DiscreteBarChart.js\"\n\nimport { DiscreteBarChartManager } from \"./DiscreteBarChartConstants.js\"\n\n@observer\nexport class DiscreteBarChartThumbnail\n    extends React.Component<DiscreteBarChartProps>\n    implements ChartInterface\n{\n    constructor(props: DiscreteBarChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): DiscreteBarChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): DiscreteBarChartManager {\n        return this.props.chartState.manager\n    }\n\n    override render(): React.ReactElement {\n        return <DiscreteBarChart {...this.props} />\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { StackedAreaChartState } from \"./StackedAreaChartState.js\"\nimport { type StackedAreaChartProps } from \"./StackedAreaChart.js\"\nimport { Bounds, excludeUndefined } from \"@ourworldindata/utils\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FONT_SCALE_12,\n} from \"../core/GrapherConstants\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport {\n    HorizontalAxisComponent,\n    VerticalAxisZeroLine,\n} from \"../axis/AxisViews\"\nimport { Time } from \"@ourworldindata/types\"\nimport {\n    PlacedStackedAreaSeries,\n    RenderStackedAreaSeries,\n} from \"./StackedConstants\"\nimport { StackedAreas } from \"./StackedAreas\"\nimport { InitialSimpleLabelSeries } from \"../verticalLabels/SimpleVerticalLabelsTypes.js\"\nimport { SimpleVerticalLabelsState } from \"../verticalLabels/SimpleVerticalLabelsState\"\nimport { SimpleVerticalLabels } from \"../verticalLabels/SimpleVerticalLabels\"\nimport { resolveCollision, toPlacedStackedAreaSeries } from \"./StackedUtils\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport { resolveEmphasis } from \"../interaction/Emphasis.js\"\n\nconst LEGEND_PADDING = 4\n\n@observer\nexport class StackedAreaChartThumbnail\n    extends React.Component<StackedAreaChartProps>\n    implements ChartInterface, AxisManager\n{\n    constructor(props: StackedAreaChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): StackedAreaChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): ChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.bounds.padRight(this.paddedLabelsWidth)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const custom = { hideGridlines: true, labelPadding: 0 }\n        return new AxisConfig({ ...custom, ...xAxisConfig }, this)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = { nice: true, hideAxis: true }\n        return new AxisConfig({ ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        const { horizontalAxisPart, verticalAxisPart } = this\n        return new DualAxis({\n            bounds: this.innerBounds,\n            horizontalAxis: horizontalAxisPart,\n            verticalAxis: verticalAxisPart,\n        })\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed private get labelFontSize(): number {\n        return Math.floor(GRAPHER_FONT_SCALE_12 * this.fontSize)\n    }\n\n    // Same as dualAxis.verticalAxis, but doesn't depend on innerBounds\n    @computed get outerBoundsVerticalAxis(): VerticalAxis {\n        const yAxis = this.verticalAxisPart.clone()\n        yAxis.range = this.bounds.yRange()\n        return yAxis\n    }\n\n    @computed private get labelsRange(): [number, number] {\n        const {\n            horizontalAxisPart,\n            manager: { chartAreaPadding = 0 },\n        } = this\n\n        return this.bounds\n            .expand({\n                top: chartAreaPadding,\n                bottom: chartAreaPadding + horizontalAxisPart.height,\n            })\n            .yRange()\n    }\n\n    @computed private get verticalLabelsState():\n        | SimpleVerticalLabelsState\n        | undefined {\n        if (!this.manager.showSeriesLabels || this.manager.useMinimalLabeling)\n            return undefined\n\n        const series = excludeUndefined(\n            this.chartState.series.map((series, seriesIndex) => {\n                const { seriesName, color, focus } = series\n\n                // Don't label background series\n                if (focus?.background) return undefined\n\n                const value = this.chartState.midpoints[seriesIndex]\n\n                const yPosition = this.outerBoundsVerticalAxis.place(value)\n                const label = seriesName\n\n                return { series, seriesName, value, label, yPosition, color }\n            })\n        )\n\n        return new SimpleVerticalLabelsState(series, {\n            fontSize: this.labelFontSize,\n            fontWeight: 500,\n            maxWidth: 0.25 * this.bounds.width,\n            yRange: this.labelsRange,\n            resolveCollision: (\n                s1: InitialSimpleLabelSeries,\n                s2: InitialSimpleLabelSeries\n            ): InitialSimpleLabelSeries => {\n                const series1 = this.chartState.seriesByName.get(s1.seriesName)\n                const series2 = this.chartState.seriesByName.get(s2.seriesName)\n\n                if (!series1 || !series2) return s1 // no preference\n\n                const picked = resolveCollision(series1, series2)\n                if (picked?.seriesName === s1.seriesName) return s1\n                if (picked?.seriesName === s2.seriesName) return s2\n\n                return s1 // no preference\n            },\n        })\n    }\n\n    @computed private get labelsWidth(): number {\n        return this.verticalLabelsState?.width ?? 0\n    }\n\n    @computed private get paddedLabelsWidth(): number {\n        return this.labelsWidth ? this.labelsWidth + LEGEND_PADDING : 0\n    }\n\n    @computed private get placedSeries(): PlacedStackedAreaSeries<Time>[] {\n        return toPlacedStackedAreaSeries(this.chartState.series, this.dualAxis)\n    }\n\n    @computed private get renderSeries(): RenderStackedAreaSeries<Time>[] {\n        return this.placedSeries.map((series) => ({\n            ...series,\n            emphasis: resolveEmphasis({ focus: series.focus }),\n        }))\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <>\n                <VerticalAxisZeroLine\n                    verticalAxis={this.dualAxis.verticalAxis}\n                    bounds={this.dualAxis.innerBounds}\n                />\n                <HorizontalAxisComponent\n                    axis={this.dualAxis.horizontalAxis}\n                    bounds={this.dualAxis.bounds}\n                    showEndpointsOnly\n                />\n                <StackedAreas series={this.renderSeries} />\n                {this.verticalLabelsState && (\n                    <SimpleVerticalLabels\n                        state={this.verticalLabelsState}\n                        yAxis={this.dualAxis.verticalAxis}\n                        x={this.innerBounds.right + LEGEND_PADDING}\n                    />\n                )}\n            </>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { StackedBarChartState } from \"./StackedBarChartState.js\"\nimport { type StackedBarChartProps } from \"./StackedBarChart.js\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FONT_SCALE_12,\n} from \"../core/GrapherConstants\"\nimport { Bounds, excludeUndefined } from \"@ourworldindata/utils\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { Time } from \"@ourworldindata/types\"\nimport {\n    PlacedStackedBarSeries,\n    RenderStackedBarSeries,\n} from \"./StackedConstants\"\nimport {\n    getXAxisConfigDefaultsForStackedBar,\n    resolveCollision,\n    toPlacedStackedBarSeries,\n} from \"./StackedUtils\"\nimport {\n    HorizontalAxisComponent,\n    VerticalAxisZeroLine,\n} from \"../axis/AxisViews\"\nimport { StackedBars } from \"./StackedBars\"\nimport { InitialSimpleLabelSeries } from \"../verticalLabels/SimpleVerticalLabelsTypes.js\"\nimport { SimpleVerticalLabelsState } from \"../verticalLabels/SimpleVerticalLabelsState\"\nimport { SimpleVerticalLabels } from \"../verticalLabels/SimpleVerticalLabels\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\nimport { resolveEmphasis } from \"../interaction/Emphasis.js\"\n\nconst LEGEND_PADDING = 4\n\n@observer\nexport class StackedBarChartThumbnail\n    extends React.Component<StackedBarChartProps>\n    implements ChartInterface, AxisManager\n{\n    constructor(props: StackedBarChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): StackedBarChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): ChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.bounds.padRight(this.paddedLabelsWidth)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const defaults = getXAxisConfigDefaultsForStackedBar(this.chartState)\n        const custom = { labelPadding: 0 }\n        return new AxisConfig({ ...custom, ...defaults, ...xAxisConfig }, this)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = { nice: true, hideAxis: true }\n        return new AxisConfig({ ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        const { horizontalAxisPart, verticalAxisPart } = this\n        return new DualAxis({\n            bounds: this.innerBounds,\n            horizontalAxis: horizontalAxisPart,\n            verticalAxis: verticalAxisPart,\n        })\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed private get labelFontSize(): number {\n        return Math.floor(GRAPHER_FONT_SCALE_12 * this.fontSize)\n    }\n\n    // Same as dualAxis.verticalAxis, but doesn't depend on innerBounds\n    @computed get outerBoundsVerticalAxis(): VerticalAxis {\n        const yAxis = this.verticalAxisPart.clone()\n        yAxis.range = this.bounds.yRange()\n        return yAxis\n    }\n\n    @computed private get labelsRange(): [number, number] {\n        const {\n            horizontalAxisPart,\n            manager: { chartAreaPadding = 0 },\n        } = this\n\n        return this.bounds\n            .expand({\n                top: chartAreaPadding,\n                bottom: chartAreaPadding + horizontalAxisPart.height,\n            })\n            .yRange()\n    }\n\n    @computed private get verticalLabelsState():\n        | SimpleVerticalLabelsState\n        | undefined {\n        if (!this.manager.showLegend) return undefined\n\n        const series = excludeUndefined(\n            this.chartState.series.map((series, seriesIndex) => {\n                const { seriesName, color, focus } = series\n\n                // Don't label background series\n                if (focus?.background) return undefined\n\n                const value = this.chartState.midpoints[seriesIndex]\n\n                const yPosition = this.outerBoundsVerticalAxis.place(value)\n                const label = seriesName\n\n                return { series, seriesName, value, label, yPosition, color }\n            })\n        )\n\n        return new SimpleVerticalLabelsState(series, {\n            fontSize: this.labelFontSize,\n            fontWeight: 500,\n            maxWidth: 0.25 * this.bounds.width,\n            yRange: this.labelsRange,\n            resolveCollision: (\n                s1: InitialSimpleLabelSeries,\n                s2: InitialSimpleLabelSeries\n            ): InitialSimpleLabelSeries => {\n                const series1 = this.chartState.seriesByName.get(s1.seriesName)\n                const series2 = this.chartState.seriesByName.get(s2.seriesName)\n\n                if (!series1 || !series2) return s1 // no preference\n\n                const picked = resolveCollision(series1, series2)\n                if (picked?.seriesName === s1.seriesName) return s1\n                if (picked?.seriesName === s2.seriesName) return s2\n\n                return s1 // no preference\n            },\n        })\n    }\n\n    @computed private get labelsWidth(): number {\n        return this.verticalLabelsState?.width ?? 0\n    }\n\n    @computed private get paddedLabelsWidth(): number {\n        return this.labelsWidth ? this.labelsWidth + LEGEND_PADDING : 0\n    }\n\n    @computed\n    private get placedSeries(): readonly PlacedStackedBarSeries<Time>[] {\n        return toPlacedStackedBarSeries(this.chartState.series, this.dualAxis)\n    }\n\n    @computed private get renderSeries(): RenderStackedBarSeries<Time>[] {\n        return this.placedSeries.map((series) => ({\n            ...series,\n            emphasis: resolveEmphasis({ focus: series.focus }),\n        }))\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <>\n                <VerticalAxisZeroLine\n                    verticalAxis={this.dualAxis.verticalAxis}\n                    bounds={this.dualAxis.innerBounds}\n                />\n                <HorizontalAxisComponent\n                    axis={this.dualAxis.horizontalAxis}\n                    bounds={this.dualAxis.bounds}\n                    showEndpointsOnly\n                />\n                <StackedBars series={this.renderSeries} />\n                {this.verticalLabelsState && (\n                    <SimpleVerticalLabels\n                        state={this.verticalLabelsState}\n                        yAxis={this.dualAxis.verticalAxis}\n                        x={this.innerBounds.right + LEGEND_PADDING}\n                    />\n                )}\n            </>\n        )\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { StackedDiscreteBarChartState } from \"./StackedDiscreteBarChartState\"\nimport { ChartComponentProps } from \"../chart/ChartTypeMap.js\"\nimport { StackedDiscreteBarChart } from \"./StackedDiscreteBarChart\"\n\n@observer\nexport class StackedDiscreteBarChartThumbnail\n    extends React.Component<ChartComponentProps<StackedDiscreteBarChartState>>\n    implements ChartInterface\n{\n    constructor(props: ChartComponentProps<StackedDiscreteBarChartState>) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): StackedDiscreteBarChartState {\n        return this.props.chartState\n    }\n\n    override render(): React.ReactElement {\n        return <StackedDiscreteBarChart {...this.props} hideLegend />\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { ScatterPlotChartState } from \"./ScatterPlotChartState\"\nimport { type ScatterPlotChartProps } from \"./ScatterPlotChart.js\"\nimport { ScaleLinear, scaleSqrt } from \"d3-scale\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig\"\nimport {\n    SCATTER_LINE_MIN_WIDTH,\n    SCATTER_POINT_MIN_RADIUS,\n    ScatterPlotManager,\n} from \"./ScatterPlotChartConstants\"\nimport { toSizeRange } from \"./ScatterUtils\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { ScatterPointsWithLabels } from \"./ScatterPointsWithLabels\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\n\n@observer\nexport class ScatterPlotChartThumbnail\n    extends React.Component<ScatterPlotChartProps>\n    implements ChartInterface, AxisManager\n{\n    constructor(props: ScatterPlotChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): ScatterPlotChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): ScatterPlotManager {\n        return this.chartState.manager\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get innerBounds(): Bounds {\n        return this.bounds\n    }\n\n    @computed get axisBounds(): Bounds {\n        return this.innerBounds\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const custom = { labelPadding: 2 }\n        return new AxisConfig({ ...custom, ...xAxisConfig }, this)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = { labelPadding: 8 }\n        return new AxisConfig({ ...custom, ...yAxisConfig }, this)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        return new DualAxis({\n            bounds: this.innerBounds,\n            horizontalAxis: this.horizontalAxisPart,\n            verticalAxis: this.verticalAxisPart,\n        })\n    }\n\n    @computed private get sizeRange(): [number, number] {\n        return toSizeRange(this.chartState, this.innerBounds)\n    }\n\n    @computed get sizeScale(): ScaleLinear<number, number> {\n        return scaleSqrt()\n            .domain(this.chartState.sizeDomain)\n            .range(this.sizeRange)\n    }\n\n    private getPointRadius(value: number | undefined): number {\n        const radius =\n            value !== undefined\n                ? this.sizeScale(value)\n                : this.sizeScale.range()[0]\n\n        // We are enforcing the minimum radius/width just before render,\n        // it should not be enforced earlier than that.\n        return Math.max(\n            radius,\n            this.props.chartState.isConnected\n                ? SCATTER_LINE_MIN_WIDTH\n                : SCATTER_POINT_MIN_RADIUS\n        )\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <>\n                <DualAxisComponent\n                    dualAxis={this.dualAxis}\n                    showTickMarks={false}\n                    showEndpointsOnly={true}\n                />\n                <ScatterPointsWithLabels\n                    noDataModalManager={this.manager}\n                    isConnected={this.chartState.isConnected}\n                    hideConnectedScatterLines={\n                        !!this.manager.hideConnectedScatterLines\n                    }\n                    seriesArray={this.chartState.series}\n                    dualAxis={this.dualAxis}\n                    colorScale={\n                        !this.chartState.colorColumn.isMissing\n                            ? this.chartState.colorScale\n                            : undefined\n                    }\n                    sizeScale={this.sizeScale}\n                    baseFontSize={this.fontSize}\n                    focusedSeriesNames={\n                        this.chartState.selectionArray.selectedEntityNames\n                    }\n                    hideScatterLabels={true}\n                    backgroundColor={this.manager.backgroundColor}\n                />\n            </>\n        )\n    }\n}\n","import * as React from \"react\"\nimport { observer } from \"mobx-react\"\nimport * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport { computed, makeObservable } from \"mobx\"\nimport { Bar, BarShape, PlacedItem } from \"./MarimekkoChartConstants\"\nimport { DualAxis } from \"../axis/Axis\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { Halo } from \"@ourworldindata/components\"\n\ninterface MarimekkoInternalLabelsProps {\n    items: PlacedItem[]\n    dualAxis: DualAxis\n    x0: number\n    y0: number\n    fontSize: number\n    labelPadding: number\n}\n\ninterface PlacedLabel {\n    bounds: Bounds\n    label: string\n    color: string\n}\n\n@observer\nexport class MarimekkoInternalLabels extends React.Component<MarimekkoInternalLabelsProps> {\n    constructor(props: MarimekkoInternalLabelsProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get sortedItems(): PlacedItem[] {\n        return _.sortBy(\n            this.props.items,\n            (item) => item.xPoint?.value ?? item.xPosition\n        )\n    }\n\n    @computed get placedLabels(): PlacedLabel[] {\n        return this.sortedItems\n            .map((item) => {\n                const bar: Bar | undefined = item.bars[0]\n                if (bar === undefined) return undefined\n\n                const x =\n                    this.props.dualAxis.horizontalAxis.place(this.props.x0) +\n                    item.xPosition\n\n                const barY =\n                    bar === undefined\n                        ? this.props.dualAxis.verticalAxis.place(\n                              this.props.y0\n                          ) -\n                          (Bounds.forText(\"no data\").height + 10)\n                        : this.props.dualAxis.verticalAxis.place(\n                              bar.yPoint.value\n                          )\n                const y = barY - this.props.labelPadding\n\n                const label = item.shortEntityName ?? item.entityName\n                const bounds = Bounds.forText(label, {\n                    fontSize: this.props.fontSize,\n                }).set({ x, y })\n\n                const color =\n                    item.entityColor?.color ??\n                    (bar.kind === BarShape.Bar ? bar.color : \"#555\")\n\n                return { bounds, label, color }\n            })\n            .filter((label) => label !== undefined)\n    }\n\n    @computed get visibleLabels(): PlacedLabel[] {\n        const placedLabels = this.placedLabels.map((series) => ({\n            ...series,\n            // Hide label if it doesn't fit within the chart area\n            isHidden:\n                series.bounds.x + series.bounds.width >\n                this.props.dualAxis.innerBounds.right,\n        }))\n\n        // Hide overlapping labels\n        for (let i = 0; i < placedLabels.length; i++) {\n            const s1 = placedLabels[i]\n            if (s1.isHidden) continue\n\n            for (let j = i + 1; j < placedLabels.length; j++) {\n                const s2 = placedLabels[j]\n                if (s2.isHidden) continue\n\n                if (s1.bounds.intersects(s2.bounds)) {\n                    s2.isHidden = true\n                }\n            }\n        }\n\n        return placedLabels\n            .filter((label) => !label.isHidden)\n            .map((series) => R.omit(series, [\"isHidden\"]))\n    }\n\n    override render(): React.ReactElement | null {\n        if (!this.visibleLabels.length) return null\n\n        return (\n            <g>\n                {this.visibleLabels.map(({ label, bounds, color }) => (\n                    <Halo key={label} id={label} outlineWidth={2}>\n                        <text\n                            x={bounds.x}\n                            y={bounds.y}\n                            fontSize={this.props.fontSize}\n                            fill={color}\n                        >\n                            {label}\n                        </text>\n                    </Halo>\n                ))}\n            </g>\n        )\n    }\n}\n","import React from \"react\"\nimport * as _ from \"lodash-es\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { MarimekkoChartState } from \"./MarimekkoChartState\"\nimport { type MarimekkoChartProps } from \"./MarimekkoChart.js\"\nimport { MarimekkoChartManager, PlacedItem } from \"./MarimekkoChartConstants\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { DualAxis, HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FONT_SCALE_12,\n} from \"../core/GrapherConstants\"\nimport { MarimekkoBars } from \"./MarimekkoBars\"\nimport { DualAxisComponent } from \"../axis/AxisViews\"\nimport { toPlacedMarimekkoItems } from \"./MarimekkoChartHelpers\"\nimport { MarimekkoInternalLabels } from \"./MarimekkoInternalLabels\"\nimport { NoDataModal } from \"../noDataModal/NoDataModal\"\n\nconst LABEL_PADDING = 4\n\n@observer\nexport class MarimekkoChartThumbnail\n    extends React.Component<MarimekkoChartProps>\n    implements ChartInterface\n{\n    constructor(props: MarimekkoChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): MarimekkoChartState {\n        return this.props.chartState\n    }\n\n    @computed get manager(): MarimekkoChartManager {\n        return this.chartState.manager\n    }\n\n    @computed get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed get innerBounds(): Bounds {\n        return (\n            this.bounds\n                // Allow internal labels to eat into the thumbnail padding\n                .padTop(this.labelHeight ? this.labelHeight - 6 : 0)\n                // Add some bottom padding since the y-axis tick labels are\n                // center-aligned and eat into the thumbnail padding\n                .padBottom(this.shouldShowVerticalAxis ? 6 : 0)\n        )\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed get labelFontSize(): number {\n        return Math.floor(GRAPHER_FONT_SCALE_12 * this.fontSize)\n    }\n\n    @computed get labelHeight(): number {\n        return this.shouldShowLabels ? this.labelFontSize + LABEL_PADDING : 0\n    }\n\n    @computed private get shouldShowVerticalAxis(): boolean {\n        return !!this.manager.useMinimalLabeling\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        const { yAxisConfig } = this.manager\n        const custom = {\n            hideGridlines: true,\n            hideAxis: !this.shouldShowVerticalAxis,\n        }\n        return new AxisConfig({ ...yAxisConfig, ...custom }, this)\n    }\n\n    @computed private get xAxisConfig(): AxisConfig {\n        const { xAxisConfig } = this.manager\n        const custom = { hideAxis: true, hideGridlines: true }\n        return new AxisConfig({ ...xAxisConfig, ...custom }, this)\n    }\n\n    @computed private get verticalAxisPart(): VerticalAxis {\n        return this.chartState.toVerticalAxis(this.yAxisConfig)\n    }\n\n    @computed private get horizontalAxisPart(): HorizontalAxis {\n        return this.chartState.toHorizontalAxis(this.xAxisConfig)\n    }\n\n    @computed private get dualAxis(): DualAxis {\n        return new DualAxis({\n            bounds: this.innerBounds,\n            verticalAxis: this.verticalAxisPart,\n            horizontalAxis: this.horizontalAxisPart,\n        })\n    }\n\n    @computed get xAxis(): HorizontalAxis {\n        return this.dualAxis.horizontalAxis\n    }\n\n    @computed get yAxis(): VerticalAxis {\n        return this.dualAxis.verticalAxis\n    }\n\n    @computed get placedItems(): PlacedItem[] {\n        return toPlacedMarimekkoItems(this.chartState, {\n            dualAxis: this.dualAxis,\n        })\n    }\n\n    @computed private get placedItemsMap(): Map<string, PlacedItem> {\n        return new Map(this.placedItems.map((item) => [item.entityName, item]))\n    }\n\n    @computed private get shouldShowLabels(): boolean {\n        return this.chartState.isFocusModeActive\n    }\n\n    @computed private get labelledItems(): PlacedItem[] {\n        if (!this.shouldShowLabels) return []\n        return this.chartState.focusArray.seriesNames\n            .map((entityName) => this.placedItemsMap.get(entityName))\n            .filter((item) => item !== undefined)\n    }\n\n    override render(): React.ReactElement {\n        if (this.chartState.errorInfo.reason)\n            return (\n                <NoDataModal\n                    manager={this.manager}\n                    bounds={this.props.bounds}\n                    message={this.chartState.errorInfo.reason}\n                />\n            )\n\n        return (\n            <g>\n                <DualAxisComponent dualAxis={this.dualAxis} showEndpointsOnly />\n                <MarimekkoBars\n                    dualAxis={this.dualAxis}\n                    placedItems={this.placedItems}\n                    fontSize={this.fontSize}\n                    x0={this.chartState.x0}\n                    y0={this.chartState.y0}\n                    selectionArray={this.chartState.selectionArray}\n                    selectedItems={this.chartState.selectedItems}\n                    isFocusModeActive={this.chartState.isFocusModeActive}\n                />\n                <MarimekkoInternalLabels\n                    items={this.labelledItems}\n                    dualAxis={this.dualAxis}\n                    x0={this.chartState.x0}\n                    y0={this.chartState.y0}\n                    fontSize={this.labelFontSize}\n                    labelPadding={LABEL_PADDING}\n                />\n            </g>\n        )\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { ChartInterface } from \"../chart/ChartInterface\"\nimport { MapChartState } from \"./MapChartState\"\nimport { MapChart, MapChartProps } from \"./MapChart\"\n\n@observer\nexport class MapChartThumbnail\n    extends React.Component<MapChartProps>\n    implements ChartInterface\n{\n    constructor(props: MapChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed get chartState(): MapChartState {\n        return this.props.chartState\n    }\n\n    override render(): React.ReactElement {\n        return <MapChart {...this.props} />\n    }\n}\n","import { match, P } from \"ts-pattern\"\nimport {\n    GRAPHER_CHART_TYPES,\n    GRAPHER_MAP_TYPE,\n    GrapherChartOrMapType,\n    GrapherVariant,\n} from \"@ourworldindata/types\"\nimport { ChartInterface, ChartState } from \"./ChartInterface\"\nimport { ChartManager } from \"./ChartManager\"\nimport { ComponentClass, Component } from \"react\"\nimport { Bounds } from \"@ourworldindata/utils\"\n\nimport { LineChartState } from \"../lineCharts/LineChartState.js\"\nimport { SlopeChartState } from \"../slopeCharts/SlopeChartState\"\nimport { DiscreteBarChartState } from \"../barCharts/DiscreteBarChartState.js\"\nimport { StackedAreaChartState } from \"../stackedCharts/StackedAreaChartState.js\"\nimport { StackedBarChartState } from \"../stackedCharts/StackedBarChartState.js\"\nimport { StackedDiscreteBarChartState } from \"../stackedCharts/StackedDiscreteBarChartState\"\nimport { ScatterPlotChartState } from \"../scatterCharts/ScatterPlotChartState\"\nimport { MarimekkoChartState } from \"../stackedCharts/MarimekkoChartState\"\nimport { MapChartState } from \"../mapCharts/MapChartState\"\n\nimport { LineChart } from \"../lineCharts/LineChart\"\nimport { SlopeChart } from \"../slopeCharts/SlopeChart.js\"\nimport { DiscreteBarChart } from \"../barCharts/DiscreteBarChart.js\"\nimport { StackedAreaChart } from \"../stackedCharts/StackedAreaChart\"\nimport { StackedBarChart } from \"../stackedCharts/StackedBarChart\"\nimport { StackedDiscreteBarChart } from \"../stackedCharts/StackedDiscreteBarChart\"\nimport { ScatterPlotChart } from \"../scatterCharts/ScatterPlotChart\"\nimport { MarimekkoChart } from \"../stackedCharts/MarimekkoChart\"\nimport { MapChart } from \"../mapCharts/MapChart\"\n\nimport { LineChartThumbnail } from \"../lineCharts/LineChartThumbnail\"\nimport { SlopeChartThumbnail } from \"../slopeCharts/SlopeChartThumbnail\"\nimport { DiscreteBarChartThumbnail } from \"../barCharts/DiscreteBarChartThumbnail.js\"\nimport { StackedAreaChartThumbnail } from \"../stackedCharts/StackedAreaChartThumbnail\"\nimport { StackedBarChartThumbnail } from \"../stackedCharts/StackedBarChartThumbnail\"\nimport { StackedDiscreteBarChartThumbnail } from \"../stackedCharts/StackedDiscreteBarChartThumbnail\"\nimport { ScatterPlotChartThumbnail } from \"../scatterCharts/ScatterPlotChartThumbnail\"\nimport { MarimekkoChartThumbnail } from \"../stackedCharts/MarimekkoChartThumbnail\"\nimport { MapChartThumbnail } from \"../mapCharts/MapChartThumbnail\"\n\nexport interface ChartComponentProps<TState extends ChartState = ChartState> {\n    chartState: TState\n    bounds?: Bounds\n}\n\ninterface ChartComponentClass<\n    T extends ChartState = ChartState,\n> extends ComponentClass<ChartComponentProps<T>> {\n    new (props: ChartComponentProps<T>): Component & ChartInterface\n}\n\ntype ChartFactoryProps = {\n    manager: ChartManager\n    chartType: GrapherChartOrMapType\n    chartState?: ChartState\n    variant?: GrapherVariant\n} & Omit<ChartComponentProps, \"chartState\">\n\nconst ChartComponentClassMap = new Map<\n    GrapherChartOrMapType,\n    ChartComponentClass<any>\n>([\n    [GRAPHER_CHART_TYPES.LineChart, LineChart],\n    [GRAPHER_CHART_TYPES.SlopeChart, SlopeChart],\n    [GRAPHER_CHART_TYPES.DiscreteBar, DiscreteBarChart],\n    [GRAPHER_CHART_TYPES.StackedArea, StackedAreaChart],\n    [GRAPHER_CHART_TYPES.StackedBar, StackedBarChart],\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar, StackedDiscreteBarChart],\n    [GRAPHER_CHART_TYPES.ScatterPlot, ScatterPlotChart],\n    [GRAPHER_CHART_TYPES.Marimekko, MarimekkoChart],\n    [GRAPHER_MAP_TYPE, MapChart],\n])\n\nconst ChartThumbnailClassMap = new Map<\n    GrapherChartOrMapType,\n    ChartComponentClass<any>\n>([\n    [GRAPHER_CHART_TYPES.LineChart, LineChartThumbnail],\n    [GRAPHER_CHART_TYPES.SlopeChart, SlopeChartThumbnail],\n    [GRAPHER_CHART_TYPES.DiscreteBar, DiscreteBarChartThumbnail],\n    [GRAPHER_CHART_TYPES.StackedArea, StackedAreaChartThumbnail],\n    [GRAPHER_CHART_TYPES.StackedBar, StackedBarChartThumbnail],\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar, StackedDiscreteBarChartThumbnail],\n    [GRAPHER_CHART_TYPES.ScatterPlot, ScatterPlotChartThumbnail],\n    [GRAPHER_CHART_TYPES.Marimekko, MarimekkoChartThumbnail],\n    [GRAPHER_MAP_TYPE, MapChartThumbnail],\n])\n\nconst ChartStateMap = new Map<\n    GrapherChartOrMapType,\n    new (args: { manager: ChartManager }) => ChartState\n>([\n    [GRAPHER_CHART_TYPES.LineChart, LineChartState],\n    [GRAPHER_CHART_TYPES.SlopeChart, SlopeChartState],\n    [GRAPHER_CHART_TYPES.DiscreteBar, DiscreteBarChartState],\n    [GRAPHER_CHART_TYPES.StackedArea, StackedAreaChartState],\n    [GRAPHER_CHART_TYPES.StackedBar, StackedBarChartState],\n    [GRAPHER_CHART_TYPES.StackedDiscreteBar, StackedDiscreteBarChartState],\n    [GRAPHER_CHART_TYPES.ScatterPlot, ScatterPlotChartState],\n    [GRAPHER_CHART_TYPES.Marimekko, MarimekkoChartState],\n    [GRAPHER_MAP_TYPE, MapChartState],\n])\n\nexport function makeChartState(\n    chartType: GrapherChartOrMapType,\n    manager: ChartManager\n): ChartState {\n    const StateClass = ChartStateMap.get(chartType) ?? LineChartState\n    return new StateClass({ manager })\n}\n\nfunction getChartComponentClass(\n    chartType: GrapherChartOrMapType,\n    variant = GrapherVariant.Default\n): ChartComponentClass {\n    const { ClassMap, DefaultChartClass } = match(variant)\n        .with(\n            P.union(GrapherVariant.Default, GrapherVariant.Uncaptioned),\n            () => ({\n                ClassMap: ChartComponentClassMap,\n                DefaultChartClass: LineChart,\n            })\n        )\n        .with(GrapherVariant.Thumbnail, () => ({\n            ClassMap: ChartThumbnailClassMap,\n            DefaultChartClass: LineChartThumbnail,\n        }))\n        .exhaustive()\n\n    const ChartClass = ClassMap.get(chartType) ?? DefaultChartClass\n\n    return ChartClass as ChartComponentClass\n}\n\nexport const ChartComponent = ({\n    manager,\n    chartType,\n    chartState,\n    variant = GrapherVariant.Default,\n    ...componentProps\n}: ChartFactoryProps): React.ReactElement => {\n    const validChartState = chartState ?? makeChartState(chartType, manager)\n    const ChartClass = getChartComponentClass(chartType, variant)\n    return <ChartClass {...componentProps} chartState={validChartState} />\n}\n\nexport const makeChartInstance = ({\n    manager,\n    chartType,\n    chartState,\n    variant = GrapherVariant.Default,\n    ...componentProps\n}: ChartFactoryProps): ChartInterface => {\n    const validChartState = chartState ?? makeChartState(chartType, manager)\n    const ChartClass = getChartComponentClass(chartType, variant)\n    return new ChartClass({ ...componentProps, chartState: validChartState })\n}\n","import { BASE_FONT_SIZE, GRAPHER_FONT_SCALE_10 } from \"../core/GrapherConstants\"\n\n// not sure if we want to do something more sophisticated\nexport const getFontSize = (\n    containerWidth: number,\n    count: number,\n    baseFontSize = BASE_FONT_SIZE,\n    minSize = 8\n): number => {\n    // Pick a fixed font size for very small charts\n    if (containerWidth < 300) return GRAPHER_FONT_SCALE_10 * baseFontSize\n\n    // Scale the font size based on the number of series otherwise\n    if (count <= 2) return Math.max(minSize, baseFontSize * (15 / 16))\n    if (count <= 4) return Math.max(minSize, baseFontSize * (14 / 16))\n    if (count <= 9) return Math.max(minSize, baseFontSize * (13 / 16))\n    if (count <= 16) return Math.max(minSize, baseFontSize * (12 / 16))\n    if (count <= 25) return Math.max(minSize, baseFontSize * (11 / 16))\n    return minSize\n}\n\nexport const getLabelPadding = (baseFontSize: number): number =>\n    0.5 * baseFontSize\n\nexport const getFacetGridPadding = ({\n    baseFontSize,\n    shouldAddRowPadding = true,\n    shouldAddColumnPadding = true,\n}: {\n    baseFontSize: number\n    shouldAddRowPadding?: boolean\n    shouldAddColumnPadding?: boolean\n}): { rowPadding: number; columnPadding: number; outerPadding: number } => {\n    const labelHeight = baseFontSize\n    const labelPadding = getLabelPadding(baseFontSize)\n\n    const rowPadding = shouldAddRowPadding ? baseFontSize : 0\n    const columnPadding = shouldAddColumnPadding ? baseFontSize : 0\n\n    return {\n        rowPadding: Math.round(labelHeight + labelPadding + rowPadding),\n        columnPadding: Math.round(columnPadding),\n        outerPadding: 0,\n    }\n}\n\nexport const calculateAspectRatio = (width: number, height: number): number => {\n    const aspectRatio = width / height // can be NaN if height is 0, which can happen when the chart is temporarily hidden\n    if (isNaN(aspectRatio)) return 1\n    return aspectRatio\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\nimport * as R from \"remeda\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    excludeUndefined,\n    getIdealGridParams,\n    IDEAL_PLOT_ASPECT_RATIO,\n    GridParameters,\n    Position,\n    PositionMap,\n    HorizontalAlign,\n    Color,\n    makeFigmaId,\n    exposeInstanceOnWindow,\n    SplitBoundsPadding,\n} from \"@ourworldindata/utils\"\nimport { shortenWithEllipsis } from \"@ourworldindata/components\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport {\n    GRAPHER_CHART_TYPES,\n    GrapherChartType,\n    FacetAxisDomain,\n    FacetStrategy,\n    SeriesColorMap,\n    SeriesStrategy,\n    AxisConfigInterface,\n    ChartErrorInfo,\n} from \"@ourworldindata/types\"\nimport { ChartComponent, makeChartInstance } from \"../chart/ChartTypeMap\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { ChartInterface, ChartState } from \"../chart/ChartInterface\"\nimport {\n    calculateAspectRatio,\n    getFacetGridPadding,\n    getFontSize,\n    getLabelPadding,\n} from \"./FacetChartUtils\"\nimport {\n    FacetSeries,\n    FacetChartProps,\n    PlacedFacetSeries,\n    FacetChartManager,\n} from \"./FacetChartConstants\"\nimport { OwidTable, CoreColumn } from \"@ourworldindata/core-table\"\nimport { autoDetectYColumnSlugs, makeSelectionArray } from \"../chart/ChartUtils\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { AxisConfig } from \"../axis/AxisConfig\"\nimport { HorizontalAxis, VerticalAxis } from \"../axis/Axis\"\nimport {\n    HorizontalCategoricalColorLegend,\n    HorizontalColorLegend,\n    HorizontalColorLegendManager,\n    HorizontalNumericColorLegend,\n} from \"../legend/HorizontalColorLegends\"\nimport {\n    CategoricalBin,\n    ColorScaleBin,\n    NumericBin,\n} from \"../color/ColorScaleBin\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport { SeriesLabel } from \"../seriesLabel/SeriesLabel.js\"\nimport {\n    SeriesLabelState,\n    SeriesLabelStateOptions,\n} from \"../seriesLabel/SeriesLabelState.js\"\n\nconst SHARED_X_AXIS_MIN_FACET_COUNT = 12\n\nconst facetBackgroundColor = \"none\" // we don't use color yet but may use it for background later\n\nconst getContentBounds = (\n    containerBounds: Bounds,\n    manager: ChartManager,\n    chartInstance: ChartInterface\n): Bounds => {\n    let bounds = containerBounds\n    const axes = [\n        { config: manager.xAxisConfig, axis: chartInstance.xAxis },\n        { config: manager.yAxisConfig, axis: chartInstance.yAxis },\n    ]\n    for (const { config, axis } of axes) {\n        if (!config || !axis) continue\n        if (!config.hideAxis && config.minSize !== undefined) {\n            bounds = bounds.pad({ [axis.orient]: config.minSize })\n        }\n    }\n    return bounds\n}\n\nconst shouldHideFacetAxis = (\n    axis: HorizontalAxis | VerticalAxis | undefined,\n    edges: Set<Position>,\n    sharedAxesSizes: PositionMap<number>\n): boolean => {\n    if (!axis) return false\n    if (axis.hideAxis) return true\n    return axis.orient in sharedAxesSizes && !edges.has(axis.orient)\n}\n\ninterface AxisInfo {\n    config: AxisConfigInterface\n    axisAccessor: (\n        chartInstance: ChartInterface\n    ) => HorizontalAxis | VerticalAxis | undefined\n    uniform: boolean\n    /** only considered when `uniform` is `true`, otherwise ignored */\n    shared: boolean\n}\n\ninterface AxesInfo {\n    x: AxisInfo\n    y: AxisInfo\n}\n\n@observer\nexport class FacetChart\n    extends React.Component<FacetChartProps>\n    implements ChartState, HorizontalColorLegendManager\n{\n    constructor(props: FacetChartProps) {\n        super(props)\n\n        makeObservable<FacetChart, \"legendHoverBin\">(this, {\n            legendHoverBin: observable.ref,\n        })\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        return table\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    @computed private get manager(): FacetChartManager {\n        return this.props.manager\n    }\n\n    @computed private get chartTypeName(): GrapherChartType {\n        return this.props.chartTypeName ?? GRAPHER_CHART_TYPES.LineChart\n    }\n\n    @computed get isStatic(): boolean {\n        return !!this.manager.isStatic\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        return { reason: \"\" }\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n    }\n\n    @computed private get legendPadding(): number {\n        const { isNumericLegend, fontSize } = this\n        return isNumericLegend ? 1.5 * fontSize : 0.875 * fontSize\n    }\n\n    @computed private get labelPadding(): number {\n        return getLabelPadding(this.facetFontSize)\n    }\n\n    @computed private get facetsContainerBounds(): Bounds {\n        const legendHeightWithPadding =\n            this.showLegend && this.legend.height > 0\n                ? this.legend.height + this.legendPadding\n                : 0\n        const labelSpace = this.facetFontSize + this.labelPadding\n        return this.bounds.padTop(legendHeightWithPadding + labelSpace)\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get facetFontSize(): number {\n        return getFontSize(this.bounds.width, this.series.length, this.fontSize)\n    }\n\n    @computed private get yAxisConfig(): AxisConfig {\n        return new AxisConfig(this.manager.yAxisConfig, {\n            fontSize: this.facetFontSize,\n        })\n    }\n\n    @computed private get uniformYAxis(): boolean {\n        // default to shared\n        const facetDomain =\n            this.yAxisConfig.facetDomain || FacetAxisDomain.shared\n        return facetDomain === FacetAxisDomain.shared\n    }\n\n    @computed private get uniformXAxis(): boolean {\n        // TODO: maybe should not be the default for ScatterPlot?\n        return true\n    }\n\n    @computed private get facetCount(): number {\n        return this.series.length\n    }\n\n    @computed private get gridParams(): GridParameters {\n        const count = this.facetCount\n        const { width, height } = this.bounds\n\n        const containerAspectRatio = calculateAspectRatio(width, height)\n\n        return getIdealGridParams({\n            count,\n            containerAspectRatio,\n            idealAspectRatio: IDEAL_PLOT_ASPECT_RATIO,\n        })\n    }\n\n    @computed private get facetGridPadding(): SplitBoundsPadding {\n        const { isSharedXAxis, facetFontSize } = this\n        return getFacetGridPadding({\n            baseFontSize: facetFontSize,\n            shouldAddRowPadding: !isSharedXAxis,\n        })\n    }\n\n    @computed private get hideFacetLegends(): boolean {\n        return true\n    }\n\n    // Passing this color map is important to ensure that all facets use the same entity colors\n    seriesColorMap: SeriesColorMap = this.manager?.seriesColorMap ?? new Map()\n\n    /**\n     * Holds the intermediate render properties for chart views, before axes are synchronized,\n     * collapsed, aligned, etc.\n     *\n     * An example: a StackedArea has a Y axis domain that is the largest sum of all columns.\n     * In order to avoid replicating that logic here (stacking values), we initialize StackedArea\n     * instances, without rendering them. In a later method, we use those intermediate chart views to\n     * determine the final axes for facets, e.g. for a uniform axis, we would iterate through all\n     * instances to find the full extent of the domain.\n     *\n     * @danielgavrilov, 2021-07-13\n     */\n    @computed private get intermediatePlacedSeries(): PlacedFacetSeries[] {\n        const { manager, series, facetCount, seriesColorMap, legendHoverBin } =\n            this\n\n        // Copy properties from manager to facets\n        const fontSize = this.facetFontSize\n        // We are using `bounds` instead of `facetsContainerBounds` because the legend\n        // is not yet created, and it is derived from the intermediate chart series.\n        const gridBoundsArr = this.bounds.grid(\n            this.gridParams,\n            this.facetGridPadding\n        )\n\n        const {\n            yColumnSlug,\n            xColumnSlug,\n            yColumnSlugs,\n            sizeColumnSlug,\n            colorColumnSlug,\n            isRelativeMode,\n            colorScale,\n            sortConfig,\n            startHandleTimeBound,\n            startTime,\n            endTime,\n            missingDataStrategy,\n            backgroundColor,\n            focusArray,\n            isStatic,\n            base,\n            tooltip,\n            shouldPinTooltipToBottom,\n        } = manager\n\n        // Use compact labels, e.g. 50k instead of 50,000.\n        const numberAbbreviation = facetCount > 2 ? \"short\" : \"long\"\n        const globalXAxisConfig: AxisConfigInterface = {\n            tickFormattingOptions: { numberAbbreviation },\n        }\n        const globalYAxisConfig: AxisConfigInterface = {\n            tickFormattingOptions: { numberAbbreviation },\n        }\n\n        // We infer that the user cares about the trend if the axis is not uniform\n        // and the metrics on all facets are the same\n        const careAboutTrend = !this.uniformYAxis\n        if (careAboutTrend) {\n            // Force disable nice axes if we care about the trend,\n            // because nice axes misrepresent trends.\n            globalYAxisConfig.nice = false\n        }\n\n        const table = this.transformedTable\n\n        // In order to produce consistent color scales across facets, we need to pass\n        // all possible color values from `inputTable`.\n        const colorScaleColumnOverride = this.inputTable.get(colorColumnSlug)\n\n        return series.map((series, index) => {\n            const { bounds } = gridBoundsArr[index]\n\n            const showLegend = !this.hideFacetLegends\n            const showSeriesLabels = !this.hideFacetLegends\n\n            const hidePoints = true\n            const hideNoDataSection = true\n\n            // NOTE: The order of overrides is important!\n            // We need to preserve most config coming in.\n            const manager: ChartManager = {\n                table,\n                fontSize,\n                showLegend,\n                showSeriesLabels,\n                hidePoints,\n                yColumnSlug,\n                xColumnSlug,\n                yColumnSlugs,\n                sizeColumnSlug,\n                colorColumnSlug,\n                isRelativeMode,\n                seriesColorMap,\n                colorScale,\n                colorScaleColumnOverride,\n                sortConfig,\n                startHandleTimeBound,\n                startTime,\n                endTime,\n                missingDataStrategy,\n                backgroundColor,\n                hideNoDataSection,\n                focusArray,\n                isStatic,\n                base,\n                tooltip,\n                shouldPinTooltipToBottom,\n                externalLegendHoverBin: legendHoverBin,\n                ...series.manager,\n                xAxisConfig: {\n                    ...globalXAxisConfig,\n                    ...this.manager.xAxisConfig,\n                    ...series.manager.xAxisConfig,\n                },\n                yAxisConfig: {\n                    ...globalYAxisConfig,\n                    ...this.manager.yAxisConfig,\n                    ...series.manager.yAxisConfig,\n                },\n            }\n            return {\n                bounds,\n                contentBounds: bounds,\n                manager,\n                seriesName: series.seriesName,\n                color: series.color,\n            }\n        })\n    }\n\n    @computed get intermediateChartInstances(): ChartInterface[] {\n        return this.intermediatePlacedSeries.map(({ bounds, manager }) => {\n            return makeChartInstance({\n                manager,\n                bounds,\n                chartType: this.chartTypeName,\n                variant: this.manager.variant,\n            })\n        })\n    }\n\n    @computed private get isSharedYAxis(): boolean {\n        // When the Y axis is uniform for all facets:\n        // - for most charts, we want to only show the axis on the left-most facet charts, and omit\n        //   it on the others\n        // - for bar charts the Y axis is plotted horizontally, so we don't want to omit it\n        return (\n            this.uniformYAxis &&\n            ![\n                GRAPHER_CHART_TYPES.StackedDiscreteBar,\n                GRAPHER_CHART_TYPES.DiscreteBar,\n            ].includes(this.chartTypeName as any)\n        )\n    }\n\n    @computed private get isSharedXAxis(): boolean {\n        return (\n            this.uniformXAxis &&\n            // TODO: do this for stacked area charts and line charts as well?\n            this.chartTypeName === GRAPHER_CHART_TYPES.StackedBar &&\n            this.facetCount >= SHARED_X_AXIS_MIN_FACET_COUNT\n        )\n    }\n\n    // Only made public for testing\n    @computed get placedSeries(): PlacedFacetSeries[] {\n        const { intermediateChartInstances } = this\n\n        // If one of the charts should use a value-based color scheme,\n        // switch them all over for consistency\n        const useValueBasedColorScheme = intermediateChartInstances.some(\n            (instance) => instance.shouldUseValueBasedColorScheme\n        )\n\n        // Define the global axis config, shared between all facets\n        const sharedAxesSizes: PositionMap<number> = {}\n\n        const axes: AxesInfo = {\n            x: {\n                config: {},\n                axisAccessor: (instance) => instance.xAxis,\n                uniform: this.uniformXAxis,\n                shared: this.isSharedXAxis,\n            },\n            y: {\n                config: {},\n                axisAccessor: (instance) => instance.yAxis,\n                uniform: this.uniformYAxis,\n                shared: this.isSharedYAxis,\n            },\n        }\n        R.values(axes).forEach(({ config, axisAccessor, uniform, shared }) => {\n            // max size is the width (if vertical axis) or height (if horizontal axis)\n            const axisWithMaxSize = _.maxBy(\n                intermediateChartInstances.map(axisAccessor),\n                (axis) => axis?.size\n            )\n            if (uniform) {\n                const axes = excludeUndefined(\n                    intermediateChartInstances.map(axisAccessor)\n                )\n\n                // If the axes are uniform, we want to find the full domain extent across all facets\n                const domains = axes.map((axis) => axis.domain)\n                config.min = _.min(domains.map((d) => d[0]))\n                config.max = _.max(domains.map((d) => d[1]))\n\n                // Find domain values across all facets\n                const domainValues = _.uniq(\n                    axes.flatMap((axis) => axis.config.domainValues ?? [])\n                )\n                if (domainValues.length > 0) config.domainValues = domainValues\n\n                // Find ticks across all facets\n                const ticks = _.uniq(\n                    axes.flatMap((axis) => axis.config.ticks ?? [])\n                )\n                if (ticks.length > 0) config.ticks = ticks\n\n                // If there was at least one chart with a non-undefined axis,\n                // this variable will be populated\n                if (axisWithMaxSize) {\n                    // Create a new axis object with the full domain extent\n                    const axis = axisWithMaxSize.clone()\n                    const { size } = axis.updateDomainPreservingUserSettings([\n                        config.min,\n                        config.max,\n                    ])\n                    config.minSize = size\n                    if (shared) {\n                        const sharedAxisSize =\n                            axis.orient === Position.bottom ? 0 : size\n                        sharedAxesSizes[axis.orient] = sharedAxisSize\n                    }\n                }\n            } else if (axisWithMaxSize) {\n                config.minSize = axisWithMaxSize.size\n            }\n        })\n\n        // Allocate space for shared axes, so that the content areas of charts are all equal.\n        // If the axes are \"shared\", then an axis will only plotted on the facets that are on the\n        // same side as the axis.\n        // For example, a vertical Y axis would be plotted on the left-most charts only.\n        // An exception is the bottom axis, which gets plotted on the top row of charts, instead of\n        // the bottom row of charts.\n        const fullBounds = this.facetsContainerBounds.pad(sharedAxesSizes)\n        const gridBoundsArr = fullBounds.grid(\n            this.gridParams,\n            this.facetGridPadding\n        )\n        return this.intermediatePlacedSeries.map((series, i) => {\n            const chartInstance = intermediateChartInstances[i]\n            const { xAxis, yAxis } = chartInstance\n            const { bounds: initialGridBounds, cellEdges } = gridBoundsArr[i]\n            let bounds = initialGridBounds\n            // Only expand bounds if the facet is on the same edge as the shared axes\n            for (const edge of cellEdges) {\n                bounds = bounds.expand({\n                    [edge]: sharedAxesSizes[edge],\n                })\n            }\n            // NOTE: The order of overrides is important!\n            // We need to preserve most config coming in.\n            const manager = {\n                ...series.manager,\n                useValueBasedColorScheme,\n                xAxisConfig: {\n                    // For now, sharing an x axis means hiding the tick labels of inner facets.\n                    // This means that none of the x axes are actually hidden (we just don't plot their tick labels).\n                    // If we ever allow shared x axes to be actually hidden, we need to be careful with how we determine\n                    // the `minSize` – in the intermediate series (at this time) all axes are shown in\n                    // order to find the one with maximum size, but in the placed series, some axes are\n                    // hidden. This expands the available area for the chart, which can in turn increase\n                    // the number of ticks shown, which can make the size of the axis in the placed\n                    // series greater than the one in the intermediate series.\n                    hideTickLabels: shouldHideFacetAxis(\n                        xAxis,\n                        cellEdges,\n                        sharedAxesSizes\n                    ),\n                    ...series.manager.xAxisConfig,\n                    ...axes.x.config,\n                },\n                yAxisConfig: {\n                    hideAxis: shouldHideFacetAxis(\n                        yAxis,\n                        cellEdges,\n                        sharedAxesSizes\n                    ),\n                    ...series.manager.yAxisConfig,\n                    ...axes.y.config,\n                },\n            }\n            const contentBounds = getContentBounds(\n                bounds,\n                manager,\n                chartInstance\n            )\n            return {\n                ...series,\n                bounds,\n                contentBounds,\n                manager,\n            }\n        })\n    }\n\n    @computed get selectionArray(): SelectionArray {\n        return makeSelectionArray(this.manager.selection)\n    }\n\n    @computed get focusArray(): FocusArray {\n        return this.manager.focusArray ?? new FocusArray()\n    }\n\n    @computed private get entityFacets(): FacetSeries[] {\n        const table = this.transformedTable.filterByEntityNames(\n            this.selectionArray.selectedEntityNames\n        )\n        return this.selectionArray.selectedEntityNames.map((seriesName) => {\n            const seriesTable = table.filterByEntityNames([seriesName])\n            // Only set overrides for this facet strategy.\n            // Default properties are set elsewhere.\n            const manager: ChartManager = {\n                table: seriesTable,\n                selection: [seriesName],\n                seriesStrategy: SeriesStrategy.column,\n            }\n            return {\n                seriesName,\n                color: facetBackgroundColor,\n                manager,\n            }\n        })\n    }\n\n    @computed private get columnFacets(): FacetSeries[] {\n        return this.yColumns.map((col) => ({\n            seriesName: col.displayName,\n            color: facetBackgroundColor,\n            // Only set overrides for this facet strategy.\n            // Default properties are set elsewhere.\n            manager: {\n                selection: this.selectionArray,\n                yColumnSlug: col.slug,\n                yColumnSlugs: [col.slug],\n                seriesStrategy: SeriesStrategy.entity,\n            },\n        }))\n    }\n\n    @computed private get yColumns(): CoreColumn[] {\n        return this.yColumnSlugs.map((slug) => this.inputTable.get(slug))\n    }\n\n    @computed private get yColumnSlugs(): string[] {\n        return autoDetectYColumnSlugs(this.manager)\n    }\n\n    @computed private get facetStrategy(): FacetStrategy {\n        return this.manager.facetStrategy ?? FacetStrategy.none\n    }\n\n    @computed get series(): FacetSeries[] {\n        return this.facetStrategy === FacetStrategy.metric\n            ? this.columnFacets\n            : this.entityFacets\n    }\n\n    // legend utils\n\n    @computed private get externalLegends(): HorizontalColorLegendManager[] {\n        return excludeUndefined(\n            this.intermediateChartInstances.map(\n                (instance) => instance.externalLegend\n            )\n        )\n    }\n\n    @computed private get isNumericLegend(): boolean {\n        return this.externalLegends.some((legend) =>\n            legend.numericLegendData?.some((bin) => bin instanceof NumericBin)\n        )\n    }\n\n    @computed private get LegendClass():\n        | typeof HorizontalNumericColorLegend\n        | typeof HorizontalCategoricalColorLegend {\n        return this.isNumericLegend\n            ? HorizontalNumericColorLegend\n            : HorizontalCategoricalColorLegend\n    }\n\n    @computed private get showLegend(): boolean {\n        const { isNumericLegend, categoricalLegendData, numericLegendData } =\n            this\n        if (this.manager.useMinimalLabeling) return false\n        const hasBins =\n            categoricalLegendData.length > 0 || numericLegendData.length > 0\n        if (!hasBins) return false\n        if (isNumericLegend) return true\n        if (\n            this.props.chartTypeName ===\n                GRAPHER_CHART_TYPES.StackedDiscreteBar &&\n            this.facetStrategy === FacetStrategy.metric\n        ) {\n            return false\n        }\n        if (\n            categoricalLegendData.length > 1 ||\n            // If the facetStrategy is metric, then the legend (probably?) shows entity items.\n            // If the user happens to select only a single entity, we don't want to collapse the\n            // legend, because it's (probably?) the only information about what is selected.\n            // This is fragile and ideally we shouldn't be making assumptions about what type of\n            // items are shown on the legend, but it works for now...\n            // -@danielgavrilov, 2021-09-28\n            (this.facetStrategy === FacetStrategy.metric &&\n                this.props.manager.canSelectMultipleEntities)\n        ) {\n            return true\n        }\n        return false\n    }\n\n    private getExternalLegendProp<\n        Prop extends keyof HorizontalColorLegendManager,\n    >(prop: Prop): HorizontalColorLegendManager[Prop] | undefined {\n        for (const externalLegend of this.externalLegends) {\n            if (externalLegend[prop] !== undefined) {\n                return externalLegend[prop]\n            }\n        }\n        return undefined\n    }\n\n    private getUniqBins<Bin extends ColorScaleBin>(bins: Bin[]): Bin[] {\n        return _.uniqWith(bins, (binA, binB): boolean => {\n            // For categorical bins, the `.equals()` method isn't good enough,\n            // because it only compares `.index`, which in this case can be\n            // identical even when the bins are not, because they are coming\n            // from different charts (facets).\n            if (binA instanceof CategoricalBin) {\n                return binA.text === binB.text\n            }\n            return binA.equals(binB)\n        })\n    }\n\n    // legend props\n\n    @computed get legendX(): number {\n        return this.bounds.x\n    }\n\n    @computed get numericLegendY(): number {\n        return this.bounds.top\n    }\n\n    @computed get categoryLegendY(): number {\n        return this.bounds.top\n    }\n\n    @computed get legendMaxWidth(): number {\n        return this.bounds.width\n    }\n\n    @computed get legendAlign(): HorizontalAlign {\n        return this.isNumericLegend\n            ? HorizontalAlign.center\n            : HorizontalAlign.left\n    }\n\n    @computed get legendTitle(): string | undefined {\n        return this.getExternalLegendProp(\"legendTitle\")\n    }\n\n    @computed get legendHeight(): number | undefined {\n        return this.getExternalLegendProp(\"legendHeight\")\n    }\n\n    @computed get legendTickSize(): number | undefined {\n        return this.getExternalLegendProp(\"legendTickSize\")\n    }\n\n    @computed get numericBinSize(): number | undefined {\n        return this.getExternalLegendProp(\"numericBinSize\")\n    }\n\n    @computed get hoverColors(): Color[] | undefined {\n        if (!this.legendHoverBin) return undefined\n        return [this.legendHoverBin.color]\n    }\n\n    @computed get activeColors(): Color[] | undefined {\n        if (!this.focusArray) return undefined\n\n        // find colours of all currently focused series\n        const activeColors = _.uniq(\n            this.intermediateChartInstances.flatMap((chartInstance) =>\n                chartInstance.chartState.series\n                    .filter((series) => this.focusArray.has(series.seriesName))\n                    .map((series) => series.color)\n            )\n        )\n\n        return activeColors.length > 0 ? activeColors : undefined\n    }\n\n    @computed get numericLegendData(): ColorScaleBin[] {\n        if (!this.isNumericLegend || !this.hideFacetLegends) return []\n        const allBins: ColorScaleBin[] = this.externalLegends.flatMap(\n            (legend) => [\n                ...(legend.numericLegendData ?? []),\n                ...(legend.categoricalLegendData ?? []),\n            ]\n        )\n        const uniqBins = this.getUniqBins(allBins)\n        const sortedBins = _.sortBy(\n            uniqBins,\n            (bin) => bin instanceof CategoricalBin\n        )\n        return sortedBins\n    }\n\n    @computed get categoricalLegendData(): CategoricalBin[] {\n        if (this.isNumericLegend || !this.hideFacetLegends) return []\n\n        const allBins: CategoricalBin[] = this.externalLegends\n            .flatMap((legend) => [\n                ...(legend.numericLegendData ?? []),\n                ...(legend.categoricalLegendData ?? []),\n            ])\n            .filter((bin) => bin instanceof CategoricalBin)\n\n        const uniqBins = this.getUniqBins(allBins).map(\n            // Remap index to ensure it's unique (the above procedure can lead to duplicates)\n            (bin, index) => new CategoricalBin({ ...bin.props, index })\n        )\n\n        // Hide single-item legends for metric facets\n        if (this.facetStrategy === FacetStrategy.metric && uniqBins.length <= 1)\n            return []\n\n        // Stacked area and bar charts reverse the stacking order\n        if (\n            this.chartTypeName === GRAPHER_CHART_TYPES.StackedArea ||\n            this.chartTypeName === GRAPHER_CHART_TYPES.StackedBar\n        )\n            return _.reverse(uniqBins)\n\n        return uniqBins\n    }\n\n    private legendHoverBin: ColorScaleBin | undefined = undefined\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        this.focusArray.clear()\n        this.legendHoverBin = bin\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.legendHoverBin = undefined\n    }\n\n    resolveLegendBinEmphasis(bin: ColorScaleBin): Emphasis {\n        if (!this.activeColors && !this.hoverColors) return Emphasis.Default\n\n        const isHovered = this.hoverColors?.includes(bin.color)\n        if (isHovered) return Emphasis.Highlighted\n\n        const isActive = this.activeColors?.includes(bin.color)\n        return isActive ? Emphasis.Highlighted : Emphasis.Muted\n    }\n\n    @computed get legendStyleConfig(): LegendStyleConfig | undefined {\n        return this.externalLegends[0]?.legendStyleConfig\n    }\n\n    @computed get numericLegendStyleConfig(): LegendStyleConfig | undefined {\n        return this.externalLegends[0]?.numericLegendStyleConfig\n    }\n\n    @computed get categoricalLegendStyleConfig():\n        | LegendStyleConfig\n        | undefined {\n        return this.externalLegends[0]?.categoricalLegendStyleConfig\n    }\n\n    // end of legend props\n\n    @computed private get legend(): HorizontalColorLegend {\n        return new this.LegendClass({ manager: this })\n    }\n\n    /**\n     * In order to display a potentially long facet label in the potentially tight space, we\n     * shrink and shorten the label as follows to prevent overlap between neighbouring labels:\n     * - If the label already fits, we're happy :)\n     * - Otherwise, we calculate the ideal font size where it would fit perfectly.\n     *   However, in order to not make the label tiny, we cap the font size at 0.7 * baseFontSize\n     * - If the label still doesn't fit, we shorten it to the number of characters that fit and append an ellispsis (…)\n     * -@MarcelGerber, 2021-10-28\n     */\n    private shrinkAndShortenFacetLabel(\n        label: string,\n        availableWidth: number\n    ): { fontSize: number; shortenedLabel: string } {\n        const { fontSize: baseFontSize, fontWeight } = this.facetLabelSettings\n\n        // How much width would we need if we were to render the text at font size 1?\n        // We calculate this to compute the ideal font size from the available width.\n        const textBounds = Bounds.forText(label, { fontSize: 1, fontWeight })\n        const idealFontSize = availableWidth / textBounds.width\n\n        // Clamp the ideal font size: 0.7 * baseFontSize <= fontSize <= baseFontSize\n        const fontSize = Math.min(\n            baseFontSize,\n            Math.max(0.7 * baseFontSize, idealFontSize)\n        )\n\n        if (fontSize > idealFontSize) {\n            label = shortenWithEllipsis(label, availableWidth, {\n                fontSize,\n                fontWeight,\n            })\n        }\n\n        return { fontSize, shortenedLabel: label }\n    }\n\n    @computed\n    private get facetLabelSettings(): Omit<SeriesLabelStateOptions, \"text\"> {\n        return {\n            maxWidth: Infinity, // Facet labels never wrap\n            fontWeight: 700,\n            fontSize: this.facetFontSize,\n            showRegionTooltip: !this.manager.isStatic,\n        }\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this, \"facetChart\")\n    }\n\n    override render(): React.ReactElement {\n        const { labelPadding, facetLabelSettings, LegendClass, showLegend } =\n            this\n        return (\n            <React.Fragment>\n                {showLegend && <LegendClass manager={this} />}\n                {this.placedSeries.map((facetChart, index: number) => {\n                    const { bounds, contentBounds, seriesName } = facetChart\n\n                    let { fontSize: shrunkFontSize, shortenedLabel } =\n                        this.shrinkAndShortenFacetLabel(\n                            seriesName,\n                            contentBounds.width\n                        )\n\n                    let seriesLabelState = new SeriesLabelState({\n                        text: shortenedLabel,\n                        ...facetLabelSettings,\n                        fontSize: shrunkFontSize,\n                    })\n\n                    // If the info icon causes overflow, shorten the label\n                    // (which also removes the icon because the suffix gets truncated)\n                    if (seriesLabelState.width > contentBounds.width) {\n                        shortenedLabel = shortenWithEllipsis(\n                            seriesName,\n                            contentBounds.width,\n                            {\n                                fontSize: shrunkFontSize,\n                                fontWeight: facetLabelSettings.fontWeight,\n                            }\n                        )\n                        seriesLabelState = new SeriesLabelState({\n                            text: shortenedLabel,\n                            ...facetLabelSettings,\n                            fontSize: shrunkFontSize,\n                        })\n                    }\n\n                    return (\n                        <React.Fragment key={index}>\n                            <SeriesLabel\n                                state={seriesLabelState}\n                                x={contentBounds.x}\n                                y={\n                                    contentBounds.top -\n                                    seriesLabelState.height -\n                                    labelPadding\n                                }\n                            />\n                            <g id={makeFigmaId(seriesName)}>\n                                <ChartComponent\n                                    manager={facetChart.manager}\n                                    chartType={this.chartTypeName}\n                                    variant={this.manager.variant}\n                                    bounds={bounds}\n                                />\n                            </g>\n                        </React.Fragment>\n                    )\n                })}\n            </React.Fragment>\n        )\n    }\n}\n","import React from \"react\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    GridParameters,\n    HorizontalAlign,\n    Color,\n    makeFigmaId,\n    exposeInstanceOnWindow,\n    SplitBoundsPadding,\n} from \"@ourworldindata/utils\"\nimport { action, computed, makeObservable, observable } from \"mobx\"\nimport {\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_BOUNDS,\n    GRAPHER_FONT_SCALE_18,\n} from \"../core/GrapherConstants\"\nimport {\n    ChartErrorInfo,\n    GRAPHER_MAP_TYPE,\n    GrapherInteractionEvent,\n    MapRegionName,\n    Time,\n} from \"@ourworldindata/types\"\nimport {\n    calculateAspectRatio,\n    getFacetGridPadding,\n    getLabelPadding as getFacetLabelPadding,\n} from \"./FacetChartUtils\"\nimport {\n    FacetMapManager,\n    MapFacetSeries,\n    FacetMapProps,\n    PlacedMapFacetSeries,\n} from \"./FacetMapConstants\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    HorizontalCategoricalColorLegend,\n    HorizontalColorLegendManager,\n    HorizontalNumericColorLegend,\n} from \"../legend/HorizontalColorLegends\"\nimport { CategoricalBin, ColorScaleBin } from \"../color/ColorScaleBin\"\nimport { GRAPHER_DARK_TEXT, GRAY_30 } from \"../color/ColorConstants\"\nimport { LegendStyleConfig } from \"../legend/LegendStyleConfig\"\nimport { Emphasis } from \"../interaction/Emphasis\"\nimport {\n    MAP_LEGEND_MAX_WIDTH_RATIO,\n    MapChart,\n    PADDING_BELOW_MAP_LEGEND,\n    PADDING_BETWEEN_MAP_AND_LEGEND,\n    PADDING_BETWEEN_MAP_LEGENDS,\n} from \"../mapCharts/MapChart\"\nimport { ChartComponent, makeChartInstance } from \"../chart/ChartTypeMap\"\nimport {\n    MAP_VIEWPORT_FACETED_WORLD,\n    MAP_VIEWPORTS,\n    MapChartManager,\n    MapViewport,\n} from \"../mapCharts/MapChartConstants\"\nimport { ChartState } from \"../chart/ChartInterface.js\"\nimport { MapConfig } from \"../mapCharts/MapConfig\"\n\n@observer\nexport class FacetMap\n    extends React.Component<FacetMapProps>\n    implements ChartState, HorizontalColorLegendManager\n{\n    private legendHoverBin: ColorScaleBin | undefined = undefined\n\n    constructor(props: FacetMapProps) {\n        super(props)\n        makeObservable<FacetMap, \"legendHoverBin\">(this, {\n            legendHoverBin: observable.ref,\n        })\n    }\n\n    transformTable(table: OwidTable): OwidTable {\n        return table\n    }\n\n    @computed get inputTable(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed get transformedTable(): OwidTable {\n        return (\n            this.manager.transformedTable ??\n            this.transformTable(this.inputTable)\n        )\n    }\n\n    @computed private get manager(): FacetMapManager {\n        return this.props.manager\n    }\n\n    @computed private get table(): OwidTable {\n        return this.manager.table\n    }\n\n    @computed private get transformedTableFromGrapher(): OwidTable | undefined {\n        return this.manager.transformedTable\n    }\n\n    @computed get isStatic(): boolean {\n        return !!this.manager.isStatic\n    }\n\n    @computed get errorInfo(): ChartErrorInfo {\n        if (this.manager.startTime === undefined)\n            return { reason: \"No start time selected\" }\n\n        if (this.manager.endTime === undefined)\n            return { reason: \"No end time selected\" }\n\n        return { reason: \"\" }\n    }\n\n    @computed private get startTime(): Time {\n        return this.manager.startTime!\n    }\n\n    @computed private get endTime(): Time {\n        return this.manager.endTime!\n    }\n\n    @computed private get bounds(): Bounds {\n        const bounds = this.props.bounds ?? DEFAULT_GRAPHER_BOUNDS\n        return bounds.padTop(6)\n    }\n\n    @computed private get facetsContainerBounds(): Bounds {\n        return (\n            this.bounds\n                // Make space for facet labels\n                .padTop(this.labelHeight + this.labelPadding)\n                // Make space for the legend\n                .padBottom(\n                    this.legendHeight +\n                        PADDING_BETWEEN_MAP_AND_LEGEND +\n                        PADDING_BELOW_MAP_LEGEND\n                )\n        )\n    }\n\n    @computed private get targetTimes(): [Time, Time] {\n        return [this.startTime, this.endTime]\n    }\n\n    @computed get fontSize(): number {\n        return this.manager.fontSize ?? BASE_FONT_SIZE\n    }\n\n    @computed private get facetFontSize(): number {\n        return Math.floor(this.fontSize * GRAPHER_FONT_SCALE_18)\n    }\n\n    @computed private get mapConfig(): MapConfig {\n        return this.manager.mapConfig ?? new MapConfig()\n    }\n\n    @computed private get mapViewport(): MapViewport {\n        const { region } = this.mapConfig\n\n        // Use a custom viewport for the World map that zooms in a little bit to make best use of the space\n        if (region === MapRegionName.World) return MAP_VIEWPORT_FACETED_WORLD\n\n        return MAP_VIEWPORTS[region]\n    }\n\n    private getGridParams(bounds: Bounds): GridParameters {\n        // We determine the preferred layout (horizontal vs vertical)\n        // by comparing which orientation produces an aspect ratio closest to\n        // the map's natural aspect ratio. The globe uses the horizontal layout.\n\n        const horizontalLayout = { rows: 1, columns: 2, count: 2 }\n        const verticalLayout = { rows: 2, columns: 1, count: 2 }\n\n        if (this.mapConfig.globe.isActive)\n            return bounds.width > bounds.height\n                ? horizontalLayout\n                : verticalLayout\n\n        const mapAspectRatio = this.mapViewport.ratio\n\n        // If the faceted maps are side-by-side\n        const horizontalLayoutAspectRatio = calculateAspectRatio(\n            bounds.width / 2,\n            bounds.height\n        )\n\n        // If the faceted maps are stacked vertically\n        const verticalLayoutAspectRatio = calculateAspectRatio(\n            bounds.width,\n            bounds.height / 2\n        )\n\n        const horizontalDiff = Math.abs(\n            Math.log2(mapAspectRatio / horizontalLayoutAspectRatio)\n        )\n        const verticalDiff = Math.abs(\n            Math.log2(mapAspectRatio / verticalLayoutAspectRatio)\n        )\n\n        // World maps tend to look better side-by-side, so we give the\n        // horizontal layout an advantage when the region is World\n        const bias = this.mapConfig.region === MapRegionName.World ? 0.5 : 0\n\n        return horizontalDiff - bias <= verticalDiff\n            ? horizontalLayout\n            : verticalLayout\n    }\n\n    @computed private get facetGridPadding(): SplitBoundsPadding {\n        return getFacetGridPadding({\n            baseFontSize: this.facetFontSize,\n            shouldAddRowPadding: false,\n        })\n    }\n\n    @computed private get labelHeight(): number {\n        return this.facetFontSize\n    }\n\n    @computed private get labelPadding(): number {\n        return getFacetLabelPadding(this.facetFontSize)\n    }\n\n    @computed get series(): MapFacetSeries[] {\n        return this.targetTimes.map((time) => ({\n            seriesName: this.table.timeColumn.formatTime(time),\n            // Required for a ChartSeries, but isn't meaningful for facets\n            color: \"none\",\n            // Only set overrides for this facet. Default properties are set elsewhere.\n            manager: { targetTime: time },\n        }))\n    }\n\n    @action.bound logGrapherInteractionEvent(\n        action: GrapherInteractionEvent,\n        target?: string\n    ): void {\n        this.manager.analytics?.logGrapherInteractionEvent(action, {\n            ...this.manager.analyticsContext,\n            target,\n        })\n    }\n\n    @computed private get intermediatePlacedSeries(): PlacedMapFacetSeries[] {\n        const {\n            manager,\n            series,\n            table,\n            transformedTableFromGrapher,\n            targetTimes,\n            mapViewport,\n            facetFontSize,\n            legendHoverBin,\n            logGrapherInteractionEvent,\n        } = this\n\n        // We are using `bounds` instead of `facetsContainerBounds` because the legend\n        // is not yet created, and it is derived from the intermediate chart series.\n        const bounds = this.bounds\n        const gridBoundsArr = bounds.grid(\n            this.getGridParams(bounds),\n            this.facetGridPadding\n        )\n\n        const {\n            backgroundColor,\n            isStatic,\n            mapColumnSlug = \"\",\n            mapConfig,\n            isMapSelectionEnabled,\n            colorScale,\n            globeController,\n            base,\n            tooltip,\n            shouldPinTooltipToBottom,\n            projectionColumnInfoBySlug,\n            isFaceted,\n            yColumnSlug,\n        } = manager\n\n        return series.map((series, index) => {\n            const { bounds } = gridBoundsArr[index]\n\n            const manager: MapChartManager = {\n                table,\n                transformedTable: transformedTableFromGrapher,\n                fontSize: facetFontSize,\n                showLegend: false,\n                backgroundColor,\n                isStatic,\n                mapColumnSlug,\n                mapConfig,\n                isMapSelectionEnabled,\n                colorScale,\n                globeController,\n                base,\n                tooltip,\n                shouldPinTooltipToBottom,\n                externalLegendHoverBin: legendHoverBin,\n                logGrapherInteractionEvent,\n                disableIntroAnimation: true,\n                projectionColumnInfoBySlug,\n                highlightedTimesInTooltip: targetTimes,\n                mapViewport,\n                isFaceted,\n                yColumnSlug,\n                ...series.manager,\n            }\n\n            return {\n                bounds,\n                manager,\n                seriesName: series.seriesName,\n                color: series.color,\n            }\n        })\n    }\n\n    @computed private get intermediateMapInstances(): MapChart[] {\n        return this.intermediatePlacedSeries.map(\n            ({ bounds, manager }) =>\n                makeChartInstance({\n                    manager,\n                    bounds,\n                    chartType: GRAPHER_MAP_TYPE,\n                    variant: this.manager.variant,\n                }) as MapChart\n        )\n    }\n\n    /**\n     * Used to construct the shared legend for all map facets.\n     *\n     * Unlike in FacetChart, we only need a single MapChart instance to construct\n     * the legend since all facets share the same legend.\n     */\n    @computed get intermediateMapInstance(): MapChart {\n        return this.intermediateMapInstances[0]\n    }\n\n    @computed private get gridParams(): GridParameters {\n        return this.getGridParams(this.facetsContainerBounds)\n    }\n\n    @computed private get facetArrangement(): \"side-by-side\" | \"stacked\" {\n        return this.gridParams.rows > this.gridParams.columns\n            ? \"stacked\"\n            : \"side-by-side\"\n    }\n\n    @computed get placedSeries(): PlacedMapFacetSeries[] {\n        const bounds = this.facetsContainerBounds\n        const gridBoundsArr = bounds.grid(\n            this.gridParams,\n            this.facetGridPadding\n        )\n        return this.intermediatePlacedSeries.map((series, i) => {\n            const { bounds } = gridBoundsArr[i]\n            return { ...series, bounds }\n        })\n    }\n\n    @computed private get externalLegend():\n        | HorizontalColorLegendManager\n        | undefined {\n        return this.intermediateMapInstance.externalLegend\n    }\n\n    @computed get legendX(): number {\n        return this.bounds.x\n    }\n\n    @computed get numericLegendY(): number {\n        if (!this.numericLegend) return 0\n        return (\n            this.bounds.bottom -\n            this.numericLegendHeight -\n            PADDING_BELOW_MAP_LEGEND -\n            // If present, the category legend is placed below the numeric legend\n            (this.categoryLegend\n                ? this.categoryLegendHeight + PADDING_BETWEEN_MAP_LEGENDS\n                : 0)\n        )\n    }\n\n    @computed get categoryLegendY(): number {\n        if (!this.categoryLegend) return 0\n        return (\n            this.bounds.bottom -\n            this.categoryLegend.height -\n            PADDING_BELOW_MAP_LEGEND\n        )\n    }\n\n    @computed get legendMaxWidth(): number {\n        return this.bounds.width * MAP_LEGEND_MAX_WIDTH_RATIO\n    }\n\n    @computed get legendAlign(): HorizontalAlign {\n        return HorizontalAlign.center\n    }\n\n    @computed get hoverColors(): Color[] | undefined {\n        if (!this.legendHoverBin) return undefined\n        return [this.legendHoverBin.color]\n    }\n\n    @computed get numericLegendData(): ColorScaleBin[] {\n        return this.externalLegend?.numericLegendData ?? []\n    }\n\n    @computed get categoricalLegendData(): CategoricalBin[] {\n        return this.externalLegend?.categoricalLegendData ?? []\n    }\n\n    @computed private get numericLegendHeight(): number {\n        return this.numericLegend ? this.numericLegend.height : 0\n    }\n\n    @computed private get categoryLegendHeight(): number {\n        return this.categoryLegend ? this.categoryLegend.height : 0\n    }\n\n    @computed get legendHeight(): number {\n        return this.categoryLegendHeight + this.numericLegendHeight\n    }\n\n    @action.bound onLegendMouseOver(bin: ColorScaleBin): void {\n        this.legendHoverBin = bin\n    }\n\n    @action.bound onLegendMouseLeave(): void {\n        this.legendHoverBin = undefined\n    }\n\n    @computed private get categoryLegend():\n        | HorizontalCategoricalColorLegend\n        | undefined {\n        return this.categoricalLegendData.length > 1\n            ? new HorizontalCategoricalColorLegend({ manager: this })\n            : undefined\n    }\n\n    @computed private get numericLegend():\n        | HorizontalNumericColorLegend\n        | undefined {\n        return this.numericLegendData.length > 1\n            ? new HorizontalNumericColorLegend({ manager: this })\n            : undefined\n    }\n\n    resolveLegendBinEmphasis(bin: ColorScaleBin): Emphasis {\n        if (!this.legendHoverBin && !this.mapConfig.hoverCountry) {\n            return Emphasis.Default\n        }\n\n        // Check if this bin is being hovered\n        if (this.legendHoverBin && bin.equals(this.legendHoverBin)) {\n            return Emphasis.Highlighted\n        }\n\n        // Check if a country is being hovered and matches this bin\n        if (this.mapConfig.hoverCountry) {\n            const series = this.intermediateMapInstances.map((mapChart) =>\n                mapChart.chartState.series.find(\n                    (s) => s.seriesName === this.mapConfig.hoverCountry\n                )\n            )\n            if (series.some((s) => s?.color === bin.color))\n                return Emphasis.Highlighted\n        }\n\n        return Emphasis.Muted\n    }\n\n    @computed get legendStyleConfig(): LegendStyleConfig | undefined {\n        return this.externalLegend?.legendStyleConfig\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this, \"facetMap\")\n    }\n\n    private getLabelPosition(facet: PlacedMapFacetSeries): {\n        x: number\n        y: number\n    } {\n        const { mapConfig, labelPadding } = this\n        const { bounds } = facet\n\n        const labelX = bounds.centerX\n        let labelY = bounds.top - labelPadding\n\n        // For the globe and 2D continent views, simply render the label at the top\n        if (\n            mapConfig.globe.isActive ||\n            mapConfig.region !== MapRegionName.World\n        )\n            return { x: labelX, y: labelY }\n\n        // There is often quite a bit of vertical padding around the 2D World map.\n        // It looks nicer to position the facet label closer to the actual map content\n        // rather than at the very top\n\n        const mapAspectRatio = MAP_VIEWPORT_FACETED_WORLD.ratio\n\n        // Find the map's width and height\n        const mapWidth = bounds.width\n        let mapHeight = mapWidth / mapAspectRatio\n        if (mapHeight > bounds.height) {\n            mapHeight = bounds.height\n            // mapWidth = mapHeight * mapAspectRatio\n        }\n\n        // Move the label closer to the map if there is vertical padding\n        if (mapHeight < bounds.height) {\n            const shiftY = (bounds.height - mapHeight) / 2\n            labelY = Math.max(labelY, labelY + shiftY - 3 * labelPadding)\n        }\n\n        return { x: labelX, y: labelY }\n    }\n\n    private renderMapLegend(): React.ReactElement {\n        return (\n            <>\n                {this.numericLegend && (\n                    <HorizontalNumericColorLegend manager={this} />\n                )}\n                {this.categoryLegend && (\n                    <HorizontalCategoricalColorLegend manager={this} />\n                )}\n            </>\n        )\n    }\n\n    private renderSeparatorLine(): React.ReactElement | null {\n        const {\n            mapConfig,\n            facetArrangement,\n            facetsContainerBounds: bounds,\n        } = this\n\n        // It can be difficult to visually distinguish two continent maps\n        // when plotted side by side, so we draw a gray line between them\n        if (\n            mapConfig.region !== MapRegionName.World &&\n            facetArrangement === \"side-by-side\"\n        ) {\n            return (\n                <line\n                    x1={bounds.centerX}\n                    y1={bounds.top}\n                    x2={bounds.centerX}\n                    y2={bounds.bottom}\n                    stroke={GRAY_30}\n                />\n            )\n        }\n\n        return null\n    }\n\n    override render(): React.ReactElement {\n        const { facetFontSize } = this\n        return (\n            <>\n                {this.renderMapLegend()}\n                {this.renderSeparatorLine()}\n                {this.placedSeries.map((series) => {\n                    const { bounds, seriesName } = series\n\n                    return (\n                        <React.Fragment key={seriesName}>\n                            <text\n                                {...this.getLabelPosition(series)}\n                                fill={GRAPHER_DARK_TEXT}\n                                fontSize={facetFontSize}\n                                textAnchor=\"middle\"\n                                style={{ fontWeight: 700 }}\n                            >\n                                {seriesName}\n                            </text>\n                            <g id={makeFigmaId(seriesName)}>\n                                <ChartComponent\n                                    manager={series.manager}\n                                    chartType={GRAPHER_MAP_TYPE}\n                                    variant={this.manager.variant}\n                                    bounds={bounds}\n                                />\n                            </g>\n                        </React.Fragment>\n                    )\n                })}\n            </>\n        )\n    }\n}\n","import React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { computed, makeObservable } from \"mobx\"\nimport {\n    Bounds,\n    GRAPHER_MAP_TYPE,\n    GrapherChartOrMapType,\n    makeFigmaId,\n} from \"@ourworldindata/utils\"\nimport { DataTable } from \"../dataTable/DataTable\"\nimport { CaptionedChartManager } from \"../captionedChart/CaptionedChart\"\nimport { LoadingIndicator } from \"@ourworldindata/components\"\nimport { FacetChart } from \"../facet/FacetChart\"\nimport { getChartSvgProps, NoDataPattern } from \"./ChartUtils\"\nimport { ChartComponent, makeChartState } from \"./ChartTypeMap\"\nimport { GRAPHER_CHART_AREA_CLASS } from \"../core/GrapherConstants\"\nimport { ChartState } from \"./ChartInterface\"\nimport { FacetMap } from \"../facet/FacetMap.js\"\n\ninterface ChartAreaContentProps {\n    manager: CaptionedChartManager\n    bounds: Bounds\n    padWidth?: number\n}\n\n@observer\nexport class ChartAreaContent extends React.Component<ChartAreaContentProps> {\n    constructor(props: ChartAreaContentProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get manager(): CaptionedChartManager {\n        return this.props.manager\n    }\n\n    @computed private get bounds(): Bounds {\n        return this.props.bounds.padWidth(this.props.padWidth ?? 0)\n    }\n\n    @computed private get activeChartOrMapType():\n        | GrapherChartOrMapType\n        | undefined {\n        const { manager } = this\n        if (manager.isOnTableTab) return undefined\n        if (manager.isOnMapTab) return GRAPHER_MAP_TYPE\n        if (manager.isOnChartTab) return manager.activeChartType\n        return undefined\n    }\n\n    private renderNoDataPattern(): React.ReactElement {\n        return (\n            <defs>\n                <NoDataPattern />\n            </defs>\n        )\n    }\n\n    @computed private get chartState(): ChartState | undefined {\n        if (!this.activeChartOrMapType) return undefined\n        return makeChartState(this.activeChartOrMapType, this.manager)\n    }\n\n    private renderLoadingIndicatorIntoSvg(): React.ReactElement {\n        return (\n            <foreignObject {...this.bounds.toProps()}>\n                <LoadingIndicator title={this.manager.whatAreWeWaitingFor} />\n            </foreignObject>\n        )\n    }\n\n    private renderReadyChartOrMap(): React.ReactElement | null {\n        const { bounds, manager, activeChartOrMapType, chartState } = this\n\n        if (!activeChartOrMapType) return null\n\n        if (manager.isFaceted)\n            return activeChartOrMapType === GRAPHER_MAP_TYPE ? (\n                <FacetMap bounds={bounds} manager={manager} />\n            ) : (\n                <FacetChart\n                    bounds={bounds}\n                    manager={manager}\n                    chartTypeName={activeChartOrMapType}\n                />\n            )\n\n        if (!chartState) return null\n\n        return (\n            <ChartComponent\n                manager={manager}\n                chartType={activeChartOrMapType}\n                chartState={chartState}\n                variant={manager.variant}\n                bounds={bounds}\n            />\n        )\n    }\n\n    private renderChartOrMap(): React.ReactElement {\n        const { width, height } = this.props.bounds\n\n        const containerStyle: React.CSSProperties = {\n            position: \"relative\",\n            clear: \"both\",\n            height,\n        }\n\n        return (\n            <div style={containerStyle}>\n                <svg\n                    {...getChartSvgProps(this.manager)}\n                    width={width}\n                    height={height}\n                    viewBox={`0 0 ${width} ${height}`}\n                >\n                    {this.renderNoDataPattern()}\n                    {this.manager.isReady\n                        ? this.renderReadyChartOrMap()\n                        : this.renderLoadingIndicatorIntoSvg()}\n                </svg>\n            </div>\n        )\n    }\n\n    private renderDataTable(): React.ReactElement {\n        const { bounds } = this\n        const containerStyle: React.CSSProperties = {\n            position: \"relative\",\n            ...bounds.toCSS(),\n        }\n        return (\n            <div className=\"DataTableContainer\" style={containerStyle}>\n                {this.manager.isReady ? (\n                    <DataTable bounds={bounds} manager={this.manager} />\n                ) : (\n                    <LoadingIndicator\n                        title={this.manager.whatAreWeWaitingFor}\n                    />\n                )}\n            </div>\n        )\n    }\n\n    renderStatic(): React.ReactElement | null {\n        // We cannot render a table to svg, but would rather display nothing at all to avoid issues.\n        // See https://github.com/owid/owid-grapher/issues/3283\n        if (this.manager.isOnTableTab) return null\n\n        return (\n            <g\n                id={makeFigmaId(GRAPHER_CHART_AREA_CLASS)}\n                style={{ pointerEvents: \"none\" }}\n            >\n                {this.renderReadyChartOrMap()}\n            </g>\n        )\n    }\n\n    renderInteractive(): React.ReactElement | null {\n        return this.manager.isOnTableTab\n            ? this.renderDataTable()\n            : this.renderChartOrMap()\n    }\n\n    override render(): React.ReactElement | null {\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { DEFAULT_GRAPHER_BOUNDS } from \"../core/GrapherConstants.js\"\nimport { CaptionedChartManager } from \"../captionedChart/CaptionedChart.js\"\nimport { GRAPHER_BACKGROUND_DEFAULT } from \"../color/ColorConstants.js\"\nimport { getChartSvgProps, NoDataPattern } from \"./ChartUtils.js\"\n\ninterface StaticChartWrapperProps {\n    manager: CaptionedChartManager\n    bounds?: Bounds\n    children: React.ReactNode\n}\n\n@observer\nexport class StaticChartWrapper extends React.Component<StaticChartWrapperProps> {\n    constructor(props: StaticChartWrapperProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get manager(): CaptionedChartManager {\n        return this.props.manager\n    }\n\n    @computed protected get bounds(): Bounds {\n        return (\n            this.props.bounds ??\n            this.manager.staticBounds ??\n            DEFAULT_GRAPHER_BOUNDS\n        )\n    }\n\n    @computed private get fonts(): React.ReactElement {\n        let origin = \"\"\n        try {\n            if (this.manager.bakedGrapherURL)\n                origin = new URL(this.manager.bakedGrapherURL).origin\n        } catch {\n            // ignore\n        }\n        const css = `@import url(${origin}/fonts.css)`\n        return (\n            <defs>\n                <style>{css}</style>\n            </defs>\n        )\n    }\n\n    @computed private get backgroundColor(): string {\n        return this.manager.backgroundColor ?? GRAPHER_BACKGROUND_DEFAULT\n    }\n\n    @computed private get noDataPattern(): React.ReactElement {\n        return (\n            <defs>\n                <NoDataPattern />\n            </defs>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { manager } = this\n\n        const bounds = this.manager.staticBoundsWithDetails ?? this.bounds\n        const width = bounds.width\n        const height = bounds.height\n\n        const includeFontsStyle = !manager.isExportingForWikimedia\n        const includeBackgroundRect = !!manager.isExportingForWikimedia\n\n        return (\n            <svg\n                {...getChartSvgProps(this.manager)}\n                width={width}\n                height={height}\n                viewBox={`0 0 ${width} ${height}`}\n            >\n                {includeFontsStyle && this.fonts}\n                {this.noDataPattern}\n                {includeBackgroundRect && (\n                    <rect\n                        className=\"background-fill\"\n                        fill={this.backgroundColor}\n                        width={width}\n                        height={height}\n                    />\n                )}\n                {this.props.children}\n            </svg>\n        )\n    }\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    Bounds,\n    exposeInstanceOnWindow,\n    makeFigmaId,\n} from \"@ourworldindata/utils\"\nimport { MarkdownTextWrap, LoadingIndicator } from \"@ourworldindata/components\"\nimport { Header, StaticHeader } from \"../header/Header\"\nimport { Footer, StaticFooter } from \"../footer/Footer\"\nimport {\n    STATIC_EXPORT_DETAIL_SPACING,\n    GRAPHER_FRAME_PADDING_VERTICAL,\n    GRAPHER_FRAME_PADDING_HORIZONTAL,\n    DEFAULT_GRAPHER_BOUNDS,\n} from \"../core/GrapherConstants\"\nimport { MapChartManager } from \"../mapCharts/MapChartConstants\"\nimport { ChartManager } from \"../chart/ChartManager\"\nimport { faExternalLinkAlt } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { FooterManager } from \"../footer/FooterManager\"\nimport { HeaderManager } from \"../header/HeaderManager\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport {\n    EntityName,\n    RelatedQuestionsConfig,\n    Color,\n    GrapherTabName,\n    GrapherChartType,\n} from \"@ourworldindata/types\"\nimport { DataTableManager } from \"../dataTable/DataTableConstants\"\nimport {\n    TimelineComponent,\n    TIMELINE_HEIGHT,\n} from \"../timeline/TimelineComponent\"\nimport { TimelineController } from \"../timeline/TimelineController\"\nimport {\n    ControlsRow,\n    ControlsRowManager,\n} from \"../controls/controlsRow/ControlsRow\"\nimport { GRAPHER_BACKGROUND_DEFAULT } from \"../color/ColorConstants.js\"\nimport { ChartAreaContent } from \"../chart/ChartAreaContent\"\nimport { getChartSvgProps } from \"../chart/ChartUtils\"\nimport { StaticChartWrapper } from \"../chart/StaticChartWrapper\"\n\nexport interface CaptionedChartManager\n    extends\n        ChartManager,\n        MapChartManager,\n        FooterManager,\n        HeaderManager,\n        DataTableManager,\n        ControlsRowManager {\n    bakedGrapherURL?: string\n    isReady?: boolean\n    whatAreWeWaitingFor?: string\n\n    // bounds\n    captionedChartBounds?: Bounds\n    sidePanelBounds?: Bounds\n    staticBounds?: Bounds\n    staticBoundsWithDetails?: Bounds\n\n    // layout & style\n    isSmall?: boolean\n    isMedium?: boolean\n    fontSize?: number\n    backgroundColor?: string\n\n    // state\n    activeTab?: GrapherTabName\n    isOnMapTab?: boolean\n    isOnTableTab?: boolean\n    activeChartType?: GrapherChartType\n    isFaceted?: boolean\n    isExportingForWikimedia?: boolean\n\n    // timeline\n    hasTimeline?: boolean\n    timelineController?: TimelineController\n\n    // details on demand\n    shouldIncludeDetailsInStaticExport?: boolean\n    detailRenderers: MarkdownTextWrap[]\n\n    // related question\n    relatedQuestions?: RelatedQuestionsConfig[]\n    showRelatedQuestion?: boolean\n}\n\ninterface CaptionedChartProps {\n    manager: CaptionedChartManager\n    bounds?: Bounds\n    maxWidth?: number\n}\n\n// keep in sync with sass variables in CaptionedChart.scss\nexport const CONTROLS_ROW_HEIGHT = 32\n\nabstract class AbstractCaptionedChart extends React.Component<CaptionedChartProps> {\n    protected framePaddingHorizontal = GRAPHER_FRAME_PADDING_HORIZONTAL\n    protected framePaddingVertical = GRAPHER_FRAME_PADDING_VERTICAL\n\n    constructor(props: CaptionedChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed protected get manager(): CaptionedChartManager {\n        return this.props.manager\n    }\n\n    @computed protected get maxWidth(): number {\n        return (\n            this.props.maxWidth ??\n            this.bounds.width - 2 * this.framePaddingHorizontal\n        )\n    }\n\n    @computed protected get verticalPadding(): number {\n        return this.manager.isSmall ? 8 : this.manager.isMedium ? 12 : 16\n    }\n\n    @computed protected get verticalPaddingSmall(): number {\n        if (this.manager.isOnMapTab) return 4\n        return this.manager.isMedium ? 8 : 16\n    }\n\n    @computed protected get header(): Header {\n        return new Header({\n            manager: this.manager,\n            maxWidth: this.maxWidth,\n        })\n    }\n\n    @computed protected get footer(): Footer {\n        return new Footer({\n            manager: this.manager,\n            maxWidth: this.maxWidth,\n        })\n    }\n\n    @computed protected get bounds(): Bounds {\n        const bounds =\n            this.props.bounds ??\n            this.manager.captionedChartBounds ??\n            DEFAULT_GRAPHER_BOUNDS\n        // the padding ensures grapher's frame is not cut off\n        return bounds.padRight(2).padBottom(2)\n    }\n\n    @computed protected get boundsForChartArea(): Bounds {\n        const { bounds, chartHeight } = this\n        return new Bounds(0, 0, bounds.width, chartHeight)\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this, \"captionedChart\")\n    }\n\n    @computed get selectionArray(): SelectionArray | EntityName[] | undefined {\n        return this.manager.selection\n    }\n\n    @computed private get showRelatedQuestion(): boolean {\n        return !!this.manager.showRelatedQuestion\n    }\n\n    @computed get relatedQuestionHeight(): number {\n        if (!this.showRelatedQuestion) return 0\n        return this.manager.isMedium ? 24 : 28\n    }\n\n    @computed private get showControlsRow(): boolean {\n        return ControlsRow.shouldShow(this.manager)\n    }\n\n    @computed private get settingsPopoverMaxWidth(): number {\n        const availableWidth =\n            this.bounds.width - 2 * this.framePaddingHorizontal\n\n        // Ensure the popover is at most 300px wide\n        return Math.min(300, Math.floor(availableWidth))\n    }\n\n    @computed private get settingsPopoverMaxHeight(): number {\n        const availableHeight =\n            this.bounds.height -\n            2 * this.framePaddingVertical -\n            this.headerHeightWithPadding -\n            this.controlsRowHeightWithPadding\n\n        return Math.floor(availableHeight)\n    }\n\n    private renderControlsRow(): React.ReactElement {\n        return (\n            <ControlsRow\n                manager={this.manager}\n                maxWidth={this.maxWidth}\n                popoverMaxWidth={this.settingsPopoverMaxWidth}\n                popoverMaxHeight={this.settingsPopoverMaxHeight}\n            />\n        )\n    }\n\n    private renderRelatedQuestion(): React.ReactElement {\n        const { relatedQuestions } = this.manager\n        return (\n            <div\n                className=\"relatedQuestion\"\n                style={{\n                    width: this.bounds.width,\n                    height: this.relatedQuestionHeight,\n                    padding: `0 ${this.framePaddingHorizontal}px`,\n                }}\n            >\n                Related:&nbsp;\n                <a\n                    href={relatedQuestions![0].url}\n                    target=\"_blank\"\n                    rel=\"noopener\"\n                    data-track-note=\"chart_click_related\"\n                >\n                    {relatedQuestions![0].text}\n                </a>\n                <FontAwesomeIcon icon={faExternalLinkAlt} />\n            </div>\n        )\n    }\n\n    private renderLoadingIndicator(): React.ReactElement {\n        return (\n            <LoadingIndicator\n                title={this.manager.whatAreWeWaitingFor}\n                bounds={this.bounds}\n            />\n        )\n    }\n\n    private renderTimeline(): React.ReactElement {\n        return (\n            <TimelineComponent\n                timelineController={this.manager.timelineController!}\n                maxWidth={this.maxWidth}\n            />\n        )\n    }\n\n    @computed private get headerHeightWithPadding(): number {\n        return this.header.height + this.verticalPadding\n    }\n\n    @computed private get footerHeightWithPadding(): number {\n        return this.footer.height + this.verticalPadding\n    }\n\n    @computed private get controlsRowHeightWithPadding(): number {\n        return this.showControlsRow\n            ? CONTROLS_ROW_HEIGHT + this.verticalPaddingSmall\n            : 0\n    }\n\n    @computed private get timelineHeightWithPadding(): number {\n        return this.manager.hasTimeline\n            ? TIMELINE_HEIGHT + this.verticalPaddingSmall\n            : 0\n    }\n\n    @computed private get relatedQuestionHeightWithPadding(): number {\n        return this.showRelatedQuestion\n            ? this.relatedQuestionHeight - this.framePaddingVertical * 0.25\n            : 0\n    }\n\n    /**\n     * The height of the chart area is the total height of the frame minus\n     * the height of the header, footer, controls, etc.\n     */\n    @computed protected get chartHeight(): number {\n        return Math.floor(\n            this.bounds.height -\n                2 * this.framePaddingVertical -\n                this.headerHeightWithPadding -\n                this.controlsRowHeightWithPadding -\n                this.timelineHeightWithPadding -\n                this.footerHeightWithPadding -\n                this.relatedQuestionHeightWithPadding\n        )\n    }\n\n    // make sure to keep this.chartHeight in sync if you edit the render function\n    override render(): React.ReactElement {\n        // CaptionedChart renders at the very least a header, a chart, and a footer.\n        // Interactive charts also have controls above the chart area and a timeline below it.\n        // Some charts have a related question below the footer.\n        // A CaptionedChart looks like this (components in [brackets] are optional):\n        //    #1 Header\n        //            ---- vertical space\n        //    #2 [Controls]\n        //            ---- vertical space (small)\n        //    #3 Chart/Map/Table\n        //            ---- vertical space (small)\n        //    #4 [Timeline]\n        //            ---- vertical space\n        //    #5 Footer\n        //    #6 [Related question]\n        return (\n            <div\n                className=\"CaptionedChart\"\n                style={{\n                    backgroundColor: this.backgroundColor,\n                }}\n            >\n                {/* #1 Header */}\n                <Header manager={this.manager} maxWidth={this.maxWidth} />\n                <VerticalSpace height={this.verticalPadding} />\n\n                {this.manager.isReady ? (\n                    <>\n                        {/* #2 [Controls] */}\n                        {this.showControlsRow && this.renderControlsRow()}\n                        {this.showControlsRow && (\n                            <VerticalSpace height={this.verticalPaddingSmall} />\n                        )}\n\n                        {/* #3 Chart/Map/Table */}\n                        <ChartAreaContent\n                            manager={this.manager}\n                            bounds={this.boundsForChartArea}\n                            padWidth={GRAPHER_FRAME_PADDING_HORIZONTAL}\n                        />\n\n                        {/* #4 [Timeline] */}\n                        {this.manager.hasTimeline && (\n                            <VerticalSpace height={this.verticalPaddingSmall} />\n                        )}\n                        {this.manager.hasTimeline && this.renderTimeline()}\n\n                        {/* #5 Footer */}\n                        <VerticalSpace height={this.verticalPadding} />\n                        <Footer\n                            manager={this.manager}\n                            maxWidth={this.maxWidth}\n                        />\n\n                        {/* #6 [Related question] */}\n                        {this.showRelatedQuestion &&\n                            this.renderRelatedQuestion()}\n                    </>\n                ) : (\n                    this.renderLoadingIndicator()\n                )}\n            </div>\n        )\n    }\n\n    @computed protected get backgroundColor(): Color {\n        return this.manager.backgroundColor ?? GRAPHER_BACKGROUND_DEFAULT\n    }\n\n    @computed protected get svgProps(): React.SVGProps<SVGSVGElement> {\n        return getChartSvgProps(this.manager)\n    }\n}\n\n@observer\nexport class CaptionedChart extends AbstractCaptionedChart {}\n\n@observer\nexport class StaticCaptionedChart extends AbstractCaptionedChart {\n    constructor(props: CaptionedChartProps) {\n        super(props)\n        makeObservable(this)\n    }\n\n    // Bounds diagram\n    //\n    // +---------------------------+   |  |\n    // |  Padding                  |   |  |\n    // |  +--------------------+   |   |  |  |\n    // |  | Header             |   |   |  |  |\n    // |  |                    |   |   |  |  |\n    // |  | Chart area         |   |   |  |  |\n    // |  |                    |   |   |  |  |\n    // |  | Footer             |   |   |  |  | innerBounds\n    // |  +--------------------+   |   |  |\n    // |  Padding                  |   |  |\n    // +---------------------------+   |  | bounds\n    // | Details                   |   |\n    // +---------------------------+   | svgBounds\n\n    /** Bounds of the SVG element including details */\n    @computed private get svgBounds(): Bounds {\n        return this.manager.staticBoundsWithDetails ?? this.bounds\n    }\n\n    /** Bounds without details */\n    protected override get bounds(): Bounds {\n        return (\n            this.props.bounds ??\n            this.manager.staticBounds ??\n            DEFAULT_GRAPHER_BOUNDS\n        )\n    }\n\n    /** Padded bounds of the actual chart area (without whitespace around it) */\n    @computed private get innerBounds(): Bounds {\n        return this.bounds\n            .padWidth(this.framePaddingHorizontal)\n            .padHeight(this.framePaddingVertical)\n    }\n\n    /** Bounds of the chart area (without header and footer) */\n    protected override get boundsForChartArea(): Bounds {\n        return this.innerBounds\n            .padTop(this.staticHeader.height)\n            .padBottom(this.staticFooter.height + this.verticalPadding)\n            .padTop(this.manager.isOnMapTab ? 0 : this.verticalPadding)\n    }\n\n    @computed protected get staticFooter(): Footer {\n        return new StaticFooter({\n            manager: this.manager,\n            maxWidth: this.maxWidth,\n            targetX: this.innerBounds.x,\n            targetY: this.innerBounds.bottom - this.footer.height,\n        })\n    }\n\n    @computed protected get staticHeader(): Header {\n        return new StaticHeader({\n            manager: this.manager,\n            maxWidth: this.maxWidth,\n            targetX: this.innerBounds.x,\n            targetY: this.innerBounds.y,\n        })\n    }\n\n    renderSVGDetails(): React.ReactElement {\n        let yOffset = 0\n        let previousOffset = 0\n        return (\n            <>\n                <line\n                    id={makeFigmaId(\"separator-line\")}\n                    x1={this.framePaddingHorizontal}\n                    y1={this.bounds.height}\n                    x2={\n                        this.boundsForChartArea.width +\n                        this.framePaddingHorizontal\n                    }\n                    y2={this.bounds.height}\n                    stroke=\"#e7e7e7\"\n                ></line>\n                <g\n                    id={makeFigmaId(\"details\")}\n                    transform={`translate(15, ${\n                        // + padding below the grey line\n                        this.bounds.height + this.framePaddingVertical\n                    })`}\n                >\n                    {this.manager.detailRenderers.map((detail, i) => {\n                        previousOffset = yOffset\n                        yOffset += detail.height + STATIC_EXPORT_DETAIL_SPACING\n                        return (\n                            <React.Fragment key={i}>\n                                {detail.renderSVG(0, previousOffset)}\n                            </React.Fragment>\n                        )\n                    })}\n                </g>\n            </>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { innerBounds, manager, maxWidth } = this\n\n        const includeDetailsInStaticExport =\n            manager.shouldIncludeDetailsInStaticExport &&\n            !_.isEmpty(this.manager.detailRenderers)\n\n        return (\n            <StaticChartWrapper manager={this.manager} bounds={this.svgBounds}>\n                <StaticHeader\n                    manager={manager}\n                    maxWidth={maxWidth}\n                    targetX={innerBounds.x}\n                    targetY={innerBounds.y}\n                />\n                <ChartAreaContent\n                    manager={this.manager}\n                    bounds={this.boundsForChartArea}\n                />\n                <StaticFooter\n                    manager={manager}\n                    maxWidth={maxWidth}\n                    targetX={innerBounds.x}\n                    targetY={innerBounds.bottom - this.staticFooter.height}\n                />\n                {includeDetailsInStaticExport && this.renderSVGDetails()}\n            </StaticChartWrapper>\n        )\n    }\n}\n\n// Although a bit unconventional, adding vertical space as a <div />\n// makes margin collapsing impossible and makes it easier to track the\n// space available for the chart area (see the CaptionedChart's `chartHeight` method)\nfunction VerticalSpace({ height }: { height: number }): React.ReactElement {\n    return (\n        <div\n            className=\"VerticalSpace\"\n            style={{\n                height,\n                width: \"100%\",\n            }}\n        />\n    )\n}\n","import React from \"react\"\nimport { computed, makeObservable } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport {\n    CaptionedChart,\n    StaticCaptionedChart,\n} from \"../captionedChart/CaptionedChart.js\"\nimport { GrapherState } from \"../core/GrapherState.js\"\nimport { ChartAreaContent } from \"./ChartAreaContent.js\"\nimport { StaticChartWrapper } from \"./StaticChartWrapper.js\"\nimport { GrapherVariant } from \"@ourworldindata/types\"\n\n@observer\nexport class Chart extends React.Component<{\n    manager: GrapherState\n}> {\n    constructor(props: { manager: GrapherState }) {\n        super(props)\n        makeObservable(this)\n    }\n\n    @computed private get manager(): GrapherState {\n        return this.props.manager\n    }\n\n    @computed private get isCaptioned(): boolean {\n        return this.manager.variant === GrapherVariant.Default\n    }\n\n    private renderInteractive(): React.ReactElement {\n        return this.isCaptioned ? (\n            <CaptionedChart manager={this.manager} />\n        ) : (\n            <ChartAreaContent\n                manager={this.manager}\n                bounds={this.manager.chartAreaBounds}\n            />\n        )\n    }\n\n    private renderStatic(): React.ReactElement {\n        return this.isCaptioned ? (\n            <StaticCaptionedChart manager={this.manager} />\n        ) : (\n            <StaticChartWrapper\n                manager={this.manager}\n                bounds={this.manager.chartAreaBounds}\n            >\n                <ChartAreaContent\n                    manager={this.manager}\n                    bounds={this.manager.chartAreaBounds}\n                />\n            </StaticChartWrapper>\n        )\n    }\n\n    override render(): React.ReactElement {\n        return this.manager.isStatic\n            ? this.renderStatic()\n            : this.renderInteractive()\n    }\n}\n","import * as _ from \"lodash-es\"\nimport React from \"react\"\n\nimport {\n    observable,\n    computed,\n    action,\n    autorun,\n    reaction,\n    makeObservable,\n    comparer,\n} from \"mobx\"\nimport {\n    bind,\n    next,\n    sampleFrom,\n    exposeInstanceOnWindow,\n    QueryParams,\n    MultipleOwidVariableDataDimensionsMap,\n    Bounds,\n    strToQueryParams,\n    queryParamsToStr,\n    setWindowQueryStr,\n} from \"@ourworldindata/utils\"\nimport { BodyPortal } from \"@ourworldindata/components\"\nimport {\n    ScaleType,\n    AnnotationFieldsInTitle,\n    GrapherInterface,\n    LegacyGrapherInterface,\n    DetailDictionary,\n    GrapherTooltipAnchor,\n    NarrativeChartInfo,\n    ArchiveContext,\n    AdditionalGrapherDataFetchFn,\n    GrapherVariant,\n    Time,\n} from \"@ourworldindata/types\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    GRAPHER_LOADED_EVENT_NAME,\n    GrapherModal,\n} from \"../core/GrapherConstants\"\n\nimport { FullScreen } from \"../fullScreen/FullScreen\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faExclamationTriangle } from \"@fortawesome/free-solid-svg-icons\"\nimport { TooltipContainer } from \"../tooltip/Tooltip\"\nimport { EntitySelectorModal } from \"../modal/EntitySelectorModal\"\nimport { DownloadModal } from \"../modal/DownloadModal\"\nimport { observer } from \"mobx-react\"\nimport \"d3-transition\"\nimport { SourcesModal } from \"../modal/SourcesModal\"\nimport { Command, CommandPalette } from \"../controls/CommandPalette\"\nimport { EmbedModal } from \"../modal/EmbedModal\"\nimport Mousetrap from \"mousetrap\"\nimport { SelectionArray } from \"../selection/SelectionArray\"\nimport { legacyToOwidTableAndDimensionsWithMandatorySlug } from \"./LegacyToOwidTable\"\nimport classnames from \"classnames\"\nimport { SidePanel } from \"../sidePanel/SidePanel\"\nimport { EntitySelector } from \"../entitySelector/EntitySelector\"\nimport { SlideInDrawer } from \"../slideInDrawer/SlideInDrawer\"\nimport { FocusArray } from \"../focus/FocusArray\"\nimport { Chart } from \"../chart/Chart.js\"\nimport { flushSync } from \"react-dom\"\nimport { GrapherState } from \"./GrapherState.js\"\n\ndeclare global {\n    interface Window {\n        details?: DetailDictionary\n        admin?: any // TODO: use stricter type\n    }\n}\n\n// Exactly the same as GrapherInterface, but contains options that developers want but authors won't be touching.\nexport interface GrapherProgrammaticInterface extends GrapherInterface {\n    queryStr?: string\n    bounds?: Bounds\n    table?: OwidTable\n    baseUrl?: string\n    bakedGrapherURL?: string\n    adminBaseUrl?: string\n    env?: string\n    highlightedTimesInLineChart?: Time[]\n    baseFontSize?: number\n    staticBounds?: Bounds\n    variant?: GrapherVariant\n    useMinimalLabeling?: boolean\n\n    hideTitle?: boolean\n    hideSubtitle?: boolean\n    hideNote?: boolean\n    hideOriginUrl?: boolean\n\n    hideEntityControls?: boolean\n    forceHideAnnotationFieldsInTitle?: AnnotationFieldsInTitle\n    hasTableTab?: boolean\n    hideShareButton?: boolean\n    hideExploreTheDataButton?: boolean\n    hideRelatedQuestion?: boolean\n    enableMapSelection?: boolean\n\n    enableKeyboardShortcuts?: boolean\n    bindUrlToWindow?: boolean\n    isEmbeddedInAnOwidPage?: boolean\n    isEmbeddedInADataPage?: boolean\n    isConfigReady?: boolean\n    isDataReady?: boolean\n    canHideExternalControlsInEmbed?: boolean\n\n    narrativeChartInfo?: MinimalNarrativeChartInfo\n    archiveContext?: ArchiveContext\n\n    manager?: GrapherManager\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n}\n\nexport type MinimalNarrativeChartInfo = Pick<\n    NarrativeChartInfo,\n    \"name\" | \"parentChartSlug\" | \"queryParamsForParentChart\"\n>\n\ninterface AnalyticsContext {\n    mdimSlug?: string\n    mdimViewConfigId?: string\n}\n\nexport interface GrapherManager {\n    baseUrl?: string\n    queryStr?: string\n    selection?: SelectionArray\n    focusArray?: FocusArray\n    adminEditPath?: string\n    adminCreateNarrativeChartPath?: string\n    analyticsContext?: AnalyticsContext\n}\n\nexport interface GrapherProps {\n    grapherState: GrapherState\n}\n\n@observer\nexport class Grapher extends React.Component<GrapherProps> {\n    @computed get grapherState(): GrapherState {\n        return this.props.grapherState\n    }\n\n    // #region Observable props not in any interface\n\n    // stored on Grapher so state is preserved when switching to full-screen mode\n\n    private legacyVariableDataJson:\n        | MultipleOwidVariableDataDimensionsMap\n        | undefined = undefined\n    private hasLoggedGAViewEvent = false\n    private hasBeenVisible = false\n    private uncaughtError: Error | undefined = undefined\n\n    constructor(props: { grapherState: GrapherState }) {\n        super(props)\n\n        makeObservable<\n            Grapher,\n            \"legacyVariableDataJson\" | \"hasBeenVisible\" | \"uncaughtError\"\n        >(this, {\n            legacyVariableDataJson: observable,\n            hasBeenVisible: observable,\n            uncaughtError: observable,\n        })\n    }\n\n    // Convenience method for debugging\n    windowQueryParams(str = location.search): QueryParams {\n        return strToQueryParams(str)\n    }\n\n    @action.bound private _setInputTable(\n        json: MultipleOwidVariableDataDimensionsMap,\n        legacyConfig: Partial<LegacyGrapherInterface>\n    ): void {\n        // TODO grapher model: switch this to downloading multiple data and metadata files\n\n        const startMark = performance.now()\n        const tableWithColors = legacyToOwidTableAndDimensionsWithMandatorySlug(\n            json,\n            legacyConfig.dimensions ?? [],\n            legacyConfig.selectedEntityColors\n        )\n        this.grapherState.createPerformanceMeasurement(\n            \"legacyToOwidTableAndDimensions\",\n            startMark\n        )\n\n        this.grapherState.inputTable = tableWithColors\n    }\n\n    @action rebuildInputOwidTable(): void {\n        // TODO grapher model: switch this to downloading multiple data and metadata files\n        if (!this.legacyVariableDataJson) return\n        this._setInputTable(\n            this.legacyVariableDataJson,\n            this.grapherState.legacyConfigAsAuthored\n        )\n    }\n\n    // Keeps a running cache of series colors at the Grapher level.\n\n    @bind dispose(): void {\n        this.grapherState.disposers.forEach((dispose) => dispose())\n    }\n\n    @action.bound setError(err: Error): void {\n        this.uncaughtError = err\n    }\n\n    @action.bound clearErrors(): void {\n        this.uncaughtError = undefined\n    }\n\n    private get commandPalette(): React.ReactElement | null {\n        return this.props.grapherState.enableKeyboardShortcuts ? (\n            <CommandPalette commands={this.keyboardShortcuts} display=\"none\" />\n        ) : null\n    }\n\n    @action.bound private toggleTabCommand(): void {\n        this.grapherState.setTab(\n            next(this.grapherState.availableTabs, this.grapherState.activeTab)\n        )\n    }\n\n    @action.bound private togglePlayingCommand(): void {\n        void this.grapherState.timelineController.togglePlay()\n    }\n\n    private get keyboardShortcuts(): Command[] {\n        const temporaryFacetTestCommands = _.range(0, 10).map((num) => {\n            return {\n                combo: `${num}`,\n                fn: (): void => this.randomSelection(num),\n            }\n        })\n        const shortcuts = [\n            ...temporaryFacetTestCommands,\n            {\n                combo: \"t\",\n                fn: (): void => this.toggleTabCommand(),\n                title: \"Toggle tab\",\n                category: \"Navigation\",\n            },\n            {\n                combo: \"?\",\n                fn: (): void => CommandPalette.togglePalette(),\n                title: `Toggle Help`,\n                category: \"Navigation\",\n            },\n            {\n                combo: \"a\",\n                fn: (): void => {\n                    if (this.grapherState.selection.hasSelection) {\n                        this.grapherState.selection.clearSelection()\n                        this.grapherState.focusArray.clear()\n                    } else {\n                        this.grapherState.selection.setSelectedEntities(\n                            this.grapherState.availableEntityNames\n                        )\n                    }\n                },\n                title: this.grapherState.selection.hasSelection\n                    ? `Select None`\n                    : `Select All`,\n                category: \"Selection\",\n            },\n            {\n                combo: \"f\",\n                fn: (): void => {\n                    this.grapherState.hideFacetControl =\n                        !this.grapherState.hideFacetControl\n                },\n                title: `Toggle Faceting`,\n                category: \"Chart\",\n            },\n            {\n                combo: \"p\",\n                fn: (): void => this.togglePlayingCommand(),\n                title: this.grapherState.isTimelineAnimationPlaying\n                    ? `Pause`\n                    : `Play`,\n                category: \"Timeline\",\n            },\n            {\n                combo: \"l\",\n                fn: (): void => this.toggleYScaleTypeCommand(),\n                title: \"Toggle Y log/linear\",\n                category: \"Chart\",\n            },\n            {\n                combo: \"w\",\n                fn: (): void => this.toggleFullScreenMode(),\n                title: `Toggle full-screen mode`,\n                category: \"Chart\",\n            },\n            {\n                combo: \"s\",\n                fn: (): void => {\n                    const isSourcesModalOpen =\n                        this.grapherState.activeModal === GrapherModal.Sources\n                    this.grapherState.activeModal = isSourcesModalOpen\n                        ? undefined\n                        : GrapherModal.Sources\n                },\n                title: `Toggle sources modal`,\n                category: \"Chart\",\n            },\n            {\n                combo: \"d\",\n                fn: (): void => {\n                    const isDownloadModalOpen =\n                        this.grapherState.activeModal === GrapherModal.Download\n                    this.grapherState.activeModal = isDownloadModalOpen\n                        ? undefined\n                        : GrapherModal.Download\n                },\n                title: \"Toggle download modal\",\n                category: \"Chart\",\n            },\n            { combo: \"esc\", fn: (): void => this.clearErrors() },\n            {\n                combo: \"z\",\n                fn: (): void => this.toggleTimelineCommand(),\n                title: \"Latest/Earliest/All period\",\n                category: \"Timeline\",\n            },\n            {\n                combo: \"shift+o\",\n                fn: (): void => this.grapherState.clearQueryParams(),\n                title: \"Reset to original\",\n                category: \"Navigation\",\n            },\n            {\n                combo: \"g\",\n                fn: (): void => this.grapherState.globeController.toggleGlobe(),\n                title: \"Toggle globe view\",\n                category: \"Map\",\n            },\n        ]\n\n        if (this.grapherState.slideShow) {\n            const slideShow = this.grapherState.slideShow\n            shortcuts.push({\n                combo: \"right\",\n                fn: () => slideShow.playNext(),\n                title: \"Next chart\",\n                category: \"Browse\",\n            })\n            shortcuts.push({\n                combo: \"left\",\n                fn: () => slideShow.playPrevious(),\n                title: \"Previous chart\",\n                category: \"Browse\",\n            })\n        }\n\n        return shortcuts\n    }\n\n    @action.bound private toggleTimelineCommand(): void {\n        // Todo: add tests for this\n        this.grapherState.setTimeFromTimeQueryParam(\n            next([\"latest\", \"earliest\", \"..\"], this.grapherState.timeParam!)\n        )\n    }\n\n    @action.bound private toggleYScaleTypeCommand(): void {\n        this.grapherState.yAxis.scaleType = next(\n            [ScaleType.linear, ScaleType.log],\n            this.grapherState.yAxis.scaleType\n        )\n    }\n\n    @action.bound randomSelection(num: number): void {\n        // Continent, Population, GDP PC, GDP, PopDens, UN, Language, etc.\n        this.clearErrors()\n        const currentSelection =\n            this.grapherState.selection.selectedEntityNames.length\n        const newNum = num ? num : currentSelection ? currentSelection * 2 : 10\n        this.grapherState.selection.setSelectedEntities(\n            sampleFrom(\n                this.grapherState.availableEntityNames,\n                newNum,\n                Date.now()\n            )\n        )\n    }\n    @action.bound toggleFullScreenMode(): void {\n        this.grapherState.isInFullScreenMode =\n            !this.grapherState.isInFullScreenMode\n    }\n\n    @action.bound dismissFullScreen(): void {\n        // if a modal is open, dismiss it instead of exiting full-screen mode\n        if (\n            this.grapherState.isModalOpen ||\n            this.grapherState.isShareMenuActive\n        ) {\n            this.grapherState.isEntitySelectorModalOrDrawerOpen = false\n            this.grapherState.activeModal = undefined\n            this.grapherState.isShareMenuActive = false\n        } else {\n            this.grapherState.isInFullScreenMode = false\n        }\n    }\n\n    private renderError(): React.ReactElement {\n        return (\n            <div\n                title={this.uncaughtError?.message}\n                style={{\n                    width: \"100%\",\n                    height: \"100%\",\n                    position: \"relative\",\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    justifyContent: \"center\",\n                    textAlign: \"center\",\n                    lineHeight: 1.5,\n                    padding: \"48px\",\n                }}\n            >\n                <p style={{ color: \"#cc0000\", fontWeight: 700 }}>\n                    <FontAwesomeIcon icon={faExclamationTriangle} />\n                    There was a problem loading this chart\n                </p>\n                <p>\n                    We have been notified of this error, please check back later\n                    whether it's been fixed. If the error persists, get in touch\n                    with us at{\" \"}\n                    <a\n                        href={`mailto:info@ourworldindata.org?subject=Broken chart on page ${window.location.href}`}\n                    >\n                        info@ourworldindata.org\n                    </a>\n                    .\n                </p>\n                {this.uncaughtError && this.uncaughtError.message && (\n                    <pre style={{ fontSize: \"11px\" }}>\n                        Error: {this.uncaughtError.message}\n                    </pre>\n                )}\n            </div>\n        )\n    }\n\n    private renderGrapherComponent(): React.ReactElement {\n        const containerClasses = classnames({\n            GrapherComponent: true,\n            GrapherPortraitClass: this.grapherState.isPortrait,\n            isStatic: this.grapherState.isStatic,\n            isExportingToSvgOrPng: this.grapherState.isExportingToSvgOrPng,\n            GrapherComponentNarrow: this.grapherState.isNarrow,\n            GrapherComponentSemiNarrow: this.grapherState.isSemiNarrow,\n            GrapherComponentSmall: this.grapherState.isSmall,\n            GrapherComponentMedium: this.grapherState.isMedium,\n        })\n\n        const containerStyle = {\n            width: this.grapherState.activeBounds.width,\n            height: this.grapherState.activeBounds.height,\n            fontSize: this.grapherState.isExportingToSvgOrPng\n                ? 18\n                : Math.min(16, this.grapherState.fontSize), // cap font size at 16px\n        }\n\n        return (\n            <div\n                ref={this.grapherState.base}\n                className={containerClasses}\n                style={containerStyle}\n                data-grapher-url={JSON.stringify({\n                    grapherUrl: this.grapherState.canonicalUrl,\n                    narrativeChartName:\n                        this.grapherState.narrativeChartInfo?.name,\n                })}\n            >\n                {this.commandPalette}\n                {this.uncaughtError ? this.renderError() : this.renderReady()}\n            </div>\n        )\n    }\n\n    override render(): React.ReactElement | undefined {\n        // Used in the admin to render a static preview of the chart\n        if (this.grapherState.isExportingToSvgOrPng)\n            return <Chart manager={this.grapherState} />\n\n        if (this.grapherState.isInFullScreenMode) {\n            return (\n                <FullScreen\n                    onDismiss={this.dismissFullScreen}\n                    overlayColor={\n                        this.grapherState.isModalOpen ? \"#999999\" : \"#fff\"\n                    }\n                >\n                    {this.renderGrapherComponent()}\n                </FullScreen>\n            )\n        }\n\n        return this.renderGrapherComponent()\n    }\n\n    private renderReady(): React.ReactElement | null {\n        if (!this.hasBeenVisible) return null\n\n        const entitySelectorArray = this.grapherState.isOnMapTab\n            ? this.grapherState.mapConfig.selection\n            : this.grapherState.selection\n\n        return (\n            <>\n                {/* Chart and entity selector */}\n                <div className=\"CaptionedChartAndSidePanel\">\n                    <Chart manager={this.grapherState} />\n\n                    {this.grapherState.sidePanelBounds && (\n                        <SidePanel bounds={this.grapherState.sidePanelBounds}>\n                            <EntitySelector\n                                manager={this.grapherState}\n                                selection={entitySelectorArray}\n                            />\n                        </SidePanel>\n                    )}\n                </div>\n\n                {/* Modals */}\n                {this.grapherState.activeModal === GrapherModal.Sources &&\n                    this.grapherState.isReady && (\n                        <SourcesModal manager={this.grapherState} />\n                    )}\n                {this.grapherState.activeModal === GrapherModal.Download &&\n                    this.grapherState.isReady && (\n                        <DownloadModal manager={this.grapherState} />\n                    )}\n                {this.grapherState.activeModal === GrapherModal.Embed &&\n                    this.grapherState.isReady && (\n                        <EmbedModal manager={this.grapherState} />\n                    )}\n                {this.grapherState.isEntitySelectorModalOpen && (\n                    <EntitySelectorModal manager={this.grapherState} />\n                )}\n\n                {/* Entity selector in a slide-in drawer */}\n                <SlideInDrawer\n                    grapherRef={this.grapherState.base}\n                    active={this.grapherState.isEntitySelectorDrawerOpen}\n                    toggle={() => {\n                        this.grapherState.isEntitySelectorModalOrDrawerOpen =\n                            !this.grapherState.isEntitySelectorModalOrDrawerOpen\n                    }}\n                >\n                    <EntitySelector\n                        manager={this.grapherState}\n                        selection={entitySelectorArray}\n                        autoFocus={true}\n                    />\n                </SlideInDrawer>\n\n                {/* Tooltip: either pin to the bottom or render into the chart area */}\n                {this.grapherState.shouldPinTooltipToBottom ? (\n                    <BodyPortal>\n                        <TooltipContainer\n                            tooltipManager={this.grapherState}\n                            anchor={GrapherTooltipAnchor.bottom}\n                        />\n                    </BodyPortal>\n                ) : (\n                    <TooltipContainer\n                        tooltipManager={this.grapherState}\n                        containerBounds={this.grapherState.captionedChartBounds}\n                    />\n                )}\n            </>\n        )\n    }\n\n    // Chart should only render SVG when it's on the screen\n    @action.bound private setUpIntersectionObserver(): void {\n        if (typeof window !== \"undefined\" && \"IntersectionObserver\" in window) {\n            const observer = new IntersectionObserver(\n                (entries) => {\n                    entries.forEach((entry) => {\n                        if (entry.isIntersecting) {\n                            // We need to render this immediately to avoid a Safari bug, where Safari\n                            // is seemingly blocking rendering during the initial fetches, and will then\n                            // subsequently render using the wrong bounds.\n                            flushSync(\n                                action(() => {\n                                    this.hasBeenVisible = true\n                                })\n                            )\n\n                            if (!this.hasLoggedGAViewEvent) {\n                                this.hasLoggedGAViewEvent = true\n\n                                if (this.grapherState.narrativeChartInfo) {\n                                    this.grapherState.analytics.logGrapherView(\n                                        this.grapherState.narrativeChartInfo\n                                            .parentChartSlug,\n                                        {\n                                            narrativeChartName:\n                                                this.grapherState\n                                                    .narrativeChartInfo.name,\n                                        }\n                                    )\n                                    this.hasLoggedGAViewEvent = true\n                                } else if (this.grapherState.slug) {\n                                    this.grapherState.analytics.logGrapherView(\n                                        this.grapherState.slug\n                                    )\n                                    this.hasLoggedGAViewEvent = true\n                                }\n                            }\n\n                            // dismiss tooltip when less than 2/3 of the chart is visible\n                            const tooltip = this.grapherState.tooltip?.get()\n                            const isNotVisible = !entry.isIntersecting\n                            const isPartiallyVisible =\n                                entry.isIntersecting &&\n                                entry.intersectionRatio < 0.66\n                            if (\n                                tooltip &&\n                                (isNotVisible || isPartiallyVisible)\n                            ) {\n                                tooltip.dismiss?.()\n                            }\n                        }\n                    })\n                },\n                { threshold: [0, 0.66] }\n            )\n            observer.observe(this.grapherState.containerElement!)\n            this.grapherState.disposers.push(() => observer.disconnect())\n        } else {\n            // IntersectionObserver not available; we may be in a Node environment, just render\n            this.hasBeenVisible = true\n        }\n    }\n\n    @action.bound private setBaseFontSize(): void {\n        this.grapherState.baseFontSize =\n            this.grapherState.computeBaseFontSizeFromWidth(\n                this.grapherState.captionedChartBounds\n            )\n    }\n\n    // Binds chart properties to global window title and URL. This should only\n    // ever be invoked from top-level JavaScript.\n    private bindToWindow(): void {\n        if (!this.grapherState.bindUrlToWindow) return\n\n        // There is a surprisingly considerable performance overhead to updating the url\n        // while animating, so we debounce to allow e.g. smoother timelines\n        const pushParams = (): void =>\n            setWindowQueryStr(queryParamsToStr(this.grapherState.changedParams))\n        const debouncedPushParams = _.debounce(pushParams, 100)\n\n        reaction(\n            () => this.grapherState.changedParams,\n            () => (this.debounceMode ? debouncedPushParams() : pushParams())\n        )\n\n        autorun(() => (document.title = this.grapherState.currentTitle))\n    }\n\n    @action.bound private setUpWindowResizeEventHandler(): void {\n        const updateWindowDimensions = action((): void => {\n            this.grapherState.windowInnerWidth = window.innerWidth\n            this.grapherState.windowInnerHeight = window.innerHeight\n            this.grapherState.screenHeight = window.screen.height\n        })\n        const onResize = _.debounce(updateWindowDimensions, 400, {\n            leading: true,\n        })\n\n        if (typeof window !== \"undefined\") {\n            updateWindowDimensions()\n            window.addEventListener(\"resize\", onResize)\n            this.grapherState.disposers.push(() => {\n                window.removeEventListener(\"resize\", onResize)\n            })\n        }\n    }\n\n    private setUpGrapherLoadedEventDispatcher(): void {\n        // Emit a custom event when the grapher is ready\n        // We can use this in global scripts that depend on the grapher e.g. the site-screenshots tool\n        this.grapherState.disposers.push(\n            reaction(\n                () => this.grapherState.isReady,\n                () => {\n                    if (this.grapherState.isReady) {\n                        document.dispatchEvent(\n                            new CustomEvent(GRAPHER_LOADED_EVENT_NAME, {\n                                detail: { grapher: this },\n                            })\n                        )\n                    }\n                }\n            )\n        )\n    }\n\n    private clearFocusMode(): void {\n        // Make it easy to exit focus mode by clearing it when the selection\n        // or view changes. This is disabled in the admin to avoid clearing\n        // focus when authors are editing the chart\n        if (!this.grapherState.isAdmin) {\n            this.grapherState.disposers.push(\n                reaction(\n                    () => [\n                        this.grapherState.facetStrategy,\n                        this.grapherState.selection.selectedEntityNames,\n                        this.grapherState.activeTab,\n                    ],\n                    () => this.grapherState.focusArray.clear(),\n                    // Use structural comparison to detect changes in array\n                    // contents, not just reference\n                    { equals: comparer.structural }\n                )\n            )\n        }\n    }\n\n    override componentDidMount(): void {\n        exposeInstanceOnWindow(this, \"grapher\")\n\n        this.setBaseFontSize()\n        this.setUpIntersectionObserver()\n        this.setUpWindowResizeEventHandler()\n        this.setUpGrapherLoadedEventDispatcher()\n\n        this.bindToWindow()\n        this.bindKeyboardShortcuts()\n\n        this.clearFocusMode()\n    }\n\n    private _shortcutsBound = false\n    private bindKeyboardShortcuts(): void {\n        if (!this.grapherState.enableKeyboardShortcuts || this._shortcutsBound)\n            return\n        this.keyboardShortcuts.forEach((shortcut) => {\n            Mousetrap.bind(shortcut.combo, () => {\n                shortcut.fn()\n                this.grapherState.analytics.logKeyboardShortcut(\n                    shortcut.title || \"\",\n                    shortcut.combo\n                )\n                return false\n            })\n        })\n        this._shortcutsBound = true\n    }\n\n    private unbindKeyboardShortcuts(): void {\n        if (!this._shortcutsBound) return\n        this.keyboardShortcuts.forEach((shortcut) => {\n            Mousetrap.unbind(shortcut.combo)\n        })\n        this._shortcutsBound = false\n    }\n\n    override componentWillUnmount(): void {\n        this.unbindKeyboardShortcuts()\n        this.dispose()\n    }\n\n    override componentDidUpdate(): void {\n        this.setBaseFontSize()\n    }\n\n    override componentDidCatch(error: Error): void {\n        this.setError(error)\n        this.grapherState.analytics.logGrapherViewError(error)\n    }\n\n    debounceMode = false\n}\n","function normalize (strArray) {\n  var resultArray = [];\n  if (strArray.length === 0) { return ''; }\n\n  if (typeof strArray[0] !== 'string') {\n    throw new TypeError('Url must be a string. Received ' + strArray[0]);\n  }\n\n  // If the first part is a plain protocol, we combine it with the next part.\n  if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n    var first = strArray.shift();\n    strArray[0] = first + strArray[0];\n  }\n\n  // There must be two or three slashes in the file protocol, two slashes in anything else.\n  if (strArray[0].match(/^file:\\/\\/\\//)) {\n    strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n  } else {\n    strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n  }\n\n  for (var i = 0; i < strArray.length; i++) {\n    var component = strArray[i];\n\n    if (typeof component !== 'string') {\n      throw new TypeError('Url must be a string. Received ' + component);\n    }\n\n    if (component === '') { continue; }\n\n    if (i > 0) {\n      // Removing the starting slashes for each component but the first.\n      component = component.replace(/^[\\/]+/, '');\n    }\n    if (i < strArray.length - 1) {\n      // Removing the ending slashes for each component but the last.\n      component = component.replace(/[\\/]+$/, '');\n    } else {\n      // For the last component we will combine multiple slashes to a single one.\n      component = component.replace(/[\\/]+$/, '/');\n    }\n\n    resultArray.push(component);\n\n  }\n\n  var str = resultArray.join('/');\n  // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n  // remove trailing slash before parameters or hash\n  str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n  // replace ? in parameters with &\n  var parts = str.split('?');\n  str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n  return str;\n}\n\nexport default function urlJoin() {\n  var input;\n\n  if (typeof arguments[0] === 'object') {\n    input = arguments[0];\n  } else {\n    input = [].slice.call(arguments);\n  }\n\n  return normalize(input);\n}\n","import {\n    ArchiveContext,\n    AssetMap,\n    MultipleOwidVariableDataDimensionsMap,\n    OwidVariableDataMetadataDimensions,\n} from \"@ourworldindata/types\"\nimport { fetchWithRetry, readFromAssetMap } from \"@ourworldindata/utils\"\nimport urljoin from \"url-join\"\n\nexport const getVariableDataRoute = (\n    dataApiUrl: string,\n    variableId: number,\n    { assetMap, noCache }: { assetMap?: AssetMap; noCache?: boolean } = {}\n): string => {\n    if (dataApiUrl.includes(\"v1/indicators\")) {\n        const filename = `${variableId}.data.json`\n        const url = readFromAssetMap(assetMap, {\n            path: filename,\n            // fetching from Data API, e.g. https://api.ourworldindata.org/v1/indicators/123.data.json\n            fallback: urljoin(dataApiUrl, filename),\n        })\n        return noCache ? `${url}?nocache` : url\n    } else {\n        throw new Error(`dataApiUrl format not supported: ${dataApiUrl}`)\n    }\n}\n\nexport const getVariableMetadataRoute = (\n    dataApiUrl: string,\n    variableId: number,\n    { assetMap, noCache }: { assetMap?: AssetMap; noCache?: boolean } = {}\n): string => {\n    if (dataApiUrl.includes(\"v1/indicators\")) {\n        const filename = `${variableId}.metadata.json`\n        const url = readFromAssetMap(assetMap, {\n            path: filename,\n            // fetching from Data API, e.g. https://api.ourworldindata.org/v1/indicators/123.metadata.json\n            fallback: urljoin(dataApiUrl, filename),\n        })\n        return noCache ? `${url}?nocache` : url\n    } else {\n        throw new Error(`dataApiUrl format not supported: ${dataApiUrl}`)\n    }\n}\n\nexport async function loadVariableDataAndMetadata(\n    variableId: number,\n    dataApiUrl: string,\n    options?: {\n        assetMap?: AssetMap\n        noCache?: boolean\n        loadMetadataOnly?: boolean\n    }\n): Promise<OwidVariableDataMetadataDimensions> {\n    const metadataPromise = fetchWithRetry(\n        getVariableMetadataRoute(dataApiUrl, variableId, options)\n    )\n\n    if (options?.loadMetadataOnly) {\n        const metadataResponse = await metadataPromise\n        if (!metadataResponse.ok) throw new Error(metadataResponse.statusText)\n        const metadata = await metadataResponse.json()\n        // Return empty data when only metadata is requested\n        return { data: { values: [], entities: [], years: [] }, metadata }\n    }\n\n    const dataPromise = fetchWithRetry(\n        getVariableDataRoute(dataApiUrl, variableId, options)\n    )\n    const [dataResponse, metadataResponse] = await Promise.all([\n        dataPromise,\n        metadataPromise,\n    ])\n    if (!dataResponse.ok) throw new Error(dataResponse.statusText)\n    if (!metadataResponse.ok) throw new Error(metadataResponse.statusText)\n    const data = await dataResponse.json()\n    const metadata = await metadataResponse.json()\n    return { data, metadata }\n}\n\nexport async function loadVariablesDataSite(\n    variableIds: number[],\n    dataApiUrl: string,\n    archiveContext: ArchiveContext | undefined,\n    noCache?: boolean,\n    loadMetadataOnly?: boolean\n): Promise<MultipleOwidVariableDataDimensionsMap> {\n    const loadVariableDataPromises = variableIds.map((variableId) =>\n        loadVariableDataAndMetadata(variableId, dataApiUrl, {\n            assetMap:\n                archiveContext?.type === \"archive-page\"\n                    ? archiveContext.assets.runtime\n                    : undefined,\n            noCache,\n            loadMetadataOnly,\n        })\n    )\n    const variablesData: OwidVariableDataMetadataDimensions[] =\n        await Promise.all(loadVariableDataPromises)\n    const variablesDataMap = new Map(\n        variablesData.map((data) => [data.metadata.id, data])\n    )\n    return variablesDataMap\n}\n","import * as _ from \"lodash-es\"\nimport { OwidTable } from \"@ourworldindata/core-table\"\nimport {\n    ArchiveContext,\n    OwidChartDimensionInterface,\n    OwidVariableDataMetadataDimensions,\n} from \"@ourworldindata/utils\"\nimport { legacyToOwidTableAndDimensionsWithMandatorySlug } from \"./LegacyToOwidTable.js\"\nimport {\n    loadVariablesDataSite,\n    loadVariableDataAndMetadata,\n} from \"./loadVariable.js\"\nimport { toJS } from \"mobx\"\n\nexport type FetchInputTableForConfigFn = (args: {\n    dimensions?: OwidChartDimensionInterface[]\n    selectedEntityColors?: { [entityName: string]: string | undefined }\n    dataApiUrl: string\n    archiveContext?: ArchiveContext\n    noCache?: boolean\n    loadMetadataOnly?: boolean\n}) => Promise<OwidTable | undefined>\n\nexport const fetchInputTableForConfig: FetchInputTableForConfigFn = async (\n    args\n) => {\n    if (!args.dimensions || args.dimensions.length === 0) return undefined\n    const variables = args.dimensions.map((d) => d.variableId)\n    const variablesDataMap = await loadVariablesDataSite(\n        variables,\n        args.dataApiUrl,\n        args.archiveContext,\n        args.noCache,\n        args.loadMetadataOnly\n    )\n    const inputTable = legacyToOwidTableAndDimensionsWithMandatorySlug(\n        variablesDataMap,\n        args.dimensions,\n        args.selectedEntityColors\n    )\n\n    return inputTable\n}\n\nexport function getCachingInputTableFetcher(\n    dataApiUrl: string,\n    archiveContext: ArchiveContext | undefined,\n    noCache?: boolean,\n    loadMetadataOnly?: boolean\n): (\n    dimensions: OwidChartDimensionInterface[],\n    selectedEntityColors:\n        | { [entityName: string]: string | undefined }\n        | undefined\n) => Promise<OwidTable | undefined> {\n    const cache: Map<number, OwidVariableDataMetadataDimensions> = new Map()\n    let previousDimensions: OwidChartDimensionInterface[] = []\n    let previousSelectedEntityColors:\n        | {\n              [entityName: string]: string | undefined\n          }\n        | undefined = undefined\n\n    return async (\n        dimensionsMobx: OwidChartDimensionInterface[],\n        selectedEntityColorsMobx:\n            | { [entityName: string]: string | undefined }\n            | undefined\n    ) => {\n        // Check if dimensions have changed\n        const dimensions = dimensionsMobx.map((x) => toJS(x)) // Convert MobX observable to plain object\n        const selectedEntityColors = toJS(selectedEntityColorsMobx)\n\n        if (\n            _.isEqual(previousDimensions, dimensions) &&\n            _.isEqual(previousSelectedEntityColors, selectedEntityColors)\n        ) {\n            return undefined // No changes in dimensions\n        }\n        previousDimensions = dimensions\n        previousSelectedEntityColors = selectedEntityColors\n\n        if (dimensions.length === 0) return undefined\n\n        const variables = dimensions.map((d) => d.variableId)\n        const variablesToFetch = variables.filter((v) => !cache.has(v))\n\n        if (variablesToFetch.length > 0) {\n            const fetchedData = await Promise.all(\n                variablesToFetch.map((variableId) =>\n                    loadVariableDataAndMetadata(variableId, dataApiUrl, {\n                        assetMap:\n                            archiveContext?.type === \"archive-page\"\n                                ? archiveContext.assets.runtime\n                                : undefined,\n                        noCache,\n                        loadMetadataOnly,\n                    })\n                )\n            )\n            fetchedData.forEach((data) => cache.set(data.metadata.id, data))\n        }\n\n        const variablesDataMap = new Map(\n            variables.map((v) => [v, cache.get(v)!])\n        )\n\n        const inputTable = legacyToOwidTableAndDimensionsWithMandatorySlug(\n            variablesDataMap,\n            dimensions,\n            selectedEntityColors\n        )\n\n        return inputTable\n    }\n}\n","import { lazy, regions } from \"@ourworldindata/utils\"\nimport { EntityName } from \"@ourworldindata/types\"\nimport * as R from \"remeda\"\n\nconst getEntityCodesToEntityNames: () => Record<string, string> = lazy(() =>\n    Object.fromEntries(regions.map(({ code, name }) => [code, name]))\n)\n\nconst getEntityNamesToEntityCodes = lazy(() =>\n    R.invert(getEntityCodesToEntityNames())\n)\n\nexport const codeToEntityName = (codeOrEntityName: string): EntityName => {\n    return getEntityCodesToEntityNames()[codeOrEntityName] ?? codeOrEntityName\n}\n\nexport const entityNameToCode = (entityName: EntityName): string => {\n    return getEntityNamesToEntityCodes()[entityName] ?? entityName\n}\n","import { EntityName, SeriesName } from \"@ourworldindata/types\"\nimport { Url, performUrlMigrations, UrlMigration } from \"@ourworldindata/utils\"\nimport { codeToEntityName, entityNameToCode } from \"./EntityCodes\"\n\n/*\n * Migration #1: Switch from + to ~ delimited entities.\n *\n * Implemented: May 2020\n *\n * See PR discussion on how we decided on ~ (tilde): https://github.com/owid/owid-grapher/pull/446\n * And the initial issue (Facebook rewriting our URLs): https://github.com/owid/owid-grapher/issues/397\n *\n * In short:\n *\n * Facebook replaces `%20` in URLs with `+`. Before this migration we encoded\n * [\"North America\", \"South America\"] → \"North%20America+South%20America\".\n * Facebook would turn this into \"North+America+South+America\" making the delimiters and spaces\n * ambiguous.\n *\n * We chose ~ (tilde) because no entities existed in the database that contain that symbol, so the\n * existence of that symbol could be used to detect legacy URLs.\n *\n */\n\n// Todo: ensure EntityName never contains the v2Delimiter\n\nconst V1_DELIMITER = \"+\"\nexport const ENTITY_V2_DELIMITER = \"~\"\n\nconst isV1Param = (encodedQueryParam: string): boolean => {\n    // No legacy entities have a v2Delimiter in their name,\n    // so if a v2Delimiter is present we know it's a v2 link.\n    return !decodeURIComponent(encodedQueryParam).includes(ENTITY_V2_DELIMITER)\n}\n\nconst entityNamesFromV1EncodedParam = (\n    encodedQueryParam: string\n): EntityName[] => {\n    // need to use still-encoded URL params because we need to\n    // distinguish between `+` and `%20` in legacy URLs\n    return encodedQueryParam.split(V1_DELIMITER).map(decodeURIComponent)\n}\n\nconst entityNamesToV2Param = (entityNames: EntityName[]): string => {\n    // Always include a v2Delimiter in a v2 link. When decoding we will drop any empty strings.\n    if (entityNames.length === 1) return ENTITY_V2_DELIMITER + entityNames[0]\n    return entityNames.join(ENTITY_V2_DELIMITER)\n}\n\nconst entityNamesFromV2Param = (queryParam: string): EntityName[] => {\n    // Facebook turns %20 into +. v2 links will never contain a +, so we can safely replace all of them with %20.\n    return queryParam.split(ENTITY_V2_DELIMITER).filter((item) => item)\n}\n\nconst migrateV1Delimited: UrlMigration = (url) => {\n    const { country } = url.encodedQueryParams\n\n    if (country !== undefined && isV1Param(country)) {\n        return url.updateQueryParams({\n            country: entityNamesToV2Param(\n                entityNamesFromV1EncodedParam(country)\n            ),\n        })\n    }\n    return url\n}\n\n/*\n * Migration #2: Drop dimension keys from selected entities.\n *\n * Implemented: March 2021\n *\n * When plotting multiple variables on a chart, it used to be possible to pick which\n * variable-entity pairs get plotted.\n *\n * For example, if you had a line chart with 3 variables: Energy consumption from Coal, Oil and Gas,\n * then you (as a user) could select individual variable-entity pairs to plot:\n *\n * - France - Coal (\"FRA-0\")\n * - France - Oil (\"FRA-1\")\n * - France - Gas (\"FRA-2\")\n * - ...\n *\n * The index of the dimension was appended to the entity (e.g. 0 for Coal).\n *\n * We dropped this feature in March 2021 in order to simplify the selection-handling logic, and it\n * was also, in most cases, not desirable to present users with variable-entity options.\n *\n */\n\n// Pattern for a entity name - number pair, where the entity name contains at least one non-digit character.\nconst LegacyDimensionRegex = /^(.*\\D.*)-\\d+$/\n\nconst injectEntityNamesInLegacyDimension = (\n    entityNames: EntityName[]\n): EntityName[] => {\n    // If an entity has the old name-dimension encoding, removing the dimension part and add it as\n    // a new selection. So USA-1 becomes USA.\n    const newNames: EntityName[] = []\n    entityNames.forEach((entityName) => {\n        newNames.push(entityName)\n        if (LegacyDimensionRegex.test(entityName)) {\n            const nonDimensionName = entityName.replace(\n                LegacyDimensionRegex,\n                \"$1\"\n            )\n            newNames.push(nonDimensionName)\n        }\n    })\n    return newNames\n}\n\nconst migrateLegacyDimensionPairs: UrlMigration = (url) => {\n    const { country } = url.queryParams\n    if (country) {\n        return url.updateQueryParams({\n            country: entityNamesToV2Param(\n                injectEntityNamesInLegacyDimension(\n                    entityNamesFromV2Param(country)\n                )\n            ),\n        })\n    }\n    return url\n}\n\n/*\n * Combining all migrations\n */\n\nconst urlMigrations: UrlMigration[] = [\n    migrateV1Delimited,\n    migrateLegacyDimensionPairs,\n]\n\nexport const migrateSelectedEntityNamesParam: UrlMigration = (\n    url: Url\n): Url => {\n    return performUrlMigrations(urlMigrations, url)\n}\n\n/*\n * Accessors\n */\n\nexport const getEntityNamesParam = (\n    param: string | undefined\n): EntityName[] | undefined => {\n    if (param === undefined) return undefined\n    return entityNamesFromV2Param(param).map(codeToEntityName)\n}\n\nexport const getSelectedEntityNamesParam = (\n    country: string | undefined\n): EntityName[] | undefined => {\n    // Expects an already-migrated param as input\n    return getEntityNamesParam(country)\n}\n\nexport const generateSelectedEntityNamesParam = (\n    entityNames: EntityName[]\n): string => entityNamesToV2Param(entityNames.map(entityNameToCode))\n\nexport const setSelectedEntityNamesParam = (\n    url: Url,\n    entityNames: EntityName[] | undefined\n): Url => {\n    // Expects an already-migrated URL as input\n    return url.updateQueryParams({\n        country: entityNames\n            ? generateSelectedEntityNamesParam(entityNames)\n            : undefined,\n    })\n}\n\n/*\n * Focused series names\n *\n * A focused series name is one of:\n * (i) an entity name (common case)\n * (ii) an indicator name (less common, but not rare)\n * (iii) a combination of both, typically represented as 'entityName – indicatorName' (rare)\n *\n * Parsing and serializing focused series names for the URL is done using utility\n * functions that have originally been written for entity names, so that the same\n * delimiter is used and entity names are mapped to their codes if possible. Note\n * that stand-alone entity names are mapped to their codes (case i), while entity\n * names that are a substring of a series name are not (case iii).\n */\n\nexport const getFocusedSeriesNamesParam = (\n    queryParam: string | undefined\n): SeriesName[] | undefined => {\n    return getEntityNamesParam(queryParam)\n}\n\nexport const generateFocusedSeriesNamesParam = (\n    seriesNames: SeriesName[]\n): string => entityNamesToV2Param(seriesNames.map(entityNameToCode))\n","import {\n    QueryParams,\n    Url,\n    UrlMigration,\n    performUrlMigrations,\n} from \"@ourworldindata/utils\"\nimport { migrateSelectedEntityNamesParam } from \"./EntityUrlBuilder\"\n\nexport const grapherUrlMigrations: UrlMigration[] = [\n    (url: Url): Url => {\n        const { year, time } = url.queryParams\n        if (!year) return url\n        return url.updateQueryParams({\n            year: undefined,\n            time: time ?? year,\n        })\n    },\n    migrateSelectedEntityNamesParam,\n]\n\nexport const legacyToCurrentGrapherUrl = (url: Url): Url =>\n    performUrlMigrations(grapherUrlMigrations, url)\n\nexport const legacyToCurrentGrapherQueryParams = (\n    queryStr: string\n): QueryParams => {\n    const url = Url.fromQueryStr(queryStr)\n    return legacyToCurrentGrapherUrl(url).queryParams\n}\n","import {\n    latestSchemaVersion,\n    outdatedSchemaVersions,\n} from \"../defaultGrapherConfig\"\n\nconst allSchemaVersions = [...outdatedSchemaVersions, latestSchemaVersion]\n\ntype LatestSchemaVersion = typeof latestSchemaVersion\ntype OutdatedSchemaVersion = (typeof outdatedSchemaVersions)[number]\ntype SchemaVersion = OutdatedSchemaVersion | LatestSchemaVersion\n\ntype Schema =\n    `https://files.ourworldindata.org/schemas/grapher-schema.${SchemaVersion}.json`\n\n// we can't type configs that don't adhere to the latest schema as we don't know what they look like\nexport type AnyConfig = Record<string, any>\nexport type AnyConfigWithValidSchema = AnyConfig & {\n    $schema: Schema\n}\n\nconst schemaVersionRegex =\n    /https:\\/\\/files\\.ourworldindata\\.org\\/schemas\\/grapher-schema\\.(?<version>\\d{3})\\.json/m\n\nconst isValidSchemaVersion = (version: string): version is SchemaVersion =>\n    allSchemaVersions.includes(version as any)\n\nexport function getSchemaVersion(\n    config: AnyConfigWithValidSchema\n): SchemaVersion\nexport function getSchemaVersion(config: AnyConfig): SchemaVersion | null\nexport function getSchemaVersion(\n    config: AnyConfig | AnyConfigWithValidSchema\n): SchemaVersion | null {\n    const version = config.$schema?.match(schemaVersionRegex)?.groups?.version\n    if (!version || !isValidSchemaVersion(version)) return null\n    return version\n}\n\nexport function createSchemaForVersion(version: SchemaVersion): Schema {\n    return `https://files.ourworldindata.org/schemas/grapher-schema.${version}.json`\n}\n\nexport const isLatestVersion = (version: SchemaVersion) =>\n    version === latestSchemaVersion\n\nexport const isOutdatedVersion = (version: SchemaVersion) =>\n    outdatedSchemaVersions.includes(version as any)\n\nexport const hasValidSchema = (\n    config: AnyConfig\n): config is AnyConfigWithValidSchema => getSchemaVersion(config) !== null\n\nexport const hasOutdatedSchema = (\n    config: AnyConfigWithValidSchema\n): boolean => {\n    const version = getSchemaVersion(config)\n    return isOutdatedVersion(version)\n}\n","// Schema migrations\n//\n// Every breaking change to the schema should be accompanied by a migration.\n//\n// To add a migration, follow these steps:\n//    - Create a new function `migrateXXXToXXX` that migrates a config from one version to the next.\n//      Make sure to update the $schema field to the next version in your migration function,\n//      or else the recursively defined migrate function will not terminate!\n//    - Add a new case to the match statement in `runMigration` that calls the new migration function.\n\nimport { match } from \"ts-pattern\"\nimport {\n    type AnyConfigWithValidSchema,\n    createSchemaForVersion,\n    getSchemaVersion,\n    isLatestVersion,\n} from \"./helpers\"\nimport { GRAPHER_CHART_TYPES } from \"@ourworldindata/types\"\n\n// see https://github.com/owid/owid-grapher/commit/26f2a0d1790c71bdda7e12f284ca552945d2f6ef\nconst migrateFrom001To002 = (\n    config: AnyConfigWithValidSchema\n): AnyConfigWithValidSchema => {\n    delete config.selectedData\n    config.$schema = createSchemaForVersion(\"002\")\n    return config\n}\n\n// see https://github.com/owid/owid-grapher/commit/4525ad81fb7064709ffab83677a8b0354b324dfb\nconst migrateFrom002To003 = (\n    config: AnyConfigWithValidSchema\n): AnyConfigWithValidSchema => {\n    if (config.hideTitleAnnotation) {\n        config.hideTitleAnnotations = {\n            entity: true,\n            time: true,\n            change: true,\n        }\n    }\n    delete config.hideTitleAnnotation\n\n    config.$schema = createSchemaForVersion(\"003\")\n    return config\n}\n\n// see https://github.com/owid/owid-grapher/commit/1776721253cf61d7f1e24ebadeaf7a7ca2f43ced\nconst migrateFrom003To004 = (\n    config: AnyConfigWithValidSchema\n): AnyConfigWithValidSchema => {\n    delete config.data\n    config.$schema = createSchemaForVersion(\"004\")\n    return config\n}\n\n// see https://github.com/owid/owid-grapher/commit/1d67de3174764a413bc5055fbdf34efb2b49e079\nconst migrateFrom004To005 = (\n    config: AnyConfigWithValidSchema\n): AnyConfigWithValidSchema => {\n    delete config.hideLinesOutsideTolerance\n    config.$schema = createSchemaForVersion(\"005\")\n    return config\n}\n\nconst migrateFrom005To006 = (\n    config: AnyConfigWithValidSchema\n): AnyConfigWithValidSchema => {\n    const { type = GRAPHER_CHART_TYPES.LineChart, hasChartTab = true } = config\n\n    // add types field\n    if (!hasChartTab) config.chartTypes = []\n    else if (type !== GRAPHER_CHART_TYPES.LineChart) config.chartTypes = [type]\n\n    // remove deprecated fields\n    delete config.type\n    delete config.hasChartTab\n\n    config.$schema = createSchemaForVersion(\"006\")\n    return config\n}\n\nexport const migrateFrom006To007 = (\n    config: AnyConfigWithValidSchema\n): AnyConfigWithValidSchema => {\n    // rename map.projection to map.region\n    if (config.map?.projection) {\n        config.map.region = config.map.projection\n        delete config.map.projection\n    }\n\n    config.$schema = createSchemaForVersion(\"007\")\n    return config\n}\n\nexport const migrateFrom007To008 = (\n    config: AnyConfigWithValidSchema\n): AnyConfigWithValidSchema => {\n    // remove colorScale.customNumericMinValue, merge it into colorScale.customNumericValues\n    if (config.map?.colorScale?.customNumericValues) {\n        config.map.colorScale.customNumericValues = [\n            config.map.colorScale.customNumericMinValue ?? 0,\n            ...config.map.colorScale.customNumericValues,\n        ]\n    }\n    if (config.map?.colorScale?.customNumericMinValue !== undefined) {\n        delete config.map.colorScale.customNumericMinValue\n    }\n\n    if (config.colorScale?.customNumericValues) {\n        config.colorScale.customNumericValues = [\n            config.colorScale.customNumericMinValue ?? 0,\n            ...config.colorScale.customNumericValues,\n        ]\n    }\n    if (config.colorScale?.customNumericMinValue !== undefined) {\n        delete config.colorScale.customNumericMinValue\n    }\n\n    config.$schema = createSchemaForVersion(\"008\")\n    return config\n}\n\nexport const migrateFrom008To009 = (config: AnyConfigWithValidSchema) => {\n    if ((config.map?.colorScale?.binningStrategy ?? \"manual\") !== \"manual\") {\n        config.map.colorScale.binningStrategy = \"auto\"\n    }\n\n    if (config.map?.colorScale?.binningStrategyBinCount !== undefined) {\n        delete config.map.colorScale.binningStrategyBinCount\n    }\n\n    if ((config.colorScale?.binningStrategy ?? \"manual\") !== \"manual\") {\n        config.colorScale.binningStrategy = \"auto\"\n    }\n\n    if (config.colorScale?.binningStrategyBinCount !== undefined) {\n        delete config.colorScale.binningStrategyBinCount\n    }\n\n    config.$schema = createSchemaForVersion(\"009\")\n    return config\n}\n\nexport const migrateFrom009To010 = (config: AnyConfigWithValidSchema) => {\n    // Rename hideLegend to hideSeriesLabels\n    if (config.hideLegend) {\n        config.hideSeriesLabels = true\n        delete config.hideLegend\n    }\n\n    config.$schema = createSchemaForVersion(\"010\")\n    return config\n}\n\nexport const runMigration = (\n    config: AnyConfigWithValidSchema\n): AnyConfigWithValidSchema => {\n    const version = getSchemaVersion(config)\n    if (isLatestVersion(version)) return config\n    return match(version)\n        .with(\"001\", () => migrateFrom001To002(config))\n        .with(\"002\", () => migrateFrom002To003(config))\n        .with(\"003\", () => migrateFrom003To004(config))\n        .with(\"004\", () => migrateFrom004To005(config))\n        .with(\"005\", () => migrateFrom005To006(config))\n        .with(\"006\", () => migrateFrom006To007(config))\n        .with(\"007\", () => migrateFrom007To008(config))\n        .with(\"008\", () => migrateFrom008To009(config))\n        .with(\"009\", () => migrateFrom009To010(config))\n        .exhaustive()\n}\n","import * as _ from \"lodash-es\"\nimport { GrapherInterface } from \"@ourworldindata/types\"\n\nimport { defaultGrapherConfig } from \"../defaultGrapherConfig\"\nimport {\n    getSchemaVersion,\n    hasValidSchema,\n    isLatestVersion,\n    hasOutdatedSchema,\n    type AnyConfig,\n    type AnyConfigWithValidSchema,\n} from \"./helpers\"\nimport { runMigration } from \"./migrations\"\nimport * as Sentry from \"@sentry/browser\"\n\nconst recursivelyApplyMigrations = (\n    config: AnyConfigWithValidSchema\n): AnyConfigWithValidSchema => {\n    const version = getSchemaVersion(config)\n    if (isLatestVersion(version)) return config\n    return recursivelyApplyMigrations(runMigration(config))\n}\n\nconst migrate = (config: AnyConfigWithValidSchema): GrapherInterface =>\n    recursivelyApplyMigrations(config) as GrapherInterface\n\n/**\n * Attempts to migrate a config to the latest schema version.\n *\n * An outdated config is migrated to the latest version by applying a series of\n * predefined migrations. We rely on the schema version to determine if a config\n * is outdated.\n *\n * Note that the given config is not actually validated against the schema!\n */\nexport const migrateGrapherConfigToLatestVersion = (\n    config: AnyConfig\n): GrapherInterface => {\n    // the config adheres to the latest schema\n    if (config.$schema === defaultGrapherConfig.$schema) return config\n\n    // if the schema version is outdated, migrate it\n    if (hasValidSchema(config) && hasOutdatedSchema(config)) {\n        return migrate(_.cloneDeep(config))\n    }\n\n    // throw if the schema is missing\n    if (config.$schema === undefined) {\n        throw new Error(\"Schema missing\")\n    } else {\n        /**\n         * If the schema version is not outdated and not the latest, we have most likely received a\n         * config from a future version of the codebase, that the client code is not yet aware of.\n         * That's not perfect, but in reality, most schema changes are benign changes,\n         * and rendering the config with the current code will result in a better user experience\n         * than just throwing an error and grapher not rendering at all without any explanation.\n         * - @marcelgerber, 2025-07-02\n         */\n        const message = `Received grapher config with unsupported schema ${config.$schema}; this code expects schema ${defaultGrapherConfig.$schema}.`\n        console.warn(message)\n        Sentry.captureMessage(message, {\n            level: \"warning\",\n        })\n        return config\n    }\n}\n\nexport const migrateGrapherConfigToLatestVersionAndFailOnError = (\n    config: AnyConfig\n): GrapherInterface => {\n    const migrated = migrateGrapherConfigToLatestVersion(config)\n\n    if (migrated.$schema !== defaultGrapherConfig.$schema) {\n        throw new Error(\n            `Invalid schema version after schema migration: ${migrated.$schema}. Expected: ${defaultGrapherConfig.$schema}`\n        )\n    }\n    return migrated\n}\n","import { sleep } from \"@ourworldindata/utils\"\n\nexport const EMBEDDED_FONTS_CSS = \"/fonts/embedded.css\"\nexport const IMPORT_FONTS_REGEX = /@import url\\([^)]*?fonts\\.css\\)/\n\nexport interface GrapherExport {\n    url: string\n    blob: Blob\n    svgUrl: string\n    svgBlob: Blob\n}\n\nexport type GrapherRasterizeFn = (options: {\n    includeDetails: boolean\n}) => Promise<GrapherExport>\n\nexport class StaticChartRasterizer {\n    svg: string\n    width: number\n    height: number\n    format: string\n    canvas: Promise<HTMLCanvasElement>\n    density = 4 // overscaling factor for bitmap generation\n    embeddedFonts = \"\"\n\n    constructor(\n        svg: string,\n        width: number,\n        height: number,\n        format = \"image/png\"\n    ) {\n        this.svg = svg\n        this.width = width\n        this.height = height\n        this.format = format\n\n        // The canvas used for rendering is locked behind a promise that won't resolve\n        // until the embedded fonts css has been loaded and the font faces initialized\n        const canvasElt = document.createElement(\"canvas\")\n        this.canvas = new Promise((resolve) => {\n            fetch(EMBEDDED_FONTS_CSS)\n                .then(async (data) => {\n                    this.embeddedFonts = await data.text()\n                    await this.preloadFonts(canvasElt)\n                    resolve(canvasElt)\n                })\n                .catch((err) => {\n                    console.error(JSON.stringify(err))\n                    resolve(canvasElt)\n                })\n        })\n    }\n\n    private async preloadFonts(canvas: HTMLCanvasElement): Promise<void> {\n        // Even though the font data is inlined in the font-face definitions, the browser may not\n        // have fully loaded the fonts by the time it tries to render to canvas (in which case any\n        // text drawn in non-loaded fonts will simply be invisible). This method will block rendering\n        // for up to ~3.25s (with decelerating polling) or until it verifies that all the fonts in\n        // the `faces` array are ready for use, whichever comes first.\n        const MAX_RETRIES = 10,\n            RETRY_DELAY_MS = 100\n\n        const faces = [\n            { font: \"40px Lato\", offset: 17 },\n            { font: \"bold 40px Lato\", offset: 17 },\n            { font: \"600 75px 'Playfair Display'\", offset: 27 },\n        ]\n\n        for (let retry = 0; retry < MAX_RETRIES; retry++) {\n            const ctx = canvas.getContext(\"2d\", {\n                alpha: false,\n                willReadFrequently: true, // optimizes frequent calls to `getImageData` below\n            })!\n            const outcomes: boolean[] = []\n\n            for (const { font, offset } of faces) {\n                // draw a bullet character that's big enough to fill the entire 10×10 canvas\n                const testBlob = blobFromSVG(\n                        `<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" style=\"font:${font};\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\">\n                         <defs><style>${this.embeddedFonts}</style></defs>\n                         <text x=\"5.0\" y=\"${offset}.0\" text-anchor=\"middle\" fill=\"white\">•</text>\n                         </svg>`\n                    ),\n                    testUrl = await urlFromBlob(testBlob),\n                    testImage = await imageFromUrl(testUrl)\n\n                canvas.width = 10\n                canvas.height = 10\n                ctx.drawImage(testImage, 0, 0)\n\n                // ensure that all the pixels have been painted opaque white; if the font hasn't loaded yet,\n                // nothing will be drawn and the pixels will all be transparent black\n                const pixels = ctx.getImageData(0, 0, 10, 10)?.data ?? [],\n                    didDraw = pixels.length && pixels.every((ch) => ch === 255)\n                outcomes.push(!!didDraw)\n            }\n\n            // check that all the fonts rendered correctly and exit if so\n            if (outcomes.every((result) => result)) return\n\n            // otherwise, keep retrying until we reach the time limit\n            console.warn(\n                \"preloading fonts...\",\n                faces.filter((_f, i) => !outcomes[i]).map((f) => f.font)\n            )\n            await sleep(RETRY_DELAY_MS + (retry * RETRY_DELAY_MS) / 2)\n        }\n\n        // if the function didn't return from within the loop, the embedded fonts aren't usable\n        // so don't try to insert them when rendering the chart\n        this.embeddedFonts = \"\"\n    }\n\n    async render(): Promise<GrapherExport> {\n        // await the canvas before doing anything else to make sure .preloadFonts() has completed\n        const canvas = await this.canvas,\n            ctx = canvas.getContext(\"2d\", { alpha: false })!\n\n        // create an Image object using the chart's svg, but with embedded fonts swapped in for\n        // its external `fonts.css` stylesheet\n        const svgImage = await imageFromUrl(\n            await urlFromBlob(\n                blobFromSVG(\n                    this.svg.replace(IMPORT_FONTS_REGEX, this.embeddedFonts)\n                )\n            )\n        )\n\n        // render the bitmap version\n        const { width, height, density, format } = this\n        canvas.width = width * density\n        canvas.height = height * density\n        ctx.imageSmoothingEnabled = false\n        ctx.setTransform(density, 0, 0, density, 0, 0)\n        ctx.drawImage(svgImage, 0, 0)\n\n        // package the svg version\n        const svgBlob = blobFromSVG(this.svg),\n            svgUrl = await urlFromBlob(svgBlob)\n\n        return new Promise((res, rej) => {\n            try {\n                const url = canvas.toDataURL(format)\n                canvas.toBlob((blob) => {\n                    if (blob) res({ url, blob, svgUrl, svgBlob })\n                    else rej(new Error(\"Failed to generate bitmap blob\"))\n                })\n            } catch (err) {\n                rej(err)\n            }\n        })\n    }\n}\n\n//\n// Format converters\n//\n\nconst blobFromSVG = (svg: string): Blob =>\n    new Blob([svg], { type: \"image/svg+xml;charset=utf-8\" })\n\nconst urlFromBlob = (blob: Blob): Promise<string> =>\n    new Promise((res, rej) => {\n        const reader = new FileReader()\n        reader.onload = (ev: any): void => {\n            res(ev.target.result as string)\n        }\n        reader.onerror = rej\n        reader.readAsDataURL(blob)\n    })\n\nconst imageFromUrl = (url: string): Promise<HTMLImageElement> =>\n    new Promise((res, rej) => {\n        const image = new Image()\n        image.onload = (): void => res(image)\n        image.onerror = rej\n        image.src = url\n    })\n","import { GrapherState } from \"../core/GrapherState\"\nimport { computed, makeObservable } from \"mobx\"\nimport { ChartDimension } from \"./ChartDimension\"\nimport { DimensionProperty } from \"@ourworldindata/utils\"\n\nexport class DimensionSlot {\n    private grapherState: GrapherState\n    property: DimensionProperty\n    constructor(grapher: GrapherState, property: DimensionProperty) {\n        makeObservable(this)\n        this.grapherState = grapher\n        this.property = property\n    }\n\n    @computed get name(): string {\n        const names: Record<DimensionProperty, string> = {\n            y: \"Y axis\",\n            x: \"X axis\",\n            size: \"Size\",\n            color: \"Color\",\n            table: \"Table\",\n        }\n\n        return (names as any)[this.property] || \"\"\n    }\n\n    @computed get allowMultiple(): boolean {\n        return (\n            this.property === DimensionProperty.y &&\n            this.grapherState.supportsMultipleYColumns\n        )\n    }\n\n    @computed get isOptional(): boolean {\n        return this.allowMultiple\n    }\n\n    @computed get dimensions(): ChartDimension[] {\n        return this.grapherState.dimensions.filter(\n            (d) => d.property === this.property\n        )\n    }\n}\n","import {\n    EventCategory,\n    GrapherErrorAction,\n    type EntitySelectorEvent,\n    type GrapherImageDownloadEvent,\n    type GrapherInteractionEvent,\n    type GrapherAnalyticsContext,\n    type GAEvent,\n} from \"@ourworldindata/types\"\n\nconst DEBUG = false\n\ntype GAEventWithClear = GAEvent & { _clear: boolean }\n\n// Add type information for dataLayer global provided by Google Tag Manager\ntype WindowWithDataLayer = Window & {\n    dataLayer?: (GAEventWithClear | GAConsent)[]\n}\ndeclare const window: WindowWithDataLayer\n\n// taken from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/de66435d18fbdb2684947d16b5cd3a77f876324c/types/gtag.js/index.d.ts#L151-L156\ninterface GAConsentParams {\n    ad_storage?: \"granted\" | \"denied\" | undefined\n    analytics_storage?: \"granted\" | \"denied\" | undefined\n    wait_for_update?: number | undefined\n    region?: string[] | undefined\n}\n\ntype GAConsent = [\"consent\", \"default\" | \"update\", GAConsentParams]\n\n// Note: consent-based blocking dealt with at the Google Tag Manager level.\n// Events are discarded if consent not given.\nexport class GrapherAnalytics {\n    constructor(environment: string = \"\", version = \"1.0.0\") {\n        this.isDev = environment === \"development\"\n        this.version = version\n    }\n\n    private version: string // Ideally the Git hash commit\n    private isDev: boolean\n\n    logGrapherView(\n        slug: string,\n        ctx?: { viewConfigId?: string; narrativeChartName?: string }\n    ): void {\n        const { path, pathNext } = splitPathForGA4(`/grapher/${slug}`)\n        this.logToGA({\n            event: EventCategory.GrapherView,\n            grapherPath: path,\n            grapherPathNext: pathNext,\n            viewConfigId: ctx?.viewConfigId,\n            narrativeChartName: ctx?.narrativeChartName,\n        })\n    }\n\n    logGrapherViewError(error: Error): void {\n        this.logToGA({\n            event: EventCategory.GrapherError,\n            eventAction: GrapherErrorAction.GrapherViewError,\n            eventContext: error.message,\n        })\n    }\n\n    logEntitiesNotFoundError(entities: string[]): void {\n        this.logToGA({\n            event: EventCategory.GrapherError,\n            eventAction: GrapherErrorAction.EntitiesNotFound,\n            eventContext: JSON.stringify(entities),\n        })\n    }\n\n    logExplorerView(\n        slug: string,\n        view: Record<string, string>,\n        viewConfigId?: string\n    ): void {\n        this.logToGA({\n            event: EventCategory.ExplorerView,\n            explorerPath: `/explorers/${slug}`,\n            explorerView: JSON.stringify(view),\n            viewConfigId,\n        })\n    }\n\n    /** Logs events for the explorer's entity selector */\n    logEntityPickerEvent(action: EntitySelectorEvent, note?: string): void {\n        this.logToGA({\n            event: EventCategory.ExplorerCountrySelector,\n            eventAction: action,\n            eventContext: note,\n        })\n    }\n\n    /** Logs events for Grapher's entity selector */\n    logEntitySelectorEvent(\n        action: EntitySelectorEvent,\n        ctx: GrapherAnalyticsContext & { target?: string }\n    ): void {\n        this.logToGA({\n            ...grapherAnalyticsContextToGAEventFields(ctx),\n            event: EventCategory.GrapherEntitySelector,\n            eventAction: action,\n            eventTarget: ctx.target,\n        })\n    }\n\n    logGrapherImageDownloadEvent(\n        action: GrapherImageDownloadEvent,\n        ctx: GrapherAnalyticsContext & { context?: Record<string, any> }\n    ): void {\n        this.logToGA({\n            ...grapherAnalyticsContextToGAEventFields(ctx),\n            event: EventCategory.GrapherClick,\n            eventAction: action,\n            eventContext: ctx.context ? JSON.stringify(ctx.context) : undefined,\n        })\n    }\n\n    logGrapherInteractionEvent(\n        action: GrapherInteractionEvent,\n        ctx: GrapherAnalyticsContext & { target?: string }\n    ): void {\n        this.logToGA({\n            ...grapherAnalyticsContextToGAEventFields(ctx),\n            event: EventCategory.GrapherHover,\n            eventAction: action,\n            eventTarget: ctx.target,\n        })\n    }\n\n    logGrapherClick(\n        action: string = \"unknown-action\",\n        ctx: {\n            label?: string\n            grapherUrl?: string\n            narrativeChartName?: string\n        }\n    ): void {\n        const { path, pathNext } = splitPathForGA4(\n            getPathname(ctx.grapherUrl) ?? \"\"\n        )\n        this.logToGA({\n            event: EventCategory.GrapherClick,\n            eventAction: action,\n            eventTarget: ctx.label,\n            grapherPath: path,\n            grapherPathNext: pathNext,\n            narrativeChartName: ctx.narrativeChartName,\n        })\n    }\n\n    logSiteClick(action: string = \"unknown-action\", label?: string): void {\n        this.logToGA({\n            event: EventCategory.SiteClick,\n            eventAction: action,\n            eventTarget: label,\n        })\n    }\n\n    logSiteFormSubmit(\n        action: \"newsletter-subscribe\" | \"donate\",\n        label?: string\n    ): void {\n        this.logToGA({\n            event: EventCategory.SiteFormSubmit,\n            eventAction: action,\n            eventTarget: label,\n        })\n    }\n\n    logKeyboardShortcut(shortcut: string, combo: string): void {\n        this.logToGA({\n            event: EventCategory.KeyboardShortcut,\n            eventAction: shortcut,\n            eventContext: combo,\n        })\n    }\n\n    protected logToGA(event: GAEvent): void {\n        if (DEBUG && this.isDev) {\n            // eslint-disable-next-line no-console\n            console.log(\"Analytics.logToGA\", event)\n            return\n        }\n        if (typeof window !== \"undefined\") {\n            // It's very important that we clear (_clear) the data layer whenever we push an event,\n            // otherwise it will retain all properties from previous events which can lead to\n            // confusing and incorrect events data being sent.\n            // See https://www.simoahava.com/analytics/two-simple-data-model-tricks/.\n            // see also https://github.com/google/data-layer-helper/blob/4a65b385db1fac710d33bf5d1345e598e3d117fc/README.md#preventing-default-recursive-merge\n            window.dataLayer?.push({ ...event, _clear: true })\n        }\n    }\n\n    updateGAConsentSettings(consent: GAConsentParams): void {\n        function pushToDataLayer(..._args: any): void {\n            // Google Tag Manager is super weird here: it will not accept a normal array or object\n            // being pushed to dataLayer, it absolutely has to be an `Arguments` object.\n            // see https://stackoverflow.com/q/60400130/10670163\n\n            // eslint-disable-next-line prefer-rest-params\n            window.dataLayer?.push(arguments as unknown as GAConsent)\n        }\n        pushToDataLayer(\"consent\", \"update\", consent)\n    }\n}\n\nfunction getPathname(url?: string): string | undefined {\n    // GA4 trims metadata fields down to 100 characters, so we want to be concise and only send\n    // the pathname, e.g. `/grapher/life-expectancy` or `/explorers/migration`\n    if (url === undefined) return undefined\n\n    try {\n        const urlObj = new URL(url)\n        return urlObj.pathname\n    } catch {\n        // Invalid URL, return undefined\n        return undefined\n    }\n}\n// GA4 truncates all string parameters at 100 characters.\n// If path exceeds this, split into path (first 100 chars) and pathNext (chars 101-200)\nexport function splitPathForGA4(path: string): {\n    path: string\n    pathNext?: string\n} {\n    if (path.length <= 100) return { path }\n    return { path: path.slice(0, 100), pathNext: path.slice(100) }\n}\n\nfunction grapherAnalyticsContextToGAEventFields(\n    ctx: GrapherAnalyticsContext\n): Partial<GAEvent> {\n    const fullPath = ctx.slug ? `/grapher/${ctx.slug}` : undefined\n    const { path, pathNext } = splitPathForGA4(fullPath ?? \"\")\n    return {\n        grapherPath: path,\n        grapherPathNext: pathNext,\n        viewConfigId: ctx.viewConfigId,\n        narrativeChartName: ctx.narrativeChartName,\n    }\n}\n","import {\n    FacetAxisDomain,\n    GrapherInterface,\n    GrapherQueryParams,\n    TimeBoundValueStr,\n} from \"@ourworldindata/types\"\nimport {\n    generateFocusedSeriesNamesParam,\n    generateSelectedEntityNamesParam,\n} from \"./EntityUrlBuilder.js\"\nimport { match } from \"ts-pattern\"\nimport { GrapherState } from \"./GrapherState.js\"\nimport * as R from \"remeda\"\nimport {\n    DEFAULT_GLOBE_ROTATION,\n    DEFAULT_GLOBE_ZOOM,\n} from \"../mapCharts/MapChartConstants.js\"\n\n// This function converts a (potentially partial) GrapherInterface to the query params this translates to.\n// This is helpful for when we have a patch config to a parent chart, and we want to know which query params we need to get the parent chart as close as possible to the patched child chart.\n// Note that some settings cannot be set in the config, so they are always set to undefined.\nexport const grapherConfigToQueryParams = (\n    config: GrapherInterface\n): GrapherQueryParams => {\n    const { minTime, maxTime } = config // can be a number, or \"earliest\" or \"latest\"\n\n    // Note that this code will never format dates in yyyy-mm-dd format.\n    // For us to know that we're working with daily data, we need to have a DayColumn instance, which we only have when we have a grapher instance.\n    // Instead, we just serialize a date as a number - which also works fine for query params.\n    const timeParam =\n        minTime === maxTime\n            ? minTime // This case also covers the case where both are undefined, in which case the result is also undefined\n            : `${minTime ?? TimeBoundValueStr.unboundedLeft}..${maxTime ?? TimeBoundValueStr.unboundedRight}`\n\n    const paramsRaw: Record<\n        keyof GrapherQueryParams,\n        string | number | boolean | undefined\n    > = {\n        tab: config.tab,\n        xScale: config.xAxis?.scaleType,\n        yScale: config.yAxis?.scaleType,\n        stackMode: config.stackMode,\n        zoomToSelection: config.zoomToSelection,\n        endpointsOnly: config.compareEndPointsOnly,\n        time: timeParam,\n        region: config.map?.region,\n        facet: config.selectedFacetStrategy,\n        uniformYAxis: match(config.yAxis?.facetDomain)\n            .with(FacetAxisDomain.shared, () => 0)\n            .with(FacetAxisDomain.independent, () => 1)\n            .with(undefined, () => undefined)\n            .exhaustive(),\n        showNoDataArea: match(config.showNoDataArea)\n            .when(\n                (s) => typeof s === \"boolean\",\n                (s) => Number(s) // 1 or 0\n            )\n            .with(undefined, () => undefined)\n            .exhaustive(),\n        country: config.selectedEntityNames\n            ? generateSelectedEntityNamesParam(config.selectedEntityNames)\n            : undefined,\n        focus: config.focusedSeriesNames\n            ? generateFocusedSeriesNamesParam(config.focusedSeriesNames)\n            : undefined,\n        mapSelect: config.map?.selectedEntityNames\n            ? generateSelectedEntityNamesParam(config.map.selectedEntityNames)\n            : undefined,\n        globe: config.map?.globe?.isActive ? 1 : undefined,\n        globeRotation: configGlobeRotationToQueryParam(\n            config.map?.globe?.rotation\n        ),\n        globeZoom: configGlobeZoomToQueryParam(config.map?.globe?.zoom),\n        peerCountries: config.peerCountryStrategy,\n\n        // These cannot be specified in config, so we always set them to undefined\n        showSelectionOnlyInTable: undefined,\n        overlay: undefined,\n        tableFilter: undefined,\n        tableSearch: undefined,\n    }\n\n    // Drop undefined values and convert all to string\n    const params = Object.entries(paramsRaw).reduce(\n        (acc, [currKey, currVal]) => {\n            if (currVal !== undefined)\n                acc[currKey as keyof GrapherQueryParams] = currVal.toString()\n            return acc\n        },\n        {} as GrapherQueryParams\n    )\n    return params\n}\n\nexport const grapherObjectToQueryParams = (\n    grapher: GrapherState\n): GrapherQueryParams => {\n    const params: Record<\n        Exclude<\n            keyof GrapherQueryParams,\n            // Excluded because it's deprecated\n            | \"showSelectionOnlyInTable\"\n            // Excluded because it shouldn't be persisted in the URL\n            | \"peerCountries\"\n        >,\n        string | undefined\n    > = {\n        tab: grapher.mapGrapherTabToQueryParam(grapher.activeTab),\n        xScale: grapher.xAxis?.scaleType,\n        yScale: grapher.yAxis?.scaleType,\n        stackMode: grapher.stackMode,\n        zoomToSelection: grapher.zoomToSelection ? \"true\" : undefined,\n        endpointsOnly: grapher.compareEndPointsOnly ? \"1\" : \"0\",\n        time: grapher.timeParam,\n        region: grapher.map.region,\n        facet: grapher.selectedFacetStrategy,\n        uniformYAxis:\n            grapher.yAxis.facetDomain === FacetAxisDomain.independent\n                ? \"0\"\n                : \"1\",\n        showNoDataArea: grapher.showNoDataArea ? \"1\" : \"0\",\n        country: grapher.areSelectedEntitiesDifferentThanAuthors\n            ? generateSelectedEntityNamesParam(\n                  grapher.selection.selectedEntityNames\n              )\n            : undefined,\n        focus: grapher.areFocusedSeriesNamesDifferentThanAuthors\n            ? generateFocusedSeriesNamesParam(grapher.focusArray.seriesNames)\n            : undefined,\n        mapSelect: generateSelectedEntityNamesParam(\n            grapher.mapConfig.selection.selectedEntityNames\n        ),\n        globe: grapher.mapConfig.globe.isActive ? \"1\" : \"0\",\n        globeRotation: !R.isDeepEqual(\n            grapher.mapConfig.globe.rotation,\n            DEFAULT_GLOBE_ROTATION\n        )\n            ? stringifyGlobeRotation(grapher.mapConfig.globe.rotation)\n            : undefined,\n        globeZoom:\n            grapher.mapConfig.globe.zoom !== DEFAULT_GLOBE_ZOOM\n                ? R.round(grapher.mapConfig.globe.zoom, 2).toString()\n                : undefined,\n        tableFilter: grapher.dataTableConfig.filter,\n        tableSearch: grapher.dataTableConfig.search,\n        overlay: grapher.overlayParam,\n    }\n    return params\n}\n\n/**\n * Maps the globe rotation given in a config, which is [lat, lon], to a query param\n * which is [lat, lon] as well. The default globe rotation is not persisted.\n */\nfunction configGlobeRotationToQueryParam(\n    configGlobeRotationLatLon?: [number, number]\n): string | undefined {\n    if (!configGlobeRotationLatLon) return undefined\n\n    // don't persist the default globe rotation\n    const isDefaultRotation = R.isDeepEqual(\n        configGlobeRotationLatLon,\n        // we use [lon, lat] internally, but here we are given [lat, lon]\n        R.reverse(DEFAULT_GLOBE_ROTATION)\n    )\n    if (isDefaultRotation) return undefined\n\n    return configGlobeRotationLatLon.map((r) => R.round(r, 2)).join(\",\")\n}\n\nfunction configGlobeZoomToQueryParam(zoom?: number): string | undefined {\n    if (!zoom) return undefined\n\n    // don't persist the default zoom level\n    if (zoom === DEFAULT_GLOBE_ZOOM) return undefined\n\n    return zoom.toString()\n}\n\nexport function parseGlobeRotation(latLon: string): [number, number] {\n    // we use [lon, lat] internally and [lat, lon] in the URL\n    const [lat, lon] = latLon\n        .split(\",\")\n        .map((s) => +s)\n        .slice(0, 2) as [number, number]\n    return [lon, lat]\n}\n\nfunction stringifyGlobeRotation(lonLat: number[]): string {\n    // we use [lon, lat] internally and [lat, lon] in the URL\n    const lon = R.round(lonLat[0], 2)\n    const lat = R.round(lonLat[1], 2)\n    return [lat, lon].join(\",\")\n}\n","import * as R from \"remeda\"\nimport * as _ from \"lodash-es\"\nimport {\n    AdditionalGrapherDataFetchFn,\n    EntityName,\n    NumericCatalogKey,\n    PeerCountryStrategy,\n    PeerCountryStrategyQueryParam,\n    Time,\n} from \"@ourworldindata/types\"\nimport {\n    checkIsAggregate,\n    checkIsCountry,\n    checkIsIncomeGroup,\n    checkIsOwidContinent,\n    excludeUndefined,\n    getContinentForCountry,\n    getParentRegions,\n    getRegionByName,\n} from \"@ourworldindata/utils\"\nimport { CoreColumn } from \"@ourworldindata/core-table\"\nimport { WORLD_ENTITY_NAME } from \"./GrapherConstants.js\"\nimport { match } from \"ts-pattern\"\nimport { GrapherState } from \"./GrapherState.js\"\n\ninterface SelectDefaultEntitiesAsPeersParams {\n    defaultSelection: EntityName[]\n}\n\ninterface SelectParentRegionsAsPeersParams {\n    targetCountry: EntityName\n    availableEntities: EntityName[]\n}\n\ninterface SelectByClosestValueParams {\n    targetCountry: EntityName\n    availableEntities: EntityName[]\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n    targetCount?: number\n}\n\ninterface SelectByDataRangeParams {\n    availableEntities: EntityName[]\n    dataColumn: CoreColumn\n    randomize?: boolean\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n    targetCount?: number\n    time?: Time\n}\n\ninterface SelectNeighborsAsPeersParams {\n    targetCountry: EntityName\n    availableEntities: EntityName[]\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n    targetCount?: number\n}\n\ntype WithStrategy<T, S extends PeerCountryStrategy> = T & {\n    peerCountryStrategy: S\n}\n\ntype SelectPeerCountriesParams =\n    | WithStrategy<\n          SelectDefaultEntitiesAsPeersParams,\n          PeerCountryStrategy.DefaultSelection\n      >\n    | WithStrategy<\n          SelectParentRegionsAsPeersParams,\n          PeerCountryStrategy.ParentRegions\n      >\n    | WithStrategy<\n          SelectByClosestValueParams,\n          PeerCountryStrategy.GdpPerCapita | PeerCountryStrategy.Population\n      >\n    | WithStrategy<SelectByDataRangeParams, PeerCountryStrategy.DataRange>\n    | WithStrategy<SelectNeighborsAsPeersParams, PeerCountryStrategy.Neighbors>\n    | { peerCountryStrategy: PeerCountryStrategy.None }\n\n/** Check if the given string is a valid PeerCountryStrategy */\nfunction isValidPeerCountryStrategy(\n    candidate: string\n): candidate is PeerCountryStrategy {\n    return Object.values(PeerCountryStrategy).includes(candidate as any)\n}\n\n/** Check if the given string is a valid PeerCountryStrategyQueryParam */\nexport function isValidPeerCountryStrategyQueryParam(\n    candidate: string\n): candidate is PeerCountryStrategyQueryParam {\n    return candidate === \"auto\" || isValidPeerCountryStrategy(candidate)\n}\n\n/**\n * Selects peer countries for a grapher based on the configured strategy.\n *\n * If targetCountry is provided in options, it will be used directly.\n * Otherwise, the target country is inferred from the grapher's selection,\n * which requires exactly one entity to be selected.\n */\nexport async function selectPeerCountriesForGrapher(\n    grapherState: GrapherState,\n    options?: {\n        peerCountryStrategy?: PeerCountryStrategy\n        targetCountry?: EntityName\n    }\n): Promise<EntityName[]> {\n    // If targetCountry is not explicitly provided, require exactly one entity selected\n    if (!options?.targetCountry) {\n        if (grapherState.selection.numSelectedEntities !== 1) {\n            return []\n        }\n    }\n\n    const targetCountry =\n        options?.targetCountry ?? grapherState.selection.selectedEntityNames[0]\n    const defaultSelection = grapherState.authorsVersion.selectedEntityNames\n\n    const availableEntities = prepareEntitiesForPeerSelection(grapherState)\n    if (availableEntities.length === 0) return []\n\n    const peerCountryStrategy =\n        options?.peerCountryStrategy ?? grapherState.peerCountryStrategy\n    if (!peerCountryStrategy) return []\n\n    // Peer country selection only makes sense for countries\n    const regionInfo = getRegionByName(targetCountry)\n    if (!regionInfo || !checkIsCountry(regionInfo)) return []\n\n    const additionalDataLoaderFn = grapherState.additionalDataLoaderFn\n    const dataColumn = grapherState.table.get(grapherState.yColumnSlug)\n    const time = grapherState.endTime\n\n    return selectPeerCountries({\n        peerCountryStrategy,\n        targetCountry,\n        defaultSelection,\n        availableEntities,\n        additionalDataLoaderFn,\n        dataColumn,\n        time,\n    })\n}\n\n/** Selects peer countries based on the specified strategy and target entity */\nexport async function selectPeerCountries(\n    params: SelectPeerCountriesParams\n): Promise<EntityName[]> {\n    return match(params)\n        .with({ peerCountryStrategy: PeerCountryStrategy.None }, () => [])\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.DefaultSelection },\n            ({ defaultSelection }) => defaultSelection\n        )\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.ParentRegions },\n            (params) => selectParentRegionsAsPeers(params)\n        )\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.GdpPerCapita },\n            async (params) =>\n                selectPeerCountriesByClosestValue({\n                    catalogKey: \"gdp\",\n                    maxPeerRatio: 1.25,\n                    ...params,\n                })\n        )\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.Population },\n            async (params) =>\n                selectPeerCountriesByClosestValue({\n                    catalogKey: \"population\",\n                    maxPeerRatio: 1.5,\n                    ...params,\n                })\n        )\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.DataRange },\n            async (params) => selectPeerCountriesByDataRange(params)\n        )\n        .with(\n            { peerCountryStrategy: PeerCountryStrategy.Neighbors },\n            async (params) => selectNeighborsAsPeers(params)\n        )\n        .exhaustive()\n}\n\nfunction isDataLoaderAvailable(\n    additionalDataLoaderFn?: AdditionalGrapherDataFetchFn\n): additionalDataLoaderFn is AdditionalGrapherDataFetchFn {\n    if (!additionalDataLoaderFn) {\n        console.warn(\n            `additionalDataLoaderFn not available for peer selection. Not selecting any peer countries.`\n        )\n        return false\n    }\n    return true\n}\n\nfunction isDataColumnAvailable(\n    dataColumn?: CoreColumn\n): dataColumn is CoreColumn {\n    if (!dataColumn || dataColumn.isMissing || dataColumn.isEmpty) {\n        console.warn(\n            `dataColumn not available for peer selection. Not selecting any peer countries.`\n        )\n        return false\n    }\n    return true\n}\n\n/** Filters entities to only those that have data at all required time points */\nfunction filterEntitiesWithDataAtAllTimes({\n    entities,\n    dataColumn,\n    requiredTimes,\n}: {\n    entities: EntityName[]\n    dataColumn: CoreColumn\n    requiredTimes: Time[]\n}): EntityName[] {\n    if (requiredTimes.length === 0) return entities\n\n    return entities.filter((entityName) => {\n        const entityData = dataColumn.owidRowByEntityNameAndTime.get(entityName)\n        if (!entityData) return false\n        return requiredTimes.every(\n            (time) => entityData.get(time)?.value !== undefined\n        )\n    })\n}\n\n/**\n * Prepares entities for peer selection by excluding historical geographic\n * entities and filtering to only those with data at required times\n * (e.g. both start and end times for slope charts).\n */\nexport function prepareEntitiesForPeerSelection(\n    grapherState: GrapherState\n): EntityName[] {\n    const availableEntities = grapherState.availableEntityNames\n\n    // Exclude historical geographic entities\n    const relevantEntities = availableEntities.filter((entityName) => {\n        const region = getRegionByName(entityName)\n        return !(region && checkIsCountry(region) && region.isHistorical)\n    })\n\n    const dataColumn = grapherState.table.get(grapherState.yColumnSlug)\n    if (!isDataColumnAvailable(dataColumn)) return relevantEntities\n\n    const requiredTimes = grapherState.isOnSlopeChartTab\n        ? excludeUndefined([grapherState.startTime, grapherState.endTime])\n        : []\n\n    if (requiredTimes.length === 0) return relevantEntities\n\n    return filterEntitiesWithDataAtAllTimes({\n        entities: relevantEntities,\n        dataColumn,\n        requiredTimes,\n    })\n}\n\n/**\n * Selects parent aggregate regions (continents, income groups) that the target\n * country belongs to, plus World.\n */\nexport function selectParentRegionsAsPeers({\n    targetCountry,\n    availableEntities,\n}: SelectParentRegionsAsPeersParams): EntityName[] {\n    const region = getRegionByName(targetCountry)\n\n    // Can't determine comparison entities for non-geographical entities\n    if (!region) return []\n\n    const availableEntitySet = new Set(availableEntities)\n    const peers = new Set<EntityName>()\n\n    // Always include World as a comparison if available\n    if (availableEntitySet.has(WORLD_ENTITY_NAME)) peers.add(WORLD_ENTITY_NAME)\n\n    // Get the parent regions of a country (continent, income group, etc.)\n    // Example: Germany -> Europe, Europe (WHO), High income countries\n    const parentRegions = getParentRegions(region.name)\n\n    const isAvailable = (name: string): boolean => availableEntitySet.has(name)\n\n    // If there is an available income group, include it\n    const incomeGroup = parentRegions.find(\n        (r) => checkIsIncomeGroup(r) && isAvailable(r.name)\n    )\n    if (incomeGroup) peers.add(incomeGroup.name)\n\n    // If there is an available OWID continent, include it;\n    // otherwise include any other available aggregate region\n    const owidContinent = parentRegions.find(\n        (r) => checkIsOwidContinent(r) && isAvailable(r.name)\n    )\n    if (owidContinent) {\n        peers.add(owidContinent.name)\n    } else {\n        const aggregate = parentRegions.find(\n            (r) => checkIsAggregate(r) && isAvailable(r.name)\n        )\n        if (aggregate) peers.add(aggregate.name)\n    }\n\n    return Array.from(peers)\n}\n\n/** Finds countries with similar values to the target country */\nasync function selectPeerCountriesByClosestValue({\n    targetCountry,\n    availableEntities,\n    additionalDataLoaderFn,\n    catalogKey,\n    targetCount = 3,\n    maxPeerRatio = 1.5,\n}: SelectByClosestValueParams & {\n    catalogKey: NumericCatalogKey\n    /** Maximum ratio difference allowed */\n    maxPeerRatio?: number\n}): Promise<EntityName[]> {\n    try {\n        // Load data\n        if (!isDataLoaderAvailable(additionalDataLoaderFn)) return []\n        const data = await additionalDataLoaderFn(catalogKey)\n\n        // Only consider _countries_ as candidates for peer selection\n        // (e.g. exclude aggregates like continents or income groups)\n        const candidates = availableEntities.filter((entityName) => {\n            const region = getRegionByName(entityName)\n            const isCountry = region && checkIsCountry(region)\n            return isCountry && entityName !== targetCountry\n        })\n\n        // Create a map of entity names to their values\n        const values = new Map(data.map((row) => [row.entity, row.value]))\n\n        return findClosestByValue({\n            target: targetCountry,\n            candidates,\n            values,\n            targetCount,\n            maxPeerRatio,\n        })\n    } catch (error) {\n        console.error(\n            \"Failed to select peer countries by closest value:\",\n            error\n        )\n        return []\n    }\n}\n\n/** Selects neighboring countries as peers */\nasync function selectNeighborsAsPeers({\n    targetCountry,\n    availableEntities,\n    additionalDataLoaderFn,\n    targetCount = 3,\n}: SelectNeighborsAsPeersParams): Promise<EntityName[]> {\n    try {\n        // Load data\n        if (!isDataLoaderAvailable(additionalDataLoaderFn)) return []\n        const data = await additionalDataLoaderFn(\"neighbors\")\n\n        // Find the target country's neighbors\n        const targetEntry = data.find((entry) => entry.entity === targetCountry)\n        if (!targetEntry) {\n            console.warn(`No neighbors data found for ${targetCountry}`)\n            return []\n        }\n\n        // Filter to only neighbors that are available in the chart's data\n        const availableEntitiesSet = new Set(availableEntities)\n        const availableNeighbors = targetEntry.value.filter((neighbor) =>\n            availableEntitiesSet.has(neighbor)\n        )\n\n        // Return the first x neighbors\n        return availableNeighbors.slice(0, targetCount)\n    } catch (error) {\n        console.error(\"Failed to select neighbors as peers:\", error)\n        return []\n    }\n}\n\n/** Selects countries representing the full data range */\nasync function selectPeerCountriesByDataRange({\n    availableEntities,\n    dataColumn,\n    additionalDataLoaderFn,\n    targetCount = 5,\n    randomize = false,\n    time,\n}: SelectByDataRangeParams): Promise<EntityName[]> {\n    // Only consider countries as candidates for peer selection\n    const candidateEntities = availableEntities.filter((entityName) => {\n        const region = getRegionByName(entityName)\n        return region && checkIsCountry(region)\n    })\n\n    // Extract latest values for candidate entities\n    if (!isDataColumnAvailable(dataColumn)) return []\n    const values = new Map<EntityName, number>()\n    const targetTime = time ?? dataColumn.maxTime\n    for (const entityName of candidateEntities) {\n        const latestValue = dataColumn.owidRowByEntityNameAndTime\n            .get(entityName)\n            ?.get(targetTime)?.value\n        if (latestValue !== undefined) values.set(entityName, latestValue)\n    }\n\n    // Load population data for weighted selection (prefer larger countries)\n    if (!isDataLoaderAvailable(additionalDataLoaderFn)) return []\n    const populationData = await additionalDataLoaderFn(\"population\")\n    const population = new Map(\n        populationData.map((row) => [row.entity, row.value])\n    )\n\n    return findDataRangePeers({ values, population, targetCount, randomize })\n}\n\n/** Finds entities with values closest to a target entity using logarithmic distance */\nexport function findClosestByValue({\n    target,\n    candidates,\n    values,\n    targetCount = 3,\n    maxPeerRatio = 1.5,\n}: {\n    target: EntityName\n    candidates?: EntityName[]\n    values: Map<EntityName, number>\n    /** Number of peer entities to select */\n    targetCount?: number\n    /** Maximum ratio difference allowed */\n    maxPeerRatio?: number\n}): EntityName[] {\n    // Check that the target entity has a value\n    const targetValue = values.get(target)\n    if (targetValue === undefined) {\n        console.warn(`Target entity ${target} not found in values`)\n        return []\n    }\n\n    // Settings for finding peers\n    const settings = { targetValue, targetCount, maxPeerRatio }\n\n    // Default to all available entities as candidates\n    const availableEntities = Array.from(values.keys()).filter(\n        (entityName) => entityName !== target\n    )\n    const candidatesToUse = candidates ?? availableEntities\n\n    // Get the target's continent for filtering\n    const targetContinent = getContinentForCountry(target)\n\n    // If the target continent is unknown, search all candidates\n    if (!targetContinent) {\n        return findClosestByLogDistance({\n            values,\n            candidates: candidatesToUse,\n            ...settings,\n        })\n    }\n\n    // Find candidates on the same continent vs other continents\n    const [sameContinentCandidates, otherContinentsCandidates] = R.partition(\n        candidatesToUse,\n        (name) => getContinentForCountry(name) === targetContinent\n    )\n\n    // First try finding peer countries on the same continent\n    const sameContinentPeers = findClosestByLogDistance({\n        values,\n        candidates: sameContinentCandidates,\n        ...settings,\n    })\n\n    // If we have enough same-continent peers, return them\n    if (sameContinentPeers.length >= targetCount) return sameContinentPeers\n\n    // Otherwise, fill up with peers from other continents\n    const remainingCount = targetCount - sameContinentPeers.length\n    const otherContinentPeers = findClosestByLogDistance({\n        values,\n        candidates: otherContinentsCandidates,\n        ...settings,\n        targetCount: remainingCount,\n    })\n\n    const combinedPeers = [...sameContinentPeers, ...otherContinentPeers]\n\n    if (combinedPeers.length === 0) {\n        console.warn(\n            `No peers found within ${maxPeerRatio}x for ${target} (value: ${targetValue})`\n        )\n    }\n\n    return combinedPeers\n}\n\nconst findClosestByLogDistance = ({\n    values,\n    candidates,\n    targetValue,\n    targetCount = 3,\n    maxPeerRatio = 1.25,\n}: {\n    values: Map<EntityName, number>\n    candidates: EntityName[]\n    targetValue: number\n    targetCount: number\n    maxPeerRatio: number\n}): EntityName[] => {\n    const targetLogValue = Math.log(targetValue)\n    const maxLogDistance = Math.log(maxPeerRatio)\n\n    return R.pipe(\n        candidates,\n        R.map((entityName) => {\n            const value = values.get(entityName)\n            if (value === undefined) return undefined\n            return {\n                entityName,\n                // Log distance: |log(value) - log(target)| = |log(value/target)|\n                // Log distance so that 2x larger and 2x smaller are equidistant\n                difference: Math.abs(Math.log(value) - targetLogValue),\n            }\n        }),\n        R.filter(R.isDefined),\n        // Exclude peers that are more than maxPeerRatio times larger/smaller\n        R.filter(({ difference }) => difference <= maxLogDistance),\n        R.sortBy((item) => item.difference),\n        R.take(targetCount),\n        R.map((item) => item.entityName)\n    )\n}\n\n/**\n * Finds entities representing the data distribution using stratified sampling.\n *\n * Divides data into buckets (quintiles by default) and picks one entity from each:\n * - When randomize=false (default): picks the most populous country in each bucket\n * - When randomize=true: random selection weighted by population\n */\nexport function findDataRangePeers({\n    values,\n    population,\n    randomize = false,\n    targetCount = 5,\n}: {\n    values: Map<EntityName, number>\n    /** Population data for weighted selection (prefers larger countries) */\n    population: Map<EntityName, number>\n    targetCount?: number\n    /** If true, use randomized selection; if false, pick most populous */\n    randomize?: boolean\n}): EntityName[] {\n    const sortedData = R.pipe(\n        Array.from(values.entries()),\n        R.map(([entityName, value]) => ({ entityName, value })),\n        R.sortBy((item) => item.value)\n    )\n\n    if (sortedData.length === 0) return []\n\n    const bucketSize = Math.ceil(sortedData.length / targetCount)\n    const buckets = R.chunk(sortedData, bucketSize)\n\n    const selected = R.pipe(\n        buckets,\n        R.map((bucket) => {\n            if (bucket.length === 0) return undefined\n\n            return randomize\n                ? weightedRandomPick(bucket, population)\n                : maxPopulationPick(bucket, population)\n        }),\n        R.filter(R.isDefined)\n    )\n\n    return R.unique(selected)\n}\n\n/** Pick the entity with the highest population from the bucket */\nfunction maxPopulationPick(\n    bucket: { entityName: EntityName; value: number }[],\n    population: Map<EntityName, number>\n): EntityName | undefined {\n    return _.maxBy(bucket, (item) => population.get(item.entityName) ?? 0)\n        ?.entityName\n}\n\n/** Pick a random entity from the bucket, weighted by population */\nfunction weightedRandomPick(\n    bucket: { entityName: EntityName; value: number }[],\n    population: Map<EntityName, number>\n): EntityName | undefined {\n    // Calculate weights using population\n    const weights = bucket.map((item) => population.get(item.entityName) ?? 0)\n\n    const totalWeight = R.sum(weights)\n\n    // If no population data is available, just pick a random entity\n    if (totalWeight === 0) return R.sample(bucket, 1)[0]?.entityName\n\n    // Weighted random selection: imagine a number line divided into segments,\n    // where each country's segment size equals its weight. We pick a random\n    // point on the line, then walk through segments until we find which one\n    // contains our point. Countries with larger weights have larger segments,\n    // so they're more likely to be picked.\n    //\n    // Example with weights [5, 3, 2]:\n    //   |------Germany (5)------|--France (3)--|-Belgium (2)-|\n    //   0                        5              8             10\n    // A random point at 6.5 lands in France's segment, so France is picked.\n    let random = Math.random() * totalWeight\n    for (let i = 0; i < bucket.length; i++) {\n        random -= weights[i]\n        if (random <= 0) return bucket[i].entityName\n    }\n\n    return bucket[bucket.length - 1]?.entityName\n}\n","import {\n    EntityName,\n    FacetAxisDomain,\n    FacetStrategy,\n    GrapherQueryParams,\n    GrapherTabConfigOption,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n    MapRegionName,\n    ScaleType,\n    SeriesName,\n    StackMode,\n    PeerCountryStrategyQueryParam,\n    VALID_PEER_COUNTRY_STRATEGY_QUERY_PARAMS,\n} from \"@ourworldindata/types\"\nimport { parseFloatOrUndefined } from \"@ourworldindata/utils\"\nimport { parseGlobeRotation } from \"./GrapherUrl.js\"\nimport {\n    getEntityNamesParam,\n    getSelectedEntityNamesParam,\n    getFocusedSeriesNamesParam,\n} from \"./EntityUrlBuilder.js\"\nimport { isValidTabQueryParam } from \"../chart/ChartTabs.js\"\nimport { isValidDataTableFilter } from \"../dataTable/DataTable.js\"\nimport { DataTableFilter } from \"../dataTable/DataTableConstants.js\"\nimport { DownloadModalTabName } from \"../modal/DownloadModal.js\"\nimport { GrapherModal } from \"./GrapherConstants.js\"\nimport { isValidMapRegionName } from \"../mapCharts/MapHelpers.js\"\nimport { isValidPeerCountryStrategyQueryParam } from \"./PeerCountrySelection.js\"\n\n/**\n * Discriminated union representing the result of parsing a query parameter\n *\n * Possible states:\n * - `valid`: The parameter was present and successfully parsed\n * - `invalid`: The parameter was present but contained an invalid value\n * - `missing`: The parameter was not present in the query string\n */\nexport type ParsedParam<T> =\n    | { status: \"valid\"; value: T }\n    | { status: \"invalid\"; rawValue: string; reason: string }\n    | { status: \"missing\" }\n\n/** Helper to create a valid parse result */\nfunction valid<T>(value: T): ParsedParam<T> {\n    return { status: \"valid\", value }\n}\n\n/** Helper to create an invalid parse result */\nfunction invalid<T>(rawValue: string, reason: string): ParsedParam<T> {\n    return { status: \"invalid\", rawValue, reason }\n}\n\n/** Helper to create a missing parse result */\nfunction missing<T>(): ParsedParam<T> {\n    return { status: \"missing\" }\n}\n\n/** Valid values for the `overlay` query parameter */\nexport const OVERLAY_PARAM_VALUES = {\n    sources: \"sources\",\n    download: \"download\",\n    downloadData: \"download-data\",\n    downloadVis: \"download-vis\",\n} as const\n\nexport type OverlayParamValue =\n    (typeof OVERLAY_PARAM_VALUES)[keyof typeof OVERLAY_PARAM_VALUES]\n\nexport interface ParsedOverlay {\n    modal: GrapherModal\n    downloadTab?: DownloadModalTabName\n}\n\n/** Parses a boolean parameter that uses \"1\"/\"0\" string values */\nfunction parseBooleanOneZeroParam(\n    value: string | undefined\n): ParsedParam<boolean> {\n    if (value === undefined) return missing()\n    if (value === \"1\") return valid(true)\n    if (value === \"0\") return valid(false)\n    return invalid(value, `Expected \"1\" or \"0\", got \"${value}\"`)\n}\n\n/** Parses a scale type parameter (linear or log) */\nfunction parseScaleTypeParam(\n    value: string | undefined\n): ParsedParam<ScaleType> {\n    if (value === undefined) return missing()\n    if (value === ScaleType.linear || value === ScaleType.log)\n        return valid(value)\n    return invalid(\n        value,\n        `Invalid scale type. Valid options: ${Object.values(ScaleType).join(\", \")}`\n    )\n}\n\n/** Parses the `tab` query parameter */\nfunction parseTabParam(\n    value: string | undefined\n): ParsedParam<GrapherTabConfigOption> {\n    if (value === undefined) return missing()\n    if (isValidTabQueryParam(value)) return valid(value)\n    return invalid(\n        value,\n        `Invalid tab value. Valid options: ${Object.values(GRAPHER_TAB_CONFIG_OPTIONS).join(\", \")}`\n    )\n}\n\n/**\n * Parses the `overlay` query parameter.\n *\n * The \"embed\" value is intentionally ignored. In the past, there was\n * an issue where the embed modal URL was accidentally included in the\n * Embed dialog's URL, causing embeds to always show the modal.\n */\nfunction parseOverlayParam(\n    value: string | undefined\n): ParsedParam<ParsedOverlay> {\n    if (value === undefined) return missing()\n\n    switch (value) {\n        case OVERLAY_PARAM_VALUES.sources:\n            return valid({ modal: GrapherModal.Sources })\n        case OVERLAY_PARAM_VALUES.download:\n            return valid({ modal: GrapherModal.Download })\n        case OVERLAY_PARAM_VALUES.downloadData:\n            return valid({\n                modal: GrapherModal.Download,\n                downloadTab: DownloadModalTabName.Data,\n            })\n        case OVERLAY_PARAM_VALUES.downloadVis:\n            return valid({\n                modal: GrapherModal.Download,\n                downloadTab: DownloadModalTabName.Vis,\n            })\n        default:\n            return invalid(\n                value,\n                `Invalid overlay value. Valid options: ${Object.values(OVERLAY_PARAM_VALUES).join(\", \")}`\n            )\n    }\n}\n\n/** Parses the `stackMode` query parameter */\nfunction parseStackModeParam(\n    value: string | undefined\n): ParsedParam<StackMode> {\n    if (value === undefined) return missing()\n    if (value === StackMode.absolute || value === StackMode.relative) {\n        return valid(value)\n    }\n    return invalid(\n        value,\n        `Invalid stackMode value. Valid options: ${Object.values(StackMode).join(\", \")}`\n    )\n}\n\n/**\n * Validates a single time value (used in the `time` query parameter).\n *\n * Valid formats:\n * - Integer (possibly negative): -500, 2020, etc.\n * - ISO date string: 2020-01-15\n * - Special keywords: \"earliest\", \"latest\"\n */\nfunction isValidSingleTime(value: string): boolean {\n    // \"earliest\" or \"latest\"\n    if (value === \"earliest\" || value === \"latest\") return true\n\n    // Integer (possibly negative)\n    if (/^-?\\d+$/.test(value)) return true\n\n    // ISO date format (yyyy-mm-dd)\n    if (/^\\d{4}-[01]\\d-[0-3]\\d$/.test(value)) return true\n\n    return false\n}\n\n/**\n * Parses the `time` query parameter.\n *\n * Valid formats:\n * - Single time: \"2020\", \"-500\", \"2020-01-15\", \"earliest\", \"latest\"\n * - Time range: \"2010..2020\", \"earliest..2020\", \"2010..latest\", \"earliest..latest\"\n */\nfunction parseTimeParam(value: string | undefined): ParsedParam<string> {\n    if (value === undefined || value === \"\") return missing()\n\n    // Handle time ranges (e.g., \"2010..2020\")\n    if (value.includes(\"..\")) {\n        const parts = value.split(\"..\")\n        if (parts.length !== 2) {\n            return invalid(\n                value,\n                \"Invalid time range format. Expected 'start..end'\"\n            )\n        }\n\n        const [start, end] = parts\n\n        // Handle legacy formats like \"2015..\" or \"..2015\"\n        const startValid = start === \"\" || isValidSingleTime(start)\n        const endValid = end === \"\" || isValidSingleTime(end)\n\n        if (!startValid || !endValid) {\n            return invalid(\n                value,\n                \"Invalid time value. Expected integer, yyyy-mm-dd, 'earliest', or 'latest'\"\n            )\n        }\n\n        return valid(value)\n    }\n\n    // Handle single time values\n    if (isValidSingleTime(value)) return valid(value)\n\n    return invalid(\n        value,\n        \"Invalid time value. Expected integer, yyyy-mm-dd, 'earliest', or 'latest'\"\n    )\n}\n\n/** Parses the `globe` query parameter */\nfunction parseGlobeParam(value: string | undefined): ParsedParam<boolean> {\n    return parseBooleanOneZeroParam(value)\n}\n\n/** Parses the `globeRotation` query parameter */\nfunction parseGlobeRotationParam(\n    value: string | undefined\n): ParsedParam<[number, number]> {\n    if (value === undefined) return missing()\n\n    const rotation = parseGlobeRotation(value)\n    if (\n        rotation &&\n        rotation.length === 2 &&\n        !isNaN(rotation[0]) &&\n        !isNaN(rotation[1])\n    ) {\n        return valid(rotation)\n    }\n\n    return invalid(value, `Expected \"lat,lon\" format, got \"${value}\"`)\n}\n\n/** Parses the `globeZoom` query parameter */\nfunction parseGlobeZoomParam(value: string | undefined): ParsedParam<number> {\n    if (value === undefined) return missing()\n\n    const parsed = parseFloatOrUndefined(value)\n    if (parsed !== undefined) return valid(parsed)\n\n    return invalid(value, `Expected numeric value, got \"${value}\"`)\n}\n\n/** Parses the `region` query parameter */\nfunction parseRegionParam(\n    value: string | undefined\n): ParsedParam<MapRegionName> {\n    if (value === undefined) return missing()\n    if (isValidMapRegionName(value)) return valid(value)\n    return invalid(\n        value,\n        `Invalid region. Valid options: ${Object.values(MapRegionName).join(\", \")}`\n    )\n}\n\n/** Parses entity names from a query parameter */\nfunction parseEntityNamesParam(\n    value: string | undefined\n): ParsedParam<EntityName[]> {\n    if (value === undefined) return missing()\n\n    const names = getEntityNamesParam(value)\n    if (names) return valid(names)\n\n    return missing()\n}\n\n/** Parses the `country` query parameter */\nfunction parseCountryParam(\n    value: string | undefined\n): ParsedParam<EntityName[]> {\n    if (value === undefined) return missing()\n\n    const selection = getSelectedEntityNamesParam(value)\n\n    return valid(selection ?? [])\n}\n\n/** Parses the `focus` query parameter for focused series names */\nfunction parseFocusParam(value: string | undefined): ParsedParam<SeriesName[]> {\n    if (value === undefined) return missing()\n    const names = getFocusedSeriesNamesParam(value)\n    if (names) return valid(names)\n    return missing()\n}\n\n/** Parses the `facet` query parameter */\nfunction parseFacetParam(\n    value: string | undefined\n): ParsedParam<FacetStrategy> {\n    if (value === undefined) return missing()\n    if (isValidFacetStrategy(value)) return valid(value)\n    return invalid(\n        value,\n        `Invalid facet value. Valid options: ${Object.values(FacetStrategy).join(\", \")}`\n    )\n}\n\n/** Parses the `uniformYAxis` query parameter */\nfunction parseUniformYAxisParam(\n    value: string | undefined\n): ParsedParam<FacetAxisDomain> {\n    if (value === undefined) return missing()\n    if (value === \"0\") return valid(FacetAxisDomain.independent)\n    if (value === \"1\") return valid(FacetAxisDomain.shared)\n    return invalid(value, `Expected \"0\" or \"1\", got \"${value}\"`)\n}\n\n/** Parses the `showNoDataArea` query parameter */\nfunction parseShowNoDataAreaParam(\n    value: string | undefined\n): ParsedParam<boolean> {\n    return parseBooleanOneZeroParam(value)\n}\n\n/** Parses the deprecated `showSelectionOnlyInTable` query parameter */\nfunction parseShowSelectionOnlyInTableParam(\n    value: string | undefined\n): ParsedParam<DataTableFilter> {\n    if (value === undefined) return missing()\n    if (value === \"1\") return valid(\"selection\")\n    if (value === \"0\") return valid(\"all\")\n    return invalid(value, `Expected \"0\" or \"1\", got \"${value}\"`)\n}\n\n/** Parses the `tableFilter` query parameter */\nfunction parseTableFilterParam(\n    value: string | undefined\n): ParsedParam<DataTableFilter> {\n    if (value === undefined) return missing()\n    if (isValidDataTableFilter(value)) return valid(value)\n    return invalid(value, \"Invalid tableFilter value\")\n}\n\n/** Parses the `tableSearch` query parameter */\nfunction parseTableSearchParam(value: string | undefined): ParsedParam<string> {\n    if (value === undefined || value === \"\") return missing()\n    return valid(value)\n}\n\n/** Parses the `endpointsOnly` query parameter */\nfunction parseEndpointsOnlyParam(\n    value: string | undefined\n): ParsedParam<boolean> {\n    return parseBooleanOneZeroParam(value)\n}\n\n/** Parses the `zoomToSelection` query parameter */\nfunction parseZoomToSelectionParam(\n    value: string | undefined\n): ParsedParam<true> {\n    if (value === undefined) return missing()\n    if (value === \"true\") return valid(true)\n    return missing()\n}\n\nfunction parsePeerCountriesParam(\n    value: string | undefined\n): ParsedParam<PeerCountryStrategyQueryParam> {\n    if (value === undefined) return missing()\n\n    if (isValidPeerCountryStrategyQueryParam(value)) return valid(value)\n\n    return invalid(\n        value,\n        `Invalid peerCountries value. Valid options: ${VALID_PEER_COUNTRY_STRATEGY_QUERY_PARAMS.join(\", \")}`\n    )\n}\n\n/** Maps each GrapherQueryParams key to its parsed value type */\ntype ParsedValueTypeMap = {\n    tab: GrapherTabConfigOption\n    overlay: ParsedOverlay\n    stackMode: StackMode\n    zoomToSelection: true\n    xScale: ScaleType\n    yScale: ScaleType\n    time: string\n    endpointsOnly: boolean\n    globe: boolean\n    globeRotation: [number, number]\n    globeZoom: number\n    region: MapRegionName\n    mapSelect: EntityName[]\n    country: EntityName[]\n    focus: SeriesName[]\n    facet: FacetStrategy\n    uniformYAxis: FacetAxisDomain\n    showNoDataArea: boolean\n    showSelectionOnlyInTable: DataTableFilter\n    tableFilter: DataTableFilter\n    tableSearch: string\n    peerCountries: PeerCountryStrategyQueryParam\n}\n\n/**\n * Compile-time check: ensures ParsedValueTypeMap has all keys from GrapherQueryParams.\n * If a key is added to GrapherQueryParams but not ParsedValueTypeMap, this will cause\n * a type error.\n */\ntype _AssertAllKeysPresent =\n    keyof GrapherQueryParams extends keyof ParsedValueTypeMap\n        ? keyof ParsedValueTypeMap extends keyof GrapherQueryParams\n            ? true\n            : never\n        : never\nconst _assertAllKeysPresent: _AssertAllKeysPresent = true\n\n/** Container for all parsed query parameters */\nexport type ParsedGrapherQueryParams = {\n    [K in keyof Required<GrapherQueryParams>]: ParsedParam<\n        ParsedValueTypeMap[K]\n    >\n}\n\n/** Parses all Grapher query parameters from a GrapherQueryParams object */\nexport function parseGrapherQueryParams(\n    params: GrapherQueryParams\n): ParsedGrapherQueryParams {\n    return {\n        tab: parseTabParam(params.tab),\n        overlay: parseOverlayParam(params.overlay),\n        stackMode: parseStackModeParam(params.stackMode),\n        zoomToSelection: parseZoomToSelectionParam(params.zoomToSelection),\n        xScale: parseScaleTypeParam(params.xScale),\n        yScale: parseScaleTypeParam(params.yScale),\n        time: parseTimeParam(params.time),\n        endpointsOnly: parseEndpointsOnlyParam(params.endpointsOnly),\n        globe: parseGlobeParam(params.globe),\n        globeRotation: parseGlobeRotationParam(params.globeRotation),\n        globeZoom: parseGlobeZoomParam(params.globeZoom),\n        region: parseRegionParam(params.region),\n        mapSelect: parseEntityNamesParam(params.mapSelect),\n        country: parseCountryParam(params.country),\n        focus: parseFocusParam(params.focus),\n        facet: parseFacetParam(params.facet),\n        uniformYAxis: parseUniformYAxisParam(params.uniformYAxis),\n        showNoDataArea: parseShowNoDataAreaParam(params.showNoDataArea),\n        showSelectionOnlyInTable: parseShowSelectionOnlyInTableParam(\n            params.showSelectionOnlyInTable\n        ),\n        tableFilter: parseTableFilterParam(params.tableFilter),\n        tableSearch: parseTableSearchParam(params.tableSearch),\n        peerCountries: parsePeerCountriesParam(params.peerCountries),\n    }\n}\n\n/** Logs all invalid query parameters to the console */\nexport function logInvalidQueryParams(parsed: ParsedGrapherQueryParams): void {\n    const entries = Object.entries(parsed) as [\n        keyof ParsedGrapherQueryParams,\n        ParsedParam<unknown>,\n    ][]\n\n    for (const [key, result] of entries) {\n        if (result.status === \"invalid\") {\n            console.error(\n                `Invalid query parameter \"${key}\": ${result.reason} (raw value: \"${result.rawValue}\")`\n            )\n        }\n    }\n}\n\nfunction isValidFacetStrategy(value: string): value is FacetStrategy {\n    return Object.values(FacetStrategy).includes(value as any)\n}\n","import { RelatedQuestionsConfig } from \"@ourworldindata/types\"\n\nexport const getErrorMessageRelatedQuestionUrl = (\n    question: RelatedQuestionsConfig\n): string | undefined => {\n    return question.text\n        ? (!question.url && \"Missing URL\") ||\n              (!question.url.match(/^https?:\\/\\//) &&\n                  \"URL should start with http(s)://\") ||\n              undefined\n        : undefined\n}\n","import * as _ from \"lodash-es\"\nimport {\n    ColumnSlug,\n    getOriginAttributionFragments,\n} from \"@ourworldindata/utils\"\nimport {\n    ColumnTypeMap,\n    CoreColumn,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport {\n    DimensionProperty,\n    GrapherTabName,\n    GRAPHER_TAB_NAMES,\n} from \"@ourworldindata/types\"\nimport { isPopulationVariableETLPath } from \"./GrapherConstants.js\"\nimport {\n    isChartTab,\n    getSupportedDimensionsForChartTypes,\n} from \"../chart/ChartTabs.js\"\n\nexport const pickColumnsForSourcesLine = ({\n    table,\n    yColumnSlugs,\n    xColumnSlug,\n    colorColumnSlug,\n    sizeColumnSlug,\n    activeTab,\n}: {\n    table: OwidTable\n    yColumnSlugs: ColumnSlug[]\n    xColumnSlug?: ColumnSlug\n    colorColumnSlug?: ColumnSlug\n    sizeColumnSlug?: ColumnSlug\n    activeTab?: GrapherTabName\n}): ColumnSlug[] => {\n    const activeDimensions = new Set(\n        activeTab\n            ? getDimensionPropertiesForActiveTab(activeTab)\n            : getDimensionPropertiesForActiveTab(GRAPHER_TAB_NAMES.Table)\n    )\n\n    const columnSlugs: ColumnSlug[] = []\n\n    // Include all y-columns\n    if (activeDimensions.has(DimensionProperty.y)) {\n        columnSlugs.push(...yColumnSlugs)\n    }\n\n    // Include color dimension, excluding:\n    // - Continents variable\n    if (colorColumnSlug && activeDimensions.has(DimensionProperty.color)) {\n        const colorColumn = table.get(colorColumnSlug)\n        if (!(colorColumn instanceof ColumnTypeMap.Continent)) {\n            columnSlugs.push(colorColumnSlug)\n        }\n    }\n\n    // Include x dimension, excluding:\n    // - Population variable when used in Marimekko charts\n    if (xColumnSlug && activeDimensions.has(DimensionProperty.x)) {\n        const xColumn = table.get(xColumnSlug).def\n        const isPopulationVariable = isPopulationVariableETLPath(\n            xColumn?.catalogPath ?? \"\"\n        )\n        const isMarimekko = activeTab === GRAPHER_TAB_NAMES.Marimekko\n        if (!(isMarimekko && isPopulationVariable)) {\n            columnSlugs.push(xColumnSlug)\n        }\n    }\n\n    // Include size dimension, excluding:\n    // - Population variable\n    if (sizeColumnSlug && activeDimensions.has(DimensionProperty.size)) {\n        const sizeColumn = table.get(sizeColumnSlug).def\n        const isPopulationVariable = isPopulationVariableETLPath(\n            sizeColumn?.catalogPath ?? \"\"\n        )\n        if (!isPopulationVariable) {\n            columnSlugs.push(sizeColumnSlug)\n        }\n    }\n\n    return _.uniq(columnSlugs)\n}\n\n/**\n * Determines which dimension properties (y, x, color, size) are relevant\n * for the active tab\n */\nconst getDimensionPropertiesForActiveTab = (\n    tab: GrapherTabName\n): DimensionProperty[] => {\n    const { x, y, color, size } = DimensionProperty\n\n    // Only include dimensions relevant to the active chart type\n    // (e.g. exclude x dimension for line charts)\n    if (isChartTab(tab)) return getSupportedDimensionsForChartTypes([tab])\n\n    // Only include y dimension for the map tab\n    if (tab === GRAPHER_TAB_NAMES.WorldMap) return [y]\n\n    // Include all dimensions for the table tab\n    return [y, x, color, size]\n}\n\n/**\n * Build a sources line from an array of columns.\n * Extracts attributions from column metadata and joins them into a single string.\n */\nexport const buildSourcesLineFromColumns = (columns: CoreColumn[]): string => {\n    const columnsWithSources = columns.filter(\n        (column) => !!column.source.name || !_.isEmpty(column.def.origins)\n    )\n\n    const attributions = columnsWithSources.flatMap((column) => {\n        const { presentation = {} } = column.def\n        // If the variable metadata specifies an attribution on the\n        // variable level then this is preferred over assembling it from\n        // the source and origins\n        if (\n            presentation.attribution !== undefined &&\n            presentation.attribution !== \"\"\n        )\n            return [presentation.attribution]\n        else {\n            const originFragments = getOriginAttributionFragments(\n                column.def.origins\n            )\n            return [column.source.name, ...originFragments]\n        }\n    })\n\n    const uniqueAttributions = _.uniq(_.compact(attributions))\n\n    if (uniqueAttributions.length > 3)\n        return `${uniqueAttributions[0]} and other sources`\n\n    return uniqueAttributions.join(\"; \")\n}\n","import {\n    MarkdownTextWrap,\n    sumTextWrapHeights,\n    reactRenderToStringClientOnly,\n} from \"@ourworldindata/components\"\nimport {\n    OwidTable,\n    BlankOwidTable,\n    CoreColumn,\n    ColumnTypeMap,\n    TimeColumn,\n    MissingColumn,\n    makeOriginalTimeSlugFromColumnSlug,\n    ErrorValueTypes,\n    isNotErrorValueOrEmptyCell,\n    makeAnnotationsSlug,\n} from \"@ourworldindata/core-table\"\nimport {\n    GrapherChartType,\n    GRAPHER_CHART_TYPES,\n    AnnotationFieldsInTitle,\n    TimeBound,\n    Time,\n    EntitySelectionMode,\n    StackMode,\n    LogoOption,\n    GrapherTabConfigOption,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n    ColorSchemeName,\n    ScatterPointLabelStrategy,\n    MissingDataStrategy,\n    ColumnSlugs,\n    ColumnSlug,\n    EntityName,\n    SeriesName,\n    ComparisonLineConfig,\n    RelatedQuestionsConfig,\n    FacetStrategy,\n    SortBy,\n    SortOrder,\n    QueryParams,\n    LegacyGrapherInterface,\n    ArchiveContext,\n    AdditionalGrapherDataFetchFn,\n    GrapherInterface,\n    grapherKeysToSerialize,\n    GrapherQueryParams,\n    GRAPHER_QUERY_PARAM_KEYS,\n    ScaleType,\n    TimeBounds,\n    GrapherTabName,\n    GRAPHER_TAB_NAMES,\n    AxisConfigInterface,\n    SeriesStrategy,\n    GRAPHER_MAP_TYPE,\n    GrapherVariant,\n    SeriesColorMap,\n    OwidChartDimensionInterface,\n    DimensionProperty,\n    DetailsMarker,\n    EnrichedDetail,\n    ProjectionColumnInfo,\n    OwidColumnDef,\n    SortConfig,\n    Color,\n    GlobeRegionName,\n    GrapherWindowType,\n    MapRegionName,\n    OwidTableSlugs,\n    PeerCountryStrategy,\n} from \"@ourworldindata/types\"\nimport {\n    objectWithPersistablesToObject,\n    deleteRuntimeAndUnchangedProps,\n    minTimeToJSON,\n    maxTimeToJSON,\n    updatePersistables,\n    minTimeBoundFromJSONOrNegativeInfinity,\n    maxTimeBoundFromJSONOrPositiveInfinity,\n    Url,\n    getTimeDomainFromQueryString,\n    findClosestTime,\n    Bounds,\n    excludeUndefined,\n    isInIFrame,\n    slugify,\n    extractDetailsFromSyntax,\n    lowerCaseFirstLetterUnlessAbbreviation,\n    isTouchDevice,\n    omitUndefinedValues,\n    firstOfNonEmptyArray,\n    getWindowUrl,\n    isArrayDifferentFromReference,\n    differenceObj,\n    queryParamsToStr,\n    timeBoundToTimeBoundString,\n    getRegionByName,\n    checkIsCountry,\n    checkIsOwidContinent,\n    checkIsIncomeGroup,\n    checkHasMembers,\n    sortNumeric,\n    isMobile,\n} from \"@ourworldindata/utils\"\nimport Cookies from \"js-cookie\"\nimport * as _ from \"lodash-es\"\nimport {\n    computed,\n    action,\n    makeObservable,\n    observable,\n    autorun,\n    runInAction,\n} from \"mobx\"\nimport React from \"react\"\nimport * as R from \"remeda\"\nimport { match } from \"ts-pattern\"\nimport { AxisConfig, AxisManager } from \"../axis/AxisConfig.js\"\nimport {\n    GrapherRasterizeFn,\n    StaticChartRasterizer,\n} from \"../captionedChart/StaticChartRasterizer.js\"\nimport { Chart } from \"../chart/Chart.js\"\nimport {\n    ChartDimension,\n    LegacyDimensionsManager,\n} from \"../chart/ChartDimension.js\"\nimport { ChartState } from \"../chart/ChartInterface.js\"\nimport {\n    isChartTypeName,\n    isChartTab,\n    isMapTab,\n    findValidChartTypeCombination,\n    mapChartTypeNameToTabConfigOption,\n    mapTabConfigOptionToChartTypeName,\n    getSupportedDimensionsForChartTypes,\n} from \"../chart/ChartTabs.js\"\nimport { makeChartState } from \"../chart/ChartTypeMap.js\"\nimport {\n    autoDetectSeriesStrategy,\n    autoDetectYColumnSlugs,\n} from \"../chart/ChartUtils.js\"\nimport { DimensionSlot } from \"../chart/DimensionSlot.js\"\nimport {\n    GRAPHER_LIGHT_TEXT,\n    GRAPHER_BACKGROUND_DEFAULT,\n} from \"../color/ColorConstants.js\"\nimport { ColorScaleConfig } from \"../color/ColorScaleConfig.js\"\nimport {\n    DataTableConfig,\n    DataTableManager,\n} from \"../dataTable/DataTableConstants.js\"\nimport {\n    type EntitySelectorState,\n    EntitySelector,\n} from \"../entitySelector/EntitySelector.js\"\nimport { FacetChart } from \"../facet/FacetChart.js\"\nimport { FocusArray } from \"../focus/FocusArray.js\"\nimport { GlobeController } from \"../mapCharts/GlobeController.js\"\nimport {\n    MAP_REGION_LABELS,\n    MAP_REGION_NAMES,\n    MapChartManager,\n} from \"../mapCharts/MapChartConstants.js\"\nimport { MapConfig } from \"../mapCharts/MapConfig.js\"\nimport { getCountriesByRegion } from \"../mapCharts/MapHelpers.js\"\nimport {\n    DownloadModalManager,\n    DownloadModalTabName,\n} from \"../modal/DownloadModal.js\"\nimport { SelectionArray } from \"../selection/SelectionArray.js\"\nimport { SlideShowController } from \"../slideshowController/SlideShowController.js\"\nimport {\n    TimelineDragTarget,\n    TimelineController,\n    TimelineManager,\n} from \"../timeline/TimelineController.js\"\nimport { TooltipManager } from \"../tooltip/TooltipProps.js\"\nimport {\n    RegionGroup,\n    groupEntitiesByRegionType,\n    EntitiesByRegionGroup,\n    isEntityRegionGroupKey,\n} from \"./RegionGroups.js\"\nimport {\n    MinimalNarrativeChartInfo,\n    GrapherProgrammaticInterface,\n    GrapherManager,\n} from \"./Grapher.js\"\nimport { GrapherAnalytics } from \"./GrapherAnalytics.js\"\nimport {\n    type GrapherAnalyticsContext,\n    type EntitySelectorEvent,\n    type GrapherImageDownloadEvent,\n    type GrapherInteractionEvent,\n} from \"@ourworldindata/types\"\nimport {\n    latestGrapherConfigSchema,\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL,\n    GRAPHER_FRAME_PADDING_HORIZONTAL,\n    GRAPHER_FRAME_PADDING_VERTICAL,\n    DEFAULT_GRAPHER_BOUNDS,\n    GrapherModal,\n    CookieKey,\n    GRAPHER_PROD_URL,\n    BASE_FONT_SIZE,\n    DEFAULT_GRAPHER_WIDTH,\n    DEFAULT_GRAPHER_HEIGHT,\n    STATIC_EXPORT_DETAIL_SPACING,\n    DEFAULT_GRAPHER_BOUNDS_SQUARE,\n    CHART_TYPES_THAT_SHOW_ALL_ENTITIES,\n} from \"./GrapherConstants.js\"\nimport { grapherObjectToQueryParams } from \"./GrapherUrl.js\"\nimport {\n    parseGrapherQueryParams,\n    logInvalidQueryParams,\n} from \"./GrapherQueryParamParser.js\"\nimport { legacyToCurrentGrapherQueryParams } from \"./GrapherUrlMigrations.js\"\nimport { getErrorMessageRelatedQuestionUrl } from \"./relatedQuestion.js\"\nimport {\n    buildSourcesLineFromColumns,\n    pickColumnsForSourcesLine,\n} from \"./sourcesLine.js\"\nimport { ChartManager } from \"../chart/ChartManager.js\"\nimport { CaptionedChartManager } from \"../captionedChart/CaptionedChart.js\"\nimport { SourcesModalManager } from \"../modal/SourcesModal.js\"\nimport { DiscreteBarChartManager } from \"../barCharts/DiscreteBarChartConstants.js\"\nimport { ShareMenuManager } from \"../controls/ShareMenu.js\"\nimport { EmbedModalManager } from \"../modal/EmbedModal.js\"\nimport { ScatterPlotManager } from \"../scatterCharts/ScatterPlotChartConstants.js\"\nimport { MarimekkoChartManager } from \"../stackedCharts/MarimekkoChartConstants.js\"\nimport { FacetChartManager } from \"../facet/FacetChartConstants.js\"\nimport { EntitySelectorModalManager } from \"../modal/EntitySelectorModal.js\"\nimport { SettingsMenuManager } from \"../controls/SettingsMenu.js\"\nimport { SlopeChartManager } from \"../slopeCharts/SlopeChartConstants.js\"\nimport { selectPeerCountriesForGrapher } from \"./PeerCountrySelection.js\"\n\nexport class GrapherState\n    implements\n        AxisManager,\n        TooltipManager,\n        CaptionedChartManager,\n        ChartManager,\n        DiscreteBarChartManager,\n        ScatterPlotManager,\n        MarimekkoChartManager,\n        MapChartManager,\n        SlopeChartManager,\n        DataTableManager,\n        FacetChartManager,\n        TimelineManager,\n        SettingsMenuManager,\n        EntitySelectorModalManager,\n        DownloadModalManager,\n        SourcesModalManager,\n        EmbedModalManager,\n        ShareMenuManager,\n        LegacyDimensionsManager\n{\n    //\n    // Chart settings persisted in the config\n    //\n\n    /** Url of the concrete schema version to use to validate this document */\n    $schema = latestGrapherConfigSchema\n\n    /** Internal database id */\n    id: number | undefined = undefined\n\n    /** Chart config version */\n    version = 1\n\n    /** Slug of the chart on Our World In Data */\n    slug: string | undefined = undefined\n\n    /** Big title text of the chart */\n    title: string | undefined = undefined\n\n    /** The longer subtitle text to show beneath the title */\n    subtitle: string | undefined = undefined\n\n    /** Indicates if the chart is published on Our World In Data or still in draft */\n    isPublished: boolean | undefined = undefined\n\n    /** The page containing this chart where more context can be found */\n    originUrl: string | undefined = undefined\n\n    /** Short comma-separated list of source names */\n    sourceDesc: string | undefined = undefined\n\n    /** Note displayed in the footer of the chart */\n    note: string | undefined = undefined\n\n    /** Additional text used internally to differentiate charts with the same title */\n    internalNotes: string | undefined = undefined\n\n    /** Optional internal variant name for distinguishing charts with the same title */\n    variantName: string | undefined = undefined\n\n    /** List of dimensions and their mapping to variables */\n    dimensions: ChartDimension[] = []\n\n    /** The initial selection of entities */\n    selectedEntityNames: EntityName[] = []\n\n    /** The initially focused chart elements. Is either a list of entity or variable names. Only works for line and slope charts for now. */\n    focusedSeriesNames: SeriesName[] = []\n\n    /** Entities that should be excluded (opposite of includedEntityNames) */\n    excludedEntityNames: EntityName[] | undefined = undefined\n\n    /** Entities that should be included (opposite of excludedEntityNames). If empty, all available entities are used. If set, all entities not specified here are excluded. excludedEntityNames are evaluated afterwards and can still remove entities even if they were included before. */\n    includedEntityNames: EntityName[] | undefined = undefined\n\n    /** Colors for selected entities */\n    selectedEntityColors: { [entityName: string]: string | undefined } = {}\n\n    /** Strategy for selecting peer countries for comparison */\n    peerCountryStrategy: PeerCountryStrategy | undefined = undefined\n\n    /** Whether the user can change countries, add additional ones or neither */\n    addCountryMode = EntitySelectionMode.MultipleEntities\n\n    /**\n     * Display string for naming the primary entities of the data.\n     *\n     * The default is 'country or region', but you can specify a different one\n     * such as 'state' or 'region'\n     */\n    entityType = DEFAULT_GRAPHER_ENTITY_TYPE\n\n    /** Plural of the entity type (e.g. when entityType is 'country' this would be 'countries') */\n    entityTypePlural = DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL\n\n    /**\n     * Display string that replaces 'metric' in the 'Split by metric' label in\n     * facet controls (e.g. 'product' displays 'Split by product')\n     */\n    facettingLabelByYVariables = \"metric\"\n\n    /** Which chart types should be shown */\n    chartTypes: GrapherChartType[] = [\n        GRAPHER_CHART_TYPES.LineChart,\n        GRAPHER_CHART_TYPES.DiscreteBar,\n    ]\n\n    /** Indicates if the map tab should be shown */\n    hasMapTab = false\n\n    /** The tab that is shown initially */\n    tab: GrapherTabConfigOption = GRAPHER_TAB_CONFIG_OPTIONS.chart\n\n    /** Configuration of the x-axis */\n    xAxis = new AxisConfig(undefined, this)\n\n    /** Configuration of the y-axis */\n    yAxis = new AxisConfig(undefined, this)\n\n    /** Color scale definition */\n    colorScale = new ColorScaleConfig()\n\n    /** Configuration of the world map chart */\n    map = new MapConfig()\n\n    /** One of the predefined base color schemes. If not provided, a default is automatically chosen based on the chart type. */\n    baseColorScheme: ColorSchemeName | undefined = undefined\n\n    /** Reverse the order of colors in the color scheme */\n    invertColorScheme: boolean | undefined = undefined\n\n    /** Which logo to show on the upper right side */\n    logo: LogoOption | undefined = undefined\n\n    /**\n     * Whether to hide the inline series labels drawn at the end of each\n     * series. Applies to line, slope, and stacked area charts\n     */\n    hideSeriesLabels: boolean | undefined = false\n\n    /** Whether to hide the logo */\n    hideLogo: boolean | undefined = undefined\n\n    /** Whether to hide the relative mode UI toggle */\n    hideRelativeToggle: boolean | undefined = true\n\n    /** Whether to hide connecting lines on scatter plots when a time range is selected */\n    hideConnectedScatterLines: boolean | undefined = undefined\n\n    /** Hide entity names in Scatter plots */\n    hideScatterLabels: boolean | undefined = undefined\n\n    /** Whether to hide the total value label (used on stacked discrete bar charts) */\n    hideTotalValueLabel: boolean | undefined = undefined\n\n    /** Whether to hide the faceting control */\n    hideFacetControl = true\n\n    /** Whether to hide any automatically added title annotations like the selected year */\n    hideAnnotationFieldsInTitle: AnnotationFieldsInTitle | undefined = undefined\n\n    /** Start point of the initially selected time span */\n    minTime: TimeBound | undefined = undefined\n\n    /** End point of the initially selected time span */\n    maxTime: TimeBound | undefined = undefined\n\n    /**\n     * The lowest year to show in the timeline.\n     *\n     * If this is set then the user is not able to see any data before this year.\n     * If set to \"earliest\", then the earliest year in the data is used.\n     */\n    timelineMinTime: Time | undefined = undefined\n\n    /** The highest year to show in the timeline.\n     *\n     * If this is set then the user is not able to see any data after this year.\n     * If set to \"latest\", then the latest year in the data is used.\n     */\n    timelineMaxTime: Time | undefined = undefined\n\n    /**\n     * Whether to hide the timeline from the user. If it is hidden then the\n     * user can't change the time\n     */\n    hideTimeline: boolean | undefined = undefined\n\n    /** Stack mode */\n    stackMode = StackMode.absolute\n\n    /** Whether to zoom to the selected data points */\n    zoomToSelection: boolean | undefined = undefined\n\n    /** Whether to show year labels in bar charts */\n    showYearLabels: boolean | undefined = undefined\n\n    /** Whether to show an area for entities that have no data (used in marimekko charts) */\n    showNoDataArea = true\n\n    /** Drops in between points in scatter plots */\n    compareEndPointsOnly: boolean | undefined = undefined\n\n    /** Exclude entities that do not belong in any color group */\n    matchingEntitiesOnly: boolean | undefined = undefined\n\n    /** The desired strategy for handling entities with missing data */\n    missingDataStrategy: MissingDataStrategy | undefined = undefined\n\n    /** When a user hovers over a connected series line in a ScatterPlot we show a label for each point. By default that value will be from the \"year\" column but by changing this option the column used for the x or y axis could be used instead. */\n    scatterPointLabelStrategy: ScatterPointLabelStrategy | undefined = undefined\n\n    /** The desired facetting strategy (none for no facetting) */\n    selectedFacetStrategy: FacetStrategy | undefined = undefined\n\n    /** Sort criterion (used by stacked bar charts and marimekko) */\n    sortBy: SortBy | undefined = SortBy.total\n\n    /** Sort order (used by stacked bar charts and marimekko) */\n    sortOrder: SortOrder | undefined = SortOrder.desc\n\n    /** Sort column if sortBy is column (used by stacked bar charts and marimekko) */\n    sortColumnSlug: string | undefined = undefined\n\n    /** List of comparison lines to draw */\n    comparisonLines: ComparisonLineConfig[] | undefined = undefined\n\n    /** Links to related questions */\n    relatedQuestions: RelatedQuestionsConfig[] | undefined = undefined\n\n    //\n    // Internal state not persisted in the config\n    //\n\n    /** Optional external manager */\n    private readonly manager: GrapherManager | undefined = undefined\n\n    /** Reference to the root DOM element containing the grapher */\n    base = React.createRef<HTMLDivElement>()\n\n    /** Initial options passed when creating the GrapherState instance */\n    initialOptions: GrapherProgrammaticInterface\n\n    /** The complete data table for the chart */\n    _inputTable: OwidTable = new OwidTable()\n\n    /** Optional custom function for fetching additional data beyond the main table */\n    additionalDataLoaderFn: AdditionalGrapherDataFetchFn | undefined = undefined\n\n    /** The original config as authored, used to detect user changes from authored defaults */\n    legacyConfigAsAuthored: Partial<LegacyGrapherInterface> = {}\n\n    /** Query parameters that don't correspond to standard Grapher parameters (like tab, time, etc.) */\n    externalQueryParams: QueryParams = {}\n\n    // These are explicitly set to `false` if FetchingGrapher or some other\n    // external code is fetching the config and data\n    isConfigReady: boolean | undefined = true\n    isDataReady: boolean | undefined = true\n\n    // Used in explorers\n    ySlugs: ColumnSlugs | undefined = undefined\n    xSlug: ColumnSlug | undefined = undefined\n    colorSlug: ColumnSlug | undefined = undefined\n    sizeSlug: ColumnSlug | undefined = undefined\n    tableSlugs: ColumnSlugs | undefined = undefined\n\n    bakedGrapherURL: string | undefined = undefined\n    adminBaseUrl: string | undefined = undefined\n\n    isEmbeddedInAnOwidPage?: boolean = false\n    isEmbeddedInADataPage?: boolean = false\n\n    archiveContext?: ArchiveContext\n    narrativeChartInfo?: MinimalNarrativeChartInfo = undefined\n\n    analytics: GrapherAnalytics\n\n    tooltip?: TooltipManager[\"tooltip\"] = observable.box(undefined, {\n        deep: false,\n    })\n\n    variant = GrapherVariant.Default\n\n    /** Whether to hide a chart's legends */\n    hideLegend: boolean | undefined = false\n\n    /**\n     * Minimal labeling is used in search when a thumbnail is embedded\n     * alongside a complementary table because the table already provides a lot\n     * of information, which is why the chart can be simplified to avoid\n     * redundancy and visual clutter\n     */\n    useMinimalLabeling = false\n\n    // Bounds\n    staticBounds: Bounds = DEFAULT_GRAPHER_BOUNDS\n    _externalBounds: Bounds | undefined = undefined\n\n    selection: SelectionArray = new SelectionArray()\n    focusArray = new FocusArray()\n\n    dataTableConfig: DataTableConfig = { filter: \"all\", search: \"\" }\n\n    entitySelectorState: Partial<EntitySelectorState> = {}\n\n    /**\n     * Used to highlight particular times in a line chart.\n     * The sparkline in map tooltips makes use of this.\n     */\n    highlightedTimesInLineChart?: Time[]\n\n    timelineController = new TimelineController(this)\n    globeController = new GlobeController(this)\n\n    /** Keeps a running cache of series colors at the Grapher level. */\n    seriesColorMap: SeriesColorMap = new Map()\n\n    isEntitySelectorModalOrDrawerOpen = false\n    activeModal?: GrapherModal\n    activeDownloadModalTab: DownloadModalTabName = DownloadModalTabName.Vis\n    isShareMenuActive = false\n\n    isTimelineAnimationPlaying = false\n    /** True if the timeline animation is either playing or paused but not finished */\n    isTimelineAnimationActive = false\n    animationStartTime: Time | undefined = undefined\n    areHandlesOnSameTimeBeforeAnimation: boolean | undefined = undefined\n    /** Which timeline element is currently being dragged */\n    timelineDragTarget: TimelineDragTarget | undefined = undefined\n\n    // Display flags\n    hasTableTab = true\n    hideTitle = false\n    hideSubtitle = false\n    hideNote = false\n    hideOriginUrl = false\n    hideEntityControls = false\n    hideShareButton = false\n    hideExploreTheDataButton = true\n    hideRelatedQuestion = false\n    canHideExternalControlsInEmbed: boolean = false\n    hideExternalControlsInEmbedUrl: boolean =\n        this.canHideExternalControlsInEmbed\n    forceHideAnnotationFieldsInTitle: AnnotationFieldsInTitle = {\n        entity: false,\n        time: false,\n        changeInPrefix: false,\n    }\n\n    /** Whether to allow entity selection via map interactions */\n    enableMapSelection = false\n\n    isExportingToSvgOrPng = false\n    isWikimediaExport = false\n    shouldIncludeDetailsInStaticExport = true\n\n    /** Base font size for responsive scaling of chart elements */\n    _baseFontSize = BASE_FONT_SIZE\n\n    _isInFullScreenMode = false\n    windowInnerWidth: number | undefined = undefined\n    windowInnerHeight: number | undefined = undefined\n    screenHeight: number | undefined = undefined\n\n    enableKeyboardShortcuts: boolean = false\n    bindUrlToWindow: boolean = false\n\n    slideShow: SlideShowController<any> | undefined = undefined\n\n    private shouldApplyPeerCountries: boolean = false\n\n    /**\n     * Cached promise for peer country application to prevent duplicate operations.\n     *\n     * When peer countries are being applied asynchronously, this stores the promise\n     * so that subsequent calls to applyPeerCountriesIfNeeded() will wait for the\n     * existing operation instead of starting a new one. This prevents race conditions\n     * when the function is called from multiple places (e.g., inputTable setter and\n     * generateStaticSvg).\n     */\n    private peerCountriesPromise: Promise<void> | undefined = undefined\n\n    /** Whether the grapher is running in the editor */\n    private isEditor =\n        typeof window !== \"undefined\" && (window as any).isEditor === true\n\n    disposers: (() => void)[] = []\n\n    constructor(options: GrapherProgrammaticInterface) {\n        makeObservable(this, {\n            $schema: observable.ref,\n            chartTypes: observable.ref,\n            id: observable.ref,\n            version: observable.ref,\n            slug: observable.ref,\n            title: observable.ref,\n            subtitle: observable.ref,\n            sourceDesc: observable.ref,\n            note: observable.ref,\n            internalNotes: observable.ref,\n            variantName: observable.ref,\n            originUrl: observable.ref,\n            hideAnnotationFieldsInTitle: observable,\n            minTime: observable.ref,\n            maxTime: observable.ref,\n            timelineMinTime: observable.ref,\n            timelineMaxTime: observable.ref,\n            addCountryMode: observable.ref,\n            stackMode: observable.ref,\n            showNoDataArea: observable.ref,\n            hideLegend: observable.ref,\n            hideSeriesLabels: observable.ref,\n            logo: observable.ref,\n            hideLogo: observable.ref,\n            hideRelativeToggle: observable.ref,\n            entityType: observable.ref,\n            entityTypePlural: observable.ref,\n            facettingLabelByYVariables: observable.ref,\n            hideTimeline: observable.ref,\n            zoomToSelection: observable.ref,\n            showYearLabels: observable.ref,\n            hasMapTab: observable.ref,\n            tab: observable.ref,\n            isPublished: observable.ref,\n            baseColorScheme: observable.ref,\n            invertColorScheme: observable.ref,\n            hideConnectedScatterLines: observable,\n            hideScatterLabels: observable.ref,\n            scatterPointLabelStrategy: observable,\n            peerCountryStrategy: observable.ref,\n            compareEndPointsOnly: observable.ref,\n            matchingEntitiesOnly: observable.ref,\n            hideTotalValueLabel: observable.ref,\n            missingDataStrategy: observable.ref,\n            xAxis: observable.ref,\n            yAxis: observable.ref,\n            colorScale: observable,\n            map: observable,\n            dimensions: observable.ref,\n            ySlugs: observable,\n            xSlug: observable,\n            colorSlug: observable,\n            sizeSlug: observable,\n            tableSlugs: observable,\n            selectedEntityColors: observable,\n            selectedEntityNames: observable,\n            focusedSeriesNames: observable,\n            excludedEntityNames: observable,\n            includedEntityNames: observable,\n            comparisonLines: observable,\n            relatedQuestions: observable,\n            dataTableConfig: observable,\n            highlightedTimesInLineChart: observable.ref,\n            hideFacetControl: observable.ref,\n            selectedFacetStrategy: observable,\n            sortBy: observable,\n            sortOrder: observable,\n            sortColumnSlug: observable,\n            _isInFullScreenMode: observable.ref,\n            windowInnerWidth: observable.ref,\n            windowInnerHeight: observable.ref,\n            screenHeight: observable.ref,\n            bakedGrapherURL: observable,\n            externalQueryParams: observable.ref,\n            _inputTable: observable.ref,\n            legacyConfigAsAuthored: observable.ref,\n            entitySelectorState: observable,\n            isConfigReady: observable,\n            isDataReady: observable,\n            canHideExternalControlsInEmbed: observable.ref,\n            hideExternalControlsInEmbedUrl: observable.ref,\n            isExportingToSvgOrPng: observable.ref,\n            isWikimediaExport: observable.ref,\n            variant: observable.ref,\n            staticBounds: observable,\n            isTimelineAnimationPlaying: observable.ref,\n            isTimelineAnimationActive: observable.ref,\n            animationStartTime: observable.ref,\n            areHandlesOnSameTimeBeforeAnimation: observable.ref,\n            timelineDragTarget: observable.ref,\n            isEntitySelectorModalOrDrawerOpen: observable.ref,\n            activeModal: observable.ref,\n            activeDownloadModalTab: observable.ref,\n            shouldIncludeDetailsInStaticExport: observable,\n            _externalBounds: observable,\n            slideShow: observable,\n            _baseFontSize: observable,\n            isShareMenuActive: observable,\n            hideTitle: observable,\n            hideSubtitle: observable,\n            hideNote: observable,\n            hideOriginUrl: observable,\n            hideEntityControls: observable,\n            enableMapSelection: observable,\n            forceHideAnnotationFieldsInTitle: observable,\n            hasTableTab: observable,\n            hideShareButton: observable,\n            hideExploreTheDataButton: observable,\n            useMinimalLabeling: observable,\n        })\n\n        this.updateFromObject(options)\n\n        this.additionalDataLoaderFn = options.additionalDataLoaderFn\n        this.isEmbeddedInAnOwidPage = options.isEmbeddedInAnOwidPage ?? false\n        this.isEmbeddedInADataPage = options.isEmbeddedInADataPage ?? false\n\n        this._inputTable =\n            options.table ?? BlankOwidTable(`initialGrapherTable`)\n        this.initialOptions = options\n        this.analytics = new GrapherAnalytics(this.initialOptions.env ?? \"\")\n        this.selection =\n            this.manager?.selection ??\n            new SelectionArray(this.initialOptions.selectedEntityNames ?? [])\n        this.setAuthoredVersion(options)\n        this.canHideExternalControlsInEmbed =\n            options.canHideExternalControlsInEmbed ?? false\n        this.staticBounds = options.staticBounds ?? DEFAULT_GRAPHER_BOUNDS\n\n        this.narrativeChartInfo = options.narrativeChartInfo\n        this.archiveContext = options.archiveContext\n\n        this.populateFromQueryParams(\n            legacyToCurrentGrapherQueryParams(\n                this.initialOptions.queryStr ?? \"\"\n            )\n        )\n        if (this.isEditor) {\n            this.ensureValidConfigWhenEditing()\n        }\n    }\n\n    @action.bound updateFromObject(obj?: GrapherProgrammaticInterface): void {\n        if (!obj) return\n\n        updatePersistables(this, obj)\n\n        this.bindUrlToWindow = obj.bindUrlToWindow ?? false\n\n        // Update selection\n        if (obj.selectedEntityNames)\n            this.selection.setSelectedEntities(obj.selectedEntityNames)\n\n        // Update focus\n        if (obj.focusedSeriesNames)\n            this.focusArray.clearAllAndAdd(...obj.focusedSeriesNames)\n\n        // JSON doesn't support Infinity, so we use strings instead.\n        this.minTime = minTimeBoundFromJSONOrNegativeInfinity(obj.minTime)\n        this.maxTime = maxTimeBoundFromJSONOrPositiveInfinity(obj.maxTime)\n\n        this.timelineMinTime = minTimeBoundFromJSONOrNegativeInfinity(\n            obj.timelineMinTime\n        )\n        this.timelineMaxTime = maxTimeBoundFromJSONOrPositiveInfinity(\n            obj.timelineMaxTime\n        )\n\n        if (obj?.dimensions?.length)\n            this.setDimensionsFromConfigs(obj.dimensions)\n    }\n\n    toObject(): GrapherInterface {\n        const obj: GrapherInterface = objectWithPersistablesToObject(\n            this,\n            grapherKeysToSerialize\n        )\n\n        // Persist selection and focus\n        obj.selectedEntityNames = this.selection.selectedEntityNames\n        obj.focusedSeriesNames = this.focusArray.seriesNames\n\n        deleteRuntimeAndUnchangedProps(obj, defaultObject)\n\n        // Always include the schema, even if it's the default\n        obj.$schema = this.$schema || latestGrapherConfigSchema\n\n        // JSON doesn't support Infinity, so we use strings instead\n        if (obj.minTime) obj.minTime = minTimeToJSON(this.minTime) as any\n        if (obj.maxTime) obj.maxTime = maxTimeToJSON(this.maxTime) as any\n\n        if (obj.timelineMinTime)\n            obj.timelineMinTime = minTimeToJSON(this.timelineMinTime) as any\n        if (obj.timelineMaxTime)\n            obj.timelineMaxTime = maxTimeToJSON(this.timelineMaxTime) as any\n\n        // Don't serialize the tab if the default chart is currently shown\n        if (\n            this.activeChartType &&\n            this.activeChartType === this.defaultChartType\n        ) {\n            delete obj.tab\n        }\n\n        // Explorers set color properties directly on column defs.\n        // These properties wouldn't be serialized in the JSON config by default,\n        // so this code extracts them and adds them to the serialized object.\n        // Color properties from the color column are stored as obj.colorScale\n        if (this.inputColorColumnSlug && !obj.colorScale) {\n            const colorColumn = this.inputTable.get(this.inputColorColumnSlug)\n            const colorScaleConfig = ColorScaleConfig.fromDSL(colorColumn.def)\n            if (colorScaleConfig) obj.colorScale = colorScaleConfig.toObject()\n        }\n\n        // Similarly, color properties from the map column are stored as obj.map.colorScale\n        if (this.hasMapTab && this.mapColumnSlug && !obj.map?.colorScale) {\n            const mapColumn = this.inputTable.get(this.mapColumnSlug)\n            const colorScaleConfig = ColorScaleConfig.fromDSL(mapColumn.def)\n            if (colorScaleConfig) {\n                obj.map ??= {}\n                obj.map.colorScale = colorScaleConfig.toObject()\n            }\n        }\n\n        return obj\n    }\n\n    /** Returns an object ready to be serialized to JSON */\n    @computed get object(): GrapherInterface {\n        return this.toObject()\n    }\n\n    /**\n     * The complete, unfiltered data table for the chart.\n     *\n     * This is the raw input data provided to the Grapher. This table is the\n     * starting point for all data transformations in the pipeline. It contains\n     * all entities and all time periods present in the data before any filtering\n     * or chart-specific transforms are applied.\n     */\n    get inputTable(): OwidTable {\n        return this._inputTable\n    }\n\n    @action set inputTable(table: OwidTable) {\n        this._inputTable = table\n\n        if (this.manager?.selection?.hasSelection) {\n            // Selection is managed externally, do nothing\n        } else if (this.areSelectedEntitiesDifferentThanAuthors) {\n            // User has changed the selection, use theirs\n        } else this.applyOriginalSelectionAsAuthored()\n\n        // Add peer countries if requested\n        if (this.shouldApplyPeerCountries) {\n            void this.applyPeerCountriesIfNeeded().finally(() => {\n                // Ensure peer countries are only applied once on table load\n                this.shouldApplyPeerCountries = false\n            })\n        }\n    }\n\n    /**\n     * Input table with color and size tolerance applied.\n     *\n     * This happens _before_ applying the author's timeline filter to avoid\n     * accidentally dropping all color values before applying tolerance.\n     * This is especially important for scatter plots and Marimekko charts,\n     * where color and size columns are often transformed with infinite tolerance.\n     *\n     * Line and discrete bar charts also support a color dimension, but their\n     * tolerance transformations run in their respective transformTable functions\n     * since it's more efficient to run them on a table that has been filtered\n     * by selected entities.\n     */\n    @computed get tableAfterColorAndSizeToleranceApplication(): OwidTable {\n        let table = this.inputTable\n\n        if (this.hasScatter && this.inputSizeColumnSlug) {\n            const tolerance =\n                table.get(this.inputSizeColumnSlug)?.display?.tolerance ??\n                Infinity\n            table = table.interpolateColumnWithTolerance(\n                this.inputSizeColumnSlug,\n                {\n                    toleranceOverride: tolerance,\n                }\n            )\n        }\n\n        if (\n            (this.hasScatter || this.hasMarimekko) &&\n            this.inputCategoricalColorColumnSlug\n        ) {\n            const tolerance =\n                table.get(this.inputCategoricalColorColumnSlug)?.display\n                    ?.tolerance ?? Infinity\n            table = table.interpolateColumnWithTolerance(\n                this.inputCategoricalColorColumnSlug,\n                { toleranceOverride: tolerance }\n            )\n        }\n\n        return table\n    }\n\n    /**\n     * Table after author-specified entity and timeline filters have been applied.\n     *\n     * This is the earliest filtering step in the pipeline. The author can configure\n     * entity include/exclude patterns (includedEntityNames, excludedEntityNames) and\n     * timeline bounds (timelineMinTime, timelineMaxTime). These filters are applied\n     * before any chart-specific transforms, so to the charts it appears as if the\n     * filtered times and entities do not exist in the data.\n     */\n    @computed get tableAfterAuthorTimelineAndEntityFilter(): OwidTable {\n        let table = this.tableAfterColorAndSizeToleranceApplication\n\n        // Filter entities\n        table = table.filterByEntityNamesUsingIncludeExcludePattern({\n            excluded: this.excludedEntityNames,\n            included: this.includedEntityNames,\n        })\n\n        // Filter times\n        if (\n            this.timelineMinTime === undefined &&\n            this.timelineMaxTime === undefined\n        )\n            return table\n        return table.filterByTimeRange(\n            this.timelineMinTime ?? -Infinity,\n            this.timelineMaxTime ?? Infinity\n        )\n    }\n\n    /** The base data table after author-configured filters have been applied */\n    @computed get table(): OwidTable {\n        return this.tableAfterAuthorTimelineAndEntityFilter\n    }\n\n    /**\n     * Table after the active chart type's transformation has been applied.\n     *\n     * Different chart types (line, bar, scatter, etc.) have different data requirements\n     * and transformations. This property applies the chart-specific transformTable()\n     * method to prepare the data for that chart type's rendering. This happens before\n     * any user-selected time range filtering (startTime/endTime).\n     */\n    @computed get tableAfterAuthorTimelineAndActiveChartTransform(): OwidTable {\n        const table = this.table\n        if (!this.isReady || !this.isOnChartOrMapTab) return table\n\n        const startMark = performance.now()\n\n        const transformedTable = this.chartState.transformTable(table)\n\n        this.createPerformanceMeasurement(\n            \"chartInstance.transformTable\",\n            startMark\n        )\n        return transformedTable\n    }\n\n    /**\n     * Table after all chart transforms and user-selected time range filtering.\n     *\n     * This applies the final filtering step based on the currently selected time range\n     * (startTime and endTime).\n     */\n    @computed\n    private get tableAfterAllTransformsAndFilters(): OwidTable {\n        const { startTime, endTime } = this\n        const table = this.tableAfterAuthorTimelineAndActiveChartTransform\n\n        if (startTime === undefined || endTime === undefined) return table\n\n        if (this.isOnMapTab) {\n            const targetTimes = this.isFaceted\n                ? [startTime, endTime]\n                : [endTime]\n\n            return table.filterByTargetTimes(targetTimes)\n        }\n\n        if (this.isOnDiscreteBarTab || this.isOnMarimekkoTab)\n            return table.filterByTargetTimes([endTime])\n\n        if (this.isOnSlopeChartTab)\n            return table.filterByTargetTimes([startTime, endTime])\n\n        return table.filterByTimeRange(startTime, endTime)\n    }\n\n    /** The final transformed table ready for chart rendering */\n    @computed get transformedTable(): OwidTable {\n        return this.tableAfterAllTransformsAndFilters\n    }\n\n    /** Table used to determine which entities can be selected in the entity selector */\n    @computed get tableForSelection(): OwidTable {\n        // Depending on the chart type, the criteria for being able to select an entity are\n        // different; e.g. for scatterplots, the entity needs to (1) not be excluded and\n        // (2) needs to have data for the x and y dimension.\n        let table =\n            this.isOnScatterTab || this.isOnMarimekkoTab\n                ? this.tableAfterAuthorTimelineAndActiveChartTransform\n                : this.table\n\n        if (!this.isReady) return table\n\n        // Some chart types (e.g. stacked area charts) choose not to show an entity\n        // with incomplete data. Such chart types define a custom transform function\n        // to ensure that the entity selector only offers entities that are actually plotted.\n        if (this.chartState.transformTableForSelection) {\n            table = this.chartState.transformTableForSelection(table)\n        }\n\n        return table\n    }\n\n    /** Base table for the data table tab */\n    @computed get tableForDisplayBeforeEntityFilter(): OwidTable {\n        let table = this.table\n\n        if (!this.isReady || !this.isOnTableTab) return table\n\n        if (this.chartState.transformTableForDisplay) {\n            table = this.chartState.transformTableForDisplay(table)\n        }\n\n        if (this.shouldShowSelectionOnlyInDataTable) {\n            table = table.filterByEntityNames(\n                this.selection.selectedEntityNames\n            )\n        }\n\n        return table\n    }\n\n    /** Table for display in the data table tab */\n    @computed get tableForDisplay(): OwidTable {\n        let table = this.tableForDisplayBeforeEntityFilter\n        const { filter } = this.dataTableConfig\n\n        const availableEntities = table.availableEntityNames\n\n        // Determine which entities should be visible based on the filter\n        const visibleEntities = match(filter)\n            .with(\"all\", () => availableEntities)\n            .with(\"selection\", () =>\n                this.selection.hasSelection\n                    ? this.selection.selectedEntityNames\n                    : availableEntities\n            )\n            .when(isEntityRegionGroupKey, (filter) => {\n                const regionNames = this.entitiesByRegionGroup.get(filter)\n                return regionNames ?? availableEntities\n            })\n            .exhaustive()\n\n        // Apply entity filter if necessary\n        if (visibleEntities.length < availableEntities.length)\n            table = table.filterByEntityNames(visibleEntities)\n\n        return table\n    }\n\n    /**\n     * Table used for downloading when the user requests a data download\n     * of the complete data set */\n    @computed get tableForDownload(): OwidTable {\n        return this.prepareTableForDownload(this.table)\n    }\n\n    /**\n     * Table used for downloading when the user requests a data download\n     * of the currently displayed data.\n     */\n    @computed get filteredTableForDownload(): OwidTable {\n        const table = this.isOnTableTab\n            ? this.tableForDisplay\n            : this.transformedTable\n\n        return this.prepareTableForDownload(table)\n    }\n\n    private prepareTableForDownload(table: OwidTable): OwidTable {\n        const dataSlugs = this.inputColumnSlugs\n\n        // x and y column slugs\n        const xySlugs = [\n            this.inputXColumnSlug,\n            ...this.inputYColumnSlugs,\n        ].filter((slug) => slug !== undefined)\n\n        // Time column slug to include in the downloaded table\n        const timeSlug = table.timeColumn.slug\n\n        // Original time column slugs to include\n        const originalTimeSlugs = xySlugs\n            .map((ySlug) => makeOriginalTimeSlugFromColumnSlug(ySlug))\n            .filter((slug) => table.has(slug))\n\n        // Annotation columns to include\n        const annotationSlugs = xySlugs\n            .map((slug) => makeAnnotationsSlug(slug))\n            .filter((slug) => table.has(slug))\n\n        // Select only relevant columns (in the right order)\n        table = table.select([\n            table.entityNameSlug, // Entity name column\n            table.entityCodeSlug, // Entity code column\n            timeSlug, // Time column\n            ...dataSlugs, // Data columns\n            ...originalTimeSlugs, // Original time columns\n            ...annotationSlugs, // Annotation columns\n        ])\n\n        // Drop rows without any x or y values\n        if (xySlugs.length > 0) {\n            table = table.dropRowsWithErrorValuesForAllColumns(xySlugs)\n        }\n\n        // Only keep original times that differ from the main time\n        for (const originalTimeSlug of originalTimeSlugs) {\n            if (!table.has(originalTimeSlug)) continue\n\n            const times = table.get(timeSlug).valuesIncludingErrorValues\n\n            // Replace original times that are the same as the main time\n            // with a missing value placeholder\n            table = table.replaceCells(\n                [originalTimeSlug],\n                (originalTime, index) => {\n                    return originalTime === times[index]\n                        ? ErrorValueTypes.MissingValuePlaceholder\n                        : originalTime\n                }\n            )\n        }\n\n        // Drop original time columns that are now completely empty\n        table = table.dropColumns(\n            originalTimeSlugs.filter((slug) => table.get(slug).numValues === 0)\n        )\n\n        // Drop empty annotation columns\n        table = table.dropColumns(\n            annotationSlugs.filter((slug) => table.get(slug).numValues === 0)\n        )\n\n        // Fill in missing entity codes\n        if (table.entityCodeColumn.numErrorValues > 0) {\n            table = table.replaceCells(\n                [OwidTableSlugs.entityCode],\n                (value, index) => {\n                    if (isNotErrorValueOrEmptyCell(value)) return value\n\n                    const entityName = table.entityNameColumn\n                        .valuesIncludingErrorValues[index] as string\n\n                    const entityCode =\n                        this.inputTable.entityNameToCodeMap.get(entityName)\n\n                    return entityCode ?? value\n                }\n            )\n        }\n\n        // Drop entity code column if all values are empty (after backfilling)\n        const hasEntityCodes = table.entityCodeColumn.values.some(\n            (code) => code && code !== \"\"\n        )\n        if (!hasEntityCodes) {\n            table = table.dropColumns([OwidTableSlugs.entityCode])\n        }\n\n        return table\n    }\n\n    /** Populates grapher state from URL query parameters */\n    @action.bound populateFromQueryParams(params: GrapherQueryParams): void {\n        // Store any external params not recognized by Grapher\n        this.externalQueryParams = _.omit(params, GRAPHER_QUERY_PARAM_KEYS)\n\n        // Parse all query params\n        const parsed = parseGrapherQueryParams(params)\n\n        // Log any invalid parameters for debugging\n        logInvalidQueryParams(parsed)\n\n        // Tab\n        if (parsed.tab.status === \"valid\") {\n            const tabName = this.mapTabConfigOptionToTabName(parsed.tab.value)\n            this.setTab(tabName)\n        } else if (parsed.tab.status === \"invalid\") {\n            // Reset the tab if an invalid value is provided\n            this.setTab(this.defaultTab)\n        }\n\n        // Overlay\n        if (parsed.overlay.status === \"valid\") {\n            this.activeModal = parsed.overlay.value.modal\n            if (parsed.overlay.value.downloadTab) {\n                this.activeDownloadModalTab = parsed.overlay.value.downloadTab\n            }\n        }\n\n        // Stack mode\n        if (parsed.stackMode.status === \"valid\") {\n            this.stackMode = parsed.stackMode.value\n        }\n\n        // Zoom to selection\n        if (parsed.zoomToSelection.status === \"valid\") {\n            this.zoomToSelection = true\n        }\n\n        // X-axis scale\n        if (parsed.xScale.status === \"valid\") {\n            this.xAxis.scaleType = parsed.xScale.value\n        }\n\n        // Y-axis scale\n        if (parsed.yScale.status === \"valid\") {\n            this.yAxis.scaleType = parsed.yScale.value\n        }\n\n        // Time\n        if (parsed.time.status === \"valid\") {\n            this.setTimeFromTimeQueryParam(parsed.time.value)\n        }\n\n        // Endpoints only\n        if (parsed.endpointsOnly.status === \"valid\") {\n            this.compareEndPointsOnly = parsed.endpointsOnly.value\n                ? true\n                : undefined\n        }\n\n        // Globe mode\n        if (parsed.globe.status === \"valid\") {\n            this.mapConfig.globe.isActive = parsed.globe.value\n        }\n\n        // Globe rotation\n        if (parsed.globeRotation.status === \"valid\") {\n            this.mapConfig.globe.rotation = parsed.globeRotation.value\n        }\n\n        // Globe zoom\n        if (parsed.globeZoom.status === \"valid\") {\n            this.mapConfig.globe.zoom = parsed.globeZoom.value\n        }\n\n        // Map region\n        if (parsed.region.status === \"valid\") {\n            this.map.region = parsed.region.value\n        }\n\n        // Map selection\n        if (parsed.mapSelect.status === \"valid\") {\n            this.mapConfig.selection.setSelectedEntities(parsed.mapSelect.value)\n        }\n\n        // Entity selection (country param)\n        if (\n            parsed.country.status === \"valid\" &&\n            this.addCountryMode !== EntitySelectionMode.Disabled\n        ) {\n            this.selection.setSelectedEntities(parsed.country.value)\n        }\n\n        // Focused series\n        if (parsed.focus.status === \"valid\") {\n            this.focusArray.clearAllAndAdd(...parsed.focus.value)\n        }\n\n        // Faceting\n        if (parsed.facet.status === \"valid\") {\n            this.selectedFacetStrategy = parsed.facet.value\n        }\n\n        // Uniform Y-axis (facet domain)\n        if (parsed.uniformYAxis.status === \"valid\") {\n            this.yAxis.facetDomain = parsed.uniformYAxis.value\n        }\n\n        // Show no data area (Marimekko charts)\n        if (parsed.showNoDataArea.status === \"valid\") {\n            this.showNoDataArea = parsed.showNoDataArea.value\n        }\n\n        // Deprecated: showSelectionOnlyInTable (legacy URL support)\n        if (parsed.showSelectionOnlyInTable.status === \"valid\") {\n            this.dataTableConfig.filter = parsed.showSelectionOnlyInTable.value\n        }\n\n        // Table filter (overrides deprecated param if both present)\n        if (parsed.tableFilter.status === \"valid\") {\n            this.dataTableConfig.filter = parsed.tableFilter.value\n        } else if (parsed.tableFilter.status === \"invalid\") {\n            // Reset to default if invalid value provided\n            this.dataTableConfig.filter = \"all\"\n        }\n\n        // Table search\n        if (parsed.tableSearch.status === \"valid\") {\n            this.dataTableConfig.search = parsed.tableSearch.value\n        }\n\n        // Peer countries\n        if (parsed.peerCountries.status === \"valid\") {\n            if (parsed.peerCountries.value === \"auto\") {\n                this.peerCountryStrategy ??= PeerCountryStrategy.Neighbors\n            } else {\n                this.peerCountryStrategy = parsed.peerCountries.value\n            }\n\n            // Apply immediately if we have data, otherwise set flag to apply later\n            if (this.availableEntityNames.length > 0) {\n                this.shouldApplyPeerCountries = true\n                void this.applyPeerCountriesIfNeeded().finally(() => {\n                    this.shouldApplyPeerCountries = false\n                })\n            } else {\n                this.shouldApplyPeerCountries = true\n            }\n        } else if (parsed.peerCountries.status === \"invalid\") {\n            // Clear the strategy if an invalid value was provided\n            this.peerCountryStrategy = undefined\n        }\n    }\n\n    @action.bound setTimeFromTimeQueryParam(time: string): void {\n        this.timelineHandleTimeBounds = getTimeDomainFromQueryString(time).map(\n            (time) => findClosestTime(this.times, time) ?? time\n        ) as TimeBounds\n    }\n\n    @computed private get isDev(): boolean {\n        return this.initialOptions.env === \"dev\"\n    }\n\n    @computed get dataTableSlugs(): ColumnSlug[] {\n        return this.tableSlugs ? this.tableSlugs.split(\" \") : this.newSlugs\n    }\n\n    @action.bound setAuthoredVersion(\n        config: Partial<LegacyGrapherInterface>\n    ): void {\n        this.legacyConfigAsAuthored = config\n    }\n\n    @action.bound updateAuthoredVersion(\n        config: Partial<LegacyGrapherInterface>\n    ): void {\n        this.legacyConfigAsAuthored = {\n            ...this.legacyConfigAsAuthored,\n            ...config,\n        }\n    }\n\n    @computed get activeTab(): GrapherTabName {\n        return this.mapTabConfigOptionToTabName(this.tab)\n    }\n\n    @computed get activeChartType(): GrapherChartType | undefined {\n        return isChartTypeName(this.activeTab) ? this.activeTab : undefined\n    }\n\n    @computed private get defaultChartType(): GrapherChartType {\n        return this.chartType ?? GRAPHER_CHART_TYPES.LineChart\n    }\n\n    @computed private get defaultTab(): GrapherTabName {\n        if (this.chartType) return this.chartType\n        if (this.hasMapTab) return GRAPHER_TAB_NAMES.WorldMap\n        return GRAPHER_TAB_NAMES.Table\n    }\n\n    @action.bound resetToDefaultTab(): void {\n        this.setTab(this.defaultTab)\n    }\n\n    @computed get chartType(): GrapherChartType | undefined {\n        return this.validChartTypes[0]\n    }\n\n    @computed get hasChartTab(): boolean {\n        return this.validChartTypes.length > 0\n    }\n\n    @computed get isOnChartTab(): boolean {\n        return !this.isOnMapTab && !this.isOnTableTab\n    }\n\n    @computed get isOnMapTab(): boolean {\n        return this.activeTab === GRAPHER_TAB_NAMES.WorldMap\n    }\n\n    @computed get isOnTableTab(): boolean {\n        return this.activeTab === GRAPHER_TAB_NAMES.Table\n    }\n\n    @computed get isOnChartOrMapTab(): boolean {\n        return this.isOnChartTab || this.isOnMapTab\n    }\n\n    @computed get yAxisConfig(): Readonly<AxisConfigInterface> {\n        return this.yAxis.toObject()\n    }\n\n    @computed get xAxisConfig(): Readonly<AxisConfigInterface> {\n        return this.xAxis.toObject()\n    }\n\n    @computed get showSeriesLabels(): boolean {\n        return !this.hideSeriesLabels\n    }\n\n    @computed get showLegend(): boolean {\n        // Don't show any legends in minimal mode\n        if (this.useMinimalLabeling) return false\n\n        // Hide the legend for stacked bar charts if the legend only ever shows a single entity\n        if (this.isOnStackedBarTab) {\n            const seriesStrategy =\n                this.chartState.seriesStrategy ||\n                autoDetectSeriesStrategy(this, true)\n            const isEntityStrategy = seriesStrategy === SeriesStrategy.entity\n            const hasSingleEntity = this.selection.numSelectedEntities === 1\n            const hideLegend =\n                this.hideLegend || (isEntityStrategy && hasSingleEntity)\n            return !hideLegend\n        }\n\n        return !this.hideLegend\n    }\n\n    private isChartTypeThatShowsAllEntities(\n        chartType: GrapherChartType\n    ): boolean {\n        return CHART_TYPES_THAT_SHOW_ALL_ENTITIES.includes(chartType)\n    }\n\n    @computed private get hasChartThatShowsAllEntities(): boolean {\n        return this.validChartTypes.some((chartType) =>\n            this.isChartTypeThatShowsAllEntities(chartType)\n        )\n    }\n\n    @computed get isOnArchivalPage(): boolean {\n        return this.archiveContext?.type === \"archive-page\"\n    }\n\n    @computed get hasArchivedPage(): boolean {\n        return this.archiveContext?.type === \"archived-page-version\"\n    }\n\n    /**\n     * We only show the selected entities in the data table if entity selection\n     * is disabled – unless there is a view that displays all data points, like\n     * a map or a scatter plot.\n     */\n    @computed get shouldShowSelectionOnlyInDataTable(): boolean {\n        return (\n            this.selection.hasSelection &&\n            !this.canChangeAddOrHighlightEntities &&\n            this.hasChartTab &&\n            !this.hasChartThatShowsAllEntities &&\n            !this.hasMapTab\n        )\n    }\n\n    /**\n     * Selection used in Grapher's data table.\n     *\n     * If a map selection is set, it is preferred over the chart selection.\n     */\n    @computed get dataTableSelection(): SelectionArray {\n        return this.mapConfig.selection.hasSelection\n            ? this.mapConfig.selection\n            : this.selection\n    }\n\n    @computed get chartState(): ChartState {\n        return this.isOnMapTab\n            ? makeChartState(GRAPHER_MAP_TYPE, this)\n            : this.chartStateExceptMap\n    }\n\n    @computed get facetChartInstance(): FacetChart | undefined {\n        if (!this.isFaceted) return undefined\n        return new FacetChart({\n            manager: this,\n            chartTypeName: this.activeChartType,\n        })\n    }\n\n    @computed get chartStateExceptMap(): ChartState {\n        const chartType = this.activeChartType ?? GRAPHER_CHART_TYPES.LineChart\n\n        return makeChartState(chartType, this)\n    }\n\n    @computed private get chartSeriesNames(): SeriesName[] {\n        if (!this.isReady) return []\n\n        // Collect series names from all chart instances when faceted\n        if (this.isFaceted) {\n            return _.uniq(\n                this.facetChartInstance?.intermediateChartInstances.flatMap(\n                    (chartInstance) =>\n                        chartInstance.chartState.series.map(\n                            (series) => series.seriesName\n                        )\n                ) ?? []\n            )\n        }\n\n        return this.chartState.series.map((series) => series.seriesName)\n    }\n\n    @computed get focusableSeriesNames(): SeriesName[] {\n        if (this.isOnStackedDiscreteBarTab) {\n            return [\n                ...this.chartSeriesNames,\n                ...this.selection.selectedEntityNames,\n            ]\n        }\n        return this.chartSeriesNames\n    }\n\n    @computed get isStatic(): boolean {\n        return this.isExportingToSvgOrPng\n    }\n\n    private get isStaging(): boolean {\n        if (typeof location === \"undefined\") return false\n        return location.host.includes(\"staging\")\n    }\n\n    private get isLocalhost(): boolean {\n        if (typeof location === \"undefined\") return false\n        return location.host.includes(\"localhost\")\n    }\n\n    @computed get editUrl(): string | undefined {\n        let editPath = this.manager?.adminEditPath\n        if (!editPath && this.id) {\n            editPath = `charts/${this.id}/edit`\n        }\n        if (this.showAdminControls && this.adminBaseUrl && editPath) {\n            return `${this.adminBaseUrl}/admin/${editPath}`\n        }\n        return undefined\n    }\n\n    @computed get createNarrativeChartUrl(): string | undefined {\n        const adminPath = this.manager?.adminCreateNarrativeChartPath\n        if (this.showAdminControls && this.isPublished && adminPath) {\n            return `${this.adminBaseUrl}/admin/${adminPath}`\n        }\n        return undefined\n    }\n\n    @computed private get isAdminObjectAvailable(): boolean {\n        if (typeof window === \"undefined\") return false\n        return (\n            window.admin !== undefined &&\n            // Ensure that we're not accidentally matching on a DOM element with an ID of \"admin\"\n            typeof window.admin.isSuperuser === \"boolean\"\n        )\n    }\n\n    @computed get isAdmin(): boolean {\n        if (typeof window === \"undefined\") return false\n        if (this.isAdminObjectAvailable) return true\n\n        // Using this.isAdminObjectAvailable is not enough because it's not\n        // available in gdoc previews, which render in an iframe without the\n        // admin scaffolding.\n        if (this.adminBaseUrl && this.isInIFrame) {\n            try {\n                const adminUrl = new URL(this.adminBaseUrl)\n                const currentUrl = new URL(window.location.href)\n                return adminUrl.host === currentUrl.host\n            } catch {\n                return false\n            }\n        }\n\n        return false\n    }\n\n    @computed private get isUserLoggedInAsAdmin(): boolean {\n        // This cookie is set by visiting ourworldindata.org/identifyadmin on the static site.\n        // There is an iframe on owid.cloud to trigger a visit to that page.\n        try {\n            // Cookie access can be restricted by iframe sandboxing, in which case the below code will throw an error\n            // see https://github.com/owid/owid-grapher/pull/2452\n            return !!Cookies.get(CookieKey.isAdmin)\n        } catch {\n            return false\n        }\n    }\n\n    @computed get showAdminControls(): boolean {\n        return (\n            this.isUserLoggedInAsAdmin ||\n            this.isAdmin || // Useful for gdoc previews.\n            this.isDev ||\n            this.isLocalhost ||\n            this.isStaging\n        )\n    }\n\n    // Exclusively used for the performance.measurement API, so that DevTools can show some context\n    createPerformanceMeasurement(name: string, startMark: number): void {\n        const endMark = performance.now()\n        const detail = {\n            devtools: {\n                track: \"Grapher\",\n                properties: [\n                    // might be missing for charts within explorers or mdims\n                    [\"slug\", this.slug ?? \"missing-slug\"],\n                    [\"chartTypes\", this.validChartTypes],\n                    [\"tab\", this.tab],\n                ],\n            },\n        }\n\n        try {\n            performance.measure(name, {\n                start: startMark,\n                end: endMark,\n                detail,\n            })\n        } catch {\n            // In old browsers, the above may throw an error - just ignore it\n        }\n    }\n\n    @action.bound private applyOriginalFocusAsAuthored(): void {\n        if (this.focusedSeriesNames?.length)\n            this.focusArray.clearAllAndAdd(...this.focusedSeriesNames)\n    }\n\n    @action.bound private applyOriginalSelectionAsAuthored(): void {\n        if (this.selectedEntityNames?.length)\n            this.selection.setSelectedEntities(this.selectedEntityNames)\n    }\n\n    @computed get hasData(): boolean {\n        return this.dimensions.length > 0 || this.newSlugs.length > 0\n    }\n\n    /**\n     * Ready to go if we have retrieved data for every variable associated\n     * with the chart or the config and data are marked as ready\n     */\n    @computed get isReady(): boolean {\n        if (!this.isConfigReady) return false\n        if (!this.isDataReady) return false\n        return this.whatAreWeWaitingFor === \"\"\n    }\n\n    @computed get whatAreWeWaitingFor(): string {\n        const { newSlugs, inputTable, dimensions } = this\n        if (newSlugs.length || dimensions.length === 0) {\n            const missingColumns = newSlugs.filter(\n                (slug) => !inputTable.has(slug)\n            )\n            return missingColumns.length\n                ? `Waiting for columns ${missingColumns.join(\",\")} in table '${inputTable.tableSlug}'. ${inputTable.tableDescription}`\n                : \"\"\n        }\n        if (dimensions.length > 0 && this.loadingDimensions.length === 0)\n            return \"\"\n        return `Waiting for dimensions ${this.loadingDimensions.join(\",\")}.`\n    }\n\n    @computed get newSlugs(): string[] {\n        const { xSlug, colorSlug, sizeSlug } = this\n        const ySlugs = this.ySlugs ? this.ySlugs.split(\" \") : []\n        return excludeUndefined([...ySlugs, xSlug, colorSlug, sizeSlug])\n    }\n\n    @computed private get loadingDimensions(): ChartDimension[] {\n        return this.dimensions.filter(\n            (dim) => !this.inputTable.has(dim.columnSlug)\n        )\n    }\n\n    @computed get isInIFrame(): boolean {\n        return isInIFrame()\n    }\n\n    @computed get times(): Time[] {\n        const { mapColumnSlug, projectionColumnInfoBySlug, yColumnSlugs } = this\n\n        // If the map shows historical and projected data, then the time range\n        // has to extend to the full range of both indicators\n        const mapColumnInfo = projectionColumnInfoBySlug.get(mapColumnSlug)\n        const mapColumnSlugs = mapColumnInfo\n            ? [mapColumnInfo.projectedSlug, mapColumnInfo.historicalSlug]\n            : [mapColumnSlug]\n\n        const columnSlugs = this.isOnMapTab ? mapColumnSlugs : yColumnSlugs\n\n        // Generate the times only after the chart transform has been applied, so that we don't show\n        // times on the timeline for which data may not exist, e.g. when the selected entity\n        // doesn't contain data for all years in the table.\n        // -@danielgavrilov, 2020-10-22\n        return this.tableAfterAuthorTimelineAndActiveChartTransform.getTimesUniqSortedAscForColumns(\n            columnSlugs\n        )\n    }\n\n    /**\n     * Plots time on the x-axis.\n     */\n    @computed private get hasTimeDimension(): boolean {\n        return this.isStackedBar || this.isStackedArea || this.isLineChart\n    }\n\n    @computed private get hasTimeDimensionButTimelineIsHidden(): boolean {\n        return this.hasTimeDimension && !!this.hideTimeline\n    }\n\n    @computed get startHandleTimeBound(): TimeBound {\n        if (this.isSingleTimeSelectionActive) return this.endHandleTimeBound\n        return this.timelineHandleTimeBounds[0]\n    }\n\n    private set startHandleTimeBound(newValue: TimeBound) {\n        if (this.isSingleTimeSelectionActive)\n            this.timelineHandleTimeBounds = [newValue, newValue]\n        else\n            this.timelineHandleTimeBounds = [\n                newValue,\n                this.timelineHandleTimeBounds[1],\n            ]\n    }\n\n    private set endHandleTimeBound(newValue: TimeBound) {\n        if (this.isSingleTimeSelectionActive)\n            this.timelineHandleTimeBounds = [newValue, newValue]\n        else\n            this.timelineHandleTimeBounds = [\n                this.timelineHandleTimeBounds[0],\n                newValue,\n            ]\n    }\n\n    @computed get endHandleTimeBound(): TimeBound {\n        return this.timelineHandleTimeBounds[1]\n    }\n\n    @computed get closestTimelineMinTime(): Time | undefined {\n        return findClosestTime(this.times, this.timelineMinTime ?? -Infinity)\n    }\n\n    @computed get closestTimelineMaxTime(): Time | undefined {\n        return findClosestTime(this.times, this.timelineMaxTime ?? Infinity)\n    }\n\n    @computed get startTime(): Time | undefined {\n        return findClosestTime(this.times, this.startHandleTimeBound)\n    }\n\n    @computed get endTime(): Time | undefined {\n        return findClosestTime(this.times, this.endHandleTimeBound)\n    }\n\n    @computed get isSingleTimeScatterAnimationActive(): boolean {\n        return (\n            this.isTimelineAnimationActive &&\n            this.isOnScatterTab &&\n            !this.isRelativeMode &&\n            !!this.areHandlesOnSameTimeBeforeAnimation\n        )\n    }\n\n    @computed private get isSingleTimeMapAnimationActive(): boolean {\n        return (\n            this.isTimelineAnimationActive &&\n            this.isOnMapTab &&\n            !!this.areHandlesOnSameTimeBeforeAnimation\n        )\n    }\n\n    @computed private get onlySingleTimeSelectionPossible(): boolean {\n        return this.checkOnlySingleTimeSelectionPossible(this.activeTab)\n    }\n\n    @computed get onlyTimeRangeSelectionPossible(): boolean {\n        return this.checkOnlyTimeRangeSelectionPossible(this.activeTab)\n    }\n\n    @computed get isSingleTimeSelectionActive(): boolean {\n        return (\n            this.onlySingleTimeSelectionPossible ||\n            this.isSingleTimeScatterAnimationActive ||\n            this.isSingleTimeMapAnimationActive\n        )\n    }\n\n    @computed get shouldLinkToOwid(): boolean {\n        if (\n            this.isEmbeddedInAnOwidPage ||\n            this.isExportingToSvgOrPng ||\n            !this.isInIFrame\n        )\n            return false\n\n        return true\n    }\n\n    @computed get hasOWIDLogo(): boolean {\n        return (\n            !this.hideLogo && (this.logo === undefined || this.logo === \"owid\")\n        )\n    }\n\n    @computed get hasFatalErrors(): boolean {\n        const { relatedQuestions = [] } = this\n        return relatedQuestions.some(\n            (question) => !!getErrorMessageRelatedQuestionUrl(question)\n        )\n    }\n\n    @action.bound setTab(newTab: GrapherTabName): void {\n        this.tab = this.mapTabNameToTabConfigOption(newTab)\n    }\n\n    @action.bound private ensureHandlesAreOnSameTime(): void {\n        if (this.areHandlesOnSameTime) return\n\n        this.timelineHandleTimeBounds = [\n            this.endHandleTimeBound,\n            this.endHandleTimeBound,\n        ]\n    }\n\n    @action.bound private ensureHandlesAreOnDifferentTimes(): void {\n        if (!this.areHandlesOnSameTime) return\n\n        const time = this.startTime // startTime = endTime\n        if (time === this.closestTimelineMinTime) {\n            this.timelineHandleTimeBounds = [time ?? -Infinity, Infinity]\n        } else {\n            this.timelineHandleTimeBounds = [-Infinity, time ?? Infinity]\n        }\n    }\n\n    @computed get entitySelector(): EntitySelector {\n        const entitySelectorArray = this.isOnMapTab\n            ? this.mapConfig.selection\n            : this.selection\n        return new EntitySelector({\n            manager: this,\n            selection: entitySelectorArray,\n        })\n    }\n\n    private checkOnlySingleTimeSelectionPossible = (\n        tabName: GrapherTabName\n    ): boolean => {\n        // Scatters aren't included here because although single-time selection\n        // is preferred, start and end time selection is still possible\n        return [\n            GRAPHER_TAB_NAMES.DiscreteBar,\n            GRAPHER_TAB_NAMES.StackedDiscreteBar,\n            GRAPHER_TAB_NAMES.Marimekko,\n        ].includes(tabName as any)\n    }\n\n    private checkOnlyTimeRangeSelectionPossible = (\n        tabName: GrapherTabName\n    ): boolean => {\n        return [\n            GRAPHER_TAB_NAMES.LineChart,\n            GRAPHER_TAB_NAMES.SlopeChart,\n        ].includes(tabName as any)\n    }\n\n    private checkSingleTimeSelectionPreferred = (\n        tabName: GrapherTabName\n    ): boolean => {\n        // Scatter plots can show a time range, but a single time is preferred\n        return [GRAPHER_TAB_NAMES.ScatterPlot].includes(tabName as any)\n    }\n\n    @action.bound ensureTimeHandlesAreSensibleForTab(\n        tab: GrapherTabName\n    ): void {\n        if (\n            this.checkOnlySingleTimeSelectionPossible(tab) ||\n            this.checkSingleTimeSelectionPreferred(tab)\n        ) {\n            this.ensureHandlesAreOnSameTime()\n        } else if (this.checkOnlyTimeRangeSelectionPossible(tab)) {\n            this.ensureHandlesAreOnDifferentTimes()\n        }\n    }\n\n    @action.bound private ensureEntitySelectionIsSensibleForTab(\n        tab: GrapherTabName\n    ): void {\n        // No-op if the current tab is a map or table tab\n        if (!isChartTab(tab)) return\n\n        const isChartTypeThatShowsAllEntities =\n            this.isChartTypeThatShowsAllEntities(tab)\n\n        // If the chart show all entities (e.g. scatter plot or Marimekko chart),\n        // then we typically prefer no selection unless the user has explicitly\n        // made changes to the default selection\n        if (\n            isChartTypeThatShowsAllEntities &&\n            !this.areSelectedEntitiesDifferentThanAuthors\n        ) {\n            this.selection.clearSelection()\n        }\n\n        // If the chart type only shows a subset of entities at a time\n        // (e.g. line chart), then an empty selection is not useful, so we\n        // automatically apply the author's selection\n        if (!isChartTypeThatShowsAllEntities && !this.selection.hasSelection) {\n            this.applyOriginalSelectionAsAuthored()\n        }\n    }\n\n    @action.bound onChartSwitching(\n        _oldTab: GrapherTabName,\n        newTab: GrapherTabName\n    ): void {\n        if (!this.isReady)\n            console.warn(\n                \"onChartSwitching has been called before grapher has loaded its data, this is probably a mistake\"\n            )\n\n        this.ensureTimeHandlesAreSensibleForTab(newTab)\n        this.ensureEntitySelectionIsSensibleForTab(newTab)\n\n        // Stop animation when switching to a tab where playback is disabled\n        if (this.disablePlay && this.isTimelineAnimationActive) {\n            this.timelineController.stop()\n        }\n    }\n\n    @action.bound syncEntitySelectionBetweenChartAndMap(\n        oldTab: GrapherTabName,\n        newTab: GrapherTabName\n    ): void {\n        // Sync entity selection between the map and the chart tab if entity\n        // selection is enabled for the map, and the map has been interacted\n        // with, i.e. at least one country has been selected on the map\n        const shouldSyncSelection =\n            this.addCountryMode !== EntitySelectionMode.Disabled &&\n            this.isMapSelectionEnabled &&\n            this.mapConfig.selection.hasSelection\n\n        // Switching from the chart tab to the map tab\n        if (!isMapTab(oldTab) && isMapTab(newTab) && shouldSyncSelection) {\n            this.mapConfig.selection.setSelectedEntities(\n                this.selection.selectedEntityNames\n            )\n        }\n\n        // Switching from the map tab to the chart tab\n        if (isMapTab(oldTab) && !isMapTab(newTab) && shouldSyncSelection) {\n            this.selection.setSelectedEntities(\n                this.mapConfig.selection.selectedEntityNames\n            )\n        }\n    }\n\n    @action.bound private validateEntitySelectorState(\n        newTab: GrapherTabName\n    ): void {\n        if (isMapTab(newTab) || isChartTab(newTab)) {\n            const { entitySelector } = this\n\n            // The map and chart tab might have a different set of sort columns;\n            // if the currently selected sort column is invalid, reset it to the default\n            const sortSlug = entitySelector.sortConfig.slug\n            if (!entitySelector.isSortSlugValid(sortSlug)) {\n                this.entitySelectorState.sortConfig =\n                    entitySelector.getDefaultSortConfig()\n            }\n\n            // The map and chart tab might have a different set of entity filters;\n            // if the currently selected entity filter is invalid, reset it\n            const { entityFilter } = this.entitySelectorState\n            if (entityFilter) {\n                if (!this.entitySelector.isEntityFilterValid(entityFilter)) {\n                    this.entitySelectorState.entityFilter = undefined\n                }\n            }\n\n            // The map column slug might be interpolated with different\n            // tolerance values on the chart and the map tab\n            entitySelector.resetInterpolatedMapColumn()\n        }\n    }\n\n    @action.bound onTabChange(\n        oldTab: GrapherTabName,\n        newTab: GrapherTabName\n    ): void {\n        this.onChartSwitching(oldTab, newTab)\n        this.syncEntitySelectionBetweenChartAndMap(oldTab, newTab)\n        this.validateEntitySelectorState(newTab)\n    }\n\n    @action.bound private ensureValidConfigWhenEditing(): void {\n        const disposers = [\n            autorun(() => {\n                if (!this.availableTabs.includes(this.activeTab))\n                    runInAction(() => this.setTab(this.availableTabs[0]))\n            }),\n            autorun(() => {\n                const validDimensions = this.validDimensions\n                if (!_.isEqual(this.dimensions, validDimensions))\n                    this.dimensions = validDimensions\n            }),\n        ]\n        this.disposers.push(...disposers)\n    }\n\n    @computed private get validDimensions(): ChartDimension[] {\n        const { dimensions } = this\n        const validProperties = this.dimensionSlots.map((d) => d.property)\n        let validDimensions = dimensions.filter((dim) =>\n            validProperties.includes(dim.property)\n        )\n\n        this.dimensionSlots.forEach((slot) => {\n            if (!slot.allowMultiple)\n                validDimensions = _.uniqWith(\n                    validDimensions,\n                    (\n                        a: OwidChartDimensionInterface,\n                        b: OwidChartDimensionInterface\n                    ) =>\n                        a.property === slot.property &&\n                        a.property === b.property\n                )\n        })\n\n        return validDimensions\n    }\n\n    @computed get originUrlWithProtocol(): string {\n        if (!this.originUrl) return \"\"\n        let url = this.originUrl\n\n        // If the URL is relative, make it absolute to ourworldindata.org.\n        // we could also opt to make it relative to bakedGrapherUrl, but then we'd\n        // end up with different URLs than prod on staging servers and in the SVG tester,\n        // which could also affect positioning.\n        if (url.startsWith(\"/\")) {\n            url = new URL(url, GRAPHER_PROD_URL).href\n        }\n        if (!url.startsWith(\"http\")) url = `https://${url}`\n        return url\n    }\n\n    @computed get timelineHandleTimeBounds(): TimeBounds {\n        if (this.isOnMapTab) {\n            const endTime = maxTimeBoundFromJSONOrPositiveInfinity(\n                this.map.time\n            )\n\n            // If a start time is provided, use it; otherwise, set it to the end time\n            // so that a single map (not a faceted one) is shown by default\n            const startTime =\n                this.map.startTime === undefined\n                    ? endTime\n                    : minTimeBoundFromJSONOrNegativeInfinity(this.map.startTime)\n\n            return [startTime, endTime]\n        }\n\n        // If the timeline is hidden on the chart tab but displayed on the table tab\n        // (which is the case for charts that plot time on the x-axis),\n        // we always want to use the authored `minTime` and `maxTime` for the chart,\n        // irrespective of the time range the user might have selected on the table tab\n        if (this.isOnChartTab && this.hasTimeDimensionButTimelineIsHidden) {\n            const { minTime, maxTime } = this.authorsVersion\n            return [\n                minTimeBoundFromJSONOrNegativeInfinity(minTime),\n                maxTimeBoundFromJSONOrPositiveInfinity(maxTime),\n            ]\n        }\n\n        return [\n            // Handle `undefined` values in minTime/maxTime\n            minTimeBoundFromJSONOrNegativeInfinity(this.minTime),\n            maxTimeBoundFromJSONOrPositiveInfinity(this.maxTime),\n        ]\n    }\n\n    set timelineHandleTimeBounds(value: TimeBounds) {\n        if (this.isOnMapTab) {\n            this.map.startTime = value[0]\n            this.map.time = value[1]\n        } else {\n            this.minTime = value[0]\n            this.maxTime = value[1]\n        }\n    }\n\n    /** Dimension slots appropriate for the given chart types */\n    @computed get dimensionSlots(): DimensionSlot[] {\n        const dimensionProperties = getSupportedDimensionsForChartTypes(\n            this.validChartTypes\n        )\n        return dimensionProperties.map(\n            (property) => new DimensionSlot(this, property)\n        )\n    }\n\n    @computed.struct get filledDimensions(): ChartDimension[] {\n        return this.isReady ? this.dimensions : []\n    }\n\n    @action.bound addDimension(config: OwidChartDimensionInterface): void {\n        this.dimensions.push(new ChartDimension(config, this))\n    }\n\n    @action.bound setDimensionsForProperty(\n        property: DimensionProperty,\n        newConfigs: OwidChartDimensionInterface[]\n    ): void {\n        let newDimensions: ChartDimension[] = []\n        this.dimensionSlots.forEach((slot) => {\n            if (slot.property === property)\n                newDimensions = newDimensions.concat(\n                    newConfigs.map((config) => new ChartDimension(config, this))\n                )\n            else newDimensions = newDimensions.concat(slot.dimensions)\n        })\n        this.dimensions = newDimensions\n    }\n\n    @action.bound setDimensionsFromConfigs(\n        configs: OwidChartDimensionInterface[]\n    ): void {\n        this.dimensions = configs.map(\n            (config) => new ChartDimension(config, this)\n        )\n    }\n\n    @computed get defaultSlug(): string {\n        return slugify(this.displayTitle)\n    }\n\n    @computed get displaySlug(): string {\n        return this.slug ?? this.defaultSlug\n    }\n\n    // Used for superscript numbers in static exports\n    @computed get detailsOrderedByReference(): string[] {\n        if (typeof window === \"undefined\") return []\n\n        // Extract details from supporting text\n        const subtitleDetails = !this.hideSubtitle\n            ? extractDetailsFromSyntax(this.currentSubtitle)\n            : []\n        const noteDetails = !this.hideNote\n            ? extractDetailsFromSyntax(this.note ?? \"\")\n            : []\n\n        // Extract details from axis labels\n        const yAxisDetails = extractDetailsFromSyntax(\n            this.yAxisConfig.label || \"\"\n        )\n        const xAxisDetails = extractDetailsFromSyntax(\n            this.xAxisConfig.label || \"\"\n        )\n\n        // Text fragments are ordered by appearance\n        const uniqueDetails = _.uniq([\n            ...subtitleDetails,\n            ...yAxisDetails,\n            ...xAxisDetails,\n            ...noteDetails,\n        ])\n\n        return uniqueDetails\n    }\n\n    @computed get detailsMarkerInSvg(): DetailsMarker {\n        const { isStatic, shouldIncludeDetailsInStaticExport } = this\n        return !isStatic\n            ? \"underline\"\n            : shouldIncludeDetailsInStaticExport\n              ? \"superscript\"\n              : \"none\"\n    }\n\n    // Used for static exports\n    @computed get detailRenderers(): MarkdownTextWrap[] {\n        if (typeof window === \"undefined\") return []\n        return this.detailsOrderedByReference.map((term, i) => {\n            let text = `**${i + 1}.** `\n            const detail: EnrichedDetail | undefined = window.details?.[term]\n            if (detail && detail.text) {\n                const lines = detail.text.split(\"\\n\")\n                const title = lines[0]\n                const description = lines.slice(2).join(\"\\n\")\n                text += `**${title}** ${description}`\n            }\n\n            // We can't use the computed property here because Grapher might\n            // not currently be in static mode\n            const baseFontSize = this.areStaticBoundsSmall\n                ? this.computeBaseFontSizeFromHeight(this.staticBounds)\n                : 18\n\n            return new MarkdownTextWrap({\n                text,\n                fontSize: (11 / BASE_FONT_SIZE) * baseFontSize,\n                // Leave room for padding on the left and right\n                maxWidth:\n                    this.staticBounds.width -\n                    2 * GRAPHER_FRAME_PADDING_HORIZONTAL,\n                lineHeight: 1.2,\n                style: { fill: GRAPHER_LIGHT_TEXT },\n            })\n        })\n    }\n\n    @computed get hasProjectedData(): boolean {\n        return this.inputTable.numericColumnSlugs.some(\n            (slug) => this.inputTable.get(slug).isProjection\n        )\n    }\n\n    @computed get projectionColumnInfoBySlug(): Map<\n        ColumnSlug,\n        ProjectionColumnInfo\n    > {\n        const table = this.inputTable\n\n        const [projectionSlugs, nonProjectionSlugs] = R.partition(\n            this.yColumnSlugs,\n            (slug) => table.get(slug).isProjection\n        )\n\n        if (!projectionSlugs.length) return new Map()\n\n        const projectionColumnInfoBySlug = new Map<\n            ColumnSlug,\n            ProjectionColumnInfo\n        >()\n\n        const findHistoricalSlugForProjection = (\n            projectedSlug: ColumnSlug\n        ): ColumnSlug | undefined => {\n            // If there is only one non-projection column, we trivially match it to the projection\n            if (nonProjectionSlugs.length === 1) return nonProjectionSlugs[0]\n\n            // Try to find a historical column with the same display name\n            const displayName = table.get(projectedSlug).displayName\n            return nonProjectionSlugs.find(\n                (slug) => table.get(slug).displayName === displayName\n            )\n        }\n\n        for (const projectedSlug of projectionSlugs) {\n            const historicalSlug =\n                findHistoricalSlugForProjection(projectedSlug)\n            if (historicalSlug) {\n                const combinedSlug = `${projectedSlug}-${historicalSlug}`\n                const slugForIsProjectionColumn = `${combinedSlug}-isProjection`\n\n                projectionColumnInfoBySlug.set(projectedSlug, {\n                    projectedSlug,\n                    historicalSlug,\n                    combinedSlug,\n                    slugForIsProjectionColumn,\n                })\n            }\n        }\n\n        return projectionColumnInfoBySlug\n    }\n\n    @computed get validChartTypes(): GrapherChartType[] {\n        const chartTypeSet = new Set(this.chartTypes)\n\n        // All single-chart Graphers are valid\n        if (chartTypeSet.size <= 1) return Array.from(chartTypeSet)\n\n        // Find valid combination in a pre-defined list\n        const validChartTypes = findValidChartTypeCombination(\n            Array.from(chartTypeSet)\n        )\n\n        // If the given combination is not valid, then ignore all but the first chart type\n        if (!validChartTypes) return this.chartTypes.slice(0, 1)\n\n        // Projected data is only supported for line and discrete bar charts\n        const isLineChart = validChartTypes[0] === GRAPHER_CHART_TYPES.LineChart\n        if (isLineChart && this.hasProjectedData) {\n            return validChartTypes.filter(\n                (type) =>\n                    type === GRAPHER_CHART_TYPES.LineChart ||\n                    type === GRAPHER_CHART_TYPES.DiscreteBar\n            )\n        }\n\n        return validChartTypes\n    }\n\n    @computed get validChartTypeSet(): Set<GrapherChartType> {\n        return new Set(this.validChartTypes)\n    }\n\n    @computed get availableTabs(): GrapherTabName[] {\n        const availableTabs: GrapherTabName[] = []\n        if (this.hasTableTab) availableTabs.push(GRAPHER_TAB_NAMES.Table)\n        if (this.hasMapTab) availableTabs.push(GRAPHER_TAB_NAMES.WorldMap)\n        availableTabs.push(...this.validChartTypes)\n        return availableTabs\n    }\n\n    @computed get hasMultipleChartTypes(): boolean {\n        return this.validChartTypes.length > 1\n    }\n\n    @computed get currentSubtitle(): string {\n        const subtitle = this.subtitle\n        if (subtitle !== undefined) return subtitle\n        const yColumns = this.yColumnsFromDimensions\n        if (yColumns.length === 1) return yColumns[0].def.descriptionShort ?? \"\"\n        return \"\"\n    }\n\n    @computed get shouldAddEntitySuffixToTitle(): boolean {\n        const selectedEntityNames = this.selection.selectedEntityNames\n        const showEntityAnnotation = !this.hideAnnotationFieldsInTitle?.entity\n\n        const seriesStrategy =\n            this.chartState.seriesStrategy ||\n            autoDetectSeriesStrategy(this, true)\n\n        return !!(\n            !this.forceHideAnnotationFieldsInTitle?.entity &&\n            this.isOnChartTab &&\n            (seriesStrategy !== SeriesStrategy.entity ||\n                !this.showLegend ||\n                !this.showSeriesLabels) &&\n            selectedEntityNames.length === 1 &&\n            (showEntityAnnotation ||\n                this.canChangeEntity ||\n                this.canSelectMultipleEntities)\n        )\n    }\n\n    @computed get shouldAddTimeSuffixToTitle(): boolean {\n        const showTimeAnnotation = !this.hideAnnotationFieldsInTitle?.time\n        return (\n            !this.forceHideAnnotationFieldsInTitle?.time &&\n            this.isReady &&\n            (showTimeAnnotation ||\n                (this.hasTimeline &&\n                    // Chart types that refer to the current time only in the timeline\n                    (this.isOnDiscreteBarTab ||\n                        this.isOnStackedDiscreteBarTab ||\n                        this.isOnMarimekkoTab ||\n                        this.isOnMapTab)))\n        )\n    }\n\n    @computed get shouldAddChangeInPrefixToTitle(): boolean {\n        const showChangeInPrefix =\n            !this.hideAnnotationFieldsInTitle?.changeInPrefix\n        return (\n            !this.forceHideAnnotationFieldsInTitle?.changeInPrefix &&\n            (this.isOnLineChartTab || this.isOnSlopeChartTab) &&\n            this.isRelativeMode &&\n            showChangeInPrefix\n        )\n    }\n\n    /** Check if 'vs. x-axis label' should be added to the title */\n    @computed private get shouldAddXIndicatorLabelToTitle(): boolean {\n        return (\n            // Only add if currently on the scatter tab\n            this.isOnScatterTab &&\n            // Don't add if the main chart type is a scatter\n            !this.isScatter &&\n            // Check if an x-column is available\n            this.isReady &&\n            !!this.xColumnSlug &&\n            this.inputTable.has(this.xColumnSlug)\n        )\n    }\n\n    @computed get currentTitle(): string {\n        let text = this.displayTitle.trim()\n        if (text.length === 0) return text\n\n        // Helper function to add an annotation fragment to the title;\n        // only adds a comma if the text does not end with a question mark\n        const appendAnnotationField = (\n            text: string,\n            annotation: string\n        ): string => {\n            const separator = text.endsWith(\"?\") ? \"\" : \",\"\n            return `${text}${separator} ${annotation}`\n        }\n\n        // Add the x-axis label to the title for secondary scatter plots\n        if (this.shouldAddXIndicatorLabelToTitle) {\n            const xAxisLabel =\n                this.xAxisConfig.label ??\n                this.inputTable.get(this.xColumnSlug).titlePublicOrDisplayName\n                    .title\n            if (xAxisLabel) text += ` vs. ${xAxisLabel}`\n        }\n\n        if (this.shouldAddEntitySuffixToTitle) {\n            const selectedEntityNames = this.selection.selectedEntityNames\n            const entityStr = selectedEntityNames[0]\n            if (entityStr?.length) text = appendAnnotationField(text, entityStr)\n        }\n\n        if (this.shouldAddChangeInPrefixToTitle)\n            text = \"Change in \" + lowerCaseFirstLetterUnlessAbbreviation(text)\n\n        if (this.shouldAddTimeSuffixToTitle && this.timeTitleSuffix)\n            text = appendAnnotationField(text, this.timeTitleSuffix)\n\n        return text.trim()\n    }\n\n    /**\n     * Uses some explicit and implicit information to decide whether a timeline is shown.\n     */\n    @computed get hasTimeline(): boolean {\n        // We don't have more than one distinct time point in our data, so it doesn't make sense to show a timeline\n        if (this.times.length <= 1) return false\n\n        switch (this.activeTab) {\n            // The map tab has its own `hideTimeline` option\n            case GRAPHER_TAB_NAMES.WorldMap:\n                return !this.map.hideTimeline\n\n            // Use the chart-level `hideTimeline` option for the table, with some exceptions\n            case GRAPHER_TAB_NAMES.Table:\n                // Always show the timeline for charts that plot time on the x-axis\n                if (this.hasTimeDimension) return true\n                return !this.hideTimeline\n\n            // Use the chart-level `hideTimeline` option\n            default:\n                return !this.hideTimeline\n        }\n    }\n\n    @computed private get areHandlesOnSameTime(): boolean {\n        const times = sortNumeric(this.table.timeColumn.uniqValues.slice())\n        const [start, end] = this.timelineHandleTimeBounds.map((time) =>\n            findClosestTime(times, time)\n        )\n        return start === end\n    }\n\n    @computed get mapColumnSlug(): string {\n        const mapColumnSlug = this.map.columnSlug\n        // If there's no mapColumnSlug or there is one but it's not in the dimensions array, use the first ycolumn\n        if (\n            !mapColumnSlug ||\n            !this.dimensions.some((dim) => dim.columnSlug === mapColumnSlug)\n        )\n            return this.yColumnSlug!\n        return mapColumnSlug\n    }\n\n    private getSlugForProperty(\n        property: DimensionProperty\n    ): string | undefined {\n        return this.dimensions.find((dim) => dim.property === property)\n            ?.columnSlug\n    }\n\n    @computed get yColumnsFromDimensions(): CoreColumn[] {\n        return this.filledDimensions\n            .filter((dim) => dim.property === DimensionProperty.y)\n            .map((dim) => dim.column)\n    }\n\n    @computed private get inputYColumnSlugs(): string[] {\n        return this.ySlugs\n            ? this.ySlugs.split(\" \")\n            : this.dimensions\n                  .filter((dim) => dim.property === DimensionProperty.y)\n                  .map((dim) => dim.columnSlug)\n    }\n\n    @computed private get inputYColumnSlug(): string | undefined {\n        return this.ySlugs\n            ? this.ySlugs.split(\" \")[0]\n            : this.getSlugForProperty(DimensionProperty.y)\n    }\n\n    @computed private get inputXColumnSlug(): string | undefined {\n        return this.xSlug ?? this.getSlugForProperty(DimensionProperty.x)\n    }\n\n    @computed private get inputSizeColumnSlug(): string | undefined {\n        return this.sizeSlug ?? this.getSlugForProperty(DimensionProperty.size)\n    }\n\n    @computed private get inputColorColumnSlug(): string | undefined {\n        return (\n            this.colorSlug ?? this.getSlugForProperty(DimensionProperty.color)\n        )\n    }\n\n    @computed private get inputNumericColorColumnSlug(): string | undefined {\n        if (!this.inputColorColumnSlug) return undefined\n\n        const colorColumn = this.inputTable.get(this.inputColorColumnSlug)\n        if (!colorColumn.isMissing && colorColumn.hasNumberFormatting)\n            return this.inputColorColumnSlug\n\n        return undefined\n    }\n\n    @computed private get inputCategoricalColorColumnSlug():\n        | string\n        | undefined {\n        if (!this.inputColorColumnSlug) return undefined\n        return this.inputNumericColorColumnSlug\n            ? undefined\n            : this.inputColorColumnSlug\n    }\n\n    /** Y column slugs used by the active tab */\n    @computed get yColumnSlugs(): ColumnSlug[] {\n        return this.inputYColumnSlugs\n    }\n\n    /** Y column slug used by the active tab */\n    @computed get yColumnSlug(): ColumnSlug | undefined {\n        return this.inputYColumnSlug\n    }\n\n    /** Color column slug used by the active tab */\n    @computed get colorColumnSlug(): ColumnSlug | undefined {\n        if (!this.inputColorColumnSlug) return undefined\n\n        // Line and DiscreteBar charts only support numeric color columns\n        if (this.isOnLineChartTab || this.isOnDiscreteBarTab) {\n            return this.inputNumericColorColumnSlug\n        }\n\n        // ScatterPlot and Marimekko charts only support categorical color columns\n        if (this.isOnScatterTab || this.isOnMarimekkoTab) {\n            return this.inputCategoricalColorColumnSlug\n        }\n\n        return this.inputColorColumnSlug\n    }\n\n    /** X column slug used by the active tab */\n    @computed get xColumnSlug(): ColumnSlug | undefined {\n        // Marimekkos ignore the x column when there's also a scatter plot\n        if (this.isOnMarimekkoTab && this.hasScatter) return undefined\n\n        return this.inputXColumnSlug\n    }\n\n    /** Size column slug used by the active tab */\n    @computed get sizeColumnSlug(): ColumnSlug | undefined {\n        return this.inputSizeColumnSlug\n    }\n\n    @computed private get yScaleType(): ScaleType | undefined {\n        return this.yAxis.scaleType\n    }\n\n    @computed\n    private get isOnScatterWithTimeOverride(): boolean {\n        const xColumn = this.inputTable.get(this.xColumnSlug)\n        const yColumn = this.inputTable.get(this.yColumnSlug)\n\n        return !!(\n            this.isOnScatterTab &&\n            xColumn.def.owidVariableId !== undefined &&\n            xColumn.def.owidVariableId === yColumn.def.owidVariableId &&\n            this.xOverrideTime\n        )\n    }\n\n    @computed private get timeTitleSuffix(): string | undefined {\n        const { startTime, endTime, xOverrideTime } = this\n\n        const timeColumn = this.table.timeColumn\n        if (timeColumn.isMissing) return undefined // Do not show year until data is loaded\n\n        // Add 'Time vs. Time' suffix for scatter plots with time override\n        if (this.isOnScatterWithTimeOverride) {\n            const times = _.sortBy([endTime, xOverrideTime])\n            return times\n                .map((time) => timeColumn.formatValue(time))\n                .join(\" vs. \")\n        }\n\n        if (startTime === undefined || endTime === undefined) return undefined\n\n        const time =\n            startTime === endTime\n                ? timeColumn.formatValue(startTime)\n                : timeColumn.formatValue(startTime) +\n                  \" to \" +\n                  timeColumn.formatValue(endTime)\n\n        return time\n    }\n\n    @computed get sourcesLine(): string {\n        return this.sourceDesc ?? this.defaultSourcesLine\n    }\n\n    /** All column slugs configured by the author (y, x, size, color) */\n    @computed get inputColumnSlugs(): ColumnSlug[] {\n        return excludeUndefined([\n            ...this.inputYColumnSlugs,\n            this.inputXColumnSlug,\n            this.inputSizeColumnSlug,\n            this.inputColorColumnSlug,\n        ])\n    }\n\n    @computed get inputColumnsWithSources(): CoreColumn[] {\n        return this.inputTable\n            .getColumns(_.uniq(this.inputColumnSlugs))\n            .filter(\n                (column) =>\n                    !!column.source.name || !_.isEmpty(column.def.origins)\n            )\n    }\n\n    private set facetStrategy(facet: FacetStrategy) {\n        this.selectedFacetStrategy = facet\n    }\n\n    set baseFontSize(val: number) {\n        this._baseFontSize = val\n    }\n\n    @computed private get defaultSourcesLine(): string {\n        const columnSlugs = pickColumnsForSourcesLine({\n            table: this.inputTable,\n            yColumnSlugs: this.yColumnSlugs,\n            xColumnSlug: this.xColumnSlug,\n            sizeColumnSlug: this.sizeColumnSlug,\n            colorColumnSlug: this.colorColumnSlug,\n            activeTab: this.activeTab,\n        })\n        const columns = this.inputTable.getColumns(columnSlugs)\n        return buildSourcesLineFromColumns(columns)\n    }\n\n    @computed private get axisDimensions(): ChartDimension[] {\n        return this.filledDimensions.filter(\n            (dim) =>\n                dim.property === DimensionProperty.y ||\n                dim.property === DimensionProperty.x\n        )\n    }\n\n    @computed get yColumnsFromDimensionsOrSlugsOrAuto(): CoreColumn[] {\n        return this.yColumnsFromDimensions.length\n            ? this.yColumnsFromDimensions\n            : this.table.getColumns(autoDetectYColumnSlugs(this))\n    }\n\n    @computed get defaultTitle(): string {\n        const yColumns = this.yColumnsFromDimensionsOrSlugsOrAuto\n\n        if (this.isScatter)\n            return this.axisDimensions\n                .map(\n                    (dimension) =>\n                        dimension.column.titlePublicOrDisplayName.title\n                )\n                .join(\" vs. \")\n\n        const uniqueDatasetNames = _.uniq(\n            excludeUndefined(\n                yColumns.map((col) => (col.def as OwidColumnDef).datasetName)\n            )\n        )\n\n        if (this.hasMultipleYColumns && uniqueDatasetNames.length === 1)\n            return uniqueDatasetNames[0]\n\n        if (yColumns.length === 2)\n            return yColumns\n                .map((col) => col.titlePublicOrDisplayName.title)\n                .join(\" and \")\n\n        return yColumns\n            .map((col) => col.titlePublicOrDisplayName.title)\n            .join(\", \")\n    }\n\n    @computed get displayTitle(): string {\n        if (this.title) return this.title\n        if (this.isReady) return this.defaultTitle\n        return \"\"\n    }\n\n    @computed get isLineChart(): boolean {\n        return (\n            this.chartType === GRAPHER_CHART_TYPES.LineChart || !this.chartType\n        )\n    }\n\n    @computed get isScatter(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.ScatterPlot\n    }\n\n    @computed get isStackedArea(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.StackedArea\n    }\n\n    @computed get isSlopeChart(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.SlopeChart\n    }\n\n    @computed get isDiscreteBar(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.DiscreteBar\n    }\n\n    @computed get isStackedBar(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.StackedBar\n    }\n\n    @computed get isMarimekko(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.Marimekko\n    }\n\n    @computed get isStackedDiscreteBar(): boolean {\n        return this.chartType === GRAPHER_CHART_TYPES.StackedDiscreteBar\n    }\n\n    @computed get isOnLineChartTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.LineChart\n    }\n\n    @computed get isOnScatterTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.ScatterPlot\n    }\n\n    @computed get isOnStackedAreaTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.StackedArea\n    }\n\n    @computed get isOnSlopeChartTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.SlopeChart\n    }\n\n    @computed get isOnDiscreteBarTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.DiscreteBar\n    }\n\n    @computed get isOnStackedBarTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.StackedBar\n    }\n\n    @computed get isOnMarimekkoTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.Marimekko\n    }\n\n    @computed get isOnStackedDiscreteBarTab(): boolean {\n        return this.activeChartType === GRAPHER_CHART_TYPES.StackedDiscreteBar\n    }\n\n    @computed get hasLineChart(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.LineChart)\n    }\n\n    @computed get hasSlopeChart(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.SlopeChart)\n    }\n\n    @computed get hasDiscreteBar(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.DiscreteBar)\n    }\n\n    @computed get hasMarimekko(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.Marimekko)\n    }\n\n    @computed get hasScatter(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.ScatterPlot)\n    }\n\n    @computed get hasStackedArea(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.StackedArea)\n    }\n\n    @computed get hasStackedBar(): boolean {\n        return this.validChartTypeSet.has(GRAPHER_CHART_TYPES.StackedBar)\n    }\n\n    @computed get hasStackedDiscreteBar(): boolean {\n        return this.validChartTypeSet.has(\n            GRAPHER_CHART_TYPES.StackedDiscreteBar\n        )\n    }\n\n    @computed get supportsMultipleYColumns(): boolean {\n        return !this.isScatter\n    }\n\n    @computed private get xDimension(): ChartDimension | undefined {\n        return this.filledDimensions.find(\n            (d) => d.property === DimensionProperty.x\n        )\n    }\n\n    /** Overrides the x axis dimension to target a special year */\n    @computed get xOverrideTime(): number | undefined {\n        return this.xDimension?.targetYear\n    }\n\n    set xOverrideTime(value: number | undefined) {\n        this.xDimension!.targetYear = value\n    }\n\n    @computed get defaultBounds(): Bounds {\n        return new Bounds(0, 0, DEFAULT_GRAPHER_WIDTH, DEFAULT_GRAPHER_HEIGHT)\n    }\n\n    async generateStaticSvg(\n        renderToHtmlString: (element: React.ReactElement) => string\n    ): Promise<string> {\n        // Wait for peer country application if requested but not yet applied\n        if (this.shouldApplyPeerCountries)\n            await this.applyPeerCountriesIfNeeded()\n\n        // Temporarily set isExportingToSvgOrPng to true\n        const _isExportingToSvgOrPng = this.isExportingToSvgOrPng\n        this.isExportingToSvgOrPng = true\n\n        const innerHTML = renderToHtmlString(<Chart manager={this} />)\n\n        // Restore isExportingToSvgOrPng\n        this.isExportingToSvgOrPng = _isExportingToSvgOrPng\n\n        return innerHTML\n    }\n\n    @computed get staticBoundsWithDetails(): Bounds {\n        const includeDetails =\n            this.shouldIncludeDetailsInStaticExport &&\n            !_.isEmpty(this.detailRenderers)\n\n        let height = this.staticBounds.height\n        if (includeDetails) {\n            height +=\n                2 * GRAPHER_FRAME_PADDING_VERTICAL +\n                sumTextWrapHeights(\n                    this.detailRenderers,\n                    STATIC_EXPORT_DETAIL_SPACING\n                )\n        }\n\n        return new Bounds(0, 0, this.staticBounds.width, height)\n    }\n\n    rasterize: GrapherRasterizeFn = async ({ includeDetails }) => {\n        const _shouldIncludeDetailsInStaticExport =\n            this.shouldIncludeDetailsInStaticExport\n        this.shouldIncludeDetailsInStaticExport = includeDetails\n\n        const { width, height } = this.staticBoundsWithDetails\n\n        try {\n            // We need to ensure `rasterize` is only called on the client-side, otherwise this will fail\n            const staticSVG = await this.generateStaticSvg(\n                reactRenderToStringClientOnly\n            )\n            return new StaticChartRasterizer(staticSVG, width, height).render()\n        } finally {\n            this.shouldIncludeDetailsInStaticExport =\n                _shouldIncludeDetailsInStaticExport\n        }\n    }\n\n    @computed get disableIntroAnimation(): boolean {\n        return this.isStatic\n    }\n\n    @computed get mapConfig(): MapConfig {\n        return this.map\n    }\n\n    @computed get relativeToggleLabel(): string {\n        if (this.isOnScatterTab) return \"Display average annual change\"\n        else if (this.isOnLineChartTab || this.isOnSlopeChartTab)\n            return \"Display relative change\"\n        return \"Display relative values\"\n    }\n\n    @computed get isRelativeMode(): boolean {\n        // Don't allow relative mode in some cases\n        if (\n            this.hasSingleMetricInFacets ||\n            this.hasSingleEntityInFacets ||\n            this.isStackedChartSplitByMetric\n        )\n            return false\n        return this.stackMode === StackMode.relative\n    }\n\n    @computed get canToggleRelativeMode(): boolean {\n        const {\n            isOnLineChartTab,\n            isOnSlopeChartTab,\n            hideRelativeToggle,\n            areHandlesOnSameTime,\n            yScaleType,\n            hasSingleEntityInFacets,\n            hasSingleMetricInFacets,\n            xColumnSlug,\n            isOnMarimekkoTab,\n            isStackedChartSplitByMetric,\n        } = this\n\n        if (isOnLineChartTab || isOnSlopeChartTab)\n            return (\n                !hideRelativeToggle &&\n                !areHandlesOnSameTime &&\n                yScaleType !== ScaleType.log\n            )\n\n        // Exclude relative mode with just one metric or entity\n        if (\n            hasSingleEntityInFacets ||\n            hasSingleMetricInFacets ||\n            isStackedChartSplitByMetric\n        )\n            return false\n\n        // Disable relative mode for Marimekko charts without an x dimension\n        if (isOnMarimekkoTab && !xColumnSlug) return false\n\n        return !hideRelativeToggle\n    }\n\n    @computed private get isTouchDevice(): boolean {\n        return isTouchDevice()\n    }\n\n    @computed private get isMobile(): boolean {\n        return isMobile()\n    }\n\n    /** externalBounds should be set to the available plotting area for a\n        Grapher that resizes itself to fit. When this area changes,\n        externalBounds should be updated. Updating externalBounds can\n        trigger a bunch of somewhat expensive recalculations so it might\n        be worth debouncing updates (e.g. when drag-resizing) */\n    @computed get externalBounds(): Bounds {\n        const { _externalBounds, initialOptions } = this\n        return (\n            _externalBounds ?? initialOptions.bounds ?? DEFAULT_GRAPHER_BOUNDS\n        )\n    }\n\n    set externalBounds(bounds: Bounds) {\n        this._externalBounds = bounds\n    }\n\n    @computed get isPortrait(): boolean {\n        return (\n            this.externalBounds.width < this.externalBounds.height &&\n            this.externalBounds.width < DEFAULT_GRAPHER_WIDTH\n        )\n    }\n\n    @computed private get widthForDeviceOrientation(): number {\n        return this.isPortrait ? 400 : 680\n    }\n\n    @computed private get heightForDeviceOrientation(): number {\n        return this.isPortrait ? 640 : 480\n    }\n\n    @computed private get useIdealBounds(): boolean {\n        const {\n            isEditor,\n            isExportingToSvgOrPng,\n            externalBounds,\n            widthForDeviceOrientation,\n            heightForDeviceOrientation,\n            isInIFrame,\n            isInFullScreenMode,\n            windowInnerWidth,\n            windowInnerHeight,\n        } = this\n\n        // In full-screen mode, we usually use all space available to us\n        // We use the ideal bounds only if the available space is very large\n        if (isInFullScreenMode) {\n            if (\n                windowInnerHeight! > 2 * heightForDeviceOrientation &&\n                windowInnerWidth! > 2 * widthForDeviceOrientation\n            )\n                return true\n            return false\n        }\n\n        // For these, defer to the bounds that are set externally\n        if (\n            this.isEmbeddedInADataPage ||\n            this.isEmbeddedInAnOwidPage ||\n            this.manager ||\n            isInIFrame\n        )\n            return false\n\n        // If the user is using interactive version and then goes to export chart, use current bounds to maintain WYSIWYG\n        if (isExportingToSvgOrPng) return false\n\n        // In the editor, we usually want ideal bounds, except when we're rendering a static preview;\n        // in that case, we want to use the given static bounds\n        if (isEditor) return !this.isExportingToSvgOrPng\n\n        // If the available space is very small, we use all of the space given to us\n        if (\n            externalBounds.height < heightForDeviceOrientation ||\n            externalBounds.width < widthForDeviceOrientation\n        )\n            return false\n\n        return true\n    }\n\n    // If we have a big screen to be in, we can define our own aspect ratio and sit in the center\n    @computed private get scaleToFitIdeal(): number {\n        return Math.min(\n            (this.availableWidth * 0.95) / this.widthForDeviceOrientation,\n            (this.availableHeight * 0.95) / this.heightForDeviceOrientation\n        )\n    }\n\n    @computed private get fullScreenPadding(): number {\n        const { windowInnerWidth } = this\n        if (!windowInnerWidth) return 0\n        return windowInnerWidth < 940 ? 0 : 40\n    }\n\n    @computed get hideFullScreenButton(): boolean {\n        if (this.isInFullScreenMode) return false\n        if (!this.isSmall || !this.isMobile || !this.screenHeight) return false\n\n        // Approximate full screen height on mobile devices\n        // that doesn't update when browser UI is shown/hidden\n        const fullScreenHeight = this.screenHeight\n\n        // Hide the full screen button if the full screen height\n        // is barely larger than the current chart height\n        return fullScreenHeight < this.frameBounds.height + 80\n    }\n\n    @computed private get availableWidth(): number {\n        const {\n            externalBounds,\n            isInFullScreenMode,\n            windowInnerWidth,\n            fullScreenPadding,\n        } = this\n\n        return Math.floor(\n            isInFullScreenMode\n                ? windowInnerWidth! - 2 * fullScreenPadding\n                : externalBounds.width\n        )\n    }\n\n    @computed private get availableHeight(): number {\n        const {\n            externalBounds,\n            isInFullScreenMode,\n            windowInnerHeight,\n            fullScreenPadding,\n        } = this\n\n        return Math.floor(\n            isInFullScreenMode\n                ? windowInnerHeight! - 2 * fullScreenPadding\n                : externalBounds.height\n        )\n    }\n\n    @computed private get idealWidth(): number {\n        return Math.floor(this.widthForDeviceOrientation * this.scaleToFitIdeal)\n    }\n\n    @computed private get idealHeight(): number {\n        return Math.floor(\n            this.heightForDeviceOrientation * this.scaleToFitIdeal\n        )\n    }\n\n    /** Bounds of the entire Grapher frame including the chart area and entity selector panel */\n    @computed get frameBounds(): Bounds {\n        return this.useIdealBounds\n            ? new Bounds(0, 0, this.idealWidth, this.idealHeight)\n            : new Bounds(0, 0, this.availableWidth, this.availableHeight)\n    }\n\n    @computed get activeBounds(): Bounds {\n        return this.isExportingToSvgOrPng ? this.staticBounds : this.frameBounds\n    }\n\n    /** Bounds of the CaptionedChart that renders the header, chart area and footer */\n    @computed get captionedChartBounds(): Bounds {\n        // If there's no panel, the chart takes up the whole frame\n        if (!this.isEntitySelectorPanelActive) {\n            return new Bounds(\n                0,\n                0,\n                this.frameBounds.width - 2, // 2px accounts for the left/right border\n                this.frameBounds.height - 2 // 2px accounts for the top/bottom border\n            )\n        }\n\n        return new Bounds(\n            0,\n            0,\n            // The chart takes up 9 columns in 12-column grid\n            (9 / 12) * this.frameBounds.width,\n            this.frameBounds.height - 2 // 2px accounts for the border\n        )\n    }\n\n    @computed get chartAreaPadding(): number {\n        // Choose padding based on chart size, ensuring it's at most 24px\n        return Math.min(24, Math.ceil(0.025 * this.activeBounds.width))\n    }\n\n    /** Bounds of the chart area if no CaptionedChart is rendered */\n    @computed get chartAreaBounds(): Bounds {\n        return this.activeBounds.pad(this.chartAreaPadding)\n    }\n\n    /** Bounds of the entity selector if rendered into the side panel */\n    @computed get sidePanelBounds(): Bounds | undefined {\n        if (!this.isEntitySelectorPanelActive) return\n\n        return new Bounds(\n            0, // not in use; intentionally set to zero\n            0, // not in use; intentionally set to zero\n            this.frameBounds.width - this.captionedChartBounds.width,\n            this.captionedChartBounds.height\n        )\n    }\n\n    @computed get containerElement(): HTMLDivElement | undefined {\n        return this.base.current || undefined\n    }\n\n    @computed private get analyticsContext(): GrapherAnalyticsContext {\n        const ctx = this.manager?.analyticsContext\n        return {\n            slug: ctx?.mdimSlug ?? this.slug,\n            viewConfigId: ctx?.mdimViewConfigId,\n            narrativeChartName: this.narrativeChartInfo?.name,\n        }\n    }\n\n    logEntitySelectorEvent(action: EntitySelectorEvent, target?: string): void {\n        this.analytics.logEntitySelectorEvent(action, {\n            ...this.analyticsContext,\n            target,\n        })\n    }\n\n    logImageDownloadEvent(action: GrapherImageDownloadEvent): void {\n        this.analytics.logGrapherImageDownloadEvent(action, {\n            ...this.analyticsContext,\n            context: omitUndefinedValues({\n                tab: this.activeTab,\n                globe: this.isOnMapTab\n                    ? this.mapConfig.globe.isActive\n                    : undefined,\n            }),\n        })\n    }\n\n    logGrapherInteractionEvent(\n        action: GrapherInteractionEvent,\n        target?: string\n    ): void {\n        this.analytics.logGrapherInteractionEvent(action, {\n            ...this.analyticsContext,\n            target,\n        })\n    }\n\n    formatTimeFn(time: Time): string {\n        return this.inputTable.timeColumn.formatTime(time)\n    }\n\n    @computed get timeColumn(): TimeColumn | undefined {\n        const timeColumn = this.inputTable.timeColumn\n        if (timeColumn instanceof MissingColumn) return undefined\n        return timeColumn\n    }\n\n    @computed get availableEntityNames(): EntityName[] {\n        return this.tableForSelection.availableEntityNames\n    }\n\n    @computed private get canApplyPeerCountries(): boolean {\n        return (\n            this.peerCountryStrategy !== undefined &&\n            this.availableEntityNames.length > 0 &&\n            // Only apply peer countries if it's unambiguous\n            // which entity is the target entity\n            this.selection.numSelectedEntities === 1\n        )\n    }\n\n    /**\n     * Adds peer countries to Grapher's selection\n     *\n     * Uses a cached promise pattern to prevent duplicate operations and allow\n     * generateStaticSvg() to wait for peer country application that was already\n     * initiated by the inputTable setter.\n     *\n     * This approach avoids making inputTable async, which would complicate the\n     * codebase since many parts assume synchronous data access.\n     */\n    @action.bound private async applyPeerCountriesIfNeeded(): Promise<void> {\n        // If already running, return the existing promise to wait for\n        if (this.peerCountriesPromise) return this.peerCountriesPromise\n\n        if (!this.canApplyPeerCountries) return\n\n        // Create and cache the promise immediately so that concurrent calls\n        // will find and wait for this same promise\n        this.peerCountriesPromise = (async (): Promise<void> => {\n            const peerCountries = await selectPeerCountriesForGrapher(this)\n            this.selection.addToSelection(peerCountries)\n        })()\n\n        try {\n            await this.peerCountriesPromise\n        } finally {\n            // Clear the promise cache after completion (success or failure)\n            // so future calls will trigger a new operation if needed\n            this.peerCountriesPromise = undefined\n        }\n    }\n\n    @computed get regionGroups(): RegionGroup[] {\n        return groupEntitiesByRegionType(this.availableEntityNames)\n    }\n\n    @computed get entitiesByRegionGroup(): EntitiesByRegionGroup {\n        return new Map(\n            this.regionGroups.map(({ regionGroupKey, entityNames }) => [\n                regionGroupKey,\n                entityNames,\n            ])\n        )\n    }\n\n    @computed get _sortConfig(): Readonly<SortConfig> {\n        return {\n            sortBy: this.sortBy ?? SortBy.total,\n            sortOrder: this.sortOrder ?? SortOrder.desc,\n            sortColumnSlug: this.sortColumnSlug,\n        }\n    }\n\n    @computed get sortConfig(): SortConfig {\n        const sortConfig = { ...this._sortConfig }\n        // In relative mode, where the values for every entity sum up to 100%,\n        // sorting by total doesn't make sense. It's also jumpy because of some\n        // rounding errors. For this reason, we sort by entity name instead\n        if (\n            this.isRelativeMode &&\n            sortConfig.sortBy === SortBy.total &&\n            // No need to do this for Marimekko and discrete bar charts\n            // since relative mode means something else for Marimekko charts\n            // and discrete bar charts don't support relative mode\n            !this.isOnMarimekkoTab &&\n            !this.isOnDiscreteBarTab\n        ) {\n            sortConfig.sortBy = SortBy.entityName\n            sortConfig.sortOrder = SortOrder.asc\n        }\n        return sortConfig\n    }\n\n    @computed get hasMultipleYColumns(): boolean {\n        return this.yColumnSlugs.length > 1\n    }\n\n    @computed private get hasSingleMetricInFacets(): boolean {\n        const {\n            isOnStackedDiscreteBarTab,\n            isOnStackedAreaTab,\n            isOnStackedBarTab,\n            selectedFacetStrategy,\n            hasMultipleYColumns,\n        } = this\n\n        if (isOnStackedDiscreteBarTab) {\n            return (\n                selectedFacetStrategy === FacetStrategy.entity ||\n                selectedFacetStrategy === FacetStrategy.metric\n            )\n        }\n\n        if (isOnStackedAreaTab || isOnStackedBarTab) {\n            return (\n                selectedFacetStrategy === FacetStrategy.entity &&\n                !hasMultipleYColumns\n            )\n        }\n\n        return false\n    }\n\n    @computed private get hasSingleEntityInFacets(): boolean {\n        const {\n            isOnStackedAreaTab,\n            isOnStackedBarTab,\n            selectedFacetStrategy,\n            selection,\n        } = this\n\n        if (isOnStackedAreaTab || isOnStackedBarTab) {\n            return (\n                selectedFacetStrategy === FacetStrategy.metric &&\n                selection.numSelectedEntities === 1\n            )\n        }\n\n        return false\n    }\n\n    // TODO: remove once #2136 is fixed\n    // Issue #2136 describes a correctness bug that relates to relative mode and\n    // affects all stacked area/bar charts that are split by metric. For now,\n    // we simply turn off relative mode in such cases. Once the bug is properly\n    // addressed, this computed property and its references can be removed\n    @computed\n    private get isStackedChartSplitByMetric(): boolean {\n        return (\n            (this.isOnStackedAreaTab || this.isOnStackedBarTab) &&\n            this.selectedFacetStrategy === FacetStrategy.metric\n        )\n    }\n\n    @computed get availableFacetStrategies(): FacetStrategy[] {\n        return this.chartState.availableFacetStrategies?.length\n            ? this.chartState.availableFacetStrategies\n            : [FacetStrategy.none]\n    }\n\n    /** The actual facet setting used by a chart, potentially overriding selectedFacetStrategy */\n    @computed get facetStrategy(): FacetStrategy {\n        if (\n            this.selectedFacetStrategy &&\n            this.availableFacetStrategies.includes(this.selectedFacetStrategy)\n        )\n            return this.selectedFacetStrategy\n\n        if (\n            this.addCountryMode === EntitySelectionMode.SingleEntity &&\n            this.selection.selectedEntityNames.length > 1\n        ) {\n            return FacetStrategy.entity\n        }\n\n        if (this.availableFacetStrategies.length === 0)\n            throw new Error(\"No facet strategy available\")\n\n        return firstOfNonEmptyArray(this.availableFacetStrategies)\n    }\n\n    @computed get isFaceted(): boolean {\n        // Show map facets if start and end time are different\n        if (this.isOnMapTab) return this.startTime !== this.endTime\n\n        const hasFacetStrategy = this.facetStrategy !== FacetStrategy.none\n        return this.isOnChartTab && hasFacetStrategy\n    }\n\n    @computed get hasMultipleSeriesPerFacet(): boolean {\n        return (\n            this.isFaceted &&\n            this.selection.numSelectedEntities > 1 &&\n            this.yColumnSlugs.length > 1\n        )\n    }\n\n    @computed get isInFullScreenMode(): boolean {\n        return this._isInFullScreenMode\n    }\n\n    set isInFullScreenMode(newValue: boolean) {\n        // Prevent scrolling when in full-screen mode\n        if (newValue) {\n            document.documentElement.classList.add(\"no-scroll\")\n        } else {\n            document.documentElement.classList.remove(\"no-scroll\")\n        }\n\n        // Dismiss the share menu\n        this.isShareMenuActive = false\n\n        this._isInFullScreenMode = newValue\n    }\n\n    @action.bound setHideExternalControlsInEmbedUrl(value: boolean): void {\n        this.hideExternalControlsInEmbedUrl = value\n    }\n\n    @computed get isModalOpen(): boolean {\n        return this.isEntitySelectorModalOpen || this.activeModal !== undefined\n    }\n\n    // Whether a server-side download is available for the download modal\n    @computed get isServerSideDownloadAvailable(): boolean {\n        return (\n            // We're not on an archival grapher page\n            !this.isOnArchivalPage &&\n            // We're not inside the admin\n            window.admin === undefined &&\n            // We're not in a narrative chart\n            !this.narrativeChartInfo &&\n            // We have a baseUrl to send the request to\n            !!this.baseUrl\n        )\n    }\n\n    @computed get baseFontSize(): number {\n        if (this.isStatic && this.initialOptions.baseFontSize)\n            return this.initialOptions.baseFontSize\n        if (this.isStaticAndSmall) {\n            return this.computeBaseFontSizeFromHeight(this.staticBounds)\n        }\n        if (this.isStatic) return 18\n        return this._baseFontSize\n    }\n\n    // The header and footer don't rely on the base font size unless explicitly specified\n    @computed get useBaseFontSize(): boolean {\n        return this.initialOptions.baseFontSize !== undefined\n    }\n\n    private computeBaseFontSizeFromHeight(bounds: Bounds): number {\n        const squareBounds = DEFAULT_GRAPHER_BOUNDS_SQUARE\n        const factor = squareBounds.height / 21\n        return Math.max(10, bounds.height / factor)\n    }\n\n    computeBaseFontSizeFromWidth(bounds: Bounds): number {\n        if (bounds.width <= 400) return 14\n        else if (bounds.width < 1080) return 16\n        else if (bounds.width >= 1080) return 18\n        else return 16\n    }\n\n    @computed get fontSize(): number {\n        return this.baseFontSize\n    }\n\n    @computed get isNarrow(): boolean {\n        if (this.isStatic) return false\n        return this.frameBounds.width <= 420\n    }\n\n    @computed get isSemiNarrow(): boolean {\n        if (this.isStatic) return false\n        return this.frameBounds.width <= 550\n    }\n\n    /**\n     * Small charts are typically rendered into 6 or 7 columns in a 12-column\n     * grid layout (e.g. side-by-side charts or charts in the All Charts block)\n     */\n    @computed get isSmall(): boolean {\n        if (this.isStatic) return false\n        return this.frameBounds.width <= 740\n    }\n\n    /**\n     * Medium charts are typically rendered into 8 columns in a 12-column\n     * grid layout (e.g. stand-alone charts in the main text of an article)\n     */\n    @computed get isMedium(): boolean {\n        if (this.isStatic) return false\n        return this.frameBounds.width <= 845\n    }\n\n    @computed get isStaticAndSmall(): boolean {\n        if (!this.isStatic) return false\n        return this.areStaticBoundsSmall\n    }\n\n    @computed private get areStaticBoundsSmall(): boolean {\n        const { defaultBounds, staticBounds } = this\n        const idealPixelCount = defaultBounds.width * defaultBounds.height\n        const staticPixelCount = staticBounds.width * staticBounds.height\n        return staticPixelCount < 0.66 * idealPixelCount\n    }\n\n    @computed get isExportingForWikimedia(): boolean {\n        return this.isExportingToSvgOrPng && this.isWikimediaExport\n    }\n\n    @computed get backgroundColor(): Color {\n        return GRAPHER_BACKGROUND_DEFAULT\n    }\n\n    @computed get shouldPinTooltipToBottom(): boolean {\n        return this.isTouchDevice\n    }\n\n    @computed private get hasRelatedQuestion(): boolean {\n        if (\n            this.hideRelatedQuestion ||\n            !this.relatedQuestions ||\n            !this.relatedQuestions.length\n        )\n            return false\n        const question = this.relatedQuestions[0]\n        return !!question && !!question.text && !!question.url\n    }\n\n    @computed\n    private get isRelatedQuestionTargetDifferentFromCurrentPage(): boolean {\n        // Comparing paths rather than full URLs for this to work as\n        // expected on local and staging where the origin (e.g.\n        // hans.owid.cloud) doesn't match the production origin that has\n        // been entered in the related question URL field:\n        // \"ourworldindata.org\" and yet should still yield a match.\n        // - Note that this won't work on production previews (where the\n        //   path is /admin/posts/preview/ID)\n        const { relatedQuestions = [], hasRelatedQuestion } = this\n        const relatedQuestion = relatedQuestions[0]\n        return (\n            hasRelatedQuestion &&\n            !!relatedQuestion &&\n            getWindowUrl().pathname !==\n                Url.fromURL(relatedQuestion.url).pathname\n        )\n    }\n\n    @computed get showRelatedQuestion(): boolean {\n        return (\n            !!this.relatedQuestions &&\n            !!this.hasRelatedQuestion &&\n            !!this.isRelatedQuestionTargetDifferentFromCurrentPage\n        )\n    }\n\n    @action.bound clearSelection(): void {\n        this.selection.clearSelection()\n        this.applyOriginalSelectionAsAuthored()\n    }\n\n    @action.bound private clearFocus(): void {\n        this.focusArray.clear()\n        this.applyOriginalFocusAsAuthored()\n    }\n\n    @action.bound clearQueryParams(): void {\n        const { authorsVersion } = this\n        this.tab = authorsVersion.tab\n        this.xAxis.scaleType = authorsVersion.xAxis.scaleType\n        this.yAxis.scaleType = authorsVersion.yAxis.scaleType\n        this.stackMode = authorsVersion.stackMode\n        this.zoomToSelection = authorsVersion.zoomToSelection\n        this.compareEndPointsOnly = authorsVersion.compareEndPointsOnly\n        this.minTime = authorsVersion.minTime\n        this.maxTime = authorsVersion.maxTime\n        this.map.time = authorsVersion.map.time\n        this.map.startTime = authorsVersion.map.startTime\n        this.map.region = authorsVersion.map.region\n        this.showNoDataArea = authorsVersion.showNoDataArea\n        this.dataTableConfig.filter = authorsVersion.dataTableConfig.filter\n        this.dataTableConfig.search = authorsVersion.dataTableConfig.search\n        this.mapConfig.globe.isActive = authorsVersion.mapConfig.globe.isActive\n        this.clearSelection()\n        this.clearFocus()\n        this.mapConfig.selection.clearSelection()\n    }\n\n    /**\n     * Resets the Grapher to a blank slate, so that if you updateFromObject and\n     * the object contains some blanks, those blanks won't overwrite defaults.\n     */\n    @action.bound reset(): void {\n        const grapherState = new GrapherState({})\n        for (const key of grapherKeysToSerialize) {\n            // @ts-expect-error grapherKeysToSerialize is not properly typed\n            this[key] = grapherState[key]\n        }\n        this.seriesColorMap = new Map()\n\n        this.ySlugs = grapherState.ySlugs\n        this.xSlug = grapherState.xSlug\n        this.colorSlug = grapherState.colorSlug\n        this.sizeSlug = grapherState.sizeSlug\n\n        this.selection.clearSelection()\n        this.focusArray.clear()\n    }\n\n    @computed.struct private get allParams(): GrapherQueryParams {\n        return grapherObjectToQueryParams(this)\n    }\n\n    @computed get overlayParam(): string | undefined {\n        if (!this.activeModal) return undefined\n        return match(this.activeModal)\n            .with(GrapherModal.Download, () => {\n                return match(this.activeDownloadModalTab)\n                    .with(DownloadModalTabName.Data, () => \"download-data\")\n                    .with(DownloadModalTabName.Vis, () => \"download-vis\")\n                    .exhaustive()\n            })\n            .with(GrapherModal.Embed, () => {\n                // We could include the embed modal in the `overlay=` params,\n                // but there has been an issue in the past where we accidentally\n                // included that in the Embed dialog's URL, and then embeds would\n                // always show the modal. Linking directly to the modal doesn't\n                // have much of a use case, anyway.\n                return undefined\n            })\n            .with(GrapherModal.Sources, () => \"sources\")\n            .exhaustive()\n    }\n\n    @computed get areSelectedEntitiesDifferentThanAuthors(): boolean {\n        const authoredConfig = this.legacyConfigAsAuthored\n        const currentSelectedEntityNames = this.selection.selectedEntityNames\n        const originalSelectedEntityNames =\n            authoredConfig.selectedEntityNames ?? []\n\n        return isArrayDifferentFromReference(\n            currentSelectedEntityNames,\n            originalSelectedEntityNames\n        )\n    }\n\n    @computed get areFocusedSeriesNamesDifferentThanAuthors(): boolean {\n        const authoredConfig = this.legacyConfigAsAuthored\n        const currentFocusedSeriesNames = this.focusArray.seriesNames\n        const originalFocusedSeriesNames =\n            authoredConfig.focusedSeriesNames ?? []\n\n        return isArrayDifferentFromReference(\n            currentFocusedSeriesNames,\n            originalFocusedSeriesNames\n        )\n    }\n\n    /**\n     * Autocomputed url params to reflect difference between current grapher state\n     * and original config state\n     */\n    @computed.struct get changedParams(): Partial<GrapherQueryParams> {\n        return differenceObj(this.allParams, this.authorsVersion.allParams)\n    }\n\n    /** Useful to compare current state against the published grapher */\n    @computed get authorsVersion(): GrapherState {\n        return new GrapherState({\n            ...this.legacyConfigAsAuthored,\n            manager: undefined,\n            queryStr: \"\",\n        })\n    }\n\n    @computed get queryStr(): string {\n        if (this.manager?.queryStr !== undefined) return this.manager.queryStr\n\n        return queryParamsToStr({\n            ...this.changedParams,\n            ...this.externalQueryParams,\n        })\n    }\n\n    /** Static root URL of the chart, e.g. https://ourworldindata.org/grapher/life-expectancy */\n    @computed get baseUrl(): string | undefined {\n        if (this.isOnArchivalPage) return this.archiveContext?.archiveUrl\n\n        if (this.manager?.baseUrl) return this.manager.baseUrl\n\n        return this.isPublished\n            ? `${this.bakedGrapherURL ?? \"/grapher\"}/${this.displaySlug}`\n            : undefined\n    }\n\n    @computed private get canonicalUrlIfIsNarrativeChart(): string | undefined {\n        if (!this.narrativeChartInfo) return undefined\n\n        const { parentChartSlug, queryParamsForParentChart } =\n            this.narrativeChartInfo\n\n        const combinedQueryParams = {\n            ...queryParamsForParentChart,\n            ...this.changedParams,\n        }\n\n        return `${this.bakedGrapherURL}/${parentChartSlug}${queryParamsToStr(\n            combinedQueryParams\n        )}`\n    }\n\n    /**\n     * Full URL representing the canonical location of this grapher state,\n     * e.g. https://ourworldindata.org/grapher/life-expectancy?tab=map\n     */\n    @computed get canonicalUrl(): string | undefined {\n        return (\n            this.canonicalUrlIfIsNarrativeChart ??\n            (this.baseUrl ? this.baseUrl + this.queryStr : undefined)\n        )\n    }\n\n    @computed get isOnCanonicalUrl(): boolean {\n        if (!this.canonicalUrl) return false\n        return (\n            getWindowUrl().pathname === Url.fromURL(this.canonicalUrl).pathname\n        )\n    }\n\n    private makeEmbedUrl(baseUrl: string): string {\n        let url = Url.fromURL(baseUrl)\n        // We want to preserve the tab in the embed URL so that if we change the\n        // default view of the chart, it won't change existing embeds.\n        // See https://github.com/owid/owid-grapher/issues/2805\n        const { tab } = this.allParams\n        if (tab && !url.queryParams.tab) {\n            url = url.updateQueryParams({ tab })\n        }\n        if (this.canHideExternalControlsInEmbed) {\n            url = url.updateQueryParams({\n                hideControls: this.hideExternalControlsInEmbedUrl.toString(),\n            })\n        }\n        return url.fullUrl\n    }\n\n    @computed get embedUrl(): string | undefined {\n        const baseUrl = this.canonicalUrl\n        if (!baseUrl) return undefined\n        return this.makeEmbedUrl(baseUrl)\n    }\n\n    @computed get embedArchivedUrl(): string | undefined {\n        if (!this.archiveContext) return undefined\n        const baseUrl = this.archiveContext.archiveUrl + this.queryStr\n        return this.makeEmbedUrl(baseUrl)\n    }\n\n    @computed get hasUserChangedTimeHandles(): boolean {\n        const authorsVersion = this.authorsVersion\n        return (\n            this.minTime !== authorsVersion.minTime ||\n            this.maxTime !== authorsVersion.maxTime\n        )\n    }\n\n    @computed private get hasUserChangedMapTimeHandle(): boolean {\n        const authorsVersion = this.authorsVersion\n        return (\n            this.map.startTime !== authorsVersion.map.startTime ||\n            this.map.time !== authorsVersion.map.time\n        )\n    }\n\n    @computed get timeParam(): string | undefined {\n        const { timeColumn } = this.table\n        const formatTime = (time: Time): string =>\n            timeBoundToTimeBoundString(\n                time,\n                timeColumn instanceof ColumnTypeMap.Day\n            )\n\n        if (this.isOnMapTab) {\n            if (!this.hasUserChangedMapTimeHandle) return undefined\n            if (this.map.time === undefined) return undefined\n\n            if (this.map.startTime === undefined)\n                return formatTime(this.map.time)\n\n            const startTime = formatTime(this.map.startTime)\n            const endTime = formatTime(this.map.time)\n\n            return startTime === endTime\n                ? startTime\n                : `${startTime}..${endTime}`\n        }\n\n        if (!this.hasUserChangedTimeHandles) return undefined\n\n        const [startTime, endTime] =\n            this.timelineHandleTimeBounds.map(formatTime)\n        return startTime === endTime ? startTime : `${startTime}..${endTime}`\n    }\n\n    private dismissTooltip(): void {\n        const tooltip = this.tooltip?.get()\n        if (tooltip) tooltip.dismiss?.()\n    }\n\n    @action.bound onTimelineClick(): void {\n        this.dismissTooltip()\n    }\n\n    // Called when an entity is selected in the entity selector\n    @action.bound onSelectEntity(entityName: EntityName): void {\n        const { selectedCountryNamesInForeground } = this.mapConfig.selection\n\n        if (!this.isOnMapTab || !this.isMapSelectionEnabled) return\n\n        const region = getRegionByName(entityName)\n        if (!region) return\n\n        if (this.mapConfig.globe.isActive) {\n            if (\n                checkIsCountry(region) &&\n                region.isMappable &&\n                selectedCountryNamesInForeground.includes(region.name)\n            ) {\n                // Rotate to the selected country\n                this.globeController.rotateToCountry(region.name)\n                this.mapConfig.region = MapRegionName.World\n            } else if (checkIsOwidContinent(region)) {\n                // Rotate to the selected owid continent\n                const regionName = MAP_REGION_NAMES[\n                    region.name\n                ] as GlobeRegionName\n                this.globeController.rotateToOwidContinent(regionName)\n                this.mapConfig.region = regionName\n            } else if (checkIsIncomeGroup(region)) {\n                // Switch back to the 2d map if an income group is selected\n                this.globeController.hideGlobe()\n                this.globeController.resetGlobe()\n                this.mapConfig.region = MapRegionName.World\n            } else if (checkHasMembers(region)) {\n                // Rotate to the selected region\n                this.globeController.rotateToRegion(region.name)\n                this.mapConfig.region = MapRegionName.World\n            }\n        }\n    }\n\n    // Called when an entity is deselected in the entity selector\n    @action.bound onDeselectEntity(entityName: EntityName): void {\n        // Remove focus from an entity that has been removed from the selection\n        this.focusArray.remove(entityName)\n\n        // Remove focus from the deselected country\n        this.globeController.dismissCountryFocus()\n    }\n\n    // Called when all entities are cleared in the entity selector\n    @action.bound onClearEntities(): void {\n        // Remove focus from all entities if all entities have been deselected\n        this.focusArray.clear()\n\n        // Switch back to the 2d map if all entities were deselected\n        if (this.isOnMapTab) {\n            this.globeController.hideGlobe()\n            this.globeController.resetGlobe()\n        }\n    }\n\n    isEntityMutedInSelector(entityName: EntityName): boolean {\n        // For now, muted entities are only relevant on the map tab\n        if (!this.isOnMapTab) return false\n\n        // Entities disabled on the map are muted\n        if (\n            this.mapConfig.selection.selectedCountryNamesInBackground.includes(\n                entityName\n            )\n        )\n            return true\n\n        // If a 2d continent is active, then all countries outside of the continent\n        // are not shown on the map, so they're muted in the entity selector as well\n        if (this.mapConfig.is2dContinentActive()) {\n            const region = getRegionByName(entityName)\n            if (!region) return false\n\n            // Don't mute the selected continent\n            if (checkIsOwidContinent(region))\n                return region.name !== MAP_REGION_LABELS[this.mapConfig.region]\n\n            const countriesInRegion = getCountriesByRegion(\n                MAP_REGION_LABELS[this.mapConfig.region]\n            )\n            if (!countriesInRegion) return false\n\n            return !countriesInRegion.has(entityName)\n        }\n\n        return false\n    }\n\n    @computed get disablePlay(): boolean {\n        return (\n            this.isOnTableTab ||\n            this.isOnSlopeChartTab ||\n            this.isOnMarimekkoTab ||\n            (this.times.length > 0 && this.times.length <= 2)\n        )\n    }\n\n    @computed get animationEndTime(): Time {\n        const { timeColumn } = this.table\n        if (this.timelineMaxTime) {\n            const timesAsc = sortNumeric(timeColumn.uniqValues.slice())\n            return (\n                findClosestTime(timesAsc, this.timelineMaxTime) ??\n                timeColumn.maxTime\n            )\n        }\n        return timeColumn.maxTime\n    }\n\n    @computed get canSelectMultipleEntities(): boolean {\n        if (this.isOnMapTab) return true\n\n        if (this.numSelectableEntityNames < 2) return false\n        if (this.addCountryMode === EntitySelectionMode.MultipleEntities)\n            return true\n\n        // If the chart is currently faceted by entity, then use multi-entity\n        // selection, even if the author specified single-entity selection\n        if (\n            this.addCountryMode === EntitySelectionMode.SingleEntity &&\n            this.facetStrategy === FacetStrategy.entity\n        )\n            return true\n\n        return false\n    }\n\n    @computed get canChangeEntity(): boolean {\n        return (\n            this.hasChartTab &&\n            !this.isOnScatterTab &&\n            !this.canSelectMultipleEntities &&\n            this.addCountryMode === EntitySelectionMode.SingleEntity &&\n            this.numSelectableEntityNames > 1\n        )\n    }\n\n    @computed get canAddEntities(): boolean {\n        return (\n            this.hasChartTab &&\n            this.canSelectMultipleEntities &&\n            (this.isOnLineChartTab ||\n                this.isOnSlopeChartTab ||\n                this.isOnStackedAreaTab ||\n                this.isOnStackedBarTab ||\n                this.isOnDiscreteBarTab ||\n                this.isOnStackedDiscreteBarTab)\n        )\n    }\n\n    @computed get canHighlightEntities(): boolean {\n        return (\n            this.hasChartTab &&\n            this.addCountryMode !== EntitySelectionMode.Disabled &&\n            this.numSelectableEntityNames > 1 &&\n            !this.canAddEntities &&\n            !this.canChangeEntity\n        )\n    }\n\n    @computed get canChangeAddOrHighlightEntities(): boolean {\n        return (\n            this.canChangeEntity ||\n            this.canAddEntities ||\n            this.canHighlightEntities\n        )\n    }\n\n    @computed get shouldShowEntitySelectorAs(): GrapherWindowType {\n        if (\n            this.frameBounds.width > 940 &&\n            // Don't use the panel if the grapher is embedded\n            ((!this.isInIFrame && !this.isEmbeddedInAnOwidPage) ||\n                // unless we're in full-screen mode\n                this.isInFullScreenMode)\n        )\n            return GrapherWindowType.panel\n\n        return this.isSemiNarrow\n            ? GrapherWindowType.modal\n            : GrapherWindowType.drawer\n    }\n\n    @computed private get isEntitySelectorPanelActive(): boolean {\n        if (this.hideEntityControls) return false\n\n        const shouldShowPanel =\n            this.shouldShowEntitySelectorAs === GrapherWindowType.panel\n\n        if (this.isOnMapTab && this.isMapSelectionEnabled && shouldShowPanel)\n            return true\n\n        return (\n            this.isOnChartTab &&\n            this.canChangeAddOrHighlightEntities &&\n            shouldShowPanel\n        )\n    }\n\n    @computed get isEntitySelectorModalOpen(): boolean {\n        return (\n            this.isEntitySelectorModalOrDrawerOpen &&\n            this.shouldShowEntitySelectorAs === GrapherWindowType.modal\n        )\n    }\n\n    @computed get isEntitySelectorDrawerOpen(): boolean {\n        return (\n            this.isEntitySelectorModalOrDrawerOpen &&\n            this.shouldShowEntitySelectorAs === GrapherWindowType.drawer\n        )\n    }\n\n    @computed get isMapSelectionEnabled(): boolean {\n        if (this.enableMapSelection) return true\n\n        return (\n            // If the entity controls are hidden, then selecting entities from\n            // the map should also be disabled\n            !this.hideEntityControls &&\n            // Only show the entity selector on the map tab if it's rendered\n            // into the side panel or into the slide-in drawer\n            this.shouldShowEntitySelectorAs !== GrapherWindowType.modal\n        )\n    }\n\n    @computed private get numSelectableEntityNames(): number {\n        return this.availableEntityNames.length\n    }\n\n    mapGrapherTabToQueryParam(tabName: GrapherTabName): string {\n        return this.mapTabNameToTabConfigOption(tabName)\n    }\n\n    private mapTabNameToTabConfigOption(\n        tabName: GrapherTabName\n    ): GrapherTabConfigOption {\n        switch (tabName) {\n            case GRAPHER_TAB_NAMES.Table:\n                return GRAPHER_TAB_CONFIG_OPTIONS.table\n            case GRAPHER_TAB_NAMES.WorldMap:\n                return GRAPHER_TAB_CONFIG_OPTIONS.map\n            default:\n                return this.hasMultipleChartTypes\n                    ? mapChartTypeNameToTabConfigOption(tabName)\n                    : GRAPHER_TAB_CONFIG_OPTIONS.chart\n        }\n    }\n\n    private mapTabConfigOptionToTabName(\n        tabOption: GrapherTabConfigOption\n    ): GrapherTabName {\n        if (tabOption === GRAPHER_TAB_CONFIG_OPTIONS.table)\n            return GRAPHER_TAB_NAMES.Table\n\n        if (tabOption === GRAPHER_TAB_CONFIG_OPTIONS.map)\n            return this.hasMapTab ? GRAPHER_TAB_NAMES.WorldMap : this.defaultTab\n\n        if (tabOption === GRAPHER_TAB_CONFIG_OPTIONS.chart) {\n            return this.defaultTab\n        }\n\n        const chartTypeName = mapTabConfigOptionToChartTypeName(tabOption)\n        return this.validChartTypeSet.has(chartTypeName)\n            ? chartTypeName\n            : this.defaultTab\n    }\n}\n\nexport const defaultObject = objectWithPersistablesToObject(\n    new GrapherState({}),\n    grapherKeysToSerialize\n)\n","import * as React from \"react\"\nimport { GrapherProgrammaticInterface } from \"../core/Grapher.js\"\nimport { GrapherState } from \"../core/GrapherState.js\"\nimport { MultiDimDataPageConfig, Url } from \"@ourworldindata/utils\"\nimport {\n    GrapherQueryParams,\n    MultiDimDimensionChoices,\n    ChartConfigType,\n} from \"@ourworldindata/types\"\n\nexport interface ArchiveGuidedChartRegistration {\n    iframeRef: React.RefObject<HTMLIFrameElement | null>\n    baseUrl: string\n    defaultQueryParams: Record<string, string | undefined>\n    chartConfigType: ChartConfigType\n}\n\nexport interface GuidedChartContextValue {\n    grapherStateRef: React.RefObject<GrapherState>\n    chartRef?: React.RefObject<HTMLDivElement>\n    onGuidedChartLinkClick?: (href: string) => void\n    registerArchiveChart?: (\n        registration: ArchiveGuidedChartRegistration\n    ) => () => void\n    registerMultiDim?: (registrationData: {\n        config: MultiDimDataPageConfig\n        onSettingsChange: (\n            newSettings: MultiDimDimensionChoices,\n            queryParams: GrapherQueryParams\n        ) => void\n        grapherContainerRef: React.RefObject<HTMLDivElement | null>\n    }) => void\n}\n\nexport const GuidedChartContext =\n    React.createContext<GuidedChartContextValue | null>(null)\n\n/**\n * If called within a `GuidedChartContext`, sets the context's `grapherStateRef`\n * to a new `GrapherState` instance initialized with the provided config.\n * If no context is available, returns a local ref initialized with the config.\n * This is so the `GrapherState` can be controlled from a GuidedChart,\n * but also allows for local usage when not\n */\nexport function useMaybeGlobalGrapherStateRef(\n    config: GrapherProgrammaticInterface\n): React.RefObject<GrapherState> {\n    const context = React.useContext(GuidedChartContext)\n    const localRef = React.useRef<GrapherState | null>(null)\n\n    // If a context is provided, use it; otherwise, use the local ref\n    const refToUse = context?.grapherStateRef || localRef\n\n    // Only initialize if the ref is empty\n    if (!refToUse.current) {\n        refToUse.current = new GrapherState(config)\n    }\n\n    return refToUse as React.RefObject<GrapherState>\n}\n\nexport function useGuidedChartLinkHandler():\n    | ((href: string) => void)\n    | undefined {\n    const context = React.useContext(GuidedChartContext)\n    return context?.onGuidedChartLinkClick\n}\n\nexport const buildArchiveGuidedChartSrc = (\n    registration: ArchiveGuidedChartRegistration,\n    guidedUrl: Url\n): string => {\n    const baseUrl = Url.fromURL(registration.baseUrl)\n    const mergedQuery = {\n        ...registration.defaultQueryParams,\n        ...guidedUrl.queryParams,\n    }\n    const updatedUrl = baseUrl.setQueryParams(mergedQuery)\n\n    const hash = guidedUrl.hash || baseUrl.hash\n    return hash ? updatedUrl.update({ hash }).fullUrl : updatedUrl.fullUrl\n}\n","import { GrapherInterface, ArchiveContext } from \"@ourworldindata/types\"\nimport React from \"react\"\nimport { Grapher, GrapherProgrammaticInterface } from \"./Grapher.js\"\nimport { Bounds } from \"@ourworldindata/utils\"\nimport { fetchInputTableForConfig } from \"./loadGrapherTableHelpers.js\"\nimport { legacyToCurrentGrapherQueryParams } from \"./GrapherUrlMigrations.js\"\nimport { unstable_batchedUpdates } from \"react-dom\"\nimport { migrateGrapherConfigToLatestVersion } from \"../schema/migrations/migrate.js\"\nimport { useMaybeGlobalGrapherStateRef } from \"../chart/guidedChartUtils.js\"\nimport { loadCatalogData } from \"./loadCatalogData.js\"\n\nexport interface FetchingGrapherProps {\n    config?: GrapherProgrammaticInterface\n    configUrl?: string\n    dataApiUrl: string\n    catalogUrl: string\n    archiveContext: ArchiveContext | undefined\n    queryStr?: string\n    externalBounds?: Bounds\n    noCache?: boolean\n}\n\nexport function FetchingGrapher(\n    props: FetchingGrapherProps\n): React.ReactElement | null {\n    // if config is not provided, fetch it from configUrl\n\n    const [downloadedConfig, setDownloadedConfig] = React.useState<\n        GrapherInterface | undefined\n    >(undefined)\n\n    const grapherState = useMaybeGlobalGrapherStateRef({\n        ...props.config,\n        additionalDataLoaderFn: (catalogKey) =>\n            loadCatalogData(catalogKey, {\n                baseUrl: props.catalogUrl,\n                assetMap:\n                    props.archiveContext?.type === \"archive-page\"\n                        ? props.archiveContext.assets.runtime\n                        : undefined,\n            }),\n        queryStr: props.queryStr,\n        bounds: props.externalBounds,\n        isConfigReady: !props.configUrl,\n    })\n\n    React.useEffect(() => {\n        if (props.externalBounds) {\n            grapherState.current.externalBounds = props.externalBounds\n        }\n    }, [props.externalBounds, grapherState])\n\n    // update grapherState when the config from props changes\n    React.useEffect(() => {\n        if (props.config?.bounds)\n            grapherState.current.externalBounds = props.config.bounds\n    }, [props.config?.bounds, grapherState])\n\n    React.useEffect(() => {\n        const abortController = new AbortController()\n\n        async function fetchAndApplyConfig(): Promise<void> {\n            if (props.configUrl) {\n                try {\n                    const fetchedConfig = await fetch(props.configUrl, {\n                        signal: abortController.signal,\n                    }).then((res) => res.json())\n\n                    if (abortController.signal.aborted) return\n\n                    const migratedConfig =\n                        migrateGrapherConfigToLatestVersion(fetchedConfig)\n\n                    const mergedConfig = {\n                        ...migratedConfig,\n                        ...props.config,\n                    }\n                    setDownloadedConfig(mergedConfig)\n                    // Batch the grapher updates to avoid getting intermediate\n                    // grapherChangedParams values, which make the URL update\n                    // multiple times while flashing.\n                    // https://stackoverflow.com/a/48610973/9846837\n\n                    // TODO we may not need to this anymore in React 18.\n                    unstable_batchedUpdates(() => {\n                        grapherState.current.reset()\n                        grapherState.current.updateFromObject(mergedConfig)\n                        grapherState.current.legacyConfigAsAuthored =\n                            mergedConfig\n                        grapherState.current.isConfigReady = true\n\n                        // We now need to make sure that the query params are re-applied again\n                        grapherState.current.populateFromQueryParams(\n                            legacyToCurrentGrapherQueryParams(\n                                grapherState.current.initialOptions.queryStr ??\n                                    \"\"\n                            )\n                        )\n                    })\n                } catch (error) {\n                    if (error instanceof Error && error.name !== \"AbortError\") {\n                        console.error(\"Failed to fetch config:\", error)\n                    }\n                }\n            }\n        }\n        void fetchAndApplyConfig()\n\n        return (): void => {\n            abortController.abort()\n        }\n    }, [props.config, props.configUrl, grapherState])\n\n    React.useEffect(() => {\n        let isCancelled = false\n\n        grapherState.current.isDataReady = false\n\n        async function fetchData(): Promise<void> {\n            const inputTable = await fetchInputTableForConfig({\n                dimensions:\n                    downloadedConfig?.dimensions ?? props.config?.dimensions,\n                selectedEntityColors:\n                    downloadedConfig?.selectedEntityColors ??\n                    props.config?.selectedEntityColors,\n                dataApiUrl: props.dataApiUrl,\n                archiveContext: props.archiveContext,\n                noCache: props.noCache,\n            })\n\n            if (isCancelled) return\n\n            if (inputTable) grapherState.current.inputTable = inputTable\n\n            grapherState.current.isDataReady = true\n        }\n        void fetchData()\n\n        return (): void => {\n            isCancelled = true\n        }\n    }, [\n        props.config?.dimensions,\n        props.dataApiUrl,\n        downloadedConfig?.dimensions,\n        downloadedConfig?.selectedEntityColors,\n        props.config?.selectedEntityColors,\n        props.archiveContext,\n        props.noCache,\n        grapherState,\n    ])\n\n    return (\n        <Grapher\n            // Force remount when the slug changes to make sure the GA\n            // grapher_view event is fired when navigating between different\n            // graphers using the same FetchingGrapher instance (e.g. in the\n            // All charts block)\n            key={grapherState.current.slug}\n            grapherState={grapherState.current}\n        />\n    )\n}\n","/* eslint-disable react/prop-types */\nimport { useEffect, useState } from \"react\"\n\nimport * as React from \"react\"\nimport classnames from \"classnames\"\n\ntype VerticalScrollContainerProps = React.DetailedHTMLProps<\n    React.HTMLAttributes<HTMLDivElement>,\n    HTMLDivElement\n> & {\n    scrollingShadows?: boolean\n    scrollLock?: boolean\n    contentsId?: string\n}\n\ntype ReactRef<T> =\n    | ((instance: T | null) => void)\n    | React.MutableRefObject<T | null>\n    | null\n\nfunction useCombinedRefs<T>(...refs: ReactRef<T>[]): React.RefObject<T | null> {\n    const targetRef = React.useRef<T>(null)\n\n    React.useEffect(() => {\n        refs.forEach((ref) => {\n            if (!ref) return\n            if (typeof ref === \"function\") {\n                ref(targetRef.current || null)\n            } else {\n                ref.current = targetRef.current || null\n            }\n        })\n    }, [refs])\n\n    return targetRef\n}\n\nexport const VerticalScrollContainer = React.forwardRef(\n    function VerticalScrollContainer(\n        props: VerticalScrollContainerProps,\n        ref: ReactRef<HTMLDivElement>\n    ) {\n        let {\n            scrollingShadows,\n            className,\n            children,\n            contentsId,\n            style,\n            scrollLock,\n            ...rest\n        } = props\n\n        scrollingShadows ??= true\n\n        const scrollContainerRef = useCombinedRefs<HTMLDivElement>(ref)\n        const [scrollTop, scrollBottom] = useScrollBounds(\n            scrollContainerRef,\n            contentsId\n        )\n\n        useScrollLock(scrollContainerRef, {\n            enable: scrollLock,\n            doNotLockIfNoScroll: true,\n        })\n\n        return (\n            <div\n                className=\"VerticalScrollContainerShadows\"\n                style={{\n                    position: \"relative\",\n                    height: \"100%\",\n                }}\n            >\n                {scrollingShadows && (\n                    <ScrollingShadow\n                        direction=\"down\"\n                        size={10}\n                        opacity={getShadowOpacity(0.15, 80, scrollTop)}\n                    />\n                )}\n                <div\n                    className={classnames(className, \"VerticalScrollContainer\")}\n                    style={{\n                        overflowY: \"auto\",\n                        position: \"absolute\",\n                        top: 0,\n                        right: 0,\n                        bottom: 0,\n                        left: 0,\n                        ...style,\n                    }}\n                    ref={scrollContainerRef}\n                    {...rest}\n                >\n                    {children}\n                </div>\n                {scrollingShadows && (\n                    <ScrollingShadow\n                        direction=\"up\"\n                        size={10}\n                        opacity={getShadowOpacity(0.15, 80, scrollBottom)}\n                    />\n                )}\n            </div>\n        )\n    }\n)\n\nfunction getShadowOpacity(\n    maxOpacity: number,\n    maxDistance: number,\n    scrollDistance: number | undefined\n): number {\n    const distance =\n        scrollDistance !== undefined ? Math.min(scrollDistance, maxDistance) : 0\n    return (distance / maxDistance) * maxOpacity\n}\n\nconst ScrollingShadow = (props: {\n    direction: \"up\" | \"down\"\n    size: number\n    opacity: number\n}): React.ReactElement => {\n    // \"Eased\" gradient\n    // https://larsenwork.com/easing-gradients/\n    const background = `linear-gradient(\n        to ${props.direction === \"up\" ? \"bottom\" : \"top\"},\n        hsla(0, 0%, 0%, 0) 0%,\n        hsla(0, 0%, 0%, 0.104) 25.8%,\n        hsla(0, 0%, 0%, 0.45) 60.9%,\n        hsla(0, 0%, 0%, 0.825) 88.7%,\n        hsl(0, 0%, 0%) 100%\n    )`\n    return (\n        <div\n            style={{\n                position: \"absolute\",\n                left: 0,\n                right: 0,\n                [props.direction === \"up\" ? \"bottom\" : \"top\"]: 0,\n                height: `${props.size}px`,\n                background: background,\n                opacity: props.opacity,\n                pointerEvents: \"none\",\n                zIndex: 2,\n            }}\n        />\n    )\n}\n\n/**\n * A throttled function that returns the available scrollTop and scrollBottom\n * @param ref\n * @param contentsId when this string changes, it's a signal that the contents have re-rendered and\n * the height has likely changed.\n */\nfunction useScrollBounds<ElementType extends HTMLElement>(\n    ref: React.RefObject<ElementType | null>,\n    contentsId?: string\n): [number | undefined, number | undefined] {\n    const [scrollTop, onScrollTop] = useState<number | undefined>(undefined)\n    const [scrollBottom, onScrollBottom] = useState<number | undefined>(\n        undefined\n    )\n\n    useEffect(() => {\n        const el = ref.current!\n        if (el) {\n            let pendingUpdate = false\n\n            function onScroll(): void {\n                const { scrollTop, scrollHeight, offsetHeight } = el\n                onScrollTop(scrollTop)\n                onScrollBottom(scrollHeight - offsetHeight - scrollTop)\n                pendingUpdate = false\n            }\n            onScroll() // execute for first time to setState\n\n            const onScrollThrottled = (): void => {\n                if (!pendingUpdate) {\n                    window.requestAnimationFrame(onScroll)\n                    pendingUpdate = true\n                }\n            }\n\n            el.addEventListener(\"scroll\", onScrollThrottled)\n            return (): void => {\n                el.removeEventListener(\"scroll\", onScrollThrottled)\n            }\n        }\n        return\n    }, [contentsId, ref])\n\n    return [scrollTop, scrollBottom]\n}\n\ninterface ScrollLockOptions {\n    enable: boolean\n    doNotLockIfNoScroll: boolean\n}\n\n/**\n * React hook to prevent scroll events propagating to parent element.\n * @param ref the ReactRef of the scrolling container\n */\nfunction useScrollLock<ElementType extends HTMLElement>(\n    ref: React.RefObject<ElementType | null>,\n    opts?: Partial<ScrollLockOptions>\n): void {\n    useEffect(() => {\n        const el = ref.current\n        const options: ScrollLockOptions = {\n            doNotLockIfNoScroll: false,\n            enable: true,\n            ...opts,\n        }\n        if (options.enable && el) {\n            function onWheel(ev: WheelEvent): void {\n                const el = ref.current\n                if (el) {\n                    const delta = ev.deltaY\n                    const up = delta < 0\n                    const { scrollTop, scrollHeight, offsetHeight } = el\n\n                    if (\n                        options.doNotLockIfNoScroll &&\n                        scrollHeight <= offsetHeight\n                    ) {\n                        return\n                    }\n\n                    function prevent(): void {\n                        ev.stopPropagation()\n                        ev.preventDefault()\n                    }\n\n                    if (\n                        !up &&\n                        delta > scrollHeight - offsetHeight - scrollTop\n                    ) {\n                        // Scrolling down, but this will take us past the bottom.\n                        el.scrollTop = scrollHeight\n                        return prevent()\n                    } else if (up && -delta > scrollTop) {\n                        // Scrolling up, but this will take us past the top.\n                        el.scrollTop = 0\n                        return prevent()\n                    }\n                }\n            }\n            el.addEventListener(\"wheel\", onWheel as any, {\n                // We need to be in non-passive mode to be able to cancel the event\n                passive: false,\n            })\n            return (): void => {\n                if (el) {\n                    el.removeEventListener(\"wheel\", onWheel as any)\n                }\n            }\n        }\n        return\n    }, [opts, ref])\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport * as R from \"remeda\"\nimport {\n    action,\n    computed,\n    observable,\n    runInAction,\n    reaction,\n    makeObservable,\n} from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { Flipper, Flipped } from \"react-flip-toolkit\"\nimport {\n    bind,\n    FuzzySearch,\n    scrollIntoViewIfNeeded,\n    sortByUndefinedLast,\n    ColumnSlug,\n    getUserCountryInformation,\n    regions,\n    SortOrder,\n    EntityName,\n    CoreColumnDef,\n    OwidTableSlugs,\n} from \"@ourworldindata/utils\"\nimport classnames from \"classnames\"\nimport { scaleLinear, ScaleLinear } from \"d3-scale\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faSearch, faTimes } from \"@fortawesome/free-solid-svg-icons\"\nimport { VerticalScrollContainer } from \"../../controls/VerticalScrollContainer\"\nimport { SortIcon } from \"../../controls/SortIcon\"\nimport { Dropdown, BasicDropdownOption } from \"../Dropdown\"\nimport {\n    ColumnTypeMap,\n    CoreColumn,\n    OwidTable,\n} from \"@ourworldindata/core-table\"\nimport { EntityPickerManager } from \"./EntityPickerConstants\"\nimport { SelectionArray } from \"../../selection/SelectionArray\"\n\nconst toggleSort = (order: SortOrder): SortOrder =>\n    order === SortOrder.desc ? SortOrder.asc : SortOrder.desc\n\nenum FocusDirection {\n    first = \"first\",\n    last = \"last\",\n    up = \"up\",\n    down = \"down\",\n}\n\ninterface EntityOptionWithMetricValue {\n    entityName: EntityName\n    plotValue: number | string | undefined\n    formattedValue: any\n    localEntitiesIndex: number | undefined\n}\n\n/** Modulo that wraps negative numbers too */\nconst mod = (n: number, m: number): number => ((n % m) + m) % m\n\ninterface EntityPickerProps {\n    manager: EntityPickerManager\n    selection: SelectionArray\n    isDropdownMenu?: boolean\n    onSelectEntity?: (entityName: EntityName) => void\n    onDeselectEntity?: (entityName: EntityName) => void\n    onClearEntities?: () => void\n}\n\n@observer\nexport class EntityPicker extends React.Component<EntityPickerProps> {\n    private searchInput: string | undefined = undefined\n    private searchInputRef = React.createRef<HTMLInputElement>()\n\n    private focusIndex: number | undefined = undefined\n    private focusRef = React.createRef<HTMLLabelElement>()\n    private scrollFocusedIntoViewOnUpdate = false\n\n    private blockOptionHover = false\n\n    private mostRecentlySelectedEntityName: string | null = null\n\n    private scrollContainerRef = React.createRef<HTMLDivElement>()\n\n    private isOpen = false\n\n    private localEntityNames: string[] | undefined = undefined\n\n    constructor(props: EntityPickerProps) {\n        super(props)\n\n        makeObservable<\n            EntityPicker,\n            | \"searchInput\"\n            | \"searchInputRef\"\n            | \"focusIndex\"\n            | \"focusRef\"\n            | \"scrollFocusedIntoViewOnUpdate\"\n            | \"blockOptionHover\"\n            | \"mostRecentlySelectedEntityName\"\n            | \"scrollContainerRef\"\n            | \"isOpen\"\n            | \"localEntityNames\"\n        >(this, {\n            searchInput: observable,\n            searchInputRef: observable,\n            focusIndex: observable,\n            focusRef: observable,\n            scrollFocusedIntoViewOnUpdate: observable,\n            blockOptionHover: observable,\n            mostRecentlySelectedEntityName: observable,\n            scrollContainerRef: observable,\n            isOpen: observable,\n            localEntityNames: observable,\n        })\n    }\n\n    @computed private get isDropdownMenu(): boolean {\n        return !!this.props.isDropdownMenu\n    }\n\n    @action.bound private selectEntity(\n        name: EntityName,\n        checked?: boolean\n    ): void {\n        this.props.selection.toggleSelection(name)\n\n        if (this.props.selection.selectedSet.has(name)) {\n            this.props.onSelectEntity?.(name)\n        } else {\n            this.props.onDeselectEntity?.(name)\n        }\n\n        // Clear search input\n        this.searchInput = \"\"\n        this.manager.analytics?.logEntityPickerEvent(\n            checked ? \"select\" : \"deselect\",\n            name\n        )\n\n        this.mostRecentlySelectedEntityName = name\n    }\n\n    @computed private get manager(): EntityPickerManager {\n        return this.props.manager\n    }\n\n    @computed private get metric(): string | undefined {\n        return this.manager.entityPickerMetric\n    }\n\n    @computed private get sortOrder(): SortOrder {\n        // On mobile, only allow sorting by entityName (ascending)\n        if (this.isDropdownMenu) return SortOrder.asc\n        return this.manager.entityPickerSort ?? SortOrder.asc\n    }\n\n    @computed private get pickerColumnDefs(): CoreColumnDef[] {\n        return this.manager.entityPickerColumnDefs ?? []\n    }\n\n    @computed private get metricOptions(): {\n        label: string\n        value: string | undefined\n    }[] {\n        const entityNameColumn = this.grapherTable?.entityNameColumn\n        const entityNameColumnInPickerColumnDefs = this.pickerColumnDefs.some(\n            (col) => col.slug === entityNameColumn?.slug\n        )\n        return _.compact([\n            { label: \"Relevance\", value: undefined },\n            !entityNameColumnInPickerColumnDefs &&\n                entityNameColumn && {\n                    label: _.upperFirst(this.manager.entityType) || \"Name\",\n                    value: entityNameColumn?.slug,\n                },\n            ...this.pickerColumnDefs.map(\n                (columnDef): { label: string; value: string } => {\n                    const label =\n                        columnDef?.display?.name ||\n                        columnDef.name ||\n                        columnDef.slug\n                    return { label, value: columnDef.slug }\n                }\n            ),\n        ])\n    }\n\n    @computed private get metricDropdownOptions(): BasicDropdownOption[] {\n        return this.metricOptions.map((option) => ({\n            // Use a special string value for undefined metric (relevance)\n            value: option.value ?? \"\",\n            label: option.label,\n        }))\n    }\n\n    @computed\n    private get selectedMetricDropdownOption():\n        | BasicDropdownOption\n        | undefined {\n        const targetValue = this.metric ?? \"\"\n        return this.metricDropdownOptions.find(\n            (option) => option.value === targetValue\n        )\n    }\n\n    @computed private get metricTable(): OwidTable | undefined {\n        if (this.metric === undefined) return undefined\n\n        // If the slug is \"entityName\", then try to get it from grapherTable first, because it might\n        // not be present in pickerTable (for indicator-powered explorers, for example).\n        if (\n            this.metric === OwidTableSlugs.entityName &&\n            this.grapherTable?.has(this.metric)\n        )\n            return this.grapherTable\n        return this.pickerTable\n    }\n\n    @computed private get activePickerMetricColumn(): CoreColumn | undefined {\n        return this.metricTable?.get(this.metric)\n    }\n\n    @computed private get availableEntitiesForCurrentView(): Set<string> {\n        if (!this.grapherTable)\n            return new Set(this.manager.availableEntityNames)\n        if (!this.manager.requiredColumnSlugs?.length)\n            return this.grapherTable.availableEntityNameSet\n        return this.grapherTable.entitiesWith(this.manager.requiredColumnSlugs)\n    }\n\n    @action.bound async populateLocalEntity(): Promise<void> {\n        try {\n            const localCountryInfo = await getUserCountryInformation()\n            if (!localCountryInfo) return\n\n            const userEntityCodes = [\n                localCountryInfo.code,\n                ...(localCountryInfo.regions ?? []),\n                \"OWID_WRL\",\n            ]\n\n            const userRegionNames = _.sortBy(\n                regions.filter((region) =>\n                    userEntityCodes.includes(region.code)\n                ),\n                (region) => userEntityCodes.indexOf(region.code)\n            ).map((region) => region.name)\n\n            if (userRegionNames) this.localEntityNames = userRegionNames\n        } catch {\n            // ignore\n        }\n    }\n\n    @computed\n    private get entitiesWithMetricValue(): EntityOptionWithMetricValue[] {\n        const { metricTable, localEntityNames } = this\n        const col = this.activePickerMetricColumn\n        const entityNames = this.manager.availableEntityNames?.toSorted() ?? []\n        return entityNames.map((entityName) => {\n            const plotValue =\n                col && metricTable?.has(col.slug)\n                    ? (metricTable.getLatestValueForEntity(\n                          entityName,\n                          col.slug\n                      ) as string | number)\n                    : undefined\n\n            const formattedValue =\n                plotValue !== undefined\n                    ? col?.formatValueShortWithAbbreviations(plotValue)\n                    : undefined\n\n            const localEntitiesIndex = localEntityNames?.indexOf(entityName)\n            return {\n                entityName,\n                plotValue,\n                formattedValue,\n                localEntitiesIndex:\n                    localEntitiesIndex !== undefined && localEntitiesIndex >= 0\n                        ? localEntitiesIndex\n                        : undefined,\n            }\n        })\n    }\n\n    @computed private get grapherTable(): OwidTable | undefined {\n        return this.manager.grapherTable\n    }\n\n    @computed private get pickerTable(): OwidTable | undefined {\n        return this.manager.entityPickerTable\n    }\n\n    @computed get selection(): SelectionArray {\n        return this.props.selection\n    }\n\n    @computed get selectionSet(): Set<string> {\n        return new Set(this.selection.selectedEntityNames)\n    }\n\n    @computed private get fuzzy(): FuzzySearch<EntityOptionWithMetricValue> {\n        return FuzzySearch.withKey(\n            this.entitiesWithMetricValue,\n            (entity) => entity.entityName\n        )\n    }\n\n    @computed private get searchResults(): EntityOptionWithMetricValue[] {\n        if (this.searchInput) return this.fuzzy.search(this.searchInput)\n        const { entitiesWithMetricValue, sortOrder, selectionSet } = this\n\n        // Show the selected up top and in order.\n        const sorted = sortByUndefinedLast(\n            entitiesWithMetricValue,\n            (option) => option.plotValue,\n            sortOrder\n        )\n\n        let [selected, unselected] = _.partition(sorted, (option) =>\n            selectionSet.has(option.entityName)\n        )\n        if (this.metric === undefined) {\n            // only sort local entity names first if we're not sorting by some other metric already\n            unselected = sortByUndefinedLast(\n                unselected,\n                (option) => option.localEntitiesIndex\n            )\n        }\n        return [...selected, ...unselected]\n    }\n\n    private normalizeFocusIndex(index: number): number | undefined {\n        if (this.searchResults.length === 0) return undefined\n        return mod(index, this.searchResults.length)\n    }\n\n    @computed private get focusedOption(): string | undefined {\n        return this.focusIndex !== undefined\n            ? this.searchResults[this.focusIndex].entityName\n            : undefined\n    }\n\n    @computed private get showDoneButton(): boolean {\n        return this.isDropdownMenu && this.isOpen\n    }\n\n    @action.bound private focusOptionDirection(\n        direction: FocusDirection\n    ): void {\n        if (direction === FocusDirection.first)\n            this.focusIndex = this.normalizeFocusIndex(0)\n        else if (direction === FocusDirection.last)\n            this.focusIndex = this.normalizeFocusIndex(-1)\n        else if (direction === FocusDirection.up) {\n            const newIndex =\n                this.focusIndex === undefined ? -1 : this.focusIndex - 1\n            this.focusIndex = this.normalizeFocusIndex(newIndex)\n        } else if (direction === FocusDirection.down) {\n            const newIndex =\n                this.focusIndex === undefined ? 0 : this.focusIndex + 1\n            this.focusIndex = this.normalizeFocusIndex(newIndex)\n        } else return // Exit without updating scroll\n        this.scrollFocusedIntoViewOnUpdate = true\n    }\n\n    @action.bound private clearSearchInput(): void {\n        if (this.searchInput) this.searchInput = \"\"\n    }\n\n    @action.bound private onKeyDown(\n        event: React.KeyboardEvent<HTMLDivElement>\n    ): void {\n        // We want to block hover if a key is pressed.\n        // The hover will be unblocked iff the user moves the mouse (relative to the menu).\n        this.blockHover()\n        switch (event.key) {\n            case \"Enter\": {\n                if (event.keyCode === 229) {\n                    // ignore the keydown event from an Input Method Editor(IME)\n                    // ref. https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\n                    break\n                }\n                if (!this.focusedOption) return\n                const name = this.focusedOption\n                this.selectEntity(name)\n                this.clearSearchInput()\n                this.manager.analytics?.logEntityPickerEvent(\"enter\", name)\n                break\n            }\n            case \"ArrowUp\":\n                this.focusOptionDirection(FocusDirection.up)\n                break\n            case \"ArrowDown\":\n                this.focusOptionDirection(FocusDirection.down)\n                break\n            default:\n                return\n        }\n        event.preventDefault()\n    }\n\n    @bind private focusSearch(): void {\n        this.searchInputRef.current?.focus()\n    }\n\n    @action.bound private onSearchFocus(): void {\n        this.isOpen = true\n        if (this.focusIndex === undefined)\n            this.focusOptionDirection(FocusDirection.first)\n    }\n\n    @action.bound private onSearchBlur(): void {\n        // Do not allow focus on elements inside menu; shift focus back to search input.\n        if (\n            this.scrollContainerRef.current &&\n            this.scrollContainerRef.current.contains(document.activeElement)\n        ) {\n            this.focusSearch()\n            return\n        }\n        this.isOpen = false\n        this.focusIndex = undefined\n    }\n\n    @action.bound private onHover(index: number): void {\n        if (!this.blockOptionHover) this.focusIndex = index\n    }\n\n    @action.bound private blockHover(): void {\n        this.blockOptionHover = true\n    }\n\n    @action.bound private unblockHover(): void {\n        this.blockOptionHover = false\n    }\n\n    @action.bound private onMenuMouseDown(\n        event: React.MouseEvent<HTMLDivElement, MouseEvent>\n    ): void {\n        event.stopPropagation()\n        event.preventDefault()\n        this.focusSearch()\n    }\n\n    @bind private highlightLabel(label: string): string | React.ReactElement {\n        if (!this.searchInput) return label\n\n        const result = this.fuzzy.single(this.searchInput, label)\n        if (!result) return label\n\n        const tokens: { match: boolean; text: string }[] = []\n        for (let i = 0; i < result.target.length; i++) {\n            const currentToken = R.last(tokens)\n            const match = result.indexes.includes(i)\n            const char = result.target[i]\n            if (!currentToken || currentToken.match !== match) {\n                tokens.push({\n                    match,\n                    text: char,\n                })\n            } else currentToken.text += char\n        }\n        return (\n            <span translate=\"no\">\n                {tokens.map((token, i) =>\n                    token.match ? (\n                        <mark key={i}>{token.text}</mark>\n                    ) : (\n                        <span key={i}>{token.text}</span>\n                    )\n                )}\n            </span>\n        )\n    }\n\n    @computed private get barScale(): ScaleLinear<number, number> {\n        const maxValue = _.max(\n            this.entitiesWithMetricValue\n                .map((option) => option.plotValue)\n                .filter(_.isNumber)\n        )\n        return scaleLinear()\n            .domain([0, maxValue ?? 1])\n            .range([0, 1])\n    }\n\n    override componentDidMount(): void {\n        // Whenever the search term changes, shift focus to first option in the list\n        reaction(\n            () => this.searchInput,\n            () => this.focusOptionDirection(FocusDirection.first)\n        )\n\n        void this.populateLocalEntity()\n    }\n\n    override componentDidUpdate(): void {\n        if (\n            this.focusIndex !== undefined &&\n            this.scrollFocusedIntoViewOnUpdate &&\n            this.scrollContainerRef.current &&\n            this.focusRef.current\n        ) {\n            scrollIntoViewIfNeeded(\n                this.scrollContainerRef.current,\n                this.focusRef.current\n            )\n            runInAction(() => (this.scrollFocusedIntoViewOnUpdate = false))\n        }\n    }\n\n    @action.bound private onMetricSelectionChange(\n        option: BasicDropdownOption | null\n    ): void {\n        if (!option) return\n        // Empty string means undefined/relevance option\n        const columnSlug = option.value === \"\" ? undefined : option.value\n        this.updateMetric(columnSlug)\n    }\n\n    @action private updateMetric(columnSlug: ColumnSlug | undefined): void {\n        const col = this.pickerTable?.get(columnSlug)\n\n        this.manager.setEntityPicker?.({\n            metric: columnSlug,\n            sort: this.isColumnTypeNumeric(columnSlug, col)\n                ? SortOrder.desc\n                : SortOrder.asc,\n        })\n        this.manager.analytics?.logEntityPickerEvent(\"sortBy\", columnSlug)\n    }\n\n    private isColumnTypeNumeric(\n        columnSlug: ColumnSlug | undefined,\n        col: CoreColumn | undefined\n    ): boolean {\n        return (\n            // If columnSlug is undefined, we're sorting by relevance, which is (mostly) by country name.\n            // If the column is currently missing (not loaded yet), assume it is numeric.\n            columnSlug !== undefined &&\n            columnSlug !== OwidTableSlugs.entityName &&\n            (col === undefined ||\n                col.isMissing ||\n                col instanceof ColumnTypeMap.Numeric)\n        )\n    }\n\n    private get pickerMenu(): React.ReactElement | null {\n        if (this.isDropdownMenu) return null\n\n        return (\n            <div className=\"MetricSettings\">\n                <label id=\"metric-dropdown-label\" className=\"mainLabel\">\n                    Sort by\n                </label>\n                <Dropdown\n                    className=\"metricDropdown\"\n                    options={this.metricDropdownOptions}\n                    value={this.selectedMetricDropdownOption ?? null}\n                    onChange={this.onMetricSelectionChange}\n                    isLoading={this.manager.entityPickerTableIsLoading}\n                    aria-labelledby=\"metric-dropdown-label\"\n                />\n                <span\n                    className=\"sort\"\n                    onClick={(): void => {\n                        const sortOrder = toggleSort(this.sortOrder)\n                        this.manager.setEntityPicker?.({\n                            metric: this.metric,\n                            sort: sortOrder,\n                        })\n                        this.manager.analytics?.logEntityPickerEvent(\n                            \"sortOrder\",\n                            sortOrder\n                        )\n                    }}\n                >\n                    <SortIcon\n                        type={\n                            this.isColumnTypeNumeric(\n                                this.metric,\n                                this.activePickerMetricColumn\n                            )\n                                ? \"numeric\"\n                                : \"text\"\n                        }\n                        order={this.sortOrder}\n                    />\n                </span>\n            </div>\n        )\n    }\n\n    override render(): React.ReactElement {\n        const { selection } = this\n        const { entityType } = this.manager\n        const entities = this.searchResults\n        const selectedEntityNames = selection.selectedEntityNames\n        const availableEntities = this.availableEntitiesForCurrentView\n\n        const selectedDebugMessage = `${selectedEntityNames.length} selected. ${availableEntities.size} available. ${this.entitiesWithMetricValue.length} options total.`\n\n        return (\n            <div className=\"EntityPicker\">\n                <div\n                    className=\"EntityPickerSearchInput\"\n                    onKeyDown={this.onKeyDown}\n                >\n                    <input\n                        className={classnames(\"input-field\", {\n                            \"with-done-button\": this.showDoneButton,\n                        })}\n                        type=\"text\"\n                        placeholder={`Type to add a ${entityType}...`}\n                        value={this.searchInput ?? \"\"}\n                        onChange={(e): string =>\n                            (this.searchInput = e.currentTarget.value)\n                        }\n                        onFocus={this.onSearchFocus}\n                        onBlur={this.onSearchBlur}\n                        ref={this.searchInputRef}\n                        data-track-note=\"entity_picker_search_input\"\n                    />\n                    <div className=\"search-icon\">\n                        <FontAwesomeIcon icon={faSearch} />\n                    </div>\n                    {this.showDoneButton && (\n                        <div className=\"done\">\n                            <button>Done</button>\n                        </div>\n                    )}\n                </div>\n                {this.pickerMenu}\n                <div className=\"EntityListContainer\" onKeyDown={this.onKeyDown}>\n                    {(!this.isDropdownMenu || this.isOpen) && (\n                        <div\n                            className={classnames(\"EntityList\", {\n                                isDropdown: this.isDropdownMenu,\n                            })}\n                            onMouseDown={this.onMenuMouseDown}\n                        >\n                            <VerticalScrollContainer\n                                scrollingShadows={true}\n                                scrollLock={true}\n                                className=\"EntitySearchResults\"\n                                contentsId={entities\n                                    .map((c) => c.entityName)\n                                    .join(\",\")}\n                                onMouseMove={this.unblockHover}\n                                ref={this.scrollContainerRef}\n                            >\n                                <Flipper\n                                    spring={{\n                                        stiffness: 300,\n                                        damping: 33,\n                                    }}\n                                    // We only want to animate when the selection changes, but not on changes due to\n                                    // searching\n                                    flipKey={selectedEntityNames.join(\",\")}\n                                >\n                                    {entities.map((option, index) => (\n                                        <PickerOption\n                                            key={index}\n                                            hasDataForActiveMetric={availableEntities.has(\n                                                option.entityName\n                                            )}\n                                            optionWithMetricValue={option}\n                                            highlight={this.highlightLabel}\n                                            barScale={this.barScale}\n                                            onChange={this.selectEntity}\n                                            onHover={(): void =>\n                                                this.onHover(index)\n                                            }\n                                            isSelected={this.selectionSet.has(\n                                                option.entityName\n                                            )}\n                                            isFocused={\n                                                this.focusIndex === index\n                                            }\n                                            innerRef={\n                                                this.focusIndex === index\n                                                    ? this.focusRef\n                                                    : undefined\n                                            }\n                                            className={\n                                                this\n                                                    .mostRecentlySelectedEntityName ===\n                                                option.entityName\n                                                    ? \"most-recently-selected\"\n                                                    : undefined\n                                            }\n                                        />\n                                    ))}\n                                </Flipper>\n                            </VerticalScrollContainer>\n                            <div>\n                                <div\n                                    title={selectedDebugMessage}\n                                    className=\"ClearSelectionButton\"\n                                    data-track-note=\"entity_picker_clear_selection\"\n                                    onClick={(): void => {\n                                        selection.clearSelection()\n                                        this.props.onClearEntities?.()\n                                    }}\n                                >\n                                    <FontAwesomeIcon icon={faTimes} /> Clear\n                                    selection\n                                </div>\n                            </div>\n                        </div>\n                    )}\n                </div>\n            </div>\n        )\n    }\n}\n\ninterface PickerOptionProps {\n    optionWithMetricValue: EntityOptionWithMetricValue\n    highlight: (label: string) => React.ReactElement | string\n    onChange: (name: string, checked: boolean) => void\n    onHover?: () => void\n    innerRef?: React.RefObject<HTMLLabelElement | null>\n    isFocused?: boolean\n    isSelected?: boolean\n    barScale?: ScaleLinear<number, number>\n    hasDataForActiveMetric: boolean\n    className?: string\n}\n\nclass PickerOption extends React.Component<PickerOptionProps> {\n    @bind onClick(event: React.MouseEvent<HTMLLabelElement, MouseEvent>): void {\n        event.stopPropagation()\n        event.preventDefault()\n        this.props.onChange(\n            this.props.optionWithMetricValue.entityName,\n            !this.props.isSelected\n        )\n    }\n\n    override render(): React.ReactElement {\n        const {\n            barScale,\n            optionWithMetricValue,\n            innerRef,\n            isSelected,\n            isFocused,\n            hasDataForActiveMetric,\n            highlight,\n            className,\n        } = this.props\n        const { entityName, plotValue, formattedValue } = optionWithMetricValue\n        const metricValue = formattedValue === entityName ? \"\" : formattedValue // If the user has this entity selected, don't show the name twice.\n\n        return (\n            <Flipped flipId={entityName} translate opacity>\n                <label\n                    className={classnames(\n                        \"EntityPickerOption\",\n                        className,\n                        {\n                            selected: isSelected,\n                            focused: isFocused,\n                            \"local-country\":\n                                optionWithMetricValue.localEntitiesIndex !==\n                                undefined,\n                        },\n                        hasDataForActiveMetric ? undefined : \"MissingData\"\n                    )}\n                    onMouseMove={this.props.onHover}\n                    onMouseOver={this.props.onHover}\n                    onClick={this.onClick}\n                    ref={innerRef}\n                >\n                    <div className=\"input-container\">\n                        <input\n                            type=\"checkbox\"\n                            checked={isSelected}\n                            value={entityName}\n                            tabIndex={-1}\n                            readOnly\n                        />\n                    </div>\n                    <div className=\"info-container\">\n                        <div className=\"labels-container\">\n                            <div className=\"name\">{highlight(entityName)}</div>\n                            {plotValue !== undefined && (\n                                <div className=\"metric\">{metricValue}</div>\n                            )}\n                        </div>\n                        {barScale && _.isNumber(plotValue) ? (\n                            <div className=\"plot\">\n                                <div\n                                    className=\"bar\"\n                                    style={{\n                                        width: `${barScale(plotValue) * 100}%`,\n                                    }}\n                                />\n                            </div>\n                        ) : (\n                            <div className=\"plot\"></div>\n                        )}\n                    </div>\n                </label>\n            </Flipped>\n        )\n    }\n}\n","import { action, makeObservable } from \"mobx\"\n\nexport interface SlideShowManager<SlideData> {\n    setSlide: (slide: SlideData) => void\n}\n\n// A \"slide\" is just a query string.\nexport class SlideShowController<SlideData> {\n    constructor(\n        slides: SlideData[] = [],\n        currentIndex = 0,\n        manager?: SlideShowManager<SlideData>\n    ) {\n        makeObservable(this)\n        this.currentIndex = currentIndex\n        this.slides = slides\n        this.manager = manager\n    }\n    private slides: SlideData[]\n    private currentIndex: number\n    private manager?: SlideShowManager<SlideData>\n\n    get isEmpty() {\n        return this.slides.length === 0\n    }\n\n    @action.bound private playIndexCommand(index: number) {\n        const slides = this.slides\n        index = index >= slides.length ? index - slides.length : index\n        index = index < 0 ? slides.length + index : index\n        const slide = slides[index]\n\n        if (this.manager) this.manager.setSlide(slide)\n    }\n\n    @action.bound playNext() {\n        this.playIndexCommand(++this.currentIndex)\n    }\n\n    @action.bound playPrevious() {\n        this.playIndexCommand(--this.currentIndex)\n    }\n}\n","import { withScope, captureException } from '@sentry/browser';\nimport { isError } from '@sentry/core';\nimport { version } from 'react';\n\n/**\n * See if React major version is 17+ by parsing version string.\n */\nfunction isAtLeastReact17(reactVersion) {\n  const reactMajor = reactVersion.match(/^([^.]+)/);\n  return reactMajor !== null && parseInt(reactMajor[0]) >= 17;\n}\n\n/**\n * Recurse through `error.cause` chain to set cause on an error.\n */\nfunction setCause(error, cause) {\n  const seenErrors = new WeakSet();\n\n  function recurse(error, cause) {\n    // If we've already seen the error, there is a recursive loop somewhere in the error's\n    // cause chain. Let's just bail out then to prevent a stack overflow.\n    if (seenErrors.has(error)) {\n      return;\n    }\n    if (error.cause) {\n      seenErrors.add(error);\n      return recurse(error.cause, cause);\n    }\n    error.cause = cause;\n  }\n\n  recurse(error, cause);\n}\n\n/**\n * Captures an error that was thrown by a React ErrorBoundary or React root.\n *\n * @param error The error to capture.\n * @param errorInfo The errorInfo provided by React.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureReactException(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  error,\n  { componentStack },\n  hint,\n) {\n  // If on React version >= 17, create stack trace from componentStack param and links\n  // to to the original error using `error.cause` otherwise relies on error param for stacktrace.\n  // Linking errors requires the `LinkedErrors` integration be enabled.\n  // See: https://reactjs.org/blog/2020/08/10/react-v17-rc.html#native-component-stacks\n  //\n  // Although `componentDidCatch` is typed to accept an `Error` object, it can also be invoked\n  // with non-error objects. This is why we need to check if the error is an error-like object.\n  // See: https://github.com/getsentry/sentry-javascript/issues/6167\n  if (isAtLeastReact17(version) && isError(error) && componentStack) {\n    const errorBoundaryError = new Error(error.message);\n    errorBoundaryError.name = `React ErrorBoundary ${error.name}`;\n    errorBoundaryError.stack = componentStack;\n\n    // Using the `LinkedErrors` integration to link the errors together.\n    setCause(error, errorBoundaryError);\n  }\n\n  return withScope(scope => {\n    scope.setContext('react', { componentStack });\n    return captureException(error, hint);\n  });\n}\n\n/**\n * Creates an error handler that can be used with the `onCaughtError`, `onUncaughtError`,\n * and `onRecoverableError` options in `createRoot` and `hydrateRoot` React DOM methods.\n *\n * @param callback An optional callback that will be called after the error is captured.\n * Use this to add custom handling for errors.\n *\n * @example\n *\n * ```JavaScript\n * const root = createRoot(container, {\n *  onCaughtError: Sentry.reactErrorHandler(),\n *  onUncaughtError: Sentry.reactErrorHandler((error, errorInfo) => {\n *    console.warn('Caught error', error, errorInfo.componentStack);\n *  });\n * });\n * ```\n */\nfunction reactErrorHandler(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  callback,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return (error, errorInfo) => {\n    const hasCallback = !!callback;\n    const eventId = captureReactException(error, errorInfo, {\n      mechanism: { handled: hasCallback, type: 'auto.function.react.error_handler' },\n    });\n    if (hasCallback) {\n      callback(error, errorInfo, eventId);\n    }\n  };\n}\n\nexport { captureReactException, isAtLeastReact17, reactErrorHandler, setCause };\n//# sourceMappingURL=error.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { getClient, showReportDialog, withScope } from '@sentry/browser';\nimport { debug } from '@sentry/core';\nimport * as React from 'react';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { captureReactException } from './error.js';\nimport { hoistNonReactStatics } from './hoist-non-react-statics.js';\n\nconst UNKNOWN_COMPONENT = 'unknown';\n\nconst INITIAL_STATE = {\n  componentStack: null,\n  error: null,\n  eventId: null,\n};\n\n/**\n * A ErrorBoundary component that logs errors to Sentry.\n * NOTE: If you are a Sentry user, and you are seeing this stack frame, it means the\n * Sentry React SDK ErrorBoundary caught an error invoking your application code. This\n * is expected behavior and NOT indicative of a bug with the Sentry React SDK.\n */\nclass ErrorBoundary extends React.Component {\n\n   constructor(props) {\n    super(props);\n\n    this.state = INITIAL_STATE;\n    this._openFallbackReportDialog = true;\n\n    const client = getClient();\n    if (client && props.showDialog) {\n      this._openFallbackReportDialog = false;\n      this._cleanupHook = client.on('afterSendEvent', event => {\n        if (!event.type && this._lastEventId && event.event_id === this._lastEventId) {\n          showReportDialog({ ...props.dialogOptions, eventId: this._lastEventId });\n        }\n      });\n    }\n  }\n\n   componentDidCatch(error, errorInfo) {\n    const { componentStack } = errorInfo;\n    const { beforeCapture, onError, showDialog, dialogOptions } = this.props;\n    withScope(scope => {\n      if (beforeCapture) {\n        beforeCapture(scope, error, componentStack);\n      }\n\n      const handled = this.props.handled != null ? this.props.handled : !!this.props.fallback;\n      const eventId = captureReactException(error, errorInfo, {\n        mechanism: { handled, type: 'auto.function.react.error_boundary' },\n      });\n\n      if (onError) {\n        onError(error, componentStack, eventId);\n      }\n      if (showDialog) {\n        this._lastEventId = eventId;\n        if (this._openFallbackReportDialog) {\n          showReportDialog({ ...dialogOptions, eventId });\n        }\n      }\n\n      // componentDidCatch is used over getDerivedStateFromError\n      // so that componentStack is accessible through state.\n      this.setState({ error, componentStack, eventId });\n    });\n  }\n\n   componentDidMount() {\n    const { onMount } = this.props;\n    if (onMount) {\n      onMount();\n    }\n  }\n\n   componentWillUnmount() {\n    const { error, componentStack, eventId } = this.state;\n    const { onUnmount } = this.props;\n    if (onUnmount) {\n      if (this.state === INITIAL_STATE) {\n        // If the error boundary never encountered an error, call onUnmount with null values\n        onUnmount(null, null, null);\n      } else {\n        // `componentStack` and `eventId` are guaranteed to be non-null here because `onUnmount` is only called\n        // when the error boundary has already encountered an error.\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        onUnmount(error, componentStack, eventId);\n      }\n    }\n\n    if (this._cleanupHook) {\n      this._cleanupHook();\n      this._cleanupHook = undefined;\n    }\n  }\n\n   resetErrorBoundary() {\n    const { onReset } = this.props;\n    const { error, componentStack, eventId } = this.state;\n    if (onReset) {\n      // `componentStack` and `eventId` are guaranteed to be non-null here because `onReset` is only called\n      // when the error boundary has already encountered an error.\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      onReset(error, componentStack, eventId);\n    }\n    this.setState(INITIAL_STATE);\n  }\n\n   render() {\n    const { fallback, children } = this.props;\n    const state = this.state;\n\n    // `componentStack` is only null in the initial state, when no error has been captured.\n    // If an error has been captured, `componentStack` will be a string.\n    // We cannot check `state.error` because null can be thrown as an error.\n    if (state.componentStack === null) {\n      return typeof children === 'function' ? children() : children;\n    }\n\n    const element =\n      typeof fallback === 'function'\n        ? React.createElement(fallback, {\n            error: state.error,\n            componentStack: state.componentStack,\n            resetError: () => this.resetErrorBoundary(),\n            eventId: state.eventId,\n          })\n        : fallback;\n\n    if (React.isValidElement(element)) {\n      return element;\n    }\n\n    if (fallback) {\n      DEBUG_BUILD && debug.warn('fallback did not produce a valid ReactElement');\n    }\n\n    // Fail gracefully if no fallback provided or is not valid\n    return null;\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withErrorBoundary(\n  WrappedComponent,\n  errorBoundaryOptions,\n) {\n  const componentDisplayName = WrappedComponent.displayName || WrappedComponent.name || UNKNOWN_COMPONENT;\n\n  const Wrapped = React.memo((props) => (\n    React.createElement(ErrorBoundary, { ...errorBoundaryOptions,}\n      , React.createElement(WrappedComponent, { ...props,} )\n    )\n  )) ;\n\n  Wrapped.displayName = `errorBoundary(${componentDisplayName})`;\n\n  // Copy over static methods from Wrapped component to Profiler HOC\n  // See: https://reactjs.org/docs/higher-order-components.html#static-methods-must-be-copied-over\n  hoistNonReactStatics(Wrapped, WrappedComponent);\n  return Wrapped;\n}\n\nexport { ErrorBoundary, UNKNOWN_COMPONENT, withErrorBoundary };\n//# sourceMappingURL=errorboundary.js.map\n","import { debounce } from \"lodash-es\"\nimport { GrapherProgrammaticInterface, loadCatalogData } from \"../index.js\"\nimport * as Sentry from \"@sentry/react\"\nimport { createRoot } from \"react-dom/client\"\nimport { FetchingGrapher } from \"./FetchingGrapher.js\"\nimport {\n    AdditionalGrapherDataFetchFn,\n    ArchiveContext,\n} from \"@ourworldindata/types\"\nimport { Bounds } from \"@ourworldindata/utils\"\n\nexport function renderGrapherIntoContainer({\n    config,\n    container,\n    dataApiUrl,\n    catalogUrl,\n    archiveContext,\n    noCache,\n}: {\n    config: GrapherProgrammaticInterface\n    container: Element\n    dataApiUrl: string\n    catalogUrl: string\n    archiveContext?: ArchiveContext\n    noCache?: boolean\n}): void {\n    const reactRoot = createRoot(container)\n\n    const setBoundsFromContainerAndRender = (\n        entries: ResizeObserverEntry[]\n    ): void => {\n        const entry = entries?.[0] // We always observe exactly one element\n        if (!entry)\n            throw new Error(\n                \"Couldn't resize grapher, expected exactly one ResizeObserverEntry\"\n            )\n\n        // Don't bother rendering if the container is hidden\n        // see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n        if ((entry.target as HTMLElement).offsetParent === null) return\n\n        const grapherConfigWithBounds = {\n            ...config,\n            additionalDataLoaderFn: ((catalogKey) =>\n                loadCatalogData(catalogKey, {\n                    baseUrl: catalogUrl,\n                })) as AdditionalGrapherDataFetchFn,\n        }\n\n        reactRoot.render(\n            <Sentry.ErrorBoundary>\n                <FetchingGrapher\n                    config={grapherConfigWithBounds}\n                    dataApiUrl={dataApiUrl}\n                    catalogUrl={catalogUrl}\n                    archiveContext={archiveContext}\n                    externalBounds={Bounds.fromRect(entry.contentRect)}\n                    queryStr={grapherConfigWithBounds.queryStr}\n                    noCache={noCache}\n                />\n            </Sentry.ErrorBoundary>\n        )\n    }\n\n    if (typeof window !== \"undefined\" && \"ResizeObserver\" in window) {\n        const resizeObserver = new ResizeObserver(\n            // Use a leading debounce to render immediately upon first load, and also immediately upon orientation change on mobile\n            debounce(setBoundsFromContainerAndRender, 400, {\n                leading: true,\n            })\n        )\n        resizeObserver.observe(container)\n    } else if (typeof window === \"object\" && typeof document === \"object\") {\n        // only show the warning when we're in something that roughly resembles a browser\n        console.warn(\n            \"ResizeObserver not available; grapher will not be able to render\"\n        )\n    }\n}\n\nexport function renderSingleGrapherOnGrapherPage({\n    config,\n    dataApiUrl,\n    catalogUrl,\n    archiveContext,\n    noCache,\n    queryParams,\n}: {\n    config: GrapherProgrammaticInterface\n    dataApiUrl: string\n    catalogUrl: string\n    archiveContext?: ArchiveContext\n    noCache?: boolean\n    queryParams?: URLSearchParams\n}): void {\n    const container = document.getElementsByTagName(\"figure\")[0]\n    const queryStrValue = queryParams\n        ? `?${queryParams.toString()}`\n        : window.location.search\n    try {\n        const enrichedConfig = {\n            ...config,\n            bindUrlToWindow: true,\n            enableKeyboardShortcuts: true,\n            queryStr: queryStrValue,\n            archiveContext,\n        }\n        renderGrapherIntoContainer({\n            config: enrichedConfig,\n            container,\n            dataApiUrl,\n            catalogUrl,\n            archiveContext,\n            noCache,\n        })\n    } catch (err) {\n        container.innerHTML = `<p>Unable to load interactive visualization</p>`\n        container.setAttribute(\"id\", \"fallback\")\n        throw err\n    }\n}\n","import { SortOrder, GrapherQueryParams } from \"@ourworldindata/types\"\nimport { ColumnSlug, SerializedGridProgram } from \"@ourworldindata/utils\"\n\nexport enum ExplorerControlType {\n    Radio = \"Radio\",\n    Checkbox = \"Checkbox\",\n    Dropdown = \"Dropdown\",\n}\n\nexport enum ExplorerChartCreationMode {\n    FromGrapherId = \"FromGrapherId\",\n    FromVariableIds = \"FromVariableIds\",\n    FromExplorerTableColumnSlugs = \"FromExplorerTableColumnSlugs\",\n}\n\nexport const DefaultNewExplorerSlug = \"new\"\n\nexport const ExplorerControlTypeRegex = new RegExp(\n    \" (\" + Object.values(ExplorerControlType).join(\"|\") + \")$\"\n)\n\nexport interface ExplorerChoice {\n    title: string\n    displayTitle?: string\n    options: ExplorerChoiceOption[]\n    value: string\n    type: ExplorerControlType\n}\n\nexport interface ExplorerChoiceOption {\n    label: string\n    available: boolean\n    value: string\n    checked?: boolean\n}\n\nexport type ChoiceName = string\nexport type ChoiceValue = string\n\nexport interface ExplorerChoiceParams {\n    [choiceName: string]: ChoiceValue\n}\n\nexport interface ChoiceMap {\n    [choiceName: string]: ChoiceValue[]\n}\n\n/** Query params available in all explorers */\nexport interface ExplorerStandardQueryParams extends GrapherQueryParams {\n    pickerSort?: SortOrder\n    pickerMetric?: ColumnSlug\n    hideControls?: string\n}\n\nexport type ExplorerFullQueryParams = ExplorerStandardQueryParams &\n    ExplorerChoiceParams\n\nexport const UNSAVED_EXPLORER_DRAFT = \"UNSAVED_EXPLORER_DRAFT\"\nexport const UNSAVED_EXPLORER_PREVIEW_QUERYPARAMS =\n    \"UNSAVED_EXPLORER_PREVIEW_QUERYPARAMS\"\n\nexport const EMBEDDED_EXPLORER_DELIMITER = \"\\n//EMBEDDED_EXPLORER\\n\"\nexport const EXPLORER_CONSTANTS_DELIMITER = \"\\n//EXPLORER_CONSTANTS\\n\"\nexport const EMBEDDED_EXPLORER_GRAPHER_CONFIGS =\n    \"\\n//EMBEDDED_EXPLORER_GRAPHER_CONFIGS\\n\"\nexport const EMBEDDED_EXPLORER_PARTIAL_GRAPHER_CONFIGS =\n    \"\\n//EMBEDDED_PARTIAL_EXPLORER_GRAPHER_CONFIGS\\n\"\nexport const EMBEDDED_EXPLORER_VIEW_CONFIG_IDS =\n    \"\\n//EMBEDDED_EXPLORER_VIEW_CONFIG_IDS\\n\"\n\nexport const EXPLORER_EMBEDDED_FIGURE_SELECTOR = \"data-explorer-src\"\n\nexport const ExplorerContainerId = \"ExplorerContainer\"\n\nexport const GetAllExplorersRoute = \"allExplorers.json\"\n\nexport const GetAllExplorersTagsRoute = \"allExplorersTags.json\"\n\nexport const EXPLORERS_ROUTE_FOLDER = \"explorers\" // Url path: http://owid.org/{explorers}\nexport const EXPLORERS_GIT_CMS_FOLDER = \"explorers\" // Disk path: /home/owid/git-content/{explorers}\nexport const EXPLORERS_PREVIEW_ROUTE = `${EXPLORERS_ROUTE_FOLDER}/preview`\n\nexport interface ExplorersRouteResponse {\n    success: boolean\n    errorMessage?: string\n    explorers: SerializedGridProgram[]\n}\n","import {\n    GrapherInterface,\n    ORIGIN_URL_REGEX_PATTERNS,\n} from \"@ourworldindata/types\"\n\nexport const CellHasErrorsClass = \"CellHasErrorsClass\"\n\nexport enum GridBoolean {\n    true = \"true\",\n    false = \"false\",\n}\n\nexport const GRID_NODE_DELIMITER = \"\\n\"\nexport const GRID_CELL_DELIMITER = \"\\t\"\nexport const GRID_EDGE_DELIMITER = \"\\t\"\n\nexport type CellCoordinate = number // An integer >= 0\n\nexport type Grammar<TCellDef extends CellDef = CellDef> = {\n    [keywordSlug: string]: TCellDef\n}\n\n// A CellDef is a tuple: part keyword and the other half is the contents. The contents can be 1 cell, a list of cells, and/or a subtable.\nexport interface CellDef {\n    keyword: string\n    cssClass: string\n    description: string\n    grammar?: Grammar\n    headerCellDef?: CellDef\n    terminalOptions?: CellDef[]\n    catchAllCellDef?: CellDef // Only used by vertical grammars, this cell def, if present, will be used if a keyword is unrecognized during parsing.\n    regex?: RegExp // A validation regex a value must pass. todo: seems like this is overloaded and used for testing keywords and contents.\n    requirementsDescription?: string\n    valuePlaceholder?: string\n    positionalCellDefs?: readonly CellDef[] // Additional cell types as positional arguments.\n    isHorizontalList?: boolean // a list type, such as \"colors\\tred\\torange\\tgreen\"\n    parse?: (value: any) => any\n}\n\nexport interface GrapherCellDef extends CellDef {\n    toGrapherObject: (value: any) => GrapherInterface // map to a partial config that is a valid GrapherInterface\n}\n\nexport interface ColumnCellDef extends CellDef {\n    isDisplayProperty?: boolean\n}\n\nexport interface ParsedCell {\n    errorMessage?: string\n    cssClasses?: string[]\n    optionKeywords?: string[]\n    comment?: string\n    cellDef?: CellDef\n    placeholder?: string\n    contents?: any\n}\n\nexport interface CellPosition {\n    row: CellCoordinate\n    column: CellCoordinate\n}\n\nexport const Origin: CellPosition = {\n    row: 0,\n    column: 0,\n}\n\nexport const BooleanCellDef: CellDef = {\n    keyword: \"\",\n    terminalOptions: [\n        { keyword: GridBoolean.true, cssClass: \"\", description: \"\" },\n        { keyword: GridBoolean.false, cssClass: \"\", description: \"\" },\n    ],\n    cssClass: \"BooleanCellDef\",\n    description: \"Boolean\",\n    parse: (value: any) => {\n        // Handle already parsed boolean values (to avoid double parsing)\n        if (typeof value === \"boolean\") return value\n        return value === GridBoolean.true\n    },\n}\n\nexport const StringCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"StringCellDef\",\n    description: \"\",\n    parse: (value: any) => `${value}`.replace(/\\\\n/g, \"\\n\"),\n}\n\nexport const StringDeclarationDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"StringDeclarationDef\",\n    description: \"\",\n}\n\nexport const EnumCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"EnumCellDef\",\n    description: \"\",\n}\n\nexport const RootKeywordCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"KeywordCellDef\",\n    description: \"Keyword\",\n}\n\nexport const NumericCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"NumericCellDef\",\n    description: \"\",\n    regex: /^-?\\d+\\.?\\d*$/,\n    requirementsDescription: `Must be a number`,\n    valuePlaceholder: \"98.6\",\n    parse: (value: any) => parseFloat(value),\n}\n\nexport const NumericOrAutoCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"NumericCellDef\",\n    description: \"\",\n    regex: /^(-?\\d+\\.?\\d*|auto)$/,\n    requirementsDescription: `Must be a number or \"auto\"`,\n    valuePlaceholder: \"98.6\",\n    parse: (value: any) => {\n        if (value === \"auto\") return \"auto\"\n        return parseFloat(value)\n    },\n}\n\nexport const IntegerCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IntegerCellDef\",\n    description: \"\",\n    regex: /^-?[0-9]+$/,\n    requirementsDescription: `Must be an integer`,\n    valuePlaceholder: \"12345\",\n    parse: (value: any) => parseInt(value),\n}\n\nexport const PositiveIntegersCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IntegerCellDef\",\n    description: \"\",\n    regex: /^[0-9 ]+$/,\n    requirementsDescription: `Must be a positive integer or a list of positive integers`,\n    valuePlaceholder: \"12345 23456\",\n}\n\nexport const SubTableHeaderCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"SubTableHeaderCellDef\",\n    description: \"\",\n}\n\nexport const SubTableValueCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"SubTableValueCellDef\",\n    description: \"\",\n}\n\nconst MatchUrlsOnlyRegex =\n    /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[\\w]*))?)/\n\nexport const UrlCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"UrlCellDef\",\n    description: \"\",\n    regex: MatchUrlsOnlyRegex,\n}\n\n// Combines the patterns from ORIGIN_URL_REGEX_PATTERNS into a single regex for cell validation\nconst AbsoluteOrRelativeUrlRegex = new RegExp(\n    ORIGIN_URL_REGEX_PATTERNS.map((regex) => regex.source).join(\"|\")\n)\n\nexport const AbsoluteOrRelativeUrlCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"UrlCellDef\",\n    description: \"\",\n    regex: AbsoluteOrRelativeUrlRegex,\n}\n\nexport const QueryStringCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"QueryStringCellDef\",\n    description: \"\",\n}\n\nexport const NothingGoesThereCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"NothingGoesThereType\",\n    description:\n        \"Nothing should be here. You can make this a comment by prepending a ##\",\n}\n\nexport const CommentCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"CommentType\",\n    description: \"Just a comment.\",\n    regex: /^(##|💬)/,\n}\n\nexport const WorkInProgressCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"WorkInProgressCellDef\",\n    description: \"Not a recognized statement. Treating as a work in progress.\",\n}\n\nexport const SlugDeclarationCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"SlugDeclarationType\",\n    description: \"A unique URL-friendly name.\",\n    regex: /^[a-zA-Z0-9-_]+$/,\n    requirementsDescription: `Can only contain the characters a-zA-Z0-9-_`,\n}\n\n// This is the name for a cell that is on the \"frontier\", where the next user input is expected to go. Okay to rename if you have a better word.\nexport const FrontierCellClass = \"ShowDropdownArrow\"\n\nexport const SlugsDeclarationCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"SlugDeclarationType\",\n    description: \"Unique URL-friendly names.\",\n    regex: /^[a-zA-Z0-9-_ ]+$/,\n    requirementsDescription: `Can only contain the characters a-zA-Z0-9-_ `,\n}\n\nexport const EtlPathCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IndicatorIdOrEtlPath\",\n    description: \"Path to an ETL indicator.\",\n    regex: /^$|^[\\w\\d_/-]+#[\\w\\d_/-]+$/,\n    requirementsDescription: `Can only contain the characters a-zA-Z0-9-_/#`,\n}\n\nexport const IndicatorIdOrEtlPathCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IndicatorIdOrEtlPath\",\n    description: \"A single indicator ID or a path to an ETL indicator.\",\n    regex: /^\\d+|[\\w\\d_/-]+#[\\w\\d_/-]+$/,\n    requirementsDescription: `Can only contain the characters a-zA-Z0-9-_/#`,\n}\n\nexport const SlugOrIndicatorIdOrEtlPathCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"SlugOrIndicatorIdOrEtlPath\",\n    description: \"A column slug, indicator ID, or catalog path.\",\n    regex: /^[a-zA-Z0-9-_]+$|^\\d+$|^[\\w\\d_/-]+#[\\w\\d_/-]+$/,\n    requirementsDescription: `Can be a slug (a-zA-Z0-9-_), an indicator ID (digits), or a catalog path (a-zA-Z0-9-_/#)`,\n}\n\nexport const IndicatorIdsOrEtlPathsCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"IndicatorIdOrEtlPath\",\n    description: \"One or more indicator IDs or paths to an ETL indicator.\",\n    regex: /^((\\d+|[\\w\\d_/-]*#[\\w\\d_/-]+)( +|$))+$/,\n    requirementsDescription: `Can only contain the characters a-zA-Z0-9-_/# `,\n}\n\nexport const JSONObjectCellDef: CellDef = {\n    keyword: \"\",\n    cssClass: \"JSONObjectCellDef\",\n    description: \"JSON object\",\n    regex: /^\\{.*\\}$/, // very basic validation that expression starts with { and ends with }\n    requirementsDescription: \"Must contain a valid JSON object\",\n}\n\nexport type MatrixLine = string[]\nexport type MatrixProgram = MatrixLine[]\n","import { Component } from \"react\"\nimport { Dropdown } from \"@ourworldindata/grapher\"\nimport { bind } from \"@ourworldindata/utils\"\nimport {\n    ExplorerControlType,\n    ExplorerChoiceOption,\n    ExplorerChoice,\n} from \"./ExplorerConstants.js\"\nimport { GridBoolean } from \"./gridLang/GridLangConstants.js\"\nimport classNames from \"classnames\"\nimport * as R from \"remeda\"\n\nconst AVAILABLE_OPTION_CLASS = \"AvailableOption\"\nconst UNAVAILABLE_OPTION_CLASS = \"UnavailableOption\"\nconst SELECTED_OPTION_CLASS = \"SelectedOption\"\nconst EXPLORER_DROPDOWN_CLASS = \"ExplorerDropdown\"\nconst HIDDEN_CONTROL_HEADER_CLASS = \"HiddenControlHeader\"\n\nexport class ExplorerControlBar extends Component<{\n    isMobile?: boolean\n    showControls?: boolean\n    closeControls?: () => void\n    children: React.ReactNode\n}> {\n    override render() {\n        const { isMobile, showControls, closeControls } = this.props\n        const mobileCloseButton = isMobile ? (\n            <a\n                className=\"btn btn-primary mobile-button\"\n                onClick={closeControls}\n            >\n                Done\n            </a>\n        ) : undefined\n\n        const showMobileControls = isMobile && showControls\n        return (\n            <form\n                className={classNames(\n                    \"ExplorerControlBar\",\n                    showMobileControls\n                        ? `show-controls-popup`\n                        : isMobile\n                          ? `hide-controls-popup`\n                          : false\n                )}\n            >\n                {this.props.children}\n                {mobileCloseButton}\n            </form>\n        )\n    }\n}\n\ninterface ExplorerDropdownOption {\n    label: string\n    value: string\n}\n\nconst ExplorerDropdown = (props: {\n    options: ExplorerDropdownOption[]\n    value: ExplorerDropdownOption\n    isMobile: boolean\n    onChange: (option: string) => void\n    ariaLabel?: string\n}) => {\n    const { options, value, isMobile, onChange, ariaLabel } = props\n    const isSearchable = !isMobile && options.length > 10\n    const dropdownOptions = options.map((option) => ({\n        label: option.label,\n        value: option.value,\n    }))\n    const selectedOption =\n        dropdownOptions.find((option) => option.value === value?.value) ?? null\n    const isDisabled = options.length < 2\n\n    return (\n        <Dropdown\n            className={EXPLORER_DROPDOWN_CLASS}\n            options={dropdownOptions}\n            value={selectedOption}\n            onChange={(option) => {\n                if (option) onChange(option.value)\n            }}\n            isDisabled={isDisabled}\n            isSearchable={isSearchable}\n            placeholder=\"-\"\n            aria-label={ariaLabel}\n        />\n    )\n}\n\nexport class ExplorerControlPanel extends Component<{\n    choice: ExplorerChoice\n    explorerSlug?: string\n    onChange?: (value: string) => void\n    isMobile: boolean\n}> {\n    private renderCheckboxOrRadio(option: ExplorerChoiceOption, index: number) {\n        const { explorerSlug, choice } = this.props\n        const { title, type, value } = choice\n        const { available, label, checked } = option\n        const isCheckbox = type === ExplorerControlType.Checkbox\n        const onChangeValue = isCheckbox\n            ? checked\n                ? GridBoolean.false\n                : GridBoolean.true\n            : option.value\n        const currentValue = isCheckbox\n            ? checked\n                ? GridBoolean.true\n                : GridBoolean.false\n            : value\n\n        return (\n            <div key={index} className=\"ControlOption\">\n                <label\n                    className={classNames(\n                        {\n                            [SELECTED_OPTION_CLASS]: checked,\n                        },\n                        available\n                            ? AVAILABLE_OPTION_CLASS\n                            : UNAVAILABLE_OPTION_CLASS\n                    )}\n                >\n                    <input\n                        onChange={() => this.customOnChange(onChangeValue)}\n                        type={isCheckbox ? \"checkbox\" : \"radio\"}\n                        disabled={!available}\n                        name={title}\n                        checked={checked}\n                        value={currentValue}\n                        data-track-note={`${\n                            explorerSlug ?? \"explorer\"\n                        }_click_${title.toLowerCase()}`}\n                    />{\" \"}\n                    {label}\n                </label>\n            </div>\n        )\n    }\n\n    private get options() {\n        return this.props.choice.options ?? []\n    }\n\n    private renderDropdown() {\n        const options = this.options\n            .filter((option) => option.available)\n            .map((option) => {\n                return {\n                    label: option.label,\n                    value: option.value,\n                }\n            })\n        const value = options.find(\n            (option) => option.value === this.props.choice.value\n        ) ?? { label: \"-\", value: \"-\" }\n\n        return (\n            <ExplorerDropdown\n                options={options}\n                value={value}\n                isMobile={this.props.isMobile}\n                onChange={this.customOnChange}\n                ariaLabel={this.props.choice.title}\n            />\n        )\n    }\n\n    @bind private customOnChange(value: string) {\n        this.props.onChange?.(value)\n    }\n\n    private renderColumn(\n        key: string,\n        hideTitle: boolean,\n        options?: ExplorerChoiceOption[]\n    ) {\n        const { title, type, displayTitle } = this.props.choice\n        return (\n            <div key={key} className=\"ExplorerControl\">\n                <div\n                    className={classNames(\"ControlHeader\", {\n                        [HIDDEN_CONTROL_HEADER_CLASS]: hideTitle === true,\n                    })}\n                >\n                    {displayTitle ?? title}\n                </div>\n                {type === ExplorerControlType.Dropdown\n                    ? this.renderDropdown()\n                    : (options ?? this.options).map((option, index) =>\n                          this.renderCheckboxOrRadio(option, index)\n                      )}\n            </div>\n        )\n    }\n\n    override render() {\n        const { choice } = this.props\n        const { title, type } = choice\n        const { options } = this\n        if (type === ExplorerControlType.Radio && options.length > 4)\n            return R.chunk(options, 3).map((optionsGroup, column) =>\n                this.renderColumn(`${title}${column}`, column > 0, optionsGroup)\n            )\n        return this.renderColumn(title, type === ExplorerControlType.Checkbox)\n    }\n}\n","export const isBlankLine = (line: string[] | undefined) =>\n    line === undefined ? true : line.join(\"\") === \"\"\n\n// Todo: figure out Matrix cell type and whether we need the double check\nexport const isEmpty = (value: any) => value === \"\" || value === undefined\n\n// Adapted from: https://github.com/dcporter/didyoumean.js/blob/master/didYouMean-1.2.1.js\nexport const didYouMean = (\n    str = \"\",\n    options: string[] = [],\n    caseSensitive = false,\n    threshold = 0.4,\n    thresholdAbsolute = 20\n) => {\n    if (!caseSensitive) str = str.toLowerCase()\n\n    // Calculate the initial value (the threshold) if present.\n    let maximumEditDistanceToBeBestMatch = Math.min(\n        threshold * str.length,\n        thresholdAbsolute\n    )\n\n    // Get the edit distance to each option. If the closest one is less than 40% (by default) of str's length, then return it.\n    let closestMatch\n    const len = options.length\n    for (let optionIndex = 0; optionIndex < len; optionIndex++) {\n        const candidate = options[optionIndex]\n\n        if (!candidate) continue\n\n        const editDistance = getEditDistance(\n            str,\n            caseSensitive ? candidate : candidate.toLowerCase(),\n            maximumEditDistanceToBeBestMatch\n        )\n        if (editDistance < maximumEditDistanceToBeBestMatch) {\n            maximumEditDistanceToBeBestMatch = editDistance\n            closestMatch = candidate\n        }\n    }\n\n    return closestMatch\n}\n\nconst MAX_INT = Math.pow(2, 32) - 1\nconst getEditDistance = (stringA: string, stringB: string, maxInt: number) => {\n    const aLength = stringA.length\n    const bLength = stringB.length\n\n    // Fast path - no A or B.\n    if (aLength === 0) return Math.min(maxInt + 1, bLength)\n    if (bLength === 0) return Math.min(maxInt + 1, aLength)\n\n    // Fast path - length diff larger than max.\n    if (Math.abs(aLength - bLength) > maxInt) return maxInt + 1\n\n    // Slow path.\n    const matrix = []\n\n    // Set up the first row ([0, 1, 2, 3, etc]).\n    for (let bIndex = 0; bIndex <= bLength; bIndex++) {\n        matrix[bIndex] = [bIndex]\n    }\n\n    // Set up the first column (same).\n    for (let aIndex = 0; aIndex <= aLength; aIndex++) {\n        matrix[0][aIndex] = aIndex\n    }\n\n    let colMin\n    let minJ\n    let maxJ\n\n    // Loop over the rest of the columns.\n    for (let bIndex = 1; bIndex <= bLength; bIndex++) {\n        colMin = MAX_INT\n        minJ = 1\n        if (bIndex > maxInt) minJ = bIndex - maxInt\n        maxJ = bLength + 1\n        if (maxJ > maxInt + bIndex) maxJ = maxInt + bIndex\n        // Loop over the rest of the rows.\n        for (let aIndex = 1; aIndex <= aLength; aIndex++) {\n            // If j is out of bounds, just put a large value in the slot.\n            if (aIndex < minJ || aIndex > maxJ)\n                matrix[bIndex][aIndex] = maxInt + 1\n            // Otherwise do the normal Levenshtein thing.\n            else {\n                // If the characters are the same, there's no change in edit distance.\n                if (stringB.charAt(bIndex - 1) === stringA.charAt(aIndex - 1))\n                    matrix[bIndex][aIndex] = matrix[bIndex - 1][aIndex - 1]\n                // Otherwise, see if we're substituting, inserting or deleting.\n                else\n                    matrix[bIndex][aIndex] = Math.min(\n                        matrix[bIndex - 1][aIndex - 1] + 1, // Substitute\n                        Math.min(\n                            matrix[bIndex][aIndex - 1] + 1, // Insert\n                            matrix[bIndex - 1][aIndex] + 1\n                        )\n                    ) // Delete\n            }\n\n            // Either way, update colMin.\n            if (matrix[bIndex][aIndex] < colMin) colMin = matrix[bIndex][aIndex]\n        }\n\n        // If this column's minimum is greater than the allowed maximum, there's no point\n        // in going on with life.\n        if (colMin > maxInt) return maxInt + 1\n    }\n    // If we made it this far without running into the max, then return the final matrix value.\n    return matrix[bLength][aLength]\n}\n\nconst delimitedToMatrix = (\n    delimited: string,\n    rowDelimiter = \"\\n\",\n    columnDelimiter = \"\\t\"\n) => delimited.split(rowDelimiter).map((line) => line.split(columnDelimiter))\n\nexport const tsvToMatrix = delimitedToMatrix\n","import { trimArray } from \"@ourworldindata/core-table\"\nimport { imemo, isPresent } from \"@ourworldindata/utils\"\n\nimport { didYouMean, isBlankLine, isEmpty } from \"./GrammarUtils.js\"\nimport {\n    CellPosition,\n    CellDef,\n    CellHasErrorsClass,\n    MatrixLine,\n    MatrixProgram,\n    Grammar,\n    FrontierCellClass,\n    ParsedCell,\n    CommentCellDef,\n    SubTableValueCellDef,\n    WorkInProgressCellDef,\n    NothingGoesThereCellDef,\n} from \"./GridLangConstants.js\"\n\nexport class GridCell implements ParsedCell {\n    private position: CellPosition\n    private matrix: MatrixProgram\n    private rootDefinition: CellDef\n    constructor(\n        matrix: MatrixProgram,\n        position: CellPosition,\n        rootDefinition: CellDef\n    ) {\n        this.position = position\n        this.matrix = matrix\n        this.rootDefinition = rootDefinition\n    }\n\n    private get row() {\n        return this.position.row\n    }\n\n    private get column() {\n        return this.position.column\n    }\n\n    private get line(): MatrixLine | undefined {\n        return this.matrix[this.row]\n    }\n\n    private get isCommentCell() {\n        const { contents } = this\n        return contents && CommentCellDef.regex!.test(contents)\n    }\n\n    private get cellTerminalTypeDefinition(): CellDef | undefined {\n        const { rootDefinition } = this\n        if (this.isCommentCell) return CommentCellDef\n        const grammar = rootDefinition.grammar as unknown as Grammar\n        if (this.column === 0) return rootDefinition as unknown as CellDef\n        const firstWordOnLine = this.line ? this.line[0] : undefined\n        const isFirstWordAKeyword =\n            firstWordOnLine && grammar[firstWordOnLine] !== undefined\n        if (this.column === 1 && firstWordOnLine && isFirstWordAKeyword)\n            return grammar[firstWordOnLine]\n\n        if (!isFirstWordAKeyword) return undefined\n\n        // It has a keyword but it is column >1\n        const def = grammar[firstWordOnLine]\n        const positionalCellTypeDef =\n            def.positionalCellDefs && def.positionalCellDefs[this.column - 2]\n        if (positionalCellTypeDef) return positionalCellTypeDef\n        if (def.isHorizontalList && this.contents) return def // For now only return a def for lists if it is non-empty\n        return NothingGoesThereCellDef\n    }\n\n    private get parentSubTableInfo() {\n        const { row, matrix } = this\n        let pointerRow = row\n        let subTableHeaderRow = -1\n        while (pointerRow >= 0) {\n            const line = matrix[pointerRow]\n            if (!line) break\n            const parentKeyword = line[0]\n            if (parentKeyword) {\n                if (subTableHeaderRow === -1) return undefined\n                return {\n                    parentKeyword,\n                    parentRow: pointerRow,\n                    subTableHeaderRow,\n                    isCellInHeader: row === subTableHeaderRow,\n                    headerKeyword: matrix[subTableHeaderRow][this.column],\n                }\n            }\n\n            if (!isBlankLine(line)) subTableHeaderRow = pointerRow\n            pointerRow--\n        }\n\n        return undefined\n    }\n\n    @imemo private get subTableParseResults() {\n        const { cellTerminalTypeDefinition } = this\n        if (cellTerminalTypeDefinition) return undefined\n\n        const info = this.parentSubTableInfo\n\n        if (!info) return undefined\n\n        const {\n            parentKeyword,\n            isCellInHeader,\n            subTableHeaderRow,\n            headerKeyword,\n        } = info\n\n        const subTableDef = this.rootDefinition.grammar![parentKeyword]\n\n        const headerCellDef = subTableDef && subTableDef.headerCellDef\n\n        if (!headerCellDef) return undefined\n\n        const headerGrammar = headerCellDef.grammar\n        const valueCellDef =\n            !isCellInHeader && headerGrammar\n                ? headerGrammar[headerKeyword]\n                : undefined\n\n        return {\n            isFrontierCell: this.isSubTableFrontierCell(\n                subTableHeaderRow,\n                subTableDef\n            ),\n            def: isCellInHeader\n                ? headerCellDef\n                : (valueCellDef ?? SubTableValueCellDef),\n        }\n    }\n\n    /**\n     * If a cell is:\n     *  - to the right of the last filled cell in a line\n     *  - and that line is indented to be part of a subtable, with options\n     *  - and it is the first non-blank line in the subtabel\n     *\n     * Then consider is a \"frontier cell\"\n     *\n     */\n    private isSubTableFrontierCell(headerRow: number, subTableDef: CellDef) {\n        const { line, column, row } = this\n        const grammar = subTableDef.headerCellDef!.grammar\n        const isToTheImmediateRightOfLastFullCell =\n            line && trimArray(line).length === column\n        return (\n            row === headerRow &&\n            !isBlankLine(line) &&\n            isToTheImmediateRightOfLastFullCell &&\n            grammar &&\n            Object.keys(grammar).length\n        )\n    }\n\n    // If true show a +\n    private get isFirstCellOnFrontierRow() {\n        const { row, column } = this\n        const numRows = this.matrix.length\n        if (column) return false // Only first column should have a +\n        if (!isBlankLine(this.line)) return false // Only blank lines can be frontier\n        if (numRows === 1) {\n            if (row === 1) return !isBlankLine(this.matrix[0])\n            return row === 0\n        }\n        return row === numRows\n    }\n\n    private get suggestions() {\n        return []\n    }\n\n    private get definitionLinks(): CellPosition[] {\n        return []\n    }\n\n    private get implementationLinks(): CellPosition[] {\n        return []\n    }\n\n    @imemo get cellDef(): CellDef {\n        const def = this.cellTerminalTypeDefinition\n        if (def) return def\n\n        const subTable = this.subTableParseResults?.def\n        if (subTable) return subTable as unknown as CellDef\n\n        return WorkInProgressCellDef\n    }\n\n    get errorMessage() {\n        if (!this.line) return \"\"\n        const { cellDef, contents, optionKeywords } = this\n        const { regex, requirementsDescription, catchAllCellDef } = cellDef\n        const catchAllKeywordRegex = catchAllCellDef?.regex\n\n        if (contents === undefined || contents === \"\") return \"\"\n\n        const regexResult = regex\n            ? validate(contents, regex, requirementsDescription)\n            : undefined\n        const catchAllRegexResult = catchAllKeywordRegex\n            ? validate(\n                  contents,\n                  catchAllKeywordRegex,\n                  catchAllCellDef.requirementsDescription\n              )\n            : undefined\n\n        if (optionKeywords) {\n            if (optionKeywords.includes(contents)) return \"\"\n\n            if (regex) return regexResult\n            if (catchAllKeywordRegex) return catchAllRegexResult\n\n            const guess = didYouMean(contents, optionKeywords)\n            if (guess) return `Did you mean '${guess}'?`\n\n            return `Error: '${contents}' is not a valid option. Valid options are ${optionKeywords\n                .map((opt) => `'${opt}'`)\n                .join(\", \")}`\n        }\n\n        if (regex) return regexResult\n        if (catchAllKeywordRegex) return catchAllRegexResult\n\n        return \"\"\n    }\n\n    get contents() {\n        return this.line ? this.line[this.column] : undefined\n    }\n\n    get comment() {\n        const { contents, errorMessage, cellDef } = this\n        if (isEmpty(contents)) return undefined\n        if (errorMessage) return errorMessage\n\n        if (cellDef.grammar) {\n            const def = cellDef.grammar[contents!] ?? cellDef.catchAllCellDef\n            return def.description\n        }\n\n        return [cellDef.description].join(\"\\n\")\n    }\n\n    get cssClasses() {\n        const { errorMessage, cellDef } = this\n        if (errorMessage) return [CellHasErrorsClass]\n        const showArrow =\n            this.isFirstCellOnFrontierRow ||\n            this.subTableParseResults?.isFrontierCell\n                ? FrontierCellClass\n                : undefined\n        const hasSuggestions =\n            this.cellDef.keyword === \"table\" ? \"HasSuggestions\" : null // todo: switch from strings to constants\n        return [cellDef.cssClass, hasSuggestions, showArrow].filter(isPresent)\n    }\n\n    get placeholder() {\n        const { contents, cellDef } = this\n        const { terminalOptions } = cellDef\n        const firstOption = terminalOptions && terminalOptions[0]\n        const firstOptionName = firstOption && firstOption.keyword\n        const placeholder = cellDef.valuePlaceholder ?? firstOptionName\n        return isEmpty(contents) && placeholder\n            ? `eg \"${placeholder}\"`\n            : undefined\n    }\n\n    get optionKeywords() {\n        const { cellDef } = this\n        const { grammar, headerCellDef, terminalOptions } = cellDef\n        return terminalOptions\n            ? terminalOptions.map((def) => def.keyword)\n            : grammar\n              ? Object.keys(grammar)\n              : headerCellDef\n                ? Object.keys(headerCellDef.grammar!)\n                : undefined\n    }\n}\n\nconst validate = (value: any, regex: RegExp, requirements?: string) => {\n    if (typeof value !== \"string\") return \"\"\n    if (!regex.test(value)) {\n        return `Error: ${\n            requirements\n                ? requirements\n                : `'${value}' did not validate against ${regex}`\n        }`\n    }\n    return \"\"\n}\n","import { trimMatrix } from \"@ourworldindata/core-table\"\nimport {\n    isPresent,\n    GitCommit,\n    SerializedGridProgram,\n} from \"@ourworldindata/utils\"\n\nimport { GridCell } from \"./GridCell.js\"\nimport {\n    CellDef,\n    CellPosition,\n    GRID_CELL_DELIMITER,\n    GRID_EDGE_DELIMITER,\n    GRID_NODE_DELIMITER,\n    Origin,\n    ParsedCell,\n} from \"./GridLangConstants.js\"\nimport { tsvToMatrix } from \"./GrammarUtils.js\"\n\n/**\n * Block location for the below would be like (numRows = 2)\n * table             |\n *  slug name        | startRow = 1\n *  pop Population   | endRow   = 2\n */\ninterface BlockLocation {\n    startRow: number\n    endRow: number\n    numRows: number\n}\n\nexport class GridProgram {\n    constructor(\n        slug: string,\n        tsv: string,\n        lastCommit?: GitCommit,\n        grammar?: CellDef\n    ) {\n        this.lines = tsvToMatrix(tsv.replace(/\\r/g, \"\"))\n        this.slug = slug\n        this.lastCommit = lastCommit\n        this.grammar = grammar\n    }\n\n    private grammar?\n\n    private static guids = 0\n    guid = ++GridProgram.guids\n\n    lastCommit?: GitCommit\n    slug: string\n\n    private nodeDelimiter = GRID_NODE_DELIMITER\n    cellDelimiter = GRID_CELL_DELIMITER\n    private edgeDelimiter = GRID_EDGE_DELIMITER\n    lines: string[][]\n\n    toJson(): SerializedGridProgram {\n        return {\n            program: this.toString(),\n            slug: this.slug,\n            lastCommit: this.lastCommit,\n        }\n    }\n\n    findNext(position: CellPosition) {\n        const cell = this.getCell(position)\n        const { contents } = cell\n        return this.grepFirst(contents, {\n            ...position,\n            column: position.column + 1,\n        })\n    }\n\n    findAll(position: CellPosition) {\n        const cell = this.getCell(position)\n        const { contents } = cell\n        return this.grep(contents, {\n            ...position,\n            column: position.column + 1,\n        })\n    }\n\n    private ring(position: CellPosition) {\n        const lines = this.lines\n        const numRows = lines.length\n        if (!numRows)\n            return (function* generator() {\n                // no rows to iterate over\n            })()\n        const pointer = {\n            ...position,\n            started: false,\n            endRow: position.row,\n            endCol: position.column,\n        }\n        if (pointer.row >= numRows) pointer.endRow = numRows - 1\n\n        const lastLine = lines[pointer.endRow]\n        pointer.endCol =\n            lastLine[pointer.endCol] === undefined\n                ? lastLine.length\n                : pointer.endCol\n        function* generator() {\n            while (true) {\n                if (\n                    pointer.started &&\n                    pointer.row === pointer.endRow &&\n                    pointer.column === pointer.endCol\n                )\n                    return\n                pointer.started = true\n\n                if (\n                    lines[pointer.row] === undefined ||\n                    lines[pointer.row][pointer.column] === undefined\n                ) {\n                    pointer.row++\n                    pointer.column = 0\n                    if (pointer.row >= numRows) pointer.row = 0\n                    continue\n                }\n\n                yield {\n                    row: pointer.row,\n                    column: pointer.column,\n                } as CellPosition\n                pointer.column++\n            }\n        }\n\n        return generator()\n    }\n\n    valuesFrom(position = Origin) {\n        return Array.from(this.ring(position)).map((next) =>\n            this.getCellContents(next)\n        )\n    }\n\n    get numRows() {\n        return this.lines.length\n    }\n\n    patch(obj: any) {\n        Object.keys(obj).forEach((key) => this.setLineValue(key, obj[key]))\n        return this\n    }\n\n    grepFirst(key: string, position = Origin) {\n        for (const next of this.ring(position)) {\n            if (this.getCellContents(next) === key) return next\n        }\n        return undefined\n    }\n\n    grep(key: string, position = Origin) {\n        const hits: CellPosition[] = []\n        for (const next of this.ring(position)) {\n            if (this.getCellContents(next) === key) hits.push(next)\n        }\n        return hits\n    }\n\n    /**\n     * Returns all non-blocks as an object literal\n     */\n    get tuplesObject() {\n        const obj: { [key: string]: any } = {}\n        this.lines\n            .filter((line) => line[0] !== \"\")\n            .forEach((line) => {\n                const [key, ...rest] = line\n                if (key) obj[key.trim()] = rest.join(this.cellDelimiter).trim()\n            })\n        return obj\n    }\n\n    getLine(keyword: string) {\n        return this.lines.find((line) => line[0] === keyword)\n    }\n\n    getLineValue(keyword: string) {\n        const line = this.getLine(keyword)\n        return line?.[1]\n    }\n\n    protected getBlockLocation(\n        blockRowNumber: number\n    ): BlockLocation | undefined {\n        const startRow = blockRowNumber + 1\n        let numRows = this.lines\n            .slice(startRow)\n            .findIndex((line) => line.length && line[0] !== \"\")\n        if (numRows === 0) return undefined\n        if (numRows === -1) numRows = this.lines.slice(startRow).length\n        return { startRow, endRow: startRow + numRows, numRows }\n    }\n\n    protected getKeywordIndex(key: string) {\n        return this.lines.findIndex((line) => line[0] === key)\n    }\n\n    getCell(position: CellPosition): ParsedCell {\n        return new GridCell(this.lines, position, this.grammar!)\n    }\n\n    getCellContents(position: CellPosition) {\n        const line = this.lines[position.row]\n        return line ? line[position.column] : undefined\n    }\n\n    deleteBlock(row?: number) {\n        if (row === undefined) return this\n        const location = this.getBlockLocation(row)\n        if (!location) return this\n\n        this.lines.splice(location.startRow, location.numRows)\n        return this\n    }\n\n    deleteLine(row?: number) {\n        if (row === undefined) return this\n        this.lines.splice(row, 1)\n        return this\n    }\n\n    appendLine(line: string) {\n        this.lines.push(line.split(this.cellDelimiter))\n        return this\n    }\n\n    // todo: make immutable and return a new copy\n    setCell(row: number, col: number, value: string) {\n        this.lines[row][col] = value\n        return this\n    }\n\n    setLineValue(key: string, value: string | undefined) {\n        const index = this.getKeywordIndex(key)\n        if (index === -1 && value !== undefined) this.lines.push([key, value])\n        else if (value === undefined) this.deleteLine(index)\n        else this.lines[index] = [key, value]\n        return this\n    }\n\n    getBlock(keywordIndex: number) {\n        const location = this.getBlockLocation(keywordIndex)\n        if (!location) return undefined\n        return this.lines\n            .slice(location.startRow, location.endRow)\n            .map((line) => line.slice(1))\n    }\n\n    updateBlock(rowNumber: number, value: string[][]) {\n        const location = this.getBlockLocation(rowNumber)\n        if (!location) throw new Error(\"Block not found\")\n        this.lines.splice(\n            location.startRow,\n            location.numRows,\n            ...value.map((line) => [\"\", ...line])\n        )\n        return this\n    }\n\n    protected appendBlock(key: string, value: string[][]) {\n        this.lines.push([key])\n        value.forEach((line) => this.lines.push([\"\", ...line]))\n    }\n\n    getRowNumbersStartingWith(startsWith: string) {\n        return this.lines\n            .map((line, index) => (line[0] === startsWith ? index : null))\n            .filter(isPresent)\n    }\n\n    private static lineMatchesWords = (\n        line: string[],\n        words: (string | undefined)[]\n    ): boolean =>\n        words.every((word, index) => word === undefined || line[index] === word)\n\n    getRowMatchingWords(...words: (string | undefined)[]): number {\n        return this.lines.findIndex((line) =>\n            GridProgram.lineMatchesWords(line, words)\n        )\n    }\n\n    getAllRowsMatchingWords(...words: (string | undefined)[]): number[] {\n        const rows: number[] = []\n        this.lines.forEach((line: string[], rowIndex: number) => {\n            if (GridProgram.lineMatchesWords(line, words)) rows.push(rowIndex)\n        })\n        return rows\n    }\n\n    // The max number of columns in any row when you view a program as a spreadsheet\n    get width() {\n        return Math.max(...this.lines.map((arr) => arr.length))\n    }\n\n    toString() {\n        return this.prettify()\n    }\n\n    protected prettify() {\n        return trimMatrix(this.lines)\n            .map((line) => line.join(this.cellDelimiter))\n            .join(this.nodeDelimiter)\n    }\n}\n","import { availableTransformNames } from \"@ourworldindata/core-table\"\nimport {\n    automaticBinningStrategies,\n    ColorSchemeName,\n    ColumnTypeNames,\n} from \"@ourworldindata/types\"\nimport { ToleranceStrategy } from \"@ourworldindata/utils\"\nimport {\n    BooleanCellDef,\n    ColumnCellDef,\n    EnumCellDef,\n    EtlPathCellDef,\n    Grammar,\n    IntegerCellDef,\n    NumericCellDef,\n    SlugDeclarationCellDef,\n    StringCellDef,\n    UrlCellDef,\n} from \"./gridLang/GridLangConstants.js\"\n\nexport const ColumnGrammar: Grammar<ColumnCellDef> = {\n    variableId: {\n        ...IntegerCellDef,\n        keyword: \"variableId\",\n        description: \"Numerical variable ID\",\n    },\n    catalogPath: {\n        ...EtlPathCellDef,\n        keyword: \"catalogPath\",\n        description: \"Catalog path to the etl indicator\",\n    },\n    slug: {\n        ...SlugDeclarationCellDef,\n        keyword: \"slug\",\n    },\n    name: {\n        ...StringCellDef,\n        keyword: \"name\",\n        description:\n            \"This is the name that may appear on the y or x axis of a chart\",\n        isDisplayProperty: true,\n    },\n    type: {\n        ...StringCellDef,\n        keyword: \"type\",\n        description: `The column type reveals how to interpret the data, whether as a string or number for example, and how to display it, like whether to show a % or $.`,\n        terminalOptions: Object.values(ColumnTypeNames).map((keyword) => ({\n            keyword,\n            description: \"\",\n            cssClass: \"\",\n        })),\n    },\n    transform: {\n        ...StringCellDef,\n        keyword: \"transform\",\n        description: `An advanced option. Available transforms are: ${availableTransformNames.join(\n            \", \"\n        )}`,\n    },\n    tolerance: {\n        ...IntegerCellDef,\n        keyword: \"tolerance\",\n        description:\n            \"Set this to interpolate missing values as long as they are within this range of an actual value.\",\n        isDisplayProperty: true,\n    },\n    toleranceStrategy: {\n        ...EnumCellDef,\n        keyword: \"toleranceStrategy\",\n        terminalOptions: Object.values(ToleranceStrategy).map((strategy) => ({\n            keyword: strategy,\n            description: \"\",\n            cssClass: \"\",\n        })),\n        description: \"The tolerance strategy to use\",\n    },\n    description: {\n        ...StringCellDef,\n        keyword: \"description\",\n        description: \"Describe the column\",\n        isDisplayProperty: true,\n    },\n    unit: {\n        ...StringCellDef,\n        keyword: \"unit\",\n        description: \"Unit of measurement\",\n        isDisplayProperty: true,\n    },\n    shortUnit: {\n        ...StringCellDef,\n        keyword: \"shortUnit\",\n        description: \"Short (axis) unit\",\n        isDisplayProperty: true,\n    },\n    notes: {\n        ...StringCellDef,\n        keyword: \"notes\",\n        description: \"Any internal notes.\",\n    },\n    annotationsColumnSlug: {\n        ...StringCellDef,\n        keyword: \"annotationsColumnSlug\",\n        description:\n            \"Column that contains the annotations for this column, if any.\",\n    },\n    sourceName: {\n        ...StringCellDef,\n        keyword: \"sourceName\",\n        description:\n            \"Source name displayed on charts using this dataset. For academic papers, the name of the source should be 'Authors (year)' e.g. Arroyo-Abad and Lindert (2016). For institutional projects or reports, the name should be 'Institution, Project (year or vintage)' e.g. U.S. Bureau of Labor Statistics, Consumer Expenditure Survey (2015 release). For data that we have modified extensively, the name should be 'Our World in Data based on Author (year)' e.g. Our World in Data based on Atkinson (2002) and Sen (2000).\",\n    },\n    sourceLink: {\n        ...UrlCellDef,\n        keyword: \"sourceLink\",\n        description:\n            \"Link to the publication from which we retrieved this data\",\n    },\n    dataPublishedBy: {\n        ...StringCellDef,\n        keyword: \"dataPublishedBy\",\n        description:\n            \"For academic papers this should be a complete reference. For institutional projects, detail the project or report. For data we have modified extensively, list OWID as the publishers and provide the name of the person in charge of the calculation.\",\n    },\n    dataPublisherSource: {\n        ...StringCellDef,\n        keyword: \"dataPublisherSource\",\n        description:\n            \"Basic indication of how the publisher collected this data e.g. surveys data. Anything longer than a line should go in the dataset description.\",\n    },\n    retrievedDate: {\n        ...StringCellDef,\n        keyword: \"retrievedDate\",\n        description: \"Date when this data was obtained by us\",\n    },\n    additionalInfo: {\n        ...StringCellDef,\n        keyword: \"additionalInfo\",\n        description:\n            \"Describe the dataset and the methodology used in its construction. This can be as long and detailed as you like.\",\n    },\n    nonRedistributable: {\n        ...BooleanCellDef,\n        keyword: \"nonRedistributable\",\n        description: \"Disable data download in chart?\",\n    },\n    color: {\n        ...StringCellDef,\n        keyword: \"color\",\n        description: \"Default color for column\",\n        isDisplayProperty: true,\n    },\n    colorScaleScheme: {\n        ...EnumCellDef,\n        keyword: \"colorScaleScheme\",\n        terminalOptions: Object.values(ColorSchemeName).map((keyword) => ({\n            keyword,\n            description: \"\",\n            cssClass: \"\",\n        })),\n        description: \"The color scheme to use\",\n    },\n    colorScaleInvert: {\n        ...BooleanCellDef,\n        keyword: \"colorScaleInvert\",\n        description: \"Invert the color scale?\",\n    },\n    colorScaleBinningStrategy: {\n        ...EnumCellDef,\n        keyword: \"colorScaleBinningStrategy\",\n        terminalOptions: automaticBinningStrategies.map((keyword) => ({\n            keyword,\n            description: \"\",\n            cssClass: \"\",\n        })),\n        description: \"The binning strategy to use\",\n    },\n    colorScaleNoDataLabel: {\n        ...StringCellDef,\n        keyword: \"colorScaleNoDataLabel\",\n        description: \"Custom label for the 'No data' bin\",\n    },\n    colorScaleLegendDescription: {\n        ...StringCellDef,\n        keyword: \"colorScaleLegendDescription\",\n        description: \"Legend title\",\n    },\n    colorScaleNumericMinValue: {\n        ...NumericCellDef,\n        keyword: \"colorScaleNumericMinValue\",\n        description:\n            \"Minimum value of the first bin (leaving blank will infer the minimum from the data)\",\n    },\n    colorScaleNumericBins: {\n        ...StringCellDef,\n        keyword: \"colorScaleNumericBins\",\n        description: [\n            \"Custom numeric bins\",\n            \"  Format: [binMax],[color],[label]; [binMax],[color],[label]; ...\",\n            \"  Example: 0.1,#ccc,example label; 0.2,,; 0.3,,prev has no label\",\n        ].join(\"\\n\"),\n    },\n    colorScaleCategoricalBins: {\n        ...StringCellDef,\n        keyword: \"colorScaleCategoricalBins\",\n        description: [\n            \"Custom categorical bins\",\n            \"  Format: [data value],[color],[label]; [data value],[color],[label]; ...\",\n            \"  Example: one,#ccc,uno; two,,dos\",\n        ].join(\"\\n\"),\n    },\n    isProjection: {\n        ...BooleanCellDef,\n        keyword: \"isProjection\",\n        description: \"Is the time series a forward projection?\",\n        isDisplayProperty: true,\n    },\n    plotMarkersOnlyInLineChart: {\n        ...BooleanCellDef,\n        keyword: \"plotMarkersOnlyInLineChart\",\n        description: \"Should data points be connected by a line?\",\n        isDisplayProperty: true,\n    },\n} as const\n","import {\n    ALL_GRAPHER_CHART_TYPES,\n    ColorSchemeName,\n    FacetAxisDomain,\n    FacetStrategy,\n    GRAPHER_CHART_TYPES,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n    GrapherChartType,\n    MissingDataStrategy,\n    StackMode,\n} from \"@ourworldindata/types\"\nimport { SortBy, SortOrder } from \"@ourworldindata/utils\"\nimport {\n    GridBoolean,\n    BooleanCellDef,\n    CellDef,\n    EnumCellDef,\n    Grammar,\n    IntegerCellDef,\n    NumericOrAutoCellDef,\n    SlugDeclarationCellDef,\n    SlugsDeclarationCellDef,\n    StringCellDef,\n    UrlCellDef,\n    AbsoluteOrRelativeUrlCellDef,\n    IndicatorIdsOrEtlPathsCellDef,\n    IndicatorIdOrEtlPathCellDef,\n    SlugOrIndicatorIdOrEtlPathCellDef,\n    GrapherCellDef,\n} from \"./gridLang/GridLangConstants.js\"\nimport * as R from \"remeda\"\nconst toTerminalOptions = (keywords: string[]): CellDef[] => {\n    return keywords.map((keyword) => ({\n        keyword,\n        cssClass: \"\",\n        description: \"\",\n    }))\n}\n\nexport const GrapherGrammar: Grammar<GrapherCellDef> = {\n    title: {\n        ...StringCellDef,\n        keyword: \"title\",\n        description: \"Chart title\",\n        valuePlaceholder: \"Life Expectancy around the world.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ title: parsedValue }),\n    },\n    subtitle: {\n        ...StringCellDef,\n        keyword: \"subtitle\",\n        description: \"Chart subtitle\",\n        valuePlaceholder: \"Life Expectancy has risen over time.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ subtitle: parsedValue }),\n    },\n    ySlugs: {\n        ...SlugsDeclarationCellDef,\n        description: \"ColumnSlug(s) for the yAxis\",\n        keyword: \"ySlugs\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ ySlugs: parsedValue }),\n    },\n    yVariableIds: {\n        ...IndicatorIdsOrEtlPathsCellDef,\n        keyword: \"yVariableIds\",\n        description: \"Variable ID(s) or ETL path(s) for the yAxis\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    type: {\n        ...StringCellDef,\n        keyword: \"type\",\n        description: `The type of chart to show such as LineChart or ScatterPlot. If set to None, then the chart tab is hidden.`,\n        terminalOptions: toTerminalOptions([\n            ...ALL_GRAPHER_CHART_TYPES,\n            `${GRAPHER_CHART_TYPES.LineChart} ${GRAPHER_CHART_TYPES.SlopeChart}`,\n            `${GRAPHER_CHART_TYPES.LineChart} ${GRAPHER_CHART_TYPES.DiscreteBar}`,\n            `${GRAPHER_CHART_TYPES.SlopeChart} ${GRAPHER_CHART_TYPES.DiscreteBar}`,\n            `${GRAPHER_CHART_TYPES.LineChart} ${GRAPHER_CHART_TYPES.SlopeChart} ${GRAPHER_CHART_TYPES.DiscreteBar}`,\n            \"None\",\n        ]),\n        toGrapherObject: (parsedValue) => {\n            if (parsedValue === \"None\") return { chartTypes: [] }\n            if (parsedValue)\n                return {\n                    chartTypes: parsedValue.split(\" \") as GrapherChartType[],\n                }\n            return {}\n        },\n    },\n    grapherId: {\n        ...IntegerCellDef,\n        description: \"ID of a legacy Grapher to load\",\n        keyword: \"grapherId\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ id: parsedValue }),\n    },\n    tableSlug: {\n        ...SlugDeclarationCellDef,\n        description:\n            \"Slug of the explorer table (i.e. csv file) to use for this row. All variables used in this row must be present in the table/file.\",\n        keyword: \"tableSlug\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    hasMapTab: {\n        ...BooleanCellDef,\n        keyword: \"hasMapTab\",\n        description: \"Show the map tab?\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ hasMapTab: parsedValue }),\n    },\n    tab: {\n        ...EnumCellDef,\n        keyword: \"tab\",\n        description: \"Which tab to show by default\",\n        terminalOptions: toTerminalOptions(\n            Object.values(GRAPHER_TAB_CONFIG_OPTIONS)\n        ),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ tab: parsedValue }),\n    },\n    xSlug: {\n        ...SlugDeclarationCellDef,\n        description: \"ColumnSlug for the xAxis\",\n        keyword: \"xSlug\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ xSlug: parsedValue }),\n    },\n    xVariableId: {\n        ...IndicatorIdOrEtlPathCellDef,\n        keyword: \"xVariableId\",\n        description: \"Variable ID or ETL path for the xAxis\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    colorSlug: {\n        ...SlugDeclarationCellDef,\n        description: \"ColumnSlug for the color\",\n        keyword: \"colorSlug\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ colorSlug: parsedValue }),\n    },\n    colorVariableId: {\n        ...IndicatorIdOrEtlPathCellDef,\n        keyword: \"colorVariableId\",\n        description: \"Variable ID or ETL path for the color\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    sizeSlug: {\n        ...SlugDeclarationCellDef,\n        description: \"ColumnSlug for the size of points on scatters\",\n        keyword: \"sizeSlug\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ sizeSlug: parsedValue }),\n    },\n    sizeVariableId: {\n        ...IndicatorIdOrEtlPathCellDef,\n        keyword: \"sizeVariableId\",\n        description:\n            \"Variable ID or ETL path for the size of points on scatters\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    tableSlugs: {\n        ...SlugsDeclarationCellDef,\n        description:\n            \"Columns to show in the Table tab of the chart. If not specified all active slugs will be used.\",\n        keyword: \"tableSlugs\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ tableSlugs: parsedValue }),\n    },\n    sourceDesc: {\n        ...StringCellDef,\n        keyword: \"sourceDesc\",\n        description: \"Short comma-separated list of source names\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ sourceDesc: parsedValue }),\n    },\n    hideAnnotationFieldsInTitle: {\n        ...BooleanCellDef,\n        description: \"Hide automatic time/entity\",\n        keyword: \"hideAnnotationFieldsInTitle\",\n        parse: (value: any) => {\n            const parsedValue = value === GridBoolean.true\n            return {\n                entity: parsedValue,\n                time: parsedValue,\n                changeInPrefix: parsedValue,\n            }\n        },\n        toGrapherObject: (parsedValue) => ({\n            hideAnnotationFieldsInTitle: parsedValue,\n        }),\n    },\n    yScaleToggle: {\n        ...BooleanCellDef,\n        keyword: \"yScaleToggle\",\n        description: \"Set to 'true' if the user can change the yAxis\",\n        toGrapherObject: (parsedValue) => ({\n            yAxis: omitEmptyStringValues({ canChangeScaleType: parsedValue }),\n        }),\n    },\n    yAxisMin: {\n        ...NumericOrAutoCellDef,\n        keyword: \"yAxisMin\",\n        description: \"Set the minimum parsedValue for the yAxis\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyObjectValues({\n                yAxis: omitEmptyStringValues({ min: parsedValue }),\n            }),\n    },\n    facetYDomain: {\n        ...EnumCellDef,\n        keyword: \"facetYDomain\",\n        description:\n            \"Whether facets axes default to shared or independent domain\",\n        terminalOptions: toTerminalOptions(Object.values(FacetAxisDomain)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyObjectValues({\n                yAxis: omitEmptyStringValues({ facetDomain: parsedValue }),\n            }),\n    },\n    selectedFacetStrategy: {\n        ...EnumCellDef,\n        keyword: \"selectedFacetStrategy\",\n        description: \"Whether the chart should be faceted or not\",\n        terminalOptions: toTerminalOptions(Object.values(FacetStrategy)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ selectedFacetStrategy: parsedValue }),\n    },\n    entityType: {\n        ...StringCellDef,\n        keyword: \"entityType\",\n        description:\n            \"Default is 'country', but you can specify a different one such as 'state' or 'region'.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ entityType: parsedValue }),\n    },\n    baseColorScheme: {\n        ...EnumCellDef,\n        keyword: \"baseColorScheme\",\n        description:\n            \"The default color scheme if no color overrides are specified\",\n        terminalOptions: toTerminalOptions(Object.keys(ColorSchemeName)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ baseColorScheme: parsedValue }),\n    },\n    note: {\n        ...StringCellDef,\n        keyword: \"note\",\n        description: \"Chart footnote\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ note: parsedValue }),\n    },\n    sortBy: {\n        ...EnumCellDef,\n        keyword: \"sortBy\",\n        description: \"Specify what to sort the entities by\",\n        terminalOptions: toTerminalOptions(Object.values(SortBy)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ sortBy: parsedValue }),\n    },\n    sortOrder: {\n        ...EnumCellDef,\n        keyword: \"sortOrder\",\n        description: \"Whether to sort entities ascending or descending\",\n        terminalOptions: toTerminalOptions(Object.values(SortOrder)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ sortOrder: parsedValue }),\n    },\n    sortColumnSlug: {\n        ...SlugOrIndicatorIdOrEtlPathCellDef,\n        keyword: \"sortColumnSlug\",\n        description:\n            \"Column slug, variable ID, or catalog path to sort by. This setting is only respected when `sortBy` is set to `column`\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ sortColumnSlug: parsedValue.toString() }),\n    },\n    stackMode: {\n        ...EnumCellDef,\n        keyword: \"stackMode\",\n        description:\n            \"Show chart in absolute (default) or relative mode. Only works for some chart types.\",\n        terminalOptions: toTerminalOptions(Object.values(StackMode)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ stackMode: parsedValue }),\n    },\n    hideTotalValueLabel: {\n        ...BooleanCellDef,\n        keyword: \"hideTotalValueLabel\",\n        description:\n            \"Hide the total parsedValue that is normally displayed to the right of the bars in a stacked bar chart.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({\n                hideTotalValueLabel: parsedValue,\n            }),\n    },\n    hideRelativeToggle: {\n        ...BooleanCellDef,\n        keyword: \"hideRelativeToggle\",\n        description: \"Whether to hide the relative mode UI toggle\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ hideRelativeToggle: parsedValue }),\n    },\n    timelineMinTime: {\n        ...IntegerCellDef,\n        keyword: \"timelineMinTime\",\n        description:\n            \"Set the minimum time for the timeline. For days, use days since 21 Jan 2020, e.g. 24 Jan 2020 is '3'.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ timelineMinTime: parsedValue }),\n    },\n    timelineMaxTime: {\n        ...IntegerCellDef,\n        keyword: \"timelineMaxTime\",\n        description:\n            \"Set the maximum time for the timeline. For days, use days since 21 Jan 2020, e.g. 24 Jan 2020 is '3'.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ timelineMaxTime: parsedValue }),\n    },\n    defaultView: {\n        ...BooleanCellDef,\n        keyword: \"defaultView\",\n        description: \"Whether this view is used as the default view.\",\n        toGrapherObject: () => ({}), // explorer-specific, not used in grapher config\n    },\n    relatedQuestionText: {\n        ...StringCellDef,\n        keyword: \"relatedQuestionText\",\n        description:\n            \"The text used for the related question (at the very bottom of the chart)\",\n        toGrapherObject: () => ({}), // handled in code (can be done properly once the relatedQuestion field is refactored)\n    },\n    relatedQuestionUrl: {\n        ...UrlCellDef,\n        keyword: \"relatedQuestionUrl\",\n        description: \"The link of the related question text\",\n        toGrapherObject: () => ({}), // handled in code (can be done properly once the relatedQuestion field is refactored)\n    },\n    originUrl: {\n        ...AbsoluteOrRelativeUrlCellDef,\n        keyword: \"originUrl\",\n        description:\n            \"The page containing this chart where more context can be found\",\n        valuePlaceholder: \"/life-expectancy\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ originUrl: parsedValue }),\n    },\n    mapTargetTime: {\n        ...IntegerCellDef,\n        keyword: \"mapTargetTime\",\n        description:\n            \"Set the 'target time' for the map chart. This is the year that will be shown by default in the map chart.\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyObjectValues({\n                map: omitEmptyStringValues({ time: parsedValue }),\n            }),\n    },\n    missingDataStrategy: {\n        ...EnumCellDef,\n        keyword: \"missingDataStrategy\",\n        description:\n            \"Hide or show entities for which one or more variables are missing\",\n        terminalOptions: toTerminalOptions(Object.values(MissingDataStrategy)),\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ missingDataStrategy: parsedValue }),\n    },\n    minTime: {\n        ...IntegerCellDef,\n        keyword: \"minTime\",\n        description: \"Start point of the initially selected time span\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ minTime: parsedValue }),\n    },\n    maxTime: {\n        ...IntegerCellDef,\n        keyword: \"maxTime\",\n        description: \"End point of the initially selected time span\",\n        toGrapherObject: (parsedValue) =>\n            omitEmptyStringValues({ maxTime: parsedValue }),\n    },\n} as const\n\nexport function omitEmptyStringValues<T extends Record<string, any>>(\n    obj: T\n): Record<string, any> {\n    return R.omitBy(obj, (parsedValue) => parsedValue === \"\")\n}\n\nexport function omitEmptyObjectValues<T extends Record<string, any>>(\n    obj: T\n): Record<string, any> {\n    return R.omitBy(\n        obj,\n        (parsedValue) => R.isPlainObject(parsedValue) && R.isEmpty(parsedValue)\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { observable, computed, action, makeObservable } from \"mobx\"\nimport {\n    queryParamsToStr,\n    differenceObj,\n    trimObject,\n    parseIntOrUndefined,\n} from \"@ourworldindata/utils\"\nimport { ColumnTypeNames, CoreRow } from \"@ourworldindata/types\"\nimport {\n    CoreTable,\n    detectDelimiter,\n    parseDelimited,\n    isCellEmpty,\n} from \"@ourworldindata/core-table\"\nimport { GridBoolean } from \"./gridLang/GridLangConstants.js\"\nimport {\n    ChoiceMap,\n    ChoiceName,\n    ChoiceValue,\n    ExplorerChoice,\n    ExplorerChoiceOption,\n    ExplorerChoiceParams,\n    ExplorerControlType,\n    ExplorerControlTypeRegex,\n} from \"./ExplorerConstants.js\"\nimport { trimAndParseObject } from \"./ExplorerProgram.js\"\nimport { GrapherGrammar } from \"./GrapherGrammar.js\"\n\nfunction parseVariableIds(value: string): number[] {\n    return value\n        .split(\" \")\n        .map((id) => parseInt(id, 10))\n        .filter((id) => !isNaN(id))\n}\n\n// todo: cleanup\nconst makeChoicesMap = (delimited: string) => {\n    const headerLine = delimited.split(\"\\n\")[0]\n    const map = new Map<ChoiceName, ExplorerControlType>()\n    headerLine\n        .split(detectDelimiter(headerLine))\n        .filter((name) => ExplorerControlTypeRegex.test(name))\n        .forEach((choiceNameAndType) => {\n            const words = choiceNameAndType.split(\" \")\n            const [choiceName, choiceType] = [\n                words.slice(0, -1).join(\" \"),\n                words[words.length - 1],\n            ]\n            map.set(choiceName, choiceType as ExplorerControlType)\n        })\n    return map\n}\n\n// This strips the \"Dropdown\" or \"Checkbox\" from \"SomeChoice Dropdown\" or \"SomeChoice Checkbox\"\nconst removeChoiceControlTypeInfo = (label: string) =>\n    label.replace(ExplorerControlTypeRegex, \"\")\n\nconst dropColumnTypes = (delimited: string): string => {\n    const rows = delimited.split(\"\\n\")\n    const delimiter = detectDelimiter(rows[0])\n    rows[0] = rows[0]\n        .split(delimiter)\n        .map(removeChoiceControlTypeInfo)\n        .join(delimiter)\n    return rows.join(\"\\n\")\n}\n\nconst makeCheckBoxOption = (\n    options: ExplorerChoiceOption[],\n    choiceName: string\n) => {\n    const checked = options.some(\n        (option) => option.checked === true && option.value === GridBoolean.true\n    )\n\n    const available =\n        new Set(options.filter((opt) => opt.available).map((opt) => opt.label))\n            .size === 2\n    return [\n        {\n            label: choiceName,\n            checked,\n            value: GridBoolean.true,\n            available,\n        } as ExplorerChoiceOption,\n    ]\n}\n\n// Takes the author's program and the user's current settings and returns an object for\n// allow the user to navigate amongst charts.\nexport class DecisionMatrix {\n    table: CoreTable\n    currentParams: ExplorerChoiceParams = {}\n    constructor(delimited: string, hash = \"\") {\n        makeObservable(this, {\n            currentParams: observable,\n            selectedRow: observable,\n        })\n        this.choiceNameToControlTypeMap = makeChoicesMap(delimited)\n        this.table = new CoreTable(parseDelimited(dropColumnTypes(delimited)), [\n            // todo: remove col def?\n            {\n                slug: GrapherGrammar.grapherId.keyword,\n                type: ColumnTypeNames.Integer,\n            },\n            // yVariableIds, xVariableIds, etc. can either be an indicator ID or a catalog path.\n            // If the first row contains a numeric value, the column type is inferred to be\n            // numeric, and parsing may fail if subsequent rows contain non-numeric values.\n            // In addition, yVariableIds may also contain a space-separated list of multiple\n            // indicator IDs or catalog paths.\n            ...DecisionMatrix.allColumnSlugsWithIndicatorIdsOrCatalogPaths.map(\n                (slug) => ({\n                    slug,\n                    type: ColumnTypeNames.String,\n                })\n            ),\n        ])\n        this.hash = hash\n        this.setValuesFromChoiceParams() // Initialize options\n    }\n\n    allDecisionsAsQueryParams(): ExplorerChoiceParams[] {\n        return this.table.rows.map((row) => {\n            const choiceParams: ExplorerChoiceParams = {}\n            this.choiceNames.forEach((name) => {\n                choiceParams[name] = row[name]\n            })\n            return choiceParams\n        })\n    }\n\n    get numRows() {\n        return this.table.numRows\n    }\n\n    get requiredGrapherIds() {\n        return this.table.get(GrapherGrammar.grapherId.keyword).uniqValues\n    }\n\n    /**\n     * Unique variable IDs requiring partial Grapher config to be loaded.\n     * Extracts the first (primary) variable ID from the y-dimension of each\n     * decision matrix row.\n     */\n    get requiredVariableIds() {\n        return _.uniq(\n            this.table\n                .get(GrapherGrammar.yVariableIds.keyword)\n                .values.map((value) => parseVariableIds(value))\n                .map((ids: number[]) => ids[0])\n                .filter(_.identity)\n        )\n    }\n\n    /** All variable IDs referenced in the explorer config */\n    get allVariableIds() {\n        return _.uniq(\n            DecisionMatrix.allColumnSlugsWithIndicatorIdsOrCatalogPaths.flatMap(\n                (slug) =>\n                    this.table\n                        .get(slug)\n                        .values.flatMap((value) => parseVariableIds(value))\n                        .filter(_.identity)\n            )\n        )\n    }\n\n    private static allColumnSlugsWithIndicatorIdsOrCatalogPaths = [\n        GrapherGrammar.yVariableIds.keyword,\n        GrapherGrammar.xVariableId.keyword,\n        GrapherGrammar.colorVariableId.keyword,\n        GrapherGrammar.sizeVariableId.keyword,\n        GrapherGrammar.sortColumnSlug.keyword,\n    ]\n\n    get allColumnsWithIndicatorIdsOrCatalogPaths() {\n        return this.table\n            .getColumns(\n                DecisionMatrix.allColumnSlugsWithIndicatorIdsOrCatalogPaths\n            )\n            .filter((col) => !col.isMissing)\n    }\n\n    get requiredCatalogPaths(): Set<string> {\n        const allIndicators = this.allColumnsWithIndicatorIdsOrCatalogPaths\n            .flatMap((col) => col.uniqValues)\n            .flatMap((value) => value.split(\" \"))\n            .filter((value) => value !== \"\")\n\n        // Assume it's a catalog path if it doesn't look like a number\n        const catalogPaths = allIndicators.filter(\n            (indicator) => parseIntOrUndefined(indicator) === undefined\n        )\n\n        return new Set(catalogPaths)\n    }\n\n    // This is, basically, the inverse of `dropColumnTypes`.\n    // Turns a column named \"Metric\" back into \"Metric Dropdown\", for example.\n    get tableWithOriginalColumnNames() {\n        return this.table.renameColumns(\n            Object.fromEntries(\n                [...this.choiceNameToControlTypeMap.entries()].map(\n                    ([choiceName, controlType]) => {\n                        return [choiceName, `${choiceName} ${controlType}`]\n                    }\n                )\n            )\n        )\n    }\n\n    choiceNameToControlTypeMap: Map<ChoiceName, ExplorerControlType>\n    hash: string\n\n    toConstrainedOptions(): ExplorerChoiceParams {\n        const settings = { ...this.currentParams }\n        this.choiceNames.forEach((choiceName) => {\n            // check if the current choice is valid with the current settings\n            if (\n                this.isOptionAvailable(\n                    choiceName,\n                    settings[choiceName],\n                    settings\n                )\n            ) {\n                // do nothing - we can use settings[choiceName] as-is\n            }\n            // check if the default choice is valid with the current settings\n            else if (\n                this.defaultSettings[choiceName] !== undefined &&\n                this.isOptionAvailable(\n                    choiceName,\n                    this.defaultSettings[choiceName],\n                    settings\n                )\n            ) {\n                settings[choiceName] = this.defaultSettings[choiceName]\n            }\n            // if both are not valid, find the first valid option\n            else {\n                settings[choiceName] = this.firstAvailableOptionForChoice(\n                    choiceName,\n                    settings\n                )!\n            }\n        })\n        return settings\n    }\n\n    @computed\n    private get diffBetweenUserSettingsAndConstrained(): ExplorerChoiceParams {\n        return differenceObj(\n            this.toConstrainedOptions(),\n            this.currentParams\n        ) as ExplorerChoiceParams\n    }\n\n    @action.bound setValueCommand(choiceName: ChoiceName, value: ChoiceValue) {\n        this._setValue(choiceName, value)\n        const invalidState = this.diffBetweenUserSettingsAndConstrained\n        Object.keys(invalidState).forEach((key) => {\n            // If a user navigates to a state where an option previously selected is not available,\n            // then persist the new option, as long as it isn't the only one available.\n            //\n            // For example, if the user navigates from metric:Cases interval:Weekly, to\n            // metric:Vaccinations, if interval:Weekly is not available for Vaccinations but other\n            // (more than one) intervals are available, we will persist whichever we happen to end\n            // up on.\n            //\n            // But if the user navigates from metric:Cases perCapita:true, to\n            // metric:Share of positive tests, then the only available perCapita option is false,\n            // but it isn't persisted, because the user has no other options. It's non-sensical to\n            // ask for \"Share of positive tests per capita\", so qualitatively it's a different\n            // metric, and the perCapita can just be ignored.\n            //\n            // We assume in every case where the user has only a single option available (therefore\n            // has no choice) the option should not be persisted.\n            if (this.availableChoiceOptions[key].length > 1) {\n                this._setValue(key, invalidState[key])\n            }\n        })\n    }\n\n    @action.bound private _setValue(\n        choiceName: ChoiceName,\n        value: ChoiceValue\n    ) {\n        if (value === \"\") delete this.currentParams[choiceName]\n        else this.currentParams[choiceName] = value\n        this.selectedRow = trimAndParseObject(\n            this.table.rowsAt([this.selectedRowIndex])[0],\n            GrapherGrammar\n        )\n    }\n\n    @action.bound setValuesFromChoiceParams(\n        choiceParams: ExplorerChoiceParams = {}\n    ) {\n        this.choiceNames.forEach((choiceName) => {\n            const choiceValue =\n                choiceParams[choiceName] ?? this.defaultSettings[choiceName]\n\n            if (choiceValue === undefined)\n                this._setValue(\n                    choiceName,\n                    this.firstAvailableOptionForChoice(choiceName)!\n                )\n            else this._setValue(choiceName, choiceValue)\n        })\n        return this\n    }\n\n    @computed private get choiceNames(): ChoiceName[] {\n        return Array.from(this.choiceNameToControlTypeMap.keys())\n    }\n\n    @computed private get allChoiceOptions(): ChoiceMap {\n        const choiceMap: ChoiceMap = {}\n        this.choiceNames.forEach((choiceName) => {\n            choiceMap[choiceName] = this.table\n                .get(choiceName)\n                .uniqValues.filter((cell) => !isCellEmpty(cell)) as string[]\n        })\n        return choiceMap\n    }\n\n    @computed get availableChoiceOptions(): ChoiceMap {\n        const result: ChoiceMap = {}\n        this.choiceNames.forEach((choiceName) => {\n            result[choiceName] = this.allChoiceOptions[choiceName].filter(\n                (option) => this.isOptionAvailable(choiceName, option)\n            )\n        })\n        return result\n    }\n\n    getChoiceParamsForRow(row: CoreRow): ExplorerChoiceParams {\n        const result: ExplorerChoiceParams = {}\n        this.choiceNames.forEach((choiceName) => {\n            result[choiceName] = row[choiceName]\n        })\n        return result\n    }\n\n    private firstAvailableOptionForChoice(\n        choiceName: ChoiceName,\n        currentState = this.currentParams\n    ): ChoiceValue | undefined {\n        return this.allChoiceOptions[choiceName].find((option) =>\n            this.isOptionAvailable(choiceName, option, currentState)\n        )\n    }\n\n    /**\n     * Note: there is a rare bug in here + rowsWith when an author has a complex decision matrix. If the user vists a url\n     * with invalid options like Metric=\"Tests\", Interval=\"Weekly\", Aligned=\"false\"\n     * we will return first match, which is B1, even though B2 is a better match.\n     *\n     * graphers\n     * title\tMetric Radio\tInterval Radio\tAligned Checkbox\n     * A1\tCases\tCumulative\ttrue\n     * A2\tCases\tCumulative\tfalse\n     * A3\tCases\tWeekly\tfalse\n     *\n     * B1\tTests\tCumulative\ttrue\n     * B2\tTests\tCumulative\tfalse\n     */\n    isOptionAvailable(\n        choiceName: ChoiceName,\n        option: ChoiceValue,\n        currentState = this.currentParams\n    ) {\n        const query: ExplorerChoiceParams = {}\n        this.choiceNames\n            .slice(0, this.choiceNames.indexOf(choiceName))\n            .forEach((name) => {\n                query[name] = currentState[name]\n            })\n        query[choiceName] = option\n        return this.rowsWith(query, choiceName).length > 0\n    }\n\n    private rowsWith(query: ExplorerChoiceParams, choiceName?: ChoiceName) {\n        // We allow other options to be blank.\n        const modifiedQuery: any = {}\n        Object.keys(trimObject(query)).forEach((queryColumn) => {\n            if (queryColumn !== choiceName)\n                // Blanks are fine if we are not talking about the column of interest\n                modifiedQuery[queryColumn] = [query[queryColumn], \"\"]\n            else modifiedQuery[queryColumn] = query[queryColumn]\n        })\n        return this.table.findRows(modifiedQuery)\n    }\n\n    // The first row with defaultView column value of \"true\" determines the default view to use\n    get defaultSettings() {\n        const hits = this.rowsWith({\n            [GrapherGrammar.defaultView.keyword]: \"true\",\n        })\n        return hits[0] ?? {}\n    }\n\n    private get firstMatch() {\n        const query = this.toConstrainedOptions()\n        const hits = this.rowsWith(query)\n        return hits[0]\n    }\n\n    get selectedRowIndex(): number {\n        return this.firstMatch === undefined\n            ? 0\n            : this.table.indexOf(this.firstMatch)\n    }\n\n    selectedRow: any = {}\n\n    private toControlOption(\n        choiceName: ChoiceName,\n        optionName: string,\n        currentValue: ChoiceValue,\n        constrainedOptions: ExplorerChoiceParams\n    ): ExplorerChoiceOption {\n        const available = this.isOptionAvailable(\n            choiceName,\n            optionName,\n            constrainedOptions\n        )\n        return {\n            label: optionName,\n            value: optionName,\n            available,\n            checked: currentValue === optionName,\n        }\n    }\n\n    @computed get choicesWithAvailability(): ExplorerChoice[] {\n        const selectedRow = this.selectedRow\n        const constrainedOptions = this.toConstrainedOptions()\n        return this.choiceNames.map((title) => {\n            const value =\n                selectedRow[title] !== undefined\n                    ? selectedRow[title].toString()\n                    : selectedRow[title]\n            const options = this.allChoiceOptions[title].map((optionName) =>\n                this.toControlOption(\n                    title,\n                    optionName,\n                    value,\n                    constrainedOptions\n                )\n            )\n            const type = this.choiceNameToControlTypeMap.get(title)!\n\n            return {\n                title,\n                displayTitle: title,\n                type,\n                value,\n                options:\n                    type === ExplorerControlType.Checkbox\n                        ? makeCheckBoxOption(options, title)\n                        : options,\n            }\n        })\n    }\n\n    toString() {\n        return queryParamsToStr(this.currentParams)\n    }\n}\n","import {\n    CellDef,\n    BooleanCellDef,\n    SlugDeclarationCellDef,\n    StringCellDef,\n    UrlCellDef,\n    SubTableHeaderCellDef,\n    IntegerCellDef,\n    SlugsDeclarationCellDef,\n    Grammar,\n    StringDeclarationDef,\n} from \"./gridLang/GridLangConstants.js\"\nimport { GrapherGrammar } from \"./GrapherGrammar.js\"\nimport { ColumnGrammar } from \"./ColumnGrammar.js\"\n\nconst ExplorerFormControlCellDeff: CellDef = {\n    ...StringDeclarationDef,\n    description: \"A form input for the user.\",\n    regex: /^.+ (Dropdown|Radio|Checkbox)$/,\n    requirementsDescription: `Must end with 'Dropdown', 'Radio', or 'Checkbox'`,\n}\n\nexport const ExplorerGrammar: Grammar = {\n    table: {\n        ...UrlCellDef,\n        keyword: \"table\",\n        valuePlaceholder: \"\",\n        regex: new RegExp(`(${UrlCellDef.regex?.source ?? \"\"}|^[\\\\w -()]+$)`), // URL or OWID dataset name\n        description: \"A link to a CSV or TSV or the name of an OWID dataset.\",\n        positionalCellDefs: [\n            {\n                ...SlugDeclarationCellDef,\n                description:\n                    \"If you have multiple tables, give each one a unique slug.\",\n            },\n        ],\n        headerCellDef: {\n            ...SlugDeclarationCellDef,\n            cssClass: \"SubTableHeaderCellDef\",\n            grammar: {},\n            catchAllCellDef: {\n                ...SlugDeclarationCellDef,\n                description: \"A column slug.\",\n            },\n        },\n    },\n    explorerTitle: {\n        ...StringCellDef,\n        keyword: \"explorerTitle\",\n        valuePlaceholder: \"Life Expectancy\",\n        description:\n            \"The title will appear in the top left corner of the Explorer.\",\n    },\n    explorerSubtitle: {\n        ...StringCellDef,\n        keyword: \"explorerSubtitle\",\n        valuePlaceholder: \"All our data from various sources.\",\n        description: \"The subtitle will appear under the explorerTitle.\",\n    },\n    columns: {\n        ...SlugDeclarationCellDef,\n        keyword: \"columns\",\n        description:\n            \"Include all your column definitions for one or multiple tables here. If you do not provide a column definition for every column in your table one will be generated for you by the machine (sometimes incorrectly).\",\n        headerCellDef: {\n            ...SubTableHeaderCellDef,\n            grammar: ColumnGrammar,\n        },\n        isHorizontalList: true,\n    },\n    graphers: {\n        ...SlugDeclarationCellDef,\n        keyword: \"graphers\",\n        description: \"The decision matrix for your Explorer goes here.\",\n        headerCellDef: {\n            ...SubTableHeaderCellDef,\n            grammar: GrapherGrammar,\n            catchAllCellDef: ExplorerFormControlCellDeff,\n        },\n    },\n    googleSheet: {\n        ...UrlCellDef,\n        keyword: \"googleSheet\",\n        valuePlaceholder: \"https://docs.google.com/spreadsheets/d/1qeX...\",\n        description:\n            \"Create a Google Sheet, share it with the OWID Group, then put the link here.\",\n    },\n    downloadDataLink: {\n        ...UrlCellDef,\n        keyword: \"downloadDataLink\",\n        valuePlaceholder: \"https://example.com/data.csv\",\n        description:\n            \"An optional URL for the download button in the Download tab. If blank, the Explorer will instead generate a CSV from the data it has available.\",\n    },\n    isPublished: {\n        ...BooleanCellDef,\n        keyword: \"isPublished\",\n        description: \"Set to true to make this Explorer public.\",\n    },\n    wpBlockId: {\n        ...IntegerCellDef,\n        keyword: \"wpBlockId\",\n        description:\n            \"If present will show the matching Wordpress block ID beneath the Explorer.\",\n    },\n    hideControls: {\n        ...BooleanCellDef,\n        keyword: \"hideControls\",\n        description: \"Whether to hide the controls. Default is false.\",\n    },\n    thumbnail: {\n        ...UrlCellDef,\n        keyword: \"thumbnail\",\n        description: \"URL to the social sharing thumbnail.\",\n    },\n    selection: {\n        ...StringCellDef,\n        keyword: \"selection\",\n        valuePlaceholder: \"Canada\",\n        description: \"The default selected entities.\",\n        isHorizontalList: true,\n    },\n    entityType: {\n        ...StringCellDef,\n        keyword: \"entityType\",\n        valuePlaceholder: \"region\",\n        description:\n            \"Default is 'country or region', but you can specify a different one such as 'state' or 'region'.\",\n    },\n    pickerColumnSlugs: {\n        ...SlugsDeclarationCellDef,\n        keyword: \"pickerColumnSlugs\",\n        valuePlaceholder: \"gdp population gdp_per_capita\",\n        description:\n            \"You can manually set the column slug(s) to show in the entity picker or else they will be automatically chosen.\",\n    },\n    ...GrapherGrammar,\n} as const\n","import * as _ from \"lodash-es\"\n/* eslint-disable no-sparse-arrays */\nimport {\n    CoreMatrix,\n    ColumnTypeNames,\n    CoreTableInputOption,\n    OwidColumnDef,\n    TableSlug,\n    FacetAxisDomain,\n    GrapherInterface,\n    AxisMinMaxValueStr,\n    GrapherChartType,\n    DimensionProperty,\n    OwidChartDimensionInterface,\n    OwidChartDimensionInterfaceWithMandatorySlug,\n} from \"@ourworldindata/types\"\nimport {\n    CoreTable,\n    OwidTable,\n    isNotErrorValue,\n    isNotErrorValueOrEmptyCell,\n} from \"@ourworldindata/core-table\"\nimport {\n    GitCommit,\n    PromiseCache,\n    SerializedGridProgram,\n    trimObject,\n    fetchWithRetry,\n    parseIntOrUndefined,\n    excludeUndefined,\n} from \"@ourworldindata/utils\"\nimport {\n    CellDef,\n    Grammar,\n    GridBoolean,\n    GRID_CELL_DELIMITER,\n    GRID_NODE_DELIMITER,\n    RootKeywordCellDef,\n} from \"./gridLang/GridLangConstants.js\"\nimport { GridProgram } from \"./gridLang/GridProgram.js\"\nimport { ColumnGrammar } from \"./ColumnGrammar.js\"\nimport {\n    DefaultNewExplorerSlug,\n    ExplorerChartCreationMode,\n    ExplorerChoiceParams,\n    EXPLORERS_ROUTE_FOLDER,\n} from \"./ExplorerConstants.js\"\nimport { DecisionMatrix } from \"./ExplorerDecisionMatrix.js\"\nimport { ExplorerGrammar } from \"./ExplorerGrammar.js\"\nimport { GrapherGrammar } from \"./GrapherGrammar.js\"\nimport { latestGrapherConfigSchema } from \"@ourworldindata/grapher\"\n\nexport const EXPLORER_FILE_SUFFIX = \".explorer.tsv\"\n\nexport interface TableDef {\n    url?: string\n    columnDefinitions?: OwidColumnDef[]\n    inlineData?: string[][]\n    slug?: TableSlug\n}\n\nexport interface ExplorerGrapherInterface extends GrapherInterface {\n    grapherId?: number\n    tableSlug?: string\n    yVariableIds?: string\n    xVariableId?: string\n    colorVariableId?: string\n    sizeVariableId?: string\n    yScaleToggle?: boolean\n    yAxisMin?: number | AxisMinMaxValueStr.auto\n    facetYDomain?: FacetAxisDomain\n    relatedQuestionText?: string\n    relatedQuestionUrl?: string\n    mapTargetTime?: number\n    type?: GrapherChartType | \"LineChart SlopeChart\" | \"None\"\n}\n\nconst ExplorerRootDef: CellDef = {\n    ...RootKeywordCellDef,\n    grammar: ExplorerGrammar,\n}\n\ntype ChartDimensionInterfaceBySlug = Omit<\n    OwidChartDimensionInterfaceWithMandatorySlug,\n    \"variableId\"\n> & { type: \"slug\" }\n\ntype ChartDimensionInterfaceByVariableId = Omit<\n    OwidChartDimensionInterface,\n    \"slug\"\n> & { type: \"variableId\" }\n\ntype ExplorerChartDimensionInterface =\n    | ChartDimensionInterfaceBySlug\n    | ChartDimensionInterfaceByVariableId\n\nexport class ExplorerProgram extends GridProgram {\n    constructor(slug: string, tsv: string, lastCommit?: GitCommit) {\n        super(slug, tsv, lastCommit, ExplorerRootDef)\n    }\n\n    private _decisionMatrix?: DecisionMatrix\n    get decisionMatrix() {\n        if (!this._decisionMatrix) {\n            this._decisionMatrix = new DecisionMatrix(\n                this.decisionMatrixCode ?? \"\",\n                this.lastCommit?.hash\n            )\n        }\n        return this._decisionMatrix\n    }\n\n    static fromJson(json: SerializedGridProgram) {\n        return new ExplorerProgram(json.slug, json.program, json.lastCommit)\n    }\n\n    get clone() {\n        return ExplorerProgram.fromJson(this.toJson())\n    }\n\n    get isNewFile() {\n        return this.slug === DefaultNewExplorerSlug\n    }\n\n    get filename() {\n        return this.slug + EXPLORER_FILE_SUFFIX\n    }\n\n    initDecisionMatrix(choiceParams: ExplorerChoiceParams) {\n        this.decisionMatrix.setValuesFromChoiceParams(choiceParams)\n        return this\n    }\n\n    get fullPath() {\n        return makeFullPath(this.slug)\n    }\n\n    get currentlySelectedGrapherRow() {\n        const row = this.getKeywordIndex(ExplorerGrammar.graphers.keyword)\n        return row === -1\n            ? undefined\n            : row + this.decisionMatrix.selectedRowIndex + 2\n    }\n\n    static fromMatrix(slug: string, matrix: CoreMatrix) {\n        const str = matrix\n            .map((row) =>\n                row.map((cell) => cell && `${cell}`.replace(/\\n/g, \"\\\\n\"))\n            )\n            .map((row) => row.join(GRID_CELL_DELIMITER))\n            .join(GRID_NODE_DELIMITER)\n        return new ExplorerProgram(slug, str)\n    }\n\n    get explorerTitle() {\n        return this.getLineValue(ExplorerGrammar.explorerTitle.keyword)\n    }\n\n    get title() {\n        return this.getLineValue(ExplorerGrammar.title.keyword)\n    }\n\n    get googleSheet() {\n        return this.getLineValue(ExplorerGrammar.googleSheet.keyword)\n    }\n\n    get thumbnail() {\n        return this.getLineValue(ExplorerGrammar.thumbnail.keyword)\n    }\n\n    get explorerSubtitle() {\n        return this.getLineValue(ExplorerGrammar.explorerSubtitle.keyword)\n    }\n\n    get entityType() {\n        return this.getLineValue(ExplorerGrammar.entityType.keyword)\n    }\n\n    get selection() {\n        return this.getLine(ExplorerGrammar.selection.keyword)?.slice(1)\n    }\n\n    get pickerColumnSlugs() {\n        const slugs = this.getLineValue(\n            ExplorerGrammar.pickerColumnSlugs.keyword\n        )\n        return slugs ? slugs.split(\" \") : undefined\n    }\n\n    get hideControls() {\n        return this.getLineValue(ExplorerGrammar.hideControls.keyword)\n    }\n\n    get downloadDataLink() {\n        return this.getLineValue(ExplorerGrammar.downloadDataLink.keyword)\n    }\n\n    get isPublished() {\n        return (\n            this.getLineValue(ExplorerGrammar.isPublished.keyword) ===\n            GridBoolean.true\n        )\n    }\n\n    setPublished(value: boolean) {\n        return this.clone.setLineValue(\n            ExplorerGrammar.isPublished.keyword,\n            value ? GridBoolean.true : GridBoolean.false\n        )\n    }\n\n    get wpBlockId() {\n        const blockIdString = this.getLineValue(\n            ExplorerGrammar.wpBlockId.keyword\n        )\n        return blockIdString ? parseInt(blockIdString, 10) : undefined\n    }\n\n    get decisionMatrixCode() {\n        const keywordIndex = this.getKeywordIndex(\n            ExplorerGrammar.graphers.keyword\n        )\n        if (keywordIndex === -1) return undefined\n        return this.getBlock(keywordIndex)\n            ?.map((row) => row.join(this.cellDelimiter))\n            .join(\"\\n\")\n    }\n\n    get grapherCount() {\n        return this.decisionMatrix.numRows || 1\n    }\n\n    get tableCount() {\n        return this.getRowNumbersStartingWith(ExplorerGrammar.table.keyword)\n            .length\n    }\n\n    get tableSlugs(): (TableSlug | undefined)[] {\n        return this.lines\n            .filter((line) => line[0] === ExplorerGrammar.table.keyword)\n            .map((line) => line[2])\n    }\n\n    // for backward compatibility, we currently support explorers\n    // that use Grapher IDs as well as CSV data files to create charts,\n    // but we plan to drop support for mixed-content explorers in the future\n    getChartCreationModeForExplorerGrapherConfig(\n        explorerGrapherConfig: ExplorerGrapherInterface\n    ): ExplorerChartCreationMode {\n        const { decisionMatrix } = this\n        const { grapherId } = explorerGrapherConfig\n        const yVariableIdsColumn = decisionMatrix.table.get(\n            GrapherGrammar.yVariableIds.keyword\n        )\n        // referring to a variable in a single row triggers\n        // ExplorerChartCreationMode.FromVariableIds for all rows\n        if (yVariableIdsColumn.numValues)\n            return ExplorerChartCreationMode.FromVariableIds\n        if (grapherId && isNotErrorValue(grapherId))\n            return ExplorerChartCreationMode.FromGrapherId\n        return ExplorerChartCreationMode.FromExplorerTableColumnSlugs\n    }\n\n    get chartCreationMode(): ExplorerChartCreationMode {\n        return this.getChartCreationModeForExplorerGrapherConfig(\n            this.explorerGrapherConfig\n        )\n    }\n\n    get whyIsExplorerProgramInvalid(): string {\n        const {\n            chartCreationMode,\n            decisionMatrix: { table },\n        } = this\n        const { FromVariableIds, FromGrapherId, FromExplorerTableColumnSlugs } =\n            ExplorerChartCreationMode\n\n        const grapherIdColumn = table.get(GrapherGrammar.grapherId.keyword)\n        const tableSlugColumn = table.get(GrapherGrammar.tableSlug.keyword)\n        const hasGrapherId = grapherIdColumn.numValues > 0\n        const hasCsvData = tableSlugColumn.numValues > 0 || this.tableCount > 0\n\n        if (chartCreationMode === FromVariableIds && hasGrapherId)\n            return \"Using variables IDs and Grapher IDs to create charts is not supported.\"\n\n        if (chartCreationMode === FromVariableIds && hasCsvData)\n            return \"Using variable IDs and CSV data files to create charts is not supported.\"\n\n        if (\n            (chartCreationMode === FromGrapherId && hasCsvData) ||\n            (chartCreationMode === FromExplorerTableColumnSlugs && hasGrapherId)\n        )\n            return \"Using Grapher IDs and CSV data files to create charts is deprecated.\"\n\n        return \"\"\n    }\n\n    get columnDefsByTableSlug(): Map<TableSlug | undefined, OwidColumnDef[]> {\n        const columnDefs = new Map<TableSlug | undefined, OwidColumnDef[]>()\n        const colDefsRows = this.getAllRowsMatchingWords(\n            ExplorerGrammar.columns.keyword\n        )\n\n        const matrix = this.lines\n        for (const row of colDefsRows) {\n            const tableSlugs = matrix[row].slice(1)\n            const columnDefinitions = parseColumnDefs(this.getBlock(row) ?? [])\n            if (tableSlugs.length === 0)\n                columnDefs.set(undefined, columnDefinitions)\n            else\n                tableSlugs.forEach((tableSlug) => {\n                    columnDefs.set(tableSlug, columnDefinitions)\n                })\n        }\n        return columnDefs\n    }\n\n    get columnDefsWithoutTableSlug(): OwidColumnDef[] {\n        return this.columnDefsByTableSlug.get(undefined) ?? []\n    }\n\n    private get columnDefsWithoutTableSlugByIdOrSlug(): Record<\n        string,\n        OwidColumnDef\n    > {\n        return _.keyBy(\n            this.columnDefsWithoutTableSlug,\n            (def: OwidColumnDef) => def.owidVariableId?.toString() ?? def.slug\n        )\n    }\n\n    getColumnDefWithoutTableSlugByIdOrSlug(\n        idOrSlug: string\n    ): OwidColumnDef | undefined {\n        return this.columnDefsWithoutTableSlugByIdOrSlug[idOrSlug]\n    }\n\n    async autofillMissingColumnDefinitionsForTableCommand(tableSlug?: string) {\n        const clone = this.clone\n        const remoteTable = await clone.constructTable(tableSlug)\n        const existingTableDef = this.getTableDef(tableSlug)\n        const table =\n            remoteTable ||\n            (existingTableDef\n                ? new CoreTable(\n                      existingTableDef.inlineData,\n                      existingTableDef.columnDefinitions\n                  )\n                : undefined)\n        const newCols = table.autodetectedColumnDefs\n        const missing = newCols\n            .appendColumns([\n                {\n                    slug: ColumnGrammar.notes.keyword,\n                    values: newCols.indices.map(() => `Unreviewed`),\n                },\n            ])\n            .select([\n                ColumnGrammar.slug.keyword,\n                ,\n                ColumnGrammar.name.keyword,\n                ,\n                ColumnGrammar.type.keyword,\n                ColumnGrammar.notes.keyword,\n            ] as string[])\n\n        const colDefsRow = this.getRowMatchingWords(\n            ExplorerGrammar.columns.keyword,\n            tableSlug\n        )\n\n        if (colDefsRow !== -1)\n            clone.updateBlock(\n                colDefsRow,\n                new CoreTable(clone.getBlock(colDefsRow))\n                    .concat([missing])\n                    .toMatrix()\n            )\n        else\n            clone.appendBlock(\n                `${ExplorerGrammar.columns.keyword}${\n                    tableSlug ? this.cellDelimiter + tableSlug : \"\"\n                }`,\n                missing.toMatrix()\n            )\n        return clone\n    }\n\n    /**\n     * Grapher config for the currently selected row including global settings.\n     * Includes all columns that are part of the GrapherGrammar.\n     */\n    get explorerGrapherConfig(): ExplorerGrapherInterface {\n        const selectedGrapherRow = this.decisionMatrix.selectedRow\n\n        const rootObject = trimAndParseObject(this.tuplesObject, GrapherGrammar)\n        let config = { ...rootObject }\n\n        if (selectedGrapherRow && Object.keys(selectedGrapherRow).length) {\n            config = {\n                ...config,\n                ...trimAndParseObject(selectedGrapherRow, GrapherGrammar),\n            }\n        }\n\n        // Remove all keys that are not part of the GrapherGrammar\n        Object.keys(config).forEach((key) => {\n            if (!GrapherGrammar[key]) delete config[key]\n        })\n\n        return config\n    }\n\n    /**\n     * Grapher config for the currently selected row, with explorer-specific\n     * fields translated to valid GrapherInterface fields.\n     *\n     * For example, `yAxisMin` is translated to `{yAxis: {min: ... }}`\n     */\n    get grapherConfig(): GrapherInterface {\n        const partialConfigs: GrapherInterface[] = []\n        const fields = Object.entries(this.explorerGrapherConfig)\n\n        for (const [field, value] of fields) {\n            const cellDef = GrapherGrammar[field]\n            partialConfigs.push(cellDef.toGrapherObject(value))\n        }\n\n        const mergedConfig = _.merge({}, ...partialConfigs)\n\n        // assume config is valid against the latest schema\n        mergedConfig.$schema = latestGrapherConfigSchema\n\n        // TODO: can be removed once relatedQuestions is refactored\n        const { relatedQuestionUrl, relatedQuestionText } =\n            this.explorerGrapherConfig\n        if (relatedQuestionUrl && relatedQuestionText) {\n            mergedConfig.relatedQuestions = [\n                { url: relatedQuestionUrl, text: relatedQuestionText },\n            ]\n        }\n\n        return mergedConfig\n    }\n\n    /**\n     * All dimensions (x, y, color, size) for the currently selected Grapher row.\n     *\n     * Dimensions are either specified by a slug or variable id.\n     */\n    get dimensionsOfSelectedRow(): ExplorerChartDimensionInterface[] {\n        const { y, x, color, size } = DimensionProperty\n        const {\n            ySlugs = \"\",\n            xSlug,\n            colorSlug,\n            sizeSlug,\n            yVariableIds = \"\",\n            xVariableId,\n            colorVariableId,\n            sizeVariableId,\n        } = this.explorerGrapherConfig\n\n        /** Construct dimension object with a slug */\n        const makeSlugDimension = (\n            slug: string | undefined,\n            property: DimensionProperty\n        ): ChartDimensionInterfaceBySlug | undefined => {\n            if (!slug) return undefined\n            const dimension: ChartDimensionInterfaceBySlug = {\n                type: \"slug\",\n                slug,\n                property,\n            }\n            const def = this.getColumnDefWithoutTableSlugByIdOrSlug(slug)\n            if (def?.display) dimension.display = def.display\n            return dimension\n        }\n\n        /** Construct dimension object with a variable id */\n        const makeVariableIdDimension = (\n            variableId: string | undefined,\n            property: DimensionProperty\n        ): ChartDimensionInterfaceByVariableId | undefined => {\n            if (!variableId) return undefined\n            const parsedId = parseIntOrUndefined(variableId)\n            if (!parsedId) return undefined\n            const dimension: ChartDimensionInterfaceByVariableId = {\n                type: \"variableId\",\n                variableId: parsedId,\n                property,\n            }\n            const def = this.getColumnDefWithoutTableSlugByIdOrSlug(\n                parsedId.toString()\n            )\n            if (def?.display) dimension.display = def.display\n            return dimension\n        }\n\n        // Make slug based dimensions\n        const ySlugList = ySlugs.split(\" \")\n        const slugDimYList = excludeUndefined(\n            ySlugList.map((slug) => makeSlugDimension(slug, y))\n        )\n        const slugDimX = makeSlugDimension(xSlug, x)\n        const slugDimColor = makeSlugDimension(colorSlug, color)\n        const slugDimSize = makeSlugDimension(sizeSlug, size)\n\n        // Make variable id based dimensions\n        const yVariableIdList = yVariableIds.split(\" \")\n        const varDimYList = excludeUndefined(\n            yVariableIdList.map((variableId) =>\n                makeVariableIdDimension(variableId, y)\n            )\n        )\n        const varDimX = makeVariableIdDimension(xVariableId, x)\n        const varDimColor = makeVariableIdDimension(colorVariableId, color)\n        const varDimSize = makeVariableIdDimension(sizeVariableId, size)\n\n        const dimensions: ExplorerChartDimensionInterface[] = []\n\n        // Add y dimensions\n        slugDimYList.forEach((dim) => dimensions.push(dim))\n        varDimYList.forEach((dim) => dimensions.push(dim))\n\n        // Add x dimensions (only one should be given)\n        if (slugDimX) dimensions.push(slugDimX)\n        if (varDimX) dimensions.push(varDimX)\n\n        // Add color dimensions (only one should be given)\n        if (slugDimColor) dimensions.push(slugDimColor)\n        if (varDimColor) dimensions.push(varDimColor)\n\n        // Add size dimensions (only one should be given)\n        if (slugDimSize) dimensions.push(slugDimSize)\n        if (varDimSize) dimensions.push(varDimSize)\n\n        return dimensions\n    }\n\n    /**\n     * A static method so that all explorers on the page share requests,\n     * and no duplicate requests are sent.\n     */\n    private static tableDataLoader = new PromiseCache(\n        async (url: string): Promise<CoreTableInputOption> => {\n            const response = await fetchWithRetry(url)\n            if (!response.ok) throw new Error(response.statusText)\n            const tableInput: CoreTableInputOption = url.endsWith(\".json\")\n                ? await response.json()\n                : await response.text()\n            return tableInput\n        }\n    )\n\n    async constructTable(tableSlug?: TableSlug): Promise<OwidTable> {\n        const tableDef = this.getTableDef(tableSlug)\n        if (!tableDef) {\n            throw new Error(`Table definitions not found for '${tableSlug}'`)\n        }\n\n        if (tableDef.inlineData) {\n            return new OwidTable(\n                tableDef.inlineData,\n                tableDef.columnDefinitions,\n                {\n                    tableDescription: `Loaded '${tableSlug}' from inline data`,\n                    tableSlug: tableSlug,\n                }\n            ).dropEmptyRows()\n        } else if (tableDef.url) {\n            const input = await ExplorerProgram.tableDataLoader.get(\n                tableDef.url\n            )\n            return new OwidTable(input, tableDef.columnDefinitions, {\n                tableDescription: `Loaded from ${tableDef.url}`,\n            })\n        }\n\n        throw new Error(`No data for table '${tableSlug}'`)\n    }\n\n    getTableDef(tableSlug?: TableSlug): TableDef | undefined {\n        const tableDefRow = this.getRowMatchingWords(\n            ExplorerGrammar.table.keyword,\n            undefined,\n            tableSlug\n        )\n        if (tableDefRow === -1) return undefined\n\n        const inlineData = this.getBlock(tableDefRow)\n        let url = inlineData ? undefined : this.lines[tableDefRow][1]\n\n        if (url && !url.includes(\"://\")) {\n            const owidDatasetSlug = encodeURIComponent(url)\n            url = `https://raw.githubusercontent.com/owid/owid-datasets/master/datasets/${owidDatasetSlug}/${owidDatasetSlug}.csv`\n        }\n\n        const columnDefinitions: OwidColumnDef[] | undefined =\n            this.columnDefsByTableSlug.get(tableSlug)\n\n        return {\n            url,\n            columnDefinitions,\n            inlineData,\n            slug: tableSlug,\n        }\n    }\n}\n\nexport const makeFullPath = (slug: string) =>\n    `${EXPLORERS_ROUTE_FOLDER}/${slug}${EXPLORER_FILE_SUFFIX}`\n\nexport const trimAndParseObject = (config: any, grammar: Grammar) => {\n    // Trim empty properties. Prevents things like clearing \"type\" which crashes Grapher. The call to grapher.reset will automatically clear things like title, subtitle, if not set.\n    const trimmedRow = trimObject(config, true) as any\n\n    // parse types\n    Object.keys(trimmedRow).forEach((key) => {\n        const def = grammar[key]\n        if (def && def.parse) trimmedRow[key] = def.parse(trimmedRow[key])\n        // If there no definition but it is a boolean, parse it (todo: always have a def)\n        else if (!def) {\n            const value = trimmedRow[key]\n            if (value === GridBoolean.true) trimmedRow[key] = true\n            else if (value === GridBoolean.false) trimmedRow[key] = false\n        }\n    })\n    return trimmedRow\n}\n\nconst parseColumnDefs = (block: string[][]): OwidColumnDef[] => {\n    /**\n     * A column def line can have:\n     * - a column named `variableId`, which contains a variable id\n     * - a column named `slug`, which is the referenced column in its data file\n     *\n     * We want to filter out any rows that contain neither of those, and we also\n     * want to rename `variableId` to `owidVariableId`.\n     */\n    const columnsTable = new CoreTable(block)\n        .appendColumnsIfNew([\n            { slug: \"slug\", type: ColumnTypeNames.String, name: \"slug\" },\n            {\n                slug: \"variableId\",\n                type: ColumnTypeNames.Integer,\n                name: \"variableId\",\n            },\n        ])\n        .renameColumn(\"variableId\", \"owidVariableId\")\n        // Filter out rows that neither have a slug nor an owidVariableId\n        .rowFilter(\n            (row) => !!(row.slug || typeof row.owidVariableId === \"number\"),\n            \"Keep only column defs with a slug or variable id\"\n        )\n\n    return columnsTable.rows.map((row) => {\n        // Ignore the slug if a variable id is given\n        const hasValidVariableId =\n            row.owidVariableId && isNotErrorValue(row.owidVariableId)\n        if (hasValidVariableId && row.slug) delete row.slug\n\n        // Add display properties to the 'display' object\n        for (const field in row) {\n            const cellDef = ColumnGrammar[field]\n            if (\n                cellDef?.isDisplayProperty &&\n                isNotErrorValueOrEmptyCell(row[field]) &&\n                row[field] !== \"\"\n            ) {\n                row.display = row.display || {}\n                row.display[field] = row[field]\n                delete row[field]\n            }\n        }\n\n        return trimAndParseObject(row, ColumnGrammar)\n    })\n}\n","import * as _ from \"lodash-es\"\nimport { legacyToCurrentGrapherUrl } from \"@ourworldindata/grapher\"\nimport { QueryParams, Url } from \"@ourworldindata/utils\"\nimport { EXPLORERS_ROUTE_FOLDER } from \"../ExplorerConstants.js\"\nimport { ExplorerUrlMigrationSpec } from \"./ExplorerUrlMigrations.js\"\n\nconst covidMetricFromLegacyQueryParams = (queryParams: QueryParams) => {\n    if (queryParams.casesMetric) {\n        return \"Confirmed cases\"\n    } else if (queryParams.deathsMetric) {\n        return \"Confirmed deaths\"\n    } else if (queryParams.cfrMetric) {\n        return \"Case fatality rate\"\n    } else if (queryParams.testsMetric) {\n        return \"Tests\"\n    } else if (queryParams.testsPerCaseMetric) {\n        return \"Tests per confirmed case\"\n    } else if (queryParams.positiveTestRate) {\n        return \"Share of positive tests\"\n    } else if (queryParams.vaccinationsMetric) {\n        return \"Vaccinations\"\n    }\n    return undefined\n}\n\nconst legacyIntervalToNewValue = {\n    daily: \"New per day\",\n    weekly: \"Weekly\",\n    total: \"Cumulative\",\n    smoothed: \"7-day rolling average\",\n    biweekly: \"Biweekly\",\n    weeklyChange: \"Weekly change\",\n    biweeklyChange: \"Biweekly change\",\n}\n\nconst covidIntervalFromLegacyQueryParams = (queryParams: QueryParams) => {\n    let legacyInterval: string | undefined = undefined\n\n    // Early on, the query string was a few booleans like dailyFreq=true.\n    // Now it is a single 'interval'. This transformation is for backward compat.\n    if (queryParams.interval) {\n        legacyInterval = queryParams.interval\n    } else if (queryParams.totalFreq) {\n        legacyInterval = \"total\"\n    } else if (queryParams.dailyFreq) {\n        legacyInterval = \"daily\"\n    } else if (queryParams.smoothing) {\n        legacyInterval = \"smoothed\"\n    }\n\n    if (legacyInterval) {\n        return legacyIntervalToNewValue[\n            legacyInterval as keyof typeof legacyIntervalToNewValue\n        ]\n    }\n\n    return undefined\n}\n\nconst boolParamToString = (bool: boolean | string | undefined) =>\n    bool === \"true\" || bool === \"false\" ? bool : bool ? \"true\" : \"false\"\n\nconst legacyToCurrentCovidQueryParams = (\n    queryParams: QueryParams,\n    baseQueryParams: QueryParams = {}\n): QueryParams => {\n    const restQueryParams = _.omit(\n        {\n            ...baseQueryParams,\n            ...queryParams,\n        },\n        \"casesMetric\",\n        \"deathsMetric\",\n        \"cfrMetric\",\n        \"testsMetric\",\n        \"testsPerCaseMetric\",\n        \"positiveTestRate\",\n        \"vaccinationsMetric\",\n        \"interval\",\n        \"smoothing\",\n        \"totalFreq\",\n        \"dailyFreq\",\n        \"aligned\",\n        \"perCapita\"\n    )\n\n    const urlContainsMetric = !!covidMetricFromLegacyQueryParams(queryParams)\n\n    // For the following params, use the modern query param if it exists, otherwise\n    // fall back to trying to convert the legacy one.\n    const explorerQueryParams: QueryParams = {\n        Metric:\n            queryParams.Metric ??\n            baseQueryParams.Metric ??\n            covidMetricFromLegacyQueryParams(queryParams) ??\n            covidMetricFromLegacyQueryParams(baseQueryParams),\n        Interval:\n            queryParams.Interval ??\n            baseQueryParams.Interval ??\n            covidIntervalFromLegacyQueryParams(queryParams) ??\n            covidIntervalFromLegacyQueryParams(baseQueryParams),\n        \"Align outbreaks\": boolParamToString(\n            queryParams[\"Align outbreaks\"] ??\n                baseQueryParams[\"Align outbreaks\"] ??\n                (urlContainsMetric\n                    ? queryParams.aligned\n                    : baseQueryParams.aligned)\n        ),\n        \"Relative to Population\": boolParamToString(\n            queryParams[\"Relative to Population\"] ??\n                baseQueryParams[\"Relative to Population\"] ??\n                (urlContainsMetric\n                    ? queryParams.perCapita\n                    : baseQueryParams.perCapita)\n        ),\n    }\n\n    return {\n        ...restQueryParams,\n        ...explorerQueryParams,\n    }\n}\n\nexport const legacyCovidMigrationSpec: ExplorerUrlMigrationSpec = {\n    explorerSlug: \"covid\",\n    migrateUrl: (url, baseQueryStr) => {\n        // Migrate the Grapher query params in both URLs\n        const [explorerUrl, baseUrl] = [\n            url,\n            Url.fromQueryStr(baseQueryStr),\n        ].map(legacyToCurrentGrapherUrl)\n\n        return explorerUrl\n            .setQueryParams(\n                legacyToCurrentCovidQueryParams(\n                    explorerUrl.queryParams,\n                    baseUrl.queryParams\n                )\n            )\n            .update({\n                pathname: `/${EXPLORERS_ROUTE_FOLDER}/covid`,\n            })\n    },\n}\n","import * as _ from \"lodash-es\"\nimport { Url, QueryParams } from \"@ourworldindata/utils\"\n\nimport { EXPLORERS_ROUTE_FOLDER } from \"../ExplorerConstants.js\"\n\nexport const decodeURIComponentOrUndefined = (value: string | undefined) =>\n    value !== undefined\n        ? decodeURIComponent(value.replace(/\\+/g, \"%20\"))\n        : undefined\n\nexport type QueryParamTransformMap = Record<\n    string,\n    {\n        newName?: string\n        transformValue?: (value: string | undefined) => string | undefined\n    }\n>\n\nexport const transformQueryParams = (\n    oldQueryParams: Readonly<QueryParams>,\n    transformMap: QueryParamTransformMap\n) => {\n    const newQueryParams = _.omit(\n        oldQueryParams,\n        ...Object.keys(transformMap)\n    ) as QueryParams\n    for (const oldParamName in transformMap) {\n        if (!(oldParamName in oldQueryParams)) continue\n        const { newName, transformValue } = transformMap[oldParamName]\n        const name = newName ?? oldParamName\n        const transform = transformValue ?? _.identity\n        newQueryParams[name] = transform(oldQueryParams[oldParamName])\n    }\n    return newQueryParams\n}\n\n// todo(refactor): merge with Url's get explorerSlug()\nexport const getExplorerSlugFromUrl = (url: Url): string | undefined => {\n    if (!url.pathname) return undefined\n    const match = url.pathname.match(\n        new RegExp(`^/+${EXPLORERS_ROUTE_FOLDER}/+([^/]+)`)\n    )\n    if (match && match[1]) return match[1]\n    return undefined\n}\n","import { legacyToCurrentGrapherUrl } from \"@ourworldindata/grapher\"\nimport { Url, UrlMigration } from \"@ourworldindata/utils\"\nimport {\n    decodeURIComponentOrUndefined,\n    getExplorerSlugFromUrl,\n    QueryParamTransformMap,\n    transformQueryParams,\n} from \"./ExplorerUrlMigrationUtils.js\"\n\nconst EXPLORER_SLUG = \"co2\"\n\nconst co2QueryParamTransformMap: QueryParamTransformMap = {\n    \"Gas \": {\n        newName: \"Gas\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Accounting \": {\n        newName: \"Accounting\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Fuel \": {\n        newName: \"Fuel\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Count \": {\n        newName: \"Count\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Relative to world total \": {\n        newName: \"Relative to world total\",\n        transformValue: (value) => (value ? \"true\" : \"false\"),\n    },\n}\n\nexport const co2UrlMigration: UrlMigration = (url: Url) => {\n    // if it's not the /explorer/co2 path, skip it\n    const explorerSlug = getExplorerSlugFromUrl(url)\n    if (explorerSlug !== EXPLORER_SLUG) return url\n\n    url = legacyToCurrentGrapherUrl(url)\n    const queryParams = transformQueryParams(\n        url.queryParams,\n        co2QueryParamTransformMap\n    )\n    return url.setQueryParams(queryParams)\n}\n","import { legacyToCurrentGrapherUrl } from \"@ourworldindata/grapher\"\nimport { Url, UrlMigration } from \"@ourworldindata/utils\"\nimport {\n    decodeURIComponentOrUndefined,\n    getExplorerSlugFromUrl,\n    QueryParamTransformMap,\n    transformQueryParams,\n} from \"./ExplorerUrlMigrationUtils.js\"\n\nconst EXPLORER_SLUG = \"energy\"\n\nconst energyQueryParamTransformMap: QueryParamTransformMap = {\n    \"Total or Breakdown \": {\n        newName: \"Total or Breakdown\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Select a source \": {\n        newName: \"Select a source\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Energy or Electricity \": {\n        newName: \"Energy or Electricity\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n    \"Metric \": {\n        newName: \"Metric\",\n        transformValue: decodeURIComponentOrUndefined,\n    },\n}\n\nexport const energyUrlMigration: UrlMigration = (url: Url) => {\n    // if it's not the /explorer/energy path, skip it\n    const explorerSlug = getExplorerSlugFromUrl(url)\n    if (explorerSlug !== EXPLORER_SLUG) return url\n    url = legacyToCurrentGrapherUrl(url)\n    const queryParams = transformQueryParams(\n        url.queryParams,\n        energyQueryParamTransformMap\n    )\n    return url.setQueryParams(queryParams)\n}\n","import { Url, UrlMigration } from \"@ourworldindata/utils\"\nimport {\n    getExplorerSlugFromUrl,\n    QueryParamTransformMap,\n    transformQueryParams,\n} from \"./ExplorerUrlMigrationUtils.js\"\n\nconst EXPLORER_SLUG = \"coronavirus-data-explorer\"\n\nconst transformMap: QueryParamTransformMap = {\n    Metric: {\n        transformValue: (value) => {\n            // Since we introduced multiple vaccinations metrics, we want to\n            // differentiate between them.\n            // And while we're there, reduce the length of \"Tests per confirmed\n            // case\", because it wraps to 2 lines.\n            //\n            // -@danielgavrilov, 2021-03-30\n            //\n            if (value === \"Vaccinations\") return \"Vaccine doses\"\n            if (value === \"Tests per confirmed case\") return \"Tests per case\"\n            return value\n        },\n    },\n    \"Align outbreaks\": {\n        newName: \"Color by test positivity\",\n    },\n}\n\nexport const covidUrlMigration: UrlMigration = (url: Url) => {\n    // if it's not the /explorer/energy path, skip it\n    const explorerSlug = getExplorerSlugFromUrl(url)\n    if (explorerSlug !== EXPLORER_SLUG) return url\n    return url.setQueryParams(\n        transformQueryParams(url.queryParams, transformMap)\n    )\n}\n","import { Url, UrlMigration, performUrlMigrations } from \"@ourworldindata/utils\"\n\nimport { legacyCovidMigrationSpec } from \"./LegacyCovidUrlMigration.js\"\nimport { co2UrlMigration } from \"./CO2UrlMigration.js\"\nimport { energyUrlMigration } from \"./EnergyUrlMigration.js\"\nimport { covidUrlMigration } from \"./CovidUrlMigration.js\"\n\nexport enum ExplorerUrlMigrationId {\n    legacyToGridCovidExplorer = \"legacyToGridCovidExplorer\",\n}\n\nexport interface ExplorerUrlMigrationSpec {\n    explorerSlug: string\n    migrateUrl: (url: Url, baseQueryStr: string) => Url\n}\n\nexport const explorerUrlMigrationsById: Record<\n    ExplorerUrlMigrationId,\n    ExplorerUrlMigrationSpec\n> = {\n    legacyToGridCovidExplorer: legacyCovidMigrationSpec,\n}\n\nconst explorerUrlMigrations: UrlMigration[] = [\n    // NOTE: The order of migrations matters!\n    co2UrlMigration,\n    energyUrlMigration,\n    covidUrlMigration,\n]\n\nexport const migrateExplorerUrl: UrlMigration = (url: Url): Url => {\n    return performUrlMigrations(explorerUrlMigrations, url)\n}\n","import * as _ from \"lodash-es\"\nimport { faChartLine } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    ArchiveContext,\n    ColumnTypeNames,\n    CoreColumnDef,\n    OwidColumnDef,\n    SortOrder,\n    TableSlug,\n    GrapherInterface,\n    GrapherQueryParams,\n    EntityName,\n    GRAPHER_TAB_QUERY_PARAMS,\n    DimensionProperty,\n} from \"@ourworldindata/types\"\nimport {\n    OwidTable,\n    BlankOwidTable,\n    parseTransformString,\n} from \"@ourworldindata/core-table\"\nimport {\n    EntityPicker,\n    EntityPickerManager,\n    Grapher,\n    GrapherManager,\n    GrapherProgrammaticInterface,\n    SelectionArray,\n    setSelectedEntityNamesParam,\n    SlideShowController,\n    SlideShowManager,\n    DEFAULT_GRAPHER_ENTITY_TYPE,\n    GrapherAnalytics,\n    GrapherState,\n    fetchInputTableForConfig,\n    FetchInputTableForConfigFn,\n    loadCatalogData,\n} from \"@ourworldindata/grapher\"\nimport {\n    Bounds,\n    ColumnSlug,\n    excludeUndefined,\n    exposeInstanceOnWindow,\n    isInIFrame,\n    keyMap,\n    dimensionsToViewId,\n    merge,\n    mergeGrapherConfigs,\n    omitUndefinedValues,\n    parseIntOrUndefined,\n    PromiseCache,\n    PromiseSwitcher,\n    SerializedGridProgram,\n    setWindowUrl,\n    Tippy,\n    Url,\n} from \"@ourworldindata/utils\"\nimport { MarkdownTextWrap } from \"@ourworldindata/components\"\nimport classNames from \"classnames\"\nimport { action, computed, makeObservable, observable, reaction } from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport React, { useCallback, useEffect, useState } from \"react\"\nimport { createRoot } from \"react-dom/client\"\nimport { ExplorerControlBar, ExplorerControlPanel } from \"./ExplorerControls.js\"\nimport { ExplorerProgram } from \"./ExplorerProgram.js\"\nimport {\n    ExplorerChartCreationMode,\n    ExplorerChoiceParams,\n    ExplorerContainerId,\n    ExplorerFullQueryParams,\n    EXPLORERS_PREVIEW_ROUTE,\n    EXPLORERS_ROUTE_FOLDER,\n    UNSAVED_EXPLORER_DRAFT,\n    UNSAVED_EXPLORER_PREVIEW_QUERYPARAMS,\n} from \"./ExplorerConstants.js\"\nimport { ExplorerPageUrlMigrationSpec } from \"./urlMigrations/ExplorerPageUrlMigrationSpec.js\"\nimport {\n    explorerUrlMigrationsById,\n    migrateExplorerUrl,\n} from \"./urlMigrations/ExplorerUrlMigrations.js\"\nimport { match } from \"ts-pattern\"\nimport { TransformParamType } from \"@ourworldindata/core-table/src/Transforms.js\"\n\nexport interface ExplorerProps extends SerializedGridProgram {\n    grapherConfigs?: GrapherInterface[]\n    partialGrapherConfigs?: GrapherInterface[]\n    chartConfigIdByViewId?: Record<string, string>\n    queryStr?: string\n    isEmbeddedInAnOwidPage?: boolean\n    isInStandalonePage?: boolean\n    isPreview?: boolean\n    selection?: SelectionArray\n    adminBaseUrl: string\n    bakedBaseUrl: string\n    bakedGrapherUrl: string\n    dataApiUrl: string\n    catalogUrl: string\n    bounds?: Bounds\n    staticBounds?: Bounds\n    loadMetadataOnly?: boolean\n    throwOnMissingGrapher?: boolean\n    setupGrapher?: boolean\n    archiveContext?: ArchiveContext\n    loadInputTableForConfig?: FetchInputTableForConfigFn\n}\n\nconst LivePreviewComponent = (props: ExplorerProps) => {\n    const [useLocalStorage, setUseLocalStorage] = useState(true)\n    const [renderedProgram, setRenderedProgram] = useState(\"\")\n    const [hasLocalStorage, setHasLocalStorage] = useState(false)\n\n    const updateProgram = useCallback(() => {\n        const localStorageProgram = localStorage.getItem(\n            UNSAVED_EXPLORER_DRAFT + props.slug\n        )\n        let program: string\n        if (useLocalStorage) program = localStorageProgram ?? props.program\n        else program = props.program\n\n        setHasLocalStorage(!!localStorageProgram)\n        setRenderedProgram((previousProgram) => {\n            if (program === previousProgram) return previousProgram\n            return program\n        })\n    }, [props.program, props.slug, useLocalStorage])\n\n    useEffect(() => {\n        updateProgram()\n        const interval = setInterval(updateProgram, 1000)\n        return () => clearInterval(interval)\n    }, [updateProgram])\n\n    const newProps = { ...props, program: renderedProgram }\n\n    return (\n        <>\n            {hasLocalStorage && (\n                <div className=\"admin-only-locally-edited-checkbox\">\n                    <Tippy\n                        content={\n                            <span>\n                                <p>\n                                    <b>Checked</b>: Use the explorer version\n                                    with changes as present in the admin.\n                                </p>\n                                <p>\n                                    <b>Unchecked</b>: Use the currently-saved\n                                    version.\n                                </p>\n                                <hr />\n                                <p>\n                                    Note that some features may only work\n                                    correctly when this checkbox is unchecked:\n                                    in particular, using <kbd>catalogPath</kbd>s\n                                    and <kbd>grapherId</kbd>s and variable IDs.\n                                </p>\n                            </span>\n                        }\n                        placement=\"bottom\"\n                    >\n                        <label>\n                            <input\n                                type=\"checkbox\"\n                                id=\"useLocalStorage\"\n                                onChange={(e) =>\n                                    setUseLocalStorage(e.target.checked)\n                                }\n                                checked={useLocalStorage}\n                            />\n                            Display locally edited explorer\n                        </label>\n                    </Tippy>\n                </div>\n            )}\n            <Explorer\n                {...newProps}\n                queryStr={window?.location?.search ?? \"\"}\n                key={Date.now()}\n                isPreview={true}\n            />\n        </>\n    )\n}\n\nconst renderLivePreviewVersion = (props: ExplorerProps) => {\n    const elem = document.getElementById(ExplorerContainerId)\n    if (!elem) throw new Error(\"ExplorerContainerId not found in DOM\")\n    const root = createRoot(elem)\n    root.render(<LivePreviewComponent {...props} />)\n}\n\nconst isNarrow = () =>\n    typeof window === \"undefined\"\n        ? false\n        : window.screen.width < 450 ||\n          document.documentElement.clientWidth <= 800\n\n@observer\nexport class Explorer\n    extends React.Component<ExplorerProps>\n    implements\n        SlideShowManager<ExplorerChoiceParams>,\n        EntityPickerManager,\n        GrapherManager\n{\n    analytics = new GrapherAnalytics()\n    grapherState: GrapherState\n    isOnArchivalPage: boolean\n    inputTableTransformer = (table: OwidTable) => table\n\n    constructor(props: ExplorerProps) {\n        super(props)\n\n        makeObservable<\n            Explorer,\n            | \"isNarrow\"\n            | \"grapherContainerRef\"\n            | \"grapherRef\"\n            | \"showMobileControlsPopup\"\n        >(this, {\n            appendOnlyAvailableEntityNames: observable,\n            grapher: observable.ref,\n            isNarrow: observable,\n            grapherContainerRef: observable,\n            grapherRef: observable.ref,\n            showMobileControlsPopup: observable,\n            entityPickerMetric: observable,\n            entityPickerSort: observable,\n            entityPickerTable: observable.ref,\n            entityPickerTableIsLoading: observable.ref,\n        })\n\n        this.explorerProgram = ExplorerProgram.fromJson(\n            props\n        ).initDecisionMatrix(this.initialQueryParams)\n        const { archiveContext } = props\n        const isOnArchivalPage = archiveContext?.type === \"archive-page\"\n        const assetMaps = isOnArchivalPage ? archiveContext?.assets : undefined\n        this.isOnArchivalPage = isOnArchivalPage\n        this.grapherState = new GrapherState({\n            staticBounds: props.staticBounds,\n            bounds: props.bounds,\n            enableKeyboardShortcuts: this.props.isInStandalonePage,\n            manager: this,\n            isEmbeddedInAnOwidPage: this.props.isEmbeddedInAnOwidPage,\n            adminBaseUrl: this.adminBaseUrl,\n            canHideExternalControlsInEmbed: true,\n            archiveContext: props.archiveContext,\n            additionalDataLoaderFn: (catalogKey) =>\n                loadCatalogData(catalogKey, {\n                    baseUrl: this.props.catalogUrl,\n                    assetMap: assetMaps?.runtime,\n                }),\n        })\n\n        if (props.setupGrapher !== false)\n            this.grapher = new Grapher({ grapherState: this.grapherState })\n    }\n    // caution: do a ctrl+f to find untyped usages\n    static renderSingleExplorerOnExplorerPage(\n        program: ExplorerProps,\n        grapherConfigs: GrapherInterface[],\n        partialGrapherConfigs: GrapherInterface[],\n        chartConfigIdByViewId: Record<string, string> | undefined,\n        explorerConstants: Record<string, string>,\n        urlMigrationSpec?: ExplorerPageUrlMigrationSpec,\n        archiveContext?: ArchiveContext\n    ) {\n        const props: ExplorerProps = {\n            ...program,\n            ...explorerConstants,\n            grapherConfigs,\n            partialGrapherConfigs,\n            isEmbeddedInAnOwidPage: false,\n            isInStandalonePage: true,\n            archiveContext,\n            chartConfigIdByViewId,\n        }\n\n        if (window.location.href.includes(EXPLORERS_PREVIEW_ROUTE)) {\n            renderLivePreviewVersion(props)\n            return\n        }\n\n        let url = Url.fromURL(window.location.href)\n\n        // Handle redirect spec that's baked on the page.\n        // e.g. the old COVID Grapher to Explorer redirects are implemented this way.\n        if (urlMigrationSpec) {\n            const { explorerUrlMigrationId, baseQueryStr } = urlMigrationSpec\n            const migration = explorerUrlMigrationsById[explorerUrlMigrationId]\n            if (migration) {\n                url = migration.migrateUrl(url, baseQueryStr)\n            } else {\n                console.error(\n                    `No explorer URL migration with id ${explorerUrlMigrationId}`\n                )\n            }\n        }\n\n        // Handle explorer-specific migrations.\n        // This is how we migrate the old CO2 explorer to the new CO2 explorer.\n        // Because they are on the same path, we can't handle it like we handle\n        // the COVID explorer redirects above.\n        url = migrateExplorerUrl(url)\n\n        // Update the window URL\n        setWindowUrl(url)\n\n        const elem = document.getElementById(ExplorerContainerId)\n        if (!elem) throw new Error(\"ExplorerContainerId not found in DOM\")\n\n        const root = createRoot(elem)\n        root.render(<Explorer {...props} queryStr={url.queryStr} />)\n    }\n\n    private initialQueryParams = Url.fromQueryStr(this.props.queryStr ?? \"\")\n        .queryParams as ExplorerFullQueryParams\n\n    explorerProgram = ExplorerProgram.fromJson(this.props).initDecisionMatrix(\n        this.initialQueryParams\n    )\n\n    bakedBaseUrl = this.props.bakedBaseUrl\n    dataApiUrl = this.props.dataApiUrl\n    catalogUrl = this.props.catalogUrl\n    adminBaseUrl = this.props.adminBaseUrl\n    bakedGrapherUrl = this.props.bakedGrapherUrl\n\n    selection = this.props.selection?.hasSelection\n        ? this.props.selection\n        : new SelectionArray(this.explorerProgram.selection)\n\n    entityType = this.explorerProgram.entityType ?? DEFAULT_GRAPHER_ENTITY_TYPE\n\n    // We want to ensure that unavailable entity are shown in the explorer entity\n    // that's why we employ an append-only version of `grapher.availableEntityNames`\n    appendOnlyAvailableEntityNames: Set<EntityName> = new Set()\n\n    grapher: Grapher | undefined = undefined\n\n    @action.bound setGrapher(grapher: Grapher) {\n        this.grapher = grapher\n    }\n\n    @computed get grapherConfigs() {\n        const arr = this.props.grapherConfigs || []\n        return new Map(arr.map((config) => [config.id!, config]))\n    }\n\n    @computed get partialGrapherConfigsByVariableId() {\n        const arr = this.props.partialGrapherConfigs || []\n        return new Map(arr.map((config) => [config.id!, config]))\n    }\n\n    @computed get partialGrapherConfigsBySlug() {\n        const { columnDefsWithoutTableSlug } = this.explorerProgram\n\n        const configsBySlug = new Map<string, GrapherInterface>()\n        for (const columnDef of columnDefsWithoutTableSlug) {\n            if (!columnDef.transform) continue\n\n            const { transformName, params: transformParams = [] } =\n                parseTransformString(columnDef.transform) ?? {}\n            const dataSlugsForTransform = transformParams\n                .filter(({ type }) => type === TransformParamType.DataSlug)\n                .map(({ value }) => value)\n\n            if (transformName === \"duplicate\") {\n                const indicatorId = +dataSlugsForTransform[0]\n                const partialGrapherConfig =\n                    this.partialGrapherConfigsByVariableId.get(indicatorId)\n                if (partialGrapherConfig)\n                    configsBySlug.set(columnDef.slug, partialGrapherConfig)\n            }\n        }\n        return configsBySlug\n    }\n\n    private setUpIntersectionObserver(): void {\n        if (typeof window !== \"undefined\" && \"IntersectionObserver\" in window) {\n            const observer = new IntersectionObserver((entries) => {\n                entries.forEach((entry) => {\n                    if (entry.isIntersecting) {\n                        this.analytics.logExplorerView(\n                            this.explorerProgram.slug,\n                            this.explorerProgram.decisionMatrix.currentParams,\n                            this.getChartConfigIdForCurrentParams()\n                        )\n                        observer.disconnect()\n                    }\n                })\n            })\n            observer.observe(this.grapherContainerRef.current!)\n            this.disposers.push(() => observer.disconnect())\n        }\n    }\n\n    disposers: (() => void)[] = []\n    override async componentDidMount() {\n        this.setGrapher(this.grapherRef.current!)\n\n        let url = Url.fromQueryParams({\n            ...this.initialQueryParams,\n            ...this.currentChoiceParams, // Needed for Grapher's embedArchivedUrl.\n        })\n\n        if (this.props.selection?.hasSelection) {\n            url = setSelectedEntityNamesParam(\n                url,\n                this.props.selection.selectedEntityNames\n            )\n        }\n        // Run the initializiation for the grapherState but don't await it. The update code\n        // will reset and initialize the grapherState and then the data loading will be awaited inside the function.\n        // We don't want to wait for the data loading to finish as we only care about the non-data loading\n        // part to run (the data loading can finish whenever)\n        void this.updateGrapherFromExplorer()\n\n        // Do the rest of the initialization\n        this.grapherState.populateFromQueryParams(url.queryParams)\n        exposeInstanceOnWindow(this, \"explorer\")\n        this.setUpIntersectionObserver()\n        this.attachEventListeners()\n        this.updateEntityPickerTable() // call for the first time to initialize EntityPicker\n    }\n\n    private attachEventListeners() {\n        if (typeof window !== \"undefined\" && \"ResizeObserver\" in window) {\n            const onResizeThrottled = _.debounce(this.onResize, 200, {\n                leading: true,\n            })\n            const resizeObserver = new ResizeObserver(onResizeThrottled)\n            resizeObserver.observe(this.grapherContainerRef.current!)\n            this.disposers.push(() => {\n                resizeObserver.disconnect()\n            })\n        } else if (typeof window === \"object\" && typeof document === \"object\") {\n            // only show the warning when we're in something that roughly resembles a browser\n            console.warn(\n                \"ResizeObserver not available; the explorer will not be responsive to window resizes\"\n            )\n\n            this.onResize() // fire once to initialize, at least\n        }\n\n        // We always prefer the entity picker metric to be sourced from the currently displayed table.\n        // To do this properly, we need to also react to the table changing.\n        this.disposers.push(\n            reaction(\n                () => [\n                    this.entityPickerMetric,\n                    this.explorerProgram.explorerGrapherConfig.tableSlug,\n                ],\n                () => this.updateEntityPickerTable()\n            )\n        )\n\n        this.disposers.push(\n            reaction(\n                () => this.grapherState.availableEntityNames,\n                (availableEntityNames) => {\n                    availableEntityNames?.forEach((entity) =>\n                        this.appendOnlyAvailableEntityNames.add(entity)\n                    )\n                }\n            )\n        )\n\n        if (this.props.isInStandalonePage) this.bindToWindow()\n    }\n\n    override componentWillUnmount() {\n        this.disposers.forEach((dispose) => dispose())\n    }\n\n    private initSlideshow() {\n        if (this.grapherState.slideShow) return\n\n        this.grapherState.slideShow = new SlideShowController(\n            this.explorerProgram.decisionMatrix.allDecisionsAsQueryParams(),\n            0,\n            this\n        )\n    }\n\n    private persistedGrapherQueryParamsBySelectedRow: Map<\n        number,\n        Partial<GrapherQueryParams>\n    > = new Map()\n\n    // todo: break this method up and unit test more. this is pretty ugly right now.\n    @action.bound async reactToUserChangingSelection(oldSelectedRow: number) {\n        if (!this.explorerProgram.currentlySelectedGrapherRow) return\n        this.initSlideshow()\n\n        const oldGrapherParams = this.grapherState.changedParams\n        this.persistedGrapherQueryParamsBySelectedRow.set(\n            oldSelectedRow,\n            oldGrapherParams\n        )\n\n        const newGrapherParams = {\n            ...this.currentChoiceParams, // Needed for Grapher's embedArchivedUrl.\n            ...this.persistedGrapherQueryParamsBySelectedRow.get(\n                this.explorerProgram.currentlySelectedGrapherRow\n            ),\n            country: oldGrapherParams.country,\n            region: oldGrapherParams.region,\n            time: this.grapherState.timeParam,\n        }\n\n        const previousTab = this.grapherState.activeTab\n\n        await this.updateGrapherFromExplorer()\n\n        newGrapherParams.tab =\n            this.grapherState.mapGrapherTabToQueryParam(previousTab)\n\n        // reset map state if switching to a chart\n        if (newGrapherParams.tab !== GRAPHER_TAB_QUERY_PARAMS.map) {\n            newGrapherParams.globe = \"0\"\n            newGrapherParams.mapSelect = \"\"\n        }\n\n        this.grapherState.populateFromQueryParams(newGrapherParams)\n\n        // When switching between explorer views, we usually preserve the tab.\n        // However, if the new chart doesn't support the previously selected tab,\n        // Grapher automatically switches to a supported one. In such cases,\n        // we call onChartSwitching to make adjustments that ensure the new view\n        // is sensible (e.g. updating the time selection when switching from a\n        // single-time chart like a discrete bar chart to a multi-time chart like\n        // a line chart).\n        const currentTab = this.grapherState.activeTab\n        if (previousTab !== currentTab)\n            this.grapherState.onChartSwitching(previousTab, currentTab)\n\n        this.analytics.logExplorerView(\n            this.explorerProgram.slug,\n            this.explorerProgram.decisionMatrix.currentParams,\n            this.getChartConfigIdForCurrentParams()\n        )\n    }\n\n    private getChartConfigIdForCurrentParams() {\n        // We get the params this way to match the logic on the backend.\n        // `this.currentChoiceParams` gives a different result.\n        const decisionMatrix = this.explorerProgram.decisionMatrix\n        const selectedRow = decisionMatrix.table.rowsAt([\n            decisionMatrix.selectedRowIndex,\n        ])[0]\n        if (!selectedRow) return undefined\n        const params = decisionMatrix.getChoiceParamsForRow(selectedRow)\n        const viewId = dimensionsToViewId(params)\n        return this.props.chartConfigIdByViewId?.[viewId]\n    }\n\n    @action.bound private setGrapherTable(table: OwidTable) {\n        this.grapherState.inputTable = this.inputTableTransformer(table)\n    }\n\n    @computed get availableEntityNames(): EntityName[] {\n        const entityNameSet = this.appendOnlyAvailableEntityNames\n        return Array.from(entityNameSet)\n    }\n\n    @computed private get enableMapSelection(): boolean {\n        return !this.isNarrow\n    }\n\n    private futureGrapherTable = new PromiseSwitcher<OwidTable>({\n        onResolve: (table) => this.setGrapherTable(table),\n        onReject: (error) => this.grapher?.setError(error),\n    })\n\n    tableLoader = new PromiseCache((slug: TableSlug | undefined) =>\n        this.explorerProgram.constructTable(slug)\n    )\n\n    @action.bound async updateGrapherFromExplorer() {\n        switch (this.explorerProgram.chartCreationMode) {\n            case ExplorerChartCreationMode.FromGrapherId:\n                return this.updateGrapherFromExplorerUsingGrapherId()\n            case ExplorerChartCreationMode.FromVariableIds:\n                return this.updateGrapherFromExplorerUsingVariableIds()\n            case ExplorerChartCreationMode.FromExplorerTableColumnSlugs:\n                return this.updateGrapherFromExplorerUsingColumnSlugs()\n        }\n    }\n\n    @action.bound async updateGrapherFromExplorerUsingGrapherId() {\n        const grapherState = this.grapherState\n\n        const { grapherId } = this.explorerProgram.explorerGrapherConfig\n        const grapherConfig = this.grapherConfigs.get(grapherId!)\n        if (!grapherConfig) {\n            if (this.props.throwOnMissingGrapher) {\n                throw new Error(`Grapher config not found for ID: ${grapherId}`)\n            }\n        }\n        const finalGrapherConfig = grapherConfig ?? {}\n\n        const config: GrapherProgrammaticInterface = {\n            ...mergeGrapherConfigs(\n                finalGrapherConfig,\n                this.explorerProgram.grapherConfig\n            ),\n            baseUrl: this.baseUrl,\n            bakedGrapherURL: this.bakedBaseUrl,\n            adminBaseUrl: this.adminBaseUrl,\n            hideEntityControls: this.showExplorerControls,\n            enableMapSelection: this.enableMapSelection,\n        }\n\n        // if not empty, respect the explorer's selection\n        if (this.selection.hasSelection) {\n            config.selectedEntityNames = this.selection.selectedEntityNames\n        }\n\n        grapherState.setAuthoredVersion(config)\n        grapherState.reset()\n        grapherState.inputTable = BlankOwidTable()\n        grapherState.updateFromObject(config)\n        if (!config.table) {\n            const loadFn =\n                this.props.loadInputTableForConfig ?? fetchInputTableForConfig\n            const inputTable = loadFn({\n                dimensions: config.dimensions,\n                selectedEntityColors: config.selectedEntityColors,\n                dataApiUrl: this.props.dataApiUrl,\n                archiveContext: this.props.archiveContext,\n                noCache: this.props.isPreview,\n                loadMetadataOnly: this.props.loadMetadataOnly,\n            }).then((owidTable) => (owidTable ? owidTable : BlankOwidTable()))\n            // We use the PromiseSwitcher here to make sure that only the last\n            // of several user triggered load operations in quick succession\n            // will actually set the table.\n            await this.futureGrapherTable.set(inputTable)\n        } else {\n            grapherState.inputTable = this.inputTableTransformer(config.table)\n        }\n    }\n\n    @action.bound async updateGrapherFromExplorerUsingVariableIds() {\n        const { grapherState } = this\n        const { dimensionsOfSelectedRow, explorerGrapherConfig } =\n            this.explorerProgram\n\n        const variableIdDimensions = dimensionsOfSelectedRow.filter(\n            (dim) => dim.type === \"variableId\"\n        )\n        const slugDimensions = dimensionsOfSelectedRow.filter(\n            (dim) => dim.type === \"slug\"\n        )\n\n        const yVariableIds = variableIdDimensions.map((dim) => dim.variableId)\n        const ySlugs = slugDimensions.map((dim) => dim.slug)\n\n        const partialGrapherConfig =\n            this.partialGrapherConfigsByVariableId.get(yVariableIds[0]) ??\n            // If ySlug references a column that duplicates an indicator via the\n            // `duplicate` transform, make sure the partial grapher config for\n            // that indicator is pulled in\n            this.partialGrapherConfigsBySlug.get(ySlugs[0]) ??\n            {}\n\n        const config: GrapherProgrammaticInterface = {\n            ...mergeGrapherConfigs(\n                partialGrapherConfig,\n                this.explorerProgram.grapherConfig\n            ),\n            bakedGrapherURL: this.bakedBaseUrl,\n            adminBaseUrl: this.adminBaseUrl,\n            hideEntityControls: this.showExplorerControls,\n            enableMapSelection: this.enableMapSelection,\n        }\n\n        // If not empty, respect the explorer's selection\n        if (this.selection.hasSelection) {\n            config.selectedEntityNames = this.selection.selectedEntityNames\n        }\n\n        // Indicator-based explorers support two types of dimensions for creating charts:\n        //\n        // 1. Indicator ID-based dimensions: These reference variables by their numeric IDs.\n        //    We simply add these IDs to the config's dimensions array so Grapher can\n        //    download the corresponding data and metadata.\n        //\n        // 2. Slug-based dimensions: These reference transformed columns defined by transform\n        //    operations like 'multiplyBy 539022 2' or 'duplicate 170775'.\n        //\n        //    To render charts with slug-based dimensions, we need to:\n        //    1. Identify all base variables that the transformed columns depend on\n        //    2. Add these variables to the config's dimensions array for data fetching\n        //    3. Append the transformed columns to the Grapher table\n\n        const getColumnDef = (slug: string) =>\n            this.explorerProgram.getColumnDefWithoutTableSlugByIdOrSlug(slug)\n\n        // Add the given variable IDs to the dimensions array to make Grapher\n        // download the data and metadata for these variables\n        const dimensions = config.dimensions?.slice() ?? []\n        for (const dimension of dimensionsOfSelectedRow) {\n            match(dimension)\n                .with({ type: \"variableId\" }, (dimension) => {\n                    dimensions.push(_.omit(dimension, \"type\"))\n                })\n                .with({ type: \"slug\" }, ({ slug }) => {\n                    const def = getColumnDef(slug)\n                    if (!def) return\n\n                    // Parse the transform string to identify all variable ids\n                    // that the transformed column depends on\n                    const { transformName, params: transformParams = [] } =\n                        parseTransformString(def.transform ?? \"\") ?? {}\n                    const dataSlugsForTransform = transformParams\n                        .filter(\n                            ({ type }) => type === TransformParamType.DataSlug\n                        )\n                        .map(({ value }) => value)\n\n                    // It's safe to assume the extracted data slugs are variable ids\n                    // since indicator-based explorers don't support multi-step transforms\n                    const variableIds =\n                        dataSlugsForTransform\n                            .map((id) => parseIntOrUndefined(id))\n                            .filter((id) => id !== undefined) ?? []\n\n                    for (const variableId of variableIds) {\n                        // Skip if the variable id is already present as a dimension\n                        const dimensionExists = dimensions.some(\n                            (d) => d.variableId === variableId\n                        )\n                        if (dimensionExists) continue\n\n                        if (transformName === \"duplicate\") {\n                            // Use the original DimensionProperty if the column\n                            // has been duplicated from an existing variable\n                            dimensions.push({\n                                variableId: variableId,\n                                property: dimension.property,\n                                display: dimension.display,\n                            })\n                        } else {\n                            // Use DimensionProperty.table to prevent intermediate\n                            // variables from appearing as chart dimensions\n                            dimensions.push({\n                                variableId: variableId,\n                                property: DimensionProperty.table,\n                            })\n                        }\n                    }\n                })\n                .exhaustive()\n        }\n\n        // The ySlugs ultimately determine which dimensions are used as the y-dimensions.\n        // If there are any ySlugs defined, we want to append the variable IDs to them, so\n        // that both the slug-based dimensions and variable ID-based dimensions are plotted\n        // together. The order is arbitrary, but should be left as is for backward compatibility.\n        if (config.ySlugs && explorerGrapherConfig.yVariableIds)\n            config.ySlugs = `${config.ySlugs} ${explorerGrapherConfig.yVariableIds}`\n\n        const indexMap: Record<string, number> = {}\n        const ySlugList = config.ySlugs?.split(\" \") ?? []\n        ySlugList.forEach((slug, index) => (indexMap[slug] = index))\n\n        // Sort dimensions to match the order defined in config.ySlugs\n        config.dimensions = _.sortBy(\n            dimensions,\n            (dim) => indexMap[dim.slug ?? dim.variableId]\n        )\n\n        this.inputTableTransformer = (table: OwidTable) => {\n            // All slugs specified by the author in the explorer config\n            const slugs = _.uniq(slugDimensions.map(({ slug }) => slug))\n\n            // Add transformed columns (and the variables they depend on) to the grapher table\n            if (slugs.length > 0) {\n                const baseSlugs = slugs.flatMap((slug) => {\n                    const def = getColumnDef(slug)\n                    if (!def || !def.transform) return []\n                    const { params: transformParams = [] } =\n                        parseTransformString(def.transform ?? \"\") ?? {}\n                    const dataSlugsForTransform = transformParams\n                        .filter(\n                            ({ type }) => type === TransformParamType.DataSlug\n                        )\n                        .map(({ value }) => value)\n                    return dataSlugsForTransform\n                })\n                const allRequiredSlugs = _.uniq([...baseSlugs, ...slugs])\n                const existingSlugs = new Set(table.columnSlugs)\n                const missingSlugs = allRequiredSlugs.filter(\n                    (slug) => !existingSlugs.has(slug)\n                )\n                const missingColumnDefs = missingSlugs\n                    .map((slug) => getColumnDef(slug))\n                    .filter((def) => def !== undefined)\n                table = table.appendColumns(missingColumnDefs)\n            }\n\n            // Update column definitions with manually provided properties\n            table = table.updateDefs((def: OwidColumnDef) => {\n                const manuallyProvidedDef = getColumnDef(def.slug) ?? {}\n                return merge(def, manuallyProvidedDef)\n            })\n\n            return table\n        }\n\n        grapherState.setAuthoredVersion(config)\n        grapherState.reset()\n        grapherState.updateFromObject(config)\n        if (dimensions.length === 0) {\n            // If dimensions are empty, explicitly set the table to an empty table\n            // so we don't end up confusingly showing stale data from a previous chart\n            grapherState.inputTable = BlankOwidTable()\n        } else {\n            const loadFn =\n                this.props.loadInputTableForConfig ?? fetchInputTableForConfig\n            const inputTable = loadFn({\n                dimensions: config.dimensions,\n                selectedEntityColors: config.selectedEntityColors,\n                archiveContext: this.props.archiveContext,\n                dataApiUrl: this.props.dataApiUrl,\n                noCache: this.props.isPreview,\n                loadMetadataOnly: this.props.loadMetadataOnly,\n            }).then((owidTable) => (owidTable ? owidTable : BlankOwidTable()))\n            // We use the PromiseSwitcher here to make sure that only the last\n            // of several user triggered load operations in quick succession\n            // will actually set the table.\n            await this.futureGrapherTable.set(inputTable)\n        }\n    }\n\n    @action.bound async updateGrapherFromExplorerUsingColumnSlugs() {\n        const grapherState = this.grapherState\n        const { tableSlug } = this.explorerProgram.explorerGrapherConfig\n\n        const config: GrapherProgrammaticInterface = {\n            ...this.explorerProgram.grapherConfig,\n            bakedGrapherURL: this.bakedBaseUrl,\n            adminBaseUrl: this.adminBaseUrl,\n            hideEntityControls: this.showExplorerControls,\n            enableMapSelection: this.enableMapSelection,\n        }\n\n        // if not empty, respect the explorer's selection\n        if (this.selection.hasSelection) {\n            config.selectedEntityNames = this.selection.selectedEntityNames\n        }\n\n        grapherState.setAuthoredVersion(config)\n        grapherState.reset()\n        grapherState.updateFromObject(config)\n\n        // Clear any error messages, they are likely to be related to dataset loading.\n        this.grapher?.clearErrors()\n        // Set a table immediately. A BlankTable shows a loading animation.\n        this.setGrapherTable(\n            BlankOwidTable(tableSlug, `Loading table '${tableSlug}'`)\n        )\n        // We use the PromiseSwitcher here to make sure that only the last\n        // of several user triggered load operations in quick succession\n        // will actually set the table.\n        await this.futureGrapherTable.set(this.tableLoader.get(tableSlug))\n    }\n\n    @action.bound setSlide(choiceParams: ExplorerFullQueryParams) {\n        this.explorerProgram.decisionMatrix.setValuesFromChoiceParams(\n            choiceParams\n        )\n    }\n\n    @computed private get currentChoiceParams(): ExplorerChoiceParams {\n        const { decisionMatrix } = this.explorerProgram\n        return decisionMatrix.toConstrainedOptions()\n    }\n\n    @computed get queryParams(): ExplorerFullQueryParams {\n        if (\n            typeof window !== \"undefined\" &&\n            window.location.href.includes(EXPLORERS_PREVIEW_ROUTE)\n        )\n            localStorage.setItem(\n                UNSAVED_EXPLORER_PREVIEW_QUERYPARAMS +\n                    this.explorerProgram.slug,\n                JSON.stringify(this.currentChoiceParams)\n            )\n\n        let url = Url.fromQueryParams(\n            omitUndefinedValues({\n                ...this.grapherState.changedParams,\n                pickerSort: this.entityPickerSort,\n                pickerMetric: this.entityPickerMetric,\n                hideControls: this.initialQueryParams.hideControls || undefined,\n                ...this.currentChoiceParams,\n            })\n        )\n\n        url = setSelectedEntityNamesParam(\n            url,\n            this.selection.hasSelection\n                ? this.selection.selectedEntityNames\n                : undefined\n        )\n\n        return url.queryParams as ExplorerFullQueryParams\n    }\n\n    @computed get queryStr(): string {\n        return Url.fromQueryParams(this.queryParams).queryStr\n    }\n\n    @computed get currentUrl(): Url {\n        if (this.props.isPreview) return Url.fromQueryParams(this.queryParams)\n        return Url.fromURL(window.location.href).setQueryParams(\n            this.queryParams\n        )\n    }\n\n    private bindToWindow() {\n        // There is a surprisingly considerable performance overhead to updating the url\n        // while animating, so we debounce to allow e.g. smoother timelines\n        const pushParams = () =>\n            setWindowUrl(Url.fromQueryParams(this.queryParams))\n        const debouncedPushParams = _.debounce(pushParams, 100)\n\n        this.disposers.push(\n            reaction(\n                () => this.queryParams,\n                () =>\n                    this.grapher?.debounceMode\n                        ? debouncedPushParams()\n                        : pushParams(),\n                // Fire immediately to update the URL if initial params were\n                // invalid (e.g. an unavailable choice was requested)\n                { fireImmediately: true }\n            )\n        )\n    }\n\n    private get panels() {\n        return this.explorerProgram.decisionMatrix.choicesWithAvailability.map(\n            (choice) => (\n                <ExplorerControlPanel\n                    key={choice.title}\n                    explorerSlug={this.explorerProgram.slug}\n                    choice={choice}\n                    onChange={this.onChangeChoice(choice.title)}\n                    isMobile={this.isNarrow}\n                />\n            )\n        )\n    }\n\n    onChangeChoice = (choiceTitle: string) => async (value: string) => {\n        const { currentlySelectedGrapherRow } = this.explorerProgram\n        this.explorerProgram.decisionMatrix.setValueCommand(choiceTitle, value)\n        if (currentlySelectedGrapherRow)\n            await this.reactToUserChangingSelection(currentlySelectedGrapherRow)\n    }\n\n    private renderHeaderElement() {\n        return (\n            <div className=\"ExplorerHeaderBox\">\n                <div className=\"ExplorerTitle\">\n                    {this.explorerProgram.explorerTitle} Data Explorer\n                </div>\n                <div className=\"ExplorerSubtitle\">\n                    <MarkdownTextWrap\n                        fontSize={12}\n                        text={this.explorerProgram.explorerSubtitle || \"\"}\n                    />\n                </div>\n                {this.explorerProgram.downloadDataLink && (\n                    <a\n                        href={this.explorerProgram.downloadDataLink}\n                        className=\"ExplorerDownloadLink\"\n                    >\n                        Download this dataset\n                    </a>\n                )}\n            </div>\n        )\n    }\n\n    private isNarrow = isNarrow()\n\n    @computed private get isInIFrame() {\n        return isInIFrame()\n    }\n\n    @computed private get showExplorerControls() {\n        if (!this.props.isEmbeddedInAnOwidPage && !this.isInIFrame) return true\n        // Only allow hiding controls on embedded pages\n        return !(\n            this.explorerProgram.hideControls ||\n            this.initialQueryParams.hideControls === \"true\"\n        )\n    }\n\n    private grapherContainerRef = React.createRef<HTMLDivElement>()\n\n    private grapherRef = React.createRef<Grapher>()\n\n    private renderControlBar() {\n        return (\n            <ExplorerControlBar\n                isMobile={this.isNarrow}\n                showControls={this.showMobileControlsPopup}\n                closeControls={this.closeControls}\n            >\n                {this.panels}\n            </ExplorerControlBar>\n        )\n    }\n\n    private renderEntityPicker() {\n        const selection =\n            this.grapherState.isOnMapTab && this.enableMapSelection\n                ? this.grapherState.mapConfig.selection\n                : this.selection\n\n        return (\n            <EntityPicker\n                key=\"entityPicker\"\n                manager={this}\n                selection={selection}\n                onSelectEntity={this.grapherState.onSelectEntity}\n                onDeselectEntity={this.grapherState.onDeselectEntity}\n                onClearEntities={this.grapherState.onClearEntities}\n                isDropdownMenu={this.isNarrow}\n            />\n        )\n    }\n\n    @action.bound private toggleMobileControls() {\n        this.showMobileControlsPopup = !this.showMobileControlsPopup\n    }\n\n    @action.bound private onResize() {\n        // Don't bother rendering if the container is hidden\n        // see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n        if (this.grapherContainerRef.current?.offsetParent === null) return\n\n        const oldIsNarrow = this.isNarrow\n        this.isNarrow = isNarrow()\n        this.updateGrapherBounds()\n\n        // If we changed between narrow and wide mode, we need to wait for CSS changes to kick in\n        // to properly calculate the new grapher bounds\n        if (this.isNarrow !== oldIsNarrow)\n            window.setTimeout(() => this.updateGrapherBounds(), 0)\n    }\n\n    // Todo: add better logic to maximize the size of the Grapher\n    private updateGrapherBounds() {\n        const grapherContainer = this.grapherContainerRef.current\n        if (grapherContainer)\n            this.grapherState.externalBounds = new Bounds(\n                0,\n                0,\n                grapherContainer.clientWidth,\n                grapherContainer.clientHeight\n            )\n    }\n\n    private showMobileControlsPopup = false\n    private get mobileCustomizeButton() {\n        return (\n            <a\n                className=\"btn btn-primary mobile-button\"\n                onClick={this.toggleMobileControls}\n                data-track-note=\"explorer_customize_chart_mobile\"\n            >\n                <FontAwesomeIcon icon={faChartLine} /> Customize chart\n            </a>\n        )\n    }\n\n    @action.bound private closeControls() {\n        this.showMobileControlsPopup = false\n    }\n\n    // todo: add tests for this and better tests for this class in general\n    @computed private get showHeaderElement() {\n        return (\n            this.showExplorerControls &&\n            this.explorerProgram.explorerTitle &&\n            this.panels.length > 0\n        )\n    }\n\n    override render() {\n        const { showExplorerControls, showHeaderElement } = this\n\n        return (\n            <div\n                className={classNames({\n                    Explorer: true,\n                    \"mobile-explorer\": this.isNarrow,\n                    HideControls: !showExplorerControls,\n                    \"is-embed\": this.props.isEmbeddedInAnOwidPage,\n                })}\n            >\n                {showHeaderElement && this.renderHeaderElement()}\n                {showHeaderElement && this.renderControlBar()}\n                {showExplorerControls && this.renderEntityPicker()}\n                {showExplorerControls &&\n                    this.isNarrow &&\n                    this.mobileCustomizeButton}\n                <div className=\"ExplorerFigure\" ref={this.grapherContainerRef}>\n                    <Grapher\n                        ref={this.grapherRef}\n                        grapherState={this.grapherState}\n                    />\n                </div>\n            </div>\n        )\n    }\n\n    @computed get editUrl() {\n        return `${EXPLORERS_ROUTE_FOLDER}/${this.props.slug}`\n    }\n\n    @computed get baseUrl() {\n        let archiveUrl = undefined\n        if (this.isOnArchivalPage) {\n            archiveUrl = this.props.archiveContext?.archiveUrl\n        }\n        return (\n            archiveUrl ??\n            `${this.bakedBaseUrl}/${EXPLORERS_ROUTE_FOLDER}/${this.props.slug}`\n        )\n    }\n\n    @computed get grapherTable() {\n        return this.grapherState?.tableAfterAuthorTimelineAndEntityFilter\n    }\n\n    entityPickerMetric: string | undefined =\n        this.initialQueryParams.pickerMetric\n    entityPickerSort: SortOrder | undefined = this.initialQueryParams.pickerSort\n\n    entityPickerTable: OwidTable | undefined = undefined\n    entityPickerTableIsLoading: boolean = false\n\n    private futureEntityPickerTable = new PromiseSwitcher<OwidTable>({\n        onResolve: (table) => {\n            this.entityPickerTable = table\n            this.entityPickerTableIsLoading = false\n        },\n        onReject: () => {\n            this.entityPickerTableIsLoading = false\n        },\n    })\n\n    private updateEntityPickerTable(): void {\n        // If we don't currently have a entity picker metric, then set pickerTable to the currently-used table anyways,\n        // so that when we start sorting by entity name we can infer that the column is a string column immediately.\n        const tableSlugToLoad = this.entityPickerMetric\n            ? this.getTableSlugOfColumnSlug(this.entityPickerMetric)\n            : this.explorerProgram.explorerGrapherConfig.tableSlug\n\n        this.entityPickerTableIsLoading = true\n        void this.futureEntityPickerTable.set(\n            this.tableLoader.get(tableSlugToLoad)\n        )\n    }\n\n    setEntityPicker({\n        metric,\n        sort,\n    }: {\n        metric: string | undefined\n        sort?: SortOrder\n    }) {\n        this.entityPickerMetric = metric\n        if (sort) this.entityPickerSort = sort\n    }\n\n    private tableSlugHasColumnSlug(\n        tableSlug: TableSlug | undefined,\n        columnSlug: ColumnSlug,\n        columnDefsByTableSlug: Map<TableSlug | undefined, CoreColumnDef[]>\n    ) {\n        return !!columnDefsByTableSlug\n            .get(tableSlug)\n            ?.find((def) => def.slug === columnSlug)\n    }\n\n    private getTableSlugOfColumnSlug(\n        columnSlug: ColumnSlug\n    ): TableSlug | undefined {\n        const columnDefsByTableSlug = this.explorerProgram.columnDefsByTableSlug\n\n        // In most cases, column slugs will be duplicated in the tables, e.g. entityName.\n        // Prefer the current Grapher table if it contains the column slug.\n        const grapherTableSlug =\n            this.explorerProgram.explorerGrapherConfig.tableSlug\n        if (\n            this.tableSlugHasColumnSlug(\n                grapherTableSlug,\n                columnSlug,\n                columnDefsByTableSlug\n            )\n        ) {\n            return grapherTableSlug\n        }\n        // ...otherwise, search all tables for the column slug\n        return this.explorerProgram.tableSlugs.find((tableSlug) =>\n            this.tableSlugHasColumnSlug(\n                tableSlug,\n                columnSlug,\n                columnDefsByTableSlug\n            )\n        )\n    }\n\n    @computed get entityPickerColumnDefs(): CoreColumnDef[] {\n        const allColumnDefs = _.uniqBy(\n            Array.from(\n                this.explorerProgram.columnDefsByTableSlug.values()\n            ).flat(),\n            (def) => def.slug\n        )\n\n        if (this.explorerProgram.pickerColumnSlugs) {\n            const columnDefsBySlug = keyMap(allColumnDefs, (def) => def.slug)\n            // Preserve the order of columns in the Explorer `pickerColumnSlugs`\n            return excludeUndefined(\n                this.explorerProgram.pickerColumnSlugs.map((slug) =>\n                    columnDefsBySlug.get(slug)\n                )\n            )\n        } else {\n            const discardColumnTypes = new Set([\n                ColumnTypeNames.Year,\n                ColumnTypeNames.Date,\n                ColumnTypeNames.Day,\n                ColumnTypeNames.EntityId,\n                ColumnTypeNames.EntityCode,\n            ])\n            return allColumnDefs.filter(\n                (def) =>\n                    (def.type === undefined ||\n                        !discardColumnTypes.has(def.type)) &&\n                    def.slug !== undefined\n            )\n        }\n    }\n\n    @computed get requiredColumnSlugs() {\n        return this.grapherState?.newSlugs ?? []\n    }\n}\n","import * as _ from \"lodash-es\"\nimport { SelectionArray } from \"@ourworldindata/grapher\"\nimport { Bounds, deserializeJSONFromHTML } from \"@ourworldindata/utils\"\nimport {\n    EMBEDDED_EXPLORER_DELIMITER,\n    EMBEDDED_EXPLORER_GRAPHER_CONFIGS,\n    EMBEDDED_EXPLORER_PARTIAL_GRAPHER_CONFIGS,\n    EMBEDDED_EXPLORER_VIEW_CONFIG_IDS,\n    EXPLORER_CONSTANTS_DELIMITER,\n} from \"./ExplorerConstants.js\"\nimport { ExplorerProps } from \"./Explorer.js\"\n\nexport async function buildExplorerProps(\n    html: string,\n    queryStr: string,\n    selection?: SelectionArray,\n    bounds?: Bounds\n) {\n    const explorerConstants = deserializeJSONFromHTML(\n        html,\n        EXPLORER_CONSTANTS_DELIMITER\n    )\n    let grapherConfigs = deserializeJSONFromHTML(\n        html,\n        EMBEDDED_EXPLORER_GRAPHER_CONFIGS\n    )\n    let partialGrapherConfigs = deserializeJSONFromHTML(\n        html,\n        EMBEDDED_EXPLORER_PARTIAL_GRAPHER_CONFIGS\n    )\n    const chartConfigIdByViewId = deserializeJSONFromHTML(\n        html,\n        EMBEDDED_EXPLORER_VIEW_CONFIG_IDS\n    ) as Record<string, string> | undefined\n    if (_.isArray(grapherConfigs)) {\n        grapherConfigs = grapherConfigs.map((grapherConfig) => ({\n            ...grapherConfig,\n            adminBaseUrl: explorerConstants.adminBaseUrl,\n            bakedGrapherURL: explorerConstants.bakedGrapherUrl,\n        }))\n    }\n    if (_.isArray(partialGrapherConfigs)) {\n        partialGrapherConfigs = partialGrapherConfigs.map((grapherConfig) => ({\n            ...grapherConfig,\n            adminBaseUrl: explorerConstants.adminBaseUrl,\n            bakedGrapherURL: explorerConstants.bakedGrapherUrl,\n        }))\n    }\n    const props: ExplorerProps = {\n        ...deserializeJSONFromHTML(html, EMBEDDED_EXPLORER_DELIMITER),\n        isEmbeddedInAnOwidPage: true,\n        adminBaseUrl: explorerConstants.adminBaseUrl,\n        bakedBaseUrl: explorerConstants.bakedBaseUrl,\n        bakedGrapherUrl: explorerConstants.bakedGrapherUrl,\n        dataApiUrl: explorerConstants.dataApiUrl,\n        catalogUrl: explorerConstants.catalogUrl,\n        grapherConfigs,\n        partialGrapherConfigs,\n        chartConfigIdByViewId,\n        queryStr,\n        selection: new SelectionArray(selection?.selectedEntityNames ?? []),\n        bounds: bounds,\n        staticBounds: bounds,\n    }\n    return props\n}\n","import { ALGOLIA_INDEX_PREFIX } from \"../../settings/clientSettings.js\"\nimport { SearchIndexName } from \"@ourworldindata/types\"\n\nexport const getIndexName = (index: SearchIndexName | string): string => {\n    if (ALGOLIA_INDEX_PREFIX !== \"\") {\n        return `${ALGOLIA_INDEX_PREFIX}-${index}`\n    }\n    return index\n}\n\nexport const DEFAULT_SEARCH_PLACEHOLDER =\n    \"Try “Life expectancy”, “Poverty Nigeria Vietnam”, “CO2 France”…\"\n","import * as _ from \"lodash-es\"\nimport * as R from \"remeda\"\nimport {\n    EntityName,\n    GRAPHER_TAB_QUERY_PARAMS,\n    GrapherQueryParams,\n    GrapherTabName,\n    GrapherTabQueryParam,\n    OwidGdocType,\n    TagGraphRoot,\n    TimeBounds,\n    SearchIndexName,\n    Filter,\n    FilterType,\n    ScoredFilter,\n    SearchResultType,\n    SearchTopicType,\n    SearchFacetFilters,\n    ChartRecordType,\n    SearchChartHit,\n    IChartHit,\n    SearchUrlParam,\n    SynonymMap,\n    Ngram,\n    WordPositioned,\n    ScoredFilterPositioned,\n} from \"@ourworldindata/types\"\nimport {\n    Url,\n    countriesByName,\n    FuzzySearch,\n    FuzzySearchResult,\n    getAllChildrenOfArea,\n    timeBoundToTimeBoundString,\n    queryParamsToStr,\n    omitUndefinedValues,\n} from \"@ourworldindata/utils\"\nimport {\n    generateSelectedEntityNamesParam,\n    isValidTabQueryParam,\n    mapGrapherTabNameToQueryParam,\n} from \"@ourworldindata/grapher\"\nimport { getIndexName } from \"./searchClient.js\"\nimport {\n    faBook,\n    faBookmark,\n    faBullhorn,\n    faDatabase,\n    faFileLines,\n    faFlag,\n    faLightbulb,\n    faTag,\n    IconDefinition,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { match, P } from \"ts-pattern\"\nimport { ForwardedRef } from \"react\"\nimport {\n    BAKED_BASE_URL,\n    BAKED_GRAPHER_URL,\n    EXPLORER_DYNAMIC_CONFIG_URL,\n    EXPLORER_DYNAMIC_THUMBNAIL_URL,\n    GRAPHER_DYNAMIC_CONFIG_URL,\n    GRAPHER_DYNAMIC_THUMBNAIL_URL,\n} from \"../../settings/clientSettings.js\"\nimport { EXPLORERS_ROUTE_FOLDER } from \"@ourworldindata/explorer\"\nimport {\n    PreviewVariant,\n    RichDataComponentVariant,\n} from \"./SearchChartHitRichDataTypes.js\"\n\n// Common English stop words that should be ignored in search\nconst STOP_WORDS = new Set([\n    \"the\",\n    \"in\", // matches \"India\"\n    \"is\", // matches \"Israel\"\n    \"of\",\n    \"and\", // matches \"Andorra\"\n    \"a\",\n    \"an\",\n    \"to\",\n    \"for\",\n    \"with\",\n    \"on\",\n    \"at\",\n    \"by\",\n    \"from\",\n    \"per\", // matches \"Peru\"\n    \"vs\",\n])\n\nexport function pickEntitiesForChartHit(\n    hit: IChartHit | SearchChartHit,\n    selectedRegionNames: string[] | undefined\n): EntityName[] {\n    if (!selectedRegionNames) return []\n\n    const availableEntities =\n        hit.originalAvailableEntities ?? hit.availableEntities\n    if (!availableEntities) return []\n\n    // Build intersection of selectedRegionNames and availableEntities, so we\n    // only select entities that are actually present in the chart\n    const filteredEntities = R.intersection(\n        selectedRegionNames,\n        availableEntities\n    )\n\n    // Reverse the order so that the last picked entity is first\n    const sortedEntities = [...filteredEntities].reverse()\n\n    return sortedEntities\n}\n\nconst generateGrapherTabQueryParam = ({\n    tab,\n    hasEntities,\n}: {\n    tab?: GrapherTabName | GrapherTabQueryParam\n    hasEntities: boolean\n}) => {\n    if (tab) {\n        return isValidTabQueryParam(tab)\n            ? tab\n            : mapGrapherTabNameToQueryParam(tab)\n    }\n\n    // If we have any entities pre-selected, we want to show the chart tab\n    if (hasEntities) return GRAPHER_TAB_QUERY_PARAMS.chart\n\n    return undefined\n}\n\nconst generateGrapherTimeQueryParam = ({\n    timeBounds,\n    timeMode = \"year\",\n}: {\n    timeBounds: TimeBounds\n    timeMode?: \"year\" | \"day\"\n}) => {\n    return timeBounds\n        .map((time) => timeBoundToTimeBoundString(time, timeMode === \"day\"))\n        .join(\"..\")\n}\n\nexport const getEntityQueryStr = (\n    entities: EntityName[] | null | undefined\n): string => {\n    const hasEntities = !!entities?.length\n\n    const countryParam = hasEntities\n        ? generateSelectedEntityNamesParam(entities)\n        : undefined\n\n    const queryParams = { country: countryParam } satisfies GrapherQueryParams\n\n    const url = Url.fromQueryParams(queryParams)\n\n    return url.queryStr\n}\n\nexport const toGrapherQueryParams = ({\n    entities = [],\n    tab,\n    timeBounds,\n    timeMode = \"year\",\n}: {\n    entities?: EntityName[]\n    tab?: GrapherTabName\n    timeBounds?: TimeBounds\n    timeMode?: \"year\" | \"day\"\n}): GrapherQueryParams => {\n    const hasEntities = entities.length > 0\n    return {\n        tab: generateGrapherTabQueryParam({ tab, hasEntities }),\n        country: hasEntities\n            ? generateSelectedEntityNamesParam(entities)\n            : undefined,\n        time: timeBounds\n            ? generateGrapherTimeQueryParam({ timeBounds, timeMode })\n            : undefined,\n    }\n}\n\nconst generateQueryStrForChartHit = ({\n    hit,\n    grapherParams,\n}: {\n    hit: SearchChartHit\n    grapherParams?: GrapherQueryParams\n}): string => {\n    const isExplorerView = hit.type === ChartRecordType.ExplorerView\n    const isMultiDimView = hit.type === ChartRecordType.MultiDimView\n\n    const viewQueryStr =\n        isExplorerView || isMultiDimView ? hit.queryParams : undefined\n    const grapherQueryStr = grapherParams\n        ? queryParamsToStr(grapherParams)\n        : undefined\n\n    // Remove leading '?' from query strings\n    const queryStrList = [viewQueryStr, grapherQueryStr]\n        .map((queryStr) => queryStr?.replace(/^\\?/, \"\"))\n        .filter((queryStr) => queryStr)\n\n    const queryStr = queryStrList.length > 0 ? \"?\" + queryStrList.join(\"&\") : \"\"\n\n    return queryStr\n}\n\nexport const constructChartUrl = ({\n    hit,\n    grapherParams,\n    overlay,\n}: {\n    hit: SearchChartHit\n    grapherParams?: GrapherQueryParams\n    overlay?: \"sources\" | \"download-data\"\n}): string => {\n    const viewQueryStr = generateQueryStrForChartHit({ hit, grapherParams })\n    const overlayQueryStr = overlay ? `overlay=${overlay}` : \"\"\n    const queryParts = [\n        viewQueryStr?.replace(/^\\?/, \"\"),\n        overlayQueryStr,\n    ].filter((queryStr) => queryStr)\n    const queryStr = queryParts.length > 0 ? `?${queryParts.join(\"&\")}` : \"\"\n\n    const isExplorerView = hit.type === ChartRecordType.ExplorerView\n    const basePath = isExplorerView\n        ? `${BAKED_BASE_URL}/${EXPLORERS_ROUTE_FOLDER}`\n        : BAKED_GRAPHER_URL\n\n    return `${basePath}/${hit.slug}${queryStr}`\n}\n\nexport const constructChartInfoUrl = ({\n    hit,\n    grapherParams,\n}: {\n    hit: SearchChartHit\n    grapherParams?: GrapherQueryParams\n}): string | undefined => {\n    const viewQueryStr = generateQueryStrForChartHit({ hit, grapherParams })\n\n    // Always ignore projected data to ensure that the data display shows a\n    // historical data point\n    const queryStr = viewQueryStr\n        ? `${viewQueryStr}&ignoreProjections`\n        : \"?ignoreProjections\"\n\n    const isExplorerView = hit.type === ChartRecordType.ExplorerView\n    const basePath = isExplorerView\n        ? EXPLORER_DYNAMIC_THUMBNAIL_URL\n        : GRAPHER_DYNAMIC_THUMBNAIL_URL\n\n    return `${basePath}/${hit.slug}.values.json${queryStr}`\n}\n\nexport const constructSearchResultUrl = ({\n    hit,\n    params,\n}: {\n    hit: SearchChartHit\n    params: {\n        version: number\n        variant: RichDataComponentVariant\n        entities?: EntityName[]\n        numDataTableRowsPerColumn?: number\n    }\n}): string | undefined => {\n    const viewQueryStr = generateQueryStrForChartHit({ hit })\n\n    let optionsQueryStr = `version=${params.version}&variant=${params.variant}&ignoreProjections`\n    if (params.entities && params.entities.length > 0)\n        optionsQueryStr += `&entities=${generateSelectedEntityNamesParam(params.entities)}`\n    if (params.numDataTableRowsPerColumn) {\n        optionsQueryStr += `&numDataTableRowsPerColumn=${params.numDataTableRowsPerColumn}`\n    }\n\n    // Combine view and options query strings\n    const queryParts = [\n        viewQueryStr?.replace(/^\\?/, \"\"),\n        optionsQueryStr,\n    ].filter((queryStr) => queryStr)\n    const queryStr = queryParts.length > 0 ? `?${queryParts.join(\"&\")}` : \"\"\n\n    const isExplorerView = hit.type === ChartRecordType.ExplorerView\n    const basePath = isExplorerView\n        ? EXPLORER_DYNAMIC_THUMBNAIL_URL\n        : GRAPHER_DYNAMIC_THUMBNAIL_URL\n\n    return `${basePath}/${hit.slug}.search-result.json${queryStr}`\n}\n\nexport const constructPreviewUrl = ({\n    hit,\n    grapherParams,\n    variant,\n    isMinimal,\n    fontSize,\n    imageWidth,\n    imageHeight,\n}: {\n    hit: SearchChartHit\n    grapherParams?: GrapherQueryParams\n    variant: PreviewVariant\n    isMinimal?: boolean\n    fontSize?: number\n    imageWidth?: number\n    imageHeight?: number\n}): string => {\n    const isExplorerView = hit.type === ChartRecordType.ExplorerView\n\n    const queryStr = generateQueryStrForChartHit({ hit, grapherParams })\n\n    const searchParams = new URLSearchParams(\n        omitUndefinedValues({\n            imType: variant === \"large\" ? \"uncaptioned\" : variant,\n            imMinimal: isMinimal ? \"1\" : \"0\",\n            imFontSize: fontSize?.toString(),\n            imWidth: imageWidth?.toString(),\n            imHeight: imageHeight?.toString(),\n        })\n    )\n    const fullQueryStr = queryStr\n        ? `${queryStr}&${searchParams}`\n        : `?${searchParams}`\n\n    const basePath = isExplorerView\n        ? EXPLORER_DYNAMIC_THUMBNAIL_URL\n        : GRAPHER_DYNAMIC_THUMBNAIL_URL\n\n    return `${basePath}/${hit.slug}.png${fullQueryStr}`\n}\n\nexport const constructConfigUrl = ({\n    hit,\n}: {\n    hit: SearchChartHit\n}): string | undefined => {\n    return match(hit)\n        .with(\n            { type: ChartRecordType.Chart },\n            (hit) => `${GRAPHER_DYNAMIC_CONFIG_URL}/${hit.slug}.config.json`\n        )\n        .with(\n            { type: ChartRecordType.MultiDimView },\n            (hit) =>\n                `${GRAPHER_DYNAMIC_CONFIG_URL}/by-uuid/${hit.chartConfigId}.config.json`\n        )\n        .with({ type: ChartRecordType.ExplorerView }, () => {\n            const queryStr = generateQueryStrForChartHit({ hit })\n            return `${EXPLORER_DYNAMIC_CONFIG_URL}/${hit.slug}.config.json${queryStr}`\n        })\n        .exhaustive()\n}\n\nexport const CHARTS_INDEX = getIndexName(\n    SearchIndexName.ExplorerViewsMdimViewsAndCharts\n)\nexport const PAGES_INDEX = getIndexName(SearchIndexName.Pages)\nexport const DATA_CATALOG_ATTRIBUTES = [\n    \"title\",\n    \"containerTitle\",\n    \"slug\",\n    \"availableEntities\",\n    \"originalAvailableEntities\",\n    \"variantName\",\n    \"type\",\n    \"queryParams\",\n    \"availableTabs\",\n    \"subtitle\",\n    \"chartConfigId\",\n    \"explorerType\",\n]\n\ntype SearchFacetAttribute =\n    | \"tags\"\n    | \"availableEntities\"\n    | \"datasetProducts\"\n    | \"datasetNamespaces\"\n    | \"datasetVersions\"\n    | \"datasetProducers\"\n\nexport function setToFacetFilters(\n    facetSet: Set<string>,\n    attribute: SearchFacetAttribute\n) {\n    return Array.from(facetSet).map((facet) => `${attribute}:${facet}`)\n}\n\nexport function getSelectableTopics(\n    tagGraph: TagGraphRoot,\n    selectedTopic: string | undefined\n): Set<string> {\n    if (!selectedTopic)\n        return new Set(tagGraph.children.map((child) => child.name))\n\n    const area = tagGraph.children.find((child) => child.name === selectedTopic)\n    if (area)\n        return new Set(getAllChildrenOfArea(area).map((node) => node.name))\n\n    return new Set()\n}\n\nexport const formatDisjunctiveFacetFilters = (\n    facets: Set<string>,\n    attribute: SearchFacetAttribute\n): SearchFacetFilters => {\n    // disjunction mode (A OR B): [[attribute:\"A\", attribute:\"B\"]]\n    return [setToFacetFilters(facets, attribute)]\n}\n\nexport const formatConjunctiveFacetFilters = (\n    facets: Set<string>,\n    attribute: SearchFacetAttribute\n): SearchFacetFilters => {\n    // conjunction mode (A AND B): [attribute:\"A\", attribute:\"B\"]\n    return setToFacetFilters(facets, attribute)\n}\n\n/**\n * Returns a facet filter that excludes Featured Metric records when a\n * free-text query is present. When there is no query (e.g. browsing by\n * topic), FMs are kept so they can surface at the top of topic pages.\n */\nexport function formatFeaturedMetricFacetFilter(\n    query: string\n): SearchFacetFilters {\n    return query.trim() ? [\"isFM:false\"] : []\n}\n\nexport function formatCountryFacetFilters(\n    countries: Set<string>,\n    requireAllCountries: boolean\n) {\n    const facetFilters: SearchFacetFilters = []\n    if (requireAllCountries) {\n        facetFilters.push(\n            ...formatConjunctiveFacetFilters(countries, \"availableEntities\")\n        )\n    } else {\n        facetFilters.push(\n            ...formatDisjunctiveFacetFilters(countries, \"availableEntities\")\n        )\n    }\n    // Don't show income group-specific FMs if no countries are selected\n    if (!countries.size) {\n        facetFilters.push(\"isIncomeGroupSpecificFM:false\")\n    }\n    return facetFilters\n}\n\nexport const formatTopicFacetFilters = (\n    topics: Set<string>\n): SearchFacetFilters => {\n    return formatDisjunctiveFacetFilters(topics, \"tags\")\n}\n\nexport function serializeSet(set: Set<string>) {\n    return set.size ? [...set].join(\"~\") : undefined\n}\n\nexport function deserializeSet(str: string | null): Set<string> {\n    return str ? new Set(str.split(\"~\")) : new Set()\n}\n\nexport function getFilterNamesOfType(\n    filters: Filter[],\n    type: FilterType\n): Set<string> {\n    return new Set(\n        filters\n            .filter((filter) => filter.type === type)\n            .map((filter) => filter.name)\n    )\n}\n\nexport const getFilterIcon = (filter: Filter) => {\n    return match(filter.type)\n        .with(FilterType.COUNTRY, () => {\n            // Some countries filters might be regions or historical countries,\n            // for which we don't show a flag. By looking for potential region\n            // names in the countries list, we're effectively filtering out\n            // non-country regions.\n            const countryCode = countriesByName()[filter.name]?.code\n            return countryCode ? (\n                <img\n                    className=\"flag\"\n                    aria-hidden={true}\n                    height={12}\n                    width={16}\n                    src={`/images/flags/${countryCode}.svg`}\n                />\n            ) : null\n        })\n        .with(FilterType.TOPIC, () => (\n            <span className=\"icon\">\n                <FontAwesomeIcon icon={faTag} />\n            </span>\n        ))\n        .with(\n            FilterType.DATASET_PRODUCT,\n            FilterType.DATASET_NAMESPACE,\n            FilterType.DATASET_VERSION,\n            FilterType.DATASET_PRODUCER,\n            () => (\n                <span className=\"icon\">\n                    <FontAwesomeIcon icon={faDatabase} />\n                </span>\n            )\n        )\n        .with(FilterType.QUERY, () => null)\n        .exhaustive()\n}\n\nexport function findTopicAndRegionFilters(\n    words: string[],\n    allRegionsNames: string[],\n    allTopics: string[],\n    selectedRegionNames: Set<string>,\n    selectedTopics: Set<string>,\n    synonymMap: SynonymMap,\n    sortOptions: { threshold: number; limit: number }\n): ScoredFilter[] {\n    const searchTerm = words.join(\" \")\n\n    const searchCountryTopics = (term: string) => {\n        const countryFilters: ScoredFilter[] = FuzzySearch.withKey(\n            allRegionsNames,\n            _.identity,\n            sortOptions\n        )\n            .searchResults(term)\n            .filter(\n                (result: FuzzySearchResult) =>\n                    !selectedRegionNames.has(result.target)\n            )\n            .map((result: FuzzySearchResult) => ({\n                ...createCountryFilter(result.target),\n                score: result.score,\n            }))\n\n        const topicFilters: ScoredFilter[] =\n            selectedTopics.size === 0\n                ? FuzzySearch.withKey(allTopics, (topic) => topic, sortOptions)\n                      .searchResults(term)\n                      .map((result: FuzzySearchResult) => ({\n                          ...createTopicFilter(result.target),\n                          score: result.score,\n                      }))\n                : []\n\n        return [...countryFilters, ...topicFilters]\n    }\n\n    // 1. Perform original search\n    let filters = searchCountryTopics(searchTerm)\n\n    // 2. Search with synonyms\n    const synonyms = synonymMap.get(searchTerm.toLowerCase())\n\n    if (synonyms && synonyms.length > 0) {\n        // Search with each synonym and combine results\n        for (const synonym of synonyms) {\n            const filtersFromSynonym = searchCountryTopics(synonym)\n            filters.push(...filtersFromSynonym)\n        }\n    }\n\n    // For each filter type, keep only the top results then recombine into a single array\n    filters = R.pipe(\n        filters,\n        R.groupBy((filter) => filter.type),\n        R.values,\n        R.flatMap((filtersOfType: ScoredFilter[]) =>\n            R.pipe(\n                filtersOfType,\n                R.sortBy([R.prop(\"score\"), \"desc\"]),\n                R.uniqueBy((filter) => filter.name),\n                R.take(sortOptions.limit)\n            )\n        )\n    )\n\n    return filters\n}\n\n/**\n * Detects words that are inside quoted phrases and should be excluded from filter matching.\n * Returns a set of word positions that should be ignored.\n */\nfunction getQuotedWordPositions(words: string[]): Set<number> {\n    const quotedPositions = new Set<number>()\n    const parts = words\n        .join(\" \")\n        .split(/(\"[^\"]*\"|\\S+)/)\n        .filter(Boolean)\n\n    let wordIndex = 0\n    for (const part of parts) {\n        if (part.startsWith('\"') && part.endsWith('\"')) {\n            // Count words in the quoted phrase\n            const wordCount = part.split(/\\s+/).filter(Boolean).length\n            for (let i = 0; i < wordCount; i++) {\n                quotedPositions.add(wordIndex + i)\n            }\n            wordIndex += wordCount\n        } else if (part.trim()) {\n            wordIndex++\n        }\n    }\n\n    return quotedPositions\n}\n\n/**\n * Generates autocomplete suggestions for a search query and identifies any unmatched portion of the query.\n *\n * This function uses fuzzy search to match partial query words against country names and topics,\n * filtering out any countries or topics that have already been selected as filters.\n * It progressively tries to match from increasing starting points in the query until it finds matches\n * or reaches the end of the query. This prioritizes matching whole phrases from the beginning, while still\n * allowing for matching just the latter parts of the query if necessary (e.g. \"air pollution\" would match \"Air Pollution\",\n * \"Indoor Air Pollution\" and \"Outdoor Air Pollution\" and prevent the \"pollution\" query from being run;\n * thus not returning \"Lead Pollution\" as a suggestion).\n *\n * **Search Process:**\n * 1. Splitting the query into words\n * 2. Finding the earliest word index where country and/or topic matches can be found using fuzzy search\n * 3. Returning the found matches as Filter objects, sorted with exact matches first\n * 4. Also returning the unmatched portion of the query (words before the match point)\n *\n * The search utilizes the same synonym definitions as Algolia to ensure consistent experiences\n * between Algolia-powered search (homepage autocomplete, nav bar autocomplete, search results) and local fuzzy search (filter autocomplete).\n * This includes bidirectional synonyms from synonym groups (e.g., \"ai\" ↔ \"artificial intelligence\")\n * and unidirectional country alternatives (e.g., \"us\" → \"united states\"). Results from both original\n * and synonym searches are combined, with duplicates removed while preserving the highest scores.\n *\n * **Result Prioritization:**\n * Exact matches (score = 1) are prioritized in the returned suggestions array, followed by\n * the original query (as a query filter), and then partial matches sorted by score descending.\n *\n * **Examples:**\n * - Query \"artificial intelligence\" → also searches for synonyms like \"ai\", \"machine learning\"\n * - Query \"co2 emissions\" → also searches for \"carbon dioxide\", \"c02\"\n * - Query \"us\" → \"us\" gets expanded to \"united states\" for better country matching\n *\n * @returns Object containing suggestion filters and any unmatched query portion\n */\nexport function suggestFiltersFromQuerySuffix(\n    query: string,\n    allRegionNames: string[],\n    allTopics: string[],\n    filters: Filter[], // currently active filters to exclude from suggestions\n    synonymMap: SynonymMap,\n    sortOptions: { threshold: number; limit: number } = {\n        threshold: 0.75,\n        limit: 3,\n    }\n): {\n    suggestions: Filter[]\n    unmatchedQuery: string\n} {\n    const selectedCountryNames = getFilterNamesOfType(\n        filters,\n        FilterType.COUNTRY\n    )\n    const selectedTopics = getFilterNamesOfType(filters, FilterType.TOPIC)\n\n    const queryWords = splitIntoWords(query)\n\n    if (!queryWords.length || queryWords[0] === \"\") {\n        return {\n            suggestions: [],\n            unmatchedQuery: \"\",\n        }\n    }\n\n    let matchedFilters: ScoredFilter[] = []\n    let matchStartIndex = queryWords.length\n\n    for (let i = 0; i < queryWords.length; i++) {\n        const wordsToSearch = queryWords.slice(i)\n        const filters = findTopicAndRegionFilters(\n            wordsToSearch,\n            allRegionNames,\n            allTopics,\n            selectedCountryNames,\n            selectedTopics,\n            synonymMap,\n            sortOptions\n        )\n\n        if (filters.length > 0) {\n            matchedFilters = filters\n            matchStartIndex = i\n            break\n        }\n    }\n\n    const unmatchedQuery = queryWords.slice(0, matchStartIndex).join(\" \")\n\n    const countryMatches = matchedFilters.filter(\n        (f) =>\n            // remove exact matches from country suggestions, as exact matches are\n            // already handled by automatic filters (see SearchDetectedFilters).\n            f.type === FilterType.COUNTRY &&\n            f.score !== 1 &&\n            // we matched on all regions to stop the iteration when a region is\n            // found, and avoid suggesting countries contained in that region's\n            // name (e.g. if \"East Germany\" is found, stop the iteration to\n            // prevent finding \"Germany\"). However, we don't want to pollute the\n            // autocomplete results with historical regions or aggregates, so we\n            // filter them out of the suggestions.\n            countriesByName()[f.name]\n    )\n\n    const topicMatches = matchedFilters.filter(\n        (f) => f.type === FilterType.TOPIC\n    )\n\n    const allMatches = [...countryMatches, ...topicMatches]\n\n    const [exactMatches, partialMatches] = R.partition(\n        allMatches,\n        (item) => item.score === 1\n    )\n\n    const sortedPartialMatches = partialMatches.sort(\n        (a, b) => b.score - a.score\n    )\n\n    const primaryFilters = [\n        exactMatches,\n        ...(query ? [createQueryFilter(query)] : []),\n    ]\n\n    const combinedFilters = [\n        ...(!unmatchedQuery ? primaryFilters : primaryFilters.reverse()).flat(),\n        ...sortedPartialMatches,\n    ]\n\n    return {\n        suggestions: combinedFilters,\n        unmatchedQuery,\n    }\n}\n\n/**\n * Validates whether an n-gram should be used for filter matching.\n * Filters out n-grams that:\n * - Overlap with already matched word positions\n * - Contain quoted words\n * - Start or end with stop words\n */\nconst isNotValidNgram = (\n    ngram: Ngram,\n    quotedWordPositions: Set<number>,\n    matchedWordPositions: Set<number>\n): boolean => {\n    return (\n        ngram.some(\n            ({ position }) =>\n                matchedWordPositions.has(position) ||\n                quotedWordPositions.has(position)\n        ) || hasLeadingTrailingStopWords(ngram)\n    )\n}\n\n/**\n * Generator function that yields n-grams from largest to smallest.)\n */\nfunction* generateNgrams(\n    tokens: WordPositioned[],\n    maxSize: number\n): Generator<Ngram> {\n    for (let n = maxSize; n >= 1; n--) {\n        for (let i = 0; i <= tokens.length - n; i++) {\n            yield tokens.slice(i, i + n)\n        }\n    }\n}\n\n/**\n * Gets filter suggestions using contiguous sequence of words (n-grams) for\n * multi-entity matching in a given query.\n *\n * Where `suggestFiltersFromQuerySuffix` progressively tries to match\n * from increasing starting points in the query and returns a list of possible\n * matches for that position (1 position, multiple matches), this function tries\n * to find the best match for all possible contiguous sequences of words\n * (n-grams) in the query (multiple positions, 1 match per position).\n *\n * Generates n-grams from 1 to 4 non stop-words, non quotes phrases,\n * prioritizing longer phrases over shorter ones. Uses overlap detection to\n * prevent the same word positions from being matched multiple times. Keeps a\n * single country or filter topic per n-gram then deduplicates overall results\n * by name.\n *\n * @returns Array of deduplicated scored filters\n */\nexport function extractFiltersFromQuery(\n    query: string,\n    allRegionNames: string[],\n    allTopics: string[],\n    filters: Filter[], // currently active filters to exclude from suggestions\n    sortOptions: { threshold: number; limit: number },\n    synonymMap: SynonymMap\n): ScoredFilterPositioned[] {\n    if (!query) return []\n\n    const selectedCountryNames = getFilterNamesOfType(\n        filters,\n        FilterType.COUNTRY\n    )\n    const selectedTopics = getFilterNamesOfType(filters, FilterType.TOPIC)\n\n    const allFilters: ScoredFilterPositioned[] = []\n    const matchedWordPositions = new Set<number>()\n\n    const words = splitIntoWords(query)\n\n    // Get positions of words inside quoted phrases\n    const quotedWordPositions = getQuotedWordPositions(words)\n\n    const tokens: WordPositioned[] = words.map((word, index) => ({\n        word,\n        position: index,\n    }))\n\n    const maxNgramSize = Math.min(tokens.length, 4) // Topics and countries mostly fit within 4 words\n\n    // Generate and process n-grams on-the-fly, prioritizing longer phrases\n    for (const ngram of generateNgrams(tokens, maxNgramSize)) {\n        if (isNotValidNgram(ngram, quotedWordPositions, matchedWordPositions)) {\n            continue\n        }\n\n        const ngramWords = R.map(ngram, R.prop(\"word\"))\n        const ngramPositions = R.map(ngram, R.prop(\"position\"))\n\n        const filtersFromNgram = findTopicAndRegionFilters(\n            ngramWords,\n            allRegionNames,\n            allTopics,\n            selectedCountryNames,\n            selectedTopics,\n            synonymMap,\n            sortOptions\n        )\n\n        const bestFilter = _.maxBy(filtersFromNgram, (f) => f.score)\n        if (bestFilter) {\n            // Store the original positions for later use in replacement logic\n            allFilters.push({\n                ...bestFilter,\n                positions: ngramPositions,\n            })\n            // Mark these word positions as matched to prevent overlaps\n            ngramPositions.forEach((pos: number) =>\n                matchedWordPositions.add(pos)\n            )\n        }\n    }\n\n    return R.uniqueBy(allFilters, (filter) => filter.name)\n}\n\nexport function createFilter(type: FilterType) {\n    return (name: string): Filter => ({ type, name })\n}\n\nexport const createCountryFilter = createFilter(FilterType.COUNTRY)\nexport const createTopicFilter = createFilter(FilterType.TOPIC)\nexport const createQueryFilter = createFilter(FilterType.QUERY)\nexport const createDatasetProductsFilter = createFilter(\n    FilterType.DATASET_PRODUCT\n)\nexport const createDatasetNamespaceFilter = createFilter(\n    FilterType.DATASET_NAMESPACE\n)\nexport const createDatasetVersionFilter = createFilter(\n    FilterType.DATASET_VERSION\n)\nexport const createDatasetProducerFilter = createFilter(\n    FilterType.DATASET_PRODUCER\n)\n\n/**\n * Returns a click handler that focuses an input element when clicking on the\n * target element or its children. If checkTargetEquality is true, only focus\n * the input if the click happened on the element where the handler is\n * attached (effectively not registering clicks on children).\n */\nexport const createFocusInputOnClickHandler = (\n    inputRef: ForwardedRef<HTMLInputElement>,\n\n    checkTargetEquality: boolean = false\n) => {\n    const handleClick = (e: React.MouseEvent) => {\n        if (\n            (!checkTargetEquality || e.target === e.currentTarget) &&\n            isCurrentRef(inputRef)\n        ) {\n            inputRef.current.focus()\n        }\n    }\n\n    return handleClick\n}\n\n/*\n * Type guard to check if a ref is a RefObject with a non-null current property\n */\nexport function isCurrentRef(\n    inputRef: ForwardedRef<HTMLInputElement>\n): inputRef is React.RefObject<HTMLInputElement> {\n    return (\n        inputRef !== null &&\n        typeof inputRef === \"object\" &&\n        \"current\" in inputRef &&\n        inputRef.current !== null\n    )\n}\n\nexport const getSearchAutocompleteId = () => \"search-autocomplete-listbox\"\n\nexport const getSearchAutocompleteItemId = (index: number) =>\n    index >= 0 ? `search-autocomplete-item-${index}` : undefined\n\nexport const buildFilterTestId = (\n    baseTestId: string,\n    filterType: FilterType,\n    filterName: string\n): string => {\n    // Topic names use \" and \" internally but are displayed as \" & \".\n    // See also getTopicFromUrl in search.steps.ts for the same\n    // transformation applied to URL params.\n    const displayName =\n        filterType === FilterType.TOPIC\n            ? filterName.replaceAll(\" and \", \" & \")\n            : filterName\n    return `${baseTestId}-${filterType}-${encodeURIComponent(displayName)}`\n}\n\nexport const getFilterAriaLabel = (\n    filter: Filter,\n    action: \"add\" | \"remove\"\n) => {\n    const actionName = action === \"add\" ? \"Add\" : \"Remove\"\n    const filterTypeLabel = match(filter.type)\n        .with(FilterType.DATASET_PRODUCT, () => \"dataset product\")\n        .with(FilterType.DATASET_NAMESPACE, () => \"dataset namespace\")\n        .with(FilterType.DATASET_VERSION, () => \"dataset version\")\n        .with(FilterType.DATASET_PRODUCER, () => \"dataset producer\")\n        .with(FilterType.COUNTRY, () => \"country\")\n        .with(FilterType.TOPIC, () => \"topic\")\n        .with(FilterType.QUERY, () => \"query\")\n        .exhaustive()\n\n    return match(filter.type)\n        .with(FilterType.QUERY, () => `Search for ${filter.name}`)\n        .with(\n            P.union(\n                FilterType.COUNTRY,\n                FilterType.TOPIC,\n                FilterType.DATASET_PRODUCT,\n                FilterType.DATASET_NAMESPACE,\n                FilterType.DATASET_VERSION,\n                FilterType.DATASET_PRODUCER\n            ),\n            () => `${actionName} ${filter.name} ${filterTypeLabel} filter`\n        )\n        .exhaustive()\n}\n\nexport const isValidResultType = (\n    value: string | undefined\n): value is SearchResultType => {\n    return Object.values(SearchResultType).includes(value as SearchResultType)\n}\n\nexport const getSelectedTopic = (filters: Filter[]): string | undefined => {\n    const selectedTopics = getFilterNamesOfType(filters, FilterType.TOPIC)\n    return selectedTopics.size > 0 ? [...selectedTopics][0] : undefined\n}\n\nexport function getSelectedTopicType(\n    filters: Filter[],\n    areaNames: string[]\n): SearchTopicType | null {\n    const selectedTopic = getSelectedTopic(filters)\n    if (!selectedTopic) return null\n\n    return areaNames.includes(selectedTopic)\n        ? SearchTopicType.Area\n        : SearchTopicType.Topic\n}\n\n/**\n * Checks if the search is in browsing mode, which is defined as having no query\n * and no filters applied.\n */\nexport const isBrowsing = (filters: Filter[], query: string) => {\n    return query.trim() === \"\" && filters.length === 0\n}\n/**\n * Checks if any dataset-related filters are present in the filters array.\n */\nexport const hasDatasetFilters = (filters: Filter[]): boolean => {\n    return filters.some(\n        (filter) =>\n            filter.type === FilterType.DATASET_PRODUCT ||\n            filter.type === FilterType.DATASET_NAMESPACE ||\n            filter.type === FilterType.DATASET_VERSION ||\n            filter.type === FilterType.DATASET_PRODUCER\n    )\n}\n\n/**\n * Computes the effective result type that should be displayed/used in the UI.\n * This respects constraints (e.g., \"all\" is not allowed when browsing) while\n * preserving the user's desired result type in the state.\n */\nexport const getEffectiveResultType = (\n    filters: Filter[],\n    query: string,\n    desiredResultType: SearchResultType\n): SearchResultType => {\n    return hasDatasetFilters(filters)\n        ? SearchResultType.DATA\n        : isBrowsing(filters, query) &&\n            desiredResultType === SearchResultType.ALL\n          ? SearchResultType.DATA\n          : desiredResultType\n}\n\nexport const getUrlParamNameForFilter = (filter: Filter) =>\n    match(filter.type)\n        .with(FilterType.COUNTRY, () => SearchUrlParam.COUNTRY)\n        .with(FilterType.TOPIC, () => SearchUrlParam.TOPIC)\n        .with(FilterType.QUERY, () => SearchUrlParam.QUERY)\n        .with(FilterType.DATASET_PRODUCT, () => SearchUrlParam.DATASET_PRODUCT)\n        .with(\n            FilterType.DATASET_NAMESPACE,\n            () => SearchUrlParam.DATASET_NAMESPACE\n        )\n        .with(FilterType.DATASET_VERSION, () => SearchUrlParam.DATASET_VERSION)\n        .with(\n            FilterType.DATASET_PRODUCER,\n            () => SearchUrlParam.DATASET_PRODUCER\n        )\n        .exhaustive()\n\n/**\n * Builds a fully qualified search URL for the provided autocomplete filter.\n *\n * - add  a `resultType=ALL` parameter to broaden search results beyond the\n *   default data-only view\n * - `COUNTRY` filters include unmatched query terms\n *\n * Examples:\n * - Country filter \"Kenya\" with unmatched query \"emissions\":\n *   \"?country=Kenya&q=emissions&resultType=all\"\n * - Topic filter \"Health\" (unmatched query discarded, if any):\n *   \"?topic=Health&resultType=all\"\n * - Query filter \"outdoor\": \"?q=outdoor&resultType=all\"\n *\n * See also `SearchAutocomplete.tsx` for similar logic in the search page.\n */\nexport const getItemUrlForFilter = (\n    filter: Filter,\n    unmatchedQuery: string\n): string => {\n    const filterParam = {\n        [getUrlParamNameForFilter(filter)]: filter.name,\n        [SearchUrlParam.RESULT_TYPE]: SearchResultType.ALL,\n    }\n\n    const queryParams = match(filter.type)\n        .with(FilterType.COUNTRY, () => ({\n            ...filterParam,\n            ...(unmatchedQuery && {\n                [SearchUrlParam.QUERY]: unmatchedQuery,\n            }),\n        }))\n        .with(\n            FilterType.QUERY,\n            FilterType.TOPIC,\n            FilterType.DATASET_PRODUCT, // only for exhaustiveness, not used in autocomplete\n            FilterType.DATASET_NAMESPACE, // only for exhaustiveness, not used in autocomplete\n            FilterType.DATASET_VERSION, // only for exhaustiveness, not used in autocomplete\n            FilterType.DATASET_PRODUCER, // only for exhaustiveness, not used in autocomplete\n            () => filterParam\n        )\n        .exhaustive()\n\n    return `${BAKED_BASE_URL}${SEARCH_BASE_PATH}${queryParamsToStr(queryParams)}`\n}\n\nexport function getPageTypeNameAndIcon(pageType: OwidGdocType): {\n    name: string\n    icon: IconDefinition\n} {\n    return match(pageType)\n        .with(OwidGdocType.AboutPage, () => ({\n            name: \"About\",\n            icon: faFileLines,\n        }))\n        .with(OwidGdocType.Article, () => ({ name: \"Article\", icon: faBook }))\n        .with(OwidGdocType.DataInsight, () => ({\n            name: \"Data Insight\",\n            icon: faLightbulb,\n        }))\n        .with(OwidGdocType.LinearTopicPage, OwidGdocType.TopicPage, () => ({\n            name: \"Topic page\",\n            icon: faBookmark,\n        }))\n        .with(OwidGdocType.Announcement, () => ({\n            name: \"Announcement\",\n            icon: faBullhorn,\n        }))\n        .with(OwidGdocType.Profile, () => ({\n            name: \"Country Profile\",\n            icon: faFlag,\n        }))\n        .with(\n            OwidGdocType.Author, // Should never be indexed\n            OwidGdocType.Fragment, // Should never be indexed\n            OwidGdocType.Homepage, // Should never be indexed\n            () => ({ name: \"\", icon: faFileLines })\n        )\n        .exhaustive()\n}\nexport const SEARCH_BASE_PATH = \"/search\"\n\nexport const getPaginationOffsetAndLength = (\n    pageParam: number,\n    firstPageSize: number,\n    laterPageSize: number\n) => {\n    const offset =\n        pageParam === 0 ? 0 : firstPageSize + (pageParam - 1) * laterPageSize\n    const length = pageParam === 0 ? firstPageSize : laterPageSize\n    return { offset, length }\n}\n\nexport const getNbPaginatedItemsRequested = (\n    currentPageIndex: number,\n    firstPageSize: number,\n    laterPageSize: number,\n    lastPageHits: number\n) => {\n    return currentPageIndex === 0\n        ? firstPageSize\n        : firstPageSize + (currentPageIndex - 1) * laterPageSize + lastPageHits\n}\n\n/**\n * Helper function to remove matched words and preceding stop words from query\n * when a filter is selected.\n */\nexport function removeMatchedWordsWithStopWords(\n    originalWords: string[],\n    matchedPositions: number[]\n): string {\n    if (!matchedPositions.length) return originalWords.join(\" \")\n\n    const wordsToRemove = new Set(matchedPositions)\n\n    // For each matched position, remove any consecutive stop words that immediately precede it\n    for (const matchedPos of matchedPositions) {\n        // Look backwards from this matched position to remove consecutive preceding stop words\n        for (let i = matchedPos - 1; i >= 0; i--) {\n            const word = originalWords[i].toLowerCase()\n            if (STOP_WORDS.has(word)) {\n                wordsToRemove.add(i)\n            } else {\n                // Stop when we hit a non-stop word\n                break\n            }\n        }\n    }\n\n    return originalWords\n        .filter((_, index) => !wordsToRemove.has(index))\n        .join(\" \")\n}\n\nexport const splitIntoWords = (text: string) => text.trim().split(/\\s+/)\n\nexport const isNotStopWord = (word: string) =>\n    !STOP_WORDS.has(word.toLowerCase())\n\nconst hasLeadingTrailingStopWords = (ngram: Ngram) => {\n    if (ngram.length === 0) return false\n    const firstWord = ngram[0].word.toLowerCase()\n    const lastWord = ngram[ngram.length - 1].word.toLowerCase()\n    return STOP_WORDS.has(firstWord) || STOP_WORDS.has(lastWord)\n}\n","import * as _ from \"lodash-es\"\nimport { GrapherAnalytics, splitPathForGA4 } from \"@ourworldindata/grapher\"\nimport {\n    EventCategory,\n    type SearchChartHit,\n    type SearchState,\n    type FlatArticleHit,\n    type ProfileHit,\n    type TopicPageHit,\n    type DataInsightHit,\n    type StackedArticleHit,\n    FilterType,\n    type UserSurveyExperimentArm,\n    type UserSurveyRoleAnswer,\n} from \"@ourworldindata/types\"\nimport { getFilterNamesOfType } from \"./search/searchUtils.js\"\nimport { findDOMParent } from \"@ourworldindata/utils\"\n\nexport class SiteAnalytics extends GrapherAnalytics {\n    logPageNotFoundError(url: string) {\n        this.logToGA({\n            event: EventCategory.SiteError,\n            eventAction: \"not_found\",\n            eventContext: url,\n        })\n    }\n\n    logInstantSearchClick({\n        query,\n        url,\n        position,\n    }: {\n        query: string\n        url: string\n        position: string\n    }) {\n        this.logToGA({\n            event: EventCategory.SiteInstantSearchClick,\n            eventAction: \"click\",\n            eventContext: JSON.stringify({ query, position }),\n            eventTarget: url,\n        })\n    }\n\n    logDodShown(id: string) {\n        this.logToGA({\n            event: EventCategory.DetailOnDemand,\n            eventAction: \"show\",\n            eventTarget: id,\n        })\n    }\n\n    logSearch(state: SearchState) {\n        const topics = Array.from(\n            getFilterNamesOfType(state.filters, FilterType.TOPIC)\n        )\n        const selectedCountryNames = Array.from(\n            getFilterNamesOfType(state.filters, FilterType.COUNTRY)\n        )\n\n        this.logToGA({\n            event: EventCategory.SiteSearch,\n            eventAction: \"search\",\n            searchQuery: state.query || \"\",\n            searchRequireAllCountries: state.requireAllCountries,\n            searchResultType: state.resultType || \"\",\n            searchTopics: topics.join(\"~\"),\n            searchSelectedCountries: selectedCountryNames.join(\"~\"),\n        })\n    }\n\n    logSiteSearchResultClick(\n        hit:\n            | SearchChartHit\n            | FlatArticleHit\n            | ProfileHit\n            | TopicPageHit\n            | DataInsightHit\n            | StackedArticleHit,\n        context: {\n            position: number\n            source: \"ribbon\" | \"search\" // \"ribbons\" are the per-area overview components present on the unparameterized browse pages for writing and data.\n            ribbonTag?: string\n            vizType?: string | null\n        }\n    ) {\n        const eventContext = {\n            ...context,\n            type: hit.type,\n        }\n\n        this.logToGA({\n            event: EventCategory.SiteSearchResultClick,\n            eventAction: \"click\",\n            eventContext: JSON.stringify(eventContext),\n            eventTarget: hit.slug,\n        })\n    }\n\n    logExpanderToggle(id: string, isOpen: boolean) {\n        this.logToGA({\n            event: EventCategory.Expander,\n            eventAction: isOpen ? \"open\" : \"close\",\n            eventTarget: id,\n        })\n    }\n\n    logSearchAutocompleteClick({\n        query,\n        position,\n        filterType,\n        filterName,\n        suggestions,\n        suggestionsTypes,\n        suggestionsCount,\n    }: {\n        query: string\n        position: number\n        filterType: FilterType\n        filterName: string\n        suggestions: string[]\n        suggestionsTypes: FilterType[]\n        suggestionsCount: number\n    }) {\n        this.logToGA({\n            event: EventCategory.SiteSearchAutocompleteClick,\n            eventAction: \"click\",\n            autocompleteQuery: query,\n            autocompletePosition: position,\n            autocompleteFilterType: filterType,\n            autocompleteFilterName: filterName,\n            autocompleteSuggestions: suggestions.join(\"~\"), // not JSON.stringify to avoid broken JSON above 100 character limit\n            autocompleteSuggestionsTypes: suggestionsTypes.join(\"~\"),\n            autocompleteSuggestionsCount: suggestionsCount,\n        })\n    }\n\n    logGuidedChartLinkClick(url: string) {\n        const { path: target, pathNext: targetNext } = splitPathForGA4(url)\n        this.logToGA({\n            event: EventCategory.SiteGuidedChartLinkClick,\n            eventAction: \"click\",\n            eventTarget: target,\n            eventTargetNext: targetNext,\n        })\n    }\n\n    logChartPreviewMouseover(chartUrl: string) {\n        const { path: target, pathNext: targetNext } = splitPathForGA4(chartUrl)\n        this.logToGA({\n            event: EventCategory.SiteChartPreviewMouseover,\n            eventAction: \"mouseover\",\n            eventTarget: target,\n            eventTargetNext: targetNext,\n        })\n    }\n\n    /**\n     * Logs analytics events for static visualization downloads.\n     * @param staticVizName - The unique name identifier of the static viz\n     * @param action - The type of download: 'image_download' for PNG exports,\n     *                 'data_download' for CSV downloads, or 'source_link_click' for external source links\n     * @param context - Optional context such as 'desktop'/'mobile' for images, or the URL for data/source links\n     */\n    logStaticVizDownload(\n        staticVizName: string,\n        action: \"image_download\" | \"data_download\" | \"source_link_click\",\n        context?: string\n    ) {\n        this.logToGA({\n            event: EventCategory.SiteStaticVizDownload,\n            eventAction: action,\n            eventTarget: staticVizName,\n            eventContext: context,\n        })\n    }\n\n    logUserSurveyRoleSubmit(\n        params: UserSurveyRoleAnswer & {\n            surveyName: string\n            responseId: string\n        }\n    ): void {\n        if (params.experimentArm === \"free-form\") {\n            this.logToGA({\n                event: EventCategory.SiteUserSurvey,\n                eventAction: \"user_role_submit\",\n                surveyName: params.surveyName,\n                responseId: params.responseId,\n                experimentArm: \"free-form\",\n                freeFormInput: params.freeFormInput,\n            })\n            return\n        }\n\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"user_role_submit\",\n            surveyName: params.surveyName,\n            responseId: params.responseId,\n            experimentArm: params.experimentArm,\n            optionId: params.optionId,\n            optionLabel: params.optionLabel,\n            optionIndex: params.optionIndex,\n            ...(params.freeFormInput !== undefined\n                ? { freeFormInput: params.freeFormInput }\n                : {}),\n        })\n    }\n\n    logUserSurveyRoleShow({\n        surveyName,\n        responseId,\n        experimentArm,\n    }: {\n        surveyName: string\n        responseId: string\n        experimentArm: UserSurveyExperimentArm\n    }): void {\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"user_role_show\",\n            surveyName,\n            responseId,\n            experimentArm,\n        })\n    }\n\n    logUserSurveyThankYouShow({\n        surveyName,\n        responseId,\n        experimentArm,\n    }: {\n        surveyName: string\n        responseId: string\n        experimentArm: UserSurveyExperimentArm\n    }): void {\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"thank_you_show\",\n            surveyName,\n            responseId,\n            experimentArm,\n        })\n    }\n\n    logUserSurveyFeedbackSubmit({\n        surveyName,\n        responseId,\n        experimentArm,\n    }: {\n        surveyName: string\n        responseId: string\n        experimentArm: UserSurveyExperimentArm\n    }): void {\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"feedback_submit\",\n            surveyName,\n            responseId,\n            experimentArm,\n        })\n    }\n\n    logUserSurveyRoleDismiss({\n        surveyName,\n        responseId,\n        experimentArm,\n    }: {\n        surveyName: string\n        responseId: string\n        experimentArm: UserSurveyExperimentArm\n    }): void {\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"user_role_dismiss\",\n            surveyName,\n            responseId,\n            experimentArm,\n        })\n    }\n\n    logUserSurveyThankYouDismiss({\n        surveyName,\n        responseId,\n        experimentArm,\n    }: {\n        surveyName: string\n        responseId: string\n        experimentArm: UserSurveyExperimentArm\n    }): void {\n        this.logToGA({\n            event: EventCategory.SiteUserSurvey,\n            eventAction: \"thank_you_dismiss\",\n            surveyName,\n            responseId,\n            experimentArm,\n        })\n    }\n\n    startClickTracking(): void {\n        // we use a data-track-note attr on elements to indicate that clicks on them should be tracked, and what to send\n        const dataTrackAttr = \"data-track-note\"\n        // we set a data-grapher-url attr on grapher charts to indicate the URL of the chart.\n        // this is helpful for tracking clicks on charts that are embedded in articles, where we would like to know\n        // which chart the user is interacting with\n        const dataGrapherUrlAttr = \"data-grapher-url\"\n        document.addEventListener(\n            \"click\",\n            async (ev) => {\n                const targetElement = ev.target as HTMLElement\n                const trackedElement = findDOMParent(\n                    targetElement,\n                    (el: HTMLElement) => el.getAttribute(dataTrackAttr) !== null\n                )\n                if (!trackedElement) return\n                const grapherUrlRaw = trackedElement\n                    .closest(`[${dataGrapherUrlAttr}]`)\n                    ?.getAttribute(dataGrapherUrlAttr)\n                if (grapherUrlRaw) {\n                    let grapherUrlObj:\n                        | {\n                              grapherUrl: string\n                              narrativeChartName: string\n                          }\n                        | undefined\n                    try {\n                        grapherUrlObj = JSON.parse(grapherUrlRaw)\n                    } catch (e) {\n                        console.warn(\"failed to parse grapherUrl\", e)\n                    }\n                    this.logGrapherClick(\n                        trackedElement.getAttribute(dataTrackAttr) || undefined,\n                        {\n                            label: trackedElement.innerText,\n                            grapherUrl: grapherUrlObj?.grapherUrl,\n                            narrativeChartName:\n                                grapherUrlObj?.narrativeChartName,\n                        }\n                    )\n                } else\n                    this.logSiteClick(\n                        trackedElement.getAttribute(dataTrackAttr) || undefined,\n                        trackedElement.innerText\n                    )\n            },\n            { capture: true, passive: true }\n        )\n    }\n\n    private logBrowserTranslationEvent(ctx: {\n        from: string | null\n        to: string | null\n    }) {\n        const browserLanguages =\n            navigator.languages || [navigator.language] || []\n\n        this.logToGA({\n            event: EventCategory.TranslatePage,\n            eventTarget: JSON.stringify(ctx),\n            eventContext: browserLanguages.join(\",\"),\n        })\n    }\n\n    // Add a listener to detect browser translation events\n    startDetectingBrowserTranslation() {\n        const htmlElement = document.documentElement\n        const initialLang = htmlElement.getAttribute(\"lang\")\n\n        const sendTranslationAnalyticsEvent = (\n            prevLang: string | null,\n            newLang: string | null\n        ) => {\n            const ctx = { from: prevLang, to: newLang }\n\n            // eslint-disable-next-line no-console\n            console.info(\"Browser translation detected\", ctx)\n\n            this.logBrowserTranslationEvent(ctx)\n        }\n\n        // Create a MutationObserver to watch for changes to the HTML which are signposts\n        // of a translation service / browser translation.\n        const observer = new MutationObserver((mutations) => {\n            // Chrome sometimes fires two of the same mutations in a row, so we deduplicate here:\n            const mutationsUniq = _.uniqBy(mutations, (m) =>\n                [m.attributeName, m.oldValue].join(\"-\")\n            )\n\n            mutationsUniq.forEach((mutation) => {\n                if (!mutation.attributeName) return\n\n                const target = mutation.target as HTMLElement\n                const newValue = target.getAttribute(mutation.attributeName)\n\n                let prevLang: string | null = null,\n                    newLang: string | null = null\n\n                if (\n                    mutation.type === \"attributes\" &&\n                    mutation.attributeName === \"lang\"\n                ) {\n                    newLang = newValue\n                    prevLang = mutation.oldValue\n\n                    if (prevLang === newLang) {\n                        // In Safari, it sometimes happens that we receive mutations that don't change the lang attribute\n                        return\n                    }\n\n                    sendTranslationAnalyticsEvent(prevLang, newLang)\n                } else if (\n                    mutation.type === \"attributes\" &&\n                    mutation.attributeName === \"_msthash\"\n                ) {\n                    if (mutation.oldValue === null) {\n                        prevLang = initialLang\n                    } else if (newValue === null) {\n                        newLang = initialLang\n                    } else {\n                        // Don't handle events where both old and new values are non-null - this might mean that the title changed and was re-translated\n                        return\n                    }\n\n                    sendTranslationAnalyticsEvent(prevLang, newLang)\n                }\n            })\n        })\n\n        // Observe <html lang=\"...\">, which is changed by most browser translation services\n        observer.observe(htmlElement, {\n            attributes: true,\n            attributeFilter: [\"lang\"],\n            attributeOldValue: true,\n        })\n\n        // Observe <title _msthash=\"...\">, which is changed by Microsoft Edge translation\n        const titleElement = document.head.querySelector(\"title\")\n        if (titleElement) {\n            observer.observe(titleElement, {\n                attributes: true,\n                attributeFilter: [\"_msthash\"],\n                attributeOldValue: true,\n            })\n        }\n    }\n}\n","import * as Sentry from \"@sentry/react\"\n\n/**\n * React and the browser-integrated Google Translate don't love each other:\n * In a translated page, some interactions entirely break the page.\n * Since Google Translate actually works quite well for OWID and we would like to support that use\n * case, we're monkey-patching the global Node.removeChild and Node.insertBefore instead.\n * It's a hack that has been suggested by Dan Abramov himself: https://github.com/facebook/react/issues/11538#issuecomment-417504600\n * -@MarcelGerber, 2021-09-06\n */\nexport const runMonkeyPatchForGoogleTranslate = (): void => {\n    const nodeToString = (elem: Element | Node): string | null => {\n        if (elem instanceof Element)\n            // https://stackoverflow.com/a/34639030/10670163\n            return elem.innerHTML\n                ? elem.outerHTML.slice(\n                      0,\n                      elem.outerHTML.indexOf(elem.innerHTML)\n                  )\n                : elem.outerHTML\n        else return elem.textContent\n    }\n\n    if (typeof Node === \"function\" && Node.prototype) {\n        const originalRemoveChild = Node.prototype.removeChild\n        Node.prototype.removeChild = function <T extends Node>(child: T): T {\n            if (child.parentNode !== this) {\n                console?.error(\n                    \"Cannot remove a child from a different parent\",\n                    child,\n                    this\n                )\n                Sentry.captureMessage(\n                    \"removeChild: Cannot remove a child from a different parent\",\n                    {\n                        extra: {\n                            child: nodeToString(child),\n                            this: nodeToString(this),\n                        },\n                    }\n                )\n                return child\n            }\n            return originalRemoveChild.apply(this, [child]) as T\n        }\n\n        const originalInsertBefore = Node.prototype.insertBefore\n        Node.prototype.insertBefore = function <T extends Node>(\n            newNode: T,\n            referenceNode: Node | null\n        ) {\n            if (referenceNode && referenceNode.parentNode !== this) {\n                console?.error(\n                    \"Cannot insert before a reference node from a different parent\",\n                    referenceNode,\n                    this\n                )\n                Sentry.captureMessage(\n                    \"insertBefore: Cannot insert before a reference node from a different parent\",\n                    {\n                        extra: {\n                            child: nodeToString(referenceNode),\n                            this: nodeToString(this as Element),\n                        },\n                    }\n                )\n                return newNode\n            }\n            return originalInsertBefore.apply(this, [\n                newNode,\n                referenceNode,\n            ]) as T\n        }\n    }\n}\n","/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\nconst prefix = \"fab\";\nconst faMonero = {\n  prefix: 'fab',\n  iconName: 'monero',\n  icon: [496, 512, [], \"f3d0\", \"M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z\"]\n};\nconst faHooli = {\n  prefix: 'fab',\n  iconName: 'hooli',\n  icon: [640, 512, [], \"f427\", \"M144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z\"]\n};\nconst faYelp = {\n  prefix: 'fab',\n  iconName: 'yelp',\n  icon: [384, 512, [], \"f1e9\", \"M42.9 240.32l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.45a22.79 22.79 0 0 1-28.21-19.6 197.16 197.16 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.25a199.45 199.45 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.94 490l3.9-110.82c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.34-109.92l58.81 94a22.93 22.93 0 0 0 34 5.5 198.36 198.36 0 0 0 52.71-67.61A23 23 0 0 0 364.17 370l-105.42-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.33-132.23a197.44 197.44 0 0 0-50.41-69.31 22.85 22.85 0 0 0-34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.63a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0-9.9 32l104.12 180.44c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0-24.5-22.8 320.37 320.37 0 0 0-112.33 30.1z\"]\n};\nconst faCcVisa = {\n  prefix: 'fab',\n  iconName: 'cc-visa',\n  icon: [576, 512, [], \"f1f0\", \"M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z\"]\n};\nconst faLastfm = {\n  prefix: 'fab',\n  iconName: 'lastfm',\n  icon: [512, 512, [], \"f202\", \"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\"]\n};\nconst faShopware = {\n  prefix: 'fab',\n  iconName: 'shopware',\n  icon: [512, 512, [], \"f5b5\", \"M403.5 455.41A246.17 246.17 0 0 1 256 504C118.81 504 8 393 8 256 8 118.81 119 8 256 8a247.39 247.39 0 0 1 165.7 63.5 3.57 3.57 0 0 1-2.86 6.18A418.62 418.62 0 0 0 362.13 74c-129.36 0-222.4 53.47-222.4 155.35 0 109 92.13 145.88 176.83 178.73 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.09a3.64 3.64 0 0 0-1.27-2.44c-51.76-43-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.09z\"]\n};\nconst faCreativeCommonsNc = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc',\n  icon: [496, 512, [], \"f4e8\", \"M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\"]\n};\nconst faAws = {\n  prefix: 'fab',\n  iconName: 'aws',\n  icon: [640, 512, [], \"f375\", \"M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z\"]\n};\nconst faRedhat = {\n  prefix: 'fab',\n  iconName: 'redhat',\n  icon: [512, 512, [], \"f7bc\", \"M341.52 285.56c33.65 0 82.34-6.94 82.34-47 .22-6.74.86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.11 228.47 106.11M429 254.84c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.74.08-235.91-73.65-235.91-122.33a49.55 49.55 0 0 1 4.06-19.72C58.56 200.86 0 208.93 0 260.63c0 84.67 200.63 189 359.49 189 121.79 0 152.51-55.08 152.51-98.58 0-34.21-29.59-73.05-82.93-96.24\"]\n};\nconst faYoast = {\n  prefix: 'fab',\n  iconName: 'yoast',\n  icon: [448, 512, [], \"f2b1\", \"M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z\"]\n};\nconst faCloudflare = {\n  prefix: 'fab',\n  iconName: 'cloudflare',\n  icon: [640, 512, [], \"e07d\", \"M407.906,319.913l-230.8-2.928a4.58,4.58,0,0,1-3.632-1.926,4.648,4.648,0,0,1-.494-4.147,6.143,6.143,0,0,1,5.361-4.076L411.281,303.9c27.631-1.26,57.546-23.574,68.022-50.784l13.286-34.542a7.944,7.944,0,0,0,.524-2.936,7.735,7.735,0,0,0-.164-1.631A151.91,151.91,0,0,0,201.257,198.4,68.12,68.12,0,0,0,94.2,269.59C41.924,271.106,0,313.728,0,366.12a96.054,96.054,0,0,0,1.029,13.958,4.508,4.508,0,0,0,4.445,3.871l426.1.051c.043,0,.08-.019.122-.02a5.606,5.606,0,0,0,5.271-4l3.273-11.265c3.9-13.4,2.448-25.8-4.1-34.9C430.124,325.423,420.09,320.487,407.906,319.913ZM513.856,221.1c-2.141,0-4.271.062-6.391.164a3.771,3.771,0,0,0-3.324,2.653l-9.077,31.193c-3.9,13.4-2.449,25.786,4.1,34.89,6.02,8.4,16.054,13.323,28.238,13.9l49.2,2.939a4.491,4.491,0,0,1,3.51,1.894,4.64,4.64,0,0,1,.514,4.169,6.153,6.153,0,0,1-5.351,4.075l-51.125,2.939c-27.754,1.27-57.669,23.574-68.145,50.784l-3.695,9.606a2.716,2.716,0,0,0,2.427,3.68c.046,0,.088.017.136.017h175.91a4.69,4.69,0,0,0,4.539-3.37,124.807,124.807,0,0,0,4.682-34C640,277.3,583.524,221.1,513.856,221.1Z\"]\n};\nconst faUps = {\n  prefix: 'fab',\n  iconName: 'ups',\n  icon: [384, 512, [], \"f7e0\", \"M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4.6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2.6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z\"]\n};\nconst faPixiv = {\n  prefix: 'fab',\n  iconName: 'pixiv',\n  icon: [448, 512, [], \"e640\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm171.5 84c41 0 76.3 12.9 101.4 35.2l0 0c25.2 22.2 39.8 54.1 39.8 88.8c.1 35.3-16.6 66.3-42.4 87c-25.9 20.8-60.6 32.4-98.8 32.4c-43.5 0-83.8-16.1-83.8-16.1v51.8c7.4 2.2 19.7 7 11.9 14.8H104.8c-7.7-7.8 3.6-12.4 12.1-14.8V175.5C97.1 190.9 87 204.3 81.8 214.2c6 19.4-5.3 18.5-5.3 18.5L56 199.7s72.7-83.7 179.5-83.7zm-3.6 222.9c30 0 56-11.3 73.9-29.2c17.9-18.1 27.9-41.6 28-70.2c-.1-29.3-9.5-54.6-26.7-73.6c-17.2-18.9-42.7-31.3-75.2-31.4c-26.7-.1-59.8 9-80.2 23.7V323.1c18.6 9.3 46.8 15.9 80.2 15.8z\"]\n};\nconst faWpexplorer = {\n  prefix: 'fab',\n  iconName: 'wpexplorer',\n  icon: [512, 512, [], \"f2de\", \"M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\"]\n};\nconst faDyalog = {\n  prefix: 'fab',\n  iconName: 'dyalog',\n  icon: [416, 512, [], \"f399\", \"M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z\"]\n};\nconst faBity = {\n  prefix: 'fab',\n  iconName: 'bity',\n  icon: [496, 512, [], \"f37a\", \"M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z\"]\n};\nconst faStackpath = {\n  prefix: 'fab',\n  iconName: 'stackpath',\n  icon: [448, 512, [], \"f842\", \"M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.84c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18.56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.38-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.18h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.94 325L347 186.78h-31.09L268 325zm106.52-138.22h-31.09L325.46 325h29.94z\"]\n};\nconst faBuysellads = {\n  prefix: 'fab',\n  iconName: 'buysellads',\n  icon: [448, 512, [], \"f20d\", \"M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z\"]\n};\nconst faFirstOrder = {\n  prefix: 'fab',\n  iconName: 'first-order',\n  icon: [448, 512, [], \"f2b0\", \"M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\"]\n};\nconst faModx = {\n  prefix: 'fab',\n  iconName: 'modx',\n  icon: [448, 512, [], \"f285\", \"M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z\"]\n};\nconst faGuilded = {\n  prefix: 'fab',\n  iconName: 'guilded',\n  icon: [448, 512, [], \"e07e\", \"M443.427,64H4.571c0,103.26,22.192,180.06,43.418,222.358C112.046,414.135,224,448,225.256,448a312.824,312.824,0,0,0,140.55-103.477c25.907-33.923,53.1-87.19,65.916-145.761H171.833c4.14,36.429,22.177,67.946,45.1,86.944h88.589c-17.012,28.213-48.186,54.4-80.456,69.482-31.232-13.259-69.09-46.544-96.548-98.362-26.726-53.833-27.092-105.883-27.092-105.883H437.573A625.91,625.91,0,0,0,443.427,64Z\"]\n};\nconst faVnv = {\n  prefix: 'fab',\n  iconName: 'vnv',\n  icon: [640, 512, [], \"f40b\", \"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z\"]\n};\nconst faSquareJs = {\n  prefix: 'fab',\n  iconName: 'square-js',\n  icon: [448, 512, [\"js-square\"], \"f3b9\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6c13.8 0 22.6-5.4 22.6-26.5V237.7h42.1V381.4c0 43.6-25.6 63.5-62.9 63.5zm85.8-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6c17.4 0 28.6-8.7 28.6-20.8c0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5c0-31.6 24.1-55.6 61.6-55.6c26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18c-12.3 0-20.1 7.8-20.1 18c0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2c0 37.8-29.8 58.6-69.7 58.6c-39.1 0-64.4-18.6-76.7-43z\"]\n};\nconst faJsSquare = faSquareJs;\nconst faMicrosoft = {\n  prefix: 'fab',\n  iconName: 'microsoft',\n  icon: [448, 512, [], \"f3ca\", \"M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z\"]\n};\nconst faQq = {\n  prefix: 'fab',\n  iconName: 'qq',\n  icon: [448, 512, [], \"f1d6\", \"M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z\"]\n};\nconst faOrcid = {\n  prefix: 'fab',\n  iconName: 'orcid',\n  icon: [512, 512, [], \"f8d2\", \"M294.75 188.19h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.76h-29.84v-207.5h29.84zm-14.92-231.14a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1-19.57 19.57zM300 369h-81V161.26h80.6c76.73 0 110.44 54.83 110.44 103.85C410 318.39 368.38 369 300 369z\"]\n};\nconst faJava = {\n  prefix: 'fab',\n  iconName: 'java',\n  icon: [384, 512, [], \"f4e4\", \"M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z\"]\n};\nconst faInvision = {\n  prefix: 'fab',\n  iconName: 'invision',\n  icon: [448, 512, [], \"f7b0\", \"M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9.7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3.1-14.3.9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z\"]\n};\nconst faCreativeCommonsPdAlt = {\n  prefix: 'fab',\n  iconName: 'creative-commons-pd-alt',\n  icon: [496, 512, [], \"f4ed\", \"M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6.9 41.6z\"]\n};\nconst faCentercode = {\n  prefix: 'fab',\n  iconName: 'centercode',\n  icon: [512, 512, [], \"f380\", \"M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\"]\n};\nconst faGlideG = {\n  prefix: 'fab',\n  iconName: 'glide-g',\n  icon: [448, 512, [], \"f2a6\", \"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\"]\n};\nconst faDrupal = {\n  prefix: 'fab',\n  iconName: 'drupal',\n  icon: [448, 512, [], \"f1a9\", \"M303.973,108.136C268.2,72.459,234.187,38.35,224.047,0c-9.957,38.35-44.25,72.459-80.019,108.136C90.467,161.7,29.716,222.356,29.716,313.436c-2.337,107.3,82.752,196.18,190.053,198.517S415.948,429.2,418.285,321.9q.091-4.231,0-8.464C418.285,222.356,357.534,161.7,303.973,108.136Zm-174.326,223a130.282,130.282,0,0,0-15.211,24.153,4.978,4.978,0,0,1-3.319,2.766h-1.659c-4.333,0-9.219-8.481-9.219-8.481h0c-1.29-2.028-2.489-4.149-3.687-6.361l-.83-1.752c-11.247-25.72-1.475-62.318-1.475-62.318h0a160.585,160.585,0,0,1,23.231-49.873A290.8,290.8,0,0,1,138.5,201.613l9.219,9.219,43.512,44.434a4.979,4.979,0,0,1,0,6.638L145.78,312.33h0Zm96.612,127.311a67.2,67.2,0,0,1-49.781-111.915c14.2-16.871,31.528-33.464,50.334-55.313,22.309,23.785,36.875,40.1,51.164,57.986a28.413,28.413,0,0,1,2.95,4.425,65.905,65.905,0,0,1,11.984,37.981,66.651,66.651,0,0,1-66.466,66.836ZM352.371,351.6h0a7.743,7.743,0,0,1-6.176,5.347H344.9a11.249,11.249,0,0,1-6.269-5.07h0a348.21,348.21,0,0,0-39.456-48.952L281.387,284.49,222.3,223.185a497.888,497.888,0,0,1-35.4-36.322,12.033,12.033,0,0,0-.922-1.382,35.4,35.4,0,0,1-4.7-9.219V174.51a31.346,31.346,0,0,1,9.218-27.656c11.432-11.431,22.955-22.954,33.833-34.939,11.984,13.275,24.8,26,37.428,38.627h0a530.991,530.991,0,0,1,69.6,79.1,147.494,147.494,0,0,1,27.011,83.8A134.109,134.109,0,0,1,352.371,351.6Z\"]\n};\nconst faJxl = {\n  prefix: 'fab',\n  iconName: 'jxl',\n  icon: [448, 512, [], \"e67b\", \"M412.2 32H35.8C16 32 0 48 0 67.8V444.2C0 464 16 480 35.8 480H412.2c19.8 0 35.8-16 35.8-35.8V67.8C448 48 432 32 412.2 32zM378.6 333.7c0 40.2-32.6 72.8-72.8 72.8H70.2c0-40.2 32.6-72.8 72.8-72.8H378.6zm0-113.9c0 40.2-32.6 72.8-72.8 72.8H70.2c0-40.2 32.6-72.8 72.8-72.8H378.6zm0-113.9c0 40.2-32.6 72.8-72.8 72.8H70.2c0-40.2 32.6-72.8 72.8-72.8H378.6z\"]\n};\nconst faDartLang = {\n  prefix: 'fab',\n  iconName: 'dart-lang',\n  icon: [512, 512, [], \"e693\", \"M378.6 78.9c-2.8-.1-5.6-.2-8.5-.2l-264.1 0 143.2-72C256.6 2.3 268 0 279.6 0c13.5 0 29.4 9.2 37 16.8l62 62zM107.3 96.5l262.8 0c16 0 25.4 1.4 35.4 9.3L512 212.2 512 421l-79.3 .7L107.3 96.5zM96.5 373l0-262.2L420.3 434.6l.7 77.4-212.2 0-98.1-98.2 0 0C99.4 402.5 96.5 398.5 96.5 373zM78.7 105.3l0 267.7c0 3.3 .1 6.3 .2 9.1l-62-62C6.5 309.3 0 294.3 0 279.6c0-6.8 3.9-17.5 6.7-23.6l72-150.7z\"]\n};\nconst faHireAHelper = {\n  prefix: 'fab',\n  iconName: 'hire-a-helper',\n  icon: [512, 512, [], \"f3b0\", \"M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\"]\n};\nconst faCreativeCommonsBy = {\n  prefix: 'fab',\n  iconName: 'creative-commons-by',\n  icon: [496, 512, [], \"f4e7\", \"M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z\"]\n};\nconst faUnity = {\n  prefix: 'fab',\n  iconName: 'unity',\n  icon: [448, 512, [], \"e049\", \"M243.583 91.6027L323.695 138.384C326.575 140.026 326.68 144.583 323.695 146.225L228.503 201.854C225.623 203.55 222.22 203.444 219.549 201.854L124.357 146.225C121.425 144.636 121.373 139.973 124.357 138.384L204.417 91.6027V0L0 119.417V358.252L78.3843 312.477V218.914C78.3319 215.576 82.2066 213.192 85.0865 214.993L180.279 270.622C183.159 272.318 184.782 275.338 184.782 278.464V389.669C184.834 393.007 180.959 395.391 178.079 393.589L97.9673 346.808L19.583 392.583L224 512L428.417 392.583L350.033 346.808L269.921 393.589C267.093 395.338 263.114 393.06 263.218 389.669V278.464C263.218 275.126 265.051 272.159 267.721 270.622L362.914 214.993C365.741 213.245 369.72 215.47 369.616 218.914V312.477L448 358.252V119.417L243.583 0V91.6027Z\"]\n};\nconst faWhmcs = {\n  prefix: 'fab',\n  iconName: 'whmcs',\n  icon: [448, 512, [], \"f40d\", \"M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\"]\n};\nconst faRocketchat = {\n  prefix: 'fab',\n  iconName: 'rocketchat',\n  icon: [576, 512, [], \"f3e8\", \"M284.046,224.8a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,284.046,224.8Zm-110.45,0a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,173.6,224.8Zm220.923,0a34.114,34.114,0,1,0,34.317,34.113A34.215,34.215,0,0,0,394.519,224.8Zm153.807-55.319c-15.535-24.172-37.31-45.57-64.681-63.618-52.886-34.817-122.374-54-195.666-54a405.975,405.975,0,0,0-72.032,6.357,238.524,238.524,0,0,0-49.51-36.588C99.684-11.7,40.859.711,11.135,11.421A14.291,14.291,0,0,0,5.58,34.782C26.542,56.458,61.222,99.3,52.7,138.252c-33.142,33.9-51.112,74.776-51.112,117.337,0,43.372,17.97,84.248,51.112,118.148,8.526,38.956-26.154,81.816-47.116,103.491a14.284,14.284,0,0,0,5.555,23.34c29.724,10.709,88.549,23.147,155.324-10.2a238.679,238.679,0,0,0,49.51-36.589A405.972,405.972,0,0,0,288,460.14c73.313,0,142.8-19.159,195.667-53.975,27.371-18.049,49.145-39.426,64.679-63.619,17.309-26.923,26.07-55.916,26.07-86.125C574.394,225.4,565.634,196.43,548.326,169.485ZM284.987,409.9a345.65,345.65,0,0,1-89.446-11.5l-20.129,19.393a184.366,184.366,0,0,1-37.138,27.585,145.767,145.767,0,0,1-52.522,14.87c.983-1.771,1.881-3.563,2.842-5.356q30.258-55.68,16.325-100.078c-32.992-25.962-52.778-59.2-52.778-95.4,0-83.1,104.254-150.469,232.846-150.469s232.867,67.373,232.867,150.469C517.854,342.525,413.6,409.9,284.987,409.9Z\"]\n};\nconst faVk = {\n  prefix: 'fab',\n  iconName: 'vk',\n  icon: [448, 512, [], \"f189\", \"M31.4907 63.4907C0 94.9813 0 145.671 0 247.04V264.96C0 366.329 0 417.019 31.4907 448.509C62.9813 480 113.671 480 215.04 480H232.96C334.329 480 385.019 480 416.509 448.509C448 417.019 448 366.329 448 264.96V247.04C448 145.671 448 94.9813 416.509 63.4907C385.019 32 334.329 32 232.96 32H215.04C113.671 32 62.9813 32 31.4907 63.4907ZM75.6 168.267H126.747C128.427 253.76 166.133 289.973 196 297.44V168.267H244.16V242C273.653 238.827 304.64 205.227 315.093 168.267H363.253C359.313 187.435 351.46 205.583 340.186 221.579C328.913 237.574 314.461 251.071 297.733 261.227C316.41 270.499 332.907 283.63 346.132 299.751C359.357 315.873 369.01 334.618 374.453 354.747H321.44C316.555 337.262 306.614 321.61 292.865 309.754C279.117 297.899 262.173 290.368 244.16 288.107V354.747H238.373C136.267 354.747 78.0267 284.747 75.6 168.267Z\"]\n};\nconst faUntappd = {\n  prefix: 'fab',\n  iconName: 'untappd',\n  icon: [640, 512, [], \"f405\", \"M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\"]\n};\nconst faMailchimp = {\n  prefix: 'fab',\n  iconName: 'mailchimp',\n  icon: [448, 512, [], \"f59e\", \"M330.61 243.52a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43.45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277.05 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0-30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06.85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1.9.34 1.17.81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92.34 4.31.52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81.28-15.96zm-218.79 78.9c-1.32.31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27.57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0-.2-2.33c.03.89.68-1.3-3.35-.39zm299.72-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.42-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.81 25.78 273.85l14.76 12.51a72.49 72.49 0 0 0-4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.06 267.9 133.28 322.29 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.55C69.14 252.5 55.78 261.09 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.21C112.42 90.56 186.19 39.68 220.36 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.18 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.85 102.85 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.86 106.86 0 0 1 362.55 421a132.45 132.45 0 0 1-20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1-3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0-1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48.5 15.89 1.59 22.88 1.88 11.69.5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49.29 6.72 1.1 23 1.38 27.63.63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.48 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.37-21.35.69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.46 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73.73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75.75 0 0 0 1.16.79c11.49-7.83 31.48-16.22 49-17.3a.77.77 0 0 1 .52 1.38 41.86 41.86 0 0 0-7.71 7.74.75.75 0 0 0 .59 1.19c12.31.09 29.66 4.4 41 10.74.76.43.22 1.91-.64 1.72-69.55-15.94-123.08 18.53-134.5 26.83a.76.76 0 0 1-1-1.12z\"]\n};\nconst faCss3Alt = {\n  prefix: 'fab',\n  iconName: 'css3-alt',\n  icon: [384, 512, [], \"f38b\", \"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z\"]\n};\nconst faSquareReddit = {\n  prefix: 'fab',\n  iconName: 'square-reddit',\n  icon: [448, 512, [\"reddit-square\"], \"f1a2\", \"M64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32zM305.9 166.4c20.6 0 37.3-16.7 37.3-37.3s-16.7-37.3-37.3-37.3c-18 0-33.1 12.8-36.6 29.8c-30.2 3.2-53.8 28.8-53.8 59.9l0 .2c-32.8 1.4-62.8 10.7-86.6 25.5c-8.8-6.8-19.9-10.9-32-10.9c-28.9 0-52.3 23.4-52.3 52.3c0 21 12.3 39 30.1 47.4c1.7 60.7 67.9 109.6 149.3 109.6s147.6-48.9 149.3-109.7c17.7-8.4 29.9-26.4 29.9-47.3c0-28.9-23.4-52.3-52.3-52.3c-12 0-23 4-31.9 10.8c-24-14.9-54.3-24.2-87.5-25.4l0-.1c0-22.2 16.5-40.7 37.9-43.7l0 0c3.9 16.5 18.7 28.7 36.3 28.7zM155 248.1c14.6 0 25.8 15.4 25 34.4s-11.8 25.9-26.5 25.9s-27.5-7.7-26.6-26.7s13.5-33.5 28.1-33.5zm166.4 33.5c.9 19-12 26.7-26.6 26.7s-25.6-6.9-26.5-25.9c-.9-19 10.3-34.4 25-34.4s27.3 14.6 28.1 33.5zm-42.1 49.6c-9 21.5-30.3 36.7-55.1 36.7s-46.1-15.1-55.1-36.7c-1.1-2.6 .7-5.4 3.4-5.7c16.1-1.6 33.5-2.5 51.7-2.5s35.6 .9 51.7 2.5c2.7 .3 4.5 3.1 3.4 5.7z\"]\n};\nconst faRedditSquare = faSquareReddit;\nconst faVimeoV = {\n  prefix: 'fab',\n  iconName: 'vimeo-v',\n  icon: [448, 512, [], \"f27d\", \"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\"]\n};\nconst faContao = {\n  prefix: 'fab',\n  iconName: 'contao',\n  icon: [512, 512, [], \"f26d\", \"M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z\"]\n};\nconst faSquareFontAwesome = {\n  prefix: 'fab',\n  iconName: 'square-font-awesome',\n  icon: [448, 512, [], \"e5ad\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm90 122c0 9.3-4.8 17.4-12.1 22l188.9 0c7.3 0 13.2 5.9 13.2 13.2c0 1.8-.4 3.7-1.1 5.4L312 264l30.9 69.4c.7 1.7 1.1 3.5 1.1 5.4c0 7.3-5.9 13.2-13.2 13.2L144 352l0 32-32 0 0-32 0-176 0-1.5c-6.1-4.8-10-12.2-10-20.5c0-14.4 11.6-26 26-26s26 11.6 26 26z\"]\n};\nconst faDeskpro = {\n  prefix: 'fab',\n  iconName: 'deskpro',\n  icon: [480, 512, [], \"f38f\", \"M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z\"]\n};\nconst faBrave = {\n  prefix: 'fab',\n  iconName: 'brave',\n  icon: [448, 512, [], \"e63c\", \"M145.5 0H224h78.5l44.7 50.8s39.3-10.9 57.8 7.6s33.8 34.9 33.8 34.9l-12 29.5 15.3 43.7s-44.9 170.2-50.1 191c-10.4 40.9-17.4 56.8-46.9 77.5s-82.9 56.8-91.6 62.2c-1.9 1.2-3.9 2.5-5.9 3.9c-7.5 5.1-15.8 10.8-23.5 10.8l0 0 0 0c-7.7 0-16.1-5.7-23.5-10.8c-2-1.4-4-2.8-5.9-3.9c-8.7-5.5-62.1-41.5-91.6-62.2s-36.5-36.6-46.9-77.5c-5.3-20.8-50.1-191-50.1-191l15.3-43.7L9.2 93.3s15.3-16.4 33.8-34.9s57.8-7.6 57.8-7.6L145.5 0zM224 407.6l0 0c3.7 0 8.9-4.7 13-8.4c.6-.5 1.2-1.1 1.7-1.5c4.2-3.7 47.8-37.5 51-39.8s5.4-6.5 1.9-8.7c-2.8-1.7-10-5.5-20.3-10.8c-3-1.6-6.3-3.2-9.7-5c-15.4-8-34.5-14.7-37.5-14.7l0 0 0 0c-3 0-22.1 6.8-37.5 14.7c-3.5 1.8-6.7 3.5-9.7 5c-10.3 5.3-17.6 9.1-20.3 10.8c-3.6 2.2-1.4 6.4 1.9 8.7s46.8 36.1 51 39.8c.5 .5 1.1 1 1.7 1.5c4.1 3.7 9.3 8.4 13 8.4l0 0zm0-165.7l0 0c4.7 0 17.6-3 26.4-5l0 0 2-.5c7.8-1.8 7.3-6.3 6.4-13c-.1-.8-.2-1.6-.3-2.4c-.6-6.1-5.8-33.1-9.1-50.3c-1.1-5.8-2-10.5-2.4-12.9c-1.5-8.1-.6-9.4 .7-11.3c.2-.3 .5-.7 .7-1.1c1.4-2.3 16-6.2 27.9-9.5l0 0c2.5-.7 4.8-1.3 6.9-1.9c10.6-3 32.4-.6 44.2 .6c1.8 .2 3.4 .4 4.7 .5c9.6 .9 10.4 2.3 7.2 3.8c-2.3 1.1-16.2 6.3-28.7 10.9l0 0 0 0c-4.7 1.8-9.2 3.5-12.8 4.8c-1.5 .5-3 1.1-4.5 1.7c-12.5 4.6-27.2 10-28.9 19.4c-1.5 8.3 5.2 19.9 11.3 30.3l0 0c1.6 2.8 3.2 5.5 4.6 8.1c6.3 11.9 6.5 13.3 6.1 18.1c-.4 3.9-14.5 12.7-22.4 17.6l0 0c-1.8 1.1-3.3 2.1-4.2 2.7c-.8 .5-2.1 1.4-3.8 2.4c-8.6 5.2-26.3 16-26.3 22.5c0 7.8 24.6 28.1 32.4 33.2s28.9 16.1 37.9 17.8s23-8.5 31.2-23.8c7.7-14.4 1.7-28.5-3.2-40l-.9-2.2c-4.5-10.6 1.9-17 6.2-21.3l0 0c.5-.5 1-1 1.4-1.4L377.7 194c1.3-1.3 2.5-2.6 3.7-3.8l0 0c5.8-5.7 10.8-10.5 10.8-22.8c0-14.9-57.5-84.5-57.5-84.5s-48.5 9.3-55.1 9.3c-5.2 0-15.3-3.5-25.8-7.1l0 0c-2.7-.9-5.4-1.9-8-2.7C232.8 78.1 224 78 224 78l0 0 0 0s-8.7 0-21.8 4.4c-2.7 .9-5.4 1.8-8 2.7l0 0c-10.5 3.6-20.6 7.1-25.8 7.1c-6.5 0-55.1-9.3-55.1-9.3s-57.5 69.6-57.5 84.5c0 12.3 4.9 17.1 10.8 22.8l0 0c1.2 1.2 2.5 2.4 3.7 3.8l43.1 45.8c.4 .5 .9 .9 1.4 1.4l0 0c4.3 4.3 10.6 10.7 6.2 21.3l-.9 2.2c-4.9 11.5-11 25.6-3.2 40c8.2 15.3 22.2 25.5 31.2 23.8s30.1-12.7 37.9-17.8s32.4-25.4 32.4-33.2c0-6.5-17.7-17.3-26.3-22.5c-1.7-1-3.1-1.9-3.8-2.4c-.9-.6-2.4-1.5-4.2-2.7c-7.9-4.9-22-13.7-22.4-17.6c-.4-4.8-.3-6.2 6.1-18.1c1.3-2.5 2.9-5.3 4.6-8.1c6-10.4 12.8-22 11.3-30.3c-1.7-9.4-16.4-14.8-28.9-19.4c-1.6-.6-3.1-1.1-4.5-1.7c-3.6-1.4-8.1-3.1-12.8-4.8l-.1 0c-12.5-4.7-26.4-9.9-28.7-10.9c-3.2-1.5-2.3-2.8 7.2-3.8c1.3-.1 2.9-.3 4.7-.5c11.8-1.3 33.6-3.6 44.2-.6c2.1 .6 4.4 1.2 6.9 1.9c11.9 3.2 26.5 7.2 27.9 9.5c.2 .4 .5 .7 .7 1.1c1.3 1.9 2.2 3.2 .7 11.3c-.4 2.4-1.3 7.1-2.4 12.9c-3.3 17.2-8.5 44.2-9.1 50.3c-.1 .8-.2 1.7-.3 2.4c-.8 6.7-1.4 11.2 6.4 13l2 .5 0 0c8.8 2 21.8 5 26.4 5l0 0z\"]\n};\nconst faSistrix = {\n  prefix: 'fab',\n  iconName: 'sistrix',\n  icon: [448, 512, [], \"f3ee\", \"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z\"]\n};\nconst faSquareInstagram = {\n  prefix: 'fab',\n  iconName: 'square-instagram',\n  icon: [448, 512, [\"instagram-square\"], \"e055\", \"M194.4 211.7a53.3 53.3 0 1 0 59.3 88.7 53.3 53.3 0 1 0 -59.3-88.7zm142.3-68.4c-5.2-5.2-11.5-9.3-18.4-12c-18.1-7.1-57.6-6.8-83.1-6.5c-4.1 0-7.9 .1-11.2 .1c-3.3 0-7.2 0-11.4-.1c-25.5-.3-64.8-.7-82.9 6.5c-6.9 2.7-13.1 6.8-18.4 12s-9.3 11.5-12 18.4c-7.1 18.1-6.7 57.7-6.5 83.2c0 4.1 .1 7.9 .1 11.1s0 7-.1 11.1c-.2 25.5-.6 65.1 6.5 83.2c2.7 6.9 6.8 13.1 12 18.4s11.5 9.3 18.4 12c18.1 7.1 57.6 6.8 83.1 6.5c4.1 0 7.9-.1 11.2-.1c3.3 0 7.2 0 11.4 .1c25.5 .3 64.8 .7 82.9-6.5c6.9-2.7 13.1-6.8 18.4-12s9.3-11.5 12-18.4c7.2-18 6.8-57.4 6.5-83c0-4.2-.1-8.1-.1-11.4s0-7.1 .1-11.4c.3-25.5 .7-64.9-6.5-83l0 0c-2.7-6.9-6.8-13.1-12-18.4zm-67.1 44.5A82 82 0 1 1 178.4 324.2a82 82 0 1 1 91.1-136.4zm29.2-1.3c-3.1-2.1-5.6-5.1-7.1-8.6s-1.8-7.3-1.1-11.1s2.6-7.1 5.2-9.8s6.1-4.5 9.8-5.2s7.6-.4 11.1 1.1s6.5 3.9 8.6 7s3.2 6.8 3.2 10.6c0 2.5-.5 5-1.4 7.3s-2.4 4.4-4.1 6.2s-3.9 3.2-6.2 4.2s-4.8 1.5-7.3 1.5l0 0c-3.8 0-7.5-1.1-10.6-3.2zM448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM357 389c-18.7 18.7-41.4 24.6-67 25.9c-26.4 1.5-105.6 1.5-132 0c-25.6-1.3-48.3-7.2-67-25.9s-24.6-41.4-25.8-67c-1.5-26.4-1.5-105.6 0-132c1.3-25.6 7.1-48.3 25.8-67s41.5-24.6 67-25.8c26.4-1.5 105.6-1.5 132 0c25.6 1.3 48.3 7.1 67 25.8s24.6 41.4 25.8 67c1.5 26.3 1.5 105.4 0 131.9c-1.3 25.6-7.1 48.3-25.8 67z\"]\n};\nconst faInstagramSquare = faSquareInstagram;\nconst faBattleNet = {\n  prefix: 'fab',\n  iconName: 'battle-net',\n  icon: [512, 512, [], \"f835\", \"M448.61 225.62c26.87.18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.05-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.18 7.14 238.7 1.07 228.18.22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.56-9.22 5.22 53 29.75 101.82 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61.15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.82 4.6 143.29-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.22c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.69c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.35c-10.29-5.34-21.16-10.34-32.38-15.05a722.459 722.459 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.18 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.78 718.78 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.34 98-132.75 115.92-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.07 12.3.91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.23 695.23 0 0 0 44.67 152.84c.93-.38 1.84.88 18.67-8.25-26.33-74.47-33.76-138.17-34-173.43 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.32 30.71q-10.69 15.66-23.33 32.47C365.63 152 339.1 145.84 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.63 717.63 0 0 0-115.34-31.71 646.608 646.608 0 0 0-39.39-6.05c-.07.45-1.81 1.85-2.16 20.33C300 190.28 358.78 215.68 389.36 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.55 306.58 111zm-130.65 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.06 74.8\"]\n};\nconst faTheRedYeti = {\n  prefix: 'fab',\n  iconName: 'the-red-yeti',\n  icon: [512, 512, [], \"f69d\", \"M488.23 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0-25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5.5a239.36 239.36 0 0 0-68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0-.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.26 194.26 0 0 0-46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.18 200.18 0 0 0-27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7.7 3.4 1.2 5.2 0 25.5.4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.84 181.84 0 0 0 495 255a44.74 44.74 0 0 0-6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.44 242.44 0 0 1-27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1-1.7-15.2c5.4.5 8.8 3.4 9.3 10.1.5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8.9-.7 14.8h-2.5a62.32 62.32 0 0 0-8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5.5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.68 234.68 0 0 0-6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1.5c-11.8 13.5-27.8 21.9-48.5 24.8a201.26 201.26 0 0 1-23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0-14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7.5 1.2c2 .2 3.9.5 6.2.7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4.5 13 1 19.4 1.2 6.4 0 8.4.5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.13 141.13 0 0 1-3 28.3 209.91 209.91 0 0 1-16 46l2.5.5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2.2-.2.2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.27-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3.5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.57 262.57 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2.7 89.5zm115.3-214.4l-2.5.5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.82 214.82 0 0 1-93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2.4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7.5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.21 254.21 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0-14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2.5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5.5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6.3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5.5.5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0-.5-1.7 14.21 14.21 0 0 0-13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0-2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1-11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9.5.5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1.5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2.5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1.5c-5.9 1.2-12.3 4.2-19.4 8.4z\"]\n};\nconst faSquareHackerNews = {\n  prefix: 'fab',\n  iconName: 'square-hacker-news',\n  icon: [448, 512, [\"hacker-news-square\"], \"f3af\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM21 229.2c0 0 .1-.1 .1-.2s.1-.2 .2-.2c0 .1 0 .3-.1 .4H21zM239.2 384H207.8V281.3L128 128h37.3c41.5 77.7 48.1 95.8 54.1 112c1.6 4.3 3.1 8.5 5.2 13.6c3.2-7 5.1-11.9 7.1-17.3c5.9-15.3 12.8-33.2 53.5-108.3H320L239.2 283.1V384z\"]\n};\nconst faHackerNewsSquare = faSquareHackerNews;\nconst faEdge = {\n  prefix: 'fab',\n  iconName: 'edge',\n  icon: [512, 512, [], \"f282\", \"M120.1 37.44C161.1 12.23 207.7-.7753 255 .0016C423 .0016 512 123.8 512 219.5C511.9 252.2 499 283.4 476.1 306.7C453.2 329.9 422.1 343.2 389.4 343.7C314.2 343.7 297.9 320.6 297.9 311.7C297.9 307.9 299.1 305.5 302.7 302.3L303.7 301.1L304.1 299.5C314.6 288 320 273.3 320 257.9C320 179.2 237.8 115.2 136 115.2C98.46 114.9 61.46 124.1 28.48 142.1C55.48 84.58 111.2 44.5 119.8 38.28C120.6 37.73 120.1 37.44 120.1 37.44V37.44zM135.7 355.5C134.3 385.5 140.3 415.5 152.1 442.7C165.7 469.1 184.8 493.7 208.6 512C149.1 500.5 97.11 468.1 59.2 422.7C21.12 376.3 0 318.4 0 257.9C0 206.7 62.4 163.5 136 163.5C172.6 162.9 208.4 174.4 237.8 196.2L234.2 197.4C182.7 215 135.7 288.1 135.7 355.5V355.5zM469.8 400L469.1 400.1C457.3 418.9 443.2 435.2 426.9 449.6C396.1 477.6 358.8 495.1 318.1 499.5C299.5 499.8 281.3 496.3 264.3 488.1C238.7 477.8 217.2 458.1 202.7 435.1C188.3 411.2 181.6 383.4 183.7 355.5C183.1 335.4 189.1 315.2 198.7 297.3C212.6 330.4 236.2 358.6 266.3 378.1C296.4 397.6 331.8 407.6 367.7 406.7C398.7 407 429.8 400 457.9 386.2L459.8 385.3C463.7 383 467.5 381.4 471.4 385.3C475.9 390.2 473.2 394.5 470.2 399.3C470 399.5 469.9 399.8 469.8 400V400z\"]\n};\nconst faThreads = {\n  prefix: 'fab',\n  iconName: 'threads',\n  icon: [448, 512, [], \"e618\", \"M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z\"]\n};\nconst faNapster = {\n  prefix: 'fab',\n  iconName: 'napster',\n  icon: [496, 512, [], \"f3d2\", \"M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\"]\n};\nconst faSquareSnapchat = {\n  prefix: 'fab',\n  iconName: 'square-snapchat',\n  icon: [448, 512, [\"snapchat-square\"], \"f2ad\", \"M384,32H64A64,64,0,0,0,0,96V416a64,64,0,0,0,64,64H384a64,64,0,0,0,64-64V96A64,64,0,0,0,384,32Zm-3.907,319.309-.083.1a32.364,32.364,0,0,1-8.717,6.823,90.26,90.26,0,0,1-20.586,8.2,12.694,12.694,0,0,0-3.852,1.76c-2.158,1.909-2.1,4.64-4.4,8.55a23.137,23.137,0,0,1-6.84,7.471c-6.707,4.632-14.244,4.923-22.23,5.23-7.214.274-15.39.581-24.729,3.669-3.761,1.245-7.753,3.694-12.377,6.533-11.265,6.9-26.68,16.353-52.3,16.353s-40.925-9.4-52.106-16.279c-4.657-2.888-8.675-5.362-12.543-6.64-9.339-3.08-17.516-3.4-24.729-3.67-7.986-.307-15.523-.6-22.231-5.229a23.085,23.085,0,0,1-6.01-6.11c-3.2-4.632-2.855-7.8-5.254-9.895a13.428,13.428,0,0,0-4.1-1.834,89.986,89.986,0,0,1-20.313-8.127,32.905,32.905,0,0,1-8.3-6.284c-6.583-6.757-8.276-14.776-5.686-21.824,3.436-9.338,11.571-12.111,19.4-16.262,14.776-8.027,26.348-18.055,34.433-29.884a68.236,68.236,0,0,0,5.985-10.567c.789-2.158.772-3.329.241-4.416a7.386,7.386,0,0,0-2.208-2.217c-2.532-1.676-5.113-3.353-6.882-4.5-3.27-2.141-5.868-3.818-7.529-4.98-6.267-4.383-10.65-9.04-13.4-14.245a28.4,28.4,0,0,1-1.369-23.584c4.134-10.924,14.469-17.706,26.978-17.706a37.141,37.141,0,0,1,7.845.83c.689.15,1.37.307,2.042.482-.108-7.43.058-15.357.722-23.119,2.358-27.261,11.912-41.589,21.874-52.994a86.836,86.836,0,0,1,22.28-17.931C188.254,100.383,205.312,96,224,96s35.828,4.383,50.944,13.016a87.169,87.169,0,0,1,22.239,17.9c9.961,11.406,19.516,25.709,21.874,52.995a231.194,231.194,0,0,1,.713,23.118c.673-.174,1.362-.332,2.051-.481a37.131,37.131,0,0,1,7.844-.83c12.5,0,22.82,6.782,26.971,17.706a28.37,28.37,0,0,1-1.4,23.559c-2.74,5.2-7.123,9.861-13.39,14.244-1.668,1.187-4.258,2.864-7.529,4.981-1.835,1.187-4.541,2.947-7.164,4.682a6.856,6.856,0,0,0-1.951,2.034c-.506,1.046-.539,2.191.166,4.208a69.015,69.015,0,0,0,6.085,10.792c8.268,12.1,20.188,22.313,35.454,30.407,1.486.772,2.98,1.5,4.441,2.258.722.332,1.569.763,2.491,1.3,4.9,2.723,9.2,6.01,11.455,12.153C387.821,336.915,386.269,344.7,380.093,351.309Zm-16.719-18.461c-50.313-24.314-58.332-61.918-58.689-64.749-.431-3.379-.921-6.035,2.806-9.472,3.594-3.328,19.541-13.19,23.965-16.278,7.33-5.114,10.534-10.219,8.16-16.495-1.66-4.316-5.686-5.976-9.961-5.976a18.5,18.5,0,0,0-3.993.448c-8.035,1.743-15.838,5.769-20.354,6.857a7.1,7.1,0,0,1-1.66.224c-2.408,0-3.279-1.071-3.088-3.968.564-8.783,1.759-25.925.373-41.937-1.884-22.032-8.99-32.948-17.432-42.6-4.051-4.624-23.135-24.654-59.536-24.654S168.53,134.359,164.479,139c-8.434,9.654-15.531,20.57-17.432,42.6-1.386,16.013-.141,33.147.373,41.937.166,2.756-.68,3.968-3.088,3.968a7.1,7.1,0,0,1-1.66-.224c-4.507-1.087-12.31-5.113-20.346-6.856a18.494,18.494,0,0,0-3.993-.449c-4.25,0-8.3,1.636-9.961,5.977-2.374,6.276.847,11.381,8.168,16.494,4.425,3.088,20.371,12.958,23.966,16.279,3.719,3.437,3.237,6.093,2.805,9.471-.356,2.79-8.384,40.394-58.689,64.749-2.946,1.428-7.96,4.45.88,9.331,13.88,7.628,23.111,6.807,30.3,11.43,6.093,3.927,2.5,12.394,6.923,15.449,5.454,3.76,21.583-.266,42.335,6.6,17.433,5.744,28.116,22.015,58.963,22.015s41.788-16.3,58.938-21.973c20.795-6.865,36.89-2.839,42.336-6.6,4.433-3.055.822-11.522,6.923-15.448,7.181-4.624,16.411-3.8,30.3-11.472C371.36,337.355,366.346,334.333,363.374,332.848Z\"]\n};\nconst faSnapchatSquare = faSquareSnapchat;\nconst faGooglePlusG = {\n  prefix: 'fab',\n  iconName: 'google-plus-g',\n  icon: [640, 512, [], \"f0d5\", \"M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z\"]\n};\nconst faArtstation = {\n  prefix: 'fab',\n  iconName: 'artstation',\n  icon: [512, 512, [], \"f77a\", \"M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z\"]\n};\nconst faMarkdown = {\n  prefix: 'fab',\n  iconName: 'markdown',\n  icon: [640, 512, [], \"f60f\", \"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z\"]\n};\nconst faSourcetree = {\n  prefix: 'fab',\n  iconName: 'sourcetree',\n  icon: [448, 512, [], \"f7d3\", \"M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.86 202.86 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.18 203.18 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z\"]\n};\nconst faGooglePlus = {\n  prefix: 'fab',\n  iconName: 'google-plus',\n  icon: [512, 512, [], \"f2b3\", \"M256,8C119.1,8,8,119.1,8,256S119.1,504,256,504,504,392.9,504,256,392.9,8,256,8ZM185.3,380a124,124,0,0,1,0-248c31.3,0,60.1,11,83,32.3l-33.6,32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9,0-77.2,35.5-77.2,78.1S142.3,334,185.3,334c32.6,0,64.9-19.1,70.1-53.3H185.3V238.1H302.2a109.2,109.2,0,0,1,1.9,20.7c0,70.8-47.5,121.2-118.8,121.2ZM415.5,273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5Z\"]\n};\nconst faDiaspora = {\n  prefix: 'fab',\n  iconName: 'diaspora',\n  icon: [512, 512, [], \"f791\", \"M251.64 354.55c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.25s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1.6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3.4-2 1-148.6 1.7-149.6.8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3.8.9 31.9 102.2 31.5 102.6-.9.9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z\"]\n};\nconst faFoursquare = {\n  prefix: 'fab',\n  iconName: 'foursquare',\n  icon: [368, 512, [], \"f180\", \"M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z\"]\n};\nconst faStackOverflow = {\n  prefix: 'fab',\n  iconName: 'stack-overflow',\n  icon: [384, 512, [], \"f16c\", \"M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"]\n};\nconst faGithubAlt = {\n  prefix: 'fab',\n  iconName: 'github-alt',\n  icon: [480, 512, [], \"f113\", \"M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\"]\n};\nconst faPhoenixSquadron = {\n  prefix: 'fab',\n  iconName: 'phoenix-squadron',\n  icon: [512, 512, [], \"f511\", \"M96 63.38C142.49 27.25 201.55 7.31 260.51 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.17 27 191 48.84 162.21 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3.3a203 203 0 0 1-35.82 15.37c-20 6.17-42.16 8.46-62.1.78 12.79 1.73 26.06.31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.57 526.57 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0-51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28.75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.64 183.64 0 0 0-14.21-104.64c20.78 32 32.34 69.58 35.71 107.48.49 12.73.49 25.51 0 38.23A243.21 243.21 0 0 1 482 371.34c-26.12 47.34-68 85.63-117.19 108-78.29 36.23-174.68 31.32-248-14.68A248.34 248.34 0 0 1 25.36 366 238.34 238.34 0 0 1 0 273.08v-31.34C3.93 172 40.87 105.82 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z\"]\n};\nconst faPagelines = {\n  prefix: 'fab',\n  iconName: 'pagelines',\n  icon: [384, 512, [], \"f18c\", \"M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\"]\n};\nconst faAlgolia = {\n  prefix: 'fab',\n  iconName: 'algolia',\n  icon: [512, 512, [], \"f36c\", \"M256 0C116.1 0 2 112.7 0 252.1C-2 393.6 112.9 510.8 254.5 511.6c43.7 .3 85.9-10.4 123.3-30.7c3.6-2 4.2-7 1.1-9.7l-24-21.2c-4.9-4.3-11.8-5.5-17.8-3c-26.1 11.1-54.5 16.8-83.7 16.4C139 461.9 46.5 366.8 48.3 252.4C50.1 139.5 142.6 48.2 256 48.2H463.7V417.2L345.9 312.5c-3.8-3.4-9.7-2.7-12.7 1.3c-18.9 25-49.7 40.6-83.9 38.2c-47.5-3.3-85.9-41.5-89.5-88.9c-4.2-56.6 40.6-103.9 96.3-103.9c50.4 0 91.9 38.8 96.2 88c.4 4.4 2.4 8.5 5.7 11.4l30.7 27.2c3.5 3.1 9 1.2 9.9-3.4c2.2-11.8 3-24.2 2.1-36.8c-4.9-72-63.3-130-135.4-134.4c-82.7-5.1-151.8 59.5-154 140.6c-2.1 78.9 62.6 147 141.6 148.7c33 .7 63.6-9.6 88.3-27.6L495 509.4c6.6 5.8 17 1.2 17-7.7V9.7c0-5.4-4.4-9.7-9.7-9.7H256z\"]\n};\nconst faRedRiver = {\n  prefix: 'fab',\n  iconName: 'red-river',\n  icon: [448, 512, [], \"f3e3\", \"M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z\"]\n};\nconst faCreativeCommonsSa = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sa',\n  icon: [496, 512, [], \"f4ef\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z\"]\n};\nconst faSafari = {\n  prefix: 'fab',\n  iconName: 'safari',\n  icon: [512, 512, [], \"f267\", \"M274.69,274.69l-37.38-37.38L166,346ZM256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8ZM411.85,182.79l14.78-6.13A8,8,0,0,1,437.08,181h0a8,8,0,0,1-4.33,10.46L418,197.57a8,8,0,0,1-10.45-4.33h0A8,8,0,0,1,411.85,182.79ZM314.43,94l6.12-14.78A8,8,0,0,1,331,74.92h0a8,8,0,0,1,4.33,10.45l-6.13,14.78a8,8,0,0,1-10.45,4.33h0A8,8,0,0,1,314.43,94ZM256,60h0a8,8,0,0,1,8,8V84a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V68A8,8,0,0,1,256,60ZM181,74.92a8,8,0,0,1,10.46,4.33L197.57,94a8,8,0,1,1-14.78,6.12l-6.13-14.78A8,8,0,0,1,181,74.92Zm-63.58,42.49h0a8,8,0,0,1,11.31,0L140,128.72A8,8,0,0,1,140,140h0a8,8,0,0,1-11.31,0l-11.31-11.31A8,8,0,0,1,117.41,117.41ZM60,256h0a8,8,0,0,1,8-8H84a8,8,0,0,1,8,8h0a8,8,0,0,1-8,8H68A8,8,0,0,1,60,256Zm40.15,73.21-14.78,6.13A8,8,0,0,1,74.92,331h0a8,8,0,0,1,4.33-10.46L94,314.43a8,8,0,0,1,10.45,4.33h0A8,8,0,0,1,100.15,329.21Zm4.33-136h0A8,8,0,0,1,94,197.57l-14.78-6.12A8,8,0,0,1,74.92,181h0a8,8,0,0,1,10.45-4.33l14.78,6.13A8,8,0,0,1,104.48,193.24ZM197.57,418l-6.12,14.78a8,8,0,0,1-14.79-6.12l6.13-14.78A8,8,0,1,1,197.57,418ZM264,444a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V428a8,8,0,0,1,8-8h0a8,8,0,0,1,8,8Zm67-6.92h0a8,8,0,0,1-10.46-4.33L314.43,418a8,8,0,0,1,4.33-10.45h0a8,8,0,0,1,10.45,4.33l6.13,14.78A8,8,0,0,1,331,437.08Zm63.58-42.49h0a8,8,0,0,1-11.31,0L372,383.28A8,8,0,0,1,372,372h0a8,8,0,0,1,11.31,0l11.31,11.31A8,8,0,0,1,394.59,394.59ZM286.25,286.25,110.34,401.66,225.75,225.75,401.66,110.34ZM437.08,331h0a8,8,0,0,1-10.45,4.33l-14.78-6.13a8,8,0,0,1-4.33-10.45h0A8,8,0,0,1,418,314.43l14.78,6.12A8,8,0,0,1,437.08,331ZM444,264H428a8,8,0,0,1-8-8h0a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8h0A8,8,0,0,1,444,264Z\"]\n};\nconst faGoogle = {\n  prefix: 'fab',\n  iconName: 'google',\n  icon: [488, 512, [], \"f1a0\", \"M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z\"]\n};\nconst faSquareFontAwesomeStroke = {\n  prefix: 'fab',\n  iconName: 'square-font-awesome-stroke',\n  icon: [448, 512, [\"font-awesome-alt\"], \"f35c\", \"M64 64C46.3 64 32 78.3 32 96l0 320c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L64 64zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm154 58c0 9.3-4.8 17.4-12.1 22l188.9 0c7.3 0 13.2 5.9 13.2 13.2c0 1.8-.4 3.7-1.1 5.4L312 264l30.9 69.4c.8 1.7 1.1 3.5 1.1 5.4c0 7.3-5.9 13.2-13.2 13.2L144 352l0 32-32 0 0-32 0-176 0-1.5c-6.1-4.8-10-12.2-10-20.5c0-14.4 11.6-26 26-26s26 11.6 26 26z\"]\n};\nconst faFontAwesomeAlt = faSquareFontAwesomeStroke;\nconst faAtlassian = {\n  prefix: 'fab',\n  iconName: 'atlassian',\n  icon: [512, 512, [], \"f77b\", \"M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8.1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6.1z\"]\n};\nconst faLinkedinIn = {\n  prefix: 'fab',\n  iconName: 'linkedin-in',\n  icon: [448, 512, [], \"f0e1\", \"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\"]\n};\nconst faDigitalOcean = {\n  prefix: 'fab',\n  iconName: 'digital-ocean',\n  icon: [512, 512, [], \"f391\", \"M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z\"]\n};\nconst faNimblr = {\n  prefix: 'fab',\n  iconName: 'nimblr',\n  icon: [384, 512, [], \"f5a8\", \"M246.6 299.29c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.25c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.76 159C157 159 89.45 178.77 59.25 227L14 0v335.48C14 433.13 93.61 512 191.76 512s177.76-78.95 177.76-176.52S290.13 159 191.76 159zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59s59.24-131.59 132.51-131.59 132.51 58.86 132.51 131.54S265 467.07 191.76 467.07z\"]\n};\nconst faChromecast = {\n  prefix: 'fab',\n  iconName: 'chromecast',\n  icon: [512, 512, [], \"f838\", \"M447.8,64H64c-23.6,0-42.7,19.1-42.7,42.7v63.9H64v-63.9h383.8v298.6H298.6V448H448c23.6,0,42.7-19.1,42.7-42.7V106.7 C490.7,83.1,471.4,64,447.8,64z M21.3,383.6L21.3,383.6l0,63.9h63.9C85.2,412.2,56.6,383.6,21.3,383.6L21.3,383.6z M21.3,298.6V341 c58.9,0,106.6,48.1,106.6,107h42.7C170.7,365.6,103.7,298.7,21.3,298.6z M213.4,448h42.7c-0.5-129.5-105.3-234.3-234.8-234.6l0,42.4 C127.3,255.6,213.3,342,213.4,448z\"]\n};\nconst faEvernote = {\n  prefix: 'fab',\n  iconName: 'evernote',\n  icon: [384, 512, [], \"f839\", \"M120.82 132.21c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56.22-.74 0-.37-.37L123.79 46.45c.38-.37.6-.22.38.37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.45v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.92-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.78 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.09 8.91 238.46 7.8 238.46C362.15 485.53 267.06 480 267.06 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.84c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z\"]\n};\nconst faHackerNews = {\n  prefix: 'fab',\n  iconName: 'hacker-news',\n  icon: [448, 512, [], \"f1d4\", \"M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"]\n};\nconst faCreativeCommonsSampling = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sampling',\n  icon: [496, 512, [], \"f4f0\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\"]\n};\nconst faAdversal = {\n  prefix: 'fab',\n  iconName: 'adversal',\n  icon: [512, 512, [], \"f36a\", \"M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\"]\n};\nconst faCreativeCommons = {\n  prefix: 'fab',\n  iconName: 'creative-commons',\n  icon: [496, 512, [], \"f25e\", \"M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z\"]\n};\nconst faWatchmanMonitoring = {\n  prefix: 'fab',\n  iconName: 'watchman-monitoring',\n  icon: [512, 512, [], \"e087\", \"M256,16C123.452,16,16,123.452,16,256S123.452,496,256,496,496,388.548,496,256,388.548,16,256,16ZM121.69,429.122C70.056,388.972,36.741,326.322,36.741,256a218.519,218.519,0,0,1,9.587-64.122l102.9-17.895-.121,10.967-13.943,2.013s-.144,12.5-.144,19.549a12.778,12.778,0,0,0,4.887,10.349l9.468,7.4Zm105.692-283.27,8.48-7.618s6.934-5.38-.143-9.344c-7.188-4.024-39.53-34.5-39.53-34.5-5.348-5.477-8.257-7.347-15.46,0,0,0-32.342,30.474-39.529,34.5-7.078,3.964-.144,9.344-.144,9.344l8.481,7.618-.048,4.369L75.982,131.045c39.644-56.938,105.532-94.3,180.018-94.3A218.754,218.754,0,0,1,420.934,111.77l-193.512,37.7Zm34.063,329.269-33.9-250.857,9.467-7.4a12.778,12.778,0,0,0,4.888-10.349c0-7.044-.144-19.549-.144-19.549l-13.943-2.013-.116-10.474,241.711,31.391A218.872,218.872,0,0,1,475.259,256C475.259,375.074,379.831,472.212,261.445,475.121Z\"]\n};\nconst faFonticons = {\n  prefix: 'fab',\n  iconName: 'fonticons',\n  icon: [448, 512, [], \"f280\", \"M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z\"]\n};\nconst faWeixin = {\n  prefix: 'fab',\n  iconName: 'weixin',\n  icon: [576, 512, [], \"f1d7\", \"M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z\"]\n};\nconst faShirtsinbulk = {\n  prefix: 'fab',\n  iconName: 'shirtsinbulk',\n  icon: [448, 512, [], \"f214\", \"M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z\"]\n};\nconst faCodepen = {\n  prefix: 'fab',\n  iconName: 'codepen',\n  icon: [512, 512, [], \"f1cb\", \"M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z\"]\n};\nconst faGitAlt = {\n  prefix: 'fab',\n  iconName: 'git-alt',\n  icon: [448, 512, [], \"f841\", \"M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z\"]\n};\nconst faLyft = {\n  prefix: 'fab',\n  iconName: 'lyft',\n  icon: [512, 512, [], \"f3c3\", \"M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z\"]\n};\nconst faRev = {\n  prefix: 'fab',\n  iconName: 'rev',\n  icon: [448, 512, [], \"f5b2\", \"M289.67 274.89a65.57 65.57 0 1 1-65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.55-5.05h-.13a204.69 204.69 0 0 0-74.32-153l-45.38 26.2a157.07 157.07 0 0 1 71.81 131.84C381.2 361.5 310.73 432 224.11 432S67 361.5 67 274.88c0-81.88 63-149.27 143-156.43v39.12l108.77-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.57 0 111.59 89.12 202.29 200.06 205v.11h210.16V269.84z\"]\n};\nconst faWindows = {\n  prefix: 'fab',\n  iconName: 'windows',\n  icon: [448, 512, [], \"f17a\", \"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z\"]\n};\nconst faWizardsOfTheCoast = {\n  prefix: 'fab',\n  iconName: 'wizards-of-the-coast',\n  icon: [640, 512, [], \"f730\", \"M219.19 345.69c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92.26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.75 75.94c-.34 1.7-.55 1.67.79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.34-78.03-54.73-6.02-124.38 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79.26c63.89-58.4 131.19-77.25 184.35-73.85 58.4 3.67 100.03 34.04 100.03 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.28 240.42c.79 7.07 4.19 10.21 9.17 10.47 5.5.26 9.43-2.62 10.47-6.55.79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.75 89.32 13.1 226.8.79 241.2c-1.05.52-1.31.79.79 1.31 60.49 16.5 155.81 81.18 196.13 202.16l1.05.26c55.25-69.92 140.88-128.05 236.99-128.05 80.92 0 130.15 42.16 130.15 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2.79.79.79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26.52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78.79 3.4 2.09 9.69 2.36 14.93 0 1.05.79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.74 176 489.43 89.32 342.26 89.32zm-99.24 289.62c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5.28.39 12.13 16.57-4.71 31.16zm2.09-136.43l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.58l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52.26c1.31 1.83 2.09 2.88 3.4 4.71l-.26.52c-1.05-.26-2.36-.79-5.24.26-2.09.79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83.52 1.83 1.83 5.5l-.26.26c-3.06.61-4.65.34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26.26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76.26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52.26 3.14 4.98-.26.52c-3.53-1.76-7.35.76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26.52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4.79-8.9 2.62-12.83 3.93l-.26.26c.79 2.62 3.14 9.95 4.19 13.88.79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88.26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26.26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26.26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45.54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26.26c-4.71.52-14.14 2.36-22.52 4.19l-.26-.26.79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26.26c.52 2.36.79 3.14 1.57 5.5l-.26.26c-1.14-1.14-3.34-3.2-16.24-.79l-.26.26c.26 1.57 1.05 6.55 1.57 9.95l.26.26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26.26c.26 2.09 1.57 9.43 2.09 12.57l.26.26c1.15.38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25.02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24.79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69.26 2.36.52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26.26c-.52 1.83-1.83 6.02-1.83 6.28l-.52.52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26.52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69.79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.44c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24.59-7.27.26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09.79 5.5 2.09 7.59 2.88.48.48.18-1.87-1.05 25.14-.24 1.81.02 2.6.8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27.09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26.26-5.76-4.45.26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26.26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59.75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38.79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.53-191.95-129.62-53.42-1.05-94.27 15.45-132.76 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05.26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.58 101.05 231.87 93.23 231.52c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4.52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.98-35.88 67.04 1.05 167.33 40.85 199.8 139.83.78 2.1-.01 2.63-.79.27zM203.48 152.43s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.76 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.43 67.07c-58.4 0-106.05 12.05-114.96 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57.26c6.55-1.83 48.97-13.88 110.24-13.88 180.16 0 301.67 116.79 301.67 223.37v9.95c0 1.31.79 2.62 1.05.52.52-2.09.79-8.64.79-19.64.26-83.79-96.63-227.55-321.57-227.55zm211.06 169.68c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81.52 13.35 6.02 14.66 3.67 1.05 8.9.52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.65c1.83.52 3.14 1.05 5.76 1.83 0-1.83.52-8.38.79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z\"]\n};\nconst faSquareViadeo = {\n  prefix: 'fab',\n  iconName: 'square-viadeo',\n  icon: [448, 512, [\"viadeo-square\"], \"f2aa\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM118.3 381.2c-68-73.6-19.8-196.1 81.2-196.1c13.3 0 26.6 2.1 39.1 6.7c-4.3 8.4-7.3 17.6-8.4 27.1c-9.7-4.1-20.2-6-30.7-6c-48.8 0-84.6 41.7-84.6 88.9c0 43 28.5 78.7 69.5 85.9c61.5-24 72.9-117.6 72.9-175v0c0-7.3 0-14.8-.6-22.1c-11.2-32.9-26.6-64.6-44.2-94.5c27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70c0 54.1-21.9 99-68.3 128.2l-2.4 .2c50 1 86.2-38.6 86.2-87.2c0-12.2-2.1-24.3-6.9-35.7c9.5-1.9 18.5-5.6 26.4-10.5c15.3 36.6 12.6 87.3-22.8 125.6c-42.4 46.2-120 46.6-162.4 0zM274.6 217.6c21.9-12 49.6-30.7 62.3-53c1.5-3 4.1-8.6 4.5-12c-12.5 27.9-44.2 49.8-73.9 56.7c-4.7-7.3-7.5-15.5-7.5-24.3c0-10.3 5.2-24.1 12.9-31.6c8.3-7.9 18-10.9 27.9-14.1c16-5.1 32.5-10.3 44.5-35.9c32.5 46.2 13.1 130.3-36.3 130.3c-13.3 0-25.1-7.1-34.4-16.1z\"]\n};\nconst faViadeoSquare = faSquareViadeo;\nconst faMeetup = {\n  prefix: 'fab',\n  iconName: 'meetup',\n  icon: [512, 512, [], \"f2e0\", \"M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z\"]\n};\nconst faCentos = {\n  prefix: 'fab',\n  iconName: 'centos',\n  icon: [448, 512, [], \"f789\", \"M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z\"]\n};\nconst faAdn = {\n  prefix: 'fab',\n  iconName: 'adn',\n  icon: [496, 512, [], \"f170\", \"M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z\"]\n};\nconst faCloudsmith = {\n  prefix: 'fab',\n  iconName: 'cloudsmith',\n  icon: [512, 512, [], \"f384\", \"M512 227.6v56.9L284.4 512H227.6L0 284.4V227.6L227.6 0h56.9L512 227.6zm-256 162a133.6 133.6 0 1 0 0-267.1 133.6 133.6 0 1 0 0 267.1z\"]\n};\nconst faOpensuse = {\n  prefix: 'fab',\n  iconName: 'opensuse',\n  icon: [640, 512, [], \"e62b\", \"M471.1 102.7s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3c-51.9-1.8-122.8-4.3-223 57.3c-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.1 307 7 335.1c3.3 12.8 8.9 24.9 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4c44.4 3.9 78.1-16 90-53.3c8.2-25.8 0-63.6-31.5-82.9c-25.6-15.7-53.3-12.1-69.2-1.6c-13.9 9.2-21.8 23.5-21.6 39.2c.3 27.8 24.3 42.6 41.5 42.6c5.4 0 10.7-.9 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9c0-12.1-11.6-14.8-16.8-13.9c-2.9 .5-4.5 2-11.8 2.4c-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9c32.3 2.8 47.7 40.7 28.5 65.7C135 388.5 76.7 388 53.6 344.4c-26-49.2 12.7-111.2 87-98.4c33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3c56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8c5.6-33.8 39.7-18.4 82.4-17.4c66.5 .4 102.1-27 103.1-28c3.7-3.1 6.5-15.8 7-17.7c1.3-5.1-3.2-2.4-3.2-2.4c-8.7 5.2-30.5 15.2-50.9 15.6c-25.3 .5-76.2-25.4-81.6-28.2c-.3-.4 .1 1.2-11-25.5c88.4 58.3 118.3 40.5 145.2 21.7c.8-.6 4.3-2.9 3.6-5.7c-13.8-48.1-22.4-62.7-34.5-69.6c-37-21.6-125-34.7-129.2-35.3c.1-.1-.9-.3-.9 .7l0 0zm135.6 75.4a37.6 37.6 0 1 1 -75.2-2.6 37.6 37.6 0 1 1 75.2 2.6zm-36.6-27.9a26.3 26.3 0 1 0 -1.7 52.5 26.3 26.3 0 1 0 1.7-52.5zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.6 0 15.6v0z\"]\n};\nconst faPiedPiperAlt = {\n  prefix: 'fab',\n  iconName: 'pied-piper-alt',\n  icon: [576, 512, [], \"f1a8\", \"M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3.9.6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z\"]\n};\nconst faSquareDribbble = {\n  prefix: 'fab',\n  iconName: 'square-dribbble',\n  icon: [448, 512, [\"dribbble-square\"], \"f397\", \"M165.9 132.5c-38.3 18-66.8 53.3-75.7 95.7c6.1 .1 62.4 .3 126.4-16.7c-22.7-40.2-47.1-74.1-50.7-79zm26.1-9.1c3.8 5.1 28.6 38.9 51 80c48.6-18.3 69.1-45.9 71.6-49.4C281 124.2 235.3 112.9 192 123.4zM277.4 382c-2-12-10-53.8-29.2-103.6c-55.1 18.8-93.8 56.4-108.1 85.6c40.5 31.6 93.3 36.7 137.3 18zM227.8 232.6C159.6 253 93.4 252.2 87.4 252c0 .7 0 1.4 0 2.1s0 1.4 0 2.1c0 35.1 13.3 67.1 35.1 91.4c22.2-37.9 67.1-77.9 116.5-91.8c-3.4-7.8-7.2-15.5-11.1-23.2zm72.5 136.9c30.7-20.7 52.5-53.6 58.6-91.6c-4.6-1.5-42.3-12.7-85.1-5.8c17.9 49.1 25.1 89.1 26.5 97.4zm-34.8-119c45.5-5.7 90.7 3.4 95.2 4.4c-.3-32.3-11.8-61.9-30.9-85.1c-2.9 3.9-25.8 33.2-76.3 53.9c4.8 9.8 8.3 17.8 12 26.8zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM224 416a160 160 0 1 1 0-320 160 160 0 1 1 0 320z\"]\n};\nconst faDribbbleSquare = faSquareDribbble;\nconst faCodiepie = {\n  prefix: 'fab',\n  iconName: 'codiepie',\n  icon: [472, 512, [], \"f284\", \"M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z\"]\n};\nconst faNode = {\n  prefix: 'fab',\n  iconName: 'node',\n  icon: [640, 512, [], \"f419\", \"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z\"]\n};\nconst faMix = {\n  prefix: 'fab',\n  iconName: 'mix',\n  icon: [448, 512, [], \"f3cb\", \"M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z\"]\n};\nconst faSteam = {\n  prefix: 'fab',\n  iconName: 'steam',\n  icon: [496, 512, [], \"f1b6\", \"M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z\"]\n};\nconst faCcApplePay = {\n  prefix: 'fab',\n  iconName: 'cc-apple-pay',\n  icon: [576, 512, [], \"f416\", \"M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\"]\n};\nconst faScribd = {\n  prefix: 'fab',\n  iconName: 'scribd',\n  icon: [384, 512, [], \"f28a\", \"M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\"]\n};\nconst faDebian = {\n  prefix: 'fab',\n  iconName: 'debian',\n  icon: [448, 512, [], \"e60b\", \"M380.2 245.6c3-7.6 5.5-14 5.2-24.4l-4.3 9c4.4-13.2 4-27.1 3.6-40.4c-.2-6-.3-11.8 0-17.4l-1.8-.5c-1.5-45.2-40.6-93.1-75.3-109.4c-30-13.8-76.1-16.2-97.3-5.8c1.3-1.1 4.2-2 6.8-2.7l.3-.1c3.3-1 6-1.7 4-2.9c-19.2 1.9-24.9 5.5-31.1 9.4l-.1 0c-4.6 2.9-9.5 6-20.3 8.7c-3.5 3.4 1.7 2 5.8 .9l0 0c4.1-1.1 7.2-1.9-.1 2.4c-3.5 1-6.6 1.3-9.6 1.6l-.1 0c-8.3 .8-15.8 1.6-30.7 17c.8 1.3 3.4-.2 5.3-1.3l.1-.1c2.3-1.4 3.4-2-1.7 4.4c-19.1-2.4-60.3 43.7-69.1 59l4.6 .8c-3.2 8-6.8 14.8-10 20.8c-4.3 8.1-7.9 14.9-8.7 21.3c-.3 5.1-1 11-1.7 17.3l0 0c-.1 1-.2 2-.3 3l-.1 .6c-3 27.3-6.7 60.8 3.9 73l-1.3 13c.6 1.2 1.1 2.3 1.6 3.5c.2 .4 .4 .8 .5 1.1l0 0 0 0 0 0 0 0 0 0 0 0 0 0c1 2.1 2 4.2 3.3 6.2l-3 .2c7 22.1 10.8 22.5 15.1 22.9l0 0c4.4 .4 9.3 .9 18.7 24.2c-2.7-.9-5.5-1.9-9.4-7.2c-.5 4.1 5.8 16.3 13.1 25.8l-3.1 3.6c2.1 3.7 4.8 6.2 7.6 8.8l0 0 0 0c1 .9 2.1 1.9 3.1 2.9c-11.9-6.5 3.2 13.7 11.9 25.2c.8 1.1 1.5 2 2.2 2.9l0 0 0 0 0 0 0 0 0 0c1.4 1.9 2.5 3.4 2.9 4.1l2.4-4.2c-.3 6.1 4.3 13.9 13.1 24.7l7.3-.3c3 6 14 16.7 20.7 17.2l-4.4 5.8c8.1 2.6 10.3 4.3 12.7 6.2c2.6 2.1 5.4 4.3 16.1 8.1l-4.2-7.4c3.5 3 6.2 5.9 8.8 8.7l.1 .1c5.2 5.6 9.9 10.6 19.7 15.3c10.7 3.7 16.6 4.7 22.7 5.8c.3 0 .6 .1 .9 .1c5.4 .8 11.2 1.8 20.8 4.5c-1.1-.1-2.2-.1-3.3-.1h0c-2.3-.1-4.7-.1-7-.1l0 0 0 0 0 0 0 0 0 0 0 0 0 0c-14.4-.2-29.2-.4-42.7-5.2C107.8 480.5 19.5 367.2 26 250.6c-.6-9.9-.3-20.9 0-30.7c.4-13.5 .7-24.8-1.6-28.3l1-3.1c5.3-17.4 11.7-38.2 23.8-62.8l-.1-.2v-.1c.4 .4 3.4 3.4 8.8-5.8c.8-1.8 1.6-3.7 2.4-5.6c.5-1.1 .9-2.2 1.4-3.2c2.5-6.1 5.1-12.3 8.4-17.9l2.6-.6c1.7-10.1 17-23.8 29.8-35.2l1.1-1c5.7-5.1 10.7-9.7 13.6-13.1l.7 4.4c17-15.9 44.6-27.5 65.6-36.4l.5-.2c4.8-2 9.3-3.9 13.3-5.7c-3.4 3.8 2.2 2.7 10 1c4.8-1 10.4-2.1 15.3-2.4l-3.9 2.1c-2.7 1.4-5.4 2.8-8 4.6c8.1-2 11.7-1.4 15.7-.8l.3 0c3.5 .6 7.3 1.2 14.6 .2c-5.6 .8-12.3 3-11.2 3.8c7.9 .9 12.8-.1 17.2-1l.2 0c5.5-1.1 10.3-2 19.3 .9l-1-4.8c7.3 2.6 12.7 4.3 17.5 5.8l.5 .1c10 3 17.6 5.3 34.2 14.1c3.2 .2 5.3-.5 7.4-1.2l.1 0c3.6-1.1 7-2.1 15.2 1.2c.3 .5 .5 1 .7 1.4c.1 .2 .2 .5 .3 .7l0 .1c1 2.6 1.8 4.6 14.6 12.1c1.7-.7-2.7-4.7-6.4-8.2c0 0 0 0-.1-.1c-.2-.1-.3-.3-.5-.4c32.2 17.3 67.3 54.1 78 93.5c-6-11.1-5.2-5.5-4.3 .5c.6 4 1.2 8.1-.2 7.5c4.5 12.1 8.1 24.5 10.4 37.4l-.8-2.9-.1-.3c-3.3-11.9-9.6-34.3-19.9-49.3c-.4 4.3-2.8 3.9-5.2 3.5l-.1 0 0 0c-3.3-.6-6.2-1.1-1.9 12.6c2.6 3.8 3.1 2.4 3.5 1.1l0 0c.5-1.5 .9-2.7 4.7 5.2c.1 4.1 1 8.2 2.1 12.7l0 0 0 0 .1 .6c.1 .3 .1 .5 .2 .8l.1 .6c.6 2.6 1.3 5.4 1.8 8.4c-1.1-.2-2.3-2.2-3.4-4.2c-1.4-2.4-2.8-4.7-3.7-3.2c2.4 11.5 6.5 17.4 8 18.3c-.3 .6-.6 .7-1.1 .7c-.8 0-1.8 .1-1.9 5.3c.7 13.7 3.3 12.5 5.3 11.6l0 0c.6-.3 1.2-.6 1.7-.4c-.6 2.5-1.6 5.1-2.7 7.9c-2.8 7.1-6 15.4-3.4 26.1c-.8-3-2-6-3.1-8.9l-.1-.4c-.2-.5-.4-1-.6-1.5l0 0c-.3-.8-.6-1.6-.9-2.3c-.6 4.4-.3 7.7-.1 10.6c0 .2 0 .5 0 .7c.4 5.3 .7 10-3 19.9c4.3-14.2 3.8-26.9-.2-20.8c1 10.9-3.7 20.4-8 28.9l-.1 .2c-3.6 7.1-6.8 13.5-5.9 19.3l-5.2-7.1c-7.5 10.9-7 13.3-6.5 15.5l0 .1c.5 1.9 1 3.8-3.4 10.8c1.7-2.9 1.3-3.6 1-4.2l0 0c-.4-.8-.7-1.5 1.7-5.1c-1.6 .1-5.5 3.9-10.1 8.5c-3.9 3.9-8.5 8.4-12.8 11.8c-37.5 30.1-82.3 34-125.6 17.8c.2-1-.2-2.1-3.1-4.1c-36.8-28.2-58.5-52.1-50.9-107.5c2.1-1.6 3.6-5.8 5.3-10.8l0 0 0 0 .2-.4 .1-.3 0-.1c2.9-8.4 6.5-18.8 14.3-23.8c7.8-17.3 31.3-33.3 56.4-33.7c25.6-1.4 47.2 13.7 58.1 27.9c-19.8-18.4-52.1-24-79.7-10.4c-28.2 12.7-45 43.8-42.5 74.7c.3-.4 .6-.6 .9-.8l0 0s0 0 0 0c0 0 .1-.1 .1-.1l.1-.1c.6-.5 1.1-.9 1.4-3.3c-.9 60.2 64.8 104.3 112.1 82l.6 1.3c12.7-3.5 15.9-6.5 20.3-10.7l.1-.1 0 0c2.2-2.1 4.7-4.5 8.9-7.3c-.3 .7-1.3 1.7-2.4 2.7c-2.2 2.1-4.6 4.5-1.6 4.6c5-1.3 18.5-13.4 28.5-22.3l0 0 0 0c.6-.5 1.2-1 1.7-1.5c1.5-1.3 2.8-2.5 4-3.6l0 0 .3-.3c1.9-4.2 1.6-5.6 1.3-7l0-.1c-.4-1.6-.8-3.3 2.4-9.6l7.3-3.7c.8-2.1 1.5-4.1 2.2-6c.2-.6 .5-1.2 .7-1.8l-.4-.2zM349.3 34.3l-.2-.1 .2 .1 0 0zM247.8 334.1c-6-3-13.7-8.9-14.8-11.4l-.4 .3c-.3 .6-.5 1.3-.2 2.2c-12.2-5.7-23.4-14.3-32.6-24.9c4.9 7.1 10.1 14.1 17 19.5c-6.9-2.3-15.1-11.8-21.6-19.3l-.1-.1c-4.3-5-7.9-9.1-9.7-9.5c19.8 35.5 80.5 62.3 112.3 49c-14.7 .5-33.4 .3-49.9-5.8zm79.3-119.7l-.1-.2c-.5-1.5-1.1-3.1-1.7-3.4c1.4-5.8 5.4-10.7 4.4 4.6c-1 3.8-1.8 1.5-2.6-1zm-4.2 22.2c-1.3 7.9-5 15.5-10.1 22.5c.2-2-1.2-2.4-2.6-2.8l0 0c-2.9-.8-5.9-1.6 5.6-16.1c-.5 1.9-2.1 4.6-3.7 7.3l0 0 0 0-.3 .4c-3.6 5.9-6.7 11 4 4.3l1-1.8c2.6-4.5 5-8.8 6-13.8h.1zm-55.6 33.9c7.1 .6 14.1 .6 21-1.1c-2.5 2.4-5.2 4.8-8.3 7.2c-11.1-1.7-21.2-6-12.7-6.1zm-92.6 11.6c3.6 7.1 6.4 11.5 9 15.7l.1 .2c2.3 3.7 4.4 7.1 6.8 11.7c-5.1-4.2-8.7-9.5-12.5-15l-.3-.5c-1.4-2.1-2.8-4.2-4.4-6.2l1.2-5.9h.1zm7.5-9.6c1.6 3.3 3.2 6.4 5.7 9.1l2.6 7.7-1.3-2.1c-3.2-5.3-6.3-10.6-8-16.7l.8 1.6 .2 .4zm238.9-41.6c-2.3 17.4-7.7 34.6-16 50.3c7.6-14.9 12.5-30.9 14.8-47.2l1.2-3.1zM35.6 110.6c.4 .8 1.4 .5 2.3 .3c1.9-.5 3.6-.9-.1 7.6c-.5 .3-1 .7-1.5 1l0 0 0 0c-1.4 .9-2.8 1.9-3.9 3c1.9-3.8 3.5-7.4 3.2-11.9zM25.3 152.3c-.7 3.7-1.5 7.9-3.4 13.9c.2-1.9 0-3.5-.2-4.9l0-.1c-.4-3.4-.7-6.3 4.3-12.8c-.3 1.2-.5 2.5-.7 3.8v.1z\"]\n};\nconst faOpenid = {\n  prefix: 'fab',\n  iconName: 'openid',\n  icon: [448, 512, [], \"f19b\", \"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z\"]\n};\nconst faInstalod = {\n  prefix: 'fab',\n  iconName: 'instalod',\n  icon: [512, 512, [], \"e081\", \"M153.384,480H387.113L502.554,275.765,204.229,333.211ZM504.726,240.078,387.113,32H155.669L360.23,267.9ZM124.386,48.809,7.274,256,123.236,461.154,225.627,165.561Z\"]\n};\nconst faFilesPinwheel = {\n  prefix: 'fab',\n  iconName: 'files-pinwheel',\n  icon: [512, 512, [], \"e69f\", \"M253.2 246.4L136.9 130.2c-.6-.6-1-1.3-1.4-2s-.5-1.6-.5-2.4s.2-1.6 .5-2.4s.8-1.4 1.4-2L253.3 5.1c.9-.9 2-1.5 3.2-1.7s2.5-.1 3.6 .3s2.1 1.3 2.8 2.3s1.1 2.2 1.1 3.5L264 242c0 1.3-.3 2.5-1 3.6s-1.7 1.9-2.9 2.4s-2.5 .6-3.7 .3s-2.4-.9-3.2-1.9zm40.3-4.4l0-134.4c0-.8 .1-1.6 .5-2.4s.8-1.5 1.3-2.1s1.3-1.1 2-1.4s1.6-.5 2.4-.5l134.4 0c1.2 0 2.5 .4 3.5 1.1s1.8 1.7 2.3 2.8s.6 2.4 .3 3.6s-.9 2.3-1.7 3.2L304 246.4c-.9 .8-2 1.4-3.2 1.6s-2.4 .1-3.5-.4s-2.1-1.3-2.8-2.3s-1.1-2.2-1.1-3.4zm30.6 35c-1.2 0-2.5-.3-3.5-1s-1.9-1.6-2.4-2.8s-.6-2.4-.4-3.6s.8-2.3 1.7-3.2l84.2-84.2c.6-.6 1.3-1 2-1.4s1.6-.5 2.4-.5s1.6 .2 2.4 .5s1.4 .8 2 1.4l84.4 84.2c.9 .9 1.5 2 1.7 3.2s.1 2.5-.3 3.6s-1.3 2.1-2.3 2.8s-2.2 1.1-3.5 1.1l-168.5 0zM414.8 408l-95.3-95.2c-.9-.9-1.5-2-1.7-3.2s-.1-2.5 .4-3.7s1.3-2.1 2.4-2.8s2.3-1 3.5-1l95.2 0c1.7 0 3.2 .7 4.4 1.8s1.8 2.8 1.8 4.4l0 95.3c0 1.2-.4 2.5-1.1 3.5s-1.7 1.8-2.8 2.3s-2.4 .6-3.6 .3s-2.3-.9-3.2-1.7zM16.5 302.1l216.9 0c1.2 0 2.5 .4 3.5 1.1s1.8 1.7 2.3 2.8s.6 2.4 .3 3.6s-.8 2.3-1.7 3.2L129.4 421.2c-.6 .6-1.3 1-2 1.4s-1.6 .5-2.4 .5s-1.6-.2-2.4-.5s-1.4-.8-2-1.4L12 312.8c-.9-.9-1.5-2-1.7-3.2s-.1-2.5 .4-3.6s1.3-2.1 2.3-2.8s2.3-1 3.5-1zM264 465.3c0 .8-.2 1.6-.5 2.4s-.8 1.5-1.4 2s-1.3 1-2 1.4s-1.6 .5-2.4 .5l-128 0c-1.2 0-2.5-.4-3.5-1.1s-1.8-1.7-2.3-2.8s-.6-2.4-.3-3.6s.8-2.3 1.7-3.2l128-128c.9-.9 2-1.5 3.2-1.7s2.5-.1 3.6 .3s2.1 1.3 2.8 2.3s1.1 2.2 1.1 3.5l0 128zm40-132.5l82.8 82.7c.6 .6 1 1.3 1.4 2s.5 1.6 .5 2.4s-.2 1.6-.5 2.4s-.8 1.4-1.4 2L304 507c-.9 .9-2 1.5-3.2 1.7s-2.5 .1-3.6-.3s-2.1-1.3-2.8-2.3s-1.1-2.2-1.1-3.5l0-165.4c0-1.2 .4-2.5 1.1-3.5s1.7-1.8 2.8-2.3s2.4-.6 3.6-.3s2.3 .8 3.2 1.7zM78.7 122.4c0-1.2 .3-2.5 1-3.5s1.7-1.8 2.8-2.3s2.4-.6 3.6-.4s2.3 .8 3.2 1.7L237.8 266.4c.9 .9 1.5 2 1.7 3.2s.1 2.5-.3 3.6s-1.3 2.1-2.3 2.8s-2.2 1.1-3.5 1.1L85 277.1c-1.7 0-3.2-.7-4.4-1.8s-1.8-2.8-1.8-4.4l0-148.4z\"]\n};\nconst faExpeditedssl = {\n  prefix: 'fab',\n  iconName: 'expeditedssl',\n  icon: [496, 512, [], \"f23e\", \"M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z\"]\n};\nconst faSellcast = {\n  prefix: 'fab',\n  iconName: 'sellcast',\n  icon: [448, 512, [], \"f2da\", \"M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\"]\n};\nconst faSquareTwitter = {\n  prefix: 'fab',\n  iconName: 'square-twitter',\n  icon: [448, 512, [\"twitter-square\"], \"f081\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM351.3 199.3v0c0 86.7-66 186.6-186.6 186.6c-37.2 0-71.7-10.8-100.7-29.4c5.3 .6 10.4 .8 15.8 .8c30.7 0 58.9-10.4 81.4-28c-28.8-.6-53-19.5-61.3-45.5c10.1 1.5 19.2 1.5 29.6-1.2c-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3c-9-6-16.4-14.1-21.5-23.6s-7.8-20.2-7.7-31c0-12.2 3.2-23.4 8.9-33.1c32.3 39.8 80.8 65.8 135.2 68.6c-9.3-44.5 24-80.6 64-80.6c18.9 0 35.9 7.9 47.9 20.7c14.8-2.8 29-8.3 41.6-15.8c-4.9 15.2-15.2 28-28.8 36.1c13.2-1.4 26-5.1 37.8-10.2c-8.9 13.1-20.1 24.7-32.9 34c.2 2.8 .2 5.7 .2 8.5z\"]\n};\nconst faTwitterSquare = faSquareTwitter;\nconst faRProject = {\n  prefix: 'fab',\n  iconName: 'r-project',\n  icon: [581, 512, [], \"f4f7\", \"M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z\"]\n};\nconst faDelicious = {\n  prefix: 'fab',\n  iconName: 'delicious',\n  icon: [448, 512, [], \"f1a5\", \"M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z\"]\n};\nconst faFreebsd = {\n  prefix: 'fab',\n  iconName: 'freebsd',\n  icon: [448, 512, [], \"f3a4\", \"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\"]\n};\nconst faVuejs = {\n  prefix: 'fab',\n  iconName: 'vuejs',\n  icon: [448, 512, [], \"f41f\", \"M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z\"]\n};\nconst faAccusoft = {\n  prefix: 'fab',\n  iconName: 'accusoft',\n  icon: [640, 512, [], \"f369\", \"M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z\"]\n};\nconst faIoxhost = {\n  prefix: 'fab',\n  iconName: 'ioxhost',\n  icon: [640, 512, [], \"f208\", \"M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\"]\n};\nconst faFonticonsFi = {\n  prefix: 'fab',\n  iconName: 'fonticons-fi',\n  icon: [384, 512, [], \"f3a2\", \"M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z\"]\n};\nconst faAppStore = {\n  prefix: 'fab',\n  iconName: 'app-store',\n  icon: [512, 512, [], \"f36f\", \"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z\"]\n};\nconst faCcMastercard = {\n  prefix: 'fab',\n  iconName: 'cc-mastercard',\n  icon: [576, 512, [], \"f1f1\", \"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z\"]\n};\nconst faItunesNote = {\n  prefix: 'fab',\n  iconName: 'itunes-note',\n  icon: [384, 512, [], \"f3b5\", \"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z\"]\n};\nconst faGolang = {\n  prefix: 'fab',\n  iconName: 'golang',\n  icon: [640, 512, [], \"e40f\", \"M400.1 194.8C389.2 197.6 380.2 199.1 371 202.4C363.7 204.3 356.3 206.3 347.8 208.5L347.2 208.6C343 209.8 342.6 209.9 338.7 205.4C334 200.1 330.6 196.7 324.1 193.5C304.4 183.9 285.4 186.7 267.7 198.2C246.5 211.9 235.6 232.2 235.9 257.4C236.2 282.4 253.3 302.9 277.1 306.3C299.1 309.1 316.9 301.7 330.9 285.8C333 283.2 334.9 280.5 337 277.5V277.5L337 277.5C337.8 276.5 338.5 275.4 339.3 274.2H279.2C272.7 274.2 271.1 270.2 273.3 264.9C277.3 255.2 284.8 239 289.2 230.9C290.1 229.1 292.3 225.1 296.1 225.1H397.2C401.7 211.7 409 198.2 418.8 185.4C441.5 155.5 468.1 139.9 506 133.4C537.8 127.8 567.7 130.9 594.9 149.3C619.5 166.1 634.7 188.9 638.8 218.8C644.1 260.9 631.9 295.1 602.1 324.4C582.4 345.3 557.2 358.4 528.2 364.3C522.6 365.3 517.1 365.8 511.7 366.3C508.8 366.5 506 366.8 503.2 367.1C474.9 366.5 449 358.4 427.2 339.7C411.9 326.4 401.3 310.1 396.1 291.2C392.4 298.5 388.1 305.6 382.1 312.3C360.5 341.9 331.2 360.3 294.2 365.2C263.6 369.3 235.3 363.4 210.3 344.7C187.3 327.2 174.2 304.2 170.8 275.5C166.7 241.5 176.7 210.1 197.2 184.2C219.4 155.2 248.7 136.8 284.5 130.3C313.8 124.1 341.8 128.4 367.1 145.6C383.6 156.5 395.4 171.4 403.2 189.5C405.1 192.3 403.8 193.9 400.1 194.8zM48.3 200.4C47.05 200.4 46.74 199.8 47.36 198.8L53.91 190.4C54.53 189.5 56.09 188.9 57.34 188.9H168.6C169.8 188.9 170.1 189.8 169.5 190.7L164.2 198.8C163.6 199.8 162 200.7 161.1 200.7L48.3 200.4zM1.246 229.1C0 229.1-.3116 228.4 .3116 227.5L6.855 219.1C7.479 218.2 9.037 217.5 10.28 217.5H152.4C153.6 217.5 154.2 218.5 153.9 219.4L151.4 226.9C151.1 228.1 149.9 228.8 148.6 228.8L1.246 229.1zM75.72 255.9C75.1 256.8 75.41 257.7 76.65 257.7L144.6 258C145.5 258 146.8 257.1 146.8 255.9L147.4 248.4C147.4 247.1 146.8 246.2 145.5 246.2H83.2C81.95 246.2 80.71 247.1 80.08 248.1L75.72 255.9zM577.2 237.9C577 235.3 576.9 233.1 576.5 230.9C570.9 200.1 542.5 182.6 512.9 189.5C483.9 196 465.2 214.4 458.4 243.7C452.8 268 464.6 292.6 487 302.6C504.2 310.1 521.3 309.2 537.8 300.7C562.4 287.1 575.8 268 577.4 241.2C577.3 240 577.3 238.9 577.2 237.9z\"]\n};\nconst faKickstarter = {\n  prefix: 'fab',\n  iconName: 'kickstarter',\n  icon: [448, 512, [\"square-kickstarter\"], \"f3bb\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM320.8 233l-23.3 23.1L320.8 279c24.1 23.9 24.1 63 0 86.9s-63.4 23.9-87.6 0l-8.5-8.4c-11.3 16-29.7 26.5-50.9 26.5c-34.1 0-61.9-27.5-61.9-61.4l0-133.2c0-33.8 27.7-61.4 61.9-61.4c21.1 0 39.6 10.5 50.9 26.5l8.5-8.4c24.1-23.9 63.4-23.9 87.6 0s24.1 63 0 86.9z\"]\n};\nconst faSquareKickstarter = faKickstarter;\nconst faGrav = {\n  prefix: 'fab',\n  iconName: 'grav',\n  icon: [512, 512, [], \"f2d6\", \"M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z\"]\n};\nconst faWeibo = {\n  prefix: 'fab',\n  iconName: 'weibo',\n  icon: [512, 512, [], \"f18a\", \"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\"]\n};\nconst faUncharted = {\n  prefix: 'fab',\n  iconName: 'uncharted',\n  icon: [448, 512, [], \"e084\", \"M171.73,232.813A5.381,5.381,0,0,0,176.7,229.5,48.081,48.081,0,0,1,191.6,204.244c1.243-.828,1.657-2.484,1.657-4.141a4.22,4.22,0,0,0-2.071-3.312L74.429,128.473,148.958,85a9.941,9.941,0,0,0,4.968-8.281,9.108,9.108,0,0,0-4.968-8.281L126.6,55.6a9.748,9.748,0,0,0-9.523,0l-100.2,57.966a9.943,9.943,0,0,0-4.969,8.281V236.954a9.109,9.109,0,0,0,4.969,8.281L39.235,258.07a8.829,8.829,0,0,0,4.968,1.242,9.4,9.4,0,0,0,6.625-2.484,10.8,10.8,0,0,0,2.9-7.039V164.5L169.66,232.4A4.5,4.5,0,0,0,171.73,232.813ZM323.272,377.73a12.478,12.478,0,0,0-4.969,1.242l-74.528,43.062V287.882c0-2.9-2.9-5.8-6.211-4.555a53.036,53.036,0,0,1-28.984.414,4.86,4.86,0,0,0-6.21,4.555V421.619l-74.529-43.061a8.83,8.83,0,0,0-4.969-1.242,9.631,9.631,0,0,0-9.523,9.523v26.085a9.107,9.107,0,0,0,4.969,8.281l100.2,57.553A8.829,8.829,0,0,0,223.486,480a11.027,11.027,0,0,0,4.969-1.242l100.2-57.553a9.941,9.941,0,0,0,4.968-8.281V386.839C332.8,382.285,328.24,377.73,323.272,377.73ZM286.007,78a23,23,0,1,0-23-23A23,23,0,0,0,286.007,78Zm63.627-10.086a23,23,0,1,0,23,23A23,23,0,0,0,349.634,67.914ZM412.816,151.6a23,23,0,1,0-23-23A23,23,0,0,0,412.816,151.6Zm-63.182-9.2a23,23,0,1,0,23,23A23,23,0,0,0,349.634,142.4Zm-63.627,83.244a23,23,0,1,0-23-23A23,23,0,0,0,286.007,225.648Zm-62.074,36.358a23,23,0,1,0-23-23A23,23,0,0,0,223.933,262.006Zm188.883-82.358a23,23,0,1,0,23,23A23,23,0,0,0,412.816,179.648Zm0,72.272a23,23,0,1,0,23,23A23,23,0,0,0,412.816,251.92Z\"]\n};\nconst faFirstdraft = {\n  prefix: 'fab',\n  iconName: 'firstdraft',\n  icon: [384, 512, [], \"f3a1\", \"M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z\"]\n};\nconst faSquareYoutube = {\n  prefix: 'fab',\n  iconName: 'square-youtube',\n  icon: [448, 512, [61798, \"youtube-square\"], \"f431\", \"M282 256.2l-95.2-54.1V310.3L282 256.2zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zm14.4 136.1c7.6 28.6 7.6 88.2 7.6 88.2s0 59.6-7.6 88.1c-4.2 15.8-16.5 27.7-32.2 31.9C337.9 384 224 384 224 384s-113.9 0-142.2-7.6c-15.7-4.2-28-16.1-32.2-31.9C42 315.9 42 256.3 42 256.3s0-59.7 7.6-88.2c4.2-15.8 16.5-28.2 32.2-32.4C110.1 128 224 128 224 128s113.9 0 142.2 7.7c15.7 4.2 28 16.6 32.2 32.4z\"]\n};\nconst faYoutubeSquare = faSquareYoutube;\nconst faWikipediaW = {\n  prefix: 'fab',\n  iconName: 'wikipedia-w',\n  icon: [640, 512, [], \"f266\", \"M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z\"]\n};\nconst faWpressr = {\n  prefix: 'fab',\n  iconName: 'wpressr',\n  icon: [496, 512, [\"rendact\"], \"f3e4\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm171.33 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03.06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.81 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24.1 28.48.02 42.72.05 6.24.01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6.23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21.08 30.43.02 45.64.04 5.56.01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33.04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43.05 52.86 0 79.29.05 12.44.02 13.93-13.65 3.9-13.64-25.26.03-50.52.02-75.78.02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09.06 25.98.02 130.78.03 6.08-.01 8.03 2.79 5.62 8.27z\"]\n};\nconst faRendact = faWpressr;\nconst faAngellist = {\n  prefix: 'fab',\n  iconName: 'angellist',\n  icon: [448, 512, [], \"f209\", \"M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\"]\n};\nconst faGalacticRepublic = {\n  prefix: 'fab',\n  iconName: 'galactic-republic',\n  icon: [496, 512, [], \"f50c\", \"M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z\"]\n};\nconst faNfcDirectional = {\n  prefix: 'fab',\n  iconName: 'nfc-directional',\n  icon: [512, 512, [], \"e530\", \"M211.8 488.6C213.4 491.1 213.9 494.2 213.2 497.1C212.6 500 210.8 502.6 208.3 504.2C205.7 505.8 202.7 506.3 199.7 505.7C138.3 491.8 84.1 455.8 47.53 404.5C10.97 353.2-5.395 290.3 1.57 227.7C8.536 165 38.34 107.2 85.29 65.21C132.2 23.2 193-.0131 256 0C257.5 0 258.1 .2931 260.3 .8627C261.7 1.432 262.1 2.267 264 3.319C265.1 4.371 265.9 5.619 266.5 6.993C267 8.367 267.3 9.839 267.3 11.32V112.3L291.8 86.39C292.8 85.31 294 84.44 295.4 83.84C296.7 83.23 298.2 82.9 299.7 82.86C301.2 82.81 302.6 83.06 304 83.59C305.4 84.12 306.7 84.92 307.8 85.94C308.8 86.96 309.7 88.18 310.3 89.54C310.9 90.89 311.3 92.35 311.3 93.84C311.3 95.32 311.1 96.8 310.6 98.18C310 99.57 309.2 100.8 308.2 101.9L264.2 148.5C263.1 149.6 261.9 150.5 260.5 151.1C259 151.7 257.5 152 255.1 152C254.5 152 252.9 151.7 251.5 151.1C250.1 150.5 248.8 149.6 247.8 148.5L203.7 101.9C201.7 99.74 200.6 96.83 200.7 93.84C200.7 90.84 202 87.1 204.2 85.94C206.4 83.88 209.3 82.77 212.3 82.86C215.3 82.94 218.1 84.21 220.2 86.39L244.7 112.4V22.89C188.3 25.64 134.9 48.73 94.23 87.87C53.58 127 28.49 179.6 23.61 235.8C18.73 292 34.38 348.1 67.68 393.7C100.1 439.2 149.7 471.2 204.7 483.6C207.6 484.3 210.2 486.1 211.8 488.6L211.8 488.6zM171.4 126.1C170.6 127.4 169.5 128.5 168.3 129.3C147.8 143.2 131.1 161.9 119.5 183.8C107.9 205.7 101.8 230.1 101.8 254.9C101.8 279.7 107.9 304.1 119.5 325.1C131.1 347.9 147.8 366.6 168.3 380.5C170.8 382.2 172.5 384.8 173 387.8C173.6 390.7 172.1 393.8 171.3 396.2C169.6 398.7 166.1 400.4 164 400.1C161.1 401.5 158 400.9 155.6 399.2C132 383.2 112.8 361.7 99.46 336.5C86.15 311.4 79.19 283.4 79.19 254.9C79.19 226.5 86.15 198.4 99.46 173.3C112.8 148.1 132 126.6 155.6 110.6C156.8 109.8 158.2 109.2 159.6 108.8C161.1 108.5 162.6 108.5 164.1 108.8C165.5 109 166.9 109.6 168.2 110.4C169.5 111.2 170.5 112.3 171.4 113.5C172.2 114.7 172.8 116.1 173.1 117.6C173.4 119.1 173.4 120.6 173.1 122C172.8 123.5 172.3 124.9 171.4 126.1H171.4zM340.9 383.5C341.7 382.3 342.8 381.2 343.1 380.4V380.3C364.4 366.3 381.1 347.6 392.7 325.7C404.2 303.9 410.2 279.5 410.2 254.8C410.2 230.1 404.2 205.7 392.7 183.8C381.1 161.1 364.4 143.3 343.1 129.3C342.8 128.5 341.7 127.4 340.9 126.2C340.1 124.9 339.5 123.5 339.3 122.1C338.1 120.6 339 119.1 339.3 117.7C339.6 116.2 340.2 114.8 341 113.6C341.9 112.4 342.1 111.3 344.2 110.5C345.4 109.7 346.8 109.2 348.3 108.9C349.8 108.6 351.2 108.6 352.7 108.9C354.2 109.2 355.5 109.8 356.8 110.7C380.2 126.7 399.5 148.2 412.7 173.3C426 198.4 432.1 226.4 432.1 254.8C432.1 283.3 426 311.3 412.7 336.4C399.5 361.5 380.2 383 356.8 399C355.5 399.9 354.2 400.5 352.7 400.8C351.2 401.1 349.8 401.1 348.3 400.8C346.8 400.5 345.4 399.1 344.2 399.2C342.1 398.4 341.9 397.3 341 396.1C340.2 394.9 339.6 393.5 339.3 392C339 390.6 338.1 389.1 339.3 387.6C339.5 386.2 340.1 384.8 340.9 383.5V383.5zM312.3 6.307C368.5 19.04 418.7 50.28 455 95.01C485.4 132.6 504.6 178 510.3 226C515.9 274 507.9 322.7 487.1 366.3C466.2 409.9 433.5 446.8 392.6 472.6C351.7 498.3 304.4 512 256 512C254.5 512 253.1 511.7 251.7 511.1C250.3 510.6 249.1 509.7 248 508.7C246.1 507.6 246.1 506.4 245.6 505C245 503.6 244.7 502.2 244.7 500.7V401.5L220.2 427.5C218.1 429.7 215.3 430.1 212.3 431.1C209.3 431.2 206.4 430 204.2 427.1C202 425.9 200.7 423.1 200.7 420.1C200.6 417.1 201.7 414.2 203.7 412L247.8 365.4C249.1 363.2 252.9 362 255.1 362C259.1 362 262 363.2 264.2 365.4L308.2 412C310.3 414.2 311.4 417.1 311.3 420.1C311.2 423.1 309.9 425.9 307.8 427.1C305.6 430 302.7 431.2 299.7 431.1C296.7 430.1 293.8 429.7 291.8 427.5L267.3 401.6V489.1C323.7 486.3 377.1 463.3 417.8 424.1C458.5 384.1 483.6 332.4 488.5 276.2C493.3 219.1 477.7 163.9 444.4 118.3C411.1 72.75 362.4 40.79 307.4 28.36C305.9 28.03 304.6 27.42 303.3 26.57C302.1 25.71 301.1 24.63 300.3 23.37C299.5 22.12 298.1 20.72 298.7 19.26C298.5 17.8 298.5 16.3 298.8 14.85C299.2 13.41 299.8 12.04 300.6 10.82C301.5 9.61 302.6 8.577 303.8 7.784C305.1 6.99 306.5 6.451 307.9 6.198C309.4 5.945 310.9 5.982 312.3 6.307L312.3 6.307zM353.1 256.1C353.1 287.5 335.6 317.2 303.8 339.6C301.7 341.1 299 341.9 296.4 341.6C293.7 341.4 291.2 340.3 289.4 338.4L219.3 268.6C217.1 266.5 215.1 263.6 215.9 260.6C215.9 257.6 217.1 254.7 219.2 252.6C221.4 250.5 224.2 249.3 227.2 249.3C230.2 249.3 233.1 250.5 235.2 252.6L298.3 315.4C319.1 298.3 330.5 277.5 330.5 256.1C330.5 232.2 316.4 209.1 290.8 191C288.3 189.3 286.7 186.7 286.2 183.7C285.7 180.8 286.3 177.7 288.1 175.3C289.8 172.8 292.4 171.2 295.4 170.7C298.3 170.2 301.4 170.8 303.8 172.6C335.6 195 353.1 224.7 353.1 256.1V256.1zM216.7 341.5C213.7 342 210.7 341.3 208.2 339.6C176.5 317.2 158.1 287.5 158.1 256.1C158.1 224.7 176.5 195 208.2 172.6C210.4 171 213.1 170.3 215.7 170.5C218.4 170.8 220.8 171.9 222.7 173.8L292.8 243.6C294.9 245.7 296.1 248.6 296.1 251.6C296.1 254.6 294.1 257.4 292.8 259.6C290.7 261.7 287.8 262.9 284.9 262.9C281.9 262.9 278.1 261.7 276.9 259.6L213.8 196.7C192.9 214 181.6 234.7 181.6 256.1C181.6 279.1 195.7 303.1 221.3 321.1C223.7 322.9 225.4 325.5 225.9 328.5C226.4 331.4 225.7 334.4 224 336.9C222.3 339.3 219.6 341 216.7 341.5L216.7 341.5z\"]\n};\nconst faSkype = {\n  prefix: 'fab',\n  iconName: 'skype',\n  icon: [448, 512, [], \"f17e\", \"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\"]\n};\nconst faJoget = {\n  prefix: 'fab',\n  iconName: 'joget',\n  icon: [496, 512, [], \"f3b7\", \"M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z\"]\n};\nconst faFedora = {\n  prefix: 'fab',\n  iconName: 'fedora',\n  icon: [448, 512, [], \"f798\", \"M.0413 255.8C.1219 132.2 100.3 32 224 32C347.7 32 448 132.3 448 256C448 379.7 347.8 479.9 224.1 480H50.93C22.84 480 .0832 457.3 .0416 429.2H0V255.8H.0413zM342.6 192.7C342.6 153 307 124.2 269.4 124.2C234.5 124.2 203.6 150.5 199.3 184.1C199.1 187.9 198.9 189.1 198.9 192.6C198.8 213.7 198.9 235.4 198.1 257C199 283.1 199.1 309.1 198.1 333.6C198.1 360.7 178.7 379.1 153.4 379.1C128.1 379.1 107.6 358.9 107.6 333.6C108.1 305.9 130.2 288.3 156.1 287.5H156.3L182.6 287.3V250L156.3 250.2C109.2 249.8 71.72 286.7 70.36 333.6C70.36 379.2 107.9 416.5 153.4 416.5C196.4 416.5 232.1 382.9 236 340.9L236.2 287.4L268.8 287.1C294.1 287.3 293.8 249.3 268.6 249.8L236.2 250.1C236.2 243.7 236.3 237.3 236.3 230.9C236.4 218.2 236.4 205.5 236.2 192.7C236.3 176.2 252 161.5 269.4 161.5C286.9 161.5 305.3 170.2 305.3 192.7C305.3 195.9 305.2 197.8 305 199C303.1 209.5 310.2 219.4 320.7 220.9C331.3 222.4 340.9 214.8 341.9 204.3C342.5 200.1 342.6 196.4 342.6 192.7H342.6z\"]\n};\nconst faStripeS = {\n  prefix: 'fab',\n  iconName: 'stripe-s',\n  icon: [384, 512, [], \"f42a\", \"M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.09 396.09 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z\"]\n};\nconst faMeta = {\n  prefix: 'fab',\n  iconName: 'meta',\n  icon: [640, 512, [], \"e49b\", \"M640 317.9C640 409.2 600.6 466.4 529.7 466.4C467.1 466.4 433.9 431.8 372.8 329.8L341.4 277.2C333.1 264.7 326.9 253 320.2 242.2C300.1 276 273.1 325.2 273.1 325.2C206.1 441.8 168.5 466.4 116.2 466.4C43.42 466.4 0 409.1 0 320.5C0 177.5 79.78 42.4 183.9 42.4C234.1 42.4 277.7 67.08 328.7 131.9C365.8 81.8 406.8 42.4 459.3 42.4C558.4 42.4 640 168.1 640 317.9H640zM287.4 192.2C244.5 130.1 216.5 111.7 183 111.7C121.1 111.7 69.22 217.8 69.22 321.7C69.22 370.2 87.7 397.4 118.8 397.4C149 397.4 167.8 378.4 222 293.6C222 293.6 246.7 254.5 287.4 192.2V192.2zM531.2 397.4C563.4 397.4 578.1 369.9 578.1 322.5C578.1 198.3 523.8 97.08 454.9 97.08C421.7 97.08 393.8 123 360 175.1C369.4 188.9 379.1 204.1 389.3 220.5L426.8 282.9C485.5 377 500.3 397.4 531.2 397.4L531.2 397.4z\"]\n};\nconst faLaravel = {\n  prefix: 'fab',\n  iconName: 'laravel',\n  icon: [512, 512, [], \"f3bd\", \"M107.2 0c2.5 0 4.7 .8 6.7 2l94.3 54.1c2.7 1.5 4.5 3.5 5.4 5.9c.9 2.2 .9 4.3 .9 5.6l0 193.4 69.2-39.7 0-100.3c0-2.6 .6-5 2.2-7.2c1.5-2.1 3.5-3.6 5.7-4.8c0 0 0 0 0 0l94-54c1.6-.9 3.4-1.6 5.5-1.6s4 .7 5.6 1.6l95.8 55.1c2.3 1.3 3.9 3 4.9 5.3c.9 2.1 .9 4.2 .9 5.8l0 107.2c0 2-.2 4.3-1.4 6.4c-1.2 2.2-3 3.7-5.1 4.9l-.1 .1-88 50.5 0 100c0 2.3-.3 4.8-1.6 7c-1.3 2.2-3.3 3.7-5.3 4.9c0 0 0 0-.1 0L208.7 510c-2.2 1.2-4.5 2-7.1 2s-4.9-.9-7.1-2l-.1-.1L7.1 402l-.5-.3c-1.1-.7-2.6-1.7-3.8-2.9C.9 396.9 0 394.6 0 391.6L0 65.9c0-4.8 3-7.9 5.5-9.3L100.5 2c2-1.2 4.3-2 6.8-2zM38.1 67.1l69 39.9 69.2-39.9L107.1 27.4l-69 39.7zm353 93.2l69-39.7-69-39.7-69.1 39.7 69.1 39.7zM189.2 89L120 128.8l0 186.4 69.2-39.9 0-186.4zM94.5 128.9L25.2 89.1l0 294.2 164 94.2 0-79.4-87.3-49.3-.2-.1c-1.3-.8-3.2-1.9-4.6-3.7c-1.7-2.1-2.5-4.7-2.5-7.7l0-208.5zm214.7 92.4l69.3 39.6 0-78.5-69.3-39.9 0 78.8zm94.5 39.6L473 221.2l0-78.8-69.3 39.9 0 78.5zM201.6 376.1l163.8-93.2-69-39.9L133 337.1l68.6 38.9zm12.9 101.5l164-94.2 0-78.8-164 93.6 0 79.4z\"]\n};\nconst faHotjar = {\n  prefix: 'fab',\n  iconName: 'hotjar',\n  icon: [512, 512, [], \"f3b1\", \"M361.5 0c0 131.6-80.7 176.8-140.2 209.4c-.6 .3-1.1 .6-1.6 .9c-53.8 30.2-88.7 49.8-89.6 122H32C32 200.8 112.7 155.6 172.2 123C227 93.2 262.5 73 262.5 0h98.9zM301 302.6c54.8-29.8 90.3-50 90.3-123h98c0 131.6-80.7 176.7-140.2 209.4c-54.8 29.8-90.3 50-90.3 123h-98c0-131.6 80.7-176.8 140.2-209.4z\"]\n};\nconst faBluetoothB = {\n  prefix: 'fab',\n  iconName: 'bluetooth-b',\n  icon: [320, 512, [], \"f294\", \"M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z\"]\n};\nconst faSquareLetterboxd = {\n  prefix: 'fab',\n  iconName: 'square-letterboxd',\n  icon: [448, 512, [], \"e62e\", \"M384 32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384zM105.1 187C66.4 187 35 218.3 35 257s31.4 70 70.1 70c24.8 0 46.5-12.8 59-32.2l.5-.7-.4-.6c-6.5-10.6-10.2-23.1-10.2-36.5c0-13.6 3.9-26.3 10.6-37.1c-12.4-19.8-34.4-32.9-59.5-32.9zM224 187c-24.8 0-46.5 12.8-59 32.2l-.5 .7 .4 .6c6.5 10.6 10.2 23.1 10.2 36.5c0 13.6-3.9 26.3-10.6 37.1C176.9 313.8 198.9 327 224 327c24.8 0 46.5-12.8 59-32.2l.5-.7-.4-.6c-6.5-10.6-10.2-23.1-10.2-36.5c0-13.6 3.9-26.3 10.6-37.1C271.1 200.2 249.1 187 224 187zm118.9 0c-24.8 0-46.5 12.8-59 32.2l-.5 .7 .4 .6c6.5 10.6 10.2 23.1 10.2 36.5c0 13.6-3.9 26.3-10.6 37.1c12.4 19.8 34.4 32.9 59.5 32.9c38.7 0 70.1-31.3 70.1-70s-31.4-70-70.1-70z\"]\n};\nconst faStickerMule = {\n  prefix: 'fab',\n  iconName: 'sticker-mule',\n  icon: [576, 512, [], \"f3f7\", \"M561.7 199.6c-1.3.3.3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3.5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8.4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5.5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5.5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4.5 1 1 2 1.5 3.5.5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5.5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5.3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6.5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3.8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z\"]\n};\nconst faCreativeCommonsZero = {\n  prefix: 'fab',\n  iconName: 'creative-commons-zero',\n  icon: [496, 512, [], \"f4f3\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4.5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z\"]\n};\nconst faHips = {\n  prefix: 'fab',\n  iconName: 'hips',\n  icon: [640, 512, [], \"f452\", \"M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7.9-2.7 2.7v279.2c0 1.9.9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5.4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4.2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3.7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z\"]\n};\nconst faCss = {\n  prefix: 'fab',\n  iconName: 'css',\n  icon: [448, 512, [], \"e6a2\", \"M376.3 32L0 32 0 408.3c0 19 7.6 37.2 21 50.7s31.7 21 50.7 21l304.6 0c19 0 37.2-7.6 50.7-21s21-31.7 21-50.7l0-304.6c0-19-7.6-37.2-21-50.7s-31.7-21-50.7-21zM332.4 431.4c-7.7-8.5-11.7-20.7-12-36.6l31.3 0c.2 14.1 5.1 21.1 14.8 21.1c4.9 0 8.4-1.6 10.5-4.7c2-3.1 3-8 3-14.8c0-5.4-1.3-9.9-4-13.4c-3.5-4.2-8.1-7.5-13.2-9.5L351.2 368c-10.3-4.9-17.8-10.8-22.5-17.6c-4.5-6.8-6.7-16.3-6.7-28.4c0-13.6 4-24.6 11.8-33.1c8.1-8.5 19.1-12.7 33.2-12.7c13.6 0 24.1 4.2 31.5 12.5c7.5 8.4 11.5 20.3 11.8 35.9l-30.1 0c.2-5.1-.9-10.2-3-14.8c-1.7-3.4-5-5.1-10-5.1c-8.8 0-13.2 5.2-13.2 15.7c0 5.3 1.1 9.4 3.2 12.6c3.1 3.5 7 6.2 11.4 7.8l11.1 4.9c11.5 5.3 19.7 11.7 24.8 19.4c5.1 7.7 7.6 18 7.6 31c0 15.5-4 27.4-12.3 35.7c-8.2 8.3-19.5 12.5-34.1 12.5s-25.6-4.2-33.4-12.7zm-101 0c-7.7-8.5-11.7-20.7-12-36.6l31.3 0c.2 14.1 5.1 21.1 14.8 21.1c4.9 0 8.4-1.6 10.4-4.7c2-3.1 3-8 3-14.8c0-5.4-1.3-9.9-3.9-13.4c-3.5-4.2-8.1-7.5-13.2-9.5L250.2 368c-10.3-4.9-17.8-10.8-22.5-17.6c-4.5-6.8-6.7-16.3-6.7-28.4c0-13.6 4-24.6 11.8-33.1c8.1-8.5 19.1-12.7 33.2-12.7c13.6 0 24.1 4.2 31.4 12.5c7.6 8.4 11.5 20.3 11.9 35.9l-30.1 0c.2-5.1-.9-10.2-3-14.8c-1.7-3.4-5-5.1-10-5.1c-8.8 0-13.2 5.2-13.2 15.7c0 5.3 1.1 9.4 3.2 12.6c3.1 3.5 7 6.2 11.4 7.8l11.1 4.9c11.5 5.3 19.7 11.7 24.8 19.4c5.1 7.7 7.6 18 7.6 31c0 15.5-4.1 27.4-12.3 35.7s-19.5 12.5-34.1 12.5s-25.6-4.2-33.4-12.7zm-105.6 1.1c-8.4-7.7-12.5-19.2-12.5-34.5l0-75.4c0-15.2 4.4-26.7 13.2-34.6c8.9-7.8 20.7-11.8 35.2-11.8c14.1 0 25.2 4 33.4 12c8.3 8 12.5 20 12.5 35.9l0 6-33.1 0 0-5.8c0-6.1-1.3-10.7-4-13.6c-1.1-1.5-2.6-2.7-4.3-3.5s-3.5-1.2-5.4-1.1c-5.4 0-9.2 1.8-11.4 5.6c-2.3 5.2-3.3 10.8-3 16.4l0 65.5c0 13.7 4.8 20.6 14.4 20.8c4.5 0 7.9-1.6 10.2-4.8c2.5-4.1 3.7-8.8 3.5-13.6l0-4.9 33.1 0 0 5.1c0 10.6-2.1 19.5-6.2 26.6c-4 6.9-9.9 12.5-17.1 16c-7.7 3.7-16.1 5.5-24.6 5.3c-14.2 0-25.5-3.9-33.8-11.6z\"]\n};\nconst faBehance = {\n  prefix: 'fab',\n  iconName: 'behance',\n  icon: [576, 512, [], \"f1b4\", \"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z\"]\n};\nconst faReddit = {\n  prefix: 'fab',\n  iconName: 'reddit',\n  icon: [512, 512, [], \"f1a1\", \"M0 256C0 114.6 114.6 0 256 0S512 114.6 512 256s-114.6 256-256 256L37.1 512c-13.7 0-20.5-16.5-10.9-26.2L75 437C28.7 390.7 0 326.7 0 256zM349.6 153.6c23.6 0 42.7-19.1 42.7-42.7s-19.1-42.7-42.7-42.7c-20.6 0-37.8 14.6-41.8 34c-34.5 3.7-61.4 33-61.4 68.4l0 .2c-37.5 1.6-71.8 12.3-99 29.1c-10.1-7.8-22.8-12.5-36.5-12.5c-33 0-59.8 26.8-59.8 59.8c0 24 14.1 44.6 34.4 54.1c2 69.4 77.6 125.2 170.6 125.2s168.7-55.9 170.6-125.3c20.2-9.6 34.1-30.2 34.1-54c0-33-26.8-59.8-59.8-59.8c-13.7 0-26.3 4.6-36.4 12.4c-27.4-17-62.1-27.7-100-29.1l0-.2c0-25.4 18.9-46.5 43.4-49.9l0 0c4.4 18.8 21.3 32.8 41.5 32.8zM177.1 246.9c16.7 0 29.5 17.6 28.5 39.3s-13.5 29.6-30.3 29.6s-31.4-8.8-30.4-30.5s15.4-38.3 32.1-38.3zm190.1 38.3c1 21.7-13.7 30.5-30.4 30.5s-29.3-7.9-30.3-29.6c-1-21.7 11.8-39.3 28.5-39.3s31.2 16.6 32.1 38.3zm-48.1 56.7c-10.3 24.6-34.6 41.9-63 41.9s-52.7-17.3-63-41.9c-1.2-2.9 .8-6.2 3.9-6.5c18.4-1.9 38.3-2.9 59.1-2.9s40.7 1 59.1 2.9c3.1 .3 5.1 3.6 3.9 6.5z\"]\n};\nconst faDiscord = {\n  prefix: 'fab',\n  iconName: 'discord',\n  icon: [640, 512, [], \"f392\", \"M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z\"]\n};\nconst faChrome = {\n  prefix: 'fab',\n  iconName: 'chrome',\n  icon: [512, 512, [], \"f268\", \"M0 256C0 209.4 12.47 165.6 34.27 127.1L144.1 318.3C166 357.5 207.9 384 256 384C270.3 384 283.1 381.7 296.8 377.4L220.5 509.6C95.9 492.3 0 385.3 0 256zM365.1 321.6C377.4 302.4 384 279.1 384 256C384 217.8 367.2 183.5 340.7 160H493.4C505.4 189.6 512 222.1 512 256C512 397.4 397.4 511.1 256 512L365.1 321.6zM477.8 128H256C193.1 128 142.3 172.1 130.5 230.7L54.19 98.47C101 38.53 174 0 256 0C350.8 0 433.5 51.48 477.8 128V128zM168 256C168 207.4 207.4 168 256 168C304.6 168 344 207.4 344 256C344 304.6 304.6 344 256 344C207.4 344 168 304.6 168 256z\"]\n};\nconst faAppStoreIos = {\n  prefix: 'fab',\n  iconName: 'app-store-ios',\n  icon: [448, 512, [], \"f370\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z\"]\n};\nconst faCcDiscover = {\n  prefix: 'fab',\n  iconName: 'cc-discover',\n  icon: [576, 512, [], \"f1f2\", \"M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9.1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z\"]\n};\nconst faWpbeginner = {\n  prefix: 'fab',\n  iconName: 'wpbeginner',\n  icon: [512, 512, [], \"f297\", \"M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z\"]\n};\nconst faConfluence = {\n  prefix: 'fab',\n  iconName: 'confluence',\n  icon: [512, 512, [], \"f78d\", \"M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1.1-.2.1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8.4 21.7-7.7.1-.1.1-.3.2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2.3-.4.6-.6 1-67.3 112.6-81.1 95.6-280.6.9-8.1-3.9-17.8-.4-21.7 7.7-.1.1-.1.3-.2.4L22.2 141.3c-3.6 8.1.1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z\"]\n};\nconst faShoelace = {\n  prefix: 'fab',\n  iconName: 'shoelace',\n  icon: [512, 512, [], \"e60c\", \"M404.9 331c2.2-1.1 4.4-2.3 6.5-3.7l8.3-4.8c1.5-1.1 4.4-3.4 8.7-6.7l.5-.5c3.4-3.4 7.2-5 11.3-4.9c1.8 0 3.9 .5 6.4 1.5l31-27.5c.9-.7 1.7-1.3 2.6-1.8h.2c3.3-1.9 6-1.8 8.2 .4c3.9 2.1 4.2 5.6 .9 10.6L456.9 322c.2 .5 .4 1 .4 1.5c.5 2.2 .3 4.4-.5 6.6c-.7 1.5-1.8 2.9-3.1 4.2c-1.4 1.4-2.7 2.8-4.2 4.2l-18.8 13.7c-1.7 1.2-3.4 2.3-5.1 3.3c-2.1 1.3-4.3 2.5-6.6 3.6c-1 .4-1.9 .9-2.9 1.3c-5.9 2.5-11.9 4.2-18.2 5c-2.9 24.5-11.3 47.1-25.1 67.8c-17.5 25.7-41.4 45.4-71.8 58.8c-30.2 13.5-63 20.2-98.2 20.2c-48.6-.5-88-11.4-118.2-32.8C49.5 454.4 32 421.5 32 380.3v-5.6c1.2-28.1 9.5-54.6 24.8-79.8c15.1-24.9 37.1-41.7 66.1-50.5c14.9-4.4 29.9-6.6 45-6.6c15.5 0 31.6 2.9 48.1 8.6s35.2 15.5 55.9 29.5L326 312.2c15.1 9.8 28.8 16.5 41.2 20c-2.6-25.1-11.7-46.6-27.3-64.5c-15.7-18.1-35.6-31.3-59.9-39.7l-23.3-8c-21.4-7.5-37.3-14.9-47.7-22.2c-28.2-19.1-43.8-45.2-47-78.5l-.5-9.8c0-32.1 13-58.9 39-80.5C223.5 9.7 251.1 0 283 0c24 0 45.6 6.9 64.7 20.8c19.2 14 30.1 33.8 32.6 59.4l.5 10c0 18.6-4.8 34.5-14.4 47.7c-9.8 13.2-18.5 19.9-26 19.9c-1.6-.1-3.1-.3-4.5-.6l-34 32c-5.5 3-9.2 2.5-11.1-1.6c-1.9-2.2-1.8-4.9 .5-8.2l.2-.2c.5-.7 1.2-1.5 2-2.4l31.6-30c-.4-1.5-.6-3.1-.6-4.8c0-4.1 1.6-7.6 4.9-10.4c13.8-12.4 20.8-26.7 20.8-42.8c0-16-6.1-29.5-18.2-40.4s-28.7-16.5-49.7-16.8c-26.2 0-47.8 7.9-64.7 23.7S192.3 89.9 192.3 112c0 17.8 6.9 33.9 20.6 48.3c13.6 14.2 34.6 25.4 63 33.5c39.8 11.5 70.2 31 91.3 58.3c18.7 24.2 29.1 51.3 31.3 81.4c2.2-.7 4.3-1.5 6.5-2.6zM294.1 178.7c0 1.1 .6 1.6 1.8 1.6c.1 0 9.7-8.9 28.8-26.6c0-2.4-5.1 .9-15.3 10c-10.2 9.2-15.3 14.2-15.3 14.9zm8 6.4c0-1-.5-1.5-1.5-1.5c-1.1 0-2.1 .5-2.9 1.6c-1.9-.1-3.3 .1-4.2 .7c-.4 .2-.5 .5-.5 .7c0 .7 .5 1.3 1.5 1.6h3.3c2.9-1.1 4.4-2.2 4.4-3.3zm22.6-19.9c0-2.8-1.6-2.8-4.9 0c-1.6 1.5-3.6 3.5-6 6.2c-.8 .6-2.6 2.2-5.3 4.9c-2.8 2.9-4.2 4.7-4.2 5.3l.2 1.3c.7 .2 1.2 .4 1.5 .4c.1 0 3.3-2.9 9.5-8.7s9.3-8.9 9.3-9.3zm159.7 120l-30.6 27c1.8 1 3.2 2.4 4 4.2l30.2-27c.2-1.2 .1-2.2-.5-2.9c-.6-.5-1.6-.9-3.1-1.3zm-1.6-.9l-.7-.7-27 21.9 1.6 2 26-23.1zM366.6 363.9c-8-2.1-15.4-4.6-22.2-7.5c-15.3-6.2-34.3-17-57-32.4L250 298.7c-15.8-10.1-30.2-17.6-43.2-22.6c-13.1-4.9-26-7.3-38.6-7.3h-5.5c-32.2 1.7-57.2 13.8-75 36.2c-16.6 20.8-25 45.3-25 73.6c0 31.8 12.8 56.7 38.2 74.7c25.4 18.1 60.2 27.1 104.4 27.1c34.7 0 64-6.2 87.8-18.6c23.7-12.4 42.1-28.8 55.2-49.2c9.8-15.5 15.9-31.8 18.2-48.8z\"]\n};\nconst faMdb = {\n  prefix: 'fab',\n  iconName: 'mdb',\n  icon: [576, 512, [], \"f8ca\", \"M17.37 160.41L7 352h43.91l5.59-79.83L84.43 352h44.71l25.54-77.43 4.79 77.43H205l-12.79-191.59H146.7L106 277.74 63.67 160.41zm281 0h-47.9V352h47.9s95 .8 94.2-95.79c-.78-94.21-94.18-95.78-94.18-95.78zm-1.2 146.46V204.78s46 4.27 46.8 50.57-46.78 51.54-46.78 51.54zm238.29-74.24a56.16 56.16 0 0 0 8-38.31c-5.34-35.76-55.08-34.32-55.08-34.32h-51.9v191.58H482s87 4.79 87-63.85c0-43.14-33.52-55.08-33.52-55.08zm-51.9-31.94s13.57-1.59 16 9.59c1.43 6.66-4 12-4 12h-12v-21.57zm-.1 109.46l.1-24.92V267h.08s41.58-4.73 41.19 22.43c-.33 25.65-41.35 20.74-41.35 20.74z\"]\n};\nconst faDochub = {\n  prefix: 'fab',\n  iconName: 'dochub',\n  icon: [416, 512, [], \"f394\", \"M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z\"]\n};\nconst faAccessibleIcon = {\n  prefix: 'fab',\n  iconName: 'accessible-icon',\n  icon: [448, 512, [62107], \"f368\", \"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\"]\n};\nconst faEbay = {\n  prefix: 'fab',\n  iconName: 'ebay',\n  icon: [640, 512, [], \"f4f4\", \"M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7.4-42.4.9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6.3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z\"]\n};\nconst faAmazon = {\n  prefix: 'fab',\n  iconName: 'amazon',\n  icon: [448, 512, [], \"f270\", \"M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\"]\n};\nconst faUnsplash = {\n  prefix: 'fab',\n  iconName: 'unsplash',\n  icon: [448, 512, [], \"e07c\", \"M448,230.17V480H0V230.17H141.13V355.09H306.87V230.17ZM306.87,32H141.13V156.91H306.87Z\"]\n};\nconst faYarn = {\n  prefix: 'fab',\n  iconName: 'yarn',\n  icon: [496, 512, [], \"f7e3\", \"M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4.1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3.8-10.8-5.7.8-19.2.8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3.8 1.4 13.7.8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2.9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4.2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z\"]\n};\nconst faSquareSteam = {\n  prefix: 'fab',\n  iconName: 'square-steam',\n  icon: [448, 512, [\"steam-square\"], \"f1b7\", \"M165.6 309.1c18.6 7.7 27.3 28.9 19.6 47.4s-29 27.2-47.6 19.4l-28.5-11.8c5 10.6 13.8 19.4 25.4 24.2c25.2 10.5 54.1-1.4 64.6-26.5c5.1-12.1 5.1-25.5 .1-37.7c-5.1-12.1-14.5-21.6-26.7-26.7c-12.1-5-25-4.8-36.4-.5l29.5 12.2zM448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V240.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8c-31.8 0-58.5-22.7-64.5-52.7L0 319.2V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM241.9 196.2a58.4 58.4 0 1 0 116.8 0 58.4 58.4 0 1 0 -116.8 0zm14.6-.1a43.9 43.9 0 1 1 87.8 0 43.9 43.9 0 1 1 -87.8 0z\"]\n};\nconst faSteamSquare = faSquareSteam;\nconst fa500px = {\n  prefix: 'fab',\n  iconName: '500px',\n  icon: [448, 512, [], \"f26e\", \"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z\"]\n};\nconst faSquareVimeo = {\n  prefix: 'fab',\n  iconName: 'square-vimeo',\n  icon: [448, 512, [\"vimeo-square\"], \"f194\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM318.5 309.5C275 366 238.2 394.3 208.1 394.3c-18.7 0-34.4-17.2-47.3-51.6c-3.8-13.9-7.3-26.9-10.5-39c-18.2-68.3-28.6-107.4-46.2-107.4c-2.4 0-10.8 5-25.1 15.1L64 192c7-6.1 13.9-12.4 20.6-18.5c29.1-26.3 55.6-50.3 73.5-51.9c24.9-2.4 40.2 14.6 46 51.1c20.5 129.6 29.6 149.2 66.8 90.5c13.4-21.2 20.6-37.2 21.5-48.3c3.4-32.8-25.6-30.6-45.2-22.2c15.7-51.5 45.8-76.5 90.1-75.1c32.9 1 48.4 22.4 46.5 64c-1.4 31.1-23.2 73.8-65.3 127.9z\"]\n};\nconst faVimeoSquare = faSquareVimeo;\nconst faAsymmetrik = {\n  prefix: 'fab',\n  iconName: 'asymmetrik',\n  icon: [576, 512, [], \"f372\", \"M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\"]\n};\nconst faFontAwesome = {\n  prefix: 'fab',\n  iconName: 'font-awesome',\n  icon: [512, 512, [62501, 62694, \"font-awesome-flag\", \"font-awesome-logo-full\"], \"f2b4\", \"M91.7 96C106.3 86.8 116 70.5 116 52C116 23.3 92.7 0 64 0S12 23.3 12 52c0 16.7 7.8 31.5 20 41l0 3 0 352 0 64 64 0 0-64 373.6 0c14.6 0 26.4-11.8 26.4-26.4c0-3.7-.8-7.3-2.3-10.7L432 272l61.7-138.9c1.5-3.4 2.3-7 2.3-10.7c0-14.6-11.8-26.4-26.4-26.4L91.7 96z\"]\n};\nconst faFontAwesomeFlag = faFontAwesome;\nconst faFontAwesomeLogoFull = faFontAwesome;\nconst faGratipay = {\n  prefix: 'fab',\n  iconName: 'gratipay',\n  icon: [496, 512, [], \"f184\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z\"]\n};\nconst faApple = {\n  prefix: 'fab',\n  iconName: 'apple',\n  icon: [384, 512, [], \"f179\", \"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\"]\n};\nconst faHive = {\n  prefix: 'fab',\n  iconName: 'hive',\n  icon: [512, 512, [], \"e07f\", \"M260.353,254.878,131.538,33.1a2.208,2.208,0,0,0-3.829.009L.3,254.887A2.234,2.234,0,0,0,.3,257.122L129.116,478.9a2.208,2.208,0,0,0,3.83-.009L260.358,257.113A2.239,2.239,0,0,0,260.353,254.878Zm39.078-25.713a2.19,2.19,0,0,0,1.9,1.111h66.509a2.226,2.226,0,0,0,1.9-3.341L259.115,33.111a2.187,2.187,0,0,0-1.9-1.111H190.707a2.226,2.226,0,0,0-1.9,3.341ZM511.7,254.886,384.9,33.112A2.2,2.2,0,0,0,382.99,32h-66.6a2.226,2.226,0,0,0-1.906,3.34L440.652,256,314.481,476.66a2.226,2.226,0,0,0,1.906,3.34h66.6a2.2,2.2,0,0,0,1.906-1.112L511.7,257.114A2.243,2.243,0,0,0,511.7,254.886ZM366.016,284.917H299.508a2.187,2.187,0,0,0-1.9,1.111l-108.8,190.631a2.226,2.226,0,0,0,1.9,3.341h66.509a2.187,2.187,0,0,0,1.9-1.111l108.8-190.631A2.226,2.226,0,0,0,366.016,284.917Z\"]\n};\nconst faGitkraken = {\n  prefix: 'fab',\n  iconName: 'gitkraken',\n  icon: [592, 512, [], \"f3a6\", \"M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z\"]\n};\nconst faKeybase = {\n  prefix: 'fab',\n  iconName: 'keybase',\n  icon: [448, 512, [], \"f4f5\", \"M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z\"]\n};\nconst faApplePay = {\n  prefix: 'fab',\n  iconName: 'apple-pay',\n  icon: [640, 512, [], \"f415\", \"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z\"]\n};\nconst faPadlet = {\n  prefix: 'fab',\n  iconName: 'padlet',\n  icon: [640, 512, [], \"e4a0\", \"M297.9 0L298 .001C305.6 .1078 312.4 4.72 315.5 11.78L447.5 320.3L447.8 320.2L448 320.6L445.2 330.6L402.3 488.6C398.6 504.8 382.6 514.9 366.5 511.2L298.1 495.6L229.6 511.2C213.5 514.9 197.5 504.8 193.8 488.6L150.9 330.6L148.2 320.6L148.3 320.2L280.4 11.78C283.4 4.797 290.3 .1837 297.9 .0006L297.9 0zM160.1 322.1L291.1 361.2L298 483.7L305.9 362.2L436.5 322.9L436.7 322.8L305.7 347.9L297.1 27.72L291.9 347.9L160.1 322.1zM426 222.6L520.4 181.6H594.2L437.2 429.2L468.8 320.2L426 222.6zM597.5 181.4L638.9 257.6C642.9 265.1 635 273.5 627.3 269.8L579.7 247.1L597.5 181.4zM127.3 318.5L158.7 430L1.61 154.5C-4.292 144.1 7.128 132.5 17.55 138.3L169.4 222.5L127.3 318.5z\"]\n};\nconst faAmazonPay = {\n  prefix: 'fab',\n  iconName: 'amazon-pay',\n  icon: [640, 512, [], \"f42c\", \"M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.88 595.88 0 0 0 127.4 46.3 616.61 616.61 0 0 0 63.2 11.8 603.33 603.33 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.66 603.66 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1-9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.31 473.31 0 0 1-75.1 17.6 431 431 0 0 1-53.2 4.8 21.3 21.3 0 0 0-2.5.3H308a21.3 21.3 0 0 0-2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1-50.4-5.3A448.4 448.4 0 0 1 164 420a443.33 443.33 0 0 1-145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3.6a80.92 80.92 0 0 0-38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1-.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1-1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9.4a148 148 0 0 0-28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9a7.84 7.84 0 0 1-.2 1.4c-.5-.1-.9 0-1.3-.1a180.56 180.56 0 0 0-32-4.9c-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0-.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7a3.33 3.33 0 0 1-1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8a20.08 20.08 0 0 1-12.4-13.3 32.9 32.9 0 0 1-.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0-21-3.9 147.32 147.32 0 0 0-39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0-3.7 3.5 5.11 5.11 0 0 0-.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0-1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.91 145.91 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1-15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.18 108.18 0 0 0 16.9 2c17.1.4 30.7-6.5 39.5-21.4a131.63 131.63 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0-7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\"]\n};\nconst faSquareGithub = {\n  prefix: 'fab',\n  iconName: 'square-github',\n  icon: [448, 512, [\"github-square\"], \"f092\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM265.8 407.7c0-1.8 0-6 .1-11.6c.1-11.4 .1-28.8 .1-43.7c0-15.6-5.2-25.5-11.3-30.7c37-4.1 76-9.2 76-73.1c0-18.2-6.5-27.3-17.1-39c1.7-4.3 7.4-22-1.7-45c-13.9-4.3-45.7 17.9-45.7 17.9c-13.2-3.7-27.5-5.6-41.6-5.6s-28.4 1.9-41.6 5.6c0 0-31.8-22.2-45.7-17.9c-9.1 22.9-3.5 40.6-1.7 45c-10.6 11.7-15.6 20.8-15.6 39c0 63.6 37.3 69 74.3 73.1c-4.8 4.3-9.1 11.7-10.6 22.3c-9.5 4.3-33.8 11.7-48.3-13.9c-9.1-15.8-25.5-17.1-25.5-17.1c-16.2-.2-1.1 10.2-1.1 10.2c10.8 5 18.4 24.2 18.4 24.2c9.7 29.7 56.1 19.7 56.1 19.7c0 9 .1 21.7 .1 30.6c0 4.8 .1 8.6 .1 10c0 4.3-3 9.5-11.5 8C106 393.6 59.8 330.8 59.8 257.4c0-91.8 70.2-161.5 162-161.5s166.2 69.7 166.2 161.5c.1 73.4-44.7 136.3-110.7 158.3c-8.4 1.5-11.5-3.7-11.5-8zm-90.5-54.8c-.2-1.5 1.1-2.8 3-3.2c1.9-.2 3.7 .6 3.9 1.9c.3 1.3-1 2.6-3 3c-1.9 .4-3.7-.4-3.9-1.7zm-9.1 3.2c-2.2 .2-3.7-.9-3.7-2.4c0-1.3 1.5-2.4 3.5-2.4c1.9-.2 3.7 .9 3.7 2.4c0 1.3-1.5 2.4-3.5 2.4zm-14.3-2.2c-1.9-.4-3.2-1.9-2.8-3.2s2.4-1.9 4.1-1.5c2 .6 3.3 2.1 2.8 3.4c-.4 1.3-2.4 1.9-4.1 1.3zm-12.5-7.3c-1.5-1.3-1.9-3.2-.9-4.1c.9-1.1 2.8-.9 4.3 .6c1.3 1.3 1.8 3.3 .9 4.1c-.9 1.1-2.8 .9-4.3-.6zm-8.5-10c-1.1-1.5-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3c1.1 1.5 1.1 3.3 0 4.1c-.9 .6-2.6 0-3.7-1.5zm-6.3-8.8c-1.1-1.3-1.3-2.8-.4-3.5c.9-.9 2.4-.4 3.5 .6c1.1 1.3 1.3 2.8 .4 3.5c-.9 .9-2.4 .4-3.5-.6zm-6-6.4c-1.3-.6-1.9-1.7-1.5-2.6c.4-.6 1.5-.9 2.8-.4c1.3 .7 1.9 1.8 1.5 2.6c-.4 .9-1.7 1.1-2.8 .4z\"]\n};\nconst faGithubSquare = faSquareGithub;\nconst faStumbleupon = {\n  prefix: 'fab',\n  iconName: 'stumbleupon',\n  icon: [512, 512, [], \"f1a4\", \"M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z\"]\n};\nconst faFedex = {\n  prefix: 'fab',\n  iconName: 'fedex',\n  icon: [640, 512, [], \"f797\", \"M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z\"]\n};\nconst faPhoenixFramework = {\n  prefix: 'fab',\n  iconName: 'phoenix-framework',\n  icon: [640, 512, [], \"f3dc\", \"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\"]\n};\nconst faShopify = {\n  prefix: 'fab',\n  iconName: 'shopify',\n  icon: [448, 512, [], \"e057\", \"M388.32,104.1a4.66,4.66,0,0,0-4.4-4c-2,0-37.23-.8-37.23-.8s-21.61-20.82-29.62-28.83V503.2L442.76,472S388.72,106.5,388.32,104.1ZM288.65,70.47a116.67,116.67,0,0,0-7.21-17.61C271,32.85,255.42,22,237,22a15,15,0,0,0-4,.4c-.4-.8-1.2-1.2-1.6-2C223.4,11.63,213,7.63,200.58,8c-24,.8-48,18-67.25,48.83-13.61,21.62-24,48.84-26.82,70.06-27.62,8.4-46.83,14.41-47.23,14.81-14,4.4-14.41,4.8-16,18-1.2,10-38,291.82-38,291.82L307.86,504V65.67a41.66,41.66,0,0,0-4.4.4S297.86,67.67,288.65,70.47ZM233.41,87.69c-16,4.8-33.63,10.4-50.84,15.61,4.8-18.82,14.41-37.63,25.62-50,4.4-4.4,10.41-9.61,17.21-12.81C232.21,54.86,233.81,74.48,233.41,87.69ZM200.58,24.44A27.49,27.49,0,0,1,215,28c-6.4,3.2-12.81,8.41-18.81,14.41-15.21,16.42-26.82,42-31.62,66.45-14.42,4.41-28.83,8.81-42,12.81C131.33,83.28,163.75,25.24,200.58,24.44ZM154.15,244.61c1.6,25.61,69.25,31.22,73.25,91.66,2.8,47.64-25.22,80.06-65.65,82.47-48.83,3.2-75.65-25.62-75.65-25.62l10.4-44s26.82,20.42,48.44,18.82c14-.8,19.22-12.41,18.81-20.42-2-33.62-57.24-31.62-60.84-86.86-3.2-46.44,27.22-93.27,94.47-97.68,26-1.6,39.23,4.81,39.23,4.81L221.4,225.39s-17.21-8-37.63-6.4C154.15,221,153.75,239.8,154.15,244.61ZM249.42,82.88c0-12-1.6-29.22-7.21-43.63,18.42,3.6,27.22,24,31.23,36.43Q262.63,78.68,249.42,82.88Z\"]\n};\nconst faNeos = {\n  prefix: 'fab',\n  iconName: 'neos',\n  icon: [512, 512, [], \"f612\", \"M415.44 512h-95.11L212.12 357.46v91.1L125.69 512H28V29.82L68.47 0h108.05l123.74 176.13V63.45L386.69 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.64h84.79l52.35-38.17h-78.27L69 13zm82.54 466.61l80-58.78v-101l-79.76-114.4v220.94L49 501.89h72.34zM80.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L170.91 10.77zM311 191.65l72 102.81V15.93l-72 53v122.72z\"]\n};\nconst faSquareThreads = {\n  prefix: 'fab',\n  iconName: 'square-threads',\n  icon: [448, 512, [], \"e619\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM294.2 244.3c19.5 9.3 33.7 23.5 41.2 40.9c10.4 24.3 11.4 63.9-20.2 95.4c-24.2 24.1-53.5 35-95.1 35.3h-.2c-46.8-.3-82.8-16.1-106.9-46.8C91.5 341.8 80.4 303.7 80 256v-.1-.1c.4-47.7 11.5-85.7 33-113.1c24.2-30.7 60.2-46.5 106.9-46.8h.2c46.9 .3 83.3 16 108.2 46.6c12.3 15.1 21.3 33.3 27 54.4l-26.9 7.2c-4.7-17.2-11.9-31.9-21.4-43.6c-19.4-23.9-48.7-36.1-87-36.4c-38 .3-66.8 12.5-85.5 36.2c-17.5 22.3-26.6 54.4-26.9 95.5c.3 41.1 9.4 73.3 26.9 95.5c18.7 23.8 47.4 36 85.5 36.2c34.3-.3 56.9-8.4 75.8-27.3c21.5-21.5 21.1-47.9 14.2-64c-4-9.4-11.4-17.3-21.3-23.3c-2.4 18-7.9 32.2-16.5 43.2c-11.4 14.5-27.7 22.4-48.4 23.5c-15.7 .9-30.8-2.9-42.6-10.7c-13.9-9.2-22-23.2-22.9-39.5c-1.7-32.2 23.8-55.3 63.5-57.6c14.1-.8 27.3-.2 39.5 1.9c-1.6-9.9-4.9-17.7-9.8-23.4c-6.7-7.8-17.1-11.8-30.8-11.9h-.4c-11 0-26 3.1-35.6 17.6l-23-15.8c12.8-19.4 33.6-30.1 58.5-30.1h.6c41.8 .3 66.6 26.3 69.1 71.8c1.4 .6 2.8 1.2 4.2 1.9l.1 .5zm-71.8 67.5c17-.9 36.4-7.6 39.7-48.8c-8.8-1.9-18.6-2.9-29-2.9c-3.2 0-6.4 .1-9.6 .3c-28.6 1.6-38.1 15.5-37.4 27.9c.9 16.7 19 24.5 36.4 23.6l-.1-.1z\"]\n};\nconst faHackerrank = {\n  prefix: 'fab',\n  iconName: 'hackerrank',\n  icon: [512, 512, [], \"f5f7\", \"M477.5 128C463 103.05 285.13 0 256.16 0S49.25 102.79 34.84 128s-14.49 230.8 0 256 192.38 128 221.32 128S463 409.08 477.49 384s14.51-231 .01-256zM316.13 414.22c-4 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11.92-33.44 3-84-.15-212.67v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.64 336 341.29 336 373.69c8.87.35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z\"]\n};\nconst faResearchgate = {\n  prefix: 'fab',\n  iconName: 'researchgate',\n  icon: [448, 512, [], \"f4f8\", \"M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\"]\n};\nconst faSwift = {\n  prefix: 'fab',\n  iconName: 'swift',\n  icon: [448, 512, [], \"f8e1\", \"M448 156.09c0-4.51-.08-9-.2-13.52a196.31 196.31 0 0 0-2.58-29.42 99.62 99.62 0 0 0-9.22-28A94.08 94.08 0 0 0 394.84 44a99.17 99.17 0 0 0-28-9.22 195 195 0 0 0-29.43-2.59c-4.51-.12-9-.17-13.52-.2H124.14c-4.51 0-9 .08-13.52.2-2.45.07-4.91.15-7.37.27a171.68 171.68 0 0 0-22.06 2.32 103.06 103.06 0 0 0-21.21 6.1q-3.46 1.45-6.81 3.12a94.66 94.66 0 0 0-18.39 12.32c-1.88 1.61-3.69 3.28-5.43 5A93.86 93.86 0 0 0 12 85.17a99.45 99.45 0 0 0-9.22 28 196.31 196.31 0 0 0-2.54 29.4c-.13 4.51-.18 9-.21 13.52v199.83c0 4.51.08 9 .21 13.51a196.08 196.08 0 0 0 2.58 29.42 99.3 99.3 0 0 0 9.22 28A94.31 94.31 0 0 0 53.17 468a99.47 99.47 0 0 0 28 9.21 195 195 0 0 0 29.43 2.59c4.5.12 9 .17 13.52.2H323.91c4.51 0 9-.08 13.52-.2a196.59 196.59 0 0 0 29.44-2.59 99.57 99.57 0 0 0 28-9.21A94.22 94.22 0 0 0 436 426.84a99.3 99.3 0 0 0 9.22-28 194.79 194.79 0 0 0 2.59-29.42c.12-4.5.17-9 .2-13.51V172.14c-.01-5.35-.01-10.7-.01-16.05zm-69.88 241c-20-38.93-57.23-29.27-76.31-19.47-1.72 1-3.48 2-5.25 3l-.42.25c-39.5 21-92.53 22.54-145.85-.38A234.64 234.64 0 0 1 45 290.12a230.63 230.63 0 0 0 39.17 23.37c56.36 26.4 113 24.49 153 0-57-43.85-104.6-101-141.09-147.22a197.09 197.09 0 0 1-18.78-25.9c43.7 40 112.7 90.22 137.48 104.12-52.57-55.49-98.89-123.94-96.72-121.74 82.79 83.42 159.18 130.59 159.18 130.59 2.88 1.58 5 2.85 6.73 4a127.44 127.44 0 0 0 4.16-12.47c13.22-48.33-1.66-103.58-35.31-149.2C329.61 141.75 375 229.34 356.4 303.42c-.44 1.73-.95 3.4-1.44 5.09 38.52 47.4 28.04 98.17 23.13 88.59z\"]\n};\nconst faAngular = {\n  prefix: 'fab',\n  iconName: 'angular',\n  icon: [448, 512, [], \"f420\", \"M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z\"]\n};\nconst faSpeakap = {\n  prefix: 'fab',\n  iconName: 'speakap',\n  icon: [448, 512, [], \"f3f3\", \"M64 391.78C-15.41 303.59-8 167.42 80.64 87.64s224.8-73 304.21 15.24 72 224.36-16.64 304.14c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.91 35-346.23-67.5zm213.31-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33.29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23.18 96.42.33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75.41-23.25 31-25.37 37.53-25.26.43 0 26.62.26 39.62 17.37z\"]\n};\nconst faAngrycreative = {\n  prefix: 'fab',\n  iconName: 'angrycreative',\n  icon: [640, 512, [], \"f36e\", \"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\"]\n};\nconst faYCombinator = {\n  prefix: 'fab',\n  iconName: 'y-combinator',\n  icon: [448, 512, [], \"f23b\", \"M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z\"]\n};\nconst faEmpire = {\n  prefix: 'fab',\n  iconName: 'empire',\n  icon: [496, 512, [], \"f1d1\", \"M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z\"]\n};\nconst faEnvira = {\n  prefix: 'fab',\n  iconName: 'envira',\n  icon: [448, 512, [], \"f299\", \"M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\"]\n};\nconst faGoogleScholar = {\n  prefix: 'fab',\n  iconName: 'google-scholar',\n  icon: [512, 512, [], \"e63b\", \"M390.9 298.5c0 0 0 .1 .1 .1c9.2 19.4 14.4 41.1 14.4 64C405.3 445.1 338.5 512 256 512s-149.3-66.9-149.3-149.3c0-22.9 5.2-44.6 14.4-64h0c1.7-3.6 3.6-7.2 5.6-10.7c4.4-7.6 9.4-14.7 15-21.3c27.4-32.6 68.5-53.3 114.4-53.3c33.6 0 64.6 11.1 89.6 29.9c9.1 6.9 17.4 14.7 24.8 23.5c5.6 6.6 10.6 13.8 15 21.3c2 3.4 3.8 7 5.5 10.5zm26.4-18.8c-30.1-58.4-91-98.4-161.3-98.4s-131.2 40-161.3 98.4L0 202.7 256 0 512 202.7l-94.7 77.1z\"]\n};\nconst faSquareGitlab = {\n  prefix: 'fab',\n  iconName: 'square-gitlab',\n  icon: [448, 512, [\"gitlab-square\"], \"e5ae\", \"M0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96zm337.5 12.5l44.6 116.4 .4 1.2c5.6 16.8 7.2 35.2 2.3 52.5c-5 17.2-15.4 32.4-29.8 43.3l-.2 .1-68.4 51.2-54.1 40.9c-.5 .2-1.1 .5-1.7 .8c-2 1-4.4 2-6.7 2c-3 0-6.8-1.8-8.3-2.8l-54.2-40.9L93.5 322.3l-.4-.3-.2-.1c-14.3-10.8-24.8-26-29.7-43.3s-4.2-35.7 2.2-52.5l.5-1.2 44.7-116.4c.9-2.3 2.5-4.3 4.5-5.6c1.6-1 3.4-1.6 5.2-1.8c1.3-.7 2.1-.4 3.4 .1c.6 .2 1.2 .5 2 .7c1 .4 1.6 .9 2.4 1.5c.6 .4 1.2 1 2.1 1.5c1.2 1.4 2.2 3 2.7 4.8l29.2 92.2H285l30.2-92.2c.5-1.8 1.4-3.4 2.6-4.8s2.8-2.4 4.5-3.1c1.7-.6 3.6-.9 5.4-.7s3.6 .8 5.2 1.8c2 1.3 3.7 3.3 4.6 5.6z\"]\n};\nconst faGitlabSquare = faSquareGitlab;\nconst faStudiovinari = {\n  prefix: 'fab',\n  iconName: 'studiovinari',\n  icon: [512, 512, [], \"f3f8\", \"M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\"]\n};\nconst faPiedPiper = {\n  prefix: 'fab',\n  iconName: 'pied-piper',\n  icon: [480, 512, [], \"f2ae\", \"M455.93,23.2C429.23,30,387.79,51.69,341.35,90.66A206,206,0,0,0,240,64C125.13,64,32,157.12,32,272s93.13,208,208,208,208-93.13,208-208a207.25,207.25,0,0,0-58.75-144.81,155.35,155.35,0,0,0-17,27.4A176.16,176.16,0,0,1,417.1,272c0,97.66-79.44,177.11-177.09,177.11a175.81,175.81,0,0,1-87.63-23.4c82.94-107.33,150.79-37.77,184.31-226.65,5.79-32.62,28-94.26,126.23-160.18C471,33.45,465.35,20.8,455.93,23.2ZM125,406.4A176.66,176.66,0,0,1,62.9,272C62.9,174.34,142.35,94.9,240,94.9a174,174,0,0,1,76.63,17.75C250.64,174.76,189.77,265.52,125,406.4Z\"]\n};\nconst faWordpress = {\n  prefix: 'fab',\n  iconName: 'wordpress',\n  icon: [512, 512, [], \"f19a\", \"M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z\"]\n};\nconst faProductHunt = {\n  prefix: 'fab',\n  iconName: 'product-hunt',\n  icon: [512, 512, [], \"f288\", \"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\"]\n};\nconst faFirefox = {\n  prefix: 'fab',\n  iconName: 'firefox',\n  icon: [512, 512, [], \"f269\", \"M503.52,241.48c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.86,245.86,0,0,0-7.32-41.15c0-.12,0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27,8.27,0,0,0-.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48,0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07,18.07,0,0,0-1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63,15.63,0,0,0-1.2-1.8L463.2,119a15.63,15.63,0,0,0-1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.76,248.76,0,0,0-23.51-26.64A186.82,186.82,0,0,0,412,62.46c-4-3.48-8.16-6.72-12.48-9.84a162.49,162.49,0,0,0-24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254,254,0,0,0-55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.35,236.35,0,0,0-38-4H255.14a234.62,234.62,0,0,0-45.48,5c-33.59,7.08-63.23,21.24-82.91,39-1.08,1-1.92,1.68-2.4,2.16l-.48.48H124l-.12.12.12-.12a.12.12,0,0,0,.12-.12l-.12.12a.42.42,0,0,1,.24-.12c14.64-8.76,34.92-16,49.44-19.56l5.88-1.44c.36-.12.84-.12,1.2-.24,1.68-.36,3.36-.72,5.16-1.08.24,0,.6-.12.84-.12C250.94,20.94,319.34,40.14,367,85.61a171.49,171.49,0,0,1,26.88,32.76c30.36,49.2,27.48,111.11,3.84,147.59-34.44,53-111.35,71.27-159,24.84a84.19,84.19,0,0,1-25.56-59,74.05,74.05,0,0,1,6.24-31c1.68-3.84,13.08-25.67,18.24-24.59-13.08-2.76-37.55,2.64-54.71,28.19-15.36,22.92-14.52,58.2-5,83.28a132.85,132.85,0,0,1-12.12-39.24c-12.24-82.55,43.31-153,94.31-170.51-27.48-24-96.47-22.31-147.71,15.36-29.88,22-51.23,53.16-62.51,90.36,1.68-20.88,9.6-52.08,25.8-83.88-17.16,8.88-39,37-49.8,62.88-15.6,37.43-21,82.19-16.08,124.79.36,3.24.72,6.36,1.08,9.6,19.92,117.11,122,206.38,244.78,206.38C392.77,503.42,504,392.19,504,255,503.88,250.48,503.76,245.92,503.52,241.48Z\"]\n};\nconst faLinode = {\n  prefix: 'fab',\n  iconName: 'linode',\n  icon: [448, 512, [], \"f2b8\", \"M366.036,186.867l-59.5,36.871-.838,36.871-29.329-19.273-39.384,24.3c2.238,55.211,2.483,59.271,2.51,59.5l-97.2,65.359L127.214,285.748l108.1-62.01L195.09,197.761l-75.417,38.547L98.723,93.015,227.771,43.574,136.432,0,10.737,39.385,38.39,174.3l41.9,32.681L48.445,222.062,69.394,323.457,98.723,351.11,77.774,363.679l16.76,78.769L160.733,512c-10.8-74.842-11.658-78.641-11.725-78.773l77.925-55.3c16.759-12.57,15.083-10.894,15.083-10.894l.838,24.3,33.519,28.491-.838-77.093,46.927-33.519,26.815-18.435-2.514,36.033,25.139,17.6,6.7-74.579,58.657-43.575Z\"]\n};\nconst faGoodreads = {\n  prefix: 'fab',\n  iconName: 'goodreads',\n  icon: [448, 512, [], \"f3a8\", \"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\"]\n};\nconst faSquareOdnoklassniki = {\n  prefix: 'fab',\n  iconName: 'square-odnoklassniki',\n  icon: [448, 512, [\"odnoklassniki-square\"], \"f264\", \"M224 137.1a39.9 39.9 0 1 0 0 79.7 39.9 39.9 0 1 0 0-79.7zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM224 95.9A81 81 0 1 1 224 258a81 81 0 1 1 0-162.1zm59.3 168.3c16.8-13.2 29.5-5.5 34.1 3.6c7.8 16-1.1 23.7-21.5 37c-17.1 10.9-40.7 15.2-56.2 16.8l13 12.9 47.7 47.7c17.4 17.9-11 45.8-28.6 28.6c-12-12.2-29.5-29.7-47.7-47.9l0 0-47.7 47.9c-17.7 17.2-46-11-28.4-28.6c3.7-3.7 7.9-7.9 12.5-12.5c10.4-10.4 22.6-22.7 35.2-35.2l12.9-12.9c-15.4-1.6-39.3-5.7-56.6-16.8c-20.3-13.3-29.3-20.9-21.4-37c4.6-9.1 17.3-16.8 34.1-3.6c0 0 22.7 18 59.3 18s59.3-18 59.3-18z\"]\n};\nconst faOdnoklassnikiSquare = faSquareOdnoklassniki;\nconst faJsfiddle = {\n  prefix: 'fab',\n  iconName: 'jsfiddle',\n  icon: [576, 512, [], \"f1cc\", \"M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z\"]\n};\nconst faSith = {\n  prefix: 'fab',\n  iconName: 'sith',\n  icon: [448, 512, [], \"f512\", \"M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z\"]\n};\nconst faThemeisle = {\n  prefix: 'fab',\n  iconName: 'themeisle',\n  icon: [512, 512, [], \"f2b2\", \"M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z\"]\n};\nconst faPage4 = {\n  prefix: 'fab',\n  iconName: 'page4',\n  icon: [496, 512, [], \"f3d7\", \"M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\"]\n};\nconst faHashnode = {\n  prefix: 'fab',\n  iconName: 'hashnode',\n  icon: [512, 512, [], \"e499\", \"M35.19 171.1C-11.72 217.1-11.72 294 35.19 340.9L171.1 476.8C217.1 523.7 294 523.7 340.9 476.8L476.8 340.9C523.7 294 523.7 217.1 476.8 171.1L340.9 35.19C294-11.72 217.1-11.72 171.1 35.19L35.19 171.1zM315.5 315.5C282.6 348.3 229.4 348.3 196.6 315.5C163.7 282.6 163.7 229.4 196.6 196.6C229.4 163.7 282.6 163.7 315.5 196.6C348.3 229.4 348.3 282.6 315.5 315.5z\"]\n};\nconst faReact = {\n  prefix: 'fab',\n  iconName: 'react',\n  icon: [512, 512, [], \"f41b\", \"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z\"]\n};\nconst faCcPaypal = {\n  prefix: 'fab',\n  iconName: 'cc-paypal',\n  icon: [576, 512, [], \"f1f4\", \"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z\"]\n};\nconst faSquarespace = {\n  prefix: 'fab',\n  iconName: 'squarespace',\n  icon: [512, 512, [], \"f5be\", \"M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z\"]\n};\nconst faCcStripe = {\n  prefix: 'fab',\n  iconName: 'cc-stripe',\n  icon: [576, 512, [], \"f1f5\", \"M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z\"]\n};\nconst faCreativeCommonsShare = {\n  prefix: 'fab',\n  iconName: 'creative-commons-share',\n  icon: [496, 512, [], \"f4f2\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z\"]\n};\nconst faBitcoin = {\n  prefix: 'fab',\n  iconName: 'bitcoin',\n  icon: [512, 512, [], \"f379\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z\"]\n};\nconst faKeycdn = {\n  prefix: 'fab',\n  iconName: 'keycdn',\n  icon: [512, 512, [], \"f3ba\", \"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160\"]\n};\nconst faOpera = {\n  prefix: 'fab',\n  iconName: 'opera',\n  icon: [496, 512, [], \"f26a\", \"M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\"]\n};\nconst faItchIo = {\n  prefix: 'fab',\n  iconName: 'itch-io',\n  icon: [512, 512, [], \"f83a\", \"M71.92 34.77C50.2 47.67 7.4 96.84 7 109.73v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.56 32.4 325.76 32 256 32S91.14 33.1 71.92 34.77zm132.32 134.39c-22 38.4-77.9 38.71-99.85.25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.13 17.73 269.15 80 18.67 302.08 18.12 379.76 0 31.65-32.27 21.32-232 17.75-269.15-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1-51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.91 436.91 0 0 1 88.18 0C318.22 223 332.85 223 349.31 223c52.33 0 65.22 77.53 83.87 144.45 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.93 8.79-155.55 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.45 83.88-144.45zM256 270.79s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34.16 23.33.16 11.65.54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z\"]\n};\nconst faUmbraco = {\n  prefix: 'fab',\n  iconName: 'umbraco',\n  icon: [510, 512, [], \"f8e8\", \"M255.35 8C118.36 7.83 7.14 118.72 7 255.68c-.07 137 111 248.2 248 248.27 136.85 0 247.82-110.7 248-247.67S392.34 8.17 255.35 8zm145 266q-1.14 40.68-14 65t-43.51 35q-30.61 10.7-85.45 10.47h-4.6q-54.78.22-85.44-10.47t-43.52-35q-12.85-24.36-14-65a224.81 224.81 0 0 1 0-30.71 418.37 418.37 0 0 1 3.6-43.88c1.88-13.39 3.57-22.58 5.4-32 1-4.88 1.28-6.42 1.82-8.45a5.09 5.09 0 0 1 4.9-3.89h.69l32 5a5.07 5.07 0 0 1 4.16 5 5 5 0 0 1 0 .77l-1.7 8.78q-2.41 13.25-4.84 33.68a380.62 380.62 0 0 0-2.64 42.15q-.28 40.43 8.13 59.83a43.87 43.87 0 0 0 31.31 25.18A243 243 0 0 0 250 340.6h10.25a242.64 242.64 0 0 0 57.27-5.16 43.86 43.86 0 0 0 31.15-25.23q8.53-19.42 8.13-59.78a388 388 0 0 0-2.6-42.15q-2.48-20.38-4.89-33.68l-1.69-8.78a5 5 0 0 1 0-.77 5 5 0 0 1 4.2-5l32-5h.82a5 5 0 0 1 4.9 3.89c.55 2.05.81 3.57 1.83 8.45 1.82 9.62 3.52 18.78 5.39 32a415.71 415.71 0 0 1 3.61 43.88 228.06 228.06 0 0 1-.04 30.73z\"]\n};\nconst faGalacticSenate = {\n  prefix: 'fab',\n  iconName: 'galactic-senate',\n  icon: [512, 512, [], \"f50d\", \"M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z\"]\n};\nconst faUbuntu = {\n  prefix: 'fab',\n  iconName: 'ubuntu',\n  icon: [576, 512, [], \"f7df\", \"M469.2 75A75.6 75.6 0 1 0 317.9 75a75.6 75.6 0 1 0 151.2 0zM154.2 240.7A75.6 75.6 0 1 0 3 240.7a75.6 75.6 0 1 0 151.2 0zM57 346C75.6 392.9 108 433 150 461.1s91.5 42.6 142 41.7c-14.7-18.6-22.9-41.5-23.2-65.2c-6.8-.9-13.3-2.1-19.5-3.4c-26.8-5.7-51.9-17.3-73.6-34s-39.3-38.1-51.7-62.5c-20.9 9.9-44.5 12.8-67.1 8.2zm395.1 89.8a75.6 75.6 0 1 0 -151.2 0 75.6 75.6 0 1 0 151.2 0zM444 351.6c18.5 14.8 31.6 35.2 37.2 58.2c33.3-41.3 52.6-92.2 54.8-145.2s-12.5-105.4-42.2-149.4c-8.6 21.5-24 39.6-43.8 51.6c15.4 28.6 22.9 60.8 21.9 93.2s-10.7 64-28 91.6zM101.1 135.4c12.4 2.7 24.3 7.5 35.1 14.3c16.6-24.2 38.9-44.1 64.8-58S255.8 70.4 285.2 70c.2-5.9 .9-11.9 2-17.7c3.6-16.7 11.1-32.3 21.8-45.5c-47.7-3.8-95.4 6-137.6 28.5S94.3 91.7 70.8 133.4c2.7-.2 5.3-.3 8-.3c7.5 0 15 .8 22.4 2.3z\"]\n};\nconst faDraft2digital = {\n  prefix: 'fab',\n  iconName: 'draft2digital',\n  icon: [480, 512, [], \"f396\", \"M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z\"]\n};\nconst faStripe = {\n  prefix: 'fab',\n  iconName: 'stripe',\n  icon: [640, 512, [], \"f429\", \"M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z\"]\n};\nconst faHouzz = {\n  prefix: 'fab',\n  iconName: 'houzz',\n  icon: [448, 512, [], \"f27c\", \"M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z\"]\n};\nconst faGg = {\n  prefix: 'fab',\n  iconName: 'gg',\n  icon: [512, 512, [], \"f260\", \"M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z\"]\n};\nconst faDhl = {\n  prefix: 'fab',\n  iconName: 'dhl',\n  icon: [640, 512, [], \"f790\", \"M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4.7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z\"]\n};\nconst faSquarePinterest = {\n  prefix: 'fab',\n  iconName: 'square-pinterest',\n  icon: [448, 512, [\"pinterest-square\"], \"f0d3\", \"M384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64h72.6l-2.2-.8c-5.4-48.1-3.1-57.5 15.7-134.7c3.9-16 8.5-35 13.9-57.9c0 0-7.3-14.8-7.3-36.5c0-70.7 75.5-78 75.5-25c0 13.5-5.4 31.1-11.2 49.8c-3.3 10.6-6.6 21.5-9.1 32c-5.7 24.5 12.3 44.4 36.4 44.4c43.7 0 77.2-46 77.2-112.4c0-58.8-42.3-99.9-102.6-99.9C153 139 112 191.4 112 245.6c0 21.1 8.2 43.7 18.3 56c2 2.4 2.3 4.5 1.7 7c-1.1 4.7-3.1 12.9-4.7 19.2c-1 4-1.8 7.3-2.1 8.6c-1.1 4.5-3.5 5.5-8.2 3.3c-30.6-14.3-49.8-59.1-49.8-95.1C67.2 167.1 123.4 96 229.4 96c85.2 0 151.4 60.7 151.4 141.8c0 84.6-53.3 152.7-127.4 152.7c-24.9 0-48.3-12.9-56.3-28.2c0 0-12.3 46.9-15.3 58.4c-5 19.3-17.6 42.9-27.4 59.3H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64z\"]\n};\nconst faPinterestSquare = faSquarePinterest;\nconst faXing = {\n  prefix: 'fab',\n  iconName: 'xing',\n  icon: [384, 512, [], \"f168\", \"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z\"]\n};\nconst faBlackberry = {\n  prefix: 'fab',\n  iconName: 'blackberry',\n  icon: [512, 512, [], \"f37b\", \"M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z\"]\n};\nconst faCreativeCommonsPd = {\n  prefix: 'fab',\n  iconName: 'creative-commons-pd',\n  icon: [496, 512, [], \"f4ec\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\"]\n};\nconst faPlaystation = {\n  prefix: 'fab',\n  iconName: 'playstation',\n  icon: [576, 512, [], \"f3df\", \"M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z\"]\n};\nconst faQuinscape = {\n  prefix: 'fab',\n  iconName: 'quinscape',\n  icon: [512, 512, [], \"f459\", \"M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.36 237.36 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4.1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0-99.2-99.2z\"]\n};\nconst faLess = {\n  prefix: 'fab',\n  iconName: 'less',\n  icon: [640, 512, [], \"f41d\", \"M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z\"]\n};\nconst faBloggerB = {\n  prefix: 'fab',\n  iconName: 'blogger-b',\n  icon: [448, 512, [], \"f37d\", \"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\"]\n};\nconst faOpencart = {\n  prefix: 'fab',\n  iconName: 'opencart',\n  icon: [640, 512, [], \"f23d\", \"M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\"]\n};\nconst faVine = {\n  prefix: 'fab',\n  iconName: 'vine',\n  icon: [384, 512, [], \"f1ca\", \"M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\"]\n};\nconst faSignalMessenger = {\n  prefix: 'fab',\n  iconName: 'signal-messenger',\n  icon: [512, 512, [], \"e663\", \"M256 0c13.3 0 26.3 1 39.1 3l-3.7 23.7C279.9 24.9 268 24 256 24s-23.9 .9-35.4 2.7L216.9 3C229.7 1 242.7 0 256 0zm60.8 7.3l-5.7 23.3c23.4 5.7 45.4 14.9 65.4 27.1l12.5-20.5c-22.1-13.4-46.4-23.6-72.2-29.9zm90.5 42.2L393.1 68.8c19.1 14 36 30.9 50.1 50.1l19.4-14.2C447 83.6 428.4 65 407.3 49.5zm67.5 73.6l-20.5 12.5c12.2 20 21.4 42 27.1 65.4l23.3-5.7c-6.3-25.8-16.5-50.1-29.9-72.2zM509 216.9l-23.7 3.7c1.8 11.5 2.7 23.4 2.7 35.4s-.9 23.9-2.7 35.4l23.7 3.7c1.9-12.7 3-25.8 3-39.1s-1-26.3-3-39.1zM454.3 376.5c12.2-20 21.4-42 27.1-65.4l23.3 5.7c-6.3 25.8-16.5 50.1-29.9 72.2l-20.5-12.5zm-11.1 16.6l19.4 14.2c-15.5 21.1-34.1 39.8-55.2 55.2l-14.2-19.4c19.1-14 36-30.9 50.1-50.1zm-66.7 61.2l12.5 20.5c-22.1 13.4-46.4 23.6-72.2 29.9l-5.7-23.3c23.4-5.7 45.4-14.9 65.4-27.1zm-85.1 31l3.7 23.7c-12.7 1.9-25.8 3-39.1 3s-26.3-1-39.1-3l3.7-23.7c11.5 1.8 23.4 2.7 35.4 2.7s23.9-.9 35.4-2.7zm-90.5-3.9l-5.7 23.3c-19.4-4.7-37.9-11.6-55.3-20.5l-24.3 5.7-5.5-23.4 32.8-7.7 7.8 4c15.7 8 32.5 14.3 50.1 18.6zM90 471.3l5.5 23.4-41.6 9.7C26 510.8 1.2 486 7.6 458.2l9.7-41.6L40.7 422 31 463.7c-2.4 10.4 6.9 19.7 17.3 17.3L90 471.3zM45.5 401.8l-23.4-5.5L27.8 372C18.9 354.7 12 336.1 7.3 316.7l23.3-5.7c4.3 17.6 10.6 34.4 18.6 50.1l4 7.8-7.7 32.8zM26.7 291.4L3 295.1C1 282.3 0 269.3 0 256s1-26.3 3-39.1l23.7 3.7C24.9 232.1 24 244 24 256s.9 23.9 2.7 35.4zm3.9-90.5L7.3 195.2c6.3-25.8 16.5-50.1 29.9-72.2l20.5 12.5c-12.2 20-21.4 42-27.1 65.4zm38.3-82.1L49.5 104.7C65 83.6 83.6 65 104.7 49.5l14.2 19.4c-19.1 14-36 30.9-50.1 50.1zm66.7-61.2L123.1 37.2c22.1-13.4 46.4-23.6 72.2-29.9l5.7 23.3c-23.4 5.7-45.4 14.9-65.4 27.1zM464 256c0 114.9-93.1 208-208 208c-36.4 0-70.7-9.4-100.5-25.8c-2.9-1.6-6.2-2.1-9.4-1.4L53.6 458.4l21.6-92.5c.7-3.2 .2-6.5-1.4-9.4C57.4 326.7 48 292.4 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208z\"]\n};\nconst faPaypal = {\n  prefix: 'fab',\n  iconName: 'paypal',\n  icon: [384, 512, [], \"f1ed\", \"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\"]\n};\nconst faGitlab = {\n  prefix: 'fab',\n  iconName: 'gitlab',\n  icon: [512, 512, [], \"f296\", \"M503.5 204.6L502.8 202.8L433.1 21.02C431.7 17.45 429.2 14.43 425.9 12.38C423.5 10.83 420.8 9.865 417.9 9.57C415 9.275 412.2 9.653 409.5 10.68C406.8 11.7 404.4 13.34 402.4 15.46C400.5 17.58 399.1 20.13 398.3 22.9L351.3 166.9H160.8L113.7 22.9C112.9 20.13 111.5 17.59 109.6 15.47C107.6 13.35 105.2 11.72 102.5 10.7C99.86 9.675 96.98 9.295 94.12 9.587C91.26 9.878 88.51 10.83 86.08 12.38C82.84 14.43 80.33 17.45 78.92 21.02L9.267 202.8L8.543 204.6C-1.484 230.8-2.72 259.6 5.023 286.6C12.77 313.5 29.07 337.3 51.47 354.2L51.74 354.4L52.33 354.8L158.3 434.3L210.9 474L242.9 498.2C246.6 500.1 251.2 502.5 255.9 502.5C260.6 502.5 265.2 500.1 268.9 498.2L300.9 474L353.5 434.3L460.2 354.4L460.5 354.1C482.9 337.2 499.2 313.5 506.1 286.6C514.7 259.6 513.5 230.8 503.5 204.6z\"]\n};\nconst faTypo3 = {\n  prefix: 'fab',\n  iconName: 'typo3',\n  icon: [448, 512, [], \"f42b\", \"M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z\"]\n};\nconst faRedditAlien = {\n  prefix: 'fab',\n  iconName: 'reddit-alien',\n  icon: [512, 512, [], \"f281\", \"M373 138.6c-25.2 0-46.3-17.5-51.9-41l0 0c-30.6 4.3-54.2 30.7-54.2 62.4l0 .2c47.4 1.8 90.6 15.1 124.9 36.3c12.6-9.7 28.4-15.5 45.5-15.5c41.3 0 74.7 33.4 74.7 74.7c0 29.8-17.4 55.5-42.7 67.5c-2.4 86.8-97 156.6-213.2 156.6S45.5 410.1 43 323.4C17.6 311.5 0 285.7 0 255.7c0-41.3 33.4-74.7 74.7-74.7c17.2 0 33 5.8 45.7 15.6c34-21.1 76.8-34.4 123.7-36.4l0-.3c0-44.3 33.7-80.9 76.8-85.5C325.8 50.2 347.2 32 373 32c29.4 0 53.3 23.9 53.3 53.3s-23.9 53.3-53.3 53.3zM157.5 255.3c-20.9 0-38.9 20.8-40.2 47.9s17.1 38.1 38 38.1s36.6-9.8 37.8-36.9s-14.7-49.1-35.7-49.1zM395 303.1c-1.2-27.1-19.2-47.9-40.2-47.9s-36.9 22-35.7 49.1c1.2 27.1 16.9 36.9 37.8 36.9s39.3-11 38-38.1zm-60.1 70.8c1.5-3.6-1-7.7-4.9-8.1c-23-2.3-47.9-3.6-73.8-3.6s-50.8 1.3-73.8 3.6c-3.9 .4-6.4 4.5-4.9 8.1c12.9 30.8 43.3 52.4 78.7 52.4s65.8-21.6 78.7-52.4z\"]\n};\nconst faYahoo = {\n  prefix: 'fab',\n  iconName: 'yahoo',\n  icon: [512, 512, [], \"f19e\", \"M223.69,141.06,167,284.23,111,141.06H14.93L120.76,390.19,82.19,480h94.17L317.27,141.06Zm105.4,135.79a58.22,58.22,0,1,0,58.22,58.22A58.22,58.22,0,0,0,329.09,276.85ZM394.65,32l-93,223.47H406.44L499.07,32Z\"]\n};\nconst faDailymotion = {\n  prefix: 'fab',\n  iconName: 'dailymotion',\n  icon: [448, 512, [], \"e052\", \"M298.93,267a48.4,48.4,0,0,0-24.36-6.21q-19.83,0-33.44,13.27t-13.61,33.42q0,21.16,13.28,34.6t33.43,13.44q20.5,0,34.11-13.78T322,307.47A47.13,47.13,0,0,0,315.9,284,44.13,44.13,0,0,0,298.93,267ZM0,32V480H448V32ZM374.71,405.26h-53.1V381.37h-.67q-15.79,26.2-55.78,26.2-27.56,0-48.89-13.1a88.29,88.29,0,0,1-32.94-35.77q-11.6-22.68-11.59-50.89,0-27.56,11.76-50.22a89.9,89.9,0,0,1,32.93-35.78q21.18-13.09,47.72-13.1a80.87,80.87,0,0,1,29.74,5.21q13.28,5.21,25,17V153l55.79-12.09Z\"]\n};\nconst faAffiliatetheme = {\n  prefix: 'fab',\n  iconName: 'affiliatetheme',\n  icon: [512, 512, [], \"f36b\", \"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z\"]\n};\nconst faPiedPiperPp = {\n  prefix: 'fab',\n  iconName: 'pied-piper-pp',\n  icon: [448, 512, [], \"f1a7\", \"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\"]\n};\nconst faBootstrap = {\n  prefix: 'fab',\n  iconName: 'bootstrap',\n  icon: [576, 512, [], \"f836\", \"M333.5,201.4c0-22.1-15.6-34.3-43-34.3h-50.4v71.2h42.5C315.4,238.2,333.5,225,333.5,201.4z M517,188.6 c-9.5-30.9-10.9-68.8-9.8-98.1c1.1-30.5-22.7-58.5-54.7-58.5H123.7c-32.1,0-55.8,28.1-54.7,58.5c1,29.3-0.3,67.2-9.8,98.1 c-9.6,31-25.7,50.6-52.2,53.1v28.5c26.4,2.5,42.6,22.1,52.2,53.1c9.5,30.9,10.9,68.8,9.8,98.1c-1.1,30.5,22.7,58.5,54.7,58.5h328.7 c32.1,0,55.8-28.1,54.7-58.5c-1-29.3,0.3-67.2,9.8-98.1c9.6-31,25.7-50.6,52.1-53.1v-28.5C542.7,239.2,526.5,219.6,517,188.6z M300.2,375.1h-97.9V136.8h97.4c43.3,0,71.7,23.4,71.7,59.4c0,25.3-19.1,47.9-43.5,51.8v1.3c33.2,3.6,55.5,26.6,55.5,58.3 C383.4,349.7,352.1,375.1,300.2,375.1z M290.2,266.4h-50.1v78.4h52.3c34.2,0,52.3-13.7,52.3-39.5 C344.7,279.6,326.1,266.4,290.2,266.4z\"]\n};\nconst faOdnoklassniki = {\n  prefix: 'fab',\n  iconName: 'odnoklassniki',\n  icon: [320, 512, [], \"f263\", \"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z\"]\n};\nconst faNfcSymbol = {\n  prefix: 'fab',\n  iconName: 'nfc-symbol',\n  icon: [576, 512, [], \"e531\", \"M392.9 32.43C400.6 31.1 408.6 32.89 414.1 37.41C498.2 96.14 544 173.7 544 255.1C544 338.2 498.2 415.9 414.1 474.6C409.3 478.6 402.4 480.5 395.5 479.9C388.5 479.3 382 476.3 377.1 471.4L193.7 288.7C188.1 283.2 185 275.7 184.1 267.8C184.1 260 188.1 252.5 193.6 246.9C199.2 241.4 206.7 238.2 214.5 238.2C222.4 238.2 229.9 241.3 235.4 246.8L400.5 411.2C455.1 366.5 484.8 312 484.8 255.1C484.8 193.5 447.9 132.9 380.9 85.76C374.5 81.24 370.1 74.35 368.8 66.62C367.4 58.89 369.2 50.94 373.8 44.53C378.3 38.12 385.2 33.77 392.9 32.43V32.43zM186.9 479.6C179.2 480.9 171.3 479.1 164.8 474.6C81.67 415.9 35.84 338.2 35.84 255.1C35.84 173.7 81.67 96.14 164.8 37.41C170.5 33.4 177.4 31.53 184.4 32.12C191.3 32.71 197.8 35.72 202.7 40.63L386.1 223.3C391.7 228.8 394.8 236.3 394.8 244.2C394.9 251.1 391.8 259.5 386.2 265.1C380.7 270.6 373.2 273.8 365.3 273.8C357.5 273.8 349.1 270.7 344.4 265.2L179.3 100.7C124.7 145.9 95.03 199.9 95.03 255.1C95.03 318.5 131.9 379.1 198.1 426.2C205.4 430.8 209.7 437.6 211.1 445.4C212.4 453.1 210.6 461.1 206.1 467.5C201.6 473.9 194.7 478.2 186.9 479.6V479.6z\"]\n};\nconst faMintbit = {\n  prefix: 'fab',\n  iconName: 'mintbit',\n  icon: [512, 512, [], \"e62f\", \"M73.2 512V438.9H365.7V365.7h73.2V219.4H512V0H292.6V73.1H146.3v73.2H73.2V438.9H0V512H73.2zm73.1-219.4h73.2v73.1H146.3V292.6zm73.2-73.1h73.1v73.1H219.4V219.4zm73.1 0V146.3h73.2v73.1H292.6zM365.7 73.1h73.2v73.2H365.7V73.1z\"]\n};\nconst faEthereum = {\n  prefix: 'fab',\n  iconName: 'ethereum',\n  icon: [320, 512, [], \"f42e\", \"M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z\"]\n};\nconst faSpeakerDeck = {\n  prefix: 'fab',\n  iconName: 'speaker-deck',\n  icon: [512, 512, [], \"f83c\", \"M213.86 296H100a100 100 0 0 1 0-200h132.84a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.82a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.86c26.48 0 26.46-40 0-40zM298 416a120.21 120.21 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0-19.66-20H296.42a60.77 60.77 0 0 0 0-80h136.93c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z\"]\n};\nconst faCreativeCommonsNcEu = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc-eu',\n  icon: [496, 512, [], \"f4e9\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z\"]\n};\nconst faPatreon = {\n  prefix: 'fab',\n  iconName: 'patreon',\n  icon: [512, 512, [], \"f3d9\", \"M489.7 153.8c-.1-65.4-51-119-110.7-138.3C304.8-8.5 207-5 136.1 28.4C50.3 68.9 23.3 157.7 22.3 246.2C21.5 319 28.7 510.6 136.9 512c80.3 1 92.3-102.5 129.5-152.3c26.4-35.5 60.5-45.5 102.4-55.9c72-17.8 121.1-74.7 121-150z\"]\n};\nconst faAvianex = {\n  prefix: 'fab',\n  iconName: 'avianex',\n  icon: [512, 512, [], \"f374\", \"M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\"]\n};\nconst faEllo = {\n  prefix: 'fab',\n  iconName: 'ello',\n  icon: [496, 512, [], \"f5f1\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z\"]\n};\nconst faGofore = {\n  prefix: 'fab',\n  iconName: 'gofore',\n  icon: [400, 512, [], \"f3a7\", \"M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z\"]\n};\nconst faBimobject = {\n  prefix: 'fab',\n  iconName: 'bimobject',\n  icon: [448, 512, [], \"f378\", \"M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z\"]\n};\nconst faBraveReverse = {\n  prefix: 'fab',\n  iconName: 'brave-reverse',\n  icon: [448, 512, [], \"e63d\", \"M298 0c3 0 5.8 1.3 7.8 3.6l38.1 44c.5-.1 1-.2 1.5-.3c9.2-1.6 18.6-2.2 27.7-1.2c11.6 1.4 21.5 5.4 28.9 12.9c7.7 7.8 15.4 15.8 22.6 23.6c2.5 2.7 4.9 5.2 6.9 7.4c.7 .8 1.4 1.5 1.9 2c3.4 3.7 4.2 8.1 2.7 11.9l-9.8 24.6 13.1 38.1c.7 2 .8 4.1 .2 6.2c-.1 .4-.1 .4-.5 2.1c-.6 2.3-.6 2.3-1.5 5.8c-1.6 6.3-3.5 13.3-5.4 20.9c-5.6 21.6-11.2 43.2-16.4 63.4c-12.9 49.9-21.4 82.7-23.4 90.9c-11.1 44.5-19.9 60-48.3 80.3c-24.9 17.8-76.8 53.6-86.8 60c-1 .6-2 1.3-3.4 2.3c-.5 .4-3.2 2.2-3.9 2.7c-4.9 3.3-8.3 5.5-12.1 7.3c-4.7 2.2-9.3 3.5-13.9 3.5s-9.1-1.2-13.9-3.5c-3.7-1.8-7.2-3.9-12.1-7.3c-.8-.5-3.4-2.4-3.9-2.7c-1.4-1-2.5-1.7-3.4-2.3c-10-6.4-61.9-42.1-86.8-60c-28.4-20.4-37.2-35.8-48.3-80.3c-2-8.2-10.5-41-23.3-90.5c-5.3-20.6-10.9-42.2-16.5-63.8c-2-7.6-3.8-14.6-5.4-20.9c-.9-3.5-.9-3.5-1.5-5.8c-.4-1.7-.4-1.7-.5-2.1c-.5-2-.4-4.2 .2-6.2l13.1-38.1L11.8 104c-1.5-3.8-.7-8.2 2-11.2c1.2-1.3 1.8-2 2.6-2.8c2-2.2 4.4-4.7 6.9-7.4C30.6 74.9 38.3 66.9 46 59.1c7.4-7.5 17.3-11.6 28.9-12.9c9.1-1.1 18.5-.5 27.7 1.2c.5 .1 1 .2 1.5 .3l38.1-44C144.2 1.3 147 0 150 0H298zm-4.7 21.1H154.7L115.6 66.2c-2.6 3-6.7 4.3-10.6 3.2c-.2-.1-.7-.2-1.5-.4c-1.3-.3-2.9-.6-4.5-.9c-7.4-1.3-14.9-1.8-21.7-1C70 68 64.3 70.3 60.7 74c-7.6 7.7-15.2 15.6-22.3 23.3c-1.7 1.8-3.3 3.5-4.8 5.1l8.8 22c1 2.4 1 5 .2 7.5L29.2 170.6c.4 1.4 .5 1.9 1.2 4.8c1.6 6.3 3.5 13.3 5.4 20.9c5.6 21.6 11.2 43.2 16.4 63.4c12.9 50 21.4 82.8 23.4 91C85.7 390.8 92 402 115.8 419c24.6 17.6 76.3 53.2 85.9 59.3c1.2 .8 2.5 1.6 4 2.7c.6 .4 3.2 2.2 3.9 2.7c4 2.8 6.7 4.4 9.2 5.6c2.2 1 3.9 1.5 5.1 1.5s2.9-.5 5.1-1.5c2.5-1.2 5.2-2.8 9.2-5.6c.7-.5 3.3-2.3 3.9-2.7c1.6-1.1 2.8-1.9 4-2.7c9.6-6.1 61.3-41.7 85.9-59.3c23.8-17.1 30.2-28.2 40.1-68.3c2.1-8.3 10.5-41.1 23.3-90.7c5.3-20.6 10.9-42.2 16.5-63.8c2-7.6 3.8-14.6 5.4-20.9c.7-2.9 .9-3.4 1.2-4.8l-13.3-38.8c-.8-2.4-.8-5.1 .2-7.5l8.8-22c-1.5-1.6-3.1-3.3-4.8-5.1c-7.2-7.6-14.7-15.5-22.3-23.3c-3.7-3.7-9.3-6-16.6-6.9c-6.8-.8-14.4-.3-21.7 1c-1.7 .3-3.2 .6-4.5 .9c-.8 .2-1.3 .3-1.5 .4c-3.8 1.1-7.9-.2-10.6-3.2L293.3 21.1zM224 316c2.8 0 20.9 6.5 35.4 14.1s25 13 28.3 15.2s1.3 6.2-1.7 8.4s-44.1 34.6-48.1 38.2s-9.8 9.5-13.8 9.5s-9.8-5.9-13.8-9.5s-45.1-36-48.1-38.2s-5.1-6.2-1.7-8.4s13.9-7.5 28.3-15.2s32.5-14.1 35.4-14.1zm.1-230.7c.7 0 8.8 .2 20.5 4.2c12.3 4.2 25.7 9.4 31.9 9.4s51.9-8.9 51.9-8.9s54.2 66.7 54.2 81s-6.8 18-13.7 25.4s-36.8 39.8-40.7 43.9s-11.9 10.5-7.1 21.8s11.7 25.8 3.9 40.4s-21 24.4-29.4 22.8s-28.4-12.2-35.7-17.1s-30.5-24.3-30.5-31.8s24-20.8 28.4-23.9s24.7-14.8 25.1-19.4s.3-6-5.7-17.4s-16.7-26.7-14.9-36.8s19.1-15.4 31.5-20.2s36.2-13.7 39.2-15.1s2.2-2.7-6.8-3.6s-34.6-4.3-46.1-1.1s-31.2 8.2-32.8 10.9s-3 2.7-1.4 11.8s10.1 52.8 10.9 60.6s2.4 12.9-5.8 14.8s-22.1 5.2-26.8 5.2s-18.6-3.3-26.8-5.2s-6.6-7-5.8-14.8s9.3-51.5 10.9-60.6s.2-9.2-1.4-11.8s-21.3-7.6-32.8-10.9s-37.1 .2-46.1 1.1s-9.8 2.2-6.8 3.6s26.8 10.4 39.2 15.1s29.7 10 31.5 20.2s-9 25.4-14.9 36.8s-6.1 12.8-5.7 17.4s20.6 16.4 25.1 19.4s28.4 16.4 28.4 23.9s-23.2 27-30.5 31.8s-27.2 15.4-35.7 17.1s-21.7-8.2-29.4-22.8s-.8-29.1 3.9-40.4s-3.3-17.7-7.1-21.8s-33.8-36.5-40.7-43.9s-13.7-11.2-13.7-25.4s54.2-81 54.2-81s45.8 8.9 51.9 8.9s19.5-5.2 31.9-9.4s20.6-4.2 20.6-4.2l.1 0z\"]\n};\nconst faFacebookF = {\n  prefix: 'fab',\n  iconName: 'facebook-f',\n  icon: [320, 512, [], \"f39e\", \"M80 299.3V512H196V299.3h86.5l18-97.8H196V166.9c0-51.7 20.3-71.5 72.7-71.5c16.3 0 29.4 .4 37 1.2V7.9C291.4 4 256.4 0 236.2 0C129.3 0 80 50.5 80 159.4v42.1H14v97.8H80z\"]\n};\nconst faSquareGooglePlus = {\n  prefix: 'fab',\n  iconName: 'square-google-plus',\n  icon: [448, 512, [\"google-plus-square\"], \"f0d4\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM64 256c0-55.3 44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4c-34.1 0-61.9 28.2-61.9 63.2c0 34.9 27.8 63.2 61.9 63.2c39.6 0 54.4-28.5 56.8-43.1H164V241.8h94.4c1 5 1.6 10.1 1.6 16.6c0 57.1-38.3 97.6-96 97.6c-55.3 0-100-44.7-100-100zm291 18.2v29H325.8v-29h-29V245h29V216H355v29h29v29.2H355z\"]\n};\nconst faGooglePlusSquare = faSquareGooglePlus;\nconst faWebAwesome = {\n  prefix: 'fab',\n  iconName: 'web-awesome',\n  icon: [640, 512, [], \"e682\", \"M372.2 52c0 20.9-12.4 39-30.2 47.2L448 192l104.4-20.9c-5.3-7.7-8.4-17.1-8.4-27.1c0-26.5 21.5-48 48-48s48 21.5 48 48c0 26-20.6 47.1-46.4 48L481 442.3c-10.3 23-33.2 37.7-58.4 37.7l-205.2 0c-25.2 0-48-14.8-58.4-37.7L46.4 192C20.6 191.1 0 170 0 144c0-26.5 21.5-48 48-48s48 21.5 48 48c0 10.1-3.1 19.4-8.4 27.1L192 192 298.1 99.1c-17.7-8.3-30-26.3-30-47.1c0-28.7 23.3-52 52-52s52 23.3 52 52z\"]\n};\nconst faMandalorian = {\n  prefix: 'fab',\n  iconName: 'mandalorian',\n  icon: [448, 512, [], \"f50f\", \"M232.27 511.89c-1-3.26-1.69-15.83-1.39-24.58.55-15.89 1-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0-.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.54 109.54 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34.21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1-1.55 4.26c-1 1-1.14.91-2.05-.53a14.87 14.87 0 0 1-1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36.66.51 1.35.34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95.7-3 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0-2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79.1 18.55a101.2 101.2 0 0 0-1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.88 132.88 0 0 0-2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.24 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0-2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0-1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0-2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51.68 3 .57 7.05-1.67l4.35-2.4L268.32 5c10.44-.4 10.81-.47 15.26-2.68L288.16 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1-1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1-4.09 3.71 13.62 13.62 0 0 0-4.38 4.78 5.89 5.89 0 0 1-2.49 2.91 6.88 6.88 0 0 0-2.45 1.71 67.62 67.62 0 0 1-7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56.71 8.84a33.45 33.45 0 0 0-1.06 8.91c0 4.88.22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69.52 12.69-11 22.84l-4 3.49.07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36.47 2.26.78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43.17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1-1.73-10.79 100.5 100.5 0 0 0-1.73-10.79 37.53 37.53 0 0 1-1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62.62 0 0 1-1-.14zm-87.18-266.59c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.28 86.25 255 78.55 268c-31 52-6 101.59 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.3 70.64-78.7 91.18-105.29 61.71z\"]\n};\nconst faFirstOrderAlt = {\n  prefix: 'fab',\n  iconName: 'first-order-alt',\n  icon: [496, 512, [], \"f50a\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z\"]\n};\nconst faOsi = {\n  prefix: 'fab',\n  iconName: 'osi',\n  icon: [512, 512, [], \"f41a\", \"M8 266.44C10.3 130.64 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0-64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z\"]\n};\nconst faGoogleWallet = {\n  prefix: 'fab',\n  iconName: 'google-wallet',\n  icon: [448, 512, [], \"f1ee\", \"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\"]\n};\nconst faDAndDBeyond = {\n  prefix: 'fab',\n  iconName: 'd-and-d-beyond',\n  icon: [640, 512, [], \"f6ca\", \"M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9.2-5.8 1.6-7.5.6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9.6-.3 1.3 0 .6 1.9-.2.6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3.1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9.9 7.5.2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1.6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6.7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4.2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5.5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4.8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6.5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9.5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8.5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6.3 3 .6 4.3 1.1-2.1.8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2.8.2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8.6-2.6-.2s.3-4.3.3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3.6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7.2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7.6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8.8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5.3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9.3 5.6 1.1V196c-1.1.5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1.2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5.2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1.2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3.3-99.3zm-.3 77.5c-37.4 0-36.9-55.3.2-55.3 36.8.1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8.2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1.1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5.8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6.3-39.9-4 .1.8.5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8.2-39.9-4 .1.7.5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6.3-4 1.1-6.1 2.9.1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z\"]\n};\nconst faPeriscope = {\n  prefix: 'fab',\n  iconName: 'periscope',\n  icon: [448, 512, [], \"f3da\", \"M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\"]\n};\nconst faFulcrum = {\n  prefix: 'fab',\n  iconName: 'fulcrum',\n  icon: [320, 512, [], \"f50b\", \"M95.75 164.14l-35.38 43.55L25 164.14l35.38-43.55zM144.23 0l-20.54 198.18L72.72 256l51 57.82L144.23 512V300.89L103.15 256l41.08-44.89zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.82 247 256l-51-57.82L175.42 0z\"]\n};\nconst faCloudscale = {\n  prefix: 'fab',\n  iconName: 'cloudscale',\n  icon: [448, 512, [], \"f383\", \"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z\"]\n};\nconst faForumbee = {\n  prefix: 'fab',\n  iconName: 'forumbee',\n  icon: [448, 512, [], \"f211\", \"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z\"]\n};\nconst faMizuni = {\n  prefix: 'fab',\n  iconName: 'mizuni',\n  icon: [496, 512, [], \"f3cc\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z\"]\n};\nconst faSchlix = {\n  prefix: 'fab',\n  iconName: 'schlix',\n  icon: [448, 512, [], \"f3ea\", \"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\"]\n};\nconst faSquareXing = {\n  prefix: 'fab',\n  iconName: 'square-xing',\n  icon: [448, 512, [\"xing-square\"], \"f169\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM93.8 320.2c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6 .2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2c-3.5 6.2-7.7 9.1-12.6 9.1H93.8zm163.5-33.4v.2l65.5 119c2.8 5.1 .1 10.1-6 10.1H270.2c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c1.8-3.2 22.9-40.4 63.3-111.6c11.7-20.7 25.1-44.3 40.1-70.8c3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10L257.3 286.8z\"]\n};\nconst faXingSquare = faSquareXing;\nconst faBandcamp = {\n  prefix: 'fab',\n  iconName: 'bandcamp',\n  icon: [512, 512, [], \"f2d5\", \"M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm48.2,326.1h-181L207.9,178h181Z\"]\n};\nconst faWpforms = {\n  prefix: 'fab',\n  iconName: 'wpforms',\n  icon: [448, 512, [], \"f298\", \"M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z\"]\n};\nconst faCloudversify = {\n  prefix: 'fab',\n  iconName: 'cloudversify',\n  icon: [616, 512, [], \"f385\", \"M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z\"]\n};\nconst faUsps = {\n  prefix: 'fab',\n  iconName: 'usps',\n  icon: [576, 512, [], \"f7e1\", \"M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8.1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z\"]\n};\nconst faMegaport = {\n  prefix: 'fab',\n  iconName: 'megaport',\n  icon: [496, 512, [], \"f5a3\", \"M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z\"]\n};\nconst faMagento = {\n  prefix: 'fab',\n  iconName: 'magento',\n  icon: [448, 512, [], \"f3c4\", \"M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z\"]\n};\nconst faSpotify = {\n  prefix: 'fab',\n  iconName: 'spotify',\n  icon: [496, 512, [], \"f1bc\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"]\n};\nconst faOptinMonster = {\n  prefix: 'fab',\n  iconName: 'optin-monster',\n  icon: [576, 512, [], \"f23c\", \"M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7.3-6.5.3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8.9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8.5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4.5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3.5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1.2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3.3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1.5-8.1.8-11.6.8-1.9-21.9-6.8-44-14.3-64.6 3.7.3 8.1.3 11.8.3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1.8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3.3 26.6.3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6.8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3.3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2.8 2.2.8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8.3 1.9.5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3.9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5.9-8.4-20.2-23.5-29.1-25.1z\"]\n};\nconst faFly = {\n  prefix: 'fab',\n  iconName: 'fly',\n  icon: [384, 512, [], \"f417\", \"M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\"]\n};\nconst faSquareBluesky = {\n  prefix: 'fab',\n  iconName: 'square-bluesky',\n  icon: [448, 512, [], \"e6a3\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM224 247.4c14.5-30 54-85.8 90.7-113.3c26.5-19.9 69.3-35.2 69.3 13.7c0 9.8-5.6 82.1-8.9 93.8c-11.4 40.8-53 51.2-90 44.9c64.7 11 81.2 47.5 45.6 84c-67.5 69.3-97-17.4-104.6-39.6c0 0 0 0 0 0l-.3-.9c-.9-2.6-1.4-4.1-1.8-4.1s-.9 1.5-1.8 4.1c-.1 .3-.2 .6-.3 .9c0 0 0 0 0 0c-7.6 22.2-37.1 108.8-104.6 39.6c-35.5-36.5-19.1-73 45.6-84c-37 6.3-78.6-4.1-90-44.9c-3.3-11.7-8.9-84-8.9-93.8c0-48.9 42.9-33.5 69.3-13.7c36.7 27.5 76.2 83.4 90.7 113.3z\"]\n};\nconst faAviato = {\n  prefix: 'fab',\n  iconName: 'aviato',\n  icon: [640, 512, [], \"f421\", \"M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z\"]\n};\nconst faItunes = {\n  prefix: 'fab',\n  iconName: 'itunes',\n  icon: [448, 512, [], \"f3b4\", \"M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z\"]\n};\nconst faCuttlefish = {\n  prefix: 'fab',\n  iconName: 'cuttlefish',\n  icon: [440, 512, [], \"f38c\", \"M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\"]\n};\nconst faBlogger = {\n  prefix: 'fab',\n  iconName: 'blogger',\n  icon: [448, 512, [], \"f37c\", \"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\"]\n};\nconst faFlickr = {\n  prefix: 'fab',\n  iconName: 'flickr',\n  icon: [448, 512, [], \"f16e\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z\"]\n};\nconst faViber = {\n  prefix: 'fab',\n  iconName: 'viber',\n  icon: [512, 512, [], \"f409\", \"M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\"]\n};\nconst faSoundcloud = {\n  prefix: 'fab',\n  iconName: 'soundcloud',\n  icon: [640, 512, [], \"f1be\", \"M639.8 298.6c-1.3 23.1-11.5 44.8-28.4 60.5s-39.2 24.4-62.3 24.1h-218c-4.8 0-9.4-2-12.8-5.4s-5.3-8-5.3-12.8V130.2c-.2-4 .9-8 3.1-11.4s5.3-6.1 9-7.7c0 0 20.1-13.9 62.3-13.9c25.8 0 51.1 6.9 73.3 20.1c17.3 10.2 32.3 23.8 44.1 40.1s20 34.8 24.2 54.4c7.5-2.1 15.3-3.2 23.1-3.2c11.7-.1 23.3 2.2 34.2 6.7S606.8 226.6 615 235s14.6 18.3 18.9 29.3s6.3 22.6 5.9 34.3zm-354-153.5c.1-1 0-2-.3-2.9s-.8-1.8-1.5-2.6s-1.5-1.3-2.4-1.7s-1.9-.6-2.9-.6s-2 .2-2.9 .6s-1.7 1-2.4 1.7s-1.2 1.6-1.5 2.6s-.4 1.9-.3 2.9c-6 78.9-10.6 152.9 0 231.6c.2 1.7 1 3.3 2.3 4.5s3 1.8 4.7 1.8s3.4-.6 4.7-1.8s2.1-2.8 2.3-4.5c11.3-79.4 6.6-152 0-231.6zm-44 27.3c-.2-1.8-1.1-3.5-2.4-4.7s-3.1-1.9-5-1.9s-3.6 .7-5 1.9s-2.2 2.9-2.4 4.7c-7.9 67.9-7.9 136.5 0 204.4c.3 1.8 1.2 3.4 2.5 4.5s3.1 1.8 4.8 1.8s3.5-.6 4.8-1.8s2.2-2.8 2.5-4.5c8.8-67.8 8.8-136.5 .1-204.4zm-44.3-6.9c-.2-1.8-1-3.4-2.3-4.6s-3-1.8-4.8-1.8s-3.5 .7-4.8 1.8s-2.1 2.8-2.3 4.6c-6.7 72-10.2 139.3 0 211.1c0 1.9 .7 3.7 2.1 5s3.1 2.1 5 2.1s3.7-.7 5-2.1s2.1-3.1 2.1-5c10.5-72.8 7.3-138.2 .1-211.1zm-44 20.6c0-1.9-.8-3.8-2.1-5.2s-3.2-2.1-5.2-2.1s-3.8 .8-5.2 2.1s-2.1 3.2-2.1 5.2c-8.1 63.3-8.1 127.5 0 190.8c.2 1.8 1 3.4 2.4 4.6s3.1 1.9 4.8 1.9s3.5-.7 4.8-1.9s2.2-2.8 2.4-4.6c8.8-63.3 8.9-127.5 .3-190.8zM109 233.7c0-1.9-.8-3.8-2.1-5.1s-3.2-2.1-5.1-2.1s-3.8 .8-5.1 2.1s-2.1 3.2-2.1 5.1c-10.5 49.2-5.5 93.9 .4 143.6c.3 1.6 1.1 3.1 2.3 4.2s2.8 1.7 4.5 1.7s3.2-.6 4.5-1.7s2.1-2.5 2.3-4.2c6.6-50.4 11.6-94.1 .4-143.6zm-44.1-7.5c-.2-1.8-1.1-3.5-2.4-4.8s-3.2-1.9-5-1.9s-3.6 .7-5 1.9s-2.2 2.9-2.4 4.8c-9.3 50.2-6.2 94.4 .3 144.5c.7 7.6 13.6 7.5 14.4 0c7.2-50.9 10.5-93.8 .3-144.5zM20.3 250.8c-.2-1.8-1.1-3.5-2.4-4.8s-3.2-1.9-5-1.9s-3.6 .7-5 1.9s-2.3 2.9-2.4 4.8c-8.5 33.7-5.9 61.6 .6 95.4c.2 1.7 1 3.3 2.3 4.4s2.9 1.8 4.7 1.8s3.4-.6 4.7-1.8s2.1-2.7 2.3-4.4c7.5-34.5 11.2-61.8 .4-95.4z\"]\n};\nconst faDigg = {\n  prefix: 'fab',\n  iconName: 'digg',\n  icon: [512, 512, [], \"f1a6\", \"M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z\"]\n};\nconst faTencentWeibo = {\n  prefix: 'fab',\n  iconName: 'tencent-weibo',\n  icon: [384, 512, [], \"f1d5\", \"M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z\"]\n};\nconst faLetterboxd = {\n  prefix: 'fab',\n  iconName: 'letterboxd',\n  icon: [640, 512, [], \"e62d\", \"M521.3 128C586.9 128 640 181.1 640 246.6s-53.1 118.6-118.7 118.6c-42.5 0-79.7-22.3-100.7-55.8c11.4-18.2 18-39.7 18-62.8s-6.6-44.6-18-62.8l0 0 .8-1.2c20.8-32.3 56.8-53.9 97.9-54.6l2 0zM320 128c42.5 0 79.7 22.3 100.7 55.8c-11.4 18.2-18 39.7-18 62.8s6.6 44.6 18 62.8l0 0-.8 1.2c-20.8 32.3-56.8 53.9-97.9 54.6l-2 0c-42.5 0-79.7-22.3-100.7-55.8c11.4-18.2 18-39.7 18-62.8s-6.6-44.6-18-62.8l0 0 .8-1.2c20.8-32.3 56.8-53.9 97.9-54.6l2 0zm-201.3 0c42.5 0 79.7 22.3 100.7 55.8c-11.4 18.2-18 39.7-18 62.8s6.6 44.6 18 62.8l0 0-.8 1.2c-20.8 32.3-56.8 53.9-97.9 54.6l-2 0C53.1 365.1 0 312.1 0 246.6S53.1 128 118.7 128z\"]\n};\nconst faSymfony = {\n  prefix: 'fab',\n  iconName: 'symfony',\n  icon: [512, 512, [], \"f83d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.74 143.54c-11.47.41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.85 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.72-29 34.46-58.4 39.82-71.58 40.26-24.65.85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71.11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.35 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.23 140.13 251.94 197 262 205.29c37.17-109 100.53-105.46 102.43-105.53 25.16-.81 44.19 10.59 44.83 28.65.25 7.69-4.17 22.59-19.52 23.13z\"]\n};\nconst faMaxcdn = {\n  prefix: 'fab',\n  iconName: 'maxcdn',\n  icon: [512, 512, [], \"f136\", \"M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z\"]\n};\nconst faEtsy = {\n  prefix: 'fab',\n  iconName: 'etsy',\n  icon: [384, 512, [], \"f2d7\", \"M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z\"]\n};\nconst faFacebookMessenger = {\n  prefix: 'fab',\n  iconName: 'facebook-messenger',\n  icon: [512, 512, [], \"f39f\", \"M256.55 8C116.52 8 8 110.34 8 248.57c0 72.3 29.71 134.78 78.07 177.94 8.35 7.51 6.63 11.86 8.05 58.23A19.92 19.92 0 0 0 122 502.31c52.91-23.3 53.59-25.14 62.56-22.7C337.85 521.8 504 423.7 504 248.57 504 110.34 396.59 8 256.55 8zm149.24 185.13l-73 115.57a37.37 37.37 0 0 1-53.91 9.93l-58.08-43.47a15 15 0 0 0-18 0l-78.37 59.44c-10.46 7.93-24.16-4.6-17.11-15.67l73-115.57a37.36 37.36 0 0 1 53.91-9.93l58.06 43.46a15 15 0 0 0 18 0l78.41-59.38c10.44-7.98 24.14 4.54 17.09 15.62z\"]\n};\nconst faAudible = {\n  prefix: 'fab',\n  iconName: 'audible',\n  icon: [640, 512, [], \"f373\", \"M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z\"]\n};\nconst faThinkPeaks = {\n  prefix: 'fab',\n  iconName: 'think-peaks',\n  icon: [576, 512, [], \"f731\", \"M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5.1-235.8-404.6z\"]\n};\nconst faBilibili = {\n  prefix: 'fab',\n  iconName: 'bilibili',\n  icon: [512, 512, [], \"e3d9\", \"M488.6 104.1C505.3 122.2 513 143.8 511.9 169.8V372.2C511.5 398.6 502.7 420.3 485.4 437.3C468.2 454.3 446.3 463.2 419.9 464H92.02C65.57 463.2 43.81 454.2 26.74 436.8C9.682 419.4 .7667 396.5 0 368.2V169.8C.7667 143.8 9.682 122.2 26.74 104.1C43.81 87.75 65.57 78.77 92.02 78H121.4L96.05 52.19C90.3 46.46 87.42 39.19 87.42 30.4C87.42 21.6 90.3 14.34 96.05 8.603C101.8 2.868 109.1 0 117.9 0C126.7 0 134 2.868 139.8 8.603L213.1 78H301.1L375.6 8.603C381.7 2.868 389.2 0 398 0C406.8 0 414.1 2.868 419.9 8.603C425.6 14.34 428.5 21.6 428.5 30.4C428.5 39.19 425.6 46.46 419.9 52.19L394.6 78L423.9 78C450.3 78.77 471.9 87.75 488.6 104.1H488.6zM449.8 173.8C449.4 164.2 446.1 156.4 439.1 150.3C433.9 144.2 425.1 140.9 416.4 140.5H96.05C86.46 140.9 78.6 144.2 72.47 150.3C66.33 156.4 63.07 164.2 62.69 173.8V368.2C62.69 377.4 65.95 385.2 72.47 391.7C78.99 398.2 86.85 401.5 96.05 401.5H416.4C425.6 401.5 433.4 398.2 439.7 391.7C446 385.2 449.4 377.4 449.8 368.2L449.8 173.8zM185.5 216.5C191.8 222.8 195.2 230.6 195.6 239.7V273C195.2 282.2 191.9 289.9 185.8 296.2C179.6 302.5 171.8 305.7 162.2 305.7C152.6 305.7 144.7 302.5 138.6 296.2C132.5 289.9 129.2 282.2 128.8 273V239.7C129.2 230.6 132.6 222.8 138.9 216.5C145.2 210.2 152.1 206.9 162.2 206.5C171.4 206.9 179.2 210.2 185.5 216.5H185.5zM377 216.5C383.3 222.8 386.7 230.6 387.1 239.7V273C386.7 282.2 383.4 289.9 377.3 296.2C371.2 302.5 363.3 305.7 353.7 305.7C344.1 305.7 336.3 302.5 330.1 296.2C323.1 289.9 320.7 282.2 320.4 273V239.7C320.7 230.6 324.1 222.8 330.4 216.5C336.7 210.2 344.5 206.9 353.7 206.5C362.9 206.9 370.7 210.2 377 216.5H377z\"]\n};\nconst faErlang = {\n  prefix: 'fab',\n  iconName: 'erlang',\n  icon: [640, 512, [], \"f39d\", \"M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z\"]\n};\nconst faXTwitter = {\n  prefix: 'fab',\n  iconName: 'x-twitter',\n  icon: [512, 512, [], \"e61b\", \"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"]\n};\nconst faCottonBureau = {\n  prefix: 'fab',\n  iconName: 'cotton-bureau',\n  icon: [512, 512, [], \"f89e\", \"M474.31 330.41c-23.66 91.85-94.23 144.59-201.9 148.35V429.6c0-48 26.41-74.39 74.39-74.39 62 0 99.2-37.2 99.2-99.21 0-61.37-36.53-98.28-97.38-99.06-33-69.32-146.5-64.65-177.24 0C110.52 157.72 74 194.63 74 256c0 62.13 37.27 99.41 99.4 99.41 48 0 74.55 26.23 74.55 74.39V479c-134.43-5-211.1-85.07-211.1-223 0-141.82 81.35-223.2 223.2-223.2 114.77 0 189.84 53.2 214.69 148.81H500C473.88 71.51 388.22 8 259.82 8 105 8 12 101.19 12 255.82 12 411.14 105.19 504.34 259.82 504c128.27 0 213.87-63.81 239.67-173.59zM357 182.33c41.37 3.45 64.2 29 64.2 73.67 0 48-26.43 74.41-74.4 74.41-28.61 0-49.33-9.59-61.59-27.33 83.06-16.55 75.59-99.67 71.79-120.75zm-81.68 97.36c-2.46-10.34-16.33-87 56.23-97 2.27 10.09 16.52 87.11-56.26 97zM260 132c28.61 0 49 9.67 61.44 27.61-28.36 5.48-49.36 20.59-61.59 43.45-12.23-22.86-33.23-38-61.6-43.45 12.41-17.69 33.27-27.35 61.57-27.35zm-71.52 50.72c73.17 10.57 58.91 86.81 56.49 97-72.41-9.84-59-86.95-56.25-97zM173.2 330.41c-48 0-74.4-26.4-74.4-74.41 0-44.36 22.86-70 64.22-73.67-6.75 37.2-1.38 106.53 71.65 120.75-12.14 17.63-32.84 27.3-61.14 27.3zm53.21 12.39A80.8 80.8 0 0 0 260 309.25c7.77 14.49 19.33 25.54 33.82 33.55a80.28 80.28 0 0 0-33.58 33.83c-8-14.5-19.07-26.23-33.56-33.83z\"]\n};\nconst faDashcube = {\n  prefix: 'fab',\n  iconName: 'dashcube',\n  icon: [448, 512, [], \"f210\", \"M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z\"]\n};\nconst fa42Group = {\n  prefix: 'fab',\n  iconName: '42-group',\n  icon: [640, 512, [\"innosoft\"], \"e080\", \"M320 96V416C341.011 416 361.818 411.861 381.23 403.821C400.641 395.78 418.28 383.995 433.138 369.138C447.995 354.28 459.78 336.641 467.821 317.23C475.861 297.818 480 277.011 480 256C480 234.989 475.861 214.182 467.821 194.771C459.78 175.359 447.995 157.72 433.138 142.863C418.28 128.005 400.641 116.22 381.23 108.179C361.818 100.139 341.011 96 320 96ZM0 256L160.002 416L320.003 256L160.002 96L0 256ZM480 256C480 277.011 484.138 297.818 492.179 317.23C500.219 336.643 512.005 354.28 526.862 369.138C541.72 383.995 559.357 395.781 578.77 403.821C598.182 411.862 618.989 416 640 416V96C597.565 96 556.869 112.858 526.862 142.863C496.857 172.869 480 213.565 480 256Z\"]\n};\nconst faInnosoft = fa42Group;\nconst faStackExchange = {\n  prefix: 'fab',\n  iconName: 'stack-exchange',\n  icon: [448, 512, [], \"f18d\", \"M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z\"]\n};\nconst faElementor = {\n  prefix: 'fab',\n  iconName: 'elementor',\n  icon: [512, 512, [], \"f430\", \"M.361 256C.361 397 114 511 255 511C397 511 511 397 511 256C511 116 397 2.05 255 2.05C114 2.05 .361 116 .361 256zM192 150V363H149V150H192zM234 150H362V193H234V150zM362 235V278H234V235H362zM234 320H362V363H234V320z\"]\n};\nconst faSquarePiedPiper = {\n  prefix: 'fab',\n  iconName: 'square-pied-piper',\n  icon: [448, 512, [\"pied-piper-square\"], \"e01e\", \"M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\"]\n};\nconst faPiedPiperSquare = faSquarePiedPiper;\nconst faCreativeCommonsNd = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nd',\n  icon: [496, 512, [], \"f4eb\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z\"]\n};\nconst faPalfed = {\n  prefix: 'fab',\n  iconName: 'palfed',\n  icon: [576, 512, [], \"f3d8\", \"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z\"]\n};\nconst faSuperpowers = {\n  prefix: 'fab',\n  iconName: 'superpowers',\n  icon: [448, 512, [], \"f2dd\", \"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\"]\n};\nconst faResolving = {\n  prefix: 'fab',\n  iconName: 'resolving',\n  icon: [496, 512, [], \"f3e7\", \"M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z\"]\n};\nconst faXbox = {\n  prefix: 'fab',\n  iconName: 'xbox',\n  icon: [512, 512, [], \"f412\", \"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\"]\n};\nconst faSquareWebAwesomeStroke = {\n  prefix: 'fab',\n  iconName: 'square-web-awesome-stroke',\n  icon: [448, 512, [], \"e684\", \"M64 64C46.3 64 32 78.3 32 96l0 320c0 17.7 14.3 32 32 32l320 0c17.7 0 32-14.3 32-32l0-320c0-17.7-14.3-32-32-32L64 64zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm235 81.6L288 224l52.2-10.4c-2.6-3.9-4.2-8.5-4.2-13.6c0-13.3 10.7-24 24-24s24 10.7 24 24c0 13-10.3 23.6-23.2 24L304.5 349.1c-5.2 11.5-16.6 18.9-29.2 18.9l-102.6 0c-12.6 0-24-7.4-29.2-18.9L87.2 224C74.3 223.6 64 213 64 200c0-13.3 10.7-24 24-24s24 10.7 24 24c0 5-1.5 9.7-4.2 13.6L160 224l53.1-46.4c-8.9-4.1-15-13.1-15-23.6c0-14.4 11.6-26 26-26s26 11.6 26 26c0 10.5-6.2 19.5-15.1 23.6z\"]\n};\nconst faSearchengin = {\n  prefix: 'fab',\n  iconName: 'searchengin',\n  icon: [460, 512, [], \"f3eb\", \"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"]\n};\nconst faTiktok = {\n  prefix: 'fab',\n  iconName: 'tiktok',\n  icon: [448, 512, [], \"e07b\", \"M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z\"]\n};\nconst faSquareFacebook = {\n  prefix: 'fab',\n  iconName: 'square-facebook',\n  icon: [448, 512, [\"facebook-square\"], \"f082\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64h98.2V334.2H109.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H255V480H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\"]\n};\nconst faFacebookSquare = faSquareFacebook;\nconst faRenren = {\n  prefix: 'fab',\n  iconName: 'renren',\n  icon: [512, 512, [], \"f18b\", \"M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\"]\n};\nconst faLinux = {\n  prefix: 'fab',\n  iconName: 'linux',\n  icon: [448, 512, [], \"f17c\", \"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\"]\n};\nconst faGlide = {\n  prefix: 'fab',\n  iconName: 'glide',\n  icon: [448, 512, [], \"f2a5\", \"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z\"]\n};\nconst faLinkedin = {\n  prefix: 'fab',\n  iconName: 'linkedin',\n  icon: [448, 512, [], \"f08c\", \"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"]\n};\nconst faHubspot = {\n  prefix: 'fab',\n  iconName: 'hubspot',\n  icon: [512, 512, [], \"f3b2\", \"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\"]\n};\nconst faDeploydog = {\n  prefix: 'fab',\n  iconName: 'deploydog',\n  icon: [512, 512, [], \"f38e\", \"M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z\"]\n};\nconst faTwitch = {\n  prefix: 'fab',\n  iconName: 'twitch',\n  icon: [512, 512, [], \"f1e8\", \"M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z\"]\n};\nconst faFlutter = {\n  prefix: 'fab',\n  iconName: 'flutter',\n  icon: [448, 512, [], \"e694\", \"M429.5 236.3L291.7 374.1 429.5 512H272l-59.1-59.1-78.8-78.8L272 236.3H429.5zM272 0L16 256l78.8 78.8L429.5 0H272z\"]\n};\nconst faRavelry = {\n  prefix: 'fab',\n  iconName: 'ravelry',\n  icon: [512, 512, [], \"f2d9\", \"M498.252,234.223c-1.208-10.34-1.7-20.826-3.746-31a310.306,310.306,0,0,0-9.622-36.6,184.068,184.068,0,0,0-30.874-57.5,251.154,251.154,0,0,0-18.818-21.689,237.362,237.362,0,0,0-47.113-36.116A240.8,240.8,0,0,0,331.356,26.65c-11.018-3.1-22.272-5.431-33.515-7.615-6.78-1.314-13.749-1.667-20.627-2.482-.316-.036-.6-.358-.9-.553q-16.143.009-32.288.006c-2.41.389-4.808.925-7.236,1.15a179.331,179.331,0,0,0-34.256,7.1,221.5,221.5,0,0,0-39.768,16.355,281.385,281.385,0,0,0-38.08,24.158c-6.167,4.61-12.268,9.36-17.974,14.518C96.539,88.494,86.34,97.72,76.785,107.555a243.878,243.878,0,0,0-33.648,43.95,206.488,206.488,0,0,0-20.494,44.6,198.2,198.2,0,0,0-7.691,34.759A201.13,201.13,0,0,0,13.4,266.385a299.716,299.716,0,0,0,4.425,40.24,226.865,226.865,0,0,0,16.73,53.3,210.543,210.543,0,0,0,24,39.528,213.589,213.589,0,0,0,26.358,28.416A251.313,251.313,0,0,0,126.7,458.455a287.831,287.831,0,0,0,55.9,25.277,269.5,269.5,0,0,0,40.641,9.835c6.071,1.01,12.275,1.253,18.412,1.873a4.149,4.149,0,0,1,1.19.56h32.289c2.507-.389,5-.937,7.527-1.143,16.336-1.332,32.107-5.335,47.489-10.717A219.992,219.992,0,0,0,379.1,460.322c9.749-6.447,19.395-13.077,28.737-20.1,5.785-4.348,10.988-9.5,16.3-14.457,3.964-3.7,7.764-7.578,11.51-11.5a232.162,232.162,0,0,0,31.427-41.639c9.542-16.045,17.355-32.905,22.3-50.926,2.859-10.413,4.947-21.045,7.017-31.652,1.032-5.279,1.251-10.723,1.87-16.087.036-.317.358-.6.552-.9V236.005A9.757,9.757,0,0,1,498.252,234.223Zm-161.117-1.15s-16.572-2.98-28.47-2.98c-27.2,0-33.57,14.9-33.57,37.04V360.8H201.582V170.062H275.1v31.931c8.924-26.822,26.771-36.189,62.04-36.189Z\"]\n};\nconst faMixer = {\n  prefix: 'fab',\n  iconName: 'mixer',\n  icon: [512, 512, [], \"e056\", \"M114.57,76.07a45.71,45.71,0,0,0-67.51-6.41c-17.58,16.18-19,43.52-4.75,62.77l91.78,123L41.76,379.58c-14.23,19.25-13.11,46.59,4.74,62.77A45.71,45.71,0,0,0,114,435.94L242.89,262.7a12.14,12.14,0,0,0,0-14.23ZM470.24,379.58,377.91,255.45l91.78-123c14.22-19.25,12.83-46.59-4.75-62.77a45.71,45.71,0,0,0-67.51,6.41l-128,172.12a12.14,12.14,0,0,0,0,14.23L398,435.94a45.71,45.71,0,0,0,67.51,6.41C483.35,426.17,484.47,398.83,470.24,379.58Z\"]\n};\nconst faSquareLastfm = {\n  prefix: 'fab',\n  iconName: 'square-lastfm',\n  icon: [448, 512, [\"lastfm-square\"], \"f203\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM210.7 280.8c-1.8-5.5-3.4-10.8-5-15.9c-12.9-41.9-21-68.4-58-68.4c-22.4 0-45.1 16.1-45.1 61.2c0 35.2 18 57.2 43.3 57.2c28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8c0-57.9 28.6-92 82.5-92c67.9 0 79.3 35.3 96.4 88.4c1.4 4.4 2.9 8.9 4.4 13.5c8.8 26.8 24.2 46.2 61.2 46.2c24.9 0 38.1-5.5 38.1-19.1c0-17.5-16.9-21.2-40-26.4c-3.2-.7-6.5-1.4-9.9-2.2c-30.4-7.3-42.5-23.1-42.5-48c0-40 32.3-52.4 65.2-52.4c37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4c-16.1 0-26 7.3-26 19.8c0 11 4.8 17.6 20.9 21.3c2.2 .5 4.5 1 6.7 1.4c31.1 6.5 65.1 13.7 65.1 56.1c.1 36.7-30.7 50.6-76.1 50.6c-63.4 0-85.4-28.6-97.1-64.1z\"]\n};\nconst faLastfmSquare = faSquareLastfm;\nconst faVimeo = {\n  prefix: 'fab',\n  iconName: 'vimeo',\n  icon: [448, 512, [], \"f40a\", \"M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z\"]\n};\nconst faMendeley = {\n  prefix: 'fab',\n  iconName: 'mendeley',\n  icon: [640, 512, [], \"f7b3\", \"M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4.7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1.1-.2.2-.3.4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z\"]\n};\nconst faUniregistry = {\n  prefix: 'fab',\n  iconName: 'uniregistry',\n  icon: [384, 512, [], \"f404\", \"M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z\"]\n};\nconst faFigma = {\n  prefix: 'fab',\n  iconName: 'figma',\n  icon: [384, 512, [], \"f799\", \"M14 95.7924C14 42.8877 56.8878 0 109.793 0H274.161C327.066 0 369.954 42.8877 369.954 95.7924C369.954 129.292 352.758 158.776 326.711 175.897C352.758 193.019 369.954 222.502 369.954 256.002C369.954 308.907 327.066 351.795 274.161 351.795H272.081C247.279 351.795 224.678 342.369 207.666 326.904V415.167C207.666 468.777 163.657 512 110.309 512C57.5361 512 14 469.243 14 416.207C14 382.709 31.1945 353.227 57.2392 336.105C31.1945 318.983 14 289.5 14 256.002C14 222.502 31.196 193.019 57.2425 175.897C31.196 158.776 14 129.292 14 95.7924ZM176.288 191.587H109.793C74.2172 191.587 45.3778 220.427 45.3778 256.002C45.3778 291.44 73.9948 320.194 109.381 320.416C109.518 320.415 109.655 320.415 109.793 320.415H176.288V191.587ZM207.666 256.002C207.666 291.577 236.505 320.417 272.081 320.417H274.161C309.737 320.417 338.576 291.577 338.576 256.002C338.576 220.427 309.737 191.587 274.161 191.587H272.081C236.505 191.587 207.666 220.427 207.666 256.002ZM109.793 351.795C109.655 351.795 109.518 351.794 109.381 351.794C73.9948 352.015 45.3778 380.769 45.3778 416.207C45.3778 451.652 74.6025 480.622 110.309 480.622C146.591 480.622 176.288 451.186 176.288 415.167V351.795H109.793ZM109.793 31.3778C74.2172 31.3778 45.3778 60.2173 45.3778 95.7924C45.3778 131.368 74.2172 160.207 109.793 160.207H176.288V31.3778H109.793ZM207.666 160.207H274.161C309.737 160.207 338.576 131.368 338.576 95.7924C338.576 60.2173 309.737 31.3778 274.161 31.3778H207.666V160.207Z\"]\n};\nconst faCreativeCommonsRemix = {\n  prefix: 'fab',\n  iconName: 'creative-commons-remix',\n  icon: [496, 512, [], \"f4ee\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z\"]\n};\nconst faCcAmazonPay = {\n  prefix: 'fab',\n  iconName: 'cc-amazon-pay',\n  icon: [576, 512, [], \"f42d\", \"M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z\"]\n};\nconst faDropbox = {\n  prefix: 'fab',\n  iconName: 'dropbox',\n  icon: [528, 512, [], \"f16b\", \"M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z\"]\n};\nconst faInstagram = {\n  prefix: 'fab',\n  iconName: 'instagram',\n  icon: [448, 512, [], \"f16d\", \"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"]\n};\nconst faCmplid = {\n  prefix: 'fab',\n  iconName: 'cmplid',\n  icon: [640, 512, [], \"e360\", \"M226.119,388.165a3.816,3.816,0,0,0-2.294-3.5,3.946,3.946,0,0,0-1.629-.385L72.6,384.3a19.243,19.243,0,0,1-17.924-26.025L81.585,255.692a35.72,35.72,0,0,1,32.373-26H262.525a7.07,7.07,0,0,0,6.392-5.194l10.769-41.131a3.849,3.849,0,0,0-2.237-4.937,3.755,3.755,0,0,0-1.377-.261c-.063,0-.126,0-.189.005H127.38a106.8,106.8,0,0,0-96.99,77.1L3.483,358.824A57.469,57.469,0,0,0,57.314,436q1.43,0,2.86-.072H208.742a7.131,7.131,0,0,0,6.391-5.193L225.839,389.6A3.82,3.82,0,0,0,226.119,388.165ZM306.658,81.2a3.861,3.861,0,0,0,.251-1.367A3.813,3.813,0,0,0,303.079,76c-.064,0-.128,0-.192,0h-41A7.034,7.034,0,0,0,255.5,81.2l-21.347,80.915h51.131ZM180.364,368.249H231.5L263.452,245.69H212.321ZM511.853,79.723a3.809,3.809,0,0,0-3.8-3.661c-.058,0-.137,0-.23.007h-41a7.1,7.1,0,0,0-6.584,5.129L368.91,430.634a3.54,3.54,0,0,0-.262,1.335,3.873,3.873,0,0,0,3.864,3.863c.056,0,.112,0,.169,0h41a7.068,7.068,0,0,0,6.392-5.193L511.533,81.2A3.624,3.624,0,0,0,511.853,79.723ZM324.649,384.47h-41a7.2,7.2,0,0,0-6.392,5.194L266.52,430.8a3.662,3.662,0,0,0-.268,1.374A3.783,3.783,0,0,0,270.023,436c.06,0,.166,0,.3-.012h40.905a7.036,7.036,0,0,0,6.391-5.193l10.769-41.131a3.75,3.75,0,0,0-3.445-5.208c-.108,0-.217,0-.326.014Zm311.324-308.4h-41a7.066,7.066,0,0,0-6.392,5.129l-91.46,349.436a4.073,4.073,0,0,0-.229,1.347,3.872,3.872,0,0,0,3.863,3.851c.056,0,.112,0,.169,0h40.968a7.1,7.1,0,0,0,6.392-5.193L639.68,81.2a3.624,3.624,0,0,0,.32-1.475,3.841,3.841,0,0,0-3.821-3.564c-.068,0-.137,0-.206.006ZM371.562,225.236l10.8-41.1a4.369,4.369,0,0,0,.227-1.388,3.869,3.869,0,0,0-3.861-3.842c-.057,0-.113,0-.169,0h-41.1a7.292,7.292,0,0,0-6.391,5.226l-10.834,41.1a4.417,4.417,0,0,0-.26,1.493c0,.069,0,.138,0,.206a3.776,3.776,0,0,0,3.757,3.507c.076,0,.18,0,.3-.012h41.129A7.034,7.034,0,0,0,371.562,225.236Z\"]\n};\nconst faUpwork = {\n  prefix: 'fab',\n  iconName: 'upwork',\n  icon: [641, 512, [], \"e641\", \"M494.7 295.6c-50.3 0-83.5-38.9-92.8-53.9c11.9-95.3 46.8-125.4 92.8-125.4c45.5 0 80.9 36.4 80.9 89.7s-35.4 89.7-80.9 89.7zm0-237.8c-81.9 0-127.8 53.4-141 108.4c-14.9-28-25.9-65.5-34.5-100.3H206v141c0 51.1-23.3 89-68.8 89s-71.6-37.8-71.6-89l.5-141H.8v141c0 41.1 13.3 78.4 37.6 105.1c25 27.5 59.2 41.8 98.8 41.8c78.8 0 133.8-60.4 133.8-146.9V112.1c8.2 31.2 27.8 91.1 65.3 143.6l-35 199.4h66.4l23.1-141.3c7.6 6.3 15.7 12 24.2 17c22.2 14 47.7 21.9 73.9 22.8c0 0 4 .2 6.1 .2c81.2 0 145.9-62.9 145.9-147.8s-64.8-148.1-146-148.1z\"]\n};\nconst faFacebook = {\n  prefix: 'fab',\n  iconName: 'facebook',\n  icon: [512, 512, [62000], \"f09a\", \"M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5V334.2H141.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287V510.1C413.8 494.8 512 386.9 512 256h0z\"]\n};\nconst faGripfire = {\n  prefix: 'fab',\n  iconName: 'gripfire',\n  icon: [384, 512, [], \"f3ac\", \"M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4.4 3.3.6 6.7.6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z\"]\n};\nconst faJediOrder = {\n  prefix: 'fab',\n  iconName: 'jedi-order',\n  icon: [448, 512, [], \"f50e\", \"M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z\"]\n};\nconst faUikit = {\n  prefix: 'fab',\n  iconName: 'uikit',\n  icon: [448, 512, [], \"f403\", \"M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z\"]\n};\nconst faFortAwesomeAlt = {\n  prefix: 'fab',\n  iconName: 'fort-awesome-alt',\n  icon: [512, 512, [], \"f3a3\", \"M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1.7.1 1.3.1 2 .1 1.3.1 2.7.2 4 0 .8.1 1.5.1 2.3 0 1.3.1 2.5.2 3.7.1.8.1 1.6.2 2.4.1 1.1.2 2.3.3 3.5 0 .8.1 1.6.2 2.4.1 1.2.3 2.4.4 3.6.1.8.2 1.5.3 2.3.1 1.3.3 2.6.5 3.9.1.6.2 1.3.3 1.9l.9 5.7c.1.6.2 1.1.3 1.7.3 1.3.5 2.7.8 4 .2.8.3 1.6.5 2.4.2 1 .5 2.1.7 3.2.2.9.4 1.7.6 2.6.2 1 .4 2 .7 3 .2.9.5 1.8.7 2.7.3 1 .5 1.9.8 2.9.3.9.5 1.8.8 2.7.2.9.5 1.9.8 2.8s.5 1.8.8 2.7c.3 1 .6 1.9.9 2.8.6 1.6 1.1 3.3 1.7 4.9.4 1 .7 1.9 1 2.8.3 1 .7 2 1.1 3 .3.8.6 1.5.9 2.3l1.2 3c.3.7.6 1.5.9 2.2.4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3.7.6 1.3.9 2 .5 1 1 2.1 1.5 3.1.2.6.5 1.1.8 1.7.6 1.1 1.1 2.2 1.7 3.3.1.2.2.3.3.5 2.2 4.1 4.4 8.2 6.8 12.2.2.4.5.8.7 1.2.7 1.1 1.3 2.2 2 3.3.3.5.6.9.9 1.4.6 1.1 1.3 2.1 2 3.2.3.5.6.9.9 1.4.7 1.1 1.4 2.1 2.1 3.2.2.4.5.8.8 1.2.7 1.1 1.5 2.2 2.3 3.3.2.2.3.5.5.7 37.5 51.7 94.4 88.5 160 99.4.9.1 1.7.3 2.6.4 1 .2 2.1.4 3.1.5s1.9.3 2.8.4c1 .2 2 .3 3 .4.9.1 1.9.2 2.9.3s1.9.2 2.9.3 2.1.2 3.1.3c.9.1 1.8.1 2.7.2 1.1.1 2.3.1 3.4.2.8 0 1.7.1 2.5.1 1.3 0 2.6.1 3.9.1.7.1 1.4.1 2.1.1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1.8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2.9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5.9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4.2-.2.3-.5.5-.7.8-1.1 1.5-2.2 2.3-3.3.2-.4.5-.8.8-1.2.7-1.1 1.4-2.1 2.1-3.2.3-.5.6-.9.9-1.4.6-1.1 1.3-2.1 2-3.2.3-.5.6-.9.9-1.4.7-1.1 1.3-2.2 2-3.3.2-.4.5-.8.7-1.2 2.4-4 4.6-8.1 6.8-12.2.1-.2.2-.3.3-.5.6-1.1 1.1-2.2 1.7-3.3.2-.6.5-1.1.8-1.7.5-1 1-2.1 1.5-3.1.3-.7.6-1.3.9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7.6-1.5.9-2.2l1.2-3c.3-.8.6-1.5.9-2.3.4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9.3-1 .6-1.9.9-2.8s.5-1.8.8-2.7c.2-.9.5-1.9.8-2.8s.6-1.8.8-2.7c.3-1 .5-1.9.8-2.9.2-.9.5-1.8.7-2.7.2-1 .5-2 .7-3 .2-.9.4-1.7.6-2.6.2-1 .5-2.1.7-3.2.2-.8.3-1.6.5-2.4.3-1.3.6-2.7.8-4 .1-.6.2-1.1.3-1.7l.9-5.7c.1-.6.2-1.3.3-1.9.1-1.3.3-2.6.5-3.9.1-.8.2-1.5.3-2.3.1-1.2.3-2.4.4-3.6 0-.8.1-1.6.2-2.4.1-1.1.2-2.3.3-3.5.1-.8.1-1.6.2-2.4.1 1.7.1.5.2-.7 0-.8.1-1.5.1-2.3.1-1.3.2-2.7.2-4 .1-.7.1-1.3.1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z\"]\n};\nconst faPhabricator = {\n  prefix: 'fab',\n  iconName: 'phabricator',\n  icon: [496, 512, [], \"f3db\", \"M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z\"]\n};\nconst faUssunnah = {\n  prefix: 'fab',\n  iconName: 'ussunnah',\n  icon: [482, 512, [], \"f407\", \"M481.9 268.1A240.9 240.9 0 1 1 .1 268a240.9 240.9 0 1 1 481.9 0zM24.5 268a216.5 216.5 0 1 0 432.9 0A216.5 216.5 0 1 0 24.5 268zm385.9 63.3c-12.7 0-21.6-1.9-26.7-5.9c-5.5-4.3-8.2-12.3-8.2-23.8V205.1c0-6.5-5.2-20.2-15.7-41.2c7 0 17-9.1 30-27.2V284.5c0 11 2.4 19.4 7 25.3c3.7 4.7 10.1 8.9 19 12.6c1.2 .4 2.6 .9 4.1 1.4c2.9 .9 6.3 2.1 10.3 3.5c-1.8 2.7-8.3 4-19.9 4zm-219 0c-1.3 2.4-3.6 5.5-6.8 9.4l-18.5 22.5c-1-6.1-4-13-9.3-20.6s-9.7-11.4-13.4-11.4h-8.3H53.6c3.3-5.3 4.9-8.8 4.9-10.8c0-2-.8-5.3-2.4-9.7c-1.5-4.4-2.4-8.5-2.4-12.4c0-7.4 2.1-13.9 6.3-19.3L80 253.4l-7.1-17.7L89 215.9l6.7 16.8 8-10.3c-1.8 6.4-2.6 12.3-2.6 17.7c0 4.2 2.8 13.3 8.3 27.3l16.2 40.7H135h8 .3c2.8 .4 7.7 5 14.6 13.9c1.8 2.4 4.3 5.8 7.7 10.2c1.4 1.9 2.9 3.9 4.6 6.1c1.3-2.3 2-4.6 2-7.1c0-2-1.3-6.6-4-13.4L163 304.1c-4-10.6-6.1-17.7-6.1-21.3c0-6.3 1.9-12.3 5.8-17.9c.5-.6 1-1.3 1.5-1.9c4.4-5.6 8.8-11.1 13.3-16.5c-1.1 4.6-1.7 8.7-1.7 12c0 3.7 1.7 9.9 5.1 18.8l7.9 20.4c1.9 4.7 3 8.2 3.7 10.3h17.6 8.3l-.9-2.6c-1.4-3.9-4-7-7.7-9.3l15.6-20.1 12.3 32h13.4L245 292.2c-1.5-3.9-4-7-7.7-9.3L253 262.8 270.3 308h13.4l-11.4-29.4c-1.5-3.9-4-7-7.7-9.3l15.6-20L302.6 308h10.3 8.3 7.6c1.5 0 3-1.1 4.5-3.1s2.2-4.1 2.2-6.3V205.1c0-6.5-4.5-20.3-13.7-41.2c5.4 0 14.1-9.1 26.2-27.2V300.2c0 7.2 .6 12 1.7 14.6c1.6 3.4 5.3 6.2 11.1 8.2c-3.9 5.6-8.7 8.5-14.5 8.5H321.1h-8.3H210.5h-19zM93.4 287.3c-2.7-6.7-4-11.7-4-15c-.6 1.2-2.4 3.7-5.4 7.6c-1.4 1.9-2.2 3.7-2.2 5.3c0 2.6 .8 5.7 2.2 9.3l5.6 13.9h0c5 0 9 0 11.9-.1l-8.2-20.9zm13.5-72.4c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm-27.6 0c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm87 27.5c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3z\"]\n};\nconst faEarlybirds = {\n  prefix: 'fab',\n  iconName: 'earlybirds',\n  icon: [480, 512, [], \"f39a\", \"M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\"]\n};\nconst faTradeFederation = {\n  prefix: 'fab',\n  iconName: 'trade-federation',\n  icon: [496, 512, [], \"f513\", \"M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5.1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z\"]\n};\nconst faAutoprefixer = {\n  prefix: 'fab',\n  iconName: 'autoprefixer',\n  icon: [640, 512, [], \"f41c\", \"M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z\"]\n};\nconst faWhatsapp = {\n  prefix: 'fab',\n  iconName: 'whatsapp',\n  icon: [448, 512, [], \"f232\", \"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"]\n};\nconst faSquareUpwork = {\n  prefix: 'fab',\n  iconName: 'square-upwork',\n  icon: [448, 512, [], \"e67c\", \"M56 32l336 0c30.9 0 56 25.1 56 56l0 336c0 30.9-25.1 56-56 56L56 480c-30.9 0-56-25.1-56-56L0 88C0 57.1 25.1 32 56 32zM270.9 274.2c6.6-52.9 25.9-69.5 51.4-69.5c25.3 0 44.9 20.2 44.9 49.7s-19.7 49.7-44.9 49.7c-27.9 0-46.3-21.5-51.4-29.9zm-26.7-41.8c-8.2-15.5-14.3-36.3-19.2-55.6l-29.7 0-33.2 0 0 78.1c0 28.4-12.9 49.4-38.2 49.4s-39.8-20.9-39.8-49.3l.3-78.1-36.2 0 0 78.1c0 22.8 7.4 43.5 20.9 58.2c13.9 15.2 32.8 23.2 54.8 23.2c43.7 0 74.2-33.5 74.2-81.5l0-52.5c4.6 17.3 15.4 50.5 36.2 79.7L215 392.6l36.8 0 12.8-78.4c4.2 3.5 8.7 6.6 13.4 9.4c12.3 7.8 26.4 12.2 40.9 12.6l.1 0c.5 0 1.1 0 1.6 0c.6 0 1.1 0 1.7 0c45.1 0 80.9-34.9 80.9-81.9s-35.9-82.2-80.9-82.2c-45.4 0-70.9 29.7-78.1 60.1z\"]\n};\nconst faSlideshare = {\n  prefix: 'fab',\n  iconName: 'slideshare',\n  icon: [512, 512, [], \"f1e7\", \"M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7.1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7.3-56.6.3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7.3 92.8.3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z\"]\n};\nconst faGooglePlay = {\n  prefix: 'fab',\n  iconName: 'google-play',\n  icon: [512, 512, [], \"f3ab\", \"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\"]\n};\nconst faViadeo = {\n  prefix: 'fab',\n  iconName: 'viadeo',\n  icon: [448, 512, [], \"f2a9\", \"M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\"]\n};\nconst faLine = {\n  prefix: 'fab',\n  iconName: 'line',\n  icon: [512, 512, [], \"f3c0\", \"M311 196.8v81.3c0 2.1-1.6 3.7-3.7 3.7h-13c-1.3 0-2.4-.7-3-1.5l-37.3-50.3v48.2c0 2.1-1.6 3.7-3.7 3.7h-13c-2.1 0-3.7-1.6-3.7-3.7V196.9c0-2.1 1.6-3.7 3.7-3.7h12.9c1.1 0 2.4 .6 3 1.6l37.3 50.3V196.9c0-2.1 1.6-3.7 3.7-3.7h13c2.1-.1 3.8 1.6 3.8 3.5zm-93.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 2.1 1.6 3.7 3.7 3.7h13c2.1 0 3.7-1.6 3.7-3.7V196.8c0-1.9-1.6-3.7-3.7-3.7zm-31.4 68.1H150.3V196.8c0-2.1-1.6-3.7-3.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 1 .3 1.8 1 2.5c.7 .6 1.5 1 2.5 1h52.2c2.1 0 3.7-1.6 3.7-3.7v-13c0-1.9-1.6-3.7-3.5-3.7zm193.7-68.1H327.3c-1.9 0-3.7 1.6-3.7 3.7v81.3c0 1.9 1.6 3.7 3.7 3.7h52.2c2.1 0 3.7-1.6 3.7-3.7V265c0-2.1-1.6-3.7-3.7-3.7H344V247.7h35.5c2.1 0 3.7-1.6 3.7-3.7V230.9c0-2.1-1.6-3.7-3.7-3.7H344V213.5h35.5c2.1 0 3.7-1.6 3.7-3.7v-13c-.1-1.9-1.7-3.7-3.7-3.7zM512 93.4V419.4c-.1 51.2-42.1 92.7-93.4 92.6H92.6C41.4 511.9-.1 469.8 0 418.6V92.6C.1 41.4 42.2-.1 93.4 0H419.4c51.2 .1 92.7 42.1 92.6 93.4zM441.6 233.5c0-83.4-83.7-151.3-186.4-151.3s-186.4 67.9-186.4 151.3c0 74.7 66.3 137.4 155.9 149.3c21.8 4.7 19.3 12.7 14.4 42.1c-.8 4.7-3.8 18.4 16.1 10.1s107.3-63.2 146.5-108.2c27-29.7 39.9-59.8 39.9-93.1z\"]\n};\nconst faGoogleDrive = {\n  prefix: 'fab',\n  iconName: 'google-drive',\n  icon: [512, 512, [], \"f3aa\", \"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\"]\n};\nconst faServicestack = {\n  prefix: 'fab',\n  iconName: 'servicestack',\n  icon: [496, 512, [], \"f3ec\", \"M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z\"]\n};\nconst faSimplybuilt = {\n  prefix: 'fab',\n  iconName: 'simplybuilt',\n  icon: [512, 512, [], \"f215\", \"M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z\"]\n};\nconst faBitbucket = {\n  prefix: 'fab',\n  iconName: 'bitbucket',\n  icon: [512, 512, [61810], \"f171\", \"M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z\"]\n};\nconst faImdb = {\n  prefix: 'fab',\n  iconName: 'imdb',\n  icon: [448, 512, [], \"f2d8\", \"M89.5 323.6H53.93V186.2H89.5V323.6zM156.1 250.5L165.2 186.2H211.5V323.6H180.5V230.9L167.1 323.6H145.8L132.8 232.9L132.7 323.6H101.5V186.2H147.6C148.1 194.5 150.4 204.3 151.9 215.6L156.1 250.5zM223.7 323.6V186.2H250.3C267.3 186.2 277.3 187.1 283.3 188.6C289.4 190.3 294 192.8 297.2 196.5C300.3 199.8 302.3 203.1 303 208.5C303.9 212.9 304.4 221.6 304.4 234.7V282.9C304.4 295.2 303.7 303.4 302.5 307.6C301.4 311.7 299.4 315 296.5 317.3C293.7 319.7 290.1 321.4 285.8 322.3C281.6 323.1 275.2 323.6 266.7 323.6H223.7zM259.2 209.7V299.1C264.3 299.1 267.5 298.1 268.6 296.8C269.7 294.8 270.4 289.2 270.4 280.1V226.8C270.4 220.6 270.3 216.6 269.7 214.8C269.4 213 268.5 211.8 267.1 210.1C265.7 210.1 263 209.7 259.2 209.7V209.7zM316.5 323.6V186.2H350.6V230.1C353.5 227.7 356.7 225.2 360.1 223.5C363.7 222 368.9 221.1 372.9 221.1C377.7 221.1 381.8 221.9 385.2 223.3C388.6 224.8 391.2 226.8 393.2 229.5C394.9 232.1 395.9 234.8 396.3 237.3C396.7 239.9 396.1 245.3 396.1 253.5V292.1C396.1 300.3 396.3 306.4 395.3 310.5C394.2 314.5 391.5 318.1 387.5 320.1C383.4 324 378.6 325.4 372.9 325.4C368.9 325.4 363.7 324.5 360.2 322.9C356.7 321.1 353.5 318.4 350.6 314.9L348.5 323.6L316.5 323.6zM361.6 302.9C362.3 301.1 362.6 296.9 362.6 290.4V255C362.6 249.4 362.3 245.5 361.5 243.8C360.8 241.9 357.8 241.1 355.7 241.1C353.7 241.1 352.3 241.9 351.6 243.4C351 244.9 350.6 248.8 350.6 255V291.4C350.6 297.5 351 301.4 351.8 303C352.4 304.7 353.9 305.5 355.9 305.5C358.1 305.5 360.1 304.7 361.6 302.9L361.6 302.9zM418.4 32.04C434.1 33.27 447.1 47.28 447.1 63.92V448.1C447.1 464.5 435.2 478.5 418.9 479.1C418.6 479.1 418.4 480 418.1 480H29.88C29.6 480 29.32 479.1 29.04 479.9C13.31 478.5 1.093 466.1 0 449.7L.0186 61.78C1.081 45.88 13.82 33.09 30.26 31.1H417.7C417.9 31.1 418.2 32.01 418.4 32.04L418.4 32.04zM30.27 41.26C19 42.01 10.02 51.01 9.257 62.4V449.7C9.63 455.1 11.91 460.2 15.7 464C19.48 467.9 24.51 470.3 29.89 470.7H418.1C429.6 469.7 438.7 459.1 438.7 448.1V63.91C438.7 58.17 436.6 52.65 432.7 48.45C428.8 44.24 423.4 41.67 417.7 41.26L30.27 41.26z\"]\n};\nconst faDeezer = {\n  prefix: 'fab',\n  iconName: 'deezer',\n  icon: [576, 512, [], \"e077\", \"M451.46,244.71H576V172H451.46Zm0-173.89v72.67H576V70.82Zm0,275.06H576V273.2H451.46ZM0,447.09H124.54V374.42H0Zm150.47,0H275V374.42H150.47Zm150.52,0H425.53V374.42H301Zm150.47,0H576V374.42H451.46ZM301,345.88H425.53V273.2H301Zm-150.52,0H275V273.2H150.47Zm0-101.17H275V172H150.47Z\"]\n};\nconst faRaspberryPi = {\n  prefix: 'fab',\n  iconName: 'raspberry-pi',\n  icon: [407, 512, [], \"f7bb\", \"M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2.7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6.8C271.6.6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9.1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6.1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7.8 14.1.6 23.9.8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8.4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2.1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7.9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6.9 2.7 3.6 4.4 6.7 5.8-15.4.9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8.7 8.3.1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6.4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3.4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6.2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9.5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6.2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z\"]\n};\nconst faJira = {\n  prefix: 'fab',\n  iconName: 'jira',\n  icon: [496, 512, [], \"f7b1\", \"M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z\"]\n};\nconst faDocker = {\n  prefix: 'fab',\n  iconName: 'docker',\n  icon: [640, 512, [], \"f395\", \"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z\"]\n};\nconst faScreenpal = {\n  prefix: 'fab',\n  iconName: 'screenpal',\n  icon: [512, 512, [], \"e570\", \"M233.5 22.49C233.5 10.07 243.6 0 256 0C268.4 0 278.5 10.07 278.5 22.49C278.5 34.91 268.4 44.98 256 44.98C243.6 44.98 233.5 34.91 233.5 22.49zM313.4 259C313.4 290.7 287.7 316.4 256 316.4C224.3 316.4 198.6 290.7 198.6 259C198.6 227.3 224.3 201.6 256 201.6C287.7 201.6 313.4 227.3 313.4 259zM337.2 350C359.5 330.1 373.7 302.7 377.1 273H496.6C493.1 334.4 466.2 392.2 421.4 434.4C376.7 476.6 317.5 500.2 256 500.2C194.5 500.2 135.3 476.6 90.56 434.4C45.83 392.2 18.94 334.4 15.39 273H135.1C138.5 302.7 152.7 330.1 175 350C197.3 369.9 226.2 380.9 256.1 380.9C285.1 380.9 314.8 369.9 337.2 350zM73.14 140.3C73.54 152.7 63.81 163.1 51.39 163.5C38.97 163.9 28.59 154.2 28.18 141.8C27.78 129.3 37.52 118.9 49.94 118.5C62.35 118.1 72.74 127.9 73.14 140.3zM438.9 141C438.9 128.6 448.9 118.5 461.4 118.5C473.8 118.5 483.8 128.6 483.8 141C483.8 153.5 473.8 163.5 461.4 163.5C448.9 163.5 438.9 153.5 438.9 141zM317.9 95.27C300.6 109.1 278.7 118.1 256 118.1C233.3 118.1 211.4 109.1 194.1 95.27C176.8 80.55 165.3 60.18 161.7 37.78C176.8 31.37 192.5 26.52 208.6 23.31C208.6 35.88 213.6 47.93 222.5 56.82C231.4 65.7 243.4 70.7 256 70.7C268.6 70.7 280.6 65.7 289.5 56.82C298.4 47.93 303.4 35.88 303.4 23.31C319.5 26.52 335.2 31.37 350.3 37.78C346.7 60.18 335.2 80.55 317.9 95.27H317.9zM82.78 231C61.42 238.6 38.06 238.4 16.86 230.4C18.82 214.1 22.46 198.1 27.71 182.5C33.1 185.6 39.05 187.6 45.22 188.5C51.39 189.3 57.67 188.9 63.68 187.3C69.69 185.6 75.33 182.9 80.27 179.1C85.21 175.3 89.36 170.6 92.47 165.2C95.58 159.8 97.61 153.8 98.42 147.7C99.23 141.5 98.83 135.2 97.22 129.2C95.61 123.2 92.83 117.6 89.04 112.6C85.25 107.7 80.53 103.5 75.14 100.4C85.96 88.11 98.01 76.94 111.1 67.07C128.7 81.42 140.6 101.6 144.7 123.9C148.8 146.2 144.8 169.3 133.5 188.9C122.1 208.5 104.1 223.4 82.78 231V231zM429.2 231.1C407.9 223.5 389.9 208.5 378.5 188.9C367.2 169.3 363.3 146.2 367.4 123.9C371.5 101.7 383.4 81.54 400.9 67.19C414 77.04 426.1 88.21 436.9 100.5C426.2 106.9 418.5 117.2 415.4 129.3C412.2 141.3 413.1 154.1 420.2 164.9C426.4 175.7 436.6 183.6 448.6 186.9C460.6 190.2 473.5 188.6 484.3 182.6C489.6 198.1 493.2 214.2 495.2 230.4C473.1 238.5 450.6 238.7 429.2 231.1L429.2 231.1z\"]\n};\nconst faBluetooth = {\n  prefix: 'fab',\n  iconName: 'bluetooth',\n  icon: [448, 512, [], \"f293\", \"M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\"]\n};\nconst faGitter = {\n  prefix: 'fab',\n  iconName: 'gitter',\n  icon: [384, 512, [], \"f426\", \"M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z\"]\n};\nconst faDAndD = {\n  prefix: 'fab',\n  iconName: 'd-and-d',\n  icon: [576, 512, [], \"f38d\", \"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"]\n};\nconst faMicroblog = {\n  prefix: 'fab',\n  iconName: 'microblog',\n  icon: [448, 512, [], \"e01a\", \"M399.36,362.23c29.49-34.69,47.1-78.34,47.1-125.79C446.46,123.49,346.86,32,224,32S1.54,123.49,1.54,236.44,101.14,440.87,224,440.87a239.28,239.28,0,0,0,79.44-13.44,7.18,7.18,0,0,1,8.12,2.56c18.58,25.09,47.61,42.74,79.89,49.92a4.42,4.42,0,0,0,5.22-3.43,4.37,4.37,0,0,0-.85-3.62,87,87,0,0,1,3.69-110.69ZM329.52,212.4l-57.3,43.49L293,324.75a6.5,6.5,0,0,1-9.94,7.22L224,290.92,164.94,332a6.51,6.51,0,0,1-9.95-7.22l20.79-68.86-57.3-43.49a6.5,6.5,0,0,1,3.8-11.68l71.88-1.51,23.66-67.92a6.5,6.5,0,0,1,12.28,0l23.66,67.92,71.88,1.51a6.5,6.5,0,0,1,3.88,11.68Z\"]\n};\nconst faCcDinersClub = {\n  prefix: 'fab',\n  iconName: 'cc-diners-club',\n  icon: [576, 512, [], \"f24c\", \"M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\"]\n};\nconst faGgCircle = {\n  prefix: 'fab',\n  iconName: 'gg-circle',\n  icon: [512, 512, [], \"f261\", \"M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z\"]\n};\nconst faPiedPiperHat = {\n  prefix: 'fab',\n  iconName: 'pied-piper-hat',\n  icon: [640, 512, [], \"f4e5\", \"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\"]\n};\nconst faKickstarterK = {\n  prefix: 'fab',\n  iconName: 'kickstarter-k',\n  icon: [448, 512, [], \"f3bc\", \"M356.6 256.2l40.8-40.5c42.2-41.9 42.2-110.3 0-152.1s-111-41.9-153.2 0L229.3 78.4C209.6 50.3 177.1 32 140.2 32C80.5 32 32 80.2 32 139.5V372.5C32 431.9 80.5 480 140.2 480c37.1 0 69.3-18.3 89-46.4l14.9 14.7c42.2 41.9 111 41.9 153.2 0s42.2-110.3 0-152.1l-40.8-40z\"]\n};\nconst faYandex = {\n  prefix: 'fab',\n  iconName: 'yandex',\n  icon: [256, 512, [], \"f413\", \"M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z\"]\n};\nconst faReadme = {\n  prefix: 'fab',\n  iconName: 'readme',\n  icon: [576, 512, [], \"f4d5\", \"M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z\"]\n};\nconst faHtml5 = {\n  prefix: 'fab',\n  iconName: 'html5',\n  icon: [384, 512, [], \"f13b\", \"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z\"]\n};\nconst faSellsy = {\n  prefix: 'fab',\n  iconName: 'sellsy',\n  icon: [640, 512, [], \"f213\", \"M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z\"]\n};\nconst faSquareWebAwesome = {\n  prefix: 'fab',\n  iconName: 'square-web-awesome',\n  icon: [448, 512, [], \"e683\", \"M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM235 177.6L288 224l52.2-10.4c-2.6-3.9-4.2-8.5-4.2-13.6c0-13.3 10.7-24 24-24s24 10.7 24 24c0 13-10.3 23.6-23.2 24L304.5 349.1c-5.2 11.5-16.6 18.9-29.2 18.9l-102.6 0c-12.6 0-24-7.4-29.2-18.9L87.2 224C74.3 223.6 64 213 64 200c0-13.3 10.7-24 24-24s24 10.7 24 24c0 5-1.5 9.7-4.2 13.6L160 224l53.1-46.4c-8.9-4.1-15-13.1-15-23.6c0-14.4 11.6-26 26-26s26 11.6 26 26c0 10.5-6.2 19.5-15.1 23.6z\"]\n};\nconst faSass = {\n  prefix: 'fab',\n  iconName: 'sass',\n  icon: [640, 512, [], \"f41e\", \"M301.84 378.92c-.3.6-.6 1.08 0 0zm249.13-87a131.16 131.16 0 0 0-58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.83 122.83 0 0 0-5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4.8-.7 1.3-.9 1.7.3-.5.5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.87-65.2-99.07-116.5 1-18.7 7.5-67.8 127.07-127.4 98-48.8 176.35-35.4 189.84-5.6 19.4 42.5-41.89 121.6-143.66 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.17-11.8 61.78-23.8 109.87-90.1 95.77-145.6C386.52 18.32 293-.18 204.57 31.22c-52.69 18.7-109.67 48.1-150.66 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.06 125.7-1.6.9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.57-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.24 201.24 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31.31 0 0 0 .1.2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.72 450.1 270 450.1 270a201.24 201.24 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.18 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.42 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.29 30.4.3 57.2-19.1 78.3zm134.36-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5.1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z\"]\n};\nconst faWirsindhandwerk = {\n  prefix: 'fab',\n  iconName: 'wirsindhandwerk',\n  icon: [512, 512, [\"wsh\"], \"e2d0\", \"M50.77161,479.81213h83.36071V367.84741l-83.36071,47.009Zm329.04675,0h82.35022V414.85645l-82.35022-47.009Zm.00568-448V251.568L256.1759,179.1861,134.50378,251.568V31.81213H50.77161V392.60565L256.1759,270.31909,462.16858,392.60565V31.81213Z\"]\n};\nconst faWsh = faWirsindhandwerk;\nconst faBuromobelexperte = {\n  prefix: 'fab',\n  iconName: 'buromobelexperte',\n  icon: [448, 512, [], \"f37f\", \"M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z\"]\n};\nconst faSalesforce = {\n  prefix: 'fab',\n  iconName: 'salesforce',\n  icon: [640, 512, [], \"f83b\", \"M248.89 245.64h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.66-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.22 23.76a8.63 8.63 0 0 0-3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93.95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.39-165.36 136.43-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.89 92.18-213.81-5.17C8.91 428.78-50.19 266.52 53.36 205.61 18.61 126.18 76 32 167.67 32a124.24 124.24 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.69 640 232zm-519.55 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17.71 1.64-.47.24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0-.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1-19-6.35c-.47-.23-1.42-.71-1.65.71l-2.4 7.47c-.47.94.23 1.18.23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0-.24 1.41l2.59 7.06a1 1 0 0 0 1.18.7c.65 0 6.8-4 16.93-4 4 0 7.06.71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0-7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61.32-21.64-22.78-21.64zM199 200.24a1.11 1.11 0 0 0-1.18-1.18H188a1.11 1.11 0 0 0-1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16.23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12.15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.35-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18.71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0-.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1-19-6.35 1 1 0 0 0-1.65.71l-2.35 7.52c-.47.94.23 1.18.23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.09 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14.94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17.47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0-1.17 1.18l-1.42 7.76c0 .7.24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41.71-.24.71-2.59 6.82-2.83 7.53s0 1.41.47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52.09.3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0-1.18-1.17h-9.4a1.11 1.11 0 0 0-1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91.05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0-.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94.47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53.23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59.74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0-1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.36-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01.94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z\"]\n};\nconst faOctopusDeploy = {\n  prefix: 'fab',\n  iconName: 'octopus-deploy',\n  icon: [512, 512, [], \"e082\", \"M455.6,349.2c-45.891-39.09-36.67-77.877-16.095-128.11C475.16,134.04,415.967,34.14,329.93,8.3,237.04-19.6,134.252,24.341,99.677,117.147a180.862,180.862,0,0,0-10.988,73.544c1.733,29.543,14.717,52.97,24.09,80.3,17.2,50.161-28.1,92.743-66.662,117.582-46.806,30.2-36.319,39.857-8.428,41.858,23.378,1.68,44.478-4.548,65.265-15.045,9.2-4.647,40.687-18.931,45.13-28.588C135.9,413.388,111.122,459.5,126.621,488.9c19.1,36.229,67.112-31.77,76.709-45.812,8.591-12.572,42.963-81.279,63.627-46.926,18.865,31.361,8.6,76.391,35.738,104.622,32.854,34.2,51.155-18.312,51.412-44.221.163-16.411-6.1-95.852,29.9-59.944C405.428,418,436.912,467.8,472.568,463.642c38.736-4.516-22.123-67.967-28.262-78.695,5.393,4.279,53.665,34.128,53.818,9.52C498.234,375.678,468.039,359.8,455.6,349.2Z\"]\n};\nconst faMedapps = {\n  prefix: 'fab',\n  iconName: 'medapps',\n  icon: [320, 512, [], \"f3c6\", \"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\"]\n};\nconst faNs8 = {\n  prefix: 'fab',\n  iconName: 'ns8',\n  icon: [640, 512, [], \"f3d5\", \"M104.324,269.172h26.067V242.994H104.324Zm52.466-26.178-.055-26.178v-.941a39.325,39.325,0,0,0-78.644.941v.166h26.4v-.166a12.98,12.98,0,0,1,25.956,0v26.178Zm52.356,25.846a91.1,91.1,0,0,1-91.1,91.1h-.609a91.1,91.1,0,0,1-91.1-91.1H0v.166A117.33,117.33,0,0,0,117.44,386.28h.775A117.331,117.331,0,0,0,235.49,268.84V242.828H209.146Zm-157.233,0a65.362,65.362,0,0,0,130.723,0H156.292a39.023,39.023,0,0,1-78.035,0V242.883H51.968v-26.62A65.42,65.42,0,0,1,182.8,217.48v25.293h26.344V217.48a91.761,91.761,0,0,0-183.522,0v25.4H51.913Zm418.4-71.173c13.67,0,24.573,6.642,30.052,18.264l.719,1.549,23.245-11.511-.609-1.439c-8.025-19.26-28.5-31.27-53.407-31.27-23.134,0-43.611,11.4-50.972,28.447-.123,26.876-.158,23.9,0,24.85,4.7,11.013,14.555,19.37,28.668,24.241a102.033,102.033,0,0,0,19.813,3.984c5.479.72,10.626,1.384,15.829,3.1,6.364,2.1,10.46,5.257,12.84,9.851v9.851c-3.708,7.527-13.781,12.342-25.791,12.342-14.334,0-25.956-6.918-31.933-19.039l-.72-1.494L415.026,280.9l.553,1.439c7.915,19.426,29.609,32.044,55.289,32.044,23.632,0,44.608-11.4,52.3-28.447l.166-25.9-.166-.664c-4.87-11.014-15.219-19.647-28.944-24.241-7.693-2.712-14.335-3.6-20.7-4.427a83.777,83.777,0,0,1-14.832-2.878c-6.31-1.937-10.4-5.092-12.619-9.63v-8.412C449.45,202.427,458.969,197.667,470.315,197.667ZM287.568,311.344h26.067v-68.4H287.568Zm352.266-53.3c-2.933-6.254-8.3-12.01-15.441-16.714A37.99,37.99,0,0,0,637.4,226l.166-25.347-.166-.664C630.038,184,610.667,173.26,589.25,173.26S548.461,184,541.1,199.992l-.166,25.347.166.664a39.643,39.643,0,0,0,13.006,15.331c-7.2,4.7-12.508,10.46-15.441,16.714l-.166,28.889.166.72c7.582,15.994,27.893,26.731,50.585,26.731s43.057-10.737,50.584-26.731l.166-28.89Zm-73.22-50.806c3.6-6.31,12.563-10.516,22.58-10.516s19.038,4.206,22.636,10.516v13.725c-3.542,6.2-12.563,10.349-22.636,10.349s-19.094-4.15-22.58-10.349Zm47.319,72.169c-3.764,6.641-13.338,10.9-24.683,10.9-11.125,0-20.976-4.372-24.684-10.9V263.25c3.708-6.309,13.5-10.515,24.684-10.515,11.345,0,20.919,4.15,24.683,10.515ZM376.4,265.962l-59.827-89.713h-29v40.623h26.51v.387l62.539,94.085H402.3V176.249H376.4Z\"]\n};\nconst faPinterestP = {\n  prefix: 'fab',\n  iconName: 'pinterest-p',\n  icon: [384, 512, [], \"f231\", \"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\"]\n};\nconst faApper = {\n  prefix: 'fab',\n  iconName: 'apper',\n  icon: [640, 512, [], \"f371\", \"M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z\"]\n};\nconst faFortAwesome = {\n  prefix: 'fab',\n  iconName: 'fort-awesome',\n  icon: [512, 512, [], \"f286\", \"M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z\"]\n};\nconst faWaze = {\n  prefix: 'fab',\n  iconName: 'waze',\n  icon: [512, 512, [], \"f83f\", \"M502.17 201.67C516.69 287.53 471.23 369.59 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1-51.57-49c-6.44.19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.92c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.26C94.8 95.2 193.12 32 288.09 32c102.48 0 197.15 70.67 214.08 169.67zM373.51 388.28c42-19.18 81.33-56.71 96.29-102.14 40.48-123.09-64.15-228-181.71-228-83.45 0-170.32 55.42-186.07 136-9.53 48.91 5 131.35-68.75 131.35C58.21 358.6 91.6 378.11 127 389.54c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9.82a51.69 51.69 0 0 1 78.78-16.42zM205.12 187.13c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.57 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.61 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06.28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z\"]\n};\nconst faBluesky = {\n  prefix: 'fab',\n  iconName: 'bluesky',\n  icon: [512, 512, [], \"e671\", \"M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z\"]\n};\nconst faCcJcb = {\n  prefix: 'fab',\n  iconName: 'cc-jcb',\n  icon: [576, 512, [], \"f24b\", \"M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z\"]\n};\nconst faSnapchat = {\n  prefix: 'fab',\n  iconName: 'snapchat',\n  icon: [512, 512, [62124, \"snapchat-ghost\"], \"f2ab\", \"M496.926,366.6c-3.373-9.176-9.8-14.086-17.112-18.153-1.376-.806-2.641-1.451-3.72-1.947-2.182-1.128-4.414-2.22-6.634-3.373-22.8-12.09-40.609-27.341-52.959-45.42a102.889,102.889,0,0,1-9.089-16.12c-1.054-3.013-1-4.724-.248-6.287a10.221,10.221,0,0,1,2.914-3.038c3.918-2.591,7.96-5.22,10.7-6.993,4.885-3.162,8.754-5.667,11.246-7.44,9.362-6.547,15.909-13.5,20-21.278a42.371,42.371,0,0,0,2.1-35.191c-6.2-16.318-21.613-26.449-40.287-26.449a55.543,55.543,0,0,0-11.718,1.24c-1.029.224-2.059.459-3.063.72.174-11.16-.074-22.94-1.066-34.534-3.522-40.758-17.794-62.123-32.674-79.16A130.167,130.167,0,0,0,332.1,36.443C309.515,23.547,283.91,17,256,17S202.6,23.547,180,36.443a129.735,129.735,0,0,0-33.281,26.783c-14.88,17.038-29.152,38.44-32.673,79.161-.992,11.594-1.24,23.435-1.079,34.533-1-.26-2.021-.5-3.051-.719a55.461,55.461,0,0,0-11.717-1.24c-18.687,0-34.125,10.131-40.3,26.449a42.423,42.423,0,0,0,2.046,35.228c4.105,7.774,10.652,14.731,20.014,21.278,2.48,1.736,6.361,4.24,11.246,7.44,2.641,1.711,6.5,4.216,10.28,6.72a11.054,11.054,0,0,1,3.3,3.311c.794,1.624.818,3.373-.36,6.6a102.02,102.02,0,0,1-8.94,15.785c-12.077,17.669-29.363,32.648-51.434,44.639C32.355,348.608,20.2,352.75,15.069,366.7c-3.868,10.528-1.339,22.506,8.494,32.6a49.137,49.137,0,0,0,12.4,9.387,134.337,134.337,0,0,0,30.342,12.139,20.024,20.024,0,0,1,6.126,2.741c3.583,3.137,3.075,7.861,7.849,14.78a34.468,34.468,0,0,0,8.977,9.127c10.019,6.919,21.278,7.353,33.207,7.811,10.776.41,22.989.881,36.939,5.481,5.778,1.91,11.78,5.605,18.736,9.92C194.842,480.951,217.707,495,255.973,495s61.292-14.123,78.118-24.428c6.907-4.24,12.872-7.9,18.489-9.758,13.949-4.613,26.163-5.072,36.939-5.481,11.928-.459,23.187-.893,33.206-7.812a34.584,34.584,0,0,0,10.218-11.16c3.434-5.84,3.348-9.919,6.572-12.771a18.971,18.971,0,0,1,5.753-2.629A134.893,134.893,0,0,0,476.02,408.71a48.344,48.344,0,0,0,13.019-10.193l.124-.149C498.389,388.5,500.708,376.867,496.926,366.6Zm-34.013,18.277c-20.745,11.458-34.533,10.23-45.259,17.137-9.114,5.865-3.72,18.513-10.342,23.076-8.134,5.617-32.177-.4-63.239,9.858-25.618,8.469-41.961,32.822-88.038,32.822s-62.036-24.3-88.076-32.884c-31-10.255-55.092-4.241-63.239-9.858-6.609-4.563-1.24-17.211-10.341-23.076-10.739-6.907-24.527-5.679-45.26-17.075-13.206-7.291-5.716-11.8-1.314-13.937,75.143-36.381,87.133-92.552,87.666-96.719.645-5.046,1.364-9.014-4.191-14.148-5.369-4.96-29.189-19.7-35.8-24.316-10.937-7.638-15.748-15.264-12.2-24.638,2.48-6.485,8.531-8.928,14.879-8.928a27.643,27.643,0,0,1,5.965.67c12,2.6,23.659,8.617,30.392,10.242a10.749,10.749,0,0,0,2.48.335c3.6,0,4.86-1.811,4.612-5.927-.768-13.132-2.628-38.725-.558-62.644,2.84-32.909,13.442-49.215,26.04-63.636,6.051-6.932,34.484-36.976,88.857-36.976s82.88,29.92,88.931,36.827c12.611,14.421,23.225,30.727,26.04,63.636,2.071,23.919.285,49.525-.558,62.644-.285,4.327,1.017,5.927,4.613,5.927a10.648,10.648,0,0,0,2.48-.335c6.745-1.624,18.4-7.638,30.4-10.242a27.641,27.641,0,0,1,5.964-.67c6.386,0,12.4,2.48,14.88,8.928,3.546,9.374-1.24,17-12.189,24.639-6.609,4.612-30.429,19.343-35.8,24.315-5.568,5.134-4.836,9.1-4.191,14.149.533,4.228,12.511,60.4,87.666,96.718C468.629,373.011,476.119,377.524,462.913,384.877Z\"]\n};\nconst faSnapchatGhost = faSnapchat;\nconst faFantasyFlightGames = {\n  prefix: 'fab',\n  iconName: 'fantasy-flight-games',\n  icon: [512, 512, [], \"f6dc\", \"M256 32.86L32.86 256 256 479.14 479.14 256 256 32.86zM88.34 255.83c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.77-18.69 24.63 18.4 62.06 58.9 62.15 59 .68.74 1.07 2.86.58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43.12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99zm234.82 101.6c-35.49 35.43-78.09 38.14-106.99 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64.14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29.26-.26.65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z\"]\n};\nconst faRust = {\n  prefix: 'fab',\n  iconName: 'rust',\n  icon: [512, 512, [], \"e07a\", \"M508.52,249.75,486.7,236.24c-.17-2-.34-3.93-.55-5.88l18.72-17.5a7.35,7.35,0,0,0-2.44-12.25l-24-9c-.54-1.88-1.08-3.78-1.67-5.64l15-20.83a7.35,7.35,0,0,0-4.79-11.54l-25.42-4.15c-.9-1.73-1.79-3.45-2.73-5.15l10.68-23.42a7.35,7.35,0,0,0-6.95-10.39l-25.82.91q-1.79-2.22-3.61-4.4L439,81.84A7.36,7.36,0,0,0,430.16,73L405,78.93q-2.17-1.83-4.4-3.61l.91-25.82a7.35,7.35,0,0,0-10.39-7L367.7,53.23c-1.7-.94-3.43-1.84-5.15-2.73L358.4,25.08a7.35,7.35,0,0,0-11.54-4.79L326,35.26c-1.86-.59-3.75-1.13-5.64-1.67l-9-24a7.35,7.35,0,0,0-12.25-2.44l-17.5,18.72c-1.95-.21-3.91-.38-5.88-.55L262.25,3.48a7.35,7.35,0,0,0-12.5,0L236.24,25.3c-2,.17-3.93.34-5.88.55L212.86,7.13a7.35,7.35,0,0,0-12.25,2.44l-9,24c-1.89.55-3.79,1.08-5.66,1.68l-20.82-15a7.35,7.35,0,0,0-11.54,4.79l-4.15,25.41c-1.73.9-3.45,1.79-5.16,2.73L120.88,42.55a7.35,7.35,0,0,0-10.39,7l.92,25.81c-1.49,1.19-3,2.39-4.42,3.61L81.84,73A7.36,7.36,0,0,0,73,81.84L78.93,107c-1.23,1.45-2.43,2.93-3.62,4.41l-25.81-.91a7.42,7.42,0,0,0-6.37,3.26,7.35,7.35,0,0,0-.57,7.13l10.66,23.41c-.94,1.7-1.83,3.43-2.73,5.16L25.08,153.6a7.35,7.35,0,0,0-4.79,11.54l15,20.82c-.59,1.87-1.13,3.77-1.68,5.66l-24,9a7.35,7.35,0,0,0-2.44,12.25l18.72,17.5c-.21,1.95-.38,3.91-.55,5.88L3.48,249.75a7.35,7.35,0,0,0,0,12.5L25.3,275.76c.17,2,.34,3.92.55,5.87L7.13,299.13a7.35,7.35,0,0,0,2.44,12.25l24,9c.55,1.89,1.08,3.78,1.68,5.65l-15,20.83a7.35,7.35,0,0,0,4.79,11.54l25.42,4.15c.9,1.72,1.79,3.45,2.73,5.14L42.56,391.12a7.35,7.35,0,0,0,.57,7.13,7.13,7.13,0,0,0,6.37,3.26l25.83-.91q1.77,2.22,3.6,4.4L73,430.16A7.36,7.36,0,0,0,81.84,439L107,433.07q2.18,1.83,4.41,3.61l-.92,25.82a7.35,7.35,0,0,0,10.39,6.95l23.43-10.68c1.69.94,3.42,1.83,5.14,2.73l4.15,25.42a7.34,7.34,0,0,0,11.54,4.78l20.83-15c1.86.6,3.76,1.13,5.65,1.68l9,24a7.36,7.36,0,0,0,12.25,2.44l17.5-18.72c1.95.21,3.92.38,5.88.55l13.51,21.82a7.35,7.35,0,0,0,12.5,0l13.51-21.82c2-.17,3.93-.34,5.88-.56l17.5,18.73a7.36,7.36,0,0,0,12.25-2.44l9-24c1.89-.55,3.78-1.08,5.65-1.68l20.82,15a7.34,7.34,0,0,0,11.54-4.78l4.15-25.42c1.72-.9,3.45-1.79,5.15-2.73l23.42,10.68a7.35,7.35,0,0,0,10.39-6.95l-.91-25.82q2.22-1.79,4.4-3.61L430.16,439a7.36,7.36,0,0,0,8.84-8.84L433.07,405q1.83-2.17,3.61-4.4l25.82.91a7.23,7.23,0,0,0,6.37-3.26,7.35,7.35,0,0,0,.58-7.13L458.77,367.7c.94-1.7,1.83-3.43,2.73-5.15l25.42-4.15a7.35,7.35,0,0,0,4.79-11.54l-15-20.83c.59-1.87,1.13-3.76,1.67-5.65l24-9a7.35,7.35,0,0,0,2.44-12.25l-18.72-17.5c.21-1.95.38-3.91.55-5.87l21.82-13.51a7.35,7.35,0,0,0,0-12.5Zm-151,129.08A13.91,13.91,0,0,0,341,389.51l-7.64,35.67A187.51,187.51,0,0,1,177,424.44l-7.64-35.66a13.87,13.87,0,0,0-16.46-10.68l-31.51,6.76a187.38,187.38,0,0,1-16.26-19.21H258.3c1.72,0,2.89-.29,2.89-1.91V309.55c0-1.57-1.17-1.91-2.89-1.91H213.47l.05-34.35H262c4.41,0,23.66,1.28,29.79,25.87,1.91,7.55,6.17,32.14,9.06,40,2.89,8.82,14.6,26.46,27.1,26.46H407a187.3,187.3,0,0,1-17.34,20.09Zm25.77,34.49A15.24,15.24,0,1,1,368,398.08h.44A15.23,15.23,0,0,1,383.24,413.32Zm-225.62-.68a15.24,15.24,0,1,1-15.25-15.25h.45A15.25,15.25,0,0,1,157.62,412.64ZM69.57,234.15l32.83-14.6a13.88,13.88,0,0,0,7.06-18.33L102.69,186h26.56V305.73H75.65A187.65,187.65,0,0,1,69.57,234.15ZM58.31,198.09a15.24,15.24,0,0,1,15.23-15.25H74a15.24,15.24,0,1,1-15.67,15.24Zm155.16,24.49.05-35.32h63.26c3.28,0,23.07,3.77,23.07,18.62,0,12.29-15.19,16.7-27.68,16.7ZM399,306.71c-9.8,1.13-20.63-4.12-22-10.09-5.78-32.49-15.39-39.4-30.57-51.4,18.86-11.95,38.46-29.64,38.46-53.26,0-25.52-17.49-41.59-29.4-49.48-16.76-11-35.28-13.23-40.27-13.23H116.32A187.49,187.49,0,0,1,221.21,70.06l23.47,24.6a13.82,13.82,0,0,0,19.6.44l26.26-25a187.51,187.51,0,0,1,128.37,91.43l-18,40.57A14,14,0,0,0,408,220.43l34.59,15.33a187.12,187.12,0,0,1,.4,32.54H423.71c-1.91,0-2.69,1.27-2.69,3.13v8.82C421,301,409.31,305.58,399,306.71ZM240,60.21A15.24,15.24,0,0,1,255.21,45h.45A15.24,15.24,0,1,1,240,60.21ZM436.84,214a15.24,15.24,0,1,1,0-30.48h.44a15.24,15.24,0,0,1-.44,30.48Z\"]\n};\nconst faWix = {\n  prefix: 'fab',\n  iconName: 'wix',\n  icon: [640, 512, [], \"f5cf\", \"M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z\"]\n};\nconst faSquareBehance = {\n  prefix: 'fab',\n  iconName: 'square-behance',\n  icon: [448, 512, [\"behance-square\"], \"f1b5\", \"M155.3 318.4c17.2 0 31.2-6.1 31.2-25.4c0-19.7-11.7-27.4-30.3-27.5h-46v52.9h45.1zm-5.4-129.6H110.3v44.8H153c15.1 0 25.8-6.6 25.8-22.9c0-17.7-13.7-21.9-28.9-21.9zm129.5 74.8h62.2c-1.7-18.5-11.3-29.7-30.5-29.7c-18.3 0-30.5 11.4-31.7 29.7zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM349.5 185H271.7V166.1h77.8V185zM193.7 243.7c23.6 6.7 35 27.5 35 51.6c0 39-32.7 55.7-67.6 55.9H68v-192h90.5c32.9 0 61.4 9.3 61.4 47.5c0 19.3-9 28.8-26.2 37zm118.7-38.6c43.5 0 67.6 34.3 67.6 75.4c0 1.6-.1 3.3-.2 5c0 .8-.1 1.5-.1 2.2H279.5c0 22.2 11.7 35.3 34.1 35.3c11.6 0 26.5-6.2 30.2-18.1h33.7c-10.4 31.9-31.9 46.8-65.1 46.8c-43.8 0-71.1-29.7-71.1-73c0-41.8 28.7-73.6 71.1-73.6z\"]\n};\nconst faBehanceSquare = faSquareBehance;\nconst faSupple = {\n  prefix: 'fab',\n  iconName: 'supple',\n  icon: [640, 512, [], \"f3f9\", \"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z\"]\n};\nconst faWebflow = {\n  prefix: 'fab',\n  iconName: 'webflow',\n  icon: [640, 512, [], \"e65c\", \"M640 64L435.8 463.2H244l85.5-165.5h-3.8C255.1 389.3 149.9 449.5 0 463.2V300.1s95.9-5.7 152.3-64.9H0V64H171.1V204.8l3.8 0L244.9 64H374.3V203.9l3.8 0L450.7 64H640z\"]\n};\nconst faRebel = {\n  prefix: 'fab',\n  iconName: 'rebel',\n  icon: [512, 512, [], \"f1d0\", \"M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z\"]\n};\nconst faCss3 = {\n  prefix: 'fab',\n  iconName: 'css3',\n  icon: [512, 512, [], \"f13c\", \"M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z\"]\n};\nconst faStaylinked = {\n  prefix: 'fab',\n  iconName: 'staylinked',\n  icon: [440, 512, [], \"f3f5\", \"M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7.7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2z\"]\n};\nconst faKaggle = {\n  prefix: 'fab',\n  iconName: 'kaggle',\n  icon: [320, 512, [], \"f5fa\", \"M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z\"]\n};\nconst faSpaceAwesome = {\n  prefix: 'fab',\n  iconName: 'space-awesome',\n  icon: [512, 512, [], \"e5ac\", \"M96 256H128V512H0V352H32V320H64V288H96V256zM512 352V512H384V256H416V288H448V320H480V352H512zM320 64H352V448H320V416H192V448H160V64H192V32H224V0H288V32H320V64zM288 128H224V192H288V128z\"]\n};\nconst faDeviantart = {\n  prefix: 'fab',\n  iconName: 'deviantart',\n  icon: [320, 512, [], \"f1bd\", \"M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z\"]\n};\nconst faCpanel = {\n  prefix: 'fab',\n  iconName: 'cpanel',\n  icon: [640, 512, [], \"f388\", \"M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5.2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z\"]\n};\nconst faGoodreadsG = {\n  prefix: 'fab',\n  iconName: 'goodreads-g',\n  icon: [384, 512, [], \"f3a9\", \"M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\"]\n};\nconst faSquareGit = {\n  prefix: 'fab',\n  iconName: 'square-git',\n  icon: [448, 512, [\"git-square\"], \"f1d2\", \"M120.8 335.5c-5.9-.4-12.6-.8-20.2-1.3c-3.3 4.1-6.6 8.4-6.6 13.5c0 18.5 65.5 18.5 65.5-1.5c0-8.3-7.4-8.7-38.8-10.7zm7.8-117.9c-32.3 0-33.7 44.5-.7 44.5c32.5 0 31.7-44.5 .7-44.5zM384 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zM243.9 172.2c-14.5 0-22.9-8.4-22.9-22.9c0-14.5 8.4-22.3 22.9-22.3c14.7 0 23.1 7.8 23.1 22.3s-8.4 22.9-23.1 22.9zM149.6 195h49.5l0 21.6-23.4 1.8c4.6 5.8 9.4 14 9.4 25.7c0 48.7-57.2 47.2-74.2 42.4l-8.4 13.4c5 .3 9.8 .6 14.3 .8c56.3 3.2 80.5 4.6 80.5 38.5c0 29.2-25.7 45.7-69.9 45.7c-46 0-63.5-11.6-63.5-31.7c0-11.4 5.1-17.5 14-25.9c-8.4-3.5-11.2-9.9-11.2-16.8c0-9.6 7.4-16.3 23-30.6l.2-.2c-12.4-6.1-21.8-19.3-21.8-38.1c0-51.6 56.6-53.3 81.6-46.8zM270.5 303.1l13 1.8 0 20.1H211.1V304.9c2.7-.4 5-.7 6.9-.9c9.9-1.2 10.1-1.3 10.1-6V223.3c0-4.4-.9-4.7-10.1-7.8c-1.9-.7-4.2-1.4-6.9-2.4l2.8-20.6h52.6V298c0 4.1 .2 4.6 4.1 5.1zm106.6-10.4L384 315c-10.9 5.4-26.9 10.2-41.4 10.2c-30.2 0-41.7-12.2-41.7-40.9V217.7c0-.8 0-1.4-.2-1.8c-.8-1.2-4.2-.7-19.6-.7V192.6c22.3-2.5 31.2-13.7 34-41.4h24.2c0 33.3-.6 38 .7 38.6c.3 .1 .7 0 1.3 0h35.8v25.4H339.3v60.7c0 .2 0 .5 0 .9c-.2 6.3-.9 30.4 37.9 15.9z\"]\n};\nconst faGitSquare = faSquareGit;\nconst faSquareTumblr = {\n  prefix: 'fab',\n  iconName: 'square-tumblr',\n  icon: [448, 512, [\"tumblr-square\"], \"f174\", \"M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM256.8 416c-75.5 0-91.9-55.5-91.9-87.9v-90H135.2c-3.4 0-6.2-2.8-6.2-6.2V189.4c0-4.5 2.8-8.5 7.1-10c38.8-13.7 50.9-47.5 52.7-73.2c.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2H249.1V321c0 21.4 14.8 33.5 42.5 22.4c3-1.2 5.6-2 8-1.4c2.2 .5 3.6 2.1 4.6 4.9L318 387.1c1 3.2 2 6.7-.3 9.1c-8.5 9.1-31.2 19.8-60.9 19.8z\"]\n};\nconst faTumblrSquare = faSquareTumblr;\nconst faTrello = {\n  prefix: 'fab',\n  iconName: 'trello',\n  icon: [448, 512, [], \"f181\", \"M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8.1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z\"]\n};\nconst faCreativeCommonsNcJp = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc-jp',\n  icon: [496, 512, [], \"f4ea\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z\"]\n};\nconst faGetPocket = {\n  prefix: 'fab',\n  iconName: 'get-pocket',\n  icon: [448, 512, [], \"f265\", \"M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z\"]\n};\nconst faPerbyte = {\n  prefix: 'fab',\n  iconName: 'perbyte',\n  icon: [448, 512, [], \"e083\", \"M305.314,284.578H246.6V383.3h58.711q24.423,0,38.193-13.77t13.77-36.11q0-21.826-14.032-35.335T305.314,284.578ZM149.435,128.7H90.724v98.723h58.711q24.42,0,38.19-13.773t13.77-36.107q0-21.826-14.029-35.338T149.435,128.7ZM366.647,32H81.353A81.445,81.445,0,0,0,0,113.352V398.647A81.445,81.445,0,0,0,81.353,480H366.647A81.445,81.445,0,0,0,448,398.647V113.352A81.445,81.445,0,0,0,366.647,32Zm63.635,366.647a63.706,63.706,0,0,1-63.635,63.635H81.353a63.706,63.706,0,0,1-63.635-63.635V113.352A63.706,63.706,0,0,1,81.353,49.718H366.647a63.706,63.706,0,0,1,63.635,63.634ZM305.314,128.7H246.6v98.723h58.711q24.423,0,38.193-13.773t13.77-36.107q0-21.826-14.032-35.338T305.314,128.7Z\"]\n};\nconst faGrunt = {\n  prefix: 'fab',\n  iconName: 'grunt',\n  icon: [384, 512, [], \"f3ad\", \"M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8.6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2.9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z\"]\n};\nconst faWeebly = {\n  prefix: 'fab',\n  iconName: 'weebly',\n  icon: [512, 512, [], \"f5cc\", \"M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z\"]\n};\nconst faConnectdevelop = {\n  prefix: 'fab',\n  iconName: 'connectdevelop',\n  icon: [576, 512, [], \"f20e\", \"M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z\"]\n};\nconst faLeanpub = {\n  prefix: 'fab',\n  iconName: 'leanpub',\n  icon: [576, 512, [], \"f212\", \"M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z\"]\n};\nconst faBlackTie = {\n  prefix: 'fab',\n  iconName: 'black-tie',\n  icon: [448, 512, [], \"f27e\", \"M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z\"]\n};\nconst faThemeco = {\n  prefix: 'fab',\n  iconName: 'themeco',\n  icon: [448, 512, [], \"f5c6\", \"M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.85c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.81 503.74c-9.93 5.66-26 5.57-35.85-.21L17.86 395.12C8 389.34 0 375.38 0 364V146.71c0-11.44 8-25.36 17.91-31.08zm-77.4 199.83c-15.94 0-31.89.14-47.83.14v101.45H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.14 100.29l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.59h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.65-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z\"]\n};\nconst faPython = {\n  prefix: 'fab',\n  iconName: 'python',\n  icon: [448, 512, [], \"f3e2\", \"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z\"]\n};\nconst faAndroid = {\n  prefix: 'fab',\n  iconName: 'android',\n  icon: [576, 512, [], \"f17b\", \"M420.55,301.93a24,24,0,1,1,24-24,24,24,0,0,1-24,24m-265.1,0a24,24,0,1,1,24-24,24,24,0,0,1-24,24m273.7-144.48,47.94-83a10,10,0,1,0-17.27-10h0l-48.54,84.07a301.25,301.25,0,0,0-246.56,0L116.18,64.45a10,10,0,1,0-17.27,10h0l47.94,83C64.53,202.22,8.24,285.55,0,384H576c-8.24-98.45-64.54-181.78-146.85-226.55\"]\n};\nconst faBots = {\n  prefix: 'fab',\n  iconName: 'bots',\n  icon: [640, 512, [], \"e340\", \"M86.344,197.834a51.767,51.767,0,0,0-41.57,20.058V156.018a8.19,8.19,0,0,0-8.19-8.19H8.19A8.19,8.19,0,0,0,0,156.018V333.551a8.189,8.189,0,0,0,8.19,8.189H36.584a8.189,8.189,0,0,0,8.19-8.189v-8.088c11.628,13.373,25.874,19.769,41.573,19.769,34.6,0,61.922-26.164,61.922-73.843C148.266,225.452,121.229,197.834,86.344,197.834ZM71.516,305.691c-9.593,0-21.221-4.942-26.745-12.5V250.164c5.528-7.558,17.152-12.791,26.745-12.791,17.734,0,31.107,13.082,31.107,34.013C102.623,292.609,89.25,305.691,71.516,305.691Zm156.372-59.032a17.4,17.4,0,1,0,17.4,17.4A17.4,17.4,0,0,0,227.888,246.659ZM273.956,156.7V112.039a13.308,13.308,0,1,0-10.237,0V156.7a107.49,107.49,0,1,0,10.237,0Zm85.993,107.367c0,30.531-40.792,55.281-91.112,55.281s-91.111-24.75-91.111-55.281,40.792-55.281,91.111-55.281S359.949,233.532,359.949,264.062Zm-50.163,17.4a17.4,17.4,0,1,0-17.4-17.4h0A17.4,17.4,0,0,0,309.786,281.466ZM580.7,250.455c-14.828-2.617-22.387-3.78-22.387-9.885,0-5.523,7.268-9.884,17.735-9.884a65.56,65.56,0,0,1,34.484,10.1,8.171,8.171,0,0,0,11.288-2.468c.07-.11.138-.221.2-.333l8.611-14.886a8.2,8.2,0,0,0-2.867-11.123,99.863,99.863,0,0,0-52.014-14.138c-38.956,0-60.179,21.514-60.179,46.225,0,36.342,33.725,41.864,57.563,45.642,13.373,2.326,24.13,4.361,24.13,11.048,0,6.4-5.523,10.757-18.9,10.757-13.552,0-30.994-6.222-42.623-13.579a8.206,8.206,0,0,0-11.335,2.491c-.035.054-.069.108-.1.164l-10.2,16.891a8.222,8.222,0,0,0,2.491,11.066c15.224,10.3,37.663,16.692,59.441,16.692,40.409,0,63.957-19.769,63.957-46.515C640,260.63,604.537,254.816,580.7,250.455Zm-95.928,60.787a8.211,8.211,0,0,0-9.521-5.938,23.168,23.168,0,0,1-4.155.387c-7.849,0-12.5-6.106-12.5-14.245V240.28h20.349a8.143,8.143,0,0,0,8.141-8.143V209.466a8.143,8.143,0,0,0-8.141-8.143H458.594V171.091a8.143,8.143,0,0,0-8.143-8.143H422.257a8.143,8.143,0,0,0-8.143,8.143h0v30.232H399a8.143,8.143,0,0,0-8.143,8.143h0v22.671A8.143,8.143,0,0,0,399,240.28h15.115v63.667c0,27.037,15.408,41.282,43.9,41.282,12.183,0,21.383-2.2,27.6-5.446a8.161,8.161,0,0,0,4.145-9.278Z\"]\n};\nconst faFreeCodeCamp = {\n  prefix: 'fab',\n  iconName: 'free-code-camp',\n  icon: [576, 512, [], \"f2c5\", \"M97.22,96.21c10.36-10.65,16-17.12,16-21.9,0-2.76-1.92-5.51-3.83-7.42A14.81,14.81,0,0,0,101,64.05c-8.48,0-20.92,8.79-35.84,25.69C23.68,137,2.51,182.81,3.37,250.34s17.47,117,54.06,161.87C76.22,435.86,90.62,448,100.9,448a13.55,13.55,0,0,0,8.37-3.84c1.91-2.76,3.81-5.63,3.81-8.38,0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25,188.8,54,137.83,97.22,96.21ZM239.47,420.07c.58.37.91.55.91.55Zm93.79.55.17-.13C333.24,420.62,333.17,420.67,333.26,420.62Zm3.13-158.18c-16.24-4.15,50.41-82.89-68.05-177.17,0,0,15.54,49.38-62.83,159.57-74.27,104.35,23.46,168.73,34,175.23-6.73-4.35-47.4-35.7,9.55-128.64,11-18.3,25.53-34.87,43.5-72.16,0,0,15.91,22.45,7.6,71.13C287.7,364,354,342.91,355,343.94c22.75,26.78-17.72,73.51-21.58,76.55,5.49-3.65,117.71-78,33-188.1C360.43,238.4,352.62,266.59,336.39,262.44ZM510.88,89.69C496,72.79,483.52,64,475,64a14.81,14.81,0,0,0-8.39,2.84c-1.91,1.91-3.83,4.66-3.83,7.42,0,4.78,5.6,11.26,16,21.9,43.23,41.61,65,92.59,64.82,154.06-.16,68-23,122.63-67.48,165-9.34,8.35-13.18,14.92-13.2,20.55,0,2.75,1.9,5.62,3.81,8.38A13.61,13.61,0,0,0,475.1,448c10.28,0,24.68-12.13,43.47-35.79,36.59-44.85,53.14-94.38,54.06-161.87S552.32,137,510.88,89.69Z\"]\n};\nconst faHornbill = {\n  prefix: 'fab',\n  iconName: 'hornbill',\n  icon: [512, 512, [], \"f592\", \"M76.38 370.3a37.8 37.8 0 1 1-32.07-32.42c-78.28-111.35 52-190.53 52-190.53-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49.93 64.06 39.81 72.87a140.38 140.38 0 0 0 131.66 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0-31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.42 140.42 0 0 1 207 132.71c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.59-54.06zm304.19 134.17a37.94 37.94 0 1 0-53.84-28.7C403 126.13 344.89 99 251.28 100.33l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.37 140.37 0 0 1 130.49 88.76c39.1 9 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 49-194.61a37.45 37.45 0 0 0 19.31-3.5zM374.06 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15a140.34 140.34 0 0 1-91.39 131.45c-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z\"]\n};\nconst faJs = {\n  prefix: 'fab',\n  iconName: 'js',\n  icon: [448, 512, [], \"f3b8\", \"M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"]\n};\nconst faIdeal = {\n  prefix: 'fab',\n  iconName: 'ideal',\n  icon: [576, 512, [], \"e013\", \"M125.61,165.48a49.07,49.07,0,1,0,49.06,49.06A49.08,49.08,0,0,0,125.61,165.48ZM86.15,425.84h78.94V285.32H86.15Zm151.46-211.6c0-20-10-22.53-18.74-22.53H204.82V237.5h14.05C228.62,237.5,237.61,234.69,237.61,214.24Zm201.69,46V168.93h22.75V237.5h33.69C486.5,113.08,388.61,86.19,299.67,86.19H204.84V169h14c25.6,0,41.5,17.35,41.5,45.26,0,28.81-15.52,46-41.5,46h-14V425.88h94.83c144.61,0,194.94-67.16,196.72-165.64Zm-109.75,0H273.3V169h54.43v22.73H296v10.58h30V225H296V237.5h33.51Zm74.66,0-5.16-17.67H369.31l-5.18,17.67H340.47L368,168.92h32.35l27.53,91.34ZM299.65,32H32V480H299.65c161.85,0,251-79.73,251-224.52C550.62,172,518,32,299.65,32Zm0,426.92H53.07V53.07H299.65c142.1,0,229.9,64.61,229.9,202.41C529.55,389.57,448.55,458.92,299.65,458.92Zm83.86-264.85L376,219.88H392.4l-7.52-25.81Z\"]\n};\nconst faGit = {\n  prefix: 'fab',\n  iconName: 'git',\n  icon: [512, 512, [], \"f1d3\", \"M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z\"]\n};\nconst faDev = {\n  prefix: 'fab',\n  iconName: 'dev',\n  icon: [448, 512, [], \"f6cc\", \"M120.12 208.29c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.47h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.41 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.19c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.98h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.68-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16.29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.64 115.29c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.72 29.57-113.72h32.58l-38.46 144.8z\"]\n};\nconst faSketch = {\n  prefix: 'fab',\n  iconName: 'sketch',\n  icon: [512, 512, [], \"f7c6\", \"M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z\"]\n};\nconst faYandexInternational = {\n  prefix: 'fab',\n  iconName: 'yandex-international',\n  icon: [320, 512, [], \"f414\", \"M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z\"]\n};\nconst faCcAmex = {\n  prefix: 'fab',\n  iconName: 'cc-amex',\n  icon: [576, 512, [], \"f1f3\", \"M0 432c0 26.5 21.5 48 48 48H528c26.5 0 48-21.5 48-48v-1.1H514.3l-31.9-35.1-31.9 35.1H246.8V267.1H181L262.7 82.4h78.6l28.1 63.2V82.4h97.2L483.5 130l17-47.6H576V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80V432zm440.4-21.7L482.6 364l42 46.3H576l-68-72.1 68-72.1H525.4l-42 46.7-41.5-46.7H390.5L458 338.6l-67.4 71.6V377.1h-83V354.9h80.9V322.6H307.6V300.2h83V267.1h-122V410.3H440.4zm96.3-72L576 380.2V296.9l-39.3 41.4zm-36.3-92l36.9-100.6V246.3H576V103H515.8l-32.2 89.3L451.7 103H390.5V246.1L327.3 103H276.1L213.7 246.3h43l11.9-28.7h65.9l12 28.7h82.7V146L466 246.3h34.4zM282 185.4l19.5-46.9 19.4 46.9H282z\"]\n};\nconst faUber = {\n  prefix: 'fab',\n  iconName: 'uber',\n  icon: [448, 512, [], \"f402\", \"M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z\"]\n};\nconst faGithub = {\n  prefix: 'fab',\n  iconName: 'github',\n  icon: [496, 512, [], \"f09b\", \"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"]\n};\nconst faPhp = {\n  prefix: 'fab',\n  iconName: 'php',\n  icon: [640, 512, [], \"f457\", \"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z\"]\n};\nconst faAlipay = {\n  prefix: 'fab',\n  iconName: 'alipay',\n  icon: [448, 512, [], \"f642\", \"M377.74 32H70.26C31.41 32 0 63.41 0 102.26v307.48C0 448.59 31.41 480 70.26 480h307.48c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.59-60.34-171.6-88.44-32.07 43.97-84.14 81-148.62 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.13 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.44V92.34h50.92v50.42h109.44v19.01H248.63v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100.01 36.04 148.62 52.74V102.26C447.83 63.57 416.43 32 377.74 32zM47.28 322.95c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.87-72.9-44.63-18.68-84.48-31.41-109.44-31.41-67.45 0-79.35 33.06-78.36 50.58z\"]\n};\nconst faYoutube = {\n  prefix: 'fab',\n  iconName: 'youtube',\n  icon: [576, 512, [61802], \"f167\", \"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z\"]\n};\nconst faSkyatlas = {\n  prefix: 'fab',\n  iconName: 'skyatlas',\n  icon: [640, 512, [], \"f216\", \"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\"]\n};\nconst faFirefoxBrowser = {\n  prefix: 'fab',\n  iconName: 'firefox-browser',\n  icon: [512, 512, [], \"e007\", \"M130.22 127.548C130.38 127.558 130.3 127.558 130.22 127.548V127.548ZM481.64 172.898C471.03 147.398 449.56 119.898 432.7 111.168C446.42 138.058 454.37 165.048 457.4 185.168C457.405 185.306 457.422 185.443 457.45 185.578C429.87 116.828 383.098 89.1089 344.9 28.7479C329.908 5.05792 333.976 3.51792 331.82 4.08792L331.7 4.15792C284.99 30.1109 256.365 82.5289 249.12 126.898C232.503 127.771 216.219 131.895 201.19 139.035C199.838 139.649 198.736 140.706 198.066 142.031C197.396 143.356 197.199 144.87 197.506 146.323C197.7 147.162 198.068 147.951 198.586 148.639C199.103 149.327 199.76 149.899 200.512 150.318C201.264 150.737 202.096 150.993 202.954 151.071C203.811 151.148 204.676 151.045 205.491 150.768L206.011 150.558C221.511 143.255 238.408 139.393 255.541 139.238C318.369 138.669 352.698 183.262 363.161 201.528C350.161 192.378 326.811 183.338 304.341 187.248C392.081 231.108 368.541 381.784 246.951 376.448C187.487 373.838 149.881 325.467 146.421 285.648C146.421 285.648 157.671 243.698 227.041 243.698C234.541 243.698 255.971 222.778 256.371 216.698C256.281 214.698 213.836 197.822 197.281 181.518C188.434 172.805 184.229 168.611 180.511 165.458C178.499 163.75 176.392 162.158 174.201 160.688C168.638 141.231 168.399 120.638 173.51 101.058C148.45 112.468 128.96 130.508 114.8 146.428H114.68C105.01 134.178 105.68 93.7779 106.25 85.3479C106.13 84.8179 99.022 89.0159 98.1 89.6579C89.5342 95.7103 81.5528 102.55 74.26 110.088C57.969 126.688 30.128 160.242 18.76 211.318C14.224 231.701 12 255.739 12 263.618C12 398.318 121.21 507.508 255.92 507.508C376.56 507.508 478.939 420.281 496.35 304.888C507.922 228.192 481.64 173.82 481.64 172.898Z\"]\n};\nconst faReplyd = {\n  prefix: 'fab',\n  iconName: 'replyd',\n  icon: [448, 512, [], \"f3e6\", \"M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z\"]\n};\nconst faSuse = {\n  prefix: 'fab',\n  iconName: 'suse',\n  icon: [640, 512, [], \"f7d6\", \"M593.1 192.6A10.4 10.4 0 1 1 604.5 210a10.4 10.4 0 1 1 -11.4-17.4zm-47.1 12.2a38.5 38.5 0 1 1 75-17.6 38.5 38.5 0 1 1 -75 17.6zM433.7 336.7c3.2 4.6 5.8 9 7.3 13.4c1 3.1 2.4 7.3 5.5 8.9c.2 .1 .3 .2 .5 .2c5.7 2.1 20.3 1.7 20.3 1.7h26.8c2.3 0 22.4 0 21.9-2.3c-2.4-10.8-14.9-12.7-24.4-18.3c-8.7-5.2-17-11.1-20.8-21.3c-2-5.2-.8-17.4 2.6-21.8c2.5-3.2 6.1-5.3 10-6.2c4.3-.9 8.8-.1 13.1 .3c5.3 .5 10.6 1.5 15.9 2.2c10.3 1.3 20.6 1.9 31 1.6c17.1-.5 34.2-3.2 50.4-8.7c11.3-3.8 22.4-8.9 32-16.1c10.9-8.1 8.1-7.4-3-6.2c-13.3 1.4-26.6 1.6-39.9 .8c-12.4-.7-24.7-2.2-35.9-7.9c-8.8-4.6-16.4-9.1-23.4-16.2c-1-1.1-1.7-4.2 .2-6.2c1.9-1.9 5.8-.8 7 .2c12.2 10.2 30.5 18.6 49.3 19.5c10.2 .5 20.1 .7 30.4 .3c5.1-.2 12.8-.2 17.9-.3c2.6 0 9.8 .7 11.2-2.1c.4-.8 .4-1.8 .3-2.7c-1.5-40.9-4.5-86.9-47.3-106.5c-31.9-14.6-79.7-37.2-99.9-46.6c-4.7-2.2-10.2 1.3-10.2 6.5c0 13.6 .7 33.3 .7 51.1c-9.7-9.9-26-16.1-38.4-21.8c-14.1-6.5-28.7-12-43.5-16.6c-29.8-9.2-60.7-14.9-91.7-18c-35.2-3.5-71-1.8-105.7 5.3C147 115.1 90.8 142.6 48.2 182.7C22.1 207.3 1.6 242.4 .2 277.9c-2 50.3 12.1 77.3 38 105.2c41.3 44.4 130.2 50.6 166.2-2c16.2-23.7 19.7-55.8 8-82c-11.8-26.2-38.8-45.1-67.4-46c-22.2-.7-45.9 10.6-54.5 31.1c-6.5 15.7-2.8 35.1 9 47.3c4.6 4.8 10.9 8.7 17.7 7.1c4-.9 7.4-3.9 8-8c.9-6-4.4-9.9-7.6-14.5c-5.8-8.3-4.7-20.9 2.7-27.9c6.2-6 15.3-7.8 23.9-7.7c8 0 16.2 1.4 23.1 5.5c9.7 5.7 16.2 16.2 18.4 27.2c6.7 33-20.2 59.9-56.6 62c-18.6 1.1-37.6-3.8-52.1-15.5C40.1 329.9 31.1 269.4 73.2 237c40-30.7 90.4-22.8 120.2-6.8c23.8 12.8 41.5 33.6 55 56.7c6.7 11.6 12.5 23.7 17.8 36.1c5.1 11.8 9.9 23.8 20.2 32.5c6.8 5.8 15.2 5.6 24.1 5.6h50.8c6.9 0 5.2-4.6 2.2-7.7c-6.7-6.9-16.4-8.4-25.4-10.9c-20.5-5.6-18.4-32.8-12.7-32.8c18.3 0 18.9 .6 34.9 .3c23.2-.3 30.2-1.7 48.3 5c9.7 3.6 19 13.1 25.1 21.7z\"]\n};\nconst faJenkins = {\n  prefix: 'fab',\n  iconName: 'jenkins',\n  icon: [512, 512, [], \"f3b6\", \"M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\"]\n};\nconst faTwitter = {\n  prefix: 'fab',\n  iconName: 'twitter',\n  icon: [512, 512, [], \"f099\", \"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\"]\n};\nconst faRockrms = {\n  prefix: 'fab',\n  iconName: 'rockrms',\n  icon: [496, 512, [], \"f3e9\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z\"]\n};\nconst faPinterest = {\n  prefix: 'fab',\n  iconName: 'pinterest',\n  icon: [496, 512, [], \"f0d2\", \"M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z\"]\n};\nconst faBuffer = {\n  prefix: 'fab',\n  iconName: 'buffer',\n  icon: [448, 512, [], \"f837\", \"M427.84 380.67l-196.5 97.82a18.6 18.6 0 0 1-14.67 0L20.16 380.67c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.76 67a18.51 18.51 0 0 0 14.67 0l134.76-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.53l-47.06-23.43a18.62 18.62 0 0 0-14.68 0l-134.76 67.08a18.68 18.68 0 0 1-14.67 0L81.91 220.71a18.65 18.65 0 0 0-14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.51 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.42l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.51-90.29c4-1.86 4-4.89 0-6.74L231.33 33.4a19.88 19.88 0 0 0-14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z\"]\n};\nconst faNpm = {\n  prefix: 'fab',\n  iconName: 'npm',\n  icon: [576, 512, [], \"f3d4\", \"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\"]\n};\nconst faYammer = {\n  prefix: 'fab',\n  iconName: 'yammer',\n  icon: [512, 512, [], \"f840\", \"M500.676,159.486a12.779,12.779,0,0,0-6.4-8.282,13.954,13.954,0,0,0-10.078-1.125L457.8,156.7l-.043-.2-22.3,5.785-1.243.333-.608-2.17A369.037,369.037,0,0,0,347.538,4.289a14.1,14.1,0,0,0-19.784-.463l-102.9,102.747H24.947A24.9,24.9,0,0,0,0,131.417V380.38a24.963,24.963,0,0,0,24.918,24.9H224.986L328.072,508a13.667,13.667,0,0,0,19.327,0c.126-.126.249-.255.37-.385a368.025,368.025,0,0,0,69.577-107.374,403.45,403.45,0,0,0,17.3-50.8v-.028l20.406,5.336.029-.073L483.345,362a20.253,20.253,0,0,0,2.619.5,13.359,13.359,0,0,0,4.139-.072,13.5,13.5,0,0,0,10.515-9.924,415.855,415.855,0,0,0,.058-193.013ZM337.125,24.65l.013.014h-.013Zm-110.2,165.161L174.311,281.1a11.338,11.338,0,0,0-1.489,5.655v46.189a22.04,22.04,0,0,1-22.041,22h-3.4A22.068,22.068,0,0,1,125.3,332.962V287.294a11.532,11.532,0,0,0-1.388-5.51l-51.6-92.2a21.988,21.988,0,0,1,19.264-32.726h3.268a22.059,22.059,0,0,1,19.611,11.916l36.357,70.281,37.515-70.512a22.066,22.066,0,0,1,38.556-.695,21.7,21.7,0,0,1,0,21.967ZM337.145,24.673a348.147,348.147,0,0,1,75.8,141.335l.564,1.952-114.134,29.6V131.417a25.006,25.006,0,0,0-24.947-24.9H255.067Zm60.5,367.305v-.043l-.014.014a347.19,347.19,0,0,1-60.177,95.227l-82.2-81.893h19.177a24.978,24.978,0,0,0,24.947-24.9v-66.2l114.6,29.862A385.191,385.191,0,0,1,397.648,391.978Zm84-52.45.015.014-50.618-13.131L299.379,292.1V219.572l119.746-30.99,4.468-1.157,39.54-10.253,18.511-4.816A393,393,0,0,1,481.644,339.528Z\"]\n};\nconst faBtc = {\n  prefix: 'fab',\n  iconName: 'btc',\n  icon: [384, 512, [], \"f15a\", \"M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z\"]\n};\nconst faDribbble = {\n  prefix: 'fab',\n  iconName: 'dribbble',\n  icon: [512, 512, [], \"f17d\", \"M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z\"]\n};\nconst faStumbleuponCircle = {\n  prefix: 'fab',\n  iconName: 'stumbleupon-circle',\n  icon: [496, 512, [], \"f1a3\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z\"]\n};\nconst faInternetExplorer = {\n  prefix: 'fab',\n  iconName: 'internet-explorer',\n  icon: [512, 512, [], \"f26b\", \"M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z\"]\n};\nconst faStubber = {\n  prefix: 'fab',\n  iconName: 'stubber',\n  icon: [448, 512, [], \"e5c7\", \"M136.5 294.2l58.8 22.9c9.1-36.8 25.4-61.1 55-61.1c49.4 0 71.4 63.6 142.4 63.6c15.6 0 35.9-2.8 55.3-13.3V368c0 61.8-50.4 112-112.3 112H0l41.8-56L0 368l41.7-56L0 256.1l41.8-56L0 144.1 41.8 88 0 32H335.7C397.6 32 448 82.3 448 144.1v51.3c-9.2 36.3-25.9 60.6-55 60.6c-49.6 0-71.6-63.5-142.4-63.5c-35.9 0-95.2 14.6-114.1 101.6h0z\"]\n};\nconst faTelegram = {\n  prefix: 'fab',\n  iconName: 'telegram',\n  icon: [496, 512, [62462, \"telegram-plane\"], \"f2c6\", \"M248,8C111.033,8,0,119.033,0,256S111.033,504,248,504,496,392.967,496,256,384.967,8,248,8ZM362.952,176.66c-3.732,39.215-19.881,134.378-28.1,178.3-3.476,18.584-10.322,24.816-16.948,25.425-14.4,1.326-25.338-9.517-39.287-18.661-21.827-14.308-34.158-23.215-55.346-37.177-24.485-16.135-8.612-25,5.342-39.5,3.652-3.793,67.107-61.51,68.335-66.746.153-.655.3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283.746-104.608,69.142-14.845,10.194-26.894,9.934c-8.855-.191-25.888-5.006-38.551-9.123-15.531-5.048-27.875-7.717-26.8-16.291q.84-6.7,18.45-13.7,108.446-47.248,144.628-62.3c68.872-28.647,83.183-33.623,92.511-33.789,2.052-.034,6.639.474,9.61,2.885a10.452,10.452,0,0,1,3.53,6.716A43.765,43.765,0,0,1,362.952,176.66Z\"]\n};\nconst faTelegramPlane = faTelegram;\nconst faOldRepublic = {\n  prefix: 'fab',\n  iconName: 'old-republic',\n  icon: [496, 512, [], \"f510\", \"M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z\"]\n};\nconst faOdysee = {\n  prefix: 'fab',\n  iconName: 'odysee',\n  icon: [512, 512, [], \"e5c6\", \"M406.7 463c-42.3 30.8-94.4 49-150.7 49C144.9 512 50.3 441.2 14.9 342.2c2.4 1.7 5.9 3.6 7.9 4.4c16.3 7.4 40.1-5.4 62.9-28.7c6.9-6.9 14.4-12.4 22.8-17.3c18.3-11.9 37.6-20.8 58.4-27.2c0 0 22.3 34.2 43.1 74.8s-22.3 54-27.2 54c-.3 0-.8 0-1.5-.1c-11-.5-70-3-56 51.1c14.9 57.4 97.5 36.6 139.6 8.9s31.7-118.3 31.7-118.3c41.1-6.4 54 37.1 57.9 59.4c.8 4.6 1.1 9.9 1.4 15.5c1.1 21.2 2.3 45.6 35.3 46.4c5.3 0 10.6-.8 15.5-2zm-95.3-23.7c-2-.5-3.5-2.5-3-5c1-2.5 3-3.5 5-3s3.5 3 3 5s-2.5 3.5-5 3zm-207-95.6c1.5-.5 3.5 1 4 3c0 2-1 4-3 4c-1.5 .5-3.5-1-4-3c-.5-1.5 1-3.5 3-4zM451.8 421C489.3 376.4 512 318.8 512 256c0-67.5-26.1-128.9-68.8-174.7c-.1 23.5-6.1 48.2-16.8 69.2c-11.9 20.3-49 58.9-69.8 78.7c-.7 .3-1.1 .9-1.5 1.4c-.2 .2-.3 .4-.5 .6c-5 6.9-4 16.8 3 21.8c21.3 15.8 56.4 45.6 59.4 72.8c3.5 34.9 27.9 75.6 34.2 86.2l0 0c.8 1.3 1.3 2.1 1.4 2.4c0 2.2-.4 4.3-.8 6.5zM390.7 251c-.5 3 1 5.9 4 6.4s5.9-1 6.4-4s-1-5.9-4-6.4c-3-1-5.9 1-6.4 4zm61.4-60.9l-11.4 5.4-3 12.9-5.4-11.4-12.9-3 11.4-5.4 3-12.9 5.4 11.4 12.9 3zM395.5 41.3c-16.2 8.2-22.1 32.8-29 61.4l0 0c-.3 1.4-.7 2.8-1 4.2c-9.5 38.5-30.6 37.6-41.7 37.2c-1.1 0-2-.1-2.9-.1c-5.1 0-6-4-8.9-17.1c-2.6-12.1-6.9-32-17.9-63.6C271.4-2.5 211.4 13.9 165.9 41.1C110.6 74.2 131.5 143 146.1 190.5c.7 2.2 1.4 4.4 2 6.6c-4 4-13.8 7.5-26 11.9c-12.1 4.3-26.6 9.5-40.3 16.9C47.9 243.9 11.5 274.9 2 288.5C.7 277.8 0 267 0 256C0 114.6 114.6 0 256 0c51.4 0 99.4 15.2 139.5 41.3zM58.9 189.6c-1.5-2-4.5-3-6.4-1.5s-3 4.5-1.5 6.4s4.5 3 6.4 1.5c2.5-1.5 3-4.5 1.5-6.4zM327.3 64.9c2-1.5 5-.5 6.4 1.5c1.5 2.5 1 5.4-1.5 6.4c-2 1.5-5 .5-6.4-1.5s-.5-5 1.5-6.4zM95.1 105c-.5 1.5 .5 3 2 3c1.5 .5 3-.5 3-2c.5-1.5-.5-3-2-3s-3 .5-3 2zm84.7-.5c-3.5-43.1 37.1-54 37.1-54c44.1-15.4 56 5.9 66.4 37.6s3 42.6-38.6 58.9s-61.9-4.5-64.9-42.6zm89.6 14.9h1c2.5 0 5-2 5-5c2-6.9 1-14.4-2-20.8c-1.5-2-4-3.5-6.4-2.5c-3 1-4.5 4-3.5 6.9c2 4.5 3 9.9 1.5 14.9c-.5 3 1.5 5.9 4.5 6.4zm-9.9-41.6c-2 0-4-1-5-3s-2-3.5-3-5c-2-2-2-5.4 0-7.4s5.4-2 7.4 0c2 2.5 3.5 5 5 7.4s.5 5.9-2.5 7.4c-.6 0-1 .2-1.3 .3c-.2 .1-.4 .2-.6 .2z\"]\n};\nconst faSquareWhatsapp = {\n  prefix: 'fab',\n  iconName: 'square-whatsapp',\n  icon: [448, 512, [\"whatsapp-square\"], \"f40c\", \"M92.1 254.6c0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6L152 365.2l4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8c0-35.2-15.2-68.3-40.1-93.2c-25-25-58-38.7-93.2-38.7c-72.7 0-131.8 59.1-131.9 131.8zM274.8 330c-12.6 1.9-22.4 .9-47.5-9.9c-36.8-15.9-61.8-51.5-66.9-58.7c-.4-.6-.7-.9-.8-1.1c-2-2.6-16.2-21.5-16.2-41c0-18.4 9-27.9 13.2-32.3c.3-.3 .5-.5 .7-.8c3.6-4 7.9-5 10.6-5c2.6 0 5.3 0 7.6 .1c.3 0 .5 0 .8 0c2.3 0 5.2 0 8.1 6.8c1.2 2.9 3 7.3 4.9 11.8c3.3 8 6.7 16.3 7.3 17.6c1 2 1.7 4.3 .3 6.9c-3.4 6.8-6.9 10.4-9.3 13c-3.1 3.2-4.5 4.7-2.3 8.6c15.3 26.3 30.6 35.4 53.9 47.1c4 2 6.3 1.7 8.6-1c2.3-2.6 9.9-11.6 12.5-15.5c2.6-4 5.3-3.3 8.9-2s23.1 10.9 27.1 12.9c.8 .4 1.5 .7 2.1 1c2.8 1.4 4.7 2.3 5.5 3.6c.9 1.9 .9 9.9-2.4 19.1c-3.3 9.3-19.1 17.7-26.7 18.8zM448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM148.1 393.9L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5c29.9 30 47.9 69.8 47.9 112.2c0 87.4-72.7 158.5-160.1 158.5c-26.6 0-52.7-6.7-75.8-19.3z\"]\n};\nconst faWhatsappSquare = faSquareWhatsapp;\nconst faNodeJs = {\n  prefix: 'fab',\n  iconName: 'node-js',\n  icon: [448, 512, [], \"f3d3\", \"M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\"]\n};\nconst faEdgeLegacy = {\n  prefix: 'fab',\n  iconName: 'edge-legacy',\n  icon: [512, 512, [], \"e078\", \"M25.71,228.16l.35-.48c0,.16,0,.32-.07.48Zm460.58,15.51c0-44-7.76-84.46-28.81-122.4C416.5,47.88,343.91,8,258.89,8,119,7.72,40.62,113.21,26.06,227.68c42.42-61.31,117.07-121.38,220.37-125,0,0,109.67,0,99.42,105H170c6.37-37.39,18.55-59,34.34-78.93-75.05,34.9-121.85,96.1-120.75,188.32.83,71.45,50.13,144.84,120.75,172,83.35,31.84,192.77,7.2,240.13-21.33V363.31C363.6,419.8,173.6,424.23,172.21,295.74H486.29V243.67Z\"]\n};\nconst faSlack = {\n  prefix: 'fab',\n  iconName: 'slack',\n  icon: [448, 512, [62447, \"slack-hash\"], \"f198\", \"M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z\"]\n};\nconst faSlackHash = faSlack;\nconst faMedrt = {\n  prefix: 'fab',\n  iconName: 'medrt',\n  icon: [544, 512, [], \"f3c8\", \"M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z\"]\n};\nconst faUsb = {\n  prefix: 'fab',\n  iconName: 'usb',\n  icon: [640, 512, [], \"f287\", \"M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z\"]\n};\nconst faTumblr = {\n  prefix: 'fab',\n  iconName: 'tumblr',\n  icon: [320, 512, [], \"f173\", \"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\"]\n};\nconst faVaadin = {\n  prefix: 'fab',\n  iconName: 'vaadin',\n  icon: [448, 512, [], \"f408\", \"M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\"]\n};\nconst faQuora = {\n  prefix: 'fab',\n  iconName: 'quora',\n  icon: [448, 512, [], \"f2c4\", \"M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z\"]\n};\nconst faSquareXTwitter = {\n  prefix: 'fab',\n  iconName: 'square-x-twitter',\n  icon: [448, 512, [], \"e61a\", \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm297.1 84L257.3 234.6 379.4 396H283.8L209 298.1 123.3 396H75.8l111-126.9L69.7 116h98l67.7 89.5L313.6 116h47.5zM323.3 367.6L153.4 142.9H125.1L296.9 367.6h26.3z\"]\n};\nconst faReacteurope = {\n  prefix: 'fab',\n  iconName: 'reacteurope',\n  icon: [576, 512, [], \"f75d\", \"M250.6 211.74l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0-4.2-3.4h-6.9a3.68 3.68 0 0 0-4 3.4l-11 59.2c-.5 2.7.9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5.04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0-2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.42 364.42 0 0 0-35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.83 587.83 0 0 0-84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2.1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0-93.9.9 547.76 547.76 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.25 598.25 0 0 0-50.7 64.2 569.69 569.69 0 0 0-84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.38 695.38 0 0 0 93.9-.9 547.76 547.76 0 0 1-42.2 52.4q5.1 5.25 10.2 10.2a588.47 588.47 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1-10.7-5.7l-.1.1a19.61 19.61 0 0 1-5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1-72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1-6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.91 711.91 0 0 1-112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1-3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.81 548.81 0 0 1-72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4.2-8.4-1a17.58 17.58 0 0 1-6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.64c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.72 711.72 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1.1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.71 359.71 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0-1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0-1.9-1.9H309a1.81 1.81 0 0 0-2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0-2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0-2-2.06zm-7.4-99.4L286 192l-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z\"]\n};\nconst faMedium = {\n  prefix: 'fab',\n  iconName: 'medium',\n  icon: [640, 512, [62407, \"medium-m\"], \"f23a\", \"M180.5,74.262C80.813,74.262,0,155.633,0,256S80.819,437.738,180.5,437.738,361,356.373,361,256,280.191,74.262,180.5,74.262Zm288.25,10.646c-49.845,0-90.245,76.619-90.245,171.095s40.406,171.1,90.251,171.1,90.251-76.619,90.251-171.1H559C559,161.5,518.6,84.908,468.752,84.908Zm139.506,17.821c-17.526,0-31.735,68.628-31.735,153.274s14.2,153.274,31.735,153.274S640,340.631,640,256C640,171.351,625.785,102.729,608.258,102.729Z\"]\n};\nconst faMediumM = faMedium;\nconst faAmilia = {\n  prefix: 'fab',\n  iconName: 'amilia',\n  icon: [448, 512, [], \"f36d\", \"M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z\"]\n};\nconst faMixcloud = {\n  prefix: 'fab',\n  iconName: 'mixcloud',\n  icon: [640, 512, [], \"f289\", \"M212.98 346.566H179.789V195.114L185.973 173.47H175.262L137.127 346.566H76.1069L37.7323 173.47H27.276L33.1913 195.114V346.566H0V165H65.6506L102.248 338.096H110.747L147.329 165H212.98L212.98 346.566ZM544.459 283.589L458.434 345.655V307.534L531.329 255.776L458.434 204.017V165.896L544.459 228.231H553.721L640 165.896V204.017L566.866 255.776L640 307.549V345.655L553.721 283.589H544.459ZM430.157 272.311H248.113V239.255H430.157V272.311Z\"]\n};\nconst faFlipboard = {\n  prefix: 'fab',\n  iconName: 'flipboard',\n  icon: [448, 512, [], \"f44d\", \"M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z\"]\n};\nconst faViacoin = {\n  prefix: 'fab',\n  iconName: 'viacoin',\n  icon: [384, 512, [], \"f237\", \"M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z\"]\n};\nconst faCriticalRole = {\n  prefix: 'fab',\n  iconName: 'critical-role',\n  icon: [448, 512, [], \"f6c9\", \"M225.82 0c.26.15 216.57 124.51 217.12 124.72 3 1.18 3.7 3.46 3.7 6.56q-.11 125.17 0 250.36a5.88 5.88 0 0 1-3.38 5.78c-21.37 12-207.86 118.29-218.93 124.58h-3C142 466.34 3.08 386.56 2.93 386.48a3.29 3.29 0 0 1-1.88-3.24c0-.87 0-225.94-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.11 213.2 6 224.07 0zM215.4 20.42l-.22-.16Q118.06 75.55 21 130.87c0 .12.08.23.13.35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.43c.88-1.41 64.07-110.91 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4.09 1.48.22.78 1.42-41.19 71.33-36.4 63-67.48 116.94-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82.29 26.21.15 25.27 1 32.66.52 4.37 2.16 4.2 9.69 4.81 3.14.26 3.88 4.08.52 4.92-1.57.39-31.6.51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16.81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4.88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06.89.13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5.2 1.48 1.33 0 .11.88 26.69.87 26.8-.05 1.52.67 1.62 1.89 1.62h186.71Q386.51 304.6 346 234.33c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.06V138c-1.72.5-103.3 38.72-105.76 39.68-1.08.42-1.55.2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13.65-1.39.1 0 95.53-35.85 103-38.77-65.42-37.57-130.56-75-196-112.6l86.82 150.39-.28.33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.71-82-142.16-9.1 14.67-83.56 146.21-85.37 146.32-2.93.17-5.88.08-9.25.08q43.25-74.74 86.18-149zm51.93 129.92a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53.2 2.6 1.92 0 .11.07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.11 0 .89.52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75.13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.35.05-1.08-.62-1.16-1.35-1.15-32.35.52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95.23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85.68-27.49.58-22.59 1-29.55a2.69 2.69 0 0 0-1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0-2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9.43 1.12 1.24 1.11.1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76.31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1-1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1-2.66-1.79c2.38-3.75 5.89.92 5.86-6.14-.08-25.75.21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05.72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73.95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42.26 4.73.45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49.53 1 3.38 0 .05-.16 0-.24 0-3.61.26-3.94 1-4 4.62-.27 43.93.07 40.23.41 42.82.11.84.27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37.08-20.74 0-31.11.07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37.88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57.83 3.55zm275-10.15c-1.21 7.13.17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1-3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0-2-1.44 138 138 0 0 0-14.58.07 2.23 2.23 0 0 0-1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72.66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61.13 4-1.11 4.13-4.29.09-1.87.08 1.17.07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06.21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0-2.66 2.83c-.07 1.63-.19 38.89.29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25.43 14.92.44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.72 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11.38 37.19-.65 1.68-.19 2.38.24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31.34 15.69-1.52.47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58.32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64.48 14.4 0 16.43-5.71.84-2.37 3.5-1.77 3.18.58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.52c2.46.61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1.57 11.89-6 12.75-1.6.21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.14c3.28 0 3.66 3 .16 3.43-2.61.32-5-.42-5 5.46 0 2-.19 29.05.4 41.45.11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76.84 2.76 1.08.35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94.4 5.13-2.8 1-15.87.57-44.65.34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22.34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61.1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09.41-3.15 1.29 0 20.19-.41 21.17.21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.27a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.57 197.42-112.51-.14-.43 11.26-.18-181.52-.27-1.22 0-1.57.37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1-1.36 7.71c-.55 1.83.38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1-2-10.79c.16-2.46.8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.32 102.57 196 112.76zm-90.9-188.75c0 2.4.36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51.05 8.04.01 11.61.02 41.65zm105.75-15.05c0 2.13 1.07 38.68 1.09 39.13.34 9.94-25.58 5.77-25.23-2.59.08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1-.36.12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88.07-14.91zm-80.15 103.83c0 1.8.41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81.05 4.5-.03 13.68.02 18.59zm212.32 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z\"]\n};\nconst faSitrox = {\n  prefix: 'fab',\n  iconName: 'sitrox',\n  icon: [448, 512, [], \"e44a\", \"M212.439 0.00846128V0H448V128H64C64 57.6008 141.755 0.475338 212.439 0.00846128ZM237.256 192V192.007C307.135 192.475 384 249.6 384 320H210.809V319.995C140.915 319.563 64 262.424 64 192H237.256ZM235.565 511.993C306.251 511.521 384 454.399 384 384H0V512H235.565V511.993Z\"]\n};\nconst faDiscourse = {\n  prefix: 'fab',\n  iconName: 'discourse',\n  icon: [448, 512, [], \"f393\", \"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\"]\n};\nconst faJoomla = {\n  prefix: 'fab',\n  iconName: 'joomla',\n  icon: [448, 512, [], \"f1aa\", \"M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\"]\n};\nconst faMastodon = {\n  prefix: 'fab',\n  iconName: 'mastodon',\n  icon: [448, 512, [], \"f4f6\", \"M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z\"]\n};\nconst faAirbnb = {\n  prefix: 'fab',\n  iconName: 'airbnb',\n  icon: [448, 512, [], \"f834\", \"M224 373.12c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.61-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.15 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.07 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.72-231.18 115.87-241.56 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.48 114.84 239.09 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.12C280.27 35.93 273.13 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.19 22 349.81-3.22 419.14 48.74 480 111.63 480c21.71 0 60.61-6.06 112.37-62.4 58.68 63.78 101.26 62.4 112.37 62.4 62.89.05 114.85-60.86 89.61-130.19.02-3.89-16.82-38.9-16.82-39.58z\"]\n};\nconst faWolfPackBattalion = {\n  prefix: 'fab',\n  iconName: 'wolf-pack-battalion',\n  icon: [512, 512, [], \"f514\", \"M267.73 471.53l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.21 456.43 239.73l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.18l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.79l-58 38.71-3.52 93.25L369.78 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.33 59.82-3.52-93.25-58.06-38.71C185 65.1 135.77 22.87 95.3 0c-17.54 61.12-4.4 118.76 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.35 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.06 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1-18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.68 376.52L181.52 366c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z\"]\n};\nconst faBuyNLarge = {\n  prefix: 'fab',\n  iconName: 'buy-n-large',\n  icon: [576, 512, [], \"f8a6\", \"M288 32C133.27 32 7.79 132.32 7.79 256S133.27 480 288 480s280.21-100.32 280.21-224S442.73 32 288 32zm-85.39 357.19L64.1 390.55l77.25-290.74h133.44c63.15 0 84.93 28.65 78 72.84a60.24 60.24 0 0 1-1.5 6.85 77.39 77.39 0 0 0-17.21-1.93c-42.35 0-76.69 33.88-76.69 75.65 0 37.14 27.14 68 62.93 74.45-18.24 37.16-56.16 60.92-117.71 61.52zM358 207.11h32l-22.16 90.31h-35.41l-11.19-35.63-7.83 35.63h-37.83l26.63-90.31h31.34l15 36.75zm145.86 182.08H306.79L322.63 328a78.8 78.8 0 0 0 11.47.83c42.34 0 76.69-33.87 76.69-75.65 0-32.65-21-60.46-50.38-71.06l21.33-82.35h92.5l-53.05 205.36h103.87zM211.7 269.39H187l-13.8 56.47h24.7c16.14 0 32.11-3.18 37.94-26.65 5.56-22.31-7.99-29.82-24.14-29.82zM233 170h-21.34L200 217.71h21.37c18 0 35.38-14.64 39.21-30.14C265.23 168.71 251.07 170 233 170z\"]\n};\nconst faGulp = {\n  prefix: 'fab',\n  iconName: 'gulp',\n  icon: [256, 512, [], \"f3ae\", \"M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z\"]\n};\nconst faCreativeCommonsSamplingPlus = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sampling-plus',\n  icon: [496, 512, [], \"f4f1\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\"]\n};\nconst faStrava = {\n  prefix: 'fab',\n  iconName: 'strava',\n  icon: [384, 512, [], \"f428\", \"M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z\"]\n};\nconst faEmber = {\n  prefix: 'fab',\n  iconName: 'ember',\n  icon: [640, 512, [], \"f423\", \"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\"]\n};\nconst faCanadianMapleLeaf = {\n  prefix: 'fab',\n  iconName: 'canadian-maple-leaf',\n  icon: [512, 512, [], \"f785\", \"M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z\"]\n};\nconst faTeamspeak = {\n  prefix: 'fab',\n  iconName: 'teamspeak',\n  icon: [576, 512, [], \"f4f9\", \"M152.8 37.2c-32.2 38.1-56.1 82.6-69.9 130.5c0 .2-.1 .3-.1 .5C43.5 184.4 16 223 16 268c0 59.6 48.4 108 108 108s108-48.4 108-108c0-53.5-38.9-97.9-90-106.5c15.7-41.8 40.4-79.6 72.3-110.7c1.8-1.6 4-2.6 6.3-3.1c37.2-11.5 76.7-13.3 114.8-5.2C454.7 67.6 534 180.7 517.1 301.3c-8.4 62.6-38.6 112.7-87.7 151.4c-50.1 39.7-107.5 54.3-170.2 52.2l-24-1c12.4 2.8 25 4.9 37.6 6.3c40.7 4.2 81.4 2.1 120.1-12.5c94-35.5 149.3-102.3 162.9-202.5c4.8-52.6-5.8-105.4-30.8-152C454.6 11.3 290.8-38.4 159 32c-2.4 1.4-4.5 3.1-6.3 5.2zM309.4 433.9c-2.1 11.5-4.2 21.9-14.6 31.3c53.2-1 123.2-29.2 161.8-97.1c39.7-69.9 37.6-139.9-6.3-207.8C413.8 105 360.5 77.9 293.7 73.7c1.5 2.3 3.2 4.4 5.2 6.3l5.2 6.3c25.1 31.3 37.6 67.9 42.8 107.5c2.1 15.7-1 30.3-13.6 41.8c-4.2 3.1-5.2 6.3-4.2 10.4l7.3 17.7L365.7 318c5.2 11.5 4.2 19.8-6.3 28.2c-3.2 2.5-6.7 4.6-10.4 6.3l-18.8 8.4 3.1 13.6c3.1 6.3 1 12.5-3.1 17.7c-2.5 2.4-3.8 5.9-3.1 9.4c2.1 11.5-2.1 19.8-12.5 25.1c-2.1 1-4.2 5.2-5.2 7.3zm-133.6-3.1c16.7 11.5 34.5 20.9 53.2 26.1c24 5.2 41.8-6.3 44.9-30.3c1-8.4 5.2-14.6 12.5-17.7c7.3-4.2 8.4-7.3 2.1-13.6l-9.4-8.4 13.6-4.2c6.3-2.1 7.3-5.2 5.2-11.5c-1.4-3-2.4-6.2-3.1-9.4c-3.1-14.6-2.1-15.7 11.5-18.8c8.4-3.1 15.7-6.3 21.9-12.5c3.1-2.1 3.1-4.2 1-8.4l-16.7-30.3c-1-1.9-2.1-3.8-3.1-5.7c-6.4-11.7-13-23.6-15.7-37.1c-2.1-9.4-1-17.7 8.4-24c5.2-4.2 8.4-9.4 8.4-16.7c-.4-10.1-1.5-20.3-3.1-30.3c-6.3-37.6-23-68.9-51.2-95c-5.2-4.2-9.4-6.3-16.7-4.2L203.9 91.5c2 1.2 4 2.4 6 3.6l0 0c6.3 3.7 12.2 7.3 17 12.1c30.3 26.1 41.8 61.6 45.9 100.2c1 8.4 0 16.7-7.3 21.9c-8.4 5.2-10.4 12.5-7.3 20.9c4.9 13.2 10.4 26 16.7 38.6L291.6 318c-6.3 8.4-13.6 11.5-21.9 14.6c-12.5 3.1-14.6 7.3-10.4 20.9c.6 1.5 1.4 2.8 2.1 4.2c2.1 5.2 1 8.4-4.2 10.4l-12.5 3.1 5.2 4.2 4.2 4.2c4.2 5.2 4.2 8.4-2.1 10.4c-7.3 4.2-11.5 9.4-11.5 17.7c0 12.5-7.3 19.8-18.8 24c-3.8 1-7.6 1.5-11.5 1l-34.5-2.1z\"]\n};\nconst faPushed = {\n  prefix: 'fab',\n  iconName: 'pushed',\n  icon: [432, 512, [], \"f3e1\", \"M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\"]\n};\nconst faWordpressSimple = {\n  prefix: 'fab',\n  iconName: 'wordpress-simple',\n  icon: [512, 512, [], \"f411\", \"M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\"]\n};\nconst faNutritionix = {\n  prefix: 'fab',\n  iconName: 'nutritionix',\n  icon: [400, 512, [], \"f3d6\", \"M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\"]\n};\nconst faWodu = {\n  prefix: 'fab',\n  iconName: 'wodu',\n  icon: [640, 512, [], \"e088\", \"M178.414 339.706H141.1L112.166 223.475h-.478L83.228 339.706H45.2L0 168.946H37.548L64.574 285.177h.478L94.707 168.946h35.157l29.178 117.667h.479L187.5 168.946h36.831zM271.4 212.713c38.984 0 64.1 25.828 64.1 65.291 0 39.222-25.111 65.05-64.1 65.05-38.743 0-63.855-25.828-63.855-65.05C207.547 238.541 232.659 212.713 271.4 212.713zm0 104.753c23.2 0 30.133-19.852 30.133-39.462 0-19.852-6.934-39.7-30.133-39.7-27.7 0-29.894 19.85-29.894 39.7C241.508 297.614 248.443 317.466 271.4 317.466zM435.084 323.922h-.478c-7.893 13.392-21.765 19.132-37.548 19.132-37.31 0-55.485-32.045-55.485-66.246 0-33.243 18.415-64.095 54.767-64.095 14.589 0 28.938 6.218 36.831 18.416h.24V168.946h33.96v170.76H435.084zM405.428 238.3c-22.24 0-29.894 19.134-29.894 39.463 0 19.371 8.848 39.7 29.894 39.7 22.482 0 29.178-19.613 29.178-39.94C434.606 257.436 427.432 238.3 405.428 238.3zM592.96 339.706H560.673V322.487h-.718c-8.609 13.87-23.436 20.567-37.786 20.567-36.113 0-45.2-20.328-45.2-50.941V216.061h33.959V285.9c0 20.329 5.979 30.372 21.765 30.372 18.415 0 26.306-10.283 26.306-35.393V216.061H592.96zM602.453 302.876H640v36.83H602.453z\"]\n};\nconst faGooglePay = {\n  prefix: 'fab',\n  iconName: 'google-pay',\n  icon: [640, 512, [], \"e079\", \"M105.72,215v41.25h57.1a49.66,49.66,0,0,1-21.14,32.6c-9.54,6.55-21.72,10.28-36,10.28-27.6,0-50.93-18.91-59.3-44.22a65.61,65.61,0,0,1,0-41l0,0c8.37-25.46,31.7-44.37,59.3-44.37a56.43,56.43,0,0,1,40.51,16.08L176.47,155a101.24,101.24,0,0,0-70.75-27.84,105.55,105.55,0,0,0-94.38,59.11,107.64,107.64,0,0,0,0,96.18v.15a105.41,105.41,0,0,0,94.38,59c28.47,0,52.55-9.53,70-25.91,20-18.61,31.41-46.15,31.41-78.91A133.76,133.76,0,0,0,205.38,215Zm389.41-4c-10.13-9.38-23.93-14.14-41.39-14.14-22.46,0-39.34,8.34-50.5,24.86l20.85,13.26q11.45-17,31.26-17a34.05,34.05,0,0,1,22.75,8.79A28.14,28.14,0,0,1,487.79,248v5.51c-9.1-5.07-20.55-7.75-34.64-7.75-16.44,0-29.65,3.88-39.49,11.77s-14.82,18.31-14.82,31.56a39.74,39.74,0,0,0,13.94,31.27c9.25,8.34,21,12.51,34.79,12.51,16.29,0,29.21-7.3,39-21.89h1v17.72h22.61V250C510.25,233.45,505.26,220.34,495.13,211ZM475.9,300.3a37.32,37.32,0,0,1-26.57,11.16A28.61,28.61,0,0,1,431,305.21a19.41,19.41,0,0,1-7.77-15.63c0-7,3.22-12.81,9.54-17.42s14.53-7,24.07-7C470,265,480.3,268,487.64,273.94,487.64,284.07,483.68,292.85,475.9,300.3Zm-93.65-142A55.71,55.71,0,0,0,341.74,142H279.07V328.74H302.7V253.1h39c16,0,29.5-5.36,40.51-15.93.88-.89,1.76-1.79,2.65-2.68A54.45,54.45,0,0,0,382.25,158.26Zm-16.58,62.23a30.65,30.65,0,0,1-23.34,9.68H302.7V165h39.63a32,32,0,0,1,22.6,9.23A33.18,33.18,0,0,1,365.67,220.49ZM614.31,201,577.77,292.7h-.45L539.9,201H514.21L566,320.55l-29.35,64.32H561L640,201Z\"]\n};\nconst faIntercom = {\n  prefix: 'fab',\n  iconName: 'intercom',\n  icon: [448, 512, [], \"f7af\", \"M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z\"]\n};\nconst faZhihu = {\n  prefix: 'fab',\n  iconName: 'zhihu',\n  icon: [640, 512, [], \"f63f\", \"M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z\"]\n};\nconst faKorvue = {\n  prefix: 'fab',\n  iconName: 'korvue',\n  icon: [446, 512, [], \"f42f\", \"M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z\"]\n};\nconst faPix = {\n  prefix: 'fab',\n  iconName: 'pix',\n  icon: [512, 512, [], \"e43a\", \"M242.4 292.5C247.8 287.1 257.1 287.1 262.5 292.5L339.5 369.5C353.7 383.7 372.6 391.5 392.6 391.5H407.7L310.6 488.6C280.3 518.1 231.1 518.1 200.8 488.6L103.3 391.2H112.6C132.6 391.2 151.5 383.4 165.7 369.2L242.4 292.5zM262.5 218.9C256.1 224.4 247.9 224.5 242.4 218.9L165.7 142.2C151.5 127.1 132.6 120.2 112.6 120.2H103.3L200.7 22.76C231.1-7.586 280.3-7.586 310.6 22.76L407.8 119.9H392.6C372.6 119.9 353.7 127.7 339.5 141.9L262.5 218.9zM112.6 142.7C126.4 142.7 139.1 148.3 149.7 158.1L226.4 234.8C233.6 241.1 243 245.6 252.5 245.6C261.9 245.6 271.3 241.1 278.5 234.8L355.5 157.8C365.3 148.1 378.8 142.5 392.6 142.5H430.3L488.6 200.8C518.9 231.1 518.9 280.3 488.6 310.6L430.3 368.9H392.6C378.8 368.9 365.3 363.3 355.5 353.5L278.5 276.5C264.6 262.6 240.3 262.6 226.4 276.6L149.7 353.2C139.1 363 126.4 368.6 112.6 368.6H80.78L22.76 310.6C-7.586 280.3-7.586 231.1 22.76 200.8L80.78 142.7H112.6z\"]\n};\nconst faSteamSymbol = {\n  prefix: 'fab',\n  iconName: 'steam-symbol',\n  icon: [448, 512, [], \"f3f6\", \"M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z\"]\n};\nvar icons = {\n  faMonero,\n  faHooli,\n  faYelp,\n  faCcVisa,\n  faLastfm,\n  faShopware,\n  faCreativeCommonsNc,\n  faAws,\n  faRedhat,\n  faYoast,\n  faCloudflare,\n  faUps,\n  faPixiv,\n  faWpexplorer,\n  faDyalog,\n  faBity,\n  faStackpath,\n  faBuysellads,\n  faFirstOrder,\n  faModx,\n  faGuilded,\n  faVnv,\n  faSquareJs,\n  faJsSquare,\n  faMicrosoft,\n  faQq,\n  faOrcid,\n  faJava,\n  faInvision,\n  faCreativeCommonsPdAlt,\n  faCentercode,\n  faGlideG,\n  faDrupal,\n  faJxl,\n  faDartLang,\n  faHireAHelper,\n  faCreativeCommonsBy,\n  faUnity,\n  faWhmcs,\n  faRocketchat,\n  faVk,\n  faUntappd,\n  faMailchimp,\n  faCss3Alt,\n  faSquareReddit,\n  faRedditSquare,\n  faVimeoV,\n  faContao,\n  faSquareFontAwesome,\n  faDeskpro,\n  faBrave,\n  faSistrix,\n  faSquareInstagram,\n  faInstagramSquare,\n  faBattleNet,\n  faTheRedYeti,\n  faSquareHackerNews,\n  faHackerNewsSquare,\n  faEdge,\n  faThreads,\n  faNapster,\n  faSquareSnapchat,\n  faSnapchatSquare,\n  faGooglePlusG,\n  faArtstation,\n  faMarkdown,\n  faSourcetree,\n  faGooglePlus,\n  faDiaspora,\n  faFoursquare,\n  faStackOverflow,\n  faGithubAlt,\n  faPhoenixSquadron,\n  faPagelines,\n  faAlgolia,\n  faRedRiver,\n  faCreativeCommonsSa,\n  faSafari,\n  faGoogle,\n  faSquareFontAwesomeStroke,\n  faFontAwesomeAlt,\n  faAtlassian,\n  faLinkedinIn,\n  faDigitalOcean,\n  faNimblr,\n  faChromecast,\n  faEvernote,\n  faHackerNews,\n  faCreativeCommonsSampling,\n  faAdversal,\n  faCreativeCommons,\n  faWatchmanMonitoring,\n  faFonticons,\n  faWeixin,\n  faShirtsinbulk,\n  faCodepen,\n  faGitAlt,\n  faLyft,\n  faRev,\n  faWindows,\n  faWizardsOfTheCoast,\n  faSquareViadeo,\n  faViadeoSquare,\n  faMeetup,\n  faCentos,\n  faAdn,\n  faCloudsmith,\n  faOpensuse,\n  faPiedPiperAlt,\n  faSquareDribbble,\n  faDribbbleSquare,\n  faCodiepie,\n  faNode,\n  faMix,\n  faSteam,\n  faCcApplePay,\n  faScribd,\n  faDebian,\n  faOpenid,\n  faInstalod,\n  faFilesPinwheel,\n  faExpeditedssl,\n  faSellcast,\n  faSquareTwitter,\n  faTwitterSquare,\n  faRProject,\n  faDelicious,\n  faFreebsd,\n  faVuejs,\n  faAccusoft,\n  faIoxhost,\n  faFonticonsFi,\n  faAppStore,\n  faCcMastercard,\n  faItunesNote,\n  faGolang,\n  faKickstarter,\n  faSquareKickstarter,\n  faGrav,\n  faWeibo,\n  faUncharted,\n  faFirstdraft,\n  faSquareYoutube,\n  faYoutubeSquare,\n  faWikipediaW,\n  faWpressr,\n  faRendact,\n  faAngellist,\n  faGalacticRepublic,\n  faNfcDirectional,\n  faSkype,\n  faJoget,\n  faFedora,\n  faStripeS,\n  faMeta,\n  faLaravel,\n  faHotjar,\n  faBluetoothB,\n  faSquareLetterboxd,\n  faStickerMule,\n  faCreativeCommonsZero,\n  faHips,\n  faCss,\n  faBehance,\n  faReddit,\n  faDiscord,\n  faChrome,\n  faAppStoreIos,\n  faCcDiscover,\n  faWpbeginner,\n  faConfluence,\n  faShoelace,\n  faMdb,\n  faDochub,\n  faAccessibleIcon,\n  faEbay,\n  faAmazon,\n  faUnsplash,\n  faYarn,\n  faSquareSteam,\n  faSteamSquare,\n  fa500px,\n  faSquareVimeo,\n  faVimeoSquare,\n  faAsymmetrik,\n  faFontAwesome,\n  faFontAwesomeFlag,\n  faFontAwesomeLogoFull,\n  faGratipay,\n  faApple,\n  faHive,\n  faGitkraken,\n  faKeybase,\n  faApplePay,\n  faPadlet,\n  faAmazonPay,\n  faSquareGithub,\n  faGithubSquare,\n  faStumbleupon,\n  faFedex,\n  faPhoenixFramework,\n  faShopify,\n  faNeos,\n  faSquareThreads,\n  faHackerrank,\n  faResearchgate,\n  faSwift,\n  faAngular,\n  faSpeakap,\n  faAngrycreative,\n  faYCombinator,\n  faEmpire,\n  faEnvira,\n  faGoogleScholar,\n  faSquareGitlab,\n  faGitlabSquare,\n  faStudiovinari,\n  faPiedPiper,\n  faWordpress,\n  faProductHunt,\n  faFirefox,\n  faLinode,\n  faGoodreads,\n  faSquareOdnoklassniki,\n  faOdnoklassnikiSquare,\n  faJsfiddle,\n  faSith,\n  faThemeisle,\n  faPage4,\n  faHashnode,\n  faReact,\n  faCcPaypal,\n  faSquarespace,\n  faCcStripe,\n  faCreativeCommonsShare,\n  faBitcoin,\n  faKeycdn,\n  faOpera,\n  faItchIo,\n  faUmbraco,\n  faGalacticSenate,\n  faUbuntu,\n  faDraft2digital,\n  faStripe,\n  faHouzz,\n  faGg,\n  faDhl,\n  faSquarePinterest,\n  faPinterestSquare,\n  faXing,\n  faBlackberry,\n  faCreativeCommonsPd,\n  faPlaystation,\n  faQuinscape,\n  faLess,\n  faBloggerB,\n  faOpencart,\n  faVine,\n  faSignalMessenger,\n  faPaypal,\n  faGitlab,\n  faTypo3,\n  faRedditAlien,\n  faYahoo,\n  faDailymotion,\n  faAffiliatetheme,\n  faPiedPiperPp,\n  faBootstrap,\n  faOdnoklassniki,\n  faNfcSymbol,\n  faMintbit,\n  faEthereum,\n  faSpeakerDeck,\n  faCreativeCommonsNcEu,\n  faPatreon,\n  faAvianex,\n  faEllo,\n  faGofore,\n  faBimobject,\n  faBraveReverse,\n  faFacebookF,\n  faSquareGooglePlus,\n  faGooglePlusSquare,\n  faWebAwesome,\n  faMandalorian,\n  faFirstOrderAlt,\n  faOsi,\n  faGoogleWallet,\n  faDAndDBeyond,\n  faPeriscope,\n  faFulcrum,\n  faCloudscale,\n  faForumbee,\n  faMizuni,\n  faSchlix,\n  faSquareXing,\n  faXingSquare,\n  faBandcamp,\n  faWpforms,\n  faCloudversify,\n  faUsps,\n  faMegaport,\n  faMagento,\n  faSpotify,\n  faOptinMonster,\n  faFly,\n  faSquareBluesky,\n  faAviato,\n  faItunes,\n  faCuttlefish,\n  faBlogger,\n  faFlickr,\n  faViber,\n  faSoundcloud,\n  faDigg,\n  faTencentWeibo,\n  faLetterboxd,\n  faSymfony,\n  faMaxcdn,\n  faEtsy,\n  faFacebookMessenger,\n  faAudible,\n  faThinkPeaks,\n  faBilibili,\n  faErlang,\n  faXTwitter,\n  faCottonBureau,\n  faDashcube,\n  fa42Group,\n  faInnosoft,\n  faStackExchange,\n  faElementor,\n  faSquarePiedPiper,\n  faPiedPiperSquare,\n  faCreativeCommonsNd,\n  faPalfed,\n  faSuperpowers,\n  faResolving,\n  faXbox,\n  faSquareWebAwesomeStroke,\n  faSearchengin,\n  faTiktok,\n  faSquareFacebook,\n  faFacebookSquare,\n  faRenren,\n  faLinux,\n  faGlide,\n  faLinkedin,\n  faHubspot,\n  faDeploydog,\n  faTwitch,\n  faFlutter,\n  faRavelry,\n  faMixer,\n  faSquareLastfm,\n  faLastfmSquare,\n  faVimeo,\n  faMendeley,\n  faUniregistry,\n  faFigma,\n  faCreativeCommonsRemix,\n  faCcAmazonPay,\n  faDropbox,\n  faInstagram,\n  faCmplid,\n  faUpwork,\n  faFacebook,\n  faGripfire,\n  faJediOrder,\n  faUikit,\n  faFortAwesomeAlt,\n  faPhabricator,\n  faUssunnah,\n  faEarlybirds,\n  faTradeFederation,\n  faAutoprefixer,\n  faWhatsapp,\n  faSquareUpwork,\n  faSlideshare,\n  faGooglePlay,\n  faViadeo,\n  faLine,\n  faGoogleDrive,\n  faServicestack,\n  faSimplybuilt,\n  faBitbucket,\n  faImdb,\n  faDeezer,\n  faRaspberryPi,\n  faJira,\n  faDocker,\n  faScreenpal,\n  faBluetooth,\n  faGitter,\n  faDAndD,\n  faMicroblog,\n  faCcDinersClub,\n  faGgCircle,\n  faPiedPiperHat,\n  faKickstarterK,\n  faYandex,\n  faReadme,\n  faHtml5,\n  faSellsy,\n  faSquareWebAwesome,\n  faSass,\n  faWirsindhandwerk,\n  faWsh,\n  faBuromobelexperte,\n  faSalesforce,\n  faOctopusDeploy,\n  faMedapps,\n  faNs8,\n  faPinterestP,\n  faApper,\n  faFortAwesome,\n  faWaze,\n  faBluesky,\n  faCcJcb,\n  faSnapchat,\n  faSnapchatGhost,\n  faFantasyFlightGames,\n  faRust,\n  faWix,\n  faSquareBehance,\n  faBehanceSquare,\n  faSupple,\n  faWebflow,\n  faRebel,\n  faCss3,\n  faStaylinked,\n  faKaggle,\n  faSpaceAwesome,\n  faDeviantart,\n  faCpanel,\n  faGoodreadsG,\n  faSquareGit,\n  faGitSquare,\n  faSquareTumblr,\n  faTumblrSquare,\n  faTrello,\n  faCreativeCommonsNcJp,\n  faGetPocket,\n  faPerbyte,\n  faGrunt,\n  faWeebly,\n  faConnectdevelop,\n  faLeanpub,\n  faBlackTie,\n  faThemeco,\n  faPython,\n  faAndroid,\n  faBots,\n  faFreeCodeCamp,\n  faHornbill,\n  faJs,\n  faIdeal,\n  faGit,\n  faDev,\n  faSketch,\n  faYandexInternational,\n  faCcAmex,\n  faUber,\n  faGithub,\n  faPhp,\n  faAlipay,\n  faYoutube,\n  faSkyatlas,\n  faFirefoxBrowser,\n  faReplyd,\n  faSuse,\n  faJenkins,\n  faTwitter,\n  faRockrms,\n  faPinterest,\n  faBuffer,\n  faNpm,\n  faYammer,\n  faBtc,\n  faDribbble,\n  faStumbleuponCircle,\n  faInternetExplorer,\n  faStubber,\n  faTelegram,\n  faTelegramPlane,\n  faOldRepublic,\n  faOdysee,\n  faSquareWhatsapp,\n  faWhatsappSquare,\n  faNodeJs,\n  faEdgeLegacy,\n  faSlack,\n  faSlackHash,\n  faMedrt,\n  faUsb,\n  faTumblr,\n  faVaadin,\n  faQuora,\n  faSquareXTwitter,\n  faReacteurope,\n  faMedium,\n  faMediumM,\n  faAmilia,\n  faMixcloud,\n  faFlipboard,\n  faViacoin,\n  faCriticalRole,\n  faSitrox,\n  faDiscourse,\n  faJoomla,\n  faMastodon,\n  faAirbnb,\n  faWolfPackBattalion,\n  faBuyNLarge,\n  faGulp,\n  faCreativeCommonsSamplingPlus,\n  faStrava,\n  faEmber,\n  faCanadianMapleLeaf,\n  faTeamspeak,\n  faPushed,\n  faWordpressSimple,\n  faNutritionix,\n  faWodu,\n  faGooglePay,\n  faIntercom,\n  faZhihu,\n  faKorvue,\n  faPix,\n  faSteamSymbol\n};\n\nexport { icons as fab, prefix, faMonero, faHooli, faYelp, faCcVisa, faLastfm, faShopware, faCreativeCommonsNc, faAws, faRedhat, faYoast, faCloudflare, faUps, faPixiv, faWpexplorer, faDyalog, faBity, faStackpath, faBuysellads, faFirstOrder, faModx, faGuilded, faVnv, faSquareJs, faJsSquare, faMicrosoft, faQq, faOrcid, faJava, faInvision, faCreativeCommonsPdAlt, faCentercode, faGlideG, faDrupal, faJxl, faDartLang, faHireAHelper, faCreativeCommonsBy, faUnity, faWhmcs, faRocketchat, faVk, faUntappd, faMailchimp, faCss3Alt, faSquareReddit, faRedditSquare, faVimeoV, faContao, faSquareFontAwesome, faDeskpro, faBrave, faSistrix, faSquareInstagram, faInstagramSquare, faBattleNet, faTheRedYeti, faSquareHackerNews, faHackerNewsSquare, faEdge, faThreads, faNapster, faSquareSnapchat, faSnapchatSquare, faGooglePlusG, faArtstation, faMarkdown, faSourcetree, faGooglePlus, faDiaspora, faFoursquare, faStackOverflow, faGithubAlt, faPhoenixSquadron, faPagelines, faAlgolia, faRedRiver, faCreativeCommonsSa, faSafari, faGoogle, faSquareFontAwesomeStroke, faFontAwesomeAlt, faAtlassian, faLinkedinIn, faDigitalOcean, faNimblr, faChromecast, faEvernote, faHackerNews, faCreativeCommonsSampling, faAdversal, faCreativeCommons, faWatchmanMonitoring, faFonticons, faWeixin, faShirtsinbulk, faCodepen, faGitAlt, faLyft, faRev, faWindows, faWizardsOfTheCoast, faSquareViadeo, faViadeoSquare, faMeetup, faCentos, faAdn, faCloudsmith, faOpensuse, faPiedPiperAlt, faSquareDribbble, faDribbbleSquare, faCodiepie, faNode, faMix, faSteam, faCcApplePay, faScribd, faDebian, faOpenid, faInstalod, faFilesPinwheel, faExpeditedssl, faSellcast, faSquareTwitter, faTwitterSquare, faRProject, faDelicious, faFreebsd, faVuejs, faAccusoft, faIoxhost, faFonticonsFi, faAppStore, faCcMastercard, faItunesNote, faGolang, faKickstarter, faSquareKickstarter, faGrav, faWeibo, faUncharted, faFirstdraft, faSquareYoutube, faYoutubeSquare, faWikipediaW, faWpressr, faRendact, faAngellist, faGalacticRepublic, faNfcDirectional, faSkype, faJoget, faFedora, faStripeS, faMeta, faLaravel, faHotjar, faBluetoothB, faSquareLetterboxd, faStickerMule, faCreativeCommonsZero, faHips, faCss, faBehance, faReddit, faDiscord, faChrome, faAppStoreIos, faCcDiscover, faWpbeginner, faConfluence, faShoelace, faMdb, faDochub, faAccessibleIcon, faEbay, faAmazon, faUnsplash, faYarn, faSquareSteam, faSteamSquare, fa500px, faSquareVimeo, faVimeoSquare, faAsymmetrik, faFontAwesome, faFontAwesomeFlag, faFontAwesomeLogoFull, faGratipay, faApple, faHive, faGitkraken, faKeybase, faApplePay, faPadlet, faAmazonPay, faSquareGithub, faGithubSquare, faStumbleupon, faFedex, faPhoenixFramework, faShopify, faNeos, faSquareThreads, faHackerrank, faResearchgate, faSwift, faAngular, faSpeakap, faAngrycreative, faYCombinator, faEmpire, faEnvira, faGoogleScholar, faSquareGitlab, faGitlabSquare, faStudiovinari, faPiedPiper, faWordpress, faProductHunt, faFirefox, faLinode, faGoodreads, faSquareOdnoklassniki, faOdnoklassnikiSquare, faJsfiddle, faSith, faThemeisle, faPage4, faHashnode, faReact, faCcPaypal, faSquarespace, faCcStripe, faCreativeCommonsShare, faBitcoin, faKeycdn, faOpera, faItchIo, faUmbraco, faGalacticSenate, faUbuntu, faDraft2digital, faStripe, faHouzz, faGg, faDhl, faSquarePinterest, faPinterestSquare, faXing, faBlackberry, faCreativeCommonsPd, faPlaystation, faQuinscape, faLess, faBloggerB, faOpencart, faVine, faSignalMessenger, faPaypal, faGitlab, faTypo3, faRedditAlien, faYahoo, faDailymotion, faAffiliatetheme, faPiedPiperPp, faBootstrap, faOdnoklassniki, faNfcSymbol, faMintbit, faEthereum, faSpeakerDeck, faCreativeCommonsNcEu, faPatreon, faAvianex, faEllo, faGofore, faBimobject, faBraveReverse, faFacebookF, faSquareGooglePlus, faGooglePlusSquare, faWebAwesome, faMandalorian, faFirstOrderAlt, faOsi, faGoogleWallet, faDAndDBeyond, faPeriscope, faFulcrum, faCloudscale, faForumbee, faMizuni, faSchlix, faSquareXing, faXingSquare, faBandcamp, faWpforms, faCloudversify, faUsps, faMegaport, faMagento, faSpotify, faOptinMonster, faFly, faSquareBluesky, faAviato, faItunes, faCuttlefish, faBlogger, faFlickr, faViber, faSoundcloud, faDigg, faTencentWeibo, faLetterboxd, faSymfony, faMaxcdn, faEtsy, faFacebookMessenger, faAudible, faThinkPeaks, faBilibili, faErlang, faXTwitter, faCottonBureau, faDashcube, fa42Group, faInnosoft, faStackExchange, faElementor, faSquarePiedPiper, faPiedPiperSquare, faCreativeCommonsNd, faPalfed, faSuperpowers, faResolving, faXbox, faSquareWebAwesomeStroke, faSearchengin, faTiktok, faSquareFacebook, faFacebookSquare, faRenren, faLinux, faGlide, faLinkedin, faHubspot, faDeploydog, faTwitch, faFlutter, faRavelry, faMixer, faSquareLastfm, faLastfmSquare, faVimeo, faMendeley, faUniregistry, faFigma, faCreativeCommonsRemix, faCcAmazonPay, faDropbox, faInstagram, faCmplid, faUpwork, faFacebook, faGripfire, faJediOrder, faUikit, faFortAwesomeAlt, faPhabricator, faUssunnah, faEarlybirds, faTradeFederation, faAutoprefixer, faWhatsapp, faSquareUpwork, faSlideshare, faGooglePlay, faViadeo, faLine, faGoogleDrive, faServicestack, faSimplybuilt, faBitbucket, faImdb, faDeezer, faRaspberryPi, faJira, faDocker, faScreenpal, faBluetooth, faGitter, faDAndD, faMicroblog, faCcDinersClub, faGgCircle, faPiedPiperHat, faKickstarterK, faYandex, faReadme, faHtml5, faSellsy, faSquareWebAwesome, faSass, faWirsindhandwerk, faWsh, faBuromobelexperte, faSalesforce, faOctopusDeploy, faMedapps, faNs8, faPinterestP, faApper, faFortAwesome, faWaze, faBluesky, faCcJcb, faSnapchat, faSnapchatGhost, faFantasyFlightGames, faRust, faWix, faSquareBehance, faBehanceSquare, faSupple, faWebflow, faRebel, faCss3, faStaylinked, faKaggle, faSpaceAwesome, faDeviantart, faCpanel, faGoodreadsG, faSquareGit, faGitSquare, faSquareTumblr, faTumblrSquare, faTrello, faCreativeCommonsNcJp, faGetPocket, faPerbyte, faGrunt, faWeebly, faConnectdevelop, faLeanpub, faBlackTie, faThemeco, faPython, faAndroid, faBots, faFreeCodeCamp, faHornbill, faJs, faIdeal, faGit, faDev, faSketch, faYandexInternational, faCcAmex, faUber, faGithub, faPhp, faAlipay, faYoutube, faSkyatlas, faFirefoxBrowser, faReplyd, faSuse, faJenkins, faTwitter, faRockrms, faPinterest, faBuffer, faNpm, faYammer, faBtc, faDribbble, faStumbleuponCircle, faInternetExplorer, faStubber, faTelegram, faTelegramPlane, faOldRepublic, faOdysee, faSquareWhatsapp, faWhatsappSquare, faNodeJs, faEdgeLegacy, faSlack, faSlackHash, faMedrt, faUsb, faTumblr, faVaadin, faQuora, faSquareXTwitter, faReacteurope, faMedium, faMediumM, faAmilia, faMixcloud, faFlipboard, faViacoin, faCriticalRole, faSitrox, faDiscourse, faJoomla, faMastodon, faAirbnb, faWolfPackBattalion, faBuyNLarge, faGulp, faCreativeCommonsSamplingPlus, faStrava, faEmber, faCanadianMapleLeaf, faTeamspeak, faPushed, faWordpressSimple, faNutritionix, faWodu, faGooglePay, faIntercom, faZhihu, faKorvue, faPix, faSteamSymbol };\n","import { faRss } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    faXTwitter,\n    faInstagram,\n    faThreads,\n    faLinkedin,\n    faGithub,\n    faBluesky,\n    faFacebook,\n} from \"@fortawesome/free-brands-svg-icons\"\n\n// See https://cdnjs.cloudflare.com/polyfill/ for a list of all supported features\nconst polyfillFeatures = [\n    \"es2022\", // Array.at, String.at, ...\n    \"es2023\", // Array.findLast, Array.toReversed, Array.toSorted, Array.with, ...\n]\nconst POLYFILL_VERSION = \"4.8.0\"\nexport const POLYFILL_URL: string = `https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?version=${POLYFILL_VERSION}&features=${polyfillFeatures.join(\n    \",\"\n)}`\n\nexport const PROD_URL = \"https://ourworldindata.org\"\n\nexport const DEFAULT_LOCAL_BAKE_DIR = \"localBake\"\n\nexport const SMALL_BREAKPOINT_MEDIA_QUERY = \"(max-width: 768px)\"\nexport const MEDIUM_BREAKPOINT_MEDIA_QUERY = \"(max-width: 960px)\"\n\nexport const TOUCH_DEVICE_MEDIA_QUERY =\n    \"(hover: none), (pointer: coarse), (pointer: none)\"\n\nexport const DATA_INSIGHTS_ATOM_FEED_NAME = \"atom-data-insights.xml\"\n\nexport const DEFAULT_ATOM_FEED_PROPS = {\n    title: \"Atom feed for Our World in Data\",\n    href: \"/atom.xml\",\n}\n\nexport const DATA_INSIGHT_ATOM_FEED_PROPS = {\n    title: \"Atom feed for Data Insights\",\n    href: `https://ourworldindata.org/${DATA_INSIGHTS_ATOM_FEED_NAME}`,\n}\n\nexport const DEFAULT_TOMBSTONE_REASON =\n    \"Our World in Data is designed to be an evergreen publication. This \" +\n    \"means that when a page cannot be updated due to outdated data or \" +\n    \"missing information, we prefer to remove it rather than present \" +\n    \"incomplete or inaccurate research and data to our readers.\"\n\nexport const SOCIALS = [\n    {\n        title: \"X\",\n        url: \"https://x.com/ourworldindata\",\n        icon: faXTwitter,\n    },\n    {\n        title: \"Instagram\",\n        url: \"https://www.instagram.com/ourworldindata/\",\n        icon: faInstagram,\n    },\n    {\n        title: \"Threads\",\n        url: \"https://www.threads.net/@ourworldindata\",\n        icon: faThreads,\n    },\n    {\n        title: \"Facebook\",\n        url: \"https://facebook.com/ourworldindata\",\n        icon: faFacebook,\n    },\n    {\n        title: \"LinkedIn\",\n        url: \"https://www.linkedin.com/company/ourworldindata\",\n        icon: faLinkedin,\n    },\n    {\n        title: \"Bluesky\",\n        url: \"https://bsky.app/profile/ourworldindata.org\",\n        icon: faBluesky,\n    },\n    {\n        title: \"GitHub\",\n        url: \"https://github.com/owid\",\n        icon: faGithub,\n    },\n]\n\nexport const RSS_FEEDS = [\n    {\n        title: \"Research & Writing\",\n        url: \"/atom.xml\",\n        icon: faRss,\n    },\n    {\n        title: \"Data Insights\",\n        url: `/${DATA_INSIGHTS_ATOM_FEED_NAME}`,\n        icon: faRss,\n    },\n]\n\nexport enum Menu {\n    Topics = \"topics\",\n    Resources = \"resources\",\n    About = \"about\",\n    Subscribe = \"subscribe\",\n    Search = \"search\",\n}\n\nexport const ABOUT_LINKS = [\n    { title: \"About Us\", url: \"/about\" },\n    { title: \"Organization\", url: \"/organization\" },\n    { title: \"Funding\", url: \"/funding\" },\n    { title: \"Team\", url: \"/team\" },\n    { title: \"Jobs\", url: \"/jobs\" },\n    { title: \"FAQs\", url: \"/faqs\" },\n]\n\nexport enum GalleryArrowDirection {\n    prev = \"prev\",\n    next = \"next\",\n}\n\nexport const MOST_RECENT_DATA_INSIGHT = \"most-recent-data-insight\"\nexport const SECOND_MOST_RECENT_INSIGHT = \"second-most-recent-data-insight\"\nexport const THIRD_MOST_RECENT_INSIGHT = \"third-most-recent-data-insight\"\nexport const FOURTH_MOST_RECENT_INSIGHT = \"fourth-most-recent-data-insight\"\nexport const FIFTH_MOST_RECENT_INSIGHT = \"fifth-most-recent-data-insight\"\nexport const SIXTH_MOST_RECENT_INSIGHT = \"sixth-most-recent-data-insight\"\nexport const SEVENTH_MOST_RECENT_INSIGHT = \"seventh-most-recent-data-insight\"\n\nexport const dataInsightIndexToIdMap: Record<number, string> = {\n    0: MOST_RECENT_DATA_INSIGHT,\n    1: SECOND_MOST_RECENT_INSIGHT,\n    2: THIRD_MOST_RECENT_INSIGHT,\n    3: FOURTH_MOST_RECENT_INSIGHT,\n    4: FIFTH_MOST_RECENT_INSIGHT,\n    5: SIXTH_MOST_RECENT_INSIGHT,\n    6: SEVENTH_MOST_RECENT_INSIGHT,\n}\n","import { faArrowLeftLong } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { GalleryArrowDirection } from \"../SiteConstants.js\"\n\nexport const GalleryArrow = ({\n    disabled,\n    onClick,\n    direction,\n}: {\n    disabled: boolean\n    onClick: VoidFunction\n    direction: GalleryArrowDirection\n}) => {\n    const flip =\n        direction === GalleryArrowDirection.next ? \"horizontal\" : undefined\n    const classes = [\"gallery-arrow\", direction]\n\n    return (\n        <button\n            aria-label={`Go to ${\n                direction === GalleryArrowDirection.next ? \"next\" : \"previous\"\n            } slide`}\n            disabled={disabled}\n            onClick={onClick}\n            className={classes.join(\" \")}\n        >\n            <FontAwesomeIcon icon={faArrowLeftLong} flip={flip} />\n        </button>\n    )\n}\n","import {\n    DEFAULT_GRAPHER_HEIGHT,\n    DEFAULT_GRAPHER_WIDTH,\n    generateGrapherImageSrcSet,\n} from \"@ourworldindata/grapher\"\nimport { GRAPHER_DYNAMIC_THUMBNAIL_URL } from \"../settings/clientSettings.js\"\nimport { Url } from \"@ourworldindata/utils\"\n\nfunction GrapherImageSource({\n    defaultSrc,\n    suppressHydrationWarning,\n}: {\n    defaultSrc: string\n    suppressHydrationWarning: boolean | undefined\n}) {\n    const srcSet = generateGrapherImageSrcSet(defaultSrc)\n    const sizes = `(max-width: 850px) 100vw, 850px`\n\n    return (\n        <source\n            id=\"grapher-preview-source\"\n            srcSet={srcSet}\n            sizes={sizes}\n            suppressHydrationWarning={suppressHydrationWarning}\n        />\n    )\n}\n\nexport default function GrapherImage(props: {\n    url: string\n    alt?: string\n    noFormatting?: boolean\n    enablePopulatingUrlParams?: boolean\n}): React.ReactElement\nexport default function GrapherImage(props: {\n    slug: string\n    queryString?: string\n    alt?: string\n    noFormatting?: boolean\n    enablePopulatingUrlParams?: boolean\n}): React.ReactElement\nexport default function GrapherImage(props: {\n    url?: string\n    slug?: string\n    queryString?: string\n    alt?: string\n    noFormatting?: boolean\n    enablePopulatingUrlParams?: boolean\n}) {\n    if (!GRAPHER_DYNAMIC_THUMBNAIL_URL) return null\n\n    let slug: string\n    let queryString: string\n    if (props.url) {\n        const url = Url.fromURL(props.url)\n        slug = url.slug!\n        queryString = url.queryStr\n    } else {\n        slug = props.slug!\n        queryString = props.queryString ?? \"\"\n    }\n\n    const defaultSrc = `${GRAPHER_DYNAMIC_THUMBNAIL_URL}/${slug}.png${queryString}`\n    return (\n        <picture\n            // This tells our Cloudflare functions to replace the src with the dynamic thumbnail URL, including URL params like `?time=2020`.\n            // Enabling this option only makes sense if this is the _main_ chart on a _standalone_ grapher/data page - it will pass on the URL params from the page to the thumbnail.\n            data-owid-populate-url-params={props.enablePopulatingUrlParams}\n        >\n            <GrapherImageSource\n                defaultSrc={defaultSrc}\n                suppressHydrationWarning={props.enablePopulatingUrlParams}\n            />\n            <img\n                className=\"GrapherImage\"\n                src={defaultSrc}\n                alt={props.alt}\n                width={DEFAULT_GRAPHER_WIDTH}\n                height={DEFAULT_GRAPHER_HEIGHT}\n                loading=\"lazy\"\n                data-no-img-formatting={props.noFormatting}\n                // Suppresses a (inevitable) hydration mismatch warning when the image is rendered on the server with a dynamic URL incl. query\n                // params, and the client then replaces it with \"just\" a normal URL.\n                suppressHydrationWarning={props.enablePopulatingUrlParams}\n            />\n        </picture>\n    )\n}\n","import { BasicChartInformation } from \"@ourworldindata/utils\"\nimport * as React from \"react\"\nimport { BAKED_BASE_URL } from \"../../settings/clientSettings.js\"\nimport GrapherImage from \"../GrapherImage.js\"\n\nexport const AllChartsListItem = ({\n    chart,\n    onClick,\n    isActive,\n}: {\n    chart: BasicChartInformation\n    onClick: (e: React.MouseEvent) => void\n    isActive: boolean\n}) => {\n    return (\n        <li key={chart.slug} className={isActive ? \"active\" : \"\"}>\n            <a\n                href={`${BAKED_BASE_URL}/grapher/${chart.slug}`}\n                onClick={onClick}\n            >\n                <GrapherImage\n                    slug={chart.slug}\n                    alt={`A thumbnail of the \"${chart.title}\" chart`}\n                    noFormatting\n                />\n                <span>{chart.title}</span>\n            </a>\n            {chart.variantName ? (\n                <span className=\"variantName\">{chart.variantName}</span>\n            ) : null}\n        </li>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { getVariableMetadataRoute } from \"@ourworldindata/grapher\"\nimport {\n    AssetMap,\n    GrapherInterface,\n    OwidVariableWithSourceAndDimension,\n} from \"@ourworldindata/types\"\nimport { fetchWithRetry, readFromAssetMap } from \"@ourworldindata/utils\"\nimport { DATA_API_URL } from \"../../settings/clientSettings.js\"\n\nexport const cachedGetVariableMetadata = _.memoize(\n    async (\n        variableId: number,\n        isPreviewing: boolean,\n        assetMap?: AssetMap\n    ): Promise<OwidVariableWithSourceAndDimension> => {\n        const response = await fetchWithRetry(\n            getVariableMetadataRoute(DATA_API_URL, variableId, {\n                assetMap,\n                noCache: isPreviewing,\n            })\n        )\n        return await response.json()\n    }\n)\n\nexport const cachedGetGrapherConfigByUuid = _.memoize(\n    async (\n        grapherConfigUuid: string,\n        isPreviewing: boolean,\n        assetMap?: AssetMap\n    ): Promise<GrapherInterface> => {\n        const configFileName = `${grapherConfigUuid}.config.json`\n        const fallbackUrl = `/grapher/by-uuid/${configFileName}${isPreviewing ? \"?nocache\" : \"\"}`\n        const url = readFromAssetMap(assetMap, {\n            path: configFileName,\n            fallback: fallbackUrl,\n        })\n        const response = await fetchWithRetry(url)\n        return await response.json()\n    }\n)\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.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\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\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\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 objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\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 */\nvar now = function() {\n  return root.Date.now();\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 */\nfunction 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        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\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        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 * 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 && (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 */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\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 */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\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 */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n// src/useBoolean/useBoolean.ts\nfunction useBoolean(defaultValue = false) {\n  if (typeof defaultValue !== \"boolean\") {\n    throw new Error(\"defaultValue must be `true` or `false`\");\n  }\n  const [value, setValue] = useState(defaultValue);\n  const setTrue = useCallback(() => {\n    setValue(true);\n  }, []);\n  const setFalse = useCallback(() => {\n    setValue(false);\n  }, []);\n  const toggle = useCallback(() => {\n    setValue((x) => !x);\n  }, []);\n  return { value, setValue, setTrue, setFalse, toggle };\n}\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// src/useEventListener/useEventListener.ts\nfunction useEventListener(eventName, handler, element, options) {\n  const savedHandler = useRef(handler);\n  useIsomorphicLayoutEffect(() => {\n    savedHandler.current = handler;\n  }, [handler]);\n  useEffect(() => {\n    const targetElement = (element == null ? void 0 : element.current) ?? window;\n    if (!(targetElement && targetElement.addEventListener))\n      return;\n    const listener = (event) => {\n      savedHandler.current(event);\n    };\n    targetElement.addEventListener(eventName, listener, options);\n    return () => {\n      targetElement.removeEventListener(eventName, listener, options);\n    };\n  }, [eventName, element, options]);\n}\n\n// src/useClickAnyWhere/useClickAnyWhere.ts\nfunction useClickAnyWhere(handler) {\n  useEventListener(\"click\", (event) => {\n    handler(event);\n  });\n}\nfunction useCopyToClipboard() {\n  const [copiedText, setCopiedText] = useState(null);\n  const copy = useCallback(async (text) => {\n    if (!(navigator == null ? void 0 : navigator.clipboard)) {\n      console.warn(\"Clipboard not supported\");\n      return false;\n    }\n    try {\n      await navigator.clipboard.writeText(text);\n      setCopiedText(text);\n      return true;\n    } catch (error) {\n      console.warn(\"Copy failed\", error);\n      setCopiedText(null);\n      return false;\n    }\n  }, []);\n  return [copiedText, copy];\n}\nfunction useCounter(initialValue) {\n  const [count, setCount] = useState(initialValue ?? 0);\n  const increment = useCallback(() => {\n    setCount((x) => x + 1);\n  }, []);\n  const decrement = useCallback(() => {\n    setCount((x) => x - 1);\n  }, []);\n  const reset = useCallback(() => {\n    setCount(initialValue ?? 0);\n  }, [initialValue]);\n  return {\n    count,\n    increment,\n    decrement,\n    reset,\n    setCount\n  };\n}\nfunction useInterval(callback, delay) {\n  const savedCallback = useRef(callback);\n  useIsomorphicLayoutEffect(() => {\n    savedCallback.current = callback;\n  }, [callback]);\n  useEffect(() => {\n    if (delay === null) {\n      return;\n    }\n    const id = setInterval(() => {\n      savedCallback.current();\n    }, delay);\n    return () => {\n      clearInterval(id);\n    };\n  }, [delay]);\n}\n\n// src/useCountdown/useCountdown.ts\nfunction useCountdown({\n  countStart,\n  countStop = 0,\n  intervalMs = 1e3,\n  isIncrement = false\n}) {\n  const {\n    count,\n    increment,\n    decrement,\n    reset: resetCounter\n  } = useCounter(countStart);\n  const {\n    value: isCountdownRunning,\n    setTrue: startCountdown,\n    setFalse: stopCountdown\n  } = useBoolean(false);\n  const resetCountdown = useCallback(() => {\n    stopCountdown();\n    resetCounter();\n  }, [stopCountdown, resetCounter]);\n  const countdownCallback = useCallback(() => {\n    if (count === countStop) {\n      stopCountdown();\n      return;\n    }\n    if (isIncrement) {\n      increment();\n    } else {\n      decrement();\n    }\n  }, [count, countStop, decrement, increment, isIncrement, stopCountdown]);\n  useInterval(countdownCallback, isCountdownRunning ? intervalMs : null);\n  return [count, { startCountdown, stopCountdown, resetCountdown }];\n}\nfunction useEventCallback(fn) {\n  const ref = useRef(() => {\n    throw new Error(\"Cannot call an event handler while rendering.\");\n  });\n  useIsomorphicLayoutEffect(() => {\n    ref.current = fn;\n  }, [fn]);\n  return useCallback((...args) => {\n    var _a;\n    return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);\n  }, [ref]);\n}\n\n// src/useLocalStorage/useLocalStorage.ts\nvar IS_SERVER = typeof window === \"undefined\";\nfunction useLocalStorage(key, initialValue, options = {}) {\n  const { initializeWithValue = true } = options;\n  const serializer = useCallback(\n    (value) => {\n      if (options.serializer) {\n        return options.serializer(value);\n      }\n      return JSON.stringify(value);\n    },\n    [options]\n  );\n  const deserializer = useCallback(\n    (value) => {\n      if (options.deserializer) {\n        return options.deserializer(value);\n      }\n      if (value === \"undefined\") {\n        return void 0;\n      }\n      const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n      let parsed;\n      try {\n        parsed = JSON.parse(value);\n      } catch (error) {\n        console.error(\"Error parsing JSON:\", error);\n        return defaultValue;\n      }\n      return parsed;\n    },\n    [options, initialValue]\n  );\n  const readValue = useCallback(() => {\n    const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n    if (IS_SERVER) {\n      return initialValueToUse;\n    }\n    try {\n      const raw = window.localStorage.getItem(key);\n      return raw ? deserializer(raw) : initialValueToUse;\n    } catch (error) {\n      console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n      return initialValueToUse;\n    }\n  }, [initialValue, key, deserializer]);\n  const [storedValue, setStoredValue] = useState(() => {\n    if (initializeWithValue) {\n      return readValue();\n    }\n    return initialValue instanceof Function ? initialValue() : initialValue;\n  });\n  const setValue = useEventCallback((value) => {\n    if (IS_SERVER) {\n      console.warn(\n        `Tried setting localStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    try {\n      const newValue = value instanceof Function ? value(readValue()) : value;\n      window.localStorage.setItem(key, serializer(newValue));\n      setStoredValue(newValue);\n      window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n    } catch (error) {\n      console.warn(`Error setting localStorage key \\u201C${key}\\u201D:`, error);\n    }\n  });\n  const removeValue = useEventCallback(() => {\n    if (IS_SERVER) {\n      console.warn(\n        `Tried removing localStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n    window.localStorage.removeItem(key);\n    setStoredValue(defaultValue);\n    window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n  });\n  useEffect(() => {\n    setStoredValue(readValue());\n  }, [key]);\n  const handleStorageChange = useCallback(\n    (event) => {\n      if (event.key && event.key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    },\n    [key, readValue]\n  );\n  useEventListener(\"storage\", handleStorageChange);\n  useEventListener(\"local-storage\", handleStorageChange);\n  return [storedValue, setValue, removeValue];\n}\nvar IS_SERVER2 = typeof window === \"undefined\";\nfunction useMediaQuery(query, {\n  defaultValue = false,\n  initializeWithValue = true\n} = {}) {\n  const getMatches = (query2) => {\n    if (IS_SERVER2) {\n      return defaultValue;\n    }\n    return window.matchMedia(query2).matches;\n  };\n  const [matches, setMatches] = useState(() => {\n    if (initializeWithValue) {\n      return getMatches(query);\n    }\n    return defaultValue;\n  });\n  function handleChange() {\n    setMatches(getMatches(query));\n  }\n  useIsomorphicLayoutEffect(() => {\n    const matchMedia = window.matchMedia(query);\n    handleChange();\n    if (matchMedia.addListener) {\n      matchMedia.addListener(handleChange);\n    } else {\n      matchMedia.addEventListener(\"change\", handleChange);\n    }\n    return () => {\n      if (matchMedia.removeListener) {\n        matchMedia.removeListener(handleChange);\n      } else {\n        matchMedia.removeEventListener(\"change\", handleChange);\n      }\n    };\n  }, [query]);\n  return matches;\n}\n\n// src/useDarkMode/useDarkMode.ts\nvar COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY = \"usehooks-ts-dark-mode\";\nfunction useDarkMode(options = {}) {\n  const {\n    defaultValue,\n    localStorageKey = LOCAL_STORAGE_KEY,\n    initializeWithValue = true\n  } = options;\n  const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, {\n    initializeWithValue,\n    defaultValue\n  });\n  const [isDarkMode, setDarkMode] = useLocalStorage(\n    localStorageKey,\n    defaultValue ?? isDarkOS ?? false,\n    { initializeWithValue }\n  );\n  useIsomorphicLayoutEffect(() => {\n    if (isDarkOS !== isDarkMode) {\n      setDarkMode(isDarkOS);\n    }\n  }, [isDarkOS]);\n  return {\n    isDarkMode,\n    toggle: () => {\n      setDarkMode((prev) => !prev);\n    },\n    enable: () => {\n      setDarkMode(true);\n    },\n    disable: () => {\n      setDarkMode(false);\n    },\n    set: (value) => {\n      setDarkMode(value);\n    }\n  };\n}\nfunction useUnmount(func) {\n  const funcRef = useRef(func);\n  funcRef.current = func;\n  useEffect(\n    () => () => {\n      funcRef.current();\n    },\n    []\n  );\n}\n\n// src/useDebounceCallback/useDebounceCallback.ts\nfunction useDebounceCallback(func, delay = 500, options) {\n  const debouncedFunc = useRef();\n  useUnmount(() => {\n    if (debouncedFunc.current) {\n      debouncedFunc.current.cancel();\n    }\n  });\n  const debounced = useMemo(() => {\n    const debouncedFuncInstance = debounce(func, delay, options);\n    const wrappedFunc = (...args) => {\n      return debouncedFuncInstance(...args);\n    };\n    wrappedFunc.cancel = () => {\n      debouncedFuncInstance.cancel();\n    };\n    wrappedFunc.isPending = () => {\n      return !!debouncedFunc.current;\n    };\n    wrappedFunc.flush = () => {\n      return debouncedFuncInstance.flush();\n    };\n    return wrappedFunc;\n  }, [func, delay, options]);\n  useEffect(() => {\n    debouncedFunc.current = debounce(func, delay, options);\n  }, [func, delay, options]);\n  return debounced;\n}\nfunction useDebounceValue(initialValue, delay, options) {\n  const eq = (options == null ? void 0 : options.equalityFn) ?? ((left, right) => left === right);\n  const unwrappedInitialValue = initialValue instanceof Function ? initialValue() : initialValue;\n  const [debouncedValue, setDebouncedValue] = useState(unwrappedInitialValue);\n  const previousValueRef = useRef(unwrappedInitialValue);\n  const updateDebouncedValue = useDebounceCallback(\n    setDebouncedValue,\n    delay,\n    options\n  );\n  if (!eq(previousValueRef.current, unwrappedInitialValue)) {\n    updateDebouncedValue(unwrappedInitialValue);\n    previousValueRef.current = unwrappedInitialValue;\n  }\n  return [debouncedValue, updateDebouncedValue];\n}\nfunction useDocumentTitle(title, options = {}) {\n  const { preserveTitleOnUnmount = true } = options;\n  const defaultTitle = useRef(null);\n  useIsomorphicLayoutEffect(() => {\n    defaultTitle.current = window.document.title;\n  }, []);\n  useIsomorphicLayoutEffect(() => {\n    window.document.title = title;\n  }, [title]);\n  useUnmount(() => {\n    if (!preserveTitleOnUnmount && defaultTitle.current) {\n      window.document.title = defaultTitle.current;\n    }\n  });\n}\nfunction useHover(elementRef) {\n  const [value, setValue] = useState(false);\n  const handleMouseEnter = () => {\n    setValue(true);\n  };\n  const handleMouseLeave = () => {\n    setValue(false);\n  };\n  useEventListener(\"mouseenter\", handleMouseEnter, elementRef);\n  useEventListener(\"mouseleave\", handleMouseLeave, elementRef);\n  return value;\n}\nfunction useIntersectionObserver({\n  threshold = 0,\n  root = null,\n  rootMargin = \"0%\",\n  freezeOnceVisible = false,\n  initialIsIntersecting = false,\n  onChange\n} = {}) {\n  var _a;\n  const [ref, setRef] = useState(null);\n  const [state, setState] = useState(() => ({\n    isIntersecting: initialIsIntersecting,\n    entry: void 0\n  }));\n  const callbackRef = useRef();\n  callbackRef.current = onChange;\n  const frozen = ((_a = state.entry) == null ? void 0 : _a.isIntersecting) && freezeOnceVisible;\n  useEffect(() => {\n    if (!ref)\n      return;\n    if (!(\"IntersectionObserver\" in window))\n      return;\n    if (frozen)\n      return;\n    let unobserve;\n    const observer = new IntersectionObserver(\n      (entries) => {\n        const thresholds = Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n        entries.forEach((entry) => {\n          const isIntersecting = entry.isIntersecting && thresholds.some((threshold2) => entry.intersectionRatio >= threshold2);\n          setState({ isIntersecting, entry });\n          if (callbackRef.current) {\n            callbackRef.current(isIntersecting, entry);\n          }\n          if (isIntersecting && freezeOnceVisible && unobserve) {\n            unobserve();\n            unobserve = void 0;\n          }\n        });\n      },\n      { threshold, root, rootMargin }\n    );\n    observer.observe(ref);\n    return () => {\n      observer.disconnect();\n    };\n  }, [\n    ref,\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    JSON.stringify(threshold),\n    root,\n    rootMargin,\n    frozen,\n    freezeOnceVisible\n  ]);\n  const prevRef = useRef(null);\n  useEffect(() => {\n    var _a2;\n    if (!ref && ((_a2 = state.entry) == null ? void 0 : _a2.target) && !freezeOnceVisible && !frozen && prevRef.current !== state.entry.target) {\n      prevRef.current = state.entry.target;\n      setState({ isIntersecting: initialIsIntersecting, entry: void 0 });\n    }\n  }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n  const result = [\n    setRef,\n    !!state.isIntersecting,\n    state.entry\n  ];\n  result.ref = result[0];\n  result.isIntersecting = result[1];\n  result.entry = result[2];\n  return result;\n}\nfunction useIsClient() {\n  const [isClient, setClient] = useState(false);\n  useEffect(() => {\n    setClient(true);\n  }, []);\n  return isClient;\n}\nfunction useIsMounted() {\n  const isMounted = useRef(false);\n  useEffect(() => {\n    isMounted.current = true;\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n  return useCallback(() => isMounted.current, []);\n}\nfunction useMap(initialState = /* @__PURE__ */ new Map()) {\n  const [map, setMap] = useState(new Map(initialState));\n  const actions = {\n    set: useCallback((key, value) => {\n      setMap((prev) => {\n        const copy = new Map(prev);\n        copy.set(key, value);\n        return copy;\n      });\n    }, []),\n    setAll: useCallback((entries) => {\n      setMap(() => new Map(entries));\n    }, []),\n    remove: useCallback((key) => {\n      setMap((prev) => {\n        const copy = new Map(prev);\n        copy.delete(key);\n        return copy;\n      });\n    }, []),\n    reset: useCallback(() => {\n      setMap(() => /* @__PURE__ */ new Map());\n    }, [])\n  };\n  return [map, actions];\n}\n\n// src/useOnClickOutside/useOnClickOutside.ts\nfunction useOnClickOutside(ref, handler, eventType = \"mousedown\", eventListenerOptions = {}) {\n  useEventListener(\n    eventType,\n    (event) => {\n      const target = event.target;\n      if (!target || !target.isConnected) {\n        return;\n      }\n      const isOutside = Array.isArray(ref) ? ref.filter((r) => Boolean(r.current)).every((r) => r.current && !r.current.contains(target)) : ref.current && !ref.current.contains(target);\n      if (isOutside) {\n        handler(event);\n      }\n    },\n    void 0,\n    eventListenerOptions\n  );\n}\nvar IS_SERVER3 = typeof window === \"undefined\";\nfunction useReadLocalStorage(key, options = {}) {\n  let { initializeWithValue = true } = options;\n  if (IS_SERVER3) {\n    initializeWithValue = false;\n  }\n  const deserializer = useCallback(\n    (value) => {\n      if (options.deserializer) {\n        return options.deserializer(value);\n      }\n      if (value === \"undefined\") {\n        return void 0;\n      }\n      let parsed;\n      try {\n        parsed = JSON.parse(value);\n      } catch (error) {\n        console.error(\"Error parsing JSON:\", error);\n        return null;\n      }\n      return parsed;\n    },\n    [options]\n  );\n  const readValue = useCallback(() => {\n    if (IS_SERVER3) {\n      return null;\n    }\n    try {\n      const raw = window.localStorage.getItem(key);\n      return raw ? deserializer(raw) : null;\n    } catch (error) {\n      console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n      return null;\n    }\n  }, [key, deserializer]);\n  const [storedValue, setStoredValue] = useState(() => {\n    if (initializeWithValue) {\n      return readValue();\n    }\n    return void 0;\n  });\n  useEffect(() => {\n    setStoredValue(readValue());\n  }, [key]);\n  const handleStorageChange = useCallback(\n    (event) => {\n      if (event.key && event.key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    },\n    [key, readValue]\n  );\n  useEventListener(\"storage\", handleStorageChange);\n  useEventListener(\"local-storage\", handleStorageChange);\n  return storedValue;\n}\nvar initialSize = {\n  width: void 0,\n  height: void 0\n};\nfunction useResizeObserver(options) {\n  const { ref, box = \"content-box\" } = options;\n  const [{ width, height }, setSize] = useState(initialSize);\n  const isMounted = useIsMounted();\n  const previousSize = useRef({ ...initialSize });\n  const onResize = useRef(void 0);\n  onResize.current = options.onResize;\n  useEffect(() => {\n    if (!ref.current)\n      return;\n    if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window))\n      return;\n    const observer = new ResizeObserver(([entry]) => {\n      const boxProp = box === \"border-box\" ? \"borderBoxSize\" : box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n      const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n      const newHeight = extractSize(entry, boxProp, \"blockSize\");\n      const hasChanged = previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n      if (hasChanged) {\n        const newSize = { width: newWidth, height: newHeight };\n        previousSize.current.width = newWidth;\n        previousSize.current.height = newHeight;\n        if (onResize.current) {\n          onResize.current(newSize);\n        } else {\n          if (isMounted()) {\n            setSize(newSize);\n          }\n        }\n      }\n    });\n    observer.observe(ref.current, { box });\n    return () => {\n      observer.disconnect();\n    };\n  }, [box, ref, isMounted]);\n  return { width, height };\n}\nfunction extractSize(entry, box, sizeType) {\n  if (!entry[box]) {\n    if (box === \"contentBoxSize\") {\n      return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n    }\n    return void 0;\n  }\n  return Array.isArray(entry[box]) ? entry[box][0][sizeType] : (\n    // @ts-ignore Support Firefox's non-standard behavior\n    entry[box][sizeType]\n  );\n}\nvar IS_SERVER4 = typeof window === \"undefined\";\nfunction useScreen(options = {}) {\n  let { initializeWithValue = true } = options;\n  if (IS_SERVER4) {\n    initializeWithValue = false;\n  }\n  const readScreen = () => {\n    if (IS_SERVER4) {\n      return void 0;\n    }\n    return window.screen;\n  };\n  const [screen, setScreen] = useState(() => {\n    if (initializeWithValue) {\n      return readScreen();\n    }\n    return void 0;\n  });\n  const debouncedSetScreen = useDebounceCallback(\n    setScreen,\n    options.debounceDelay\n  );\n  function handleSize() {\n    const newScreen = readScreen();\n    const setSize = options.debounceDelay ? debouncedSetScreen : setScreen;\n    if (newScreen) {\n      const {\n        width,\n        height,\n        availHeight,\n        availWidth,\n        colorDepth,\n        orientation,\n        pixelDepth\n      } = newScreen;\n      setSize({\n        width,\n        height,\n        availHeight,\n        availWidth,\n        colorDepth,\n        orientation,\n        pixelDepth\n      });\n    }\n  }\n  useEventListener(\"resize\", handleSize);\n  useIsomorphicLayoutEffect(() => {\n    handleSize();\n  }, []);\n  return screen;\n}\nvar cachedScriptStatuses = /* @__PURE__ */ new Map();\nfunction getScriptNode(src) {\n  const node = document.querySelector(\n    `script[src=\"${src}\"]`\n  );\n  const status = node == null ? void 0 : node.getAttribute(\"data-status\");\n  return {\n    node,\n    status\n  };\n}\nfunction useScript(src, options) {\n  const [status, setStatus] = useState(() => {\n    if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n      return \"idle\";\n    }\n    if (typeof window === \"undefined\") {\n      return \"loading\";\n    }\n    return cachedScriptStatuses.get(src) ?? \"loading\";\n  });\n  useEffect(() => {\n    if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n      return;\n    }\n    const cachedScriptStatus = cachedScriptStatuses.get(src);\n    if (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n      setStatus(cachedScriptStatus);\n      return;\n    }\n    const script = getScriptNode(src);\n    let scriptNode = script.node;\n    if (!scriptNode) {\n      scriptNode = document.createElement(\"script\");\n      scriptNode.src = src;\n      scriptNode.async = true;\n      if (options == null ? void 0 : options.id) {\n        scriptNode.id = options.id;\n      }\n      scriptNode.setAttribute(\"data-status\", \"loading\");\n      document.body.appendChild(scriptNode);\n      const setAttributeFromEvent = (event) => {\n        const scriptStatus = event.type === \"load\" ? \"ready\" : \"error\";\n        scriptNode == null ? void 0 : scriptNode.setAttribute(\"data-status\", scriptStatus);\n      };\n      scriptNode.addEventListener(\"load\", setAttributeFromEvent);\n      scriptNode.addEventListener(\"error\", setAttributeFromEvent);\n    } else {\n      setStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n    }\n    const setStateFromEvent = (event) => {\n      const newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n      setStatus(newStatus);\n      cachedScriptStatuses.set(src, newStatus);\n    };\n    scriptNode.addEventListener(\"load\", setStateFromEvent);\n    scriptNode.addEventListener(\"error\", setStateFromEvent);\n    return () => {\n      if (scriptNode) {\n        scriptNode.removeEventListener(\"load\", setStateFromEvent);\n        scriptNode.removeEventListener(\"error\", setStateFromEvent);\n      }\n      if (scriptNode && (options == null ? void 0 : options.removeOnUnmount)) {\n        scriptNode.remove();\n        cachedScriptStatuses.delete(src);\n      }\n    };\n  }, [src, options == null ? void 0 : options.shouldPreventLoad, options == null ? void 0 : options.removeOnUnmount, options == null ? void 0 : options.id]);\n  return status;\n}\nvar IS_SERVER5 = typeof window === \"undefined\";\nfunction useScrollLock(options = {}) {\n  const { autoLock = true, lockTarget, widthReflow = true } = options;\n  const [isLocked, setIsLocked] = useState(false);\n  const target = useRef(null);\n  const originalStyle = useRef(null);\n  const lock = () => {\n    if (target.current) {\n      const { overflow, paddingRight } = target.current.style;\n      originalStyle.current = { overflow, paddingRight };\n      if (widthReflow) {\n        const offsetWidth = target.current === document.body ? window.innerWidth : target.current.offsetWidth;\n        const currentPaddingRight = parseInt(window.getComputedStyle(target.current).paddingRight, 10) || 0;\n        const scrollbarWidth = offsetWidth - target.current.scrollWidth;\n        target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`;\n      }\n      target.current.style.overflow = \"hidden\";\n      setIsLocked(true);\n    }\n  };\n  const unlock = () => {\n    if (target.current && originalStyle.current) {\n      target.current.style.overflow = originalStyle.current.overflow;\n      if (widthReflow) {\n        target.current.style.paddingRight = originalStyle.current.paddingRight;\n      }\n    }\n    setIsLocked(false);\n  };\n  useIsomorphicLayoutEffect(() => {\n    if (IS_SERVER5)\n      return;\n    if (lockTarget) {\n      target.current = typeof lockTarget === \"string\" ? document.querySelector(lockTarget) : lockTarget;\n    }\n    if (!target.current) {\n      target.current = document.body;\n    }\n    if (autoLock) {\n      lock();\n    }\n    return () => {\n      unlock();\n    };\n  }, [autoLock, lockTarget, widthReflow]);\n  return { isLocked, lock, unlock };\n}\nvar IS_SERVER6 = typeof window === \"undefined\";\nfunction useSessionStorage(key, initialValue, options = {}) {\n  const { initializeWithValue = true } = options;\n  const serializer = useCallback(\n    (value) => {\n      if (options.serializer) {\n        return options.serializer(value);\n      }\n      return JSON.stringify(value);\n    },\n    [options]\n  );\n  const deserializer = useCallback(\n    (value) => {\n      if (options.deserializer) {\n        return options.deserializer(value);\n      }\n      if (value === \"undefined\") {\n        return void 0;\n      }\n      const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n      let parsed;\n      try {\n        parsed = JSON.parse(value);\n      } catch (error) {\n        console.error(\"Error parsing JSON:\", error);\n        return defaultValue;\n      }\n      return parsed;\n    },\n    [options, initialValue]\n  );\n  const readValue = useCallback(() => {\n    const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n    if (IS_SERVER6) {\n      return initialValueToUse;\n    }\n    try {\n      const raw = window.sessionStorage.getItem(key);\n      return raw ? deserializer(raw) : initialValueToUse;\n    } catch (error) {\n      console.warn(`Error reading sessionStorage key \\u201C${key}\\u201D:`, error);\n      return initialValueToUse;\n    }\n  }, [initialValue, key, deserializer]);\n  const [storedValue, setStoredValue] = useState(() => {\n    if (initializeWithValue) {\n      return readValue();\n    }\n    return initialValue instanceof Function ? initialValue() : initialValue;\n  });\n  const setValue = useEventCallback((value) => {\n    if (IS_SERVER6) {\n      console.warn(\n        `Tried setting sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    try {\n      const newValue = value instanceof Function ? value(readValue()) : value;\n      window.sessionStorage.setItem(key, serializer(newValue));\n      setStoredValue(newValue);\n      window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n    } catch (error) {\n      console.warn(`Error setting sessionStorage key \\u201C${key}\\u201D:`, error);\n    }\n  });\n  const removeValue = useEventCallback(() => {\n    if (IS_SERVER6) {\n      console.warn(\n        `Tried removing sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n      );\n    }\n    const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n    window.sessionStorage.removeItem(key);\n    setStoredValue(defaultValue);\n    window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n  });\n  useEffect(() => {\n    setStoredValue(readValue());\n  }, [key]);\n  const handleStorageChange = useCallback(\n    (event) => {\n      if (event.key && event.key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    },\n    [key, readValue]\n  );\n  useEventListener(\"storage\", handleStorageChange);\n  useEventListener(\"session-storage\", handleStorageChange);\n  return [storedValue, setValue, removeValue];\n}\nfunction useStep(maxStep) {\n  const [currentStep, setCurrentStep] = useState(1);\n  const canGoToNextStep = currentStep + 1 <= maxStep;\n  const canGoToPrevStep = currentStep - 1 > 0;\n  const setStep = useCallback(\n    (step) => {\n      const newStep = step instanceof Function ? step(currentStep) : step;\n      if (newStep >= 1 && newStep <= maxStep) {\n        setCurrentStep(newStep);\n        return;\n      }\n      throw new Error(\"Step not valid\");\n    },\n    [maxStep, currentStep]\n  );\n  const goToNextStep = useCallback(() => {\n    if (canGoToNextStep) {\n      setCurrentStep((step) => step + 1);\n    }\n  }, [canGoToNextStep]);\n  const goToPrevStep = useCallback(() => {\n    if (canGoToPrevStep) {\n      setCurrentStep((step) => step - 1);\n    }\n  }, [canGoToPrevStep]);\n  const reset = useCallback(() => {\n    setCurrentStep(1);\n  }, []);\n  return [\n    currentStep,\n    {\n      goToNextStep,\n      goToPrevStep,\n      canGoToNextStep,\n      canGoToPrevStep,\n      setStep,\n      reset\n    }\n  ];\n}\n\n// src/useTernaryDarkMode/useTernaryDarkMode.ts\nvar COLOR_SCHEME_QUERY2 = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY2 = \"usehooks-ts-ternary-dark-mode\";\nfunction useTernaryDarkMode({\n  defaultValue = \"system\",\n  localStorageKey = LOCAL_STORAGE_KEY2,\n  initializeWithValue = true\n} = {}) {\n  const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY2, { initializeWithValue });\n  const [mode, setMode] = useLocalStorage(localStorageKey, defaultValue, {\n    initializeWithValue\n  });\n  const isDarkMode = mode === \"dark\" || mode === \"system\" && isDarkOS;\n  const toggleTernaryDarkMode = () => {\n    const modes = [\"light\", \"system\", \"dark\"];\n    setMode((prevMode) => {\n      const nextIndex = (modes.indexOf(prevMode) + 1) % modes.length;\n      return modes[nextIndex];\n    });\n  };\n  return {\n    isDarkMode,\n    ternaryDarkMode: mode,\n    setTernaryDarkMode: setMode,\n    toggleTernaryDarkMode\n  };\n}\nfunction useTimeout(callback, delay) {\n  const savedCallback = useRef(callback);\n  useIsomorphicLayoutEffect(() => {\n    savedCallback.current = callback;\n  }, [callback]);\n  useEffect(() => {\n    if (!delay && delay !== 0) {\n      return;\n    }\n    const id = setTimeout(() => {\n      savedCallback.current();\n    }, delay);\n    return () => {\n      clearTimeout(id);\n    };\n  }, [delay]);\n}\nfunction useToggle(defaultValue) {\n  const [value, setValue] = useState(!!defaultValue);\n  const toggle = useCallback(() => {\n    setValue((x) => !x);\n  }, []);\n  return [value, toggle, setValue];\n}\nvar IS_SERVER7 = typeof window === \"undefined\";\nfunction useWindowSize(options = {}) {\n  let { initializeWithValue = true } = options;\n  if (IS_SERVER7) {\n    initializeWithValue = false;\n  }\n  const [windowSize, setWindowSize] = useState(() => {\n    if (initializeWithValue) {\n      return {\n        width: window.innerWidth,\n        height: window.innerHeight\n      };\n    }\n    return {\n      width: void 0,\n      height: void 0\n    };\n  });\n  const debouncedSetWindowSize = useDebounceCallback(\n    setWindowSize,\n    options.debounceDelay\n  );\n  function handleSize() {\n    const setSize = options.debounceDelay ? debouncedSetWindowSize : setWindowSize;\n    setSize({\n      width: window.innerWidth,\n      height: window.innerHeight\n    });\n  }\n  useEventListener(\"resize\", handleSize);\n  useIsomorphicLayoutEffect(() => {\n    handleSize();\n  }, []);\n  return windowSize;\n}\n\nexport { useBoolean, useClickAnyWhere, useCopyToClipboard, useCountdown, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDocumentTitle, useEventCallback, useEventListener, useHover, useIntersectionObserver, useInterval, useIsClient, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useOnClickOutside, useReadLocalStorage, useResizeObserver, useScreen, useScript, useScrollLock, useSessionStorage, useStep, useTernaryDarkMode, useTimeout, useToggle, useUnmount, useWindowSize };\n","import * as _ from \"lodash-es\"\nimport { useMemo } from \"react\"\n\nimport { MultiDimDimensionChoices } from \"@ourworldindata/types\"\nimport { MultiDimDataPageConfig } from \"@ourworldindata/utils\"\n\n/**\n * Hook that resolves partial settings to complete settings by filling in default values\n * for any missing dimensions.\n */\nexport function useResolvedSettings(\n    settings: MultiDimDimensionChoices,\n    dimensions: MultiDimDataPageConfig[\"dimensions\"]\n): MultiDimDimensionChoices {\n    return useMemo(\n        () =>\n            _.mapValues(\n                dimensions,\n                (dim) =>\n                    settings[dim.slug] ?? Object.values(dim.choices)[0].slug\n            ),\n        [settings, dimensions]\n    )\n}\n","import { faCaretDown } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport cx from \"classnames\"\nimport { useState } from \"react\"\nimport {\n    Select,\n    Button,\n    Popover,\n    ListBox,\n    ListBoxSection,\n    Header,\n    Collection,\n    ListBoxItem,\n    Text,\n} from \"react-aria-components\"\nimport * as _ from \"lodash-es\"\n\nimport { CloseButton, RadioButton } from \"@ourworldindata/components\"\nimport { Choice, DimensionEnriched } from \"@ourworldindata/types\"\n\nfunction DimensionItem({ choice }: { choice: Choice }) {\n    return (\n        <ListBoxItem\n            className=\"md-menu__radio-button\"\n            id={choice.slug}\n            textValue={choice.name}\n        >\n            {({ isSelected }) => (\n                <RadioButton\n                    checked={isSelected}\n                    onChange={_.noop}\n                    label={\n                        <>\n                            <Text className=\"md-label\" slot=\"label\">\n                                {choice.name}\n                            </Text>\n                            {choice.description && (\n                                <Text\n                                    className=\"md-description\"\n                                    slot=\"description\"\n                                >\n                                    {choice.description}\n                                </Text>\n                            )}\n                        </>\n                    }\n                />\n            )}\n        </ListBoxItem>\n    )\n}\n\nexport default function DimensionDropdown({\n    className,\n    dimension,\n    value,\n    onChange,\n    disabled,\n}: {\n    className?: string\n    dimension: DimensionEnriched\n    value: string\n    onChange: (value: string) => void\n    disabled?: boolean\n}) {\n    const [isOpen, setIsOpen] = useState(false)\n    const isDisabled = disabled || dimension.choices.length === 1\n    return (\n        <Select\n            className={cx(\"md-settings__dropdown\", className)}\n            isDisabled={isDisabled}\n            isOpen={isOpen}\n            onOpenChange={setIsOpen}\n            selectedKey={value}\n            onSelectionChange={(key) => {\n                if (typeof key === \"string\") onChange(key)\n            }}\n            aria-label={dimension.name}\n        >\n            <Button\n                className=\"md-settings__dropdown-toggle\"\n                data-track-note=\"multi-dim-choice-dropdown\"\n            >\n                <span className=\"md-settings__dropdown-label\">\n                    {dimension.name}\n                </span>\n                <span className=\"md-settings__dropdown-current-choice\">\n                    {dimension.choicesBySlug[value].name}\n                </span>\n                <div>\n                    {/* The div is neccesary to keep the icon `display: inline`,\n            so it aligns with the text correctly. */}\n                    <FontAwesomeIcon icon={faCaretDown} />\n                </div>\n            </Button>\n            <Popover\n                className=\"md-menu\"\n                // Avoid multiple of 4 to increase the chance the next option is\n                // partially visible when scrolling is required.\n                maxHeight={393}\n                placement=\"bottom start\"\n                offset={4}\n            >\n                <div className=\"md-menu__overlay-header\">\n                    <div>\n                        <h2 className=\"md-menu__overlay-header-title\">\n                            {dimension.name}\n                        </h2>\n                        {dimension.description && (\n                            <p className=\"md-menu__dimension-description\">\n                                {dimension.description}\n                            </p>\n                        )}\n                    </div>\n                    <CloseButton\n                        className=\"md-menu__overlay-header-close-button\"\n                        onClick={() => setIsOpen(false)}\n                    />\n                </div>\n                <ListBox>\n                    {Object.entries(dimension.choicesByGroup).map(\n                        ([groupLabel, groupChoices]) =>\n                            groupLabel !== \"undefined\" ? (\n                                <ListBoxSection\n                                    key={groupLabel}\n                                    className=\"md-menu__group\"\n                                >\n                                    <Header className=\"md-menu__group-label\">\n                                        {groupLabel}\n                                    </Header>\n                                    <Collection>\n                                        {groupChoices.map((choice) => (\n                                            <DimensionItem\n                                                key={choice.slug}\n                                                choice={choice}\n                                            />\n                                        ))}\n                                    </Collection>\n                                </ListBoxSection>\n                            ) : (\n                                groupChoices.map((choice) => (\n                                    <DimensionItem\n                                        key={choice.slug}\n                                        choice={choice}\n                                    />\n                                ))\n                            )\n                    )}\n                </ListBox>\n            </Popover>\n        </Select>\n    )\n}\n","import cx from \"classnames\"\nimport { faMinus, faPlus } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { forwardRef, useState } from \"react\"\n\nimport {\n    DimensionEnriched,\n    MultiDimDimensionChoices,\n} from \"@ourworldindata/types\"\nimport DimensionDropdown from \"./DimensionDropdown.js\"\n\nconst MultiDimDropdowns = forwardRef<\n    HTMLDivElement,\n    {\n        className?: string\n        availableSettings: Record<string, DimensionEnriched>\n        resolvedSettings: MultiDimDimensionChoices\n        onChange: (settings: MultiDimDimensionChoices) => void\n        collapsedCount: number\n        disabled?: boolean\n    }\n>(function MultiDimDropdowns(\n    {\n        className,\n        availableSettings,\n        resolvedSettings,\n        onChange,\n        collapsedCount,\n        disabled,\n    },\n    ref\n) {\n    const [isExpanded, setIsExpanded] = useState(false)\n    const dimensionsArray = Object.values(availableSettings)\n    const needsToggle = dimensionsArray.length > collapsedCount\n\n    return (\n        <div className={cx(\"md-dropdowns\", className)} ref={ref}>\n            {dimensionsArray.map((dim, index) => (\n                <DimensionDropdown\n                    key={dim.slug}\n                    className={cx({\n                        \"md-settings__dropdown-toggle--hidden\":\n                            !isExpanded && index >= collapsedCount,\n                    })}\n                    dimension={dim}\n                    value={resolvedSettings[dim.slug]}\n                    onChange={(value) => {\n                        onChange({\n                            ...resolvedSettings,\n                            [dim.slug]: value,\n                        })\n                    }}\n                    disabled={disabled}\n                />\n            ))}\n            {needsToggle && (\n                <button\n                    className=\"md-dropdowns__toggle\"\n                    onClick={() => setIsExpanded(!isExpanded)}\n                    type=\"button\"\n                    aria-expanded={isExpanded}\n                >\n                    <FontAwesomeIcon\n                        className=\"md-dropdowns__toggle-icon\"\n                        icon={isExpanded ? faMinus : faPlus}\n                        aria-hidden=\"true\"\n                    />\n                    <span className=\"md-dropdowns__toggle-text\">\n                        {isExpanded ? \"Show less\" : \"Show more\"}\n                    </span>\n                </button>\n            )}\n        </div>\n    )\n})\n\nexport default MultiDimDropdowns\n","import cx from \"classnames\"\nimport { useMemo, useState, useRef, useCallback } from \"react\"\nimport { useMediaQuery, useResizeObserver } from \"usehooks-ts\"\n\nimport { MultiDimDimensionChoices } from \"@ourworldindata/types\"\nimport { MultiDimDataPageConfig } from \"@ourworldindata/utils\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport { useResolvedSettings } from \"./multiDimSettings.js\"\nimport MultiDimDropdowns from \"./MultiDimDropdowns.js\"\n\nexport default function MultiDimEmbedSettingsPanel({\n    className,\n    config,\n    settings,\n    onChange,\n}: {\n    className?: string\n    config: MultiDimDataPageConfig\n    settings: MultiDimDimensionChoices\n    onChange: (settings: MultiDimDimensionChoices) => void\n}) {\n    const { dimensions } = config\n    const resolvedSettings = useResolvedSettings(settings, dimensions)\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const containerRef = useRef<HTMLDivElement>(null)\n    const dropdownsRef = useRef<HTMLDivElement>(null)\n\n    const availableSettings = useMemo(() => {\n        return config.filterToAvailableChoices(resolvedSettings)\n            .dimensionsWithAvailableChoices\n    }, [resolvedSettings, config])\n\n    const dimensionsArray = useMemo(() => {\n        return Object.values(availableSettings)\n    }, [availableSettings])\n\n    const [collapsedCount, setCollapsedCount] = useState(dimensionsArray.length)\n\n    const calculateCollapsedCount = useCallback(() => {\n        if (isSmallScreen) {\n            const length = dimensionsArray.length\n            setCollapsedCount(length > 3 ? 2 : length)\n            return\n        }\n\n        const container = containerRef.current\n        const dropdownsContainer = dropdownsRef.current\n        if (!container || !dropdownsContainer) return\n\n        const containerWidth = container.offsetWidth\n        const containerPadding = 32 // 16px on each side\n        const buffer = 5 // For some reason the numbers don't add up precisely\n        const availableWidth = containerWidth - containerPadding - buffer\n        const gap = 8 // Gap between dropdowns (and also toggle button) as defined in CSS\n        const toggleButtonWidth = 90\n\n        const dropdowns = Array.from(\n            dropdownsContainer.querySelectorAll<HTMLDivElement>(\n                \".md-settings__dropdown\"\n            )\n        )\n\n        // First, try to fit all dropdowns without toggle button\n        let totalWidthAllDropdowns = 0\n        for (let i = 0; i < dropdowns.length; i++) {\n            const dropdownWidth = dropdowns[i].offsetWidth\n            totalWidthAllDropdowns += dropdownWidth\n            if (i > 0) totalWidthAllDropdowns += gap\n        }\n\n        let newCollapsedCount: number\n        if (totalWidthAllDropdowns <= availableWidth) {\n            // All dropdowns fit without toggle button\n            newCollapsedCount = dropdowns.length\n        } else {\n            // Not all dropdowns fit, so we need toggle button\n            // Try to fit as many as possible with toggle button space reserved\n            let totalWidth = 0\n            let fittingDropdowns = 0\n            const availableWidthWithToggle = availableWidth - toggleButtonWidth\n\n            for (const dropdown of dropdowns) {\n                // We always add the gap, because it exists also between the\n                // last dropdown and the toggle button.\n                const dropdownWidth = dropdown.offsetWidth + gap\n                const totalWidthWithThisDropdown = totalWidth + dropdownWidth\n                if (totalWidthWithThisDropdown <= availableWidthWithToggle) {\n                    totalWidth = totalWidthWithThisDropdown\n                    fittingDropdowns++\n                } else {\n                    break\n                }\n            }\n\n            // Ensure at least 1 dropdown is visible if there are any\n            newCollapsedCount = Math.max(1, fittingDropdowns)\n        }\n\n        setCollapsedCount(newCollapsedCount)\n    }, [dimensionsArray.length, isSmallScreen])\n\n    useResizeObserver({\n        ref: containerRef as React.RefObject<HTMLDivElement>,\n        onResize: calculateCollapsedCount,\n    })\n\n    return (\n        <div className={cx(\"md-embed-settings\", className)} ref={containerRef}>\n            <div className=\"h6-black-caps md-embed-settings__header\">\n                Configure the data\n            </div>\n            <MultiDimDropdowns\n                ref={dropdownsRef}\n                availableSettings={availableSettings}\n                resolvedSettings={resolvedSettings}\n                onChange={onChange}\n                collapsedCount={collapsedCount}\n            />\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { useEffect, useMemo, useRef } from \"react\"\n\nimport {\n    GrapherAnalytics,\n    GrapherProgrammaticInterface,\n} from \"@ourworldindata/grapher\"\nimport { MultiDimDimensionChoices } from \"@ourworldindata/types\"\nimport { MultiDimDataPageConfig } from \"@ourworldindata/utils\"\nimport {\n    ADMIN_BASE_URL,\n    BAKED_GRAPHER_URL,\n    DATA_API_URL,\n} from \"../../settings/clientSettings.js\"\n\nexport const analytics = new GrapherAnalytics()\n\n/**\n * Used to create a base grapher config for an mdim shared among all views.\n * @param additionalConfig - Additional config to merge with the base config.\n */\nexport const useBaseGrapherConfig = (\n    additionalConfig?: Partial<GrapherProgrammaticInterface>\n) => {\n    return useMemo(() => {\n        return {\n            bakedGrapherURL: BAKED_GRAPHER_URL,\n            adminBaseUrl: ADMIN_BASE_URL,\n            dataApiUrl: DATA_API_URL,\n            canHideExternalControlsInEmbed: true,\n            ...additionalConfig,\n        }\n    }, [additionalConfig])\n}\n\nexport function useMultiDimAnalytics(\n    slug: string | null,\n    config: MultiDimDataPageConfig,\n    settings: MultiDimDimensionChoices\n) {\n    // Settings might be a different object with the same properties, so we\n    // can't rely on React's equality check.\n    const oldSettingsRef = useRef<MultiDimDimensionChoices | null>(null)\n    useEffect(() => {\n        // Log analytics event on page load and when the settings change.\n        if (slug && !_.isEqual(settings, oldSettingsRef.current)) {\n            const newView = config.findViewByDimensions(settings)\n            if (newView) {\n                analytics.logGrapherView(slug, {\n                    viewConfigId: newView.fullConfigId,\n                })\n            }\n            oldSettingsRef.current = { ...settings }\n        }\n    }, [config, slug, settings])\n}\n","import { runInAction } from \"mobx\"\nimport {\n    useCallback,\n    useContext,\n    useEffect,\n    useMemo,\n    useRef,\n    useState,\n} from \"react\"\nimport * as Sentry from \"@sentry/react\"\nimport {\n    getCachingInputTableFetcher,\n    Grapher,\n    GrapherProgrammaticInterface,\n    useMaybeGlobalGrapherStateRef,\n    GuidedChartContext,\n    loadCatalogData,\n} from \"@ourworldindata/grapher\"\nimport {\n    extractMultiDimChoicesFromSearchParams,\n    GRAPHER_TAB_QUERY_PARAMS,\n    GrapherQueryParams,\n    MultiDimDataPageConfig,\n    MultiDimDimensionChoices,\n} from \"@ourworldindata/utils\"\nimport {\n    AdditionalGrapherDataFetchFn,\n    ArchiveContext,\n} from \"@ourworldindata/types\"\nimport { useElementBounds } from \"../hooks.js\"\nimport { cachedGetGrapherConfigByUuid } from \"./api.js\"\nimport MultiDimEmbedSettingsPanel from \"./MultiDimEmbedSettingsPanel.js\"\nimport { useBaseGrapherConfig, useMultiDimAnalytics } from \"./hooks.js\"\nimport {\n    BAKED_GRAPHER_URL,\n    CATALOG_URL,\n    DATA_API_URL,\n} from \"../../settings/clientSettings.js\"\n\nexport default function MultiDim({\n    config,\n    localGrapherConfig,\n    slug,\n    queryStr,\n    archiveContext,\n    isPreviewing,\n}: {\n    config: MultiDimDataPageConfig\n    localGrapherConfig?: GrapherProgrammaticInterface\n    slug: string | null\n    queryStr: string\n    archiveContext?: ArchiveContext\n    isPreviewing?: boolean\n}) {\n    const assetMap =\n        archiveContext?.type === \"archive-page\"\n            ? archiveContext.assets.runtime\n            : undefined\n    const manager = useRef(localGrapherConfig?.manager ?? {})\n    const grapherStateRef = useMaybeGlobalGrapherStateRef({\n        manager: manager.current,\n        queryStr,\n        additionalDataLoaderFn: ((catalogKey) =>\n            loadCatalogData(catalogKey, {\n                baseUrl: CATALOG_URL,\n                assetMap,\n            })) as AdditionalGrapherDataFetchFn,\n        archiveContext,\n        isConfigReady: false,\n    })\n\n    const grapherDataLoader = useRef(\n        getCachingInputTableFetcher(DATA_API_URL, archiveContext, isPreviewing)\n    )\n    const grapherContainerRef = useRef<HTMLDivElement>(null)\n    const bounds = useElementBounds(grapherContainerRef)\n    const additionalConfig = useMemo(\n        () => ({ archiveContext, isEmbeddedInAnOwidPage: true }),\n        [archiveContext]\n    )\n    const baseGrapherConfig = useBaseGrapherConfig(additionalConfig)\n    const searchParams = useMemo(\n        () => new URLSearchParams(queryStr),\n        [queryStr]\n    )\n    const hasControls = searchParams.get(\"hideControls\") !== \"true\"\n\n    const [settings, setSettings] = useState(() => {\n        const choices = extractMultiDimChoicesFromSearchParams(\n            searchParams,\n            config\n        )\n        return config.filterToAvailableChoices(choices).selectedChoices\n    })\n    // We want to preserve the grapher tab when switching between views, except\n    // when the switch happens via a guided chart link.\n    const [shouldPreserveTab, setShouldPreserveTab] = useState(true)\n    const [additionalQueryParams, setAdditionalQueryParams] =\n        useState<GrapherQueryParams | null>(null)\n\n    const handleBaseSettingsChange = useCallback(\n        (settings: MultiDimDimensionChoices) => {\n            const { selectedChoices } =\n                config.filterToAvailableChoices(settings)\n            setSettings(selectedChoices)\n        },\n        [config]\n    )\n\n    const handleSettingsChange = useCallback(\n        (settings: MultiDimDimensionChoices) => {\n            handleBaseSettingsChange(settings)\n            setShouldPreserveTab(true)\n            setAdditionalQueryParams(null)\n        },\n        [handleBaseSettingsChange]\n    )\n\n    const handleGuidedChartSettingsChange = useCallback(\n        (\n            settings: MultiDimDimensionChoices,\n            queryParams: GrapherQueryParams\n        ) => {\n            handleBaseSettingsChange(settings)\n            setShouldPreserveTab(false)\n            setAdditionalQueryParams(queryParams)\n        },\n        [handleBaseSettingsChange]\n    )\n\n    useMultiDimAnalytics(slug, config, settings)\n\n    // Register with GuidedChartContext for guided chart link support\n    const guidedChartContext = useContext(GuidedChartContext)\n    const hasRegistered = useRef(false)\n    useEffect(() => {\n        if (guidedChartContext?.registerMultiDim && !hasRegistered.current) {\n            guidedChartContext.registerMultiDim({\n                config,\n                onSettingsChange: handleGuidedChartSettingsChange,\n                grapherContainerRef: grapherContainerRef,\n            })\n            hasRegistered.current = true\n        }\n    }, [guidedChartContext, config, handleGuidedChartSettingsChange])\n\n    // NOTE (Martin): We used to use `grapherState.isDataReady` here to prevent\n    // an edge case race condition on a slow network from setting incorrect\n    // data. However, that caused flickering when switching between guided chart\n    // links, which was even worse and I didn't figure out how else to fix it\n    // than to remove the `grapherState.isDataReady` usage.\n    useEffect(() => {\n        // Prevent a race condition from setting incorrect data.\n        // https://react.dev/learn/synchronizing-with-effects#fetching-data\n        let ignoreFetchedData = false\n\n        const grapherState = grapherStateRef.current\n        if (!grapherState) return\n\n        const newView = config.findViewByDimensions(settings)\n        if (!newView) {\n            throw new Error(\n                `No view found for dimensions: ${JSON.stringify(settings)}`\n            )\n        }\n\n        const variables = newView.indicators?.[\"y\"]\n        const adminEditPath =\n            variables?.length === 1\n                ? `variables/${variables[0].id}/config`\n                : undefined\n        const analyticsContext = {\n            mdimSlug: slug ?? undefined,\n            mdimViewConfigId: newView.fullConfigId,\n        }\n        manager.current.adminEditPath = adminEditPath\n        manager.current.analyticsContext = analyticsContext\n        manager.current.adminCreateNarrativeChartPath = `narrative-charts/create?type=multiDim&chartConfigId=${newView.fullConfigId}`\n        if (slug) manager.current.baseUrl = `${BAKED_GRAPHER_URL}/${slug}`\n\n        const newGrapherParams: GrapherQueryParams = {\n            ...grapherState.changedParams,\n            ...settings,\n            ...additionalQueryParams,\n        }\n        if (shouldPreserveTab) {\n            // If the grapher has data, preserve the active tab in the new view,\n            // otherwise use the tab from the URL.\n            newGrapherParams.tab = grapherState.hasData\n                ? grapherState.mapGrapherTabToQueryParam(grapherState.activeTab)\n                : (searchParams.get(\"tab\") ?? undefined)\n        }\n\n        // reset map state if switching to a chart\n        if (newGrapherParams.tab !== GRAPHER_TAB_QUERY_PARAMS.map) {\n            newGrapherParams.globe = \"0\"\n            newGrapherParams.mapSelect = \"\"\n        }\n\n        const previousTab = grapherState.activeTab\n\n        cachedGetGrapherConfigByUuid(\n            newView.fullConfigId,\n            Boolean(isPreviewing),\n            assetMap\n        )\n            .then(async (viewGrapherConfig) => {\n                if (ignoreFetchedData) return\n                const grapherConfig = {\n                    ...viewGrapherConfig,\n                    ...baseGrapherConfig,\n                    ...localGrapherConfig,\n                }\n                if (slug) {\n                    grapherConfig.slug = slug // Needed for the URL used for sharing.\n                }\n                runInAction(() => {\n                    grapherState.setAuthoredVersion(grapherConfig)\n                    grapherState.reset()\n                    grapherState.updateFromObject(grapherConfig)\n                    grapherState.isConfigReady = true\n                    grapherState.populateFromQueryParams(newGrapherParams)\n                })\n\n                await grapherDataLoader\n                    .current(\n                        grapherConfig.dimensions ?? [],\n                        grapherConfig.selectedEntityColors\n                    )\n                    .then((table) => {\n                        if (table) {\n                            runInAction(() => {\n                                grapherState.inputTable = table\n                            })\n                        }\n                    })\n\n                // The below code needs to run after the data has been loaded, so that it has access\n                // to the table and its time range\n                runInAction(() => {\n                    // When switching between mdim views, we usually preserve the tab.\n                    // However, if the new chart doesn't support the previously selected tab,\n                    // Grapher automatically switches to a supported one. In such cases,\n                    // we call onChartSwitching to make adjustments that ensure the new view\n                    // is sensible (e.g. updating the time selection when switching from a\n                    // single-time chart like a discrete bar chart to a multi-time chart like\n                    // a line chart).\n                    const currentTab = grapherState.activeTab\n                    if (previousTab !== currentTab)\n                        grapherState.onChartSwitching(previousTab, currentTab)\n                })\n            })\n            .catch(Sentry.captureException)\n        return () => {\n            ignoreFetchedData = true\n        }\n    }, [\n        assetMap,\n        config,\n        isPreviewing,\n        localGrapherConfig,\n        searchParams,\n        settings,\n        slug,\n        shouldPreserveTab,\n        additionalQueryParams,\n        baseGrapherConfig,\n        manager,\n        grapherStateRef,\n    ])\n\n    useEffect(() => {\n        if (grapherStateRef.current) {\n            runInAction(() => {\n                grapherStateRef.current.externalBounds = bounds\n            })\n        }\n    }, [bounds, grapherStateRef])\n\n    return (\n        <div className=\"multi-dim-container full-width-on-mobile\">\n            {hasControls && (\n                <MultiDimEmbedSettingsPanel\n                    className=\"multi-dim-settings\"\n                    config={config}\n                    settings={settings}\n                    onChange={handleSettingsChange}\n                />\n            )}\n            <div\n                className=\"multi-dim-grapher-container\"\n                ref={grapherContainerRef}\n            >\n                <Grapher\n                    grapherState={grapherStateRef.current}\n                    {...baseGrapherConfig}\n                />\n            </div>\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport {\n    GrapherProgrammaticInterface,\n    GRAPHER_EMBEDDED_FIGURE_ATTR,\n    migrateGrapherConfigToLatestVersion,\n    GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR,\n    renderGrapherIntoContainer,\n} from \"@ourworldindata/grapher\"\nimport {\n    fetchText,\n    isPresent,\n    Url,\n    fetchWithRetry,\n    NarrativeChartInfo,\n    searchParamsToMultiDimView,\n    MultiDimDataPageConfig,\n} from \"@ourworldindata/utils\"\nimport { action, makeObservable } from \"mobx\"\nimport {\n    Explorer,\n    ExplorerProps,\n    EXPLORER_EMBEDDED_FIGURE_SELECTOR,\n    buildExplorerProps,\n} from \"@ourworldindata/explorer\"\nimport {\n    GRAPHER_PREVIEW_CLASS,\n    MultiDimDataPageConfigEnriched,\n} from \"@ourworldindata/types\"\nimport {\n    ADMIN_BASE_URL,\n    BAKED_GRAPHER_URL,\n    CATALOG_URL,\n    DATA_API_URL,\n    GRAPHER_DYNAMIC_CONFIG_URL,\n    MULTI_DIM_DYNAMIC_CONFIG_URL,\n} from \"../../settings/clientSettings.js\"\n// import { embedDynamicCollectionGrapher } from \"../collections/DynamicCollection.js\"\nimport { match } from \"ts-pattern\"\nimport MultiDim from \"../multiDim/MultiDim.js\"\nimport { createRoot } from \"react-dom/client\"\n\ntype EmbedType = \"grapher\" | \"explorer\" | \"multiDim\" | \"narrativeChart\"\n\nconst figuresFromDOM = (\n    container: HTMLElement | Document = document,\n    selector: string\n) =>\n    Array.from(\n        container.querySelectorAll<HTMLElement>(`*[${selector}]`)\n    ).filter(isPresent)\n\nclass MultiEmbedder {\n    private figuresObserver: IntersectionObserver | undefined\n    private isPreviewing?: boolean\n\n    constructor() {\n        makeObservable(this)\n        if (typeof window !== \"undefined\" && \"IntersectionObserver\" in window) {\n            this.figuresObserver = new IntersectionObserver(\n                this.onIntersecting.bind(this),\n                {\n                    rootMargin: \"200%\",\n                }\n            )\n        } else if (typeof window === \"object\" && typeof document === \"object\") {\n            // only show the warning when we're in something that roughly resembles a browser\n            console.warn(\n                \"IntersectionObserver not available; interactive embeds won't load on this page\"\n            )\n        }\n    }\n\n    /**\n     * Finds all <figure data-grapher-src=\"...\"> and <figure\n     * data-explorer-src=\"...\"> elements in the document and loads the\n     * iframeless interactive charts when the user's viewport approaches them.\n     * Uses an IntersectionObserver (see constructor).\n     *\n     * BEWARE: this method is hardcoded in some scripts, make sure to check\n     * thoroughly before making any changes.\n     */\n    embedAll(isPreviewing?: boolean) {\n        this.observeFigures(undefined, isPreviewing)\n    }\n\n    /**\n     * Make the embedder aware of new <figure> elements that are injected into the DOM.\n     *\n     * Use this when you programmatically create/replace charts.\n     */\n    observeFigures(\n        container: HTMLElement | Document = document,\n        isPreviewing?: boolean\n    ) {\n        this.isPreviewing = isPreviewing\n        const figures = figuresFromDOM(container, GRAPHER_EMBEDDED_FIGURE_ATTR)\n            .concat(\n                figuresFromDOM(container, EXPLORER_EMBEDDED_FIGURE_SELECTOR)\n            )\n            .concat(\n                figuresFromDOM(\n                    container,\n                    GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR\n                )\n            )\n\n        figures.forEach((figure) => {\n            this.figuresObserver?.observe(figure)\n        })\n    }\n\n    async onIntersecting(entries: IntersectionObserverEntry[]) {\n        entries.forEach((entry) => {\n            if (entry.isIntersecting) {\n                void this.renderInteractiveFigure(entry.target)\n            }\n        })\n    }\n\n    async renderExplorerIntoFigure(figure: Element) {\n        const explorerUrl = figure.getAttribute(\n            EXPLORER_EMBEDDED_FIGURE_SELECTOR\n        )\n\n        if (!explorerUrl) return\n\n        const { fullUrl, queryStr } = Url.fromURL(explorerUrl)\n\n        const html = await fetchText(fullUrl)\n        const props: ExplorerProps = await buildExplorerProps(html, queryStr)\n\n        const root = createRoot(figure)\n        root.render(<Explorer {...props} />)\n    }\n\n    private async _renderGrapherComponentIntoFigure(\n        figure: Element,\n        {\n            configUrl,\n            embedUrl,\n            additionalConfig,\n        }: {\n            configUrl: string\n            embedUrl?: Url\n            additionalConfig?: Partial<GrapherProgrammaticInterface>\n        }\n    ) {\n        const { queryStr } = embedUrl ?? {}\n\n        figure.classList.remove(GRAPHER_PREVIEW_CLASS)\n        const common: GrapherProgrammaticInterface = {\n            isEmbeddedInAnOwidPage: true,\n            queryStr,\n            adminBaseUrl: ADMIN_BASE_URL,\n            bakedGrapherURL: BAKED_GRAPHER_URL,\n        }\n\n        const fetchedGrapherPageConfig = await fetchWithRetry(configUrl).then(\n            (res) => res.json()\n        )\n        const grapherPageConfig = migrateGrapherConfigToLatestVersion(\n            fetchedGrapherPageConfig\n        )\n\n        const config = _.merge(\n            {}, // merge mutates the first argument\n            grapherPageConfig,\n            common,\n            additionalConfig\n        )\n\n        renderGrapherIntoContainer({\n            config,\n            container: figure,\n            dataApiUrl: DATA_API_URL,\n            catalogUrl: CATALOG_URL,\n            noCache: this.isPreviewing,\n        })\n\n        // Special handling for shared collections\n        // TODO: re-enable this\n        // if (window.location.pathname.startsWith(\"/collection/custom\")) {\n        //     embedDynamicCollectionGrapher(grapherRef, figure)\n        // }\n    }\n\n    async renderGrapherIntoFigure(figure: Element) {\n        const embedUrlRaw = figure.getAttribute(GRAPHER_EMBEDDED_FIGURE_ATTR)\n        if (!embedUrlRaw) return\n        const embedUrl = Url.fromURL(embedUrlRaw)\n\n        const configUrl = `${GRAPHER_DYNAMIC_CONFIG_URL}/${embedUrl.slug}.config.json${this.isPreviewing ? \"?nocache\" : \"\"}`\n\n        await this._renderGrapherComponentIntoFigure(figure, {\n            configUrl,\n            embedUrl,\n        })\n    }\n\n    async _renderMultiDimWithControlsIntoFigure(\n        figure: Element,\n        multiDimConfig: MultiDimDataPageConfigEnriched,\n        slug: string,\n        queryStr: string\n    ) {\n        figure.classList.remove(GRAPHER_PREVIEW_CLASS)\n        const root = createRoot(figure)\n        root.render(\n            <MultiDim\n                slug={slug}\n                config={MultiDimDataPageConfig.fromObject(multiDimConfig)}\n                queryStr={queryStr}\n                isPreviewing={this.isPreviewing}\n            />\n        )\n    }\n\n    async renderMultiDimIntoFigure(figure: Element) {\n        const embedUrlRaw = figure.getAttribute(GRAPHER_EMBEDDED_FIGURE_ATTR)\n        if (!embedUrlRaw) return\n        const embedUrl = Url.fromURL(embedUrlRaw)\n\n        const { queryStr, slug } = embedUrl\n        if (!slug) return\n\n        const mdimConfigUrl = `${MULTI_DIM_DYNAMIC_CONFIG_URL}/${slug}.json${this.isPreviewing ? \"?nocache\" : \"\"}`\n        const multiDimConfig = await fetchWithRetry(mdimConfigUrl).then((res) =>\n            res.json()\n        )\n\n        if (embedUrl.queryParams.hideControls === \"true\") {\n            const view = searchParamsToMultiDimView(\n                multiDimConfig,\n                new URLSearchParams(queryStr)\n            )\n            const configUrl = `${GRAPHER_DYNAMIC_CONFIG_URL}/by-uuid/${view.fullConfigId}.config.json${this.isPreviewing ? \"?nocache\" : \"\"}`\n            await this._renderGrapherComponentIntoFigure(figure, {\n                configUrl,\n                embedUrl,\n            })\n        } else {\n            await this._renderMultiDimWithControlsIntoFigure(\n                figure,\n                multiDimConfig,\n                slug,\n                queryStr\n            )\n        }\n    }\n\n    async renderNarrativeChartIntoFigure(figure: Element) {\n        const narrativeChartInfoRaw = figure.getAttribute(\n            GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR\n        )\n        if (!narrativeChartInfoRaw) return\n        const narrativeChartInfo: NarrativeChartInfo = JSON.parse(\n            narrativeChartInfoRaw\n        )\n        if (!narrativeChartInfo) return\n\n        const configUrl = `${GRAPHER_DYNAMIC_CONFIG_URL}/by-uuid/${narrativeChartInfo.chartConfigId}.config.json${this.isPreviewing ? \"?nocache\" : \"\"}`\n\n        await this._renderGrapherComponentIntoFigure(figure, {\n            configUrl,\n            additionalConfig: {\n                hideRelatedQuestion: true,\n                hideShareButton: true,\n                hideExploreTheDataButton: false,\n                narrativeChartInfo,\n            },\n        })\n    }\n\n    @action.bound\n    async renderInteractiveFigure(figure: Element) {\n        const isExplorer = figure.hasAttribute(\n            EXPLORER_EMBEDDED_FIGURE_SELECTOR\n        )\n        const isMultiDim = figure.hasAttribute(\"data-is-multi-dim\")\n        const isNarrativeChart = figure.hasAttribute(\n            GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR\n        )\n\n        const embedType: EmbedType = isExplorer\n            ? \"explorer\"\n            : isMultiDim\n              ? \"multiDim\"\n              : isNarrativeChart\n                ? \"narrativeChart\"\n                : \"grapher\"\n\n        // Stop observing visibility as soon as possible\n        this.figuresObserver?.unobserve(figure)\n\n        await match(embedType)\n            .with(\"explorer\", () => this.renderExplorerIntoFigure(figure))\n            .with(\"multiDim\", () => this.renderMultiDimIntoFigure(figure))\n            .with(\"narrativeChart\", () =>\n                this.renderNarrativeChartIntoFigure(figure)\n            )\n            .with(\"grapher\", () => this.renderGrapherIntoFigure(figure))\n            .exhaustive()\n    }\n}\n\nexport const MultiEmbedderSingleton = new MultiEmbedder()\n","import * as _ from \"lodash-es\"\nimport {\n    useEffect,\n    RefObject,\n    useState,\n    useCallback,\n    useMemo,\n    useSyncExternalStore,\n} from \"react\"\nimport { MultiEmbedderSingleton } from \"./multiembedder/MultiEmbedder.js\"\nimport { Bounds, getWindowQueryStr } from \"@ourworldindata/utils\"\nimport { DEFAULT_GRAPHER_BOUNDS } from \"@ourworldindata/grapher\"\nimport { useResizeObserver } from \"usehooks-ts\"\nimport { reaction } from \"mobx\"\n\nexport const useTriggerWhenClickOutside = (\n    container: RefObject<HTMLElement | null>,\n    active: boolean,\n    trigger: () => void\n) => {\n    useEffect(() => {\n        if (!active) return\n        const handleClick = (e: MouseEvent) => {\n            if (container && !container.current?.contains(e.target as Node)) {\n                trigger()\n            }\n        }\n        document.addEventListener(\"mousedown\", handleClick)\n\n        return () => {\n            document.removeEventListener(\"mousedown\", handleClick)\n        }\n    }, [active, container, trigger])\n}\n\nexport enum ScrollDirection {\n    Up = \"up\",\n    Down = \"down\",\n}\n\nexport const useScrollDirection = () => {\n    const [direction, setDirection] = useState<null | ScrollDirection>(null)\n\n    useEffect(() => {\n        let lastScrollY = window.pageYOffset\n        const updateDirection = () => {\n            const scrollY = window.pageYOffset\n            setDirection(\n                scrollY > lastScrollY\n                    ? ScrollDirection.Down\n                    : ScrollDirection.Up\n            )\n            lastScrollY = scrollY\n        }\n\n        const updateDirectionThrottled = _.throttle(() => {\n            updateDirection()\n        }, 500)\n\n        document.addEventListener(\"scroll\", updateDirectionThrottled)\n        return () => {\n            document.removeEventListener(\"scroll\", updateDirectionThrottled)\n        }\n    })\n\n    return direction\n}\n\nexport const useEmbedChart = (\n    activeChartIdx: number,\n    refChartContainer: React.RefObject<HTMLDivElement | null>,\n    isPreviewing: boolean\n) => {\n    useEffect(() => {\n        if (refChartContainer.current) {\n            // Track newly injected <figure> elements in embedder\n            MultiEmbedderSingleton.observeFigures(\n                refChartContainer.current,\n                isPreviewing\n            )\n        }\n    }, [activeChartIdx, refChartContainer, isPreviewing])\n}\n\nexport const useTriggerOnEscape = (\n    trigger: VoidFunction,\n    { active = true }: { active?: boolean } = {}\n) => {\n    useEffect(() => {\n        if (!active) return\n\n        const handleEscape = (e: KeyboardEvent) => {\n            if (e.key === \"Escape\") {\n                trigger()\n            }\n        }\n        document.addEventListener(\"keydown\", handleEscape)\n        return () => {\n            document.removeEventListener(\"keydown\", handleEscape)\n        }\n    }, [trigger, active])\n}\n\n// Auto-updating Bounds object based on ResizeObserver\n// Optionally throttles the bounds updates\nexport const useElementBounds = (\n    ref: RefObject<HTMLElement | null>,\n    initialValue: Bounds = DEFAULT_GRAPHER_BOUNDS,\n    throttleTime: number | undefined = 100\n) => {\n    const [bounds, setBounds] = useState<Bounds>(initialValue)\n\n    type Size = {\n        width: number | undefined\n        height: number | undefined\n    }\n\n    const updateBoundsImmediately = useCallback((size: Size) => {\n        if (size.width === undefined || size.height === undefined) return\n        setBounds(new Bounds(0, 0, size.width, size.height))\n    }, [])\n\n    const updateBoundsThrottled = useMemo(\n        () =>\n            throttleTime !== undefined\n                ? _.throttle(\n                      updateBoundsImmediately,\n                      throttleTime,\n\n                      // We use `leading` because, in many cases, there is only a single resize event (e.g. phone screen\n                      // orientation change), and we want to optimize for a fast response time in that case\n                      { leading: true }\n                  )\n                : updateBoundsImmediately,\n        [throttleTime, updateBoundsImmediately]\n    )\n\n    useResizeObserver({\n        ref: ref as React.RefObject<HTMLDivElement>,\n        onResize: updateBoundsThrottled,\n    })\n\n    return bounds\n}\n\n// Transforms Mobx state into a functional React state, by setting up\n// a listener with Mobx's `reaction` and updating the React state.\n// Make sure that the `mobxStateGetter` function is wrapped in `useCallback`,\n// otherwise the listener will be set up on every render, causing\n// an infinite loop.\nexport const useMobxStateToReactState = <T>(\n    mobxStateGetter: () => T,\n    enabled: boolean = true\n) => {\n    const [state, setState] = useState(() =>\n        enabled ? mobxStateGetter() : undefined\n    )\n\n    useEffect(() => {\n        if (!enabled) return\n        const disposer = reaction(mobxStateGetter, setState, {\n            fireImmediately: true,\n        })\n        return disposer\n    }, [enabled, mobxStateGetter])\n    return state\n}\n\nexport const useWindowQueryParams = () => {\n    function subscribe(callback: () => void) {\n        const navigation = window.navigation\n        if (navigation) {\n            // At the time of writing (June 2025), the Navigation API is only\n            // available in Chrome/Edge 102+, and not in Firefox or Safari.\n            // https://caniuse.com/mdn-api_navigation\n            navigation.addEventListener(\"navigatesuccess\", callback)\n            return () => {\n                navigation.removeEventListener(\"navigatesuccess\", callback)\n            }\n        } else {\n            // Fall back to polling.\n            let lastQueryString = getWindowQueryStr()\n            const interval = setInterval(() => {\n                const currentQueryString = getWindowQueryStr()\n                if (currentQueryString !== lastQueryString) {\n                    lastQueryString = currentQueryString\n                    callback()\n                }\n            }, 1000)\n            return () => clearInterval(interval)\n        }\n    }\n\n    function getSnapshot() {\n        if (typeof window === \"undefined\") return \"\"\n        return getWindowQueryStr()\n    }\n\n    function getServerSnapshot() {\n        return \"\"\n    }\n\n    return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot)\n}\n","import { useMemo, useRef } from \"react\"\nimport {\n    FetchingGrapher,\n    GrapherProgrammaticInterface,\n} from \"@ourworldindata/grapher\"\nimport {\n    ADMIN_BASE_URL,\n    GRAPHER_DYNAMIC_CONFIG_URL,\n    BAKED_GRAPHER_URL,\n    DATA_API_URL,\n    CATALOG_URL,\n} from \"../settings/clientSettings.js\"\nimport { useElementBounds } from \"./hooks.js\"\n\nexport interface GrapherFigureViewProps {\n    slug?: string\n    configUrl?: string\n    config?: Partial<GrapherProgrammaticInterface>\n    useProvidedConfigOnly?: boolean // If true, will not fetch config from URL\n    queryStr?: string\n    isEmbeddedInAnOwidPage: boolean\n    isEmbeddedInADataPage: boolean\n    isPreviewing?: boolean\n}\n\nexport function GrapherFigureView(\n    props: GrapherFigureViewProps\n): React.ReactElement {\n    const slug = props.slug\n\n    if (!slug && !props.configUrl) {\n        console.error(\n            \"GrapherFigureView requires either a slug or a configUrl to be provided.\"\n        )\n    }\n\n    const base = useRef<HTMLDivElement>(null)\n    const bounds = useElementBounds(base)\n\n    const config: GrapherProgrammaticInterface = useMemo(() => {\n        return {\n            enableKeyboardShortcuts: true,\n            ...props.config,\n            bakedGrapherURL: BAKED_GRAPHER_URL,\n            adminBaseUrl: ADMIN_BASE_URL,\n            isEmbeddedInAnOwidPage: props.isEmbeddedInAnOwidPage,\n            isEmbeddedInADataPage: props.isEmbeddedInADataPage,\n        }\n    }, [\n        props.config,\n        props.isEmbeddedInAnOwidPage,\n        props.isEmbeddedInADataPage,\n    ])\n\n    if (props.configUrl && props.useProvidedConfigOnly) {\n        throw new Error(\n            \"useProvidedConfigOnly is true, but configUrl has been provided. This will not work as expected.\"\n        )\n    }\n\n    const slugConfigUrl = slug\n        ? `${GRAPHER_DYNAMIC_CONFIG_URL}/${slug}.config.json${props.isPreviewing ? \"?nocache\" : \"\"}`\n        : undefined\n\n    const configUrl = !props.useProvidedConfigOnly\n        ? (props.configUrl ?? slugConfigUrl)\n        : undefined\n\n    return (\n        <figure className=\"chart grapher-component\" ref={base}>\n            {bounds && (\n                <FetchingGrapher\n                    config={config}\n                    configUrl={configUrl}\n                    dataApiUrl={DATA_API_URL}\n                    catalogUrl={CATALOG_URL}\n                    archiveContext={config.archiveContext}\n                    queryStr={props.queryStr}\n                    externalBounds={bounds}\n                    noCache={props.isPreviewing}\n                />\n            )}\n        </figure>\n    )\n}\n","import { GRAPHER_PREVIEW_CLASS } from \"@ourworldindata/types\"\nimport { GrapherFigureView } from \"./GrapherFigureView.js\"\nimport cx from \"classnames\"\nimport GrapherImage from \"./GrapherImage.js\"\nimport { useIntersectionObserver, useIsClient } from \"usehooks-ts\"\nimport { GrapherProgrammaticInterface } from \"@ourworldindata/grapher\"\n\nexport interface GrapherWithFallbackProps {\n    slug?: string\n    configUrl?: string // Optional, if provided will override slug\n    useProvidedConfigOnly?: boolean // If true, will not fetch config from URL\n    className?: string\n    id?: string\n    enablePopulatingUrlParams?: boolean\n    config: Partial<GrapherProgrammaticInterface>\n    queryStr?: string\n    isEmbeddedInAnOwidPage: boolean\n    isEmbeddedInADataPage: boolean\n    isPreviewing?: boolean\n}\n\nexport function GrapherWithFallback(\n    props: GrapherWithFallbackProps\n): React.ReactElement {\n    const { slug, className, id, config, queryStr, isPreviewing } = props\n\n    if (!slug && !props.configUrl) {\n        console.error(\n            \"GrapherWithFallback requires either a slug or a configUrl to be provided.\"\n        )\n    }\n\n    const isClient = useIsClient()\n    const { ref, isIntersecting: hasBeenVisible } = useIntersectionObserver({\n        rootMargin: \"400px\",\n        // Only trigger once\n        freezeOnceVisible: true,\n    })\n\n    // Render fallback png when javascript disabled or while\n    // grapher is loading\n    const imageFallback = (\n        <figure\n            className={cx(\n                GRAPHER_PREVIEW_CLASS,\n                \"GrapherWithFallback__fallback\"\n            )}\n        >\n            {props.configUrl ? (\n                <GrapherImage\n                    url={props.configUrl}\n                    enablePopulatingUrlParams={props.enablePopulatingUrlParams}\n                />\n            ) : (\n                <GrapherImage\n                    slug={slug!}\n                    queryString={queryStr}\n                    enablePopulatingUrlParams={props.enablePopulatingUrlParams}\n                />\n            )}\n        </figure>\n    )\n\n    return (\n        <div\n            className={cx(\n                \"GrapherWithFallback\",\n                \"full-width-on-mobile\",\n                className\n            )}\n            id={id}\n            ref={ref}\n        >\n            {!isClient ? (\n                imageFallback\n            ) : hasBeenVisible ? (\n                <GrapherFigureView\n                    slug={slug}\n                    configUrl={props.configUrl}\n                    config={config}\n                    useProvidedConfigOnly={props.useProvidedConfigOnly}\n                    queryStr={queryStr}\n                    isEmbeddedInAnOwidPage={props.isEmbeddedInAnOwidPage}\n                    isEmbeddedInADataPage={props.isEmbeddedInADataPage}\n                    isPreviewing={isPreviewing}\n                />\n            ) : (\n                // Optional loading placeholder while waiting to come into view\n                imageFallback\n            )}\n        </div>\n    )\n}\n","import { createContext, useContext } from \"react\"\nimport { ArchiveContext } from \"@ourworldindata/types\"\n\nexport const DocumentContext = createContext<{\n    isPreviewing: boolean\n    archiveContext?: ArchiveContext\n}>({\n    isPreviewing: false,\n})\n\nexport function useDocumentContext() {\n    return useContext(DocumentContext)\n}\n","import * as _ from \"lodash-es\"\nimport { useState } from \"react\"\nimport * as React from \"react\"\nimport { RelatedChart } from \"@ourworldindata/utils\"\nimport { GRAPHER_PREVIEW_CLASS } from \"@ourworldindata/types\"\nimport { GalleryArrow } from \"./GalleryArrow.js\"\nimport { GalleryArrowDirection } from \"../SiteConstants.js\"\nimport { AllChartsListItem } from \"./AllChartsListItem.js\"\nimport { GrapherWithFallback } from \"../GrapherWithFallback.js\"\nimport { useDocumentContext } from \"../gdocs/DocumentContext.js\"\n\nexport const RELATED_CHARTS_CLASS_NAME = \"related-charts\"\n\nexport const RelatedCharts = ({\n    charts,\n    showKeyChartsOnly = false,\n}: {\n    charts: RelatedChart[]\n    showKeyChartsOnly?: boolean\n}) => {\n    const [activeChartIdx, setActiveChartIdx] = useState(0)\n    const { isPreviewing } = useDocumentContext()\n\n    const chartsToShow = showKeyChartsOnly\n        ? charts.filter((chart) => !!chart.keyChartLevel)\n        : charts\n\n    const sortedCharts = _.orderBy(\n        chartsToShow,\n        (chart) => chart.keyChartLevel,\n        \"desc\"\n    )\n\n    const isFirstSlideActive = activeChartIdx === 0\n    const isLastSlideActive = activeChartIdx === sortedCharts.length - 1\n    const activeChart = sortedCharts[activeChartIdx]\n    const activeChartSlug = activeChart?.slug\n\n    const onClickItem = (event: React.MouseEvent, idx: number) => {\n        // Allow opening charts in new tab/window with ⌘+CLICK\n        if (!event.metaKey && !event.shiftKey && !event.ctrlKey) {\n            event.preventDefault()\n            setActiveChartIdx(idx)\n        }\n    }\n\n    const figure = (\n        <GrapherWithFallback\n            slug={activeChartSlug}\n            className={GRAPHER_PREVIEW_CLASS}\n            id={`related-chart-${activeChartIdx}`}\n            enablePopulatingUrlParams={true}\n            isEmbeddedInAnOwidPage={true}\n            isEmbeddedInADataPage={false}\n            config={{\n                archiveContext: activeChart.archiveContext,\n                enableKeyboardShortcuts: false,\n            }}\n            isPreviewing={isPreviewing}\n        />\n    )\n\n    const singleChartView = (\n        <div className={RELATED_CHARTS_CLASS_NAME}>\n            <div className=\"grid grid-cols-12\">\n                <div className=\"related-charts__chart span-cols-7 span-md-cols-12\">\n                    {figure}\n                </div>\n            </div>\n        </div>\n    )\n\n    const multipleChartsView = (\n        <div className={RELATED_CHARTS_CLASS_NAME}>\n            <div className=\"grid grid-cols-12\">\n                <div className=\"related-charts__thumbnails span-cols-5 span-md-cols-12\">\n                    <ul className=\"related-charts__list\">\n                        {sortedCharts.map((chart, idx) => (\n                            <AllChartsListItem\n                                chart={chart}\n                                key={chart.slug}\n                                onClick={(e) => onClickItem(e, idx)}\n                                isActive={idx === activeChartIdx}\n                            />\n                        ))}\n                    </ul>\n                </div>\n                <div className=\"related-charts__chart span-cols-7 span-md-cols-12\">\n                    <div className=\"related-charts__figure\">{figure}</div>\n                    <div className=\"gallery-navigation\">\n                        <GalleryArrow\n                            disabled={isFirstSlideActive}\n                            onClick={() =>\n                                setActiveChartIdx(activeChartIdx - 1)\n                            }\n                            direction={GalleryArrowDirection.prev}\n                        ></GalleryArrow>\n                        <div className=\"gallery-pagination\">\n                            {`Chart ${activeChartIdx + 1} of ${\n                                sortedCharts.length\n                            }`}\n                        </div>\n                        <GalleryArrow\n                            disabled={isLastSlideActive}\n                            onClick={() =>\n                                setActiveChartIdx(activeChartIdx + 1)\n                            }\n                            direction={GalleryArrowDirection.next}\n                        ></GalleryArrow>\n                    </div>\n                </div>\n            </div>\n        </div>\n    )\n\n    return charts.length === 1 ? singleChartView : multipleChartsView\n}\n","// src/subscribable.ts\nvar Subscribable = class {\n  constructor() {\n    this.listeners = /* @__PURE__ */ new Set();\n    this.subscribe = this.subscribe.bind(this);\n  }\n  subscribe(listener) {\n    this.listeners.add(listener);\n    this.onSubscribe();\n    return () => {\n      this.listeners.delete(listener);\n      this.onUnsubscribe();\n    };\n  }\n  hasListeners() {\n    return this.listeners.size > 0;\n  }\n  onSubscribe() {\n  }\n  onUnsubscribe() {\n  }\n};\nexport {\n  Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n  // We need the wrapper function syntax below instead of direct references to\n  // global setTimeout etc.\n  //\n  // BAD: `setTimeout: setTimeout`\n  // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n  //\n  // If we use direct references here, then anything that wants to spy on or\n  // replace the global setTimeout (like tests) won't work since we'll already\n  // have a hard reference to the original implementation at the time when this\n  // file was imported.\n  setTimeout: (callback, delay) => setTimeout(callback, delay),\n  clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n  setInterval: (callback, delay) => setInterval(callback, delay),\n  clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n  // We cannot have TimeoutManager<T> as we must instantiate it with a concrete\n  // type at app boot; and if we leave that type, then any new timer provider\n  // would need to support ReturnType<typeof setTimeout>, which is infeasible.\n  //\n  // We settle for type safety for the TimeoutProvider type, and accept that\n  // this class is unsafe internally to allow for extension.\n  #provider = defaultTimeoutProvider;\n  #providerCalled = false;\n  setTimeoutProvider(provider) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (this.#providerCalled && provider !== this.#provider) {\n        console.error(\n          `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n          { previous: this.#provider, provider }\n        );\n      }\n    }\n    this.#provider = provider;\n    if (process.env.NODE_ENV !== \"production\") {\n      this.#providerCalled = false;\n    }\n  }\n  setTimeout(callback, delay) {\n    if (process.env.NODE_ENV !== \"production\") {\n      this.#providerCalled = true;\n    }\n    return this.#provider.setTimeout(callback, delay);\n  }\n  clearTimeout(timeoutId) {\n    this.#provider.clearTimeout(timeoutId);\n  }\n  setInterval(callback, delay) {\n    if (process.env.NODE_ENV !== \"production\") {\n      this.#providerCalled = true;\n    }\n    return this.#provider.setInterval(callback, delay);\n  }\n  clearInterval(intervalId) {\n    this.#provider.clearInterval(intervalId);\n  }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n  setTimeout(callback, 0);\n}\nexport {\n  TimeoutManager,\n  defaultTimeoutProvider,\n  systemSetTimeoutZero,\n  timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n  return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n  return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n  return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n  return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveEnabled(enabled, query) {\n  return typeof enabled === \"function\" ? enabled(query) : enabled;\n}\nfunction matchQuery(filters, query) {\n  const {\n    type = \"all\",\n    exact,\n    fetchStatus,\n    predicate,\n    queryKey,\n    stale\n  } = filters;\n  if (queryKey) {\n    if (exact) {\n      if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n        return false;\n      }\n    } else if (!partialMatchKey(query.queryKey, queryKey)) {\n      return false;\n    }\n  }\n  if (type !== \"all\") {\n    const isActive = query.isActive();\n    if (type === \"active\" && !isActive) {\n      return false;\n    }\n    if (type === \"inactive\" && isActive) {\n      return false;\n    }\n  }\n  if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n    return false;\n  }\n  if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n    return false;\n  }\n  if (predicate && !predicate(query)) {\n    return false;\n  }\n  return true;\n}\nfunction matchMutation(filters, mutation) {\n  const { exact, status, predicate, mutationKey } = filters;\n  if (mutationKey) {\n    if (!mutation.options.mutationKey) {\n      return false;\n    }\n    if (exact) {\n      if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n        return false;\n      }\n    } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n      return false;\n    }\n  }\n  if (status && mutation.state.status !== status) {\n    return false;\n  }\n  if (predicate && !predicate(mutation)) {\n    return false;\n  }\n  return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n  const hashFn = options?.queryKeyHashFn || hashKey;\n  return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n  return JSON.stringify(\n    queryKey,\n    (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n      result[key] = val[key];\n      return result;\n    }, {}) : val\n  );\n}\nfunction partialMatchKey(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n    return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n  }\n  return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b) {\n  if (a === b) {\n    return a;\n  }\n  const array = isPlainArray(a) && isPlainArray(b);\n  if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n  const aItems = array ? a : Object.keys(a);\n  const aSize = aItems.length;\n  const bItems = array ? b : Object.keys(b);\n  const bSize = bItems.length;\n  const copy = array ? new Array(bSize) : {};\n  let equalItems = 0;\n  for (let i = 0; i < bSize; i++) {\n    const key = array ? i : bItems[i];\n    const aItem = a[key];\n    const bItem = b[key];\n    if (aItem === bItem) {\n      copy[key] = aItem;\n      if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n      continue;\n    }\n    if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n      copy[key] = bItem;\n      continue;\n    }\n    const v = replaceEqualDeep(aItem, bItem);\n    copy[key] = v;\n    if (v === aItem) equalItems++;\n  }\n  return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n  if (!b || Object.keys(a).length !== Object.keys(b).length) {\n    return false;\n  }\n  for (const key in a) {\n    if (a[key] !== b[key]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction isPlainArray(value) {\n  return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n  if (!hasObjectPrototype(o)) {\n    return false;\n  }\n  const ctor = o.constructor;\n  if (ctor === void 0) {\n    return true;\n  }\n  const prot = ctor.prototype;\n  if (!hasObjectPrototype(prot)) {\n    return false;\n  }\n  if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n    return false;\n  }\n  if (Object.getPrototypeOf(o) !== Object.prototype) {\n    return false;\n  }\n  return true;\n}\nfunction hasObjectPrototype(o) {\n  return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n  return new Promise((resolve) => {\n    timeoutManager.setTimeout(resolve, timeout);\n  });\n}\nfunction replaceData(prevData, data, options) {\n  if (typeof options.structuralSharing === \"function\") {\n    return options.structuralSharing(prevData, data);\n  } else if (options.structuralSharing !== false) {\n    if (process.env.NODE_ENV !== \"production\") {\n      try {\n        return replaceEqualDeep(prevData, data);\n      } catch (error) {\n        console.error(\n          `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n        );\n        throw error;\n      }\n    }\n    return replaceEqualDeep(prevData, data);\n  }\n  return data;\n}\nfunction keepPreviousData(previousData) {\n  return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n  const newItems = [...items, item];\n  return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n  const newItems = [item, ...items];\n  return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (options.queryFn === skipToken) {\n      console.error(\n        `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n      );\n    }\n  }\n  if (!options.queryFn && fetchOptions?.initialPromise) {\n    return () => fetchOptions.initialPromise;\n  }\n  if (!options.queryFn || options.queryFn === skipToken) {\n    return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n  }\n  return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n  if (typeof throwOnError === \"function\") {\n    return throwOnError(...params);\n  }\n  return !!throwOnError;\n}\nexport {\n  addToEnd,\n  addToStart,\n  ensureQueryFn,\n  functionalUpdate,\n  hashKey,\n  hashQueryKeyByOptions,\n  isPlainArray,\n  isPlainObject,\n  isServer,\n  isValidTimeout,\n  keepPreviousData,\n  matchMutation,\n  matchQuery,\n  noop,\n  partialMatchKey,\n  replaceData,\n  replaceEqualDeep,\n  resolveEnabled,\n  resolveStaleTime,\n  shallowEqualObjects,\n  shouldThrowError,\n  skipToken,\n  sleep,\n  timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar FocusManager = class extends Subscribable {\n  #focused;\n  #cleanup;\n  #setup;\n  constructor() {\n    super();\n    this.#setup = (onFocus) => {\n      if (!isServer && window.addEventListener) {\n        const listener = () => onFocus();\n        window.addEventListener(\"visibilitychange\", listener, false);\n        return () => {\n          window.removeEventListener(\"visibilitychange\", listener);\n        };\n      }\n      return;\n    };\n  }\n  onSubscribe() {\n    if (!this.#cleanup) {\n      this.setEventListener(this.#setup);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#cleanup?.();\n      this.#cleanup = void 0;\n    }\n  }\n  setEventListener(setup) {\n    this.#setup = setup;\n    this.#cleanup?.();\n    this.#cleanup = setup((focused) => {\n      if (typeof focused === \"boolean\") {\n        this.setFocused(focused);\n      } else {\n        this.onFocus();\n      }\n    });\n  }\n  setFocused(focused) {\n    const changed = this.#focused !== focused;\n    if (changed) {\n      this.#focused = focused;\n      this.onFocus();\n    }\n  }\n  onFocus() {\n    const isFocused = this.isFocused();\n    this.listeners.forEach((listener) => {\n      listener(isFocused);\n    });\n  }\n  isFocused() {\n    if (typeof this.#focused === \"boolean\") {\n      return this.#focused;\n    }\n    return globalThis.document?.visibilityState !== \"hidden\";\n  }\n};\nvar focusManager = new FocusManager();\nexport {\n  FocusManager,\n  focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n  let resolve;\n  let reject;\n  const thenable = new Promise((_resolve, _reject) => {\n    resolve = _resolve;\n    reject = _reject;\n  });\n  thenable.status = \"pending\";\n  thenable.catch(() => {\n  });\n  function finalize(data) {\n    Object.assign(thenable, data);\n    delete thenable.resolve;\n    delete thenable.reject;\n  }\n  thenable.resolve = (value) => {\n    finalize({\n      status: \"fulfilled\",\n      value\n    });\n    resolve(value);\n  };\n  thenable.reject = (reason) => {\n    finalize({\n      status: \"rejected\",\n      reason\n    });\n    reject(reason);\n  };\n  return thenable;\n}\nfunction tryResolveSync(promise) {\n  let data;\n  promise.then((result) => {\n    data = result;\n    return result;\n  }, noop)?.catch(noop);\n  if (data !== void 0) {\n    return { data };\n  }\n  return void 0;\n}\nexport {\n  pendingThenable,\n  tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n  let queue = [];\n  let transactions = 0;\n  let notifyFn = (callback) => {\n    callback();\n  };\n  let batchNotifyFn = (callback) => {\n    callback();\n  };\n  let scheduleFn = defaultScheduler;\n  const schedule = (callback) => {\n    if (transactions) {\n      queue.push(callback);\n    } else {\n      scheduleFn(() => {\n        notifyFn(callback);\n      });\n    }\n  };\n  const flush = () => {\n    const originalQueue = queue;\n    queue = [];\n    if (originalQueue.length) {\n      scheduleFn(() => {\n        batchNotifyFn(() => {\n          originalQueue.forEach((callback) => {\n            notifyFn(callback);\n          });\n        });\n      });\n    }\n  };\n  return {\n    batch: (callback) => {\n      let result;\n      transactions++;\n      try {\n        result = callback();\n      } finally {\n        transactions--;\n        if (!transactions) {\n          flush();\n        }\n      }\n      return result;\n    },\n    /**\n     * All calls to the wrapped function will be batched.\n     */\n    batchCalls: (callback) => {\n      return (...args) => {\n        schedule(() => {\n          callback(...args);\n        });\n      };\n    },\n    schedule,\n    /**\n     * Use this method to set a custom notify function.\n     * This can be used to for example wrap notifications with `React.act` while running tests.\n     */\n    setNotifyFunction: (fn) => {\n      notifyFn = fn;\n    },\n    /**\n     * Use this method to set a custom function to batch notifications together into a single tick.\n     * By default React Query will use the batch function provided by ReactDOM or React Native.\n     */\n    setBatchNotifyFunction: (fn) => {\n      batchNotifyFn = fn;\n    },\n    setScheduler: (fn) => {\n      scheduleFn = fn;\n    }\n  };\n}\nvar notifyManager = createNotifyManager();\nexport {\n  createNotifyManager,\n  defaultScheduler,\n  notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar OnlineManager = class extends Subscribable {\n  #online = true;\n  #cleanup;\n  #setup;\n  constructor() {\n    super();\n    this.#setup = (onOnline) => {\n      if (!isServer && window.addEventListener) {\n        const onlineListener = () => onOnline(true);\n        const offlineListener = () => onOnline(false);\n        window.addEventListener(\"online\", onlineListener, false);\n        window.addEventListener(\"offline\", offlineListener, false);\n        return () => {\n          window.removeEventListener(\"online\", onlineListener);\n          window.removeEventListener(\"offline\", offlineListener);\n        };\n      }\n      return;\n    };\n  }\n  onSubscribe() {\n    if (!this.#cleanup) {\n      this.setEventListener(this.#setup);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#cleanup?.();\n      this.#cleanup = void 0;\n    }\n  }\n  setEventListener(setup) {\n    this.#setup = setup;\n    this.#cleanup?.();\n    this.#cleanup = setup(this.setOnline.bind(this));\n  }\n  setOnline(online) {\n    const changed = this.#online !== online;\n    if (changed) {\n      this.#online = online;\n      this.listeners.forEach((listener) => {\n        listener(online);\n      });\n    }\n  }\n  isOnline() {\n    return this.#online;\n  }\n};\nvar onlineManager = new OnlineManager();\nexport {\n  OnlineManager,\n  onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { isServer, sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n  return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n  return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n  constructor(options) {\n    super(\"CancelledError\");\n    this.revert = options?.revert;\n    this.silent = options?.silent;\n  }\n};\nfunction isCancelledError(value) {\n  return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n  let isRetryCancelled = false;\n  let failureCount = 0;\n  let continueFn;\n  const thenable = pendingThenable();\n  const isResolved = () => thenable.status !== \"pending\";\n  const cancel = (cancelOptions) => {\n    if (!isResolved()) {\n      const error = new CancelledError(cancelOptions);\n      reject(error);\n      config.onCancel?.(error);\n    }\n  };\n  const cancelRetry = () => {\n    isRetryCancelled = true;\n  };\n  const continueRetry = () => {\n    isRetryCancelled = false;\n  };\n  const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n  const canStart = () => canFetch(config.networkMode) && config.canRun();\n  const resolve = (value) => {\n    if (!isResolved()) {\n      continueFn?.();\n      thenable.resolve(value);\n    }\n  };\n  const reject = (value) => {\n    if (!isResolved()) {\n      continueFn?.();\n      thenable.reject(value);\n    }\n  };\n  const pause = () => {\n    return new Promise((continueResolve) => {\n      continueFn = (value) => {\n        if (isResolved() || canContinue()) {\n          continueResolve(value);\n        }\n      };\n      config.onPause?.();\n    }).then(() => {\n      continueFn = void 0;\n      if (!isResolved()) {\n        config.onContinue?.();\n      }\n    });\n  };\n  const run = () => {\n    if (isResolved()) {\n      return;\n    }\n    let promiseOrValue;\n    const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n    try {\n      promiseOrValue = initialPromise ?? config.fn();\n    } catch (error) {\n      promiseOrValue = Promise.reject(error);\n    }\n    Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n      if (isResolved()) {\n        return;\n      }\n      const retry = config.retry ?? (isServer ? 0 : 3);\n      const retryDelay = config.retryDelay ?? defaultRetryDelay;\n      const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n      const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n      if (isRetryCancelled || !shouldRetry) {\n        reject(error);\n        return;\n      }\n      failureCount++;\n      config.onFail?.(failureCount, error);\n      sleep(delay).then(() => {\n        return canContinue() ? void 0 : pause();\n      }).then(() => {\n        if (isRetryCancelled) {\n          reject(error);\n        } else {\n          run();\n        }\n      });\n    });\n  };\n  return {\n    promise: thenable,\n    status: () => thenable.status,\n    cancel,\n    continue: () => {\n      continueFn?.();\n      return thenable;\n    },\n    cancelRetry,\n    continueRetry,\n    canStart,\n    start: () => {\n      if (canStart()) {\n        run();\n      } else {\n        pause().then(run);\n      }\n      return thenable;\n    }\n  };\n}\nexport {\n  CancelledError,\n  canFetch,\n  createRetryer,\n  isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { isServer, isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n  #gcTimeout;\n  destroy() {\n    this.clearGcTimeout();\n  }\n  scheduleGc() {\n    this.clearGcTimeout();\n    if (isValidTimeout(this.gcTime)) {\n      this.#gcTimeout = timeoutManager.setTimeout(() => {\n        this.optionalRemove();\n      }, this.gcTime);\n    }\n  }\n  updateGcTime(newGcTime) {\n    this.gcTime = Math.max(\n      this.gcTime || 0,\n      newGcTime ?? (isServer ? Infinity : 5 * 60 * 1e3)\n    );\n  }\n  clearGcTimeout() {\n    if (this.#gcTimeout) {\n      timeoutManager.clearTimeout(this.#gcTimeout);\n      this.#gcTimeout = void 0;\n    }\n  }\n};\nexport {\n  Removable\n};\n//# sourceMappingURL=removable.js.map","// src/query.ts\nimport {\n  ensureQueryFn,\n  noop,\n  replaceData,\n  resolveEnabled,\n  resolveStaleTime,\n  skipToken,\n  timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nvar Query = class extends Removable {\n  #initialState;\n  #revertState;\n  #cache;\n  #client;\n  #retryer;\n  #defaultOptions;\n  #abortSignalConsumed;\n  constructor(config) {\n    super();\n    this.#abortSignalConsumed = false;\n    this.#defaultOptions = config.defaultOptions;\n    this.setOptions(config.options);\n    this.observers = [];\n    this.#client = config.client;\n    this.#cache = this.#client.getQueryCache();\n    this.queryKey = config.queryKey;\n    this.queryHash = config.queryHash;\n    this.#initialState = getDefaultState(this.options);\n    this.state = config.state ?? this.#initialState;\n    this.scheduleGc();\n  }\n  get meta() {\n    return this.options.meta;\n  }\n  get promise() {\n    return this.#retryer?.promise;\n  }\n  setOptions(options) {\n    this.options = { ...this.#defaultOptions, ...options };\n    this.updateGcTime(this.options.gcTime);\n    if (this.state && this.state.data === void 0) {\n      const defaultState = getDefaultState(this.options);\n      if (defaultState.data !== void 0) {\n        this.setState(\n          successState(defaultState.data, defaultState.dataUpdatedAt)\n        );\n        this.#initialState = defaultState;\n      }\n    }\n  }\n  optionalRemove() {\n    if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n      this.#cache.remove(this);\n    }\n  }\n  setData(newData, options) {\n    const data = replaceData(this.state.data, newData, this.options);\n    this.#dispatch({\n      data,\n      type: \"success\",\n      dataUpdatedAt: options?.updatedAt,\n      manual: options?.manual\n    });\n    return data;\n  }\n  setState(state, setStateOptions) {\n    this.#dispatch({ type: \"setState\", state, setStateOptions });\n  }\n  cancel(options) {\n    const promise = this.#retryer?.promise;\n    this.#retryer?.cancel(options);\n    return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n  }\n  destroy() {\n    super.destroy();\n    this.cancel({ silent: true });\n  }\n  reset() {\n    this.destroy();\n    this.setState(this.#initialState);\n  }\n  isActive() {\n    return this.observers.some(\n      (observer) => resolveEnabled(observer.options.enabled, this) !== false\n    );\n  }\n  isDisabled() {\n    if (this.getObserversCount() > 0) {\n      return !this.isActive();\n    }\n    return this.options.queryFn === skipToken || this.state.dataUpdateCount + this.state.errorUpdateCount === 0;\n  }\n  isStatic() {\n    if (this.getObserversCount() > 0) {\n      return this.observers.some(\n        (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n      );\n    }\n    return false;\n  }\n  isStale() {\n    if (this.getObserversCount() > 0) {\n      return this.observers.some(\n        (observer) => observer.getCurrentResult().isStale\n      );\n    }\n    return this.state.data === void 0 || this.state.isInvalidated;\n  }\n  isStaleByTime(staleTime = 0) {\n    if (this.state.data === void 0) {\n      return true;\n    }\n    if (staleTime === \"static\") {\n      return false;\n    }\n    if (this.state.isInvalidated) {\n      return true;\n    }\n    return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n  }\n  onFocus() {\n    const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n    observer?.refetch({ cancelRefetch: false });\n    this.#retryer?.continue();\n  }\n  onOnline() {\n    const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n    observer?.refetch({ cancelRefetch: false });\n    this.#retryer?.continue();\n  }\n  addObserver(observer) {\n    if (!this.observers.includes(observer)) {\n      this.observers.push(observer);\n      this.clearGcTimeout();\n      this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n    }\n  }\n  removeObserver(observer) {\n    if (this.observers.includes(observer)) {\n      this.observers = this.observers.filter((x) => x !== observer);\n      if (!this.observers.length) {\n        if (this.#retryer) {\n          if (this.#abortSignalConsumed) {\n            this.#retryer.cancel({ revert: true });\n          } else {\n            this.#retryer.cancelRetry();\n          }\n        }\n        this.scheduleGc();\n      }\n      this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n    }\n  }\n  getObserversCount() {\n    return this.observers.length;\n  }\n  invalidate() {\n    if (!this.state.isInvalidated) {\n      this.#dispatch({ type: \"invalidate\" });\n    }\n  }\n  async fetch(options, fetchOptions) {\n    if (this.state.fetchStatus !== \"idle\" && // If the promise in the retyer is already rejected, we have to definitely\n    // re-start the fetch; there is a chance that the query is still in a\n    // pending state when that happens\n    this.#retryer?.status() !== \"rejected\") {\n      if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n        this.cancel({ silent: true });\n      } else if (this.#retryer) {\n        this.#retryer.continueRetry();\n        return this.#retryer.promise;\n      }\n    }\n    if (options) {\n      this.setOptions(options);\n    }\n    if (!this.options.queryFn) {\n      const observer = this.observers.find((x) => x.options.queryFn);\n      if (observer) {\n        this.setOptions(observer.options);\n      }\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      if (!Array.isArray(this.options.queryKey)) {\n        console.error(\n          `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n        );\n      }\n    }\n    const abortController = new AbortController();\n    const addSignalProperty = (object) => {\n      Object.defineProperty(object, \"signal\", {\n        enumerable: true,\n        get: () => {\n          this.#abortSignalConsumed = true;\n          return abortController.signal;\n        }\n      });\n    };\n    const fetchFn = () => {\n      const queryFn = ensureQueryFn(this.options, fetchOptions);\n      const createQueryFnContext = () => {\n        const queryFnContext2 = {\n          client: this.#client,\n          queryKey: this.queryKey,\n          meta: this.meta\n        };\n        addSignalProperty(queryFnContext2);\n        return queryFnContext2;\n      };\n      const queryFnContext = createQueryFnContext();\n      this.#abortSignalConsumed = false;\n      if (this.options.persister) {\n        return this.options.persister(\n          queryFn,\n          queryFnContext,\n          this\n        );\n      }\n      return queryFn(queryFnContext);\n    };\n    const createFetchContext = () => {\n      const context2 = {\n        fetchOptions,\n        options: this.options,\n        queryKey: this.queryKey,\n        client: this.#client,\n        state: this.state,\n        fetchFn\n      };\n      addSignalProperty(context2);\n      return context2;\n    };\n    const context = createFetchContext();\n    this.options.behavior?.onFetch(context, this);\n    this.#revertState = this.state;\n    if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n      this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n    }\n    this.#retryer = createRetryer({\n      initialPromise: fetchOptions?.initialPromise,\n      fn: context.fetchFn,\n      onCancel: (error) => {\n        if (error instanceof CancelledError && error.revert) {\n          this.setState({\n            ...this.#revertState,\n            fetchStatus: \"idle\"\n          });\n        }\n        abortController.abort();\n      },\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: \"failed\", failureCount, error });\n      },\n      onPause: () => {\n        this.#dispatch({ type: \"pause\" });\n      },\n      onContinue: () => {\n        this.#dispatch({ type: \"continue\" });\n      },\n      retry: context.options.retry,\n      retryDelay: context.options.retryDelay,\n      networkMode: context.options.networkMode,\n      canRun: () => true\n    });\n    try {\n      const data = await this.#retryer.start();\n      if (data === void 0) {\n        if (process.env.NODE_ENV !== \"production\") {\n          console.error(\n            `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n          );\n        }\n        throw new Error(`${this.queryHash} data is undefined`);\n      }\n      this.setData(data);\n      this.#cache.config.onSuccess?.(data, this);\n      this.#cache.config.onSettled?.(\n        data,\n        this.state.error,\n        this\n      );\n      return data;\n    } catch (error) {\n      if (error instanceof CancelledError) {\n        if (error.silent) {\n          return this.#retryer.promise;\n        } else if (error.revert) {\n          if (this.state.data === void 0) {\n            throw error;\n          }\n          return this.state.data;\n        }\n      }\n      this.#dispatch({\n        type: \"error\",\n        error\n      });\n      this.#cache.config.onError?.(\n        error,\n        this\n      );\n      this.#cache.config.onSettled?.(\n        this.state.data,\n        error,\n        this\n      );\n      throw error;\n    } finally {\n      this.scheduleGc();\n    }\n  }\n  #dispatch(action) {\n    const reducer = (state) => {\n      switch (action.type) {\n        case \"failed\":\n          return {\n            ...state,\n            fetchFailureCount: action.failureCount,\n            fetchFailureReason: action.error\n          };\n        case \"pause\":\n          return {\n            ...state,\n            fetchStatus: \"paused\"\n          };\n        case \"continue\":\n          return {\n            ...state,\n            fetchStatus: \"fetching\"\n          };\n        case \"fetch\":\n          return {\n            ...state,\n            ...fetchState(state.data, this.options),\n            fetchMeta: action.meta ?? null\n          };\n        case \"success\":\n          const newState = {\n            ...state,\n            ...successState(action.data, action.dataUpdatedAt),\n            dataUpdateCount: state.dataUpdateCount + 1,\n            ...!action.manual && {\n              fetchStatus: \"idle\",\n              fetchFailureCount: 0,\n              fetchFailureReason: null\n            }\n          };\n          this.#revertState = action.manual ? newState : void 0;\n          return newState;\n        case \"error\":\n          const error = action.error;\n          return {\n            ...state,\n            error,\n            errorUpdateCount: state.errorUpdateCount + 1,\n            errorUpdatedAt: Date.now(),\n            fetchFailureCount: state.fetchFailureCount + 1,\n            fetchFailureReason: error,\n            fetchStatus: \"idle\",\n            status: \"error\"\n          };\n        case \"invalidate\":\n          return {\n            ...state,\n            isInvalidated: true\n          };\n        case \"setState\":\n          return {\n            ...state,\n            ...action.state\n          };\n      }\n    };\n    this.state = reducer(this.state);\n    notifyManager.batch(() => {\n      this.observers.forEach((observer) => {\n        observer.onQueryUpdate();\n      });\n      this.#cache.notify({ query: this, type: \"updated\", action });\n    });\n  }\n};\nfunction fetchState(data, options) {\n  return {\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n    ...data === void 0 && {\n      error: null,\n      status: \"pending\"\n    }\n  };\n}\nfunction successState(data, dataUpdatedAt) {\n  return {\n    data,\n    dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n    error: null,\n    isInvalidated: false,\n    status: \"success\"\n  };\n}\nfunction getDefaultState(options) {\n  const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n  const hasData = data !== void 0;\n  const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n  return {\n    data,\n    dataUpdateCount: 0,\n    dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n    error: null,\n    errorUpdateCount: 0,\n    errorUpdatedAt: 0,\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchMeta: null,\n    isInvalidated: false,\n    status: hasData ? \"success\" : \"pending\",\n    fetchStatus: \"idle\"\n  };\n}\nexport {\n  Query,\n  fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n  isServer,\n  isValidTimeout,\n  noop,\n  replaceData,\n  resolveEnabled,\n  resolveStaleTime,\n  shallowEqualObjects,\n  timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n  constructor(client, options) {\n    super();\n    this.options = options;\n    this.#client = client;\n    this.#selectError = null;\n    this.#currentThenable = pendingThenable();\n    this.bindMethods();\n    this.setOptions(options);\n  }\n  #client;\n  #currentQuery = void 0;\n  #currentQueryInitialState = void 0;\n  #currentResult = void 0;\n  #currentResultState;\n  #currentResultOptions;\n  #currentThenable;\n  #selectError;\n  #selectFn;\n  #selectResult;\n  // This property keeps track of the last query with defined data.\n  // It will be used to pass the previous data and query to the placeholder function between renders.\n  #lastQueryWithDefinedData;\n  #staleTimeoutId;\n  #refetchIntervalId;\n  #currentRefetchInterval;\n  #trackedProps = /* @__PURE__ */ new Set();\n  bindMethods() {\n    this.refetch = this.refetch.bind(this);\n  }\n  onSubscribe() {\n    if (this.listeners.size === 1) {\n      this.#currentQuery.addObserver(this);\n      if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n        this.#executeFetch();\n      } else {\n        this.updateResult();\n      }\n      this.#updateTimers();\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.destroy();\n    }\n  }\n  shouldFetchOnReconnect() {\n    return shouldFetchOn(\n      this.#currentQuery,\n      this.options,\n      this.options.refetchOnReconnect\n    );\n  }\n  shouldFetchOnWindowFocus() {\n    return shouldFetchOn(\n      this.#currentQuery,\n      this.options,\n      this.options.refetchOnWindowFocus\n    );\n  }\n  destroy() {\n    this.listeners = /* @__PURE__ */ new Set();\n    this.#clearStaleTimeout();\n    this.#clearRefetchInterval();\n    this.#currentQuery.removeObserver(this);\n  }\n  setOptions(options) {\n    const prevOptions = this.options;\n    const prevQuery = this.#currentQuery;\n    this.options = this.#client.defaultQueryOptions(options);\n    if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveEnabled(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n      throw new Error(\n        \"Expected enabled to be a boolean or a callback that returns a boolean\"\n      );\n    }\n    this.#updateQuery();\n    this.#currentQuery.setOptions(this.options);\n    if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n      this.#client.getQueryCache().notify({\n        type: \"observerOptionsUpdated\",\n        query: this.#currentQuery,\n        observer: this\n      });\n    }\n    const mounted = this.hasListeners();\n    if (mounted && shouldFetchOptionally(\n      this.#currentQuery,\n      prevQuery,\n      this.options,\n      prevOptions\n    )) {\n      this.#executeFetch();\n    }\n    this.updateResult();\n    if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n      this.#updateStaleTimeout();\n    }\n    const nextRefetchInterval = this.#computeRefetchInterval();\n    if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n      this.#updateRefetchInterval(nextRefetchInterval);\n    }\n  }\n  getOptimisticResult(options) {\n    const query = this.#client.getQueryCache().build(this.#client, options);\n    const result = this.createResult(query, options);\n    if (shouldAssignObserverCurrentProperties(this, result)) {\n      this.#currentResult = result;\n      this.#currentResultOptions = this.options;\n      this.#currentResultState = this.#currentQuery.state;\n    }\n    return result;\n  }\n  getCurrentResult() {\n    return this.#currentResult;\n  }\n  trackResult(result, onPropTracked) {\n    return new Proxy(result, {\n      get: (target, key) => {\n        this.trackProp(key);\n        onPropTracked?.(key);\n        if (key === \"promise\") {\n          this.trackProp(\"data\");\n          if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n            this.#currentThenable.reject(\n              new Error(\n                \"experimental_prefetchInRender feature flag is not enabled\"\n              )\n            );\n          }\n        }\n        return Reflect.get(target, key);\n      }\n    });\n  }\n  trackProp(key) {\n    this.#trackedProps.add(key);\n  }\n  getCurrentQuery() {\n    return this.#currentQuery;\n  }\n  refetch({ ...options } = {}) {\n    return this.fetch({\n      ...options\n    });\n  }\n  fetchOptimistic(options) {\n    const defaultedOptions = this.#client.defaultQueryOptions(options);\n    const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n    return query.fetch().then(() => this.createResult(query, defaultedOptions));\n  }\n  fetch(fetchOptions) {\n    return this.#executeFetch({\n      ...fetchOptions,\n      cancelRefetch: fetchOptions.cancelRefetch ?? true\n    }).then(() => {\n      this.updateResult();\n      return this.#currentResult;\n    });\n  }\n  #executeFetch(fetchOptions) {\n    this.#updateQuery();\n    let promise = this.#currentQuery.fetch(\n      this.options,\n      fetchOptions\n    );\n    if (!fetchOptions?.throwOnError) {\n      promise = promise.catch(noop);\n    }\n    return promise;\n  }\n  #updateStaleTimeout() {\n    this.#clearStaleTimeout();\n    const staleTime = resolveStaleTime(\n      this.options.staleTime,\n      this.#currentQuery\n    );\n    if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n      return;\n    }\n    const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n    const timeout = time + 1;\n    this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n      if (!this.#currentResult.isStale) {\n        this.updateResult();\n      }\n    }, timeout);\n  }\n  #computeRefetchInterval() {\n    return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n  }\n  #updateRefetchInterval(nextInterval) {\n    this.#clearRefetchInterval();\n    this.#currentRefetchInterval = nextInterval;\n    if (isServer || resolveEnabled(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n      return;\n    }\n    this.#refetchIntervalId = timeoutManager.setInterval(() => {\n      if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n        this.#executeFetch();\n      }\n    }, this.#currentRefetchInterval);\n  }\n  #updateTimers() {\n    this.#updateStaleTimeout();\n    this.#updateRefetchInterval(this.#computeRefetchInterval());\n  }\n  #clearStaleTimeout() {\n    if (this.#staleTimeoutId) {\n      timeoutManager.clearTimeout(this.#staleTimeoutId);\n      this.#staleTimeoutId = void 0;\n    }\n  }\n  #clearRefetchInterval() {\n    if (this.#refetchIntervalId) {\n      timeoutManager.clearInterval(this.#refetchIntervalId);\n      this.#refetchIntervalId = void 0;\n    }\n  }\n  createResult(query, options) {\n    const prevQuery = this.#currentQuery;\n    const prevOptions = this.options;\n    const prevResult = this.#currentResult;\n    const prevResultState = this.#currentResultState;\n    const prevResultOptions = this.#currentResultOptions;\n    const queryChange = query !== prevQuery;\n    const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n    const { state } = query;\n    let newState = { ...state };\n    let isPlaceholderData = false;\n    let data;\n    if (options._optimisticResults) {\n      const mounted = this.hasListeners();\n      const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n      const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n      if (fetchOnMount || fetchOptionally) {\n        newState = {\n          ...newState,\n          ...fetchState(state.data, query.options)\n        };\n      }\n      if (options._optimisticResults === \"isRestoring\") {\n        newState.fetchStatus = \"idle\";\n      }\n    }\n    let { error, errorUpdatedAt, status } = newState;\n    data = newState.data;\n    let skipSelect = false;\n    if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n      let placeholderData;\n      if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n        placeholderData = prevResult.data;\n        skipSelect = true;\n      } else {\n        placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n          this.#lastQueryWithDefinedData?.state.data,\n          this.#lastQueryWithDefinedData\n        ) : options.placeholderData;\n      }\n      if (placeholderData !== void 0) {\n        status = \"success\";\n        data = replaceData(\n          prevResult?.data,\n          placeholderData,\n          options\n        );\n        isPlaceholderData = true;\n      }\n    }\n    if (options.select && data !== void 0 && !skipSelect) {\n      if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n        data = this.#selectResult;\n      } else {\n        try {\n          this.#selectFn = options.select;\n          data = options.select(data);\n          data = replaceData(prevResult?.data, data, options);\n          this.#selectResult = data;\n          this.#selectError = null;\n        } catch (selectError) {\n          this.#selectError = selectError;\n        }\n      }\n    }\n    if (this.#selectError) {\n      error = this.#selectError;\n      data = this.#selectResult;\n      errorUpdatedAt = Date.now();\n      status = \"error\";\n    }\n    const isFetching = newState.fetchStatus === \"fetching\";\n    const isPending = status === \"pending\";\n    const isError = status === \"error\";\n    const isLoading = isPending && isFetching;\n    const hasData = data !== void 0;\n    const result = {\n      status,\n      fetchStatus: newState.fetchStatus,\n      isPending,\n      isSuccess: status === \"success\",\n      isError,\n      isInitialLoading: isLoading,\n      isLoading,\n      data,\n      dataUpdatedAt: newState.dataUpdatedAt,\n      error,\n      errorUpdatedAt,\n      failureCount: newState.fetchFailureCount,\n      failureReason: newState.fetchFailureReason,\n      errorUpdateCount: newState.errorUpdateCount,\n      isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n      isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n      isFetching,\n      isRefetching: isFetching && !isPending,\n      isLoadingError: isError && !hasData,\n      isPaused: newState.fetchStatus === \"paused\",\n      isPlaceholderData,\n      isRefetchError: isError && hasData,\n      isStale: isStale(query, options),\n      refetch: this.refetch,\n      promise: this.#currentThenable,\n      isEnabled: resolveEnabled(options.enabled, query) !== false\n    };\n    const nextResult = result;\n    if (this.options.experimental_prefetchInRender) {\n      const finalizeThenableIfPossible = (thenable) => {\n        if (nextResult.status === \"error\") {\n          thenable.reject(nextResult.error);\n        } else if (nextResult.data !== void 0) {\n          thenable.resolve(nextResult.data);\n        }\n      };\n      const recreateThenable = () => {\n        const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n        finalizeThenableIfPossible(pending);\n      };\n      const prevThenable = this.#currentThenable;\n      switch (prevThenable.status) {\n        case \"pending\":\n          if (query.queryHash === prevQuery.queryHash) {\n            finalizeThenableIfPossible(prevThenable);\n          }\n          break;\n        case \"fulfilled\":\n          if (nextResult.status === \"error\" || nextResult.data !== prevThenable.value) {\n            recreateThenable();\n          }\n          break;\n        case \"rejected\":\n          if (nextResult.status !== \"error\" || nextResult.error !== prevThenable.reason) {\n            recreateThenable();\n          }\n          break;\n      }\n    }\n    return nextResult;\n  }\n  updateResult() {\n    const prevResult = this.#currentResult;\n    const nextResult = this.createResult(this.#currentQuery, this.options);\n    this.#currentResultState = this.#currentQuery.state;\n    this.#currentResultOptions = this.options;\n    if (this.#currentResultState.data !== void 0) {\n      this.#lastQueryWithDefinedData = this.#currentQuery;\n    }\n    if (shallowEqualObjects(nextResult, prevResult)) {\n      return;\n    }\n    this.#currentResult = nextResult;\n    const shouldNotifyListeners = () => {\n      if (!prevResult) {\n        return true;\n      }\n      const { notifyOnChangeProps } = this.options;\n      const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n      if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n        return true;\n      }\n      const includedProps = new Set(\n        notifyOnChangePropsValue ?? this.#trackedProps\n      );\n      if (this.options.throwOnError) {\n        includedProps.add(\"error\");\n      }\n      return Object.keys(this.#currentResult).some((key) => {\n        const typedKey = key;\n        const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n        return changed && includedProps.has(typedKey);\n      });\n    };\n    this.#notify({ listeners: shouldNotifyListeners() });\n  }\n  #updateQuery() {\n    const query = this.#client.getQueryCache().build(this.#client, this.options);\n    if (query === this.#currentQuery) {\n      return;\n    }\n    const prevQuery = this.#currentQuery;\n    this.#currentQuery = query;\n    this.#currentQueryInitialState = query.state;\n    if (this.hasListeners()) {\n      prevQuery?.removeObserver(this);\n      query.addObserver(this);\n    }\n  }\n  onQueryUpdate() {\n    this.updateResult();\n    if (this.hasListeners()) {\n      this.#updateTimers();\n    }\n  }\n  #notify(notifyOptions) {\n    notifyManager.batch(() => {\n      if (notifyOptions.listeners) {\n        this.listeners.forEach((listener) => {\n          listener(this.#currentResult);\n        });\n      }\n      this.#client.getQueryCache().notify({\n        query: this.#currentQuery,\n        type: \"observerResultsUpdated\"\n      });\n    });\n  }\n};\nfunction shouldLoadOnMount(query, options) {\n  return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && options.retryOnMount === false);\n}\nfunction shouldFetchOnMount(query, options) {\n  return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n  if (resolveEnabled(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n    const value = typeof field === \"function\" ? field(query) : field;\n    return value === \"always\" || value !== false && isStale(query, options);\n  }\n  return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n  return (query !== prevQuery || resolveEnabled(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n  return resolveEnabled(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n  if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n    return true;\n  }\n  return false;\n}\nexport {\n  QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/infiniteQueryBehavior.ts\nimport { addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n  return {\n    onFetch: (context, query) => {\n      const options = context.options;\n      const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n      const oldPages = context.state.data?.pages || [];\n      const oldPageParams = context.state.data?.pageParams || [];\n      let result = { pages: [], pageParams: [] };\n      let currentPage = 0;\n      const fetchFn = async () => {\n        let cancelled = false;\n        const addSignalProperty = (object) => {\n          Object.defineProperty(object, \"signal\", {\n            enumerable: true,\n            get: () => {\n              if (context.signal.aborted) {\n                cancelled = true;\n              } else {\n                context.signal.addEventListener(\"abort\", () => {\n                  cancelled = true;\n                });\n              }\n              return context.signal;\n            }\n          });\n        };\n        const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n        const fetchPage = async (data, param, previous) => {\n          if (cancelled) {\n            return Promise.reject();\n          }\n          if (param == null && data.pages.length) {\n            return Promise.resolve(data);\n          }\n          const createQueryFnContext = () => {\n            const queryFnContext2 = {\n              client: context.client,\n              queryKey: context.queryKey,\n              pageParam: param,\n              direction: previous ? \"backward\" : \"forward\",\n              meta: context.options.meta\n            };\n            addSignalProperty(queryFnContext2);\n            return queryFnContext2;\n          };\n          const queryFnContext = createQueryFnContext();\n          const page = await queryFn(queryFnContext);\n          const { maxPages } = context.options;\n          const addTo = previous ? addToStart : addToEnd;\n          return {\n            pages: addTo(data.pages, page, maxPages),\n            pageParams: addTo(data.pageParams, param, maxPages)\n          };\n        };\n        if (direction && oldPages.length) {\n          const previous = direction === \"backward\";\n          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n          const oldData = {\n            pages: oldPages,\n            pageParams: oldPageParams\n          };\n          const param = pageParamFn(options, oldData);\n          result = await fetchPage(oldData, param, previous);\n        } else {\n          const remainingPages = pages ?? oldPages.length;\n          do {\n            const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n            if (currentPage > 0 && param == null) {\n              break;\n            }\n            result = await fetchPage(result, param);\n            currentPage++;\n          } while (currentPage < remainingPages);\n        }\n        return result;\n      };\n      if (context.options.persister) {\n        context.fetchFn = () => {\n          return context.options.persister?.(\n            fetchFn,\n            {\n              client: context.client,\n              queryKey: context.queryKey,\n              meta: context.options.meta,\n              signal: context.signal\n            },\n            query\n          );\n        };\n      } else {\n        context.fetchFn = fetchFn;\n      }\n    }\n  };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n  const lastIndex = pages.length - 1;\n  return pages.length > 0 ? options.getNextPageParam(\n    pages[lastIndex],\n    pages,\n    pageParams[lastIndex],\n    pageParams\n  ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n  return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n  if (!data) return false;\n  return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n  if (!data || !options.getPreviousPageParam) return false;\n  return getPreviousPageParam(options, data) != null;\n}\nexport {\n  hasNextPage,\n  hasPreviousPage,\n  infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n  #client;\n  #observers;\n  #mutationCache;\n  #retryer;\n  constructor(config) {\n    super();\n    this.#client = config.client;\n    this.mutationId = config.mutationId;\n    this.#mutationCache = config.mutationCache;\n    this.#observers = [];\n    this.state = config.state || getDefaultState();\n    this.setOptions(config.options);\n    this.scheduleGc();\n  }\n  setOptions(options) {\n    this.options = options;\n    this.updateGcTime(this.options.gcTime);\n  }\n  get meta() {\n    return this.options.meta;\n  }\n  addObserver(observer) {\n    if (!this.#observers.includes(observer)) {\n      this.#observers.push(observer);\n      this.clearGcTimeout();\n      this.#mutationCache.notify({\n        type: \"observerAdded\",\n        mutation: this,\n        observer\n      });\n    }\n  }\n  removeObserver(observer) {\n    this.#observers = this.#observers.filter((x) => x !== observer);\n    this.scheduleGc();\n    this.#mutationCache.notify({\n      type: \"observerRemoved\",\n      mutation: this,\n      observer\n    });\n  }\n  optionalRemove() {\n    if (!this.#observers.length) {\n      if (this.state.status === \"pending\") {\n        this.scheduleGc();\n      } else {\n        this.#mutationCache.remove(this);\n      }\n    }\n  }\n  continue() {\n    return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n    this.execute(this.state.variables);\n  }\n  async execute(variables) {\n    const onContinue = () => {\n      this.#dispatch({ type: \"continue\" });\n    };\n    const mutationFnContext = {\n      client: this.#client,\n      meta: this.options.meta,\n      mutationKey: this.options.mutationKey\n    };\n    this.#retryer = createRetryer({\n      fn: () => {\n        if (!this.options.mutationFn) {\n          return Promise.reject(new Error(\"No mutationFn found\"));\n        }\n        return this.options.mutationFn(variables, mutationFnContext);\n      },\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: \"failed\", failureCount, error });\n      },\n      onPause: () => {\n        this.#dispatch({ type: \"pause\" });\n      },\n      onContinue,\n      retry: this.options.retry ?? 0,\n      retryDelay: this.options.retryDelay,\n      networkMode: this.options.networkMode,\n      canRun: () => this.#mutationCache.canRun(this)\n    });\n    const restored = this.state.status === \"pending\";\n    const isPaused = !this.#retryer.canStart();\n    try {\n      if (restored) {\n        onContinue();\n      } else {\n        this.#dispatch({ type: \"pending\", variables, isPaused });\n        await this.#mutationCache.config.onMutate?.(\n          variables,\n          this,\n          mutationFnContext\n        );\n        const context = await this.options.onMutate?.(\n          variables,\n          mutationFnContext\n        );\n        if (context !== this.state.context) {\n          this.#dispatch({\n            type: \"pending\",\n            context,\n            variables,\n            isPaused\n          });\n        }\n      }\n      const data = await this.#retryer.start();\n      await this.#mutationCache.config.onSuccess?.(\n        data,\n        variables,\n        this.state.context,\n        this,\n        mutationFnContext\n      );\n      await this.options.onSuccess?.(\n        data,\n        variables,\n        this.state.context,\n        mutationFnContext\n      );\n      await this.#mutationCache.config.onSettled?.(\n        data,\n        null,\n        this.state.variables,\n        this.state.context,\n        this,\n        mutationFnContext\n      );\n      await this.options.onSettled?.(\n        data,\n        null,\n        variables,\n        this.state.context,\n        mutationFnContext\n      );\n      this.#dispatch({ type: \"success\", data });\n      return data;\n    } catch (error) {\n      try {\n        await this.#mutationCache.config.onError?.(\n          error,\n          variables,\n          this.state.context,\n          this,\n          mutationFnContext\n        );\n        await this.options.onError?.(\n          error,\n          variables,\n          this.state.context,\n          mutationFnContext\n        );\n        await this.#mutationCache.config.onSettled?.(\n          void 0,\n          error,\n          this.state.variables,\n          this.state.context,\n          this,\n          mutationFnContext\n        );\n        await this.options.onSettled?.(\n          void 0,\n          error,\n          variables,\n          this.state.context,\n          mutationFnContext\n        );\n        throw error;\n      } finally {\n        this.#dispatch({ type: \"error\", error });\n      }\n    } finally {\n      this.#mutationCache.runNext(this);\n    }\n  }\n  #dispatch(action) {\n    const reducer = (state) => {\n      switch (action.type) {\n        case \"failed\":\n          return {\n            ...state,\n            failureCount: action.failureCount,\n            failureReason: action.error\n          };\n        case \"pause\":\n          return {\n            ...state,\n            isPaused: true\n          };\n        case \"continue\":\n          return {\n            ...state,\n            isPaused: false\n          };\n        case \"pending\":\n          return {\n            ...state,\n            context: action.context,\n            data: void 0,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            isPaused: action.isPaused,\n            status: \"pending\",\n            variables: action.variables,\n            submittedAt: Date.now()\n          };\n        case \"success\":\n          return {\n            ...state,\n            data: action.data,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            status: \"success\",\n            isPaused: false\n          };\n        case \"error\":\n          return {\n            ...state,\n            data: void 0,\n            error: action.error,\n            failureCount: state.failureCount + 1,\n            failureReason: action.error,\n            isPaused: false,\n            status: \"error\"\n          };\n      }\n    };\n    this.state = reducer(this.state);\n    notifyManager.batch(() => {\n      this.#observers.forEach((observer) => {\n        observer.onMutationUpdate(action);\n      });\n      this.#mutationCache.notify({\n        mutation: this,\n        type: \"updated\",\n        action\n      });\n    });\n  }\n};\nfunction getDefaultState() {\n  return {\n    context: void 0,\n    data: void 0,\n    error: null,\n    failureCount: 0,\n    failureReason: null,\n    isPaused: false,\n    status: \"idle\",\n    variables: void 0,\n    submittedAt: 0\n  };\n}\nexport {\n  Mutation,\n  getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n  constructor(config = {}) {\n    super();\n    this.config = config;\n    this.#mutations = /* @__PURE__ */ new Set();\n    this.#scopes = /* @__PURE__ */ new Map();\n    this.#mutationId = 0;\n  }\n  #mutations;\n  #scopes;\n  #mutationId;\n  build(client, options, state) {\n    const mutation = new Mutation({\n      client,\n      mutationCache: this,\n      mutationId: ++this.#mutationId,\n      options: client.defaultMutationOptions(options),\n      state\n    });\n    this.add(mutation);\n    return mutation;\n  }\n  add(mutation) {\n    this.#mutations.add(mutation);\n    const scope = scopeFor(mutation);\n    if (typeof scope === \"string\") {\n      const scopedMutations = this.#scopes.get(scope);\n      if (scopedMutations) {\n        scopedMutations.push(mutation);\n      } else {\n        this.#scopes.set(scope, [mutation]);\n      }\n    }\n    this.notify({ type: \"added\", mutation });\n  }\n  remove(mutation) {\n    if (this.#mutations.delete(mutation)) {\n      const scope = scopeFor(mutation);\n      if (typeof scope === \"string\") {\n        const scopedMutations = this.#scopes.get(scope);\n        if (scopedMutations) {\n          if (scopedMutations.length > 1) {\n            const index = scopedMutations.indexOf(mutation);\n            if (index !== -1) {\n              scopedMutations.splice(index, 1);\n            }\n          } else if (scopedMutations[0] === mutation) {\n            this.#scopes.delete(scope);\n          }\n        }\n      }\n    }\n    this.notify({ type: \"removed\", mutation });\n  }\n  canRun(mutation) {\n    const scope = scopeFor(mutation);\n    if (typeof scope === \"string\") {\n      const mutationsWithSameScope = this.#scopes.get(scope);\n      const firstPendingMutation = mutationsWithSameScope?.find(\n        (m) => m.state.status === \"pending\"\n      );\n      return !firstPendingMutation || firstPendingMutation === mutation;\n    } else {\n      return true;\n    }\n  }\n  runNext(mutation) {\n    const scope = scopeFor(mutation);\n    if (typeof scope === \"string\") {\n      const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n      return foundMutation?.continue() ?? Promise.resolve();\n    } else {\n      return Promise.resolve();\n    }\n  }\n  clear() {\n    notifyManager.batch(() => {\n      this.#mutations.forEach((mutation) => {\n        this.notify({ type: \"removed\", mutation });\n      });\n      this.#mutations.clear();\n      this.#scopes.clear();\n    });\n  }\n  getAll() {\n    return Array.from(this.#mutations);\n  }\n  find(filters) {\n    const defaultedFilters = { exact: true, ...filters };\n    return this.getAll().find(\n      (mutation) => matchMutation(defaultedFilters, mutation)\n    );\n  }\n  findAll(filters = {}) {\n    return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n  }\n  notify(event) {\n    notifyManager.batch(() => {\n      this.listeners.forEach((listener) => {\n        listener(event);\n      });\n    });\n  }\n  resumePausedMutations() {\n    const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n    return notifyManager.batch(\n      () => Promise.all(\n        pausedMutations.map((mutation) => mutation.continue().catch(noop))\n      )\n    );\n  }\n};\nfunction scopeFor(mutation) {\n  return mutation.options.scope?.id;\n}\nexport {\n  MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n  constructor(config = {}) {\n    super();\n    this.config = config;\n    this.#queries = /* @__PURE__ */ new Map();\n  }\n  #queries;\n  build(client, options, state) {\n    const queryKey = options.queryKey;\n    const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n    let query = this.get(queryHash);\n    if (!query) {\n      query = new Query({\n        client,\n        queryKey,\n        queryHash,\n        options: client.defaultQueryOptions(options),\n        state,\n        defaultOptions: client.getQueryDefaults(queryKey)\n      });\n      this.add(query);\n    }\n    return query;\n  }\n  add(query) {\n    if (!this.#queries.has(query.queryHash)) {\n      this.#queries.set(query.queryHash, query);\n      this.notify({\n        type: \"added\",\n        query\n      });\n    }\n  }\n  remove(query) {\n    const queryInMap = this.#queries.get(query.queryHash);\n    if (queryInMap) {\n      query.destroy();\n      if (queryInMap === query) {\n        this.#queries.delete(query.queryHash);\n      }\n      this.notify({ type: \"removed\", query });\n    }\n  }\n  clear() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        this.remove(query);\n      });\n    });\n  }\n  get(queryHash) {\n    return this.#queries.get(queryHash);\n  }\n  getAll() {\n    return [...this.#queries.values()];\n  }\n  find(filters) {\n    const defaultedFilters = { exact: true, ...filters };\n    return this.getAll().find(\n      (query) => matchQuery(defaultedFilters, query)\n    );\n  }\n  findAll(filters = {}) {\n    const queries = this.getAll();\n    return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n  }\n  notify(event) {\n    notifyManager.batch(() => {\n      this.listeners.forEach((listener) => {\n        listener(event);\n      });\n    });\n  }\n  onFocus() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        query.onFocus();\n      });\n    });\n  }\n  onOnline() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        query.onOnline();\n      });\n    });\n  }\n};\nexport {\n  QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/queryClient.ts\nimport {\n  functionalUpdate,\n  hashKey,\n  hashQueryKeyByOptions,\n  noop,\n  partialMatchKey,\n  resolveStaleTime,\n  skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n  #queryCache;\n  #mutationCache;\n  #defaultOptions;\n  #queryDefaults;\n  #mutationDefaults;\n  #mountCount;\n  #unsubscribeFocus;\n  #unsubscribeOnline;\n  constructor(config = {}) {\n    this.#queryCache = config.queryCache || new QueryCache();\n    this.#mutationCache = config.mutationCache || new MutationCache();\n    this.#defaultOptions = config.defaultOptions || {};\n    this.#queryDefaults = /* @__PURE__ */ new Map();\n    this.#mutationDefaults = /* @__PURE__ */ new Map();\n    this.#mountCount = 0;\n  }\n  mount() {\n    this.#mountCount++;\n    if (this.#mountCount !== 1) return;\n    this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n      if (focused) {\n        await this.resumePausedMutations();\n        this.#queryCache.onFocus();\n      }\n    });\n    this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n      if (online) {\n        await this.resumePausedMutations();\n        this.#queryCache.onOnline();\n      }\n    });\n  }\n  unmount() {\n    this.#mountCount--;\n    if (this.#mountCount !== 0) return;\n    this.#unsubscribeFocus?.();\n    this.#unsubscribeFocus = void 0;\n    this.#unsubscribeOnline?.();\n    this.#unsubscribeOnline = void 0;\n  }\n  isFetching(filters) {\n    return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n  }\n  isMutating(filters) {\n    return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n  }\n  /**\n   * Imperative (non-reactive) way to retrieve data for a QueryKey.\n   * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n   *\n   * Hint: Do not use this function inside a component, because it won't receive updates.\n   * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n   */\n  getQueryData(queryKey) {\n    const options = this.defaultQueryOptions({ queryKey });\n    return this.#queryCache.get(options.queryHash)?.state.data;\n  }\n  ensureQueryData(options) {\n    const defaultedOptions = this.defaultQueryOptions(options);\n    const query = this.#queryCache.build(this, defaultedOptions);\n    const cachedData = query.state.data;\n    if (cachedData === void 0) {\n      return this.fetchQuery(options);\n    }\n    if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n      void this.prefetchQuery(defaultedOptions);\n    }\n    return Promise.resolve(cachedData);\n  }\n  getQueriesData(filters) {\n    return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n      const data = state.data;\n      return [queryKey, data];\n    });\n  }\n  setQueryData(queryKey, updater, options) {\n    const defaultedOptions = this.defaultQueryOptions({ queryKey });\n    const query = this.#queryCache.get(\n      defaultedOptions.queryHash\n    );\n    const prevData = query?.state.data;\n    const data = functionalUpdate(updater, prevData);\n    if (data === void 0) {\n      return void 0;\n    }\n    return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n  }\n  setQueriesData(filters, updater, options) {\n    return notifyManager.batch(\n      () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n        queryKey,\n        this.setQueryData(queryKey, updater, options)\n      ])\n    );\n  }\n  getQueryState(queryKey) {\n    const options = this.defaultQueryOptions({ queryKey });\n    return this.#queryCache.get(\n      options.queryHash\n    )?.state;\n  }\n  removeQueries(filters) {\n    const queryCache = this.#queryCache;\n    notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        queryCache.remove(query);\n      });\n    });\n  }\n  resetQueries(filters, options) {\n    const queryCache = this.#queryCache;\n    return notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        query.reset();\n      });\n      return this.refetchQueries(\n        {\n          type: \"active\",\n          ...filters\n        },\n        options\n      );\n    });\n  }\n  cancelQueries(filters, cancelOptions = {}) {\n    const defaultedCancelOptions = { revert: true, ...cancelOptions };\n    const promises = notifyManager.batch(\n      () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n    );\n    return Promise.all(promises).then(noop).catch(noop);\n  }\n  invalidateQueries(filters, options = {}) {\n    return notifyManager.batch(() => {\n      this.#queryCache.findAll(filters).forEach((query) => {\n        query.invalidate();\n      });\n      if (filters?.refetchType === \"none\") {\n        return Promise.resolve();\n      }\n      return this.refetchQueries(\n        {\n          ...filters,\n          type: filters?.refetchType ?? filters?.type ?? \"active\"\n        },\n        options\n      );\n    });\n  }\n  refetchQueries(filters, options = {}) {\n    const fetchOptions = {\n      ...options,\n      cancelRefetch: options.cancelRefetch ?? true\n    };\n    const promises = notifyManager.batch(\n      () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n        let promise = query.fetch(void 0, fetchOptions);\n        if (!fetchOptions.throwOnError) {\n          promise = promise.catch(noop);\n        }\n        return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n      })\n    );\n    return Promise.all(promises).then(noop);\n  }\n  fetchQuery(options) {\n    const defaultedOptions = this.defaultQueryOptions(options);\n    if (defaultedOptions.retry === void 0) {\n      defaultedOptions.retry = false;\n    }\n    const query = this.#queryCache.build(this, defaultedOptions);\n    return query.isStaleByTime(\n      resolveStaleTime(defaultedOptions.staleTime, query)\n    ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n  }\n  prefetchQuery(options) {\n    return this.fetchQuery(options).then(noop).catch(noop);\n  }\n  fetchInfiniteQuery(options) {\n    options.behavior = infiniteQueryBehavior(options.pages);\n    return this.fetchQuery(options);\n  }\n  prefetchInfiniteQuery(options) {\n    return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n  }\n  ensureInfiniteQueryData(options) {\n    options.behavior = infiniteQueryBehavior(options.pages);\n    return this.ensureQueryData(options);\n  }\n  resumePausedMutations() {\n    if (onlineManager.isOnline()) {\n      return this.#mutationCache.resumePausedMutations();\n    }\n    return Promise.resolve();\n  }\n  getQueryCache() {\n    return this.#queryCache;\n  }\n  getMutationCache() {\n    return this.#mutationCache;\n  }\n  getDefaultOptions() {\n    return this.#defaultOptions;\n  }\n  setDefaultOptions(options) {\n    this.#defaultOptions = options;\n  }\n  setQueryDefaults(queryKey, options) {\n    this.#queryDefaults.set(hashKey(queryKey), {\n      queryKey,\n      defaultOptions: options\n    });\n  }\n  getQueryDefaults(queryKey) {\n    const defaults = [...this.#queryDefaults.values()];\n    const result = {};\n    defaults.forEach((queryDefault) => {\n      if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n        Object.assign(result, queryDefault.defaultOptions);\n      }\n    });\n    return result;\n  }\n  setMutationDefaults(mutationKey, options) {\n    this.#mutationDefaults.set(hashKey(mutationKey), {\n      mutationKey,\n      defaultOptions: options\n    });\n  }\n  getMutationDefaults(mutationKey) {\n    const defaults = [...this.#mutationDefaults.values()];\n    const result = {};\n    defaults.forEach((queryDefault) => {\n      if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n        Object.assign(result, queryDefault.defaultOptions);\n      }\n    });\n    return result;\n  }\n  defaultQueryOptions(options) {\n    if (options._defaulted) {\n      return options;\n    }\n    const defaultedOptions = {\n      ...this.#defaultOptions.queries,\n      ...this.getQueryDefaults(options.queryKey),\n      ...options,\n      _defaulted: true\n    };\n    if (!defaultedOptions.queryHash) {\n      defaultedOptions.queryHash = hashQueryKeyByOptions(\n        defaultedOptions.queryKey,\n        defaultedOptions\n      );\n    }\n    if (defaultedOptions.refetchOnReconnect === void 0) {\n      defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n    }\n    if (defaultedOptions.throwOnError === void 0) {\n      defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n    }\n    if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n      defaultedOptions.networkMode = \"offlineFirst\";\n    }\n    if (defaultedOptions.queryFn === skipToken) {\n      defaultedOptions.enabled = false;\n    }\n    return defaultedOptions;\n  }\n  defaultMutationOptions(options) {\n    if (options?._defaulted) {\n      return options;\n    }\n    return {\n      ...this.#defaultOptions.mutations,\n      ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n      ...options,\n      _defaulted: true\n    };\n  }\n  clear() {\n    this.#queryCache.clear();\n    this.#mutationCache.clear();\n  }\n};\nexport {\n  QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n  void 0\n);\nvar useQueryClient = (queryClient) => {\n  const client = React.useContext(QueryClientContext);\n  if (queryClient) {\n    return queryClient;\n  }\n  if (!client) {\n    throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n  }\n  return client;\n};\nvar QueryClientProvider = ({\n  client,\n  children\n}) => {\n  React.useEffect(() => {\n    client.mount();\n    return () => {\n      client.unmount();\n    };\n  }, [client]);\n  return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n  QueryClientContext,\n  QueryClientProvider,\n  useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n  IsRestoringProvider,\n  useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n  let isReset = false;\n  return {\n    clearReset: () => {\n      isReset = false;\n    },\n    reset: () => {\n      isReset = true;\n    },\n    isReset: () => {\n      return isReset;\n    }\n  };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n  children\n}) => {\n  const [value] = React.useState(() => createValue());\n  return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n  QueryErrorResetBoundary,\n  useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary) => {\n  if (options.suspense || options.throwOnError || options.experimental_prefetchInRender) {\n    if (!errorResetBoundary.isReset()) {\n      options.retryOnMount = false;\n    }\n  }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n  React.useEffect(() => {\n    errorResetBoundary.clearReset();\n  }, [errorResetBoundary]);\n};\nvar getHasError = ({\n  result,\n  errorResetBoundary,\n  throwOnError,\n  query,\n  suspense\n}) => {\n  return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n  ensurePreventErrorBoundaryRetry,\n  getHasError,\n  useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n  if (defaultedOptions.suspense) {\n    const MIN_SUSPENSE_TIME_MS = 1e3;\n    const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n    const originalStaleTime = defaultedOptions.staleTime;\n    defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n    if (typeof defaultedOptions.gcTime === \"number\") {\n      defaultedOptions.gcTime = Math.max(\n        defaultedOptions.gcTime,\n        MIN_SUSPENSE_TIME_MS\n      );\n    }\n  }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n  errorResetBoundary.clearReset();\n});\nexport {\n  defaultThrowOnError,\n  ensureSuspenseTimers,\n  fetchOptimistic,\n  shouldSuspend,\n  willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { isServer, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n  ensurePreventErrorBoundaryRetry,\n  getHasError,\n  useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n  ensureSuspenseTimers,\n  fetchOptimistic,\n  shouldSuspend,\n  willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (typeof options !== \"object\" || Array.isArray(options)) {\n      throw new Error(\n        'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n      );\n    }\n  }\n  const isRestoring = useIsRestoring();\n  const errorResetBoundary = useQueryErrorResetBoundary();\n  const client = useQueryClient(queryClient);\n  const defaultedOptions = client.defaultQueryOptions(options);\n  client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n    defaultedOptions\n  );\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!defaultedOptions.queryFn) {\n      console.error(\n        `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n      );\n    }\n  }\n  defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n  ensureSuspenseTimers(defaultedOptions);\n  ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary);\n  useClearResetErrorBoundary(errorResetBoundary);\n  const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n  const [observer] = React.useState(\n    () => new Observer(\n      client,\n      defaultedOptions\n    )\n  );\n  const result = observer.getOptimisticResult(defaultedOptions);\n  const shouldSubscribe = !isRestoring && options.subscribed !== false;\n  React.useSyncExternalStore(\n    React.useCallback(\n      (onStoreChange) => {\n        const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n        observer.updateResult();\n        return unsubscribe;\n      },\n      [observer, shouldSubscribe]\n    ),\n    () => observer.getCurrentResult(),\n    () => observer.getCurrentResult()\n  );\n  React.useEffect(() => {\n    observer.setOptions(defaultedOptions);\n  }, [defaultedOptions, observer]);\n  if (shouldSuspend(defaultedOptions, result)) {\n    throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n  }\n  if (getHasError({\n    result,\n    errorResetBoundary,\n    throwOnError: defaultedOptions.throwOnError,\n    query: client.getQueryCache().get(defaultedOptions.queryHash),\n    suspense: defaultedOptions.suspense\n  })) {\n    throw result.error;\n  }\n  ;\n  client.getDefaultOptions().queries?._experimental_afterQuery?.(\n    defaultedOptions,\n    result\n  );\n  if (defaultedOptions.experimental_prefetchInRender && !isServer && willFetch(result, isRestoring)) {\n    const promise = isNewCacheEntry ? (\n      // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n      fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n    ) : (\n      // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n      client.getQueryCache().get(defaultedOptions.queryHash)?.promise\n    );\n    promise?.catch(noop).finally(() => {\n      observer.updateResult();\n    });\n  }\n  return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n  useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n  return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n  useQuery\n};\n//# sourceMappingURL=useQuery.js.map","import cx from \"classnames\"\nimport { faLocationDot } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { GrapherTrendArrow } from \"@ourworldindata/components\"\nimport { SearchChartHitDataDisplayProps } from \"@ourworldindata/types\"\n\nexport function SearchChartHitDataDisplay({\n    entityName,\n    endValue,\n    time,\n    unit,\n    startValue,\n    trend,\n    showLocationIcon,\n    className,\n}: SearchChartHitDataDisplayProps): React.ReactElement | null {\n    return (\n        <div className={cx(\"search-chart-hit-data-display\", className)}>\n            <div className=\"search-chart-hit-data-display__location\">\n                {showLocationIcon && (\n                    <FontAwesomeIcon\n                        className=\"search-chart-hit-data-display__icon\"\n                        icon={faLocationDot}\n                        size=\"sm\"\n                    />\n                )}\n                {entityName}\n            </div>\n            <div className=\"search-chart-hit-data-display__value\">\n                {startValue && (\n                    <>\n                        {startValue}\n                        <GrapherTrendArrow direction={trend ?? \"right\"} />\n                    </>\n                )}\n                {endValue}\n            </div>\n            <div className=\"search-chart-hit-data-display__unit-time\">\n                {unit && (\n                    <>\n                        <span className=\"search-chart-hit-data-display__unit\">\n                            {unit}\n                        </span>\n                        ,{\" \"}\n                    </>\n                )}\n                {time}\n            </div>\n        </div>\n    )\n}\n","\"use strict\";\n\nfunction _define_property(obj, key, value) {\n    if (key in obj) {\n        Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });\n    } else obj[key] = value;\n\n    return obj;\n}\nexports._ = _define_property;\n","\"use strict\";\n\nvar _define_property = require(\"./_define_property.cjs\");\n\nfunction _object_spread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i] != null ? arguments[i] : {};\n        var ownKeys = Object.keys(source);\n\n        if (typeof Object.getOwnPropertySymbols === \"function\") {\n            ownKeys = ownKeys.concat(\n                Object.getOwnPropertySymbols(source).filter(function(sym) {\n                    return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n                })\n            );\n        }\n\n        ownKeys.forEach(function(key) {\n            _define_property._(target, key, source[key]);\n        });\n    }\n\n    return target;\n}\nexports._ = _object_spread;\n","\"use strict\";\n\nfunction ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n        var symbols = Object.getOwnPropertySymbols(object);\n        if (enumerableOnly) {\n            symbols = symbols.filter(function(sym) {\n                return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n            });\n        }\n        keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n}\nfunction _object_spread_props(target, source) {\n    source = source != null ? source : {};\n\n    if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    else {\n        ownKeys(Object(source)).forEach(function(key) {\n            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n        });\n    }\n\n    return target;\n}\nexports._ = _object_spread_props;\n","\"use strict\";\n\nfunction _object_without_properties_loose(source, excluded) {\n    if (source == null) return {};\n\n    var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;\n    for (i = 0; i < sourceKeys.length; i++) {\n        key = sourceKeys[i];\n        if (excluded.indexOf(key) >= 0) continue;\n        if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n        target[key] = source[key];\n    }\n\n    return target;\n}\nexports._ = _object_without_properties_loose;\n","\"use strict\";\n\nvar _object_without_properties_loose = require(\"./_object_without_properties_loose.cjs\");\n\nfunction _object_without_properties(source, excluded) {\n    if (source == null) return {};\n\n    var target = {}, sourceKeys, key, i;\n    if (typeof Reflect !== \"undefined\" && Reflect.ownKeys) {\n        sourceKeys = Reflect.ownKeys(source);\n        for (i = 0; i < sourceKeys.length; i++) {\n            key = sourceKeys[i];\n            if (excluded.indexOf(key) >= 0) continue;\n            if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n            target[key] = source[key];\n        }\n\n        return target;\n    }\n\n    target = _object_without_properties_loose._(source, excluded);\n    if (Object.getOwnPropertySymbols) {\n        sourceKeys = Object.getOwnPropertySymbols(source);\n        for (i = 0; i < sourceKeys.length; i++) {\n            key = sourceKeys[i];\n            if (excluded.indexOf(key) >= 0) continue;\n            if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n            target[key] = source[key];\n        }\n    }\n\n    return target;\n}\n\nexports._ = _object_without_properties;\n","function getPropertyByPath(object, path) {\n    var parts = Array.isArray(path) ? path : path.split('.');\n    return parts.reduce(function(current, key) {\n        return current && current[key];\n    }, object);\n}\n\nexport { getPropertyByPath };\n","/**\n * This implementation is taken from Lodash implementation.\n * See: https://github.com/lodash/lodash/blob/4.17.11-npm/escape.js\n */ // Used to map characters to HTML entities.\nvar htmlEntities = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n};\n// Used to match HTML entities and HTML characters.\nvar regexUnescapedHtml = /[&<>\"']/g;\nvar regexHasUnescapedHtml = RegExp(regexUnescapedHtml.source);\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n */ function escape(value) {\n    return value && regexHasUnescapedHtml.test(value) ? value.replace(regexUnescapedHtml, function(character) {\n        return htmlEntities[character];\n    }) : value;\n}\n/**\n * This implementation is taken from Lodash implementation.\n * See: https://github.com/lodash/lodash/blob/4.17.11-npm/unescape.js\n */ // Used to map HTML entities to characters.\nvar htmlCharacters = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n};\n// Used to match HTML entities and HTML characters.\nvar regexEscapedHtml = /&(amp|quot|lt|gt|#39);/g;\nvar regexHasEscapedHtml = RegExp(regexEscapedHtml.source);\n/**\n * Converts the HTML entities \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * characters.\n */ function unescape(value) {\n    return value && regexHasEscapedHtml.test(value) ? value.replace(regexEscapedHtml, function(character) {\n        return htmlCharacters[character];\n    }) : value;\n}\n\nexport { escape, unescape };\n","import { _ as _$4 } from '@swc/helpers/cjs/_define_property.cjs';\nimport { _ as _$1 } from '@swc/helpers/cjs/_extends.cjs';\nimport { _ } from '@swc/helpers/cjs/_object_destructuring_empty.cjs';\nimport { _ as _$3 } from '@swc/helpers/cjs/_object_spread.cjs';\nimport { _ as _$2 } from '@swc/helpers/cjs/_object_spread_props.cjs';\nimport { escape } from './escape-html.js';\nimport { isPlainObject } from './isPlainObject.js';\n\nvar TAG_PLACEHOLDER = {\n    highlightPreTag: '__ais-highlight__',\n    highlightPostTag: '__/ais-highlight__'\n};\nvar TAG_REPLACEMENT = {\n    highlightPreTag: '<mark>',\n    highlightPostTag: '</mark>'\n};\n// @MAJOR: in the future, this should only escape, not replace\nfunction replaceTagsAndEscape(value) {\n    return escape(value).replace(new RegExp(TAG_PLACEHOLDER.highlightPreTag, 'g'), TAG_REPLACEMENT.highlightPreTag).replace(new RegExp(TAG_PLACEHOLDER.highlightPostTag, 'g'), TAG_REPLACEMENT.highlightPostTag);\n}\nfunction recursiveEscape(input) {\n    if (isPlainObject(input) && typeof input.value !== 'string') {\n        return Object.keys(input).reduce(function(acc, key) {\n            return _$2(_$3({}, acc), _$4({}, key, recursiveEscape(input[key])));\n        }, {});\n    }\n    if (Array.isArray(input)) {\n        return input.map(recursiveEscape);\n    }\n    return _$2(_$3({}, input), {\n        value: replaceTagsAndEscape(input.value)\n    });\n}\nfunction escapeHits(hits) {\n    if (hits.__escaped === undefined) {\n        // We don't override the value on hit because it will mutate the raw results\n        // instead we make a shallow copy and we assign the escaped values on it.\n        hits = hits.map(function(_0) {\n            _(_0); var hit = _$1({}, _0);\n            if (hit._highlightResult) {\n                hit._highlightResult = recursiveEscape(hit._highlightResult);\n            }\n            if (hit._snippetResult) {\n                hit._snippetResult = recursiveEscape(hit._snippetResult);\n            }\n            return hit;\n        });\n        hits.__escaped = true;\n    }\n    return hits;\n}\nfunction escapeFacets(facetHits) {\n    return facetHits.map(function(h) {\n        return _$2(_$3({}, h), {\n            highlighted: replaceTagsAndEscape(h.highlighted)\n        });\n    });\n}\n\nexport { TAG_PLACEHOLDER, TAG_REPLACEMENT, escapeFacets, escapeHits };\n","import { TAG_REPLACEMENT } from './escape-highlight.js';\n\nfunction getHighlightedParts(highlightedValue) {\n    // @MAJOR: this should use TAG_PLACEHOLDER\n    var highlightPostTag = TAG_REPLACEMENT.highlightPostTag, highlightPreTag = TAG_REPLACEMENT.highlightPreTag;\n    var splitByPreTag = highlightedValue.split(highlightPreTag);\n    var firstValue = splitByPreTag.shift();\n    var elements = !firstValue ? [] : [\n        {\n            value: firstValue,\n            isHighlighted: false\n        }\n    ];\n    splitByPreTag.forEach(function(split) {\n        var splitByPostTag = split.split(highlightPostTag);\n        elements.push({\n            value: splitByPostTag[0],\n            isHighlighted: true\n        });\n        if (splitByPostTag[1] !== '') {\n            elements.push({\n                value: splitByPostTag[1],\n                isHighlighted: false\n            });\n        }\n    });\n    return elements;\n}\n\nexport { getHighlightedParts };\n","function cx() {\n    for(var _len = arguments.length, classNames = new Array(_len), _key = 0; _key < _len; _key++){\n        classNames[_key] = arguments[_key];\n    }\n    return classNames.reduce(function(acc, className) {\n        if (Array.isArray(className)) {\n            return acc.concat(className);\n        }\n        return acc.concat([\n            className\n        ]);\n    }, []).filter(Boolean).join(' ');\n}\n\nexport { cx };\n","import { _ as _$2 } from '@swc/helpers/cjs/_object_spread.cjs';\nimport { _ as _$1 } from '@swc/helpers/cjs/_object_spread_props.cjs';\nimport { _ } from '@swc/helpers/cjs/_object_without_properties.cjs';\nimport { cx } from '../lib/cx.js';\n\nfunction createHighlightPartComponent(param) {\n    var createElement = param.createElement;\n    return function HighlightPart(param) {\n        var classNames = param.classNames, children = param.children, highlightedTagName = param.highlightedTagName, isHighlighted = param.isHighlighted, nonHighlightedTagName = param.nonHighlightedTagName;\n        var TagName = isHighlighted ? highlightedTagName : nonHighlightedTagName;\n        return /*#__PURE__*/ createElement(TagName, {\n            className: isHighlighted ? classNames.highlighted : classNames.nonHighlighted\n        }, children);\n    };\n}\nfunction createHighlightComponent(param) {\n    var createElement = param.createElement, Fragment = param.Fragment;\n    var HighlightPart = createHighlightPartComponent({\n        createElement: createElement,\n        Fragment: Fragment\n    });\n    return function Highlight(userProps) {\n        var parts = userProps.parts, _userProps_highlightedTagName = userProps.highlightedTagName, highlightedTagName = _userProps_highlightedTagName === void 0 ? 'mark' : _userProps_highlightedTagName, _userProps_nonHighlightedTagName = userProps.nonHighlightedTagName, nonHighlightedTagName = _userProps_nonHighlightedTagName === void 0 ? 'span' : _userProps_nonHighlightedTagName, _userProps_separator = userProps.separator, separator = _userProps_separator === void 0 ? ', ' : _userProps_separator, className = userProps.className, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, props = _(userProps, [\n            \"parts\",\n            \"highlightedTagName\",\n            \"nonHighlightedTagName\",\n            \"separator\",\n            \"className\",\n            \"classNames\"\n        ]);\n        return /*#__PURE__*/ createElement(\"span\", _$1(_$2({}, props), {\n            className: cx(classNames.root, className)\n        }), parts.map(function(part, partIndex) {\n            var isLastPart = partIndex === parts.length - 1;\n            return /*#__PURE__*/ createElement(Fragment, {\n                key: partIndex\n            }, part.map(function(subPart, subPartIndex) {\n                return /*#__PURE__*/ createElement(HighlightPart, {\n                    key: subPartIndex,\n                    classNames: classNames,\n                    highlightedTagName: highlightedTagName,\n                    nonHighlightedTagName: nonHighlightedTagName,\n                    isHighlighted: subPart.isHighlighted\n                }, subPart.value);\n            }), !isLastPart && /*#__PURE__*/ createElement(\"span\", {\n                className: classNames.separator\n            }, separator));\n        }));\n    };\n}\n\nexport { createHighlightComponent };\n","import { createHighlightComponent } from 'instantsearch-ui-components';\nimport { createElement, Fragment } from 'react';\n\nvar InternalHighlight = createHighlightComponent({\n    createElement: createElement,\n    Fragment: Fragment\n});\n\nexport { InternalHighlight };\n","import { _ as _$1 } from '@swc/helpers/cjs/_object_spread.cjs';\nimport { _ } from '@swc/helpers/cjs/_object_without_properties.cjs';\nimport { cx } from 'instantsearch-ui-components';\nimport React from 'react';\nimport { InternalHighlight } from './InternalHighlight.js';\n\nfunction Highlight(_0) {\n    var _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, props = _(_0, [\n        \"classNames\"\n    ]);\n    return /*#__PURE__*/ React.createElement(InternalHighlight, _$1({\n        classNames: {\n            root: cx('ais-Highlight', classNames.root),\n            highlighted: cx('ais-Highlight-highlighted', classNames.highlighted),\n            nonHighlighted: cx('ais-Highlight-nonHighlighted', classNames.nonHighlighted),\n            separator: cx('ais-Highlight-separator', classNames.separator)\n        }\n    }, props));\n}\n\nexport { Highlight };\n","import { _ as _$2 } from '@swc/helpers/cjs/_object_spread.cjs';\nimport { _ as _$1 } from '@swc/helpers/cjs/_object_spread_props.cjs';\nimport { _ } from '@swc/helpers/cjs/_object_without_properties.cjs';\nimport { getPropertyByPath, getHighlightedParts, unescape } from 'instantsearch.js/es/lib/utils/index.js';\nimport React from 'react';\nimport { Highlight as Highlight$1 } from '../ui/Highlight.js';\n\nfunction Highlight(_0) {\n    var hit = _0.hit, attribute = _0.attribute, highlightedTagName = _0.highlightedTagName, nonHighlightedTagName = _0.nonHighlightedTagName, separator = _0.separator, props = _(_0, [\n        \"hit\",\n        \"attribute\",\n        \"highlightedTagName\",\n        \"nonHighlightedTagName\",\n        \"separator\"\n    ]);\n    var property = getPropertyByPath(hit._highlightResult, attribute) || [];\n    var properties = Array.isArray(property) ? property : [\n        property\n    ];\n    var parts = properties.map(function(singleValue) {\n        return getHighlightedParts(unescape(singleValue.value || ''));\n    });\n    return /*#__PURE__*/ React.createElement(Highlight$1, _$1(_$2({}, props), {\n        parts: parts,\n        highlightedTagName: highlightedTagName,\n        nonHighlightedTagName: nonHighlightedTagName,\n        separator: separator\n    }));\n}\n\nexport { Highlight };\n","import cx from \"classnames\"\nimport { Highlight } from \"react-instantsearch\"\nimport { CHARTS_INDEX } from \"./searchUtils.js\"\nimport { SearchChartHit } from \"@ourworldindata/types\"\n\ninterface SearchChartHitHeaderProps {\n    hit: SearchChartHit\n    title?: string\n    subtitle?: string\n    url: string\n    source?: string\n    isLarge?: boolean\n    onClick: (vizType: null) => void\n}\n\nexport function SearchChartHitHeader({\n    hit,\n    title,\n    subtitle,\n    url,\n    source,\n    isLarge = false,\n    onClick,\n}: SearchChartHitHeaderProps) {\n    return (\n        <a\n            className={cx(\"search-chart-hit-header\", {\n                \"search-chart-hit-header--large\": isLarge,\n            })}\n            href={url}\n            onClick={() => onClick(null)}\n            data-algolia-index={CHARTS_INDEX}\n            data-algolia-object-id={hit.objectID}\n            data-algolia-position={hit.__position}\n        >\n            <div className=\"search-chart-hit-header__content-wrapper\">\n                {isLarge && (\n                    <img\n                        src=\"owid-logo.svg\"\n                        alt=\"Our World in Data logo\"\n                        className=\"search-chart-hit-header__logo\"\n                        width={104}\n                        height={57}\n                    />\n                )}\n                <div className=\"search-chart-hit-header__content\">\n                    <div className=\"search-chart-hit-header__title-container\">\n                        <h3 className=\"search-chart-hit-header__title\">\n                            {title || hit.title}\n                        </h3>\n                        {source && (\n                            <span className=\"search-chart-hit-header__source search-chart-hit-header__source--desktop\">\n                                Source: {source}\n                            </span>\n                        )}\n                    </div>\n                    {subtitle && subtitle !== hit.subtitle ? (\n                        <div className=\"search-chart-hit-header__subtitle\">\n                            {subtitle}\n                        </div>\n                    ) : hit.subtitle ? (\n                        <Highlight\n                            hit={hit}\n                            attribute=\"subtitle\"\n                            highlightedTagName=\"strong\"\n                            classNames={{\n                                root: \"search-chart-hit-header__subtitle\",\n                            }}\n                        />\n                    ) : null}\n                    {source && (\n                        <span className=\"search-chart-hit-header__source search-chart-hit-header__source--mobile\">\n                            Source: {source}\n                        </span>\n                    )}\n                </div>\n            </div>\n        </a>\n    )\n}\n","import * as R from \"remeda\"\nimport {\n    EntityName,\n    OwidGdocType,\n    TagGraphRoot,\n    SearchState,\n    SearchChartsResponse,\n    SearchChartHit,\n    SearchDataTopicsResponse,\n    SearchDataInsightResponse,\n    SearchStackedArticleResponse,\n    SearchTopicPageResponse,\n    SearchWritingTopicsResponse,\n    StackedArticleHit,\n    TopicPageHit,\n    FilterType,\n    SearchFlatArticleResponse,\n    SearchProfileResponse,\n    ProfileHit,\n} from \"@ourworldindata/types\"\nimport { type LiteClient } from \"algoliasearch/lite\"\nimport {\n    getFilterNamesOfType,\n    formatCountryFacetFilters,\n    formatTopicFacetFilters,\n    formatFeaturedMetricFacetFilter,\n    getSelectableTopics,\n    CHARTS_INDEX,\n    PAGES_INDEX,\n    DATA_CATALOG_ATTRIBUTES,\n    formatDisjunctiveFacetFilters,\n} from \"./searchUtils.js\"\nimport { RichDataComponentVariant } from \"./SearchChartHitRichDataTypes.js\"\n\nfunction makeStateForKey(state: SearchState) {\n    return R.pick(state, [\"query\", \"filters\", \"requireAllCountries\"])\n}\n\n/**\n * Query Key factory for search\n * Provides hierarchical query keys for better cache management and invalidation\n */\nexport const searchQueryKeys = {\n    topicTagGraph: [\"topicTagGraph\"] as const,\n    charts: (state: SearchState) =>\n        [CHARTS_INDEX, \"charts\", makeStateForKey(state)] as const,\n    dataTopics: (state: SearchState) =>\n        [CHARTS_INDEX, \"topics\", makeStateForKey(state)] as const,\n    dataInsights: (state: SearchState) =>\n        [PAGES_INDEX, \"data-insights\", makeStateForKey(state)] as const,\n    articles: (state: SearchState) =>\n        [PAGES_INDEX, \"articles\", makeStateForKey(state)] as const,\n    topicPages: (state: SearchState) =>\n        [PAGES_INDEX, \"topic-pages\", makeStateForKey(state)] as const,\n    writingTopics: (state: SearchState) =>\n        [PAGES_INDEX, \"topics\", makeStateForKey(state)] as const,\n    profiles: (state: SearchState) =>\n        [PAGES_INDEX, \"profiles\", makeStateForKey(state)] as const,\n} as const\n\nexport const chartHitQueryKeys = {\n    chartInfo: (slug: string, entities: string[], queryParams?: string) =>\n        [\"chart-info\", slug, entities, queryParams] as const,\n    searchResultData: (\n        slug: string,\n        queryParams: string | undefined,\n        version: number,\n        variant: RichDataComponentVariant,\n        entities: EntityName[] | undefined,\n        numDataTableRowsPerColumn: number\n    ) =>\n        [\n            \"chart-hit-data\",\n            slug,\n            queryParams,\n            version,\n            variant,\n            entities,\n            numDataTableRowsPerColumn,\n        ] as const,\n} as const\n\nexport async function queryDataTopics(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    tagGraph: TagGraphRoot,\n    selectedTopic: string | undefined\n): Promise<SearchDataTopicsResponse[]> {\n    const dataTopics = [...getSelectableTopics(tagGraph, selectedTopic)]\n\n    const countryFacetFilters = formatCountryFacetFilters(\n        getFilterNamesOfType(state.filters, FilterType.COUNTRY),\n        state.requireAllCountries\n    )\n    const searchParams = dataTopics.map((topic) => {\n        const topicFacetFilters = formatTopicFacetFilters(new Set([topic]))\n        const facetFilters = [...countryFacetFilters, ...topicFacetFilters]\n        return {\n            indexName: CHARTS_INDEX,\n            attributesToRetrieve: DATA_CATALOG_ATTRIBUTES,\n            query: state.query,\n            facetFilters: facetFilters,\n            highlightPreTag: \"<mark>\",\n            highlightPostTag: \"</mark>\",\n            hitsPerPage: 4,\n        }\n    })\n\n    return liteSearchClient\n        .search<SearchChartHit>(searchParams)\n        .then((response) =>\n            response.results.map((res, i: number) => ({\n                title: dataTopics[i],\n                charts: res as SearchChartsResponse,\n            }))\n        )\n}\n\nexport async function queryCharts(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    page: number = 0\n): Promise<SearchChartsResponse> {\n    const countryFacetFilters = formatCountryFacetFilters(\n        getFilterNamesOfType(state.filters, FilterType.COUNTRY),\n        state.requireAllCountries\n    )\n    const topicFacetFilters = formatTopicFacetFilters(\n        getFilterNamesOfType(state.filters, FilterType.TOPIC)\n    )\n    const datasetProductFacetFilters = formatDisjunctiveFacetFilters(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_PRODUCT),\n        \"datasetProducts\"\n    )\n    const datasetNamespaceFacetFilters = formatDisjunctiveFacetFilters(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_NAMESPACE),\n        \"datasetNamespaces\"\n    )\n    const datasetVersionFacetFilters = formatDisjunctiveFacetFilters(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_VERSION),\n        \"datasetVersions\"\n    )\n    const datasetProducerFacetFilters = formatDisjunctiveFacetFilters(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_PRODUCER),\n        \"datasetProducers\"\n    )\n    const fmFacetFilter = formatFeaturedMetricFacetFilter(state.query)\n    const facetFilters = [\n        ...countryFacetFilters,\n        ...topicFacetFilters,\n        ...datasetProductFacetFilters,\n        ...datasetNamespaceFacetFilters,\n        ...datasetVersionFacetFilters,\n        ...datasetProducerFacetFilters,\n        ...fmFacetFilter,\n    ]\n\n    const searchParams = [\n        {\n            indexName: CHARTS_INDEX,\n            attributesToRetrieve: DATA_CATALOG_ATTRIBUTES,\n            query: state.query,\n            facetFilters,\n            highlightPreTag: \"<mark>\",\n            highlightPostTag: \"</mark>\",\n            hitsPerPage: 9,\n            page,\n        },\n    ]\n\n    return liteSearchClient\n        .search<SearchChartHit>(searchParams)\n        .then((response) => response.results[0] as SearchChartsResponse)\n}\n\nexport async function queryDataInsights(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    page: number = 0,\n    hitsPerPage: number = 4\n): Promise<SearchDataInsightResponse> {\n    const selectedCountryNames = getFilterNamesOfType(\n        state.filters,\n        FilterType.COUNTRY\n    )\n    const hasCountry = selectedCountryNames.size > 0\n    const selectedTopics = getFilterNamesOfType(state.filters, FilterType.TOPIC)\n    // Using the selected countries as query search terms until data insights\n    // are tagged with countries.\n    const query = [\n        state.query,\n        // Use advanced syntax to search for countries as exact phrases\n        ...Array.from(selectedCountryNames).map((c) => `\"${c}\"`),\n    ]\n        .filter(Boolean)\n        .join(\" \")\n\n    const searchParams = [\n        {\n            indexName: PAGES_INDEX,\n            query,\n            filters: `type:${OwidGdocType.DataInsight}`,\n            facetFilters: formatTopicFacetFilters(selectedTopics),\n            // Do not search through the content of data insights in case there\n            // is a country filter present. This is to avoid returning data\n            // insights that might mention a country, but are not *about* that\n            // country (e.g. \"Unlike Germany...\").\n            ...(hasCountry && {\n                // a subset of searchableAttributes on the Pages index\n                restrictSearchableAttributes: [\"title\", \"tags\", \"authors\"],\n            }),\n            attributesToRetrieve: [\n                \"title\",\n                \"thumbnailUrl\",\n                \"date\",\n                \"slug\",\n                \"type\",\n            ],\n            highlightPreTag: \"<mark>\",\n            highlightPostTag: \"</mark>\",\n            hitsPerPage,\n            page,\n        },\n    ]\n\n    return liteSearchClient\n        .search(searchParams)\n        .then((response) => response.results[0] as SearchDataInsightResponse)\n}\n\nexport async function queryArticles(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    offset: number = 0,\n    length: number\n): Promise<SearchFlatArticleResponse> {\n    const selectedCountryNames = getFilterNamesOfType(\n        state.filters,\n        FilterType.COUNTRY\n    )\n    const hasCountry = selectedCountryNames.size > 0\n    const selectedTopics = getFilterNamesOfType(state.filters, FilterType.TOPIC)\n    // Using the selected countries as query search terms until articles\n    // are tagged with countries.\n    const query = [\n        state.query,\n        // Use advanced syntax to search for countries as exact phrases\n        ...Array.from(selectedCountryNames).map((c) => `\"${c}\"`),\n    ]\n        .filter(Boolean)\n        .join(\" \")\n\n    const searchParams = [\n        {\n            indexName: PAGES_INDEX,\n            query,\n            filters: `type:${OwidGdocType.Article} OR type:${OwidGdocType.AboutPage}`,\n            facetFilters: formatTopicFacetFilters(selectedTopics),\n            // Do not search through the content of articles in case there is a\n            // country filter present. This is to avoid returning articles that\n            // might mention a country, but are not *about* that country (e.g.\n            // \"Unlike Germany...\").\n            ...(hasCountry && {\n                // a subset of searchableAttributes on the Pages index\n                restrictSearchableAttributes: [\"title\", \"tags\", \"authors\"],\n            }),\n            attributesToRetrieve: [\n                \"title\",\n                \"thumbnailUrl\",\n                \"date\",\n                \"slug\",\n                \"type\",\n                \"content\",\n                \"authors\",\n            ],\n            highlightPreTag: \"<mark>\",\n            highlightPostTag: \"</mark>\",\n            offset,\n            length,\n        },\n    ]\n\n    return liteSearchClient\n        .search(searchParams)\n        .then((response) => response.results[0] as SearchFlatArticleResponse)\n}\n\nexport async function queryTopicPages(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    offset: number = 0,\n    length: number\n): Promise<SearchTopicPageResponse> {\n    const selectedTopics = getFilterNamesOfType(state.filters, FilterType.TOPIC)\n\n    const searchParams = [\n        {\n            indexName: PAGES_INDEX,\n            query: state.query,\n            filters: `type:${OwidGdocType.TopicPage} OR type:${OwidGdocType.LinearTopicPage}`,\n            facetFilters: formatTopicFacetFilters(selectedTopics),\n            attributesToRetrieve: [\n                \"title\",\n                \"type\",\n                \"slug\",\n                \"excerpt\",\n                \"excerptLong\",\n            ],\n            highlightPreTag: \"<mark>\",\n            highlightPostTag: \"</mark>\",\n            offset,\n            length,\n        },\n    ]\n\n    return liteSearchClient\n        .search(searchParams)\n        .then((response) => response.results[0] as SearchTopicPageResponse)\n}\n\nexport async function queryProfiles(\n    liteSearchClient: LiteClient,\n    state: SearchState,\n    offset: number = 0,\n    length: number\n): Promise<SearchProfileResponse> {\n    const selectedCountryNames = getFilterNamesOfType(\n        state.filters,\n        FilterType.COUNTRY\n    )\n    const selectedTopics = getFilterNamesOfType(state.filters, FilterType.TOPIC)\n\n    const facetFilters = [\n        ...formatCountryFacetFilters(\n            selectedCountryNames,\n            state.requireAllCountries\n        ),\n        ...formatTopicFacetFilters(selectedTopics),\n    ]\n\n    const searchParams = [\n        {\n            indexName: PAGES_INDEX,\n            query: state.query,\n            filters: `type:${OwidGdocType.Profile}`,\n            facetFilters,\n            attributesToRetrieve: [\n                \"title\",\n                \"thumbnailUrl\",\n                \"slug\",\n                \"excerpt\",\n                \"type\",\n                \"availableEntities\",\n            ],\n            highlightPreTag: \"<mark>\",\n            highlightPostTag: \"</mark>\",\n            offset,\n            length,\n        },\n    ]\n\n    return liteSearchClient\n        .search<ProfileHit>(searchParams)\n        .then((response) => response.results[0] as SearchProfileResponse)\n}\n\nexport async function queryWritingTopics(\n    liteSearchClient: LiteClient,\n    tagGraph: TagGraphRoot,\n    selectedTopic: string | undefined\n): Promise<SearchWritingTopicsResponse[]> {\n    const writingTopics = [...getSelectableTopics(tagGraph, selectedTopic)]\n\n    // Create search parameters for both articles and topic pages for each topic\n    const searchParams = writingTopics.flatMap((topic) => {\n        const topicFacetFilters = formatTopicFacetFilters(new Set([topic]))\n\n        return [\n            {\n                indexName: PAGES_INDEX,\n                attributesToRetrieve: [\n                    \"title\",\n                    \"slug\",\n                    \"thumbnailUrl\",\n                    \"content\",\n                    \"type\",\n                ],\n                filters: `type:${OwidGdocType.Article} OR type:${OwidGdocType.AboutPage}`,\n                facetFilters: topicFacetFilters,\n                highlightPreTag: \"<mark>\",\n                highlightPostTag: \"</mark>\",\n                hitsPerPage: 3,\n            },\n            {\n                indexName: PAGES_INDEX,\n                attributesToRetrieve: [\"title\", \"slug\", \"type\"],\n                filters: `type:${OwidGdocType.TopicPage} OR type:${OwidGdocType.LinearTopicPage}`,\n                facetFilters: topicFacetFilters,\n                highlightPreTag: \"<mark>\",\n                highlightPostTag: \"</mark>\",\n                hitsPerPage: 8,\n            },\n        ]\n    })\n\n    return liteSearchClient\n        .search<StackedArticleHit | TopicPageHit>(searchParams)\n        .then((response) => {\n            // Process results in pairs (articles, then topic pages for each topic)\n            return writingTopics.map((topic, i) => {\n                const articlesResult = response.results[\n                    i * 2\n                ] as SearchStackedArticleResponse\n                const topicPagesResult = response.results[\n                    i * 2 + 1\n                ] as SearchTopicPageResponse\n\n                const totalCount =\n                    (articlesResult.nbHits ?? 0) +\n                    (topicPagesResult.nbHits ?? 0)\n\n                return {\n                    title: topic,\n                    articles: articlesResult,\n                    topicPages: topicPagesResult,\n                    totalCount,\n                }\n            })\n        })\n}\n","import { SearchChartHitComponentVariant } from \"@ourworldindata/types\"\n\nexport type RichDataComponentVariant = Extract<\n    SearchChartHitComponentVariant,\n    \"large\" | \"medium\"\n>\n\nexport enum PreviewVariant {\n    Thumbnail = \"thumbnail\",\n    Large = \"large\",\n}\n\nexport interface PreviewType {\n    variant: PreviewVariant\n    isMinimal: boolean\n}\n","import * as R from \"remeda\"\nimport * as _ from \"lodash-es\"\nimport { match } from \"ts-pattern\"\nimport {\n    PreviewType,\n    PreviewVariant,\n    RichDataComponentVariant,\n} from \"./SearchChartHitRichDataTypes.js\"\nimport {\n    SearchChartHitComponentVariant,\n    GridSlotKey,\n    LargeVariantGridSlotKey,\n    MediumVariantGridSlotKey,\n    LayoutSlot,\n} from \"@ourworldindata/types\"\nimport { getTableColumnCountForGridSlotKey } from \"@ourworldindata/utils\"\n\n// Keep in sync with $scatter-thumbnail-width and $scatter-thumbnail-height in SearchChartHitRichData.scss\nconst SCATTER_THUMBNAIL_WIDTH = 300\nconst SCATTER_THUMBNAIL_HEIGHT = 200\n\n/** Number of table columns for a number of placed tabs */\nexport function getTotalColumnCount(\n    placedTabs: LayoutSlot<GridSlotKey>[]\n): number {\n    return R.sumBy(placedTabs, (tab) =>\n        getTableColumnCountForGridSlotKey(tab.slotKey)\n    )\n}\n\nexport function makeSlotClassNames(\n    variant: RichDataComponentVariant,\n    slot: GridSlotKey\n): string {\n    const baseName = `${variant}-variant`\n    return `${baseName}__slot ${baseName}__${mapGridSlotKeyToClassName(slot)}`\n}\n\nexport function getPreviewType(\n    variant: SearchChartHitComponentVariant,\n    { isPrimaryTab }: { isPrimaryTab: boolean }\n): PreviewType {\n    // Use the large thumbnail for the primary tab in the large variant\n    if (isPrimaryTab && variant === \"large\")\n        return { variant: PreviewVariant.Large, isMinimal: true }\n\n    // Use the minimal version for the first tab which is annotated by the table\n    const isMinimal = isPrimaryTab\n\n    return { variant: PreviewVariant.Thumbnail, isMinimal }\n}\n\nexport function calculateScatterPreviewImageDimensions(): {\n    width: number\n    height: number\n} {\n    return {\n        width: 4 * SCATTER_THUMBNAIL_WIDTH,\n        height: 4 * SCATTER_THUMBNAIL_HEIGHT,\n    }\n}\n\nfunction mapGridSlotKeyToClassName(\n    slot: MediumVariantGridSlotKey | LargeVariantGridSlotKey\n): string {\n    return (\n        match(slot)\n            // medium variant grid slots\n            .with(MediumVariantGridSlotKey.Single, () => \"single-slot\")\n            .with(MediumVariantGridSlotKey.Double, () => \"double-slot\")\n            .with(MediumVariantGridSlotKey.Triple, () => \"triple-slot\")\n            .with(MediumVariantGridSlotKey.Quad, () => \"quad-slot\")\n            .with(MediumVariantGridSlotKey.SmallLeft, () => \"small-slot-left\")\n            .with(MediumVariantGridSlotKey.SmallRight, () => \"small-slot-right\")\n\n            // large variant grid slots\n            .with(LargeVariantGridSlotKey.Full, () => \"full\")\n            .with(LargeVariantGridSlotKey.LeftQuad, () => \"left-quad\")\n            .with(LargeVariantGridSlotKey.RightQuad, () => \"right-quad\")\n            .with(\n                LargeVariantGridSlotKey.RightQuadLeftColumn,\n                () => \"right-quad-left-column\"\n            )\n            .with(LargeVariantGridSlotKey.TopRightCell, () => \"top-right-cell\")\n            .with(\n                LargeVariantGridSlotKey.BottomRightCell,\n                () => \"bottom-right-cell\"\n            )\n            .with(LargeVariantGridSlotKey.SingleCell, () => \"single-cell\")\n            .exhaustive()\n    )\n}\n","import { QueryStatus, useQuery } from \"@tanstack/react-query\"\nimport {\n    ChartRecordType,\n    EntityName,\n    GrapherTabName,\n    GrapherValuesJson,\n    SearchChartHit,\n} from \"@ourworldindata/types\"\nimport { fetchJson } from \"@ourworldindata/utils\"\nimport {\n    constructChartInfoUrl,\n    constructChartUrl,\n    constructPreviewUrl,\n    toGrapherQueryParams,\n} from \"./searchUtils\"\nimport { chartHitQueryKeys } from \"./queries\"\nimport { PreviewVariant } from \"./SearchChartHitRichDataTypes.js\"\nimport { calculateScatterPreviewImageDimensions } from \"./SearchChartHitRichDataHelpers.js\"\n\nexport function useQueryChartInfo({\n    hit,\n    entities,\n    enabled,\n}: {\n    hit: SearchChartHit\n    entities: EntityName[]\n    enabled?: boolean\n}): {\n    data?: GrapherValuesJson\n    status: QueryStatus\n} {\n    const isChartRecord = hit.type === ChartRecordType.Chart\n\n    const { data, status } = useQuery({\n        queryKey: chartHitQueryKeys.chartInfo(\n            hit.slug,\n            entities,\n            isChartRecord ? undefined : hit.queryParams\n        ),\n        queryFn: () => {\n            const entityParam = toGrapherQueryParams({ entities })\n            const url = constructChartInfoUrl({\n                hit,\n                grapherParams: entityParam,\n            })\n            if (!url) return null\n            return fetchJson<GrapherValuesJson>(url)\n        },\n        enabled,\n    })\n\n    // If the result is null, the query URL couldn't be constructed. In this\n    // case, return an error status instead of a success status with null data\n    if (data === null) return { status: \"error\" }\n\n    return { data, status }\n}\n\nexport function constructChartAndPreviewUrlsForTab({\n    hit,\n    tab,\n    entities,\n    hasScatter = false,\n}: {\n    hit: SearchChartHit\n    tab: GrapherTabName\n    entities?: EntityName[]\n    hasScatter?: boolean\n}): { chartUrl: string; previewUrl: string } {\n    const grapherParams = toGrapherQueryParams({ entities, tab })\n\n    const chartUrl = constructChartUrl({\n        hit,\n        grapherParams,\n    })\n\n    const imageDimensions = hasScatter\n        ? calculateScatterPreviewImageDimensions()\n        : undefined\n    const previewUrl = constructPreviewUrl({\n        hit,\n        grapherParams,\n        variant: PreviewVariant.Thumbnail,\n        imageWidth: imageDimensions?.width,\n        imageHeight: imageDimensions?.height,\n    })\n\n    return { chartUrl, previewUrl }\n}\n","import { useMemo } from \"react\"\nimport { buildChartHitDataDisplayProps, Tippy } from \"@ourworldindata/utils\"\nimport {\n    GRAPHER_TAB_NAMES,\n    GrapherChartType,\n    SearchChartHitComponentProps,\n} from \"@ourworldindata/types\"\nimport {\n    constructChartUrl,\n    pickEntitiesForChartHit,\n    toGrapherQueryParams,\n} from \"./searchUtils.js\"\nimport { Button, GrapherTabIcon } from \"@ourworldindata/components\"\nimport { useIntersectionObserver, useMediaQuery } from \"usehooks-ts\"\nimport {\n    makeLabelForGrapherTab,\n    WORLD_ENTITY_NAME,\n} from \"@ourworldindata/grapher\"\nimport { SearchChartHitDataDisplay } from \"./SearchChartHitDataDisplay.js\"\nimport { SearchChartHitHeader } from \"./SearchChartHitHeader.js\"\nimport { faDownload } from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    constructChartAndPreviewUrlsForTab,\n    useQueryChartInfo,\n} from \"./SearchChartHitSmallHelpers.js\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\n\nexport function SearchChartHitSmall({\n    hit,\n    selectedRegionNames,\n    onClick,\n}: SearchChartHitComponentProps) {\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n\n    // Intersection observer for lazy loading chart info\n    const { ref, isIntersecting: hasBeenVisible } = useIntersectionObserver({\n        rootMargin: \"400px\", // Start loading 400px before visible\n        freezeOnceVisible: true, // Only trigger once\n    })\n\n    const entities = useMemo(\n        () => pickEntitiesForChartHit(hit, selectedRegionNames),\n        [hit, selectedRegionNames]\n    )\n\n    const entityForDisplay = entities[0] ?? WORLD_ENTITY_NAME\n    const hasUserPickedEntities = entities.length > 0\n\n    // Fetch chart info and data values\n    const { data: chartInfo } = useQueryChartInfo({\n        hit,\n        entities: [entityForDisplay],\n        // Only fetch when the component is visible\n        enabled: hasBeenVisible,\n    })\n\n    // The first chart tab is the primary chart type\n    const chartType: GrapherChartType | undefined = hit.availableTabs.find(\n        (tab) =>\n            tab !== GRAPHER_TAB_NAMES.Table &&\n            tab !== GRAPHER_TAB_NAMES.WorldMap\n    )\n\n    const dataDisplayProps = buildChartHitDataDisplayProps({\n        chartInfo,\n        chartType,\n        entity: entityForDisplay,\n        isEntityPickedByUser: hasUserPickedEntities,\n    })\n\n    const grapherParams = toGrapherQueryParams({ entities })\n    const chartUrl = constructChartUrl({ hit, grapherParams })\n    const downloadUrl = constructChartUrl({\n        hit,\n        grapherParams,\n        overlay: \"download-data\",\n    })\n\n    return (\n        <article ref={ref} className=\"search-chart-hit-small\">\n            <div className=\"search-chart-hit-small__content\">\n                <SearchChartHitHeader\n                    hit={hit}\n                    url={chartUrl}\n                    source={chartInfo?.source}\n                    onClick={onClick}\n                />\n                <div className=\"search-chart-hit-small__tabs-container\">\n                    {hit.availableTabs.map((tab) => {\n                        const { chartUrl } = constructChartAndPreviewUrlsForTab(\n                            { hit, tab, entities }\n                        )\n\n                        const label = makeLabelForGrapherTab(tab, {\n                            format: \"long\",\n                        })\n\n                        return (\n                            <Tippy\n                                key={tab}\n                                appendTo={() => document.body}\n                                className=\"search-chart-hit-small__tippy\"\n                                content={label}\n                                placement=\"bottom\"\n                                theme=\"dark\"\n                                disabled={isSmallScreen}\n                            >\n                                <a\n                                    href={chartUrl}\n                                    onClick={() => onClick(tab)}\n                                    aria-label={label}\n                                >\n                                    <GrapherTabIcon tab={tab} />\n                                </a>\n                            </Tippy>\n                        )\n                    })}\n                </div>\n            </div>\n            {dataDisplayProps && (\n                <SearchChartHitDataDisplay {...dataDisplayProps} />\n            )}\n            <Tippy\n                appendTo={() => document.body}\n                className=\"search-chart-hit-small__tippy\"\n                content=\"Download options\"\n                placement=\"bottom\"\n                theme=\"dark\"\n                disabled={isSmallScreen}\n            >\n                {/* Without this wrapper element, the tippy isn't positioned correctly */}\n                <div className=\"search-chart-hit-small__download-button-wrapper\">\n                    <Button\n                        className=\"search-chart-hit-small__download-button\"\n                        theme=\"solid-light-blue\"\n                        href={downloadUrl}\n                        icon={faDownload}\n                        ariaLabel=\"Download options\"\n                        dataTrackNote=\"search-download-options\"\n                    />\n                </div>\n            </Tippy>\n        </article>\n    )\n}\n","import cx from \"classnames\"\nimport * as R from \"remeda\"\nimport { SearchChartHitDataTableProps } from \"@ourworldindata/types\"\nimport { GrapherTrendArrow } from \"@ourworldindata/components\"\n\nexport function SearchChartHitDataTable({\n    rows,\n    title,\n    numRowsPerColumn = 4,\n}: SearchChartHitDataTableProps & {\n    numRowsPerColumn?: number\n}): React.ReactElement {\n    // Show the time in the title if all items refer to the same time\n    const times = rows.map((row) => row.time).filter((time) => time)\n    const mainTime = times[0]\n    const shouldShowTimeInTitle =\n        mainTime !== undefined && times.every((time) => time === mainTime)\n\n    // Hide the time in each row if it's shown in the title\n    const displayRows = shouldShowTimeInTitle\n        ? rows.map((item) => R.omit(item, [\"time\"]))\n        : rows\n\n    // Hide the color in each row if all rows share the same color\n    const shouldShowSwatch =\n        rows.length <= 1 || rows.some((row) => row.color !== rows[0].color)\n\n    const shouldSpanBothColumns = displayRows.length <= numRowsPerColumn\n\n    return (\n        <div className=\"search-chart-hit-table\">\n            <Header\n                title={title}\n                time={shouldShowTimeInTitle ? mainTime : undefined}\n                timePreposition={rows[0]?.timePreposition}\n            />\n            {displayRows.map((row) => (\n                <Row\n                    key={row.label}\n                    row={row}\n                    shouldShowSwatch={shouldShowSwatch}\n                    shouldSpanBothColumns={shouldSpanBothColumns}\n                />\n            ))}\n        </div>\n    )\n}\n\nfunction Header({\n    title,\n    time,\n    timePreposition = \"in\",\n}: {\n    title: string\n    time?: string\n    timePreposition?: string\n}): React.ReactElement {\n    return (\n        <div className=\"search-chart-hit-table-header search-chart-hit-table-row col-span\">\n            <span className=\"search-chart-hit-table-header__title\">\n                {title}\n            </span>\n            {time && (\n                <span>\n                    , {timePreposition} {time}\n                </span>\n            )}\n        </div>\n    )\n}\n\nfunction Row({\n    row,\n    shouldShowSwatch = true,\n    shouldSpanBothColumns,\n}: {\n    row: SearchChartHitDataTableProps[\"rows\"][number]\n    shouldShowSwatch?: boolean\n    shouldSpanBothColumns: boolean\n}): React.ReactElement {\n    return (\n        <div\n            className={cx(\"search-chart-hit-table-row\", {\n                \"col-span\": shouldSpanBothColumns,\n                \"search-chart-hit-table-row--muted\": row.muted,\n            })}\n        >\n            {shouldShowSwatch && row.color && (\n                <span\n                    className={cx(\"search-chart-hit-table-row__swatch\", {\n                        \"search-chart-hit-table-row__swatch--rounded\":\n                            row.rounded,\n                        \"search-chart-hit-table-row__swatch--outlined\":\n                            row.outlined,\n                        \"search-chart-hit-table-row__swatch--striped\":\n                            row.striped,\n                        \"search-chart-hit-table-row__swatch--no-data\":\n                            row.striped === \"no-data\",\n                    })}\n                    style={{ backgroundColor: row.color }}\n                />\n            )}\n            <span className=\"search-chart-hit-table-row__name\">\n                {row.label}\n            </span>\n            {row.value !== undefined && (\n                <>\n                    <span className=\"search-chart-hit-table-row__spacer\" />\n                    <span className=\"search-chart-hit-table-row__value\">\n                        {row.startValue && (\n                            <>\n                                {row.startValue}\n                                {row.trend ? (\n                                    <GrapherTrendArrow\n                                        className=\"search-chart-hit-table-row__arrow\"\n                                        direction={row.trend}\n                                    />\n                                ) : (\n                                    <span className=\"search-chart-hit-table-row__vs\">\n                                        {\" \"}\n                                        vs.{\" \"}\n                                    </span>\n                                )}\n                            </>\n                        )}\n                        {row.value}\n                        {row.time && (\n                            <span className=\"search-chart-hit-table-row__time\">\n                                {\" \"}\n                                {row.timePreposition ?? \"in\"} {row.time}\n                            </span>\n                        )}\n                    </span>\n                </>\n            )}\n        </div>\n    )\n}\n","import cx from \"classnames\"\n\nexport function CaptionedLink({\n    url,\n    className,\n    onClick,\n    children,\n    caption,\n}: {\n    url: string\n    className?: string\n    onClick?: () => void\n    children: React.ReactNode\n    caption: React.ReactNode\n}): React.ReactElement {\n    return (\n        <a\n            href={url}\n            className={cx(\"search-chart-hit-captioned-link\", className)}\n            onClick={onClick}\n        >\n            {children}\n            <div className=\"search-chart-hit-captioned-link__label\">\n                {caption}\n            </div>\n        </a>\n    )\n}\n\nexport function CaptionedLinkOverlay({\n    children,\n}: {\n    children: React.ReactNode\n}): React.ReactElement {\n    return (\n        <div className=\"search-chart-hit-captioned-link__overlay\">\n            <div className=\"search-chart-hit-captioned-link__cta\">\n                {children}\n            </div>\n        </div>\n    )\n}\n","import { SearchChartHitDataTable } from \"./SearchChartHitDataTable\"\nimport {\n    CaptionedLink,\n    CaptionedLinkOverlay,\n} from \"./SearchChartHitCaptionedLink\"\nimport {\n    GRAPHER_TAB_NAMES,\n    SearchChartHitDataTableProps,\n} from \"@ourworldindata/types\"\nimport { GrapherTabIcon } from \"@ourworldindata/components\"\n\nexport function CaptionedTable({\n    chartUrl,\n    dataTableContent,\n    numAvailableEntities,\n    numRowsPerColumn,\n    entityType,\n    entityTypePlural,\n    className,\n    onClick,\n}: {\n    chartUrl: string\n    dataTableContent?: SearchChartHitDataTableProps\n    numAvailableEntities: number\n    numRowsPerColumn?: number\n    entityType: string\n    entityTypePlural: string\n    className?: string\n    onClick?: () => void\n}): React.ReactElement | null {\n    if (!dataTableContent) return null\n\n    const caption =\n        numAvailableEntities === 1\n            ? `Data available for ${numAvailableEntities} ${entityType}`\n            : `Data available for ${numAvailableEntities} ${entityTypePlural}`\n\n    const captionWithIcon = (\n        <span className=\"search-chart-hit-captioned-link-label-content\">\n            <GrapherTabIcon tab={GRAPHER_TAB_NAMES.Table} />\n            {caption}\n        </span>\n    )\n\n    return (\n        <CaptionedLink\n            caption={captionWithIcon}\n            url={chartUrl}\n            className={className}\n            onClick={onClick}\n        >\n            <div className=\"search-chart-hit-table-wrapper\">\n                <div className=\"search-chart-hit-table-wrapper-content\">\n                    <SearchChartHitDataTable\n                        {...dataTableContent}\n                        numRowsPerColumn={numRowsPerColumn}\n                    />\n                </div>\n                <CaptionedLinkOverlay>Click to explore</CaptionedLinkOverlay>\n            </div>\n        </CaptionedLink>\n    )\n}\n","import { faHeartBroken } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { useState } from \"react\"\nimport cx from \"classnames\"\nimport {\n    GRAPHER_THUMBNAIL_HEIGHT,\n    GRAPHER_THUMBNAIL_WIDTH,\n} from \"@ourworldindata/grapher\"\nimport { CaptionedLinkOverlay } from \"./SearchChartHitCaptionedLink.js\"\n\nexport const SearchChartHitThumbnail = ({\n    previewUrl,\n    hoverOverlayText,\n    imageWidth = GRAPHER_THUMBNAIL_WIDTH,\n    imageHeight = GRAPHER_THUMBNAIL_HEIGHT,\n}: {\n    previewUrl: string\n    hoverOverlayText: string\n    imageWidth?: number\n    imageHeight?: number\n}) => {\n    const [imgLoaded, setImgLoaded] = useState(false)\n    const [imgError, setImgError] = useState(false)\n\n    return (\n        <div className=\"search-chart-hit-thumbnail\">\n            {imgError && (\n                <div className=\"chart-hit-img-error\">\n                    <FontAwesomeIcon icon={faHeartBroken} />\n                    <span>Chart preview not available</span>\n                </div>\n            )}\n            <img\n                key={previewUrl}\n                className={cx({ loaded: imgLoaded, error: imgError })}\n                loading=\"lazy\"\n                width={imageWidth}\n                height={imageHeight}\n                src={previewUrl}\n                onLoad={() => setImgLoaded(true)}\n                onError={() => setImgError(true)}\n            />\n            <CaptionedLinkOverlay>{hoverOverlayText}</CaptionedLinkOverlay>\n        </div>\n    )\n}\n","import { makeLabelForGrapherTab } from \"@ourworldindata/grapher\"\nimport { GrapherTabName } from \"@ourworldindata/types\"\nimport { SearchChartHitThumbnail } from \"./SearchChartHitThumbnail\"\nimport { CaptionedLink } from \"./SearchChartHitCaptionedLink\"\nimport { GrapherTabIcon } from \"@ourworldindata/components\"\nimport { checkIsVeryShortUnit } from \"@ourworldindata/utils\"\n\nexport function CaptionedThumbnail({\n    chartType,\n    chartUrl,\n    previewUrl,\n    isSmallSlot = false,\n    imageWidth,\n    imageHeight,\n    unit,\n    className,\n    onClick,\n}: {\n    chartType: GrapherTabName\n    chartUrl: string\n    previewUrl: string\n    isSmallSlot?: boolean\n    imageWidth?: number\n    imageHeight?: number\n    unit?: string\n    className?: string\n    onClick?: () => void\n}): React.ReactElement {\n    const caption = makeLabelForGrapherTab(chartType, { format: \"long\" })\n    const hoverOverlayText = isSmallSlot ? \"Explore\" : \"Click to explore\"\n\n    const captionWithIcon = (\n        <span className=\"search-chart-hit-captioned-link-label-content\">\n            <GrapherTabIcon tab={chartType} />\n            {caption}\n            {unit && !checkIsVeryShortUnit(unit) && (\n                <span className=\"unit\">Measured in {unit}</span>\n            )}\n        </span>\n    )\n\n    return (\n        <CaptionedLink\n            caption={captionWithIcon}\n            url={chartUrl}\n            className={className}\n            onClick={onClick}\n        >\n            <SearchChartHitThumbnail\n                previewUrl={previewUrl}\n                imageWidth={imageWidth}\n                imageHeight={imageHeight}\n                hoverOverlayText={hoverOverlayText}\n            />\n        </CaptionedLink>\n    )\n}\n","import { useIntersectionObserver } from \"usehooks-ts\"\nimport { SearchChartHitComponentProps } from \"@ourworldindata/types\"\nimport { useMemo } from \"react\"\nimport cx from \"classnames\"\nimport {\n    constructChartUrl,\n    pickEntitiesForChartHit,\n    toGrapherQueryParams,\n} from \"./searchUtils.js\"\nimport { WORLD_ENTITY_NAME } from \"@ourworldindata/grapher\"\nimport {\n    buildChartHitDataDisplayProps,\n    GRAPHER_TAB_NAMES,\n    GrapherChartType,\n    placeGrapherTabsInMediumVariantGridLayout,\n} from \"@ourworldindata/utils\"\nimport { SearchChartHitHeader } from \"./SearchChartHitHeader.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport { faDownload } from \"@fortawesome/free-solid-svg-icons\"\nimport { CaptionedThumbnail } from \"./SearchChartHitCaptionedThumbnail.js\"\nimport { SearchChartHitDataDisplay } from \"./SearchChartHitDataDisplay.js\"\nimport {\n    getTotalColumnCount,\n    makeSlotClassNames,\n} from \"./SearchChartHitRichDataHelpers.js\"\nimport {\n    constructChartAndPreviewUrlsForTab,\n    useQueryChartInfo,\n} from \"./SearchChartHitSmallHelpers.js\"\n\nexport function SearchChartHitRichDataFallback({\n    hit,\n    selectedRegionNames,\n    onClick,\n}: SearchChartHitComponentProps) {\n    const hasScatter = hit.availableTabs.includes(GRAPHER_TAB_NAMES.ScatterPlot)\n\n    // Intersection observer for lazy loading chart info\n    const { ref, isIntersecting: hasBeenVisible } = useIntersectionObserver({\n        rootMargin: \"400px\", // Start loading 400px before visible\n        freezeOnceVisible: true, // Only trigger once\n    })\n\n    const entities = useMemo(\n        () => pickEntitiesForChartHit(hit, selectedRegionNames),\n        [hit, selectedRegionNames]\n    )\n\n    const entityForDisplay = entities[0] ?? WORLD_ENTITY_NAME\n    const hasUserPickedEntities = entities.length > 0\n\n    const entityParam = toGrapherQueryParams({ entities })\n    const chartUrl = constructChartUrl({ hit, grapherParams: entityParam })\n\n    // Fetch chart info and data values\n    const { data: chartInfo } = useQueryChartInfo({\n        hit,\n        entities,\n        // Only fetch when the component is visible\n        enabled: hasBeenVisible,\n    })\n\n    // The first chart tab is the 'primary' chart type\n    const chartType: GrapherChartType | undefined = hit.availableTabs.find(\n        (tab) =>\n            tab !== GRAPHER_TAB_NAMES.Table &&\n            tab !== GRAPHER_TAB_NAMES.WorldMap\n    )\n\n    const dataDisplayProps = buildChartHitDataDisplayProps({\n        chartInfo,\n        chartType,\n        entity: entityForDisplay,\n        isEntityPickedByUser: hasUserPickedEntities,\n    })\n\n    const grapherTabs = hit.availableTabs.filter(\n        (tab) => tab !== GRAPHER_TAB_NAMES.Table\n    )\n    const placedTabs = placeGrapherTabsInMediumVariantGridLayout(grapherTabs, {\n        hasDataDisplay: !!dataDisplayProps,\n        hasDataTable: false,\n    })\n\n    const contentStyle = {\n        \"--num-columns\": getTotalColumnCount(placedTabs),\n    } as React.CSSProperties\n\n    return (\n        <div ref={ref} className=\"search-chart-hit-rich-data\">\n            <div className=\"search-chart-hit-rich-data__header\">\n                <SearchChartHitHeader\n                    hit={hit}\n                    url={chartUrl}\n                    source={chartInfo?.source}\n                    onClick={onClick}\n                />\n                <div className=\"search-chart-hit-rich-data__header-actions\">\n                    <Button\n                        text=\"Download options\"\n                        className=\"search-chart-hit-rich-data__button\"\n                        theme=\"solid-light-blue\"\n                        href={constructChartUrl({\n                            hit,\n                            overlay: \"download-data\",\n                        })}\n                        icon={faDownload}\n                        iconPosition=\"left\"\n                        dataTrackNote=\"search-download-options\"\n                    />\n                </div>\n            </div>\n\n            <div\n                className={cx(\n                    \"search-chart-hit-rich-data__content\",\n                    \"search-chart-hit-rich-data__content--medium\",\n                    {\n                        \"search-chart-hit-rich-data__content--scatter\":\n                            hasScatter,\n                    }\n                )}\n                style={contentStyle}\n            >\n                {placedTabs.map(({ grapherTab, slotKey }) => {\n                    const { chartUrl, previewUrl } =\n                        constructChartAndPreviewUrlsForTab({\n                            hit,\n                            tab: grapherTab,\n                            entities,\n                            hasScatter,\n                        })\n\n                    const className = makeSlotClassNames(\"medium\", slotKey)\n\n                    return (\n                        <CaptionedThumbnail\n                            key={grapherTab}\n                            chartType={grapherTab}\n                            chartUrl={chartUrl}\n                            previewUrl={previewUrl}\n                            className={className}\n                            onClick={() => onClick(grapherTab)}\n                        />\n                    )\n                })}\n\n                {dataDisplayProps && (\n                    <SearchChartHitDataDisplay\n                        className=\"data-slot\"\n                        {...dataDisplayProps}\n                    />\n                )}\n            </div>\n        </div>\n    )\n}\n","import * as R from \"remeda\"\nimport { useMemo } from \"react\"\nimport cx from \"classnames\"\nimport { useIntersectionObserver, useMediaQuery } from \"usehooks-ts\"\nimport { faDownload } from \"@fortawesome/free-solid-svg-icons\"\nimport { match } from \"ts-pattern\"\nimport {\n    GRAPHER_THUMBNAIL_HEIGHT,\n    GRAPHER_THUMBNAIL_WIDTH,\n    mapGrapherTabNameToQueryParam,\n} from \"@ourworldindata/grapher\"\nimport {\n    EntityName,\n    GRAPHER_TAB_NAMES,\n    GrapherTabName,\n    GridSlotKey,\n    LargeVariantGridSlotKey,\n    MediumVariantGridSlotKey,\n    LayoutSlot,\n    GrapherSearchResultJson,\n    GrapherQueryParams,\n    ChartRecordType,\n    SearchChartHit,\n    SearchChartHitComponentProps,\n    SearchChartHitComponentVariant,\n} from \"@ourworldindata/types\"\nimport { Button } from \"@ourworldindata/components\"\nimport { MEDIUM_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport {\n    constructChartUrl,\n    constructPreviewUrl,\n    constructSearchResultUrl,\n    pickEntitiesForChartHit,\n} from \"./searchUtils.js\"\nimport {\n    getTotalColumnCount,\n    makeSlotClassNames,\n    getPreviewType,\n    calculateScatterPreviewImageDimensions,\n} from \"./SearchChartHitRichDataHelpers.js\"\nimport { SearchChartHitHeader } from \"./SearchChartHitHeader.js\"\nimport { CaptionedTable } from \"./SearchChartHitCaptionedTable.js\"\nimport { CaptionedThumbnail } from \"./SearchChartHitCaptionedThumbnail.js\"\nimport { SearchChartHitDataDisplay } from \"./SearchChartHitDataDisplay.js\"\nimport { SearchChartHitRichDataFallback } from \"./SearchChartHitRichDataFallback.js\"\nimport {\n    PreviewVariant,\n    RichDataComponentVariant,\n} from \"./SearchChartHitRichDataTypes.js\"\nimport { QueryStatus, useQuery } from \"@tanstack/react-query\"\nimport { chartHitQueryKeys } from \"./queries.js\"\nimport { fetchJson } from \"@ourworldindata/utils\"\n\n// Keep in sync with $num-rows-per-column in SearchChartHitRichData.scss\nconst NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT = 4\nconst NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_LARGE_VARIANT = 10\n\n// Keep in sync with $scatter-num-data-table-rows-per-column in SearchChartHitRichData.scss\nconst SCATTER_NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT = 6\n\nexport function SearchChartHitRichData({\n    hit,\n    selectedRegionNames,\n    onClick,\n    variant,\n}: SearchChartHitComponentProps & {\n    variant: RichDataComponentVariant\n}) {\n    const isMediumScreen = useMediaQuery(MEDIUM_BREAKPOINT_MEDIA_QUERY)\n\n    // Determine the maximum number of data table rows per column\n    const isLargeVariant = variant === \"large\"\n    const hasScatter = hit.availableTabs.includes(GRAPHER_TAB_NAMES.ScatterPlot)\n    const numDataTableRowsPerColumn = isLargeVariant\n        ? NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_LARGE_VARIANT\n        : hasScatter\n          ? SCATTER_NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT\n          : NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT\n\n    // Entities available for the chart\n    const availableEntities =\n        hit.originalAvailableEntities ?? hit.availableEntities\n\n    // Entities selected by the user\n    const pickedEntities = useMemo(\n        () => pickEntitiesForChartHit(hit, selectedRegionNames),\n        [hit, selectedRegionNames]\n    )\n\n    // Intersection observer for lazy loading config and data\n    const { ref, isIntersecting: hasBeenVisible } = useIntersectionObserver({\n        rootMargin: \"400px\", // Start loading 400px before visible\n        freezeOnceVisible: true, // Only trigger once\n    })\n\n    // Fetch search result data for this chart hit\n    const { data, status: loadingStatus } = useQuerySearchResultDataForChartHit(\n        {\n            hit,\n            params: {\n                version: 1,\n                variant,\n                entities: pickedEntities,\n                numDataTableRowsPerColumn,\n            },\n            enabled: hasBeenVisible,\n        }\n    )\n\n    // Render the fallback component if config or data loading failed\n    if (loadingStatus === \"error\") {\n        return (\n            <SearchChartHitRichDataFallback\n                hit={hit}\n                selectedRegionNames={selectedRegionNames}\n                onClick={onClick}\n            />\n        )\n    }\n\n    // Render a placeholder component while the config and data are loading\n    if (loadingStatus === \"pending\" || data === undefined) {\n        const chartUrl = constructChartUrl({ hit })\n        const sourcesUrl = constructChartUrl({ hit, overlay: \"sources\" })\n        const downloadUrl = constructChartUrl({ hit, overlay: \"download-data\" })\n\n        return (\n            <div ref={ref} className=\"search-chart-hit-rich-data\">\n                <div className=\"search-chart-hit-rich-data__header\">\n                    <SearchChartHitHeader\n                        hit={hit}\n                        url={chartUrl}\n                        isLarge={isLargeVariant}\n                        onClick={onClick}\n                    />\n                    <SearchChartHitHeaderActionButtons\n                        isLarge={isLargeVariant}\n                        sourcesUrl={sourcesUrl}\n                        downloadUrl={downloadUrl}\n                    />\n                </div>\n                <RichDataContentPlaceholder\n                    variant={variant}\n                    hasScatter={hasScatter}\n                />\n            </div>\n        )\n    }\n\n    const countryParam = R.pick(data.grapherQueryParams, [\"country\"])\n    const chartUrl = constructChartUrl({ hit, grapherParams: countryParam })\n    const sourcesUrl = constructChartUrl({\n        hit,\n        grapherParams: countryParam,\n        overlay: \"sources\",\n    })\n    const downloadUrl = constructChartUrl({\n        hit,\n        grapherParams: countryParam,\n        overlay: \"download-data\",\n    })\n\n    const contentStyle = {\n        \"--num-columns\": getTotalColumnCount(data.layout),\n    } as React.CSSProperties\n\n    return (\n        <div ref={ref} className=\"search-chart-hit-rich-data\">\n            <div className=\"search-chart-hit-rich-data__header\">\n                <SearchChartHitHeader\n                    hit={hit}\n                    title={data.title}\n                    subtitle={data.subtitle}\n                    url={chartUrl}\n                    source={data.source}\n                    isLarge={isLargeVariant}\n                    onClick={onClick}\n                />\n                <SearchChartHitHeaderActionButtons\n                    isLarge={isLargeVariant}\n                    sourcesUrl={sourcesUrl}\n                    downloadUrl={downloadUrl}\n                />\n            </div>\n\n            <div\n                className={cx(\n                    \"search-chart-hit-rich-data__content\",\n                    `search-chart-hit-rich-data__content--${variant}`,\n                    {\n                        \"search-chart-hit-rich-data__content--scatter\":\n                            hasScatter,\n                    }\n                )}\n                style={contentStyle}\n            >\n                {data.layout.map(\n                    ({ grapherTab, slotKey, chartParams }, tabIndex) => {\n                        const isSmallSlot =\n                            slotKey === MediumVariantGridSlotKey.SmallLeft ||\n                            slotKey === MediumVariantGridSlotKey.SmallRight\n\n                        const chartUrl = constructChartUrlForTab({\n                            hit,\n                            grapherTab,\n                            primaryGrapherTab: data.layout[0].grapherTab,\n                            grapherQueryParams: data.grapherQueryParams,\n                            overwriteParams: chartParams,\n                        })\n\n                        const { previewUrl, imageWidth, imageHeight } =\n                            constructPreviewUrlForTab({\n                                hit,\n                                grapherQueryParams: data.grapherQueryParams,\n                                variant,\n                                layout: data.layout,\n                                slotIndex: tabIndex,\n                                isMediumScreen,\n                                hasScatter,\n                            })\n\n                        const className = makeSlotClassNames(variant, slotKey)\n\n                        // Show the unit only on the first tab's thumbnail\n                        // and only if the tab is not a scatter plot\n                        const isScatter =\n                            grapherTab === GRAPHER_TAB_NAMES.ScatterPlot\n                        const unit =\n                            tabIndex === 0 && !isScatter ? data.unit : undefined\n\n                        return grapherTab === GRAPHER_TAB_NAMES.Table ? (\n                            <CaptionedTable\n                                key={grapherTab}\n                                chartUrl={chartUrl}\n                                dataTableContent={data.dataTable}\n                                numAvailableEntities={availableEntities.length}\n                                numRowsPerColumn={numDataTableRowsPerColumn}\n                                entityType={data.entityType}\n                                entityTypePlural={data.entityTypePlural}\n                                className={className}\n                                onClick={() => onClick(grapherTab)}\n                            />\n                        ) : (\n                            <CaptionedThumbnail\n                                key={grapherTab}\n                                chartType={grapherTab}\n                                isSmallSlot={isSmallSlot}\n                                chartUrl={chartUrl}\n                                previewUrl={previewUrl}\n                                imageWidth={imageWidth}\n                                imageHeight={imageHeight}\n                                unit={unit}\n                                className={className}\n                                onClick={() => onClick(grapherTab)}\n                            />\n                        )\n                    }\n                )}\n\n                {data.valueDisplay && (\n                    <SearchChartHitDataDisplay\n                        className=\"data-slot\"\n                        {...data.valueDisplay}\n                    />\n                )}\n            </div>\n        </div>\n    )\n}\n\nfunction SearchChartHitHeaderActionButtons({\n    isLarge,\n    sourcesUrl,\n    downloadUrl,\n}: {\n    isLarge: boolean\n    sourcesUrl: string\n    downloadUrl: string\n}): React.ReactElement {\n    return (\n        <div className=\"search-chart-hit-rich-data__header-actions\">\n            {isLarge && (\n                <Button\n                    text=\"Learn more about this data\"\n                    className=\"search-chart-hit-rich-data__button\"\n                    theme=\"outline-light-blue\"\n                    href={sourcesUrl}\n                    icon={null}\n                    dataTrackNote=\"search-sources-modal\"\n                />\n            )}\n            <Button\n                text=\"Download options\"\n                className=\"search-chart-hit-rich-data__button\"\n                theme=\"solid-light-blue\"\n                href={downloadUrl}\n                icon={faDownload}\n                iconPosition=\"left\"\n                dataTrackNote=\"search-download-options\"\n            />\n        </div>\n    )\n}\n\nfunction RichDataContentPlaceholder({\n    variant,\n    hasScatter,\n}: {\n    variant: RichDataComponentVariant\n    hasScatter: boolean\n}): React.ReactElement {\n    return match(variant)\n        .with(\"medium\", () => (\n            <RichDataContentMediumVariantPlaceholder hasScatter={hasScatter} />\n        ))\n        .with(\"large\", () => <RichDataContentLargeVariantPlaceholder />)\n        .exhaustive()\n}\n\nfunction RichDataContentMediumVariantPlaceholder({\n    hasScatter,\n}: {\n    hasScatter: boolean\n}): React.ReactElement {\n    return (\n        <div\n            className={cx(\n                \"search-chart-hit-rich-data__content\",\n                \"search-chart-hit-rich-data__content--medium\",\n                { \"search-chart-hit-rich-data__content--scatter\": hasScatter }\n            )}\n            style={{ \"--num-columns\": 3 } as React.CSSProperties}\n        >\n            <GrapherThumbnailPlaceholder\n                variant=\"medium\"\n                slot={MediumVariantGridSlotKey.Single}\n            />\n            <GrapherThumbnailPlaceholder\n                variant=\"medium\"\n                slot={MediumVariantGridSlotKey.Single}\n            />\n            <GrapherThumbnailPlaceholder\n                variant=\"medium\"\n                slot={MediumVariantGridSlotKey.Single}\n            />\n        </div>\n    )\n}\n\nfunction RichDataContentLargeVariantPlaceholder(): React.ReactElement {\n    return (\n        <div className=\"search-chart-hit-rich-data__content search-chart-hit-rich-data__content--large\">\n            <GrapherThumbnailPlaceholder\n                variant=\"large\"\n                slot={LargeVariantGridSlotKey.LeftQuad}\n            />\n            <GrapherThumbnailPlaceholder\n                variant=\"large\"\n                slot={LargeVariantGridSlotKey.RightQuadLeftColumn}\n            />\n            <GrapherThumbnailPlaceholder\n                variant=\"large\"\n                slot={LargeVariantGridSlotKey.SingleCell}\n            />\n            <GrapherThumbnailPlaceholder\n                variant=\"large\"\n                slot={LargeVariantGridSlotKey.SingleCell}\n            />\n        </div>\n    )\n}\n\nfunction GrapherThumbnailPlaceholder({\n    variant,\n    slot,\n}: {\n    variant: RichDataComponentVariant\n    slot: GridSlotKey\n}): React.ReactElement {\n    return (\n        <div\n            className={cx(\n                \"search-chart-hit-rich-data__placeholder\",\n                makeSlotClassNames(variant, slot)\n            )}\n        >\n            <div className=\"search-chart-hit-rich-data__thumbnail-placeholder\" />\n            <div className=\"search-chart-hit-rich-data__captioned-link-label\" />\n        </div>\n    )\n}\n\nfunction useQuerySearchResultDataForChartHit({\n    hit,\n    params,\n    enabled,\n}: {\n    hit: SearchChartHit\n    params: {\n        version: number\n        entities?: EntityName[]\n        variant: RichDataComponentVariant\n        numDataTableRowsPerColumn: number\n    }\n    enabled?: boolean\n}): { data?: GrapherSearchResultJson; status: QueryStatus } {\n    const { data, status } = useQuery({\n        queryKey: chartHitQueryKeys.searchResultData(\n            hit.slug,\n            hit.type === ChartRecordType.Chart ? undefined : hit.queryParams,\n            params.version,\n            params.variant,\n            params.entities,\n            params.numDataTableRowsPerColumn\n        ),\n        queryFn: () => {\n            const url = constructSearchResultUrl({ hit, params })\n            if (!url) return null\n            return fetchJson<GrapherSearchResultJson>(url, { timeoutMs: 5000 })\n        },\n        // If a query fails, it's likely because the worker\n        // exceeded resource limits (which is expected for some\n        // of our charts). Rather than retrying, we fail immediately\n        // and fall back to a simpler display.\n        retry: false,\n        enabled,\n    })\n\n    // If the result is null, the query URL couldn't be constructed. In this\n    // case, return an error status instead of a success status with null data\n    if (data === null) return { status: \"error\" }\n\n    // Treat an empty data table as an error\n    if (data && data.dataTable.rows.length === 0) return { status: \"error\" }\n\n    return { data, status }\n}\n\nfunction constructChartUrlForTab({\n    hit,\n    grapherTab,\n    primaryGrapherTab,\n    grapherQueryParams,\n    overwriteParams,\n}: {\n    hit: SearchChartHit\n    grapherTab: GrapherTabName\n    primaryGrapherTab: GrapherTabName\n    grapherQueryParams: GrapherQueryParams\n    overwriteParams?: GrapherQueryParams\n}): string {\n    // Use Grapher's changedParams to construct chart URL.\n    // We override the tab parameter because the GrapherState is currently set to\n    // the first tab of the chart, but we need to generate URLs for the specific\n    // tab being rendered in this preview.\n    const grapherParams = {\n        ...grapherQueryParams,\n        ...overwriteParams,\n        tab: mapGrapherTabNameToQueryParam(grapherTab),\n    }\n\n    // We don't want to link to a chart where entities are highlighted.\n    const omitParamsForChartUrl: (keyof GrapherQueryParams)[] = [\"focus\"]\n\n    // In case of scatters and Marimekkos, we also ignore the current\n    // entity selection so that we always link to a chart with the default\n    // selection.\n    if (\n        grapherTab === GRAPHER_TAB_NAMES.ScatterPlot ||\n        grapherTab === GRAPHER_TAB_NAMES.Marimekko ||\n        primaryGrapherTab === GRAPHER_TAB_NAMES.ScatterPlot ||\n        primaryGrapherTab === GRAPHER_TAB_NAMES.Marimekko\n    )\n        omitParamsForChartUrl.push(\"country\")\n\n    return constructChartUrl({\n        hit,\n        grapherParams: R.omit(grapherParams, omitParamsForChartUrl),\n    })\n}\n\nfunction constructPreviewUrlForTab({\n    hit,\n    grapherQueryParams,\n    variant,\n    layout,\n    slotIndex,\n    isMediumScreen,\n    hasScatter,\n}: {\n    hit: SearchChartHit\n    grapherQueryParams: GrapherQueryParams\n    variant: SearchChartHitComponentVariant\n    layout: LayoutSlot[]\n    slotIndex: number\n    isMediumScreen: boolean\n    hasScatter: boolean\n}): { previewUrl: string; imageWidth?: number; imageHeight?: number } {\n    const { grapherTab, previewParams } = layout[slotIndex]\n\n    // Always use the complete version on smaller screens since\n    // the table might not be visible\n    const isPrimaryTab = slotIndex === 0\n    const previewType = isMediumScreen\n        ? { variant: PreviewVariant.Thumbnail, isMinimal: false }\n        : getPreviewType(variant, { isPrimaryTab })\n\n    // Use Grapher's changedParams to construct preview URL.\n    // We override the tab parameter because the GrapherState is currently set to\n    // the first tab of the chart, but we need to generate URLs for the specific\n    // tab being rendered in this preview.\n    const grapherParams = {\n        ...grapherQueryParams,\n        tab: mapGrapherTabNameToQueryParam(grapherTab),\n    }\n\n    const { width: imageWidth, height: imageHeight } =\n        previewType.variant === PreviewVariant.Large\n            ? calculateLargePreviewImageDimensions(layout)\n            : hasScatter\n              ? calculateScatterPreviewImageDimensions()\n              : {}\n\n    // Use a smaller font size for chart types where labels or legends would\n    // otherwise be too overpowering in thumbnail previews. Otherwise, rely on\n    // the default\n    const tabsWithSmallerFont: GrapherTabName[] = [\n        GRAPHER_TAB_NAMES.WorldMap,\n        GRAPHER_TAB_NAMES.DiscreteBar,\n        GRAPHER_TAB_NAMES.StackedDiscreteBar,\n    ]\n    const fontSize =\n        previewType.variant === PreviewVariant.Thumbnail &&\n        tabsWithSmallerFont.includes(grapherTab)\n            ? 12\n            : undefined\n\n    const previewUrl = constructPreviewUrl({\n        hit,\n        grapherParams: {\n            ...grapherParams,\n            ...previewParams,\n        },\n        variant: previewType.variant,\n        isMinimal: previewType.isMinimal,\n        fontSize,\n        imageWidth,\n        imageHeight,\n    })\n\n    return { previewUrl, imageWidth, imageHeight }\n}\n\nfunction calculateLargePreviewImageDimensions(layout: LayoutSlot[]): {\n    width: number\n    height: number\n} {\n    const slots = layout.map(({ slotKey }) => slotKey)\n\n    if (slots.length <= 2) {\n        return {\n            width: 4 * GRAPHER_THUMBNAIL_WIDTH,\n            height: 4 * GRAPHER_THUMBNAIL_HEIGHT,\n        }\n    }\n\n    // The large chart must be a little taller to match the combined height of\n    // both thumbnails plus the vertical spacing and caption text between them.\n    return {\n        width: 4 * GRAPHER_THUMBNAIL_WIDTH,\n        height: 4 * GRAPHER_THUMBNAIL_HEIGHT + 4 * 16, // Magic number\n    }\n}\n","import { match } from \"ts-pattern\"\nimport { useMediaQuery } from \"usehooks-ts\"\nimport { SearchChartHitSmall } from \"./SearchChartHitSmall.js\"\nimport {\n    SearchChartHitComponentProps,\n    SearchChartHitComponentVariant,\n} from \"@ourworldindata/types\"\nimport { SearchChartHitRichData } from \"./SearchChartHitRichData.js\"\nimport { MEDIUM_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\n\nexport const SearchChartHitComponent = (\n    props: SearchChartHitComponentProps & {\n        variant: SearchChartHitComponentVariant\n    }\n) => {\n    const { variant, ...componentProps } = props\n    return match(variant)\n        .with(\"large\", () => <SearchChartHitLarge {...componentProps} />)\n        .with(\"medium\", () => <SearchChartHitMedium {...componentProps} />)\n        .with(\"small\", () => <SearchChartHitSmall {...componentProps} />)\n        .exhaustive()\n}\n\nconst SearchChartHitMedium = (\n    props: SearchChartHitComponentProps\n): React.ReactElement => {\n    return <SearchChartHitRichData variant=\"medium\" {...props} />\n}\n\nconst SearchChartHitLarge = (\n    props: SearchChartHitComponentProps\n): React.ReactElement => {\n    const isMediumScreen = useMediaQuery(MEDIUM_BREAKPOINT_MEDIA_QUERY)\n\n    // On smaller screens, render the medium variant which implements the\n    // mobile layout for smaller viewports\n    if (isMediumScreen) return <SearchChartHitMedium {...props} />\n\n    return <SearchChartHitRichData variant=\"large\" {...props} />\n}\n","/**\n * @remix-run/router v1.23.2\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Actions represent the type of change to a location value.\n */\nvar Action;\n(function (Action) {\n  /**\n   * A POP indicates a change to an arbitrary index in the history stack, such\n   * as a back or forward navigation. It does not describe the direction of the\n   * navigation, only that the current index changed.\n   *\n   * Note: This is the default action for newly created history objects.\n   */\n  Action[\"Pop\"] = \"POP\";\n  /**\n   * A PUSH indicates a new entry being added to the history stack, such as when\n   * a link is clicked and a new page loads. When this happens, all subsequent\n   * entries in the stack are lost.\n   */\n  Action[\"Push\"] = \"PUSH\";\n  /**\n   * A REPLACE indicates the entry at the current index in the history stack\n   * being replaced by a new one.\n   */\n  Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\nconst PopStateEventType = \"popstate\";\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nfunction createMemoryHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  let {\n    initialEntries = [\"/\"],\n    initialIndex,\n    v5Compat = false\n  } = options;\n  let entries; // Declare so we can access from createMemoryLocation\n  entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === \"string\" ? null : entry.state, index === 0 ? \"default\" : undefined));\n  let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);\n  let action = Action.Pop;\n  let listener = null;\n  function clampIndex(n) {\n    return Math.min(Math.max(n, 0), entries.length - 1);\n  }\n  function getCurrentLocation() {\n    return entries[index];\n  }\n  function createMemoryLocation(to, state, key) {\n    if (state === void 0) {\n      state = null;\n    }\n    let location = createLocation(entries ? getCurrentLocation().pathname : \"/\", to, state, key);\n    warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in memory history: \" + JSON.stringify(to));\n    return location;\n  }\n  function createHref(to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  let history = {\n    get index() {\n      return index;\n    },\n    get action() {\n      return action;\n    },\n    get location() {\n      return getCurrentLocation();\n    },\n    createHref,\n    createURL(to) {\n      return new URL(createHref(to), \"http://localhost\");\n    },\n    encodeLocation(to) {\n      let path = typeof to === \"string\" ? parsePath(to) : to;\n      return {\n        pathname: path.pathname || \"\",\n        search: path.search || \"\",\n        hash: path.hash || \"\"\n      };\n    },\n    push(to, state) {\n      action = Action.Push;\n      let nextLocation = createMemoryLocation(to, state);\n      index += 1;\n      entries.splice(index, entries.length, nextLocation);\n      if (v5Compat && listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta: 1\n        });\n      }\n    },\n    replace(to, state) {\n      action = Action.Replace;\n      let nextLocation = createMemoryLocation(to, state);\n      entries[index] = nextLocation;\n      if (v5Compat && listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta: 0\n        });\n      }\n    },\n    go(delta) {\n      action = Action.Pop;\n      let nextIndex = clampIndex(index + delta);\n      let nextLocation = entries[nextIndex];\n      index = nextIndex;\n      if (listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta\n        });\n      }\n    },\n    listen(fn) {\n      listener = fn;\n      return () => {\n        listener = null;\n      };\n    }\n  };\n  return history;\n}\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nfunction createBrowserHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  function createBrowserLocation(window, globalHistory) {\n    let {\n      pathname,\n      search,\n      hash\n    } = window.location;\n    return createLocation(\"\", {\n      pathname,\n      search,\n      hash\n    },\n    // state defaults to `null` because `window.history.state` does\n    globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n  }\n  function createBrowserHref(window, to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);\n}\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nfunction createHashHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  function createHashLocation(window, globalHistory) {\n    let {\n      pathname = \"/\",\n      search = \"\",\n      hash = \"\"\n    } = parsePath(window.location.hash.substr(1));\n    // Hash URL should always have a leading / just like window.location.pathname\n    // does, so if an app ends up at a route like /#something then we add a\n    // leading slash so all of our path-matching behaves the same as if it would\n    // in a browser router.  This is particularly important when there exists a\n    // root splat route (<Route path=\"*\">) since that matches internally against\n    // \"/*\" and we'd expect /#something to 404 in a hash router app.\n    if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n      pathname = \"/\" + pathname;\n    }\n    return createLocation(\"\", {\n      pathname,\n      search,\n      hash\n    },\n    // state defaults to `null` because `window.history.state` does\n    globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n  }\n  function createHashHref(window, to) {\n    let base = window.document.querySelector(\"base\");\n    let href = \"\";\n    if (base && base.getAttribute(\"href\")) {\n      let url = window.location.href;\n      let hashIndex = url.indexOf(\"#\");\n      href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n    }\n    return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n  }\n  function validateHashLocation(location, to) {\n    warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\");\n  }\n  return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);\n}\nfunction invariant(value, message) {\n  if (value === false || value === null || typeof value === \"undefined\") {\n    throw new Error(message);\n  }\n}\nfunction warning(cond, message) {\n  if (!cond) {\n    // eslint-disable-next-line no-console\n    if (typeof console !== \"undefined\") console.warn(message);\n    try {\n      // Welcome to debugging history!\n      //\n      // This error is thrown as a convenience, so you can more easily\n      // find the source for a warning that appears in the console by\n      // enabling \"pause on exceptions\" in your JavaScript debugger.\n      throw new Error(message);\n      // eslint-disable-next-line no-empty\n    } catch (e) {}\n  }\n}\nfunction createKey() {\n  return Math.random().toString(36).substr(2, 8);\n}\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location, index) {\n  return {\n    usr: location.state,\n    key: location.key,\n    idx: index\n  };\n}\n/**\n * Creates a Location object with a unique key from the given Path\n */\nfunction createLocation(current, to, state, key) {\n  if (state === void 0) {\n    state = null;\n  }\n  let location = _extends({\n    pathname: typeof current === \"string\" ? current : current.pathname,\n    search: \"\",\n    hash: \"\"\n  }, typeof to === \"string\" ? parsePath(to) : to, {\n    state,\n    // TODO: This could be cleaned up.  push/replace should probably just take\n    // full Locations now and avoid the need to run through this flow at all\n    // But that's a pretty big refactor to the current test suite so going to\n    // keep as is for the time being and just let any incoming keys take precedence\n    key: to && to.key || key || createKey()\n  });\n  return location;\n}\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nfunction createPath(_ref) {\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\"\n  } = _ref;\n  if (search && search !== \"?\") pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n  if (hash && hash !== \"#\") pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n  return pathname;\n}\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nfunction parsePath(path) {\n  let parsedPath = {};\n  if (path) {\n    let hashIndex = path.indexOf(\"#\");\n    if (hashIndex >= 0) {\n      parsedPath.hash = path.substr(hashIndex);\n      path = path.substr(0, hashIndex);\n    }\n    let searchIndex = path.indexOf(\"?\");\n    if (searchIndex >= 0) {\n      parsedPath.search = path.substr(searchIndex);\n      path = path.substr(0, searchIndex);\n    }\n    if (path) {\n      parsedPath.pathname = path;\n    }\n  }\n  return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref, validateLocation, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  let {\n    window = document.defaultView,\n    v5Compat = false\n  } = options;\n  let globalHistory = window.history;\n  let action = Action.Pop;\n  let listener = null;\n  let index = getIndex();\n  // Index should only be null when we initialize. If not, it's because the\n  // user called history.pushState or history.replaceState directly, in which\n  // case we should log a warning as it will result in bugs.\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState(_extends({}, globalHistory.state, {\n      idx: index\n    }), \"\");\n  }\n  function getIndex() {\n    let state = globalHistory.state || {\n      idx: null\n    };\n    return state.idx;\n  }\n  function handlePop() {\n    action = Action.Pop;\n    let nextIndex = getIndex();\n    let delta = nextIndex == null ? null : nextIndex - index;\n    index = nextIndex;\n    if (listener) {\n      listener({\n        action,\n        location: history.location,\n        delta\n      });\n    }\n  }\n  function push(to, state) {\n    action = Action.Push;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n    index = getIndex() + 1;\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    // try...catch because iOS limits us to 100 pushState calls :/\n    try {\n      globalHistory.pushState(historyState, \"\", url);\n    } catch (error) {\n      // If the exception is because `state` can't be serialized, let that throw\n      // outwards just like a replace call would so the dev knows the cause\n      // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n      // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n      if (error instanceof DOMException && error.name === \"DataCloneError\") {\n        throw error;\n      }\n      // They are going to lose state here, but there is no real\n      // way to warn them about it since the page will refresh...\n      window.location.assign(url);\n    }\n    if (v5Compat && listener) {\n      listener({\n        action,\n        location: history.location,\n        delta: 1\n      });\n    }\n  }\n  function replace(to, state) {\n    action = Action.Replace;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n    index = getIndex();\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    globalHistory.replaceState(historyState, \"\", url);\n    if (v5Compat && listener) {\n      listener({\n        action,\n        location: history.location,\n        delta: 0\n      });\n    }\n  }\n  function createURL(to) {\n    // window.location.origin is \"null\" (the literal string value) in Firefox\n    // under certain conditions, notably when serving from a local HTML file\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n    let base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n    let href = typeof to === \"string\" ? to : createPath(to);\n    // Treating this as a full URL will strip any trailing spaces so we need to\n    // pre-encode them since they might be part of a matching splat param from\n    // an ancestor route\n    href = href.replace(/ $/, \"%20\");\n    invariant(base, \"No window.location.(origin|href) available to create URL for href: \" + href);\n    return new URL(href, base);\n  }\n  let history = {\n    get action() {\n      return action;\n    },\n    get location() {\n      return getLocation(window, globalHistory);\n    },\n    listen(fn) {\n      if (listener) {\n        throw new Error(\"A history only accepts one active listener\");\n      }\n      window.addEventListener(PopStateEventType, handlePop);\n      listener = fn;\n      return () => {\n        window.removeEventListener(PopStateEventType, handlePop);\n        listener = null;\n      };\n    },\n    createHref(to) {\n      return createHref(window, to);\n    },\n    createURL,\n    encodeLocation(to) {\n      // Encode a Location the same way window.location would\n      let url = createURL(to);\n      return {\n        pathname: url.pathname,\n        search: url.search,\n        hash: url.hash\n      };\n    },\n    push,\n    replace,\n    go(n) {\n      return globalHistory.go(n);\n    }\n  };\n  return history;\n}\n//#endregion\n\nvar ResultType;\n(function (ResultType) {\n  ResultType[\"data\"] = \"data\";\n  ResultType[\"deferred\"] = \"deferred\";\n  ResultType[\"redirect\"] = \"redirect\";\n  ResultType[\"error\"] = \"error\";\n})(ResultType || (ResultType = {}));\nconst immutableRouteKeys = new Set([\"lazy\", \"caseSensitive\", \"path\", \"id\", \"index\", \"children\"]);\nfunction isIndexRoute(route) {\n  return route.index === true;\n}\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {\n  if (parentPath === void 0) {\n    parentPath = [];\n  }\n  if (manifest === void 0) {\n    manifest = {};\n  }\n  return routes.map((route, index) => {\n    let treePath = [...parentPath, String(index)];\n    let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n    invariant(route.index !== true || !route.children, \"Cannot specify children on an index route\");\n    invariant(!manifest[id], \"Found a route id collision on id \\\"\" + id + \"\\\".  Route \" + \"id's must be globally unique within Data Router usages\");\n    if (isIndexRoute(route)) {\n      let indexRoute = _extends({}, route, mapRouteProperties(route), {\n        id\n      });\n      manifest[id] = indexRoute;\n      return indexRoute;\n    } else {\n      let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {\n        id,\n        children: undefined\n      });\n      manifest[id] = pathOrLayoutRoute;\n      if (route.children) {\n        pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);\n      }\n      return pathOrLayoutRoute;\n    }\n  });\n}\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/v6/utils/match-routes\n */\nfunction matchRoutes(routes, locationArg, basename) {\n  if (basename === void 0) {\n    basename = \"/\";\n  }\n  return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial) {\n  let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n  let pathname = stripBasename(location.pathname || \"/\", basename);\n  if (pathname == null) {\n    return null;\n  }\n  let branches = flattenRoutes(routes);\n  rankRouteBranches(branches);\n  let matches = null;\n  for (let i = 0; matches == null && i < branches.length; ++i) {\n    // Incoming pathnames are generally encoded from either window.location\n    // or from router.navigate, but we want to match against the unencoded\n    // paths in the route definitions.  Memory router locations won't be\n    // encoded here but there also shouldn't be anything to decode so this\n    // should be a safe operation.  This avoids needing matchRoutes to be\n    // history-aware.\n    let decoded = decodePath(pathname);\n    matches = matchRouteBranch(branches[i], decoded, allowPartial);\n  }\n  return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n  let {\n    route,\n    pathname,\n    params\n  } = match;\n  return {\n    id: route.id,\n    pathname,\n    params,\n    data: loaderData[route.id],\n    handle: route.handle\n  };\n}\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n  if (branches === void 0) {\n    branches = [];\n  }\n  if (parentsMeta === void 0) {\n    parentsMeta = [];\n  }\n  if (parentPath === void 0) {\n    parentPath = \"\";\n  }\n  let flattenRoute = (route, index, relativePath) => {\n    let meta = {\n      relativePath: relativePath === undefined ? route.path || \"\" : relativePath,\n      caseSensitive: route.caseSensitive === true,\n      childrenIndex: index,\n      route\n    };\n    if (meta.relativePath.startsWith(\"/\")) {\n      invariant(meta.relativePath.startsWith(parentPath), \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\");\n      meta.relativePath = meta.relativePath.slice(parentPath.length);\n    }\n    let path = joinPaths([parentPath, meta.relativePath]);\n    let routesMeta = parentsMeta.concat(meta);\n    // Add the children before adding this route to the array, so we traverse the\n    // route tree depth-first and child routes appear before their parents in\n    // the \"flattened\" version.\n    if (route.children && route.children.length > 0) {\n      invariant(\n      // Our types know better, but runtime JS may not!\n      // @ts-expect-error\n      route.index !== true, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\"));\n      flattenRoutes(route.children, branches, routesMeta, path);\n    }\n    // Routes without a path shouldn't ever match by themselves unless they are\n    // index routes, so don't add them to the list of possible branches.\n    if (route.path == null && !route.index) {\n      return;\n    }\n    branches.push({\n      path,\n      score: computeScore(path, route.index),\n      routesMeta\n    });\n  };\n  routes.forEach((route, index) => {\n    var _route$path;\n    // coarse-grain check for optional params\n    if (route.path === \"\" || !((_route$path = route.path) != null && _route$path.includes(\"?\"))) {\n      flattenRoute(route, index);\n    } else {\n      for (let exploded of explodeOptionalSegments(route.path)) {\n        flattenRoute(route, index, exploded);\n      }\n    }\n  });\n  return branches;\n}\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path) {\n  let segments = path.split(\"/\");\n  if (segments.length === 0) return [];\n  let [first, ...rest] = segments;\n  // Optional path segments are denoted by a trailing `?`\n  let isOptional = first.endsWith(\"?\");\n  // Compute the corresponding required segment: `foo?` -> `foo`\n  let required = first.replace(/\\?$/, \"\");\n  if (rest.length === 0) {\n    // Intepret empty string as omitting an optional segment\n    // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n    return isOptional ? [required, \"\"] : [required];\n  }\n  let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n  let result = [];\n  // All child paths with the prefix.  Do this for all children before the\n  // optional version for all children, so we get consistent ordering where the\n  // parent optional aspect is preferred as required.  Otherwise, we can get\n  // child sections interspersed where deeper optional segments are higher than\n  // parent optional segments, where for example, /:two would explode _earlier_\n  // then /:one.  By always including the parent as required _for all children_\n  // first, we avoid this issue\n  result.push(...restExploded.map(subpath => subpath === \"\" ? required : [required, subpath].join(\"/\")));\n  // Then, if this is an optional value, add all child versions without\n  if (isOptional) {\n    result.push(...restExploded);\n  }\n  // for absolute paths, ensure `/` instead of empty segment\n  return result.map(exploded => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded);\n}\nfunction rankRouteBranches(branches) {\n  branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n  : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = s => s === \"*\";\nfunction computeScore(path, index) {\n  let segments = path.split(\"/\");\n  let initialScore = segments.length;\n  if (segments.some(isSplat)) {\n    initialScore += splatPenalty;\n  }\n  if (index) {\n    initialScore += indexRouteValue;\n  }\n  return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\nfunction compareIndexes(a, b) {\n  let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n  return siblings ?\n  // If two routes are siblings, we should try to match the earlier sibling\n  // first. This allows people to have fine-grained control over the matching\n  // behavior by simply putting routes with identical paths in the order they\n  // want them tried.\n  a[a.length - 1] - b[b.length - 1] :\n  // Otherwise, it doesn't really make sense to rank non-siblings by index,\n  // so they sort equally.\n  0;\n}\nfunction matchRouteBranch(branch, pathname, allowPartial) {\n  if (allowPartial === void 0) {\n    allowPartial = false;\n  }\n  let {\n    routesMeta\n  } = branch;\n  let matchedParams = {};\n  let matchedPathname = \"/\";\n  let matches = [];\n  for (let i = 0; i < routesMeta.length; ++i) {\n    let meta = routesMeta[i];\n    let end = i === routesMeta.length - 1;\n    let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n    let match = matchPath({\n      path: meta.relativePath,\n      caseSensitive: meta.caseSensitive,\n      end\n    }, remainingPathname);\n    let route = meta.route;\n    if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n      match = matchPath({\n        path: meta.relativePath,\n        caseSensitive: meta.caseSensitive,\n        end: false\n      }, remainingPathname);\n    }\n    if (!match) {\n      return null;\n    }\n    Object.assign(matchedParams, match.params);\n    matches.push({\n      // TODO: Can this as be avoided?\n      params: matchedParams,\n      pathname: joinPaths([matchedPathname, match.pathname]),\n      pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n      route\n    });\n    if (match.pathnameBase !== \"/\") {\n      matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n    }\n  }\n  return matches;\n}\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/v6/utils/generate-path\n */\nfunction generatePath(originalPath, params) {\n  if (params === void 0) {\n    params = {};\n  }\n  let path = originalPath;\n  if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n    warning(false, \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n    path = path.replace(/\\*$/, \"/*\");\n  }\n  // ensure `/` is added at the beginning if the path is absolute\n  const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n  const stringify = p => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n  const segments = path.split(/\\/+/).map((segment, index, array) => {\n    const isLastSegment = index === array.length - 1;\n    // only apply the splat if it's the last segment\n    if (isLastSegment && segment === \"*\") {\n      const star = \"*\";\n      // Apply the splat\n      return stringify(params[star]);\n    }\n    const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n    if (keyMatch) {\n      const [, key, optional] = keyMatch;\n      let param = params[key];\n      invariant(optional === \"?\" || param != null, \"Missing \\\":\" + key + \"\\\" param\");\n      return stringify(param);\n    }\n    // Remove any optional markers from optional static segments\n    return segment.replace(/\\?$/g, \"\");\n  })\n  // Remove empty segments\n  .filter(segment => !!segment);\n  return prefix + segments.join(\"/\");\n}\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/v6/utils/match-path\n */\nfunction matchPath(pattern, pathname) {\n  if (typeof pattern === \"string\") {\n    pattern = {\n      path: pattern,\n      caseSensitive: false,\n      end: true\n    };\n  }\n  let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n  let match = pathname.match(matcher);\n  if (!match) return null;\n  let matchedPathname = match[0];\n  let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n  let captureGroups = match.slice(1);\n  let params = compiledParams.reduce((memo, _ref, index) => {\n    let {\n      paramName,\n      isOptional\n    } = _ref;\n    // We need to compute the pathnameBase here using the raw splat value\n    // instead of using params[\"*\"] later because it will be decoded then\n    if (paramName === \"*\") {\n      let splatValue = captureGroups[index] || \"\";\n      pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n    }\n    const value = captureGroups[index];\n    if (isOptional && !value) {\n      memo[paramName] = undefined;\n    } else {\n      memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n    }\n    return memo;\n  }, {});\n  return {\n    params,\n    pathname: matchedPathname,\n    pathnameBase,\n    pattern\n  };\n}\nfunction compilePath(path, caseSensitive, end) {\n  if (caseSensitive === void 0) {\n    caseSensitive = false;\n  }\n  if (end === void 0) {\n    end = true;\n  }\n  warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n  let params = [];\n  let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n  .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n  .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n  .replace(/\\/:([\\w-]+)(\\?)?/g, (_, paramName, isOptional) => {\n    params.push({\n      paramName,\n      isOptional: isOptional != null\n    });\n    return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n  });\n  if (path.endsWith(\"*\")) {\n    params.push({\n      paramName: \"*\"\n    });\n    regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // Already matched the initial /, just match the rest\n    : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n  } else if (end) {\n    // When matching to the end, ignore trailing slashes\n    regexpSource += \"\\\\/*$\";\n  } else if (path !== \"\" && path !== \"/\") {\n    // If our path is non-empty and contains anything beyond an initial slash,\n    // then we have _some_ form of path in our regex, so we should expect to\n    // match only if we find the end of this path segment.  Look for an optional\n    // non-captured trailing slash (to match a portion of the URL) or the end\n    // of the path (if we've matched to the end).  We used to do this with a\n    // word boundary but that gives false positives on routes like\n    // /user-preferences since `-` counts as a word boundary.\n    regexpSource += \"(?:(?=\\\\/|$))\";\n  } else ;\n  let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n  return [matcher, params];\n}\nfunction decodePath(value) {\n  try {\n    return value.split(\"/\").map(v => decodeURIComponent(v).replace(/\\//g, \"%2F\")).join(\"/\");\n  } catch (error) {\n    warning(false, \"The URL path \\\"\" + value + \"\\\" could not be decoded because it is is a \" + \"malformed URL segment. This is probably due to a bad percent \" + (\"encoding (\" + error + \").\"));\n    return value;\n  }\n}\n/**\n * @private\n */\nfunction stripBasename(pathname, basename) {\n  if (basename === \"/\") return pathname;\n  if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n    return null;\n  }\n  // We want to leave trailing slash behavior in the user's control, so if they\n  // specify a basename with a trailing slash, we should support it\n  let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n  let nextChar = pathname.charAt(startIndex);\n  if (nextChar && nextChar !== \"/\") {\n    // pathname does not start with basename/\n    return null;\n  }\n  return pathname.slice(startIndex) || \"/\";\n}\nconst ABSOLUTE_URL_REGEX$1 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst isAbsoluteUrl = url => ABSOLUTE_URL_REGEX$1.test(url);\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/v6/utils/resolve-path\n */\nfunction resolvePath(to, fromPathname) {\n  if (fromPathname === void 0) {\n    fromPathname = \"/\";\n  }\n  let {\n    pathname: toPathname,\n    search = \"\",\n    hash = \"\"\n  } = typeof to === \"string\" ? parsePath(to) : to;\n  let pathname;\n  if (toPathname) {\n    if (isAbsoluteUrl(toPathname)) {\n      pathname = toPathname;\n    } else {\n      if (toPathname.includes(\"//\")) {\n        let oldPathname = toPathname;\n        toPathname = toPathname.replace(/\\/\\/+/g, \"/\");\n        warning(false, \"Pathnames cannot have embedded double slashes - normalizing \" + (oldPathname + \" -> \" + toPathname));\n      }\n      if (toPathname.startsWith(\"/\")) {\n        pathname = resolvePathname(toPathname.substring(1), \"/\");\n      } else {\n        pathname = resolvePathname(toPathname, fromPathname);\n      }\n    }\n  } else {\n    pathname = fromPathname;\n  }\n  return {\n    pathname,\n    search: normalizeSearch(search),\n    hash: normalizeHash(hash)\n  };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n  let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n  let relativeSegments = relativePath.split(\"/\");\n  relativeSegments.forEach(segment => {\n    if (segment === \"..\") {\n      // Keep the root \"\" segment so the pathname starts at /\n      if (segments.length > 1) segments.pop();\n    } else if (segment !== \".\") {\n      segments.push(segment);\n    }\n  });\n  return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n  return \"Cannot include a '\" + char + \"' character in a manually specified \" + (\"`to.\" + field + \"` field [\" + JSON.stringify(path) + \"].  Please separate it out to the \") + (\"`to.\" + dest + \"` field. Alternatively you may provide the full path as \") + \"a string in <Link to=\\\"...\\\"> and the router will parse it for you.\";\n}\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same.  Both of the following examples should link back to the root:\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\" element={<Link to=\"..\"}>\n *   </Route>\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\">\n *       <Route element={<AccountsLayout />}>       // <-- Does not contribute\n *         <Route index element={<Link to=\"..\"} />  // <-- Does not contribute\n *       </Route\n *     </Route>\n *   </Route>\n */\nfunction getPathContributingMatches(matches) {\n  return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);\n}\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nfunction getResolveToMatches(matches, v7_relativeSplatPath) {\n  let pathMatches = getPathContributingMatches(matches);\n  // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n  // match so we include splat values for \".\" links.  See:\n  // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n  if (v7_relativeSplatPath) {\n    return pathMatches.map((match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase);\n  }\n  return pathMatches.map(match => match.pathnameBase);\n}\n/**\n * @private\n */\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {\n  if (isPathRelative === void 0) {\n    isPathRelative = false;\n  }\n  let to;\n  if (typeof toArg === \"string\") {\n    to = parsePath(toArg);\n  } else {\n    to = _extends({}, toArg);\n    invariant(!to.pathname || !to.pathname.includes(\"?\"), getInvalidPathError(\"?\", \"pathname\", \"search\", to));\n    invariant(!to.pathname || !to.pathname.includes(\"#\"), getInvalidPathError(\"#\", \"pathname\", \"hash\", to));\n    invariant(!to.search || !to.search.includes(\"#\"), getInvalidPathError(\"#\", \"search\", \"hash\", to));\n  }\n  let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n  let toPathname = isEmptyPath ? \"/\" : to.pathname;\n  let from;\n  // Routing is relative to the current pathname if explicitly requested.\n  //\n  // If a pathname is explicitly provided in `to`, it should be relative to the\n  // route context. This is explained in `Note on `<Link to>` values` in our\n  // migration guide from v5 as a means of disambiguation between `to` values\n  // that begin with `/` and those that do not. However, this is problematic for\n  // `to` values that do not provide a pathname. `to` can simply be a search or\n  // hash string, in which case we should assume that the navigation is relative\n  // to the current location's pathname and *not* the route pathname.\n  if (toPathname == null) {\n    from = locationPathname;\n  } else {\n    let routePathnameIndex = routePathnames.length - 1;\n    // With relative=\"route\" (the default), each leading .. segment means\n    // \"go up one route\" instead of \"go up one URL segment\".  This is a key\n    // difference from how <a href> works and a major reason we call this a\n    // \"to\" value instead of a \"href\".\n    if (!isPathRelative && toPathname.startsWith(\"..\")) {\n      let toSegments = toPathname.split(\"/\");\n      while (toSegments[0] === \"..\") {\n        toSegments.shift();\n        routePathnameIndex -= 1;\n      }\n      to.pathname = toSegments.join(\"/\");\n    }\n    from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n  }\n  let path = resolvePath(to, from);\n  // Ensure the pathname has a trailing slash if the original \"to\" had one\n  let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n  // Or if this was a link to the current path which has a trailing slash\n  let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n  if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n    path.pathname += \"/\";\n  }\n  return path;\n}\n/**\n * @private\n */\nfunction getToPathname(to) {\n  // Empty strings should be treated the same as / paths\n  return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\n/**\n * @private\n */\nconst joinPaths = paths => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n/**\n * @private\n */\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n/**\n * @private\n */\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n/**\n * @private\n */\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n *\n * @deprecated The `json` method is deprecated in favor of returning raw objects.\n * This method will be removed in v7.\n */\nconst json = function json(data, init) {\n  if (init === void 0) {\n    init = {};\n  }\n  let responseInit = typeof init === \"number\" ? {\n    status: init\n  } : init;\n  let headers = new Headers(responseInit.headers);\n  if (!headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n  }\n  return new Response(JSON.stringify(data), _extends({}, responseInit, {\n    headers\n  }));\n};\nclass DataWithResponseInit {\n  constructor(data, init) {\n    this.type = \"DataWithResponseInit\";\n    this.data = data;\n    this.init = init || null;\n  }\n}\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nfunction data(data, init) {\n  return new DataWithResponseInit(data, typeof init === \"number\" ? {\n    status: init\n  } : init);\n}\nclass AbortedDeferredError extends Error {}\nclass DeferredData {\n  constructor(data, responseInit) {\n    this.pendingKeysSet = new Set();\n    this.subscribers = new Set();\n    this.deferredKeys = [];\n    invariant(data && typeof data === \"object\" && !Array.isArray(data), \"defer() only accepts plain objects\");\n    // Set up an AbortController + Promise we can race against to exit early\n    // cancellation\n    let reject;\n    this.abortPromise = new Promise((_, r) => reject = r);\n    this.controller = new AbortController();\n    let onAbort = () => reject(new AbortedDeferredError(\"Deferred data aborted\"));\n    this.unlistenAbortSignal = () => this.controller.signal.removeEventListener(\"abort\", onAbort);\n    this.controller.signal.addEventListener(\"abort\", onAbort);\n    this.data = Object.entries(data).reduce((acc, _ref2) => {\n      let [key, value] = _ref2;\n      return Object.assign(acc, {\n        [key]: this.trackPromise(key, value)\n      });\n    }, {});\n    if (this.done) {\n      // All incoming values were resolved\n      this.unlistenAbortSignal();\n    }\n    this.init = responseInit;\n  }\n  trackPromise(key, value) {\n    if (!(value instanceof Promise)) {\n      return value;\n    }\n    this.deferredKeys.push(key);\n    this.pendingKeysSet.add(key);\n    // We store a little wrapper promise that will be extended with\n    // _data/_error props upon resolve/reject\n    let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));\n    // Register rejection listeners to avoid uncaught promise rejections on\n    // errors or aborted deferred values\n    promise.catch(() => {});\n    Object.defineProperty(promise, \"_tracked\", {\n      get: () => true\n    });\n    return promise;\n  }\n  onSettle(promise, key, error, data) {\n    if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {\n      this.unlistenAbortSignal();\n      Object.defineProperty(promise, \"_error\", {\n        get: () => error\n      });\n      return Promise.reject(error);\n    }\n    this.pendingKeysSet.delete(key);\n    if (this.done) {\n      // Nothing left to abort!\n      this.unlistenAbortSignal();\n    }\n    // If the promise was resolved/rejected with undefined, we'll throw an error as you\n    // should always resolve with a value or null\n    if (error === undefined && data === undefined) {\n      let undefinedError = new Error(\"Deferred data for key \\\"\" + key + \"\\\" resolved/rejected with `undefined`, \" + \"you must resolve/reject with a value or `null`.\");\n      Object.defineProperty(promise, \"_error\", {\n        get: () => undefinedError\n      });\n      this.emit(false, key);\n      return Promise.reject(undefinedError);\n    }\n    if (data === undefined) {\n      Object.defineProperty(promise, \"_error\", {\n        get: () => error\n      });\n      this.emit(false, key);\n      return Promise.reject(error);\n    }\n    Object.defineProperty(promise, \"_data\", {\n      get: () => data\n    });\n    this.emit(false, key);\n    return data;\n  }\n  emit(aborted, settledKey) {\n    this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));\n  }\n  subscribe(fn) {\n    this.subscribers.add(fn);\n    return () => this.subscribers.delete(fn);\n  }\n  cancel() {\n    this.controller.abort();\n    this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n    this.emit(true);\n  }\n  async resolveData(signal) {\n    let aborted = false;\n    if (!this.done) {\n      let onAbort = () => this.cancel();\n      signal.addEventListener(\"abort\", onAbort);\n      aborted = await new Promise(resolve => {\n        this.subscribe(aborted => {\n          signal.removeEventListener(\"abort\", onAbort);\n          if (aborted || this.done) {\n            resolve(aborted);\n          }\n        });\n      });\n    }\n    return aborted;\n  }\n  get done() {\n    return this.pendingKeysSet.size === 0;\n  }\n  get unwrappedData() {\n    invariant(this.data !== null && this.done, \"Can only unwrap data on initialized and settled deferreds\");\n    return Object.entries(this.data).reduce((acc, _ref3) => {\n      let [key, value] = _ref3;\n      return Object.assign(acc, {\n        [key]: unwrapTrackedPromise(value)\n      });\n    }, {});\n  }\n  get pendingKeys() {\n    return Array.from(this.pendingKeysSet);\n  }\n}\nfunction isTrackedPromise(value) {\n  return value instanceof Promise && value._tracked === true;\n}\nfunction unwrapTrackedPromise(value) {\n  if (!isTrackedPromise(value)) {\n    return value;\n  }\n  if (value._error) {\n    throw value._error;\n  }\n  return value._data;\n}\n/**\n * @deprecated The `defer` method is deprecated in favor of returning raw\n * objects. This method will be removed in v7.\n */\nconst defer = function defer(data, init) {\n  if (init === void 0) {\n    init = {};\n  }\n  let responseInit = typeof init === \"number\" ? {\n    status: init\n  } : init;\n  return new DeferredData(data, responseInit);\n};\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirect = function redirect(url, init) {\n  if (init === void 0) {\n    init = 302;\n  }\n  let responseInit = init;\n  if (typeof responseInit === \"number\") {\n    responseInit = {\n      status: responseInit\n    };\n  } else if (typeof responseInit.status === \"undefined\") {\n    responseInit.status = 302;\n  }\n  let headers = new Headers(responseInit.headers);\n  headers.set(\"Location\", url);\n  return new Response(null, _extends({}, responseInit, {\n    headers\n  }));\n};\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirectDocument = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n  return response;\n};\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst replace = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Replace\", \"true\");\n  return response;\n};\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nclass ErrorResponseImpl {\n  constructor(status, statusText, data, internal) {\n    if (internal === void 0) {\n      internal = false;\n    }\n    this.status = status;\n    this.statusText = statusText || \"\";\n    this.internal = internal;\n    if (data instanceof Error) {\n      this.data = data.toString();\n      this.error = data;\n    } else {\n      this.data = data;\n    }\n  }\n}\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nfunction isRouteErrorResponse(error) {\n  return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\nconst validMutationMethodsArr = [\"post\", \"put\", \"patch\", \"delete\"];\nconst validMutationMethods = new Set(validMutationMethodsArr);\nconst validRequestMethodsArr = [\"get\", ...validMutationMethodsArr];\nconst validRequestMethods = new Set(validRequestMethodsArr);\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\nconst IDLE_NAVIGATION = {\n  state: \"idle\",\n  location: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined\n};\nconst IDLE_FETCHER = {\n  state: \"idle\",\n  data: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined\n};\nconst IDLE_BLOCKER = {\n  state: \"unblocked\",\n  proceed: undefined,\n  reset: undefined,\n  location: undefined\n};\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst defaultMapRouteProperties = route => ({\n  hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a router and listen to history POP navigations\n */\nfunction createRouter(init) {\n  const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : undefined;\n  const isBrowser = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n  const isServer = !isBrowser;\n  invariant(init.routes.length > 0, \"You must provide a non-empty routes array to createRouter\");\n  let mapRouteProperties;\n  if (init.mapRouteProperties) {\n    mapRouteProperties = init.mapRouteProperties;\n  } else if (init.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = init.detectErrorBoundary;\n    mapRouteProperties = route => ({\n      hasErrorBoundary: detectErrorBoundary(route)\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Routes keyed by ID\n  let manifest = {};\n  // Routes in tree format for matching\n  let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);\n  let inFlightDataRoutes;\n  let basename = init.basename || \"/\";\n  let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;\n  let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n  // Config driven behavior flags\n  let future = _extends({\n    v7_fetcherPersist: false,\n    v7_normalizeFormMethod: false,\n    v7_partialHydration: false,\n    v7_prependBasename: false,\n    v7_relativeSplatPath: false,\n    v7_skipActionErrorRevalidation: false\n  }, init.future);\n  // Cleanup function for history\n  let unlistenHistory = null;\n  // Externally-provided functions to call on all state changes\n  let subscribers = new Set();\n  // Externally-provided object to hold scroll restoration locations during routing\n  let savedScrollPositions = null;\n  // Externally-provided function to get scroll restoration keys\n  let getScrollRestorationKey = null;\n  // Externally-provided function to get current scroll position\n  let getScrollPosition = null;\n  // One-time flag to control the initial hydration scroll restoration.  Because\n  // we don't get the saved positions from <ScrollRestoration /> until _after_\n  // the initial render, we need to manually trigger a separate updateState to\n  // send along the restoreScrollPosition\n  // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n  // SSR did the initial scroll restoration.\n  let initialScrollRestored = init.hydrationData != null;\n  let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n  let initialMatchesIsFOW = false;\n  let initialErrors = null;\n  if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n    // If we do not match a user-provided-route, fall back to the root\n    // to allow the error boundary to take over\n    let error = getInternalRouterError(404, {\n      pathname: init.history.location.pathname\n    });\n    let {\n      matches,\n      route\n    } = getShortCircuitMatches(dataRoutes);\n    initialMatches = matches;\n    initialErrors = {\n      [route.id]: error\n    };\n  }\n  // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n  // our initial match is a splat route, clear them out so we run through lazy\n  // discovery on hydration in case there's a more accurate lazy route match.\n  // In SSR apps (with `hydrationData`), we expect that the server will send\n  // up the proper matched routes so we don't want to run lazy discovery on\n  // initial hydration and want to hydrate into the splat route.\n  if (initialMatches && !init.hydrationData) {\n    let fogOfWar = checkFogOfWar(initialMatches, dataRoutes, init.history.location.pathname);\n    if (fogOfWar.active) {\n      initialMatches = null;\n    }\n  }\n  let initialized;\n  if (!initialMatches) {\n    initialized = false;\n    initialMatches = [];\n    // If partial hydration and fog of war is enabled, we will be running\n    // `patchRoutesOnNavigation` during hydration so include any partial matches as\n    // the initial matches so we can properly render `HydrateFallback`'s\n    if (future.v7_partialHydration) {\n      let fogOfWar = checkFogOfWar(null, dataRoutes, init.history.location.pathname);\n      if (fogOfWar.active && fogOfWar.matches) {\n        initialMatchesIsFOW = true;\n        initialMatches = fogOfWar.matches;\n      }\n    }\n  } else if (initialMatches.some(m => m.route.lazy)) {\n    // All initialMatches need to be loaded before we're ready.  If we have lazy\n    // functions around still then we'll need to run them in initialize()\n    initialized = false;\n  } else if (!initialMatches.some(m => m.route.loader)) {\n    // If we've got no loaders to run, then we're good to go\n    initialized = true;\n  } else if (future.v7_partialHydration) {\n    // If partial hydration is enabled, we're initialized so long as we were\n    // provided with hydrationData for every route with a loader, and no loaders\n    // were marked for explicit hydration\n    let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n    let errors = init.hydrationData ? init.hydrationData.errors : null;\n    // If errors exist, don't consider routes below the boundary\n    if (errors) {\n      let idx = initialMatches.findIndex(m => errors[m.route.id] !== undefined);\n      initialized = initialMatches.slice(0, idx + 1).every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n    } else {\n      initialized = initialMatches.every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n    }\n  } else {\n    // Without partial hydration - we're initialized if we were provided any\n    // hydrationData - which is expected to be complete\n    initialized = init.hydrationData != null;\n  }\n  let router;\n  let state = {\n    historyAction: init.history.action,\n    location: init.history.location,\n    matches: initialMatches,\n    initialized,\n    navigation: IDLE_NAVIGATION,\n    // Don't restore on initial updateState() if we were SSR'd\n    restoreScrollPosition: init.hydrationData != null ? false : null,\n    preventScrollReset: false,\n    revalidation: \"idle\",\n    loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n    actionData: init.hydrationData && init.hydrationData.actionData || null,\n    errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n    fetchers: new Map(),\n    blockers: new Map()\n  };\n  // -- Stateful internal variables to manage navigations --\n  // Current navigation in progress (to be committed in completeNavigation)\n  let pendingAction = Action.Pop;\n  // Should the current navigation prevent the scroll reset if scroll cannot\n  // be restored?\n  let pendingPreventScrollReset = false;\n  // AbortController for the active navigation\n  let pendingNavigationController;\n  // Should the current navigation enable document.startViewTransition?\n  let pendingViewTransitionEnabled = false;\n  // Store applied view transitions so we can apply them on POP\n  let appliedViewTransitions = new Map();\n  // Cleanup function for persisting applied transitions to sessionStorage\n  let removePageHideEventListener = null;\n  // We use this to avoid touching history in completeNavigation if a\n  // revalidation is entirely uninterrupted\n  let isUninterruptedRevalidation = false;\n  // Use this internal flag to force revalidation of all loaders:\n  //  - submissions (completed or interrupted)\n  //  - useRevalidator()\n  //  - X-Remix-Revalidate (from redirect)\n  let isRevalidationRequired = false;\n  // Use this internal array to capture routes that require revalidation due\n  // to a cancelled deferred on action submission\n  let cancelledDeferredRoutes = [];\n  // Use this internal array to capture fetcher loads that were cancelled by an\n  // action navigation and require revalidation\n  let cancelledFetcherLoads = new Set();\n  // AbortControllers for any in-flight fetchers\n  let fetchControllers = new Map();\n  // Track loads based on the order in which they started\n  let incrementingLoadId = 0;\n  // Track the outstanding pending navigation data load to be compared against\n  // the globally incrementing load when a fetcher load lands after a completed\n  // navigation\n  let pendingNavigationLoadId = -1;\n  // Fetchers that triggered data reloads as a result of their actions\n  let fetchReloadIds = new Map();\n  // Fetchers that triggered redirect navigations\n  let fetchRedirectIds = new Set();\n  // Most recent href/match for fetcher.load calls for fetchers\n  let fetchLoadMatches = new Map();\n  // Ref-count mounted fetchers so we know when it's ok to clean them up\n  let activeFetchers = new Map();\n  // Fetchers that have requested a delete when using v7_fetcherPersist,\n  // they'll be officially removed after they return to idle\n  let deletedFetchers = new Set();\n  // Store DeferredData instances for active route matches.  When a\n  // route loader returns defer() we stick one in here.  Then, when a nested\n  // promise resolves we update loaderData.  If a new navigation starts we\n  // cancel active deferreds for eliminated routes.\n  let activeDeferreds = new Map();\n  // Store blocker functions in a separate Map outside of router state since\n  // we don't need to update UI state if they change\n  let blockerFunctions = new Map();\n  // Flag to ignore the next history update, so we can revert the URL change on\n  // a POP navigation that was blocked by the user without touching router state\n  let unblockBlockerHistoryUpdate = undefined;\n  // Initialize the router, all side effects should be kicked off from here.\n  // Implemented as a Fluent API for ease of:\n  //   let router = createRouter(init).initialize();\n  function initialize() {\n    // If history informs us of a POP navigation, start the navigation but do not update\n    // state.  We'll update our own state once the navigation completes\n    unlistenHistory = init.history.listen(_ref => {\n      let {\n        action: historyAction,\n        location,\n        delta\n      } = _ref;\n      // Ignore this event if it was just us resetting the URL from a\n      // blocked POP navigation\n      if (unblockBlockerHistoryUpdate) {\n        unblockBlockerHistoryUpdate();\n        unblockBlockerHistoryUpdate = undefined;\n        return;\n      }\n      warning(blockerFunctions.size === 0 || delta != null, \"You are trying to use a blocker on a POP navigation to a location \" + \"that was not created by @remix-run/router. This will fail silently in \" + \"production. This can happen if you are navigating outside the router \" + \"via `window.history.pushState`/`window.location.hash` instead of using \" + \"router navigation APIs.  This can also happen if you are using \" + \"createHashRouter and the user manually changes the URL.\");\n      let blockerKey = shouldBlockNavigation({\n        currentLocation: state.location,\n        nextLocation: location,\n        historyAction\n      });\n      if (blockerKey && delta != null) {\n        // Restore the URL to match the current UI, but don't update router state\n        let nextHistoryUpdatePromise = new Promise(resolve => {\n          unblockBlockerHistoryUpdate = resolve;\n        });\n        init.history.go(delta * -1);\n        // Put the blocker into a blocked state\n        updateBlocker(blockerKey, {\n          state: \"blocked\",\n          location,\n          proceed() {\n            updateBlocker(blockerKey, {\n              state: \"proceeding\",\n              proceed: undefined,\n              reset: undefined,\n              location\n            });\n            // Re-do the same POP navigation we just blocked, after the url\n            // restoration is also complete.  See:\n            // https://github.com/remix-run/react-router/issues/11613\n            nextHistoryUpdatePromise.then(() => init.history.go(delta));\n          },\n          reset() {\n            let blockers = new Map(state.blockers);\n            blockers.set(blockerKey, IDLE_BLOCKER);\n            updateState({\n              blockers\n            });\n          }\n        });\n        return;\n      }\n      return startNavigation(historyAction, location);\n    });\n    if (isBrowser) {\n      // FIXME: This feels gross.  How can we cleanup the lines between\n      // scrollRestoration/appliedTransitions persistance?\n      restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n      let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n      routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n      removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n    }\n    // Kick off initial data load if needed.  Use Pop to avoid modifying history\n    // Note we don't do any handling of lazy here.  For SPA's it'll get handled\n    // in the normal navigation flow.  For SSR it's expected that lazy modules are\n    // resolved prior to router creation since we can't go into a fallbackElement\n    // UI for SSR'd apps\n    if (!state.initialized) {\n      startNavigation(Action.Pop, state.location, {\n        initialHydration: true\n      });\n    }\n    return router;\n  }\n  // Clean up a router and it's side effects\n  function dispose() {\n    if (unlistenHistory) {\n      unlistenHistory();\n    }\n    if (removePageHideEventListener) {\n      removePageHideEventListener();\n    }\n    subscribers.clear();\n    pendingNavigationController && pendingNavigationController.abort();\n    state.fetchers.forEach((_, key) => deleteFetcher(key));\n    state.blockers.forEach((_, key) => deleteBlocker(key));\n  }\n  // Subscribe to state updates for the router\n  function subscribe(fn) {\n    subscribers.add(fn);\n    return () => subscribers.delete(fn);\n  }\n  // Update our state and notify the calling context of the change\n  function updateState(newState, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    state = _extends({}, state, newState);\n    // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n    // can be removed\n    let completedFetchers = [];\n    let deletedFetchersKeys = [];\n    if (future.v7_fetcherPersist) {\n      state.fetchers.forEach((fetcher, key) => {\n        if (fetcher.state === \"idle\") {\n          if (deletedFetchers.has(key)) {\n            // Unmounted from the UI and can be totally removed\n            deletedFetchersKeys.push(key);\n          } else {\n            // Returned to idle but still mounted in the UI, so semi-remains for\n            // revalidations and such\n            completedFetchers.push(key);\n          }\n        }\n      });\n    }\n    // Remove any lingering deleted fetchers that have already been removed\n    // from state.fetchers\n    deletedFetchers.forEach(key => {\n      if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n        deletedFetchersKeys.push(key);\n      }\n    });\n    // Iterate over a local copy so that if flushSync is used and we end up\n    // removing and adding a new subscriber due to the useCallback dependencies,\n    // we don't get ourselves into a loop calling the new subscriber immediately\n    [...subscribers].forEach(subscriber => subscriber(state, {\n      deletedFetchers: deletedFetchersKeys,\n      viewTransitionOpts: opts.viewTransitionOpts,\n      flushSync: opts.flushSync === true\n    }));\n    // Remove idle fetchers from state since we only care about in-flight fetchers.\n    if (future.v7_fetcherPersist) {\n      completedFetchers.forEach(key => state.fetchers.delete(key));\n      deletedFetchersKeys.forEach(key => deleteFetcher(key));\n    } else {\n      // We already called deleteFetcher() on these, can remove them from this\n      // Set now that we've handed the keys off to the data layer\n      deletedFetchersKeys.forEach(key => deletedFetchers.delete(key));\n    }\n  }\n  // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n  // and setting state.[historyAction/location/matches] to the new route.\n  // - Location is a required param\n  // - Navigation will always be set to IDLE_NAVIGATION\n  // - Can pass any other state in newState\n  function completeNavigation(location, newState, _temp) {\n    var _location$state, _location$state2;\n    let {\n      flushSync\n    } = _temp === void 0 ? {} : _temp;\n    // Deduce if we're in a loading/actionReload state:\n    // - We have committed actionData in the store\n    // - The current navigation was a mutation submission\n    // - We're past the submitting state and into the loading state\n    // - The location being loaded is not the result of a redirect\n    let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;\n    let actionData;\n    if (newState.actionData) {\n      if (Object.keys(newState.actionData).length > 0) {\n        actionData = newState.actionData;\n      } else {\n        // Empty actionData -> clear prior actionData due to an action error\n        actionData = null;\n      }\n    } else if (isActionReload) {\n      // Keep the current data if we're wrapping up the action reload\n      actionData = state.actionData;\n    } else {\n      // Clear actionData on any other completed navigations\n      actionData = null;\n    }\n    // Always preserve any existing loaderData from re-used routes\n    let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;\n    // On a successful navigation we can assume we got through all blockers\n    // so we can start fresh\n    let blockers = state.blockers;\n    if (blockers.size > 0) {\n      blockers = new Map(blockers);\n      blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n    }\n    // Always respect the user flag.  Otherwise don't reset on mutation\n    // submission navigations unless they redirect\n    let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;\n    // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n    if (inFlightDataRoutes) {\n      dataRoutes = inFlightDataRoutes;\n      inFlightDataRoutes = undefined;\n    }\n    if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {\n      init.history.push(location, location.state);\n    } else if (pendingAction === Action.Replace) {\n      init.history.replace(location, location.state);\n    }\n    let viewTransitionOpts;\n    // On POP, enable transitions if they were enabled on the original navigation\n    if (pendingAction === Action.Pop) {\n      // Forward takes precedence so they behave like the original navigation\n      let priorPaths = appliedViewTransitions.get(state.location.pathname);\n      if (priorPaths && priorPaths.has(location.pathname)) {\n        viewTransitionOpts = {\n          currentLocation: state.location,\n          nextLocation: location\n        };\n      } else if (appliedViewTransitions.has(location.pathname)) {\n        // If we don't have a previous forward nav, assume we're popping back to\n        // the new location and enable if that location previously enabled\n        viewTransitionOpts = {\n          currentLocation: location,\n          nextLocation: state.location\n        };\n      }\n    } else if (pendingViewTransitionEnabled) {\n      // Store the applied transition on PUSH/REPLACE\n      let toPaths = appliedViewTransitions.get(state.location.pathname);\n      if (toPaths) {\n        toPaths.add(location.pathname);\n      } else {\n        toPaths = new Set([location.pathname]);\n        appliedViewTransitions.set(state.location.pathname, toPaths);\n      }\n      viewTransitionOpts = {\n        currentLocation: state.location,\n        nextLocation: location\n      };\n    }\n    updateState(_extends({}, newState, {\n      actionData,\n      loaderData,\n      historyAction: pendingAction,\n      location,\n      initialized: true,\n      navigation: IDLE_NAVIGATION,\n      revalidation: \"idle\",\n      restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),\n      preventScrollReset,\n      blockers\n    }), {\n      viewTransitionOpts,\n      flushSync: flushSync === true\n    });\n    // Reset stateful navigation vars\n    pendingAction = Action.Pop;\n    pendingPreventScrollReset = false;\n    pendingViewTransitionEnabled = false;\n    isUninterruptedRevalidation = false;\n    isRevalidationRequired = false;\n    cancelledDeferredRoutes = [];\n  }\n  // Trigger a navigation event, which can either be a numerical POP or a PUSH\n  // replace with an optional submission\n  async function navigate(to, opts) {\n    if (typeof to === \"number\") {\n      init.history.go(to);\n      return;\n    }\n    let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, future.v7_relativeSplatPath, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);\n    let {\n      path,\n      submission,\n      error\n    } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);\n    let currentLocation = state.location;\n    let nextLocation = createLocation(state.location, path, opts && opts.state);\n    // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n    // URL from window.location, so we need to encode it here so the behavior\n    // remains the same as POP and non-data-router usages.  new URL() does all\n    // the same encoding we'd get from a history.pushState/window.location read\n    // without having to touch history\n    nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));\n    let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n    let historyAction = Action.Push;\n    if (userReplace === true) {\n      historyAction = Action.Replace;\n    } else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n      // By default on submissions to the current location we REPLACE so that\n      // users don't have to double-click the back button to get to the prior\n      // location.  If the user redirects to a different location from the\n      // action/loader this will be ignored and the redirect will be a PUSH\n      historyAction = Action.Replace;\n    }\n    let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : undefined;\n    let flushSync = (opts && opts.flushSync) === true;\n    let blockerKey = shouldBlockNavigation({\n      currentLocation,\n      nextLocation,\n      historyAction\n    });\n    if (blockerKey) {\n      // Put the blocker into a blocked state\n      updateBlocker(blockerKey, {\n        state: \"blocked\",\n        location: nextLocation,\n        proceed() {\n          updateBlocker(blockerKey, {\n            state: \"proceeding\",\n            proceed: undefined,\n            reset: undefined,\n            location: nextLocation\n          });\n          // Send the same navigation through\n          navigate(to, opts);\n        },\n        reset() {\n          let blockers = new Map(state.blockers);\n          blockers.set(blockerKey, IDLE_BLOCKER);\n          updateState({\n            blockers\n          });\n        }\n      });\n      return;\n    }\n    return await startNavigation(historyAction, nextLocation, {\n      submission,\n      // Send through the formData serialization error if we have one so we can\n      // render at the right error boundary after we match routes\n      pendingError: error,\n      preventScrollReset,\n      replace: opts && opts.replace,\n      enableViewTransition: opts && opts.viewTransition,\n      flushSync\n    });\n  }\n  // Revalidate all current loaders.  If a navigation is in progress or if this\n  // is interrupted by a navigation, allow this to \"succeed\" by calling all\n  // loaders during the next loader round\n  function revalidate() {\n    interruptActiveLoads();\n    updateState({\n      revalidation: \"loading\"\n    });\n    // If we're currently submitting an action, we don't need to start a new\n    // navigation, we'll just let the follow up loader execution call all loaders\n    if (state.navigation.state === \"submitting\") {\n      return;\n    }\n    // If we're currently in an idle state, start a new navigation for the current\n    // action/location and mark it as uninterrupted, which will skip the history\n    // update in completeNavigation\n    if (state.navigation.state === \"idle\") {\n      startNavigation(state.historyAction, state.location, {\n        startUninterruptedRevalidation: true\n      });\n      return;\n    }\n    // Otherwise, if we're currently in a loading state, just start a new\n    // navigation to the navigation.location but do not trigger an uninterrupted\n    // revalidation so that history correctly updates once the navigation completes\n    startNavigation(pendingAction || state.historyAction, state.navigation.location, {\n      overrideNavigation: state.navigation,\n      // Proxy through any rending view transition\n      enableViewTransition: pendingViewTransitionEnabled === true\n    });\n  }\n  // Start a navigation to the given action/location.  Can optionally provide a\n  // overrideNavigation which will override the normalLoad in the case of a redirect\n  // navigation\n  async function startNavigation(historyAction, location, opts) {\n    // Abort any in-progress navigations and start a new one. Unset any ongoing\n    // uninterrupted revalidations unless told otherwise, since we want this\n    // new navigation to update history normally\n    pendingNavigationController && pendingNavigationController.abort();\n    pendingNavigationController = null;\n    pendingAction = historyAction;\n    isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n    // Save the current scroll position every time we start a new navigation,\n    // and track whether we should reset scroll on completion\n    saveScrollPosition(state.location, state.matches);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n    pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let loadingNavigation = opts && opts.overrideNavigation;\n    let matches = opts != null && opts.initialHydration && state.matches && state.matches.length > 0 && !initialMatchesIsFOW ?\n    // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n    state.matches : matchRoutes(routesToUse, location, basename);\n    let flushSync = (opts && opts.flushSync) === true;\n    // Short circuit if it's only a hash change and not a revalidation or\n    // mutation submission.\n    //\n    // Ignore on initial page loads because since the initial hydration will always\n    // be \"same hash\".  For example, on /page#hash and submit a <Form method=\"post\">\n    // which will default to a navigation to /page\n    if (matches && state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n      completeNavigation(location, {\n        matches\n      }, {\n        flushSync\n      });\n      return;\n    }\n    let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n    // Short circuit with a 404 on the root error boundary if we match nothing\n    if (!matches) {\n      let {\n        error,\n        notFoundMatches,\n        route\n      } = handleNavigational404(location.pathname);\n      completeNavigation(location, {\n        matches: notFoundMatches,\n        loaderData: {},\n        errors: {\n          [route.id]: error\n        }\n      }, {\n        flushSync\n      });\n      return;\n    }\n    // Create a controller/Request for this navigation\n    pendingNavigationController = new AbortController();\n    let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission);\n    let pendingActionResult;\n    if (opts && opts.pendingError) {\n      // If we have a pendingError, it means the user attempted a GET submission\n      // with binary FormData so assign here and skip to handleLoaders.  That\n      // way we handle calling loaders above the boundary etc.  It's not really\n      // different from an actionError in that sense.\n      pendingActionResult = [findNearestBoundary(matches).route.id, {\n        type: ResultType.error,\n        error: opts.pendingError\n      }];\n    } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n      // Call action if we received an action submission\n      let actionResult = await handleAction(request, location, opts.submission, matches, fogOfWar.active, {\n        replace: opts.replace,\n        flushSync\n      });\n      if (actionResult.shortCircuited) {\n        return;\n      }\n      // If we received a 404 from handleAction, it's because we couldn't lazily\n      // discover the destination route so we don't want to call loaders\n      if (actionResult.pendingActionResult) {\n        let [routeId, result] = actionResult.pendingActionResult;\n        if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {\n          pendingNavigationController = null;\n          completeNavigation(location, {\n            matches: actionResult.matches,\n            loaderData: {},\n            errors: {\n              [routeId]: result.error\n            }\n          });\n          return;\n        }\n      }\n      matches = actionResult.matches || matches;\n      pendingActionResult = actionResult.pendingActionResult;\n      loadingNavigation = getLoadingNavigation(location, opts.submission);\n      flushSync = false;\n      // No need to do fog of war matching again on loader execution\n      fogOfWar.active = false;\n      // Create a GET request for the loaders\n      request = createClientSideRequest(init.history, request.url, request.signal);\n    }\n    // Call loaders\n    let {\n      shortCircuited,\n      matches: updatedMatches,\n      loaderData,\n      errors\n    } = await handleLoaders(request, location, matches, fogOfWar.active, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult);\n    if (shortCircuited) {\n      return;\n    }\n    // Clean up now that the action/loaders have completed.  Don't clean up if\n    // we short circuited because pendingNavigationController will have already\n    // been assigned to a new controller for the next navigation\n    pendingNavigationController = null;\n    completeNavigation(location, _extends({\n      matches: updatedMatches || matches\n    }, getActionDataForCommit(pendingActionResult), {\n      loaderData,\n      errors\n    }));\n  }\n  // Call the action matched by the leaf route for this navigation and handle\n  // redirects/errors\n  async function handleAction(request, location, submission, matches, isFogOfWar, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    interruptActiveLoads();\n    // Put us in a submitting state\n    let navigation = getSubmittingNavigation(location, submission);\n    updateState({\n      navigation\n    }, {\n      flushSync: opts.flushSync === true\n    });\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n      if (discoverResult.type === \"aborted\") {\n        return {\n          shortCircuited: true\n        };\n      } else if (discoverResult.type === \"error\") {\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          pendingActionResult: [boundaryId, {\n            type: ResultType.error,\n            error: discoverResult.error\n          }]\n        };\n      } else if (!discoverResult.matches) {\n        let {\n          notFoundMatches,\n          error,\n          route\n        } = handleNavigational404(location.pathname);\n        return {\n          matches: notFoundMatches,\n          pendingActionResult: [route.id, {\n            type: ResultType.error,\n            error\n          }]\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n    // Call our action and get the result\n    let result;\n    let actionMatch = getTargetMatch(matches, location);\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      result = {\n        type: ResultType.error,\n        error: getInternalRouterError(405, {\n          method: request.method,\n          pathname: location.pathname,\n          routeId: actionMatch.route.id\n        })\n      };\n    } else {\n      let results = await callDataStrategy(\"action\", state, request, [actionMatch], matches, null);\n      result = results[actionMatch.route.id];\n      if (request.signal.aborted) {\n        return {\n          shortCircuited: true\n        };\n      }\n    }\n    if (isRedirectResult(result)) {\n      let replace;\n      if (opts && opts.replace != null) {\n        replace = opts.replace;\n      } else {\n        // If the user didn't explicity indicate replace behavior, replace if\n        // we redirected to the exact same location we're currently at to avoid\n        // double back-buttons\n        let location = normalizeRedirectLocation(result.response.headers.get(\"Location\"), new URL(request.url), basename, init.history);\n        replace = location === state.location.pathname + state.location.search;\n      }\n      await startRedirectNavigation(request, result, true, {\n        submission,\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    if (isDeferredResult(result)) {\n      throw getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n    }\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n      // By default, all submissions to the current location are REPLACE\n      // navigations, but if the action threw an error that'll be rendered in\n      // an errorElement, we fall back to PUSH so that the user can use the\n      // back button to get back to the pre-submission form location to try\n      // again\n      if ((opts && opts.replace) !== true) {\n        pendingAction = Action.Push;\n      }\n      return {\n        matches,\n        pendingActionResult: [boundaryMatch.route.id, result]\n      };\n    }\n    return {\n      matches,\n      pendingActionResult: [actionMatch.route.id, result]\n    };\n  }\n  // Call all applicable loaders for the given matches, handling redirects,\n  // errors, etc.\n  async function handleLoaders(request, location, matches, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) {\n    // Figure out the right navigation we want to use for data loading\n    let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n    // If this was a redirect from an action we don't have a \"submission\" but\n    // we have it on the loading navigation so use that if available\n    let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n    // If this is an uninterrupted revalidation, we remain in our current idle\n    // state.  If not, we need to switch to our loading state and load data,\n    // preserving any new action data or existing action data (in the case of\n    // a revalidation interrupting an actionReload)\n    // If we have partialHydration enabled, then don't update the state for the\n    // initial data load since it's not a \"navigation\"\n    let shouldUpdateNavigationState = !isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration);\n    // When fog of war is enabled, we enter our `loading` state earlier so we\n    // can discover new routes during the `loading` state.  We skip this if\n    // we've already run actions since we would have done our matching already.\n    // If the children() function threw then, we want to proceed with the\n    // partial matches it discovered.\n    if (isFogOfWar) {\n      if (shouldUpdateNavigationState) {\n        let actionData = getUpdatedActionData(pendingActionResult);\n        updateState(_extends({\n          navigation: loadingNavigation\n        }, actionData !== undefined ? {\n          actionData\n        } : {}), {\n          flushSync\n        });\n      }\n      let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n      if (discoverResult.type === \"aborted\") {\n        return {\n          shortCircuited: true\n        };\n      } else if (discoverResult.type === \"error\") {\n        let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n        return {\n          matches: discoverResult.partialMatches,\n          loaderData: {},\n          errors: {\n            [boundaryId]: discoverResult.error\n          }\n        };\n      } else if (!discoverResult.matches) {\n        let {\n          error,\n          notFoundMatches,\n          route\n        } = handleNavigational404(location.pathname);\n        return {\n          matches: notFoundMatches,\n          loaderData: {},\n          errors: {\n            [route.id]: error\n          }\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult);\n    // Cancel pending deferreds for no-longer-matched routes or routes we're\n    // about to reload.  Note that if this is an action reload we would have\n    // already cancelled all pending deferreds so this would be a no-op\n    cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId));\n    pendingNavigationLoadId = ++incrementingLoadId;\n    // Short circuit if we have no loaders to run\n    if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n      let updatedFetchers = markFetchRedirectsDone();\n      completeNavigation(location, _extends({\n        matches,\n        loaderData: {},\n        // Commit pending error if we're short circuiting\n        errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n          [pendingActionResult[0]]: pendingActionResult[1].error\n        } : null\n      }, getActionDataForCommit(pendingActionResult), updatedFetchers ? {\n        fetchers: new Map(state.fetchers)\n      } : {}), {\n        flushSync\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    if (shouldUpdateNavigationState) {\n      let updates = {};\n      if (!isFogOfWar) {\n        // Only update navigation/actionNData if we didn't already do it above\n        updates.navigation = loadingNavigation;\n        let actionData = getUpdatedActionData(pendingActionResult);\n        if (actionData !== undefined) {\n          updates.actionData = actionData;\n        }\n      }\n      if (revalidatingFetchers.length > 0) {\n        updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n      }\n      updateState(updates, {\n        flushSync\n      });\n    }\n    revalidatingFetchers.forEach(rf => {\n      abortFetcher(rf.key);\n      if (rf.controller) {\n        // Fetchers use an independent AbortController so that aborting a fetcher\n        // (via deleteFetcher) does not abort the triggering navigation that\n        // triggered the revalidation\n        fetchControllers.set(rf.key, rf.controller);\n      }\n    });\n    // Proxy navigation abort through to revalidation fetchers\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key));\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n    }\n    let {\n      loaderResults,\n      fetcherResults\n    } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, request);\n    if (request.signal.aborted) {\n      return {\n        shortCircuited: true\n      };\n    }\n    // Clean up _after_ loaders have completed.  Don't clean up if we short\n    // circuited because fetchControllers would have been aborted and\n    // reassigned to new controllers for the next navigation\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n    }\n    revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key));\n    // If any loaders returned a redirect Response, start a new REPLACE navigation\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    // Process and commit output from loaders\n    let {\n      loaderData,\n      errors\n    } = processLoaderData(state, matches, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds);\n    // Wire up subscribers to update loaderData as promises settle\n    activeDeferreds.forEach((deferredData, routeId) => {\n      deferredData.subscribe(aborted => {\n        // Note: No need to updateState here since the TrackedPromise on\n        // loaderData is stable across resolve/reject\n        // Remove this instance if we were aborted or if promises have settled\n        if (aborted || deferredData.done) {\n          activeDeferreds.delete(routeId);\n        }\n      });\n    });\n    // Preserve SSR errors during partial hydration\n    if (future.v7_partialHydration && initialHydration && state.errors) {\n      errors = _extends({}, state.errors, errors);\n    }\n    let updatedFetchers = markFetchRedirectsDone();\n    let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n    let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n    return _extends({\n      matches,\n      loaderData,\n      errors\n    }, shouldUpdateFetchers ? {\n      fetchers: new Map(state.fetchers)\n    } : {});\n  }\n  function getUpdatedActionData(pendingActionResult) {\n    if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n      // This is cast to `any` currently because `RouteData`uses any and it\n      // would be a breaking change to use any.\n      // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n      return {\n        [pendingActionResult[0]]: pendingActionResult[1].data\n      };\n    } else if (state.actionData) {\n      if (Object.keys(state.actionData).length === 0) {\n        return null;\n      } else {\n        return state.actionData;\n      }\n    }\n  }\n  function getUpdatedRevalidatingFetchers(revalidatingFetchers) {\n    revalidatingFetchers.forEach(rf => {\n      let fetcher = state.fetchers.get(rf.key);\n      let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined);\n      state.fetchers.set(rf.key, revalidatingFetcher);\n    });\n    return new Map(state.fetchers);\n  }\n  // Trigger a fetcher load/submit for the given fetcher key\n  function fetch(key, routeId, href, opts) {\n    if (isServer) {\n      throw new Error(\"router.fetch() was called during the server render, but it shouldn't be. \" + \"You are likely calling a useFetcher() method in the body of your component. \" + \"Try moving it to a useEffect or a callback.\");\n    }\n    abortFetcher(key);\n    let flushSync = (opts && opts.flushSync) === true;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative);\n    let matches = matchRoutes(routesToUse, normalizedPath, basename);\n    let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n    if (!matches) {\n      setFetcherError(key, routeId, getInternalRouterError(404, {\n        pathname: normalizedPath\n      }), {\n        flushSync\n      });\n      return;\n    }\n    let {\n      path,\n      submission,\n      error\n    } = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts);\n    if (error) {\n      setFetcherError(key, routeId, error, {\n        flushSync\n      });\n      return;\n    }\n    let match = getTargetMatch(matches, path);\n    let preventScrollReset = (opts && opts.preventScrollReset) === true;\n    if (submission && isMutationMethod(submission.formMethod)) {\n      handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);\n      return;\n    }\n    // Store off the match so we can call it's shouldRevalidate on subsequent\n    // revalidations\n    fetchLoadMatches.set(key, {\n      routeId,\n      path\n    });\n    handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);\n  }\n  // Call the action for the matched fetcher.submit(), and then handle redirects,\n  // errors, and revalidation\n  async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, preventScrollReset, submission) {\n    interruptActiveLoads();\n    fetchLoadMatches.delete(key);\n    function detectAndHandle405Error(m) {\n      if (!m.route.action && !m.route.lazy) {\n        let error = getInternalRouterError(405, {\n          method: submission.formMethod,\n          pathname: path,\n          routeId: routeId\n        });\n        setFetcherError(key, routeId, error, {\n          flushSync\n        });\n        return true;\n      }\n      return false;\n    }\n    if (!isFogOfWar && detectAndHandle405Error(match)) {\n      return;\n    }\n    // Put this fetcher into it's submitting state\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n      flushSync\n    });\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission);\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(requestMatches, new URL(fetchRequest.url).pathname, fetchRequest.signal, key);\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, {\n          flushSync\n        });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(key, routeId, getInternalRouterError(404, {\n          pathname: path\n        }), {\n          flushSync\n        });\n        return;\n      } else {\n        requestMatches = discoverResult.matches;\n        match = getTargetMatch(requestMatches, path);\n        if (detectAndHandle405Error(match)) {\n          return;\n        }\n      }\n    }\n    // Call the action for the fetcher\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let actionResults = await callDataStrategy(\"action\", state, fetchRequest, [match], requestMatches, key);\n    let actionResult = actionResults[match.route.id];\n    if (fetchRequest.signal.aborted) {\n      // We can delete this so long as we weren't aborted by our own fetcher\n      // re-submit which would have put _new_ controller is in fetchControllers\n      if (fetchControllers.get(key) === abortController) {\n        fetchControllers.delete(key);\n      }\n      return;\n    }\n    // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n    // or redirects processed for unmounted fetchers so we just revert them to\n    // idle\n    if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n      if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      }\n      // Let SuccessResult's fall through for revalidation\n    } else {\n      if (isRedirectResult(actionResult)) {\n        fetchControllers.delete(key);\n        if (pendingNavigationLoadId > originatingLoadId) {\n          // A new navigation was kicked off after our action started, so that\n          // should take precedence over this redirect navigation.  We already\n          // set isRevalidationRequired so all loaders for the new route should\n          // fire unless opted out via shouldRevalidate\n          updateFetcherState(key, getDoneFetcher(undefined));\n          return;\n        } else {\n          fetchRedirectIds.add(key);\n          updateFetcherState(key, getLoadingFetcher(submission));\n          return startRedirectNavigation(fetchRequest, actionResult, false, {\n            fetcherSubmission: submission,\n            preventScrollReset\n          });\n        }\n      }\n      // Process any non-redirect errors thrown\n      if (isErrorResult(actionResult)) {\n        setFetcherError(key, routeId, actionResult.error);\n        return;\n      }\n    }\n    if (isDeferredResult(actionResult)) {\n      throw getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n    }\n    // Start the data load for current matches, or the next location if we're\n    // in the middle of a navigation\n    let nextLocation = state.navigation.location || state.location;\n    let revalidationRequest = createClientSideRequest(init.history, nextLocation, abortController.signal);\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n    invariant(matches, \"Didn't find any matches after fetcher action\");\n    let loadId = ++incrementingLoadId;\n    fetchReloadIds.set(key, loadId);\n    let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n    state.fetchers.set(key, loadFetcher);\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]);\n    // Put all revalidating fetchers into the loading state, except for the\n    // current fetcher which we want to keep in it's current loading state which\n    // contains it's action submission info + action data\n    revalidatingFetchers.filter(rf => rf.key !== key).forEach(rf => {\n      let staleKey = rf.key;\n      let existingFetcher = state.fetchers.get(staleKey);\n      let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined);\n      state.fetchers.set(staleKey, revalidatingFetcher);\n      abortFetcher(staleKey);\n      if (rf.controller) {\n        fetchControllers.set(staleKey, rf.controller);\n      }\n    });\n    updateState({\n      fetchers: new Map(state.fetchers)\n    });\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key));\n    abortController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n    let {\n      loaderResults,\n      fetcherResults\n    } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);\n    if (abortController.signal.aborted) {\n      return;\n    }\n    abortController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n    fetchReloadIds.delete(key);\n    fetchControllers.delete(key);\n    revalidatingFetchers.forEach(r => fetchControllers.delete(r.key));\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      return startRedirectNavigation(revalidationRequest, redirect.result, false, {\n        preventScrollReset\n      });\n    }\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      return startRedirectNavigation(revalidationRequest, redirect.result, false, {\n        preventScrollReset\n      });\n    }\n    // Process and commit output from loaders\n    let {\n      loaderData,\n      errors\n    } = processLoaderData(state, matches, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);\n    // Since we let revalidations complete even if the submitting fetcher was\n    // deleted, only put it back to idle if it hasn't been deleted\n    if (state.fetchers.has(key)) {\n      let doneFetcher = getDoneFetcher(actionResult.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n    abortStaleFetchLoads(loadId);\n    // If we are currently in a navigation loading state and this fetcher is\n    // more recent than the navigation, we want the newer data so abort the\n    // navigation and complete it with the fetcher data\n    if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n      invariant(pendingAction, \"Expected pending action\");\n      pendingNavigationController && pendingNavigationController.abort();\n      completeNavigation(state.navigation.location, {\n        matches,\n        loaderData,\n        errors,\n        fetchers: new Map(state.fetchers)\n      });\n    } else {\n      // otherwise just update with the fetcher data, preserving any existing\n      // loaderData for loaders that did not need to reload.  We have to\n      // manually merge here since we aren't going through completeNavigation\n      updateState({\n        errors,\n        loaderData: mergeLoaderData(state.loaderData, loaderData, matches, errors),\n        fetchers: new Map(state.fetchers)\n      });\n      isRevalidationRequired = false;\n    }\n  }\n  // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n  async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, preventScrollReset, submission) {\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), {\n      flushSync\n    });\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(init.history, path, abortController.signal);\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(matches, new URL(fetchRequest.url).pathname, fetchRequest.signal, key);\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        setFetcherError(key, routeId, discoverResult.error, {\n          flushSync\n        });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(key, routeId, getInternalRouterError(404, {\n          pathname: path\n        }), {\n          flushSync\n        });\n        return;\n      } else {\n        matches = discoverResult.matches;\n        match = getTargetMatch(matches, path);\n      }\n    }\n    // Call the loader for this fetcher route match\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let results = await callDataStrategy(\"loader\", state, fetchRequest, [match], matches, key);\n    let result = results[match.route.id];\n    // Deferred isn't supported for fetcher loads, await everything and treat it\n    // as a normal load.  resolveDeferredData will return undefined if this\n    // fetcher gets aborted, so we just leave result untouched and short circuit\n    // below if that happens\n    if (isDeferredResult(result)) {\n      result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;\n    }\n    // We can delete this so long as we weren't aborted by our our own fetcher\n    // re-load which would have put _new_ controller is in fetchControllers\n    if (fetchControllers.get(key) === abortController) {\n      fetchControllers.delete(key);\n    }\n    if (fetchRequest.signal.aborted) {\n      return;\n    }\n    // We don't want errors bubbling up or redirects followed for unmounted\n    // fetchers, so short circuit here if it was removed from the UI\n    if (deletedFetchers.has(key)) {\n      updateFetcherState(key, getDoneFetcher(undefined));\n      return;\n    }\n    // If the loader threw a redirect Response, start a new REPLACE navigation\n    if (isRedirectResult(result)) {\n      if (pendingNavigationLoadId > originatingLoadId) {\n        // A new navigation was kicked off after our loader started, so that\n        // should take precedence over this redirect navigation\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      } else {\n        fetchRedirectIds.add(key);\n        await startRedirectNavigation(fetchRequest, result, false, {\n          preventScrollReset\n        });\n        return;\n      }\n    }\n    // Process any non-redirect errors thrown\n    if (isErrorResult(result)) {\n      setFetcherError(key, routeId, result.error);\n      return;\n    }\n    invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n    // Put the fetcher back into an idle state\n    updateFetcherState(key, getDoneFetcher(result.data));\n  }\n  /**\n   * Utility function to handle redirects returned from an action or loader.\n   * Normally, a redirect \"replaces\" the navigation that triggered it.  So, for\n   * example:\n   *\n   *  - user is on /a\n   *  - user clicks a link to /b\n   *  - loader for /b redirects to /c\n   *\n   * In a non-JS app the browser would track the in-flight navigation to /b and\n   * then replace it with /c when it encountered the redirect response.  In\n   * the end it would only ever update the URL bar with /c.\n   *\n   * In client-side routing using pushState/replaceState, we aim to emulate\n   * this behavior and we also do not update history until the end of the\n   * navigation (including processed redirects).  This means that we never\n   * actually touch history until we've processed redirects, so we just use\n   * the history action from the original navigation (PUSH or REPLACE).\n   */\n  async function startRedirectNavigation(request, redirect, isNavigation, _temp2) {\n    let {\n      submission,\n      fetcherSubmission,\n      preventScrollReset,\n      replace\n    } = _temp2 === void 0 ? {} : _temp2;\n    if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n      isRevalidationRequired = true;\n    }\n    let location = redirect.response.headers.get(\"Location\");\n    invariant(location, \"Expected a Location header on the redirect Response\");\n    location = normalizeRedirectLocation(location, new URL(request.url), basename, init.history);\n    let redirectLocation = createLocation(state.location, location, {\n      _isRedirect: true\n    });\n    if (isBrowser) {\n      let isDocumentReload = false;\n      if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n        // Hard reload if the response contained X-Remix-Reload-Document\n        isDocumentReload = true;\n      } else if (ABSOLUTE_URL_REGEX.test(location)) {\n        const url = init.history.createURL(location);\n        isDocumentReload =\n        // Hard reload if it's an absolute URL to a new origin\n        url.origin !== routerWindow.location.origin ||\n        // Hard reload if it's an absolute URL that does not match our basename\n        stripBasename(url.pathname, basename) == null;\n      }\n      if (isDocumentReload) {\n        if (replace) {\n          routerWindow.location.replace(location);\n        } else {\n          routerWindow.location.assign(location);\n        }\n        return;\n      }\n    }\n    // There's no need to abort on redirects, since we don't detect the\n    // redirect until the action/loaders have settled\n    pendingNavigationController = null;\n    let redirectHistoryAction = replace === true || redirect.response.headers.has(\"X-Remix-Replace\") ? Action.Replace : Action.Push;\n    // Use the incoming submission if provided, fallback on the active one in\n    // state.navigation\n    let {\n      formMethod,\n      formAction,\n      formEncType\n    } = state.navigation;\n    if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n      submission = getSubmissionFromNavigation(state.navigation);\n    }\n    // If this was a 307/308 submission we want to preserve the HTTP method and\n    // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n    // redirected location\n    let activeSubmission = submission || fetcherSubmission;\n    if (redirectPreserveMethodStatusCodes.has(redirect.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        submission: _extends({}, activeSubmission, {\n          formAction: location\n        }),\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n      });\n    } else {\n      // If we have a navigation submission, we will preserve it through the\n      // redirect navigation\n      let overrideNavigation = getLoadingNavigation(redirectLocation, submission);\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        overrideNavigation,\n        // Send fetcher submissions through for shouldRevalidate\n        fetcherSubmission,\n        // Preserve these flags across redirects\n        preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n        enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n      });\n    }\n  }\n  // Utility wrapper for calling dataStrategy client-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(type, state, request, matchesToLoad, matches, fetcherKey) {\n    let results;\n    let dataResults = {};\n    try {\n      results = await callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties);\n    } catch (e) {\n      // If the outer dataStrategy method throws, just return the error for all\n      // matches - and it'll naturally bubble to the root\n      matchesToLoad.forEach(m => {\n        dataResults[m.route.id] = {\n          type: ResultType.error,\n          error: e\n        };\n      });\n      return dataResults;\n    }\n    for (let [routeId, result] of Object.entries(results)) {\n      if (isRedirectDataStrategyResultResult(result)) {\n        let response = result.result;\n        dataResults[routeId] = {\n          type: ResultType.redirect,\n          response: normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, future.v7_relativeSplatPath)\n        };\n      } else {\n        dataResults[routeId] = await convertDataStrategyResultToDataResult(result);\n      }\n    }\n    return dataResults;\n  }\n  async function callLoadersAndMaybeResolveData(state, matches, matchesToLoad, fetchersToLoad, request) {\n    let currentMatches = state.matches;\n    // Kick off loaders and fetchers in parallel\n    let loaderResultsPromise = callDataStrategy(\"loader\", state, request, matchesToLoad, matches, null);\n    let fetcherResultsPromise = Promise.all(fetchersToLoad.map(async f => {\n      if (f.matches && f.match && f.controller) {\n        let results = await callDataStrategy(\"loader\", state, createClientSideRequest(init.history, f.path, f.controller.signal), [f.match], f.matches, f.key);\n        let result = results[f.match.route.id];\n        // Fetcher results are keyed by fetcher key from here on out, not routeId\n        return {\n          [f.key]: result\n        };\n      } else {\n        return Promise.resolve({\n          [f.key]: {\n            type: ResultType.error,\n            error: getInternalRouterError(404, {\n              pathname: f.path\n            })\n          }\n        });\n      }\n    }));\n    let loaderResults = await loaderResultsPromise;\n    let fetcherResults = (await fetcherResultsPromise).reduce((acc, r) => Object.assign(acc, r), {});\n    await Promise.all([resolveNavigationDeferredResults(matches, loaderResults, request.signal, currentMatches, state.loaderData), resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad)]);\n    return {\n      loaderResults,\n      fetcherResults\n    };\n  }\n  function interruptActiveLoads() {\n    // Every interruption triggers a revalidation\n    isRevalidationRequired = true;\n    // Cancel pending route-level deferreds and mark cancelled routes for\n    // revalidation\n    cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n    // Abort in-flight fetcher loads\n    fetchLoadMatches.forEach((_, key) => {\n      if (fetchControllers.has(key)) {\n        cancelledFetcherLoads.add(key);\n      }\n      abortFetcher(key);\n    });\n  }\n  function updateFetcherState(key, fetcher, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    state.fetchers.set(key, fetcher);\n    updateState({\n      fetchers: new Map(state.fetchers)\n    }, {\n      flushSync: (opts && opts.flushSync) === true\n    });\n  }\n  function setFetcherError(key, routeId, error, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    let boundaryMatch = findNearestBoundary(state.matches, routeId);\n    deleteFetcher(key);\n    updateState({\n      errors: {\n        [boundaryMatch.route.id]: error\n      },\n      fetchers: new Map(state.fetchers)\n    }, {\n      flushSync: (opts && opts.flushSync) === true\n    });\n  }\n  function getFetcher(key) {\n    activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n    // If this fetcher was previously marked for deletion, unmark it since we\n    // have a new instance\n    if (deletedFetchers.has(key)) {\n      deletedFetchers.delete(key);\n    }\n    return state.fetchers.get(key) || IDLE_FETCHER;\n  }\n  function deleteFetcher(key) {\n    let fetcher = state.fetchers.get(key);\n    // Don't abort the controller if this is a deletion of a fetcher.submit()\n    // in it's loading phase since - we don't want to abort the corresponding\n    // revalidation and want them to complete and land\n    if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n      abortFetcher(key);\n    }\n    fetchLoadMatches.delete(key);\n    fetchReloadIds.delete(key);\n    fetchRedirectIds.delete(key);\n    // If we opted into the flag we can clear this now since we're calling\n    // deleteFetcher() at the end of updateState() and we've already handed the\n    // deleted fetcher keys off to the data layer.\n    // If not, we're eagerly calling deleteFetcher() and we need to keep this\n    // Set populated until the next updateState call, and we'll clear\n    // `deletedFetchers` then\n    if (future.v7_fetcherPersist) {\n      deletedFetchers.delete(key);\n    }\n    cancelledFetcherLoads.delete(key);\n    state.fetchers.delete(key);\n  }\n  function deleteFetcherAndUpdateState(key) {\n    let count = (activeFetchers.get(key) || 0) - 1;\n    if (count <= 0) {\n      activeFetchers.delete(key);\n      deletedFetchers.add(key);\n      if (!future.v7_fetcherPersist) {\n        deleteFetcher(key);\n      }\n    } else {\n      activeFetchers.set(key, count);\n    }\n    updateState({\n      fetchers: new Map(state.fetchers)\n    });\n  }\n  function abortFetcher(key) {\n    let controller = fetchControllers.get(key);\n    if (controller) {\n      controller.abort();\n      fetchControllers.delete(key);\n    }\n  }\n  function markFetchersDone(keys) {\n    for (let key of keys) {\n      let fetcher = getFetcher(key);\n      let doneFetcher = getDoneFetcher(fetcher.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  }\n  function markFetchRedirectsDone() {\n    let doneKeys = [];\n    let updatedFetchers = false;\n    for (let key of fetchRedirectIds) {\n      let fetcher = state.fetchers.get(key);\n      invariant(fetcher, \"Expected fetcher: \" + key);\n      if (fetcher.state === \"loading\") {\n        fetchRedirectIds.delete(key);\n        doneKeys.push(key);\n        updatedFetchers = true;\n      }\n    }\n    markFetchersDone(doneKeys);\n    return updatedFetchers;\n  }\n  function abortStaleFetchLoads(landedId) {\n    let yeetedKeys = [];\n    for (let [key, id] of fetchReloadIds) {\n      if (id < landedId) {\n        let fetcher = state.fetchers.get(key);\n        invariant(fetcher, \"Expected fetcher: \" + key);\n        if (fetcher.state === \"loading\") {\n          abortFetcher(key);\n          fetchReloadIds.delete(key);\n          yeetedKeys.push(key);\n        }\n      }\n    }\n    markFetchersDone(yeetedKeys);\n    return yeetedKeys.length > 0;\n  }\n  function getBlocker(key, fn) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    if (blockerFunctions.get(key) !== fn) {\n      blockerFunctions.set(key, fn);\n    }\n    return blocker;\n  }\n  function deleteBlocker(key) {\n    state.blockers.delete(key);\n    blockerFunctions.delete(key);\n  }\n  // Utility function to update blockers, ensuring valid state transitions\n  function updateBlocker(key, newBlocker) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    // Poor mans state machine :)\n    // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n    invariant(blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\", \"Invalid blocker state transition: \" + blocker.state + \" -> \" + newBlocker.state);\n    let blockers = new Map(state.blockers);\n    blockers.set(key, newBlocker);\n    updateState({\n      blockers\n    });\n  }\n  function shouldBlockNavigation(_ref2) {\n    let {\n      currentLocation,\n      nextLocation,\n      historyAction\n    } = _ref2;\n    if (blockerFunctions.size === 0) {\n      return;\n    }\n    // We ony support a single active blocker at the moment since we don't have\n    // any compelling use cases for multi-blocker yet\n    if (blockerFunctions.size > 1) {\n      warning(false, \"A router only supports one blocker at a time\");\n    }\n    let entries = Array.from(blockerFunctions.entries());\n    let [blockerKey, blockerFunction] = entries[entries.length - 1];\n    let blocker = state.blockers.get(blockerKey);\n    if (blocker && blocker.state === \"proceeding\") {\n      // If the blocker is currently proceeding, we don't need to re-check\n      // it and can let this navigation continue\n      return;\n    }\n    // At this point, we know we're unblocked/blocked so we need to check the\n    // user-provided blocker function\n    if (blockerFunction({\n      currentLocation,\n      nextLocation,\n      historyAction\n    })) {\n      return blockerKey;\n    }\n  }\n  function handleNavigational404(pathname) {\n    let error = getInternalRouterError(404, {\n      pathname\n    });\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let {\n      matches,\n      route\n    } = getShortCircuitMatches(routesToUse);\n    // Cancel all pending deferred on 404s since we don't keep any routes\n    cancelActiveDeferreds();\n    return {\n      notFoundMatches: matches,\n      route,\n      error\n    };\n  }\n  function cancelActiveDeferreds(predicate) {\n    let cancelledRouteIds = [];\n    activeDeferreds.forEach((dfd, routeId) => {\n      if (!predicate || predicate(routeId)) {\n        // Cancel the deferred - but do not remove from activeDeferreds here -\n        // we rely on the subscribers to do that so our tests can assert proper\n        // cleanup via _internalActiveDeferreds\n        dfd.cancel();\n        cancelledRouteIds.push(routeId);\n        activeDeferreds.delete(routeId);\n      }\n    });\n    return cancelledRouteIds;\n  }\n  // Opt in to capturing and reporting scroll positions during navigations,\n  // used by the <ScrollRestoration> component\n  function enableScrollRestoration(positions, getPosition, getKey) {\n    savedScrollPositions = positions;\n    getScrollPosition = getPosition;\n    getScrollRestorationKey = getKey || null;\n    // Perform initial hydration scroll restoration, since we miss the boat on\n    // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n    // and therefore have no savedScrollPositions available\n    if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n      initialScrollRestored = true;\n      let y = getSavedScrollPosition(state.location, state.matches);\n      if (y != null) {\n        updateState({\n          restoreScrollPosition: y\n        });\n      }\n    }\n    return () => {\n      savedScrollPositions = null;\n      getScrollPosition = null;\n      getScrollRestorationKey = null;\n    };\n  }\n  function getScrollKey(location, matches) {\n    if (getScrollRestorationKey) {\n      let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData)));\n      return key || location.key;\n    }\n    return location.key;\n  }\n  function saveScrollPosition(location, matches) {\n    if (savedScrollPositions && getScrollPosition) {\n      let key = getScrollKey(location, matches);\n      savedScrollPositions[key] = getScrollPosition();\n    }\n  }\n  function getSavedScrollPosition(location, matches) {\n    if (savedScrollPositions) {\n      let key = getScrollKey(location, matches);\n      let y = savedScrollPositions[key];\n      if (typeof y === \"number\") {\n        return y;\n      }\n    }\n    return null;\n  }\n  function checkFogOfWar(matches, routesToUse, pathname) {\n    if (patchRoutesOnNavigationImpl) {\n      if (!matches) {\n        let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n        return {\n          active: true,\n          matches: fogMatches || []\n        };\n      } else {\n        if (Object.keys(matches[0].params).length > 0) {\n          // If we matched a dynamic param or a splat, it might only be because\n          // we haven't yet discovered other routes that would match with a\n          // higher score.  Call patchRoutesOnNavigation just to be sure\n          let partialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n          return {\n            active: true,\n            matches: partialMatches\n          };\n        }\n      }\n    }\n    return {\n      active: false,\n      matches: null\n    };\n  }\n  async function discoverRoutes(matches, pathname, signal, fetcherKey) {\n    if (!patchRoutesOnNavigationImpl) {\n      return {\n        type: \"success\",\n        matches\n      };\n    }\n    let partialMatches = matches;\n    while (true) {\n      let isNonHMR = inFlightDataRoutes == null;\n      let routesToUse = inFlightDataRoutes || dataRoutes;\n      let localManifest = manifest;\n      try {\n        await patchRoutesOnNavigationImpl({\n          signal,\n          path: pathname,\n          matches: partialMatches,\n          fetcherKey,\n          patch: (routeId, children) => {\n            if (signal.aborted) return;\n            patchRoutesImpl(routeId, children, routesToUse, localManifest, mapRouteProperties);\n          }\n        });\n      } catch (e) {\n        return {\n          type: \"error\",\n          error: e,\n          partialMatches\n        };\n      } finally {\n        // If we are not in the middle of an HMR revalidation and we changed the\n        // routes, provide a new identity so when we `updateState` at the end of\n        // this navigation/fetch `router.routes` will be a new identity and\n        // trigger a re-run of memoized `router.routes` dependencies.\n        // HMR will already update the identity and reflow when it lands\n        // `inFlightDataRoutes` in `completeNavigation`\n        if (isNonHMR && !signal.aborted) {\n          dataRoutes = [...dataRoutes];\n        }\n      }\n      if (signal.aborted) {\n        return {\n          type: \"aborted\"\n        };\n      }\n      let newMatches = matchRoutes(routesToUse, pathname, basename);\n      if (newMatches) {\n        return {\n          type: \"success\",\n          matches: newMatches\n        };\n      }\n      let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n      // Avoid loops if the second pass results in the same partial matches\n      if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every((m, i) => m.route.id === newPartialMatches[i].route.id)) {\n        return {\n          type: \"success\",\n          matches: null\n        };\n      }\n      partialMatches = newPartialMatches;\n    }\n  }\n  function _internalSetRoutes(newRoutes) {\n    manifest = {};\n    inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest);\n  }\n  function patchRoutes(routeId, children) {\n    let isNonHMR = inFlightDataRoutes == null;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties);\n    // If we are not in the middle of an HMR revalidation and we changed the\n    // routes, provide a new identity and trigger a reflow via `updateState`\n    // to re-run memoized `router.routes` dependencies.\n    // HMR will already update the identity and reflow when it lands\n    // `inFlightDataRoutes` in `completeNavigation`\n    if (isNonHMR) {\n      dataRoutes = [...dataRoutes];\n      updateState({});\n    }\n  }\n  router = {\n    get basename() {\n      return basename;\n    },\n    get future() {\n      return future;\n    },\n    get state() {\n      return state;\n    },\n    get routes() {\n      return dataRoutes;\n    },\n    get window() {\n      return routerWindow;\n    },\n    initialize,\n    subscribe,\n    enableScrollRestoration,\n    navigate,\n    fetch,\n    revalidate,\n    // Passthrough to history-aware createHref used by useHref so we get proper\n    // hash-aware URLs in DOM paths\n    createHref: to => init.history.createHref(to),\n    encodeLocation: to => init.history.encodeLocation(to),\n    getFetcher,\n    deleteFetcher: deleteFetcherAndUpdateState,\n    dispose,\n    getBlocker,\n    deleteBlocker,\n    patchRoutes,\n    _internalFetchControllers: fetchControllers,\n    _internalActiveDeferreds: activeDeferreds,\n    // TODO: Remove setRoutes, it's temporary to avoid dealing with\n    // updating the tree while validating the update algorithm.\n    _internalSetRoutes\n  };\n  return router;\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\nconst UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\nfunction createStaticHandler(routes, opts) {\n  invariant(routes.length > 0, \"You must provide a non-empty routes array to createStaticHandler\");\n  let manifest = {};\n  let basename = (opts ? opts.basename : null) || \"/\";\n  let mapRouteProperties;\n  if (opts != null && opts.mapRouteProperties) {\n    mapRouteProperties = opts.mapRouteProperties;\n  } else if (opts != null && opts.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = opts.detectErrorBoundary;\n    mapRouteProperties = route => ({\n      hasErrorBoundary: detectErrorBoundary(route)\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Config driven behavior flags\n  let future = _extends({\n    v7_relativeSplatPath: false,\n    v7_throwAbortReason: false\n  }, opts ? opts.future : null);\n  let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest);\n  /**\n   * The query() method is intended for document requests, in which we want to\n   * call an optional action and potentially multiple loaders for all nested\n   * routes.  It returns a StaticHandlerContext object, which is very similar\n   * to the router state (location, loaderData, actionData, errors, etc.) and\n   * also adds SSR-specific information such as the statusCode and headers\n   * from action/loaders Responses.\n   *\n   * It _should_ never throw and should report all errors through the\n   * returned context.errors object, properly associating errors to their error\n   * boundary.  Additionally, it tracks _deepestRenderedBoundaryId which can be\n   * used to emulate React error boundaries during SSr by performing a second\n   * pass only down to the boundaryId.\n   *\n   * The one exception where we do not return a StaticHandlerContext is when a\n   * redirect response is returned or thrown from any action/loader.  We\n   * propagate that out and return the raw Response so the HTTP server can\n   * return it directly.\n   *\n   * - `opts.requestContext` is an optional server context that will be passed\n   *   to actions/loaders in the `context` parameter\n   * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n   *   the bubbling of errors which allows single-fetch-type implementations\n   *   where the client will handle the bubbling and we may need to return data\n   *   for the handling route\n   */\n  async function query(request, _temp3) {\n    let {\n      requestContext,\n      skipLoaderErrorBubbling,\n      dataStrategy\n    } = _temp3 === void 0 ? {} : _temp3;\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\") {\n      let error = getInternalRouterError(405, {\n        method\n      });\n      let {\n        matches: methodNotAllowedMatches,\n        route\n      } = getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: methodNotAllowedMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    } else if (!matches) {\n      let error = getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n      let {\n        matches: notFoundMatches,\n        route\n      } = getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: notFoundMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, skipLoaderErrorBubbling === true, null);\n    if (isResponse(result)) {\n      return result;\n    }\n    // When returning StaticHandlerContext, we patch back in the location here\n    // since we need it for React Context.  But this helps keep our submit and\n    // loadRouteData operating on a Request instead of a Location\n    return _extends({\n      location,\n      basename\n    }, result);\n  }\n  /**\n   * The queryRoute() method is intended for targeted route requests, either\n   * for fetch ?_data requests or resource route requests.  In this case, we\n   * are only ever calling a single action or loader, and we are returning the\n   * returned value directly.  In most cases, this will be a Response returned\n   * from the action/loader, but it may be a primitive or other value as well -\n   * and in such cases the calling context should handle that accordingly.\n   *\n   * We do respect the throw/return differentiation, so if an action/loader\n   * throws, then this method will throw the value.  This is important so we\n   * can do proper boundary identification in Remix where a thrown Response\n   * must go to the Catch Boundary but a returned Response is happy-path.\n   *\n   * One thing to note is that any Router-initiated Errors that make sense\n   * to associate with a status code will be thrown as an ErrorResponse\n   * instance which include the raw Error, such that the calling context can\n   * serialize the error as they see fit while including the proper response\n   * code.  Examples here are 404 and 405 errors that occur prior to reaching\n   * any user-defined loaders.\n   *\n   * - `opts.routeId` allows you to specify the specific route handler to call.\n   *   If not provided the handler will determine the proper route by matching\n   *   against `request.url`\n   * - `opts.requestContext` is an optional server context that will be passed\n   *    to actions/loaders in the `context` parameter\n   */\n  async function queryRoute(request, _temp4) {\n    let {\n      routeId,\n      requestContext,\n      dataStrategy\n    } = _temp4 === void 0 ? {} : _temp4;\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n      throw getInternalRouterError(405, {\n        method\n      });\n    } else if (!matches) {\n      throw getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n    }\n    let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);\n    if (routeId && !match) {\n      throw getInternalRouterError(403, {\n        pathname: location.pathname,\n        routeId\n      });\n    } else if (!match) {\n      // This should never hit I don't think?\n      throw getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n    }\n    let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, false, match);\n    if (isResponse(result)) {\n      return result;\n    }\n    let error = result.errors ? Object.values(result.errors)[0] : undefined;\n    if (error !== undefined) {\n      // If we got back result.errors, that means the loader/action threw\n      // _something_ that wasn't a Response, but it's not guaranteed/required\n      // to be an `instanceof Error` either, so we have to use throw here to\n      // preserve the \"error\" state outside of queryImpl.\n      throw error;\n    }\n    // Pick off the right state value to return\n    if (result.actionData) {\n      return Object.values(result.actionData)[0];\n    }\n    if (result.loaderData) {\n      var _result$activeDeferre;\n      let data = Object.values(result.loaderData)[0];\n      if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) {\n        data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n      }\n      return data;\n    }\n    return undefined;\n  }\n  async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch) {\n    invariant(request.signal, \"query()/queryRoute() requests must contain an AbortController signal\");\n    try {\n      if (isMutationMethod(request.method.toLowerCase())) {\n        let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch != null);\n        return result;\n      }\n      let result = await loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch);\n      return isResponse(result) ? result : _extends({}, result, {\n        actionData: null,\n        actionHeaders: {}\n      });\n    } catch (e) {\n      // If the user threw/returned a Response in callLoaderOrAction for a\n      // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n      // and then return or throw the raw Response here accordingly\n      if (isDataStrategyResult(e) && isResponse(e.result)) {\n        if (e.type === ResultType.error) {\n          throw e.result;\n        }\n        return e.result;\n      }\n      // Redirects are always returned since they don't propagate to catch\n      // boundaries\n      if (isRedirectResponse(e)) {\n        return e;\n      }\n      throw e;\n    }\n  }\n  async function submit(request, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest) {\n    let result;\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: actionMatch.route.id\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error\n      };\n    } else {\n      let results = await callDataStrategy(\"action\", request, [actionMatch], matches, isRouteRequest, requestContext, dataStrategy);\n      result = results[actionMatch.route.id];\n      if (request.signal.aborted) {\n        throwStaticHandlerAbortedError(request, isRouteRequest, future);\n      }\n    }\n    if (isRedirectResult(result)) {\n      // Uhhhh - this should never happen, we should always throw these from\n      // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n      // can get back on the \"throw all redirect responses\" train here should\n      // this ever happen :/\n      throw new Response(null, {\n        status: result.response.status,\n        headers: {\n          Location: result.response.headers.get(\"Location\")\n        }\n      });\n    }\n    if (isDeferredResult(result)) {\n      let error = getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error\n      };\n    }\n    if (isRouteRequest) {\n      // Note: This should only be non-Response values if we get here, since\n      // isRouteRequest should throw any Response received in callLoaderOrAction\n      if (isErrorResult(result)) {\n        throw result.error;\n      }\n      return {\n        matches: [actionMatch],\n        loaderData: {},\n        actionData: {\n          [actionMatch.route.id]: result.data\n        },\n        errors: null,\n        // Note: statusCode + headers are unused here since queryRoute will\n        // return the raw Response or value\n        statusCode: 200,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    // Create a GET request for the loaders\n    let loaderRequest = new Request(request.url, {\n      headers: request.headers,\n      redirect: request.redirect,\n      signal: request.signal\n    });\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n      let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null, [boundaryMatch.route.id, result]);\n      // action status codes take precedence over loader status codes\n      return _extends({}, context, {\n        statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n        actionData: null,\n        actionHeaders: _extends({}, result.headers ? {\n          [actionMatch.route.id]: result.headers\n        } : {})\n      });\n    }\n    let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null);\n    return _extends({}, context, {\n      actionData: {\n        [actionMatch.route.id]: result.data\n      }\n    }, result.statusCode ? {\n      statusCode: result.statusCode\n    } : {}, {\n      actionHeaders: result.headers ? {\n        [actionMatch.route.id]: result.headers\n      } : {}\n    });\n  }\n  async function loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, pendingActionResult) {\n    let isRouteRequest = routeMatch != null;\n    // Short circuit if we have no loaders to run (queryRoute())\n    if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) {\n      throw getInternalRouterError(400, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: routeMatch == null ? void 0 : routeMatch.route.id\n      });\n    }\n    let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches;\n    let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy);\n    // Short circuit if we have no loaders to run (query())\n    if (matchesToLoad.length === 0) {\n      return {\n        matches,\n        // Add a null for all matched routes for proper revalidation on the client\n        loaderData: matches.reduce((acc, m) => Object.assign(acc, {\n          [m.route.id]: null\n        }), {}),\n        errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n          [pendingActionResult[0]]: pendingActionResult[1].error\n        } : null,\n        statusCode: 200,\n        loaderHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    let results = await callDataStrategy(\"loader\", request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy);\n    if (request.signal.aborted) {\n      throwStaticHandlerAbortedError(request, isRouteRequest, future);\n    }\n    // Process and commit output from loaders\n    let activeDeferreds = new Map();\n    let context = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling);\n    // Add a null for any non-loader matches for proper revalidation on the client\n    let executedLoaders = new Set(matchesToLoad.map(match => match.route.id));\n    matches.forEach(match => {\n      if (!executedLoaders.has(match.route.id)) {\n        context.loaderData[match.route.id] = null;\n      }\n    });\n    return _extends({}, context, {\n      matches,\n      activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null\n    });\n  }\n  // Utility wrapper for calling dataStrategy server-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy) {\n    let results = await callDataStrategyImpl(dataStrategy || defaultDataStrategy, type, null, request, matchesToLoad, matches, null, manifest, mapRouteProperties, requestContext);\n    let dataResults = {};\n    await Promise.all(matches.map(async match => {\n      if (!(match.route.id in results)) {\n        return;\n      }\n      let result = results[match.route.id];\n      if (isRedirectDataStrategyResultResult(result)) {\n        let response = result.result;\n        // Throw redirects and let the server handle them with an HTTP redirect\n        throw normalizeRelativeRoutingRedirectResponse(response, request, match.route.id, matches, basename, future.v7_relativeSplatPath);\n      }\n      if (isResponse(result.result) && isRouteRequest) {\n        // For SSR single-route requests, we want to hand Responses back\n        // directly without unwrapping\n        throw result;\n      }\n      dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);\n    }));\n    return dataResults;\n  }\n  return {\n    dataRoutes,\n    query,\n    queryRoute\n  };\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nfunction getStaticContextFromError(routes, context, error) {\n  let newContext = _extends({}, context, {\n    statusCode: isRouteErrorResponse(error) ? error.status : 500,\n    errors: {\n      [context._deepestRenderedBoundaryId || routes[0].id]: error\n    }\n  });\n  return newContext;\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest, future) {\n  if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n    throw request.signal.reason;\n  }\n  let method = isRouteRequest ? \"queryRoute\" : \"query\";\n  throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\n}\nfunction isSubmissionNavigation(opts) {\n  return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== undefined);\n}\nfunction normalizeTo(location, matches, basename, prependBasename, to, v7_relativeSplatPath, fromRouteId, relative) {\n  let contextualMatches;\n  let activeRouteMatch;\n  if (fromRouteId) {\n    // Grab matches up to the calling route so our route-relative logic is\n    // relative to the correct source route\n    contextualMatches = [];\n    for (let match of matches) {\n      contextualMatches.push(match);\n      if (match.route.id === fromRouteId) {\n        activeRouteMatch = match;\n        break;\n      }\n    }\n  } else {\n    contextualMatches = matches;\n    activeRouteMatch = matches[matches.length - 1];\n  }\n  // Resolve the relative path\n  let path = resolveTo(to ? to : \".\", getResolveToMatches(contextualMatches, v7_relativeSplatPath), stripBasename(location.pathname, basename) || location.pathname, relative === \"path\");\n  // When `to` is not specified we inherit search/hash from the current\n  // location, unlike when to=\".\" and we just inherit the path.\n  // See https://github.com/remix-run/remix/issues/927\n  if (to == null) {\n    path.search = location.search;\n    path.hash = location.hash;\n  }\n  // Account for `?index` params when routing to the current location\n  if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n    let nakedIndex = hasNakedIndexQuery(path.search);\n    if (activeRouteMatch.route.index && !nakedIndex) {\n      // Add one when we're targeting an index route\n      path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n    } else if (!activeRouteMatch.route.index && nakedIndex) {\n      // Remove existing ones when we're not\n      let params = new URLSearchParams(path.search);\n      let indexValues = params.getAll(\"index\");\n      params.delete(\"index\");\n      indexValues.filter(v => v).forEach(v => params.append(\"index\", v));\n      let qs = params.toString();\n      path.search = qs ? \"?\" + qs : \"\";\n    }\n  }\n  // If we're operating within a basename, prepend it to the pathname.  If\n  // this is a root navigation, then just use the raw basename which allows\n  // the basename to have full control over the presence of a trailing slash\n  // on root actions\n  if (prependBasename && basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) {\n  // Return location verbatim on non-submission navigations\n  if (!opts || !isSubmissionNavigation(opts)) {\n    return {\n      path\n    };\n  }\n  if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n    return {\n      path,\n      error: getInternalRouterError(405, {\n        method: opts.formMethod\n      })\n    };\n  }\n  let getInvalidBodyError = () => ({\n    path,\n    error: getInternalRouterError(400, {\n      type: \"invalid-body\"\n    })\n  });\n  // Create a Submission on non-GET navigations\n  let rawFormMethod = opts.formMethod || \"get\";\n  let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase();\n  let formAction = stripHashFromPath(path);\n  if (opts.body !== undefined) {\n    if (opts.formEncType === \"text/plain\") {\n      // text only support POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n      let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ?\n      // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n      Array.from(opts.body.entries()).reduce((acc, _ref3) => {\n        let [name, value] = _ref3;\n        return \"\" + acc + name + \"=\" + value + \"\\n\";\n      }, \"\") : String(opts.body);\n      return {\n        path,\n        submission: {\n          formMethod,\n          formAction,\n          formEncType: opts.formEncType,\n          formData: undefined,\n          json: undefined,\n          text\n        }\n      };\n    } else if (opts.formEncType === \"application/json\") {\n      // json only supports POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n      try {\n        let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n        return {\n          path,\n          submission: {\n            formMethod,\n            formAction,\n            formEncType: opts.formEncType,\n            formData: undefined,\n            json,\n            text: undefined\n          }\n        };\n      } catch (e) {\n        return getInvalidBodyError();\n      }\n    }\n  }\n  invariant(typeof FormData === \"function\", \"FormData is not available in this environment\");\n  let searchParams;\n  let formData;\n  if (opts.formData) {\n    searchParams = convertFormDataToSearchParams(opts.formData);\n    formData = opts.formData;\n  } else if (opts.body instanceof FormData) {\n    searchParams = convertFormDataToSearchParams(opts.body);\n    formData = opts.body;\n  } else if (opts.body instanceof URLSearchParams) {\n    searchParams = opts.body;\n    formData = convertSearchParamsToFormData(searchParams);\n  } else if (opts.body == null) {\n    searchParams = new URLSearchParams();\n    formData = new FormData();\n  } else {\n    try {\n      searchParams = new URLSearchParams(opts.body);\n      formData = convertSearchParamsToFormData(searchParams);\n    } catch (e) {\n      return getInvalidBodyError();\n    }\n  }\n  let submission = {\n    formMethod,\n    formAction,\n    formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n    formData,\n    json: undefined,\n    text: undefined\n  };\n  if (isMutationMethod(submission.formMethod)) {\n    return {\n      path,\n      submission\n    };\n  }\n  // Flatten submission onto URLSearchParams for GET submissions\n  let parsedPath = parsePath(path);\n  // On GET navigation submissions we can drop the ?index param from the\n  // resulting location since all loaders will run.  But fetcher GET submissions\n  // only run a single loader so we need to preserve any incoming ?index params\n  if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n    searchParams.append(\"index\", \"\");\n  }\n  parsedPath.search = \"?\" + searchParams;\n  return {\n    path: createPath(parsedPath),\n    submission\n  };\n}\n// Filter out all routes at/below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(matches, boundaryId, includeBoundary) {\n  if (includeBoundary === void 0) {\n    includeBoundary = false;\n  }\n  let index = matches.findIndex(m => m.route.id === boundaryId);\n  if (index >= 0) {\n    return matches.slice(0, includeBoundary ? index + 1 : index);\n  }\n  return matches;\n}\nfunction getMatchesToLoad(history, state, matches, submission, location, initialHydration, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) {\n  let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : undefined;\n  let currentUrl = history.createURL(state.location);\n  let nextUrl = history.createURL(location);\n  // Pick navigation matches that are net-new or qualify for revalidation\n  let boundaryMatches = matches;\n  if (initialHydration && state.errors) {\n    // On initial hydration, only consider matches up to _and including_ the boundary.\n    // This is inclusive to handle cases where a server loader ran successfully,\n    // a child server loader bubbled up to this route, but this route has\n    // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n    // we have a complete version of `loaderData`\n    boundaryMatches = getLoaderMatchesUntilBoundary(matches, Object.keys(state.errors)[0], true);\n  } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n    // If an action threw an error, we call loaders up to, but not including the\n    // boundary\n    boundaryMatches = getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]);\n  }\n  // Don't revalidate loaders by default after action 4xx/5xx responses\n  // when the flag is enabled.  They can still opt-into revalidation via\n  // `shouldRevalidate` via `actionResult`\n  let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : undefined;\n  let shouldSkipRevalidation = skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n  let navigationMatches = boundaryMatches.filter((match, index) => {\n    let {\n      route\n    } = match;\n    if (route.lazy) {\n      // We haven't loaded this route yet so we don't know if it's got a loader!\n      return true;\n    }\n    if (route.loader == null) {\n      return false;\n    }\n    if (initialHydration) {\n      return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n    }\n    // Always call the loader on new route instances and pending defer cancellations\n    if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) {\n      return true;\n    }\n    // This is the default implementation for when we revalidate.  If the route\n    // provides it's own implementation, then we give them full control but\n    // provide this value so they can leverage it if needed after they check\n    // their own specific use cases\n    let currentRouteMatch = state.matches[index];\n    let nextRouteMatch = match;\n    return shouldRevalidateLoader(match, _extends({\n      currentUrl,\n      currentParams: currentRouteMatch.params,\n      nextUrl,\n      nextParams: nextRouteMatch.params\n    }, submission, {\n      actionResult,\n      actionStatus,\n      defaultShouldRevalidate: shouldSkipRevalidation ? false :\n      // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n      isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search ||\n      // Search params affect all loaders\n      currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n    }));\n  });\n  // Pick fetcher.loads that need to be revalidated\n  let revalidatingFetchers = [];\n  fetchLoadMatches.forEach((f, key) => {\n    // Don't revalidate:\n    //  - on initial hydration (shouldn't be any fetchers then anyway)\n    //  - if fetcher won't be present in the subsequent render\n    //    - no longer matches the URL (v7_fetcherPersist=false)\n    //    - was unmounted but persisted due to v7_fetcherPersist=true\n    if (initialHydration || !matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) {\n      return;\n    }\n    let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n    // If the fetcher path no longer matches, push it in with null matches so\n    // we can trigger a 404 in callLoadersAndMaybeResolveData.  Note this is\n    // currently only a use-case for Remix HMR where the route tree can change\n    // at runtime and remove a route previously loaded via a fetcher\n    if (!fetcherMatches) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: null,\n        match: null,\n        controller: null\n      });\n      return;\n    }\n    // Revalidating fetchers are decoupled from the route matches since they\n    // load from a static href.  They revalidate based on explicit revalidation\n    // (submission, useRevalidator, or X-Remix-Revalidate)\n    let fetcher = state.fetchers.get(key);\n    let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n    let shouldRevalidate = false;\n    if (fetchRedirectIds.has(key)) {\n      // Never trigger a revalidation of an actively redirecting fetcher\n      shouldRevalidate = false;\n    } else if (cancelledFetcherLoads.has(key)) {\n      // Always mark for revalidation if the fetcher was cancelled\n      cancelledFetcherLoads.delete(key);\n      shouldRevalidate = true;\n    } else if (fetcher && fetcher.state !== \"idle\" && fetcher.data === undefined) {\n      // If the fetcher hasn't ever completed loading yet, then this isn't a\n      // revalidation, it would just be a brand new load if an explicit\n      // revalidation is required\n      shouldRevalidate = isRevalidationRequired;\n    } else {\n      // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n      // to explicit revalidations only\n      shouldRevalidate = shouldRevalidateLoader(fetcherMatch, _extends({\n        currentUrl,\n        currentParams: state.matches[state.matches.length - 1].params,\n        nextUrl,\n        nextParams: matches[matches.length - 1].params\n      }, submission, {\n        actionResult,\n        actionStatus,\n        defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired\n      }));\n    }\n    if (shouldRevalidate) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: fetcherMatches,\n        match: fetcherMatch,\n        controller: new AbortController()\n      });\n    }\n  });\n  return [navigationMatches, revalidatingFetchers];\n}\nfunction shouldLoadRouteOnHydration(route, loaderData, errors) {\n  // We dunno if we have a loader - gotta find out!\n  if (route.lazy) {\n    return true;\n  }\n  // No loader, nothing to initialize\n  if (!route.loader) {\n    return false;\n  }\n  let hasData = loaderData != null && loaderData[route.id] !== undefined;\n  let hasError = errors != null && errors[route.id] !== undefined;\n  // Don't run if we error'd during SSR\n  if (!hasData && hasError) {\n    return false;\n  }\n  // Explicitly opting-in to running on hydration\n  if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n    return true;\n  }\n  // Otherwise, run if we're not yet initialized with anything\n  return !hasData && !hasError;\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n  let isNew =\n  // [a] -> [a, b]\n  !currentMatch ||\n  // [a, b] -> [a, c]\n  match.route.id !== currentMatch.route.id;\n  // Handle the case that we don't have data for a re-used route, potentially\n  // from a prior error or from a cancelled pending deferred\n  let isMissingData = currentLoaderData[match.route.id] === undefined;\n  // Always load if this is a net-new route or we don't yet have data\n  return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n  let currentPath = currentMatch.route.path;\n  return (\n    // param change for this match, /users/123 -> /users/456\n    currentMatch.pathname !== match.pathname ||\n    // splat param changed, which is not present in match.path\n    // e.g. /files/images/avatar.jpg -> files/finances.xls\n    currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n  );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n  if (loaderMatch.route.shouldRevalidate) {\n    let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n    if (typeof routeChoice === \"boolean\") {\n      return routeChoice;\n    }\n  }\n  return arg.defaultShouldRevalidate;\n}\nfunction patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties) {\n  var _childrenToPatch;\n  let childrenToPatch;\n  if (routeId) {\n    let route = manifest[routeId];\n    invariant(route, \"No route found to patch children into: routeId = \" + routeId);\n    if (!route.children) {\n      route.children = [];\n    }\n    childrenToPatch = route.children;\n  } else {\n    childrenToPatch = routesToUse;\n  }\n  // Don't patch in routes we already know about so that `patch` is idempotent\n  // to simplify user-land code. This is useful because we re-call the\n  // `patchRoutesOnNavigation` function for matched routes with params.\n  let uniqueChildren = children.filter(newRoute => !childrenToPatch.some(existingRoute => isSameRoute(newRoute, existingRoute)));\n  let newRoutes = convertRoutesToDataRoutes(uniqueChildren, mapRouteProperties, [routeId || \"_\", \"patch\", String(((_childrenToPatch = childrenToPatch) == null ? void 0 : _childrenToPatch.length) || \"0\")], manifest);\n  childrenToPatch.push(...newRoutes);\n}\nfunction isSameRoute(newRoute, existingRoute) {\n  // Most optimal check is by id\n  if (\"id\" in newRoute && \"id\" in existingRoute && newRoute.id === existingRoute.id) {\n    return true;\n  }\n  // Second is by pathing differences\n  if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) {\n    return false;\n  }\n  // Pathless layout routes are trickier since we need to check children.\n  // If they have no children then they're the same as far as we can tell\n  if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) {\n    return true;\n  }\n  // Otherwise, we look to see if every child in the new route is already\n  // represented in the existing route's children\n  return newRoute.children.every((aChild, i) => {\n    var _existingRoute$childr;\n    return (_existingRoute$childr = existingRoute.children) == null ? void 0 : _existingRoute$childr.some(bChild => isSameRoute(aChild, bChild));\n  });\n}\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(route, mapRouteProperties, manifest) {\n  if (!route.lazy) {\n    return;\n  }\n  let lazyRoute = await route.lazy();\n  // If the lazy route function was executed and removed by another parallel\n  // call then we can return - first lazy() to finish wins because the return\n  // value of lazy is expected to be static\n  if (!route.lazy) {\n    return;\n  }\n  let routeToUpdate = manifest[route.id];\n  invariant(routeToUpdate, \"No route found in manifest\");\n  // Update the route in place.  This should be safe because there's no way\n  // we could yet be sitting on this route as we can't get there without\n  // resolving lazy() first.\n  //\n  // This is different than the HMR \"update\" use-case where we may actively be\n  // on the route being updated.  The main concern boils down to \"does this\n  // mutation affect any ongoing navigations or any current state.matches\n  // values?\".  If not, it should be safe to update in place.\n  let routeUpdates = {};\n  for (let lazyRouteProperty in lazyRoute) {\n    let staticRouteValue = routeToUpdate[lazyRouteProperty];\n    let isPropertyStaticallyDefined = staticRouteValue !== undefined &&\n    // This property isn't static since it should always be updated based\n    // on the route updates\n    lazyRouteProperty !== \"hasErrorBoundary\";\n    warning(!isPropertyStaticallyDefined, \"Route \\\"\" + routeToUpdate.id + \"\\\" has a static property \\\"\" + lazyRouteProperty + \"\\\" \" + \"defined but its lazy function is also returning a value for this property. \" + (\"The lazy route property \\\"\" + lazyRouteProperty + \"\\\" will be ignored.\"));\n    if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {\n      routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\n    }\n  }\n  // Mutate the route with the provided updates.  Do this first so we pass\n  // the updated version to mapRouteProperties\n  Object.assign(routeToUpdate, routeUpdates);\n  // Mutate the `hasErrorBoundary` property on the route based on the route\n  // updates and remove the `lazy` function so we don't resolve the lazy\n  // route again.\n  Object.assign(routeToUpdate, _extends({}, mapRouteProperties(routeToUpdate), {\n    lazy: undefined\n  }));\n}\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy(_ref4) {\n  let {\n    matches\n  } = _ref4;\n  let matchesToLoad = matches.filter(m => m.shouldLoad);\n  let results = await Promise.all(matchesToLoad.map(m => m.resolve()));\n  return results.reduce((acc, result, i) => Object.assign(acc, {\n    [matchesToLoad[i].route.id]: result\n  }), {});\n}\nasync function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties, requestContext) {\n  let loadRouteDefinitionsPromises = matches.map(m => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties, manifest) : undefined);\n  let dsMatches = matches.map((match, i) => {\n    let loadRoutePromise = loadRouteDefinitionsPromises[i];\n    let shouldLoad = matchesToLoad.some(m => m.route.id === match.route.id);\n    // `resolve` encapsulates route.lazy(), executing the loader/action,\n    // and mapping return values/thrown errors to a `DataStrategyResult`.  Users\n    // can pass a callback to take fine-grained control over the execution\n    // of the loader/action\n    let resolve = async handlerOverride => {\n      if (handlerOverride && request.method === \"GET\" && (match.route.lazy || match.route.loader)) {\n        shouldLoad = true;\n      }\n      return shouldLoad ? callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, requestContext) : Promise.resolve({\n        type: ResultType.data,\n        result: undefined\n      });\n    };\n    return _extends({}, match, {\n      shouldLoad,\n      resolve\n    });\n  });\n  // Send all matches here to allow for a middleware-type implementation.\n  // handler will be a no-op for unneeded routes and we filter those results\n  // back out below.\n  let results = await dataStrategyImpl({\n    matches: dsMatches,\n    request,\n    params: matches[0].params,\n    fetcherKey,\n    context: requestContext\n  });\n  // Wait for all routes to load here but 'swallow the error since we want\n  // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n  // called from `match.resolve()`\n  try {\n    await Promise.all(loadRouteDefinitionsPromises);\n  } catch (e) {\n    // No-op\n  }\n  return results;\n}\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) {\n  let result;\n  let onReject;\n  let runHandler = handler => {\n    // Setup a promise we can race against so that abort signals short circuit\n    let reject;\n    // This will never resolve so safe to type it as Promise<DataStrategyResult> to\n    // satisfy the function return value\n    let abortPromise = new Promise((_, r) => reject = r);\n    onReject = () => reject();\n    request.signal.addEventListener(\"abort\", onReject);\n    let actualHandler = ctx => {\n      if (typeof handler !== \"function\") {\n        return Promise.reject(new Error(\"You cannot call the handler for a route which defines a boolean \" + (\"\\\"\" + type + \"\\\" [routeId: \" + match.route.id + \"]\")));\n      }\n      return handler({\n        request,\n        params: match.params,\n        context: staticContext\n      }, ...(ctx !== undefined ? [ctx] : []));\n    };\n    let handlerPromise = (async () => {\n      try {\n        let val = await (handlerOverride ? handlerOverride(ctx => actualHandler(ctx)) : actualHandler());\n        return {\n          type: \"data\",\n          result: val\n        };\n      } catch (e) {\n        return {\n          type: \"error\",\n          result: e\n        };\n      }\n    })();\n    return Promise.race([handlerPromise, abortPromise]);\n  };\n  try {\n    let handler = match.route[type];\n    // If we have a route.lazy promise, await that first\n    if (loadRoutePromise) {\n      if (handler) {\n        // Run statically defined handler in parallel with lazy()\n        let handlerError;\n        let [value] = await Promise.all([\n        // If the handler throws, don't let it immediately bubble out,\n        // since we need to let the lazy() execution finish so we know if this\n        // route has a boundary that can handle the error\n        runHandler(handler).catch(e => {\n          handlerError = e;\n        }), loadRoutePromise]);\n        if (handlerError !== undefined) {\n          throw handlerError;\n        }\n        result = value;\n      } else {\n        // Load lazy route module, then run any returned handler\n        await loadRoutePromise;\n        handler = match.route[type];\n        if (handler) {\n          // Handler still runs even if we got interrupted to maintain consistency\n          // with un-abortable behavior of handler execution on non-lazy or\n          // previously-lazy-loaded routes\n          result = await runHandler(handler);\n        } else if (type === \"action\") {\n          let url = new URL(request.url);\n          let pathname = url.pathname + url.search;\n          throw getInternalRouterError(405, {\n            method: request.method,\n            pathname,\n            routeId: match.route.id\n          });\n        } else {\n          // lazy() route has no loader to run.  Short circuit here so we don't\n          // hit the invariant below that errors on returning undefined.\n          return {\n            type: ResultType.data,\n            result: undefined\n          };\n        }\n      }\n    } else if (!handler) {\n      let url = new URL(request.url);\n      let pathname = url.pathname + url.search;\n      throw getInternalRouterError(404, {\n        pathname\n      });\n    } else {\n      result = await runHandler(handler);\n    }\n    invariant(result.result !== undefined, \"You defined \" + (type === \"action\" ? \"an action\" : \"a loader\") + \" for route \" + (\"\\\"\" + match.route.id + \"\\\" but didn't return anything from your `\" + type + \"` \") + \"function. Please return a value or `null`.\");\n  } catch (e) {\n    // We should already be catching and converting normal handler executions to\n    // DataStrategyResults and returning them, so anything that throws here is an\n    // unexpected error we still need to wrap\n    return {\n      type: ResultType.error,\n      result: e\n    };\n  } finally {\n    if (onReject) {\n      request.signal.removeEventListener(\"abort\", onReject);\n    }\n  }\n  return result;\n}\nasync function convertDataStrategyResultToDataResult(dataStrategyResult) {\n  let {\n    result,\n    type\n  } = dataStrategyResult;\n  if (isResponse(result)) {\n    let data;\n    try {\n      let contentType = result.headers.get(\"Content-Type\");\n      // Check between word boundaries instead of startsWith() due to the last\n      // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n      if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n        if (result.body == null) {\n          data = null;\n        } else {\n          data = await result.json();\n        }\n      } else {\n        data = await result.text();\n      }\n    } catch (e) {\n      return {\n        type: ResultType.error,\n        error: e\n      };\n    }\n    if (type === ResultType.error) {\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(result.status, result.statusText, data),\n        statusCode: result.status,\n        headers: result.headers\n      };\n    }\n    return {\n      type: ResultType.data,\n      data,\n      statusCode: result.status,\n      headers: result.headers\n    };\n  }\n  if (type === ResultType.error) {\n    if (isDataWithResponseInit(result)) {\n      var _result$init3, _result$init4;\n      if (result.data instanceof Error) {\n        var _result$init, _result$init2;\n        return {\n          type: ResultType.error,\n          error: result.data,\n          statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status,\n          headers: (_result$init2 = result.init) != null && _result$init2.headers ? new Headers(result.init.headers) : undefined\n        };\n      }\n      // Convert thrown data() to ErrorResponse instances\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(((_result$init3 = result.init) == null ? void 0 : _result$init3.status) || 500, undefined, result.data),\n        statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n        headers: (_result$init4 = result.init) != null && _result$init4.headers ? new Headers(result.init.headers) : undefined\n      };\n    }\n    return {\n      type: ResultType.error,\n      error: result,\n      statusCode: isRouteErrorResponse(result) ? result.status : undefined\n    };\n  }\n  if (isDeferredData(result)) {\n    var _result$init5, _result$init6;\n    return {\n      type: ResultType.deferred,\n      deferredData: result,\n      statusCode: (_result$init5 = result.init) == null ? void 0 : _result$init5.status,\n      headers: ((_result$init6 = result.init) == null ? void 0 : _result$init6.headers) && new Headers(result.init.headers)\n    };\n  }\n  if (isDataWithResponseInit(result)) {\n    var _result$init7, _result$init8;\n    return {\n      type: ResultType.data,\n      data: result.data,\n      statusCode: (_result$init7 = result.init) == null ? void 0 : _result$init7.status,\n      headers: (_result$init8 = result.init) != null && _result$init8.headers ? new Headers(result.init.headers) : undefined\n    };\n  }\n  return {\n    type: ResultType.data,\n    data: result\n  };\n}\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, v7_relativeSplatPath) {\n  let location = response.headers.get(\"Location\");\n  invariant(location, \"Redirects returned/thrown from loaders/actions must have a Location header\");\n  if (!ABSOLUTE_URL_REGEX.test(location)) {\n    let trimmedMatches = matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1);\n    location = normalizeTo(new URL(request.url), trimmedMatches, basename, true, location, v7_relativeSplatPath);\n    response.headers.set(\"Location\", location);\n  }\n  return response;\n}\nfunction normalizeRedirectLocation(location, currentUrl, basename, historyInstance) {\n  // Match Chrome's behavior:\n  // https://github.com/chromium/chromium/blob/216dbeb61db0c667e62082e5f5400a32d6983df3/content/public/common/url_utils.cc#L82\n  let invalidProtocols = [\"about:\", \"blob:\", \"chrome:\", \"chrome-untrusted:\", \"content:\", \"data:\", \"devtools:\", \"file:\", \"filesystem:\",\n  // eslint-disable-next-line no-script-url\n  \"javascript:\"];\n  if (ABSOLUTE_URL_REGEX.test(location)) {\n    // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n    let normalizedLocation = location;\n    let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n    if (invalidProtocols.includes(url.protocol)) {\n      throw new Error(\"Invalid redirect location\");\n    }\n    let isSameBasename = stripBasename(url.pathname, basename) != null;\n    if (url.origin === currentUrl.origin && isSameBasename) {\n      return url.pathname + url.search + url.hash;\n    }\n  }\n  try {\n    let url = historyInstance.createURL(location);\n    if (invalidProtocols.includes(url.protocol)) {\n      throw new Error(\"Invalid redirect location\");\n    }\n  } catch (e) {}\n  return location;\n}\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches.  During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(history, location, signal, submission) {\n  let url = history.createURL(stripHashFromPath(location)).toString();\n  let init = {\n    signal\n  };\n  if (submission && isMutationMethod(submission.formMethod)) {\n    let {\n      formMethod,\n      formEncType\n    } = submission;\n    // Didn't think we needed this but it turns out unlike other methods, patch\n    // won't be properly normalized to uppercase and results in a 405 error.\n    // See: https://fetch.spec.whatwg.org/#concept-method\n    init.method = formMethod.toUpperCase();\n    if (formEncType === \"application/json\") {\n      init.headers = new Headers({\n        \"Content-Type\": formEncType\n      });\n      init.body = JSON.stringify(submission.json);\n    } else if (formEncType === \"text/plain\") {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.text;\n    } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = convertFormDataToSearchParams(submission.formData);\n    } else {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.formData;\n    }\n  }\n  return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n  let searchParams = new URLSearchParams();\n  for (let [key, value] of formData.entries()) {\n    // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n    searchParams.append(key, typeof value === \"string\" ? value : value.name);\n  }\n  return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n  let formData = new FormData();\n  for (let [key, value] of searchParams.entries()) {\n    formData.append(key, value);\n  }\n  return formData;\n}\nfunction processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) {\n  // Fill in loaderData/errors from our loaders\n  let loaderData = {};\n  let errors = null;\n  let statusCode;\n  let foundError = false;\n  let loaderHeaders = {};\n  let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : undefined;\n  // Process loader results into state.loaderData/state.errors\n  matches.forEach(match => {\n    if (!(match.route.id in results)) {\n      return;\n    }\n    let id = match.route.id;\n    let result = results[id];\n    invariant(!isRedirectResult(result), \"Cannot handle redirect results in processLoaderData\");\n    if (isErrorResult(result)) {\n      let error = result.error;\n      // If we have a pending action error, we report it at the highest-route\n      // that throws a loader error, and then clear it out to indicate that\n      // it was consumed\n      if (pendingError !== undefined) {\n        error = pendingError;\n        pendingError = undefined;\n      }\n      errors = errors || {};\n      if (skipLoaderErrorBubbling) {\n        errors[id] = error;\n      } else {\n        // Look upwards from the matched route for the closest ancestor error\n        // boundary, defaulting to the root match.  Prefer higher error values\n        // if lower errors bubble to the same boundary\n        let boundaryMatch = findNearestBoundary(matches, id);\n        if (errors[boundaryMatch.route.id] == null) {\n          errors[boundaryMatch.route.id] = error;\n        }\n      }\n      // Clear our any prior loaderData for the throwing route\n      loaderData[id] = undefined;\n      // Once we find our first (highest) error, we set the status code and\n      // prevent deeper status codes from overriding\n      if (!foundError) {\n        foundError = true;\n        statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n      }\n      if (result.headers) {\n        loaderHeaders[id] = result.headers;\n      }\n    } else {\n      if (isDeferredResult(result)) {\n        activeDeferreds.set(id, result.deferredData);\n        loaderData[id] = result.deferredData.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode != null && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      } else {\n        loaderData[id] = result.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      }\n    }\n  });\n  // If we didn't consume the pending action error (i.e., all loaders\n  // resolved), then consume it here.  Also clear out any loaderData for the\n  // throwing route\n  if (pendingError !== undefined && pendingActionResult) {\n    errors = {\n      [pendingActionResult[0]]: pendingError\n    };\n    loaderData[pendingActionResult[0]] = undefined;\n  }\n  return {\n    loaderData,\n    errors,\n    statusCode: statusCode || 200,\n    loaderHeaders\n  };\n}\nfunction processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) {\n  let {\n    loaderData,\n    errors\n  } = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble\n  );\n  // Process results from our revalidating fetchers\n  revalidatingFetchers.forEach(rf => {\n    let {\n      key,\n      match,\n      controller\n    } = rf;\n    let result = fetcherResults[key];\n    invariant(result, \"Did not find corresponding fetcher result\");\n    // Process fetcher non-redirect errors\n    if (controller && controller.signal.aborted) {\n      // Nothing to do for aborted fetchers\n      return;\n    } else if (isErrorResult(result)) {\n      let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id);\n      if (!(errors && errors[boundaryMatch.route.id])) {\n        errors = _extends({}, errors, {\n          [boundaryMatch.route.id]: result.error\n        });\n      }\n      state.fetchers.delete(key);\n    } else if (isRedirectResult(result)) {\n      // Should never get here, redirects should get processed above, but we\n      // keep this to type narrow to a success result in the else\n      invariant(false, \"Unhandled fetcher revalidation redirect\");\n    } else if (isDeferredResult(result)) {\n      // Should never get here, deferred data should be awaited for fetchers\n      // in resolveDeferredResults\n      invariant(false, \"Unhandled fetcher deferred data\");\n    } else {\n      let doneFetcher = getDoneFetcher(result.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  });\n  return {\n    loaderData,\n    errors\n  };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n  let mergedLoaderData = _extends({}, newLoaderData);\n  for (let match of matches) {\n    let id = match.route.id;\n    if (newLoaderData.hasOwnProperty(id)) {\n      if (newLoaderData[id] !== undefined) {\n        mergedLoaderData[id] = newLoaderData[id];\n      }\n    } else if (loaderData[id] !== undefined && match.route.loader) {\n      // Preserve existing keys not included in newLoaderData and where a loader\n      // wasn't removed by HMR\n      mergedLoaderData[id] = loaderData[id];\n    }\n    if (errors && errors.hasOwnProperty(id)) {\n      // Don't keep any loader data below the boundary\n      break;\n    }\n  }\n  return mergedLoaderData;\n}\nfunction getActionDataForCommit(pendingActionResult) {\n  if (!pendingActionResult) {\n    return {};\n  }\n  return isErrorResult(pendingActionResult[1]) ? {\n    // Clear out prior actionData on errors\n    actionData: {}\n  } : {\n    actionData: {\n      [pendingActionResult[0]]: pendingActionResult[1].data\n    }\n  };\n}\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(matches, routeId) {\n  let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];\n  return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n  // Prefer a root layout route if present, otherwise shim in a route object\n  let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === \"/\") || {\n    id: \"__shim-error-route__\"\n  };\n  return {\n    matches: [{\n      params: {},\n      pathname: \"\",\n      pathnameBase: \"\",\n      route\n    }],\n    route\n  };\n}\nfunction getInternalRouterError(status, _temp5) {\n  let {\n    pathname,\n    routeId,\n    method,\n    type,\n    message\n  } = _temp5 === void 0 ? {} : _temp5;\n  let statusText = \"Unknown Server Error\";\n  let errorMessage = \"Unknown @remix-run/router error\";\n  if (status === 400) {\n    statusText = \"Bad Request\";\n    if (method && pathname && routeId) {\n      errorMessage = \"You made a \" + method + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide a `loader` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n    } else if (type === \"defer-action\") {\n      errorMessage = \"defer() is not supported in actions\";\n    } else if (type === \"invalid-body\") {\n      errorMessage = \"Unable to encode submission body\";\n    }\n  } else if (status === 403) {\n    statusText = \"Forbidden\";\n    errorMessage = \"Route \\\"\" + routeId + \"\\\" does not match URL \\\"\" + pathname + \"\\\"\";\n  } else if (status === 404) {\n    statusText = \"Not Found\";\n    errorMessage = \"No route matches URL \\\"\" + pathname + \"\\\"\";\n  } else if (status === 405) {\n    statusText = \"Method Not Allowed\";\n    if (method && pathname && routeId) {\n      errorMessage = \"You made a \" + method.toUpperCase() + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide an `action` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n    } else if (method) {\n      errorMessage = \"Invalid request method \\\"\" + method.toUpperCase() + \"\\\"\";\n    }\n  }\n  return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true);\n}\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results) {\n  let entries = Object.entries(results);\n  for (let i = entries.length - 1; i >= 0; i--) {\n    let [key, result] = entries[i];\n    if (isRedirectResult(result)) {\n      return {\n        key,\n        result\n      };\n    }\n  }\n}\nfunction stripHashFromPath(path) {\n  let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n  return createPath(_extends({}, parsedPath, {\n    hash: \"\"\n  }));\n}\nfunction isHashChangeOnly(a, b) {\n  if (a.pathname !== b.pathname || a.search !== b.search) {\n    return false;\n  }\n  if (a.hash === \"\") {\n    // /page -> /page#hash\n    return b.hash !== \"\";\n  } else if (a.hash === b.hash) {\n    // /page#hash -> /page#hash\n    return true;\n  } else if (b.hash !== \"\") {\n    // /page#hash -> /page#other\n    return true;\n  }\n  // If the hash is removed the browser will re-perform a request to the server\n  // /page#hash -> /page\n  return false;\n}\nfunction isDataStrategyResult(result) {\n  return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === ResultType.data || result.type === ResultType.error);\n}\nfunction isRedirectDataStrategyResultResult(result) {\n  return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isDeferredResult(result) {\n  return result.type === ResultType.deferred;\n}\nfunction isErrorResult(result) {\n  return result.type === ResultType.error;\n}\nfunction isRedirectResult(result) {\n  return (result && result.type) === ResultType.redirect;\n}\nfunction isDataWithResponseInit(value) {\n  return typeof value === \"object\" && value != null && \"type\" in value && \"data\" in value && \"init\" in value && value.type === \"DataWithResponseInit\";\n}\nfunction isDeferredData(value) {\n  let deferred = value;\n  return deferred && typeof deferred === \"object\" && typeof deferred.data === \"object\" && typeof deferred.subscribe === \"function\" && typeof deferred.cancel === \"function\" && typeof deferred.resolveData === \"function\";\n}\nfunction isResponse(value) {\n  return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectResponse(result) {\n  if (!isResponse(result)) {\n    return false;\n  }\n  let status = result.status;\n  let location = result.headers.get(\"Location\");\n  return status >= 300 && status <= 399 && location != null;\n}\nfunction isValidMethod(method) {\n  return validRequestMethods.has(method.toLowerCase());\n}\nfunction isMutationMethod(method) {\n  return validMutationMethods.has(method.toLowerCase());\n}\nasync function resolveNavigationDeferredResults(matches, results, signal, currentMatches, currentLoaderData) {\n  let entries = Object.entries(results);\n  for (let index = 0; index < entries.length; index++) {\n    let [routeId, result] = entries[index];\n    let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n    let currentMatch = currentMatches.find(m => m.route.id === match.route.id);\n    let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n    if (isDeferredResult(result) && isRevalidatingLoader) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      await resolveDeferredData(result, signal, false).then(result => {\n        if (result) {\n          results[routeId] = result;\n        }\n      });\n    }\n  }\n}\nasync function resolveFetcherDeferredResults(matches, results, revalidatingFetchers) {\n  for (let index = 0; index < revalidatingFetchers.length; index++) {\n    let {\n      key,\n      routeId,\n      controller\n    } = revalidatingFetchers[index];\n    let result = results[key];\n    let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n    if (isDeferredResult(result)) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      invariant(controller, \"Expected an AbortController for revalidating fetcher deferred result\");\n      await resolveDeferredData(result, controller.signal, true).then(result => {\n        if (result) {\n          results[key] = result;\n        }\n      });\n    }\n  }\n}\nasync function resolveDeferredData(result, signal, unwrap) {\n  if (unwrap === void 0) {\n    unwrap = false;\n  }\n  let aborted = await result.deferredData.resolveData(signal);\n  if (aborted) {\n    return;\n  }\n  if (unwrap) {\n    try {\n      return {\n        type: ResultType.data,\n        data: result.deferredData.unwrappedData\n      };\n    } catch (e) {\n      // Handle any TrackedPromise._error values encountered while unwrapping\n      return {\n        type: ResultType.error,\n        error: e\n      };\n    }\n  }\n  return {\n    type: ResultType.data,\n    data: result.deferredData.data\n  };\n}\nfunction hasNakedIndexQuery(search) {\n  return new URLSearchParams(search).getAll(\"index\").some(v => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n  let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n  if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n    // Return the leaf index route when index is present\n    return matches[matches.length - 1];\n  }\n  // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n  // pathless layout routes)\n  let pathMatches = getPathContributingMatches(matches);\n  return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n  let {\n    formMethod,\n    formAction,\n    formEncType,\n    text,\n    formData,\n    json\n  } = navigation;\n  if (!formMethod || !formAction || !formEncType) {\n    return;\n  }\n  if (text != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json: undefined,\n      text\n    };\n  } else if (formData != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData,\n      json: undefined,\n      text: undefined\n    };\n  } else if (json !== undefined) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json,\n      text: undefined\n    };\n  }\n}\nfunction getLoadingNavigation(location, submission) {\n  if (submission) {\n    let navigation = {\n      state: \"loading\",\n      location,\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text\n    };\n    return navigation;\n  } else {\n    let navigation = {\n      state: \"loading\",\n      location,\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined\n    };\n    return navigation;\n  }\n}\nfunction getSubmittingNavigation(location, submission) {\n  let navigation = {\n    state: \"submitting\",\n    location,\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text\n  };\n  return navigation;\n}\nfunction getLoadingFetcher(submission, data) {\n  if (submission) {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n      data\n    };\n    return fetcher;\n  } else {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n      data\n    };\n    return fetcher;\n  }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n  let fetcher = {\n    state: \"submitting\",\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n    data: existingFetcher ? existingFetcher.data : undefined\n  };\n  return fetcher;\n}\nfunction getDoneFetcher(data) {\n  let fetcher = {\n    state: \"idle\",\n    formMethod: undefined,\n    formAction: undefined,\n    formEncType: undefined,\n    formData: undefined,\n    json: undefined,\n    text: undefined,\n    data\n  };\n  return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n  try {\n    let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);\n    if (sessionPositions) {\n      let json = JSON.parse(sessionPositions);\n      for (let [k, v] of Object.entries(json || {})) {\n        if (v && Array.isArray(v)) {\n          transitions.set(k, new Set(v || []));\n        }\n      }\n    }\n  } catch (e) {\n    // no-op, use default empty object\n  }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n  if (transitions.size > 0) {\n    let json = {};\n    for (let [k, v] of transitions) {\n      json[k] = [...v];\n    }\n    try {\n      _window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json));\n    } catch (error) {\n      warning(false, \"Failed to save applied view transitions in sessionStorage (\" + error + \").\");\n    }\n  }\n}\n//#endregion\n\nexport { AbortedDeferredError, Action, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, UNSAFE_DEFERRED_SYMBOL, DeferredData as UNSAFE_DeferredData, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, convertRouteMatchToUiMatch as UNSAFE_convertRouteMatchToUiMatch, convertRoutesToDataRoutes as UNSAFE_convertRoutesToDataRoutes, decodePath as UNSAFE_decodePath, getResolveToMatches as UNSAFE_getResolveToMatches, invariant as UNSAFE_invariant, warning as UNSAFE_warning, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, createRouter, createStaticHandler, data, defer, generatePath, getStaticContextFromError, getToPathname, isDataWithResponseInit, isDeferredData, isRouteErrorResponse, joinPaths, json, matchPath, matchRoutes, normalizePathname, parsePath, redirect, redirectDocument, replace, resolvePath, resolveTo, stripBasename };\n//# sourceMappingURL=router.js.map\n","/**\n * React Router v6.30.3\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { UNSAFE_invariant, joinPaths, matchPath, UNSAFE_decodePath, UNSAFE_getResolveToMatches, UNSAFE_warning, resolveTo, parsePath, matchRoutes, Action, UNSAFE_convertRouteMatchToUiMatch, stripBasename, IDLE_BLOCKER, isRouteErrorResponse, createMemoryHistory, AbortedDeferredError, createRouter } from '@remix-run/router';\nexport { AbortedDeferredError, Action as NavigationType, createPath, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, replace, resolvePath } from '@remix-run/router';\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nconst DataRouterContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  DataRouterContext.displayName = \"DataRouter\";\n}\nconst DataRouterStateContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  DataRouterStateContext.displayName = \"DataRouterState\";\n}\nconst AwaitContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  AwaitContext.displayName = \"Await\";\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\n\nconst NavigationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  NavigationContext.displayName = \"Navigation\";\n}\nconst LocationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  LocationContext.displayName = \"Location\";\n}\nconst RouteContext = /*#__PURE__*/React.createContext({\n  outlet: null,\n  matches: [],\n  isDataRoute: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n  RouteContext.displayName = \"Route\";\n}\nconst RouteErrorContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  RouteErrorContext.displayName = \"RouteError\";\n}\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/v6/hooks/use-href\n */\nfunction useHref(to, _temp) {\n  let {\n    relative\n  } = _temp === void 0 ? {} : _temp;\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useHref() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    basename,\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    hash,\n    pathname,\n    search\n  } = useResolvedPath(to, {\n    relative\n  });\n  let joinedPathname = pathname;\n\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the href.  If this is a root navigation, then just use the raw\n  // basename which allows the basename to have full control over the presence\n  // of a trailing slash on root links\n  if (basename !== \"/\") {\n    joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n  }\n  return navigator.createHref({\n    pathname: joinedPathname,\n    search,\n    hash\n  });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-in-router-context\n */\nfunction useInRouterContext() {\n  return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/v6/hooks/use-location\n */\nfunction useLocation() {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useLocation() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigation-type\n */\nfunction useNavigationType() {\n  return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-match\n */\nfunction useMatch(pattern) {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useMatch() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    pathname\n  } = useLocation();\n  return React.useMemo(() => matchPath(pattern, UNSAFE_decodePath(pathname)), [pathname, pattern]);\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\n\nconst navigateEffectWarning = \"You should call navigate() in a React.useEffect(), not when \" + \"your component is first rendered.\";\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(cb) {\n  let isStatic = React.useContext(NavigationContext).static;\n  if (!isStatic) {\n    // We should be able to get rid of this once react 18.3 is released\n    // See: https://github.com/facebook/react/pull/26395\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(cb);\n  }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigate\n */\nfunction useNavigate() {\n  let {\n    isDataRoute\n  } = React.useContext(RouteContext);\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useNavigate() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let dataRouterContext = React.useContext(DataRouterContext);\n  let {\n    basename,\n    future,\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React.useCallback(function (to, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n    // Short circuit here since if this happens on first render the navigate\n    // is useless because we haven't wired up our history listener yet\n    if (!activeRef.current) return;\n    if (typeof to === \"number\") {\n      navigator.go(to);\n      return;\n    }\n    let path = resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === \"path\");\n\n    // If we're operating within a basename, prepend it to the pathname prior\n    // to handing off to history (but only if we're not in a data router,\n    // otherwise it'll prepend the basename inside of the router).\n    // If this is a root navigation, then we navigate to the raw basename\n    // which allows the basename to have full control over the presence of a\n    // trailing slash on root links\n    if (dataRouterContext == null && basename !== \"/\") {\n      path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n    }\n    (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);\n  }, [basename, navigator, routePathnamesJson, locationPathname, dataRouterContext]);\n  return navigate;\n}\nconst OutletContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/v6/hooks/use-outlet-context\n */\nfunction useOutletContext() {\n  return React.useContext(OutletContext);\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/v6/hooks/use-outlet\n */\nfunction useOutlet(context) {\n  let outlet = React.useContext(RouteContext).outlet;\n  if (outlet) {\n    return /*#__PURE__*/React.createElement(OutletContext.Provider, {\n      value: context\n    }, outlet);\n  }\n  return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/v6/hooks/use-params\n */\nfunction useParams() {\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let routeMatch = matches[matches.length - 1];\n  return routeMatch ? routeMatch.params : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/v6/hooks/use-resolved-path\n */\nfunction useResolvedPath(to, _temp2) {\n  let {\n    relative\n  } = _temp2 === void 0 ? {} : _temp2;\n  let {\n    future\n  } = React.useContext(NavigationContext);\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n  return React.useMemo(() => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, relative === \"path\"), [to, routePathnamesJson, locationPathname, relative]);\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/v6/hooks/use-routes\n */\nfunction useRoutes(routes, locationArg) {\n  return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nfunction useRoutesImpl(routes, locationArg, dataRouterState, future) {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useRoutes() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    matches: parentMatches\n  } = React.useContext(RouteContext);\n  let routeMatch = parentMatches[parentMatches.length - 1];\n  let parentParams = routeMatch ? routeMatch.params : {};\n  let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n  let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n  let parentRoute = routeMatch && routeMatch.route;\n  if (process.env.NODE_ENV !== \"production\") {\n    // You won't get a warning about 2 different <Routes> under a <Route>\n    // without a trailing *, but this is a best-effort warning anyway since we\n    // cannot even give the warning unless they land at the parent route.\n    //\n    // Example:\n    //\n    // <Routes>\n    //   {/* This route path MUST end with /* because otherwise\n    //       it will never match /blog/post/123 */}\n    //   <Route path=\"blog\" element={<Blog />} />\n    //   <Route path=\"blog/feed\" element={<BlogFeed />} />\n    // </Routes>\n    //\n    // function Blog() {\n    //   return (\n    //     <Routes>\n    //       <Route path=\"post/:id\" element={<Post />} />\n    //     </Routes>\n    //   );\n    // }\n    let parentPath = parentRoute && parentRoute.path || \"\";\n    warningOnce(parentPathname, !parentRoute || parentPath.endsWith(\"*\"), \"You rendered descendant <Routes> (or called `useRoutes()`) at \" + (\"\\\"\" + parentPathname + \"\\\" (under <Route path=\\\"\" + parentPath + \"\\\">) but the \") + \"parent route path has no trailing \\\"*\\\". This means if you navigate \" + \"deeper, the parent won't match anymore and therefore the child \" + \"routes will never render.\\n\\n\" + (\"Please change the parent <Route path=\\\"\" + parentPath + \"\\\"> to <Route \") + (\"path=\\\"\" + (parentPath === \"/\" ? \"*\" : parentPath + \"/*\") + \"\\\">.\"));\n  }\n  let locationFromContext = useLocation();\n  let location;\n  if (locationArg) {\n    var _parsedLocationArg$pa;\n    let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n    !(parentPathnameBase === \"/\" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, \" + \"the location pathname must begin with the portion of the URL pathname that was \" + (\"matched by all parent routes. The current pathname base is \\\"\" + parentPathnameBase + \"\\\" \") + (\"but pathname \\\"\" + parsedLocationArg.pathname + \"\\\" was given in the `location` prop.\")) : UNSAFE_invariant(false) : void 0;\n    location = parsedLocationArg;\n  } else {\n    location = locationFromContext;\n  }\n  let pathname = location.pathname || \"/\";\n  let remainingPathname = pathname;\n  if (parentPathnameBase !== \"/\") {\n    // Determine the remaining pathname by removing the # of URL segments the\n    // parentPathnameBase has, instead of removing based on character count.\n    // This is because we can't guarantee that incoming/outgoing encodings/\n    // decodings will match exactly.\n    // We decode paths before matching on a per-segment basis with\n    // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n    // match what `window.location.pathname` would reflect.  Those don't 100%\n    // align when it comes to encoded URI characters such as % and &.\n    //\n    // So we may end up with:\n    //   pathname:           \"/descendant/a%25b/match\"\n    //   parentPathnameBase: \"/descendant/a%b\"\n    //\n    // And the direct substring removal approach won't work :/\n    let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n    let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n    remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n  }\n  let matches = matchRoutes(routes, {\n    pathname: remainingPathname\n  });\n  if (process.env.NODE_ENV !== \"production\") {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(parentRoute || matches != null, \"No routes matched location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \") : void 0;\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(matches == null || matches[matches.length - 1].route.element !== undefined || matches[matches.length - 1].route.Component !== undefined || matches[matches.length - 1].route.lazy !== undefined, \"Matched leaf route at location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \" + \"does not have an element or Component. This means it will render an <Outlet /> with a \" + \"null value by default resulting in an \\\"empty\\\" page.\") : void 0;\n  }\n  let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {\n    params: Object.assign({}, parentParams, match.params),\n    pathname: joinPaths([parentPathnameBase,\n    // Re-encode pathnames that were decoded inside matchRoutes\n    navigator.encodeLocation ? navigator.encodeLocation(match.pathname).pathname : match.pathname]),\n    pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([parentPathnameBase,\n    // Re-encode pathnames that were decoded inside matchRoutes\n    navigator.encodeLocation ? navigator.encodeLocation(match.pathnameBase).pathname : match.pathnameBase])\n  })), parentMatches, dataRouterState, future);\n\n  // When a user passes in a `locationArg`, the associated routes need to\n  // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n  // to use the scoped location instead of the global location.\n  if (locationArg && renderedMatches) {\n    return /*#__PURE__*/React.createElement(LocationContext.Provider, {\n      value: {\n        location: _extends({\n          pathname: \"/\",\n          search: \"\",\n          hash: \"\",\n          state: null,\n          key: \"default\"\n        }, location),\n        navigationType: Action.Pop\n      }\n    }, renderedMatches);\n  }\n  return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n  let error = useRouteError();\n  let message = isRouteErrorResponse(error) ? error.status + \" \" + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);\n  let stack = error instanceof Error ? error.stack : null;\n  let lightgrey = \"rgba(200,200,200, 0.5)\";\n  let preStyles = {\n    padding: \"0.5rem\",\n    backgroundColor: lightgrey\n  };\n  let codeStyles = {\n    padding: \"2px 4px\",\n    backgroundColor: lightgrey\n  };\n  let devInfo = null;\n  if (process.env.NODE_ENV !== \"production\") {\n    console.error(\"Error handled by React Router default ErrorBoundary:\", error);\n    devInfo = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"p\", null, \"\\uD83D\\uDCBF Hey developer \\uD83D\\uDC4B\"), /*#__PURE__*/React.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /*#__PURE__*/React.createElement(\"code\", {\n      style: codeStyles\n    }, \"ErrorBoundary\"), \" or\", \" \", /*#__PURE__*/React.createElement(\"code\", {\n      style: codeStyles\n    }, \"errorElement\"), \" prop on your route.\"));\n  }\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"h2\", null, \"Unexpected Application Error!\"), /*#__PURE__*/React.createElement(\"h3\", {\n    style: {\n      fontStyle: \"italic\"\n    }\n  }, message), stack ? /*#__PURE__*/React.createElement(\"pre\", {\n    style: preStyles\n  }, stack) : null, devInfo);\n}\nconst defaultErrorElement = /*#__PURE__*/React.createElement(DefaultErrorComponent, null);\nclass RenderErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      location: props.location,\n      revalidation: props.revalidation,\n      error: props.error\n    };\n  }\n  static getDerivedStateFromError(error) {\n    return {\n      error: error\n    };\n  }\n  static getDerivedStateFromProps(props, state) {\n    // When we get into an error state, the user will likely click \"back\" to the\n    // previous page that didn't have an error. Because this wraps the entire\n    // application, that will have no effect--the error page continues to display.\n    // This gives us a mechanism to recover from the error when the location changes.\n    //\n    // Whether we're in an error state or not, we update the location in state\n    // so that when we are in an error state, it gets reset when a new location\n    // comes in and the user recovers from the error.\n    if (state.location !== props.location || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n      return {\n        error: props.error,\n        location: props.location,\n        revalidation: props.revalidation\n      };\n    }\n\n    // If we're not changing locations, preserve the location but still surface\n    // any new errors that may come through. We retain the existing error, we do\n    // this because the error provided from the app state may be cleared without\n    // the location changing.\n    return {\n      error: props.error !== undefined ? props.error : state.error,\n      location: state.location,\n      revalidation: props.revalidation || state.revalidation\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    console.error(\"React Router caught the following error during render\", error, errorInfo);\n  }\n  render() {\n    return this.state.error !== undefined ? /*#__PURE__*/React.createElement(RouteContext.Provider, {\n      value: this.props.routeContext\n    }, /*#__PURE__*/React.createElement(RouteErrorContext.Provider, {\n      value: this.state.error,\n      children: this.props.component\n    })) : this.props.children;\n  }\n}\nfunction RenderedRoute(_ref) {\n  let {\n    routeContext,\n    match,\n    children\n  } = _ref;\n  let dataRouterContext = React.useContext(DataRouterContext);\n\n  // Track how deep we got in our render pass to emulate SSR componentDidCatch\n  // in a DataStaticRouter\n  if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n    dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n  }\n  return /*#__PURE__*/React.createElement(RouteContext.Provider, {\n    value: routeContext\n  }, children);\n}\nfunction _renderMatches(matches, parentMatches, dataRouterState, future) {\n  var _dataRouterState;\n  if (parentMatches === void 0) {\n    parentMatches = [];\n  }\n  if (dataRouterState === void 0) {\n    dataRouterState = null;\n  }\n  if (future === void 0) {\n    future = null;\n  }\n  if (matches == null) {\n    var _future;\n    if (!dataRouterState) {\n      return null;\n    }\n    if (dataRouterState.errors) {\n      // Don't bail if we have data router errors so we can render them in the\n      // boundary.  Use the pre-matched (or shimmed) matches\n      matches = dataRouterState.matches;\n    } else if ((_future = future) != null && _future.v7_partialHydration && parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n      // Don't bail if we're initializing with partial hydration and we have\n      // router matches.  That means we're actively running `patchRoutesOnNavigation`\n      // so we should render down the partial matches to the appropriate\n      // `HydrateFallback`.  We only do this if `parentMatches` is empty so it\n      // only impacts the root matches for `RouterProvider` and no descendant\n      // `<Routes>`\n      matches = dataRouterState.matches;\n    } else {\n      return null;\n    }\n  }\n  let renderedMatches = matches;\n\n  // If we have data errors, trim matches to the highest error boundary\n  let errors = (_dataRouterState = dataRouterState) == null ? void 0 : _dataRouterState.errors;\n  if (errors != null) {\n    let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]) !== undefined);\n    !(errorIndex >= 0) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"Could not find a matching route for errors on route IDs: \" + Object.keys(errors).join(\",\")) : UNSAFE_invariant(false) : void 0;\n    renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));\n  }\n\n  // If we're in a partial hydration mode, detect if we need to render down to\n  // a given HydrateFallback while we load the rest of the hydration data\n  let renderFallback = false;\n  let fallbackIndex = -1;\n  if (dataRouterState && future && future.v7_partialHydration) {\n    for (let i = 0; i < renderedMatches.length; i++) {\n      let match = renderedMatches[i];\n      // Track the deepest fallback up until the first route without data\n      if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n        fallbackIndex = i;\n      }\n      if (match.route.id) {\n        let {\n          loaderData,\n          errors\n        } = dataRouterState;\n        let needsToRunLoader = match.route.loader && loaderData[match.route.id] === undefined && (!errors || errors[match.route.id] === undefined);\n        if (match.route.lazy || needsToRunLoader) {\n          // We found the first route that's not ready to render (waiting on\n          // lazy, or has a loader that hasn't run yet).  Flag that we need to\n          // render a fallback and render up until the appropriate fallback\n          renderFallback = true;\n          if (fallbackIndex >= 0) {\n            renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n          } else {\n            renderedMatches = [renderedMatches[0]];\n          }\n          break;\n        }\n      }\n    }\n  }\n  return renderedMatches.reduceRight((outlet, match, index) => {\n    // Only data routers handle errors/fallbacks\n    let error;\n    let shouldRenderHydrateFallback = false;\n    let errorElement = null;\n    let hydrateFallbackElement = null;\n    if (dataRouterState) {\n      error = errors && match.route.id ? errors[match.route.id] : undefined;\n      errorElement = match.route.errorElement || defaultErrorElement;\n      if (renderFallback) {\n        if (fallbackIndex < 0 && index === 0) {\n          warningOnce(\"route-fallback\", false, \"No `HydrateFallback` element provided to render during initial hydration\");\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = null;\n        } else if (fallbackIndex === index) {\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n        }\n      }\n    }\n    let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n    let getChildren = () => {\n      let children;\n      if (error) {\n        children = errorElement;\n      } else if (shouldRenderHydrateFallback) {\n        children = hydrateFallbackElement;\n      } else if (match.route.Component) {\n        // Note: This is a de-optimized path since React won't re-use the\n        // ReactElement since it's identity changes with each new\n        // React.createElement call.  We keep this so folks can use\n        // `<Route Component={...}>` in `<Routes>` but generally `Component`\n        // usage is only advised in `RouterProvider` when we can convert it to\n        // `element` ahead of time.\n        children = /*#__PURE__*/React.createElement(match.route.Component, null);\n      } else if (match.route.element) {\n        children = match.route.element;\n      } else {\n        children = outlet;\n      }\n      return /*#__PURE__*/React.createElement(RenderedRoute, {\n        match: match,\n        routeContext: {\n          outlet,\n          matches,\n          isDataRoute: dataRouterState != null\n        },\n        children: children\n      });\n    };\n    // Only wrap in an error boundary within data router usages when we have an\n    // ErrorBoundary/errorElement on this route.  Otherwise let it bubble up to\n    // an ancestor ErrorBoundary/errorElement\n    return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /*#__PURE__*/React.createElement(RenderErrorBoundary, {\n      location: dataRouterState.location,\n      revalidation: dataRouterState.revalidation,\n      component: errorElement,\n      error: error,\n      children: getChildren(),\n      routeContext: {\n        outlet: null,\n        matches,\n        isDataRoute: true\n      }\n    }) : getChildren();\n  }, null);\n}\nvar DataRouterHook = /*#__PURE__*/function (DataRouterHook) {\n  DataRouterHook[\"UseBlocker\"] = \"useBlocker\";\n  DataRouterHook[\"UseRevalidator\"] = \"useRevalidator\";\n  DataRouterHook[\"UseNavigateStable\"] = \"useNavigate\";\n  return DataRouterHook;\n}(DataRouterHook || {});\nvar DataRouterStateHook = /*#__PURE__*/function (DataRouterStateHook) {\n  DataRouterStateHook[\"UseBlocker\"] = \"useBlocker\";\n  DataRouterStateHook[\"UseLoaderData\"] = \"useLoaderData\";\n  DataRouterStateHook[\"UseActionData\"] = \"useActionData\";\n  DataRouterStateHook[\"UseRouteError\"] = \"useRouteError\";\n  DataRouterStateHook[\"UseNavigation\"] = \"useNavigation\";\n  DataRouterStateHook[\"UseRouteLoaderData\"] = \"useRouteLoaderData\";\n  DataRouterStateHook[\"UseMatches\"] = \"useMatches\";\n  DataRouterStateHook[\"UseRevalidator\"] = \"useRevalidator\";\n  DataRouterStateHook[\"UseNavigateStable\"] = \"useNavigate\";\n  DataRouterStateHook[\"UseRouteId\"] = \"useRouteId\";\n  return DataRouterStateHook;\n}(DataRouterStateHook || {});\nfunction getDataRouterConsoleError(hookName) {\n  return hookName + \" must be used within a data router.  See https://reactrouter.com/v6/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React.useContext(DataRouterContext);\n  !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React.useContext(DataRouterStateContext);\n  !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return state;\n}\nfunction useRouteContext(hookName) {\n  let route = React.useContext(RouteContext);\n  !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName) {\n  let route = useRouteContext(hookName);\n  let thisRoute = route.matches[route.matches.length - 1];\n  !thisRoute.route.id ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, hookName + \" can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n  return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nfunction useRouteId() {\n  return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nfunction useNavigation() {\n  let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n  return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nfunction useRevalidator() {\n  let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n  let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n  return React.useMemo(() => ({\n    revalidate: dataRouterContext.router.revalidate,\n    state: state.revalidation\n  }), [dataRouterContext.router.revalidate, state.revalidation]);\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nfunction useMatches() {\n  let {\n    matches,\n    loaderData\n  } = useDataRouterState(DataRouterStateHook.UseMatches);\n  return React.useMemo(() => matches.map(m => UNSAFE_convertRouteMatchToUiMatch(m, loaderData)), [matches, loaderData]);\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nfunction useLoaderData() {\n  let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  if (state.errors && state.errors[routeId] != null) {\n    console.error(\"You cannot `useLoaderData` in an errorElement (routeId: \" + routeId + \")\");\n    return undefined;\n  }\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nfunction useRouteLoaderData(routeId) {\n  let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nfunction useActionData() {\n  let state = useDataRouterState(DataRouterStateHook.UseActionData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error.  This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nfunction useRouteError() {\n  var _state$errors;\n  let error = React.useContext(RouteErrorContext);\n  let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n  // If this was a render error, we put it in a RouteError context inside\n  // of RenderErrorBoundary\n  if (error !== undefined) {\n    return error;\n  }\n\n  // Otherwise look for errors from our data router state\n  return (_state$errors = state.errors) == null ? void 0 : _state$errors[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nfunction useAsyncValue() {\n  let value = React.useContext(AwaitContext);\n  return value == null ? void 0 : value._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nfunction useAsyncError() {\n  let value = React.useContext(AwaitContext);\n  return value == null ? void 0 : value._error;\n}\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation.  Mostly used to avoid\n * using half-filled form data.  This does not handle hard-reloads or\n * cross-origin navigations.\n */\nfunction useBlocker(shouldBlock) {\n  let {\n    router,\n    basename\n  } = useDataRouterContext(DataRouterHook.UseBlocker);\n  let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n  let [blockerKey, setBlockerKey] = React.useState(\"\");\n  let blockerFunction = React.useCallback(arg => {\n    if (typeof shouldBlock !== \"function\") {\n      return !!shouldBlock;\n    }\n    if (basename === \"/\") {\n      return shouldBlock(arg);\n    }\n\n    // If they provided us a function and we've got an active basename, strip\n    // it from the locations we expose to the user to match the behavior of\n    // useLocation\n    let {\n      currentLocation,\n      nextLocation,\n      historyAction\n    } = arg;\n    return shouldBlock({\n      currentLocation: _extends({}, currentLocation, {\n        pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n      }),\n      nextLocation: _extends({}, nextLocation, {\n        pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n      }),\n      historyAction\n    });\n  }, [basename, shouldBlock]);\n\n  // This effect is in charge of blocker key assignment and deletion (which is\n  // tightly coupled to the key)\n  React.useEffect(() => {\n    let key = String(++blockerId);\n    setBlockerKey(key);\n    return () => router.deleteBlocker(key);\n  }, [router]);\n\n  // This effect handles assigning the blockerFunction.  This is to handle\n  // unstable blocker function identities, and happens only after the prior\n  // effect so we don't get an orphaned blockerFunction in the router with a\n  // key of \"\".  Until then we just have the IDLE_BLOCKER.\n  React.useEffect(() => {\n    if (blockerKey !== \"\") {\n      router.getBlocker(blockerKey, blockerFunction);\n    }\n  }, [router, blockerKey, blockerFunction]);\n\n  // Prefer the blocker from `state` not `router.state` since DataRouterContext\n  // is memoized so this ensures we update on blocker state updates\n  return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable() {\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n  let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React.useCallback(function (to, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n    // Short circuit here since if this happens on first render the navigate\n    // is useless because we haven't wired up our router subscriber yet\n    if (!activeRef.current) return;\n    if (typeof to === \"number\") {\n      router.navigate(to);\n    } else {\n      router.navigate(to, _extends({\n        fromRouteId: id\n      }, options));\n    }\n  }, [router, id]);\n  return navigate;\n}\nconst alreadyWarned$1 = {};\nfunction warningOnce(key, cond, message) {\n  if (!cond && !alreadyWarned$1[key]) {\n    alreadyWarned$1[key] = true;\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, message) : void 0;\n  }\n}\n\nconst alreadyWarned = {};\nfunction warnOnce(key, message) {\n  if (process.env.NODE_ENV !== \"production\" && !alreadyWarned[message]) {\n    alreadyWarned[message] = true;\n    console.warn(message);\n  }\n}\nconst logDeprecation = (flag, msg, link) => warnOnce(flag, \"\\u26A0\\uFE0F React Router Future Flag Warning: \" + msg + \". \" + (\"You can use the `\" + flag + \"` future flag to opt-in early. \") + (\"For more information, see \" + link + \".\"));\nfunction logV6DeprecationWarnings(renderFuture, routerFuture) {\n  if ((renderFuture == null ? void 0 : renderFuture.v7_startTransition) === undefined) {\n    logDeprecation(\"v7_startTransition\", \"React Router will begin wrapping state updates in `React.startTransition` in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_starttransition\");\n  }\n  if ((renderFuture == null ? void 0 : renderFuture.v7_relativeSplatPath) === undefined && (!routerFuture || routerFuture.v7_relativeSplatPath === undefined)) {\n    logDeprecation(\"v7_relativeSplatPath\", \"Relative route resolution within Splat routes is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath\");\n  }\n  if (routerFuture) {\n    if (routerFuture.v7_fetcherPersist === undefined) {\n      logDeprecation(\"v7_fetcherPersist\", \"The persistence behavior of fetchers is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_fetcherpersist\");\n    }\n    if (routerFuture.v7_normalizeFormMethod === undefined) {\n      logDeprecation(\"v7_normalizeFormMethod\", \"Casing of `formMethod` fields is being normalized to uppercase in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_normalizeformmethod\");\n    }\n    if (routerFuture.v7_partialHydration === undefined) {\n      logDeprecation(\"v7_partialHydration\", \"`RouterProvider` hydration behavior is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_partialhydration\");\n    }\n    if (routerFuture.v7_skipActionErrorRevalidation === undefined) {\n      logDeprecation(\"v7_skipActionErrorRevalidation\", \"The revalidation behavior after 4xx/5xx `action` responses is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_skipactionerrorrevalidation\");\n    }\n  }\n}\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n  let {\n    fallbackElement,\n    router,\n    future\n  } = _ref;\n  let [state, setStateImpl] = React.useState(router.state);\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    if (v7_startTransition && startTransitionImpl) {\n      startTransitionImpl(() => setStateImpl(newState));\n    } else {\n      setStateImpl(newState);\n    }\n  }, [setStateImpl, v7_startTransition]);\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  React.useEffect(() => {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  let navigator = React.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: n => router.navigate(n),\n      push: (to, state, opts) => router.navigate(to, {\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      }),\n      replace: (to, state, opts) => router.navigate(to, {\n        replace: true,\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React.useMemo(() => ({\n    router,\n    navigator,\n    static: false,\n    basename\n  }), [router, navigator, basename]);\n  React.useEffect(() => logV6DeprecationWarnings(future, router.future), [router, future]);\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DataRouterContext.Provider, {\n    value: dataRouterContext\n  }, /*#__PURE__*/React.createElement(DataRouterStateContext.Provider, {\n    value: state\n  }, /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    location: state.location,\n    navigationType: state.historyAction,\n    navigator: navigator,\n    future: {\n      v7_relativeSplatPath: router.future.v7_relativeSplatPath\n    }\n  }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(DataRoutes, {\n    routes: router.routes,\n    future: router.future,\n    state: state\n  }) : fallbackElement))), null);\n}\nfunction DataRoutes(_ref2) {\n  let {\n    routes,\n    future,\n    state\n  } = _ref2;\n  return useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/v6/router-components/memory-router\n */\nfunction MemoryRouter(_ref3) {\n  let {\n    basename,\n    children,\n    initialEntries,\n    initialIndex,\n    future\n  } = _ref3;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createMemoryHistory({\n      initialEntries,\n      initialIndex,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/v6/components/navigate\n */\nfunction Navigate(_ref4) {\n  let {\n    to,\n    replace,\n    state,\n    relative\n  } = _ref4;\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of\n  // the router loaded. We can help them understand how to avoid that.\n  \"<Navigate> may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    future,\n    static: isStatic\n  } = React.useContext(NavigationContext);\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(!isStatic, \"<Navigate> must not be used on the initial render in a <StaticRouter>. \" + \"This is a no-op, but you should modify your code so the <Navigate> is \" + \"only ever rendered in response to some user interaction or state change.\") : void 0;\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let navigate = useNavigate();\n\n  // Resolve the path outside of the effect so that when effects run twice in\n  // StrictMode they navigate to the same place\n  let path = resolveTo(to, UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath), locationPathname, relative === \"path\");\n  let jsonPath = JSON.stringify(path);\n  React.useEffect(() => navigate(JSON.parse(jsonPath), {\n    replace,\n    state,\n    relative\n  }), [navigate, jsonPath, relative, replace, state]);\n  return null;\n}\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/v6/components/outlet\n */\nfunction Outlet(props) {\n  return useOutlet(props.context);\n}\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/v6/components/route\n */\nfunction Route(_props) {\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"A <Route> is only ever to be used as the child of <Routes> element, \" + \"never rendered directly. Please wrap your <Route> in a <Routes>.\") : UNSAFE_invariant(false) ;\n}\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/v6/router-components/router\n */\nfunction Router(_ref5) {\n  let {\n    basename: basenameProp = \"/\",\n    children = null,\n    location: locationProp,\n    navigationType = Action.Pop,\n    navigator,\n    static: staticProp = false,\n    future\n  } = _ref5;\n  !!useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"You cannot render a <Router> inside another <Router>.\" + \" You should never have more than one in your app.\") : UNSAFE_invariant(false) : void 0;\n\n  // Preserve trailing slashes on basename, so we can let the user control\n  // the enforcement of trailing slashes throughout the app\n  let basename = basenameProp.replace(/^\\/*/, \"/\");\n  let navigationContext = React.useMemo(() => ({\n    basename,\n    navigator,\n    static: staticProp,\n    future: _extends({\n      v7_relativeSplatPath: false\n    }, future)\n  }), [basename, future, navigator, staticProp]);\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\",\n    state = null,\n    key = \"default\"\n  } = locationProp;\n  let locationContext = React.useMemo(() => {\n    let trailingPathname = stripBasename(pathname, basename);\n    if (trailingPathname == null) {\n      return null;\n    }\n    return {\n      location: {\n        pathname: trailingPathname,\n        search,\n        hash,\n        state,\n        key\n      },\n      navigationType\n    };\n  }, [basename, pathname, search, hash, state, key, navigationType]);\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(locationContext != null, \"<Router basename=\\\"\" + basename + \"\\\"> is not able to match the URL \" + (\"\\\"\" + pathname + search + hash + \"\\\" because it does not start with the \") + \"basename, so the <Router> won't render anything.\") : void 0;\n  if (locationContext == null) {\n    return null;\n  }\n  return /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n    value: navigationContext\n  }, /*#__PURE__*/React.createElement(LocationContext.Provider, {\n    children: children,\n    value: locationContext\n  }));\n}\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/v6/components/routes\n */\nfunction Routes(_ref6) {\n  let {\n    children,\n    location\n  } = _ref6;\n  return useRoutes(createRoutesFromChildren(children), location);\n}\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nfunction Await(_ref7) {\n  let {\n    children,\n    errorElement,\n    resolve\n  } = _ref7;\n  return /*#__PURE__*/React.createElement(AwaitErrorBoundary, {\n    resolve: resolve,\n    errorElement: errorElement\n  }, /*#__PURE__*/React.createElement(ResolveAwait, null, children));\n}\nvar AwaitRenderStatus = /*#__PURE__*/function (AwaitRenderStatus) {\n  AwaitRenderStatus[AwaitRenderStatus[\"pending\"] = 0] = \"pending\";\n  AwaitRenderStatus[AwaitRenderStatus[\"success\"] = 1] = \"success\";\n  AwaitRenderStatus[AwaitRenderStatus[\"error\"] = 2] = \"error\";\n  return AwaitRenderStatus;\n}(AwaitRenderStatus || {});\nconst neverSettledPromise = new Promise(() => {});\nclass AwaitErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      error: null\n    };\n  }\n  static getDerivedStateFromError(error) {\n    return {\n      error\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    console.error(\"<Await> caught the following error during render\", error, errorInfo);\n  }\n  render() {\n    let {\n      children,\n      errorElement,\n      resolve\n    } = this.props;\n    let promise = null;\n    let status = AwaitRenderStatus.pending;\n    if (!(resolve instanceof Promise)) {\n      // Didn't get a promise - provide as a resolved promise\n      status = AwaitRenderStatus.success;\n      promise = Promise.resolve();\n      Object.defineProperty(promise, \"_tracked\", {\n        get: () => true\n      });\n      Object.defineProperty(promise, \"_data\", {\n        get: () => resolve\n      });\n    } else if (this.state.error) {\n      // Caught a render error, provide it as a rejected promise\n      status = AwaitRenderStatus.error;\n      let renderError = this.state.error;\n      promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n      Object.defineProperty(promise, \"_tracked\", {\n        get: () => true\n      });\n      Object.defineProperty(promise, \"_error\", {\n        get: () => renderError\n      });\n    } else if (resolve._tracked) {\n      // Already tracked promise - check contents\n      promise = resolve;\n      status = \"_error\" in promise ? AwaitRenderStatus.error : \"_data\" in promise ? AwaitRenderStatus.success : AwaitRenderStatus.pending;\n    } else {\n      // Raw (untracked) promise - track it\n      status = AwaitRenderStatus.pending;\n      Object.defineProperty(resolve, \"_tracked\", {\n        get: () => true\n      });\n      promise = resolve.then(data => Object.defineProperty(resolve, \"_data\", {\n        get: () => data\n      }), error => Object.defineProperty(resolve, \"_error\", {\n        get: () => error\n      }));\n    }\n    if (status === AwaitRenderStatus.error && promise._error instanceof AbortedDeferredError) {\n      // Freeze the UI by throwing a never resolved promise\n      throw neverSettledPromise;\n    }\n    if (status === AwaitRenderStatus.error && !errorElement) {\n      // No errorElement, throw to the nearest route-level error boundary\n      throw promise._error;\n    }\n    if (status === AwaitRenderStatus.error) {\n      // Render via our errorElement\n      return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n        value: promise,\n        children: errorElement\n      });\n    }\n    if (status === AwaitRenderStatus.success) {\n      // Render children with resolved value\n      return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n        value: promise,\n        children: children\n      });\n    }\n\n    // Throw to the suspense boundary\n    throw promise;\n  }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait(_ref8) {\n  let {\n    children\n  } = _ref8;\n  let data = useAsyncValue();\n  let toRender = typeof children === \"function\" ? children(data) : children;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, toRender);\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/v6/utils/create-routes-from-children\n */\nfunction createRoutesFromChildren(children, parentPath) {\n  if (parentPath === void 0) {\n    parentPath = [];\n  }\n  let routes = [];\n  React.Children.forEach(children, (element, index) => {\n    if (! /*#__PURE__*/React.isValidElement(element)) {\n      // Ignore non-elements. This allows people to more easily inline\n      // conditionals in their route config.\n      return;\n    }\n    let treePath = [...parentPath, index];\n    if (element.type === React.Fragment) {\n      // Transparently support React.Fragment and its children.\n      routes.push.apply(routes, createRoutesFromChildren(element.props.children, treePath));\n      return;\n    }\n    !(element.type === Route) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"[\" + (typeof element.type === \"string\" ? element.type : element.type.name) + \"] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>\") : UNSAFE_invariant(false) : void 0;\n    !(!element.props.index || !element.props.children) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"An index route cannot have child routes.\") : UNSAFE_invariant(false) : void 0;\n    let route = {\n      id: element.props.id || treePath.join(\"-\"),\n      caseSensitive: element.props.caseSensitive,\n      element: element.props.element,\n      Component: element.props.Component,\n      index: element.props.index,\n      path: element.props.path,\n      loader: element.props.loader,\n      action: element.props.action,\n      errorElement: element.props.errorElement,\n      ErrorBoundary: element.props.ErrorBoundary,\n      hasErrorBoundary: element.props.ErrorBoundary != null || element.props.errorElement != null,\n      shouldRevalidate: element.props.shouldRevalidate,\n      handle: element.props.handle,\n      lazy: element.props.lazy\n    };\n    if (element.props.children) {\n      route.children = createRoutesFromChildren(element.props.children, treePath);\n    }\n    routes.push(route);\n  });\n  return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nfunction renderMatches(matches) {\n  return _renderMatches(matches);\n}\n\nfunction mapRouteProperties(route) {\n  let updates = {\n    // Note: this check also occurs in createRoutesFromChildren so update\n    // there if you change this -- please and thank you!\n    hasErrorBoundary: route.ErrorBoundary != null || route.errorElement != null\n  };\n  if (route.Component) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.element) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `Component` and `element` on your route - \" + \"`Component` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      element: /*#__PURE__*/React.createElement(route.Component),\n      Component: undefined\n    });\n  }\n  if (route.HydrateFallback) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.hydrateFallbackElement) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - \" + \"`HydrateFallback` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      hydrateFallbackElement: /*#__PURE__*/React.createElement(route.HydrateFallback),\n      HydrateFallback: undefined\n    });\n  }\n  if (route.ErrorBoundary) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.errorElement) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `ErrorBoundary` and `errorElement` on your route - \" + \"`ErrorBoundary` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      errorElement: /*#__PURE__*/React.createElement(route.ErrorBoundary),\n      ErrorBoundary: undefined\n    });\n  }\n  return updates;\n}\nfunction createMemoryRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createMemoryHistory({\n      initialEntries: opts == null ? void 0 : opts.initialEntries,\n      initialIndex: opts == null ? void 0 : opts.initialIndex\n    }),\n    hydrationData: opts == null ? void 0 : opts.hydrationData,\n    routes,\n    mapRouteProperties,\n    dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n    patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation\n  }).initialize();\n}\n\nexport { Await, MemoryRouter, Navigate, Outlet, Route, Router, RouterProvider, Routes, DataRouterContext as UNSAFE_DataRouterContext, DataRouterStateContext as UNSAFE_DataRouterStateContext, LocationContext as UNSAFE_LocationContext, NavigationContext as UNSAFE_NavigationContext, RouteContext as UNSAFE_RouteContext, logV6DeprecationWarnings as UNSAFE_logV6DeprecationWarnings, mapRouteProperties as UNSAFE_mapRouteProperties, useRouteId as UNSAFE_useRouteId, useRoutesImpl as UNSAFE_useRoutesImpl, createMemoryRouter, createRoutesFromChildren, createRoutesFromChildren as createRoutesFromElements, renderMatches, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes };\n//# sourceMappingURL=index.js.map\n","/**\n * React Router DOM v5 Compat v6.30.3\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_logV6DeprecationWarnings, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker, Routes, Route } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nimport { parsePath, Action, createPath as createPath$1 } from 'history';\nimport { Route as Route$1, useHistory } from 'react-router-dom';\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n  return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n  return event.button === 0 && (\n  // Ignore everything but left clicks\n  !target || target === \"_self\") &&\n  // Let browser handle \"target=_blank\" etc.\n  !isModifiedEvent(event) // Ignore clicks with modifier keys\n  ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n *   let searchParams = new URLSearchParams([\n *     ['sort', 'name'],\n *     ['sort', 'price']\n *   ]);\n *\n * you can do:\n *\n *   let searchParams = createSearchParams({\n *     sort: ['name', 'price']\n *   });\n */\nfunction createSearchParams(init) {\n  if (init === void 0) {\n    init = \"\";\n  }\n  return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n    let value = init[key];\n    return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n  }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n  let searchParams = createSearchParams(locationSearch);\n  if (defaultSearchParams) {\n    // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n    // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n    // web extensions. Relevant Bugzilla tickets:\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n    defaultSearchParams.forEach((_, key) => {\n      if (!searchParams.has(key)) {\n        defaultSearchParams.getAll(key).forEach(value => {\n          searchParams.append(key, value);\n        });\n      }\n    });\n  }\n  return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n  if (_formDataSupportsSubmitter === null) {\n    try {\n      new FormData(document.createElement(\"form\"),\n      // @ts-expect-error if FormData supports the submitter parameter, this will throw\n      0);\n      _formDataSupportsSubmitter = false;\n    } catch (e) {\n      _formDataSupportsSubmitter = true;\n    }\n  }\n  return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n  if (encType != null && !supportedFormEncTypes.has(encType)) {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `<Form>`/`<fetcher.Form>` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n    return null;\n  }\n  return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n  let method;\n  let action;\n  let encType;\n  let formData;\n  let body;\n  if (isFormElement(target)) {\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n    formData = new FormData(target);\n  } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n    let form = target.form;\n    if (form == null) {\n      throw new Error(\"Cannot submit a <button> or <input type=\\\"submit\\\"> without a <form>\");\n    }\n    // <button>/<input type=\"submit\"> may override attributes of <form>\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"formmethod\") || form.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"formenctype\")) || getFormEncType(form.getAttribute(\"enctype\")) || defaultEncType;\n    // Build a FormData object populated from a form and submitter\n    formData = new FormData(form, target);\n    // If this browser doesn't support the `FormData(el, submitter)` format,\n    // then tack on the submitter value at the end.  This is a lightweight\n    // solution that is not 100% spec compliant.  For complete support in older\n    // browsers, consider using the `formdata-submitter-polyfill` package\n    if (!isFormDataSubmitterSupported()) {\n      let {\n        name,\n        type,\n        value\n      } = target;\n      if (type === \"image\") {\n        let prefix = name ? name + \".\" : \"\";\n        formData.append(prefix + \"x\", \"0\");\n        formData.append(prefix + \"y\", \"0\");\n      } else if (name) {\n        formData.append(name, value);\n      }\n    }\n  } else if (isHtmlElement(target)) {\n    throw new Error(\"Cannot submit element that is not <form>, <button>, or \" + \"<input type=\\\"submit|image\\\">\");\n  } else {\n    method = defaultMethod;\n    action = null;\n    encType = defaultEncType;\n    body = target;\n  }\n  // Send body for <Form encType=\"text/plain\" so we encode it into text\n  if (formData && encType === \"text/plain\") {\n    body = formData;\n    formData = undefined;\n  }\n  return {\n    action,\n    method: method.toLowerCase(),\n    encType,\n    formData,\n    body\n  };\n}\n\nconst _excluded = [\"onClick\", \"relative\", \"reloadDocument\", \"replace\", \"state\", \"target\", \"to\", \"preventScrollReset\", \"viewTransition\"],\n  _excluded2 = [\"aria-current\", \"caseSensitive\", \"className\", \"end\", \"style\", \"to\", \"viewTransition\", \"children\"],\n  _excluded3 = [\"fetcherKey\", \"navigate\", \"reloadDocument\", \"replace\", \"state\", \"method\", \"action\", \"onSubmit\", \"relative\", \"preventScrollReset\", \"viewTransition\"];\n// HEY YOU! DON'T TOUCH THIS VARIABLE!\n//\n// It is replaced with the proper version at build time via a babel plugin in\n// the rollup config.\n//\n// Export a global property onto the window for React Router detection by the\n// Core Web Vitals Technology Report.  This way they can configure the `wappalyzer`\n// to detect and properly classify live websites as being built with React Router:\n// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json\nconst REACT_ROUTER_VERSION = \"6\";\ntry {\n  window.__reactRouterVersion = REACT_ROUTER_VERSION;\n} catch (e) {\n  // no-op\n}\nfunction createBrowserRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createBrowserHistory({\n      window: opts == null ? void 0 : opts.window\n    }),\n    hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n    routes,\n    mapRouteProperties: UNSAFE_mapRouteProperties,\n    dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n    patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation,\n    window: opts == null ? void 0 : opts.window\n  }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createHashHistory({\n      window: opts == null ? void 0 : opts.window\n    }),\n    hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n    routes,\n    mapRouteProperties: UNSAFE_mapRouteProperties,\n    dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n    patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation,\n    window: opts == null ? void 0 : opts.window\n  }).initialize();\n}\nfunction parseHydrationData() {\n  var _window;\n  let state = (_window = window) == null ? void 0 : _window.__staticRouterHydrationData;\n  if (state && state.errors) {\n    state = _extends({}, state, {\n      errors: deserializeErrors(state.errors)\n    });\n  }\n  return state;\n}\nfunction deserializeErrors(errors) {\n  if (!errors) return null;\n  let entries = Object.entries(errors);\n  let serialized = {};\n  for (let [key, val] of entries) {\n    // Hey you!  If you change this, please change the corresponding logic in\n    // serializeErrors in react-router-dom/server.tsx :)\n    if (val && val.__type === \"RouteErrorResponse\") {\n      serialized[key] = new UNSAFE_ErrorResponseImpl(val.status, val.statusText, val.data, val.internal === true);\n    } else if (val && val.__type === \"Error\") {\n      // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n      if (val.__subType) {\n        let ErrorConstructor = window[val.__subType];\n        if (typeof ErrorConstructor === \"function\") {\n          try {\n            // @ts-expect-error\n            let error = new ErrorConstructor(val.message);\n            // Wipe away the client-side stack trace.  Nothing to fill it in with\n            // because we don't serialize SSR stack traces for security reasons\n            error.stack = \"\";\n            serialized[key] = error;\n          } catch (e) {\n            // no-op - fall through and create a normal Error\n          }\n        }\n      }\n      if (serialized[key] == null) {\n        let error = new Error(val.message);\n        // Wipe away the client-side stack trace.  Nothing to fill it in with\n        // because we don't serialize SSR stack traces for security reasons\n        error.stack = \"\";\n        serialized[key] = error;\n      }\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\nconst ViewTransitionContext = /*#__PURE__*/React.createContext({\n  isTransitioning: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n  ViewTransitionContext.displayName = \"ViewTransition\";\n}\nconst FetchersContext = /*#__PURE__*/React.createContext(new Map());\nif (process.env.NODE_ENV !== \"production\") {\n  FetchersContext.displayName = \"Fetchers\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nconst USE_ID = \"useId\";\nconst useIdImpl = React[USE_ID];\nfunction startTransitionSafe(cb) {\n  if (startTransitionImpl) {\n    startTransitionImpl(cb);\n  } else {\n    cb();\n  }\n}\nfunction flushSyncSafe(cb) {\n  if (flushSyncImpl) {\n    flushSyncImpl(cb);\n  } else {\n    cb();\n  }\n}\nclass Deferred {\n  constructor() {\n    this.status = \"pending\";\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = value => {\n        if (this.status === \"pending\") {\n          this.status = \"resolved\";\n          resolve(value);\n        }\n      };\n      this.reject = reason => {\n        if (this.status === \"pending\") {\n          this.status = \"rejected\";\n          reject(reason);\n        }\n      };\n    });\n  }\n}\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n  let {\n    fallbackElement,\n    router,\n    future\n  } = _ref;\n  let [state, setStateImpl] = React.useState(router.state);\n  let [pendingState, setPendingState] = React.useState();\n  let [vtContext, setVtContext] = React.useState({\n    isTransitioning: false\n  });\n  let [renderDfd, setRenderDfd] = React.useState();\n  let [transition, setTransition] = React.useState();\n  let [interruption, setInterruption] = React.useState();\n  let fetcherData = React.useRef(new Map());\n  let {\n    v7_startTransition\n  } = future || {};\n  let optInStartTransition = React.useCallback(cb => {\n    if (v7_startTransition) {\n      startTransitionSafe(cb);\n    } else {\n      cb();\n    }\n  }, [v7_startTransition]);\n  let setState = React.useCallback((newState, _ref2) => {\n    let {\n      deletedFetchers,\n      flushSync: flushSync,\n      viewTransitionOpts: viewTransitionOpts\n    } = _ref2;\n    newState.fetchers.forEach((fetcher, key) => {\n      if (fetcher.data !== undefined) {\n        fetcherData.current.set(key, fetcher.data);\n      }\n    });\n    deletedFetchers.forEach(key => fetcherData.current.delete(key));\n    let isViewTransitionUnavailable = router.window == null || router.window.document == null || typeof router.window.document.startViewTransition !== \"function\";\n    // If this isn't a view transition or it's not available in this browser,\n    // just update and be done with it\n    if (!viewTransitionOpts || isViewTransitionUnavailable) {\n      if (flushSync) {\n        flushSyncSafe(() => setStateImpl(newState));\n      } else {\n        optInStartTransition(() => setStateImpl(newState));\n      }\n      return;\n    }\n    // flushSync + startViewTransition\n    if (flushSync) {\n      // Flush through the context to mark DOM elements as transition=ing\n      flushSyncSafe(() => {\n        // Cancel any pending transitions\n        if (transition) {\n          renderDfd && renderDfd.resolve();\n          transition.skipTransition();\n        }\n        setVtContext({\n          isTransitioning: true,\n          flushSync: true,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation\n        });\n      });\n      // Update the DOM\n      let t = router.window.document.startViewTransition(() => {\n        flushSyncSafe(() => setStateImpl(newState));\n      });\n      // Clean up after the animation completes\n      t.finished.finally(() => {\n        flushSyncSafe(() => {\n          setRenderDfd(undefined);\n          setTransition(undefined);\n          setPendingState(undefined);\n          setVtContext({\n            isTransitioning: false\n          });\n        });\n      });\n      flushSyncSafe(() => setTransition(t));\n      return;\n    }\n    // startTransition + startViewTransition\n    if (transition) {\n      // Interrupting an in-progress transition, cancel and let everything flush\n      // out, and then kick off a new transition from the interruption state\n      renderDfd && renderDfd.resolve();\n      transition.skipTransition();\n      setInterruption({\n        state: newState,\n        currentLocation: viewTransitionOpts.currentLocation,\n        nextLocation: viewTransitionOpts.nextLocation\n      });\n    } else {\n      // Completed navigation update with opted-in view transitions, let 'er rip\n      setPendingState(newState);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: viewTransitionOpts.currentLocation,\n        nextLocation: viewTransitionOpts.nextLocation\n      });\n    }\n  }, [router.window, transition, renderDfd, fetcherData, optInStartTransition]);\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  // When we start a view transition, create a Deferred we can use for the\n  // eventual \"completed\" render\n  React.useEffect(() => {\n    if (vtContext.isTransitioning && !vtContext.flushSync) {\n      setRenderDfd(new Deferred());\n    }\n  }, [vtContext]);\n  // Once the deferred is created, kick off startViewTransition() to update the\n  // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n  // happened)\n  React.useEffect(() => {\n    if (renderDfd && pendingState && router.window) {\n      let newState = pendingState;\n      let renderPromise = renderDfd.promise;\n      let transition = router.window.document.startViewTransition(async () => {\n        optInStartTransition(() => setStateImpl(newState));\n        await renderPromise;\n      });\n      transition.finished.finally(() => {\n        setRenderDfd(undefined);\n        setTransition(undefined);\n        setPendingState(undefined);\n        setVtContext({\n          isTransitioning: false\n        });\n      });\n      setTransition(transition);\n    }\n  }, [optInStartTransition, pendingState, renderDfd, router.window]);\n  // When the new location finally renders and is committed to the DOM, this\n  // effect will run to resolve the transition\n  React.useEffect(() => {\n    if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n      renderDfd.resolve();\n    }\n  }, [renderDfd, transition, state.location, pendingState]);\n  // If we get interrupted with a new navigation during a transition, we skip\n  // the active transition, let it cleanup, then kick it off again here\n  React.useEffect(() => {\n    if (!vtContext.isTransitioning && interruption) {\n      setPendingState(interruption.state);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: interruption.currentLocation,\n        nextLocation: interruption.nextLocation\n      });\n      setInterruption(undefined);\n    }\n  }, [vtContext.isTransitioning, interruption]);\n  React.useEffect(() => {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  let navigator = React.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: n => router.navigate(n),\n      push: (to, state, opts) => router.navigate(to, {\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      }),\n      replace: (to, state, opts) => router.navigate(to, {\n        replace: true,\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React.useMemo(() => ({\n    router,\n    navigator,\n    static: false,\n    basename\n  }), [router, navigator, basename]);\n  let routerFuture = React.useMemo(() => ({\n    v7_relativeSplatPath: router.future.v7_relativeSplatPath\n  }), [router.future.v7_relativeSplatPath]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future, router.future), [future, router.future]);\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UNSAFE_DataRouterContext.Provider, {\n    value: dataRouterContext\n  }, /*#__PURE__*/React.createElement(UNSAFE_DataRouterStateContext.Provider, {\n    value: state\n  }, /*#__PURE__*/React.createElement(FetchersContext.Provider, {\n    value: fetcherData.current\n  }, /*#__PURE__*/React.createElement(ViewTransitionContext.Provider, {\n    value: vtContext\n  }, /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    location: state.location,\n    navigationType: state.historyAction,\n    navigator: navigator,\n    future: routerFuture\n  }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(MemoizedDataRoutes, {\n    routes: router.routes,\n    future: router.future,\n    state: state\n  }) : fallbackElement))))), null);\n}\n// Memoize to avoid re-renders when updating `ViewTransitionContext`\nconst MemoizedDataRoutes = /*#__PURE__*/React.memo(DataRoutes);\nfunction DataRoutes(_ref3) {\n  let {\n    routes,\n    future,\n    state\n  } = _ref3;\n  return UNSAFE_useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nfunction BrowserRouter(_ref4) {\n  let {\n    basename,\n    children,\n    future,\n    window\n  } = _ref4;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createBrowserHistory({\n      window,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nfunction HashRouter(_ref5) {\n  let {\n    basename,\n    children,\n    future,\n    window\n  } = _ref5;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createHashHistory({\n      window,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter(_ref6) {\n  let {\n    basename,\n    children,\n    future,\n    history\n  } = _ref6;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\nif (process.env.NODE_ENV !== \"production\") {\n  HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\nconst isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\nconst ABSOLUTE_URL_REGEX$1 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nconst Link = /*#__PURE__*/React.forwardRef(function LinkWithRef(_ref7, ref) {\n  let {\n      onClick,\n      relative,\n      reloadDocument,\n      replace,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      viewTransition\n    } = _ref7,\n    rest = _objectWithoutPropertiesLoose(_ref7, _excluded);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  // Rendered into <a href> for absolute URLs\n  let absoluteHref;\n  let isExternal = false;\n  if (typeof to === \"string\" && ABSOLUTE_URL_REGEX$1.test(to)) {\n    // Render the absolute href server- and client-side\n    absoluteHref = to;\n    // Only check for external origins client-side\n    if (isBrowser) {\n      try {\n        let currentUrl = new URL(window.location.href);\n        let targetUrl = to.startsWith(\"//\") ? new URL(currentUrl.protocol + to) : new URL(to);\n        let path = stripBasename(targetUrl.pathname, basename);\n        if (targetUrl.origin === currentUrl.origin && path != null) {\n          // Strip the protocol/origin/basename for same-origin absolute URLs\n          to = path + targetUrl.search + targetUrl.hash;\n        } else {\n          isExternal = true;\n        }\n      } catch (e) {\n        // We can't do external URL detection without a valid URL\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"<Link to=\\\"\" + to + \"\\\"> contains an invalid URL which will probably break \" + \"when clicked - please update to a valid URL path.\") : void 0;\n      }\n    }\n  }\n  // Rendered into <a href> for relative URLs\n  let href = useHref(to, {\n    relative\n  });\n  let internalOnClick = useLinkClickHandler(to, {\n    replace,\n    state,\n    target,\n    preventScrollReset,\n    relative,\n    viewTransition\n  });\n  function handleClick(event) {\n    if (onClick) onClick(event);\n    if (!event.defaultPrevented) {\n      internalOnClick(event);\n    }\n  }\n  return (\n    /*#__PURE__*/\n    // eslint-disable-next-line jsx-a11y/anchor-has-content\n    React.createElement(\"a\", _extends({}, rest, {\n      href: absoluteHref || href,\n      onClick: isExternal || reloadDocument ? onClick : handleClick,\n      ref: ref,\n      target: target\n    }))\n  );\n});\nif (process.env.NODE_ENV !== \"production\") {\n  Link.displayName = \"Link\";\n}\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = /*#__PURE__*/React.forwardRef(function NavLinkWithRef(_ref8, ref) {\n  let {\n      \"aria-current\": ariaCurrentProp = \"page\",\n      caseSensitive = false,\n      className: classNameProp = \"\",\n      end = false,\n      style: styleProp,\n      to,\n      viewTransition,\n      children\n    } = _ref8,\n    rest = _objectWithoutPropertiesLoose(_ref8, _excluded2);\n  let path = useResolvedPath(to, {\n    relative: rest.relative\n  });\n  let location = useLocation();\n  let routerState = React.useContext(UNSAFE_DataRouterStateContext);\n  let {\n    navigator,\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let isTransitioning = routerState != null &&\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  useViewTransitionState(path) && viewTransition === true;\n  let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname;\n  let locationPathname = location.pathname;\n  let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;\n  if (!caseSensitive) {\n    locationPathname = locationPathname.toLowerCase();\n    nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;\n    toPathname = toPathname.toLowerCase();\n  }\n  if (nextLocationPathname && basename) {\n    nextLocationPathname = stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n  }\n  // If the `to` has a trailing slash, look at that exact spot.  Otherwise,\n  // we're looking for a slash _after_ what's in `to`.  For example:\n  //\n  // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n  // both want to look for a / at index 6 to match URL `/users/matt`\n  const endSlashPosition = toPathname !== \"/\" && toPathname.endsWith(\"/\") ? toPathname.length - 1 : toPathname.length;\n  let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === \"/\";\n  let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === \"/\");\n  let renderProps = {\n    isActive,\n    isPending,\n    isTransitioning\n  };\n  let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n  let className;\n  if (typeof classNameProp === \"function\") {\n    className = classNameProp(renderProps);\n  } else {\n    // If the className prop is not a function, we use a default `active`\n    // class for <NavLink />s that are active. In v5 `active` was the default\n    // value for `activeClassName`, but we are removing that API and can still\n    // use the old default behavior for a cleaner upgrade path and keep the\n    // simple styling rules working as they currently do.\n    className = [classNameProp, isActive ? \"active\" : null, isPending ? \"pending\" : null, isTransitioning ? \"transitioning\" : null].filter(Boolean).join(\" \");\n  }\n  let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n  return /*#__PURE__*/React.createElement(Link, _extends({}, rest, {\n    \"aria-current\": ariaCurrent,\n    className: className,\n    ref: ref,\n    style: style,\n    to: to,\n    viewTransition: viewTransition\n  }), typeof children === \"function\" ? children(renderProps) : children);\n});\nif (process.env.NODE_ENV !== \"production\") {\n  NavLink.displayName = \"NavLink\";\n}\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nconst Form = /*#__PURE__*/React.forwardRef((_ref9, forwardedRef) => {\n  let {\n      fetcherKey,\n      navigate,\n      reloadDocument,\n      replace,\n      state,\n      method = defaultMethod,\n      action,\n      onSubmit,\n      relative,\n      preventScrollReset,\n      viewTransition\n    } = _ref9,\n    props = _objectWithoutPropertiesLoose(_ref9, _excluded3);\n  let submit = useSubmit();\n  let formAction = useFormAction(action, {\n    relative\n  });\n  let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n  let submitHandler = event => {\n    onSubmit && onSubmit(event);\n    if (event.defaultPrevented) return;\n    event.preventDefault();\n    let submitter = event.nativeEvent.submitter;\n    let submitMethod = (submitter == null ? void 0 : submitter.getAttribute(\"formmethod\")) || method;\n    submit(submitter || event.currentTarget, {\n      fetcherKey,\n      method: submitMethod,\n      navigate,\n      replace,\n      state,\n      relative,\n      preventScrollReset,\n      viewTransition\n    });\n  };\n  return /*#__PURE__*/React.createElement(\"form\", _extends({\n    ref: forwardedRef,\n    method: formMethod,\n    action: formAction,\n    onSubmit: reloadDocument ? onSubmit : submitHandler\n  }, props));\n});\nif (process.env.NODE_ENV !== \"production\") {\n  Form.displayName = \"Form\";\n}\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nfunction ScrollRestoration(_ref10) {\n  let {\n    getKey,\n    storageKey\n  } = _ref10;\n  useScrollRestoration({\n    getKey,\n    storageKey\n  });\n  return null;\n}\nif (process.env.NODE_ENV !== \"production\") {\n  ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\nvar DataRouterHook;\n(function (DataRouterHook) {\n  DataRouterHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n  DataRouterHook[\"UseSubmit\"] = \"useSubmit\";\n  DataRouterHook[\"UseSubmitFetcher\"] = \"useSubmitFetcher\";\n  DataRouterHook[\"UseFetcher\"] = \"useFetcher\";\n  DataRouterHook[\"useViewTransitionState\"] = \"useViewTransitionState\";\n})(DataRouterHook || (DataRouterHook = {}));\nvar DataRouterStateHook;\n(function (DataRouterStateHook) {\n  DataRouterStateHook[\"UseFetcher\"] = \"useFetcher\";\n  DataRouterStateHook[\"UseFetchers\"] = \"useFetchers\";\n  DataRouterStateHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n})(DataRouterStateHook || (DataRouterStateHook = {}));\n// Internal hooks\nfunction getDataRouterConsoleError(hookName) {\n  return hookName + \" must be used within a data router.  See https://reactrouter.com/v6/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React.useContext(UNSAFE_DataRouterContext);\n  !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React.useContext(UNSAFE_DataRouterStateContext);\n  !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return state;\n}\n// External hooks\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nfunction useLinkClickHandler(to, _temp) {\n  let {\n    target,\n    replace: replaceProp,\n    state,\n    preventScrollReset,\n    relative,\n    viewTransition\n  } = _temp === void 0 ? {} : _temp;\n  let navigate = useNavigate();\n  let location = useLocation();\n  let path = useResolvedPath(to, {\n    relative\n  });\n  return React.useCallback(event => {\n    if (shouldProcessLinkClick(event, target)) {\n      event.preventDefault();\n      // If the URL hasn't changed, a regular <a> will do a replace instead of\n      // a push, so do the same here unless the replace prop is explicitly set\n      let replace = replaceProp !== undefined ? replaceProp : createPath(location) === createPath(path);\n      navigate(to, {\n        replace,\n        state,\n        preventScrollReset,\n        relative,\n        viewTransition\n      });\n    }\n  }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, viewTransition]);\n}\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nfunction useSearchParams(defaultInit) {\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(typeof URLSearchParams !== \"undefined\", \"You cannot use the `useSearchParams` hook in a browser that does not \" + \"support the URLSearchParams API. If you need to support Internet \" + \"Explorer 11, we recommend you load a polyfill such as \" + \"https://github.com/ungap/url-search-params.\") : void 0;\n  let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n  let hasSetSearchParamsRef = React.useRef(false);\n  let location = useLocation();\n  let searchParams = React.useMemo(() =>\n  // Only merge in the defaults if we haven't yet called setSearchParams.\n  // Once we call that we want those to take precedence, otherwise you can't\n  // remove a param with setSearchParams({}) if it has an initial value\n  getSearchParamsForLocation(location.search, hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current), [location.search]);\n  let navigate = useNavigate();\n  let setSearchParams = React.useCallback((nextInit, navigateOptions) => {\n    const newSearchParams = createSearchParams(typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit);\n    hasSetSearchParamsRef.current = true;\n    navigate(\"?\" + newSearchParams, navigateOptions);\n  }, [navigate, searchParams]);\n  return [searchParams, setSearchParams];\n}\nfunction validateClientSideSubmission() {\n  if (typeof document === \"undefined\") {\n    throw new Error(\"You are calling submit during the server render. \" + \"Try calling submit within a `useEffect` or callback instead.\");\n  }\n}\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => \"__\" + String(++fetcherId) + \"__\";\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nfunction useSubmit() {\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseSubmit);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let currentRouteId = UNSAFE_useRouteId();\n  return React.useCallback(function (target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    validateClientSideSubmission();\n    let {\n      action,\n      method,\n      encType,\n      formData,\n      body\n    } = getFormSubmissionInfo(target, basename);\n    if (options.navigate === false) {\n      let key = options.fetcherKey || getUniqueFetcherId();\n      router.fetch(key, currentRouteId, options.action || action, {\n        preventScrollReset: options.preventScrollReset,\n        formData,\n        body,\n        formMethod: options.method || method,\n        formEncType: options.encType || encType,\n        flushSync: options.flushSync\n      });\n    } else {\n      router.navigate(options.action || action, {\n        preventScrollReset: options.preventScrollReset,\n        formData,\n        body,\n        formMethod: options.method || method,\n        formEncType: options.encType || encType,\n        replace: options.replace,\n        state: options.state,\n        fromRouteId: currentRouteId,\n        flushSync: options.flushSync,\n        viewTransition: options.viewTransition\n      });\n    }\n  }, [router, basename, currentRouteId]);\n}\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nfunction useFormAction(action, _temp2) {\n  let {\n    relative\n  } = _temp2 === void 0 ? {} : _temp2;\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let routeContext = React.useContext(UNSAFE_RouteContext);\n  !routeContext ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFormAction must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n  let [match] = routeContext.matches.slice(-1);\n  // Shallow clone path so we can modify it below, otherwise we modify the\n  // object referenced by useMemo inside useResolvedPath\n  let path = _extends({}, useResolvedPath(action ? action : \".\", {\n    relative\n  }));\n  // If no action was specified, browsers will persist current search params\n  // when determining the path, so match that behavior\n  // https://github.com/remix-run/remix/issues/927\n  let location = useLocation();\n  if (action == null) {\n    // Safe to write to this directly here since if action was undefined, we\n    // would have called useResolvedPath(\".\") which will never include a search\n    path.search = location.search;\n    // When grabbing search params from the URL, remove any included ?index param\n    // since it might not apply to our contextual route.  We add it back based\n    // on match.route.index below\n    let params = new URLSearchParams(path.search);\n    let indexValues = params.getAll(\"index\");\n    let hasNakedIndexParam = indexValues.some(v => v === \"\");\n    if (hasNakedIndexParam) {\n      params.delete(\"index\");\n      indexValues.filter(v => v).forEach(v => params.append(\"index\", v));\n      let qs = params.toString();\n      path.search = qs ? \"?\" + qs : \"\";\n    }\n  }\n  if ((!action || action === \".\") && match.route.index) {\n    path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n  }\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the form action.  If this is a root navigation, then just use\n  // the raw basename which allows the basename to have full control over the\n  // presence of a trailing slash on root actions\n  if (basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nfunction useFetcher(_temp3) {\n  var _route$matches;\n  let {\n    key\n  } = _temp3 === void 0 ? {} : _temp3;\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseFetcher);\n  let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n  let fetcherData = React.useContext(FetchersContext);\n  let route = React.useContext(UNSAFE_RouteContext);\n  let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id;\n  !fetcherData ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a FetchersContext\") : UNSAFE_invariant(false) : void 0;\n  !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n  !(routeId != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n  // Fetcher key handling\n  // OK to call conditionally to feature detect `useId`\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  let defaultKey = useIdImpl ? useIdImpl() : \"\";\n  let [fetcherKey, setFetcherKey] = React.useState(key || defaultKey);\n  if (key && key !== fetcherKey) {\n    setFetcherKey(key);\n  } else if (!fetcherKey) {\n    // We will only fall through here when `useId` is not available\n    setFetcherKey(getUniqueFetcherId());\n  }\n  // Registration/cleanup\n  React.useEffect(() => {\n    router.getFetcher(fetcherKey);\n    return () => {\n      // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n      // will not delete immediately but instead queue up a delete after the\n      // fetcher returns to an `idle` state\n      router.deleteFetcher(fetcherKey);\n    };\n  }, [router, fetcherKey]);\n  // Fetcher additions\n  let load = React.useCallback((href, opts) => {\n    !routeId ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"No routeId available for fetcher.load()\") : UNSAFE_invariant(false) : void 0;\n    router.fetch(fetcherKey, routeId, href, opts);\n  }, [fetcherKey, routeId, router]);\n  let submitImpl = useSubmit();\n  let submit = React.useCallback((target, opts) => {\n    submitImpl(target, _extends({}, opts, {\n      navigate: false,\n      fetcherKey\n    }));\n  }, [fetcherKey, submitImpl]);\n  let FetcherForm = React.useMemo(() => {\n    let FetcherForm = /*#__PURE__*/React.forwardRef((props, ref) => {\n      return /*#__PURE__*/React.createElement(Form, _extends({}, props, {\n        navigate: false,\n        fetcherKey: fetcherKey,\n        ref: ref\n      }));\n    });\n    if (process.env.NODE_ENV !== \"production\") {\n      FetcherForm.displayName = \"fetcher.Form\";\n    }\n    return FetcherForm;\n  }, [fetcherKey]);\n  // Exposed FetcherWithComponents\n  let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n  let data = fetcherData.get(fetcherKey);\n  let fetcherWithComponents = React.useMemo(() => _extends({\n    Form: FetcherForm,\n    submit,\n    load\n  }, fetcher, {\n    data\n  }), [FetcherForm, submit, load, fetcher, data]);\n  return fetcherWithComponents;\n}\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nfunction useFetchers() {\n  let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n  return Array.from(state.fetchers.entries()).map(_ref11 => {\n    let [key, fetcher] = _ref11;\n    return _extends({}, fetcher, {\n      key\n    });\n  });\n}\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions = {};\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration(_temp4) {\n  let {\n    getKey,\n    storageKey\n  } = _temp4 === void 0 ? {} : _temp4;\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n  let {\n    restoreScrollPosition,\n    preventScrollReset\n  } = useDataRouterState(DataRouterStateHook.UseScrollRestoration);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let location = useLocation();\n  let matches = useMatches();\n  let navigation = useNavigation();\n  // Trigger manual scroll restoration while we're active\n  React.useEffect(() => {\n    window.history.scrollRestoration = \"manual\";\n    return () => {\n      window.history.scrollRestoration = \"auto\";\n    };\n  }, []);\n  // Save positions on pagehide\n  usePageHide(React.useCallback(() => {\n    if (navigation.state === \"idle\") {\n      let key = (getKey ? getKey(location, matches) : null) || location.key;\n      savedScrollPositions[key] = window.scrollY;\n    }\n    try {\n      sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions));\n    } catch (error) {\n      process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (\" + error + \").\") : void 0;\n    }\n    window.history.scrollRestoration = \"auto\";\n  }, [storageKey, getKey, navigation.state, location, matches]));\n  // Read in any saved scroll locations\n  if (typeof document !== \"undefined\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      try {\n        let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY);\n        if (sessionPositions) {\n          savedScrollPositions = JSON.parse(sessionPositions);\n        }\n      } catch (e) {\n        // no-op, use default empty object\n      }\n    }, [storageKey]);\n    // Enable scroll restoration in the router\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      let getKeyWithoutBasename = getKey && basename !== \"/\" ? (location, matches) => getKey( // Strip the basename to match useLocation()\n      _extends({}, location, {\n        pathname: stripBasename(location.pathname, basename) || location.pathname\n      }), matches) : getKey;\n      let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKeyWithoutBasename);\n      return () => disableScrollRestoration && disableScrollRestoration();\n    }, [router, basename, getKey]);\n    // Restore scrolling when state.restoreScrollPosition changes\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      // Explicit false means don't do anything (used for submissions)\n      if (restoreScrollPosition === false) {\n        return;\n      }\n      // been here before, scroll to it\n      if (typeof restoreScrollPosition === \"number\") {\n        window.scrollTo(0, restoreScrollPosition);\n        return;\n      }\n      // try to scroll to the hash\n      if (location.hash) {\n        let el = document.getElementById(decodeURIComponent(location.hash.slice(1)));\n        if (el) {\n          el.scrollIntoView();\n          return;\n        }\n      }\n      // Don't reset if this navigation opted out\n      if (preventScrollReset === true) {\n        return;\n      }\n      // otherwise go to the top on new locations\n      window.scrollTo(0, 0);\n    }, [location, restoreScrollPosition, preventScrollReset]);\n  }\n}\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction useBeforeUnload(callback, options) {\n  let {\n    capture\n  } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? {\n      capture\n    } : undefined;\n    window.addEventListener(\"beforeunload\", callback, opts);\n    return () => {\n      window.removeEventListener(\"beforeunload\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.  This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(callback, options) {\n  let {\n    capture\n  } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? {\n      capture\n    } : undefined;\n    window.addEventListener(\"pagehide\", callback, opts);\n    return () => {\n      window.removeEventListener(\"pagehide\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open.  Use at your own risk.\n */\nfunction usePrompt(_ref12) {\n  let {\n    when,\n    message\n  } = _ref12;\n  let blocker = useBlocker(when);\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\") {\n      let proceed = window.confirm(message);\n      if (proceed) {\n        // This timeout is needed to avoid a weird \"race\" on POP navigations\n        // between the `window.history` revert navigation and the result of\n        // `window.confirm`\n        setTimeout(blocker.proceed, 0);\n      } else {\n        blocker.reset();\n      }\n    }\n  }, [blocker, message]);\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\" && !when) {\n      blocker.reset();\n    }\n  }, [blocker, when]);\n}\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href.  You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(to, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  let vtContext = React.useContext(ViewTransitionContext);\n  !(vtContext != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`.  \" + \"Did you accidentally import `RouterProvider` from `react-router`?\") : UNSAFE_invariant(false) : void 0;\n  let {\n    basename\n  } = useDataRouterContext(DataRouterHook.useViewTransitionState);\n  let path = useResolvedPath(to, {\n    relative: opts.relative\n  });\n  if (!vtContext.isTransitioning) {\n    return false;\n  }\n  let currentPath = stripBasename(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;\n  let nextPath = stripBasename(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;\n  // Transition is active if we're going to or coming from the indicated\n  // destination.  This ensures that other PUSH navigations that reverse\n  // an indicated transition apply.  I.e., on the list view you have:\n  //\n  //   <NavLink to=\"/details/1\" viewTransition>\n  //\n  // If you click the breadcrumb back to the list view:\n  //\n  //   <NavLink to=\"/list\" viewTransition>\n  //\n  // We should apply the transition because it's indicated as active going\n  // from /list -> /details/1 and therefore should be active on the reverse\n  // (even though this isn't strictly a POP reverse)\n  return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n//#endregion\n\n// v5 isn't in TypeScript, they'll also lose the @types/react-router with this\n// but not worried about that for now.\nfunction CompatRoute(props) {\n  let {\n    location,\n    path\n  } = props;\n  if (!props.exact) path += \"/*\";\n  return /*#__PURE__*/React.createElement(Routes, {\n    location: location\n  }, /*#__PURE__*/React.createElement(Route, {\n    path: path,\n    element: /*#__PURE__*/React.createElement(Route$1, _extends({}, props))\n  }));\n}\n// Copied with 💜 from https://github.com/bvaughn/react-resizable-panels/blob/main/packages/react-resizable-panels/src/hooks/useIsomorphicEffect.ts\nconst canUseEffectHooks = !!(typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\");\nconst useIsomorphicLayoutEffect = canUseEffectHooks ? React.useLayoutEffect : () => {};\nfunction CompatRouter(_ref) {\n  let {\n    children\n  } = _ref;\n  let history = useHistory();\n  let [state, setState] = React.useState(() => ({\n    location: history.location,\n    action: history.action\n  }));\n  useIsomorphicLayoutEffect(() => {\n    history.listen((location, action) => setState({\n      location,\n      action\n    }));\n  }, [history]);\n  return /*#__PURE__*/React.createElement(Router, {\n    navigationType: state.action,\n    location: state.location,\n    navigator: history\n  }, /*#__PURE__*/React.createElement(Routes, null, /*#__PURE__*/React.createElement(Route, {\n    path: \"*\",\n    element: children\n  })));\n}\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n/**\n * A `<Router>` that may not navigate to any other location. This is useful\n * on the server where there is no stateful UI.\n */\nfunction StaticRouter(_ref2) {\n  let {\n    basename,\n    children,\n    location: locationProp = \"/\"\n  } = _ref2;\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n  let action = Action.Pop;\n  let location = {\n    pathname: locationProp.pathname || \"/\",\n    search: locationProp.search || \"\",\n    hash: locationProp.hash || \"\",\n    state: locationProp.state != null ? locationProp.state : null,\n    key: locationProp.key || \"default\"\n  };\n  let staticNavigator = {\n    createHref(to) {\n      return typeof to === \"string\" ? to : createPath$1(to);\n    },\n    encodeLocation(to) {\n      let href = typeof to === \"string\" ? to : createPath$1(to);\n      // Treating this as a full URL will strip any trailing spaces so we need to\n      // pre-encode them since they might be part of a matching splat param from\n      // an ancestor route\n      href = href.replace(/ $/, \"%20\");\n      let encoded = ABSOLUTE_URL_REGEX.test(href) ? new URL(href) : new URL(href, \"http://localhost\");\n      return {\n        pathname: encoded.pathname,\n        search: encoded.search,\n        hash: encoded.hash\n      };\n    },\n    push(to) {\n      throw new Error(\"You cannot use navigator.push() on the server because it is a stateless \" + \"environment. This error was probably triggered when you did a \" + (\"`navigate(\" + JSON.stringify(to) + \")` somewhere in your app.\"));\n    },\n    replace(to) {\n      throw new Error(\"You cannot use navigator.replace() on the server because it is a stateless \" + \"environment. This error was probably triggered when you did a \" + (\"`navigate(\" + JSON.stringify(to) + \", { replace: true })` somewhere \") + \"in your app.\");\n    },\n    go(delta) {\n      throw new Error(\"You cannot use navigator.go() on the server because it is a stateless \" + \"environment. This error was probably triggered when you did a \" + (\"`navigate(\" + delta + \")` somewhere in your app.\"));\n    },\n    back() {\n      throw new Error(\"You cannot use navigator.back() on the server because it is a stateless \" + \"environment.\");\n    },\n    forward() {\n      throw new Error(\"You cannot use navigator.forward() on the server because it is a stateless \" + \"environment.\");\n    }\n  };\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: location,\n    navigationType: action,\n    navigator: staticNavigator,\n    static: true\n  });\n}\n\nexport { BrowserRouter, CompatRoute, CompatRouter, Form, HashRouter, Link, NavLink, RouterProvider, ScrollRestoration, StaticRouter, useScrollRestoration as UNSAFE_useScrollRestoration, createBrowserRouter, createHashRouter, createSearchParams, HistoryRouter as unstable_HistoryRouter, usePrompt as unstable_usePrompt, useBeforeUnload, useFetcher, useFetchers, useFormAction, useLinkClickHandler, useSearchParams, useSubmit };\n//# sourceMappingURL=index.js.map\n","import {\n    ScoredFilterPositioned,\n    SearchState,\n    Filter,\n    SearchResultType,\n    SearchUrlParam,\n    FilterType,\n    SynonymMap,\n    SearchActions,\n} from \"@ourworldindata/types\"\nimport {\n    deserializeSet,\n    createTopicFilter,\n    createCountryFilter,\n    createDatasetProductsFilter,\n    createDatasetNamespaceFilter,\n    createDatasetVersionFilter,\n    createDatasetProducerFilter,\n    isValidResultType,\n    serializeSet,\n    getFilterNamesOfType,\n    extractFiltersFromQuery,\n    splitIntoWords,\n    removeMatchedWordsWithStopWords,\n    createFilter,\n} from \"./searchUtils.js\"\nimport { useMemo, useEffect, useCallback } from \"react\"\nimport { useSearchParams } from \"react-router-dom-v5-compat\"\nimport { intersectionOfSets } from \"@ourworldindata/utils\"\n\nexport const DEFAULT_SEARCH_STATE: SearchState = {\n    query: \"\",\n    filters: [],\n    requireAllCountries: false,\n    resultType: SearchResultType.DATA,\n}\n\n/**\n * Hook that manages search state via URL search params.\n *\n * Key design principle: URL is the source of truth. State is derived\n * synchronously from URL params, including automatic filter detection.\n */\n\nexport function useSearchParamsState(\n    eligibleRegionNames: string[],\n    eligibleTopicsAndAreas: string[],\n    synonymMap: SynonymMap\n): {\n    state: SearchState\n    actions: SearchActions\n} {\n    const [searchParams, setSearchParams] = useSearchParams()\n\n    // Derive state from URL, applying automatic filters as part of derivation.\n    // This ensures state consistency when URLs are manually edited.\n    const state = useMemo(() => {\n        const rawState = searchParamsToState(\n            searchParams,\n            eligibleRegionNames,\n            eligibleTopicsAndAreas\n        )\n        return applyAutomaticFilters(rawState, eligibleRegionNames, synonymMap)\n    }, [searchParams, eligibleRegionNames, eligibleTopicsAndAreas, synonymMap])\n\n    // Sanitize URL in the following cases:\n    // - automatic filters have been applied\n    // - query params are invalid (e.g. \"countryes=France\")\n    // - query params contain invalid values (e.g. \"countries=Franc\")\n    useEffect(() => {\n        if (urlNeedsSanitization(searchParams, state)) {\n            // replace current entry in browser history to keep it clean.\n            setSearchParams(stateToSearchParams(state), { replace: true })\n        }\n    }, [searchParams, state, setSearchParams])\n\n    const updateParams = useCallback(\n        (\n            updater: (current: SearchState) => SearchState,\n            options?: { replace?: boolean }\n        ) => {\n            const newState = updater(state)\n            // Update URL atomically by applying auto-filters before setting search\n            // params. This ensures the unicity of browser history entries, query execution\n            // and analytics event per user action.\n            const stateWithAutoFilters = applyAutomaticFilters(\n                newState,\n                eligibleRegionNames,\n                synonymMap\n            )\n            setSearchParams(stateToSearchParams(stateWithAutoFilters), options)\n        },\n        [setSearchParams, state, eligibleRegionNames, synonymMap]\n    )\n\n    const actions = useMemo<SearchActions>(\n        () => ({\n            setQuery: (query: string) => {\n                updateParams((s) => ({ ...s, query: query.trim() }))\n            },\n\n            addCountry: (country: string) => {\n                updateParams((s) => {\n                    const exists = s.filters.some(\n                        (f) =>\n                            f.type === FilterType.COUNTRY && f.name === country\n                    )\n                    if (exists) return s\n                    return {\n                        ...s,\n                        filters: [...s.filters, createCountryFilter(country)],\n                    }\n                })\n            },\n\n            // Compound action to ensure a single entry in the browser history.\n            addCountryAndSetQuery: (country: string, query: string) => {\n                updateParams((s) => {\n                    const exists = s.filters.some(\n                        (f) =>\n                            f.type === FilterType.COUNTRY && f.name === country\n                    )\n                    return {\n                        ...s,\n                        query: query.trim(),\n                        filters: exists\n                            ? s.filters\n                            : [...s.filters, createCountryFilter(country)],\n                    }\n                })\n            },\n\n            removeCountry: (country: string) => {\n                updateParams((s) => {\n                    const newFilters = s.filters.filter(\n                        (f) =>\n                            !(\n                                f.type === FilterType.COUNTRY &&\n                                f.name === country\n                            )\n                    )\n                    const hasCountryFilters = newFilters.some(\n                        (f) => f.type === FilterType.COUNTRY\n                    )\n                    return {\n                        ...s,\n                        filters: newFilters,\n                        requireAllCountries: hasCountryFilters\n                            ? s.requireAllCountries\n                            : false,\n                    }\n                })\n            },\n\n            setTopic: (topic: string) => {\n                updateParams((s) => {\n                    const newFilters = s.filters.filter(\n                        (f) => f.type !== FilterType.TOPIC\n                    )\n                    return {\n                        ...s,\n                        filters: [...newFilters, createTopicFilter(topic)],\n                    }\n                })\n            },\n\n            // Compound action to ensure a single entry in the browser history.\n            setTopicAndClearQuery: (topic: string) => {\n                updateParams((s) => {\n                    const newFilters = s.filters.filter(\n                        (f) => f.type !== FilterType.TOPIC\n                    )\n                    return {\n                        ...s,\n                        query: \"\",\n                        filters: [...newFilters, createTopicFilter(topic)],\n                    }\n                })\n            },\n\n            removeTopic: (topic: string) => {\n                updateParams((s) => ({\n                    ...s,\n                    filters: s.filters.filter(\n                        (f) =>\n                            !(f.type === FilterType.TOPIC && f.name === topic)\n                    ),\n                }))\n            },\n\n            addFilter: (filter: Filter) => {\n                updateParams((s) => {\n                    const exists = s.filters.some(\n                        (f) => f.type === filter.type && f.name === filter.name\n                    )\n                    if (exists) return s\n                    return { ...s, filters: [...s.filters, filter] }\n                })\n            },\n\n            removeFilter: (filter: Filter) => {\n                updateParams((s) => {\n                    const newFilters = s.filters.filter(\n                        (f) =>\n                            !(f.type === filter.type && f.name === filter.name)\n                    )\n                    const hasCountryFilters = newFilters.some(\n                        (f) => f.type === FilterType.COUNTRY\n                    )\n                    return {\n                        ...s,\n                        filters: newFilters,\n                        requireAllCountries:\n                            filter.type === FilterType.COUNTRY &&\n                            !hasCountryFilters\n                                ? false\n                                : s.requireAllCountries,\n                    }\n                })\n            },\n\n            toggleRequireAllCountries: () => {\n                updateParams((s) => ({\n                    ...s,\n                    requireAllCountries: !s.requireAllCountries,\n                }))\n            },\n\n            setResultType: (resultType: SearchResultType) => {\n                updateParams((s) => ({ ...s, resultType }))\n            },\n\n            replaceQueryWithFilter: (filter: ScoredFilterPositioned) => {\n                updateParams((s) => replaceQueryWordsWithFilters(s, [filter]), {\n                    replace: true,\n                })\n            },\n\n            reset: () => {\n                setSearchParams(new URLSearchParams())\n            },\n        }),\n        [updateParams, setSearchParams]\n    )\n\n    return { state, actions }\n}\n\n/**\n * Derives SearchState from URLSearchParams. Sanitizes parameters before using\n * them. If parameters are missing, defaults are used.\n */\nexport function searchParamsToState(\n    searchParams: URLSearchParams,\n    eligibleRegionNames: string[],\n    eligibleTopicsAndAreas: string[]\n): SearchState {\n    const topicsSet = intersectionOfSets([\n        deserializeSet(searchParams.get(\"topics\")),\n        new Set(eligibleTopicsAndAreas),\n    ])\n    const countriesSet = intersectionOfSets([\n        deserializeSet(searchParams.get(\"countries\")),\n        new Set(eligibleRegionNames),\n    ])\n    const datasetsSet = new Set(\n        [...deserializeSet(searchParams.get(\"datasetProducts\"))].filter(Boolean)\n    )\n    const namespacesSet = new Set(\n        [...deserializeSet(searchParams.get(\"datasetNamespaces\"))].filter(\n            Boolean\n        )\n    )\n    const versionsSet = new Set(\n        [...deserializeSet(searchParams.get(\"datasetVersions\"))].filter(Boolean)\n    )\n    const producersSet = new Set(\n        [...deserializeSet(searchParams.get(\"datasetProducers\"))].filter(\n            Boolean\n        )\n    )\n\n    const filters: Filter[] = [\n        [...topicsSet].map((topic) => createTopicFilter(topic)),\n        [...countriesSet].map((country) => createCountryFilter(country)),\n        [...datasetsSet].map((dataset) => createDatasetProductsFilter(dataset)),\n        [...namespacesSet].map((namespace) =>\n            createDatasetNamespaceFilter(namespace)\n        ),\n        [...versionsSet].map((version) => createDatasetVersionFilter(version)),\n        [...producersSet].map((producer) =>\n            createDatasetProducerFilter(producer)\n        ),\n    ].flat()\n\n    const resultTypeParam = searchParams.get(\"resultType\") ?? undefined\n\n    return {\n        query: searchParams.get(\"q\") ?? DEFAULT_SEARCH_STATE.query,\n        filters,\n        requireAllCountries:\n            searchParams.get(\"requireAllCountries\") === \"true\" ||\n            DEFAULT_SEARCH_STATE.requireAllCountries,\n        resultType: isValidResultType(resultTypeParam)\n            ? resultTypeParam\n            : DEFAULT_SEARCH_STATE.resultType,\n    }\n}\n\n/**\n * Converts SearchState to URLSearchParams, only including non-default values.\n */\nexport function stateToSearchParams(state: SearchState): URLSearchParams {\n    const params = new URLSearchParams()\n\n    if (state.query) {\n        params.set(SearchUrlParam.QUERY, state.query)\n    }\n\n    const topics = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.TOPIC)\n    )\n    if (topics) {\n        params.set(SearchUrlParam.TOPIC, topics)\n    }\n\n    const countries = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.COUNTRY)\n    )\n    if (countries) {\n        params.set(SearchUrlParam.COUNTRY, countries)\n    }\n\n    const datasets = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_PRODUCT)\n    )\n    if (datasets) {\n        params.set(SearchUrlParam.DATASET_PRODUCT, datasets)\n    }\n\n    const namespaces = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_NAMESPACE)\n    )\n    if (namespaces) {\n        params.set(SearchUrlParam.DATASET_NAMESPACE, namespaces)\n    }\n\n    const versions = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_VERSION)\n    )\n    if (versions) {\n        params.set(SearchUrlParam.DATASET_VERSION, versions)\n    }\n\n    const producers = serializeSet(\n        getFilterNamesOfType(state.filters, FilterType.DATASET_PRODUCER)\n    )\n    if (producers) {\n        params.set(SearchUrlParam.DATASET_PRODUCER, producers)\n    }\n\n    if (state.requireAllCountries) {\n        params.set(SearchUrlParam.REQUIRE_ALL_COUNTRIES, \"true\")\n    }\n\n    // Only include resultType if not the default\n    if (state.resultType !== DEFAULT_SEARCH_STATE.resultType) {\n        params.set(SearchUrlParam.RESULT_TYPE, state.resultType)\n    }\n\n    return params\n}\n\n/**\n * Checks if URL params need sanitization (i.e., contain invalid values that\n * were filtered out during parsing).\n */\nexport function urlNeedsSanitization(\n    searchParams: URLSearchParams,\n    state: SearchState\n): boolean {\n    const sanitizedParams = stateToSearchParams(state)\n    return searchParams.toString() !== sanitizedParams.toString()\n}\n\n/**\n * Core logic for replacing query words with filters.\n * Used by both automatic filter detection and manual filter suggestions.\n */\nexport function replaceQueryWordsWithFilters(\n    state: SearchState,\n    filtersWithPositions: ScoredFilterPositioned[]\n): SearchState {\n    if (filtersWithPositions.length === 0) return state\n\n    // Collect all positions that need to be removed from the query\n    const allPositions = filtersWithPositions.flatMap((f) => f.positions)\n\n    // Remove matched words from query\n    const queryWords = splitIntoWords(state.query)\n    const newQuery = removeMatchedWordsWithStopWords(queryWords, allPositions)\n\n    // Add new filters (avoiding duplicates)\n    const existingFilterKeys = new Set(\n        state.filters.map((f) => `${f.type}:${f.name}`)\n    )\n    const newFilters = filtersWithPositions\n        .filter((f) => !existingFilterKeys.has(`${f.type}:${f.name}`))\n        // do not include positions in the state, which would break assumptions\n        // for deep equality in analytics logging when automatic filters are applied\n        .map((f) => createFilter(f.type)(f.name))\n\n    return {\n        ...state,\n        query: newQuery.trim(),\n        filters: [...state.filters, ...newFilters],\n    }\n}\n\n/**\n * Applies automatic country filters detected in the query.\n * Extracts exact country name matches from the query and adds them as filters,\n * removing the matched words from the query string.\n */\nexport function applyAutomaticFilters(\n    state: SearchState,\n    allRegionNames: string[],\n    synonymMap: SynonymMap\n): SearchState {\n    if (!state.query) return state\n\n    const matches = extractFiltersFromQuery(\n        state.query,\n        allRegionNames,\n        [], // do not suggest topics for auto-detection\n        state.filters,\n        { threshold: 1, limit: 1 }, // only exact matches\n        synonymMap\n    )\n\n    // Only auto-apply exact country matches\n    const countryMatches = matches.filter(\n        (match) => match.type === FilterType.COUNTRY\n    )\n\n    return replaceQueryWordsWithFilters(state, countryMatches)\n}\n","// src/cache/createBrowserLocalStorageCache.ts\nfunction createBrowserLocalStorageCache(options) {\n  let storage;\n  const namespaceKey = `algolia-client-js-${options.key}`;\n  function getStorage() {\n    if (storage === void 0) {\n      storage = options.localStorage || window.localStorage;\n    }\n    return storage;\n  }\n  function getNamespace() {\n    return JSON.parse(getStorage().getItem(namespaceKey) || \"{}\");\n  }\n  function setNamespace(namespace) {\n    getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n  }\n  function removeOutdatedCacheItems() {\n    const timeToLive = options.timeToLive ? options.timeToLive * 1e3 : null;\n    const namespace = getNamespace();\n    const filteredNamespaceWithoutOldFormattedCacheItems = Object.fromEntries(\n      Object.entries(namespace).filter(([, cacheItem]) => {\n        return cacheItem.timestamp !== void 0;\n      })\n    );\n    setNamespace(filteredNamespaceWithoutOldFormattedCacheItems);\n    if (!timeToLive) {\n      return;\n    }\n    const filteredNamespaceWithoutExpiredItems = Object.fromEntries(\n      Object.entries(filteredNamespaceWithoutOldFormattedCacheItems).filter(([, cacheItem]) => {\n        const currentTimestamp = (/* @__PURE__ */ new Date()).getTime();\n        const isExpired = cacheItem.timestamp + timeToLive < currentTimestamp;\n        return !isExpired;\n      })\n    );\n    setNamespace(filteredNamespaceWithoutExpiredItems);\n  }\n  return {\n    get(key, defaultValue, events = {\n      miss: () => Promise.resolve()\n    }) {\n      return Promise.resolve().then(() => {\n        removeOutdatedCacheItems();\n        return getNamespace()[JSON.stringify(key)];\n      }).then((value) => {\n        return Promise.all([value ? value.value : defaultValue(), value !== void 0]);\n      }).then(([value, exists]) => {\n        return Promise.all([value, exists || events.miss(value)]);\n      }).then(([value]) => value);\n    },\n    set(key, value) {\n      return Promise.resolve().then(() => {\n        const namespace = getNamespace();\n        namespace[JSON.stringify(key)] = {\n          timestamp: (/* @__PURE__ */ new Date()).getTime(),\n          value\n        };\n        getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n        return value;\n      });\n    },\n    delete(key) {\n      return Promise.resolve().then(() => {\n        const namespace = getNamespace();\n        delete namespace[JSON.stringify(key)];\n        getStorage().setItem(namespaceKey, JSON.stringify(namespace));\n      });\n    },\n    clear() {\n      return Promise.resolve().then(() => {\n        getStorage().removeItem(namespaceKey);\n      });\n    }\n  };\n}\n\n// src/cache/createNullCache.ts\nfunction createNullCache() {\n  return {\n    get(_key, defaultValue, events = {\n      miss: () => Promise.resolve()\n    }) {\n      const value = defaultValue();\n      return value.then((result) => Promise.all([result, events.miss(result)])).then(([result]) => result);\n    },\n    set(_key, value) {\n      return Promise.resolve(value);\n    },\n    delete(_key) {\n      return Promise.resolve();\n    },\n    clear() {\n      return Promise.resolve();\n    }\n  };\n}\n\n// src/cache/createFallbackableCache.ts\nfunction createFallbackableCache(options) {\n  const caches = [...options.caches];\n  const current = caches.shift();\n  if (current === void 0) {\n    return createNullCache();\n  }\n  return {\n    get(key, defaultValue, events = {\n      miss: () => Promise.resolve()\n    }) {\n      return current.get(key, defaultValue, events).catch(() => {\n        return createFallbackableCache({ caches }).get(key, defaultValue, events);\n      });\n    },\n    set(key, value) {\n      return current.set(key, value).catch(() => {\n        return createFallbackableCache({ caches }).set(key, value);\n      });\n    },\n    delete(key) {\n      return current.delete(key).catch(() => {\n        return createFallbackableCache({ caches }).delete(key);\n      });\n    },\n    clear() {\n      return current.clear().catch(() => {\n        return createFallbackableCache({ caches }).clear();\n      });\n    }\n  };\n}\n\n// src/cache/createMemoryCache.ts\nfunction createMemoryCache(options = { serializable: true }) {\n  let cache = {};\n  return {\n    get(key, defaultValue, events = {\n      miss: () => Promise.resolve()\n    }) {\n      const keyAsString = JSON.stringify(key);\n      if (keyAsString in cache) {\n        return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]);\n      }\n      const promise = defaultValue();\n      return promise.then((value) => events.miss(value)).then(() => promise);\n    },\n    set(key, value) {\n      cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value;\n      return Promise.resolve(value);\n    },\n    delete(key) {\n      delete cache[JSON.stringify(key)];\n      return Promise.resolve();\n    },\n    clear() {\n      cache = {};\n      return Promise.resolve();\n    }\n  };\n}\n\n// src/constants.ts\nvar DEFAULT_CONNECT_TIMEOUT_BROWSER = 1e3;\nvar DEFAULT_READ_TIMEOUT_BROWSER = 2e3;\nvar DEFAULT_WRITE_TIMEOUT_BROWSER = 3e4;\nvar DEFAULT_CONNECT_TIMEOUT_NODE = 2e3;\nvar DEFAULT_READ_TIMEOUT_NODE = 5e3;\nvar DEFAULT_WRITE_TIMEOUT_NODE = 3e4;\n\n// src/createAlgoliaAgent.ts\nfunction createAlgoliaAgent(version) {\n  const algoliaAgent = {\n    value: `Algolia for JavaScript (${version})`,\n    add(options) {\n      const addedAlgoliaAgent = `; ${options.segment}${options.version !== void 0 ? ` (${options.version})` : \"\"}`;\n      if (algoliaAgent.value.indexOf(addedAlgoliaAgent) === -1) {\n        algoliaAgent.value = `${algoliaAgent.value}${addedAlgoliaAgent}`;\n      }\n      return algoliaAgent;\n    }\n  };\n  return algoliaAgent;\n}\n\n// src/createAuth.ts\nfunction createAuth(appId, apiKey, authMode = \"WithinHeaders\") {\n  const credentials = {\n    \"x-algolia-api-key\": apiKey,\n    \"x-algolia-application-id\": appId\n  };\n  return {\n    headers() {\n      return authMode === \"WithinHeaders\" ? credentials : {};\n    },\n    queryParameters() {\n      return authMode === \"WithinQueryParameters\" ? credentials : {};\n    }\n  };\n}\n\n// src/createIterablePromise.ts\nfunction createIterablePromise({\n  func,\n  validate,\n  aggregator,\n  error,\n  timeout = () => 0\n}) {\n  const retry = (previousResponse) => {\n    return new Promise((resolve, reject) => {\n      func(previousResponse).then(async (response) => {\n        if (aggregator) {\n          await aggregator(response);\n        }\n        if (await validate(response)) {\n          return resolve(response);\n        }\n        if (error && await error.validate(response)) {\n          return reject(new Error(await error.message(response)));\n        }\n        return setTimeout(\n          () => {\n            retry(response).then(resolve).catch(reject);\n          },\n          await timeout()\n        );\n      }).catch((err) => {\n        reject(err);\n      });\n    });\n  };\n  return retry();\n}\n\n// src/getAlgoliaAgent.ts\nfunction getAlgoliaAgent({ algoliaAgents, client, version }) {\n  const defaultAlgoliaAgent = createAlgoliaAgent(version).add({\n    segment: client,\n    version\n  });\n  algoliaAgents.forEach((algoliaAgent) => defaultAlgoliaAgent.add(algoliaAgent));\n  return defaultAlgoliaAgent;\n}\n\n// src/logger/createNullLogger.ts\nfunction createNullLogger() {\n  return {\n    debug(_message, _args) {\n      return Promise.resolve();\n    },\n    info(_message, _args) {\n      return Promise.resolve();\n    },\n    error(_message, _args) {\n      return Promise.resolve();\n    }\n  };\n}\n\n// src/transporter/createStatefulHost.ts\nvar EXPIRATION_DELAY = 2 * 60 * 1e3;\nfunction createStatefulHost(host, status = \"up\") {\n  const lastUpdate = Date.now();\n  function isUp() {\n    return status === \"up\" || Date.now() - lastUpdate > EXPIRATION_DELAY;\n  }\n  function isTimedOut() {\n    return status === \"timed out\" && Date.now() - lastUpdate <= EXPIRATION_DELAY;\n  }\n  return { ...host, status, lastUpdate, isUp, isTimedOut };\n}\n\n// src/transporter/errors.ts\nvar AlgoliaError = class extends Error {\n  name = \"AlgoliaError\";\n  constructor(message, name) {\n    super(message);\n    if (name) {\n      this.name = name;\n    }\n  }\n};\nvar IndexNotFoundError = class extends AlgoliaError {\n  constructor(indexName) {\n    super(`${indexName} does not exist`, \"IndexNotFoundError\");\n  }\n};\nvar IndicesInSameAppError = class extends AlgoliaError {\n  constructor() {\n    super(\"Indices are in the same application. Use operationIndex instead.\", \"IndicesInSameAppError\");\n  }\n};\nvar IndexAlreadyExistsError = class extends AlgoliaError {\n  constructor(indexName) {\n    super(`${indexName} index already exists.`, \"IndexAlreadyExistsError\");\n  }\n};\nvar ErrorWithStackTrace = class extends AlgoliaError {\n  stackTrace;\n  constructor(message, stackTrace, name) {\n    super(message, name);\n    this.stackTrace = stackTrace;\n  }\n};\nvar RetryError = class extends ErrorWithStackTrace {\n  constructor(stackTrace) {\n    super(\n      \"Unreachable hosts - your application id may be incorrect. If the error persists, please visit our help center https://alg.li/support-unreachable-hosts or reach out to the Algolia Support team: https://alg.li/support\",\n      stackTrace,\n      \"RetryError\"\n    );\n  }\n};\nvar ApiError = class extends ErrorWithStackTrace {\n  status;\n  constructor(message, status, stackTrace, name = \"ApiError\") {\n    super(message, stackTrace, name);\n    this.status = status;\n  }\n};\nvar DeserializationError = class extends AlgoliaError {\n  response;\n  constructor(message, response) {\n    super(message, \"DeserializationError\");\n    this.response = response;\n  }\n};\nvar DetailedApiError = class extends ApiError {\n  error;\n  constructor(message, status, error, stackTrace) {\n    super(message, status, stackTrace, \"DetailedApiError\");\n    this.error = error;\n  }\n};\n\n// src/transporter/helpers.ts\nfunction shuffle(array) {\n  const shuffledArray = array;\n  for (let c = array.length - 1; c > 0; c--) {\n    const b = Math.floor(Math.random() * (c + 1));\n    const a = array[c];\n    shuffledArray[c] = array[b];\n    shuffledArray[b] = a;\n  }\n  return shuffledArray;\n}\nfunction serializeUrl(host, path, queryParameters) {\n  const queryParametersAsString = serializeQueryParameters(queryParameters);\n  let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : \"\"}/${path.charAt(0) === \"/\" ? path.substring(1) : path}`;\n  if (queryParametersAsString.length) {\n    url += `?${queryParametersAsString}`;\n  }\n  return url;\n}\nfunction serializeQueryParameters(parameters) {\n  return Object.keys(parameters).filter((key) => parameters[key] !== void 0).sort().map(\n    (key) => `${key}=${encodeURIComponent(\n      Object.prototype.toString.call(parameters[key]) === \"[object Array]\" ? parameters[key].join(\",\") : parameters[key]\n    ).replace(/\\+/g, \"%20\")}`\n  ).join(\"&\");\n}\nfunction serializeData(request, requestOptions) {\n  if (request.method === \"GET\" || request.data === void 0 && requestOptions.data === void 0) {\n    return void 0;\n  }\n  const data = Array.isArray(request.data) ? request.data : { ...request.data, ...requestOptions.data };\n  return JSON.stringify(data);\n}\nfunction serializeHeaders(baseHeaders, requestHeaders, requestOptionsHeaders) {\n  const headers = {\n    Accept: \"application/json\",\n    ...baseHeaders,\n    ...requestHeaders,\n    ...requestOptionsHeaders\n  };\n  const serializedHeaders = {};\n  Object.keys(headers).forEach((header) => {\n    const value = headers[header];\n    serializedHeaders[header.toLowerCase()] = value;\n  });\n  return serializedHeaders;\n}\nfunction deserializeSuccess(response) {\n  try {\n    return JSON.parse(response.content);\n  } catch (e) {\n    throw new DeserializationError(e.message, response);\n  }\n}\nfunction deserializeFailure({ content, status }, stackFrame) {\n  try {\n    const parsed = JSON.parse(content);\n    if (\"error\" in parsed) {\n      return new DetailedApiError(parsed.message, status, parsed.error, stackFrame);\n    }\n    return new ApiError(parsed.message, status, stackFrame);\n  } catch {\n  }\n  return new ApiError(content, status, stackFrame);\n}\n\n// src/transporter/responses.ts\nfunction isNetworkError({ isTimedOut, status }) {\n  return !isTimedOut && ~~status === 0;\n}\nfunction isRetryable({ isTimedOut, status }) {\n  return isTimedOut || isNetworkError({ isTimedOut, status }) || ~~(status / 100) !== 2 && ~~(status / 100) !== 4;\n}\nfunction isSuccess({ status }) {\n  return ~~(status / 100) === 2;\n}\n\n// src/transporter/stackTrace.ts\nfunction stackTraceWithoutCredentials(stackTrace) {\n  return stackTrace.map((stackFrame) => stackFrameWithoutCredentials(stackFrame));\n}\nfunction stackFrameWithoutCredentials(stackFrame) {\n  const modifiedHeaders = stackFrame.request.headers[\"x-algolia-api-key\"] ? { \"x-algolia-api-key\": \"*****\" } : {};\n  return {\n    ...stackFrame,\n    request: {\n      ...stackFrame.request,\n      headers: {\n        ...stackFrame.request.headers,\n        ...modifiedHeaders\n      }\n    }\n  };\n}\n\n// src/transporter/createTransporter.ts\nfunction createTransporter({\n  hosts,\n  hostsCache,\n  baseHeaders,\n  logger,\n  baseQueryParameters,\n  algoliaAgent,\n  timeouts,\n  requester,\n  requestsCache,\n  responsesCache\n}) {\n  async function createRetryableOptions(compatibleHosts) {\n    const statefulHosts = await Promise.all(\n      compatibleHosts.map((compatibleHost) => {\n        return hostsCache.get(compatibleHost, () => {\n          return Promise.resolve(createStatefulHost(compatibleHost));\n        });\n      })\n    );\n    const hostsUp = statefulHosts.filter((host) => host.isUp());\n    const hostsTimedOut = statefulHosts.filter((host) => host.isTimedOut());\n    const hostsAvailable = [...hostsUp, ...hostsTimedOut];\n    const compatibleHostsAvailable = hostsAvailable.length > 0 ? hostsAvailable : compatibleHosts;\n    return {\n      hosts: compatibleHostsAvailable,\n      getTimeout(timeoutsCount, baseTimeout) {\n        const timeoutMultiplier = hostsTimedOut.length === 0 && timeoutsCount === 0 ? 1 : hostsTimedOut.length + 3 + timeoutsCount;\n        return timeoutMultiplier * baseTimeout;\n      }\n    };\n  }\n  async function retryableRequest(request, requestOptions, isRead) {\n    const stackTrace = [];\n    const data = serializeData(request, requestOptions);\n    const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers);\n    const dataQueryParameters = request.method === \"GET\" ? {\n      ...request.data,\n      ...requestOptions.data\n    } : {};\n    const queryParameters = {\n      ...baseQueryParameters,\n      ...request.queryParameters,\n      ...dataQueryParameters\n    };\n    if (algoliaAgent.value) {\n      queryParameters[\"x-algolia-agent\"] = algoliaAgent.value;\n    }\n    if (requestOptions && requestOptions.queryParameters) {\n      for (const key of Object.keys(requestOptions.queryParameters)) {\n        if (!requestOptions.queryParameters[key] || Object.prototype.toString.call(requestOptions.queryParameters[key]) === \"[object Object]\") {\n          queryParameters[key] = requestOptions.queryParameters[key];\n        } else {\n          queryParameters[key] = requestOptions.queryParameters[key].toString();\n        }\n      }\n    }\n    let timeoutsCount = 0;\n    const retry = async (retryableHosts, getTimeout) => {\n      const host = retryableHosts.pop();\n      if (host === void 0) {\n        throw new RetryError(stackTraceWithoutCredentials(stackTrace));\n      }\n      const timeout = { ...timeouts, ...requestOptions.timeouts };\n      const payload = {\n        data,\n        headers,\n        method: request.method,\n        url: serializeUrl(host, request.path, queryParameters),\n        connectTimeout: getTimeout(timeoutsCount, timeout.connect),\n        responseTimeout: getTimeout(timeoutsCount, isRead ? timeout.read : timeout.write)\n      };\n      const pushToStackTrace = (response2) => {\n        const stackFrame = {\n          request: payload,\n          response: response2,\n          host,\n          triesLeft: retryableHosts.length\n        };\n        stackTrace.push(stackFrame);\n        return stackFrame;\n      };\n      const response = await requester.send(payload);\n      if (isRetryable(response)) {\n        const stackFrame = pushToStackTrace(response);\n        if (response.isTimedOut) {\n          timeoutsCount++;\n        }\n        logger.info(\"Retryable failure\", stackFrameWithoutCredentials(stackFrame));\n        await hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? \"timed out\" : \"down\"));\n        return retry(retryableHosts, getTimeout);\n      }\n      if (isSuccess(response)) {\n        return deserializeSuccess(response);\n      }\n      pushToStackTrace(response);\n      throw deserializeFailure(response, stackTrace);\n    };\n    const compatibleHosts = hosts.filter(\n      (host) => host.accept === \"readWrite\" || (isRead ? host.accept === \"read\" : host.accept === \"write\")\n    );\n    const options = await createRetryableOptions(compatibleHosts);\n    return retry([...options.hosts].reverse(), options.getTimeout);\n  }\n  function createRequest(request, requestOptions = {}) {\n    const createRetryableRequest = () => {\n      return retryableRequest(request, requestOptions, isRead);\n    };\n    const isRead = request.useReadTransporter || request.method === \"GET\";\n    const cacheable = requestOptions.cacheable || request.cacheable;\n    if (cacheable !== true) {\n      return createRetryableRequest();\n    }\n    const key = {\n      request,\n      requestOptions,\n      transporter: {\n        queryParameters: baseQueryParameters,\n        headers: baseHeaders\n      }\n    };\n    return responsesCache.get(\n      key,\n      () => {\n        return requestsCache.get(\n          key,\n          () => (\n            /**\n             * Finally, if there is no request in progress with the same key,\n             * this `createRetryableRequest()` will actually trigger the\n             * retryable request.\n             */\n            requestsCache.set(key, createRetryableRequest()).then(\n              (response) => Promise.all([requestsCache.delete(key), response]),\n              (err) => Promise.all([requestsCache.delete(key), Promise.reject(err)])\n            ).then(([_, response]) => response)\n          )\n        );\n      },\n      {\n        /**\n         * Of course, once we get this response back from the server, we\n         * tell response cache to actually store the received response\n         * to be used later.\n         */\n        miss: (response) => responsesCache.set(key, response)\n      }\n    );\n  }\n  return {\n    hostsCache,\n    requester,\n    timeouts,\n    logger,\n    algoliaAgent,\n    baseHeaders,\n    baseQueryParameters,\n    hosts,\n    request: createRequest,\n    requestsCache,\n    responsesCache\n  };\n}\n\n// src/types/logger.ts\nvar LogLevelEnum = {\n  Debug: 1,\n  Info: 2,\n  Error: 3\n};\nexport {\n  AlgoliaError,\n  ApiError,\n  DEFAULT_CONNECT_TIMEOUT_BROWSER,\n  DEFAULT_CONNECT_TIMEOUT_NODE,\n  DEFAULT_READ_TIMEOUT_BROWSER,\n  DEFAULT_READ_TIMEOUT_NODE,\n  DEFAULT_WRITE_TIMEOUT_BROWSER,\n  DEFAULT_WRITE_TIMEOUT_NODE,\n  DeserializationError,\n  DetailedApiError,\n  ErrorWithStackTrace,\n  IndexAlreadyExistsError,\n  IndexNotFoundError,\n  IndicesInSameAppError,\n  LogLevelEnum,\n  RetryError,\n  createAlgoliaAgent,\n  createAuth,\n  createBrowserLocalStorageCache,\n  createFallbackableCache,\n  createIterablePromise,\n  createMemoryCache,\n  createNullCache,\n  createNullLogger,\n  createStatefulHost,\n  createTransporter,\n  deserializeFailure,\n  deserializeSuccess,\n  getAlgoliaAgent,\n  isNetworkError,\n  isRetryable,\n  isSuccess,\n  serializeData,\n  serializeHeaders,\n  serializeQueryParameters,\n  serializeUrl,\n  shuffle,\n  stackFrameWithoutCredentials,\n  stackTraceWithoutCredentials\n};\n//# sourceMappingURL=common.js.map","function m(){function r(t){return new Promise(s=>{let e=new XMLHttpRequest;e.open(t.method,t.url,!0),Object.keys(t.headers).forEach(n=>e.setRequestHeader(n,t.headers[n]));let i=(n,a)=>setTimeout(()=>{e.abort(),s({status:0,content:a,isTimedOut:!0})},n),u=i(t.connectTimeout,\"Connection timeout\"),o;e.onreadystatechange=()=>{e.readyState>e.OPENED&&o===void 0&&(clearTimeout(u),o=i(t.responseTimeout,\"Socket timeout\"))},e.onerror=()=>{e.status===0&&(clearTimeout(u),clearTimeout(o),s({content:e.responseText||\"Network request failed\",status:e.status,isTimedOut:!1}))},e.onload=()=>{clearTimeout(u),clearTimeout(o),s({content:e.responseText,status:e.status,isTimedOut:!1})},e.send(t.data)})}return{send:r}}export{m as createXhrRequester};\n//# sourceMappingURL=requester.xhr.js.map","// lite/builds/browser.ts\nimport {\n  createBrowserLocalStorageCache,\n  createFallbackableCache,\n  createMemoryCache,\n  createNullLogger\n} from \"@algolia/client-common\";\nimport { createXhrRequester } from \"@algolia/requester-browser-xhr\";\n\n// lite/src/liteClient.ts\nimport { createAuth, createTransporter, getAlgoliaAgent, shuffle } from \"@algolia/client-common\";\nvar apiClientVersion = \"5.49.1\";\nfunction getDefaultHosts(appId) {\n  return [\n    {\n      url: `${appId}-dsn.algolia.net`,\n      accept: \"read\",\n      protocol: \"https\"\n    },\n    {\n      url: `${appId}.algolia.net`,\n      accept: \"write\",\n      protocol: \"https\"\n    }\n  ].concat(\n    shuffle([\n      {\n        url: `${appId}-1.algolianet.com`,\n        accept: \"readWrite\",\n        protocol: \"https\"\n      },\n      {\n        url: `${appId}-2.algolianet.com`,\n        accept: \"readWrite\",\n        protocol: \"https\"\n      },\n      {\n        url: `${appId}-3.algolianet.com`,\n        accept: \"readWrite\",\n        protocol: \"https\"\n      }\n    ])\n  );\n}\nfunction createLiteClient({\n  appId: appIdOption,\n  apiKey: apiKeyOption,\n  authMode,\n  algoliaAgents,\n  ...options\n}) {\n  const auth = createAuth(appIdOption, apiKeyOption, authMode);\n  const transporter = createTransporter({\n    hosts: getDefaultHosts(appIdOption),\n    ...options,\n    algoliaAgent: getAlgoliaAgent({\n      algoliaAgents,\n      client: \"Lite\",\n      version: apiClientVersion\n    }),\n    baseHeaders: {\n      \"content-type\": \"text/plain\",\n      ...auth.headers(),\n      ...options.baseHeaders\n    },\n    baseQueryParameters: {\n      ...auth.queryParameters(),\n      ...options.baseQueryParameters\n    }\n  });\n  return {\n    transporter,\n    /**\n     * The `appId` currently in use.\n     */\n    appId: appIdOption,\n    /**\n     * The `apiKey` currently in use.\n     */\n    apiKey: apiKeyOption,\n    /**\n     * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties.\n     */\n    clearCache() {\n      return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => void 0);\n    },\n    /**\n     * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system.\n     */\n    get _ua() {\n      return transporter.algoliaAgent.value;\n    },\n    /**\n     * Adds a `segment` to the `x-algolia-agent` sent with every requests.\n     *\n     * @param segment - The algolia agent (user-agent) segment to add.\n     * @param version - The version of the agent.\n     */\n    addAlgoliaAgent(segment, version) {\n      transporter.algoliaAgent.add({ segment, version });\n    },\n    /**\n     * Helper method to switch the API key used to authenticate the requests.\n     *\n     * @param params - Method params.\n     * @param params.apiKey - The new API Key to use.\n     */\n    setClientApiKey({ apiKey }) {\n      if (!authMode || authMode === \"WithinHeaders\") {\n        transporter.baseHeaders[\"x-algolia-api-key\"] = apiKey;\n      } else {\n        transporter.baseQueryParameters[\"x-algolia-api-key\"] = apiKey;\n      }\n    },\n    /**\n     * Helper: calls the `search` method but with certainty that we will only request Algolia records (hits) and not facets.\n     * Disclaimer: We don't assert that the parameters you pass to this method only contains `hits` requests to prevent impacting search performances, this helper is purely for typing purposes.\n     *\n     * @summary Search multiple indices for `hits`.\n     * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     */\n    searchForHits(searchMethodParams, requestOptions) {\n      return this.search(searchMethodParams, requestOptions);\n    },\n    /**\n     * Helper: calls the `search` method but with certainty that we will only request Algolia facets and not records (hits).\n     * Disclaimer: We don't assert that the parameters you pass to this method only contains `facets` requests to prevent impacting search performances, this helper is purely for typing purposes.\n     *\n     * @summary Search multiple indices for `facets`.\n     * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     */\n    searchForFacets(searchMethodParams, requestOptions) {\n      return this.search(searchMethodParams, requestOptions);\n    },\n    /**\n     * This method lets you send requests to the Algolia REST API.\n     * @param customPost - The customPost object.\n     * @param customPost.path - Path of the endpoint, for example `1/newFeature`.\n     * @param customPost.parameters - Query parameters to apply to the current query.\n     * @param customPost.body - Parameters to send with the custom request.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     */\n    customPost({ path, parameters, body }, requestOptions) {\n      if (!path) {\n        throw new Error(\"Parameter `path` is required when calling `customPost`.\");\n      }\n      const requestPath = \"/{path}\".replace(\"{path}\", path);\n      const headers = {};\n      const queryParameters = parameters ? parameters : {};\n      const request = {\n        method: \"POST\",\n        path: requestPath,\n        queryParameters,\n        headers,\n        data: body ? body : {}\n      };\n      return transporter.request(request, requestOptions);\n    },\n    /**\n     * Retrieves recommendations from selected AI models.\n     *\n     * Required API Key ACLs:\n     *  - search\n     * @param getRecommendationsParams - The getRecommendationsParams object.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     */\n    getRecommendations(getRecommendationsParams, requestOptions) {\n      if (getRecommendationsParams && Array.isArray(getRecommendationsParams)) {\n        const newSignatureRequest = {\n          requests: getRecommendationsParams\n        };\n        getRecommendationsParams = newSignatureRequest;\n      }\n      if (!getRecommendationsParams) {\n        throw new Error(\"Parameter `getRecommendationsParams` is required when calling `getRecommendations`.\");\n      }\n      if (!getRecommendationsParams.requests) {\n        throw new Error(\"Parameter `getRecommendationsParams.requests` is required when calling `getRecommendations`.\");\n      }\n      const requestPath = \"/1/indexes/*/recommendations\";\n      const headers = {};\n      const queryParameters = {};\n      const request = {\n        method: \"POST\",\n        path: requestPath,\n        queryParameters,\n        headers,\n        data: getRecommendationsParams,\n        useReadTransporter: true,\n        cacheable: true\n      };\n      return transporter.request(request, requestOptions);\n    },\n    /**\n     * Sends multiple search requests to one or more indices.  This can be useful in these cases:  - Different indices for different purposes, such as, one index for products, another one for marketing content. - Multiple searches to the same index—for example, with different filters.  Use the helper `searchForHits` or `searchForFacets` to get the results in a more convenient format, if you already know the return type you want.\n     *\n     * Required API Key ACLs:\n     *  - search\n     * @param searchMethodParams - Muli-search request body. Results are returned in the same order as the requests.\n     * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions.\n     */\n    search(searchMethodParams, requestOptions) {\n      if (searchMethodParams && Array.isArray(searchMethodParams)) {\n        const newSignatureRequest = {\n          requests: searchMethodParams.map(({ params, ...legacyRequest }) => {\n            if (legacyRequest.type === \"facet\") {\n              return {\n                ...legacyRequest,\n                ...params,\n                type: \"facet\"\n              };\n            }\n            return {\n              ...legacyRequest,\n              ...params,\n              facet: void 0,\n              maxFacetHits: void 0,\n              facetQuery: void 0\n            };\n          })\n        };\n        searchMethodParams = newSignatureRequest;\n      }\n      if (!searchMethodParams) {\n        throw new Error(\"Parameter `searchMethodParams` is required when calling `search`.\");\n      }\n      if (!searchMethodParams.requests) {\n        throw new Error(\"Parameter `searchMethodParams.requests` is required when calling `search`.\");\n      }\n      const requestPath = \"/1/indexes/*/queries\";\n      const headers = {};\n      const queryParameters = {};\n      const request = {\n        method: \"POST\",\n        path: requestPath,\n        queryParameters,\n        headers,\n        data: searchMethodParams,\n        useReadTransporter: true,\n        cacheable: true\n      };\n      return transporter.request(request, requestOptions);\n    }\n  };\n}\n\n// lite/builds/browser.ts\nfunction liteClient(appId, apiKey, options) {\n  if (!appId || typeof appId !== \"string\") {\n    throw new Error(\"`appId` is missing.\");\n  }\n  if (!apiKey || typeof apiKey !== \"string\") {\n    throw new Error(\"`apiKey` is missing.\");\n  }\n  return createLiteClient({\n    appId,\n    apiKey,\n    timeouts: {\n      connect: 1e3,\n      read: 2e3,\n      write: 3e4\n    },\n    logger: createNullLogger(),\n    requester: createXhrRequester(),\n    algoliaAgents: [{ segment: \"Browser\" }],\n    authMode: \"WithinQueryParameters\",\n    responsesCache: createMemoryCache(),\n    requestsCache: createMemoryCache({ serializable: false }),\n    hostsCache: createFallbackableCache({\n      caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()]\n    }),\n    ...options\n  });\n}\nexport {\n  apiClientVersion,\n  liteClient\n};\n//# sourceMappingURL=browser.js.map","import { QueryClient, QueryCache } from \"@tanstack/react-query\"\nimport { liteClient, LiteClient } from \"algoliasearch/lite\"\nimport * as Sentry from \"@sentry/react\"\nimport {\n    ALGOLIA_ID,\n    ALGOLIA_SEARCH_KEY,\n} from \"../../settings/clientSettings.js\"\n\nlet queryClient: QueryClient | null = null\n\nexport const getSearchQueryClient = (): QueryClient => {\n    if (!queryClient) {\n        queryClient = new QueryClient({\n            defaultOptions: {\n                queries: {\n                    // In practice, stale queries do not result in another network\n                    // request, due to Algolia's caching. React Query's caching\n                    // (staleTime) should be considered a second line of defense.\n                    staleTime: 60 * 1000, // 1 minute\n                },\n            },\n            // Manually sending errors to Sentry as React Query silently captures\n            // errors. Some things to consider before setting up an error handling\n            // strategy:\n            // - throwOnError (v5) or useErrorBoundary (v4) defined at the query client\n            //   level means that errors in queries are thrown and can be caught by an\n            //   error boundary.\n            // - however, a global error boundary around the search component means that\n            //   a single fetch error (e.g. in SearchChartHitSmall) crashes the whole\n            //   search results page. This calls for a more fine-grained approach.\n            //\n            // Logging is not a substitute for actual error handling, but rather a way\n            // to gauge the prevalence of fetch errors in a React Query world, where\n            // queries are now automatically retried (3 times by default) before\n            // actually failing.\n            queryCache: new QueryCache({\n                onError: (error) => {\n                    Sentry.captureException(error)\n                },\n            }),\n        })\n    }\n    return queryClient\n}\n\nlet liteSearchClient: LiteClient | null = null\n\nexport const getLiteSearchClient = (): LiteClient => {\n    if (!liteSearchClient) {\n        liteSearchClient = liteClient(ALGOLIA_ID, ALGOLIA_SEARCH_KEY)\n    }\n    return liteSearchClient\n}\n","export const SearchResultHeaderSkeleton = () => {\n    return (\n        <div className=\"search-result-header-skeleton\">\n            <div className=\"search-result-header-skeleton__title\" />\n            <div className=\"search-result-header-skeleton__count\" />\n        </div>\n    )\n}\n","export const SearchDataTopicsResultsSkeleton = () => {\n    return (\n        <>\n            <div className=\"search-data-topics-results span-cols-14 grid grid-cols-12-full-width\">\n                <SearchChartHitMediumSkeleton />\n                <SearchChartHitMediumSkeleton />\n                <SearchChartHitMediumSkeleton />\n            </div>\n        </>\n    )\n}\n\nexport const SearchChartHitMediumSkeleton = () => (\n    <div className=\"search-data-topic--skeleton span-cols-14\">\n        <div className=\"search-data-topic__header--skeleton animate-pulse\"></div>\n        <ul className=\"search-data-topic__list--skeleton grid grid-cols-4\">\n            <CaptionedThumbnailSkeleton />\n            <CaptionedThumbnailSkeleton />\n            <CaptionedThumbnailSkeleton />\n            <CaptionedThumbnailSkeleton />\n        </ul>\n        <div className=\"search-data-topic__see-all-button--skeleton\" />\n    </div>\n)\n\nconst CaptionedThumbnailSkeleton = () => (\n    <li className=\"search-chart-skeleton animate-pulse span-cols-1\">\n        <div className=\"search-chart-skeleton__thumbnail\" />\n        <div className=\"search-chart-skeleton__title\" />\n        <div className=\"search-chart-skeleton__title\" />\n    </li>\n)\n","import { SearchResultHeaderSkeleton } from \"./SearchResultHeaderSkeleton.js\"\nimport { SearchChartHitMediumSkeleton } from \"./SearchDataTopicsResultsSkeleton.js\"\n\nexport const SearchDataResultsSkeleton = () => {\n    return (\n        <div className=\"search-data-results__hits animate-pulse\">\n            <SearchResultHeaderSkeleton />\n            <ul className=\"search-data-results__list\">\n                <li className=\"search-data-results__hit\">\n                    <SearchChartHitMediumSkeleton />\n                </li>\n                <li className=\"search-data-results__hit\">\n                    <SearchChartHitMediumSkeleton />\n                </li>\n                <li className=\"search-data-results__hit\">\n                    <SearchChartHitMediumSkeleton />\n                </li>\n            </ul>\n        </div>\n    )\n}\n","import { useQuery } from \"@tanstack/react-query\"\nimport {\n    SearchChartsResponse,\n    SearchChartHit,\n    SearchResultType,\n    FEATURED_METRICS_ID,\n} from \"@ourworldindata/types\"\nimport { SearchChartHitComponent } from \"./search/SearchChartHitComponent.js\"\nimport { createTopicFilter, SEARCH_BASE_PATH } from \"./search/searchUtils.js\"\nimport { stateToSearchParams } from \"./search/searchState.js\"\nimport { queryCharts, searchQueryKeys } from \"./search/queries.js\"\nimport { getLiteSearchClient } from \"./search/searchClients.js\"\nimport { SearchDataResultsSkeleton } from \"./search/SearchDataResultsSkeleton.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport { faMagnifyingGlass } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"classnames\"\n\nconst MAX_MEDIUM_RESULTS = 4\nconst MAX_SMALL_RESULTS = 5\n\nexport type FeaturedMetricsProps = {\n    topicName: string\n    className?: string\n    isDataPage?: boolean\n    id?: string\n}\n\nexport const FeaturedMetrics = ({\n    topicName,\n    className,\n    isDataPage = false,\n    id = FEATURED_METRICS_ID,\n}: FeaturedMetricsProps) => {\n    const liteSearchClient = getLiteSearchClient()\n\n    const searchState = {\n        query: \"\",\n        filters: [createTopicFilter(topicName)],\n        requireAllCountries: false,\n        resultType: SearchResultType.DATA,\n    }\n\n    const { data, isLoading, isError } = useQuery<SearchChartsResponse>({\n        // reusing the same query key function as search for simplicity but\n        // would technically collide if using the same query client instance\n        queryKey: searchQueryKeys.charts(searchState),\n        queryFn: () => queryCharts(liteSearchClient, searchState, 0),\n        enabled: Boolean(topicName),\n    })\n\n    if (isError || !topicName) return null\n\n    let hits: SearchChartHit[] = (data?.hits ?? []).slice(\n        0,\n        MAX_MEDIUM_RESULTS + MAX_SMALL_RESULTS\n    )\n    // for all-charts-vs-featured-v1 experiment, exclude a hit that\n    // links to the page we are already on.\n    if (isDataPage && typeof window !== \"undefined\") {\n        hits = hits.filter(\n            (hit) =>\n                hit.type !== \"chart\" ||\n                `/grapher/${hit.slug}` !== window.location.pathname\n        )\n    }\n\n    if (!isLoading && hits.length === 0) return null\n\n    const params = stateToSearchParams(searchState)\n    const searchHref = `${SEARCH_BASE_PATH}?${params.toString()}`\n\n    return (\n        <section className={cx(className, \"needs-dividers\")} id={id}>\n            {isDataPage ? (\n                <h2 className=\"featured-metrics__title\">\n                    <span>More Data on {topicName}</span>\n                </h2>\n            ) : (\n                <h1 className=\"h1-semibold\">\n                    <span>Featured Data on {topicName}</span>\n                    <a\n                        className=\"deep-link\"\n                        aria-labelledby={id}\n                        href={`#${id}`}\n                    />\n                </h1>\n            )}\n            {isLoading ? (\n                <SearchDataResultsSkeleton />\n            ) : (\n                <>\n                    <ul className=\"search-data-results__list\">\n                        {hits.map((hit, hitIndex) => {\n                            const variant =\n                                hitIndex < MAX_MEDIUM_RESULTS\n                                    ? \"medium\"\n                                    : \"small\"\n\n                            return (\n                                <li\n                                    className=\"search-data-results__hit\"\n                                    key={hit.objectID}\n                                >\n                                    <SearchChartHitComponent\n                                        hit={hit}\n                                        variant={variant}\n                                        selectedRegionNames={[]}\n                                        onClick={() => undefined}\n                                    />\n                                </li>\n                            )\n                        })}\n                    </ul>\n                    <div className=\"article-block__featured-metrics__see-all\">\n                        <Button\n                            theme=\"solid-vermillion\"\n                            text={`See all ${data?.nbHits ?? 0} charts on this topic`}\n                            href={searchHref}\n                            dataTrackNote=\"featured-metrics-see-all\"\n                            icon={faMagnifyingGlass}\n                            iconPosition=\"left\"\n                        />\n                    </div>\n                </>\n            )}\n        </section>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { Component, createRef } from \"react\"\nimport cx from \"classnames\"\n\nfunction getTotalOffset(element: HTMLElement): {\n    x: number\n    y: number\n} {\n    let y = 0\n    let x = 0\n    while (true) {\n        x += element.offsetLeft\n        y += element.offsetTop\n        if (!element.offsetParent) {\n            break\n        }\n        element = element.offsetParent as HTMLElement\n    }\n    return { x, y }\n}\n\nconst STICKY_NAV_HEIGHT = 54\nconst HEADING_SCROLL_MARGIN = 16\n\ninterface HeadingPosition {\n    id: string\n    yPosition: number\n}\n\ninterface StickyNavLink {\n    text: string\n    target: string\n}\n\ninterface StickyNavProps {\n    links: StickyNavLink[]\n    className?: string\n}\nclass StickyNav extends Component<\n    StickyNavProps,\n    {\n        headingPositions: HeadingPosition[]\n        currentHeadingIndex?: number\n        links: StickyNavLink[]\n    }\n> {\n    ulRef = createRef<HTMLUListElement>()\n    resizeObserver: ResizeObserver | null = null\n\n    override state = {\n        currentHeadingIndex: undefined,\n        headingPositions: [] as HeadingPosition[],\n        links: this.props.links,\n    }\n\n    handleResize = () => {\n        window.requestAnimationFrame(() => this.setHeadingPositions())\n    }\n\n    handleScroll: () => void = _.throttle(() => {\n        this.setCurrentHeading()\n    }, 50)\n\n    // Make sure that each item in the nav actually points to a heading in the page\n    filterValidLinks() {\n        const validLinks = this.state.links.filter(\n            (link) =>\n                link.target.startsWith(\"#\") &&\n                document.querySelector(link.target)\n        )\n\n        this.setState({\n            links: validLinks,\n        })\n    }\n\n    setCurrentHeading() {\n        const { scrollY } = window\n        let currentHeadingIndex = 0\n        for (let i = 0; i < this.state.headingPositions.length; i++) {\n            const heading = this.state.headingPositions[i]\n            const target =\n                heading.yPosition -\n                STICKY_NAV_HEIGHT -\n                HEADING_SCROLL_MARGIN -\n                // Additional clearance for height of actual element\n                32\n            if (scrollY <= target) {\n                break\n            } else {\n                currentHeadingIndex = i\n            }\n        }\n\n        const current = this.ulRef.current\n        if (current) {\n            const parent = current.parentElement\n            if (parent) {\n                const hasScrollbar = parent.scrollWidth < current.scrollWidth\n                if (hasScrollbar) {\n                    const listItem = current.children[\n                        currentHeadingIndex\n                    ] as HTMLElement\n                    const containerPadding = 32\n                    current.scrollTo({\n                        behavior: \"smooth\",\n                        left: listItem.offsetLeft - containerPadding,\n                    })\n                }\n            }\n        }\n\n        this.setState({\n            currentHeadingIndex,\n        })\n    }\n\n    setHeadingPositions() {\n        const headingPositions: HeadingPosition[] = []\n\n        this.state.links.forEach(({ target }, i) => {\n            const element = document.querySelector<HTMLElement>(target)\n            if (element) {\n                const { y } = getTotalOffset(element)\n                headingPositions.push({ id: target, yPosition: y })\n            } else {\n                // Because of filterValidLinks, this should never happen\n                // But if it does, pretend the heading exists\n                // 1 pixel after the preceding heading\n                const previousHeadingYPosition =\n                    i === 0 ? 0 : headingPositions[i - 1].yPosition\n                headingPositions.push({\n                    id: target,\n                    yPosition: previousHeadingYPosition + 1,\n                })\n            }\n        })\n\n        this.setState(\n            {\n                headingPositions,\n            },\n            () => {\n                this.setCurrentHeading()\n            }\n        )\n    }\n\n    override componentDidMount() {\n        this.filterValidLinks()\n        window.addEventListener(\"scroll\", this.handleScroll, { passive: true })\n        // Web fonts and grapher hydration make the page height change\n        // So we recalculate the heading positions whenever the document body changes size\n        this.resizeObserver = new ResizeObserver(this.handleResize)\n        this.resizeObserver.observe(document.body)\n    }\n\n    override componentWillUnmount() {\n        window.removeEventListener(\"scroll\", this.handleScroll)\n        this.resizeObserver?.disconnect()\n    }\n\n    override render() {\n        if (!this.state.links) return null\n        return (\n            <>\n                <style>\n                    {/* add scroll-margin-top to all elements with an ID */}\n                    {/* increase top margin for sticky columns so the nav doesn't obscure them */}\n                    {`\n                    [id] {\n                         scroll-margin-top:${\n                             STICKY_NAV_HEIGHT + HEADING_SCROLL_MARGIN\n                         }px;\n                    }\n                    .wp-sticky-container {\n                        top: 70px;\n                    }`}\n                </style>\n                <ul\n                    className={cx(\"sticky-nav-container\", this.props.className)}\n                    ref={this.ulRef}\n                >\n                    {this.state.links.map((link, i) => (\n                        <li key={link.target}>\n                            <a\n                                tabIndex={0}\n                                className={cx({\n                                    active:\n                                        i === this.state.currentHeadingIndex,\n                                })}\n                                href={link.target}\n                            >\n                                {link.text}\n                            </a>\n                        </li>\n                    ))}\n                </ul>\n            </>\n        )\n    }\n}\n\nexport default StickyNav\n","import { DataPageDataV2, joinTitleFragments } from \"@ourworldindata/types\"\nimport {\n    makeSource,\n    makeLastUpdated,\n    makeNextUpdate,\n    makeDateRange,\n    makeUnit,\n    makeUnitConversionFactor,\n    makeLinks,\n    SimpleMarkdownText,\n} from \"@ourworldindata/components\"\n\nexport default function KeyDataTable({\n    datapageData,\n    attribution,\n}: {\n    datapageData: DataPageDataV2\n    attribution: string\n}) {\n    const source = makeSource({\n        attribution: attribution,\n        owidProcessingLevel: datapageData.owidProcessingLevel,\n    })\n    const lastUpdated = makeLastUpdated(datapageData)\n    const nextUpdate = makeNextUpdate(datapageData)\n    const dateRange = makeDateRange(datapageData)\n    const unit = makeUnit(datapageData)\n    const unitConversionFactor = makeUnitConversionFactor(datapageData)\n    const links = makeLinks({ link: datapageData.source?.link })\n\n    return (\n        <div className=\"key-data-block grid grid-cols-4 grid-sm-cols-12\">\n            {datapageData.descriptionShort && (\n                <div className=\"key-data span-cols-4 span-sm-cols-12\">\n                    <div className=\"key-data-description-short__title\">\n                        {datapageData.title.title}\n                    </div>\n                    <div className=\"key-data-description-short__title-fragments\">\n                        {\n                            // This method may return undefined if both fields are empty\n                            joinTitleFragments(\n                                datapageData.attributionShort,\n                                datapageData.titleVariant\n                            )\n                        }\n                    </div>\n                    <div>\n                        <SimpleMarkdownText\n                            text={datapageData.descriptionShort}\n                            useParagraphs={false}\n                        />\n                    </div>\n                </div>\n            )}\n            {source && (\n                <div className=\"key-data span-cols-4 span-sm-cols-12\">\n                    <div className=\"key-data__title\">Source</div>\n                    <div>{source}</div>\n                </div>\n            )}\n            {lastUpdated && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">Last updated</div>\n                    <div>{lastUpdated}</div>\n                </div>\n            )}\n            {nextUpdate && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">Next expected update</div>\n                    <div>{nextUpdate}</div>\n                </div>\n            )}\n            {dateRange && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">Date range</div>\n                    <div>{dateRange}</div>\n                </div>\n            )}\n            {unit && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">Unit</div>\n                    <div>{unit}</div>\n                </div>\n            )}\n            {unitConversionFactor && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">\n                        Unit conversion factor\n                    </div>\n                    <div>{unitConversionFactor}</div>\n                </div>\n            )}\n            {links && (\n                <div className=\"key-data span-cols-2 span-sm-cols-6\">\n                    <div className=\"key-data__title\">Links</div>\n                    <div className=\"key-data__content--hide-overflow\">\n                        {links}\n                    </div>\n                </div>\n            )}\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport cx from \"classnames\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowDown } from \"@fortawesome/free-solid-svg-icons\"\nimport dayjs from \"dayjs\"\n\nimport {\n    DATAPAGE_ABOUT_THIS_DATA_SECTION_ID,\n    SimpleMarkdownText,\n    ExpandableToggle,\n    HtmlOrSimpleMarkdownText,\n} from \"@ourworldindata/components\"\nimport { DataPageDataV2, OwidOrigin } from \"@ourworldindata/types\"\nimport KeyDataTable from \"./KeyDataTable.js\"\n\nfunction getYearSuffixFromOrigin(origin: OwidOrigin) {\n    const year = origin.dateAccessed\n        ? dayjs(origin.dateAccessed, [\"YYYY-MM-DD\", \"YYYY\"]).year()\n        : origin.datePublished\n          ? dayjs(origin.datePublished, [\"YYYY-MM-DD\", \"YYYY\"]).year()\n          : undefined\n    if (year) return ` (${year})`\n    else return \"\"\n}\n\nexport default function AboutThisData({\n    datapageData,\n    hasFaq,\n    className,\n    id,\n}: {\n    datapageData: DataPageDataV2\n    hasFaq: boolean\n    className?: string\n    id?: string\n}) {\n    const hasDescriptionKey =\n        datapageData.descriptionKey && datapageData.descriptionKey.length > 0\n    const producersWithYear = _.uniq(\n        datapageData.origins.map(\n            (o) => `${o.producer}${getYearSuffixFromOrigin(o)}`\n        )\n    )\n    const attributionFragments = datapageData.attributions ?? producersWithYear\n    const attributionUnshortened = attributionFragments.join(\"; \")\n    const id_ = id ?? DATAPAGE_ABOUT_THIS_DATA_SECTION_ID\n\n    return (\n        <div\n            className={cx(\n                \"wrapper-about-this-data grid grid-cols-12\",\n                className\n            )}\n        >\n            {hasDescriptionKey ||\n            datapageData.descriptionFromProducer ||\n            datapageData.source?.additionalInfo ? (\n                <>\n                    <h2 id={id_} className=\"key-info__title span-cols-12\">\n                        What you should know about this indicator\n                    </h2>\n                    <div className=\"col-start-1 span-cols-8 span-lg-cols-7 span-sm-cols-12\">\n                        <div className=\"key-info__content\">\n                            {hasDescriptionKey && (\n                                <div className=\"key-info__key-description\">\n                                    {datapageData.descriptionKey.length ===\n                                    1 ? (\n                                        <SimpleMarkdownText\n                                            text={datapageData.descriptionKey[0].trim()}\n                                        />\n                                    ) : (\n                                        <ul>\n                                            {datapageData.descriptionKey.map(\n                                                (text, i) => (\n                                                    <li key={i}>\n                                                        <SimpleMarkdownText\n                                                            text={text.trim()}\n                                                            useParagraphs={\n                                                                false\n                                                            }\n                                                        />\n                                                    </li>\n                                                )\n                                            )}\n                                        </ul>\n                                    )}\n                                    {hasFaq && (\n                                        <a\n                                            className=\"key-info__learn-more\"\n                                            href=\"#faqs\"\n                                        >\n                                            Learn more in the FAQs\n                                            <FontAwesomeIcon\n                                                icon={faArrowDown}\n                                            />\n                                        </a>\n                                    )}\n                                </div>\n                            )}\n\n                            <div className=\"key-info__expandable-descriptions\">\n                                {datapageData.descriptionFromProducer && (\n                                    <ExpandableToggle\n                                        label={\n                                            datapageData.attributionShort\n                                                ? `How is this data described by its producer - ${datapageData.attributionShort}?`\n                                                : \"How is this data described by its producer?\"\n                                        }\n                                        content={\n                                            <div className=\"article-block__text\">\n                                                <SimpleMarkdownText\n                                                    text={\n                                                        datapageData.descriptionFromProducer\n                                                    }\n                                                />\n                                            </div>\n                                        }\n                                        isStacked={\n                                            !!datapageData.source\n                                                ?.additionalInfo\n                                        }\n                                    />\n                                )}\n                                {datapageData.source?.additionalInfo && (\n                                    <ExpandableToggle\n                                        label=\"Additional information about this data\"\n                                        content={\n                                            <div className=\"expandable-info-blocks__content\">\n                                                <HtmlOrSimpleMarkdownText\n                                                    text={datapageData.source?.additionalInfo.trim()}\n                                                />\n                                            </div>\n                                        }\n                                    />\n                                )}\n                            </div>\n                        </div>\n                    </div>\n                    <div className=\"key-info__right span-cols-4 span-lg-cols-5 span-sm-cols-12\">\n                        <KeyDataTable\n                            datapageData={datapageData}\n                            attribution={attributionUnshortened}\n                        />\n                    </div>\n                </>\n            ) : (\n                <>\n                    <h2\n                        className=\"about-this-data__title span-cols-3 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\"\n                        id={id_}\n                    >\n                        About this data\n                    </h2>\n                    <div className=\"col-start-4 span-cols-10 col-lg-start-5 span-lg-cols-8 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                        <KeyDataTable\n                            datapageData={datapageData}\n                            attribution={attributionUnshortened}\n                        />\n                    </div>\n                </>\n            )}\n        </div>\n    )\n}\n","import { createContext } from \"react\"\nimport {\n    LinkedAuthor,\n    LinkedCallouts,\n    LinkedChart,\n    LinkedIndicator,\n    OwidGdocMinimalPostInterface,\n    ImageMetadata,\n    RelatedChart,\n    LatestDataInsight,\n    OwidGdocHomepageMetadata,\n    DbEnrichedLatestWork,\n    NarrativeChartInfo,\n    MinimalTag,\n    LinkedStaticViz,\n} from \"@ourworldindata/types\"\n\nexport type Attachments = {\n    donors?: string[]\n    linkedAuthors?: LinkedAuthor[]\n    linkedCharts: Record<string, LinkedChart>\n    linkedIndicators: Record<number, LinkedIndicator>\n    linkedDocuments: Record<string, OwidGdocMinimalPostInterface>\n    imageMetadata: Record<string, ImageMetadata>\n    relatedCharts: RelatedChart[]\n    latestDataInsights?: LatestDataInsight[]\n    homepageMetadata?: OwidGdocHomepageMetadata\n    latestWorkLinks?: DbEnrichedLatestWork[]\n    linkedNarrativeCharts?: Record<string, NarrativeChartInfo>\n    linkedStaticViz?: Record<string, LinkedStaticViz>\n    tags: MinimalTag[]\n    linkedCallouts?: LinkedCallouts\n}\n\nexport const AttachmentsContext = createContext<Attachments>({\n    linkedAuthors: [],\n    linkedDocuments: {},\n    imageMetadata: {},\n    linkedCharts: {},\n    linkedIndicators: {},\n    relatedCharts: [],\n    latestDataInsights: [],\n    homepageMetadata: {},\n    latestWorkLinks: [],\n    linkedNarrativeCharts: {},\n    linkedStaticViz: {},\n    tags: [],\n    linkedCallouts: {},\n})\n","import { useContext, createContext } from \"react\"\nimport {\n    CalloutFunction,\n    ImageMetadata,\n    LinkedChart,\n    OwidGdocPostContent,\n    OwidGdocMinimalPostInterface,\n    LinkedIndicator,\n    OwidGdocDataInsightContent,\n    ContentGraphLinkType,\n    OwidGdocDataInsightInterface,\n    OwidGdocPostInterface,\n    OwidEnrichedGdocBlockTypeMap,\n    LinkedStaticViz,\n    OwidGdocType,\n} from \"@ourworldindata/types\"\n\nimport {\n    getCanonicalUrl,\n    getLinkType,\n    getUrlTarget,\n} from \"@ourworldindata/components\"\nimport {\n    formatAuthors,\n    getCalloutValue,\n    getRegionByNameOrVariantName,\n    makeLinkedCalloutKey,\n    traverseEnrichedBlock,\n    Url,\n} from \"@ourworldindata/utils\"\nimport { AttachmentsContext } from \"./AttachmentsContext.js\"\nimport { PROD_URL } from \"../SiteConstants.js\"\nimport { BAKED_BASE_URL, IS_ARCHIVE } from \"../../settings/clientSettings.js\"\n\nconst getOrigin = (url: string, base?: string): string | undefined => {\n    try {\n        return new URL(url, base).origin\n    } catch {\n        return undefined\n    }\n}\n\nexport function isExternalUrl(\n    linkType: ContentGraphLinkType,\n    url: string\n): boolean {\n    if (linkType !== ContentGraphLinkType.Url) return false\n    const bakedOrigin = getOrigin(BAKED_BASE_URL)\n    if (!bakedOrigin) return false\n    const linkOrigin = getOrigin(url, bakedOrigin)\n    if (!linkOrigin) return false\n    return linkOrigin !== bakedOrigin\n}\n\nexport const breadcrumbColorForCoverColor = (\n    coverColor: OwidGdocPostContent[\"cover-color\"]\n): \"white\" | \"blue\" => {\n    // exhaustive list of all possible cover colors\n    switch (coverColor) {\n        case \"sdg-color-1\": // red\n        case \"sdg-color-3\": // green\n        case \"sdg-color-4\": // red\n        case \"sdg-color-5\": // orange-red\n        case \"sdg-color-8\": // dark red\n        case \"sdg-color-10\": // purple\n        case \"sdg-color-13\": // dark green\n        case \"sdg-color-14\": // blue\n        case \"sdg-color-16\": // blue\n        case \"sdg-color-17\": // dark blue\n            return \"white\"\n        case \"sdg-color-2\": // orange\n        case \"sdg-color-6\": // light blue\n        case \"sdg-color-7\": // yellow\n        case \"sdg-color-9\": // orange\n        case \"sdg-color-11\": // yellow orange\n        case \"sdg-color-12\": // yellow-brown\n        case \"sdg-color-15\": // light green\n        case \"amber\": // amber\n        case undefined: // default cover color: blue-10\n            return \"blue\"\n    }\n}\n\nexport const useLinkedAuthor = (\n    name: string\n): {\n    name: string\n    slug: string | null\n    featuredImage: string | null\n    role?: string\n} => {\n    const { linkedAuthors } = useContext(AttachmentsContext)\n    const author = linkedAuthors?.find((author) => author.name === name)\n    if (!author) return { name, slug: null, featuredImage: null }\n    return author\n}\n\ntype LinkedDocument = OwidGdocMinimalPostInterface & { url: string }\n\nexport const getLinkedDocumentUrl = (\n    linkedDocument: Pick<OwidGdocMinimalPostInterface, \"slug\" | \"type\">,\n    originalUrl: string,\n    baseUrl: string = BAKED_BASE_URL\n): string => {\n    if (IS_ARCHIVE) {\n        baseUrl = PROD_URL\n    }\n\n    const parsedUrl = Url.fromURL(originalUrl)\n\n    let slug = linkedDocument.slug\n    if (linkedDocument.type === OwidGdocType.Profile) {\n        const entityParam = parsedUrl.queryParams.entity\n        if (entityParam) {\n            const region = getRegionByNameOrVariantName(entityParam)\n            if (region) {\n                slug = `${slug}/${region.slug}`\n            }\n        }\n    }\n\n    const canonicalUrl = getCanonicalUrl(baseUrl, {\n        slug,\n        content: { type: linkedDocument.type },\n    })\n\n    return `${canonicalUrl}${parsedUrl.hash}`\n}\n\nexport const useLinkedDocument = (\n    url: string\n): { linkedDocument?: LinkedDocument; errorMessage?: string } => {\n    const { linkedDocuments } = useContext(AttachmentsContext)\n    let errorMessage: string | undefined = undefined\n    let linkedDocument: OwidGdocMinimalPostInterface | undefined = undefined\n    const linkType = getLinkType(url)\n    if (linkType !== ContentGraphLinkType.Gdoc) {\n        return { linkedDocument }\n    }\n\n    const urlTarget = getUrlTarget(url)\n    linkedDocument = linkedDocuments?.[urlTarget] as\n        | OwidGdocMinimalPostInterface\n        | undefined\n\n    if (!linkedDocument) {\n        errorMessage = `Google doc URL ${url} isn't registered.`\n        return { errorMessage }\n    } else if (!linkedDocument.published) {\n        errorMessage = `Article with slug \"${linkedDocument.slug}\" isn't published.`\n    }\n\n    // Validate ?entity=X for profile-type docs (when provided)\n    const parsedUrl = Url.fromURL(url)\n    const entityParam = parsedUrl.queryParams.entity\n    if (\n        linkedDocument.type === OwidGdocType.Profile &&\n        entityParam &&\n        !errorMessage\n    ) {\n        const region = getRegionByNameOrVariantName(entityParam)\n        if (!region) {\n            errorMessage = `Unknown entity name \"${entityParam}\" in profile link.`\n        } else if (!linkedDocument.availableEntityCodes) {\n            errorMessage = `Unable to determine available entities for profile \"${linkedDocument.slug}\".`\n        } else if (!linkedDocument.availableEntityCodes.includes(region.code)) {\n            errorMessage = `Entity \"${entityParam}\" is not available for profile \"${linkedDocument.slug}\".`\n        }\n    }\n\n    // Don't return a linked document with a URL when there's a country\n    // validation error — this prevents rendering a broken link\n    if (errorMessage) {\n        return { errorMessage }\n    }\n\n    return {\n        linkedDocument: {\n            ...linkedDocument,\n            url: getLinkedDocumentUrl(linkedDocument, url),\n        },\n        errorMessage,\n    }\n}\n\nexport const useLinkedChart = (\n    url: string\n): { linkedChart?: LinkedChart; errorMessage?: string } => {\n    const { linkedCharts } = useContext(AttachmentsContext)\n    const linkType = getLinkType(url)\n    if (linkType !== \"grapher\" && linkType !== \"explorer\") return {}\n\n    const parsedOriginalUrl = Url.fromURL(url)\n    const urlTarget = getUrlTarget(url)\n    const linkedChart = linkedCharts?.[urlTarget]\n    if (!linkedChart) {\n        return {\n            errorMessage: `${linkType} chart with slug ${urlTarget} not found`,\n        }\n    }\n\n    const parsedResolvedUrl = Url.fromURL(linkedChart.resolvedUrl)\n    const resolvedUrl = parsedResolvedUrl.setQueryParams({\n        ...parsedResolvedUrl.queryParams,\n        ...parsedOriginalUrl.queryParams,\n    }).fullUrl\n\n    return { linkedChart: { ...linkedChart, resolvedUrl } }\n}\n\nexport const useLinkedIndicator = (\n    id: number\n): { linkedIndicator?: LinkedIndicator; errorMessage?: string } => {\n    const { linkedIndicators } = useContext(AttachmentsContext)\n\n    const linkedIndicator = linkedIndicators?.[id]\n\n    if (!linkedIndicator) {\n        return {\n            errorMessage: `Indicator with id ${id} not found`,\n        }\n    }\n\n    return { linkedIndicator }\n}\n\nexport const useImage = (\n    filename: string | undefined\n): ImageMetadata | undefined => {\n    const { imageMetadata } = useContext(AttachmentsContext)\n    if (!filename) return\n    const metadata = imageMetadata[filename]\n    return metadata\n}\n\nexport function useDonors(): string[] | undefined {\n    const { donors } = useContext(AttachmentsContext)\n    return donors\n}\n\nexport const useLinkedNarrativeChart = (name: string) => {\n    const { linkedNarrativeCharts } = useContext(AttachmentsContext)\n    return linkedNarrativeCharts?.[name]\n}\n\nexport const useLinkedStaticViz = (\n    name: string\n): LinkedStaticViz | undefined => {\n    const { linkedStaticViz } = useContext(AttachmentsContext)\n    return linkedStaticViz?.[name]\n}\n\n/**\n * Context provided to span-callout spans within a data-callout block.\n * Contains the URL and entity from the parent data-callout, and the\n * linked callout data from attachments.\n */\nexport interface DataCalloutContextType {\n    url: string\n}\n\nexport const DataCalloutContext = createContext<DataCalloutContextType | null>(\n    null\n)\n\nexport function useCalloutValue(\n    functionName: CalloutFunction,\n    parameters: string[]\n): string | undefined {\n    const { linkedCallouts = {} } = useContext(AttachmentsContext)\n    const calloutContext = useContext(DataCalloutContext)\n\n    if (!calloutContext) return undefined\n\n    const key = makeLinkedCalloutKey(calloutContext.url)\n\n    const linkedCallout = linkedCallouts[key]\n\n    if (!linkedCallout?.values) return undefined\n\n    return getCalloutValue(linkedCallout.values, functionName, parameters)\n}\n\nexport function getShortPageCitation(\n    authors: string[],\n    title: string,\n    publishedAt: Date | null\n) {\n    return `${formatAuthors(authors)} (${publishedAt?.getFullYear()}) - “${title}”`\n}\n\n/**\n * Takes a gdoc, block type, and number n and returns up to n first consecutive\n * blocks of the specified type e.g. takeConsecutiveBlocksOfType(gdoc, \"text\",\n * 3) will return up to 3 consecutive text blocks from the gdoc.\n *\n * If there are 2 text blocks, 1 image block, and then another text block, it\n * will return only the first 2 consecutive text blocks.\n **/\nexport function takeConsecutiveBlocksOfType<\n    T extends keyof OwidEnrichedGdocBlockTypeMap,\n>(\n    gdoc: OwidGdocPostInterface | OwidGdocDataInsightInterface,\n    type: T,\n    n: number\n): OwidEnrichedGdocBlockTypeMap[T][] {\n    if (!gdoc.content.body || n <= 0) return []\n    const foundBlocks: OwidEnrichedGdocBlockTypeMap[T][] = []\n\n    let startedCollecting = false\n    for (const block of gdoc.content.body) {\n        if (foundBlocks.length >= n) break\n\n        if (block.type === type) {\n            foundBlocks.push(block as OwidEnrichedGdocBlockTypeMap[T])\n            startedCollecting = true\n        } else if (startedCollecting) {\n            // We've started collecting blocks of the desired type, but this block is not of that type\n            // So we stop collecting consecutive blocks\n            break\n        }\n        // If we haven't started collecting yet and this isn't the right type, continue looking\n    }\n\n    return foundBlocks\n}\n\n/**\n * Takes a gdoc and a block type and returns the first block of that type found in the gdoc\n * e.g. getFirstBlockOfType(gdoc, \"image\") will return the first image block in the gdoc\n * and it will be typed correctly as an EnrichedBlockImage\n **/\nexport function getFirstBlockOfType<\n    T extends keyof OwidEnrichedGdocBlockTypeMap,\n>(\n    gdoc: OwidGdocPostInterface | OwidGdocDataInsightInterface,\n    type: T\n): OwidEnrichedGdocBlockTypeMap[T] | undefined {\n    if (!gdoc.content.body) return undefined\n    for (const block of gdoc.content.body) {\n        let foundBlock: OwidEnrichedGdocBlockTypeMap[T] | undefined\n        traverseEnrichedBlock(block, (node) => {\n            if (!foundBlock && node.type === type) {\n                foundBlock = node as OwidEnrichedGdocBlockTypeMap[T]\n            }\n        })\n        if (foundBlock) return foundBlock\n    }\n    return undefined\n}\n\n// Always use the smallFilename for old data insights, where two filenames were always provided\n// Doing this in code was simpler than migrating all the DI gdocs themselves\n// See https://github.com/owid/owid-grapher/issues/4416\nexport function addPreferSmallFilenameToDataInsightImages(\n    content: OwidGdocDataInsightContent\n): OwidGdocDataInsightContent {\n    content.body.forEach((node) =>\n        traverseEnrichedBlock(node, (block) => {\n            if (block.type === \"image\") {\n                block.preferSmallFilename = true\n            }\n        })\n    )\n    return content\n}\n","import { createContext, useContext } from \"react\"\n\nexport const DebugContext = createContext<boolean | undefined>(undefined)\n\nexport const useDebug = () => {\n    const context = useContext(DebugContext)\n\n    if (context === undefined) {\n        throw new Error(\"useDebug must be used within a DebugProvider\")\n    }\n    return context\n}\n","import * as React from \"react\"\nimport * as Sentry from \"@sentry/react\"\nimport { Button } from \"@ourworldindata/components\"\nimport { useDebug } from \"../DebugContext.js\"\n\nexport const BlockErrorBoundary = ({\n    children,\n    className,\n}: {\n    children: React.ReactNode\n    className: string\n}) => {\n    return (\n        <Sentry.ErrorBoundary\n            fallback={({ error, resetError }) => {\n                if (!(error instanceof Error)) {\n                    error = new Error(String(error))\n                }\n                return (\n                    <BlockErrorFallback\n                        className={className}\n                        error={error as Error}\n                        resetError={resetError}\n                    />\n                )\n            }}\n        >\n            {children}\n        </Sentry.ErrorBoundary>\n    )\n}\n\nexport const BlockErrorFallback = ({\n    error,\n    resetError,\n    className = \"\",\n}: {\n    error: Error\n    resetError?: VoidFunction\n    className?: string\n}): React.ReactElement => {\n    const debug = useDebug()\n    return (\n        <div\n            className={className}\n            style={{\n                display: \"flex\",\n                flexDirection: \"column\",\n                gap: \"8px\",\n                alignItems: \"center\",\n                backgroundColor: \"#ffe5e5\",\n                padding: \"20px\",\n                marginTop: \"20px\",\n                marginBottom: \"20px\",\n            }}\n        >\n            <h3 style={{ margin: 0 }}>{error.name}</h3>\n            {debug && (\n                <>\n                    <div>{error.message}</div>\n                    {resetError && (\n                        <Button\n                            theme=\"solid-vermillion\"\n                            text=\"Try again\"\n                            ariaLabel=\"Reload content\"\n                            onClick={resetError}\n                            icon={null}\n                        />\n                    )}\n                </>\n            )}\n        </div>\n    )\n}\n","import React, { useRef, useImperativeHandle, useEffect, useContext, useLayoutEffect, useState, useCallback, useMemo } from 'react';\n\n/**\n * Rounds number to given decimal\n * eg. roundNumber(2.34343, 1) => 2.3\n */\nvar roundNumber = function (num, decimal) {\n    return Number(num.toFixed(decimal));\n};\n/**\n * Checks if value is number, if not it returns default value\n * 1# eg. checkIsNumber(2, 30) => 2\n * 2# eg. checkIsNumber(null, 30) => 30\n */\nvar checkIsNumber = function (num, defaultValue) {\n    return typeof num === \"number\" ? num : defaultValue;\n};\n\nvar handleCallback = function (context, event, callback) {\n    if (callback && typeof callback === \"function\") {\n        callback(context, event);\n    }\n};\n\n/* eslint-disable no-plusplus */\n/* eslint-disable no-param-reassign */\n/**\n * Functions should return denominator of the target value, which is the next animation step.\n * t is a value from 0 to 1, reflecting the percentage of animation status.\n */\nvar easeOut = function (t) {\n    return -Math.cos(t * Math.PI) / 2 + 0.5;\n};\n// linear\nvar linear = function (t) {\n    return t;\n};\n// accelerating from zero velocity\nvar easeInQuad = function (t) {\n    return t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuad = function (t) {\n    return t * (2 - t);\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuad = function (t) {\n    return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n};\n// accelerating from zero velocity\nvar easeInCubic = function (t) {\n    return t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutCubic = function (t) {\n    return --t * t * t + 1;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutCubic = function (t) {\n    return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n};\n// accelerating from zero velocity\nvar easeInQuart = function (t) {\n    return t * t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuart = function (t) {\n    return 1 - --t * t * t * t;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuart = function (t) {\n    return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n};\n// accelerating from zero velocity\nvar easeInQuint = function (t) {\n    return t * t * t * t * t;\n};\n// decelerating to zero velocity\nvar easeOutQuint = function (t) {\n    return 1 + --t * t * t * t * t;\n};\n// acceleration until halfway, then deceleration\nvar easeInOutQuint = function (t) {\n    return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n};\nvar animations = {\n    easeOut: easeOut,\n    linear: linear,\n    easeInQuad: easeInQuad,\n    easeOutQuad: easeOutQuad,\n    easeInOutQuad: easeInOutQuad,\n    easeInCubic: easeInCubic,\n    easeOutCubic: easeOutCubic,\n    easeInOutCubic: easeInOutCubic,\n    easeInQuart: easeInQuart,\n    easeOutQuart: easeOutQuart,\n    easeInOutQuart: easeInOutQuart,\n    easeInQuint: easeInQuint,\n    easeOutQuint: easeOutQuint,\n    easeInOutQuint: easeInOutQuint,\n};\n\n/* eslint-disable no-param-reassign */\nvar handleCancelAnimationFrame = function (animation) {\n    if (typeof animation === \"number\") {\n        cancelAnimationFrame(animation);\n    }\n};\nvar handleCancelAnimation = function (contextInstance) {\n    if (!contextInstance.mounted)\n        return;\n    handleCancelAnimationFrame(contextInstance.animation);\n    // Clear animation state\n    contextInstance.animate = false;\n    contextInstance.animation = null;\n    contextInstance.velocity = null;\n};\nfunction handleSetupAnimation(contextInstance, animationName, animationTime, callback) {\n    if (!contextInstance.mounted)\n        return;\n    var startTime = new Date().getTime();\n    var lastStep = 1;\n    // if another animation is active\n    handleCancelAnimation(contextInstance);\n    // new animation\n    contextInstance.animation = function () {\n        if (!contextInstance.mounted) {\n            return handleCancelAnimationFrame(contextInstance.animation);\n        }\n        var frameTime = new Date().getTime() - startTime;\n        var animationProgress = frameTime / animationTime;\n        var animationType = animations[animationName];\n        var step = animationType(animationProgress);\n        if (frameTime >= animationTime) {\n            callback(lastStep);\n            contextInstance.animation = null;\n        }\n        else if (contextInstance.animation) {\n            callback(step);\n            requestAnimationFrame(contextInstance.animation);\n        }\n    };\n    requestAnimationFrame(contextInstance.animation);\n}\nfunction isValidTargetState(targetState) {\n    var scale = targetState.scale, positionX = targetState.positionX, positionY = targetState.positionY;\n    if (Number.isNaN(scale) ||\n        Number.isNaN(positionX) ||\n        Number.isNaN(positionY)) {\n        return false;\n    }\n    return true;\n}\nfunction animate(contextInstance, targetState, animationTime, animationName) {\n    var isValid = isValidTargetState(targetState);\n    if (!contextInstance.mounted || !isValid)\n        return;\n    var setTransformState = contextInstance.setTransformState;\n    var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n    var scaleDiff = targetState.scale - scale;\n    var positionXDiff = targetState.positionX - positionX;\n    var positionYDiff = targetState.positionY - positionY;\n    if (animationTime === 0) {\n        setTransformState(targetState.scale, targetState.positionX, targetState.positionY);\n    }\n    else {\n        // animation start timestamp\n        handleSetupAnimation(contextInstance, animationName, animationTime, function (step) {\n            var newScale = scale + scaleDiff * step;\n            var newPositionX = positionX + positionXDiff * step;\n            var newPositionY = positionY + positionYDiff * step;\n            setTransformState(newScale, newPositionX, newPositionY);\n        });\n    }\n}\n\n/* eslint-disable no-param-reassign */\nfunction getComponentsSizes(wrapperComponent, contentComponent, newScale) {\n    var wrapperWidth = wrapperComponent.offsetWidth;\n    var wrapperHeight = wrapperComponent.offsetHeight;\n    var contentWidth = contentComponent.offsetWidth;\n    var contentHeight = contentComponent.offsetHeight;\n    var newContentWidth = contentWidth * newScale;\n    var newContentHeight = contentHeight * newScale;\n    var newDiffWidth = wrapperWidth - newContentWidth;\n    var newDiffHeight = wrapperHeight - newContentHeight;\n    return {\n        wrapperWidth: wrapperWidth,\n        wrapperHeight: wrapperHeight,\n        newContentWidth: newContentWidth,\n        newDiffWidth: newDiffWidth,\n        newContentHeight: newContentHeight,\n        newDiffHeight: newDiffHeight,\n    };\n}\nvar getBounds = function (wrapperWidth, newContentWidth, diffWidth, wrapperHeight, newContentHeight, diffHeight, centerZoomedOut) {\n    var scaleWidthFactor = wrapperWidth > newContentWidth\n        ? diffWidth * (centerZoomedOut ? 1 : 0.5)\n        : 0;\n    var scaleHeightFactor = wrapperHeight > newContentHeight\n        ? diffHeight * (centerZoomedOut ? 1 : 0.5)\n        : 0;\n    var minPositionX = wrapperWidth - newContentWidth - scaleWidthFactor;\n    var maxPositionX = scaleWidthFactor;\n    var minPositionY = wrapperHeight - newContentHeight - scaleHeightFactor;\n    var maxPositionY = scaleHeightFactor;\n    return { minPositionX: minPositionX, maxPositionX: maxPositionX, minPositionY: minPositionY, maxPositionY: maxPositionY };\n};\nvar calculateBounds = function (contextInstance, newScale) {\n    var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n    var centerZoomedOut = contextInstance.setup.centerZoomedOut;\n    if (!wrapperComponent || !contentComponent) {\n        throw new Error(\"Components are not mounted\");\n    }\n    var _a = getComponentsSizes(wrapperComponent, contentComponent, newScale), wrapperWidth = _a.wrapperWidth, wrapperHeight = _a.wrapperHeight, newContentWidth = _a.newContentWidth, newDiffWidth = _a.newDiffWidth, newContentHeight = _a.newContentHeight, newDiffHeight = _a.newDiffHeight;\n    var bounds = getBounds(wrapperWidth, newContentWidth, newDiffWidth, wrapperHeight, newContentHeight, newDiffHeight, Boolean(centerZoomedOut));\n    return bounds;\n};\n/**\n * Keeps value between given bounds, used for limiting view to given boundaries\n * 1# eg. boundLimiter(2, 0, 3, true) => 2\n * 2# eg. boundLimiter(4, 0, 3, true) => 3\n * 3# eg. boundLimiter(-2, 0, 3, true) => 0\n * 4# eg. boundLimiter(10, 0, 3, false) => 10\n */\nvar boundLimiter = function (value, minBound, maxBound, isActive) {\n    if (!isActive)\n        return roundNumber(value, 2);\n    if (value < minBound)\n        return roundNumber(minBound, 2);\n    if (value > maxBound)\n        return roundNumber(maxBound, 2);\n    return roundNumber(value, 2);\n};\nvar handleCalculateBounds = function (contextInstance, newScale) {\n    var bounds = calculateBounds(contextInstance, newScale);\n    // Save bounds\n    contextInstance.bounds = bounds;\n    return bounds;\n};\nfunction getMouseBoundedPosition(positionX, positionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent) {\n    var minPositionX = bounds.minPositionX, minPositionY = bounds.minPositionY, maxPositionX = bounds.maxPositionX, maxPositionY = bounds.maxPositionY;\n    var paddingX = 0;\n    var paddingY = 0;\n    if (wrapperComponent) {\n        paddingX = paddingValueX;\n        paddingY = paddingValueY;\n    }\n    var x = boundLimiter(positionX, minPositionX - paddingX, maxPositionX + paddingX, limitToBounds);\n    var y = boundLimiter(positionY, minPositionY - paddingY, maxPositionY + paddingY, limitToBounds);\n    return { x: x, y: y };\n}\n\nfunction handleCalculateZoomPositions(contextInstance, mouseX, mouseY, newScale, bounds, limitToBounds) {\n    var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n    var scaleDifference = newScale - scale;\n    if (typeof mouseX !== \"number\" || typeof mouseY !== \"number\") {\n        console.error(\"Mouse X and Y position were not provided!\");\n        return { x: positionX, y: positionY };\n    }\n    var calculatedPositionX = positionX - mouseX * scaleDifference;\n    var calculatedPositionY = positionY - mouseY * scaleDifference;\n    // do not limit to bounds when there is padding animation,\n    // it causes animation strange behaviour\n    var newPositions = getMouseBoundedPosition(calculatedPositionX, calculatedPositionY, bounds, limitToBounds, 0, 0, null);\n    return newPositions;\n}\nfunction checkZoomBounds(zoom, minScale, maxScale, zoomPadding, enablePadding) {\n    var scalePadding = enablePadding ? zoomPadding : 0;\n    var minScaleWithPadding = minScale - scalePadding;\n    if (!Number.isNaN(maxScale) && zoom >= maxScale)\n        return maxScale;\n    if (!Number.isNaN(minScale) && zoom <= minScaleWithPadding)\n        return minScaleWithPadding;\n    return zoom;\n}\n\nvar isPanningStartAllowed = function (contextInstance, event) {\n    var excluded = contextInstance.setup.panning.excluded;\n    var isInitialized = contextInstance.isInitialized, wrapperComponent = contextInstance.wrapperComponent;\n    var target = event.target;\n    var targetIsShadowDom = \"shadowRoot\" in target && \"composedPath\" in event;\n    var isWrapperChild = targetIsShadowDom\n        ? event.composedPath().some(function (el) {\n            if (!(el instanceof Element)) {\n                return false;\n            }\n            return wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(el);\n        })\n        : wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(target);\n    var isAllowed = isInitialized && target && isWrapperChild;\n    if (!isAllowed)\n        return false;\n    var isExcluded = isExcludedNode(target, excluded);\n    if (isExcluded)\n        return false;\n    return true;\n};\nvar isPanningAllowed = function (contextInstance) {\n    var isInitialized = contextInstance.isInitialized, isPanning = contextInstance.isPanning, setup = contextInstance.setup;\n    var disabled = setup.panning.disabled;\n    var isAllowed = isInitialized && isPanning && !disabled;\n    if (!isAllowed)\n        return false;\n    return true;\n};\nvar handlePanningSetup = function (contextInstance, event) {\n    var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY;\n    contextInstance.isPanning = true;\n    // Panning with mouse\n    var x = event.clientX;\n    var y = event.clientY;\n    contextInstance.startCoords = { x: x - positionX, y: y - positionY };\n};\nvar handleTouchPanningSetup = function (contextInstance, event) {\n    var touches = event.touches;\n    var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY;\n    contextInstance.isPanning = true;\n    // Panning with touch\n    var oneFingerTouch = touches.length === 1;\n    if (oneFingerTouch) {\n        var x = touches[0].clientX;\n        var y = touches[0].clientY;\n        contextInstance.startCoords = { x: x - positionX, y: y - positionY };\n    }\n};\nfunction handlePanToBounds(contextInstance) {\n    var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale;\n    var _b = contextInstance.setup, disabled = _b.disabled, limitToBounds = _b.limitToBounds, centerZoomedOut = _b.centerZoomedOut;\n    var wrapperComponent = contextInstance.wrapperComponent;\n    if (disabled || !wrapperComponent || !contextInstance.bounds)\n        return;\n    var _c = contextInstance.bounds, maxPositionX = _c.maxPositionX, minPositionX = _c.minPositionX, maxPositionY = _c.maxPositionY, minPositionY = _c.minPositionY;\n    var xChanged = positionX > maxPositionX || positionX < minPositionX;\n    var yChanged = positionY > maxPositionY || positionY < minPositionY;\n    var mousePosX = positionX > maxPositionX\n        ? wrapperComponent.offsetWidth\n        : contextInstance.setup.minPositionX || 0;\n    var mousePosY = positionY > maxPositionY\n        ? wrapperComponent.offsetHeight\n        : contextInstance.setup.minPositionY || 0;\n    var _d = handleCalculateZoomPositions(contextInstance, mousePosX, mousePosY, scale, contextInstance.bounds, limitToBounds || centerZoomedOut), x = _d.x, y = _d.y;\n    return {\n        scale: scale,\n        positionX: xChanged ? x : positionX,\n        positionY: yChanged ? y : positionY,\n    };\n}\nfunction handleNewPosition(contextInstance, newPositionX, newPositionY, paddingValueX, paddingValueY) {\n    var limitToBounds = contextInstance.setup.limitToBounds;\n    var wrapperComponent = contextInstance.wrapperComponent, bounds = contextInstance.bounds;\n    var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n    if (wrapperComponent === null ||\n        bounds === null ||\n        (newPositionX === positionX && newPositionY === positionY)) {\n        return;\n    }\n    var _b = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent), x = _b.x, y = _b.y;\n    contextInstance.setTransformState(scale, x, y);\n}\nvar getPanningClientPosition = function (contextInstance, clientX, clientY) {\n    var startCoords = contextInstance.startCoords, transformState = contextInstance.transformState;\n    var panning = contextInstance.setup.panning;\n    var lockAxisX = panning.lockAxisX, lockAxisY = panning.lockAxisY;\n    var positionX = transformState.positionX, positionY = transformState.positionY;\n    if (!startCoords) {\n        return { x: positionX, y: positionY };\n    }\n    var mouseX = clientX - startCoords.x;\n    var mouseY = clientY - startCoords.y;\n    var newPositionX = lockAxisX ? positionX : mouseX;\n    var newPositionY = lockAxisY ? positionY : mouseY;\n    return { x: newPositionX, y: newPositionY };\n};\nvar getPaddingValue = function (contextInstance, size) {\n    var setup = contextInstance.setup, transformState = contextInstance.transformState;\n    var scale = transformState.scale;\n    var minScale = setup.minScale, disablePadding = setup.disablePadding;\n    if (size > 0 && scale >= minScale && !disablePadding) {\n        return size;\n    }\n    return 0;\n};\n\nvar isVelocityCalculationAllowed = function (contextInstance) {\n    var mounted = contextInstance.mounted;\n    var _a = contextInstance.setup, disabled = _a.disabled, velocityAnimation = _a.velocityAnimation;\n    var scale = contextInstance.transformState.scale;\n    var disabledVelocity = velocityAnimation.disabled;\n    var isAllowed = !disabledVelocity || scale > 1 || !disabled || mounted;\n    if (!isAllowed)\n        return false;\n    return true;\n};\nvar isVelocityAllowed = function (contextInstance) {\n    var mounted = contextInstance.mounted, velocity = contextInstance.velocity, bounds = contextInstance.bounds;\n    var _a = contextInstance.setup, disabled = _a.disabled, velocityAnimation = _a.velocityAnimation;\n    var scale = contextInstance.transformState.scale;\n    var disabledVelocity = velocityAnimation.disabled;\n    var isAllowed = !disabledVelocity || scale > 1 || !disabled || mounted;\n    if (!isAllowed)\n        return false;\n    if (!velocity || !bounds)\n        return false;\n    return true;\n};\nfunction getVelocityMoveTime(contextInstance, velocity) {\n    var velocityAnimation = contextInstance.setup.velocityAnimation;\n    var equalToMove = velocityAnimation.equalToMove, animationTime = velocityAnimation.animationTime, sensitivity = velocityAnimation.sensitivity;\n    if (equalToMove) {\n        return animationTime * velocity * sensitivity;\n    }\n    return animationTime;\n}\nfunction getVelocityPosition(newPosition, startPosition, currentPosition, isLocked, limitToBounds, minPosition, maxPosition, minTarget, maxTarget, step) {\n    if (limitToBounds) {\n        if (startPosition > maxPosition && currentPosition > maxPosition) {\n            var calculatedPosition = maxPosition + (newPosition - maxPosition) * step;\n            if (calculatedPosition > maxTarget)\n                return maxTarget;\n            if (calculatedPosition < maxPosition)\n                return maxPosition;\n            return calculatedPosition;\n        }\n        if (startPosition < minPosition && currentPosition < minPosition) {\n            var calculatedPosition = minPosition + (newPosition - minPosition) * step;\n            if (calculatedPosition < minTarget)\n                return minTarget;\n            if (calculatedPosition > minPosition)\n                return minPosition;\n            return calculatedPosition;\n        }\n    }\n    if (isLocked)\n        return startPosition;\n    return boundLimiter(newPosition, minPosition, maxPosition, limitToBounds);\n}\n\nfunction getSizeMultiplier(wrapperComponent, equalToMove) {\n    var defaultMultiplier = 1;\n    if (equalToMove) {\n        return Math.min(defaultMultiplier, wrapperComponent.offsetWidth / window.innerWidth);\n    }\n    return defaultMultiplier;\n}\nfunction handleCalculateVelocity(contextInstance, position) {\n    var isAllowed = isVelocityCalculationAllowed(contextInstance);\n    if (!isAllowed) {\n        return;\n    }\n    var lastMousePosition = contextInstance.lastMousePosition, velocityTime = contextInstance.velocityTime, setup = contextInstance.setup;\n    var wrapperComponent = contextInstance.wrapperComponent;\n    var equalToMove = setup.velocityAnimation.equalToMove;\n    var now = Date.now();\n    if (lastMousePosition && velocityTime && wrapperComponent) {\n        var sizeMultiplier = getSizeMultiplier(wrapperComponent, equalToMove);\n        var distanceX = position.x - lastMousePosition.x;\n        var distanceY = position.y - lastMousePosition.y;\n        var velocityX = distanceX / sizeMultiplier;\n        var velocityY = distanceY / sizeMultiplier;\n        var interval = now - velocityTime;\n        var speed = distanceX * distanceX + distanceY * distanceY;\n        var velocity = Math.sqrt(speed) / interval;\n        contextInstance.velocity = { velocityX: velocityX, velocityY: velocityY, total: velocity };\n    }\n    contextInstance.lastMousePosition = position;\n    contextInstance.velocityTime = now;\n}\nfunction handleVelocityPanning(contextInstance) {\n    var velocity = contextInstance.velocity, bounds = contextInstance.bounds, setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n    var isAllowed = isVelocityAllowed(contextInstance);\n    if (!isAllowed || !velocity || !bounds || !wrapperComponent) {\n        return;\n    }\n    var velocityX = velocity.velocityX, velocityY = velocity.velocityY, total = velocity.total;\n    var maxPositionX = bounds.maxPositionX, minPositionX = bounds.minPositionX, maxPositionY = bounds.maxPositionY, minPositionY = bounds.minPositionY;\n    var limitToBounds = setup.limitToBounds, alignmentAnimation = setup.alignmentAnimation;\n    var zoomAnimation = setup.zoomAnimation, panning = setup.panning;\n    var lockAxisY = panning.lockAxisY, lockAxisX = panning.lockAxisX;\n    var animationType = zoomAnimation.animationType;\n    var sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY, velocityAlignmentTime = alignmentAnimation.velocityAlignmentTime;\n    var alignAnimationTime = velocityAlignmentTime;\n    var moveAnimationTime = getVelocityMoveTime(contextInstance, total);\n    var finalAnimationTime = Math.max(moveAnimationTime, alignAnimationTime);\n    var paddingValueX = getPaddingValue(contextInstance, sizeX);\n    var paddingValueY = getPaddingValue(contextInstance, sizeY);\n    var paddingX = (paddingValueX * wrapperComponent.offsetWidth) / 100;\n    var paddingY = (paddingValueY * wrapperComponent.offsetHeight) / 100;\n    var maxTargetX = maxPositionX + paddingX;\n    var minTargetX = minPositionX - paddingX;\n    var maxTargetY = maxPositionY + paddingY;\n    var minTargetY = minPositionY - paddingY;\n    var startState = contextInstance.transformState;\n    var startTime = new Date().getTime();\n    handleSetupAnimation(contextInstance, animationType, finalAnimationTime, function (step) {\n        var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n        var frameTime = new Date().getTime() - startTime;\n        var animationProgress = frameTime / alignAnimationTime;\n        var alignAnimation = animations[alignmentAnimation.animationType];\n        var alignStep = 1 - alignAnimation(Math.min(1, animationProgress));\n        var customStep = 1 - step;\n        var newPositionX = positionX + velocityX * customStep;\n        var newPositionY = positionY + velocityY * customStep;\n        var currentPositionX = getVelocityPosition(newPositionX, startState.positionX, positionX, lockAxisX, limitToBounds, minPositionX, maxPositionX, minTargetX, maxTargetX, alignStep);\n        var currentPositionY = getVelocityPosition(newPositionY, startState.positionY, positionY, lockAxisY, limitToBounds, minPositionY, maxPositionY, minTargetY, maxTargetY, alignStep);\n        if (positionX !== newPositionX || positionY !== newPositionY) {\n            contextInstance.setTransformState(scale, currentPositionX, currentPositionY);\n        }\n    });\n}\n\nfunction handlePanningStart(contextInstance, event) {\n    var scale = contextInstance.transformState.scale;\n    handleCancelAnimation(contextInstance);\n    handleCalculateBounds(contextInstance, scale);\n    if (window.TouchEvent !== undefined && event instanceof TouchEvent) {\n        handleTouchPanningSetup(contextInstance, event);\n    }\n    else {\n        handlePanningSetup(contextInstance, event);\n    }\n}\nfunction handleAlignToBounds(contextInstance, customAnimationTime) {\n    var scale = contextInstance.transformState.scale;\n    var _a = contextInstance.setup, minScale = _a.minScale, alignmentAnimation = _a.alignmentAnimation;\n    var disabled = alignmentAnimation.disabled, sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY, animationTime = alignmentAnimation.animationTime, animationType = alignmentAnimation.animationType;\n    var isDisabled = disabled || scale < minScale || (!sizeX && !sizeY);\n    if (isDisabled)\n        return;\n    var targetState = handlePanToBounds(contextInstance);\n    if (targetState) {\n        animate(contextInstance, targetState, customAnimationTime !== null && customAnimationTime !== void 0 ? customAnimationTime : animationTime, animationType);\n    }\n}\nfunction handlePanning(contextInstance, clientX, clientY) {\n    var startCoords = contextInstance.startCoords, setup = contextInstance.setup;\n    var _a = setup.alignmentAnimation, sizeX = _a.sizeX, sizeY = _a.sizeY;\n    if (!startCoords)\n        return;\n    var _b = getPanningClientPosition(contextInstance, clientX, clientY), x = _b.x, y = _b.y;\n    var paddingValueX = getPaddingValue(contextInstance, sizeX);\n    var paddingValueY = getPaddingValue(contextInstance, sizeY);\n    handleCalculateVelocity(contextInstance, { x: x, y: y });\n    handleNewPosition(contextInstance, x, y, paddingValueX, paddingValueY);\n}\nfunction handlePanningEnd(contextInstance) {\n    if (contextInstance.isPanning) {\n        var velocityDisabled = contextInstance.setup.panning.velocityDisabled;\n        var velocity = contextInstance.velocity, wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n        contextInstance.isPanning = false;\n        contextInstance.animate = false;\n        contextInstance.animation = null;\n        var wrapperRect = wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.getBoundingClientRect();\n        var contentRect = contentComponent === null || contentComponent === void 0 ? void 0 : contentComponent.getBoundingClientRect();\n        var wrapperWidth = (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.width) || 0;\n        var wrapperHeight = (wrapperRect === null || wrapperRect === void 0 ? void 0 : wrapperRect.height) || 0;\n        var contentWidth = (contentRect === null || contentRect === void 0 ? void 0 : contentRect.width) || 0;\n        var contentHeight = (contentRect === null || contentRect === void 0 ? void 0 : contentRect.height) || 0;\n        var isZoomed = wrapperWidth < contentWidth || wrapperHeight < contentHeight;\n        var shouldAnimate = !velocityDisabled && velocity && (velocity === null || velocity === void 0 ? void 0 : velocity.total) > 0.1 && isZoomed;\n        if (shouldAnimate) {\n            handleVelocityPanning(contextInstance);\n        }\n        else {\n            handleAlignToBounds(contextInstance);\n        }\n    }\n}\n\nfunction handleZoomToPoint(contextInstance, scale, mouseX, mouseY) {\n    var _a = contextInstance.setup, minScale = _a.minScale, maxScale = _a.maxScale, limitToBounds = _a.limitToBounds;\n    var newScale = checkZoomBounds(roundNumber(scale, 2), minScale, maxScale, 0, false);\n    var bounds = handleCalculateBounds(contextInstance, newScale);\n    var _b = handleCalculateZoomPositions(contextInstance, mouseX, mouseY, newScale, bounds, limitToBounds), x = _b.x, y = _b.y;\n    return { scale: newScale, positionX: x, positionY: y };\n}\nfunction handleAlignToScaleBounds(contextInstance, mousePositionX, mousePositionY) {\n    var scale = contextInstance.transformState.scale;\n    var wrapperComponent = contextInstance.wrapperComponent;\n    var _a = contextInstance.setup, minScale = _a.minScale, limitToBounds = _a.limitToBounds, zoomAnimation = _a.zoomAnimation;\n    var disabled = zoomAnimation.disabled, animationTime = zoomAnimation.animationTime, animationType = zoomAnimation.animationType;\n    var isDisabled = disabled || scale >= minScale;\n    if (scale >= 1 || limitToBounds) {\n        // fire fit to bounds animation\n        handleAlignToBounds(contextInstance);\n    }\n    if (isDisabled || !wrapperComponent || !contextInstance.mounted)\n        return;\n    var mouseX = mousePositionX || wrapperComponent.offsetWidth / 2;\n    var mouseY = mousePositionY || wrapperComponent.offsetHeight / 2;\n    var targetState = handleZoomToPoint(contextInstance, minScale, mouseX, mouseY);\n    if (targetState) {\n        animate(contextInstance, targetState, animationTime, animationType);\n    }\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar initialState = {\n    previousScale: 1,\n    scale: 1,\n    positionX: 0,\n    positionY: 0,\n};\nvar initialSetup = {\n    disabled: false,\n    minPositionX: null,\n    maxPositionX: null,\n    minPositionY: null,\n    maxPositionY: null,\n    minScale: 1,\n    maxScale: 8,\n    limitToBounds: true,\n    centerZoomedOut: false,\n    centerOnInit: false,\n    disablePadding: false,\n    smooth: true,\n    wheel: {\n        step: 0.2,\n        disabled: false,\n        smoothStep: 0.001,\n        wheelDisabled: false,\n        touchPadDisabled: false,\n        activationKeys: [],\n        excluded: [],\n    },\n    panning: {\n        disabled: false,\n        velocityDisabled: false,\n        lockAxisX: false,\n        lockAxisY: false,\n        allowLeftClickPan: true,\n        allowMiddleClickPan: true,\n        allowRightClickPan: true,\n        wheelPanning: false,\n        activationKeys: [],\n        excluded: [],\n    },\n    pinch: {\n        step: 5,\n        disabled: false,\n        excluded: [],\n    },\n    doubleClick: {\n        disabled: false,\n        step: 0.7,\n        mode: \"zoomIn\",\n        animationType: \"easeOut\",\n        animationTime: 200,\n        excluded: [],\n    },\n    zoomAnimation: {\n        disabled: false,\n        size: 0.4,\n        animationTime: 200,\n        animationType: \"easeOut\",\n    },\n    alignmentAnimation: {\n        disabled: false,\n        sizeX: 100,\n        sizeY: 100,\n        animationTime: 200,\n        velocityAlignmentTime: 400,\n        animationType: \"easeOut\",\n    },\n    velocityAnimation: {\n        disabled: false,\n        sensitivity: 1,\n        animationTime: 400,\n        animationType: \"easeOut\",\n        equalToMove: true,\n    },\n};\nvar baseClasses = {\n    wrapperClass: \"react-transform-wrapper\",\n    contentClass: \"react-transform-component\",\n};\n\nvar createState = function (props) {\n    var _a, _b, _c, _d;\n    return {\n        previousScale: (_a = props.initialScale) !== null && _a !== void 0 ? _a : initialState.scale,\n        scale: (_b = props.initialScale) !== null && _b !== void 0 ? _b : initialState.scale,\n        positionX: (_c = props.initialPositionX) !== null && _c !== void 0 ? _c : initialState.positionX,\n        positionY: (_d = props.initialPositionY) !== null && _d !== void 0 ? _d : initialState.positionY,\n    };\n};\nvar createSetup = function (props) {\n    var newSetup = __assign({}, initialSetup);\n    Object.keys(props).forEach(function (key) {\n        var validValue = typeof props[key] !== \"undefined\";\n        var validParameter = typeof initialSetup[key] !== \"undefined\";\n        if (validParameter && validValue) {\n            var dataType = Object.prototype.toString.call(initialSetup[key]);\n            var isObject = dataType === \"[object Object]\";\n            var isArray = dataType === \"[object Array]\";\n            if (isObject) {\n                newSetup[key] = __assign(__assign({}, initialSetup[key]), props[key]);\n            }\n            else if (isArray) {\n                newSetup[key] = __spreadArray(__spreadArray([], initialSetup[key], true), props[key], true);\n            }\n            else {\n                newSetup[key] = props[key];\n            }\n        }\n    });\n    return newSetup;\n};\n\nvar handleCalculateButtonZoom = function (contextInstance, delta, step) {\n    var scale = contextInstance.transformState.scale;\n    var wrapperComponent = contextInstance.wrapperComponent, setup = contextInstance.setup;\n    var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, smooth = setup.smooth;\n    var size = zoomAnimation.size;\n    if (!wrapperComponent) {\n        throw new Error(\"Wrapper is not mounted\");\n    }\n    var targetScale = smooth\n        ? scale * Math.exp(delta * step)\n        : scale + delta * step;\n    var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, false);\n    return newScale;\n};\nfunction handleZoomToViewCenter(contextInstance, delta, step, animationTime, animationType) {\n    var wrapperComponent = contextInstance.wrapperComponent;\n    var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n    if (!wrapperComponent)\n        return console.error(\"No WrapperComponent found\");\n    var wrapperWidth = wrapperComponent.offsetWidth;\n    var wrapperHeight = wrapperComponent.offsetHeight;\n    var mouseX = (wrapperWidth / 2 - positionX) / scale;\n    var mouseY = (wrapperHeight / 2 - positionY) / scale;\n    var newScale = handleCalculateButtonZoom(contextInstance, delta, step);\n    var targetState = handleZoomToPoint(contextInstance, newScale, mouseX, mouseY);\n    if (!targetState) {\n        return console.error(\"Error during zoom event. New transformation state was not calculated.\");\n    }\n    animate(contextInstance, targetState, animationTime, animationType);\n}\nfunction resetTransformations(contextInstance, animationTime, animationType, onResetTransformation) {\n    var setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n    var limitToBounds = setup.limitToBounds;\n    var initialTransformation = createState(contextInstance.props);\n    var _a = contextInstance.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n    if (!wrapperComponent)\n        return;\n    var newBounds = calculateBounds(contextInstance, initialTransformation.scale);\n    var boundedPositions = getMouseBoundedPosition(initialTransformation.positionX, initialTransformation.positionY, newBounds, limitToBounds, 0, 0, wrapperComponent);\n    var newState = {\n        scale: initialTransformation.scale,\n        positionX: boundedPositions.x,\n        positionY: boundedPositions.y,\n    };\n    if (scale === initialTransformation.scale &&\n        positionX === initialTransformation.positionX &&\n        positionY === initialTransformation.positionY) {\n        return;\n    }\n    onResetTransformation === null || onResetTransformation === void 0 ? void 0 : onResetTransformation();\n    animate(contextInstance, newState, animationTime, animationType);\n}\nfunction getOffset(element, wrapper, content, state) {\n    var offset = element.getBoundingClientRect();\n    var wrapperOffset = wrapper.getBoundingClientRect();\n    var contentOffset = content.getBoundingClientRect();\n    var xOff = wrapperOffset.x * state.scale;\n    var yOff = wrapperOffset.y * state.scale;\n    return {\n        x: (offset.x - contentOffset.x + xOff) / state.scale,\n        y: (offset.y - contentOffset.y + yOff) / state.scale,\n    };\n}\nfunction calculateZoomToNode(contextInstance, node, customZoom) {\n    var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent, transformState = contextInstance.transformState;\n    var _a = contextInstance.setup, limitToBounds = _a.limitToBounds, minScale = _a.minScale, maxScale = _a.maxScale;\n    if (!wrapperComponent || !contentComponent)\n        return transformState;\n    var wrapperRect = wrapperComponent.getBoundingClientRect();\n    var nodeRect = node.getBoundingClientRect();\n    var nodeOffset = getOffset(node, wrapperComponent, contentComponent, transformState);\n    var nodeLeft = nodeOffset.x;\n    var nodeTop = nodeOffset.y;\n    var nodeWidth = nodeRect.width / transformState.scale;\n    var nodeHeight = nodeRect.height / transformState.scale;\n    var scaleX = wrapperComponent.offsetWidth / nodeWidth;\n    var scaleY = wrapperComponent.offsetHeight / nodeHeight;\n    var newScale = checkZoomBounds(customZoom || Math.min(scaleX, scaleY), minScale, maxScale, 0, false);\n    var offsetX = (wrapperRect.width - nodeWidth * newScale) / 2;\n    var offsetY = (wrapperRect.height - nodeHeight * newScale) / 2;\n    var newPositionX = (wrapperRect.left - nodeLeft) * newScale + offsetX;\n    var newPositionY = (wrapperRect.top - nodeTop) * newScale + offsetY;\n    var bounds = calculateBounds(contextInstance, newScale);\n    var _b = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, 0, 0, wrapperComponent), x = _b.x, y = _b.y;\n    return { positionX: x, positionY: y, scale: newScale };\n}\n\nvar zoomIn = function (contextInstance) {\n    return function (step, animationTime, animationType) {\n        if (step === void 0) { step = 0.5; }\n        if (animationTime === void 0) { animationTime = 300; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        handleZoomToViewCenter(contextInstance, 1, step, animationTime, animationType);\n    };\n};\nvar zoomOut = function (contextInstance) {\n    return function (step, animationTime, animationType) {\n        if (step === void 0) { step = 0.5; }\n        if (animationTime === void 0) { animationTime = 300; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        handleZoomToViewCenter(contextInstance, -1, step, animationTime, animationType);\n    };\n};\nvar setTransform = function (contextInstance) {\n    return function (newPositionX, newPositionY, newScale, animationTime, animationType) {\n        if (animationTime === void 0) { animationTime = 300; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        var _a = contextInstance.transformState, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale;\n        var wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n        var disabled = contextInstance.setup.disabled;\n        if (disabled || !wrapperComponent || !contentComponent)\n            return;\n        var targetState = {\n            positionX: Number.isNaN(newPositionX) ? positionX : newPositionX,\n            positionY: Number.isNaN(newPositionY) ? positionY : newPositionY,\n            scale: Number.isNaN(newScale) ? scale : newScale,\n        };\n        animate(contextInstance, targetState, animationTime, animationType);\n    };\n};\nvar resetTransform = function (contextInstance) {\n    return function (animationTime, animationType) {\n        if (animationTime === void 0) { animationTime = 200; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        resetTransformations(contextInstance, animationTime, animationType);\n    };\n};\nvar centerView = function (contextInstance) {\n    return function (scale, animationTime, animationType) {\n        if (animationTime === void 0) { animationTime = 200; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        var transformState = contextInstance.transformState, wrapperComponent = contextInstance.wrapperComponent, contentComponent = contextInstance.contentComponent;\n        if (wrapperComponent && contentComponent) {\n            var targetState = getCenterPosition(scale || transformState.scale, wrapperComponent, contentComponent);\n            animate(contextInstance, targetState, animationTime, animationType);\n        }\n    };\n};\nvar zoomToElement = function (contextInstance) {\n    return function (node, scale, animationTime, animationType) {\n        if (animationTime === void 0) { animationTime = 600; }\n        if (animationType === void 0) { animationType = \"easeOut\"; }\n        handleCancelAnimation(contextInstance);\n        var wrapperComponent = contextInstance.wrapperComponent;\n        var target = typeof node === \"string\" ? document.getElementById(node) : node;\n        if (wrapperComponent && target && wrapperComponent.contains(target)) {\n            var targetState = calculateZoomToNode(contextInstance, target, scale);\n            animate(contextInstance, targetState, animationTime, animationType);\n        }\n    };\n};\n\nvar getControls = function (contextInstance) {\n    return {\n        instance: contextInstance,\n        zoomIn: zoomIn(contextInstance),\n        zoomOut: zoomOut(contextInstance),\n        setTransform: setTransform(contextInstance),\n        resetTransform: resetTransform(contextInstance),\n        centerView: centerView(contextInstance),\n        zoomToElement: zoomToElement(contextInstance),\n    };\n};\nvar getState = function (contextInstance) {\n    return {\n        instance: contextInstance,\n        state: contextInstance.transformState,\n    };\n};\nvar getContext = function (contextInstance) {\n    var ref = {};\n    Object.assign(ref, getState(contextInstance));\n    Object.assign(ref, getControls(contextInstance));\n    return ref;\n};\n\n// We want to make event listeners non-passive, and to do so have to check\n// that browsers support EventListenerOptions in the first place.\n// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\nvar passiveSupported = false;\nfunction makePassiveEventOption() {\n    try {\n        var options = {\n            get passive() {\n                // This function will be called when the browser\n                //   attempts to access the passive property.\n                passiveSupported = true;\n                return false;\n            },\n        };\n        return options;\n    }\n    catch (err) {\n        passiveSupported = false;\n        return passiveSupported;\n    }\n}\n\nvar matchPrefix = \".\".concat(baseClasses.wrapperClass);\nvar isExcludedNode = function (node, excluded) {\n    return excluded.some(function (exclude) {\n        return node.matches(\"\".concat(matchPrefix, \" \").concat(exclude, \", \").concat(matchPrefix, \" .\").concat(exclude, \", \").concat(matchPrefix, \" \").concat(exclude, \" *, \").concat(matchPrefix, \" .\").concat(exclude, \" *\"));\n    });\n};\nvar cancelTimeout = function (timeout) {\n    if (timeout) {\n        clearTimeout(timeout);\n    }\n};\n\nvar getTransformStyles = function (x, y, scale) {\n    // Standard translate prevents blurry svg on the safari\n    return \"translate(\".concat(x, \"px, \").concat(y, \"px) scale(\").concat(scale, \")\");\n};\nvar getMatrixTransformStyles = function (x, y, scale) {\n    // The shorthand for matrix does not work for Safari hence the need to explicitly use matrix3d\n    // Refer to https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix\n    var a = scale;\n    var b = 0;\n    var c = 0;\n    var d = scale;\n    var tx = x;\n    var ty = y;\n    return \"matrix3d(\".concat(a, \", \").concat(b, \", 0, 0, \").concat(c, \", \").concat(d, \", 0, 0, 0, 0, 1, 0, \").concat(tx, \", \").concat(ty, \", 0, 1)\");\n};\nvar getCenterPosition = function (scale, wrapperComponent, contentComponent) {\n    var contentWidth = contentComponent.offsetWidth * scale;\n    var contentHeight = contentComponent.offsetHeight * scale;\n    var centerPositionX = (wrapperComponent.offsetWidth - contentWidth) / 2;\n    var centerPositionY = (wrapperComponent.offsetHeight - contentHeight) / 2;\n    return {\n        scale: scale,\n        positionX: centerPositionX,\n        positionY: centerPositionY,\n    };\n};\n\nfunction mergeRefs(refs) {\n    return function (value) {\n        refs.forEach(function (ref) {\n            if (typeof ref === \"function\") {\n                ref(value);\n            }\n            else if (ref != null) {\n                ref.current = value;\n            }\n        });\n    };\n}\n\nvar isWheelAllowed = function (contextInstance, event) {\n    var _a = contextInstance.setup.wheel, disabled = _a.disabled, wheelDisabled = _a.wheelDisabled, touchPadDisabled = _a.touchPadDisabled, excluded = _a.excluded;\n    var isInitialized = contextInstance.isInitialized, isPanning = contextInstance.isPanning;\n    var target = event.target;\n    var isAllowed = isInitialized && !isPanning && !disabled && target;\n    if (!isAllowed)\n        return false;\n    // Event ctrlKey detects if touchpad action is executing wheel or pinch gesture\n    if (wheelDisabled && !event.ctrlKey)\n        return false;\n    if (touchPadDisabled && event.ctrlKey)\n        return false;\n    var isExcluded = isExcludedNode(target, excluded);\n    if (isExcluded)\n        return false;\n    return true;\n};\nvar getDeltaY = function (event) {\n    if (event) {\n        return event.deltaY < 0 ? 1 : -1;\n    }\n    return 0;\n};\nfunction getDelta(event, customDelta) {\n    var deltaY = getDeltaY(event);\n    var delta = checkIsNumber(customDelta, deltaY);\n    return delta;\n}\nfunction getMousePosition(event, contentComponent, scale) {\n    var contentRect = contentComponent.getBoundingClientRect();\n    var mouseX = 0;\n    var mouseY = 0;\n    if (\"clientX\" in event) {\n        // mouse position x, y over wrapper component\n        mouseX = (event.clientX - contentRect.left) / scale;\n        mouseY = (event.clientY - contentRect.top) / scale;\n    }\n    else {\n        var touch = event.touches[0];\n        mouseX = (touch.clientX - contentRect.left) / scale;\n        mouseY = (touch.clientY - contentRect.top) / scale;\n    }\n    if (Number.isNaN(mouseX) || Number.isNaN(mouseY))\n        console.error(\"No mouse or touch offset found\");\n    return {\n        x: mouseX,\n        y: mouseY,\n    };\n}\nvar handleCalculateWheelZoom = function (contextInstance, delta, step, disable, getTarget) {\n    var scale = contextInstance.transformState.scale;\n    var wrapperComponent = contextInstance.wrapperComponent, setup = contextInstance.setup;\n    var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, disablePadding = setup.disablePadding;\n    var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n    if (!wrapperComponent) {\n        throw new Error(\"Wrapper is not mounted\");\n    }\n    var targetScale = scale + delta * step;\n    if (getTarget)\n        return targetScale;\n    var paddingEnabled = disable ? false : !disabled;\n    var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, paddingEnabled && !disablePadding);\n    return newScale;\n};\nvar handleWheelZoomStop = function (contextInstance, event) {\n    var previousWheelEvent = contextInstance.previousWheelEvent;\n    var scale = contextInstance.transformState.scale;\n    var _a = contextInstance.setup, maxScale = _a.maxScale, minScale = _a.minScale;\n    if (!previousWheelEvent)\n        return false;\n    if (scale < maxScale || scale > minScale)\n        return true;\n    if (Math.sign(previousWheelEvent.deltaY) !== Math.sign(event.deltaY))\n        return true;\n    if (previousWheelEvent.deltaY > 0 && previousWheelEvent.deltaY < event.deltaY)\n        return true;\n    if (previousWheelEvent.deltaY < 0 && previousWheelEvent.deltaY > event.deltaY)\n        return true;\n    if (Math.sign(previousWheelEvent.deltaY) !== Math.sign(event.deltaY))\n        return true;\n    return false;\n};\n\nvar isPinchStartAllowed = function (contextInstance, event) {\n    var _a = contextInstance.setup.pinch, disabled = _a.disabled, excluded = _a.excluded;\n    var isInitialized = contextInstance.isInitialized;\n    var target = event.target;\n    var isAllowed = isInitialized && !disabled && target;\n    if (!isAllowed)\n        return false;\n    var isExcluded = isExcludedNode(target, excluded);\n    if (isExcluded)\n        return false;\n    return true;\n};\nvar isPinchAllowed = function (contextInstance) {\n    var disabled = contextInstance.setup.pinch.disabled;\n    var isInitialized = contextInstance.isInitialized, pinchStartDistance = contextInstance.pinchStartDistance;\n    var isAllowed = isInitialized && !disabled && pinchStartDistance;\n    if (!isAllowed)\n        return false;\n    return true;\n};\nvar calculateTouchMidPoint = function (event, scale, contentComponent) {\n    var contentRect = contentComponent.getBoundingClientRect();\n    var touches = event.touches;\n    var firstPointX = roundNumber(touches[0].clientX - contentRect.left, 5);\n    var firstPointY = roundNumber(touches[0].clientY - contentRect.top, 5);\n    var secondPointX = roundNumber(touches[1].clientX - contentRect.left, 5);\n    var secondPointY = roundNumber(touches[1].clientY - contentRect.top, 5);\n    return {\n        x: (firstPointX + secondPointX) / 2 / scale,\n        y: (firstPointY + secondPointY) / 2 / scale,\n    };\n};\nvar getTouchDistance = function (event) {\n    return Math.sqrt(Math.pow((event.touches[0].pageX - event.touches[1].pageX), 2) +\n        Math.pow((event.touches[0].pageY - event.touches[1].pageY), 2));\n};\nvar calculatePinchZoom = function (contextInstance, currentDistance) {\n    var pinchStartScale = contextInstance.pinchStartScale, pinchStartDistance = contextInstance.pinchStartDistance, setup = contextInstance.setup;\n    var maxScale = setup.maxScale, minScale = setup.minScale, zoomAnimation = setup.zoomAnimation, disablePadding = setup.disablePadding;\n    var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n    if (!pinchStartScale || pinchStartDistance === null || !currentDistance) {\n        throw new Error(\"Pinch touches distance was not provided\");\n    }\n    if (currentDistance < 0) {\n        return contextInstance.transformState.scale;\n    }\n    var touchProportion = currentDistance / pinchStartDistance;\n    var scaleDifference = touchProportion * pinchStartScale;\n    return checkZoomBounds(roundNumber(scaleDifference, 2), minScale, maxScale, size, !disabled && !disablePadding);\n};\n\nvar wheelStopEventTime = 160;\nvar wheelAnimationTime = 100;\nvar handleWheelStart = function (contextInstance, event) {\n    var _a = contextInstance.props, onWheelStart = _a.onWheelStart, onZoomStart = _a.onZoomStart;\n    if (!contextInstance.wheelStopEventTimer) {\n        handleCancelAnimation(contextInstance);\n        handleCallback(getContext(contextInstance), event, onWheelStart);\n        handleCallback(getContext(contextInstance), event, onZoomStart);\n    }\n};\nvar handleWheelZoom = function (contextInstance, event) {\n    var _a = contextInstance.props, onWheel = _a.onWheel, onZoom = _a.onZoom;\n    var contentComponent = contextInstance.contentComponent, setup = contextInstance.setup, transformState = contextInstance.transformState;\n    var scale = transformState.scale;\n    var limitToBounds = setup.limitToBounds, centerZoomedOut = setup.centerZoomedOut, zoomAnimation = setup.zoomAnimation, wheel = setup.wheel, disablePadding = setup.disablePadding, smooth = setup.smooth;\n    var size = zoomAnimation.size, disabled = zoomAnimation.disabled;\n    var step = wheel.step, smoothStep = wheel.smoothStep;\n    if (!contentComponent) {\n        throw new Error(\"Component not mounted\");\n    }\n    event.preventDefault();\n    event.stopPropagation();\n    var delta = getDelta(event, null);\n    var zoomStep = smooth ? smoothStep * Math.abs(event.deltaY) : step;\n    var newScale = handleCalculateWheelZoom(contextInstance, delta, zoomStep, !event.ctrlKey);\n    // if scale not change\n    if (scale === newScale)\n        return;\n    var bounds = handleCalculateBounds(contextInstance, newScale);\n    var mousePosition = getMousePosition(event, contentComponent, scale);\n    var isPaddingDisabled = disabled || size === 0 || centerZoomedOut || disablePadding;\n    var isLimitedToBounds = limitToBounds && isPaddingDisabled;\n    var _b = handleCalculateZoomPositions(contextInstance, mousePosition.x, mousePosition.y, newScale, bounds, isLimitedToBounds), x = _b.x, y = _b.y;\n    contextInstance.previousWheelEvent = event;\n    contextInstance.setTransformState(newScale, x, y);\n    handleCallback(getContext(contextInstance), event, onWheel);\n    handleCallback(getContext(contextInstance), event, onZoom);\n};\nvar handleWheelStop = function (contextInstance, event) {\n    var _a = contextInstance.props, onWheelStop = _a.onWheelStop, onZoomStop = _a.onZoomStop;\n    // fire animation\n    cancelTimeout(contextInstance.wheelAnimationTimer);\n    contextInstance.wheelAnimationTimer = setTimeout(function () {\n        if (!contextInstance.mounted)\n            return;\n        handleAlignToScaleBounds(contextInstance, event.x, event.y);\n        contextInstance.wheelAnimationTimer = null;\n    }, wheelAnimationTime);\n    // Wheel stop event\n    var hasStoppedZooming = handleWheelZoomStop(contextInstance, event);\n    if (hasStoppedZooming) {\n        cancelTimeout(contextInstance.wheelStopEventTimer);\n        contextInstance.wheelStopEventTimer = setTimeout(function () {\n            if (!contextInstance.mounted)\n                return;\n            contextInstance.wheelStopEventTimer = null;\n            handleCallback(getContext(contextInstance), event, onWheelStop);\n            handleCallback(getContext(contextInstance), event, onZoomStop);\n        }, wheelStopEventTime);\n    }\n};\n\nvar getTouchCenter = function (event) {\n    var totalX = 0;\n    var totalY = 0;\n    // Sum up the positions of all touches\n    for (var i = 0; i < 2; i += 1) {\n        totalX += event.touches[i].clientX;\n        totalY += event.touches[i].clientY;\n    }\n    // Calculate the average position\n    var x = totalX / 2;\n    var y = totalY / 2;\n    return { x: x, y: y };\n};\nvar handlePinchStart = function (contextInstance, event) {\n    var distance = getTouchDistance(event);\n    contextInstance.pinchStartDistance = distance;\n    contextInstance.lastDistance = distance;\n    contextInstance.pinchStartScale = contextInstance.transformState.scale;\n    contextInstance.isPanning = false;\n    var center = getTouchCenter(event);\n    contextInstance.pinchLastCenterX = center.x;\n    contextInstance.pinchLastCenterY = center.y;\n    handleCancelAnimation(contextInstance);\n};\nvar handlePinchZoom = function (contextInstance, event) {\n    var contentComponent = contextInstance.contentComponent, pinchStartDistance = contextInstance.pinchStartDistance, wrapperComponent = contextInstance.wrapperComponent;\n    var scale = contextInstance.transformState.scale;\n    var _a = contextInstance.setup, limitToBounds = _a.limitToBounds, centerZoomedOut = _a.centerZoomedOut, zoomAnimation = _a.zoomAnimation, alignmentAnimation = _a.alignmentAnimation;\n    var disabled = zoomAnimation.disabled, size = zoomAnimation.size;\n    // if one finger starts from outside of wrapper\n    if (pinchStartDistance === null || !contentComponent)\n        return;\n    var midPoint = calculateTouchMidPoint(event, scale, contentComponent);\n    // if touches goes off of the wrapper element\n    if (!Number.isFinite(midPoint.x) || !Number.isFinite(midPoint.y))\n        return;\n    var currentDistance = getTouchDistance(event);\n    var newScale = calculatePinchZoom(contextInstance, currentDistance);\n    var center = getTouchCenter(event);\n    // pan should be scale invariant.\n    var panX = center.x - (contextInstance.pinchLastCenterX || 0);\n    var panY = center.y - (contextInstance.pinchLastCenterY || 0);\n    if (newScale === scale && panX === 0 && panY === 0)\n        return;\n    contextInstance.pinchLastCenterX = center.x;\n    contextInstance.pinchLastCenterY = center.y;\n    var bounds = handleCalculateBounds(contextInstance, newScale);\n    var isPaddingDisabled = disabled || size === 0 || centerZoomedOut;\n    var isLimitedToBounds = limitToBounds && isPaddingDisabled;\n    var _b = handleCalculateZoomPositions(contextInstance, midPoint.x, midPoint.y, newScale, bounds, isLimitedToBounds), x = _b.x, y = _b.y;\n    contextInstance.pinchMidpoint = midPoint;\n    contextInstance.lastDistance = currentDistance;\n    var sizeX = alignmentAnimation.sizeX, sizeY = alignmentAnimation.sizeY;\n    var paddingValueX = getPaddingValue(contextInstance, sizeX);\n    var paddingValueY = getPaddingValue(contextInstance, sizeY);\n    var newPositionX = x + panX;\n    var newPositionY = y + panY;\n    var _c = getMouseBoundedPosition(newPositionX, newPositionY, bounds, limitToBounds, paddingValueX, paddingValueY, wrapperComponent), finalX = _c.x, finalY = _c.y;\n    contextInstance.setTransformState(newScale, finalX, finalY);\n};\nvar handlePinchStop = function (contextInstance) {\n    var pinchMidpoint = contextInstance.pinchMidpoint;\n    contextInstance.velocity = null;\n    contextInstance.lastDistance = null;\n    contextInstance.pinchMidpoint = null;\n    contextInstance.pinchStartScale = null;\n    contextInstance.pinchStartDistance = null;\n    handleAlignToScaleBounds(contextInstance, pinchMidpoint === null || pinchMidpoint === void 0 ? void 0 : pinchMidpoint.x, pinchMidpoint === null || pinchMidpoint === void 0 ? void 0 : pinchMidpoint.y);\n};\n\nvar handleDoubleClickStop = function (contextInstance, event) {\n    var onZoomStop = contextInstance.props.onZoomStop;\n    var animationTime = contextInstance.setup.doubleClick.animationTime;\n    cancelTimeout(contextInstance.doubleClickStopEventTimer);\n    contextInstance.doubleClickStopEventTimer = setTimeout(function () {\n        contextInstance.doubleClickStopEventTimer = null;\n        handleCallback(getContext(contextInstance), event, onZoomStop);\n    }, animationTime);\n};\nvar handleDoubleClickResetMode = function (contextInstance, event) {\n    var _a = contextInstance.props, onZoomStart = _a.onZoomStart, onZoom = _a.onZoom;\n    var _b = contextInstance.setup.doubleClick, animationTime = _b.animationTime, animationType = _b.animationType;\n    handleCallback(getContext(contextInstance), event, onZoomStart);\n    resetTransformations(contextInstance, animationTime, animationType, function () {\n        return handleCallback(getContext(contextInstance), event, onZoom);\n    });\n    handleDoubleClickStop(contextInstance, event);\n};\nfunction getDoubleClickScale(mode, scale) {\n    if (mode === \"toggle\") {\n        return scale === 1 ? 1 : -1;\n    }\n    return mode === \"zoomOut\" ? -1 : 1;\n}\nfunction handleDoubleClick(contextInstance, event) {\n    var setup = contextInstance.setup, doubleClickStopEventTimer = contextInstance.doubleClickStopEventTimer, transformState = contextInstance.transformState, contentComponent = contextInstance.contentComponent;\n    var scale = transformState.scale;\n    var _a = contextInstance.props, onZoomStart = _a.onZoomStart, onZoom = _a.onZoom;\n    var _b = setup.doubleClick, disabled = _b.disabled, mode = _b.mode, step = _b.step, animationTime = _b.animationTime, animationType = _b.animationType;\n    if (disabled)\n        return;\n    if (doubleClickStopEventTimer)\n        return;\n    if (mode === \"reset\") {\n        return handleDoubleClickResetMode(contextInstance, event);\n    }\n    if (!contentComponent)\n        return console.error(\"No ContentComponent found\");\n    var delta = getDoubleClickScale(mode, contextInstance.transformState.scale);\n    var newScale = handleCalculateButtonZoom(contextInstance, delta, step);\n    // stop execution when scale didn't change\n    if (scale === newScale)\n        return;\n    handleCallback(getContext(contextInstance), event, onZoomStart);\n    var mousePosition = getMousePosition(event, contentComponent, scale);\n    var targetState = handleZoomToPoint(contextInstance, newScale, mousePosition.x, mousePosition.y);\n    if (!targetState) {\n        return console.error(\"Error during zoom event. New transformation state was not calculated.\");\n    }\n    handleCallback(getContext(contextInstance), event, onZoom);\n    animate(contextInstance, targetState, animationTime, animationType);\n    handleDoubleClickStop(contextInstance, event);\n}\nvar isDoubleClickAllowed = function (contextInstance, event) {\n    var isInitialized = contextInstance.isInitialized, setup = contextInstance.setup, wrapperComponent = contextInstance.wrapperComponent;\n    var _a = setup.doubleClick, disabled = _a.disabled, excluded = _a.excluded;\n    var target = event.target;\n    var isWrapperChild = wrapperComponent === null || wrapperComponent === void 0 ? void 0 : wrapperComponent.contains(target);\n    var isAllowed = isInitialized && target && isWrapperChild && !disabled;\n    if (!isAllowed)\n        return false;\n    var isExcluded = isExcludedNode(target, excluded);\n    if (isExcluded)\n        return false;\n    return true;\n};\n\nvar ZoomPanPinch = /** @class */ (function () {\n    function ZoomPanPinch(props) {\n        var _this = this;\n        this.mounted = true;\n        this.pinchLastCenterX = null;\n        this.pinchLastCenterY = null;\n        this.onChangeCallbacks = new Set();\n        this.onInitCallbacks = new Set();\n        // Components\n        this.wrapperComponent = null;\n        this.contentComponent = null;\n        // Initialization\n        this.isInitialized = false;\n        this.bounds = null;\n        // wheel helpers\n        this.previousWheelEvent = null;\n        this.wheelStopEventTimer = null;\n        this.wheelAnimationTimer = null;\n        // panning helpers\n        this.isPanning = false;\n        this.isWheelPanning = false;\n        this.startCoords = null;\n        this.lastTouch = null;\n        // pinch helpers\n        this.distance = null;\n        this.lastDistance = null;\n        this.pinchStartDistance = null;\n        this.pinchStartScale = null;\n        this.pinchMidpoint = null;\n        // double click helpers\n        this.doubleClickStopEventTimer = null;\n        // velocity helpers\n        this.velocity = null;\n        this.velocityTime = null;\n        this.lastMousePosition = null;\n        // animations helpers\n        this.animate = false;\n        this.animation = null;\n        this.maxBounds = null;\n        // key press\n        this.pressedKeys = {};\n        this.mount = function () {\n            _this.initializeWindowEvents();\n        };\n        this.unmount = function () {\n            _this.cleanupWindowEvents();\n        };\n        this.update = function (newProps) {\n            _this.props = newProps;\n            handleCalculateBounds(_this, _this.transformState.scale);\n            _this.setup = createSetup(newProps);\n        };\n        this.initializeWindowEvents = function () {\n            var _a, _b;\n            var passive = makePassiveEventOption();\n            var currentDocument = (_a = _this.wrapperComponent) === null || _a === void 0 ? void 0 : _a.ownerDocument;\n            var currentWindow = currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.defaultView;\n            (_b = _this.wrapperComponent) === null || _b === void 0 ? void 0 : _b.addEventListener(\"wheel\", _this.onWheelPanning, passive);\n            // Panning on window to allow panning when mouse is out of component wrapper\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mousedown\", _this.onPanningStart, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mousemove\", _this.onPanning, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"mouseup\", _this.onPanningStop, passive);\n            currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.addEventListener(\"mouseleave\", _this.clearPanning, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"keyup\", _this.setKeyUnPressed, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.addEventListener(\"keydown\", _this.setKeyPressed, passive);\n        };\n        this.cleanupWindowEvents = function () {\n            var _a, _b;\n            var passive = makePassiveEventOption();\n            var currentDocument = (_a = _this.wrapperComponent) === null || _a === void 0 ? void 0 : _a.ownerDocument;\n            var currentWindow = currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.defaultView;\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mousedown\", _this.onPanningStart, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mousemove\", _this.onPanning, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"mouseup\", _this.onPanningStop, passive);\n            currentDocument === null || currentDocument === void 0 ? void 0 : currentDocument.removeEventListener(\"mouseleave\", _this.clearPanning, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"keyup\", _this.setKeyUnPressed, passive);\n            currentWindow === null || currentWindow === void 0 ? void 0 : currentWindow.removeEventListener(\"keydown\", _this.setKeyPressed, passive);\n            document.removeEventListener(\"mouseleave\", _this.clearPanning, passive);\n            handleCancelAnimation(_this);\n            (_b = _this.observer) === null || _b === void 0 ? void 0 : _b.disconnect();\n        };\n        this.handleInitializeWrapperEvents = function (wrapper) {\n            // Zooming events on wrapper\n            var passive = makePassiveEventOption();\n            wrapper.addEventListener(\"wheel\", _this.onWheelZoom, passive);\n            wrapper.addEventListener(\"dblclick\", _this.onDoubleClick, passive);\n            wrapper.addEventListener(\"touchstart\", _this.onTouchPanningStart, passive);\n            wrapper.addEventListener(\"touchmove\", _this.onTouchPanning, passive);\n            wrapper.addEventListener(\"touchend\", _this.onTouchPanningStop, passive);\n        };\n        this.handleInitialize = function (wrapper, contentComponent) {\n            var isCentered = false;\n            var centerOnInit = _this.setup.centerOnInit;\n            var hasTarget = function (entries, target) {\n                // eslint-disable-next-line no-restricted-syntax\n                for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                    var entry = entries_1[_i];\n                    if (entry.target === target) {\n                        return true;\n                    }\n                }\n                return false;\n            };\n            _this.applyTransformation();\n            _this.onInitCallbacks.forEach(function (callback) {\n                callback(getContext(_this));\n            });\n            _this.observer = new ResizeObserver(function (entries) {\n                if (hasTarget(entries, wrapper) || hasTarget(entries, contentComponent)) {\n                    if (centerOnInit && !isCentered) {\n                        var currentWidth = contentComponent.offsetWidth;\n                        var currentHeight = contentComponent.offsetHeight;\n                        if (currentWidth > 0 || currentHeight > 0) {\n                            isCentered = true;\n                            _this.setCenter();\n                        }\n                    }\n                    else {\n                        handleCancelAnimation(_this);\n                        handleCalculateBounds(_this, _this.transformState.scale);\n                        handleAlignToBounds(_this, 0);\n                    }\n                }\n            });\n            // Start observing the target node for configured mutations\n            _this.observer.observe(wrapper);\n            _this.observer.observe(contentComponent);\n        };\n        /// ///////\n        // Zoom\n        /// ///////\n        this.onWheelZoom = function (event) {\n            var disabled = _this.setup.disabled;\n            if (disabled)\n                return;\n            var isAllowed = isWheelAllowed(_this, event);\n            if (!isAllowed)\n                return;\n            var keysPressed = _this.isPressingKeys(_this.setup.wheel.activationKeys);\n            if (!keysPressed)\n                return;\n            handleWheelStart(_this, event);\n            handleWheelZoom(_this, event);\n            handleWheelStop(_this, event);\n        };\n        /// ///////\n        // Pan\n        /// ///////\n        this.onWheelPanning = function (event) {\n            var _a = _this.setup, disabled = _a.disabled, wheel = _a.wheel, panning = _a.panning;\n            if (!_this.wrapperComponent ||\n                !_this.contentComponent ||\n                disabled ||\n                !wheel.wheelDisabled ||\n                panning.disabled ||\n                !panning.wheelPanning ||\n                event.ctrlKey) {\n                return;\n            }\n            event.preventDefault();\n            event.stopPropagation();\n            var _b = _this.transformState, positionX = _b.positionX, positionY = _b.positionY;\n            var mouseX = positionX - event.deltaX;\n            var mouseY = positionY - event.deltaY;\n            var newPositionX = panning.lockAxisX ? positionX : mouseX;\n            var newPositionY = panning.lockAxisY ? positionY : mouseY;\n            var _c = _this.setup.alignmentAnimation, sizeX = _c.sizeX, sizeY = _c.sizeY;\n            var paddingValueX = getPaddingValue(_this, sizeX);\n            var paddingValueY = getPaddingValue(_this, sizeY);\n            if (newPositionX === positionX && newPositionY === positionY)\n                return;\n            handleNewPosition(_this, newPositionX, newPositionY, paddingValueX, paddingValueY);\n        };\n        this.onPanningStart = function (event) {\n            var disabled = _this.setup.disabled;\n            var onPanningStart = _this.props.onPanningStart;\n            if (disabled)\n                return;\n            var isAllowed = isPanningStartAllowed(_this, event);\n            if (!isAllowed)\n                return;\n            var keysPressed = _this.isPressingKeys(_this.setup.panning.activationKeys);\n            if (!keysPressed)\n                return;\n            if (event.button === 0 && !_this.setup.panning.allowLeftClickPan)\n                return;\n            if (event.button === 1 && !_this.setup.panning.allowMiddleClickPan)\n                return;\n            if (event.button === 2 && !_this.setup.panning.allowRightClickPan)\n                return;\n            event.preventDefault();\n            event.stopPropagation();\n            handleCancelAnimation(_this);\n            handlePanningStart(_this, event);\n            handleCallback(getContext(_this), event, onPanningStart);\n        };\n        this.onPanning = function (event) {\n            var disabled = _this.setup.disabled;\n            var onPanning = _this.props.onPanning;\n            if (disabled)\n                return;\n            var isAllowed = isPanningAllowed(_this);\n            if (!isAllowed)\n                return;\n            var keysPressed = _this.isPressingKeys(_this.setup.panning.activationKeys);\n            if (!keysPressed)\n                return;\n            event.preventDefault();\n            event.stopPropagation();\n            handlePanning(_this, event.clientX, event.clientY);\n            handleCallback(getContext(_this), event, onPanning);\n        };\n        this.onPanningStop = function (event) {\n            var onPanningStop = _this.props.onPanningStop;\n            if (_this.isPanning) {\n                handlePanningEnd(_this);\n                handleCallback(getContext(_this), event, onPanningStop);\n            }\n        };\n        /// ///////\n        // Pinch\n        /// ///////\n        this.onPinchStart = function (event) {\n            var disabled = _this.setup.disabled;\n            var _a = _this.props, onPinchingStart = _a.onPinchingStart, onZoomStart = _a.onZoomStart;\n            if (disabled)\n                return;\n            var isAllowed = isPinchStartAllowed(_this, event);\n            if (!isAllowed)\n                return;\n            handlePinchStart(_this, event);\n            handleCancelAnimation(_this);\n            handleCallback(getContext(_this), event, onPinchingStart);\n            handleCallback(getContext(_this), event, onZoomStart);\n        };\n        this.onPinch = function (event) {\n            var disabled = _this.setup.disabled;\n            var _a = _this.props, onPinching = _a.onPinching, onZoom = _a.onZoom;\n            if (disabled)\n                return;\n            var isAllowed = isPinchAllowed(_this);\n            if (!isAllowed)\n                return;\n            event.preventDefault();\n            event.stopPropagation();\n            handlePinchZoom(_this, event);\n            handleCallback(getContext(_this), event, onPinching);\n            handleCallback(getContext(_this), event, onZoom);\n        };\n        this.onPinchStop = function (event) {\n            var _a = _this.props, onPinchingStop = _a.onPinchingStop, onZoomStop = _a.onZoomStop;\n            if (_this.pinchStartScale) {\n                handlePinchStop(_this);\n                handleCallback(getContext(_this), event, onPinchingStop);\n                handleCallback(getContext(_this), event, onZoomStop);\n            }\n        };\n        /// ///////\n        // Touch\n        /// ///////\n        this.onTouchPanningStart = function (event) {\n            var disabled = _this.setup.disabled;\n            var onPanningStart = _this.props.onPanningStart;\n            if (disabled)\n                return;\n            var isAllowed = isPanningStartAllowed(_this, event);\n            if (!isAllowed)\n                return;\n            var isDoubleTap = _this.lastTouch &&\n                +new Date() - _this.lastTouch < 200 &&\n                event.touches.length === 1;\n            if (!isDoubleTap) {\n                _this.lastTouch = +new Date();\n                handleCancelAnimation(_this);\n                var touches = event.touches;\n                var isPanningAction = touches.length === 1;\n                var isPinchAction = touches.length === 2;\n                if (isPanningAction) {\n                    handleCancelAnimation(_this);\n                    handlePanningStart(_this, event);\n                    handleCallback(getContext(_this), event, onPanningStart);\n                }\n                if (isPinchAction) {\n                    _this.onPinchStart(event);\n                }\n            }\n        };\n        this.onTouchPanning = function (event) {\n            var disabled = _this.setup.disabled;\n            var onPanning = _this.props.onPanning;\n            if (_this.isPanning && event.touches.length === 1) {\n                if (disabled)\n                    return;\n                var isAllowed = isPanningAllowed(_this);\n                if (!isAllowed)\n                    return;\n                event.preventDefault();\n                event.stopPropagation();\n                var touch = event.touches[0];\n                handlePanning(_this, touch.clientX, touch.clientY);\n                handleCallback(getContext(_this), event, onPanning);\n            }\n            else if (event.touches.length > 1) {\n                _this.onPinch(event);\n            }\n        };\n        this.onTouchPanningStop = function (event) {\n            _this.onPanningStop(event);\n            _this.onPinchStop(event);\n        };\n        /// ///////\n        // Double Click\n        /// ///////\n        this.onDoubleClick = function (event) {\n            var disabled = _this.setup.disabled;\n            if (disabled)\n                return;\n            var isAllowed = isDoubleClickAllowed(_this, event);\n            if (!isAllowed)\n                return;\n            handleDoubleClick(_this, event);\n        };\n        /// ///////\n        // Helpers\n        /// ///////\n        this.clearPanning = function (event) {\n            if (_this.isPanning) {\n                _this.onPanningStop(event);\n            }\n        };\n        this.setKeyPressed = function (e) {\n            _this.pressedKeys[e.key] = true;\n        };\n        this.setKeyUnPressed = function (e) {\n            _this.pressedKeys[e.key] = false;\n        };\n        this.isPressingKeys = function (keys) {\n            if (!keys.length) {\n                return true;\n            }\n            return Boolean(keys.find(function (key) { return _this.pressedKeys[key]; }));\n        };\n        this.setTransformState = function (scale, positionX, positionY) {\n            var onTransformed = _this.props.onTransformed;\n            if (!Number.isNaN(scale) &&\n                !Number.isNaN(positionX) &&\n                !Number.isNaN(positionY)) {\n                if (scale !== _this.transformState.scale) {\n                    _this.transformState.previousScale = _this.transformState.scale;\n                    _this.transformState.scale = scale;\n                }\n                _this.transformState.positionX = positionX;\n                _this.transformState.positionY = positionY;\n                _this.applyTransformation();\n                var ctx_1 = getContext(_this);\n                _this.onChangeCallbacks.forEach(function (callback) { return callback(ctx_1); });\n                handleCallback(ctx_1, { scale: scale, positionX: positionX, positionY: positionY }, onTransformed);\n            }\n            else {\n                console.error(\"Detected NaN set state values\");\n            }\n        };\n        this.setCenter = function () {\n            if (_this.wrapperComponent && _this.contentComponent) {\n                var targetState = getCenterPosition(_this.transformState.scale, _this.wrapperComponent, _this.contentComponent);\n                _this.setTransformState(targetState.scale, targetState.positionX, targetState.positionY);\n            }\n        };\n        this.handleTransformStyles = function (x, y, scale) {\n            if (_this.props.customTransform) {\n                return _this.props.customTransform(x, y, scale);\n            }\n            return getTransformStyles(x, y, scale);\n        };\n        this.applyTransformation = function () {\n            if (!_this.mounted || !_this.contentComponent)\n                return;\n            var _a = _this.transformState, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\n            var transform = _this.handleTransformStyles(positionX, positionY, scale);\n            _this.contentComponent.style.transform = transform;\n        };\n        this.getContext = function () {\n            return getContext(_this);\n        };\n        /**\n         * Hooks\n         */\n        this.onChange = function (callback) {\n            if (!_this.onChangeCallbacks.has(callback)) {\n                _this.onChangeCallbacks.add(callback);\n            }\n            return function () {\n                _this.onChangeCallbacks.delete(callback);\n            };\n        };\n        this.onInit = function (callback) {\n            if (!_this.onInitCallbacks.has(callback)) {\n                _this.onInitCallbacks.add(callback);\n            }\n            return function () {\n                _this.onInitCallbacks.delete(callback);\n            };\n        };\n        /**\n         * Initialization\n         */\n        this.init = function (wrapperComponent, contentComponent) {\n            _this.cleanupWindowEvents();\n            _this.wrapperComponent = wrapperComponent;\n            _this.contentComponent = contentComponent;\n            handleCalculateBounds(_this, _this.transformState.scale);\n            _this.handleInitializeWrapperEvents(wrapperComponent);\n            _this.handleInitialize(wrapperComponent, contentComponent);\n            _this.initializeWindowEvents();\n            _this.isInitialized = true;\n            var ctx = getContext(_this);\n            handleCallback(ctx, undefined, _this.props.onInit);\n        };\n        this.props = props;\n        this.setup = createSetup(this.props);\n        this.transformState = createState(this.props);\n    }\n    return ZoomPanPinch;\n}());\n\nvar Context = React.createContext(null);\nvar getContent = function (children, ctx) {\n    if (typeof children === \"function\") {\n        return children(ctx);\n    }\n    return children;\n};\nvar TransformWrapper = React.forwardRef(function (props, ref) {\n    var instance = useRef(new ZoomPanPinch(props)).current;\n    var content = getContent(props.children, getControls(instance));\n    useImperativeHandle(ref, function () { return getControls(instance); }, [instance]);\n    useEffect(function () {\n        instance.update(props);\n    }, [instance, props]);\n    return React.createElement(Context.Provider, { value: instance }, content);\n});\n\nvar KeepScale = React.forwardRef(function (props, ref) {\n    var localRef = useRef(null);\n    var instance = useContext(Context);\n    useEffect(function () {\n        return instance.onChange(function (ctx) {\n            if (localRef.current) {\n                var positionX = 0;\n                var positionY = 0;\n                localRef.current.style.transform = instance.handleTransformStyles(positionX, positionY, 1 / ctx.instance.transformState.scale);\n            }\n        });\n    }, [instance]);\n    return React.createElement(\"div\", __assign({}, props, { ref: mergeRefs([localRef, ref]) }));\n});\n\nvar initialElementRect = {\n    width: 0,\n    height: 0,\n    y: 0,\n    x: 0,\n    top: 0,\n    bottom: 0,\n    left: 0,\n    right: 0,\n};\nvar useResize = function (ref, onResize, dependencies) {\n    var resizeObserverRef = useRef();\n    var rectRef = useRef(initialElementRect);\n    var didUnmount = useRef(false);\n    useLayoutEffect(function () {\n        var _a;\n        didUnmount.current = false;\n        if (!(\"ResizeObserver\" in window)) {\n            return;\n        }\n        if (ref) {\n            resizeObserverRef.current = new ResizeObserver(function (entries) {\n                var newSize = ref.getBoundingClientRect();\n                if (!Array.isArray(entries) ||\n                    !entries.length ||\n                    didUnmount.current ||\n                    (newSize.width === rectRef.current.width &&\n                        newSize.height === rectRef.current.height))\n                    return;\n                onResize(newSize, ref);\n                rectRef.current = newSize;\n            });\n            (_a = resizeObserverRef.current) === null || _a === void 0 ? void 0 : _a.observe(ref);\n        }\n        return function () {\n            var _a;\n            didUnmount.current = true;\n            if (ref) {\n                (_a = resizeObserverRef.current) === null || _a === void 0 ? void 0 : _a.unobserve(ref);\n            }\n        };\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, __spreadArray([onResize, ref], dependencies, true));\n};\n\nvar previewStyles = {\n    position: \"absolute\",\n    zIndex: 2,\n    top: \"0px\",\n    left: \"0px\",\n    boxSizing: \"border-box\",\n    border: \"3px solid red\",\n    transformOrigin: \"0% 0%\",\n    boxShadow: \"rgba(0,0,0,0.2) 0 0 0 10000000px\",\n};\nvar MiniMap = function (_a) {\n    var _b = _a.width, width = _b === void 0 ? 200 : _b, _c = _a.height, height = _c === void 0 ? 200 : _c, _d = _a.borderColor, borderColor = _d === void 0 ? \"red\" : _d, children = _a.children, rest = __rest(_a, [\"width\", \"height\", \"borderColor\", \"children\"]);\n    var _e = useState(false), initialized = _e[0], setInitialized = _e[1];\n    var instance = useTransformContext();\n    var miniMapInstance = useRef(null);\n    var mainRef = useRef(null);\n    var wrapperRef = useRef(null);\n    var previewRef = useRef(null);\n    var getViewportSize = useCallback(function () {\n        if (instance.wrapperComponent) {\n            var rect = instance.wrapperComponent.getBoundingClientRect();\n            return {\n                width: rect.width,\n                height: rect.height,\n            };\n        }\n        return {\n            width: 0,\n            height: 0,\n        };\n    }, [instance.wrapperComponent]);\n    var getContentSize = useCallback(function () {\n        if (instance.contentComponent) {\n            var rect = instance.contentComponent.getBoundingClientRect();\n            return {\n                width: rect.width / instance.transformState.scale,\n                height: rect.height / instance.transformState.scale,\n            };\n        }\n        return {\n            width: 0,\n            height: 0,\n        };\n    }, [instance.contentComponent, instance.transformState.scale]);\n    var computeMiniMapScale = useCallback(function () {\n        var contentSize = getContentSize();\n        var scaleX = width / contentSize.width;\n        var scaleY = height / contentSize.height;\n        var scale = scaleY > scaleX ? scaleX : scaleY;\n        return scale;\n    }, [getContentSize, height, width]);\n    var computeMiniMapSize = function () {\n        var contentSize = getContentSize();\n        var scaleX = width / contentSize.width;\n        var scaleY = height / contentSize.height;\n        if (scaleY > scaleX) {\n            return { width: width, height: contentSize.height * scaleX };\n        }\n        return { width: contentSize.width * scaleY, height: height };\n    };\n    var computeMiniMapStyle = function () {\n        var scale = computeMiniMapScale();\n        var style = {\n            transform: \"scale(\".concat(scale || 1, \")\"),\n            transformOrigin: \"0% 0%\",\n            position: \"absolute\",\n            boxSizing: \"border-box\",\n            zIndex: 1,\n            overflow: \"hidden\",\n        };\n        Object.keys(style).forEach(function (key) {\n            if (wrapperRef.current) {\n                wrapperRef.current.style[key] = style[key];\n            }\n        });\n    };\n    var transformMiniMap = function () {\n        computeMiniMapStyle();\n        var miniSize = computeMiniMapSize();\n        var wrapSize = getContentSize();\n        if (wrapperRef.current) {\n            wrapperRef.current.style.width = \"\".concat(wrapSize.width, \"px\");\n            wrapperRef.current.style.height = \"\".concat(wrapSize.height, \"px\");\n        }\n        if (mainRef.current) {\n            mainRef.current.style.width = \"\".concat(miniSize.width, \"px\");\n            mainRef.current.style.height = \"\".concat(miniSize.height, \"px\");\n        }\n        if (previewRef.current) {\n            var size = getViewportSize();\n            var scale = computeMiniMapScale();\n            var previewScale = scale * (1 / instance.transformState.scale);\n            var transform = instance.handleTransformStyles(-instance.transformState.positionX * previewScale, -instance.transformState.positionY * previewScale, 1);\n            previewRef.current.style.transform = transform;\n            previewRef.current.style.width = \"\".concat(size.width * previewScale, \"px\");\n            previewRef.current.style.height = \"\".concat(size.height * previewScale, \"px\");\n        }\n    };\n    var initialize = function () {\n        transformMiniMap();\n    };\n    useTransformEffect(function () {\n        transformMiniMap();\n    });\n    useTransformInit(function () {\n        initialize();\n        setInitialized(true);\n    });\n    useResize(instance.contentComponent, initialize, [initialized]);\n    useEffect(function () {\n        return instance.onChange(function (zpp) {\n            var scale = computeMiniMapScale();\n            if (miniMapInstance.current) {\n                miniMapInstance.current.instance.transformState.scale =\n                    zpp.instance.transformState.scale;\n                miniMapInstance.current.instance.transformState.positionX =\n                    zpp.instance.transformState.positionX * scale;\n                miniMapInstance.current.instance.transformState.positionY =\n                    zpp.instance.transformState.positionY * scale;\n            }\n        });\n    }, [computeMiniMapScale, instance, miniMapInstance]);\n    var wrapperStyle = useMemo(function () {\n        return {\n            position: \"relative\",\n            zIndex: 2,\n            overflow: \"hidden\",\n        };\n    }, []);\n    return (React.createElement(\"div\", __assign({}, rest, { ref: mainRef, style: wrapperStyle, className: \"rzpp-mini-map \".concat(rest.className || \"\") }),\n        React.createElement(\"div\", __assign({}, rest, { ref: wrapperRef, className: \"rzpp-wrapper\" }), children),\n        React.createElement(\"div\", { className: \"rzpp-preview\", ref: previewRef, style: __assign(__assign({}, previewStyles), { borderColor: borderColor }) })));\n};\n\nfunction styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar css_248z = \".transform-component-module_wrapper__SPB86 {\\n  position: relative;\\n  width: -moz-fit-content;\\n  width: fit-content;\\n  height: -moz-fit-content;\\n  height: fit-content;\\n  overflow: hidden;\\n  -webkit-touch-callout: none; /* iOS Safari */\\n  -webkit-user-select: none; /* Safari */\\n  -khtml-user-select: none; /* Konqueror HTML */\\n  -moz-user-select: none; /* Firefox */\\n  -ms-user-select: none; /* Internet Explorer/Edge */\\n  user-select: none;\\n  margin: 0;\\n  padding: 0;\\n  transform: translate3d(0, 0, 0);\\n}\\n.transform-component-module_content__FBWxo {\\n  display: flex;\\n  flex-wrap: wrap;\\n  width: -moz-fit-content;\\n  width: fit-content;\\n  height: -moz-fit-content;\\n  height: fit-content;\\n  margin: 0;\\n  padding: 0;\\n  transform-origin: 0% 0%;\\n}\\n.transform-component-module_content__FBWxo img {\\n  pointer-events: none;\\n}\\n\";\nvar styles = {\"wrapper\":\"transform-component-module_wrapper__SPB86\",\"content\":\"transform-component-module_content__FBWxo\"};\nstyleInject(css_248z);\n\nvar TransformComponent = function (_a) {\n    var children = _a.children, _b = _a.wrapperClass, wrapperClass = _b === void 0 ? \"\" : _b, _c = _a.contentClass, contentClass = _c === void 0 ? \"\" : _c, wrapperStyle = _a.wrapperStyle, contentStyle = _a.contentStyle, _d = _a.wrapperProps, wrapperProps = _d === void 0 ? {} : _d, _e = _a.contentProps, contentProps = _e === void 0 ? {} : _e;\n    var _f = useContext(Context), init = _f.init, cleanupWindowEvents = _f.cleanupWindowEvents;\n    var wrapperRef = useRef(null);\n    var contentRef = useRef(null);\n    useEffect(function () {\n        var wrapper = wrapperRef.current;\n        var content = contentRef.current;\n        if (wrapper !== null && content !== null && init) {\n            init === null || init === void 0 ? void 0 : init(wrapper, content);\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        return function () {\n            cleanupWindowEvents === null || cleanupWindowEvents === void 0 ? void 0 : cleanupWindowEvents();\n        };\n    }, []);\n    return (React.createElement(\"div\", __assign({}, wrapperProps, { ref: wrapperRef, className: \"\".concat(baseClasses.wrapperClass, \" \").concat(styles.wrapper, \" \").concat(wrapperClass), style: wrapperStyle }),\n        React.createElement(\"div\", __assign({}, contentProps, { ref: contentRef, className: \"\".concat(baseClasses.contentClass, \" \").concat(styles.content, \" \").concat(contentClass), style: contentStyle }), children)));\n};\n\nvar useTransformContext = function () {\n    var libraryContext = useContext(Context);\n    if (!libraryContext) {\n        throw new Error(\"Transform context must be placed inside TransformWrapper\");\n    }\n    return libraryContext;\n};\n\nvar useControls = function () {\n    var libraryContext = useTransformContext();\n    return getControls(libraryContext);\n};\n\nvar useTransformInit = function (callback) {\n    var libraryContext = useTransformContext();\n    useEffect(function () {\n        var unmountCallback;\n        var unmount;\n        if (libraryContext.contentComponent && libraryContext.wrapperComponent) {\n            unmountCallback = callback(getState(libraryContext));\n        }\n        else {\n            unmount = libraryContext.onInit(function (ref) {\n                unmountCallback = callback(getState(ref.instance));\n            });\n        }\n        return function () {\n            unmount === null || unmount === void 0 ? void 0 : unmount();\n            unmountCallback === null || unmountCallback === void 0 ? void 0 : unmountCallback();\n        };\n    }, []);\n};\n\nvar useTransformEffect = function (callback) {\n    var libraryContext = useTransformContext();\n    useEffect(function () {\n        var unmountCallback;\n        var unmount = libraryContext.onChange(function (ref) {\n            unmountCallback = callback(getState(ref.instance));\n        });\n        return function () {\n            unmount();\n            unmountCallback === null || unmountCallback === void 0 ? void 0 : unmountCallback();\n        };\n    }, [callback, libraryContext]);\n};\n\nfunction useTransformComponent(callback) {\n    var libraryContext = useTransformContext();\n    var _a = useState(callback(getState(libraryContext))), transformRender = _a[0], setTransformRender = _a[1];\n    useEffect(function () {\n        var mounted = true;\n        var unmount = libraryContext.onChange(function (ref) {\n            if (mounted) {\n                setTransformRender(callback(getState(ref.instance)));\n            }\n        });\n        return function () {\n            unmount();\n            mounted = false;\n        };\n    }, [callback, libraryContext]);\n    return transformRender;\n}\n\nexport { Context, KeepScale, MiniMap, TransformComponent, TransformWrapper, getCenterPosition, getMatrixTransformStyles, getTransformStyles, useControls, useTransformComponent, useTransformContext, useTransformEffect, useTransformInit };\n//# sourceMappingURL=index.esm.js.map\n","import { useCallback, useRef, useState } from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faSearchPlus,\n    faSearchMinus,\n    faCompress,\n    faDownload,\n    faXmark,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { TransformWrapper, TransformComponent } from \"react-zoom-pan-pinch\"\nimport { LoadingIndicator, BodyPortal } from \"@ourworldindata/components\"\nimport { triggerDownloadFromBlob } from \"@ourworldindata/utils\"\nimport { useTriggerOnEscape } from \"./hooks.js\"\nimport cx from \"classnames\"\n\nconst LightboxImage = ({\n    src,\n    alt,\n    isLoaded,\n    setIsLoaded,\n    width,\n    height,\n}: {\n    src: string\n    alt: string\n    isLoaded: boolean\n    setIsLoaded: any\n    width: number\n    height: number\n}) => {\n    return (\n        <img\n            width={width}\n            height={height}\n            onLoad={() => setIsLoaded(true)}\n            className={cx({\n                \"lightbox__img--is-svg\": src.endsWith(\".svg\"),\n            })}\n            src={src}\n            alt={alt}\n            style={{ opacity: !isLoaded ? 0 : 1, transition: \"opacity 1s\" }}\n        />\n    )\n}\n\nexport const Lightbox = ({\n    onClose,\n    imgSrc,\n    imgFilename,\n    width,\n    height,\n    alt,\n    hideDownload,\n}: {\n    onClose: () => void\n    imgSrc: string\n    imgFilename?: string\n    width: number\n    height: number\n    alt: string\n    // With CF Images, the filename is not the last part of the URL\n    // so we need to pass it separately\n    hideDownload?: boolean\n}) => {\n    const [isLoaded, setIsLoaded] = useState(false)\n    const contentRef = useRef<HTMLDivElement>(null)\n\n    const handleDownload = useCallback(async () => {\n        const response = await fetch(imgSrc)\n        const blob = await response.blob()\n        const filename = imgFilename || imgSrc.split(\"/\").pop() || \"image\"\n        triggerDownloadFromBlob(filename, blob)\n    }, [imgFilename, imgSrc])\n\n    const onContentClick = useCallback(\n        (e: React.MouseEvent) => {\n            if (e.target === contentRef.current) {\n                onClose()\n            }\n        },\n        [onClose]\n    )\n\n    useTriggerOnEscape(onClose)\n\n    return (\n        <BodyPortal containerClassName=\"lightbox\">\n            <div className=\"container\">\n                {!isLoaded && <LoadingIndicator color=\"#ccc\" />}\n                <TransformWrapper\n                    doubleClick={{ mode: \"reset\" }}\n                    smooth={false}\n                >\n                    {({ zoomIn, zoomOut, resetTransform }) => (\n                        <>\n                            <div\n                                className=\"content\"\n                                ref={contentRef}\n                                onClick={onContentClick}\n                            >\n                                <TransformComponent>\n                                    <LightboxImage\n                                        width={width}\n                                        height={height}\n                                        src={imgSrc}\n                                        alt={alt}\n                                        isLoaded={isLoaded}\n                                        setIsLoaded={setIsLoaded}\n                                    />\n                                </TransformComponent>\n                            </div>\n                            <div className=\"tools\">\n                                {isLoaded && (\n                                    <>\n                                        <button\n                                            aria-label=\"Zoom in\"\n                                            onClick={() => zoomIn()}\n                                        >\n                                            <FontAwesomeIcon\n                                                icon={faSearchPlus}\n                                            />\n                                        </button>\n                                        <button\n                                            aria-label=\"Zoom out\"\n                                            onClick={() => zoomOut()}\n                                        >\n                                            <FontAwesomeIcon\n                                                icon={faSearchMinus}\n                                            />\n                                        </button>\n                                        <button\n                                            aria-label=\"Reset zoom\"\n                                            onClick={() => resetTransform()}\n                                        >\n                                            <FontAwesomeIcon\n                                                icon={faCompress}\n                                            />\n                                        </button>\n                                        {!hideDownload && (\n                                            <button\n                                                onClick={handleDownload}\n                                                aria-label=\"Download high resolution image\"\n                                            >\n                                                <FontAwesomeIcon\n                                                    icon={faDownload}\n                                                />\n                                            </button>\n                                        )}\n                                    </>\n                                )}\n                                <button aria-label=\"Close\" onClick={onClose}>\n                                    <FontAwesomeIcon icon={faXmark} />\n                                </button>\n                            </div>\n                        </>\n                    )}\n                </TransformWrapper>\n            </div>\n        </BodyPortal>\n    )\n}\n","import cx from \"classnames\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faDownload } from \"@fortawesome/free-solid-svg-icons\"\n\ninterface FloatingDownloadButtonProps {\n    label: string\n    onClick: () => void\n    containerClassName?: string\n}\n\nexport function FloatingDownloadButton({\n    label,\n    onClick,\n    containerClassName,\n}: FloatingDownloadButtonProps) {\n    return (\n        <div\n            className={cx(\n                \"article-block__image-download-button-container\",\n                containerClassName\n            )}\n        >\n            <button\n                aria-label={label}\n                className=\"article-block__image-download-button\"\n                onClick={(event) => {\n                    event.preventDefault()\n                    onClick()\n                }}\n            >\n                <div className=\"article-block__image-download-button-background-layer\">\n                    <FontAwesomeIcon\n                        icon={faDownload}\n                        className=\"article-block__image-download-button-icon\"\n                    />\n\n                    <span className=\"article-block__image-download-button-text\">\n                        {label}\n                    </span>\n                </div>\n            </button>\n        </div>\n    )\n}\n","import { useCallback, useState } from \"react\"\nimport {\n    AssetMap,\n    generateSourceProps,\n    ImageMetadata,\n    readFromAssetMap,\n    triggerDownloadFromBlob,\n} from \"@ourworldindata/utils\"\nimport cx from \"classnames\"\nimport { CLOUDFLARE_IMAGES_URL } from \"../../../settings/clientSettings.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { useImage } from \"../utils.js\"\nimport { BlockErrorFallback } from \"./BlockErrorBoundary.js\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../../SiteConstants.js\"\nimport { useMediaQuery } from \"usehooks-ts\"\nimport { Container } from \"./layout.js\"\nimport { Lightbox } from \"../../Lightbox.js\"\nimport { FloatingDownloadButton } from \"./FloatingDownloadButton.js\"\n\n// generates rules that tell the browser:\n// below the medium breakpoint, the image will be 95vw wide\n// above that breakpoint, the image will be (at maximum) some fraction of 1280px\nconst generateResponsiveSizes = (numberOfColumns: number): string =>\n    `(max-width: 960px) 95vw, (min-width: 960px) ${Math.floor(\n        1280 * (numberOfColumns / 12)\n    )}px`\n\nconst gridSpan2 = generateResponsiveSizes(2)\nconst gridSpan5 = generateResponsiveSizes(5)\nconst gridSpan6 = generateResponsiveSizes(6)\nconst gridSpan7 = generateResponsiveSizes(7)\nconst gridSpan8 = generateResponsiveSizes(8)\n\nexport type ImageParentContainer =\n    | Exclude<Container, \"sticky-right-left-heading-column\">\n    | \"author-byline\"\n    | \"thumbnail\"\n    | \"full-width\"\n    | \"person\"\n    | \"span-5\"\n    | \"span-6\"\n    | \"span-7\"\n    | \"span-8\"\n\nconst containerSizes: Record<ImageParentContainer, string> = {\n    [\"default\"]: gridSpan8,\n    [\"sticky-right-left-column\"]: gridSpan5,\n    [\"sticky-right-right-column\"]: gridSpan7,\n    [\"sticky-left-left-column\"]: gridSpan7,\n    [\"sticky-left-right-column\"]: gridSpan5,\n    [\"side-by-side\"]: gridSpan6,\n    [\"summary\"]: gridSpan6,\n    [\"thumbnail\"]: \"350px\",\n    [\"datapage\"]: gridSpan6,\n    [\"data-insight\"]: \"100%\",\n    [\"full-width\"]: \"100vw\",\n    [\"key-insight\"]: gridSpan5,\n    [\"about-page\"]: gridSpan8,\n    [\"author-byline\"]: \"48px\",\n    [\"author-header\"]: gridSpan2,\n    [\"person\"]: gridSpan2,\n    [\"span-5\"]: gridSpan5,\n    [\"span-6\"]: gridSpan6,\n    [\"span-7\"]: gridSpan7,\n    [\"span-8\"]: gridSpan8,\n}\n\nexport const LIGHTBOX_IMAGE_CLASS = \"lightbox-image\"\n\nfunction makeSrc(image: ImageMetadata, assetMap?: AssetMap) {\n    if (!image.cloudflareId) {\n        throw new Error(\"Image has no cloudflareId\")\n    }\n    return readFromAssetMap(assetMap, {\n        path: image.filename,\n        fallback: `${CLOUDFLARE_IMAGES_URL}/${image.cloudflareId}/w=${image.originalWidth}`,\n    })\n}\n\nexport default function Image(props: {\n    filename?: string\n    smallFilename?: string\n    alt?: string\n    hasOutline?: boolean\n    className?: string\n    containerType?: ImageParentContainer\n    shouldLightbox?: boolean\n    shouldHideDownloadButton?: boolean\n    preferSmallFilename?: boolean\n    // Manually-passed image data (for StaticViz)\n    imageData?: ImageMetadata\n    smallImageData?: ImageMetadata\n}) {\n    const {\n        filename,\n        smallFilename,\n        hasOutline,\n        containerType = \"default\",\n        shouldLightbox = true,\n        shouldHideDownloadButton = false,\n        preferSmallFilename,\n        imageData,\n        smallImageData,\n    } = props\n\n    const className = cx(\"image\", props.className, {\n        \"image--has-outline\": hasOutline,\n    })\n\n    // Whether we should show the lightbox and a download button\n    const isInteractive = shouldLightbox && containerType !== \"thumbnail\"\n\n    const { archiveContext, isPreviewing } = useDocumentContext()\n    const isOnArchivalPage = archiveContext?.type === \"archive-page\"\n    const assetMap = isOnArchivalPage\n        ? archiveContext?.assets?.runtime\n        : undefined\n    const isSmall = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n\n    // Always call hooks unconditionally, then choose which data to use\n    const imageFromHook = useImage(filename)\n    const smallImageFromHook = useImage(smallFilename)\n\n    // Use manually-passed image data if provided, otherwise use filename-based lookup\n    const image = imageData || imageFromHook\n    const smallImage = smallImageData || smallImageFromHook\n    const activeImage =\n        (isSmall || preferSmallFilename) && smallImage ? smallImage : image\n    const [isLightboxOpen, setIsLightboxOpen] = useState(false)\n\n    const openLightbox = useCallback(() => {\n        if (isInteractive) {\n            setIsLightboxOpen(true)\n        }\n    }, [isInteractive])\n\n    const renderImageError = (name: string) => (\n        <BlockErrorFallback\n            className={className}\n            error={{\n                name: \"Image error\",\n                message: `Image with filename \"${name}\" not found. This block will not render when the page is baked.`,\n            }}\n        />\n    )\n\n    const handleDownload = useCallback(async () => {\n        if (!activeImage) return\n        const { filename } = activeImage\n        const src = makeSrc(activeImage, assetMap)\n        if (src && filename) {\n            const response = await fetch(src)\n            const blob = await response.blob()\n            triggerDownloadFromBlob(filename, blob)\n        }\n    }, [activeImage, assetMap])\n\n    if (!activeImage || !activeImage.cloudflareId) {\n        if (isPreviewing) {\n            return renderImageError(filename || \"unknown\")\n        }\n        // Don't render anything if we're not previewing (i.e. a bake) and the image is not found\n        return null\n    }\n\n    const alt = props.alt ?? activeImage.defaultAlt\n\n    const imageSrc = makeSrc(activeImage, assetMap)\n    const sourceProps = generateSourceProps(\n        smallImage,\n        activeImage,\n        CLOUDFLARE_IMAGES_URL,\n        assetMap\n    )\n\n    const downloadButton =\n        isInteractive && !shouldHideDownloadButton ? (\n            <FloatingDownloadButton\n                label=\"Download\"\n                onClick={() => void handleDownload()}\n            />\n        ) : null\n\n    return (\n        <div className={className}>\n            <picture onClick={openLightbox}>\n                {sourceProps.map((props, i) => (\n                    <source\n                        key={i}\n                        {...props}\n                        type=\"image/png\"\n                        sizes={\n                            containerSizes[containerType] ??\n                            containerSizes.default\n                        }\n                    />\n                ))}\n                <img\n                    src={imageSrc}\n                    alt={alt}\n                    className={isInteractive ? LIGHTBOX_IMAGE_CLASS : undefined}\n                    loading=\"lazy\"\n                    // There's no way of knowing in advance whether we'll be showing the image or smallImage - we just have to choose one\n                    // I went with image, as we currently only use smallImage for data insights\n                    width={activeImage.originalWidth ?? undefined}\n                    height={activeImage.originalHeight ?? undefined}\n                />\n            </picture>\n            {downloadButton}\n            {isLightboxOpen && (\n                <Lightbox\n                    imgSrc={imageSrc}\n                    onClose={() => setIsLightboxOpen(false)}\n                    imgFilename={activeImage.filename}\n                    width={activeImage.originalWidth}\n                    height={activeImage.originalHeight}\n                    alt={alt}\n                    hideDownload={shouldHideDownloadButton}\n                />\n            )}\n        </div>\n    )\n}\n","import {\n    DataPageRelatedResearch,\n    DEFAULT_THUMBNAIL_FILENAME,\n} from \"@ourworldindata/types\"\nimport { formatAuthors } from \"@ourworldindata/utils\"\nimport { BAKED_BASE_URL } from \"../settings/clientSettings.js\"\nimport Image from \"./gdocs/components/Image.js\"\n\nexport default function DataPageResearchAndWriting({\n    relatedResearch,\n}: {\n    relatedResearch: DataPageRelatedResearch[]\n}) {\n    return (\n        <div className=\"section-wrapper grid\">\n            <h2\n                className=\"related-research__title span-cols-3 span-lg-cols-12\"\n                id=\"research-and-writing\"\n            >\n                Related research and writing\n            </h2>\n            <div className=\"related-research__items grid grid-cols-9 grid-lg-cols-12 span-cols-9 span-lg-cols-12\">\n                {relatedResearch.map((research) => (\n                    <a\n                        href={research.url}\n                        key={research.url}\n                        className=\"related-research__item grid grid-cols-4 grid-lg-cols-6 grid-sm-cols-12 span-cols-4 span-lg-cols-6 span-sm-cols-12\"\n                    >\n                        <Thumbnail filename={research.imageUrl} />\n                        <div className=\"span-cols-3 span-lg-cols-4 span-sm-cols-9\">\n                            <h3 className=\"related-article__title\">\n                                {research.title}\n                            </h3>\n                            <div className=\"related-article__authors body-3-medium-italic\">\n                                {research.authors &&\n                                    research.authors.length &&\n                                    formatAuthors(research.authors)}\n                            </div>\n                        </div>\n                    </a>\n                ))}\n            </div>\n        </div>\n    )\n}\n\nfunction Thumbnail({ filename }: { filename: string }) {\n    if (!filename) {\n        return (\n            <img\n                className=\"span-lg-cols-2 span-sm-cols-3\"\n                src={`${BAKED_BASE_URL}/${DEFAULT_THUMBNAIL_FILENAME}`}\n            />\n        )\n    }\n    return (\n        <Image\n            className=\"span-lg-cols-2 span-sm-cols-3\"\n            containerType=\"thumbnail\"\n            filename={filename}\n            shouldLightbox={false}\n        />\n    )\n}\n","import { EnrichedBlockCallout } from \"@ourworldindata/types\"\nimport { faInfoCircle } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\n\nconst iconMap = {\n    info: faInfoCircle,\n}\n\nexport default function Callout({\n    className,\n    block,\n}: {\n    className?: string\n    block: EnrichedBlockCallout\n}) {\n    const icon = block.icon ? iconMap[block.icon] : null\n    return (\n        <div className={className}>\n            {block.title ? (\n                <h4 className=\"callout-heading\">\n                    {icon && (\n                        <FontAwesomeIcon className=\"callout-icon\" icon={icon} />\n                    )}\n                    {block.title}\n                </h4>\n            ) : null}\n            <ArticleBlocks blocks={block.text} />\n        </div>\n    )\n}\n","import { useState } from \"react\"\nimport {\n    EXPLORER_DYNAMIC_THUMBNAIL_URL,\n    GRAPHER_DYNAMIC_THUMBNAIL_URL,\n} from \"../../../settings/clientSettings.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faHeartBroken } from \"@fortawesome/free-solid-svg-icons\"\n\ninterface ChartPreviewProps {\n    chartSlug: string\n    queryString?: string\n    chartType?: \"chart\" | \"explorer\"\n}\n\nexport function ChartPreview({\n    chartSlug,\n    queryString = \"\",\n    chartType,\n}: ChartPreviewProps) {\n    const [imgLoaded, setImgLoaded] = useState(false)\n    const [imgError, setImgError] = useState(false)\n    const baseUrl =\n        chartType === \"explorer\"\n            ? EXPLORER_DYNAMIC_THUMBNAIL_URL\n            : GRAPHER_DYNAMIC_THUMBNAIL_URL\n\n    const thumbnailUrl = `${baseUrl}/${chartSlug}.png${queryString}`\n\n    return (\n        <div className=\"chart-preview\">\n            {imgError ? (\n                <div className=\"chart-preview-error\">\n                    <FontAwesomeIcon icon={faHeartBroken} />\n                    Preview unavailable\n                </div>\n            ) : (\n                <img\n                    src={thumbnailUrl}\n                    alt=\"Chart preview\"\n                    style={{\n                        display: imgLoaded ? \"block\" : \"none\",\n                    }}\n                    onLoad={() => setImgLoaded(true)}\n                    onError={() => setImgError(true)}\n                />\n            )}\n            {!imgLoaded && !imgError && (\n                <div className=\"chart-preview-loading\">\n                    Loading preview&hellip;\n                </div>\n            )}\n        </div>\n    )\n}\n","import { getLinkType } from \"@ourworldindata/components\"\nimport { SpanLink } from \"@ourworldindata/types\"\nimport { useLinkedDocument, useLinkedChart } from \"../utils.js\"\nimport { Url } from \"@ourworldindata/utils\"\nimport Tippy from \"@tippyjs/react\"\nimport SpanElements from \"./SpanElements.js\"\nimport { ChartPreview } from \"./ChartPreview.js\"\nimport { SiteAnalytics } from \"../../SiteAnalytics.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faChartLine } from \"@fortawesome/free-solid-svg-icons\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport default function LinkedA({ span }: { span: SpanLink }) {\n    const linkType = getLinkType(span.url)\n    const { archiveContext, isPreviewing } = useDocumentContext()\n    const isOnArchivalPage = archiveContext?.type === \"archive-page\"\n    const { linkedDocument, errorMessage } = useLinkedDocument(span.url)\n    const { linkedChart } = useLinkedChart(span.url)\n\n    if (linkType === \"url\") {\n        return (\n            <a href={span.url} className=\"span-link\">\n                <SpanElements spans={span.children} />\n            </a>\n        )\n    }\n    if (linkedChart) {\n        const url = Url.fromURL(linkedChart.resolvedUrl)\n        const chartSlug = url.slug || \"\"\n        const queryString = url.queryStr\n\n        const chartLink = (\n            <a\n                href={linkedChart.resolvedUrl}\n                className=\"span-link span-linked-chart\"\n            >\n                <SpanElements spans={span.children} />\n                <FontAwesomeIcon\n                    className=\"span-linked-chart-icon\"\n                    icon={faChartLine}\n                />\n            </a>\n        )\n\n        if (isOnArchivalPage) {\n            return chartLink\n        }\n\n        return (\n            <Tippy\n                content={\n                    <ChartPreview\n                        chartType={url.isExplorer ? \"explorer\" : \"chart\"}\n                        chartSlug={chartSlug}\n                        queryString={queryString}\n                    />\n                }\n                onShow={() =>\n                    analytics.logChartPreviewMouseover(linkedChart.resolvedUrl)\n                }\n                delay={[300, 0]}\n                placement=\"top\"\n                maxWidth={512}\n                theme=\"light\"\n                arrow={false}\n                touch={false}\n            >\n                {chartLink}\n            </Tippy>\n        )\n    }\n    if (linkedDocument && linkedDocument.published && linkedDocument.url) {\n        return (\n            <a href={linkedDocument.url} className=\"span-link\">\n                <SpanElements spans={span.children} />\n            </a>\n        )\n    }\n    if (errorMessage && isPreviewing) {\n        return (\n            <span className=\"span-link--error\" title={errorMessage}>\n                <SpanElements spans={span.children} />\n            </span>\n        )\n    }\n    return <SpanElements spans={span.children} />\n}\n","import { Span, SpanCallout } from \"@ourworldindata/types\"\nimport * as React from \"react\"\nimport { match } from \"ts-pattern\"\nimport LinkedA from \"./LinkedA.js\"\nimport SpanElements from \"./SpanElements.js\"\nimport { useGuidedChartLinkHandler } from \"@ourworldindata/grapher\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faEye } from \"@fortawesome/free-solid-svg-icons\"\nimport { spansToUnformattedPlainText } from \"@ourworldindata/utils\"\nimport cx from \"classnames\"\nimport { useCalloutValue } from \"../utils.js\"\n\nfunction SpanCalloutElement({\n    span,\n}: {\n    span: SpanCallout\n}): React.ReactElement {\n    const value = useCalloutValue(span.functionName, span.parameters)\n    return value ? <span className=\"span-callout\">{value}</span> : <></>\n}\n\nexport default function SpanElement({\n    span,\n    shouldRenderLinks = true,\n}: {\n    span: Span\n    shouldRenderLinks?: boolean\n}): React.ReactElement {\n    const handleGuidedChartLinkClick = useGuidedChartLinkHandler()\n    const [hasHydrated, setHasHydrated] = React.useState(false)\n    React.useEffect(() => {\n        setHasHydrated(true)\n    }, [])\n\n    return match(span)\n        .with({ spanType: \"span-simple-text\" }, (span) => (\n            <span\n                // A fix for the legacy way we did CTAs for data insights\n                // If/once we've migrated them all to use the {.cta} component, this won't be necessary\n                // TODO: https://github.com/owid/owid-grapher/issues/5437\n                className={cx({ \"span-plain-arrow\": span.text.trim() === \"→\" })}\n            >\n                {span.text}\n            </span>\n        ))\n        .with({ spanType: \"span-link\" }, (span) =>\n            shouldRenderLinks ? (\n                <LinkedA span={span} />\n            ) : (\n                <span>\n                    <SpanElements\n                        spans={span.children}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </span>\n            )\n        )\n        .with({ spanType: \"span-ref\" }, (span) =>\n            shouldRenderLinks ? (\n                <a href={span.url} className=\"ref\">\n                    <SpanElements\n                        spans={span.children}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </a>\n            ) : (\n                <span className=\"ref\">\n                    <SpanElements\n                        spans={span.children}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </span>\n            )\n        )\n        .with({ spanType: \"span-guided-chart-link\" }, (span) => {\n            if (!shouldRenderLinks) {\n                return (\n                    <span className=\"guided-chart-link\">\n                        <SpanElements\n                            spans={span.children}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    </span>\n                )\n            }\n\n            const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n                e.preventDefault()\n                if (handleGuidedChartLinkClick) {\n                    handleGuidedChartLinkClick(span.url)\n                }\n            }\n\n            return (\n                <a\n                    className=\"guided-chart-link\"\n                    href={span.url}\n                    aria-label={\n                        hasHydrated\n                            ? `\"${spansToUnformattedPlainText(span.children)}\". Click to set this section's chart to this view.`\n                            : undefined\n                    }\n                    onClick={handleClick}\n                >\n                    <FontAwesomeIcon icon={faEye} />\n                    <SpanElements\n                        spans={span.children}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                </a>\n            )\n        })\n        .with({ spanType: \"span-dod\" }, (span) => (\n            <span className=\"dod-span\" data-id={`${span.id}`} tabIndex={0}>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </span>\n        ))\n        .with({ spanType: \"span-newline\" }, () => <br />)\n        .with({ spanType: \"span-italic\" }, (span) => (\n            <em>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </em>\n        ))\n        .with({ spanType: \"span-bold\" }, (span) => (\n            <strong>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </strong>\n        ))\n        .with({ spanType: \"span-underline\" }, (span) => (\n            <u>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </u>\n        ))\n        .with({ spanType: \"span-subscript\" }, (span) => (\n            <sub>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </sub>\n        ))\n        .with({ spanType: \"span-superscript\" }, (span) => (\n            <sup>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </sup>\n        ))\n        .with({ spanType: \"span-quote\" }, (span) => (\n            <q>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </q>\n        ))\n        .with({ spanType: \"span-fallback\" }, (span) => (\n            <span>\n                <SpanElements\n                    spans={span.children}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </span>\n        ))\n        .with({ spanType: \"span-callout\" }, (span) => (\n            <SpanCalloutElement span={span} />\n        ))\n        .exhaustive()\n}\n","import { Span } from \"@ourworldindata/types\"\nimport SpanElement from \"./SpanElement.js\"\n\nexport default function SpanElements({\n    spans,\n    shouldRenderLinks = true,\n}: {\n    spans: Span[]\n    shouldRenderLinks?: boolean\n}) {\n    return (\n        <>\n            {spans.map((span, index) => (\n                <SpanElement\n                    key={index}\n                    span={span}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            ))}\n        </>\n    )\n}\n","import { MultiDimDataPageConfigEnriched } from \"@ourworldindata/types\"\nimport {\n    Url,\n    fetchWithRetry,\n    MultiDimDataPageConfig,\n} from \"@ourworldindata/utils\"\nimport { useState, useEffect } from \"react\"\nimport { MULTI_DIM_DYNAMIC_CONFIG_URL } from \"../settings/clientSettings.js\"\nimport MultiDim from \"./multiDim/MultiDim.js\"\nimport { GrapherProgrammaticInterface } from \"@ourworldindata/grapher\"\n\ninterface MultiDimEmbedProps {\n    url: string\n    chartConfig: Partial<GrapherProgrammaticInterface>\n    isPreviewing?: boolean\n}\n\nexport const MultiDimEmbed: React.FC<MultiDimEmbedProps> = (\n    props: MultiDimEmbedProps\n) => {\n    const { url, isPreviewing } = props\n    const [config, setConfig] = useState<MultiDimDataPageConfigEnriched | null>(\n        null\n    )\n    const [error, setError] = useState<string | null>(null)\n\n    const embedUrl = Url.fromURL(url)\n    const { queryStr, slug } = embedUrl\n\n    useEffect(() => {\n        let ignore = false\n        if (!slug) {\n            setError(\"No slug found in URL\")\n            return\n        }\n\n        const fetchConfig = async () => {\n            try {\n                const mdimConfigUrl = `${MULTI_DIM_DYNAMIC_CONFIG_URL}/${slug}.json${isPreviewing ? \"?nocache\" : \"\"}`\n                const multiDimConfig = await fetchWithRetry(mdimConfigUrl).then(\n                    (res) => res.json()\n                )\n                if (ignore) return\n                setConfig(multiDimConfig)\n            } catch {\n                setError(\"Failed to load chart configuration\")\n            }\n        }\n\n        void fetchConfig()\n\n        return () => {\n            ignore = true\n        }\n    }, [isPreviewing, slug])\n\n    if (error) {\n        return <div>Error: {error}</div>\n    }\n\n    if (!config || !slug) {\n        return <div>Loading...</div>\n    }\n\n    return (\n        <MultiDim\n            slug={slug}\n            config={MultiDimDataPageConfig.fromObject(config)}\n            localGrapherConfig={props.chartConfig}\n            queryStr={queryStr}\n            isPreviewing={isPreviewing}\n        />\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { useRef, useMemo, useContext, useEffect } from \"react\"\nimport { GuidedChartContext } from \"@ourworldindata/grapher\"\nimport { EnrichedBlockChart, Url } from \"@ourworldindata/utils\"\nimport { ChartConfigType, GRAPHER_PREVIEW_CLASS } from \"@ourworldindata/types\"\nimport { useLinkedChart } from \"../utils.js\"\nimport SpanElements from \"./SpanElements.js\"\nimport cx from \"classnames\"\nimport { GrapherWithFallback } from \"../../GrapherWithFallback.js\"\nimport { MultiDimEmbed } from \"../../MultiDimEmbed.js\"\nimport { useEmbedChart } from \"../../hooks.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\n\nexport default function Chart({\n    d,\n    className,\n    fullWidthOnMobile = false,\n}: {\n    d: EnrichedBlockChart\n    className?: string\n    fullWidthOnMobile?: boolean\n}) {\n    const { isPreviewing, archiveContext } = useDocumentContext()\n    const refChartContainer = useRef<HTMLDivElement>(null)\n    const archiveIframeRef = useRef<HTMLIFrameElement | null>(null)\n    useEmbedChart(0, refChartContainer, isPreviewing)\n\n    // Connect chart ref to GuidedChartContext for guided chart scrollTo on mobile\n    const guidedChartContext = useContext(GuidedChartContext)\n    useEffect(() => {\n        if (guidedChartContext?.chartRef && refChartContainer.current) {\n            guidedChartContext.chartRef.current = refChartContainer.current\n        }\n    }, [guidedChartContext])\n\n    // d.url may use an old slug that has since had a redirect created for it\n    // useLinkedChart references a hashmap that has resolved these old slugs to their current chart\n    // It also extracts the queryString from d.url (if present) and appends it to linkedChart.resolvedUrl\n    // This means we can link to the same chart multiple times with different querystrings\n    // and it should all resolve correctly via the same linkedChart\n    const { linkedChart } = useLinkedChart(d.url)\n    const resolvedUrl = linkedChart?.resolvedUrl ?? \"\"\n    const resolvedUrlParsed = useMemo(() => {\n        let baseUrl = Url.fromURL(resolvedUrl)\n\n        // Append peerCountries param if specified in the archie block\n        if (d.peerCountries) {\n            baseUrl = baseUrl.updateQueryParams({\n                peerCountries: d.peerCountries,\n            })\n        }\n\n        return baseUrl\n    }, [resolvedUrl, d.peerCountries])\n    const resolvedQueryParams = useMemo(() => {\n        return { ...resolvedUrlParsed.queryParams }\n    }, [resolvedUrlParsed])\n    const chartConfig = useMemo(\n        () => ({\n            archiveContext: linkedChart?.archivedPageVersion,\n        }),\n        [linkedChart?.archivedPageVersion]\n    )\n    const configType = linkedChart?.configType\n    const isExplorer = configType === ChartConfigType.Explorer\n    const isMultiDim = configType === ChartConfigType.MultiDim\n    const hasControls = resolvedUrlParsed.queryParams.hideControls !== \"true\"\n    const isExplorerWithControls = isExplorer && hasControls\n    const isMultiDimWithControls = isMultiDim && hasControls\n\n    const archivedChartVersion = linkedChart?.archivedPageVersion\n    const shouldRenderArchiveEmbed =\n        archiveContext?.type === \"archive-page\" && !!archivedChartVersion\n\n    const archiveUrl = useMemo(() => {\n        if (!shouldRenderArchiveEmbed) return undefined\n        const baseUrl = Url.fromURL(archivedChartVersion.archiveUrl)\n        return baseUrl.updateQueryParams(resolvedQueryParams)\n    }, [shouldRenderArchiveEmbed, archivedChartVersion, resolvedQueryParams])\n\n    const slug = resolvedUrlParsed.slug\n    const queryStr = resolvedUrlParsed.queryStr\n\n    useEffect(() => {\n        if (\n            !shouldRenderArchiveEmbed ||\n            !guidedChartContext?.registerArchiveChart ||\n            !configType\n        )\n            return\n        const unregister = guidedChartContext.registerArchiveChart({\n            iframeRef: archiveIframeRef,\n            baseUrl: archiveUrl?.fullUrl ?? archivedChartVersion.archiveUrl,\n            defaultQueryParams: resolvedQueryParams,\n            chartConfigType: configType,\n        })\n        return () => {\n            unregister()\n        }\n    }, [\n        configType,\n        guidedChartContext,\n        shouldRenderArchiveEmbed,\n        archiveUrl?.fullUrl,\n        archivedChartVersion?.archiveUrl,\n        archivedChartVersion,\n        resolvedUrl,\n        resolvedQueryParams,\n    ])\n\n    if (!linkedChart || !slug) return null\n\n    if (shouldRenderArchiveEmbed && archiveUrl) {\n        const defaultHeight =\n            isMultiDimWithControls || isExplorerWithControls ? \"680px\" : \"600px\"\n        return (\n            <div\n                className={cx(className, {\n                    \"full-width-on-mobile\":\n                        !isExplorerWithControls && fullWidthOnMobile,\n                })}\n                ref={refChartContainer}\n            >\n                <iframe\n                    ref={archiveIframeRef}\n                    src={archiveUrl.fullUrl}\n                    width=\"100%\"\n                    height={d.height || defaultHeight}\n                    style={{\n                        border: \"0px none\",\n                        display: \"block\",\n                    }}\n                    loading=\"lazy\"\n                    title={linkedChart.title}\n                />\n                {d.caption ? (\n                    <figcaption>\n                        <SpanElements spans={d.caption} />\n                    </figcaption>\n                ) : null}\n            </div>\n        )\n    }\n\n    return (\n        <div\n            className={cx(className, {\n                \"full-width-on-mobile\":\n                    !isExplorerWithControls && fullWidthOnMobile,\n            })}\n            ref={refChartContainer}\n        >\n            {isExplorer ? (\n                <figure\n                    // Use unique `key` to force React to re-render tree\n                    key={resolvedUrl}\n                    className={cx({\n                        [GRAPHER_PREVIEW_CLASS]: !isExplorer,\n                        chart:\n                            !isExplorerWithControls && !isMultiDimWithControls,\n                        explorer: isExplorerWithControls,\n                        \"multi-dim\": isMultiDimWithControls,\n                    })}\n                    data-is-multi-dim={isMultiDim || undefined}\n                    data-grapher-src={isExplorer ? undefined : resolvedUrl}\n                    data-explorer-src={\n                        isExplorer ? resolvedUrlParsed.fullUrl : undefined\n                    }\n                    style={{\n                        width: \"100%\",\n                        border: \"0px none\",\n                        height: d.height,\n                    }}\n                >\n                    <div className=\"js--show-warning-block-if-js-disabled\" />\n                </figure>\n            ) : isMultiDim ? (\n                <MultiDimEmbed\n                    url={resolvedUrl}\n                    chartConfig={chartConfig}\n                    isPreviewing={isPreviewing}\n                />\n            ) : (\n                <GrapherWithFallback\n                    slug={slug}\n                    config={chartConfig}\n                    queryStr={queryStr}\n                    isEmbeddedInAnOwidPage={true}\n                    isEmbeddedInADataPage={false}\n                    isPreviewing={isPreviewing}\n                />\n            )}\n            {d.caption ? (\n                <figcaption>\n                    <SpanElements spans={d.caption} />\n                </figcaption>\n            ) : null}\n        </div>\n    )\n}\n","import { useState, useRef } from \"react\"\nimport {\n    faCircleArrowRight,\n    faCircleArrowLeft,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\n\nimport { EnrichedBlockChartStory } from \"@ourworldindata/utils\"\nimport SpanElements from \"./SpanElements.js\"\nimport Chart from \"./Chart.js\"\nimport cx from \"classnames\"\n\nexport default function ChartStory({\n    d,\n    className = \"\",\n}: {\n    d: EnrichedBlockChartStory\n    className?: string\n}) {\n    const { items } = d\n\n    const [currentIndex, setCurrentIndex] = useState(0)\n    const [currentSlide, setCurrentSlide] = useState(items[0])\n\n    const showDetails = !!currentSlide.technical.length\n    const maxSlide = items.length - 1\n\n    const refChartContainer = useRef<HTMLDivElement>(null)\n\n    return (\n        <div className={cx(className, \"chart-story grid grid-cols-8\")}>\n            <div\n                className={\n                    \"chart-story__nav-hud span-cols-8 overline-black-caps align-center \"\n                }\n            >\n                {`Chart ${currentIndex + 1} of ${items.length}`}\n            </div>\n            <button\n                aria-label=\"Go to previous slide\"\n                disabled={currentIndex === 0}\n                className={\n                    \"chart-story__nav-arrow chart-story__nav-arrow--left span-cols-1 align-center \"\n                }\n                onClick={() => {\n                    setCurrentSlide(items[Math.max(0, currentIndex - 1)])\n                    setCurrentIndex(Math.max(0, currentIndex - 1))\n                }}\n            >\n                <FontAwesomeIcon icon={faCircleArrowLeft} />\n            </button>\n            <div\n                className={\n                    \"chart-story__narrative-text span-cols-6 h3-bold align-center\"\n                }\n            >\n                <SpanElements spans={currentSlide.narrative.value} />\n            </div>\n            <button\n                aria-label=\"Go to next slide\"\n                disabled={currentIndex === maxSlide}\n                className={\n                    \"chart-story__nav-arrow chart-story__nav-arrow--right span-cols-1 col-start-8 align-center\"\n                }\n                onClick={() => {\n                    setCurrentSlide(items[Math.min(maxSlide, currentIndex + 1)])\n                    setCurrentIndex(Math.min(maxSlide, currentIndex + 1))\n                }}\n            >\n                <FontAwesomeIcon icon={faCircleArrowRight} />\n            </button>\n\n            <div\n                className={\"chart-story__chart span-cols-8\"}\n                ref={refChartContainer}\n            >\n                <Chart d={currentSlide.chart} />\n            </div>\n            {showDetails ? (\n                <>\n                    <div\n                        className={\n                            \"chart-story__technical-text span-cols-8 overline-black-caps\"\n                        }\n                    >\n                        About this chart\n                    </div>\n                    <div\n                        className={\n                            \"chart-story__technical-details span-cols-8 grid grid-cols-8\"\n                        }\n                    >\n                        <ul className=\"span-cols-6 col-start-2\">\n                            {currentSlide.technical.map((d: any, i: number) => {\n                                return (\n                                    <li className=\"body-3-medium\" key={i}>\n                                        <SpanElements spans={d.value} />\n                                    </li>\n                                )\n                            })}\n                        </ul>\n                    </div>\n                </>\n            ) : null}\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { removeDiacritics } from \"@ourworldindata/utils\"\nimport { useDonors } from \"../utils.js\"\n\nfunction* generateTestimonials() {\n    yield \"Our World in Data is a profound source of information and inspiration for solving global problems. Thank you.\"\n    yield \"To me, investing in evidence-based solutions to both combat and prevent disasters is one of the smartest things we can do for humanity. That's why I've become a monthly donor to Our World in Data!\"\n    yield \"Our World in Data is a tremendous resource to help the general public and policymakers be objective about the problems we're facing and also the success we've had so far.\"\n    yield \"The research produced by Our World in Data has the potential to make a real difference in the world. By shedding light on issues such as poverty, inequality, and health, they can help policymakers, researchers, and activists make informed decisions that improve people's lives.\"\n    yield \"Simply the best, most accessible and reliable source for some of the most important data about our world.\"\n    yield \"Our World in Data constantly challenges my thinking in the best possible ways. The world is smarter for this site.\"\n    yield \"Your work with facts is essential in this chaotic world. It is also extremely well-presented and concise enough for people to be able to read even if they are in a hurry.\"\n    yield \"Thanks for everything you do. I use your work about once a week in my undergraduate lectures.\"\n    yield \"Clear facts for everyone on the planet.\"\n    yield \"A wide-ranging curated set of data that is presented well and made available for all to use. Truly a service to and for the world we live in.\"\n    yield \"Your work is invaluable towards creating a better and more just world. Thank you!\"\n    yield \"It seems every time I visit your page I learn something fascinating. Thank you for the eye-opening and engaging content.\"\n}\n\nfunction Testimonials({\n    testimonials,\n}: {\n    testimonials: (string | undefined)[]\n}) {\n    const [first, second] = testimonials\n    if (!first) return null\n    return (\n        <>\n            <h4 className=\"h5-black-caps\">From our readers</h4>\n            <div className=\"donor-testimonials\">\n                <blockquote className=\"donor-testimonial\">\n                    <p>{`“${first}”`}</p>\n                </blockquote>\n                {second && (\n                    <blockquote className=\"donor-testimonial\">\n                        <p>{`“${second}”`}</p>\n                    </blockquote>\n                )}\n            </div>\n        </>\n    )\n}\n\nexport default function Donors({ className }: { className?: string }) {\n    const donors = useDonors()\n    if (!donors) return null\n\n    const donorsByLetter = _.groupBy(donors, (donor) =>\n        removeDiacritics(donor[0].toUpperCase())\n    )\n    const testimonialGenerator = generateTestimonials()\n    return (\n        <div className={className}>\n            <div className=\"col-start-2 span-cols-12\">\n                <p className=\"donors-note\">(Listed in alphabetical order)</p>\n                {Object.entries(donorsByLetter).map(\n                    ([letter, donors], index) => (\n                        <div key={letter}>\n                            <h3 className=\"donors-letter\">{letter}</h3>\n                            <ul className=\"donor-list\">\n                                {donors.map((donor) => (\n                                    <li key={donor} className=\"donor-item\">\n                                        {donor}\n                                    </li>\n                                ))}\n                            </ul>\n                            {index % 4 === 0 && (\n                                <Testimonials\n                                    testimonials={[\n                                        testimonialGenerator.next().value ||\n                                            undefined,\n                                        testimonialGenerator.next().value ||\n                                            undefined,\n                                    ]}\n                                />\n                            )}\n                        </div>\n                    )\n                )}\n            </div>\n        </div>\n    )\n}\n","import { EnrichedBlockText, Span } from \"@ourworldindata/utils\"\nimport SpanElements from \"./SpanElements.js\"\n\nfunction isOnlyEmptySpans(spans: Span[]) {\n    return spans.every((span) => {\n        const isNewline = span.spanType === \"span-newline\"\n        const isSimpleText = span.spanType === \"span-simple-text\"\n        const isEmptySimpleText = isSimpleText && span.text === \"\"\n        return isNewline || isEmptySimpleText\n    })\n}\n\nexport default function Paragraph({\n    d,\n    className = \"\",\n    shouldRenderLinks = true,\n}: {\n    d: EnrichedBlockText\n    className?: string\n    shouldRenderLinks?: boolean\n}) {\n    if (isOnlyEmptySpans(d.value)) {\n        return null\n    }\n    return (\n        <p className={className}>\n            <SpanElements\n                spans={d.value}\n                shouldRenderLinks={shouldRenderLinks}\n            />\n        </p>\n    )\n}\n","import * as R from \"remeda\"\nimport cx from \"classnames\"\n\nexport type Container =\n    | \"default\"\n    | \"sticky-right-left-column\"\n    | \"sticky-right-left-heading-column\"\n    | \"sticky-right-right-column\"\n    | \"sticky-left-left-column\"\n    | \"sticky-left-right-column\"\n    | \"side-by-side\"\n    | \"summary\"\n    | \"datapage\"\n    | \"key-insight\"\n    | \"about-page\"\n    | \"author-header\"\n    | \"data-insight\"\n\n// Each container must have a default layout, usually just full-width\ntype Layouts = { default: string; [key: string]: string }\n\n// no line-wrapping for easier alphabetisation\n// oxfmt-ignore\nconst layouts: { [key in Container]: Layouts} = {\n    [\"default\"]: {\n        [\"align\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"all-charts\"]: \"col-start-2 span-cols-12\",\n        [\"aside--left\"]: \"col-start-2 span-cols-3 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\",\n        [\"aside--right\"]: \"col-start-11 span-cols-3 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\",\n        [\"bespoke-component--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"bespoke-component--wide\"]: \"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"bespoke-component--widest\"]: \"span-cols-12 col-start-2\",\n        [\"chart-story\"]: \"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"chart\"]: \"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"chart--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"chart--wide\"]: \"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"chart--widest\"]: \"col-start-2 span-cols-12 col-md-start-2 span-md-cols-12\",\n        [\"cta\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"country-profile-selector\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"data-callout\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"default\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"divider\"]: \"col-start-2 span-cols-12\",\n        [\"explorer\"]: \"col-start-2 span-cols-12\",\n        [\"explorer--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"explorer--wide\"]: \"col-start-2 span-cols-12\",\n        [\"explorer--widest\"]: \"col-start-2 span-cols-12\",\n        [\"explorer-tiles\"]: \"grid grid-cols-12 span-cols-12 col-start-2\",\n        [\"gray-section\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"explore-data-section\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"guided-chart\"]: \"grid grid-cols-12-full-width span-cols-14\",\n        [\"heading\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"homepage-search\"]: \"grid grid-cols-12-full-width span-cols-14\",\n        [\"featured-metrics\"]: \"col-start-2 span-cols-12\",\n        [\"featured-data-insights\"]: \"col-start-2 span-cols-12\",\n        [\"homepage-intro\"]: \"grid grid-cols-12-full-width span-cols-14\",\n        [\"horizontal-rule\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"html\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"image--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\",\n        [\"image--wide\"]: \"col-start-4 span-cols-8 col-md-start-2 span-md-cols-12\",\n        [\"image--widest\"]: \"col-start-2 span-cols-12 col-md-start-2 span-md-cols-12\",\n        [\"static-viz--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\",\n        [\"static-viz--wide\"]: \"col-start-4 span-cols-8 col-md-start-2 span-md-cols-12\",\n        [\"static-viz--widest\"]: \"col-start-2 span-cols-12 col-md-start-2 span-md-cols-12\",\n        [\"image-caption\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"key-indicator\"]: \"col-start-2 span-cols-12\",\n        [\"key-indicator-collection\"]: \"grid col-start-2 span-cols-12\",\n        [\"key-insights\"]: \"col-start-2 span-cols-12\",\n        [\"latest-data-insights\"]: \"grid grid-cols-12-full-width span-cols-14\",\n        [\"list\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"numbered-list\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 col-start-5 span-md-cols-10 col-md-start-3 grid-md-cols-10 span-sm-cols-12 col-sm-start-2 grid-sm-cols-12\",\n        [\"pill-row\"]: \"grid span-cols-14 grid-cols-12-full-width\",\n        [\"pull-quote--left\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"pull-quote--left-center\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"pull-quote--right-center\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"pull-quote--right\"]: \"span-cols-14 grid grid-cols-12-full-width\",\n        [\"resource-panel\"]: \"col-start-11 span-cols-3 span-rows-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"recirc--left\"]: \"col-start-2 span-cols-3 span-rows-3 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"recirc--center\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"recirc--right\"]: \"col-start-11 span-cols-3 span-rows-3 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"subscribe-banner--left\"]: \"col-start-2 span-cols-3 span-rows-3 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"subscribe-banner--center\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"subscribe-banner--right\"]: \"col-start-11 span-cols-3 span-rows-3 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"research-and-writing\"]: \"col-start-2 span-cols-12\",\n        [\"sdg-grid\"]: \"grid col-start-2 span-cols-12 col-lg-start-3 span-lg-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"side-by-side\"]: \"grid span-cols-12 col-start-2\",\n        [\"sticky-left-left-column\"]: \"grid grid-cols-7 span-cols-7 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-left-right-column\"]: \"grid grid-cols-5 span-cols-5 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-left\"]: \"grid span-cols-12 col-start-2\",\n        [\"sticky-right-left-column\"]: \"grid span-cols-5 grid grid-cols-5 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-right-right-column\"]: \"span-cols-7 grid-cols-7 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-right\"]: \"grid span-cols-12 col-start-2\",\n        [\"table--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"table--wide\"]: \"col-start-2 span-cols-12\",\n        [\"text\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"toc\"]: \"grid grid-cols-8 col-start-4 span-cols-8 grid-md-cols-10 col-md-start-3 span-md-cols-10 grid-sm-cols-12 span-sm-cols-12 col-sm-start-2\",\n        [\"ltp-toc\"]: \"grid grid-cols-12 col-start-2 span-cols-12 grid-sm-cols-12 span-sm-cols-12 col-sm-start-2\",\n        [\"topic-page-intro\"]: \"grid col-start-2 span-cols-12\",\n        [\"video\"]: \"col-start-4 span-cols-8 col-md-start-2 span-md-cols-12\",\n    },\n    [\"datapage\"]: {\n        [\"default\"]: \"col-start-2 span-cols-6 col-lg-start-2 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\",\n        [\"chart\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"chart--narrow\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"chart--wide\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"chart--widest\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"explorer--narrow\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"explorer--wide\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n        [\"explorer--widest\"]: \"span-cols-8 span-lg-cols-9 span-md-cols-12\",\n    },\n    [\"about-page\"]: {\n        [\"default\"]: \"grid col-start-2 span-cols-12\",\n        [\"people\"]: \"col-start-2 span-cols-8 col-md-start-2 span-md-cols-12\",\n        [\"donors\"]: \"grid grid-cols-12-full-width col-start-1 col-end-limit\",\n        [\"sticky-left-left-column\"]: \"grid grid-cols-7 span-cols-7 span-md-cols-10 grid-md-cols-10\",\n        [\"sticky-left-right-column\"]: \"grid grid-cols-5 span-cols-5 span-md-cols-10 grid-md-cols-10\",\n        [\"sticky-left\"]: \"grid span-cols-12 col-start-2\",\n        [\"sticky-right-left-column\"]: \"grid span-cols-5 grid grid-cols-5 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-right-right-column\"]: \"span-cols-7 grid-cols-7 span-md-cols-10 grid-md-cols-10 col-md-start-2 span-sm-cols-12 grid-sm-cols-12 col-sm-start-1\",\n        [\"sticky-right\"]: \"grid span-cols-12 col-start-2\",\n        [\"table--narrow\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n        [\"table--wide\"]: \"col-start-2 span-cols-12\",\n    },\n    [\"author-header\"]: {\n        [\"default\"]: \"span-cols-8\",\n        [\"image\"]: \"span-cols-2 span-md-cols-3\",\n        [\"text\"]: \"span-cols-6 span-md-cols-8 col-sm-start-2 span-sm-cols-12\",\n        [\"socials\"]: \"span-cols-3 col-sm-start-2 span-sm-cols-12\",\n    },\n    [\"sticky-right-left-column\"]: {\n        [\"default\"]: \"span-cols-5 span-md-cols-10 span-sm-cols-12\",\n        [\"prominent-link\"]: \"grid grid-cols-5 span-cols-5 span-md-cols-10 grid-md-cols-10 span-sm-cols-12 grid-sm-cols-12\",\n    },\n    [\"sticky-right-left-heading-column\"]: {\n        [\"default\"]: \"span-cols-5 span-md-cols-10 col-md-start-2 span-sm-cols-12 col-sm-start-1\"\n    },\n    [\"sticky-right-right-column\"]: {\n        [\"default\"]: \"span-cols-7 span-md-cols-10 span-sm-cols-12\",\n         [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 span-md-cols-12 grid-md-cols-12\",\n    },\n    [\"sticky-left-left-column\"]: {\n        [\"default\"]: \"span-cols-7 span-md-cols-10 span-sm-cols-12\",\n        [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 span-md-cols-12 grid-md-cols-12\",\n    },\n    [\"sticky-left-right-column\"]: {\n        [\"default\"]: \"span-cols-5 span-md-cols-10 span-sm-cols-12\",\n        [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 span-md-cols-12 grid-md-cols-12\",\n    },\n    [\"side-by-side\"]: {\n        [\"default\"]: \"span-cols-6 span-sm-cols-12\",\n        [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 grid-sm-cols-12 span-sm-cols-12 \",\n        [\"cookie-notice\"]: \"span-cols-5 col-start-2 span-md-cols-6 col-md-start-1 span-sm-cols-12 col-sm-start-1\"\n    },\n    [\"summary\"]: {\n        [\"default\"]: \"col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\",\n    },\n    [\"data-insight\"]: {\n        // no grid containers or grid sizing for data insights - they're always just a single column\n        [\"default\"]: \"\",\n    },\n    [\"key-insight\"]: {\n        [\"default\"]: \"col-start-1 span-cols-5 col-md-start-1 span-md-cols-12\",\n        [\"prominent-link\"]: \"grid grid-cols-6 span-cols-6 span-md-cols-12 grid-md-cols-12\",\n    },\n}\n\nexport function getLayout(\n    blockType: string = \"default\",\n    containerType: Container = \"default\"\n): string {\n    const layout =\n        R.prop(layouts, containerType, blockType) ??\n        // fallback to the default for the container\n        R.prop(layouts, containerType, \"default\")\n    return cx(`article-block__${blockType}`, layout)\n}\n","import { EnrichedBlockPullQuote } from \"@ourworldindata/utils\"\nimport Paragraph from \"./Paragraph.js\"\nimport { getLayout } from \"./layout.js\"\n\nexport default function PullQuote({\n    d,\n    className = \"\",\n}: {\n    d: EnrichedBlockPullQuote\n    className?: string\n}) {\n    return (\n        <div className={className}>\n            <blockquote className={d.align}>{d.quote}</blockquote>\n            {d.content.map((block, i) => (\n                <Paragraph key={i} d={block} className={getLayout(\"text\")} />\n            ))}\n        </div>\n    )\n}\n","import * as R from \"remeda\"\nimport { createContext, useContext } from \"react\"\n\ninterface AriaAnnouncerContextType {\n    announce: (message: string) => void\n    announcement: string\n}\n\nexport const AriaAnnouncerContext =\n    createContext<AriaAnnouncerContextType | null>(null)\n\nexport const useAriaAnnouncer = () => {\n    const context = useContext(AriaAnnouncerContext)\n    if (!context) {\n        // Fallback for cases where the component is used outside of AriaAnnouncerProvider\n        return {\n            announce: R.identity,\n            announcement: \"\",\n        }\n    }\n    return context\n}\n","import { runInAction } from \"mobx\"\nimport {\n    EnrichedBlockGuidedChart,\n    GrapherQueryParams,\n    MultiDimDimensionChoices,\n} from \"@ourworldindata/types\"\nimport { Container } from \"./layout.js\"\nimport { useRef, useCallback, useState } from \"react\"\nimport {\n    MultiDimDataPageConfig,\n    Url,\n    extractMultiDimChoicesFromSearchParams,\n} from \"@ourworldindata/utils\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport {\n    GuidedChartContext,\n    GrapherState,\n    buildArchiveGuidedChartSrc,\n} from \"@ourworldindata/grapher\"\nimport type { ArchiveGuidedChartRegistration } from \"@ourworldindata/grapher\"\nimport { SiteAnalytics } from \"../../SiteAnalytics.js\"\nimport { useAriaAnnouncer } from \"../../AriaAnnouncerUtils.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport default function GuidedChart({\n    d,\n    containerType = \"default\",\n}: {\n    d: EnrichedBlockGuidedChart\n    containerType?: Container\n    className?: string\n}) {\n    const stateRef = useRef<GrapherState | null>(null)\n    const chartRef = useRef<HTMLDivElement | null>(null)\n    const [multiDimData, setMultiDimData] = useState<{\n        config: MultiDimDataPageConfig\n        onSettingsChange: (\n            newSettings: MultiDimDimensionChoices,\n            queryParams: GrapherQueryParams\n        ) => void\n        grapherContainerRef: React.RefObject<HTMLDivElement | null>\n    } | null>(null)\n    const { announce } = useAriaAnnouncer()\n    const archiveChartRegistrationRef =\n        useRef<ArchiveGuidedChartRegistration | null>(null)\n\n    const registerArchiveChart = useCallback(\n        (registration: ArchiveGuidedChartRegistration) => {\n            archiveChartRegistrationRef.current = registration\n            return () => {\n                if (archiveChartRegistrationRef.current === registration) {\n                    archiveChartRegistrationRef.current = null\n                }\n            }\n        },\n        []\n    )\n\n    const applyGuidedChartLinkToArchive = useCallback((url: Url): boolean => {\n        const registration = archiveChartRegistrationRef.current\n        const iframeEl = registration?.iframeRef.current\n        if (!registration || !iframeEl) return false\n\n        const nextSrc = buildArchiveGuidedChartSrc(registration, url)\n        if (iframeEl.src === nextSrc) return true\n        iframeEl.src = nextSrc\n        return true\n    }, [])\n\n    const handleGuidedChartLinkClick = useCallback(\n        (href: string) => {\n            const url = Url.fromURL(href)\n            const handledArchiveIframe = applyGuidedChartLinkToArchive(url)\n\n            let didUpdateChart = handledArchiveIframe\n\n            if (!handledArchiveIframe) {\n                const grapherState = stateRef.current\n                if (!grapherState) return\n\n                // If the chart is a MultiDim, we have to update its settings directly\n                if (multiDimData) {\n                    const searchParams = new URLSearchParams()\n                    Object.entries(url.queryParams).forEach(([key, value]) => {\n                        if (value !== undefined) {\n                            searchParams.set(key, value)\n                        }\n                    })\n                    const choices = extractMultiDimChoicesFromSearchParams(\n                        searchParams,\n                        multiDimData.config\n                    )\n                    // MultiDim must set the query params itself only after it\n                    // sets the config of the selected view.\n                    multiDimData.onSettingsChange(choices, url.queryParams)\n                } else {\n                    // Update the grapher state with the new params (e.g. countries, tab, etc)\n                    runInAction(() => {\n                        grapherState.clearQueryParams()\n                        grapherState.populateFromQueryParams(url.queryParams)\n                    })\n                }\n                didUpdateChart = true\n            }\n\n            if (!didUpdateChart) return\n\n            analytics.logGuidedChartLinkClick(url.fullUrl)\n            announce(\"Chart updated to reflect the selected view.\")\n\n            // Scroll to chart on small screens\n            if (window.innerWidth <= 768) {\n                const target =\n                    multiDimData?.grapherContainerRef.current ||\n                    chartRef.current\n                // Small delay to allow chart updates to complete\n                setTimeout(() => {\n                    target?.scrollIntoView({\n                        behavior: \"smooth\",\n                    })\n                }, 100)\n            }\n        },\n        [announce, applyGuidedChartLinkToArchive, multiDimData]\n    )\n\n    return (\n        <GuidedChartContext.Provider\n            value={{\n                grapherStateRef: stateRef as React.RefObject<GrapherState>,\n                chartRef: chartRef as React.RefObject<HTMLDivElement>,\n                onGuidedChartLinkClick: handleGuidedChartLinkClick,\n                registerArchiveChart,\n                registerMultiDim: (registrationData: {\n                    config: MultiDimDataPageConfig\n                    onSettingsChange: (\n                        newSettings: MultiDimDimensionChoices,\n                        queryParams: GrapherQueryParams\n                    ) => void\n                    grapherContainerRef: React.RefObject<HTMLDivElement | null>\n                }) => {\n                    setMultiDimData(registrationData)\n                },\n            }}\n        >\n            <ArticleBlocks blocks={d.content} containerType={containerType} />\n        </GuidedChartContext.Provider>\n    )\n}\n","import {\n    ARCHIVED_THUMBNAIL_FILENAME,\n    DEFAULT_THUMBNAIL_FILENAME,\n} from \"@ourworldindata/types\"\nimport { GRAPHER_DYNAMIC_THUMBNAIL_URL } from \"../../../settings/clientSettings\"\nimport Image from \"./Image\"\n\nexport const Thumbnail = ({\n    thumbnail,\n    className,\n}: {\n    thumbnail?: string\n    className?: string\n}) => {\n    if (!thumbnail)\n        return (\n            <img\n                src={`/${DEFAULT_THUMBNAIL_FILENAME}`}\n                className={className}\n                loading=\"lazy\"\n            />\n        )\n    if (\n        (GRAPHER_DYNAMIC_THUMBNAIL_URL &&\n            thumbnail.startsWith(GRAPHER_DYNAMIC_THUMBNAIL_URL)) ||\n        thumbnail.endsWith(ARCHIVED_THUMBNAIL_FILENAME) ||\n        thumbnail.endsWith(DEFAULT_THUMBNAIL_FILENAME)\n    ) {\n        return <img src={thumbnail} className={className} loading=\"lazy\" />\n    } else {\n        return (\n            <Image\n                filename={thumbnail}\n                containerType=\"thumbnail\"\n                className={className}\n            />\n        )\n    }\n}\n","import { EnrichedHybridLink, Url } from \"@ourworldindata/utils\"\nimport { useLinkedChart, useLinkedDocument } from \"../utils\"\nimport { Thumbnail } from \"./Thumbnail\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faExternalLinkAlt } from \"@fortawesome/free-solid-svg-icons\"\n\nfunction HybridGdocLink(props: EnrichedHybridLink) {\n    const { linkedDocument } = useLinkedDocument(props.url)\n\n    // Checking for slug, because url always contains https://ourworldindata.org\n    if (!linkedDocument?.slug) return null\n\n    const title = props.title || linkedDocument.title\n    const subtitle =\n        props.subtitle || linkedDocument.excerpt || linkedDocument.subtitle\n\n    return (\n        <li className=\"hybrid-link-item\">\n            <a href={linkedDocument.url}>\n                <Thumbnail\n                    thumbnail={linkedDocument[\"featured-image\"]}\n                    className=\"hybrid-link-thumbnail\"\n                />\n                <div className=\"hybrid-link-item-text\">\n                    <h4>{title}</h4>\n                    <p>{subtitle}</p>\n                </div>\n            </a>\n        </li>\n    )\n}\n\nfunction HybridChartLink(props: EnrichedHybridLink) {\n    const { linkedChart } = useLinkedChart(props.url)\n    if (!linkedChart) return null\n\n    const title = props.title || linkedChart.title\n    const subtitle = props.subtitle || linkedChart.subtitle\n\n    return (\n        <li className=\"hybrid-link-item\">\n            <a href={linkedChart.resolvedUrl}>\n                <Thumbnail\n                    thumbnail={linkedChart.thumbnail}\n                    className=\"hybrid-link-thumbnail\"\n                />\n                <div className=\"hybrid-link-item-text\">\n                    <h4>{title}</h4>\n                    <p>{subtitle}</p>\n                </div>\n            </a>\n        </li>\n    )\n}\n\nfunction HybridExternalLink(props: EnrichedHybridLink) {\n    return (\n        <li className=\"hybrid-link-item hybrid-link-item--external\">\n            <a href={props.url}>\n                {props.thumbnail && (\n                    <Thumbnail\n                        thumbnail={props.thumbnail}\n                        className=\"hybrid-link-thumbnail\"\n                    />\n                )}\n                <div className=\"hybrid-link-item-text\">\n                    <h4>\n                        {props.title}\n                        <FontAwesomeIcon\n                            className=\"hybrid-link-item__external-icon\"\n                            icon={faExternalLinkAlt}\n                        />\n                    </h4>\n                    <p>{props.subtitle}</p>\n                </div>\n            </a>\n        </li>\n    )\n}\n\nexport function HybridLinkList({ links }: { links: EnrichedHybridLink[] }) {\n    return (\n        <ul className=\"hybrid-link-list\">\n            {links.map((link) => {\n                const url = Url.fromURL(link.url)\n                if (url.isGoogleDoc) {\n                    return <HybridGdocLink {...link} key={link.url} />\n                }\n                if (url.isGrapher || url.isExplorer) {\n                    return <HybridChartLink {...link} key={link.url} />\n                }\n                return <HybridExternalLink {...link} key={link.url} />\n            })}\n        </ul>\n    )\n}\n","import cx from \"classnames\"\nimport { EnrichedBlockRecirc } from \"@ourworldindata/utils\"\nimport { HybridLinkList } from \"./HybridLinkList.js\"\n\nexport default function Recirc({\n    d,\n    className = \"\",\n}: {\n    d: EnrichedBlockRecirc\n    className?: string\n}) {\n    return (\n        <div className={cx(className, \"recirc\", `recirc--${d.align}`)}>\n            <span className=\"recirc__heading body-3-bold\">{d.title}</span>\n            <HybridLinkList links={d.links} />\n        </div>\n    )\n}\n","import cx from \"classnames\"\nimport { EnrichedBlockSubscribeBanner } from \"@ourworldindata/utils\"\nimport { Button } from \"@ourworldindata/components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faEnvelopeOpenText } from \"@fortawesome/free-solid-svg-icons\"\nimport { IS_ARCHIVE } from \"../../../settings/clientSettings.js\"\nimport { PROD_URL } from \"../../SiteConstants.js\"\n\n// We don't archive the subscribe page.\nconst BASE_URL = IS_ARCHIVE ? PROD_URL : \"\"\n\nexport default function SubscribeBanner({\n    d,\n    className = \"\",\n}: {\n    d: EnrichedBlockSubscribeBanner\n    className?: string\n}) {\n    return (\n        <div\n            className={cx(\n                className,\n                \"subscribe-banner\",\n                `subscribe-banner--${d.align}`\n            )}\n        >\n            <div className=\"subscribe-banner__text\">\n                <div className=\"subscribe-banner__header\">\n                    <FontAwesomeIcon icon={faEnvelopeOpenText} />\n                    <h5 className=\"h4-semibold\">\n                        Subscribe to our newsletters\n                    </h5>\n                </div>\n                <p className=\"subscribe-banner__p body-3-medium\">\n                    We send two regular newsletters so you can stay up to date\n                    on our work and receive curated highlights from across Our\n                    World in Data.\n                </p>\n            </div>\n            <Button\n                className=\"subscribe-banner__button\"\n                theme=\"solid-vermillion\"\n                text=\"Subscribe\"\n                href={`${BASE_URL}/subscribe`}\n                icon={null}\n            />\n        </div>\n    )\n}\n","import { EnrichedBlockList, EnrichedBlockText } from \"@ourworldindata/utils\"\nimport SpanElements from \"./SpanElements.js\"\n\nexport default function List({\n    d,\n    className = \"\",\n}: {\n    d: EnrichedBlockList\n    className?: string\n}) {\n    return (\n        <ul className={className}>\n            {d.items.map((_d: EnrichedBlockText, i: number) => {\n                return (\n                    <li key={i}>\n                        <SpanElements spans={_d.value} />\n                    </li>\n                )\n            })}\n        </ul>\n    )\n}\n","import {\n    EnrichedBlockNumberedList,\n    EnrichedBlockText,\n} from \"@ourworldindata/utils\"\nimport SpanElements from \"./SpanElements.js\"\n\nexport default function NumberedList({\n    d,\n    className = \"\",\n}: {\n    d: EnrichedBlockNumberedList\n    className?: string\n}) {\n    return (\n        <ol className={className}>\n            {d.items.map((_d: EnrichedBlockText, i: number) => {\n                return (\n                    <li key={i}>\n                        <SpanElements spans={_d.value} />\n                    </li>\n                )\n            })}\n        </ol>\n    )\n}\n","import * as React from \"react\"\nimport { EnrichedBlockSDGGrid } from \"@ourworldindata/utils\"\nimport cx from \"classnames\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.js\"\n\nexport default function SDGGrid({\n    d,\n    className = \"\",\n}: {\n    d: EnrichedBlockSDGGrid\n    className?: string\n}) {\n    return (\n        <ul className={cx(\"sdg-grid\", className)}>\n            {d.items.map((tile: { goal: string; link: string }, i: number) => {\n                return (\n                    <SDGTile\n                        key={i}\n                        number={i + 1}\n                        goal={tile.goal}\n                        link={tile.link}\n                    />\n                )\n            })}\n        </ul>\n    )\n}\n\nconst SDGTile = ({\n    number,\n    goal,\n    link,\n}: {\n    number: number\n    goal: string\n    link: string\n}) => {\n    const sdgNumberPadded = number.toString().padStart(2, \"0\")\n    const sdgIconUrl = `${BAKED_BASE_URL}/images/sdg-icons/sdg-icon-${sdgNumberPadded}.svg`\n\n    return (\n        <li\n            className=\"span-cols-2 span-lg-cols-4 span-sm-cols-8 col-sm-start-3\"\n            style={\n                {\n                    \"--sdg-color\": `var(--sdg-color-${number})`,\n                } as React.CSSProperties\n            }\n            key={number}\n        >\n            <a href={link}>\n                <div\n                    className=\"sdg-grid__icon\"\n                    style={{\n                        mask: `url(${sdgIconUrl}) no-repeat center`,\n                        WebkitMask: `url(${sdgIconUrl}) no-repeat center`,\n                    }}\n                />\n                <h4 className=\"overline-black-caps\">SDG {number}</h4>\n                <span className=\"h3-bold goal\">{goal}</span>\n            </a>\n        </li>\n    )\n}\n","import cx from \"classnames\"\nimport * as React from \"react\"\n\nexport default function People({\n    className,\n    columns,\n    children,\n}: {\n    className?: string\n    columns?: \"2\" | \"4\"\n    children: React.ReactNode\n}) {\n    return (\n        <div\n            className={cx(\n                \"people\",\n                {\n                    \"people-cols-2 grid-cols-2 grid-md-cols-1\": columns === \"2\",\n                    \"people-cols-4 grid-cols-4 grid-lg-cols-2 grid-sm-cols-1\":\n                        columns === \"4\",\n                },\n                className\n            )}\n        >\n            {children}\n        </div>\n    )\n}\n","import { TocHeadingWithTitleSupertitle } from \"@ourworldindata/utils\"\nimport { faArrowDown, faPlus, faMinus } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport cx from \"classnames\"\n\nexport default function TableOfContents({\n    toc,\n    className = \"\",\n    title,\n}: {\n    toc: TocHeadingWithTitleSupertitle[]\n    className?: string\n    title: string\n}) {\n    return (\n        <div className={cx(className, \"toc\")}>\n            <details className=\"toc-details-wrapper span-cols-6 span-md-cols-8 span-sm-cols-10\">\n                <summary\n                    className=\"toc-toggle\"\n                    aria-label=\"Toggle table of contents\"\n                    data-track-note=\"toc_toggle\"\n                >\n                    <span>{title}</span>\n                    <span className=\"toc-toggle-icon\">\n                        <FontAwesomeIcon\n                            className=\"icon-closed\"\n                            icon={faPlus}\n                        />\n                        <FontAwesomeIcon className=\"icon-open\" icon={faMinus} />\n                    </span>\n                </summary>\n                <div className=\"toc-content\">\n                    <ul\n                        id=\"toc-menu\"\n                        role=\"menu\"\n                        aria-labelledby=\"toc-menu-button\"\n                    >\n                        {toc.map(\n                            (\n                                { title, supertitle, isSubheading, slug },\n                                i: number\n                            ) => (\n                                <li\n                                    key={i}\n                                    className={\n                                        isSubheading ? \"subsection\" : \"section\"\n                                    }\n                                >\n                                    <a\n                                        href={`#${slug}`}\n                                        data-track-note=\"toc_link\"\n                                        role=\"menuitem\"\n                                    >\n                                        {supertitle ? (\n                                            <span className=\"supertitle\">\n                                                {supertitle}\n                                            </span>\n                                        ) : null}\n                                        {title}\n                                    </a>\n                                    {!isSubheading && (\n                                        <FontAwesomeIcon icon={faArrowDown} />\n                                    )}\n                                </li>\n                            )\n                        )}\n                    </ul>\n                </div>\n            </details>\n        </div>\n    )\n}\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCircleInfo } from \"@fortawesome/free-solid-svg-icons\"\n\nexport const MissingData = ({ className }: { className?: string }) => (\n    <div className={className}>\n        <h4>\n            <FontAwesomeIcon icon={faCircleInfo} />\n            No data for this indicator\n        </h4>\n        <p>\n            We are currently not aware of data for this indicator. You can\n            notify us of available data for this indicator via our{\" \"}\n            <a href=\"/feedback\">feedback form</a>.\n        </p>\n    </div>\n)\n","import { Span } from \"@ourworldindata/utils\"\nimport SpanElements from \"./SpanElements.js\"\nimport { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\n\n// A little wrapper to nest the SVG inside the <a> tag.\n// We do this so that :visited styles apply,\n// because a:visited + svg { fill: $purple-60 } doesn't work\n// due to security countermeasures: https://hacks.mozilla.org/2010/03/privacy-related-changes-coming-to-css-vistited/\nfunction AdditionalChartsLink({ item }: { item: Span[] }) {\n    if (item.length === 1 && item[0].spanType === \"span-link\") {\n        return (\n            <a href={item[0].url}>\n                <SpanElements spans={item[0].children} />{\" \"}\n                <FontAwesomeIcon icon={faArrowRight} />\n            </a>\n        )\n    }\n    return null\n}\n\nexport const AdditionalCharts = ({\n    items,\n    className,\n}: {\n    items: Span[][]\n    className?: string\n}) => {\n    return (\n        <div className={className}>\n            <h4>Additional charts</h4>\n            <ul>\n                {items.map((item, i) => (\n                    <li key={i}>\n                        <AdditionalChartsLink item={item} />\n                    </li>\n                ))}\n            </ul>\n        </div>\n    )\n}\n","import cx from \"classnames\"\nimport { HybridLinkList } from \"./HybridLinkList.js\"\nimport { useLinkedChart, useLinkedDocument } from \"../utils.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { BlockErrorFallback } from \"./BlockErrorBoundary.js\"\n\nexport const ProminentLink = (props: {\n    url: string\n    className: string\n    title?: string\n    description?: string\n    thumbnail?: string\n}) => {\n    const { errorMessage: documentErrorMessage } = useLinkedDocument(props.url)\n    const { errorMessage: linkedChartErrorMessage } = useLinkedChart(props.url)\n    const errorMessage = documentErrorMessage || linkedChartErrorMessage\n    const { isPreviewing } = useDocumentContext()\n\n    if (errorMessage) {\n        if (isPreviewing) {\n            return (\n                <div className={props.className}>\n                    <BlockErrorFallback\n                        className=\"span-cols-6 span-md-cols-10 span-sm-cols-12\"\n                        error={{\n                            name: \"Error with prominent link\",\n                            message: `${errorMessage} This block won't render when the page is published`,\n                        }}\n                    />\n                </div>\n            )\n        } else return null\n    }\n\n    return (\n        <div className={cx(\"prominent-link\", props.className)}>\n            <HybridLinkList\n                links={[\n                    // Map the prominent link props to a single hybrid link\n                    {\n                        url: props.url,\n                        title: props.title,\n                        subtitle: props.description,\n                        thumbnail: props.thumbnail,\n                        type: \"hybrid-link\",\n                    },\n                ]}\n            />\n        </div>\n    )\n}\n","import { CSSProperties, useRef, useState } from \"react\"\nimport * as React from \"react\"\nimport cx from \"classnames\"\n\nexport const ExpandableParagraph = (\n    props:\n        | {\n              children: React.ReactNode\n              dangerouslySetInnerHTML?: undefined\n              className?: string\n              buttonVariant?: \"slim\" | \"full\"\n          }\n        | {\n              children?: undefined\n              dangerouslySetInnerHTML: {\n                  __html: string\n              }\n              className?: string\n              buttonVariant?: \"slim\" | \"full\"\n          }\n) => {\n    const CLOSED_HEIGHT = 100\n    const BUTTON_HEIGHT = 40\n    const EXPANDED_HEIGHT = `calc(100% - ${BUTTON_HEIGHT}px)`\n    const [height, setHeight] = useState<typeof EXPANDED_HEIGHT | number>(\n        CLOSED_HEIGHT\n    )\n    const containerRef = useRef<HTMLDivElement>(null)\n    const buttonRef = useRef<HTMLButtonElement>(null)\n\n    const isClosed = height === CLOSED_HEIGHT\n    const { className, buttonVariant = \"full\", ...propsWithoutStyles } = props\n\n    const toggleExpanded = () => {\n        const currentContainer = containerRef.current\n        const currentButton = buttonRef.current\n        if (currentContainer && currentButton && !isClosed) {\n            const containerTop = currentContainer.getBoundingClientRect().top\n            const buttonTop = currentButton.getBoundingClientRect().top\n            window.scrollTo({\n                top:\n                    window.scrollY +\n                    containerTop -\n                    buttonTop +\n                    CLOSED_HEIGHT +\n                    BUTTON_HEIGHT / 2,\n                behavior: \"smooth\",\n            })\n            setTimeout(() => {\n                setHeight(isClosed ? EXPANDED_HEIGHT : CLOSED_HEIGHT)\n            }, 1000)\n        } else {\n            setHeight(isClosed ? EXPANDED_HEIGHT : CLOSED_HEIGHT)\n        }\n    }\n\n    const maskColor = isClosed ? \"transparent\" : \"#000\"\n    const contentStyles: CSSProperties = {\n        WebkitMaskImage: `linear-gradient(180deg, #000 0%, ${maskColor})`,\n        transition: \"height 200ms\",\n        height,\n    }\n\n    return (\n        <div className={cx(\"expandable-paragraph\", className)}>\n            <div\n                style={contentStyles}\n                // inert prevents focus on elements that are not visible\n                // ideally would only apply to elements below the fold but that's hard\n                inert={isClosed}\n                ref={containerRef}\n                // Either pass children or dangerouslySetInnerHTML\n                {...propsWithoutStyles}\n                className=\"expandable-paragraph__content\"\n            />\n\n            <button\n                aria-label=\"Expand paragraph\"\n                className={cx(\n                    \"expandable-paragraph__expand-button\",\n                    `expandable-paragraph__expand-button--${buttonVariant}`\n                )}\n                style={{\n                    height: BUTTON_HEIGHT,\n                    position: \"relative\",\n                    top: isClosed ? undefined : -40,\n                }}\n                onClick={toggleExpanded}\n                ref={buttonRef}\n            >\n                {isClosed ? \"Show more\" : \"Show less\"}\n            </button>\n        </div>\n    )\n}\n","import {\n    EnrichedTopicPageIntroRelatedTopic,\n    EnrichedBlockTopicPageIntro,\n} from \"@ourworldindata/utils\"\nimport { useLinkedDocument } from \"../utils.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport Paragraph from \"./Paragraph.js\"\n\ntype TopicPageIntroProps = EnrichedBlockTopicPageIntro & {\n    className?: string\n}\n\nfunction TopicPageRelatedTopic({\n    text,\n    url,\n}: EnrichedTopicPageIntroRelatedTopic) {\n    const { linkedDocument, errorMessage } = useLinkedDocument(url)\n    const { isPreviewing } = useDocumentContext()\n    if (errorMessage && isPreviewing) {\n        return <li>{errorMessage}</li>\n    }\n    const topicText = linkedDocument?.title || text\n    const topicUrl = linkedDocument?.url ?? url\n    return (\n        <li>\n            <a href={topicUrl}>{topicText}</a>\n        </li>\n    )\n}\n\nexport function TopicPageIntro(props: TopicPageIntroProps) {\n    return (\n        <div className={props.className} id=\"introduction\">\n            <div className=\"topic-page-intro__content body-1-regular span-cols-6 span-md-cols-8 span-sm-cols-12\">\n                {props.content.map((text, i) => (\n                    <Paragraph d={text} key={i} />\n                ))}\n            </div>\n            <div className=\"topic-page-intro__links col-start-9 span-cols-4 col-md-start-1 span-md-cols-12\">\n                {props.downloadButton ? (\n                    <div className=\"topic-page-intro__download-button\">\n                        <a href={props.downloadButton.url}>\n                            {props.downloadButton.text}\n                        </a>\n                    </div>\n                ) : null}\n                {props.relatedTopics?.length ? (\n                    <aside className=\"topic-page-intro__related-topics\">\n                        <h4 className=\"overline-black-caps\">Related topics</h4>\n                        <ul>\n                            {props.relatedTopics.map((relatedTopic) => (\n                                <TopicPageRelatedTopic\n                                    key={relatedTopic.url}\n                                    {...relatedTopic}\n                                />\n                            ))}\n                        </ul>\n                    </aside>\n                ) : null}\n            </div>\n        </div>\n    )\n}\n","import e from\"react\";const t=\"react-horizontal-scrolling-menu\",n=`${t}--item`,o=`${t}--scroll-container`,r=`${t}--wrapper`,s=`${t}--inner-wrapper`,i=`${t}--header`,l=`${t}--arrow-left`,a=`${t}--arrow-right`,u=`${t}--footer`,c=\"itemId\",d=\"data-key\",h=\"data-index\",f={first:\"first\",last:\"last\",onInit:\"onInit\",onUpdate:\"onUpdate\"},v=\"\",m={current:null};var p=Object.freeze({__proto__:null,rootClassName:t,itemClassName:n,scrollContainerClassName:o,wrapperClassName:r,innerWrapperClassName:s,headerClassName:i,arrowLeftClassName:l,arrowRightClassName:a,footerClassName:u,id:c,dataKeyAttribute:d,dataIndexAttribute:h,events:f,emptyStr:v,emptyRef:m});class b{constructor(){this.subscribe=(e,t)=>{this.observers.set(e,(this.observers.get(e)||[]).concat(t))},this.unsubscribe=(e,t)=>{const n=(this.observers.get(e)||[]).filter((e=>e!==t));n.length?this.observers.set(e,n):this.observers.delete(e)},this.emitUpdates=(e,t)=>{const n=this.observers.get(e)||[];null==n||n.forEach((e=>e(t)))},this.updateBatch=(e,t=!0)=>{e.length&&(e.forEach((([e,t])=>this.emitUpdates(e,t))),t&&this.emitUpdates(f.onUpdate))},this.update=(e,t)=>{this.emitUpdates(e,t),this.emitUpdates(f.onUpdate)},this.observers=new Map}}class g extends Map{constructor(){super(),this.subscribe=(e,t)=>this.observer.subscribe(e,t),this.unsubscribe=(e,t)=>this.observer.unsubscribe(e,t),this.isEdgeItem=({key:e,value:t,first:n=this.first(),last:o=this.last()})=>{const r=[];return e===(null==n?void 0:n.key)?r.push([f.first,t]):e===(null==o?void 0:o.key)&&r.push([f.last,t]),r},this.edgeItemsCheck=e=>{const t=this.first(),n=this.last(),o=e.find((([e])=>e===(null==t?void 0:t.key))),r=[];o&&r.push([f.first,o[1]]);const s=e.find((([e])=>e===(null==n?void 0:n.key)));return s&&r.push([f.last,s[1]]),r},this.toArr=()=>this.sort([...this]),this.toItems=()=>this.toArr().map((([e])=>e)),this.sort=e=>e.sort((([,e],[,t])=>+e.index-+t.index)),this.set=(e,t)=>{const n=String(e),o=[[n,t]];return super.set(n,t),o.push(...this.isEdgeItem({key:n,value:t,first:this.first(),last:this.last()})),this.observer.updateBatch(o),this},this.setBatch=e=>{this.firstRun&&this.observer.update(f.onInit);const t=[...e];return this.sort(t).forEach((([e,t])=>{super.set(String(e),t)})),t.push(...this.edgeItemsCheck(t)),this.observer.updateBatch(t,!this.firstRun),this.firstRun=!1,this},this.first=()=>{var e;return null===(e=this.toArr()[0])||void 0===e?void 0:e[1]},this.last=()=>{var e,t;return null===(t=null===(e=this.toArr().slice(-1))||void 0===e?void 0:e[0])||void 0===t?void 0:t[1]},this.filter=e=>this.toArr().filter(e),this.find=e=>this.toArr().find(e),this.findIndex=e=>this.toArr().findIndex(e),this.getCurrentPos=e=>{const t=this.toArr(),n=t.findIndex((([t,n])=>t===e||n===e));return[t,n]},this.prev=e=>{var t;const[n,o]=this.getCurrentPos(e);return-1!==o?null===(t=n[o-1])||void 0===t?void 0:t[1]:void 0},this.next=e=>{var t;const[n,o]=this.getCurrentPos(e);return-1!==o?null===(t=n[o+1])||void 0===t?void 0:t[1]:void 0},this.getVisible=()=>this.filter((e=>e[1].visible)),this.observer=new b,this.firstRun=!0}}const y=e=>\"object\"==typeof e&&null!=e&&1===e.nodeType,w=(e,t)=>(!t||\"hidden\"!==e)&&\"visible\"!==e&&\"clip\"!==e,E=(e,t)=>{if(e.clientHeight<e.scrollHeight||e.clientWidth<e.scrollWidth){const n=getComputedStyle(e,null);return w(n.overflowY,t)||w(n.overflowX,t)||(e=>{const t=(e=>{if(!e.ownerDocument||!e.ownerDocument.defaultView)return null;try{return e.ownerDocument.defaultView.frameElement}catch(e){return null}})(e);return!!t&&(t.clientHeight<e.scrollHeight||t.clientWidth<e.scrollWidth)})(e)}return!1},M=(e,t,n,o,r,s,i,l)=>s<e&&i>t||s>e&&i<t?0:s<=e&&l<=n||i>=t&&l>=n?s-e-o:i>t&&l<n||s<e&&l>n?i-t+r:0,C=e=>{const t=e.parentElement;return null==t?e.getRootNode().host||null:t},I=(e,t)=>{var n,o,r,s;if(\"undefined\"==typeof document)return[];const{scrollMode:i,block:l,inline:a,boundary:u,skipOverflowHiddenElements:c}=t,d=\"function\"==typeof u?u:e=>e!==u;if(!y(e))throw new TypeError(\"Invalid target\");const h=document.scrollingElement||document.documentElement,f=[];let v=e;for(;y(v)&&d(v);){if(v=C(v),v===h){f.push(v);break}null!=v&&v===document.body&&E(v)&&!E(document.documentElement)||null!=v&&E(v,c)&&f.push(v)}const m=null!=(o=null==(n=window.visualViewport)?void 0:n.width)?o:innerWidth,p=null!=(s=null==(r=window.visualViewport)?void 0:r.height)?s:innerHeight,{scrollX:b,scrollY:g}=window,{height:w,width:I,top:x,right:k,bottom:N,left:S}=e.getBoundingClientRect(),{top:R,right:$,bottom:O,left:B}=(e=>{const t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e);let T=\"start\"===l||\"nearest\"===l?x-R:\"end\"===l?N+O:x+w/2-R+O,W=\"center\"===a?S+I/2-B+$:\"end\"===a?k+$:S-B;const j=[];for(let e=0;e<f.length;e++){const t=f[e],{height:n,width:o,top:r,right:s,bottom:u,left:c}=t.getBoundingClientRect();if(\"if-needed\"===i&&x>=0&&S>=0&&N<=p&&k<=m&&x>=r&&N<=u&&S>=c&&k<=s)return j;const d=getComputedStyle(t),v=parseInt(d.borderLeftWidth,10),y=parseInt(d.borderTopWidth,10),E=parseInt(d.borderRightWidth,10),C=parseInt(d.borderBottomWidth,10);let R=0,$=0;const O=\"offsetWidth\"in t?t.offsetWidth-t.clientWidth-v-E:0,B=\"offsetHeight\"in t?t.offsetHeight-t.clientHeight-y-C:0,A=\"offsetWidth\"in t?0===t.offsetWidth?0:o/t.offsetWidth:0,L=\"offsetHeight\"in t?0===t.offsetHeight?0:n/t.offsetHeight:0;if(h===t)R=\"start\"===l?T:\"end\"===l?T-p:\"nearest\"===l?M(g,g+p,p,y,C,g+T,g+T+w,w):T-p/2,$=\"start\"===a?W:\"center\"===a?W-m/2:\"end\"===a?W-m:M(b,b+m,m,v,E,b+W,b+W+I,I),R=Math.max(0,R+g),$=Math.max(0,$+b);else{R=\"start\"===l?T-r-y:\"end\"===l?T-u+C+B:\"nearest\"===l?M(r,u,n,y,C+B,T,T+w,w):T-(r+n/2)+B/2,$=\"start\"===a?W-c-v:\"center\"===a?W-(c+o/2)+O/2:\"end\"===a?W-s+E+O:M(c,s,o,v,E+O,W,W+I,I);const{scrollLeft:e,scrollTop:i}=t;R=0===L?0:Math.max(0,Math.min(i+R/L,t.scrollHeight-n/L+B)),$=0===A?0:Math.max(0,Math.min(e+$/A,t.scrollWidth-o/A+O)),T+=i-R,W+=e-$}j.push({el:t,top:R,left:$})}return j};function x(e,t){if(!e.isConnected||!(e=>{let t=e;for(;t&&t.parentNode;){if(t.parentNode===document)return!0;t=t.parentNode instanceof ShadowRoot?t.parentNode.host:t.parentNode}return!1})(e))return;const n=(e=>{const t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e);if((e=>\"object\"==typeof e&&\"function\"==typeof e.behavior)(t))return t.behavior(I(e,t));const o=\"boolean\"==typeof t||null==t?void 0:t.behavior;for(const{el:r,top:s,left:i}of I(e,(e=>!1===e?{block:\"end\",inline:\"nearest\"}:(e=>e===Object(e)&&0!==Object.keys(e).length)(e)?e:{block:\"start\",inline:\"nearest\"})(t))){const e=s-n.top+n.bottom,t=i-n.left+n.right;r.scroll({top:e,left:t,behavior:o})}}let k;const N=()=>(k||(k=\"performance\"in window?performance.now.bind(performance):Date.now),k());function S(e){const t=N(),n=Math.min((t-e.startTime)/e.duration,1),o=e.ease(n),r=e.startX+(e.x-e.startX)*o,s=e.startY+(e.y-e.startY)*o;e.method(r,s,n,o),r!==e.x||s!==e.y?requestAnimationFrame((()=>S(e))):e.cb()}function R(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:600,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:e=>1+--e*e*e*e*e,s=arguments.length>5?arguments[5]:void 0,i=arguments.length>6?arguments[6]:void 0;const l=e,a=e.scrollLeft,u=e.scrollTop;S({scrollable:l,method:(t,n,o,r)=>{const s=Math.ceil(t),l=Math.ceil(n);e.scrollLeft=s,e.scrollTop=l,null==i||i({target:e,elapsed:o,value:r,left:s,top:l})},startTime:N(),startX:a,startY:u,x:t,y:n,duration:o,ease:r,cb:s})}const $=function(e,t){const n=t||{};return(e=>e&&!e.behavior||\"smooth\"===e.behavior)(n)?x(e,{block:n.block,inline:n.inline,scrollMode:n.scrollMode,boundary:n.boundary,skipOverflowHiddenElements:n.skipOverflowHiddenElements,behavior:e=>Promise.all(e.reduce(((e,t)=>{let{el:o,left:r,top:s}=t;const i=o.scrollLeft,l=o.scrollTop;return i===r&&l===s?e:[...e,new Promise((e=>R(o,r,s,n.duration,n.ease,(()=>e({el:o,left:[i,r],top:[l,s]})),n.onScrollChange)))]}),[]))}):Promise.resolve(x(e,t))},O=e=>Object.values(e).map((e=>e.current)).filter(Boolean);function B(e,t,n,o,r,s){var i;const l=(null===(i=null==e?void 0:e.entry)||void 0===i?void 0:i.target)||e;if(!l)return;const a={behavior:t||\"smooth\",inline:n||\"end\",block:o||\"nearest\"};return s?l.scrollIntoView(a):$(l,Object.assign(Object.assign({},r),a))}const T=e=>document.querySelector(`[${d}='${e}']`),W=e=>document.querySelector(`[${h}='${e}']`);function j(t){return e.isValidElement(t)&&t||\"function\"==typeof t&&e.createElement(t,null)||!!t&&\"object\"==typeof t&&e.createElement(t,null)||null}const A=e=>{var t;return String((null===(t=null==e?void 0:e.props)||void 0===t?void 0:t[c])||((null==e?void 0:e.key)||v).replace(/^\\.\\$/,v))};function L(e){return!!e&&Object.prototype.hasOwnProperty.call(e,\"current\")}var V=e.memo((function({children:t,className:n,id:o,index:r,refs:s}){const i=e.useRef(null);return s[String(r)]=i,e.createElement(\"div\",{className:n,[d]:o,[h]:r,ref:i},t)}));function H({children:t,itemClassName:o=v,refs:r}){const s=e.Children.toArray(t).filter(Boolean),i=e.useMemo((()=>`${n} ${o}`),[o]);return s.map(((t,n)=>{const o=A(t);return e.createElement(V,{className:i,id:o,key:o,refs:r,index:n},t)}))}function U({className:t=v,children:n,onScroll:r=(()=>{}),scrollRef:s,containerRef:i}){const l=e.useMemo((()=>`${o} ${t}`),[t]),a=e.useCallback((e=>{L(s)?s.current=e:s(e),L(i)?i.current=e:i(e)}),[s,i]);return e.createElement(\"div\",{className:l,onScroll:r,ref:a},n)}const F=e.createContext({});const P=e=>{var t;const n=e[Math.floor(e.length/2)];return{first:null==e?void 0:e[0],center:n,last:null===(t=e.slice(-1))||void 0===t?void 0:t[0]}},D=\"undefined\"!=typeof window?e.useLayoutEffect:e.useEffect;function X({items:t,itemsChanged:n,refs:o,options:r}){const s=e.useRef(),i=e.useCallback((e=>{t.setBatch(function(e,t){return[...e].map((e=>{var n,o,r,s;const i=e.target,l=String(null!==(o=null===(n=null==i?void 0:i.dataset)||void 0===n?void 0:n.key)&&void 0!==o?o:v);return[l,{index:String(null!==(s=null===(r=null==i?void 0:i.dataset)||void 0===r?void 0:r.index)&&void 0!==s?s:v),key:l,entry:e,visible:e.intersectionRatio>=t.ratio}]}))}(e,r))}),[t,r]);D((()=>{const e=O(o),t=s.current||new IntersectionObserver(i,r);return s.current=t,e.forEach((e=>t.observe(e))),()=>{t.disconnect(),s.current=void 0}}),[i,n,r,o])}const Y=t=>e.Children.toArray(t).map(A).filter(Boolean);const _={ratio:.9,rootMargin:\"5px\",threshold:[.05,.5,.75,.95]};function q(e,t){return{prev:()=>function(e,t){const n=e.findIndex((e=>e===(null==t?void 0:t[0]))),o=t.length,r=n-o,s=r<0,i=s?0:r,l=e.slice(i,s?o:n);return l.length===o?l:e.slice(n,o)}(e,t),next:()=>function(e,t){const n=e.findIndex((e=>{var n;return e===(null===(n=t.slice(-1))||void 0===n?void 0:n[0])})),o=t.length,r=n+o+1,s=r>e.length-1,i=s?e.length-1:r,l=e.slice(s?i-o+1:n+1,i);return l.length===o?l:e.slice(e.length-o,e.length+o)}(e,t)}}const z={current:{}},K=()=>{};function G({LeftArrow:t,RightArrow:n,children:o,Header:c,Footer:d,transitionDuration:h=500,transitionBehavior:p,onInit:b=K,onUpdate:y=K,onMouseDown:w,onMouseLeave:E,onMouseUp:M,onMouseMove:C,onScroll:I=K,onTouchMove:x,onTouchStart:k,onTouchEnd:N,onWheel:S=K,options:R=_,scrollContainerClassName:$=v,containerRef:O=m,itemClassName:A=v,wrapperClassName:V=v,apiRef:P=z,RTL:q,noPolyfill:G=!0}){const J=j(t),Q=j(n),Z=j(c),ee=j(d),te=e.useRef(null),[ne]=e.useState({}),oe=e.useMemo((()=>Object.assign(Object.assign(Object.assign({},_),R),{root:te.current})),[R]),re=e.useRef(new g).current,se=function(t,n){const[o,r]=e.useState(v),s=e.useMemo((()=>Y(t)),[t]);return e.useEffect((()=>{const e=s.filter(Boolean).join(v);n.toItems().filter((e=>!s.includes(e))).forEach((e=>{n.delete(e)})),r(e)}),[s,n]),o}(o,re),ie=((t,n)=>{const o=e.useRef(!0),r=e.useMemo((()=>[n-.05,n-.01,n,n+.01,n+.05]),[n]),s=e.useCallback((e=>{var t;o.current=(null===(t=null==e?void 0:e[0])||void 0===t?void 0:t.intersectionRatio)>=n}),[n]);return D((()=>{const e=new IntersectionObserver(s,{threshold:r,rootMargin:\"0px\"});return t.current&&e.observe(t.current),()=>e.disconnect()}),[o,t,s,r]),o})(te,oe.ratio+.05<1?oe.ratio+.05:.95);X(e.useMemo((()=>({items:re,itemsChanged:se,options:oe,refs:ne})),[re,se,ne,oe]));const le=e.useMemo((()=>function(t,n,o,r){var s,i,l;const a=(n,o=!1)=>{const[r,s]=e.useState(o),i=e.useCallback((e=>{s(!!(null==e?void 0:e.visible))}),[]);return e.useEffect((()=>(t.subscribe(n,i),()=>{t.unsubscribe(n,i)})),[n,i]),r},u=!!(null===(s=t.first())||void 0===s?void 0:s.visible),c=!!(null===(i=t.last())||void 0===i?void 0:i.visible),d=e=>{var n;return null===(n=t.find((t=>t[1].key===String(e))))||void 0===n?void 0:n[1]},h=()=>{var e,n;const o=null===(n=null===(e=t.getVisible())||void 0===e?void 0:e[0])||void 0===n?void 0:n[1];return o?t.prev(o):void 0},f=()=>{var e;const n=null===(e=t.getVisible().findLast((()=>!0)))||void 0===e?void 0:e[1];return n?t.next(n):void 0},v=null===(l=null==o?void 0:o.boundary)||void 0===l?void 0:l.current;return{getItemById:d,getItemElementById:T,getItemByIndex:e=>{var n;return null===(n=t.find((t=>String(t[1].index)===String(e))))||void 0===n?void 0:n[1]},getItemElementByIndex:W,getNextElement:f,getPrevElement:h,isFirstItemVisible:u,isItemVisible:e=>t.getVisible().map((e=>e[0])).includes(String(e)),isLastItem:e=>t.last()===d(e),isLastItemVisible:c,scrollNext:(e,t,n,{duration:s,boundary:i=v}={})=>{const l=null!=e?e:null==o?void 0:o.behavior;return B(f(),l,t||\"start\",n||\"nearest\",{boundary:i,duration:null!=s?s:null==o?void 0:o.duration},r)},scrollPrev:(e,t,n,{duration:s,boundary:i=v}={})=>{const l=null!=e?e:null==o?void 0:o.behavior;return B(h(),l,t||\"end\",n||\"nearest\",{boundary:i,duration:null!=s?s:null==o?void 0:o.duration},r)},useIsVisible:a,useLeftArrowVisible:()=>{const t=a(\"first\",!0),[o,r]=e.useState(t);return e.useEffect((()=>{n.current&&r(t)}),[t]),o},useRightArrowVisible:()=>{const t=a(\"last\",!1),[o,r]=e.useState(t);return e.useEffect((()=>{n.current&&r(t)}),[t]),o},scrollToItem:(e,t,n,s,i)=>{var l;return B(e,null!=t?t:null==o?void 0:o.behavior,n,s,Object.assign(Object.assign({boundary:v},i),{duration:null!==(l=null==i?void 0:i.duration)&&void 0!==l?l:null==o?void 0:o.duration}),r)}}}(re,ie,{duration:h,behavior:p,boundary:te},G)),[re,h,p,G,ie]),ae=e.useCallback((()=>Object.assign(Object.assign({},le),{items:re,scrollContainer:te,menuVisible:ie})),[le,re,te,ie]),[ue,ce]=e.useState((()=>ae()));(({context:t,onInit:n,onUpdate:o})=>{const r=e.useCallback((()=>n(t)),[n,t]),s=e.useCallback((()=>o(t)),[o,t]),{items:i}=t;e.useEffect((()=>(i.subscribe(f.onInit,r),i.subscribe(f.onUpdate,s),()=>{i.unsubscribe(f.onInit,r),i.unsubscribe(f.onUpdate,s)})),[i,r,s])})({context:ue,onInit:b,onUpdate:y}),e.useEffect((()=>ce(ae())),[ae]),e.useEffect((()=>{L(P)?P.current=ue:P(ue)}),[ue,P]);const de=e.useCallback((e=>I(ue,e)),[I,ue]),he=e.useCallback((e=>S(ue,e)),[S,ue]),fe=e.useMemo((()=>`${r} ${V}`),[V]),ve=e.useMemo((()=>`${$}${q?\" rtl\":v}`),[q,$]);return e.createElement(\"div\",{className:fe,onWheel:he,onMouseDown:null==w?void 0:w(ue),onMouseLeave:null==E?void 0:E(ue),onMouseUp:null==M?void 0:M(ue),onMouseMove:null==C?void 0:C(ue),onTouchStart:null==k?void 0:k(ue),onTouchMove:null==x?void 0:x(ue),onTouchEnd:null==N?void 0:N(ue)},e.createElement(F.Provider,{value:ue},e.createElement(\"div\",{className:i},Z),e.createElement(\"div\",{className:s},e.createElement(\"div\",{className:l},J),e.createElement(U,{className:ve,onScroll:de,scrollRef:te,containerRef:O},e.createElement(H,{refs:ne,itemClassName:A},o)),e.createElement(\"div\",{className:a},Q)),e.createElement(\"div\",{className:u},ee)))}export{G as ScrollMenu,F as VisibilityContext,p as constants,P as getItemsPos,q as slidingWindow};\n","import { useRef } from \"react\"\nimport { useEmbedChart } from \"../../hooks.js\"\nimport {\n    EnrichedBlockNarrativeChart,\n    GRAPHER_PREVIEW_CLASS,\n} from \"@ourworldindata/types\"\nimport { useLinkedNarrativeChart } from \"../utils.js\"\nimport cx from \"classnames\"\nimport { BlockErrorFallback } from \"./BlockErrorBoundary.js\"\nimport SpanElements from \"./SpanElements.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport {\n    DEFAULT_GRAPHER_HEIGHT,\n    DEFAULT_GRAPHER_WIDTH,\n    GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR,\n} from \"@ourworldindata/grapher\"\nimport {\n    BAKED_GRAPHER_URL,\n    GRAPHER_DYNAMIC_THUMBNAIL_URL,\n} from \"../../../settings/clientSettings.js\"\nimport { queryParamsToStr, readFromAssetMap } from \"@ourworldindata/utils\"\n\nexport default function NarrativeChart({\n    d,\n    className,\n    fullWidthOnMobile = false,\n}: {\n    d: EnrichedBlockNarrativeChart\n    className?: string\n    fullWidthOnMobile?: boolean\n}) {\n    const refChartContainer = useRef<HTMLDivElement>(null)\n    const { isPreviewing, archiveContext } = useDocumentContext()\n    useEmbedChart(0, refChartContainer, isPreviewing)\n\n    const viewMetadata = useLinkedNarrativeChart(d.name)\n\n    if (!viewMetadata) {\n        if (isPreviewing) {\n            return (\n                <BlockErrorFallback\n                    className={className}\n                    error={{\n                        name: \"Narrative chart not found\",\n                        message: `Narrative chart with name \"${d.name}\" couldn't be found.`,\n                    }}\n                />\n            )\n        } else return null // If not previewing, just don't render anything\n    }\n\n    const metadataStringified = JSON.stringify(viewMetadata)\n\n    const parentQueryString = queryParamsToStr(\n        viewMetadata.queryParamsForParentChart\n    )\n    const resolvedUrl = `${BAKED_GRAPHER_URL}/${viewMetadata.parentChartSlug}${parentQueryString}`\n\n    const isOnArchivalPage = archiveContext?.type === \"archive-page\"\n    const assetMap = isOnArchivalPage\n        ? archiveContext?.assets?.runtime\n        : undefined\n\n    const archivedParentUrl = viewMetadata.latestArchivedParent?.archiveUrl\n        ? `${viewMetadata.latestArchivedParent.archiveUrl}${parentQueryString}`\n        : undefined\n    const linkTarget =\n        isOnArchivalPage && archivedParentUrl ? archivedParentUrl : resolvedUrl\n\n    const imageSrc = readFromAssetMap(assetMap, {\n        path: d.name,\n        fallback: `${GRAPHER_DYNAMIC_THUMBNAIL_URL}/by-uuid/${viewMetadata.chartConfigId}.png`,\n    })\n\n    return (\n        <div\n            className={cx(className, {\n                \"full-width-on-mobile\": fullWidthOnMobile,\n            })}\n            ref={refChartContainer}\n        >\n            <figure\n                key={metadataStringified}\n                className={cx(GRAPHER_PREVIEW_CLASS, \"chart\")}\n                style={{\n                    width: \"100%\",\n                    border: \"0px none\",\n                    height: d.height,\n                }}\n                // MultiEmbedder should not kick in on archival pages.\n                {...(!isOnArchivalPage && {\n                    [GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR]:\n                        metadataStringified,\n                })}\n            >\n                <a href={linkTarget}>\n                    <img\n                        className=\"GrapherImage\"\n                        src={imageSrc}\n                        alt={viewMetadata.title}\n                        width={DEFAULT_GRAPHER_WIDTH}\n                        height={DEFAULT_GRAPHER_HEIGHT}\n                        loading=\"lazy\"\n                    />\n                </a>\n            </figure>\n            {d.caption ? (\n                <figcaption>\n                    <SpanElements spans={d.caption} />\n                </figcaption>\n            ) : null}\n        </div>\n    )\n}\n","import { useCallback, useContext, useEffect, useState } from \"react\"\nimport * as React from \"react\"\nimport { ScrollMenu, VisibilityContext } from \"react-horizontal-scrolling-menu\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faAngleRight } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"classnames\"\nimport {\n    getWindowUrl,\n    setWindowUrl,\n    EnrichedBlockKeyInsightsSlide,\n    slugify,\n    KEY_INSIGHTS_ID,\n} from \"@ourworldindata/utils\"\nimport { BlockSize } from \"@ourworldindata/types\"\n\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport Image from \"./Image.js\"\nimport Chart from \"./Chart.js\"\nimport NarrativeChart from \"./NarrativeChart.js\"\n\nexport const KEY_INSIGHTS_CLASS_NAME = \"key-insights\"\nexport const KEY_INSIGHTS_INSIGHT_PARAM = \"insight\"\nconst KEY_INSIGHTS_THUMBS_CLASS_NAME = \"thumbs\"\nconst KEY_INSIGHTS_THUMB_CLASS_NAME = \"thumb\"\nconst KEY_INSIGHTS_SLIDES_CLASS_NAME = \"slides\"\nconst KEY_INSIGHTS_SLIDE_CLASS_NAME = \"slide\"\nconst KEY_INSIGHTS_SLIDE_CONTENT_CLASS_NAME = \"content\"\n\ntype scrollVisibilityApiType = React.ContextType<typeof VisibilityContext>\n\nenum ArrowDirection {\n    prev = \"prev\",\n    next = \"next\",\n}\n\nconst Thumb = ({\n    title,\n    onClick,\n    selected,\n}: {\n    title: string\n    onClick: () => void\n    itemId: string // needed by react-horizontal-scrolling-menu, see lib's examples\n    selected: boolean\n}) => {\n    return (\n        <button\n            aria-label={`Go to slide: ${title}`}\n            onClick={onClick}\n            role=\"tab\"\n            aria-selected={selected}\n            className={KEY_INSIGHTS_THUMB_CLASS_NAME}\n        >\n            {title}\n        </button>\n    )\n}\n\n/**\n * Tab-based switcher for key insights\n *\n * NB: this component has only received limited efforts towards accessibility.\n *\n * A next possible step would be to managage focus via arrow keys (see\n * https://w3c.github.io/aria/#managingfocus). A good implementation of\n * accessibility practices for this kind of widget is available at\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/tab_role\n */\nexport const KeyInsightsThumbs = ({ titles }: { titles: string[] }) => {\n    const [selectedId, setSelectedId] = useState<string>(\"0\")\n    const [slides, setSlides] = useState<HTMLElement | null>(null)\n    const [slug, setSlug] = useState<string>(\"\")\n    const apiRef = React.useRef({} as scrollVisibilityApiType)\n\n    // Not using useRef() here so that the  \"select slide based on hash\" effect,\n    // running on page load only, runs after the ref has been attached (and not\n    // on first render, which would be before)\n    // https://reactjs.org/docs/hooks-faq.html#how-can-i-measure-a-dom-node\n    const thumbsRef: React.RefCallback<HTMLDivElement> = useCallback((node) => {\n        if (node !== null) {\n            const keyInsightsNode = node.parentElement?.parentElement\n\n            const tempSlides = keyInsightsNode?.querySelector(\n                `.${KEY_INSIGHTS_SLIDES_CLASS_NAME}`\n            ) as HTMLDivElement | null\n            setSlides(tempSlides)\n            // get slug from previous <h3>\n            setSlug(\n                keyInsightsNode?.previousElementSibling?.getAttribute(\"id\") ??\n                    \"\"\n            )\n        }\n    }, [])\n\n    // Select active slide based on URL\n    useEffect(() => {\n        if (!slides) return\n\n        const insightParam =\n            getWindowUrl().queryParams[KEY_INSIGHTS_INSIGHT_PARAM]\n        if (!insightParam) return\n\n        const selectedSlideIdx = Array.from(\n            slides.querySelectorAll(`.${KEY_INSIGHTS_SLIDE_CLASS_NAME}`)\n        ).findIndex((slide) => {\n            // Since query params are a form of user input, the selector might\n            // not be valid.\n            try {\n                return slide.querySelector(`#${insightParam}`)\n            } catch {\n                return false\n            }\n        })\n\n        if (selectedSlideIdx === -1) return\n        setSelectedId(selectedSlideIdx.toString())\n    }, [slides])\n\n    // Scroll to selected item\n    useEffect(() => {\n        const item = apiRef.current.getItemById(selectedId)\n        if (!item) return\n\n        apiRef.current.scrollToItem(item, \"smooth\", \"center\", \"nearest\")\n    }, [selectedId])\n\n    // Select active slide when corresponding thumb selected\n    useEffect(() => {\n        if (!slides) return\n\n        // A less imperative, more React way to do this would be preferred. To\n        // switch between slides, I aimed to keep their content untouched\n        // (including event listeners hydrated by other components), while only\n        // updating their wrappers. Managing the switching logic through React\n        // would have required hydrating KeyInsightsSlides as well as all\n        // possible content components within them - even though they would have\n        // been already hydrated at the page level. From that perspective, the\n        // gain is not clear, and the approach not necessarily cleaner, so I\n        // stuck with the imperative approach.\n\n        slides\n            .querySelectorAll(`.${KEY_INSIGHTS_SLIDE_CLASS_NAME}`)\n            .forEach((slide, idx) => {\n                if (idx === Number(selectedId)) {\n                    slide.setAttribute(\"data-active\", \"true\")\n                    const windowUrl = getWindowUrl()\n                    const anchor = slide.querySelector(\"h4\")?.getAttribute(\"id\")\n                    if (\n                        !anchor ||\n                        windowUrl.queryParams[KEY_INSIGHTS_INSIGHT_PARAM] ===\n                            anchor\n                    )\n                        return\n                    setWindowUrl(\n                        windowUrl\n                            .updateQueryParams({\n                                [KEY_INSIGHTS_INSIGHT_PARAM]: anchor,\n                            })\n                            // When a key insight slug is changed, links\n                            // pointing to that key insight soft-break and take\n                            // readers to the top of the page. Adding an anchor\n                            // pointing to the the block title (h3) serves as a\n                            // stopgap, taking readers to the key insights block\n                            // instead but without selecting a particular\n                            // insight.\n                            //\n                            // This also improves the UX of readers coming\n                            // through shared insights URL. e.g.\n                            // /key-insights-demo?insight=insight-1#key-insights\n                            // shows the whole insights block, including its\n                            // titles (the target of the anchor).\n                            .update({ hash: `#${slug}` })\n                    )\n                } else {\n                    slide.setAttribute(\"data-active\", \"false\")\n                }\n            })\n        // see https://github.com/owid/owid-grapher/pull/1435#discussion_r888058198\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [selectedId])\n\n    return (\n        <div\n            className={KEY_INSIGHTS_THUMBS_CLASS_NAME}\n            role=\"tablist\"\n            ref={thumbsRef}\n        >\n            <ScrollMenu\n                LeftArrow={LeftArrow}\n                RightArrow={RightArrow}\n                apiRef={apiRef}\n            >\n                {titles.map((title, i) => {\n                    const itemId = `${i}`\n                    return (\n                        <Thumb\n                            title={title}\n                            key={itemId}\n                            itemId={itemId}\n                            onClick={() => {\n                                setSelectedId(itemId)\n                            }}\n                            selected={itemId === selectedId}\n                        />\n                    )\n                })}\n            </ScrollMenu>\n        </div>\n    )\n}\n\nconst Arrow = ({\n    children,\n    disabled,\n    onClick,\n    className,\n    direction,\n}: {\n    children: React.ReactNode\n    disabled: boolean\n    onClick: VoidFunction\n    className?: string\n    direction: ArrowDirection\n}) => {\n    const classes = [\"arrow\", className]\n    return (\n        <button\n            aria-label={`Scroll to ${\n                direction === ArrowDirection.next ? \"next\" : \"previous\"\n            } slide`}\n            disabled={disabled}\n            onClick={onClick}\n            className={classes.join(\" \")}\n        >\n            {children}\n        </button>\n    )\n}\n\nconst LeftArrow = () => {\n    const { useLeftArrowVisible, scrollPrev } = useContext(VisibilityContext)\n\n    const disabled = useLeftArrowVisible()\n\n    return (\n        !disabled && (\n            <Arrow\n                disabled={false}\n                onClick={() => scrollPrev()}\n                className=\"left\"\n                direction={ArrowDirection.prev}\n            >\n                <FontAwesomeIcon icon={faAngleRight} flip=\"horizontal\" />\n            </Arrow>\n        )\n    )\n}\n\nconst RightArrow = () => {\n    const { useRightArrowVisible, scrollNext } = useContext(VisibilityContext)\n\n    const disabled = useRightArrowVisible()\n\n    return (\n        !disabled && (\n            <Arrow\n                disabled={false}\n                onClick={() => scrollNext()}\n                className=\"right\"\n                direction={ArrowDirection.next}\n            >\n                <FontAwesomeIcon icon={faAngleRight} />\n            </Arrow>\n        )\n    )\n}\n\ntype KeyInsightsProps = {\n    className?: string\n    insights: EnrichedBlockKeyInsightsSlide[]\n    heading: string\n}\n\nexport const KeyInsights = ({\n    insights,\n    heading,\n    className,\n}: KeyInsightsProps) => {\n    function renderAssetForInsight({\n        filename,\n        url,\n        narrativeChartName,\n    }: {\n        filename?: string\n        url?: string\n        narrativeChartName?: string\n    }): React.ReactElement | null {\n        if (filename) {\n            return (\n                <Image\n                    filename={filename}\n                    containerType=\"sticky-right-left-column\"\n                />\n            )\n        }\n        if (url) {\n            return (\n                <Chart\n                    d={{\n                        url,\n                        type: \"chart\",\n                        size: BlockSize.Wide,\n                        parseErrors: [],\n                    }}\n                    fullWidthOnMobile={true}\n                />\n            )\n        }\n        if (narrativeChartName) {\n            return (\n                <NarrativeChart\n                    d={{\n                        name: narrativeChartName,\n                        type: \"narrative-chart\",\n                        size: BlockSize.Wide,\n                        parseErrors: [],\n                    }}\n                    fullWidthOnMobile={true}\n                />\n            )\n        }\n\n        return null\n    }\n    return (\n        <div className={className}>\n            <h1\n                className=\"article-block__heading h1-semibold\"\n                id={KEY_INSIGHTS_ID}\n            >\n                <span>{heading}</span>\n                <a\n                    className=\"deep-link\"\n                    aria-labelledby={KEY_INSIGHTS_ID}\n                    href={`#${KEY_INSIGHTS_ID}`}\n                />\n            </h1>\n            <div className={KEY_INSIGHTS_CLASS_NAME}>\n                <div>\n                    <KeyInsightsThumbs\n                        titles={insights.map(({ title }) => title)}\n                    />\n                    <div className={KEY_INSIGHTS_SLIDES_CLASS_NAME}>\n                        {insights.map(\n                            (\n                                {\n                                    title,\n                                    content,\n                                    filename,\n                                    url,\n                                    narrativeChartName,\n                                },\n                                idx\n                            ) => {\n                                return (\n                                    <div\n                                        key={idx}\n                                        className={cx(\n                                            KEY_INSIGHTS_SLIDE_CLASS_NAME,\n                                            \"grid grid-cols-12 span-cols-12\"\n                                        )}\n                                        data-active={idx === 0}\n                                        role=\"tabpanel\"\n                                        tabIndex={0}\n                                    >\n                                        <div className=\"grid span-cols-12\">\n                                            <div className=\"article-block__key-insights-content-column span-cols-5 span-md-cols-12\">\n                                                <h4\n                                                    id={slugify(title)}\n                                                    className=\"key-insights-title\"\n                                                >\n                                                    {title}\n                                                </h4>\n                                                <div\n                                                    className={\n                                                        KEY_INSIGHTS_SLIDE_CONTENT_CLASS_NAME\n                                                    }\n                                                >\n                                                    <ArticleBlocks\n                                                        blocks={content}\n                                                        containerType=\"key-insight\"\n                                                    />\n                                                </div>\n                                            </div>\n                                            <div className=\"key-insight__asset-container span-cols-7 span-md-cols-12\">\n                                                {renderAssetForInsight({\n                                                    filename,\n                                                    url,\n                                                    narrativeChartName,\n                                                })}\n                                            </div>\n                                        </div>\n                                    </div>\n                                )\n                            }\n                        )}\n                    </div>\n                </div>\n            </div>\n        </div>\n    )\n}\n","import { useContext } from \"react\"\nimport cx from \"classnames\"\nimport {\n    EnrichedBlockResearchAndWriting,\n    EnrichedBlockResearchAndWritingLink,\n    RESEARCH_AND_WRITING_ID,\n    formatAuthors,\n    formatDate,\n    slugify,\n} from \"@ourworldindata/utils\"\nimport { useLinkedDocument } from \"../utils.js\"\nimport Image, { ImageParentContainer } from \"./Image.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport {\n    ARCHIVED_THUMBNAIL_FILENAME,\n    DEFAULT_GDOC_FEATURED_IMAGE,\n    DEFAULT_THUMBNAIL_FILENAME,\n    DbEnrichedLatestWork,\n    RESEARCH_AND_WRITING_DEFAULT_HEADING,\n    SearchResultType,\n    SearchState,\n} from \"@ourworldindata/types\"\nimport {\n    createTopicFilter,\n    SEARCH_BASE_PATH,\n} from \"../../search/searchUtils.js\"\nimport { stateToSearchParams } from \"../../search/searchState.js\"\nimport { faMagnifyingGlass } from \"@fortawesome/free-solid-svg-icons\"\n\nfunction Thumbnail({\n    filename,\n    containerType,\n}: {\n    filename: string\n    containerType: ImageParentContainer\n}) {\n    if (\n        filename === ARCHIVED_THUMBNAIL_FILENAME ||\n        filename === DEFAULT_THUMBNAIL_FILENAME\n    ) {\n        return <img src={`/${filename}`} />\n    }\n    return (\n        <Image\n            filename={filename}\n            shouldLightbox={false}\n            containerType={containerType}\n        />\n    )\n}\n\ntype ResearchAndWritingProps = {\n    className?: string\n} & EnrichedBlockResearchAndWriting\n\nfunction ResearchAndWritingLink(\n    props: EnrichedBlockResearchAndWritingLink & {\n        className?: string\n        isSmall?: boolean\n        shouldHideThumbnail?: boolean\n        shouldHideThumbnailSm?: boolean\n        shouldHideSubtitle?: boolean\n        shouldHideAuthors?: boolean\n        shouldHideDate?: boolean\n    }\n) {\n    let {\n        value: {\n            url,\n            title,\n            subtitle,\n            authors,\n            filename = DEFAULT_GDOC_FEATURED_IMAGE,\n            date,\n        },\n        shouldHideThumbnail = false,\n        shouldHideThumbnailSm = false,\n        isSmall = false,\n        shouldHideSubtitle = false,\n        shouldHideAuthors = false,\n        shouldHideDate = false,\n        className,\n    } = props\n    const { linkedDocument, errorMessage } = useLinkedDocument(url)\n    const { isPreviewing } = useDocumentContext()\n\n    if (errorMessage) {\n        if (isPreviewing) {\n            return (\n                <div\n                    className={cx(\n                        className,\n                        \"research-and-writing-link--error\"\n                    )}\n                >\n                    <p>{errorMessage}</p>\n                    <p>This block won't render during baking</p>\n                </div>\n            )\n        }\n        return null\n    }\n\n    if (linkedDocument) {\n        url = linkedDocument.url\n        title = linkedDocument.title || title\n        authors = linkedDocument.authors || authors\n        subtitle = linkedDocument.excerpt || subtitle\n        filename = linkedDocument[\"featured-image\"] || filename\n        date = linkedDocument.publishedAt || date\n    }\n\n    return (\n        <a\n            href={url}\n            className={cx(\n                \"research-and-writing-link\",\n                {\n                    \"research-and-writing-link--hide-thumbnail-sm\":\n                        shouldHideThumbnailSm,\n                },\n                className\n            )}\n        >\n            {filename && !shouldHideThumbnail ? (\n                <figure>\n                    <Thumbnail\n                        filename={filename}\n                        containerType={isSmall ? \"thumbnail\" : \"default\"}\n                    />\n                </figure>\n            ) : null}\n            {date && !shouldHideDate ? (\n                <p className=\"research-and-writing-link__date\">\n                    {formatDate(new Date(date))}\n                </p>\n            ) : null}\n            <h3\n                className={cx(\"research-and-writing-link__title\", {\n                    \"research-and-writing-link__title--large\": !isSmall,\n                })}\n            >\n                {title}\n            </h3>\n            {subtitle && !shouldHideSubtitle ? (\n                <p\n                    className={cx(\"research-and-writing-link__description\", {\n                        \"research-and-writing-link__description--large\":\n                            !isSmall,\n                    })}\n                >\n                    {subtitle}\n                </p>\n            ) : null}\n            {authors && !shouldHideAuthors ? (\n                <p className=\"research-and-writing-link__authors body-3-medium-italic\">\n                    {formatAuthors(authors)}\n                </p>\n            ) : null}\n        </a>\n    )\n}\n\nconst parseLatestWorkToResearchAndWritingLink = (\n    latestWork: DbEnrichedLatestWork\n): EnrichedBlockResearchAndWritingLink => {\n    return {\n        value: {\n            ...latestWork,\n            url: `/${latestWork.slug}`, // we might want to use a version of getCanonicalUrl here if we start linking to types other than OwidGdocType.Article\n            filename: latestWork[\"featured-image\"] || undefined,\n            date: latestWork.publishedAt || undefined,\n            subtitle: latestWork.subtitle || undefined,\n        },\n    }\n}\n\nexport function ResearchAndWriting(props: ResearchAndWritingProps) {\n    const {\n        heading,\n        \"hide-authors\": hideAuthors,\n        \"hide-date\": hideDate,\n        variant,\n        primary,\n        secondary,\n        more,\n        rows,\n        latest,\n        className,\n    } = props\n\n    const slug = heading ? slugify(heading) : RESEARCH_AND_WRITING_ID\n\n    // Get the URLs from the links of the featured work section. These will be\n    // excluded from the latest work section below to avoid duplication.\n    const primarySecondaryUrls = [...primary, ...secondary].map(\n        (link) => link.value.url\n    )\n    const { latestWorkLinks, tags } = useContext(AttachmentsContext)\n    const topicName = tags?.[0]?.name\n    let seeAllResearchHref: string | undefined\n    if (topicName) {\n        const searchState: SearchState = {\n            query: \"\",\n            filters: [createTopicFilter(topicName)],\n            requireAllCountries: false,\n            resultType: SearchResultType.WRITING,\n        }\n        const params = stateToSearchParams(searchState)\n        seeAllResearchHref = `${SEARCH_BASE_PATH}?${params.toString()}`\n    }\n    // There might be latestWorkLinks available but we only want to show them if\n    // a {.latest} block has been added\n    if (latest && latestWorkLinks) {\n        latest.articles = latestWorkLinks\n            // We want to filter out the primary and secondary links (aka.\n            // featured work links) from the latest work section to avoid\n            // duplication. Only featured links pointing to gdocs are\n            // considered.\n            .filter(\n                (link) =>\n                    !primarySecondaryUrls.includes(\n                        `https://docs.google.com/document/d/${link.id}/edit`\n                    )\n            )\n            .map(parseLatestWorkToResearchAndWritingLink)\n    }\n\n    // If there are no primary links, we revert to scrolling through the\n    // secondary links. This is because the absence of primary links currently\n    // means that we are on a author page using the topics template, where all\n    // of the author's work is shown through secondary links. In this case,\n    // where nothing competes with the secondary links, we revert to a more\n    // natural scrolling behaviour.\n    //\n    // Using the presence of primary links as a proxy for this behaviour is\n    // bordering on a hack, and makes reasoning about the component slightly\n    // more difficult, but is considered acceptable for now.\n    //\n    // see https://owid.slack.com/archives/C06KFK86HST/p1716469728775129\n\n    const shouldPrimarySecondaryOverflow = primary.length > 0\n\n    const isFeaturedVariant = variant === \"featured\"\n\n    return (\n        <section\n            className={cx(className, \"grid\", {\n                \"article-block__research-and-writing--featured needs-dividers\":\n                    isFeaturedVariant,\n            })}\n        >\n            <h1\n                className={cx(\"h1-semibold span-cols-12\", {\n                    \"research-and-writing__heading--featured\":\n                        isFeaturedVariant,\n                })}\n                id={slug}\n            >\n                <span>{heading || RESEARCH_AND_WRITING_DEFAULT_HEADING}</span>\n                <a\n                    className=\"deep-link\"\n                    aria-labelledby={slug}\n                    href={`#${slug}`}\n                />\n            </h1>\n            <div className=\"span-cols-12 research-and-writing-row\">\n                <div\n                    className={cx(\"research-and-writing-row__links\", {\n                        \"research-and-writing-row__links--overflow\":\n                            shouldPrimarySecondaryOverflow,\n                        \"research-and-writing-row__links--featured\":\n                            isFeaturedVariant,\n                        grid: !isFeaturedVariant,\n                    })}\n                >\n                    {primary.map((link, i) => (\n                        <ResearchAndWritingLink\n                            className={cx({\n                                \"research-and-writing-link--featured\":\n                                    isFeaturedVariant,\n                                \"span-cols-6 span-sm-cols-12\":\n                                    !isFeaturedVariant,\n                            })}\n                            isSmall={isFeaturedVariant}\n                            key={i}\n                            shouldHideAuthors={hideAuthors}\n                            shouldHideDate={hideDate}\n                            {...link}\n                        />\n                    ))}\n                    {secondary.map((link, i) => (\n                        <ResearchAndWritingLink\n                            key={i}\n                            className={cx({\n                                \"research-and-writing-link--featured\":\n                                    isFeaturedVariant,\n                                \"span-cols-3 span-md-cols-6 span-sm-cols-12\":\n                                    !isFeaturedVariant,\n                            })}\n                            isSmall\n                            shouldHideAuthors={hideAuthors}\n                            shouldHideDate={hideDate}\n                            {...link}\n                        />\n                    ))}\n                </div>\n            </div>\n            {rows.map((row, i) => (\n                <div key={i} className=\"span-cols-12 research-and-writing-row\">\n                    <h2\n                        className={cx(\n                            \"h2-bold research-and-writing-row__heading\",\n                            {\n                                \"research-and-writing-row__heading--featured\":\n                                    isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {row.heading}\n                    </h2>\n                    <div\n                        className={cx(\n                            \"research-and-writing-row__links research-and-writing-row__links--overflow\",\n                            {\n                                \"research-and-writing-row__links--featured\":\n                                    isFeaturedVariant,\n                                \"grid grid-cols-4 grid-lg-cols-3 grid-md-cols-2\":\n                                    !isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {row.articles.map((link, i) => (\n                            <ResearchAndWritingLink\n                                shouldHideSubtitle\n                                shouldHideAuthors={hideAuthors}\n                                shouldHideDate={hideDate}\n                                isSmall\n                                className={cx({\n                                    \"research-and-writing-link--featured\":\n                                        isFeaturedVariant,\n                                    \"span-cols-1\": !isFeaturedVariant,\n                                })}\n                                key={i}\n                                {...link}\n                            />\n                        ))}\n                    </div>\n                </div>\n            ))}\n            {more ? (\n                <div className=\"span-cols-12 research-and-writing-row\">\n                    <h2\n                        className={cx(\n                            \"h2-bold research-and-writing-row__heading\",\n                            {\n                                \"research-and-writing-row__heading--featured\":\n                                    isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {more.heading}\n                    </h2>\n                    <div\n                        className={cx(\n                            \"research-and-writing-row__links research-and-writing-row__links--condensed-sm research-and-writing-row__links--condensed research-and-writing-row__links--overflow\",\n                            {\n                                \"research-and-writing-row__links--featured\":\n                                    isFeaturedVariant,\n                                \"grid grid-cols-4 grid-lg-cols-3 grid-md-cols-2\":\n                                    !isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {more.articles.map((link, i) => (\n                            <ResearchAndWritingLink\n                                shouldHideThumbnail\n                                shouldHideSubtitle\n                                shouldHideAuthors={hideAuthors}\n                                shouldHideDate={hideDate}\n                                isSmall\n                                className={cx({\n                                    \"research-and-writing-link--featured\":\n                                        isFeaturedVariant,\n                                    \"span-cols-1\": !isFeaturedVariant,\n                                })}\n                                key={i}\n                                {...link}\n                            />\n                        ))}\n                    </div>\n                </div>\n            ) : null}\n            {latest?.articles?.length ? (\n                <div className=\"span-cols-12 research-and-writing-row\">\n                    <h2\n                        className={cx(\n                            \"h1-semibold research-and-writing-row__heading research-and-writing-row__heading--divider\",\n                            {\n                                \"research-and-writing-row__heading--featured\":\n                                    isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {latest.heading || \"Latest work\"}\n                    </h2>\n                    <div\n                        className={cx(\n                            \"research-and-writing-row__links research-and-writing-row__links--condensed-sm\",\n                            {\n                                \"research-and-writing-row__links--featured\":\n                                    isFeaturedVariant,\n                                \"grid grid-cols-4 grid-lg-cols-3 grid-md-cols-2 grid-sm-cols-1\":\n                                    !isFeaturedVariant,\n                            }\n                        )}\n                    >\n                        {latest.articles.map((link, i) => (\n                            <ResearchAndWritingLink\n                                isSmall\n                                shouldHideThumbnailSm\n                                shouldHideAuthors={hideAuthors}\n                                shouldHideDate={hideDate}\n                                className={cx({\n                                    \"research-and-writing-link--featured\":\n                                        isFeaturedVariant,\n                                    \"span-cols-1\": !isFeaturedVariant,\n                                })}\n                                key={i}\n                                {...link}\n                            />\n                        ))}\n                    </div>\n                </div>\n            ) : null}\n            {variant === \"featured\" && seeAllResearchHref ? (\n                <div className=\"span-cols-12 research-and-writing-row\">\n                    <div className=\"research-and-writing__see-all\">\n                        <Button\n                            theme=\"solid-vermillion\"\n                            text={`See all articles on this topic`}\n                            href={seeAllResearchHref}\n                            icon={faMagnifyingGlass}\n                            iconPosition=\"left\"\n                        />\n                    </div>\n                </div>\n            ) : null}\n        </section>\n    )\n}\n","import { useContext } from \"react\"\nimport urljoin from \"url-join\"\nimport cx from \"classnames\"\nimport {\n    EnrichedBlockAllCharts,\n    RelatedChart,\n    Url,\n    ALL_CHARTS_ID,\n    KeyChartLevel,\n    queryParamsToStr,\n} from \"@ourworldindata/utils\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { RelatedCharts } from \"../../blocks/RelatedCharts.js\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.js\"\nimport { Button } from \"@ourworldindata/components\"\n\ntype AllChartsProps = EnrichedBlockAllCharts & {\n    className?: string\n    id?: string\n}\n\nfunction sortRelatedCharts(\n    relatedCharts: RelatedChart[],\n    sortedSlugs: string[]\n): RelatedChart[] {\n    const chartBySlug = new Map(\n        relatedCharts.map((chart) => [chart.slug, chart])\n    )\n\n    const topCharts: RelatedChart[] = []\n    for (const slug of new Set(sortedSlugs)) {\n        const chart = chartBySlug.get(slug)\n        if (chart) {\n            topCharts.push({ ...chart, keyChartLevel: KeyChartLevel.Top })\n            chartBySlug.delete(slug)\n        }\n    }\n\n    return [...topCharts, ...chartBySlug.values()]\n}\n\nexport function AllCharts(props: AllChartsProps) {\n    const { heading, top, className, id = ALL_CHARTS_ID } = props\n    const { relatedCharts, tags } = useContext(AttachmentsContext)\n    if (relatedCharts.length === 0) return null\n\n    const topSlugs = top.map((item) => Url.fromURL(item.url).slug as string)\n\n    const firstTag = tags[0]\n    const firstTagDataCatalogQueryString = firstTag\n        ? queryParamsToStr({ topics: firstTag.name })\n        : \"\"\n\n    const sortedRelatedCharts = sortRelatedCharts(relatedCharts, topSlugs)\n    return (\n        <div className={cx(className)}>\n            <h1 className=\"article-block__heading h1-semibold\" id={id}>\n                <span>\n                    {firstTag ? `Key Charts on ${firstTag.name}` : heading}\n                </span>\n                <a className=\"deep-link\" aria-labelledby={id} href={`#${id}`} />\n            </h1>\n            <Button\n                theme=\"solid-vermillion\"\n                text=\"See all charts on this topic\"\n                href={`${urljoin(BAKED_BASE_URL, `/data`, firstTagDataCatalogQueryString)}`}\n            />\n            <RelatedCharts\n                showKeyChartsOnly={true}\n                charts={sortedRelatedCharts}\n            />\n        </div>\n    )\n}\n","import cx from \"classnames\"\nimport {\n    LARGEST_IMAGE_WIDTH,\n    Span,\n    readFromAssetMap,\n} from \"@ourworldindata/utils\"\nimport { useImage } from \"../utils.js\"\nimport SpanElements from \"./SpanElements.js\"\nimport { CLOUDFLARE_IMAGES_URL } from \"../../../settings/clientSettings.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\n\ninterface VideoProps {\n    url: string\n    caption?: Span[]\n    className?: string\n    shouldLoop?: boolean\n    shouldAutoplay?: boolean\n    filename: string\n}\n\nexport default function Video(props: VideoProps) {\n    const { url, caption, className, shouldLoop, shouldAutoplay, filename } =\n        props\n    const { archiveContext } = useDocumentContext()\n    const isOnArchivalPage = archiveContext?.type === \"archive-page\"\n    const assetMap = isOnArchivalPage\n        ? archiveContext?.assets?.runtime\n        : undefined\n\n    const poster = useImage(filename)\n    const posterSrc = poster?.cloudflareId\n        ? readFromAssetMap(assetMap, {\n              path: poster.filename,\n              fallback: `${CLOUDFLARE_IMAGES_URL}/${poster.cloudflareId}/w=${LARGEST_IMAGE_WIDTH}`,\n          })\n        : undefined\n\n    const videoSrc = readFromAssetMap(assetMap, {\n        path: url,\n        fallback: url,\n    })\n\n    return (\n        <figure className={cx(className)}>\n            <video\n                muted\n                controls\n                autoPlay={shouldAutoplay}\n                preload={shouldAutoplay ? \"auto\" : \"none\"}\n                loop={shouldLoop}\n                poster={posterSrc}\n            >\n                <source src={videoSrc} type=\"video/mp4\" />\n            </video>\n            {caption ? (\n                <figcaption>\n                    <SpanElements spans={caption} />\n                </figcaption>\n            ) : null}\n        </figure>\n    )\n}\n","import cx from \"classnames\"\nimport { useLinkedStaticViz } from \"../utils.js\"\nimport Image, { ImageParentContainer } from \"./Image.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport {\n    useCallback,\n    useEffect,\n    useMemo,\n    useState,\n    useId,\n    type MouseEvent,\n} from \"react\"\nimport { BlockErrorFallback } from \"./BlockErrorBoundary.js\"\nimport { MarkdownTextWrap, OverlayHeader } from \"@ourworldindata/components\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight, faDownload } from \"@fortawesome/free-solid-svg-icons\"\nimport { CLOUDFLARE_IMAGES_URL } from \"../../../settings/clientSettings.js\"\nimport { triggerDownloadFromBlob } from \"@ourworldindata/utils\"\nimport { ImageMetadata, LinkedStaticViz, Span } from \"@ourworldindata/types\"\nimport { useTriggerOnEscape } from \"../../hooks.js\"\nimport SpanElements from \"./SpanElements.js\"\nimport { SiteAnalytics } from \"../../SiteAnalytics.js\"\n\nconst analytics = new SiteAnalytics()\n\ninterface StaticVizProps {\n    name: string\n    className?: string\n    containerType?: ImageParentContainer\n    hasOutline?: boolean\n    caption?: Span[]\n}\n\nexport default function StaticViz(props: StaticVizProps) {\n    const {\n        name,\n        className,\n        containerType = \"default\",\n        hasOutline = true,\n        caption,\n    } = props\n    const staticViz = useLinkedStaticViz(name)\n    const { isPreviewing } = useDocumentContext()\n    const [isDownloadModalOpen, setIsDownloadModalOpen] = useState(false)\n\n    if (!staticViz) {\n        if (isPreviewing) {\n            return (\n                <BlockErrorFallback\n                    className={cx(\"static-viz\", className)}\n                    error={{\n                        name: \"StaticViz error\",\n                        message: `StaticViz with name \"${name}\" not found. This block will not render when the page is baked.`,\n                    }}\n                />\n            )\n        }\n        return null\n    }\n\n    return (\n        <figure className={cx(\"static-viz\", className)}>\n            <div className=\"static-viz__image-wrapper\">\n                <Image\n                    hasOutline={hasOutline}\n                    imageData={staticViz.desktop}\n                    smallImageData={staticViz.mobile}\n                    containerType={containerType}\n                    shouldHideDownloadButton\n                />\n            </div>\n            <button\n                type=\"button\"\n                className=\"static-viz__download-button\"\n                onClick={() => setIsDownloadModalOpen(true)}\n            >\n                <FontAwesomeIcon icon={faDownload} />\n                Download image or data\n            </button>\n            {caption ? (\n                <figcaption className=\"static-viz__caption\">\n                    <SpanElements spans={caption} />\n                </figcaption>\n            ) : null}\n            {isDownloadModalOpen && (\n                <StaticVizDownloadModal\n                    staticViz={staticViz}\n                    onClose={() => setIsDownloadModalOpen(false)}\n                />\n            )}\n        </figure>\n    )\n}\n\ninterface DownloadOption {\n    key: string\n    title: string\n    description: string\n    previewImage?: ImageMetadata\n    onClick?: () => void\n    href?: string\n    onClickAnalytics?: () => void\n}\n\nconst StaticVizDownloadModal = ({\n    staticViz,\n    onClose,\n}: {\n    staticViz: LinkedStaticViz\n    onClose: () => void\n}) => {\n    const dialogTitleId = useId()\n    useTriggerOnEscape(onClose)\n\n    useEffect(() => {\n        document.documentElement.classList.add(\"no-scroll\")\n        return () => {\n            document.documentElement.classList.remove(\"no-scroll\")\n        }\n    }, [])\n\n    const downloadImage = useCallback(\n        async (\n            image: ImageMetadata,\n            fallbackName: string,\n            variant: \"desktop\" | \"mobile\"\n        ) => {\n            if (!image.cloudflareId) return\n            const url = makeImageSrc(image)\n            if (!url) return\n            try {\n                const response = await fetch(url)\n                const blob = await response.blob()\n                const filename = image.filename ?? fallbackName\n                triggerDownloadFromBlob(filename, blob)\n                analytics.logStaticVizDownload(\n                    staticViz.name,\n                    \"image_download\",\n                    variant\n                )\n            } catch (error) {\n                console.error(\"Failed to download static viz image\", error)\n            }\n        },\n        [staticViz.name]\n    )\n\n    const imageOptions: DownloadOption[] = useMemo(() => {\n        const hasMobile = !!staticViz.mobile\n        const desktopTitle = hasMobile ? \"Desktop version\" : \"Download image\"\n\n        const options: DownloadOption[] = [\n            {\n                key: \"desktop-image\",\n                title: desktopTitle,\n                description: createDimensionsLabel(staticViz.desktop),\n                previewImage: staticViz.desktop,\n                onClick: () =>\n                    void downloadImage(\n                        staticViz.desktop,\n                        `${staticViz.name}-desktop.png`,\n                        \"desktop\"\n                    ),\n            },\n        ]\n\n        if (hasMobile) {\n            options.push({\n                key: \"mobile-image\",\n                title: \"Mobile version\",\n                description: createDimensionsLabel(staticViz.mobile!),\n                previewImage: staticViz.mobile,\n                onClick: () =>\n                    void downloadImage(\n                        staticViz.mobile!,\n                        `${staticViz.name}-mobile.png`,\n                        \"mobile\"\n                    ),\n            })\n        }\n\n        return options\n    }, [downloadImage, staticViz])\n\n    const dataOptions: DownloadOption[] = useMemo(() => {\n        const options: DownloadOption[] = []\n        if (staticViz.grapherUrl) {\n            options.push({\n                key: \"grapher-data\",\n                title: \"Download data (CSV)\",\n                description:\n                    \"Download the data behind this visualization as a CSV file.\",\n                href: `${staticViz.grapherUrl}.csv`,\n                onClickAnalytics: () =>\n                    analytics.logStaticVizDownload(\n                        staticViz.name,\n                        \"data_download\",\n                        staticViz.grapherUrl\n                    ),\n            })\n        }\n        if (staticViz.sourceUrl) {\n            options.push({\n                key: \"source-link\",\n                title: \"View source dataset\",\n                description:\n                    \"Visit the external dataset or documentation referenced for this visualization.\",\n                href: staticViz.sourceUrl,\n                onClickAnalytics: () =>\n                    analytics.logStaticVizDownload(\n                        staticViz.name,\n                        \"source_link_click\",\n                        staticViz.sourceUrl\n                    ),\n            })\n        }\n        return options\n    }, [staticViz.grapherUrl, staticViz.sourceUrl, staticViz.name])\n\n    const handleOverlayClick = useCallback(\n        (event: MouseEvent<HTMLDivElement>) => {\n            if (event.target === event.currentTarget) onClose()\n        },\n        [onClose]\n    )\n\n    const grapherLink =\n        staticViz.grapherUrl && staticViz.grapherUrl.trim().length\n            ? staticViz.grapherUrl\n            : undefined\n\n    const hasTwoImages = imageOptions.length > 1\n\n    return (\n        <div\n            className=\"static-viz__download-overlay\"\n            onClick={handleOverlayClick}\n            role=\"presentation\"\n        >\n            <div\n                className=\"static-viz-download-modal\"\n                role=\"dialog\"\n                aria-modal=\"true\"\n                aria-labelledby={dialogTitleId}\n            >\n                <OverlayHeader\n                    title=\"Download\"\n                    onDismiss={onClose}\n                    className=\"static-viz-download-modal__header\"\n                />\n                <span id={dialogTitleId} className=\"sr-only\">\n                    Download\n                </span>\n                <div className=\"static-viz-download-modal__content\">\n                    {staticViz.description && (\n                        <section className=\"static-viz-download-modal__section\">\n                            <div className=\"static-viz-download-modal__heading\">\n                                <h3>How this visualization was made</h3>\n                            </div>\n                            <div className=\"static-viz-download-modal__description\">\n                                <MarkdownTextWrap\n                                    text={staticViz.description}\n                                    fontSize={14}\n                                    lineHeight={1.2}\n                                />\n                            </div>\n                        </section>\n                    )}\n                    <section className=\"static-viz-download-modal__section\">\n                        <div className=\"static-viz-download-modal__heading\">\n                            <h3>{hasTwoImages ? \"Images\" : \"Image\"}</h3>\n                            <p>\n                                {hasTwoImages\n                                    ? \"Download high-resolution images for this static visualization.\"\n                                    : \"Download a high-resolution version of this static visualization.\"}\n                            </p>\n                        </div>\n                        {imageOptions.map((option) => (\n                            <DownloadButton\n                                key={option.key}\n                                title={option.title}\n                                description={\n                                    option.description ||\n                                    \"High-resolution export.\"\n                                }\n                                previewImage={option.previewImage}\n                                onClick={option.onClick}\n                            />\n                        ))}\n                    </section>\n                    {!!dataOptions.length && (\n                        <section className=\"static-viz-download-modal__section\">\n                            <div className=\"static-viz-download-modal__heading\">\n                                <h3>Data</h3>\n                                <p>\n                                    Explore or download the dataset that was\n                                    used to create this visualization.\n                                </p>\n                            </div>\n                            {dataOptions.map((option) => (\n                                <DownloadButton\n                                    key={option.key}\n                                    title={option.title}\n                                    description={option.description}\n                                    href={option.href}\n                                    onClickAnalytics={option.onClickAnalytics}\n                                />\n                            ))}\n                        </section>\n                    )}\n                    {grapherLink && (\n                        <section className=\"static-viz-download-modal__section\">\n                            <div className=\"static-viz-download-modal__heading\">\n                                <h3>Continue exploring</h3>\n                                <p>\n                                    Visit this chart on Our World in Data to\n                                    explore and customize the data.\n                                </p>\n                            </div>\n                            <a\n                                href={grapherLink}\n                                className=\"static-viz-download-modal__grapher-link\"\n                            >\n                                Open interactive chart{\" \"}\n                                <FontAwesomeIcon icon={faArrowRight} />\n                            </a>\n                        </section>\n                    )}\n                </div>\n            </div>\n        </div>\n    )\n}\n\nconst DownloadButton = ({\n    title,\n    description,\n    previewImage,\n    onClick,\n    href,\n    onClickAnalytics,\n}: {\n    title: string\n    description: string\n    previewImage?: ImageMetadata\n    onClick?: () => void\n    href?: string\n    onClickAnalytics?: () => void\n}) => {\n    const content = (\n        <>\n            {previewImage && (\n                <div className=\"static-viz-download-modal__preview\">\n                    <Image\n                        imageData={previewImage}\n                        containerType=\"thumbnail\"\n                        shouldLightbox={false}\n                        shouldHideDownloadButton\n                        alt=\"\"\n                    />\n                </div>\n            )}\n            <div className=\"static-viz-download-modal__button-content\">\n                <h4>{title}</h4>\n                <p>{description}</p>\n            </div>\n            <FontAwesomeIcon\n                icon={faDownload}\n                className=\"static-viz-download-modal__button-icon\"\n                aria-hidden=\"true\"\n            />\n        </>\n    )\n\n    if (href) {\n        return (\n            <a\n                className=\"static-viz-download-modal__button\"\n                href={href}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                onClick={onClickAnalytics}\n            >\n                {content}\n            </a>\n        )\n    }\n\n    return (\n        <button\n            type=\"button\"\n            className=\"static-viz-download-modal__button\"\n            onClick={onClick}\n        >\n            {content}\n        </button>\n    )\n}\n\nconst createDimensionsLabel = (image: ImageMetadata): string => {\n    if (image.originalWidth && image.originalHeight) {\n        return `${image.originalWidth} × ${image.originalHeight}px`\n    }\n    return \"High-resolution export.\"\n}\n\nconst makeImageSrc = (image: ImageMetadata, width?: number) => {\n    if (!image.cloudflareId) return undefined\n    const fallbackWidth = image.originalWidth ?? 1600\n    return `${CLOUDFLARE_IMAGES_URL}/${image.cloudflareId}/w=${\n        width ?? fallbackWidth\n    }`\n}\n","import * as React from \"react\"\nimport { EnrichedBlockTable } from \"@ourworldindata/utils\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport SpanElements from \"./SpanElements.js\"\n\nfunction TableCell(props: {\n    tag: \"td\" | \"th\"\n    scope?: \"row\" | \"col\"\n    children: React.ReactNode\n}) {\n    const { tag, scope, children } = props\n    return React.createElement(tag, { scope }, children)\n}\n\nexport type TableProps = {\n    className?: string\n} & EnrichedBlockTable\n\nexport function Table(props: TableProps) {\n    const { className, rows, template } = props\n    const isFirstColumnHeader =\n        template === \"header-column-row\" || template === \"header-column\"\n    const isFirstRowHeader =\n        template === \"header-column-row\" || template === \"header-row\"\n\n    return (\n        <div className={className}>\n            <table>\n                {isFirstRowHeader && (\n                    <thead>\n                        <tr>\n                            {rows[0]?.cells.map((cell, columnIndex) => {\n                                const scope =\n                                    isFirstColumnHeader && columnIndex === 0\n                                        ? \"row\"\n                                        : \"col\"\n                                return (\n                                    <TableCell\n                                        key={columnIndex}\n                                        scope={scope}\n                                        tag=\"th\"\n                                    >\n                                        <ArticleBlocks blocks={cell.content} />\n                                    </TableCell>\n                                )\n                            })}\n                        </tr>\n                    </thead>\n                )}\n                <tbody>\n                    {rows\n                        .slice(isFirstRowHeader ? 1 : 0)\n                        .map((row, rowIndex) => {\n                            const actualRowIndex = isFirstRowHeader\n                                ? rowIndex + 1\n                                : rowIndex\n                            return (\n                                <tr key={actualRowIndex}>\n                                    {row.cells.map((cell, columnIndex) => {\n                                        const scope =\n                                            isFirstColumnHeader &&\n                                            columnIndex === 0\n                                                ? \"row\"\n                                                : undefined\n                                        const tag = scope ? \"th\" : \"td\"\n\n                                        return (\n                                            <TableCell\n                                                key={columnIndex}\n                                                scope={scope}\n                                                tag={tag}\n                                            >\n                                                <ArticleBlocks\n                                                    blocks={cell.content}\n                                                />\n                                            </TableCell>\n                                        )\n                                    })}\n                                </tr>\n                            )\n                        })}\n                </tbody>\n                {props.caption && (\n                    <caption>\n                        <SpanElements spans={props.caption} />\n                    </caption>\n                )}\n            </table>\n        </div>\n    )\n}\n","import { EnrichedBlockExplorerTiles } from \"@ourworldindata/types\"\nimport { Button } from \"@ourworldindata/components\"\nimport { useLinkedChart } from \"../utils.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.js\"\n\nfunction ExplorerTile({ url }: { url: string }) {\n    const { linkedChart, errorMessage } = useLinkedChart(url)\n    const { isPreviewing } = useDocumentContext()\n    if (errorMessage && isPreviewing) {\n        return <p>{errorMessage}</p>\n    }\n    if (!linkedChart) {\n        return null\n    }\n    const icon = linkedChart.tags[0] ? (\n        <img\n            className=\"explorer-tile__icon\"\n            height={40}\n            width={40}\n            src={`${BAKED_BASE_URL}/images/tag-icons/${encodeURIComponent(\n                linkedChart.tags[0]\n            )}.svg`}\n            alt={`Icon for topic ${linkedChart.tags[0]}`}\n            loading=\"lazy\"\n        />\n    ) : null\n\n    return (\n        <li className=\"span-cols-3 span-md-cols-6\">\n            <a className=\"explorer-tile\" href={linkedChart.resolvedUrl}>\n                {icon}\n                <div className=\"explorer-tile__text-container\">\n                    <p className=\"h3-bold explorer-tile__title\">\n                        {linkedChart.title}\n                    </p>\n                    <p className=\"h3-bold explorer-tile__suffix\">\n                        {\" \"}\n                        Data Explorer\n                    </p>\n                </div>\n            </a>\n        </li>\n    )\n}\n\ntype ExplorerTilesProps = EnrichedBlockExplorerTiles & {\n    className?: string\n}\n\nexport function ExplorerTiles({\n    className,\n    title,\n    subtitle,\n    explorers,\n}: ExplorerTilesProps) {\n    return (\n        <div className={className}>\n            <h2 className=\"h2-bold span-cols-6 span-md-12 explorer-tiles__title\">\n                {title}\n            </h2>\n            <Button\n                className=\"span-cols-4 col-start-9 span-md-cols-5 col-md-start-8 col-sm-start-1 span-sm-cols-12 body-3-medium explorer-tiles__cta\"\n                href=\"/explorers\"\n                text=\"See all our Data Explorers\"\n                theme=\"outline-vermillion\"\n            />\n\n            <p className=\"body-2-regular explorer-tiles__subtitle span-cols-8 span-md-cols-7 span-sm-cols-12\">\n                {subtitle}\n            </p>\n            <ul className=\"span-cols-12 grid explorer-tiles-grid\">\n                {explorers.map((explorer) => (\n                    <ExplorerTile key={explorer.url} {...explorer} />\n                ))}\n            </ul>\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport cx from \"classnames\"\n\nimport {\n    BlockSize,\n    EnrichedBlockKeyIndicator,\n    EnrichedBlockText,\n} from \"@ourworldindata/types\"\nimport { Button } from \"@ourworldindata/components\"\n\nimport Chart from \"./Chart.js\"\nimport Paragraph from \"./Paragraph.js\"\nimport { useLinkedChart, useLinkedIndicator } from \"../utils.js\"\n\nexport default function KeyIndicator({\n    d,\n    className,\n}: {\n    d: EnrichedBlockKeyIndicator\n    className?: string\n}) {\n    const { linkedChart } = useLinkedChart(d.datapageUrl)\n    const { linkedIndicator } = useLinkedIndicator(\n        linkedChart?.indicatorId ?? 0\n    )\n\n    if (!linkedChart) return null\n    if (!linkedIndicator) return null\n\n    const source = _.capitalize(d.source || linkedIndicator.attributionShort)\n\n    return (\n        <div className={cx(\"key-indicator grid grid-cols-12\", className)}>\n            <div className=\"left col-start-1 span-cols-4 span-md-cols-12\">\n                <div className=\"indicator-metadata\">\n                    <span className=\"indicator-title\">\n                        {linkedIndicator.title}\n                    </span>{\" \"}\n                    <span className=\"indicator-source\">{source}</span>\n                </div>\n                <h4 className=\"narrative-title\">{d.title}</h4>\n                <div className=\"text\">\n                    {d.text.map((textBlock: EnrichedBlockText, i: number) => (\n                        <Paragraph d={textBlock} key={i} />\n                    ))}\n                </div>\n                <Button\n                    className=\"datapage-link datapage-link-desktop\"\n                    href={linkedChart.resolvedUrl}\n                    text=\"Explore the data\"\n                    theme=\"solid-blue\"\n                />\n            </div>\n            <Chart\n                className=\"key-indicator-chart col-start-5 span-cols-8 span-md-cols-12 margin-0\"\n                d={{\n                    url: d.datapageUrl, // The URL is resolved in the component.\n                    type: \"chart\",\n                    size: BlockSize.Wide,\n                    parseErrors: [],\n                }}\n            />\n            <Button\n                className=\"datapage-link datapage-link-mobile col-start-1 span-cols-12\"\n                href={linkedChart.resolvedUrl}\n                text=\"Explore the data\"\n                theme=\"solid-blue\"\n            />\n        </div>\n    )\n}\n","import { useContext, useEffect, useRef, useState } from \"react\"\nimport * as React from \"react\"\nimport cx from \"classnames\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowRight,\n    faPlus,\n    faEarthAmericas,\n    faChartLine,\n    faTable,\n    IconDefinition,\n} from \"@fortawesome/free-solid-svg-icons\"\n\nimport {\n    EnrichedBlockKeyIndicatorCollection,\n    EnrichedBlockKeyIndicator,\n    GRAPHER_TAB_CONFIG_OPTIONS,\n} from \"@ourworldindata/types\"\nimport { Url, commafyNumber } from \"@ourworldindata/utils\"\nimport { isValidTabQueryParam } from \"@ourworldindata/grapher\"\n\nimport { useLinkedChart, useLinkedIndicator } from \"../utils.js\"\nimport KeyIndicator from \"./KeyIndicator.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport { useResizeObserver } from \"usehooks-ts\"\nimport { SEARCH_BASE_PATH } from \"../../search/searchUtils.js\"\n\n// keep in sync with $duration in KeyIndicatorCollection.scss\nconst HEIGHT_ANIMATION_DURATION_IN_SECONDS = 0.4\n\nconst tabIconMap: Record<\"chart\" | \"map\" | \"table\", IconDefinition> = {\n    chart: faChartLine,\n    map: faEarthAmericas,\n    table: faTable,\n}\n\nexport default function KeyIndicatorCollection({\n    d,\n    className,\n}: {\n    d: EnrichedBlockKeyIndicatorCollection\n    className?: string\n}) {\n    const slugs = d.blocks.map(\n        (b: EnrichedBlockKeyIndicator) => Url.fromURL(b.datapageUrl).slug ?? \"\"\n    )\n\n    const [isBlockOpen, setBlockOpen] = useState<boolean[]>(\n        slugs.map((_: string, index: number) => index === 0) // the first block is open by default\n    )\n\n    const { homepageMetadata } = useContext(AttachmentsContext)\n\n    const { blocks } = d\n    return (\n        <section className={cx(\"key-indicator-collection\", className)}>\n            <header className=\"key-indicator-collection__header span-cols-8 span-sm-cols-12\">\n                <h2 className=\"h2-bold\">Explore our data</h2>\n                {homepageMetadata?.chartCount ? (\n                    <p className=\"body-2-regular\">\n                        Featured data from our collection of{\" \"}\n                        {commafyNumber(homepageMetadata.chartCount)} interactive\n                        charts.\n                    </p>\n                ) : (\n                    <p className=\"body-2-regular\">\n                        Featured data from our collection\n                    </p>\n                )}\n            </header>\n            <Button\n                href={SEARCH_BASE_PATH}\n                className=\"key-indicator-collection__all-charts-button body-3-medium span-cols-4 col-start-9 col-sm-start-1 span-sm-cols-12\"\n                text=\"See all our data\"\n                theme=\"outline-vermillion\"\n            />\n            <div className=\"span-cols-12\">\n                {blocks.map(\n                    (block: EnrichedBlockKeyIndicator, blockIndex: number) => {\n                        const slug = slugs[blockIndex]\n                        const isOpen = isBlockOpen[blockIndex]\n\n                        return (\n                            <AccordionItem\n                                // assumes a key indicator doesn't appear twice on a page\n                                id={`key-indicator-collection_${slug}`}\n                                key={slug}\n                                isOpen={isOpen}\n                                open={() => {\n                                    // open block, close all others\n                                    const updated = slugs.map(() => false)\n                                    updated[blockIndex] = true\n                                    setBlockOpen(updated)\n                                }}\n                                close={() => {\n                                    // close block, leave others as they are\n                                    const updated = [...isBlockOpen]\n                                    updated[blockIndex] = false\n                                    setBlockOpen(updated)\n                                }}\n                                header={\n                                    <KeyIndicatorHeader\n                                        block={block}\n                                        isContentVisible={isOpen}\n                                    />\n                                }\n                                mobileHeader={\n                                    <KeyIndicatorLink block={block}>\n                                        <KeyIndicatorHeader\n                                            block={block}\n                                            isContentVisible={isOpen}\n                                        />\n                                    </KeyIndicatorLink>\n                                }\n                            >\n                                <KeyIndicator d={block} />\n                            </AccordionItem>\n                        )\n                    }\n                )}\n            </div>\n        </section>\n    )\n}\n\nfunction AccordionItem({\n    id,\n    isOpen,\n    open,\n    close,\n    header,\n    mobileHeader,\n    children,\n}: {\n    id: string\n    isOpen: boolean\n    open: () => void\n    close: () => void\n    header: React.ReactNode\n    mobileHeader: React.ReactNode\n    children: React.ReactNode\n}) {\n    const ref = useRef<HTMLDivElement>(null)\n    const { ref: contentRef, height } = useHeight()\n\n    const headerId = `${id}_header`\n    const contentId = `${id}_content`\n\n    // remove content from the tab sequence if it's not visible\n    useEffect(() => {\n        if (!contentRef.current) return\n        contentRef.current.inert = !isOpen\n    }, [isOpen, contentRef])\n\n    const contentHeight = isOpen ? height : 0\n\n    return (\n        <div\n            ref={ref}\n            className={cx(\"accordion-item\", {\n                \"accordion-item--open\": isOpen,\n                \"accordion-item--closed\": !isOpen,\n            })}\n        >\n            {/* desktop */}\n            <h3 className=\"accordion-item__heading\">\n                <button\n                    id={headerId}\n                    className=\"accordion-item__button\"\n                    onClick={() => {\n                        if (isOpen) {\n                            close()\n                        } else {\n                            open()\n\n                            // scroll accordion item into view if it's not visible after opening\n                            setTimeout(() => {\n                                if (!ref.current) return\n                                if (\n                                    !isElementFullyVisible(ref.current) &&\n                                    !isElementAtTopOfViewport(ref.current)\n                                ) {\n                                    ref.current.scrollIntoView({\n                                        behavior: \"smooth\",\n                                    })\n                                }\n\n                                // focus on content after the scroll-into-view\n                                // animation has finished (fixes a bug in Safari\n                                // where focus is lost after an accordion item\n                                // is opened and the focus unexpectedly jumps\n                                // to the top of the page on further interactions)\n                                setTimeout(() => {\n                                    if (contentRef.current) {\n                                        contentRef.current.focus()\n                                    }\n                                }, 600)\n                            }, HEIGHT_ANIMATION_DURATION_IN_SECONDS * 1000)\n                        }\n                    }}\n                    disabled={isOpen}\n                    aria-disabled={isOpen}\n                    aria-expanded={isOpen}\n                    aria-controls={contentId}\n                >\n                    {header}\n                </button>\n            </h3>\n            {/* mobile */}\n            {!isOpen && mobileHeader}\n            <div\n                id={contentId}\n                className=\"accordion-item__content\"\n                style={{\n                    height: contentHeight,\n                }}\n                role=\"region\"\n                aria-labelledby={headerId}\n            >\n                <div\n                    ref={contentRef}\n                    tabIndex={isOpen ? 0 : -1}\n                    aria-hidden={!isOpen}\n                >\n                    {children}\n                </div>\n            </div>\n        </div>\n    )\n}\n\nfunction KeyIndicatorHeader({\n    block,\n    isContentVisible,\n}: {\n    block: EnrichedBlockKeyIndicator\n    isContentVisible?: boolean\n}) {\n    const { linkedChart } = useLinkedChart(block.datapageUrl)\n    const { linkedIndicator } = useLinkedIndicator(\n        linkedChart?.indicatorId ?? 0\n    )\n\n    if (!linkedChart) return null\n    if (!linkedIndicator) return null\n\n    const { queryParams } = Url.fromURL(linkedChart.resolvedUrl)\n    const tabFromQueryParams =\n        queryParams.tab && isValidTabQueryParam(queryParams.tab)\n            ? queryParams.tab\n            : undefined\n    const activeTab =\n        tabFromQueryParams ||\n        linkedChart.tab ||\n        GRAPHER_TAB_CONFIG_OPTIONS.chart\n    const activeTabType =\n        activeTab === \"table\" || activeTab === \"map\" ? activeTab : \"chart\"\n\n    const source = block.source || linkedIndicator.attributionShort\n\n    return (\n        <div className=\"key-indicator-header\">\n            <div className=\"key-indicator-header__left\">\n                <FontAwesomeIcon\n                    icon={tabIconMap[activeTabType]}\n                    className=\"key-indicator-header__tab-icon\"\n                />\n                <div>\n                    <span className=\"key-indicator-header__title\">\n                        {linkedIndicator.title}\n                    </span>\n                    {source && (\n                        <>\n                            {\" \"}\n                            <span className=\"key-indicator-header__source\">\n                                {source}\n                            </span>\n                        </>\n                    )}\n                </div>\n            </div>\n            {!isContentVisible && (\n                <div>\n                    {/* desktop */}\n                    <FontAwesomeIcon\n                        icon={faPlus}\n                        className=\"key-indicator-header__icon\"\n                    />\n                    {/* mobile */}\n                    <FontAwesomeIcon\n                        icon={faArrowRight}\n                        className=\"key-indicator-header__icon\"\n                    />\n                </div>\n            )}\n        </div>\n    )\n}\n\nfunction KeyIndicatorLink({\n    block,\n    children,\n}: {\n    block: EnrichedBlockKeyIndicator\n    children: React.ReactNode\n}) {\n    const { linkedChart } = useLinkedChart(block.datapageUrl)\n    const { linkedIndicator } = useLinkedIndicator(\n        linkedChart?.indicatorId ?? 0\n    )\n\n    if (!linkedChart) return null\n    if (!linkedIndicator) return null\n\n    return (\n        <a\n            className=\"accordion-item__link-mobile\"\n            href={linkedChart.resolvedUrl}\n        >\n            {children}\n        </a>\n    )\n}\n\nconst useHeight = () => {\n    const ref = useRef<HTMLDivElement>(null)\n    const { height } = useResizeObserver({\n        ref: ref as React.RefObject<HTMLDivElement>,\n    })\n\n    return { ref, height }\n}\n\nfunction isElementFullyVisible(element: HTMLElement): boolean {\n    const bbox = element.getBoundingClientRect()\n    const viewHeight = Math.max(\n        document.documentElement.clientHeight,\n        window.innerHeight\n    )\n    return bbox.top >= 0 && bbox.bottom <= viewHeight\n}\n\nfunction isElementAtTopOfViewport(element: HTMLElement): boolean {\n    const bbox = element.getBoundingClientRect()\n    const viewHeight = Math.max(\n        document.documentElement.clientHeight,\n        window.innerHeight\n    )\n    return bbox.top >= 0 && bbox.top < 0.33 * viewHeight\n}\n","import { EnrichedBlockPillRow } from \"@ourworldindata/types\"\nimport { useLinkedDocument } from \"../utils.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\n\nfunction Pill(props: { text?: string; url: string }) {\n    const { linkedDocument, errorMessage } = useLinkedDocument(props.url)\n    const { isPreviewing } = useDocumentContext()\n    const url = linkedDocument?.url ?? props.url\n    const text = props.text ?? linkedDocument?.title\n\n    if (isPreviewing) {\n        if (errorMessage || !text || !url) {\n            return (\n                <li className=\"article-block__pill article-block__pill--error\">\n                    {errorMessage}\n                </li>\n            )\n        }\n    }\n\n    if (!text || !url) return null\n\n    return (\n        <li className=\"article-block__pill\">\n            <a className=\"body-3-medium\" href={url}>\n                {text}\n            </a>\n        </li>\n    )\n}\n\nexport function PillRow(props: EnrichedBlockPillRow & { className?: string }) {\n    return (\n        <div className={props.className}>\n            <div className=\"article-block__pill-row-interior span-cols-12 col-start-2\">\n                <p className=\"h5-black-caps\">{props.title}</p>\n                <ul>\n                    {props.pills.map((pill, i) => (\n                        <Pill key={i} {...pill} />\n                    ))}\n                </ul>\n            </div>\n        </div>\n    )\n}\n","export function NewsletterIcon({ className }: { className?: string }) {\n    return (\n        <svg\n            className={className}\n            width=\"48\"\n            height=\"48\"\n            viewBox=\"0 0 48 48\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n        >\n            <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#DBE5F0\" />\n            <rect\n                x=\"11.2676\"\n                y=\"19.3955\"\n                width=\"25.4664\"\n                height=\"17.3389\"\n                rx=\"2.70925\"\n                fill=\"white\"\n            />\n            <rect\n                x=\"15.0605\"\n                y=\"11.8096\"\n                width=\"17.8807\"\n                height=\"13.0041\"\n                fill=\"white\"\n            />\n            <path\n                d=\"M11.268 21.107C11.2238 21.2788 11.2002 21.4564 11.2002 21.6383V34.1352C11.2002 34.6771 11.364 35.1768 11.6391 35.5977L20.1865 28.5774L11.2685 21.107H11.268Z\"\n                fill=\"#355174\"\n            />\n            <path\n                d=\"M36.731 21.1088L27.8145 28.5774L36.3612 35.5972C36.6386 35.1758 36.8002 34.675 36.8002 34.1352V21.6383C36.8002 21.4575 36.7756 21.2798 36.7303 21.1087L36.731 21.1088Z\"\n                fill=\"#355174\"\n            />\n            <path\n                d=\"M15.467 12.8C15.467 12.5061 15.7059 12.2667 16.0004 12.2667H32.0016C32.296 12.2667 32.5349 12.5061 32.5349 12.8V23.2089L36.2026 20.1367C36.098 20.0268 35.9881 19.9207 35.8618 19.8316L33.6018 18.0528V12.8001C33.6018 11.9179 32.8839 11.2 32.0017 11.2H16.0005C15.1183 11.2 14.4004 11.9179 14.4004 12.8001V18.0528L12.1656 19.8129C12.0301 19.9078 11.9122 20.0204 11.8008 20.1377L15.4673 23.2088L15.467 12.8Z\"\n                fill=\"#355174\"\n            />\n            <path\n                d=\"M22.9858 27.6593L12.3945 36.358C12.8186 36.638 13.3247 36.8022 13.8678 36.8022H34.1359C34.6805 36.8022 35.1855 36.6358 35.6069 36.3563L25.018 27.6591C24.4292 27.1752 23.5747 27.1752 22.9864 27.6591L22.9858 27.6593Z\"\n                fill=\"#355174\"\n            />\n            <path\n                d=\"M20.0727 15.9336C20.3605 15.9336 20.6145 16.1876 20.6145 16.4754V22.1643C20.6145 22.3167 20.733 22.4352 20.8853 22.4352H27.6578C27.9456 22.4352 28.1996 22.6892 28.1996 22.977C28.1996 23.2818 27.9456 23.5188 27.6578 23.5188H20.8853C20.1234 23.5188 19.5309 22.9262 19.5309 22.1643V16.4754C19.5309 16.1876 19.7679 15.9336 20.0727 15.9336ZM22.2398 19.1844C22.5277 19.1844 22.7816 19.4384 22.7816 19.7262V20.8098C22.7816 21.1146 22.5277 21.3516 22.2398 21.3516C21.9351 21.3516 21.698 21.1146 21.698 20.8098V19.7262C21.698 19.4384 21.9351 19.1844 22.2398 19.1844ZM24.407 18.1008V20.8098C24.407 21.1146 24.1531 21.3516 23.8652 21.3516C23.5605 21.3516 23.3234 21.1146 23.3234 20.8098V18.1008C23.3234 17.813 23.5605 17.559 23.8652 17.559C24.1531 17.559 24.407 17.813 24.407 18.1008ZM25.4906 18.6426C25.7784 18.6426 26.0324 18.8966 26.0324 19.1844V20.8098C26.0324 21.1146 25.7784 21.3516 25.4906 21.3516C25.1859 21.3516 24.9488 21.1146 24.9488 20.8098V19.1844C24.9488 18.8966 25.1859 18.6426 25.4906 18.6426ZM27.6578 17.0172V20.8098C27.6578 21.1146 27.4038 21.3516 27.116 21.3516C26.8112 21.3516 26.5742 21.1146 26.5742 20.8098V17.0172C26.5742 16.7294 26.8112 16.4754 27.116 16.4754C27.4038 16.4754 27.6578 16.7294 27.6578 17.0172Z\"\n                fill=\"#98A9BD\"\n            />\n        </svg>\n    )\n}\n","import { useState } from \"react\"\nimport * as React from \"react\"\nimport cx from \"classnames\"\nimport { faTimes, faEnvelopeOpenText } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\nimport { TextInput } from \"@ourworldindata/components\"\nimport { NewsletterSubscriptionContext } from \"./newsletter.js\"\nimport { NewsletterIcon } from \"./gdocs/components/NewsletterIcon.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport const NewsletterSubscription = ({\n    context,\n}: {\n    context:\n        | NewsletterSubscriptionContext.Homepage\n        | NewsletterSubscriptionContext.Floating\n}) => {\n    const [isOpen, setIsOpen] = useState(false)\n\n    const subscribeText = \"Subscribe\"\n\n    return (\n        <div className={`newsletter-subscription${isOpen ? \" active\" : \"\"}`}>\n            {isOpen && (\n                <>\n                    <div\n                        className=\"overlay\"\n                        onClick={() => {\n                            setIsOpen(false)\n                        }}\n                    />\n                    <div className=\"box\">\n                        <NewsletterSubscriptionHeader />\n                        <NewsletterSubscriptionForm context={context} />\n                    </div>\n                </>\n            )}\n            {isOpen ? (\n                <button\n                    aria-label=\"Close subscription form\"\n                    className=\"prompt\"\n                    onClick={() => setIsOpen(false)}\n                >\n                    <FontAwesomeIcon icon={faTimes} /> Close\n                </button>\n            ) : (\n                <button\n                    aria-label={subscribeText}\n                    className=\"prompt\"\n                    data-track-note=\"dialog_open_newsletter\"\n                    onClick={() => {\n                        setIsOpen(!isOpen)\n                    }}\n                >\n                    <FontAwesomeIcon icon={faEnvelopeOpenText} />\n                    {subscribeText}\n                </button>\n            )}\n        </div>\n    )\n}\n\nexport const NewsletterSubscriptionHeader = ({\n    showSubheading = false,\n}: {\n    showSubheading?: boolean\n}) => {\n    return (\n        <div className=\"newsletter-subscription-header\">\n            <NewsletterIcon className=\"newsletter-subscription-header__icon\" />\n            <h4 className=\"newsletter-subscription-header__heading h3-bold\">\n                Subscribe to our newsletters\n            </h4>\n            {showSubheading && (\n                <span className=\"newsletter-subscription-header__subheading\">\n                    Receive our latest work by email\n                </span>\n            )}\n        </div>\n    )\n}\n\nexport const NewsletterSubscriptionForm = ({\n    context,\n    className = \"\",\n}: {\n    context: NewsletterSubscriptionContext\n    className?: string\n}) => {\n    const DATA_INSIGHTS = \"16\"\n    const BIWEEKLY = \"2\"\n    const idDataInsights = `mce-group[85302]-85302-0${\n        context ? \"-\" + context : \"\"\n    }`\n    const idBiweekly = `mce-group[85302]-85302-1${context ? \"-\" + context : \"\"}`\n\n    const [frequencies, setFrequencies] = useState([DATA_INSIGHTS, BIWEEKLY])\n    const isSubmittable = frequencies.length !== 0\n\n    const updateFrequencies = (e: React.ChangeEvent<HTMLInputElement>) => {\n        if (e.target.checked) {\n            setFrequencies([e.target.value, ...frequencies])\n        } else {\n            setFrequencies(\n                frequencies.filter((frequency) => frequency !== e.target.value)\n            )\n        }\n    }\n\n    return (\n        <form\n            className={cx(\"newsletter-subscription-form\", className)}\n            action=\"https://ourworldindata.us8.list-manage.com/subscribe/post?u=18058af086319ba6afad752ec&id=2e166c1fc1\"\n            method=\"post\"\n            id=\"mc-embedded-subscribe-banner\"\n            name=\"mc-embedded-subscribe-banner\"\n            onSubmit={() =>\n                analytics.logSiteFormSubmit(\n                    \"newsletter-subscribe\",\n                    `Subscribe [${context ?? \"other-contexts\"}]`\n                )\n            }\n        >\n            <img\n                alt=\"\"\n                className=\"newsletter-subscription-form__checkbox-image\"\n                src=\"/images/biweekly-newsletter.webp\"\n                width={1200}\n                height={630}\n            />\n            <div className=\"newsletter-subscription-form__checkbox\">\n                <input\n                    type=\"checkbox\"\n                    value={BIWEEKLY}\n                    name={`group[85302][${BIWEEKLY}]`}\n                    id={idBiweekly}\n                    checked={frequencies.includes(BIWEEKLY)}\n                    onChange={updateFrequencies}\n                />\n                <label htmlFor={idBiweekly}>\n                    <span className=\"newsletter-subscription-form__label-title\">\n                        The OWID Brief\n                    </span>{\" \"}\n                    <span className=\"newsletter-subscription-form__label-frequency note-12-medium\">\n                        Twice a month\n                    </span>\n                    <div className=\"newsletter-subscription-form__label-text\">\n                        Stay up to date with our latest work plus curated\n                        highlights from across Our World in Data, twice a month.\n                    </div>\n                </label>\n                <a\n                    className=\"newsletter-subscription-form__example-link note-12-medium\"\n                    href=\"https://mailchi.mp/ourworldindata/owid-brief-2025-11-14\"\n                >\n                    See example OWID Brief newsletter\n                </a>\n            </div>\n            <img\n                alt=\"\"\n                className=\"newsletter-subscription-form__checkbox-image\"\n                src=\"/images/data-insights.webp\"\n                width={1200}\n                height={630}\n            />\n            <div className=\"newsletter-subscription-form__checkbox\">\n                <input\n                    type=\"checkbox\"\n                    value={DATA_INSIGHTS}\n                    name={`group[85302][${DATA_INSIGHTS}]`}\n                    id={idDataInsights}\n                    checked={frequencies.includes(DATA_INSIGHTS)}\n                    onChange={updateFrequencies}\n                />\n                <label htmlFor={idDataInsights}>\n                    <span className=\"newsletter-subscription-form__label-title\">\n                        Data Insights\n                    </span>{\" \"}\n                    <span className=\"newsletter-subscription-form__label-frequency note-12-medium\">\n                        Every few days\n                    </span>\n                    <div className=\"newsletter-subscription-form__label-text\">\n                        Receive our bite-sized insights on how the world is\n                        changing, every few days.\n                    </div>\n                </label>\n                <a\n                    className=\"newsletter-subscription-form__example-link note-12-medium\"\n                    href=\"https://us8.campaign-archive.com/?u=18058af086319ba6afad752ec&id=fdf16136e1\"\n                >\n                    See example Data Insights newsletter\n                </a>\n            </div>\n            {frequencies.length === 0 && (\n                <div className=\"newsletter-subscription-form__alert\">\n                    Please select at least one option.\n                </div>\n            )}\n            <div className=\"newsletter-subscription-form__email-submit\">\n                <TextInput\n                    placeholder=\"Your email address\"\n                    type=\"email\"\n                    className=\"newsletter-subscription-form__email sentry-mask\"\n                    name=\"EMAIL\"\n                    required={true}\n                />\n                <button\n                    aria-label=\"Subscribe to newsletter\"\n                    disabled={!isSubmittable}\n                    onClick={() =>\n                        analytics.logSiteClick(\n                            \"newsletter-subscribe\",\n                            `Subscribe [${context ?? \"other-contexts\"}]`\n                        )\n                    }\n                    className=\"newsletter-subscription-form__submit\"\n                >\n                    Subscribe\n                </button>\n            </div>\n            {/* This hidden field should not be the last element in the form as long as we use the row-gap mixin\n            to space elements vertically. When placed as the last element of the form, this hidden element becomes\n            the target of the :last-child selector of the row-gap mixin, when it should be applied to the last visible\n            element instead */}\n            <input\n                type=\"hidden\"\n                name=\"b_18058af086319ba6afad752ec_2e166c1fc1\"\n                tabIndex={-1}\n            />\n            <div className=\"newsletter-subscription-form__privacy-notice\">\n                By subscribing you are agreeing to the terms of our{\" \"}\n                <a href=\"/privacy-policy\">privacy policy</a>.\n            </div>\n        </form>\n    )\n}\n","export function AnnouncementsIcon() {\n    return (\n        <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 56 56\">\n            <circle cx=\"28.0015\" cy=\"28.0015\" r=\"28.0015\" fill=\"#DBE5F0\" />\n            <mask\n                id=\"a\"\n                width=\"57\"\n                height=\"57\"\n                x=\"0\"\n                y=\"0\"\n                maskUnits=\"userSpaceOnUse\"\n            >\n                <circle cx=\"28.0015\" cy=\"28.0015\" r=\"28.0015\" fill=\"#DBE5F0\" />\n            </mask>\n            <g mask=\"url(#a)\">\n                <rect\n                    width=\"37\"\n                    height=\"55\"\n                    x=\"9.5\"\n                    y=\"16.5\"\n                    fill=\"#fff\"\n                    stroke=\"#CEDEF0\"\n                    rx=\"2.5\"\n                />\n                <circle cx=\"14.5\" cy=\"23.5\" r=\"2.5\" fill=\"#355174\" />\n                <circle cx=\"14.5\" cy=\"47.5\" r=\"2.5\" fill=\"#355174\" />\n                <rect\n                    width=\"21\"\n                    height=\"5\"\n                    x=\"21\"\n                    y=\"21\"\n                    fill=\"#98A9BD\"\n                    rx=\"1\"\n                />\n                <rect\n                    width=\"21\"\n                    height=\"5\"\n                    x=\"21\"\n                    y=\"45\"\n                    fill=\"#98A9BD\"\n                    rx=\"1\"\n                />\n                <rect\n                    width=\"21\"\n                    height=\"14\"\n                    x=\"21\"\n                    y=\"28\"\n                    fill=\"#C3D7EE\"\n                    rx=\"1\"\n                />\n                <rect\n                    width=\"21\"\n                    height=\"14\"\n                    x=\"21\"\n                    y=\"52\"\n                    fill=\"#C3D7EE\"\n                    rx=\"1\"\n                />\n            </g>\n        </svg>\n    )\n}\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { RSS_FEEDS, SOCIALS } from \"./SiteConstants.js\"\nimport { NewsletterSubscriptionContext } from \"./newsletter.js\"\n\nexport const OwidSocials = ({\n    includeRss = false,\n    context,\n}: {\n    includeRss?: boolean\n    context: NewsletterSubscriptionContext\n}) => {\n    const items = includeRss ? [...SOCIALS, ...RSS_FEEDS] : SOCIALS\n    return (\n        <div className=\"owid-socials\">\n            <p className=\"owid-socials__heading\">Follow us</p>\n            <ul className=\"owid-socials__list\">\n                {items.map(({ title, url, icon }) => (\n                    <li className=\"owid-socials__item\" key={title}>\n                        <a\n                            className=\"owid-socials__link\"\n                            href={url}\n                            title={title}\n                            data-track-note={context}\n                        >\n                            <FontAwesomeIcon\n                                className=\"owid-socials__label-icon\"\n                                icon={icon}\n                            />\n                            <span className=\"owid-socials__label\">{title}</span>\n                        </a>\n                    </li>\n                ))}\n            </ul>\n        </div>\n    )\n}\n","export enum NewsletterSubscriptionContext {\n    Homepage = \"homepage\",\n    Floating = \"floating\",\n    HomepageDataInsights = \"homepageDataInsights\",\n    FloatingDataInsights = \"floatingDataInsights\",\n    Latest = \"latest\",\n    SubscribePage = \"subscribePage\",\n    DataInsightsIndex = \"dataInsightsIndex\",\n}\n","import { RefObject, useContext, useRef, useState } from \"react\"\nimport cx from \"classnames\"\nimport {\n    EnrichedBlockHomepageIntro,\n    EnrichedBlockHomepageIntroPost,\n    OwidGdocMinimalPostInterface,\n} from \"@ourworldindata/types\"\nimport { dayjs, formatAuthors } from \"@ourworldindata/utils\"\nimport { useLinkedChart, useLinkedDocument } from \"../utils.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport Image, { ImageParentContainer } from \"./Image.js\"\nimport { BlockErrorFallback } from \"./BlockErrorBoundary.js\"\nimport * as R from \"remeda\"\nimport {\n    NewsletterSubscriptionForm,\n    NewsletterSubscriptionHeader,\n} from \"../../NewsletterSubscription.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport { AnnouncementsIcon } from \"./AnnouncementsIcon.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight, faHeart } from \"@fortawesome/free-solid-svg-icons\"\nimport { useResizeObserver } from \"usehooks-ts\"\nimport { OwidSocials } from \"../../OwidSocials.js\"\nimport { NewsletterSubscriptionContext } from \"../../newsletter.js\"\n\ntype FeaturedWorkTileProps = EnrichedBlockHomepageIntroPost & {\n    className?: string\n    id: string\n    thumbnailSize?: ImageParentContainer\n}\n\nfunction FeaturedWorkTile({\n    title,\n    kicker,\n    authors,\n    description,\n    url,\n    filename,\n    className = \"\",\n    thumbnailSize = \"thumbnail\",\n    isNew,\n    id,\n}: FeaturedWorkTileProps) {\n    const { linkedDocument, errorMessage } = useLinkedDocument(url)\n    const { isPreviewing } = useDocumentContext()\n    const linkedDocumentFeaturedImage = linkedDocument?.[\"featured-image\"]\n    const thumbnailFilename = filename ?? linkedDocumentFeaturedImage\n    const href = linkedDocument?.url ?? url\n\n    if (isPreviewing) {\n        if (errorMessage) {\n            return (\n                <BlockErrorFallback\n                    error={{\n                        name: \"Error with featured work\",\n                        message: `${errorMessage} This block won't render when the page is published`,\n                    }}\n                />\n            )\n        }\n    }\n\n    title ||= linkedDocument?.title\n    authors ||= linkedDocument?.authors\n    description ||= linkedDocument?.excerpt\n\n    return (\n        <a\n            href={href}\n            aria-labelledby={id}\n            className={cx(\"homepage-intro__featured-tile\", className, {\n                \"homepage-intro__featured-tile--missing-image\":\n                    !thumbnailFilename,\n            })}\n        >\n            {thumbnailFilename && (\n                <Image\n                    shouldLightbox={false}\n                    filename={thumbnailFilename}\n                    containerType={thumbnailSize}\n                />\n            )}\n            {kicker && (\n                <span className=\"h6-black-caps homepage-intro__featured-work-kicker\">\n                    {isNew && (\n                        <>\n                            <span className=\"homepage-intro__new-tag\">\n                                New\n                            </span>{\" \"}\n                        </>\n                    )}\n                    {kicker}\n                </span>\n            )}\n            {title && (\n                <h3\n                    id={id}\n                    className=\"homepage-intro__featured-work-title h3-bold\"\n                >\n                    {title}\n                </h3>\n            )}\n            {description && (\n                <p className=\"homepage-intro__featured-work-description body-3-medium\">\n                    {description}\n                </p>\n            )}\n            {authors && (\n                <p className=\"homepage-intro__featured-work-authors body-3-medium-italic\">\n                    {formatAuthors(authors)}\n                </p>\n            )}\n        </a>\n    )\n}\n\nfunction useIsOverflowing<T extends HTMLElement = HTMLElement>(\n    ref: RefObject<T>\n): boolean {\n    const [isOverflowing, setIsOverflowing] = useState(false)\n\n    useResizeObserver({\n        ref,\n        onResize: () => {\n            const element = ref.current\n            if (!element) return\n\n            const overflowing =\n                element.scrollWidth > element.clientWidth ||\n                element.scrollHeight > element.clientHeight\n\n            setIsOverflowing(overflowing)\n        },\n    })\n\n    return isOverflowing\n}\n\nfunction HomepageAnnouncement(props: {\n    announcement: OwidGdocMinimalPostInterface\n    index: number\n}) {\n    const { announcement, index } = props\n    const { linkedChart } = useLinkedChart(announcement.cta?.url || \"\")\n    const { linkedDocument } = useLinkedDocument(announcement.cta?.url || \"\")\n    // If there's not enough space to show all of the third announcement, we link to the latest page, no matter what\n    // If there is enough space, it behaves as normal:\n    // - cta: link directly to the resource\n    // - no cta: link to the latest page\n    const announcementRef = useRef<HTMLLIElement>(null)\n    const isOverflowing = useIsOverflowing(\n        announcementRef as RefObject<HTMLElement>\n    )\n    const latestPageLink = `/latest#${announcement.slug}`\n    const href = isOverflowing\n        ? latestPageLink\n        : linkedChart?.resolvedUrl ||\n          linkedDocument?.url ||\n          announcement.cta?.url ||\n          latestPageLink\n\n    const publishedAtDayJs = dayjs(announcement.publishedAt)\n    const publishedAtFormatted = publishedAtDayJs.isToday()\n        ? \"Today\"\n        : publishedAtDayJs.isYesterday()\n          ? \"Yesterday\"\n          : publishedAtDayJs.isSame(dayjs(), \"week\")\n            ? \"This Week\"\n            : publishedAtDayJs.fromNow()\n\n    return (\n        <li\n            className={cx(\"homepage-intro__announcement\", {\n                \"homepage-intro__announcement--is-overflowing\": isOverflowing,\n            })}\n            ref={announcementRef}\n        >\n            <a\n                className=\"homepage-intro__announcement-link\"\n                aria-labelledby={`announcement-${announcement.id}`}\n                tabIndex={index === 2 ? -1 : undefined}\n                href={href}\n            >\n                <span className=\"homepage-intro__announcement-meta h6-black-caps\">\n                    {announcement.kicker} - {publishedAtFormatted}\n                </span>\n                <h3\n                    id={`announcement-${announcement.id}`}\n                    className=\"homepage-intro__announcement-title body-2-bold-tight\"\n                >\n                    {announcement.title}\n                </h3>\n                <p className=\"homepage-intro__excerpt body-3-medium\">\n                    {announcement.excerpt}\n                </p>\n                <span className=\"homepage-intro__announcement-read-more body-3-medium\">\n                    {announcement.cta ? announcement.cta.text : \"Read more\"}{\" \"}\n                    <FontAwesomeIcon icon={faArrowRight} />\n                </span>\n            </a>\n        </li>\n    )\n}\n\nfunction HomepageAnnouncements() {\n    const { homepageMetadata = {} } = useContext(AttachmentsContext)\n    const announcements = R.prop(homepageMetadata, \"announcements\")\n    if (!announcements || announcements.length === 0) return null\n    return (\n        <div className=\"homepage-intro__announcements span-cols-1 span-md-cols-2\">\n            <div className=\"homepage-intro__announcements-header\">\n                <AnnouncementsIcon />\n                <h4 className=\"h3-bold\">Updates and Announcements</h4>\n            </div>\n            <ul className=\"homepage-intro__announcements-list\">\n                {announcements.map((announcement, i) => (\n                    <HomepageAnnouncement\n                        announcement={announcement}\n                        key={announcement.id}\n                        index={i}\n                    />\n                ))}\n            </ul>\n            <Button\n                className=\"homepage-intro__latest-button\"\n                href=\"/latest\"\n                text=\"See all updates\"\n                theme=\"outline-vermillion\"\n            />\n            <Button\n                className=\"homepage-intro__subscribe-button\"\n                href=\"/subscribe\"\n                text=\"Subscribe to our newsletters\"\n                theme=\"solid-vermillion\"\n            />\n        </div>\n    )\n}\n\nfunction DonationCta() {\n    return (\n        <div className=\"homepage-intro__donation-cta\">\n            <FontAwesomeIcon icon={faHeart} />\n            <div>\n                <p className=\"homepage-intro__donation-message note-12-medium\">\n                    We are a non-profit — all our work is free to use and open\n                    source.\n                </p>\n                <a\n                    href=\"/donate\"\n                    className=\"homepage-intro__donation-link body-3-bold\"\n                >\n                    Donate to support us\n                </a>\n            </div>\n        </div>\n    )\n}\n\nexport type HomepageIntroProps = {\n    className?: string\n} & EnrichedBlockHomepageIntro\n\nexport function HomepageIntro({ className, featuredWork }: HomepageIntroProps) {\n    const tiles = featuredWork.slice(0, 4)\n    if (tiles.length < 4) {\n        return null\n    }\n    const [w1, w2, w3, w4] = tiles as [\n        EnrichedBlockHomepageIntroPost,\n        EnrichedBlockHomepageIntroPost,\n        EnrichedBlockHomepageIntroPost,\n        EnrichedBlockHomepageIntroPost,\n    ]\n\n    return (\n        <section className={cx(\"homepage-intro\", className)}>\n            <div className=\"homepage-intro__featured-work grid grid-cols-2 span-cols-6 col-start-2 span-md-cols-14\">\n                <div className=\"homepage-intro__featured-work-column homepage-intro__featured-work-column__desktop\">\n                    <FeaturedWorkTile id={\"fw1\"} {...w1} />\n                    <FeaturedWorkTile id={\"fw3\"} {...w3} />\n                </div>\n                <div className=\"homepage-intro__featured-work-column homepage-intro__featured-work-column__desktop\">\n                    <FeaturedWorkTile id={\"fw2\"} {...w2} />\n                    <FeaturedWorkTile id={\"fw4\"} {...w4} />\n                </div>\n                <div className=\"homepage-intro__featured-work-column homepage-intro__featured-work-column__mobile\">\n                    {[w1, w2, w3, w4].map((tile, index) => (\n                        <FeaturedWorkTile\n                            key={index}\n                            id={`fw${index + 1}`}\n                            {...tile}\n                        />\n                    ))}\n                </div>\n            </div>\n            <div className=\"grid grid-cols-2 span-cols-6 span-md-cols-14 col-md-start-1\">\n                <HomepageAnnouncements />\n                <div className=\"span-cols-1 span-md-cols-2\">\n                    <div className=\"homepage-intro__newsletter-signup\">\n                        <NewsletterSubscriptionHeader showSubheading />\n                        <NewsletterSubscriptionForm\n                            context={NewsletterSubscriptionContext.Homepage}\n                        />\n                        <OwidSocials\n                            context={NewsletterSubscriptionContext.Homepage}\n                        />\n                    </div>\n                    <DonationCta />\n                </div>\n            </div>\n        </section>\n    )\n}\n","import { createContext, useContext } from \"react\"\nimport {\n    SearchState,\n    SynonymMap,\n    TemplateConfig,\n    TagGraphRoot,\n    SearchActions,\n} from \"@ourworldindata/types\"\nimport { LiteClient } from \"algoliasearch/lite\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\n\ninterface SearchContextType {\n    state: SearchState\n    actions: SearchActions\n    liteSearchClient: LiteClient\n    templateConfig: TemplateConfig\n    topicTagGraph: TagGraphRoot\n    synonymMap: SynonymMap\n    analytics: SiteAnalytics\n}\n\nexport const SearchContext = createContext<SearchContextType | null>(null)\n\nexport const useSearchContext = () => {\n    const context = useContext(SearchContext)\n    if (!context) {\n        throw new Error(\n            \"useSearchContext must be used within a SearchContext.Provider\"\n        )\n    }\n    return context\n}\n","import { FilterType, SearchState } from \"@ourworldindata/types\"\nimport {\n    getFilterNamesOfType,\n    getSelectedTopic,\n    getPaginationOffsetAndLength,\n    getNbPaginatedItemsRequested,\n} from \"./searchUtils.js\"\nimport { DEFAULT_SEARCH_STATE } from \"./searchState.js\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport { flattenNonTopicNodes } from \"@ourworldindata/utils\"\nimport { useInfiniteQuery } from \"@tanstack/react-query\"\nimport { LiteClient } from \"algoliasearch/lite\"\nimport type { SearchResponse } from \"instantsearch.js\"\nimport { useState, useEffect, useMemo, useRef } from \"react\"\nimport type { TagGraphNode, TagGraphRoot } from \"@ourworldindata/types\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\nimport * as R from \"remeda\"\n\nexport const useSelectedTopic = (): string | undefined => {\n    const { state } = useSearchContext()\n    return getSelectedTopic(state.filters)\n}\n\nexport const useSelectedRegionNames = (): string[] => {\n    const { state } = useSearchContext()\n    return Array.from(getFilterNamesOfType(state.filters, FilterType.COUNTRY))\n}\n\n/**\n * Extracts and memoizes area names and all searchable tags from the topic tag graph.\n * Searchable tags include both topics (tags with a topic page) and tags with searchableInAlgolia set.\n */\nexport function useTagGraphTopics(topicTagGraph: TagGraphRoot | null): {\n    allAreas: string[]\n    allTopics: string[]\n} {\n    const allAreas = useMemo(\n        () => topicTagGraph?.children.map((child) => child.name) || [],\n        [topicTagGraph]\n    )\n\n    const allTopics = useMemo(() => {\n        if (!topicTagGraph) return []\n\n        function getAllSearchableTopics(node: TagGraphNode): Set<string> {\n            return node.children.reduce((acc, child) => {\n                if (child.isSearchable) {\n                    acc.add(child.name)\n                }\n                if (child.children.length) {\n                    const topics = getAllSearchableTopics(child)\n                    topics.forEach((topic) => acc.add(topic))\n                }\n                return acc\n            }, new Set<string>())\n        }\n        return [...getAllSearchableTopics(topicTagGraph)]\n    }, [topicTagGraph])\n\n    return { allAreas, allTopics }\n}\n\n/**\n * Handles analytics tracking for search state changes.\n */\nexport function useSearchAnalytics(\n    state: SearchState,\n    analytics: SiteAnalytics\n): void {\n    const lastLoggedStateRef = useRef<SearchState | null>(null)\n\n    useEffect(() => {\n        // Skip analytics for default/empty search state\n        if (R.isDeepEqual(state, DEFAULT_SEARCH_STATE)) return\n        // Skip if we already logged this state\n        if (R.isDeepEqual(state, lastLoggedStateRef.current)) return\n\n        lastLoggedStateRef.current = state\n        analytics.logSearch(state)\n    }, [state, analytics])\n}\n\ntype QueryKeyState = Pick<\n    SearchState,\n    \"query\" | \"filters\" | \"requireAllCountries\"\n>\n\n/**\n * Compute Algolia `offset` and `length` so the UI can show a smaller\n * first page (e.g. 2) and larger subsequent pages (e.g. 6) without\n * skipping results.\n *\n * Rationale:\n * - Using different `hitsPerPage` values together with Algolia's `page`\n *   parameter creates gaps: Algolia computes start = page * hitsPerPage,\n *   so switching page sizes means some indices are never requested and thus\n *   skipped.\n * - To avoid skipped results we request explicit `offset` and `length`:\n *   \"start at result N and give me M results\".\n *\n * Example (articles: first=2 later=6):\n * - UI page 0 -> offset=0, length=2 -> results 0..1\n * - UI page 1 -> offset=2, length=6 -> results 2..7\n * - UI page 2 -> offset=8, length=6 -> results 8..13\n */\n\nexport function useInfiniteSearchOffset<T extends SearchResponse<U>, U>({\n    queryKey,\n    queryFn,\n    firstPageSize,\n    laterPageSize,\n    enabled = true,\n}: {\n    queryKey: (state: SearchState) => readonly (string | QueryKeyState)[]\n    queryFn: (\n        liteSearchClient: LiteClient,\n        state: SearchState,\n        offset: number,\n        length: number\n    ) => Promise<T>\n    firstPageSize: number\n    laterPageSize: number\n    enabled?: boolean\n}) {\n    const { state, liteSearchClient } = useSearchContext()\n    const query = useInfiniteQuery<T, Error>({\n        queryKey: queryKey(state),\n        queryFn: ({ pageParam }) => {\n            if (typeof pageParam !== \"number\")\n                throw new Error(\"Invalid pageParam\")\n\n            const { offset, length } = getPaginationOffsetAndLength(\n                pageParam,\n                firstPageSize,\n                laterPageSize\n            )\n\n            return queryFn(liteSearchClient, state, offset, length)\n        },\n        getNextPageParam: (lastPage, allPages) => {\n            const currentPageIndex = allPages.length - 1\n\n            const requestedSoFar = getNbPaginatedItemsRequested(\n                currentPageIndex,\n                firstPageSize,\n                laterPageSize,\n                lastPage.hits.length\n            )\n\n            return requestedSoFar < (lastPage.nbHits ?? 0)\n                ? currentPageIndex + 1\n                : undefined\n        },\n        enabled,\n        initialPageParam: 0,\n    })\n\n    const hits: U[] = query.data?.pages.flatMap((page) => page.hits) || []\n    const totalResults = query.data?.pages[0]?.nbHits || 0\n\n    return {\n        ...query,\n        hits,\n        totalResults,\n    }\n}\n\nexport function useInfiniteSearch<T extends SearchResponse<U>, U>({\n    queryKey,\n    queryFn,\n    enabled = true,\n}: {\n    queryKey: (state: SearchState) => readonly (string | QueryKeyState)[]\n    queryFn: (\n        liteSearchClient: LiteClient,\n        state: SearchState,\n        page: number\n    ) => Promise<T>\n    enabled?: boolean\n}) {\n    const { state, liteSearchClient } = useSearchContext()\n\n    const query = useInfiniteQuery<T, Error>({\n        // All paginated subqueries share the same query key\n        queryKey: queryKey(state),\n        queryFn: ({ pageParam }) => {\n            if (typeof pageParam !== \"number\")\n                throw new Error(\"Invalid pageParam\")\n\n            return queryFn(liteSearchClient, state, pageParam)\n        },\n        getNextPageParam: (lastPage) => {\n            let { page, nbPages } = lastPage\n            page = page ?? 0\n            nbPages = nbPages ?? 1\n            return page < nbPages - 1 ? page + 1 : undefined\n        },\n        initialPageParam: 0,\n        enabled,\n    })\n\n    const hits: U[] = query.data?.pages.flatMap((page) => page.hits) || []\n    const totalResults = query.data?.pages[0]?.nbHits || 0\n\n    return {\n        ...query,\n        hits,\n        totalResults,\n    }\n}\n\nexport const useTopicTagGraph = () => {\n    const [tagGraph, setTagGraph] = useState<TagGraphRoot | null>(null)\n\n    useEffect(() => {\n        const fetchTagGraph = async () => {\n            const response = await fetch(\"/topicTagGraph.json\")\n            const tagGraph = await response.json()\n            setTagGraph(flattenNonTopicNodes(tagGraph))\n        }\n        if (!tagGraph) {\n            fetchTagGraph().catch((err) => {\n                throw new Error(`Failed to fetch tag graph: ${err}`)\n            })\n        }\n    }, [tagGraph, setTagGraph])\n\n    return tagGraph\n}\n","export function createRef(initialValue) {\n  return {\n    current: initialValue\n  };\n}","export function debounce(fn, time) {\n  var timerId = undefined;\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeout(function () {\n      return fn.apply(void 0, args);\n    }, time);\n  };\n}","export function flatten(values) {\n  return values.reduce(function (a, b) {\n    return a.concat(b);\n  }, []);\n}","var autocompleteId = 0;\nexport function generateAutocompleteId() {\n  return \"autocomplete-\".concat(autocompleteId++);\n}","export function getAttributeValueByPath(record, path) {\n  return path.reduce(function (current, key) {\n    return current && current[key];\n  }, record);\n}","export function getItemsCount(state) {\n  if (state.collections.length === 0) {\n    return 0;\n  }\n  return state.collections.reduce(function (sum, collection) {\n    return sum + collection.items.length;\n  }, 0);\n}","function isPrimitive(obj) {\n  return obj !== Object(obj);\n}\nexport function isEqual(first, second) {\n  if (first === second) {\n    return true;\n  }\n  if (isPrimitive(first) || isPrimitive(second) || typeof first === 'function' || typeof second === 'function') {\n    return first === second;\n  }\n  if (Object.keys(first).length !== Object.keys(second).length) {\n    return false;\n  }\n  for (var _i = 0, _Object$keys = Object.keys(first); _i < _Object$keys.length; _i++) {\n    var key = _Object$keys[_i];\n    if (!(key in second)) {\n      return false;\n    }\n    if (!isEqual(first[key], second[key])) {\n      return false;\n    }\n  }\n  return true;\n}","export var noop = function noop() {};","/**\n * Safely runs code meant for browser environments only.\n */\nexport function safelyRunOnBrowser(callback) {\n  if (typeof window !== 'undefined') {\n    return callback({\n      window: window\n    });\n  }\n  return undefined;\n}","export var version = '1.19.6';","import { version } from './version';\nexport var userAgents = [{\n  segment: 'autocomplete-core',\n  version: version\n}];","export function createClickedEvent(_ref) {\n  var item = _ref.item,\n    _ref$items = _ref.items,\n    items = _ref$items === void 0 ? [] : _ref$items;\n  return {\n    index: item.__autocomplete_indexName,\n    items: [item],\n    positions: [1 + items.findIndex(function (x) {\n      return x.objectID === item.objectID;\n    })],\n    queryID: item.__autocomplete_queryID,\n    algoliaSource: ['autocomplete']\n  };\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\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; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * Determines if a given insights `client` supports the optional call to `init`\n * and the ability to set credentials via extra parameters when sending events.\n */\nexport function isModernInsightsClient(client) {\n  var _split$map = (client.version || '').split('.').map(Number),\n    _split$map2 = _slicedToArray(_split$map, 2),\n    major = _split$map2[0],\n    minor = _split$map2[1];\n\n  /* eslint-disable @typescript-eslint/camelcase */\n  var v3 = major >= 3;\n  var v2_4 = major === 2 && minor >= 4;\n  var v1_10 = major === 1 && minor >= 10;\n  return v3 || v2_4 || v1_10;\n  /* eslint-enable @typescript-eslint/camelcase */\n}","var _excluded = [\"items\"],\n  _excluded2 = [\"items\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { isModernInsightsClient } from './isModernInsightsClient';\nfunction chunk(item) {\n  var chunkSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n  var chunks = [];\n  for (var i = 0; i < item.objectIDs.length; i += chunkSize) {\n    chunks.push(_objectSpread(_objectSpread({}, item), {}, {\n      objectIDs: item.objectIDs.slice(i, i + chunkSize)\n    }));\n  }\n  return chunks;\n}\nfunction mapToInsightsParamsApi(params) {\n  return params.map(function (_ref) {\n    var items = _ref.items,\n      param = _objectWithoutProperties(_ref, _excluded);\n    return _objectSpread(_objectSpread({}, param), {}, {\n      objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref2) {\n        var objectID = _ref2.objectID;\n        return objectID;\n      })) || param.objectIDs\n    });\n  });\n}\nexport function createSearchInsightsApi(searchInsights) {\n  var canSendHeaders = isModernInsightsClient(searchInsights);\n  function sendToInsights(method, payloads, items) {\n    if (canSendHeaders && typeof items !== 'undefined') {\n      var _items$0$__autocomple = items[0].__autocomplete_algoliaCredentials,\n        appId = _items$0$__autocomple.appId,\n        apiKey = _items$0$__autocomple.apiKey;\n      var headers = {\n        'X-Algolia-Application-Id': appId,\n        'X-Algolia-API-Key': apiKey\n      };\n      searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads), [{\n        headers: headers\n      }]));\n    } else {\n      searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads)));\n    }\n  }\n  return {\n    /**\n     * Initializes Insights with Algolia credentials.\n     */\n    init: function init(appId, apiKey) {\n      searchInsights('init', {\n        appId: appId,\n        apiKey: apiKey\n      });\n    },\n    /**\n     * Sets the authenticated user token to attach to events.\n     * Unsets the authenticated token by passing `undefined`.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/set-authenticated-user-token/\n     */\n    setAuthenticatedUserToken: function setAuthenticatedUserToken(authenticatedUserToken) {\n      searchInsights('setAuthenticatedUserToken', authenticatedUserToken);\n    },\n    /**\n     * Sets the user token to attach to events.\n     */\n    setUserToken: function setUserToken(userToken) {\n      searchInsights('setUserToken', userToken);\n    },\n    /**\n     * Sends click events to capture a query and its clicked items and positions.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids-after-search/\n     */\n    clickedObjectIDsAfterSearch: function clickedObjectIDsAfterSearch() {\n      for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n        params[_key] = arguments[_key];\n      }\n      if (params.length > 0) {\n        sendToInsights('clickedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends click events to capture clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids/\n     */\n    clickedObjectIDs: function clickedObjectIDs() {\n      for (var _len2 = arguments.length, params = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        params[_key2] = arguments[_key2];\n      }\n      if (params.length > 0) {\n        sendToInsights('clickedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends click events to capture the filters a user clicks on.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-filters/\n     */\n    clickedFilters: function clickedFilters() {\n      for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        params[_key3] = arguments[_key3];\n      }\n      if (params.length > 0) {\n        searchInsights.apply(void 0, ['clickedFilters'].concat(params));\n      }\n    },\n    /**\n     * Sends conversion events to capture a query and its clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids-after-search/\n     */\n    convertedObjectIDsAfterSearch: function convertedObjectIDsAfterSearch() {\n      for (var _len4 = arguments.length, params = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        params[_key4] = arguments[_key4];\n      }\n      if (params.length > 0) {\n        sendToInsights('convertedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends conversion events to capture clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids/\n     */\n    convertedObjectIDs: function convertedObjectIDs() {\n      for (var _len5 = arguments.length, params = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        params[_key5] = arguments[_key5];\n      }\n      if (params.length > 0) {\n        sendToInsights('convertedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n      }\n    },\n    /**\n     * Sends conversion events to capture the filters a user uses when converting.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/converted-filters/\n     */\n    convertedFilters: function convertedFilters() {\n      for (var _len6 = arguments.length, params = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        params[_key6] = arguments[_key6];\n      }\n      if (params.length > 0) {\n        searchInsights.apply(void 0, ['convertedFilters'].concat(params));\n      }\n    },\n    /**\n     * Sends view events to capture clicked items.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-object-ids/\n     */\n    viewedObjectIDs: function viewedObjectIDs() {\n      for (var _len7 = arguments.length, params = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n        params[_key7] = arguments[_key7];\n      }\n      if (params.length > 0) {\n        params.reduce(function (acc, _ref3) {\n          var items = _ref3.items,\n            param = _objectWithoutProperties(_ref3, _excluded2);\n          return [].concat(_toConsumableArray(acc), _toConsumableArray(chunk(_objectSpread(_objectSpread({}, param), {}, {\n            objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref4) {\n              var objectID = _ref4.objectID;\n              return objectID;\n            })) || param.objectIDs\n          })).map(function (payload) {\n            return {\n              items: items,\n              payload: payload\n            };\n          })));\n        }, []).forEach(function (_ref5) {\n          var items = _ref5.items,\n            payload = _ref5.payload;\n          return sendToInsights('viewedObjectIDs', [payload], items);\n        });\n      }\n    },\n    /**\n     * Sends view events to capture the filters a user uses when viewing.\n     *\n     * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-filters/\n     */\n    viewedFilters: function viewedFilters() {\n      for (var _len8 = arguments.length, params = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n        params[_key8] = arguments[_key8];\n      }\n      if (params.length > 0) {\n        searchInsights.apply(void 0, ['viewedFilters'].concat(params));\n      }\n    }\n  };\n}","export function createViewedEvents(_ref) {\n  var items = _ref.items;\n  var itemsByIndexName = items.reduce(function (acc, current) {\n    var _acc$current$__autoco;\n    acc[current.__autocomplete_indexName] = ((_acc$current$__autoco = acc[current.__autocomplete_indexName]) !== null && _acc$current$__autoco !== void 0 ? _acc$current$__autoco : []).concat(current);\n    return acc;\n  }, {});\n  return Object.keys(itemsByIndexName).map(function (indexName) {\n    var items = itemsByIndexName[indexName];\n    return {\n      index: indexName,\n      items: items,\n      algoliaSource: ['autocomplete']\n    };\n  });\n}","export function isAlgoliaInsightsHit(hit) {\n  return hit.objectID && hit.__autocomplete_indexName && hit.__autocomplete_queryID;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createRef, debounce, isEqual, noop, safelyRunOnBrowser } from '@algolia/autocomplete-shared';\nimport { createClickedEvent } from './createClickedEvent';\nimport { createSearchInsightsApi } from './createSearchInsightsApi';\nimport { createViewedEvents } from './createViewedEvents';\nimport { isAlgoliaInsightsHit } from './isAlgoliaInsightsHit';\nvar VIEW_EVENT_DELAY = 400;\nvar ALGOLIA_INSIGHTS_VERSION = '2.15.0';\nvar ALGOLIA_INSIGHTS_SRC = \"https://cdn.jsdelivr.net/npm/search-insights@\".concat(ALGOLIA_INSIGHTS_VERSION, \"/dist/search-insights.min.js\");\nvar sendViewedObjectIDs = debounce(function (_ref) {\n  var onItemsChange = _ref.onItemsChange,\n    items = _ref.items,\n    insights = _ref.insights,\n    state = _ref.state;\n  onItemsChange({\n    insights: insights,\n    insightsEvents: createViewedEvents({\n      items: items\n    }).map(function (event) {\n      return _objectSpread({\n        eventName: 'Items Viewed'\n      }, event);\n    }),\n    state: state\n  });\n}, VIEW_EVENT_DELAY);\nexport function createAlgoliaInsightsPlugin(options) {\n  var _getOptions = getOptions(options),\n    providedInsightsClient = _getOptions.insightsClient,\n    insightsInitParams = _getOptions.insightsInitParams,\n    onItemsChange = _getOptions.onItemsChange,\n    onSelectEvent = _getOptions.onSelect,\n    onActiveEvent = _getOptions.onActive,\n    __autocomplete_clickAnalytics = _getOptions.__autocomplete_clickAnalytics;\n  var insightsClient = providedInsightsClient;\n  if (!providedInsightsClient) {\n    safelyRunOnBrowser(function (_ref2) {\n      var window = _ref2.window;\n      var pointer = window.AlgoliaAnalyticsObject || 'aa';\n      if (typeof pointer === 'string') {\n        insightsClient = window[pointer];\n      }\n      if (!insightsClient) {\n        window.AlgoliaAnalyticsObject = pointer;\n        if (!window[pointer]) {\n          window[pointer] = function () {\n            if (!window[pointer].queue) {\n              window[pointer].queue = [];\n            }\n            for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n              args[_key] = arguments[_key];\n            }\n            window[pointer].queue.push(args);\n          };\n        }\n        window[pointer].version = ALGOLIA_INSIGHTS_VERSION;\n        insightsClient = window[pointer];\n        loadInsights(window);\n      }\n    });\n  }\n\n  // We return an empty plugin if `insightsClient` is still undefined at\n  // this stage, which can happen in server environments.\n  if (!insightsClient) {\n    return {};\n  }\n  if (insightsInitParams) {\n    insightsClient('init', _objectSpread({\n      partial: true\n    }, insightsInitParams));\n  }\n  var insights = createSearchInsightsApi(insightsClient);\n  var previousItems = createRef([]);\n  var debouncedOnStateChange = debounce(function (_ref3) {\n    var state = _ref3.state;\n    if (!state.isOpen) {\n      return;\n    }\n    var items = state.collections.reduce(function (acc, current) {\n      return [].concat(_toConsumableArray(acc), _toConsumableArray(current.items));\n    }, []).filter(isAlgoliaInsightsHit);\n    if (!isEqual(previousItems.current.map(function (x) {\n      return x.objectID;\n    }), items.map(function (x) {\n      return x.objectID;\n    }))) {\n      previousItems.current = items;\n      if (items.length > 0) {\n        sendViewedObjectIDs({\n          onItemsChange: onItemsChange,\n          items: items,\n          insights: insights,\n          state: state\n        });\n      }\n    }\n  }, 0);\n  return {\n    name: 'aa.algoliaInsightsPlugin',\n    subscribe: function subscribe(_ref4) {\n      var setContext = _ref4.setContext,\n        onSelect = _ref4.onSelect,\n        onActive = _ref4.onActive;\n      function setInsightsContext(userToken) {\n        setContext({\n          algoliaInsightsPlugin: {\n            __algoliaSearchParameters: _objectSpread(_objectSpread({}, __autocomplete_clickAnalytics ? {\n              clickAnalytics: true\n            } : {}), userToken ? {\n              userToken: normalizeUserToken(userToken)\n            } : {}),\n            insights: insights\n          }\n        });\n      }\n      insightsClient('addAlgoliaAgent', 'insights-plugin');\n      setInsightsContext();\n\n      // Handles user token changes\n      insightsClient('onUserTokenChange', function (userToken) {\n        setInsightsContext(userToken);\n      });\n      insightsClient('getUserToken', null, function (_error, userToken) {\n        setInsightsContext(userToken);\n      });\n      onSelect(function (_ref5) {\n        var item = _ref5.item,\n          state = _ref5.state,\n          event = _ref5.event,\n          source = _ref5.source;\n        if (!isAlgoliaInsightsHit(item)) {\n          return;\n        }\n        onSelectEvent({\n          state: state,\n          event: event,\n          insights: insights,\n          item: item,\n          insightsEvents: [_objectSpread({\n            eventName: 'Item Selected'\n          }, createClickedEvent({\n            item: item,\n            items: source.getItems().filter(isAlgoliaInsightsHit)\n          }))]\n        });\n      });\n      onActive(function (_ref6) {\n        var item = _ref6.item,\n          source = _ref6.source,\n          state = _ref6.state,\n          event = _ref6.event;\n        if (!isAlgoliaInsightsHit(item)) {\n          return;\n        }\n        onActiveEvent({\n          state: state,\n          event: event,\n          insights: insights,\n          item: item,\n          insightsEvents: [_objectSpread({\n            eventName: 'Item Active'\n          }, createClickedEvent({\n            item: item,\n            items: source.getItems().filter(isAlgoliaInsightsHit)\n          }))]\n        });\n      });\n    },\n    onStateChange: function onStateChange(_ref7) {\n      var state = _ref7.state;\n      debouncedOnStateChange({\n        state: state\n      });\n    },\n    __autocomplete_pluginOptions: options\n  };\n}\nfunction getAlgoliaSources() {\n  var _context$algoliaInsig;\n  var algoliaSourceBase = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var context = arguments.length > 1 ? arguments[1] : undefined;\n  return [].concat(_toConsumableArray(algoliaSourceBase), ['autocomplete-internal'], _toConsumableArray((_context$algoliaInsig = context.algoliaInsightsPlugin) !== null && _context$algoliaInsig !== void 0 && _context$algoliaInsig.__automaticInsights ? ['autocomplete-automatic'] : []));\n}\nfunction getOptions(options) {\n  return _objectSpread({\n    onItemsChange: function onItemsChange(_ref8) {\n      var insights = _ref8.insights,\n        insightsEvents = _ref8.insightsEvents,\n        state = _ref8.state;\n      insights.viewedObjectIDs.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n        return _objectSpread(_objectSpread({}, event), {}, {\n          algoliaSource: getAlgoliaSources(event.algoliaSource, state.context)\n        });\n      })));\n    },\n    onSelect: function onSelect(_ref9) {\n      var insights = _ref9.insights,\n        insightsEvents = _ref9.insightsEvents,\n        state = _ref9.state;\n      insights.clickedObjectIDsAfterSearch.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n        return _objectSpread(_objectSpread({}, event), {}, {\n          algoliaSource: getAlgoliaSources(event.algoliaSource, state.context)\n        });\n      })));\n    },\n    onActive: noop,\n    __autocomplete_clickAnalytics: true\n  }, options);\n}\nfunction loadInsights(environment) {\n  var errorMessage = \"[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete\";\n  try {\n    var script = environment.document.createElement('script');\n    script.async = true;\n    script.src = ALGOLIA_INSIGHTS_SRC;\n    script.onerror = function () {\n      // eslint-disable-next-line no-console\n      console.error(errorMessage);\n    };\n    document.body.appendChild(script);\n  } catch (cause) {\n    // eslint-disable-next-line no-console\n    console.error(errorMessage);\n  }\n}\n\n/**\n * While `search-insights` supports both string and number user tokens,\n * the Search API only accepts strings. This function normalizes the user token.\n */\nfunction normalizeUserToken(userToken) {\n  return typeof userToken === 'number' ? userToken.toString() : userToken;\n}","function createInternalCancelablePromise(promise, initialState) {\n  var state = initialState;\n  return {\n    then: function then(onfulfilled, onrejected) {\n      return createInternalCancelablePromise(promise.then(createCallback(onfulfilled, state, promise), createCallback(onrejected, state, promise)), state);\n    },\n    catch: function _catch(onrejected) {\n      return createInternalCancelablePromise(promise.catch(createCallback(onrejected, state, promise)), state);\n    },\n    finally: function _finally(onfinally) {\n      if (onfinally) {\n        state.onCancelList.push(onfinally);\n      }\n      return createInternalCancelablePromise(promise.finally(createCallback(onfinally && function () {\n        state.onCancelList = [];\n        return onfinally();\n      }, state, promise)), state);\n    },\n    cancel: function cancel() {\n      state.isCanceled = true;\n      var callbacks = state.onCancelList;\n      state.onCancelList = [];\n      callbacks.forEach(function (callback) {\n        callback();\n      });\n    },\n    isCanceled: function isCanceled() {\n      return state.isCanceled === true;\n    }\n  };\n}\nexport function createCancelablePromise(executor) {\n  return createInternalCancelablePromise(new Promise(function (resolve, reject) {\n    return executor(resolve, reject);\n  }), {\n    isCanceled: false,\n    onCancelList: []\n  });\n}\ncreateCancelablePromise.resolve = function (value) {\n  return cancelable(Promise.resolve(value));\n};\ncreateCancelablePromise.reject = function (reason) {\n  return cancelable(Promise.reject(reason));\n};\nexport function cancelable(promise) {\n  return createInternalCancelablePromise(promise, {\n    isCanceled: false,\n    onCancelList: []\n  });\n}\nfunction createCallback(onResult, state, fallback) {\n  if (!onResult) {\n    return fallback;\n  }\n  return function callback(arg) {\n    if (state.isCanceled) {\n      return arg;\n    }\n    return onResult(arg);\n  };\n}","// Ensures multiple callers sync to the same promise.\nvar _hasWaitPromiseResolved = true;\nvar _waitPromise;\nexport function createCancelablePromiseList() {\n  var list = [];\n  return {\n    add: function add(cancelablePromise) {\n      list.push(cancelablePromise);\n      return cancelablePromise.finally(function () {\n        list = list.filter(function (item) {\n          return item !== cancelablePromise;\n        });\n      });\n    },\n    cancelAll: function cancelAll() {\n      list.forEach(function (promise) {\n        return promise.cancel();\n      });\n    },\n    isEmpty: function isEmpty() {\n      return list.length === 0;\n    },\n    wait: function wait(timeout) {\n      // Reuse promise if already exists. Keeps multiple callers subscribed to the same promise.\n      if (!_hasWaitPromiseResolved) {\n        return _waitPromise;\n      }\n\n      // Creates a promise which either resolves after all pending requests complete\n      // or the timeout is reached (if provided). Whichever comes first.\n      _hasWaitPromiseResolved = false;\n      _waitPromise = !timeout ? Promise.all(list) : Promise.race([Promise.all(list), new Promise(function (resolve) {\n        return setTimeout(resolve, timeout);\n      })]);\n      return _waitPromise.then(function () {\n        _hasWaitPromiseResolved = true;\n      });\n    }\n  };\n}","/**\n * Creates a runner that executes promises in a concurrent-safe way.\n *\n * This is useful to prevent older promises to resolve after a newer promise,\n * otherwise resulting in stale resolved values.\n */\nexport function createConcurrentSafePromise() {\n  var basePromiseId = -1;\n  var latestResolvedId = -1;\n  var latestResolvedValue = undefined;\n  return function runConcurrentSafePromise(promise) {\n    basePromiseId++;\n    var currentPromiseId = basePromiseId;\n    return Promise.resolve(promise).then(function (x) {\n      // The promise might take too long to resolve and get outdated. This would\n      // result in resolving stale values.\n      // When this happens, we ignore the promise value and return the one\n      // coming from the latest resolved value.\n      //\n      // +----------------------------------+\n      // |        100ms                     |\n      // | run(1) +--->  R1                 |\n      // |        300ms                     |\n      // | run(2) +-------------> R2 (SKIP) |\n      // |        200ms                     |\n      // | run(3) +--------> R3             |\n      // +----------------------------------+\n      if (latestResolvedValue && currentPromiseId < latestResolvedId) {\n        return latestResolvedValue;\n      }\n      latestResolvedId = currentPromiseId;\n      latestResolvedValue = x;\n      return x;\n    });\n  };\n}","/**\n * Returns the next active item ID from the current state.\n *\n * We allow circular keyboard navigation from the base index.\n * The base index can either be `null` (nothing is highlighted) or `0`\n * (the first item is highlighted).\n * The base index is allowed to get assigned `null` only if\n * `props.defaultActiveItemId` is `null`. This pattern allows to \"stop\"\n * by the actual query before navigating to other suggestions as seen on\n * Google or Amazon.\n *\n * @param moveAmount The offset to increment (or decrement) the last index\n * @param baseIndex The current index to compute the next index from\n * @param itemCount The number of items\n * @param defaultActiveItemId The default active index to fallback to\n */\nexport function getNextActiveItemId(moveAmount, baseIndex, itemCount, defaultActiveItemId) {\n  if (!itemCount) {\n    return null;\n  }\n  if (moveAmount < 0 && (baseIndex === null || defaultActiveItemId !== null && baseIndex === 0)) {\n    return itemCount + moveAmount;\n  }\n  var numericIndex = (baseIndex === null ? -1 : baseIndex) + moveAmount;\n  if (numericIndex <= -1 || numericIndex >= itemCount) {\n    return defaultActiveItemId === null ? null : 0;\n  }\n  return numericIndex;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { invariant, decycle, noop } from '@algolia/autocomplete-shared';\nexport function getNormalizedSources(getSources, params) {\n  var seenSourceIds = [];\n  return Promise.resolve(getSources(params)).then(function (sources) {\n    invariant(Array.isArray(sources), function () {\n      return \"The `getSources` function must return an array of sources but returned type \".concat(JSON.stringify(_typeof(sources)), \":\\n\\n\").concat(JSON.stringify(decycle(sources), null, 2));\n    });\n    return Promise.all(sources\n    // We allow `undefined` and `false` sources to allow users to use\n    // `Boolean(query) && source` (=> `false`).\n    // We need to remove these values at this point.\n    .filter(function (maybeSource) {\n      return Boolean(maybeSource);\n    }).map(function (source) {\n      invariant(typeof source.sourceId === 'string', 'A source must provide a `sourceId` string.');\n      if (seenSourceIds.includes(source.sourceId)) {\n        throw new Error(\"[Autocomplete] The `sourceId` \".concat(JSON.stringify(source.sourceId), \" is not unique.\"));\n      }\n      seenSourceIds.push(source.sourceId);\n      var defaultSource = {\n        getItemInputValue: function getItemInputValue(_ref) {\n          var state = _ref.state;\n          return state.query;\n        },\n        getItemUrl: function getItemUrl() {\n          return undefined;\n        },\n        onSelect: function onSelect(_ref2) {\n          var setIsOpen = _ref2.setIsOpen;\n          setIsOpen(false);\n        },\n        onActive: noop,\n        onResolve: noop\n      };\n      Object.keys(defaultSource).forEach(function (key) {\n        defaultSource[key].__default = true;\n      });\n      var normalizedSource = _objectSpread(_objectSpread({}, defaultSource), source);\n      return Promise.resolve(normalizedSource);\n    }));\n  });\n}","function _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; } } }; }\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); }\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 * If a plugin is configured to await a submit event, this returns a promise\n * for either the max timeout value found or until it completes.\n * Otherwise, return undefined.\n */\nexport var getPluginSubmitPromise = function getPluginSubmitPromise(plugins, pendingRequests) {\n  var waitUntilComplete = false;\n  var timeouts = [];\n  var _iterator = _createForOfIteratorHelper(plugins),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var _plugin$__autocomplet, _plugin$__autocomplet2, _plugin$__autocomplet3;\n      var plugin = _step.value;\n      var value = (_plugin$__autocomplet = plugin.__autocomplete_pluginOptions) === null || _plugin$__autocomplet === void 0 ? void 0 : (_plugin$__autocomplet2 = (_plugin$__autocomplet3 = _plugin$__autocomplet).awaitSubmit) === null || _plugin$__autocomplet2 === void 0 ? void 0 : _plugin$__autocomplet2.call(_plugin$__autocomplet3);\n      if (typeof value === 'number') {\n        timeouts.push(value);\n      } else if (value === true) {\n        waitUntilComplete = true;\n        break; // break loop as bool overrides num array below\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  if (waitUntilComplete) {\n    return pendingRequests.wait();\n  } else if (timeouts.length > 0) {\n    return pendingRequests.wait(Math.max.apply(Math, timeouts));\n  }\n  return undefined;\n};","// We don't have access to the autocomplete source when we call `onKeyDown`\n// or `onClick` because those are native browser events.\n// However, we can get the source from the suggestion index.\nfunction getCollectionFromActiveItemId(state) {\n  // Given 3 sources with respectively 1, 2 and 3 suggestions: [1, 2, 3]\n  // We want to get the accumulated counts:\n  // [1, 1 + 2, 1 + 2 + 3] = [1, 3, 3 + 3] = [1, 3, 6]\n  var accumulatedCollectionsCount = state.collections.map(function (collections) {\n    return collections.items.length;\n  }).reduce(function (acc, collectionsCount, index) {\n    var previousValue = acc[index - 1] || 0;\n    var nextValue = previousValue + collectionsCount;\n    acc.push(nextValue);\n    return acc;\n  }, []);\n\n  // Based on the accumulated counts, we can infer the index of the suggestion.\n  var collectionIndex = accumulatedCollectionsCount.reduce(function (acc, current) {\n    if (current <= state.activeItemId) {\n      return acc + 1;\n    }\n    return acc;\n  }, 0);\n  return state.collections[collectionIndex];\n}\n\n/**\n * Gets the highlighted index relative to a suggestion object (not the absolute\n * highlighted index).\n *\n * Example:\n *  [['a', 'b'], ['c', 'd', 'e'], ['f']]\n *                      ↑\n *         (absolute: 3, relative: 1)\n */\nfunction getRelativeActiveItemId(_ref) {\n  var state = _ref.state,\n    collection = _ref.collection;\n  var isOffsetFound = false;\n  var counter = 0;\n  var previousItemsOffset = 0;\n  while (isOffsetFound === false) {\n    var currentCollection = state.collections[counter];\n    if (currentCollection === collection) {\n      isOffsetFound = true;\n      break;\n    }\n    previousItemsOffset += currentCollection.items.length;\n    counter++;\n  }\n  return state.activeItemId - previousItemsOffset;\n}\nexport function getActiveItem(state) {\n  var collection = getCollectionFromActiveItemId(state);\n  if (!collection) {\n    return null;\n  }\n  var item = collection.items[getRelativeActiveItemId({\n    state: state,\n    collection: collection\n  })];\n  var source = collection.source;\n  var itemInputValue = source.getItemInputValue({\n    item: item,\n    state: state\n  });\n  var itemUrl = source.getItemUrl({\n    item: item,\n    state: state\n  });\n  return {\n    item: item,\n    itemInputValue: itemInputValue,\n    itemUrl: itemUrl,\n    source: source\n  };\n}","/**\n * Returns a full element id for an autocomplete element.\n *\n * @param autocompleteInstanceId The id of the autocomplete instance\n * @param elementId The specific element id\n * @param source The source of the element, when it needs to be scoped\n */\nexport function getAutocompleteElementId(autocompleteInstanceId, elementId, source) {\n  return [autocompleteInstanceId, source === null || source === void 0 ? void 0 : source.sourceId, elementId].filter(Boolean).join('-').replace(/\\s/g, '');\n}","export function isOrContainsNode(parent, child) {\n  return parent === child || parent.contains(child);\n}","var regex = /((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;\nexport function isSamsung(userAgent) {\n  return Boolean(userAgent && userAgent.match(regex));\n}","export function mapToAlgoliaResponse(rawResults) {\n  return {\n    results: rawResults,\n    hits: rawResults.map(function (result) {\n      return result.hits;\n    }).filter(Boolean),\n    facetHits: rawResults.map(function (result) {\n      var _facetHits;\n      return (_facetHits = result.facetHits) === null || _facetHits === void 0 ? void 0 : _facetHits.map(function (facetHit) {\n        // Bring support for the highlighting components.\n        return {\n          label: facetHit.value,\n          count: facetHit.count,\n          _highlightResult: {\n            label: {\n              value: facetHit.highlighted\n            }\n          }\n        };\n      });\n    }).filter(Boolean)\n  };\n}","export function getNativeEvent(event) {\n  return event.nativeEvent || event;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createCancelablePromiseList } from './utils';\nexport function createStore(reducer, props, onStoreStateChange) {\n  var state = props.initialState;\n  return {\n    getState: function getState() {\n      return state;\n    },\n    dispatch: function dispatch(action, payload) {\n      var prevState = _objectSpread({}, state);\n      state = reducer(state, {\n        type: action,\n        props: props,\n        payload: payload\n      });\n      onStoreStateChange({\n        state: state,\n        prevState: prevState\n      });\n    },\n    pendingRequests: createCancelablePromiseList()\n  };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { flatten } from '@algolia/autocomplete-shared';\nexport function getAutocompleteSetters(_ref) {\n  var store = _ref.store;\n  var setActiveItemId = function setActiveItemId(value) {\n    store.dispatch('setActiveItemId', value);\n  };\n  var setQuery = function setQuery(value) {\n    store.dispatch('setQuery', value);\n  };\n  var setCollections = function setCollections(rawValue) {\n    var baseItemId = 0;\n    var value = rawValue.map(function (collection) {\n      return _objectSpread(_objectSpread({}, collection), {}, {\n        // We flatten the stored items to support calling `getAlgoliaResults`\n        // from the source itself.\n        items: flatten(collection.items).map(function (item) {\n          return _objectSpread(_objectSpread({}, item), {}, {\n            __autocomplete_id: baseItemId++\n          });\n        })\n      });\n    });\n    store.dispatch('setCollections', value);\n  };\n  var setIsOpen = function setIsOpen(value) {\n    store.dispatch('setIsOpen', value);\n  };\n  var setStatus = function setStatus(value) {\n    store.dispatch('setStatus', value);\n  };\n  var setContext = function setContext(value) {\n    store.dispatch('setContext', value);\n  };\n  return {\n    setActiveItemId: setActiveItemId,\n    setQuery: setQuery,\n    setCollections: setCollections,\n    setIsOpen: setIsOpen,\n    setStatus: setStatus,\n    setContext: setContext\n  };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getItemsCount, generateAutocompleteId, flatten } from '@algolia/autocomplete-shared';\nimport { getNormalizedSources } from './utils';\nexport function getDefaultProps(props, pluginSubscribers) {\n  var _props$id;\n  /* eslint-disable no-restricted-globals */\n  var environment = typeof window !== 'undefined' ? window : {};\n  /* eslint-enable no-restricted-globals */\n  var plugins = props.plugins || [];\n  return _objectSpread(_objectSpread({\n    debug: false,\n    openOnFocus: false,\n    enterKeyHint: undefined,\n    ignoreCompositionEvents: false,\n    placeholder: '',\n    autoFocus: false,\n    defaultActiveItemId: null,\n    stallThreshold: 300,\n    insights: undefined,\n    environment: environment,\n    shouldPanelOpen: function shouldPanelOpen(_ref) {\n      var state = _ref.state;\n      return getItemsCount(state) > 0;\n    },\n    reshape: function reshape(_ref2) {\n      var sources = _ref2.sources;\n      return sources;\n    }\n  }, props), {}, {\n    // Since `generateAutocompleteId` triggers a side effect (it increments\n    // an internal counter), we don't want to execute it if unnecessary.\n    id: (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : generateAutocompleteId(),\n    plugins: plugins,\n    // The following props need to be deeply defaulted.\n    initialState: _objectSpread({\n      activeItemId: null,\n      query: '',\n      completion: null,\n      collections: [],\n      isOpen: false,\n      status: 'idle',\n      context: {}\n    }, props.initialState),\n    onStateChange: function onStateChange(params) {\n      var _props$onStateChange;\n      (_props$onStateChange = props.onStateChange) === null || _props$onStateChange === void 0 ? void 0 : _props$onStateChange.call(props, params);\n      plugins.forEach(function (x) {\n        var _x$onStateChange;\n        return (_x$onStateChange = x.onStateChange) === null || _x$onStateChange === void 0 ? void 0 : _x$onStateChange.call(x, params);\n      });\n    },\n    onSubmit: function onSubmit(params) {\n      var _props$onSubmit;\n      (_props$onSubmit = props.onSubmit) === null || _props$onSubmit === void 0 ? void 0 : _props$onSubmit.call(props, params);\n      plugins.forEach(function (x) {\n        var _x$onSubmit;\n        return (_x$onSubmit = x.onSubmit) === null || _x$onSubmit === void 0 ? void 0 : _x$onSubmit.call(x, params);\n      });\n    },\n    onReset: function onReset(params) {\n      var _props$onReset;\n      (_props$onReset = props.onReset) === null || _props$onReset === void 0 ? void 0 : _props$onReset.call(props, params);\n      plugins.forEach(function (x) {\n        var _x$onReset;\n        return (_x$onReset = x.onReset) === null || _x$onReset === void 0 ? void 0 : _x$onReset.call(x, params);\n      });\n    },\n    getSources: function getSources(params) {\n      return Promise.all([].concat(_toConsumableArray(plugins.map(function (plugin) {\n        return plugin.getSources;\n      })), [props.getSources]).filter(Boolean).map(function (getSources) {\n        return getNormalizedSources(getSources, params);\n      })).then(function (nested) {\n        return flatten(nested);\n      }).then(function (sources) {\n        return sources.map(function (source) {\n          return _objectSpread(_objectSpread({}, source), {}, {\n            onSelect: function onSelect(params) {\n              source.onSelect(params);\n              pluginSubscribers.forEach(function (x) {\n                var _x$onSelect;\n                return (_x$onSelect = x.onSelect) === null || _x$onSelect === void 0 ? void 0 : _x$onSelect.call(x, params);\n              });\n            },\n            onActive: function onActive(params) {\n              source.onActive(params);\n              pluginSubscribers.forEach(function (x) {\n                var _x$onActive;\n                return (_x$onActive = x.onActive) === null || _x$onActive === void 0 ? void 0 : _x$onActive.call(x, params);\n              });\n            },\n            onResolve: function onResolve(params) {\n              source.onResolve(params);\n              pluginSubscribers.forEach(function (x) {\n                var _x$onResolve;\n                return (_x$onResolve = x.onResolve) === null || _x$onResolve === void 0 ? void 0 : _x$onResolve.call(x, params);\n              });\n            }\n          });\n        });\n      });\n    },\n    navigator: _objectSpread({\n      navigate: function navigate(_ref3) {\n        var itemUrl = _ref3.itemUrl;\n        environment.location.assign(itemUrl);\n      },\n      navigateNewTab: function navigateNewTab(_ref4) {\n        var itemUrl = _ref4.itemUrl;\n        var windowReference = environment.open(itemUrl, '_blank', 'noopener');\n        windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus();\n      },\n      navigateNewWindow: function navigateNewWindow(_ref5) {\n        var itemUrl = _ref5.itemUrl;\n        environment.open(itemUrl, '_blank', 'noopener');\n      }\n    }, props.navigator)\n  });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { flatten } from '@algolia/autocomplete-shared';\nexport function reshape(_ref) {\n  var collections = _ref.collections,\n    props = _ref.props,\n    state = _ref.state;\n  // Sources are grouped by `sourceId` to conveniently pick them via destructuring.\n  // Example: `const { recentSearchesPlugin } = sourcesBySourceId`\n  var originalSourcesBySourceId = collections.reduce(function (acc, collection) {\n    return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, collection.source.sourceId, _objectSpread(_objectSpread({}, collection.source), {}, {\n      getItems: function getItems() {\n        // We provide the resolved items from the collection to the `reshape` prop.\n        return flatten(collection.items);\n      }\n    })));\n  }, {});\n  var _props$plugins$reduce = props.plugins.reduce(function (acc, plugin) {\n      if (plugin.reshape) {\n        return plugin.reshape(acc);\n      }\n      return acc;\n    }, {\n      sourcesBySourceId: originalSourcesBySourceId,\n      state: state\n    }),\n    sourcesBySourceId = _props$plugins$reduce.sourcesBySourceId;\n  var reshapeSources = props.reshape({\n    sourcesBySourceId: sourcesBySourceId,\n    sources: Object.values(sourcesBySourceId),\n    state: state\n  });\n\n  // We reconstruct the collections with the items modified by the `reshape` prop.\n  return flatten(reshapeSources).filter(Boolean).map(function (source) {\n    return {\n      source: source,\n      items: source.getItems()\n    };\n  });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nimport { decycle, flatten, invariant } from '@algolia/autocomplete-shared';\nimport { mapToAlgoliaResponse } from './utils';\nfunction isDescription(item) {\n  return Boolean(item.execute);\n}\nfunction isRequesterDescription(description) {\n  return Boolean(description === null || description === void 0 ? void 0 : description.execute);\n}\nexport function preResolve(itemsOrDescription, sourceId, state) {\n  if (isRequesterDescription(itemsOrDescription)) {\n    var contextParameters = itemsOrDescription.requesterId === 'algolia' ? Object.assign.apply(Object, [{}].concat(_toConsumableArray(Object.keys(state.context).map(function (key) {\n      var _state$context$key;\n      return (_state$context$key = state.context[key]) === null || _state$context$key === void 0 ? void 0 : _state$context$key.__algoliaSearchParameters;\n    })))) : {};\n    return _objectSpread(_objectSpread({}, itemsOrDescription), {}, {\n      requests: itemsOrDescription.queries.map(function (query) {\n        return {\n          query: itemsOrDescription.requesterId === 'algolia' ? _objectSpread(_objectSpread({}, query), {}, {\n            params: _objectSpread(_objectSpread({}, contextParameters), query.params)\n          }) : query,\n          sourceId: sourceId,\n          transformResponse: itemsOrDescription.transformResponse\n        };\n      })\n    });\n  }\n  return {\n    items: itemsOrDescription,\n    sourceId: sourceId\n  };\n}\nexport function resolve(items) {\n  var packed = items.reduce(function (acc, current) {\n    if (!isDescription(current)) {\n      acc.push(current);\n      return acc;\n    }\n    var searchClient = current.searchClient,\n      execute = current.execute,\n      requesterId = current.requesterId,\n      requests = current.requests;\n    var container = acc.find(function (item) {\n      return isDescription(current) && isDescription(item) && item.searchClient === searchClient && Boolean(requesterId) && item.requesterId === requesterId;\n    });\n    if (container) {\n      var _container$items;\n      (_container$items = container.items).push.apply(_container$items, _toConsumableArray(requests));\n    } else {\n      var request = {\n        execute: execute,\n        requesterId: requesterId,\n        items: requests,\n        searchClient: searchClient\n      };\n      acc.push(request);\n    }\n    return acc;\n  }, []);\n  var values = packed.map(function (maybeDescription) {\n    if (!isDescription(maybeDescription)) {\n      return Promise.resolve(maybeDescription);\n    }\n    var _ref = maybeDescription,\n      execute = _ref.execute,\n      items = _ref.items,\n      searchClient = _ref.searchClient;\n    return execute({\n      searchClient: searchClient,\n      requests: items\n    });\n  });\n  return Promise.all(values).then(function (responses) {\n    return flatten(responses);\n  });\n}\nexport function postResolve(responses, sources, store) {\n  return sources.map(function (source) {\n    var matches = responses.filter(function (response) {\n      return response.sourceId === source.sourceId;\n    });\n    var results = matches.map(function (_ref2) {\n      var items = _ref2.items;\n      return items;\n    });\n    var transform = matches[0].transformResponse;\n    var items = transform ? transform(mapToAlgoliaResponse(results)) : results;\n    source.onResolve({\n      source: source,\n      results: results,\n      items: items,\n      state: store.getState()\n    });\n    invariant(Array.isArray(items), function () {\n      return \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned type \").concat(JSON.stringify(_typeof(items)), \":\\n\\n\").concat(JSON.stringify(decycle(items), null, 2), \".\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\");\n    });\n    invariant(items.every(Boolean), \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned \").concat(JSON.stringify(undefined), \".\\n\\nDid you forget to return items?\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\"));\n    return {\n      source: source,\n      items: items\n    };\n  });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"event\", \"nextState\", \"props\", \"query\", \"refresh\", \"store\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\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 { reshape } from './reshape';\nimport { preResolve, resolve, postResolve } from './resolve';\nimport { cancelable, createConcurrentSafePromise, getActiveItem } from './utils';\nvar lastStalledId = null;\nvar runConcurrentSafePromise = createConcurrentSafePromise();\nexport function onInput(_ref) {\n  var event = _ref.event,\n    _ref$nextState = _ref.nextState,\n    nextState = _ref$nextState === void 0 ? {} : _ref$nextState,\n    props = _ref.props,\n    query = _ref.query,\n    refresh = _ref.refresh,\n    store = _ref.store,\n    setters = _objectWithoutProperties(_ref, _excluded);\n  if (lastStalledId) {\n    props.environment.clearTimeout(lastStalledId);\n  }\n  var setCollections = setters.setCollections,\n    setIsOpen = setters.setIsOpen,\n    setQuery = setters.setQuery,\n    setActiveItemId = setters.setActiveItemId,\n    setStatus = setters.setStatus,\n    setContext = setters.setContext;\n  setQuery(query);\n  setActiveItemId(props.defaultActiveItemId);\n  if (!query && props.openOnFocus === false) {\n    var _nextState$isOpen;\n    var collections = store.getState().collections.map(function (collection) {\n      return _objectSpread(_objectSpread({}, collection), {}, {\n        items: []\n      });\n    });\n    setStatus('idle');\n    setCollections(collections);\n    setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({\n      state: store.getState()\n    }));\n\n    // We make sure to update the latest resolved value of the tracked\n    // promises to keep late resolving promises from \"cancelling\" the state\n    // updates performed in this code path.\n    // We chain with a void promise to respect `onInput`'s expected return type.\n    var _request = cancelable(runConcurrentSafePromise(collections).then(function () {\n      return Promise.resolve();\n    }));\n    return store.pendingRequests.add(_request);\n  }\n  setStatus('loading');\n  lastStalledId = props.environment.setTimeout(function () {\n    setStatus('stalled');\n  }, props.stallThreshold);\n\n  // We track the entire promise chain triggered by `onInput` before mutating\n  // the Autocomplete state to make sure that any state manipulation is based on\n  // fresh data regardless of when promises individually resolve.\n  // We don't track nested promises and only rely on the full chain resolution,\n  // meaning we should only ever manipulate the state once this concurrent-safe\n  // promise is resolved.\n  var request = cancelable(runConcurrentSafePromise(props.getSources(_objectSpread({\n    query: query,\n    refresh: refresh,\n    state: store.getState()\n  }, setters)).then(function (sources) {\n    return Promise.all(sources.map(function (source) {\n      return Promise.resolve(source.getItems(_objectSpread({\n        query: query,\n        refresh: refresh,\n        state: store.getState()\n      }, setters))).then(function (itemsOrDescription) {\n        return preResolve(itemsOrDescription, source.sourceId, store.getState());\n      });\n    })).then(resolve).then(function (responses) {\n      var __automaticInsights = responses.some(function (_ref2) {\n        var items = _ref2.items;\n        return isSearchResponseWithAutomaticInsightsFlag(items);\n      });\n\n      // No need to pollute the context if `__automaticInsights=false`\n      if (__automaticInsights) {\n        var _store$getState$conte;\n        setContext({\n          algoliaInsightsPlugin: _objectSpread(_objectSpread({}, ((_store$getState$conte = store.getState().context) === null || _store$getState$conte === void 0 ? void 0 : _store$getState$conte.algoliaInsightsPlugin) || {}), {}, {\n            __automaticInsights: __automaticInsights\n          })\n        });\n      }\n      return postResolve(responses, sources, store);\n    }).then(function (collections) {\n      return reshape({\n        collections: collections,\n        props: props,\n        state: store.getState()\n      });\n    });\n  }))).then(function (collections) {\n    var _nextState$isOpen2;\n    // Parameters passed to `onInput` could be stale when the following code\n    // executes, because `onInput` calls may not resolve in order.\n    // If it becomes a problem we'll need to save the last passed parameters.\n    // See: https://codesandbox.io/s/agitated-cookies-y290z\n\n    setStatus('idle');\n    setCollections(collections);\n    var isPanelOpen = props.shouldPanelOpen({\n      state: store.getState()\n    });\n    setIsOpen((_nextState$isOpen2 = nextState.isOpen) !== null && _nextState$isOpen2 !== void 0 ? _nextState$isOpen2 : props.openOnFocus && !query && isPanelOpen || isPanelOpen);\n    var highlightedItem = getActiveItem(store.getState());\n    if (store.getState().activeItemId !== null && highlightedItem) {\n      var item = highlightedItem.item,\n        itemInputValue = highlightedItem.itemInputValue,\n        itemUrl = highlightedItem.itemUrl,\n        source = highlightedItem.source;\n      source.onActive(_objectSpread({\n        event: event,\n        item: item,\n        itemInputValue: itemInputValue,\n        itemUrl: itemUrl,\n        refresh: refresh,\n        source: source,\n        state: store.getState()\n      }, setters));\n    }\n  }).finally(function () {\n    setStatus('idle');\n    if (lastStalledId) {\n      props.environment.clearTimeout(lastStalledId);\n    }\n  });\n  return store.pendingRequests.add(request);\n}\nfunction isSearchResponseWithAutomaticInsightsFlag(items) {\n  return !Array.isArray(items) && Boolean(items === null || items === void 0 ? void 0 : items._automaticInsights);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"event\", \"props\", \"refresh\", \"store\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\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 { onInput } from './onInput';\nimport { getPluginSubmitPromise, getActiveItem, getAutocompleteElementId } from './utils';\nexport function onKeyDown(_ref) {\n  var event = _ref.event,\n    props = _ref.props,\n    refresh = _ref.refresh,\n    store = _ref.store,\n    setters = _objectWithoutProperties(_ref, _excluded);\n  if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n    // eslint-disable-next-line no-inner-declarations\n    var triggerScrollIntoView = function triggerScrollIntoView() {\n      var highlightedItem = getActiveItem(store.getState());\n      var nodeItem = props.environment.document.getElementById(getAutocompleteElementId(props.id, \"item-\".concat(store.getState().activeItemId), highlightedItem === null || highlightedItem === void 0 ? void 0 : highlightedItem.source));\n      if (nodeItem) {\n        nodeItem.scrollIntoView({\n          block: 'nearest',\n          inline: 'nearest'\n        });\n      }\n    }; // eslint-disable-next-line no-inner-declarations\n    var triggerOnActive = function triggerOnActive() {\n      var highlightedItem = getActiveItem(store.getState());\n      if (store.getState().activeItemId !== null && highlightedItem) {\n        var item = highlightedItem.item,\n          itemInputValue = highlightedItem.itemInputValue,\n          itemUrl = highlightedItem.itemUrl,\n          source = highlightedItem.source;\n        source.onActive(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n      }\n    }; // Default browser behavior changes the caret placement on ArrowUp and\n    // ArrowDown.\n    event.preventDefault();\n\n    // When re-opening the panel, we need to split the logic to keep the actions\n    // synchronized as `onInput` returns a promise.\n    if (store.getState().isOpen === false && (props.openOnFocus || Boolean(store.getState().query))) {\n      onInput(_objectSpread({\n        event: event,\n        props: props,\n        query: store.getState().query,\n        refresh: refresh,\n        store: store\n      }, setters)).then(function () {\n        store.dispatch(event.key, {\n          nextActiveItemId: props.defaultActiveItemId\n        });\n        triggerOnActive();\n        // Since we rely on the DOM, we need to wait for all the micro tasks to\n        // finish (which include re-opening the panel) to make sure all the\n        // elements are available.\n        setTimeout(triggerScrollIntoView, 0);\n      });\n    } else {\n      store.dispatch(event.key, {});\n      triggerOnActive();\n      triggerScrollIntoView();\n    }\n  } else if (event.key === 'Escape') {\n    // This prevents the default browser behavior on `input[type=\"search\"]`\n    // from removing the query right away because we first want to close the\n    // panel.\n    event.preventDefault();\n    store.dispatch(event.key, null);\n\n    // Hitting the `Escape` key signals the end of a user interaction with the\n    // autocomplete. At this point, we should ignore any requests that are still\n    // pending and could reopen the panel once they resolve, because that would\n    // result in an unsolicited UI behavior.\n    store.pendingRequests.cancelAll();\n  } else if (event.key === 'Tab') {\n    store.dispatch('blur', null);\n\n    // Hitting the `Tab` key signals the end of a user interaction with the\n    // autocomplete. At this point, we should ignore any requests that are still\n    // pending and could reopen the panel once they resolve, because that would\n    // result in an unsolicited UI behavior.\n    store.pendingRequests.cancelAll();\n  } else if (event.key === 'Enter') {\n    // No active item, so we let the browser handle the native `onSubmit` form\n    // event.\n    if (store.getState().activeItemId === null || store.getState().collections.every(function (collection) {\n      return collection.items.length === 0;\n    })) {\n      var waitForSubmit = getPluginSubmitPromise(props.plugins, store.pendingRequests);\n      if (waitForSubmit !== undefined) {\n        waitForSubmit.then(store.pendingRequests.cancelAll); // Cancel the rest if timeout number is provided\n      } else if (!props.debug) {\n        // If requests are still pending when the panel closes, they could reopen\n        // the panel once they resolve.\n        // We want to prevent any subsequent query from reopening the panel\n        // because it would result in an unsolicited UI behavior.\n        store.pendingRequests.cancelAll();\n      }\n      return;\n    }\n\n    // This prevents the `onSubmit` event to be sent because an item is\n    // highlighted.\n    event.preventDefault();\n    var _ref2 = getActiveItem(store.getState()),\n      item = _ref2.item,\n      itemInputValue = _ref2.itemInputValue,\n      itemUrl = _ref2.itemUrl,\n      source = _ref2.source;\n    if (event.metaKey || event.ctrlKey) {\n      if (itemUrl !== undefined) {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n        props.navigator.navigateNewTab({\n          itemUrl: itemUrl,\n          item: item,\n          state: store.getState()\n        });\n      }\n    } else if (event.shiftKey) {\n      if (itemUrl !== undefined) {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n        props.navigator.navigateNewWindow({\n          itemUrl: itemUrl,\n          item: item,\n          state: store.getState()\n        });\n      }\n    } else if (event.altKey) {\n      // Keep native browser behavior\n    } else {\n      if (itemUrl !== undefined) {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n        props.navigator.navigate({\n          itemUrl: itemUrl,\n          item: item,\n          state: store.getState()\n        });\n        return;\n      }\n      onInput(_objectSpread({\n        event: event,\n        nextState: {\n          isOpen: false\n        },\n        props: props,\n        query: itemInputValue,\n        refresh: refresh,\n        store: store\n      }, setters)).then(function () {\n        source.onSelect(_objectSpread({\n          event: event,\n          item: item,\n          itemInputValue: itemInputValue,\n          itemUrl: itemUrl,\n          refresh: refresh,\n          source: source,\n          state: store.getState()\n        }, setters));\n      });\n    }\n  }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"props\", \"refresh\", \"store\"],\n  _excluded2 = [\"inputElement\", \"formElement\", \"panelElement\"],\n  _excluded3 = [\"inputElement\"],\n  _excluded4 = [\"inputElement\", \"maxLength\"],\n  _excluded5 = [\"source\"],\n  _excluded6 = [\"item\", \"source\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\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 { noop } from '@algolia/autocomplete-shared';\nimport { onInput } from './onInput';\nimport { onKeyDown as _onKeyDown } from './onKeyDown';\nimport { getPluginSubmitPromise, getActiveItem, getAutocompleteElementId, isOrContainsNode, isSamsung, getNativeEvent } from './utils';\nexport function getPropGetters(_ref) {\n  var props = _ref.props,\n    refresh = _ref.refresh,\n    store = _ref.store,\n    setters = _objectWithoutProperties(_ref, _excluded);\n  var getEnvironmentProps = function getEnvironmentProps(providedProps) {\n    var inputElement = providedProps.inputElement,\n      formElement = providedProps.formElement,\n      panelElement = providedProps.panelElement,\n      rest = _objectWithoutProperties(providedProps, _excluded2);\n    function onMouseDownOrTouchStart(event) {\n      // The `onTouchStart`/`onMouseDown` events shouldn't trigger the `blur`\n      // handler when it's not an interaction with Autocomplete.\n      // We detect it with the following heuristics:\n      // - the panel is closed AND there are no pending requests\n      //   (no interaction with the autocomplete, no future state updates)\n      // - OR the touched target is the input element (should open the panel)\n      var isAutocompleteInteraction = store.getState().isOpen || !store.pendingRequests.isEmpty();\n      if (!isAutocompleteInteraction || event.target === inputElement) {\n        return;\n      }\n\n      // @TODO: support cases where there are multiple Autocomplete instances.\n      // Right now, a second instance makes this computation return false.\n      var isTargetWithinAutocomplete = [formElement, panelElement].some(function (contextNode) {\n        return isOrContainsNode(contextNode, event.target);\n      });\n      if (isTargetWithinAutocomplete === false) {\n        store.dispatch('blur', null);\n\n        // If requests are still pending when the user closes the panel, they\n        // could reopen the panel once they resolve.\n        // We want to prevent any subsequent query from reopening the panel\n        // because it would result in an unsolicited UI behavior.\n        if (!props.debug) {\n          store.pendingRequests.cancelAll();\n        }\n      }\n    }\n    return _objectSpread({\n      // We do not rely on the native `blur` event of the input to close the\n      // panel, but rather on a custom `touchstart`/`mousedown` event outside\n      // of the autocomplete elements.\n      // This ensures we don't mistakenly interpret interactions within the\n      // autocomplete (but outside of the input) as a signal to close the panel.\n      // For example, clicking reset button causes an input blur, but if\n      // `openOnFocus=true`, it shouldn't close the panel.\n      // On touch devices, scrolling results (`touchmove`) causes an input blur\n      // but shouldn't close the panel.\n      onTouchStart: onMouseDownOrTouchStart,\n      onMouseDown: onMouseDownOrTouchStart,\n      // When scrolling on touch devices (mobiles, tablets, etc.), we want to\n      // mimic the native platform behavior where the input is blurred to\n      // hide the virtual keyboard. This gives more vertical space to\n      // discover all the suggestions showing up in the panel.\n      onTouchMove: function onTouchMove(event) {\n        if (store.getState().isOpen === false || inputElement !== props.environment.document.activeElement || event.target === inputElement) {\n          return;\n        }\n        inputElement.blur();\n      }\n    }, rest);\n  };\n  var getRootProps = function getRootProps(rest) {\n    return _objectSpread({\n      role: 'combobox',\n      'aria-expanded': store.getState().isOpen,\n      'aria-haspopup': 'listbox',\n      'aria-controls': store.getState().isOpen ? store.getState().collections.map(function (_ref2) {\n        var source = _ref2.source;\n        return getAutocompleteElementId(props.id, 'list', source);\n      }).join(' ') : undefined,\n      'aria-labelledby': getAutocompleteElementId(props.id, 'label')\n    }, rest);\n  };\n  var getFormProps = function getFormProps(providedProps) {\n    var inputElement = providedProps.inputElement,\n      rest = _objectWithoutProperties(providedProps, _excluded3);\n    var handleSubmit = function handleSubmit(event) {\n      var _providedProps$inputE;\n      props.onSubmit(_objectSpread({\n        event: event,\n        refresh: refresh,\n        state: store.getState()\n      }, setters));\n      store.dispatch('submit', null);\n      (_providedProps$inputE = providedProps.inputElement) === null || _providedProps$inputE === void 0 ? void 0 : _providedProps$inputE.blur();\n    };\n    return _objectSpread({\n      action: '',\n      noValidate: true,\n      role: 'search',\n      onSubmit: function onSubmit(event) {\n        event.preventDefault();\n        var waitForSubmit = getPluginSubmitPromise(props.plugins, store.pendingRequests);\n        if (waitForSubmit !== undefined) {\n          waitForSubmit.then(function () {\n            return handleSubmit(event);\n          });\n        } else {\n          handleSubmit(event);\n        }\n      },\n      onReset: function onReset(event) {\n        var _providedProps$inputE2;\n        event.preventDefault();\n        props.onReset(_objectSpread({\n          event: event,\n          refresh: refresh,\n          state: store.getState()\n        }, setters));\n        store.dispatch('reset', null);\n        (_providedProps$inputE2 = providedProps.inputElement) === null || _providedProps$inputE2 === void 0 ? void 0 : _providedProps$inputE2.focus();\n      }\n    }, rest);\n  };\n  var getInputProps = function getInputProps(providedProps) {\n    var _props$environment$na;\n    function onFocus(event) {\n      // We want to trigger a query when `openOnFocus` is true\n      // because the panel should open with the current query.\n      if (props.openOnFocus || Boolean(store.getState().query)) {\n        onInput(_objectSpread({\n          event: event,\n          props: props,\n          query: store.getState().completion || store.getState().query,\n          refresh: refresh,\n          store: store\n        }, setters));\n      }\n      store.dispatch('focus', null);\n    }\n    var _ref3 = providedProps || {},\n      inputElement = _ref3.inputElement,\n      _ref3$maxLength = _ref3.maxLength,\n      maxLength = _ref3$maxLength === void 0 ? 512 : _ref3$maxLength,\n      rest = _objectWithoutProperties(_ref3, _excluded4);\n    var activeItem = getActiveItem(store.getState());\n    var userAgent = ((_props$environment$na = props.environment.navigator) === null || _props$environment$na === void 0 ? void 0 : _props$environment$na.userAgent) || '';\n    var shouldFallbackKeyHint = isSamsung(userAgent);\n    var enterKeyHint = props.enterKeyHint || (activeItem !== null && activeItem !== void 0 && activeItem.itemUrl && !shouldFallbackKeyHint ? 'go' : 'search');\n    return _objectSpread({\n      'aria-autocomplete': 'both',\n      'aria-activedescendant': store.getState().isOpen && store.getState().activeItemId !== null ? getAutocompleteElementId(props.id, \"item-\".concat(store.getState().activeItemId), activeItem === null || activeItem === void 0 ? void 0 : activeItem.source) : undefined,\n      'aria-controls': store.getState().isOpen ? store.getState().collections.filter(function (collection) {\n        return collection.items.length > 0;\n      }).map(function (_ref4) {\n        var source = _ref4.source;\n        return getAutocompleteElementId(props.id, 'list', source);\n      }).join(' ') : undefined,\n      'aria-labelledby': getAutocompleteElementId(props.id, 'label'),\n      value: store.getState().completion || store.getState().query,\n      id: getAutocompleteElementId(props.id, 'input'),\n      autoComplete: 'off',\n      autoCorrect: 'off',\n      autoCapitalize: 'off',\n      enterKeyHint: enterKeyHint,\n      spellCheck: 'false',\n      autoFocus: props.autoFocus,\n      placeholder: props.placeholder,\n      maxLength: maxLength,\n      type: 'search',\n      onChange: function onChange(event) {\n        var value = event.currentTarget.value;\n        if (props.ignoreCompositionEvents && getNativeEvent(event).isComposing) {\n          setters.setQuery(value);\n          return;\n        }\n        onInput(_objectSpread({\n          event: event,\n          props: props,\n          query: value.slice(0, maxLength),\n          refresh: refresh,\n          store: store\n        }, setters));\n      },\n      onCompositionEnd: function onCompositionEnd(event) {\n        onInput(_objectSpread({\n          event: event,\n          props: props,\n          query: event.currentTarget.value.slice(0, maxLength),\n          refresh: refresh,\n          store: store\n        }, setters));\n      },\n      onKeyDown: function onKeyDown(event) {\n        if (getNativeEvent(event).isComposing) {\n          return;\n        }\n        _onKeyDown(_objectSpread({\n          event: event,\n          props: props,\n          refresh: refresh,\n          store: store\n        }, setters));\n      },\n      onFocus: onFocus,\n      // We don't rely on the `blur` event.\n      // See explanation in `onTouchStart`/`onMouseDown`.\n      // @MAJOR See if we need to keep this handler.\n      onBlur: noop,\n      onClick: function onClick(event) {\n        // When the panel is closed and you click on the input while\n        // the input is focused, the `onFocus` event is not triggered\n        // (default browser behavior).\n        // In an autocomplete context, it makes sense to open the panel in this\n        // case.\n        // We mimic this event by catching the `onClick` event which\n        // triggers the `onFocus` for the panel to open.\n        if (providedProps.inputElement === props.environment.document.activeElement && !store.getState().isOpen) {\n          onFocus(event);\n        }\n      }\n    }, rest);\n  };\n  var getLabelProps = function getLabelProps(rest) {\n    return _objectSpread({\n      htmlFor: getAutocompleteElementId(props.id, 'input'),\n      id: getAutocompleteElementId(props.id, 'label')\n    }, rest);\n  };\n  var getListProps = function getListProps(providedProps) {\n    var _ref5 = providedProps || {},\n      source = _ref5.source,\n      rest = _objectWithoutProperties(_ref5, _excluded5);\n    return _objectSpread({\n      role: 'listbox',\n      'aria-labelledby': getAutocompleteElementId(props.id, 'label'),\n      id: getAutocompleteElementId(props.id, 'list', source)\n    }, rest);\n  };\n  var getPanelProps = function getPanelProps(rest) {\n    return _objectSpread({\n      onMouseDown: function onMouseDown(event) {\n        // Prevents the `activeElement` from being changed to the panel so\n        // that the blur event is not triggered, otherwise it closes the\n        // panel.\n        event.preventDefault();\n      },\n      onMouseLeave: function onMouseLeave() {\n        store.dispatch('mouseleave', null);\n      }\n    }, rest);\n  };\n  var getItemProps = function getItemProps(providedProps) {\n    var item = providedProps.item,\n      source = providedProps.source,\n      rest = _objectWithoutProperties(providedProps, _excluded6);\n    return _objectSpread({\n      id: getAutocompleteElementId(props.id, \"item-\".concat(item.__autocomplete_id), source),\n      role: 'option',\n      'aria-selected': store.getState().activeItemId === item.__autocomplete_id,\n      onMouseMove: function onMouseMove(event) {\n        if (item.__autocomplete_id === store.getState().activeItemId) {\n          return;\n        }\n        store.dispatch('mousemove', item.__autocomplete_id);\n        var activeItem = getActiveItem(store.getState());\n        if (store.getState().activeItemId !== null && activeItem) {\n          var _item = activeItem.item,\n            itemInputValue = activeItem.itemInputValue,\n            itemUrl = activeItem.itemUrl,\n            _source = activeItem.source;\n          _source.onActive(_objectSpread({\n            event: event,\n            item: _item,\n            itemInputValue: itemInputValue,\n            itemUrl: itemUrl,\n            refresh: refresh,\n            source: _source,\n            state: store.getState()\n          }, setters));\n        }\n      },\n      onMouseDown: function onMouseDown(event) {\n        // Prevents the `activeElement` from being changed to the item so it\n        // can remain with the current `activeElement`.\n        event.preventDefault();\n      },\n      onClick: function onClick(event) {\n        var itemInputValue = source.getItemInputValue({\n          item: item,\n          state: store.getState()\n        });\n        var itemUrl = source.getItemUrl({\n          item: item,\n          state: store.getState()\n        });\n\n        // If `getItemUrl` is provided, it means that the suggestion\n        // is a link, not plain text that aims at updating the query.\n        // We can therefore skip the state change because it will update\n        // the `activeItemId`, resulting in a UI flash, especially\n        // noticeable on mobile.\n        var runPreCommand = itemUrl ? Promise.resolve() : onInput(_objectSpread({\n          event: event,\n          nextState: {\n            isOpen: false\n          },\n          props: props,\n          query: itemInputValue,\n          refresh: refresh,\n          store: store\n        }, setters));\n        runPreCommand.then(function () {\n          source.onSelect(_objectSpread({\n            event: event,\n            item: item,\n            itemInputValue: itemInputValue,\n            itemUrl: itemUrl,\n            refresh: refresh,\n            source: source,\n            state: store.getState()\n          }, setters));\n        });\n      }\n    }, rest);\n  };\n  return {\n    getEnvironmentProps: getEnvironmentProps,\n    getRootProps: getRootProps,\n    getFormProps: getFormProps,\n    getLabelProps: getLabelProps,\n    getInputProps: getInputProps,\n    getPanelProps: getPanelProps,\n    getListProps: getListProps,\n    getItemProps: getItemProps\n  };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { userAgents } from '@algolia/autocomplete-shared';\nexport function getMetadata(_ref) {\n  var _, _options$__autocomple, _options$__autocomple2, _options$__autocomple3;\n  var plugins = _ref.plugins,\n    options = _ref.options;\n  var optionsKey = (_ = (((_options$__autocomple = options.__autocomplete_metadata) === null || _options$__autocomple === void 0 ? void 0 : _options$__autocomple.userAgents) || [])[0]) === null || _ === void 0 ? void 0 : _.segment;\n  var extraOptions = optionsKey ? _defineProperty({}, optionsKey, Object.keys(((_options$__autocomple2 = options.__autocomplete_metadata) === null || _options$__autocomple2 === void 0 ? void 0 : _options$__autocomple2.options) || {})) : {};\n  return {\n    plugins: plugins.map(function (plugin) {\n      return {\n        name: plugin.name,\n        options: Object.keys(plugin.__autocomplete_pluginOptions || [])\n      };\n    }),\n    options: _objectSpread({\n      'autocomplete-core': Object.keys(options)\n    }, extraOptions),\n    ua: userAgents.concat(((_options$__autocomple3 = options.__autocomplete_metadata) === null || _options$__autocomple3 === void 0 ? void 0 : _options$__autocomple3.userAgents) || [])\n  };\n}\nexport function injectMetadata(_ref3) {\n  var _environment$navigato, _environment$navigato2;\n  var metadata = _ref3.metadata,\n    environment = _ref3.environment;\n  var isMetadataEnabled = (_environment$navigato = environment.navigator) === null || _environment$navigato === void 0 ? void 0 : (_environment$navigato2 = _environment$navigato.userAgent) === null || _environment$navigato2 === void 0 ? void 0 : _environment$navigato2.includes('Algolia Crawler');\n  if (isMetadataEnabled) {\n    var metadataContainer = environment.document.createElement('meta');\n    var headRef = environment.document.querySelector('head');\n    metadataContainer.name = 'algolia:metadata';\n    setTimeout(function () {\n      metadataContainer.content = JSON.stringify(metadata);\n      headRef.appendChild(metadataContainer);\n    }, 0);\n  }\n}","import { getActiveItem } from './utils';\nexport function getCompletion(_ref) {\n  var _getActiveItem;\n  var state = _ref.state;\n  if (state.isOpen === false || state.activeItemId === null) {\n    return null;\n  }\n  return ((_getActiveItem = getActiveItem(state)) === null || _getActiveItem === void 0 ? void 0 : _getActiveItem.itemInputValue) || null;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getItemsCount, invariant } from '@algolia/autocomplete-shared';\nimport { getCompletion } from './getCompletion';\nimport { getNextActiveItemId } from './utils';\nexport var stateReducer = function stateReducer(state, action) {\n  switch (action.type) {\n    case 'setActiveItemId':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.payload\n        });\n      }\n    case 'setQuery':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          query: action.payload,\n          completion: null\n        });\n      }\n    case 'setCollections':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          collections: action.payload\n        });\n      }\n    case 'setIsOpen':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          isOpen: action.payload\n        });\n      }\n    case 'setStatus':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          status: action.payload\n        });\n      }\n    case 'setContext':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          context: _objectSpread(_objectSpread({}, state.context), action.payload)\n        });\n      }\n    case 'ArrowDown':\n      {\n        var nextState = _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n        });\n        return _objectSpread(_objectSpread({}, nextState), {}, {\n          completion: getCompletion({\n            state: nextState\n          })\n        });\n      }\n    case 'ArrowUp':\n      {\n        var _nextState = _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: getNextActiveItemId(-1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n        });\n        return _objectSpread(_objectSpread({}, _nextState), {}, {\n          completion: getCompletion({\n            state: _nextState\n          })\n        });\n      }\n    case 'Escape':\n      {\n        if (state.isOpen) {\n          return _objectSpread(_objectSpread({}, state), {}, {\n            activeItemId: null,\n            isOpen: false,\n            completion: null\n          });\n        }\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: null,\n          query: '',\n          status: 'idle',\n          collections: []\n        });\n      }\n    case 'submit':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: null,\n          isOpen: false,\n          status: 'idle'\n        });\n      }\n    case 'reset':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId:\n          // Since we open the panel on reset when openOnFocus=true\n          // we need to restore the highlighted index to the defaultActiveItemId. (DocSearch use-case)\n\n          // Since we close the panel when openOnFocus=false\n          // we lose track of the highlighted index. (Query-suggestions use-case)\n          action.props.openOnFocus === true ? action.props.defaultActiveItemId : null,\n          status: 'idle',\n          completion: null,\n          query: ''\n        });\n      }\n    case 'focus':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.props.defaultActiveItemId,\n          isOpen: (action.props.openOnFocus || Boolean(state.query)) && action.props.shouldPanelOpen({\n            state: state\n          })\n        });\n      }\n    case 'blur':\n      {\n        if (action.props.debug) {\n          return state;\n        }\n        return _objectSpread(_objectSpread({}, state), {}, {\n          isOpen: false,\n          activeItemId: null\n        });\n      }\n    case 'mousemove':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.payload\n        });\n      }\n    case 'mouseleave':\n      {\n        return _objectSpread(_objectSpread({}, state), {}, {\n          activeItemId: action.props.defaultActiveItemId\n        });\n      }\n    default:\n      invariant(false, \"The reducer action \".concat(JSON.stringify(action.type), \" is not supported.\"));\n      return state;\n  }\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createAlgoliaInsightsPlugin } from '@algolia/autocomplete-plugin-algolia-insights';\nimport { checkOptions } from './checkOptions';\nimport { createStore } from './createStore';\nimport { getAutocompleteSetters } from './getAutocompleteSetters';\nimport { getDefaultProps } from './getDefaultProps';\nimport { getPropGetters } from './getPropGetters';\nimport { getMetadata, injectMetadata } from './metadata';\nimport { onInput } from './onInput';\nimport { stateReducer } from './stateReducer';\nexport function createAutocomplete(options) {\n  checkOptions(options);\n  var subscribers = [];\n  var props = getDefaultProps(options, subscribers);\n  var store = createStore(stateReducer, props, onStoreStateChange);\n  var setters = getAutocompleteSetters({\n    store: store\n  });\n  var propGetters = getPropGetters(_objectSpread({\n    props: props,\n    refresh: refresh,\n    store: store,\n    navigator: props.navigator\n  }, setters));\n  function onStoreStateChange(_ref) {\n    var _state$context, _state$context$algoli;\n    var prevState = _ref.prevState,\n      state = _ref.state;\n    props.onStateChange(_objectSpread({\n      prevState: prevState,\n      state: state,\n      refresh: refresh,\n      navigator: props.navigator\n    }, setters));\n    if (!isAlgoliaInsightsPluginEnabled() && (_state$context = state.context) !== null && _state$context !== void 0 && (_state$context$algoli = _state$context.algoliaInsightsPlugin) !== null && _state$context$algoli !== void 0 && _state$context$algoli.__automaticInsights && props.insights !== false) {\n      var plugin = createAlgoliaInsightsPlugin({\n        __autocomplete_clickAnalytics: false\n      });\n      props.plugins.push(plugin);\n      subscribePlugins([plugin]);\n    }\n  }\n  function refresh() {\n    return onInput(_objectSpread({\n      event: new Event('input'),\n      nextState: {\n        isOpen: store.getState().isOpen\n      },\n      props: props,\n      navigator: props.navigator,\n      query: store.getState().query,\n      refresh: refresh,\n      store: store\n    }, setters));\n  }\n  function subscribePlugins(plugins) {\n    plugins.forEach(function (plugin) {\n      var _plugin$subscribe;\n      return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread(_objectSpread({}, setters), {}, {\n        navigator: props.navigator,\n        refresh: refresh,\n        onSelect: function onSelect(fn) {\n          subscribers.push({\n            onSelect: fn\n          });\n        },\n        onActive: function onActive(fn) {\n          subscribers.push({\n            onActive: fn\n          });\n        },\n        onResolve: function onResolve(fn) {\n          subscribers.push({\n            onResolve: fn\n          });\n        }\n      }));\n    });\n  }\n  function isAlgoliaInsightsPluginEnabled() {\n    return props.plugins.some(function (plugin) {\n      return plugin.name === 'aa.algoliaInsightsPlugin';\n    });\n  }\n  if (props.insights && !isAlgoliaInsightsPluginEnabled()) {\n    var insightsParams = typeof props.insights === 'boolean' ? {} : props.insights;\n    props.plugins.push(createAlgoliaInsightsPlugin(insightsParams));\n  }\n  subscribePlugins(props.plugins);\n  injectMetadata({\n    metadata: getMetadata({\n      plugins: props.plugins,\n      options: options\n    }),\n    environment: props.environment\n  });\n  return _objectSpread(_objectSpread({\n    refresh: refresh,\n    navigator: props.navigator\n  }, propGetters), setters);\n}","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+\"\":p?(u=t.apply(a,n(t,a,r,[\"\",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a)}return e},t=new Map;export default function(s){var r=t.get(this);return r||(r=new Map,t.set(this,r)),(r=n(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e=\"\",u=\"\",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&\"...\"===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?\"<\"===t?(p(),h=[h],r=3):e+=t:4===r?\"--\"===e&&\">\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","export var ClearIcon = function ClearIcon(_ref) {\n  var environment = _ref.environment;\n  var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  element.setAttribute('class', 'aa-ClearIcon');\n  element.setAttribute('viewBox', '0 0 24 24');\n  element.setAttribute('width', '18');\n  element.setAttribute('height', '18');\n  element.setAttribute('fill', 'currentColor');\n  var path = environment.document.createElementNS('http://www.w3.org/2000/svg', 'path');\n  path.setAttribute('d', 'M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z');\n  element.appendChild(path);\n  return element;\n};","import { invariant } from '@algolia/autocomplete-shared';\nexport function getHTMLElement(environment, value) {\n  if (typeof value === 'string') {\n    var element = environment.document.querySelector(value);\n    invariant(element !== null, \"The element \".concat(JSON.stringify(value), \" is not in the document.\"));\n    return element;\n  }\n  return value;\n}","export function mergeClassNames() {\n  for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n    values[_key] = arguments[_key];\n  }\n  return values.reduce(function (acc, current) {\n    Object.keys(current).forEach(function (key) {\n      var accValue = acc[key];\n      var currentValue = current[key];\n      if (accValue !== currentValue) {\n        acc[key] = [accValue, currentValue].filter(Boolean).join(' ');\n      }\n    });\n    return acc;\n  }, {});\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar isPlainObject = function isPlainObject(value) {\n  return value && _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Object]';\n};\nexport function mergeDeep() {\n  for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n    values[_key] = arguments[_key];\n  }\n  return values.reduce(function (acc, current) {\n    Object.keys(current).forEach(function (key) {\n      var accValue = acc[key];\n      var currentValue = current[key];\n      if (Array.isArray(accValue) && Array.isArray(currentValue)) {\n        acc[key] = accValue.concat.apply(accValue, _toConsumableArray(currentValue));\n      } else if (isPlainObject(accValue) && isPlainObject(currentValue)) {\n        acc[key] = mergeDeep(accValue, currentValue);\n      } else {\n        acc[key] = currentValue;\n      }\n    });\n    return acc;\n  }, {});\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\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; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nexport function pickBy(obj, predicate) {\n  return Object.entries(obj).reduce(function (acc, _ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n      key = _ref2[0],\n      value = _ref2[1];\n    if (predicate({\n      key: key,\n      value: value\n    })) {\n      return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, value));\n    }\n    return acc;\n  }, {});\n}","/* eslint-disable */\n\n/**\n * Touch-specific event aliases\n *\n * See https://w3c.github.io/touch-events/#extensions-to-the-globaleventhandlers-mixin\n */\nvar TOUCH_EVENTS_ALIASES = ['ontouchstart', 'ontouchend', 'ontouchmove', 'ontouchcancel'];\n\n/*\n * Taken from Preact\n *\n * See https://github.com/preactjs/preact/blob/6ab49d9020740127577bf4af66bf63f4af7f9fee/src/diff/props.js#L58-L151\n */\n\nfunction setStyle(style, key, value) {\n  if (value === null) {\n    style[key] = '';\n  } else if (typeof value !== 'number') {\n    style[key] = value;\n  } else {\n    style[key] = value + 'px';\n  }\n}\n\n/**\n * Proxy an event to hooked event handlers\n */\nfunction eventProxy(event) {\n  var _this$_listeners;\n  this === null || this === void 0 ? void 0 : (_this$_listeners = this._listeners) === null || _this$_listeners === void 0 ? void 0 : _this$_listeners[event.type](event);\n}\n\n/**\n * Set a property value on a DOM node\n */\nexport function setProperty(dom, name, value) {\n  var useCapture;\n  var nameLower;\n  var oldValue = dom[name];\n  if (name === 'style') {\n    if (typeof value == 'string') {\n      dom.style = value;\n    } else {\n      if (value === null) {\n        dom.style = '';\n      } else {\n        for (name in value) {\n          if (!oldValue || value[name] !== oldValue[name]) {\n            setStyle(dom.style, name, value[name]);\n          }\n        }\n      }\n    }\n  }\n  // Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n  else if (name[0] === 'o' && name[1] === 'n') {\n    useCapture = name !== (name = name.replace(/Capture$/, ''));\n    nameLower = name.toLowerCase();\n    if (nameLower in dom || TOUCH_EVENTS_ALIASES.includes(nameLower)) name = nameLower;\n    name = name.slice(2);\n    if (!dom._listeners) dom._listeners = {};\n    dom._listeners[name] = value;\n    if (value) {\n      if (!oldValue) dom.addEventListener(name, eventProxy, useCapture);\n    } else {\n      dom.removeEventListener(name, eventProxy, useCapture);\n    }\n  } else if (name !== 'list' && name !== 'tagName' &&\n  // HTMLButtonElement.form and HTMLInputElement.form are read-only but can be set using\n  // setAttribute\n  name !== 'form' && name !== 'type' && name !== 'size' && name !== 'download' && name !== 'href' && name in dom) {\n    dom[name] = value == null ? '' : value;\n  } else if (typeof value != 'function' && name !== 'dangerouslySetInnerHTML') {\n    if (value == null || value === false &&\n    // ARIA-attributes have a different notion of boolean values.\n    // The value `false` is different from the attribute not\n    // existing on the DOM, so we can't remove it. For non-boolean\n    // ARIA-attributes we could treat false as a removal, but the\n    // amount of exceptions would cost us too many bytes. On top of\n    // that other VDOM frameworks also always stringify `false`.\n    !/^ar/.test(name)) {\n      dom.removeAttribute(name);\n    } else {\n      dom.setAttribute(name, value);\n    }\n  }\n}\nfunction getNormalizedName(name) {\n  switch (name) {\n    case 'onChange':\n      return 'onInput';\n    // see: https://github.com/preactjs/preact/issues/1978\n    case 'onCompositionEnd':\n      return 'oncompositionend';\n    default:\n      return name;\n  }\n}\nexport function setProperties(dom, props) {\n  for (var name in props) {\n    setProperty(dom, getNormalizedName(name), props[name]);\n  }\n}\nexport function setPropertiesWithoutEvents(dom, props) {\n  for (var name in props) {\n    if (!(name[0] === 'o' && name[1] === 'n')) {\n      setProperty(dom, getNormalizedName(name), props[name]);\n    }\n  }\n}","var _excluded = [\"children\"];\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\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 { setProperties } from './utils';\nexport function getCreateDomElement(environment) {\n  return function createDomElement(tagName, _ref) {\n    var _ref$children = _ref.children,\n      children = _ref$children === void 0 ? [] : _ref$children,\n      props = _objectWithoutProperties(_ref, _excluded);\n    var element = environment.document.createElement(tagName);\n    setProperties(element, props);\n    element.append.apply(element, _toConsumableArray(children));\n    return element;\n  };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"autocompleteScopeApi\", \"environment\", \"classNames\", \"getInputProps\", \"getInputPropsCore\", \"isDetached\", \"state\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\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 { getCreateDomElement } from '../getCreateDomElement';\nimport { setProperties } from '../utils';\nexport var Input = function Input(_ref) {\n  var autocompleteScopeApi = _ref.autocompleteScopeApi,\n    environment = _ref.environment,\n    classNames = _ref.classNames,\n    getInputProps = _ref.getInputProps,\n    getInputPropsCore = _ref.getInputPropsCore,\n    isDetached = _ref.isDetached,\n    state = _ref.state,\n    props = _objectWithoutProperties(_ref, _excluded);\n  var createDomElement = getCreateDomElement(environment);\n  var element = createDomElement('input', props);\n  var inputProps = getInputProps(_objectSpread({\n    state: state,\n    props: getInputPropsCore({\n      inputElement: element\n    }),\n    inputElement: element\n  }, autocompleteScopeApi));\n  setProperties(element, _objectSpread(_objectSpread({}, inputProps), {}, {\n    onKeyDown: function onKeyDown(event) {\n      // In detached mode we don't want to close the panel when hitting `Tab`.\n      if (isDetached && event.key === 'Tab') {\n        return;\n      }\n      inputProps.onKeyDown(event);\n    }\n  }));\n  return element;\n};","export var LoadingIcon = function LoadingIcon(_ref) {\n  var environment = _ref.environment;\n  var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  element.setAttribute('class', 'aa-LoadingIcon');\n  element.setAttribute('viewBox', '0 0 100 100');\n  element.setAttribute('width', '20');\n  element.setAttribute('height', '20');\n  element.innerHTML = \"<circle\\n  cx=\\\"50\\\"\\n  cy=\\\"50\\\"\\n  fill=\\\"none\\\"\\n  r=\\\"35\\\"\\n  stroke=\\\"currentColor\\\"\\n  stroke-dasharray=\\\"164.93361431346415 56.97787143782138\\\"\\n  stroke-width=\\\"6\\\"\\n>\\n  <animateTransform\\n    attributeName=\\\"transform\\\"\\n    type=\\\"rotate\\\"\\n    repeatCount=\\\"indefinite\\\"\\n    dur=\\\"1s\\\"\\n    values=\\\"0 50 50;90 50 50;180 50 50;360 50 50\\\"\\n    keyTimes=\\\"0;0.40;0.65;1\\\"\\n  />\\n</circle>\";\n  var pauseAnimations = function pauseAnimations() {\n    // Wait until the element is in the DOM.\n    if (!element.parentElement) {\n      setTimeout(pauseAnimations, 0);\n      return;\n    }\n    element.pauseAnimations();\n  };\n  if ('pauseAnimations' in element) {\n    pauseAnimations();\n  }\n  return element;\n};","export var SearchIcon = function SearchIcon(_ref) {\n  var environment = _ref.environment;\n  var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  element.setAttribute('class', 'aa-SubmitIcon');\n  element.setAttribute('viewBox', '0 0 24 24');\n  element.setAttribute('width', '20');\n  element.setAttribute('height', '20');\n  element.setAttribute('fill', 'currentColor');\n  var path = environment.document.createElementNS('http://www.w3.org/2000/svg', 'path');\n  path.setAttribute('d', 'M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z');\n  element.appendChild(path);\n  return element;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { ClearIcon, Input, LoadingIcon, SearchIcon } from './elements';\nimport { getCreateDomElement } from './getCreateDomElement';\nimport { setProperties } from './utils';\nexport function createAutocompleteDom(_ref) {\n  var autocomplete = _ref.autocomplete,\n    autocompleteScopeApi = _ref.autocompleteScopeApi,\n    classNames = _ref.classNames,\n    environment = _ref.environment,\n    isDetached = _ref.isDetached,\n    _ref$placeholder = _ref.placeholder,\n    placeholder = _ref$placeholder === void 0 ? 'Search' : _ref$placeholder,\n    propGetters = _ref.propGetters,\n    setIsModalOpen = _ref.setIsModalOpen,\n    state = _ref.state,\n    translations = _ref.translations;\n  var createDomElement = getCreateDomElement(environment);\n  var rootProps = propGetters.getRootProps(_objectSpread({\n    state: state,\n    props: autocomplete.getRootProps({})\n  }, autocompleteScopeApi));\n  var root = createDomElement('div', _objectSpread({\n    class: classNames.root\n  }, rootProps));\n  var detachedContainer = createDomElement('div', {\n    class: classNames.detachedContainer,\n    onMouseDown: function onMouseDown(event) {\n      event.stopPropagation();\n    }\n  });\n  var detachedOverlay = createDomElement('div', {\n    class: classNames.detachedOverlay,\n    children: [detachedContainer],\n    onMouseDown: function onMouseDown() {\n      setIsModalOpen(false);\n      autocomplete.setIsOpen(false);\n    }\n  });\n  var labelProps = propGetters.getLabelProps(_objectSpread({\n    state: state,\n    props: autocomplete.getLabelProps({})\n  }, autocompleteScopeApi));\n  var submitButton = createDomElement('button', {\n    class: classNames.submitButton,\n    type: 'submit',\n    title: translations.submitButtonTitle,\n    children: [SearchIcon({\n      environment: environment\n    })]\n  });\n  // @MAJOR Remove the label wrapper for the submit button.\n  // The submit button is sufficient for accessibility purposes, and\n  // wrapping it with the label actually makes it less accessible (see CR-6077).\n  var label = createDomElement('label', _objectSpread({\n    class: classNames.label,\n    children: [submitButton],\n    ariaLabel: translations.submitButtonTitle\n  }, labelProps));\n  var clearButton = createDomElement('button', {\n    class: classNames.clearButton,\n    type: 'reset',\n    title: translations.clearButtonTitle,\n    children: [ClearIcon({\n      environment: environment\n    })]\n  });\n  var loadingIndicator = createDomElement('div', {\n    class: classNames.loadingIndicator,\n    children: [LoadingIcon({\n      environment: environment\n    })]\n  });\n  var input = Input({\n    class: classNames.input,\n    environment: environment,\n    state: state,\n    getInputProps: propGetters.getInputProps,\n    getInputPropsCore: autocomplete.getInputProps,\n    autocompleteScopeApi: autocompleteScopeApi,\n    isDetached: isDetached\n  });\n  var inputWrapperPrefix = createDomElement('div', {\n    class: classNames.inputWrapperPrefix,\n    children: [label, loadingIndicator]\n  });\n  var inputWrapperSuffix = createDomElement('div', {\n    class: classNames.inputWrapperSuffix,\n    children: [clearButton]\n  });\n  var inputWrapper = createDomElement('div', {\n    class: classNames.inputWrapper,\n    children: [input]\n  });\n  var formProps = propGetters.getFormProps(_objectSpread({\n    state: state,\n    props: autocomplete.getFormProps({\n      inputElement: input\n    })\n  }, autocompleteScopeApi));\n  var form = createDomElement('form', _objectSpread({\n    class: classNames.form,\n    children: [inputWrapperPrefix, inputWrapper, inputWrapperSuffix]\n  }, formProps));\n  var panelProps = propGetters.getPanelProps(_objectSpread({\n    state: state,\n    props: autocomplete.getPanelProps({})\n  }, autocompleteScopeApi));\n  var panel = createDomElement('div', _objectSpread({\n    class: classNames.panel\n  }, panelProps));\n  var detachedSearchButtonQuery = createDomElement('div', {\n    class: classNames.detachedSearchButtonQuery,\n    textContent: state.query\n  });\n  var detachedSearchButtonPlaceholder = createDomElement('div', {\n    class: classNames.detachedSearchButtonPlaceholder,\n    hidden: Boolean(state.query),\n    textContent: placeholder\n  });\n  if (process.env.NODE_ENV === 'test') {\n    setProperties(panel, {\n      'data-testid': 'panel'\n    });\n  }\n  if (isDetached) {\n    var detachedSearchButtonIcon = createDomElement('div', {\n      class: classNames.detachedSearchButtonIcon,\n      ariaLabel: translations.detachedSearchButtonTitle,\n      children: [SearchIcon({\n        environment: environment\n      })]\n    });\n    var detachedSearchButton = createDomElement('button', {\n      type: 'button',\n      class: classNames.detachedSearchButton,\n      title: translations.detachedSearchButtonTitle,\n      id: labelProps.id,\n      onClick: function onClick() {\n        setIsModalOpen(true);\n      },\n      children: [detachedSearchButtonIcon, detachedSearchButtonPlaceholder, detachedSearchButtonQuery]\n    });\n    var detachedCancelButton = createDomElement('button', {\n      type: 'button',\n      class: classNames.detachedCancelButton,\n      textContent: translations.detachedCancelButtonText,\n      // Prevent `onTouchStart` from closing the panel\n      // since it should be initiated by `onClick` only\n      onTouchStart: function onTouchStart(event) {\n        event.stopPropagation();\n      },\n      onClick: function onClick() {\n        autocomplete.setIsOpen(false);\n        setIsModalOpen(false);\n      }\n    });\n    var detachedFormContainer = createDomElement('div', {\n      class: classNames.detachedFormContainer,\n      children: [form, detachedCancelButton]\n    });\n    detachedContainer.appendChild(detachedFormContainer);\n    root.appendChild(detachedSearchButton);\n  } else {\n    root.appendChild(form);\n  }\n  return {\n    detachedContainer: detachedContainer,\n    detachedOverlay: detachedOverlay,\n    detachedSearchButtonQuery: detachedSearchButtonQuery,\n    detachedSearchButtonPlaceholder: detachedSearchButtonPlaceholder,\n    inputWrapper: inputWrapper,\n    input: input,\n    root: root,\n    form: form,\n    label: label,\n    submitButton: submitButton,\n    clearButton: clearButton,\n    loadingIndicator: loadingIndicator,\n    panel: panel\n  };\n}","export function createEffectWrapper() {\n  var effects = [];\n  var cleanups = [];\n  function runEffect(fn) {\n    effects.push(fn);\n    var effectCleanup = fn();\n    cleanups.push(effectCleanup);\n  }\n  return {\n    runEffect: runEffect,\n    cleanupEffects: function cleanupEffects() {\n      var currentCleanups = cleanups;\n      cleanups = [];\n      currentCleanups.forEach(function (cleanup) {\n        cleanup();\n      });\n    },\n    runEffects: function runEffects() {\n      var currentEffects = effects;\n      effects = [];\n      currentEffects.forEach(function (effect) {\n        runEffect(effect);\n      });\n    }\n  };\n}","export function createReactiveWrapper() {\n  var reactives = [];\n  return {\n    reactive: function reactive(value) {\n      var current = value();\n      var reactive = {\n        _fn: value,\n        _ref: {\n          current: current\n        },\n        get value() {\n          return this._ref.current;\n        },\n        set value(value) {\n          this._ref.current = value;\n        }\n      };\n      reactives.push(reactive);\n      return reactive;\n    },\n    runReactives: function runReactives() {\n      reactives.forEach(function (value) {\n        value._ref.current = value._fn();\n      });\n    }\n  };\n}","var n,l,u,t,i,o,r,f,e,c={},s=[],a=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,h=Array.isArray;function v(n,l){for(var u in l)n[u]=l[u];return n}function p(n){var l=n.parentNode;l&&l.removeChild(n)}function y(l,u,t){var i,o,r,f={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return d(l,f,i,o,null)}function d(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++u:r};return null==r&&null!=l.vnode&&l.vnode(f),f}function _(){return{current:null}}function k(n){return n.children}function b(n,l){this.props=n,this.context=l}function g(n,l){if(null==l)return n.__?g(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?g(n):null}function m(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return m(n)}}function w(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!x.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r)(x)}function x(){var n,l,u,t,o,r,e,c,s;for(i.sort(f);n=i.shift();)n.__d&&(l=i.length,t=void 0,o=void 0,r=void 0,c=(e=(u=n).__v).__e,(s=u.__P)&&(t=[],o=[],(r=v({},e)).__v=e.__v+1,L(s,e,r,u.__n,void 0!==s.ownerSVGElement,null!=e.__h?[c]:null,t,null==c?g(e):c,e.__h,o),M(t,e,o),e.__e!=c&&m(e)),i.length>l&&i.sort(f));x.__r=0}function P(n,l,u,t,i,o,r,f,e,a,v){var p,y,_,b,m,w,x,P,S,H=0,I=t&&t.__k||s,T=I.length,j=T,z=l.length;for(u.__k=[],p=0;p<z;p++)null!=(b=u.__k[p]=null==(b=l[p])||\"boolean\"==typeof b||\"function\"==typeof b?null:\"string\"==typeof b||\"number\"==typeof b||\"bigint\"==typeof b?d(null,b,null,null,b):h(b)?d(k,{children:b},null,null,null):b.__b>0?d(b.type,b.props,b.key,b.ref?b.ref:null,b.__v):b)?(b.__=u,b.__b=u.__b+1,-1===(P=A(b,I,x=p+H,j))?_=c:(_=I[P]||c,I[P]=void 0,j--),L(n,b,_,i,o,r,f,e,a,v),m=b.__e,(y=b.ref)&&_.ref!=y&&(_.ref&&O(_.ref,null,b),v.push(y,b.__c||m,b)),null!=m&&(null==w&&(w=m),(S=_===c||null===_.__v)?-1==P&&H--:P!==x&&(P===x+1?H++:P>x?j>z-x?H+=P-x:H--:H=P<x&&P==x-1?P-x:0),x=p+H,\"function\"!=typeof b.type||P===x&&_.__k!==b.__k?\"function\"==typeof b.type||P===x&&!S?void 0!==b.__d?(e=b.__d,b.__d=void 0):e=m.nextSibling:e=$(n,m,e):e=C(b,e,n),\"function\"==typeof u.type&&(u.__d=e))):(_=I[p])&&null==_.key&&_.__e&&(_.__e==e&&(e=g(_)),q(_,_,!1));for(u.__e=w,p=T;p--;)null!=I[p]&&(\"function\"==typeof u.type&&null!=I[p].__e&&I[p].__e==u.__d&&(u.__d=I[p].__e.nextSibling),q(I[p],I[p]))}function C(n,l,u){for(var t,i=n.__k,o=0;i&&o<i.length;o++)(t=i[o])&&(t.__=n,l=\"function\"==typeof t.type?C(t,l,u):$(u,t.__e,l));return l}function S(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(h(n)?n.some(function(n){S(n,l)}):l.push(n)),l}function $(n,l,u){return null==u||u.parentNode!==n?n.insertBefore(l,null):l==u&&null!=l.parentNode||n.insertBefore(l,u),l.nextSibling}function A(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type)return u;if(t>(null!=e?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&i==e.key&&o===e.type)return r;r--}if(f<l.length){if((e=l[f])&&i==e.key&&o===e.type)return f;f++}}return-1}function H(n,l,u,t,i){var o;for(o in u)\"children\"===o||\"key\"===o||o in l||T(n,o,null,u[o],t);for(o in l)i&&\"function\"!=typeof l[o]||\"children\"===o||\"key\"===o||\"value\"===o||\"checked\"===o||u[o]===l[o]||T(n,o,l[o],u[o],t)}function I(n,l,u){\"-\"===l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||a.test(l)?u:u+\"px\"}function T(n,l,u,t,i){var o;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||I(n.style,l,\"\");if(u)for(l in u)t&&u[l]===t[l]||I(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])o=l!==(l=l.replace(/Capture$/,\"\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t||n.addEventListener(l,o?z:j,o):n.removeEventListener(l,o?z:j,o);else if(\"dangerouslySetInnerHTML\"!==l){if(i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!==l&&\"height\"!==l&&\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&\"rowSpan\"!==l&&\"colSpan\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!==l[4]?n.removeAttribute(l):n.setAttribute(l,u))}}function j(n){return this.l[n.type+!1](l.event?l.event(n):n)}function z(n){return this.l[n.type+!0](l.event?l.event(n):n)}function L(n,u,t,i,o,r,f,e,c,s){var a,p,y,d,_,g,m,w,x,C,S,$,A,H,I,T=u.type;if(void 0!==u.constructor)return null;null!=t.__h&&(c=t.__h,e=u.__e=t.__e,u.__h=null,r=[e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof T)try{if(w=u.props,x=(a=T.contextType)&&i[a.__c],C=a?x?x.props.value:a.__:i,t.__c?m=(p=u.__c=t.__c).__=p.__E:(\"prototype\"in T&&T.prototype.render?u.__c=p=new T(w,C):(u.__c=p=new b(w,C),p.constructor=T,p.render=B),x&&x.sub(p),p.props=w,p.state||(p.state={}),p.context=C,p.__n=i,y=p.__d=!0,p.__h=[],p._sb=[]),null==p.__s&&(p.__s=p.state),null!=T.getDerivedStateFromProps&&(p.__s==p.state&&(p.__s=v({},p.__s)),v(p.__s,T.getDerivedStateFromProps(w,p.__s))),d=p.props,_=p.state,p.__v=u,y)null==T.getDerivedStateFromProps&&null!=p.componentWillMount&&p.componentWillMount(),null!=p.componentDidMount&&p.__h.push(p.componentDidMount);else{if(null==T.getDerivedStateFromProps&&w!==d&&null!=p.componentWillReceiveProps&&p.componentWillReceiveProps(w,C),!p.__e&&(null!=p.shouldComponentUpdate&&!1===p.shouldComponentUpdate(w,p.__s,C)||u.__v===t.__v)){for(u.__v!==t.__v&&(p.props=w,p.state=p.__s,p.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u)}),S=0;S<p._sb.length;S++)p.__h.push(p._sb[S]);p._sb=[],p.__h.length&&f.push(p);break n}null!=p.componentWillUpdate&&p.componentWillUpdate(w,p.__s,C),null!=p.componentDidUpdate&&p.__h.push(function(){p.componentDidUpdate(d,_,g)})}if(p.context=C,p.props=w,p.__P=n,p.__e=!1,$=l.__r,A=0,\"prototype\"in T&&T.prototype.render){for(p.state=p.__s,p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),H=0;H<p._sb.length;H++)p.__h.push(p._sb[H]);p._sb=[]}else do{p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),p.state=p.__s}while(p.__d&&++A<25);p.state=p.__s,null!=p.getChildContext&&(i=v(v({},i),p.getChildContext())),y||null==p.getSnapshotBeforeUpdate||(g=p.getSnapshotBeforeUpdate(d,_)),P(n,h(I=null!=a&&a.type===k&&null==a.key?a.props.children:a)?I:[I],u,t,i,o,r,f,e,c,s),p.base=u.__e,u.__h=null,p.__h.length&&f.push(p),m&&(p.__E=p.__=null)}catch(n){u.__v=null,(c||null!=r)&&(u.__e=e,u.__h=!!c,r[r.indexOf(e)]=null),l.__e(n,u,t)}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=N(t.__e,u,t,i,o,r,f,c,s);(a=l.diffed)&&a(u)}function M(n,u,t){for(var i=0;i<t.length;i++)O(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function N(l,u,t,i,o,r,f,e,s){var a,v,y,d=t.props,_=u.props,k=u.type,b=0;if(\"svg\"===k&&(o=!0),null!=r)for(;b<r.length;b++)if((a=r[b])&&\"setAttribute\"in a==!!k&&(k?a.localName===k:3===a.nodeType)){l=a,r[b]=null;break}if(null==l){if(null===k)return document.createTextNode(_);l=o?document.createElementNS(\"http://www.w3.org/2000/svg\",k):document.createElement(k,_.is&&_),r=null,e=!1}if(null===k)d===_||e&&l.data===_||(l.data=_);else{if(r=r&&n.call(l.childNodes),v=(d=t.props||c).dangerouslySetInnerHTML,y=_.dangerouslySetInnerHTML,!e){if(null!=r)for(d={},b=0;b<l.attributes.length;b++)d[l.attributes[b].name]=l.attributes[b].value;(y||v)&&(y&&(v&&y.__html==v.__html||y.__html===l.innerHTML)||(l.innerHTML=y&&y.__html||\"\"))}if(H(l,_,d,o,e),y)u.__k=[];else if(P(l,h(b=u.props.children)?b:[b],u,t,i,o&&\"foreignObject\"!==k,r,f,r?r[0]:t.__k&&g(t,0),e,s),null!=r)for(b=r.length;b--;)null!=r[b]&&p(r[b]);e||(\"value\"in _&&void 0!==(b=_.value)&&(b!==l.value||\"progress\"===k&&!b||\"option\"===k&&b!==d.value)&&T(l,\"value\",b,d.value,!1),\"checked\"in _&&void 0!==(b=_.checked)&&b!==l.checked&&T(l,\"checked\",b,d.checked,!1))}return l}function O(n,u,t){try{\"function\"==typeof n?n(u):n.current=u}catch(n){l.__e(n,t)}}function q(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||O(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null,n.__c=void 0}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&q(i[o],u,t||\"function\"!=typeof n.type);t||null==n.__e||p(n.__e),n.__=n.__e=n.__d=void 0}function B(n,l,u){return this.constructor(n,u)}function D(u,t,i){var o,r,f,e;l.__&&l.__(u,t),r=(o=\"function\"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],L(t,u=(!o&&i||t).__k=y(k,null,[u]),r||c,c,void 0!==t.ownerSVGElement,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),M(f,u,e)}function E(n,l){D(n,l,E)}function F(l,u,t){var i,o,r,f,e=v({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),d(l.type,e,i||l.key,o||l.ref,null)}function G(n,l){var u={__c:l=\"__cC\"+e++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,w(n)})},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=s.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v({},this.state),\"function\"==typeof n&&(n=n(v({},u),this.props)),n&&v(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),w(this))},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),w(this))},b.prototype.render=k,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f=function(n,l){return n.__v.__b-l.__v.__b},x.__r=0,e=0;export{b as Component,k as Fragment,F as cloneElement,G as createContext,y as createElement,_ as createRef,y as h,E as hydrate,t as isValidElement,l as options,D as render,S as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","export var HIGHLIGHT_PRE_TAG = '__aa-highlight__';\nexport var HIGHLIGHT_POST_TAG = '__/aa-highlight__';","import { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\n/**\n * Creates a data structure that allows to concatenate similar highlighting\n * parts in a single value.\n */\nfunction createAttributeSet() {\n  var initialValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var value = initialValue;\n  return {\n    get: function get() {\n      return value;\n    },\n    add: function add(part) {\n      var lastPart = value[value.length - 1];\n      if ((lastPart === null || lastPart === void 0 ? void 0 : lastPart.isHighlighted) === part.isHighlighted) {\n        value[value.length - 1] = {\n          value: lastPart.value + part.value,\n          isHighlighted: lastPart.isHighlighted\n        };\n      } else {\n        value.push(part);\n      }\n    }\n  };\n}\nexport function parseAttribute(_ref) {\n  var highlightedValue = _ref.highlightedValue;\n  var preTagParts = highlightedValue.split(HIGHLIGHT_PRE_TAG);\n  var firstValue = preTagParts.shift();\n  var parts = createAttributeSet(firstValue ? [{\n    value: firstValue,\n    isHighlighted: false\n  }] : []);\n  preTagParts.forEach(function (part) {\n    var postTagParts = part.split(HIGHLIGHT_POST_TAG);\n    parts.add({\n      value: postTagParts[0],\n      isHighlighted: true\n    });\n    if (postTagParts[1] !== '') {\n      parts.add({\n        value: postTagParts[1],\n        isHighlighted: false\n      });\n    }\n  });\n  return parts.get();\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nimport { getAttributeValueByPath, warn } from '@algolia/autocomplete-shared';\nimport { parseAttribute } from './parseAttribute';\nexport function parseAlgoliaHitHighlight(_ref) {\n  var hit = _ref.hit,\n    attribute = _ref.attribute;\n  var path = Array.isArray(attribute) ? attribute : [attribute];\n  var highlightedValue = getAttributeValueByPath(hit, ['_highlightResult'].concat(_toConsumableArray(path), ['value']));\n  if (typeof highlightedValue !== 'string') {\n    process.env.NODE_ENV !== 'production' ? warn(false, \"The attribute \\\"\".concat(path.join('.'), \"\\\" described by the path \").concat(JSON.stringify(path), \" does not exist on the hit. Did you set it in `attributesToHighlight`?\") + '\\nSee https://www.algolia.com/doc/api-reference/api-parameters/attributesToHighlight/') : void 0;\n    highlightedValue = getAttributeValueByPath(hit, path) || '';\n  }\n  return parseAttribute({\n    highlightedValue: highlightedValue\n  });\n}","var htmlEscapes = {\n  '&amp;': '&',\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&#39;': \"'\"\n};\nvar hasLetterOrNumber = function () {\n  try {\n    return new RegExp('[\\\\p{L}\\\\p{N}_]', 'u');\n  } catch (_unused) {\n    return new RegExp(/\\w/i);\n  }\n}();\nvar regexEscapedHtml = /&(amp|quot|lt|gt|#39);/g;\nvar regexHasEscapedHtml = RegExp(regexEscapedHtml.source);\nfunction unescape(value) {\n  return value && regexHasEscapedHtml.test(value) ? value.replace(regexEscapedHtml, function (character) {\n    return htmlEscapes[character];\n  }) : value;\n}\nexport function isPartHighlighted(parts, i) {\n  var _parts, _parts2;\n  var current = parts[i];\n  var isNextHighlighted = ((_parts = parts[i + 1]) === null || _parts === void 0 ? void 0 : _parts.isHighlighted) || true;\n  var isPreviousHighlighted = ((_parts2 = parts[i - 1]) === null || _parts2 === void 0 ? void 0 : _parts2.isHighlighted) || true;\n  if (!hasLetterOrNumber.test(unescape(current.value)) && isPreviousHighlighted === isNextHighlighted) {\n    return isPreviousHighlighted;\n  }\n  return current.isHighlighted;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { isPartHighlighted } from './isPartHighlighted';\nexport function reverseHighlightedParts(parts) {\n  // We don't want to highlight the whole word when no parts match.\n  if (!parts.some(function (part) {\n    return part.isHighlighted;\n  })) {\n    return parts.map(function (part) {\n      return _objectSpread(_objectSpread({}, part), {}, {\n        isHighlighted: false\n      });\n    });\n  }\n  return parts.map(function (part, i) {\n    return _objectSpread(_objectSpread({}, part), {}, {\n      isHighlighted: !isPartHighlighted(parts, i)\n    });\n  });\n}","import { parseAlgoliaHitHighlight } from './parseAlgoliaHitHighlight';\nimport { reverseHighlightedParts } from './reverseHighlightedParts';\nexport function parseAlgoliaHitReverseHighlight(props) {\n  return reverseHighlightedParts(parseAlgoliaHitHighlight(props));\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nimport { getAttributeValueByPath, warn } from '@algolia/autocomplete-shared';\nimport { parseAttribute } from './parseAttribute';\nexport function parseAlgoliaHitSnippet(_ref) {\n  var hit = _ref.hit,\n    attribute = _ref.attribute;\n  var path = Array.isArray(attribute) ? attribute : [attribute];\n  var highlightedValue = getAttributeValueByPath(hit, ['_snippetResult'].concat(_toConsumableArray(path), ['value']));\n  if (typeof highlightedValue !== 'string') {\n    process.env.NODE_ENV !== 'production' ? warn(false, \"The attribute \\\"\".concat(path.join('.'), \"\\\" described by the path \").concat(JSON.stringify(path), \" does not exist on the hit. Did you set it in `attributesToSnippet`?\") + '\\nSee https://www.algolia.com/doc/api-reference/api-parameters/attributesToSnippet/') : void 0;\n    highlightedValue = getAttributeValueByPath(hit, path) || '';\n  }\n  return parseAttribute({\n    highlightedValue: highlightedValue\n  });\n}","import { parseAlgoliaHitSnippet } from './parseAlgoliaHitSnippet';\nimport { reverseHighlightedParts } from './reverseHighlightedParts';\nexport function parseAlgoliaHitReverseSnippet(props) {\n  return reverseHighlightedParts(parseAlgoliaHitSnippet(props));\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport function createRequester(fetcher, requesterId) {\n  function execute(fetcherParams) {\n    return fetcher({\n      searchClient: fetcherParams.searchClient,\n      queries: fetcherParams.requests.map(function (x) {\n        return x.query;\n      })\n    }).then(function (responses) {\n      return responses.map(function (response, index) {\n        var _fetcherParams$reques = fetcherParams.requests[index],\n          sourceId = _fetcherParams$reques.sourceId,\n          transformResponse = _fetcherParams$reques.transformResponse;\n        return {\n          items: response,\n          sourceId: sourceId,\n          transformResponse: transformResponse\n        };\n      });\n    });\n  }\n  return function createSpecifiedRequester(requesterParams) {\n    return function requester(requestParams) {\n      return _objectSpread(_objectSpread({\n        requesterId: requesterId,\n        execute: execute\n      }, requesterParams), requestParams);\n    };\n  };\n}","// typed as any, since it accepts the _real_ js clients, not the interface we otherwise expect\nexport function getAppIdAndApiKey(searchClient) {\n  var transporter = searchClient.transporter || {};\n  var headers = transporter.headers || transporter.baseHeaders || {};\n  var queryParameters = transporter.queryParameters || transporter.baseQueryParameters || {};\n  var APP_ID = 'x-algolia-application-id';\n  var API_KEY = 'x-algolia-api-key';\n  var appId = headers[APP_ID] || queryParameters[APP_ID];\n  var apiKey = headers[API_KEY] || queryParameters[API_KEY];\n  return {\n    appId: appId,\n    apiKey: apiKey\n  };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"params\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nimport { userAgents as coreUserAgents, invariant } from '@algolia/autocomplete-shared';\nimport { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\nimport { getAppIdAndApiKey } from '../utils';\nexport function fetchAlgoliaResults(_ref) {\n  var searchClient = _ref.searchClient,\n    queries = _ref.queries,\n    _ref$userAgents = _ref.userAgents,\n    userAgents = _ref$userAgents === void 0 ? [] : _ref$userAgents;\n  if (typeof searchClient.addAlgoliaAgent === 'function') {\n    var algoliaAgents = [].concat(_toConsumableArray(coreUserAgents), _toConsumableArray(userAgents));\n    algoliaAgents.forEach(function (_ref2) {\n      var segment = _ref2.segment,\n        version = _ref2.version;\n      searchClient.addAlgoliaAgent(segment, version);\n    });\n  }\n  var _getAppIdAndApiKey = getAppIdAndApiKey(searchClient),\n    appId = _getAppIdAndApiKey.appId,\n    apiKey = _getAppIdAndApiKey.apiKey;\n  invariant(Boolean(appId), 'The Algolia `appId` was not accessible from the searchClient passed.');\n  invariant(Boolean(apiKey), 'The Algolia `apiKey` was not accessible from the searchClient passed.');\n  return searchClient.search(queries.map(function (searchParameters) {\n    var params = searchParameters.params,\n      headers = _objectWithoutProperties(searchParameters, _excluded);\n    return _objectSpread(_objectSpread({}, headers), {}, {\n      params: _objectSpread({\n        hitsPerPage: 5,\n        highlightPreTag: HIGHLIGHT_PRE_TAG,\n        highlightPostTag: HIGHLIGHT_POST_TAG\n      }, params)\n    });\n  })).then(function (response) {\n    return response.results.map(function (result, resultIndex) {\n      var _result$hits;\n      return _objectSpread(_objectSpread({}, result), {}, {\n        hits: (_result$hits = result.hits) === null || _result$hits === void 0 ? void 0 : _result$hits.map(function (hit) {\n          return _objectSpread(_objectSpread({}, hit), {}, {\n            // Bring support for the Insights plugin.\n            __autocomplete_indexName: result.index || queries[resultIndex].indexName,\n            __autocomplete_queryID: result.queryID,\n            __autocomplete_algoliaCredentials: {\n              appId: appId,\n              apiKey: apiKey\n            }\n          });\n        })\n      });\n    });\n  });\n}","import { parseAlgoliaHitHighlight } from '@algolia/autocomplete-preset-algolia';\nexport function createHighlightComponent(_ref) {\n  var createElement = _ref.createElement,\n    Fragment = _ref.Fragment;\n  function Highlight(_ref2) {\n    var hit = _ref2.hit,\n      attribute = _ref2.attribute,\n      _ref2$tagName = _ref2.tagName,\n      tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName;\n    return createElement(Fragment, {}, parseAlgoliaHitHighlight({\n      hit: hit,\n      attribute: attribute\n    }).map(function (x, index) {\n      return x.isHighlighted ? createElement(tagName, {\n        key: index\n      }, x.value) : x.value;\n    }));\n  }\n  Highlight.__autocomplete_componentName = 'Highlight';\n  return Highlight;\n}","import { parseAlgoliaHitReverseHighlight } from '@algolia/autocomplete-preset-algolia';\nexport function createReverseHighlightComponent(_ref) {\n  var createElement = _ref.createElement,\n    Fragment = _ref.Fragment;\n  function ReverseHighlight(_ref2) {\n    var hit = _ref2.hit,\n      attribute = _ref2.attribute,\n      _ref2$tagName = _ref2.tagName,\n      tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName;\n    return createElement(Fragment, {}, parseAlgoliaHitReverseHighlight({\n      hit: hit,\n      attribute: attribute\n    }).map(function (x, index) {\n      return x.isHighlighted ? createElement(tagName, {\n        key: index\n      }, x.value) : x.value;\n    }));\n  }\n  ReverseHighlight.__autocomplete_componentName = 'ReverseHighlight';\n  return ReverseHighlight;\n}","import { parseAlgoliaHitReverseSnippet } from '@algolia/autocomplete-preset-algolia';\nexport function createReverseSnippetComponent(_ref) {\n  var createElement = _ref.createElement,\n    Fragment = _ref.Fragment;\n  function ReverseSnippet(_ref2) {\n    var hit = _ref2.hit,\n      attribute = _ref2.attribute,\n      _ref2$tagName = _ref2.tagName,\n      tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName;\n    return createElement(Fragment, {}, parseAlgoliaHitReverseSnippet({\n      hit: hit,\n      attribute: attribute\n    }).map(function (x, index) {\n      return x.isHighlighted ? createElement(tagName, {\n        key: index\n      }, x.value) : x.value;\n    }));\n  }\n  ReverseSnippet.__autocomplete_componentName = 'ReverseSnippet';\n  return ReverseSnippet;\n}","import { parseAlgoliaHitSnippet } from '@algolia/autocomplete-preset-algolia';\nexport function createSnippetComponent(_ref) {\n  var createElement = _ref.createElement,\n    Fragment = _ref.Fragment;\n  function Snippet(_ref2) {\n    var hit = _ref2.hit,\n      attribute = _ref2.attribute,\n      _ref2$tagName = _ref2.tagName,\n      tagName = _ref2$tagName === void 0 ? 'mark' : _ref2$tagName;\n    return createElement(Fragment, {}, parseAlgoliaHitSnippet({\n      hit: hit,\n      attribute: attribute\n    }).map(function (x, index) {\n      return x.isHighlighted ? createElement(tagName, {\n        key: index\n      }, x.value) : x.value;\n    }));\n  }\n  Snippet.__autocomplete_componentName = 'Snippet';\n  return Snippet;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"classNames\", \"container\", \"getEnvironmentProps\", \"getFormProps\", \"getInputProps\", \"getItemProps\", \"getLabelProps\", \"getListProps\", \"getPanelProps\", \"getRootProps\", \"panelContainer\", \"panelPlacement\", \"render\", \"renderNoResults\", \"renderer\", \"detachedMediaQuery\", \"components\", \"translations\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\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 { generateAutocompleteId, invariant, warn } from '@algolia/autocomplete-shared';\nimport { createElement as preactCreateElement, Fragment as PreactFragment, render } from 'preact';\nimport { createHighlightComponent, createReverseHighlightComponent, createReverseSnippetComponent, createSnippetComponent } from './components';\nimport { getHTMLElement, mergeClassNames } from './utils';\nvar defaultClassNames = {\n  clearButton: 'aa-ClearButton',\n  detachedCancelButton: 'aa-DetachedCancelButton',\n  detachedContainer: 'aa-DetachedContainer',\n  detachedFormContainer: 'aa-DetachedFormContainer',\n  detachedOverlay: 'aa-DetachedOverlay',\n  detachedSearchButton: 'aa-DetachedSearchButton',\n  detachedSearchButtonIcon: 'aa-DetachedSearchButtonIcon',\n  detachedSearchButtonPlaceholder: 'aa-DetachedSearchButtonPlaceholder',\n  detachedSearchButtonQuery: 'aa-DetachedSearchButtonQuery',\n  form: 'aa-Form',\n  input: 'aa-Input',\n  inputWrapper: 'aa-InputWrapper',\n  inputWrapperPrefix: 'aa-InputWrapperPrefix',\n  inputWrapperSuffix: 'aa-InputWrapperSuffix',\n  item: 'aa-Item',\n  label: 'aa-Label',\n  list: 'aa-List',\n  loadingIndicator: 'aa-LoadingIndicator',\n  panel: 'aa-Panel',\n  panelLayout: 'aa-PanelLayout aa-Panel--scrollable',\n  root: 'aa-Autocomplete',\n  source: 'aa-Source',\n  sourceFooter: 'aa-SourceFooter',\n  sourceHeader: 'aa-SourceHeader',\n  sourceNoResults: 'aa-SourceNoResults',\n  submitButton: 'aa-SubmitButton'\n};\nvar defaultRender = function defaultRender(_ref, root) {\n  var children = _ref.children,\n    render = _ref.render;\n  render(children, root);\n};\nvar defaultRenderer = {\n  createElement: preactCreateElement,\n  Fragment: PreactFragment,\n  render: render\n};\nexport function getDefaultOptions(options) {\n  var _core$id;\n  var classNames = options.classNames,\n    container = options.container,\n    getEnvironmentProps = options.getEnvironmentProps,\n    getFormProps = options.getFormProps,\n    getInputProps = options.getInputProps,\n    getItemProps = options.getItemProps,\n    getLabelProps = options.getLabelProps,\n    getListProps = options.getListProps,\n    getPanelProps = options.getPanelProps,\n    getRootProps = options.getRootProps,\n    panelContainer = options.panelContainer,\n    panelPlacement = options.panelPlacement,\n    render = options.render,\n    renderNoResults = options.renderNoResults,\n    renderer = options.renderer,\n    detachedMediaQuery = options.detachedMediaQuery,\n    components = options.components,\n    translations = options.translations,\n    core = _objectWithoutProperties(options, _excluded);\n\n  /* eslint-disable no-restricted-globals */\n  var environment = typeof window !== 'undefined' ? window : {};\n  /* eslint-enable no-restricted-globals */\n  var containerElement = getHTMLElement(environment, container);\n  invariant(containerElement.tagName !== 'INPUT', 'The `container` option does not support `input` elements. You need to change the container to a `div`.');\n  process.env.NODE_ENV !== 'production' ? warn(!(render && renderer && !(renderer !== null && renderer !== void 0 && renderer.render)), \"You provided the `render` option but did not provide a `renderer.render`. Since v1.6.0, you can provide a `render` function directly in `renderer`.\" + \"\\nTo get rid of this warning, do any of the following depending on your use case.\" + \"\\n- If you are using the `render` option only to override Autocomplete's default `render` function, pass the `render` function into `renderer` and remove the `render` option.\" + '\\n- If you are using the `render` option to customize the layout, pass your `render` function into `renderer` and use it from the provided parameters of the `render` option.' + '\\n- If you are using the `render` option to work with React 18, pass an empty `render` function into `renderer`.' + '\\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render') : void 0;\n  process.env.NODE_ENV !== 'production' ? warn(!renderer || render || renderer.Fragment && renderer.createElement && renderer.render, \"You provided an incomplete `renderer` (missing: \".concat([!(renderer !== null && renderer !== void 0 && renderer.createElement) && '`renderer.createElement`', !(renderer !== null && renderer !== void 0 && renderer.Fragment) && '`renderer.Fragment`', !(renderer !== null && renderer !== void 0 && renderer.render) && '`renderer.render`'].filter(Boolean).join(', '), \"). This can cause rendering issues.\") + '\\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-renderer') : void 0;\n  var defaultedRenderer = _objectSpread(_objectSpread({}, defaultRenderer), renderer);\n  var defaultComponents = {\n    Highlight: createHighlightComponent(defaultedRenderer),\n    ReverseHighlight: createReverseHighlightComponent(defaultedRenderer),\n    ReverseSnippet: createReverseSnippetComponent(defaultedRenderer),\n    Snippet: createSnippetComponent(defaultedRenderer)\n  };\n  var defaultTranslations = {\n    clearButtonTitle: 'Clear',\n    detachedCancelButtonText: 'Cancel',\n    detachedSearchButtonTitle: 'Search',\n    submitButtonTitle: 'Submit'\n  };\n  return {\n    renderer: {\n      classNames: mergeClassNames(defaultClassNames, classNames !== null && classNames !== void 0 ? classNames : {}),\n      container: containerElement,\n      getEnvironmentProps: getEnvironmentProps !== null && getEnvironmentProps !== void 0 ? getEnvironmentProps : function (_ref2) {\n        var props = _ref2.props;\n        return props;\n      },\n      getFormProps: getFormProps !== null && getFormProps !== void 0 ? getFormProps : function (_ref3) {\n        var props = _ref3.props;\n        return props;\n      },\n      getInputProps: getInputProps !== null && getInputProps !== void 0 ? getInputProps : function (_ref4) {\n        var props = _ref4.props;\n        return props;\n      },\n      getItemProps: getItemProps !== null && getItemProps !== void 0 ? getItemProps : function (_ref5) {\n        var props = _ref5.props;\n        return props;\n      },\n      getLabelProps: getLabelProps !== null && getLabelProps !== void 0 ? getLabelProps : function (_ref6) {\n        var props = _ref6.props;\n        return props;\n      },\n      getListProps: getListProps !== null && getListProps !== void 0 ? getListProps : function (_ref7) {\n        var props = _ref7.props;\n        return props;\n      },\n      getPanelProps: getPanelProps !== null && getPanelProps !== void 0 ? getPanelProps : function (_ref8) {\n        var props = _ref8.props;\n        return props;\n      },\n      getRootProps: getRootProps !== null && getRootProps !== void 0 ? getRootProps : function (_ref9) {\n        var props = _ref9.props;\n        return props;\n      },\n      panelContainer: panelContainer ? getHTMLElement(environment, panelContainer) : environment.document.body,\n      panelPlacement: panelPlacement !== null && panelPlacement !== void 0 ? panelPlacement : 'input-wrapper-width',\n      render: render !== null && render !== void 0 ? render : defaultRender,\n      renderNoResults: renderNoResults,\n      renderer: defaultedRenderer,\n      detachedMediaQuery: detachedMediaQuery !== null && detachedMediaQuery !== void 0 ? detachedMediaQuery : getComputedStyle(environment.document.documentElement).getPropertyValue('--aa-detached-media-query'),\n      components: _objectSpread(_objectSpread({}, defaultComponents), components),\n      translations: _objectSpread(_objectSpread({}, defaultTranslations), translations)\n    },\n    core: _objectSpread(_objectSpread({}, core), {}, {\n      id: (_core$id = core.id) !== null && _core$id !== void 0 ? _core$id : generateAutocompleteId(),\n      environment: environment\n    })\n  };\n}","export function getPanelPlacementStyle(_ref) {\n  var panelPlacement = _ref.panelPlacement,\n    container = _ref.container,\n    form = _ref.form,\n    environment = _ref.environment;\n  var containerRect = container.getBoundingClientRect();\n  // Some browsers have specificities to retrieve the document scroll position.\n  // See https://stackoverflow.com/a/28633515/9940315\n  var scrollTop = environment.pageYOffset || environment.document.documentElement.scrollTop || environment.document.body.scrollTop || 0;\n  var top = scrollTop + containerRect.top + containerRect.height;\n  switch (panelPlacement) {\n    case 'start':\n      {\n        return {\n          top: top,\n          left: containerRect.left\n        };\n      }\n    case 'end':\n      {\n        return {\n          top: top,\n          right: environment.document.documentElement.clientWidth - (containerRect.left + containerRect.width)\n        };\n      }\n    case 'full-width':\n      {\n        return {\n          top: top,\n          left: 0,\n          right: 0,\n          width: 'unset',\n          maxWidth: 'unset'\n        };\n      }\n    case 'input-wrapper-width':\n      {\n        var formRect = form.getBoundingClientRect();\n        return {\n          top: top,\n          left: formRect.left,\n          right: environment.document.documentElement.clientWidth - (formRect.left + formRect.width),\n          width: 'unset',\n          maxWidth: 'unset'\n        };\n      }\n    default:\n      {\n        throw new Error(\"[Autocomplete] The `panelPlacement` value \".concat(JSON.stringify(panelPlacement), \" is not valid.\"));\n      }\n  }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/** @jsxRuntime classic */\n/** @jsx renderer.createElement */\n\nimport { setProperties, setPropertiesWithoutEvents } from './utils';\nexport function renderSearchBox(_ref) {\n  var autocomplete = _ref.autocomplete,\n    autocompleteScopeApi = _ref.autocompleteScopeApi,\n    dom = _ref.dom,\n    propGetters = _ref.propGetters,\n    state = _ref.state;\n  setPropertiesWithoutEvents(dom.root, propGetters.getRootProps(_objectSpread({\n    state: state,\n    props: autocomplete.getRootProps({})\n  }, autocompleteScopeApi)));\n  setPropertiesWithoutEvents(dom.input, propGetters.getInputProps(_objectSpread({\n    state: state,\n    props: autocomplete.getInputProps({\n      inputElement: dom.input\n    }),\n    inputElement: dom.input\n  }, autocompleteScopeApi)));\n  setProperties(dom.label, {\n    hidden: state.status === 'stalled'\n  });\n  setProperties(dom.loadingIndicator, {\n    hidden: state.status !== 'stalled'\n  });\n  toggleAnimation(dom.loadingIndicator, state.status === 'stalled');\n  setProperties(dom.clearButton, {\n    hidden: !state.query\n  });\n  setProperties(dom.detachedSearchButtonQuery, {\n    textContent: state.query\n  });\n  setProperties(dom.detachedSearchButtonPlaceholder, {\n    hidden: Boolean(state.query)\n  });\n}\n\n// Safari will animate the SVG even when it's hidden. We need to pause the\n// animation manually. See:\n// - https://github.com/algolia/autocomplete/issues/1322\n// - https://bugs.webkit.org/show_bug.cgi?id=298217\nfunction toggleAnimation(element, isActive) {\n  var _element$firstChild;\n  var svgElement = ((_element$firstChild = element.firstChild) === null || _element$firstChild === void 0 ? void 0 : _element$firstChild.nodeName) === 'svg' ? element.firstChild : null;\n  if (!svgElement || !svgElement.pauseAnimations || !svgElement.unpauseAnimations) {\n    return;\n  }\n  if (isActive) {\n    svgElement.unpauseAnimations();\n  } else {\n    svgElement.pauseAnimations();\n  }\n}\nexport function renderPanel(render, _ref2) {\n  var autocomplete = _ref2.autocomplete,\n    autocompleteScopeApi = _ref2.autocompleteScopeApi,\n    classNames = _ref2.classNames,\n    html = _ref2.html,\n    dom = _ref2.dom,\n    panelContainer = _ref2.panelContainer,\n    propGetters = _ref2.propGetters,\n    state = _ref2.state,\n    components = _ref2.components,\n    renderer = _ref2.renderer;\n  if (!state.isOpen) {\n    if (panelContainer.contains(dom.panel)) {\n      panelContainer.removeChild(dom.panel);\n    }\n    return;\n  }\n\n  // We add the panel element to the DOM when it's not yet appended and that the\n  // items are fetched.\n  if (!panelContainer.contains(dom.panel) && state.status !== 'loading') {\n    panelContainer.appendChild(dom.panel);\n  }\n  dom.panel.classList.toggle('aa-Panel--stalled', state.status === 'stalled');\n  var sections = state.collections.filter(function (_ref3) {\n    var source = _ref3.source,\n      items = _ref3.items;\n    return source.templates.noResults || items.length > 0;\n  }).map(function (_ref4, sourceIndex) {\n    var source = _ref4.source,\n      items = _ref4.items;\n    return renderer.createElement(\"section\", {\n      key: sourceIndex,\n      className: classNames.source,\n      \"data-autocomplete-source-id\": source.sourceId\n    }, source.templates.header && renderer.createElement(\"div\", {\n      className: classNames.sourceHeader\n    }, source.templates.header({\n      components: components,\n      createElement: renderer.createElement,\n      Fragment: renderer.Fragment,\n      items: items,\n      source: source,\n      state: state,\n      html: html\n    })), source.templates.noResults && items.length === 0 ? renderer.createElement(\"div\", {\n      className: classNames.sourceNoResults\n    }, source.templates.noResults({\n      components: components,\n      createElement: renderer.createElement,\n      Fragment: renderer.Fragment,\n      source: source,\n      state: state,\n      html: html\n    })) : renderer.createElement(\"ul\", _extends({\n      className: classNames.list\n    }, propGetters.getListProps(_objectSpread({\n      state: state,\n      props: autocomplete.getListProps({\n        source: source\n      })\n    }, autocompleteScopeApi))), items.map(function (item) {\n      var itemProps = autocomplete.getItemProps({\n        item: item,\n        source: source\n      });\n      return renderer.createElement(\"li\", _extends({\n        key: itemProps.id,\n        className: classNames.item\n      }, propGetters.getItemProps(_objectSpread({\n        state: state,\n        props: itemProps\n      }, autocompleteScopeApi))), source.templates.item({\n        components: components,\n        createElement: renderer.createElement,\n        Fragment: renderer.Fragment,\n        item: item,\n        state: state,\n        html: html\n      }));\n    })), source.templates.footer && renderer.createElement(\"div\", {\n      className: classNames.sourceFooter\n    }, source.templates.footer({\n      components: components,\n      createElement: renderer.createElement,\n      Fragment: renderer.Fragment,\n      items: items,\n      source: source,\n      state: state,\n      html: html\n    })));\n  });\n  var children = renderer.createElement(renderer.Fragment, null, renderer.createElement(\"div\", {\n    className: classNames.panelLayout\n  }, sections), renderer.createElement(\"div\", {\n    className: \"aa-GradientBottom\"\n  }));\n  var elements = sections.reduce(function (acc, current) {\n    acc[current.props['data-autocomplete-source-id']] = current;\n    return acc;\n  }, {});\n  render(_objectSpread(_objectSpread({\n    children: children,\n    state: state,\n    sections: sections,\n    elements: elements\n  }, renderer), {}, {\n    components: components,\n    html: html\n  }, autocompleteScopeApi), dom.panel);\n}","import { version } from '@algolia/autocomplete-shared';\nexport var userAgents = [{\n  segment: 'autocomplete-js',\n  version: version\n}];","var _excluded = [\"components\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createAutocomplete } from '@algolia/autocomplete-core';\nimport { createRef, debounce, getItemsCount, warn } from '@algolia/autocomplete-shared';\nimport htm from 'htm';\nimport { createAutocompleteDom } from './createAutocompleteDom';\nimport { createEffectWrapper } from './createEffectWrapper';\nimport { createReactiveWrapper } from './createReactiveWrapper';\nimport { getDefaultOptions } from './getDefaultOptions';\nimport { getPanelPlacementStyle } from './getPanelPlacementStyle';\nimport { renderPanel, renderSearchBox } from './render';\nimport { userAgents } from './userAgents';\nimport { mergeDeep, pickBy, setProperties } from './utils';\nvar instancesCount = 0;\nexport function autocomplete(options) {\n  var _createEffectWrapper = createEffectWrapper(),\n    runEffect = _createEffectWrapper.runEffect,\n    cleanupEffects = _createEffectWrapper.cleanupEffects,\n    runEffects = _createEffectWrapper.runEffects;\n  var _createReactiveWrappe = createReactiveWrapper(),\n    reactive = _createReactiveWrappe.reactive,\n    runReactives = _createReactiveWrappe.runReactives;\n  var hasNoResultsSourceTemplateRef = createRef(false);\n  var optionsRef = createRef(options);\n  var onStateChangeRef = createRef(undefined);\n  var props = reactive(function () {\n    return getDefaultOptions(optionsRef.current);\n  });\n  var isDetached = reactive(function () {\n    return props.value.core.environment.matchMedia(props.value.renderer.detachedMediaQuery).matches;\n  });\n  var autocomplete = reactive(function () {\n    return createAutocomplete(_objectSpread(_objectSpread({}, props.value.core), {}, {\n      onStateChange: function onStateChange(params) {\n        var _onStateChangeRef$cur, _props$value$core$onS, _props$value$core;\n        hasNoResultsSourceTemplateRef.current = params.state.collections.some(function (collection) {\n          return collection.source.templates.noResults;\n        });\n        (_onStateChangeRef$cur = onStateChangeRef.current) === null || _onStateChangeRef$cur === void 0 ? void 0 : _onStateChangeRef$cur.call(onStateChangeRef, params);\n        (_props$value$core$onS = (_props$value$core = props.value.core).onStateChange) === null || _props$value$core$onS === void 0 ? void 0 : _props$value$core$onS.call(_props$value$core, params);\n      },\n      shouldPanelOpen: optionsRef.current.shouldPanelOpen || function (_ref) {\n        var state = _ref.state;\n        if (isDetached.value) {\n          return true;\n        }\n        var hasItems = getItemsCount(state) > 0;\n        if (!props.value.core.openOnFocus && !state.query) {\n          return hasItems;\n        }\n        var hasNoResultsTemplate = Boolean(hasNoResultsSourceTemplateRef.current || props.value.renderer.renderNoResults);\n        return !hasItems && hasNoResultsTemplate || hasItems;\n      },\n      __autocomplete_metadata: {\n        userAgents: userAgents,\n        options: options\n      }\n    }));\n  });\n  var lastStateRef = createRef(_objectSpread({\n    collections: [],\n    completion: null,\n    context: {},\n    isOpen: false,\n    query: '',\n    activeItemId: null,\n    status: 'idle'\n  }, props.value.core.initialState));\n  var propGetters = {\n    getEnvironmentProps: props.value.renderer.getEnvironmentProps,\n    getFormProps: props.value.renderer.getFormProps,\n    getInputProps: props.value.renderer.getInputProps,\n    getItemProps: props.value.renderer.getItemProps,\n    getLabelProps: props.value.renderer.getLabelProps,\n    getListProps: props.value.renderer.getListProps,\n    getPanelProps: props.value.renderer.getPanelProps,\n    getRootProps: props.value.renderer.getRootProps\n  };\n  var autocompleteScopeApi = {\n    setActiveItemId: autocomplete.value.setActiveItemId,\n    setQuery: autocomplete.value.setQuery,\n    setCollections: autocomplete.value.setCollections,\n    setIsOpen: autocomplete.value.setIsOpen,\n    setStatus: autocomplete.value.setStatus,\n    setContext: autocomplete.value.setContext,\n    refresh: autocomplete.value.refresh,\n    navigator: autocomplete.value.navigator\n  };\n  var html = reactive(function () {\n    return htm.bind(props.value.renderer.renderer.createElement);\n  });\n  var dom = reactive(function () {\n    return createAutocompleteDom({\n      autocomplete: autocomplete.value,\n      autocompleteScopeApi: autocompleteScopeApi,\n      classNames: props.value.renderer.classNames,\n      environment: props.value.core.environment,\n      isDetached: isDetached.value,\n      placeholder: props.value.core.placeholder,\n      propGetters: propGetters,\n      setIsModalOpen: setIsModalOpen,\n      state: lastStateRef.current,\n      translations: props.value.renderer.translations\n    });\n  });\n  function setPanelPosition() {\n    setProperties(dom.value.panel, {\n      style: isDetached.value ? {} : getPanelPlacementStyle({\n        panelPlacement: props.value.renderer.panelPlacement,\n        container: dom.value.root,\n        form: dom.value.form,\n        environment: props.value.core.environment\n      })\n    });\n  }\n  function scheduleRender(state) {\n    lastStateRef.current = state;\n    var renderProps = {\n      autocomplete: autocomplete.value,\n      autocompleteScopeApi: autocompleteScopeApi,\n      classNames: props.value.renderer.classNames,\n      components: props.value.renderer.components,\n      container: props.value.renderer.container,\n      html: html.value,\n      dom: dom.value,\n      panelContainer: isDetached.value ? dom.value.detachedContainer : props.value.renderer.panelContainer,\n      propGetters: propGetters,\n      state: lastStateRef.current,\n      renderer: props.value.renderer.renderer\n    };\n    var render = !getItemsCount(state) && !hasNoResultsSourceTemplateRef.current && props.value.renderer.renderNoResults || props.value.renderer.render;\n    renderSearchBox(renderProps);\n    renderPanel(render, renderProps);\n  }\n  runEffect(function () {\n    var environmentProps = autocomplete.value.getEnvironmentProps({\n      formElement: dom.value.form,\n      panelElement: dom.value.panel,\n      inputElement: dom.value.input\n    });\n    setProperties(props.value.core.environment, environmentProps);\n    return function () {\n      setProperties(props.value.core.environment, Object.keys(environmentProps).reduce(function (acc, key) {\n        return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, undefined));\n      }, {}));\n    };\n  });\n  runEffect(function () {\n    var panelContainerElement = isDetached.value ? props.value.core.environment.document.body : props.value.renderer.panelContainer;\n    var panelElement = isDetached.value ? dom.value.detachedOverlay : dom.value.panel;\n    if (isDetached.value && lastStateRef.current.isOpen) {\n      setIsModalOpen(true);\n    }\n    scheduleRender(lastStateRef.current);\n    return function () {\n      if (panelContainerElement.contains(panelElement)) {\n        panelContainerElement.removeChild(panelElement);\n        panelContainerElement.classList.remove('aa-Detached');\n      }\n    };\n  });\n  runEffect(function () {\n    var containerElement = props.value.renderer.container;\n    containerElement.appendChild(dom.value.root);\n    return function () {\n      containerElement.removeChild(dom.value.root);\n    };\n  });\n  runEffect(function () {\n    var debouncedRender = debounce(function (_ref2) {\n      var state = _ref2.state;\n      scheduleRender(state);\n    }, 0);\n    onStateChangeRef.current = function (_ref3) {\n      var state = _ref3.state,\n        prevState = _ref3.prevState;\n      if (isDetached.value && prevState.isOpen !== state.isOpen) {\n        setIsModalOpen(state.isOpen);\n      }\n\n      // The outer DOM might have changed since the last time the panel was\n      // positioned. The layout might have shifted vertically for instance.\n      // It's therefore safer to re-calculate the panel position before opening\n      // it again.\n      if (!isDetached.value && state.isOpen && !prevState.isOpen) {\n        setPanelPosition();\n      }\n\n      // We scroll to the top of the panel whenever the query changes (i.e. new\n      // results come in) so that users don't have to.\n      if (state.query !== prevState.query) {\n        var scrollablePanels = props.value.core.environment.document.querySelectorAll('.aa-Panel--scrollable');\n        scrollablePanels.forEach(function (scrollablePanel) {\n          if (scrollablePanel.scrollTop !== 0) {\n            scrollablePanel.scrollTop = 0;\n          }\n        });\n      }\n      debouncedRender({\n        state: state\n      });\n    };\n    return function () {\n      onStateChangeRef.current = undefined;\n    };\n  });\n  runEffect(function () {\n    var onResize = debounce(function () {\n      var previousIsDetached = isDetached.value;\n      isDetached.value = props.value.core.environment.matchMedia(props.value.renderer.detachedMediaQuery).matches;\n      if (previousIsDetached !== isDetached.value) {\n        update({});\n      } else {\n        requestAnimationFrame(setPanelPosition);\n      }\n    }, 20);\n    props.value.core.environment.addEventListener('resize', onResize);\n    return function () {\n      props.value.core.environment.removeEventListener('resize', onResize);\n    };\n  });\n  runEffect(function () {\n    if (!isDetached.value) {\n      return function () {};\n    }\n    function toggleModalClassname(isActive) {\n      dom.value.detachedContainer.classList.toggle('aa-DetachedContainer--modal', isActive);\n    }\n    function onChange(event) {\n      toggleModalClassname(event.matches);\n    }\n    var isModalDetachedMql = props.value.core.environment.matchMedia(getComputedStyle(props.value.core.environment.document.documentElement).getPropertyValue('--aa-detached-modal-media-query'));\n    toggleModalClassname(isModalDetachedMql.matches);\n\n    // Prior to Safari 14, `MediaQueryList` isn't based on `EventTarget`,\n    // so we must use `addListener` and `removeListener` to observe media query lists.\n    // See https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/addListener\n    var hasModernEventListener = Boolean(isModalDetachedMql.addEventListener);\n    hasModernEventListener ? isModalDetachedMql.addEventListener('change', onChange) : isModalDetachedMql.addListener(onChange);\n    return function () {\n      hasModernEventListener ? isModalDetachedMql.removeEventListener('change', onChange) : isModalDetachedMql.removeListener(onChange);\n    };\n  });\n  runEffect(function () {\n    requestAnimationFrame(setPanelPosition);\n    return function () {};\n  });\n  function destroy() {\n    instancesCount--;\n    cleanupEffects();\n  }\n  function update() {\n    var updatedOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    cleanupEffects();\n    var _props$value$renderer = props.value.renderer,\n      components = _props$value$renderer.components,\n      rendererProps = _objectWithoutProperties(_props$value$renderer, _excluded);\n    optionsRef.current = mergeDeep(rendererProps, props.value.core, {\n      // We need to filter out default components so they can be replaced with\n      // a new `renderer`, without getting rid of user components.\n      // @MAJOR Deal with registering components with the same name as the\n      // default ones. If we disallow overriding default components, we'd just\n      // need to pass all `components` here.\n      components: pickBy(components, function (_ref4) {\n        var value = _ref4.value;\n        return !value.hasOwnProperty('__autocomplete_componentName');\n      }),\n      initialState: lastStateRef.current\n    }, updatedOptions);\n    runReactives();\n    runEffects();\n    autocomplete.value.refresh().then(function () {\n      scheduleRender(lastStateRef.current);\n    });\n  }\n  function setIsModalOpen(value) {\n    var prevValue = props.value.core.environment.document.body.contains(dom.value.detachedOverlay);\n    if (value === prevValue) {\n      return;\n    }\n    if (value) {\n      props.value.core.environment.document.body.appendChild(dom.value.detachedOverlay);\n      props.value.core.environment.document.body.classList.add('aa-Detached');\n      dom.value.input.focus();\n    } else {\n      props.value.core.environment.document.body.removeChild(dom.value.detachedOverlay);\n      props.value.core.environment.document.body.classList.remove('aa-Detached');\n    }\n  }\n  process.env.NODE_ENV !== 'production' ? warn(instancesCount === 0, \"Autocomplete doesn't support multiple instances running at the same time. Make sure to destroy the previous instance before creating a new one.\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-destroy\") : void 0;\n  instancesCount++;\n  return _objectSpread(_objectSpread({}, autocompleteScopeApi), {}, {\n    update: update,\n    destroy: destroy\n  });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createRequester, fetchAlgoliaResults } from '@algolia/autocomplete-preset-algolia';\nimport { userAgents } from '../userAgents';\nexport var createAlgoliaRequester = createRequester(function (params) {\n  return fetchAlgoliaResults(_objectSpread(_objectSpread({}, params), {}, {\n    userAgents: userAgents\n  }));\n}, 'algolia');","import { createAlgoliaRequester } from './createAlgoliaRequester';\n\n/**\n * Retrieves Algolia results from multiple indices.\n */\nexport var getAlgoliaResults = createAlgoliaRequester({\n  transformResponse: function transformResponse(response) {\n    return response.hits;\n  }\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport function addHighlightedAttribute(_ref) {\n  var item = _ref.item,\n    query = _ref.query;\n  return _objectSpread(_objectSpread({}, item), {}, {\n    _highlightResult: {\n      label: {\n        value: query ? item.label.replace(new RegExp(query.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'gi'), function (match) {\n          return \"__aa-highlight__\".concat(match, \"__/aa-highlight__\");\n        }) : item.label\n      }\n    }\n  });\n}","export var LOCAL_STORAGE_KEY = 'AUTOCOMPLETE_RECENT_SEARCHES';\nexport var LOCAL_STORAGE_KEY_TEST = '__AUTOCOMPLETE_RECENT_SEARCHES_PLUGIN_TEST_KEY__';\nexport var defaultTranslations = {\n  removeSearchTitle: 'Remove this search',\n  fillQueryTitle: function fillQueryTitle(text) {\n    return \"Fill query with \\\"\".concat(text, \"\\\"\");\n  }\n};","import { LOCAL_STORAGE_KEY_TEST } from './constants';\nfunction isLocalStorageSupported() {\n  try {\n    localStorage.setItem(LOCAL_STORAGE_KEY_TEST, '');\n    localStorage.removeItem(LOCAL_STORAGE_KEY_TEST);\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\nexport function getLocalStorage(_ref) {\n  var key = _ref.key;\n  if (!isLocalStorageSupported()) {\n    return {\n      setItem: function setItem() {},\n      getItem: function getItem() {\n        return [];\n      }\n    };\n  }\n  return {\n    setItem: function setItem(items) {\n      return window.localStorage.setItem(key, JSON.stringify(items));\n    },\n    getItem: function getItem() {\n      var items = window.localStorage.getItem(key);\n      return items ? JSON.parse(items) : [];\n    }\n  };\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nimport { getLocalStorage } from './getLocalStorage';\nexport function createLocalStorage(_ref) {\n  var key = _ref.key,\n    limit = _ref.limit,\n    search = _ref.search;\n  var storage = getLocalStorage({\n    key: key\n  });\n  return {\n    onAdd: function onAdd(item) {\n      storage.setItem([item].concat(_toConsumableArray(storage.getItem())));\n    },\n    onRemove: function onRemove(id) {\n      storage.setItem(storage.getItem().filter(function (x) {\n        return x.id !== id;\n      }));\n    },\n    getAll: function getAll() {\n      var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      return search({\n        query: query,\n        items: storage.getItem(),\n        limit: limit\n      }).slice(0, limit);\n    }\n  };\n}","export function createStorageApi(storage) {\n  return {\n    addItem: function addItem(item) {\n      storage.onRemove(item.id);\n      storage.onAdd(item);\n    },\n    removeItem: function removeItem(id) {\n      storage.onRemove(id);\n    },\n    getAll: function getAll(query) {\n      return storage.getAll(query);\n    }\n  };\n}","/** @jsxRuntime classic */\n/** @jsx createElement */\n\nexport function getTemplates(_ref) {\n  var onRemove = _ref.onRemove,\n    onTapAhead = _ref.onTapAhead,\n    translations = _ref.translations;\n  return {\n    item: function item(_ref2) {\n      var item = _ref2.item,\n        createElement = _ref2.createElement,\n        components = _ref2.components;\n      return createElement(\"div\", {\n        className: \"aa-ItemWrapper\"\n      }, createElement(\"div\", {\n        className: \"aa-ItemContent\"\n      }, createElement(\"div\", {\n        className: \"aa-ItemIcon aa-ItemIcon--noBorder\"\n      }, createElement(\"svg\", {\n        viewBox: \"0 0 24 24\",\n        fill: \"currentColor\"\n      }, createElement(\"path\", {\n        d: \"M12.516 6.984v5.25l4.5 2.672-0.75 1.266-5.25-3.188v-6h1.5zM12 20.016q3.281 0 5.648-2.367t2.367-5.648-2.367-5.648-5.648-2.367-5.648 2.367-2.367 5.648 2.367 5.648 5.648 2.367zM12 2.016q4.125 0 7.055 2.93t2.93 7.055-2.93 7.055-7.055 2.93-7.055-2.93-2.93-7.055 2.93-7.055 7.055-2.93z\"\n      }))), createElement(\"div\", {\n        className: \"aa-ItemContentBody\"\n      }, createElement(\"div\", {\n        className: \"aa-ItemContentTitle\"\n      }, createElement(components.ReverseHighlight, {\n        hit: item,\n        attribute: \"label\"\n      }), item.category && createElement(\"span\", {\n        className: \"aa-ItemContentSubtitle aa-ItemContentSubtitle--inline\"\n      }, createElement(\"span\", {\n        className: \"aa-ItemContentSubtitleIcon\"\n      }), \" in\", ' ', createElement(\"span\", {\n        className: \"aa-ItemContentSubtitleCategory\"\n      }, item.category))))), createElement(\"div\", {\n        className: \"aa-ItemActions\"\n      }, createElement(\"button\", {\n        type: \"button\",\n        className: \"aa-ItemActionButton\",\n        title: translations.removeSearchTitle,\n        onClick: function onClick(event) {\n          event.preventDefault();\n          event.stopPropagation();\n          onRemove(item.id);\n        }\n      }, createElement(\"svg\", {\n        viewBox: \"0 0 24 24\",\n        fill: \"currentColor\"\n      }, createElement(\"path\", {\n        d: \"M18 7v13c0 0.276-0.111 0.525-0.293 0.707s-0.431 0.293-0.707 0.293h-10c-0.276 0-0.525-0.111-0.707-0.293s-0.293-0.431-0.293-0.707v-13zM17 5v-1c0-0.828-0.337-1.58-0.879-2.121s-1.293-0.879-2.121-0.879h-4c-0.828 0-1.58 0.337-2.121 0.879s-0.879 1.293-0.879 2.121v1h-4c-0.552 0-1 0.448-1 1s0.448 1 1 1h1v13c0 0.828 0.337 1.58 0.879 2.121s1.293 0.879 2.121 0.879h10c0.828 0 1.58-0.337 2.121-0.879s0.879-1.293 0.879-2.121v-13h1c0.552 0 1-0.448 1-1s-0.448-1-1-1zM9 5v-1c0-0.276 0.111-0.525 0.293-0.707s0.431-0.293 0.707-0.293h4c0.276 0 0.525 0.111 0.707 0.293s0.293 0.431 0.293 0.707v1zM9 11v6c0 0.552 0.448 1 1 1s1-0.448 1-1v-6c0-0.552-0.448-1-1-1s-1 0.448-1 1zM13 11v6c0 0.552 0.448 1 1 1s1-0.448 1-1v-6c0-0.552-0.448-1-1-1s-1 0.448-1 1z\"\n      }))), createElement(\"button\", {\n        type: \"button\",\n        className: \"aa-ItemActionButton\",\n        title: translations.fillQueryTitle(item.label),\n        onClick: function onClick(event) {\n          event.preventDefault();\n          event.stopPropagation();\n          onTapAhead(item);\n        }\n      }, createElement(\"svg\", {\n        viewBox: \"0 0 24 24\",\n        fill: \"currentColor\"\n      }, createElement(\"path\", {\n        d: \"M8 17v-7.586l8.293 8.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-8.293-8.293h7.586c0.552 0 1-0.448 1-1s-0.448-1-1-1h-10c-0.552 0-1 0.448-1 1v10c0 0.552 0.448 1 1 1s1-0.448 1-1z\"\n      })))));\n    }\n  };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createRef, warn } from '@algolia/autocomplete-shared';\nimport { defaultTranslations } from './constants';\nimport { createStorageApi } from './createStorageApi';\nimport { getTemplates } from './getTemplates';\nfunction getDefaultSubscribe(store) {\n  return function subscribe(_ref) {\n    var onSelect = _ref.onSelect;\n    onSelect(function (_ref2) {\n      var item = _ref2.item,\n        state = _ref2.state,\n        source = _ref2.source;\n      var inputValue = source.getItemInputValue({\n        item: item,\n        state: state\n      });\n      if (source.sourceId === 'querySuggestionsPlugin' && inputValue) {\n        var recentItem = {\n          id: inputValue,\n          label: inputValue,\n          category: item.__autocomplete_qsCategory\n        };\n        store.addItem(recentItem);\n      }\n    });\n  };\n}\nexport function createRecentSearchesPlugin(options) {\n  var _getOptions = getOptions(options),\n    storage = _getOptions.storage,\n    transformSource = _getOptions.transformSource,\n    subscribe = _getOptions.subscribe,\n    translations = _getOptions.translations;\n  var store = createStorageApi(storage);\n  var lastItemsRef = createRef([]);\n  return {\n    name: 'aa.recentSearchesPlugin',\n    subscribe: subscribe !== null && subscribe !== void 0 ? subscribe : getDefaultSubscribe(store),\n    onSubmit: function onSubmit(_ref3) {\n      var state = _ref3.state;\n      var query = state.query;\n      if (query) {\n        var recentItem = {\n          id: query,\n          label: query\n        };\n        store.addItem(recentItem);\n      }\n    },\n    getSources: function getSources(_ref4) {\n      var query = _ref4.query,\n        setQuery = _ref4.setQuery,\n        refresh = _ref4.refresh,\n        state = _ref4.state;\n      lastItemsRef.current = store.getAll(query);\n      function onRemove(id) {\n        store.removeItem(id);\n        refresh();\n      }\n      function onTapAhead(item) {\n        setQuery(item.label);\n        refresh();\n      }\n      return Promise.resolve(lastItemsRef.current).then(function (items) {\n        if (items.length === 0) {\n          return [];\n        }\n        return [transformSource({\n          source: {\n            sourceId: 'recentSearchesPlugin',\n            getItemInputValue: function getItemInputValue(_ref5) {\n              var item = _ref5.item;\n              return item.label;\n            },\n            getItems: function getItems() {\n              return items;\n            },\n            templates: getTemplates({\n              onRemove: onRemove,\n              onTapAhead: onTapAhead,\n              translations: translations\n            })\n          },\n          onRemove: onRemove,\n          onTapAhead: onTapAhead,\n          state: state\n        })];\n      });\n    },\n    data: _objectSpread(_objectSpread({}, store), {}, {\n      // @ts-ignore SearchOptions `facetFilters` is ReadonlyArray\n      getAlgoliaSearchParams: function getAlgoliaSearchParams() {\n        var _params$facetFilters, _params$hitsPerPage;\n        var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        // If the items returned by `store.getAll` are contained in a Promise,\n        // we cannot provide the search params in time when this function is called\n        // because we need to resolve the promise before getting the value.\n        if (!Array.isArray(lastItemsRef.current)) {\n          process.env.NODE_ENV !== 'production' ? warn(false, 'The `getAlgoliaSearchParams` function is not supported with storages that return promises in `getAll`.') : void 0;\n          return params;\n        }\n        return _objectSpread(_objectSpread({}, params), {}, {\n          facetFilters: [].concat(_toConsumableArray((_params$facetFilters = params.facetFilters) !== null && _params$facetFilters !== void 0 ? _params$facetFilters : []), _toConsumableArray(lastItemsRef.current.map(function (item) {\n            return [\"objectID:-\".concat(item.label)];\n          }))),\n          hitsPerPage: Math.max(1, ((_params$hitsPerPage = params.hitsPerPage) !== null && _params$hitsPerPage !== void 0 ? _params$hitsPerPage : 10) - lastItemsRef.current.length)\n        });\n      }\n    }),\n    __autocomplete_pluginOptions: options\n  };\n}\nfunction getOptions(options) {\n  return _objectSpread(_objectSpread({\n    transformSource: function transformSource(_ref6) {\n      var source = _ref6.source;\n      return source;\n    }\n  }, options), {}, {\n    translations: _objectSpread(_objectSpread({}, defaultTranslations), options.translations)\n  });\n}","import { addHighlightedAttribute } from './addHighlightedAttribute';\nexport function search(_ref) {\n  var query = _ref.query,\n    items = _ref.items,\n    limit = _ref.limit;\n  if (!query) {\n    return items.slice(0, limit).map(function (item) {\n      return addHighlightedAttribute({\n        item: item,\n        query: query\n      });\n    });\n  }\n  return items.filter(function (item) {\n    return item.label.toLowerCase().includes(query.toLowerCase());\n  }).slice(0, limit).map(function (item) {\n    return addHighlightedAttribute({\n      item: item,\n      query: query\n    });\n  });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { defaultTranslations, LOCAL_STORAGE_KEY } from './constants';\nimport { createLocalStorage } from './createLocalStorage';\nimport { createRecentSearchesPlugin } from './createRecentSearchesPlugin';\nimport { search as defaultSearch } from './search';\nexport function createLocalStorageRecentSearchesPlugin(options) {\n  var _getOptions = getOptions(options),\n    key = _getOptions.key,\n    limit = _getOptions.limit,\n    transformSource = _getOptions.transformSource,\n    search = _getOptions.search,\n    subscribe = _getOptions.subscribe,\n    translations = _getOptions.translations;\n  var storage = createLocalStorage({\n    key: [LOCAL_STORAGE_KEY, key].join(':'),\n    limit: limit,\n    search: search\n  });\n  var recentSearchesPlugin = createRecentSearchesPlugin({\n    transformSource: transformSource,\n    storage: storage,\n    subscribe: subscribe,\n    translations: translations\n  });\n  return _objectSpread(_objectSpread({}, recentSearchesPlugin), {}, {\n    name: 'aa.localStorageRecentSearchesPlugin',\n    __autocomplete_pluginOptions: options\n  });\n}\nfunction getOptions(options) {\n  return _objectSpread(_objectSpread({\n    limit: 5,\n    search: defaultSearch,\n    transformSource: function transformSource(_ref) {\n      var source = _ref.source;\n      return source;\n    }\n  }, options), {}, {\n    translations: _objectSpread(_objectSpread({}, defaultTranslations), options.translations)\n  });\n}","import { countries, excludeUndefined } from \"@ourworldindata/utils\"\nimport * as R from \"remeda\"\nimport { SynonymMap } from \"@ourworldindata/types\"\n\nexport const synonyms = [\n    [\"owid\", \"our world in data\"],\n    [\"kids\", \"children\"],\n    [\"pork\", \"pigmeat\"],\n    [\"atomic\", \"nuclear\"],\n    [\"pop\", \"population\"],\n    [\"cheese\", \"dairy\"],\n    [\n        \"gdp\",\n        \"gross domestic product\",\n        \"economic output\",\n        \"pib\" /* spanish, french */,\n        \"pil\" /* italian */,\n        \"bip\" /* polish */,\n        \"bnp\" /* swedish, danish, norwegian */,\n    ],\n    [\"gdp per capita\", \"income per person\"],\n    [\"per capita\", \"per person\"],\n    [\"overpopulation\", \"population growth\"],\n    [\"covid\", \"covid-19\", \"coronavirus\", \"corona\"],\n    [\"flu\", \"influenza\"],\n    [\n        \"carbon footprint\",\n        \"emissions footprint\",\n        \"carbon emissions\",\n        \"co2 emissions\",\n        \"CO₂ emissions\",\n        \"c02 emissions\",\n        \"carbon dioxide emissions\",\n    ],\n    [\n        \"co2\",\n        \"CO₂\",\n        \"c02\" /* we consistently get some of these, with a zero for the \"o\" */,\n        \"carbon dioxide\",\n    ],\n    [\"ch4\", \"CH₄\", \"methane\"],\n    [\"n2o\", \"N₂O\", \"nitrous oxide\"],\n    [\"NOx\", \"NOₓ\", \"nitrogen dioxide\"],\n    [\"price\", \"prices\", \"pricing\", \"cost\", \"costs\"],\n    [\n        \"immunization\",\n        \"immunizations\",\n        \"immunisation\",\n        \"immunisations\",\n        \"vaccine\",\n        \"vaccines\",\n        \"vaccination\",\n        \"vaccinations\",\n        \"vacuna\" /* spanish */,\n    ],\n    [\"ghg\", \"greenhouse gas\"],\n    [\"rate\", \"share\", \"percentage\", \"percent\"],\n    [\n        \"hospital admission\",\n        \"hospital admissions\",\n        \"hospitalization\",\n        \"hospitalizations\",\n        \"hospitalisation\",\n        \"hospitalisations\",\n        \"in hospital\",\n    ],\n    [\"incidence\", \"daily new confirmed cases\"],\n    [\n        \"homosexual\",\n        \"homosexuality\",\n        \"gay\",\n        \"lesbian\",\n        \"LGBT\",\n        \"LGBTQ\",\n        \"LGBTQIA\",\n    ],\n    [\n        \"clean water\",\n        \"safe water\",\n        \"drinking water\",\n        \"water pollution\",\n        \"water quality\",\n    ],\n    [\"water demand\", \"water withdrawal\", \"water scarcity\", \"water stress\"],\n    [\n        \"vaccine hesitancy\",\n        \"vaccine attitude\",\n        \"vaccine attitudes\",\n        \"vaccine willingness\",\n    ],\n    [\"electric power\", \"power\", \"electricity\"],\n    [\n        \"artificial intelligence\",\n        \"ai\",\n        \"machine learning\",\n        \"neural network\",\n        \"chatgpt\", // added in 2023-03, we might want to remove this in the future\n        \"chat gpt\",\n        \"llm\",\n    ],\n    [\"hdi\", \"human development index\", \"idh\" /* spanish, french */],\n    [\"drug\", \"drugs\", \"substance use\"],\n    [\"r&d\", \"r & d\", \"research\"],\n    [\n        \"plane\",\n        \"planes\",\n        \"airplane\",\n        \"airplanes\",\n        \"aviation\",\n        \"airline\",\n        \"airlines\",\n        \"flying\",\n        \"air travel\",\n        \"flight\",\n        \"flights\",\n    ],\n    [\n        \"EV\",\n        \"EVs\",\n        \"electric vehicle\",\n        \"electric vehicles\",\n        \"electric car\",\n        \"electric cars\",\n        \"hybrid car\",\n        \"hybrid cars\",\n    ],\n    [\"trains\", \"railway\"],\n    [\"dying\", \"death\", \"deaths\", \"mortality\"],\n    [\"disease\", \"diseases\", \"illness\"],\n    [\"poverty\", \"poor\"],\n    [\"homicide\", \"murder\", \"murders\"],\n    [\"inflation\", \"price change\", \"price changes\", \"change in price\"],\n    [\"gun\", \"guns\", \"firearm\", \"firearms\"],\n    [\n        \"happiness\",\n        \"happy\",\n        \"happyness\" /* common typo */,\n        \"satisfaction\",\n        \"life satisfaction\",\n    ],\n    [\n        \"sdg\",\n        \"sdgs\",\n        \"sustainable development goal\",\n        \"sustainable development goals\",\n        \"sdg tracker\",\n    ],\n    [\n        \"sexism\",\n        \"gender discrimination\",\n        \"gender gap\",\n        \"gender inequality\",\n        \"gender inequalities\",\n        \"inequality by gender\",\n    ],\n    [\"child mortality\", \"infant mortality\"],\n    [\"depression\", \"depressive\", \"mental health\"],\n    [\"time use\", \"time spent\", \"time spend\"],\n    [\"enrollment\", \"enrolment\", \"enrolled\"],\n    [\"meter\", \"metre\", \"meters\", \"metres\"],\n    [\"kilometer\", \"kilometre\", \"kilometers\", \"kilometres\"],\n    [\"defense\", \"defence\", \"military\"],\n    [\"smog\", \"air pollution\", \"air quality\"],\n    [\"jail\", \"prison\"],\n    [\"funding\", \"funded\"],\n    [\"solar\", \"photovoltaic\", \"photovoltaics\", \"pv\"],\n    [\"tb\", \"tuberculosis\"],\n    [\"ntd\", \"neglected tropical diseases\", \"neglected tropical disease\"],\n    [\"fgm\", \"female genital mutilation\"],\n    [\"people\", \"population\"],\n    [\"production\", \"generation\"],\n    [\"farm\", \"farming\", \"agriculture\", \"food production\"],\n    [\"life expectancy\", \"longevity\"],\n    [\"fertility\", \"children per woman\"],\n    [\"hiv\", \"aids\", \"hiv/aids\"],\n    [\"obesity\", \"overweight\", \"body mass index\", \"bmi\"],\n    [\"smoking\", \"tobacco\", \"cigarettes\"],\n    [\"alcohol\", \"drinking\"],\n    [\"stroke\", \"cerebrovascular\"],\n    [\"heart\", \"cardiovascular\", \"cardiac\"],\n    [\"inequality\", \"gini\"],\n    [\"employment\", \"jobs\", \"workforce\", \"labor\", \"labour\"],\n    [\"migration\", \"immigration\", \"emigration\"],\n    [\"urbanization\", \"urbanisation\", \"urban\"],\n    [\"foreign aid\", \"development assistance\", \"oda\"],\n    [\"climate change\", \"global warming\"],\n    [\"conflict\", \"war\"],\n    [\"deforestation\", \"forest loss\", \"tree loss\"],\n    [\"land use\", \"land-use\", \"land cover\"],\n    [\n        \"renewable energy\",\n        \"clean energy\",\n        \"green energy\",\n        \"renewables\",\n        \"alternative energy\",\n    ],\n    [\"biodiversity\", \"species\", \"ecosystem\", \"extinction\", \"habitat\"],\n    [\"ocean\", \"marine\", \"sea\"],\n    [\"soil\", \"land\"],\n    [\"recycling\", \"reuse\"],\n    [\"maternal mortality\", \"maternal death\", \"maternal deaths\"],\n    [\n        \"malnutrition\",\n        \"undernutrition\",\n        \"stunting\",\n        \"wasting\",\n        \"undernourished\",\n        \"malnourished\",\n        \"hunger\",\n        \"undernourishment\",\n        \"malnourishment\",\n        \"food insecurity\",\n    ],\n    [\"micronutrient deficiency\", \"vitamin deficiency\", \"mineral deficiency\"],\n    [\"contraception\", \"birth control\", \"family planning\"],\n    [\"epidemic\", \"outbreak\", \"pandemic\"],\n    [\"sanitation\", \"toilet\", \"toilets\", \"latrine\", \"latrines\"],\n    [\n        \"non-communicable disease\",\n        \"ncd\",\n        \"chronic disease\",\n        \"non-communicable diseases\",\n        \"chronic diseases\",\n    ],\n    [\n        \"communicable disease\",\n        \"infectious disease\",\n        \"communicable diseases\",\n        \"infectious diseases\",\n    ],\n    [\"maternal health\", \"reproductive health\"],\n    [\"productivity\", \"labor productivity\", \"labour productivity\"],\n    [\"debt\", \"public debt\", \"government debt\"],\n    [\"salary\", \"income\"],\n    [\"industrialization\", \"industrialisation\", \"manufacturing\"],\n    [\"remittances\", \"money transfers\", \"money sent\", \"money received\"],\n    [\"energy consumption\", \"energy use\", \"energy demand\"],\n    [\"plastic pollution\", \"plastic waste\"],\n    [\"soil erosion\", \"land degradation\"],\n    [\"sea level rise\", \"sea levels\", \"ocean levels\"],\n    [\"public transport\", \"public transportation\", \"mass transit\"],\n    [\"internet\", \"broadband\", \"online\"],\n    [\n        \"mobile phone\",\n        \"mobile phones\",\n        \"cell phone\",\n        \"cell phones\",\n        \"smartphone\",\n        \"smartphones\",\n    ],\n    [\"education\", \"schooling\", \"school\"],\n    [\"literacy\", \"illiteracy\", \"literate\", \"illiterate\", \"read and write\"],\n    [\"antibiotic resistance\", \"antimicrobial resistance\"],\n    [\"healthcare\", \"health care\", \"medical care\"],\n    [\n        \"energy access\",\n        \"electricity access\",\n        \"access to electricity\",\n        \"access to energy\",\n    ],\n    [\"solar power\", \"solar energy\"],\n    [\"wind power\", \"wind energy\"],\n    [\"hydropower\", \"hydro power\", \"hydroelectric power\"],\n    [\"geothermal energy\", \"geothermal power\"],\n    [\"nuclear power\", \"nuclear energy\"],\n    [\n        \"self-driving\",\n        \"driverless\",\n        \"autonomous car\",\n        \"autonomous vehicle\",\n        \"self driving\",\n        \"robotaxis\",\n    ],\n    [\"gaza\", \"palestine\", \"west bank\"],\n    [\"hpv\", \"human papillomavirus\"],\n    [\"tertiary\", \"university\", \"college\", \"post-secondary\"],\n    [\"fdi\", \"foreign direct investment\"],\n    [\"sex\", \"gender\"],\n]\n\n/**\n * Builds a synonym map where each term points to all its possible synonyms across groups.\n * Handles both bidirectional synonyms (from synonym groups) and unidirectional country alternatives.\n *\n * Examples:\n * - Bidirectional: \"ai\" → [\"artificial intelligence\", \"machine learning\", \"neural network\"]\n * - Bidirectional: \"artificial intelligence\" → [\"ai\", \"machine learning\", \"neural network\"]\n * - Unidirectional: \"us\" → [\"united states\"] (but \"united states\" does not map back to \"us\")\n * - Unidirectional: \"uk\" → [\"united kingdom\"]\n *\n * @returns Map where keys are lowercase terms and values are arrays of their synonyms\n */\nexport function buildSynonymMap(): SynonymMap {\n    const synonymMap: SynonymMap = new Map()\n\n    // Process bidirectional synonym groups\n    for (const group of synonyms) {\n        for (const term of group) {\n            const [, otherTerms] = R.partition(group, (t) => t === term)\n            const termLower = term.toLowerCase()\n            const otherTermsLower = otherTerms.map((t) => t.toLowerCase())\n\n            if (synonymMap.has(termLower)) {\n                // Merge with existing synonyms, avoiding overriding previous\n                // synonyms (e.g. \"economic growth\")\n                const existing = synonymMap.get(termLower)!\n                const combined = [...existing, ...otherTermsLower]\n                synonymMap.set(termLower, [...new Set(combined)])\n            } else {\n                synonymMap.set(termLower, otherTermsLower)\n            }\n        }\n    }\n\n    // Process unidirectional country alternatives (us -> united states, but not united states -> us)\n    for (const country of countries) {\n        const alternatives = excludeUndefined([\n            country.shortName,\n            ...(country.variantNames ?? []),\n        ])\n\n        for (const alternative of alternatives) {\n            const alternativeLower = alternative.toLowerCase()\n            const countryNameLower = country.name.toLowerCase()\n            // this will technically overwrite any existing synonym mapping with\n            // country alternatives. In practice the risk of collision is low\n            // given that we don't use countries' short codes (only short names\n            // and variants, which amounts to less 10 countries). So code\n            // simplicity is favoured here.\n            synonymMap.set(alternativeLower, [countryNameLower])\n        }\n    }\n\n    return synonymMap\n}\n","import { ReactNode } from \"react\"\nimport { faClose } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport cx from \"classnames\"\n\nexport function SearchFilterPill({\n    name,\n    selected = false,\n    interactive = false,\n    icon,\n    className,\n}: {\n    name: string\n    selected?: boolean\n    interactive?: boolean\n    icon: ReactNode\n    className?: string\n}) {\n    const nameLabel = name.replaceAll(\" and \", \" & \")\n    return (\n        <span\n            className={cx(\n                \"search-filter-pill\",\n                {\n                    \"search-filter-pill--selected\": selected,\n                    \"search-filter-pill--interactive\": interactive,\n                },\n                className\n            )}\n        >\n            {icon}\n            <span className=\"name\">{nameLabel}</span>\n            {selected && (\n                <span className=\"close\">\n                    <FontAwesomeIcon icon={faClose} />\n                </span>\n            )}\n        </span>\n    )\n}\n","import { useRef, useState, useEffect, useMemo } from \"react\"\nimport * as React from \"react\"\nimport { createRoot, Root } from \"react-dom/client\"\nimport urljoin from \"url-join\"\nimport { useTopicTagGraph, useTagGraphTopics } from \"./searchHooks.js\"\nimport {\n    AutocompleteApi,\n    AutocompleteSource,\n    autocomplete,\n    getAlgoliaResults,\n} from \"@algolia/autocomplete-js\"\nimport { LiteClient, liteClient } from \"algoliasearch/lite\"\nimport { createLocalStorageRecentSearchesPlugin } from \"@algolia/autocomplete-plugin-recent-searches\"\nimport {\n    ChartRecordType,\n    Filter,\n    FilterType,\n    SynonymMap,\n    SearchResultType,\n} from \"@ourworldindata/types\"\nimport { getCanonicalUrl } from \"@ourworldindata/components\"\nimport {\n    ALGOLIA_ID,\n    ALGOLIA_SEARCH_KEY,\n    BAKED_BASE_URL,\n    BAKED_GRAPHER_URL,\n} from \"../../settings/clientSettings.js\"\nimport { DEFAULT_SEARCH_PLACEHOLDER } from \"./searchClient.js\"\nimport {\n    PAGES_INDEX,\n    CHARTS_INDEX,\n    suggestFiltersFromQuerySuffix,\n    getFilterIcon,\n    getItemUrlForFilter,\n    getPageTypeNameAndIcon,\n    SEARCH_BASE_PATH,\n} from \"./searchUtils.js\"\nimport {\n    getUserCountryInformation,\n    listedRegionsNames,\n    OwidGdocType,\n    queryParamsToStr,\n} from \"@ourworldindata/utils\"\nimport { SiteAnalytics } from \"../SiteAnalytics.js\"\nimport Mousetrap from \"mousetrap\"\nimport * as Sentry from \"@sentry/react\"\nimport { match } from \"ts-pattern\"\nimport { EXPLORERS_ROUTE_FOLDER } from \"@ourworldindata/explorer\"\nimport { buildSynonymMap } from \"./synonymUtils.js\"\nimport { SearchFilterPill } from \"./SearchFilterPill.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faLineChart, faSearch } from \"@fortawesome/free-solid-svg-icons\"\n\nexport const AUTOCOMPLETE_CONTAINER_ID = \"#autocomplete\"\n// A magic number slightly higher than our $md breakpoint to ensure there's\n// enough room for everything in the site nav between 960-1045px. Related to\n// vars in Autocomplete.scss.\nexport const DETACHED_MODE_MAX_WIDTH = 1045\nconst DETACHED_MEDIA_QUERY = `(max-width: ${DETACHED_MODE_MAX_WIDTH}px)`\n\nconst siteAnalytics = new SiteAnalytics()\ntype BaseItem = Record<string, unknown>\n\nconst recentSearchesPlugin = createLocalStorageRecentSearchesPlugin({\n    key: \"RECENT_SEARCH\",\n    limit: 3,\n    transformSource({ source }) {\n        return {\n            ...source,\n            onSelect({ item, navigator }) {\n                navigator.navigate({\n                    itemUrl: `${SEARCH_BASE_PATH}${queryParamsToStr({ q: item.id, resultType: SearchResultType.ALL })}`,\n                } as any)\n            },\n        }\n    },\n})\n\nlet liteSearchClient: LiteClient | null\nif (ALGOLIA_ID && ALGOLIA_SEARCH_KEY) {\n    liteSearchClient = liteClient(ALGOLIA_ID, ALGOLIA_SEARCH_KEY)\n} else {\n    liteSearchClient = null\n    console.warn(\"Algolia credentials are not set\")\n}\n\nconst onSelect: AutocompleteSource<BaseItem>[\"onSelect\"] = ({\n    navigator,\n    item,\n    state,\n}) => {\n    const itemUrl = item.slug as string\n    navigator.navigate({ itemUrl, item, state })\n}\n\nconst getItemUrl: AutocompleteSource<BaseItem>[\"getItemUrl\"] = ({ item }) =>\n    item.slug as string\n\n// The slugs we index to Algolia don't include grapher/, explorers/, or data-insights/ subdirectories\n// Prepend them with this function when we need them\nconst prependSubdirectoryToAlgoliaItemUrl = (item: BaseItem): string => {\n    const indexName = item.__autocomplete_indexName as string\n    return match(indexName)\n        .with(PAGES_INDEX, () => {\n            return getCanonicalUrl(BAKED_BASE_URL, {\n                slug: item.slug as string,\n                content: {\n                    type: item.type as OwidGdocType,\n                },\n            })\n        })\n        .with(CHARTS_INDEX, () => {\n            return match(item.type as ChartRecordType)\n                .with(ChartRecordType.ExplorerView, () => {\n                    const url = new URL(\n                        urljoin(\n                            BAKED_BASE_URL,\n                            EXPLORERS_ROUTE_FOLDER,\n                            item.slug as string\n                        )\n                    )\n                    const queryParams = new URLSearchParams(\n                        item.queryParams as string\n                    )\n                    for (const [key, value] of queryParams) {\n                        url.searchParams.set(key, value)\n                    }\n                    return url.toString()\n                })\n                .with(ChartRecordType.Chart, () => {\n                    return urljoin(BAKED_GRAPHER_URL, item.slug as string)\n                })\n                .with(ChartRecordType.MultiDimView, () => {\n                    const url = new URL(\n                        urljoin(BAKED_GRAPHER_URL, item.slug as string)\n                    )\n                    const queryParams = new URLSearchParams(\n                        item.queryParams as string\n                    )\n                    for (const [key, value] of queryParams) {\n                        url.searchParams.set(key, value)\n                    }\n                    return url.toString()\n                })\n                .exhaustive()\n        })\n        .otherwise(() => {\n            Sentry.captureMessage(`Unknown Algolia index name: ${indexName}`, {\n                level: \"error\",\n            })\n            return urljoin(BAKED_BASE_URL, item.slug as string)\n        })\n}\n\nconst FeaturedSearchesSource: AutocompleteSource<BaseItem> = {\n    sourceId: \"suggestedSearch\",\n    onSelect,\n    getItemUrl,\n    getItems() {\n        return [\"CO2\", \"Energy\", \"Education\", \"Poverty\", \"Democracy\"].map(\n            (term) => ({\n                title: term,\n                slug: `${SEARCH_BASE_PATH}${queryParamsToStr({ q: term, resultType: SearchResultType.ALL })}`,\n            })\n        )\n    },\n\n    templates: {\n        item: ({ item }) => {\n            return (\n                <span className=\"autocomplete-item-contents\">\n                    <span className=\"autocomplete-item-contents__type-icon\">\n                        <FontAwesomeIcon icon={faSearch} />\n                    </span>\n                    <span className=\"autocomplete-item-contents__query autocomplete-item-contents__query--only\">\n                        {item.title as string}\n                    </span>\n                </span>\n            )\n        },\n    },\n}\n\nconst algoliaItemTemplate: AutocompleteSource<BaseItem>[\"templates\"] = {\n    item: ({ item, components }) => {\n        const indexName = item.__autocomplete_indexName as string\n\n        const { label: indexLabel, icon: indexIcon } = match(indexName)\n            .with(CHARTS_INDEX, () => ({\n                label:\n                    item.type === ChartRecordType.ExplorerView\n                        ? \"Explorer\"\n                        : \"Chart\",\n                icon: faLineChart,\n            }))\n            .with(PAGES_INDEX, () => {\n                const { name, icon } = getPageTypeNameAndIcon(\n                    item.type as OwidGdocType\n                )\n                return { label: name, icon }\n            })\n            .otherwise(() => {\n                Sentry.captureMessage(\n                    `Unknown Algolia index name: ${indexName}`,\n                    { level: \"error\" }\n                )\n                return { label: \"Result\", icon: faSearch }\n            })\n\n        return (\n            <span\n                className=\"autocomplete-item-contents\"\n                key={item.title as string}\n                translate=\"no\"\n            >\n                <span>\n                    <FontAwesomeIcon\n                        icon={indexIcon}\n                        className=\"autocomplete-item-contents__type-icon\"\n                    />\n                </span>\n                <span>\n                    <components.Highlight\n                        hit={item}\n                        attribute={\"title\"}\n                        tagName=\"strong\"\n                    />\n                    <span className=\"autocomplete-item-contents__contentType\">\n                        {indexLabel}\n                    </span>\n                </span>\n            </span>\n        )\n    },\n}\n\nconst algoliaOnSelect: AutocompleteSource<BaseItem>[\"onSelect\"] = ({\n    navigator,\n    item,\n    state,\n}) => {\n    const itemUrl = prependSubdirectoryToAlgoliaItemUrl(item)\n    siteAnalytics.logInstantSearchClick({\n        query: state.query,\n        url: itemUrl,\n        position: String(state.activeItemId),\n    })\n    navigator.navigate({ itemUrl, item, state })\n}\n\nconst algoliaGetItemUrl: AutocompleteSource<BaseItem>[\"getItemUrl\"] = ({\n    item,\n}) => prependSubdirectoryToAlgoliaItemUrl(item)\n\nconst AlgoliaPagesSource: AutocompleteSource<BaseItem> = {\n    sourceId: \"autocomplete\",\n    onSelect: algoliaOnSelect,\n    getItemUrl: algoliaGetItemUrl,\n    getItems({ query }) {\n        if (!liteSearchClient) return []\n\n        return getAlgoliaResults({\n            searchClient: liteSearchClient,\n            queries: [\n                {\n                    indexName: PAGES_INDEX,\n                    params: {\n                        query,\n                        hitsPerPage: 2,\n                        distinct: true,\n                        filters: `NOT type:${OwidGdocType.Profile}`,\n                    },\n                },\n            ],\n        })\n    },\n    templates: algoliaItemTemplate,\n}\n\nconst AlgoliaChartsSource: AutocompleteSource<BaseItem> = {\n    sourceId: \"autocomplete-charts\",\n    onSelect: algoliaOnSelect,\n    getItemUrl: algoliaGetItemUrl,\n    getItems({ query }) {\n        if (!liteSearchClient) return []\n\n        return getAlgoliaResults({\n            searchClient: liteSearchClient,\n            queries: [\n                {\n                    indexName: CHARTS_INDEX,\n                    params: {\n                        query,\n                        hitsPerPage: 3,\n                        distinct: true,\n                    },\n                },\n            ],\n        })\n    },\n    templates: algoliaItemTemplate,\n}\n\nconst createFiltersSource = (\n    allTopics: string[],\n    synonymMap: SynonymMap\n): AutocompleteSource<BaseItem> => ({\n    sourceId: \"filters\",\n    onSelect({ navigator, item, state }) {\n        const itemUrl = item.slug as string\n        siteAnalytics.logInstantSearchClick({\n            query: state.query,\n            url: itemUrl,\n            position: String(state.activeItemId),\n        })\n        navigator.navigate({ itemUrl, item, state })\n    },\n    getItemUrl,\n    getItems({ query }) {\n        if (!query.trim()) return []\n\n        const suggestions = suggestFiltersFromQuerySuffix(\n            query,\n            listedRegionsNames(),\n            allTopics,\n            [], // no selected filters in this context\n            synonymMap\n        )\n\n        return (\n            suggestions.suggestions\n                // Suggestions must now be explicitly selected by the user\n                // (opt-out by default). Pressing \"enter\" will search for the\n                // current query directly, so we no longer need to include an\n                // extra query suggestion here.\n                .filter((filter) => filter.type !== FilterType.QUERY)\n                .map((filter) => ({\n                    filter,\n                    unmatchedQuery: suggestions.unmatchedQuery,\n                    slug: getItemUrlForFilter(\n                        filter,\n                        suggestions.unmatchedQuery\n                    ),\n                }))\n        )\n    },\n    templates: {\n        item: ({ item }) => {\n            const filter = item.filter as Filter\n            const unmatchedQuery = item.unmatchedQuery as string\n\n            return (\n                match(filter.type)\n                    .with(FilterType.COUNTRY, () => (\n                        <span className=\"autocomplete-item-contents\">\n                            <span className=\"autocomplete-item-contents__type-icon\">\n                                <FontAwesomeIcon icon={faSearch} />\n                            </span>\n                            <span className=\"autocomplete-item-contents__query autocomplete-item-contents__query--unmatched\">\n                                {unmatchedQuery} {filter.name.toLowerCase()}\n                            </span>\n                        </span>\n                    ))\n                    .with(FilterType.TOPIC, () => (\n                        <span className=\"autocomplete-item-contents\">\n                            <span className=\"autocomplete-item-contents__type-icon\">\n                                <FontAwesomeIcon icon={faSearch} />\n                            </span>\n                            <SearchFilterPill\n                                name={filter.name}\n                                icon={getFilterIcon(filter)}\n                            />\n                        </span>\n                    ))\n                    // dataset filters are not suggested in autocomplete\n                    .with(\n                        FilterType.DATASET_PRODUCT,\n                        FilterType.DATASET_NAMESPACE,\n                        FilterType.DATASET_VERSION,\n                        FilterType.DATASET_PRODUCER,\n                        () => <></>\n                    )\n                    // query filters are filtered out in getItems\n                    .with(FilterType.QUERY, () => <></>)\n                    .exhaustive()\n            )\n        },\n    },\n})\n\n/**\n * Creates a profile source that boosts the user's geolocated country\n * using Algolia's `optionalFilters`. This avoids running expensive\n * client-side country detection on every keystroke while still ensuring:\n * - \"energy\" → \"Energy in Canada\" (boosted by geolocation)\n * - \"canada\" → Canada profiles (matched by Algolia on title)\n * - \"energy france\" → \"Energy in France\" (matched naturally)\n *\n * Requires the `filters` ranking criterion in the index settings\n * (see configureAlgolia.ts).\n */\nconst createProfileSource = (\n    countryName: string | undefined\n): AutocompleteSource<BaseItem> => ({\n    sourceId: \"profiles\",\n    onSelect: algoliaOnSelect,\n    getItemUrl: algoliaGetItemUrl,\n    getItems({ query }) {\n        if (!liteSearchClient) return []\n\n        return getAlgoliaResults({\n            searchClient: liteSearchClient,\n            queries: [\n                {\n                    indexName: PAGES_INDEX,\n                    params: {\n                        query,\n                        filters: `type:${OwidGdocType.Profile}`,\n                        ...(countryName && {\n                            optionalFilters: [\n                                `availableEntities:${countryName}`,\n                            ],\n                        }),\n                        hitsPerPage: 1,\n                    },\n                },\n            ],\n        })\n    },\n    templates: algoliaItemTemplate,\n})\n\nexport function Autocomplete({\n    onActivate,\n    onClose,\n    className,\n    placeholder = DEFAULT_SEARCH_PLACEHOLDER,\n    panelClassName,\n}: {\n    onActivate?: () => void\n    onClose?: () => void\n    className?: string\n    placeholder?: string\n    panelClassName?: string\n}) {\n    const containerRef = useRef<HTMLDivElement>(null)\n    const panelRootRef = useRef<Root | null>(null)\n    const rootRef = useRef<HTMLElement | null>(null)\n    const { allTopics } = useTagGraphTopics(useTopicTagGraph())\n\n    const synonymMap = useMemo(() => buildSynonymMap(), [])\n\n    const [search, setSearch] = useState<AutocompleteApi<BaseItem> | null>(null)\n\n    const userCountryNameRef = useRef<string | undefined>(undefined)\n    useEffect(() => {\n        void getUserCountryInformation().then((info) => {\n            userCountryNameRef.current = info?.name\n        })\n    }, [])\n\n    useEffect(() => {\n        if (!containerRef.current) return\n\n        const search = autocomplete({\n            placeholder,\n            // Setting the `enterKeyHint` fixes a bug on Samsung phones where\n            // characters may be deleted when typing.\n            // https://support.algolia.com/hc/en-us/articles/35765245191057-Why-are-characters-being-deleted-from-Autocomplete-when-typing-on-a-Samsung-device\n            enterKeyHint: \"search\",\n            detachedMediaQuery: DETACHED_MEDIA_QUERY,\n            container: containerRef.current,\n            classNames: {\n                panel: panelClassName,\n            },\n            openOnFocus: true,\n            onStateChange({ state, prevState }) {\n                if (onActivate && !prevState.isOpen && state.isOpen) {\n                    onActivate()\n                } else if (onClose && prevState.isOpen && !state.isOpen) {\n                    onClose()\n                }\n            },\n            // Keep the panel open while typing even if there are no suggestions (would otherwise close by default)\n            shouldPanelOpen({ state }) {\n                if (state.query) return true\n                return state.collections.some(\n                    (collection) => collection.items.length > 0\n                )\n            },\n            onSubmit({ state, navigator }) {\n                if (!state.query) return\n                navigator.navigate({\n                    itemUrl: `${SEARCH_BASE_PATH}${queryParamsToStr({ q: state.query, resultType: SearchResultType.ALL })}`,\n                    // this method is incorrectly typed - `item` and `state` are optional\n                } as any)\n            },\n            renderer: {\n                createElement: React.createElement,\n                Fragment: React.Fragment,\n                render: () => {\n                    // empty method, see https://www.algolia.com/doc/ui-libraries/autocomplete/integrations/using-react/#with-react-18\n                },\n            },\n            render({ children }, root) {\n                if (!panelRootRef.current || rootRef.current !== root) {\n                    rootRef.current = root\n\n                    panelRootRef.current?.unmount()\n                    panelRootRef.current = createRoot(root)\n                }\n\n                panelRootRef.current.render(children)\n            },\n            getSources({ query }) {\n                const sources: AutocompleteSource<BaseItem>[] = []\n                if (query) {\n                    sources.push(\n                        createFiltersSource(allTopics, synonymMap),\n                        createProfileSource(userCountryNameRef.current),\n                        AlgoliaPagesSource,\n                        AlgoliaChartsSource\n                    )\n                } else {\n                    sources.push(FeaturedSearchesSource)\n                }\n                return sources\n            },\n            plugins: [recentSearchesPlugin],\n        })\n\n        setSearch(search)\n\n        const input =\n            containerRef.current.querySelector<HTMLInputElement>(\"input\")\n        if (input) {\n            input.dataset.testid = \"autocomplete-input\"\n            const inputId = input.id\n            const button = containerRef.current.querySelector(\n                `label[for='${inputId}'] button`\n            )\n            // Disable the button on mount. We know there's no input because the element is created by JS\n            // and thus isn't persisted between navigations\n            button?.setAttribute(\"disabled\", \"true\")\n\n            input.addEventListener(\"input\", () => {\n                const isFormValid = input.checkValidity()\n                if (isFormValid) {\n                    button?.removeAttribute(\"disabled\")\n                } else {\n                    button?.setAttribute(\"disabled\", \"true\")\n                }\n            })\n        }\n\n        return () => search.destroy()\n    }, [\n        onActivate,\n        onClose,\n        placeholder,\n        panelClassName,\n        containerRef,\n        allTopics,\n        synonymMap,\n        userCountryNameRef,\n    ])\n\n    // Register a global shortcut to open the search box on typing \"/\"\n    useEffect(() => {\n        if (!search) return\n\n        Mousetrap.bind(\"/\", (e) => {\n            e.preventDefault() // don't type \"/\" into input\n            search.setIsOpen(true)\n\n            const input =\n                containerRef.current?.querySelector<HTMLInputElement>(\"input\")\n            input?.focus()\n        })\n\n        return () => {\n            Mousetrap.unbind(\"/\")\n        }\n    }, [search, containerRef])\n\n    return <div className={className} ref={containerRef} id=\"autocomplete\" />\n}\n","import { useContext } from \"react\"\nimport { Autocomplete } from \"../../search/Autocomplete.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { commafyNumber } from \"@ourworldindata/utils\"\nimport { SEARCH_BASE_PATH } from \"../../search/searchUtils.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowRight,\n    faBookmark,\n    faChartLine,\n    faMagnifyingGlassChart,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.js\"\n\nexport function HomepageSearch(props: { className?: string }) {\n    const { homepageMetadata } = useContext(AttachmentsContext)\n    const chartCount = homepageMetadata?.chartCount\n    const topicCount = homepageMetadata?.topicCount\n    const explorerCount = homepageMetadata?.explorerCount\n    const message =\n        chartCount && topicCount && explorerCount ? (\n            <div>\n                <ul className=\"homepage-search__links\">\n                    <li>\n                        <a\n                            className=\"homepage-search__link body-3-medium\"\n                            href={SEARCH_BASE_PATH}\n                        >\n                            <FontAwesomeIcon icon={faChartLine} />\n                            {commafyNumber(chartCount)} Charts\n                        </a>\n                    </li>\n                    <li>\n                        <a\n                            className=\"homepage-search__link body-3-medium\"\n                            href=\"#all-topics\"\n                        >\n                            <FontAwesomeIcon icon={faBookmark} />\n                            {commafyNumber(topicCount)} Topic Pages\n                        </a>\n                    </li>\n                    <li>\n                        <a\n                            className=\"homepage-search__link body-3-medium\"\n                            href=\"/explorers\"\n                        >\n                            <FontAwesomeIcon icon={faMagnifyingGlassChart} />\n                            {commafyNumber(explorerCount)} Data Explorers\n                        </a>\n                    </li>\n                </ul>\n                <div className=\"homepage-search__links--mobile\">\n                    <a href=\"/data\" className=\"body-3-medium\">\n                        {commafyNumber(chartCount)} Charts\n                    </a>{\" \"}\n                    across {commafyNumber(topicCount)} topics\n                </div>\n                <p className=\"homepage-search__tagline\">\n                    All free: open access and open source\n                </p>\n            </div>\n        ) : (\n            <p className=\"homepage-search__tagline\">\n                Thousands of charts across 200 topics - All free: open access\n                and open source\n            </p>\n        )\n    return (\n        <div className={props.className}>\n            <h2 className=\"h1-semibold span-cols-6 col-start-5 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\">\n                Research and data to make progress against the world’s largest\n                problems.\n            </h2>\n            <a\n                href={`${BAKED_BASE_URL}/about#our-mission`}\n                className=\"homepage-search__about-link span-cols-6 col-start-5 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\"\n            >\n                Read about our mission <FontAwesomeIcon icon={faArrowRight} />\n            </a>\n            <Autocomplete\n                className=\"span-cols-6 col-start-5 span-md-cols-10 col-md-start-3 span-sm-cols-12 col-sm-start-2\"\n                panelClassName=\"homepage-search__panel\"\n            />\n            <div className=\"span-cols-14 homepage-search__links-and-tagline\">\n                {message}\n            </div>\n        </div>\n    )\n}\n","function isObject(subject) {\n  return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction isRecord(subject) {\n  return isObject(subject) || Array.isArray(subject);\n}\nfunction canUseDOM() {\n  return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}\nfunction areOptionsEqual(optionsA, optionsB) {\n  const optionsAKeys = Object.keys(optionsA);\n  const optionsBKeys = Object.keys(optionsB);\n  if (optionsAKeys.length !== optionsBKeys.length) return false;\n  const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}));\n  const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}));\n  if (breakpointsA !== breakpointsB) return false;\n  return optionsAKeys.every(key => {\n    const valueA = optionsA[key];\n    const valueB = optionsB[key];\n    if (typeof valueA === 'function') return `${valueA}` === `${valueB}`;\n    if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB;\n    return areOptionsEqual(valueA, valueB);\n  });\n}\nfunction sortAndMapPluginToOptions(plugins) {\n  return plugins.concat().sort((a, b) => a.name > b.name ? 1 : -1).map(plugin => plugin.options);\n}\nfunction arePluginsEqual(pluginsA, pluginsB) {\n  if (pluginsA.length !== pluginsB.length) return false;\n  const optionsA = sortAndMapPluginToOptions(pluginsA);\n  const optionsB = sortAndMapPluginToOptions(pluginsB);\n  return optionsA.every((optionA, index) => {\n    const optionB = optionsB[index];\n    return areOptionsEqual(optionA, optionB);\n  });\n}\n\nexport { areOptionsEqual, arePluginsEqual, canUseDOM, sortAndMapPluginToOptions };\n//# sourceMappingURL=embla-carousel-reactive-utils.esm.js.map\n","function isNumber(subject) {\n  return typeof subject === 'number';\n}\nfunction isString(subject) {\n  return typeof subject === 'string';\n}\nfunction isBoolean(subject) {\n  return typeof subject === 'boolean';\n}\nfunction isObject(subject) {\n  return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction mathAbs(n) {\n  return Math.abs(n);\n}\nfunction mathSign(n) {\n  return Math.sign(n);\n}\nfunction deltaAbs(valueB, valueA) {\n  return mathAbs(valueB - valueA);\n}\nfunction factorAbs(valueB, valueA) {\n  if (valueB === 0 || valueA === 0) return 0;\n  if (mathAbs(valueB) <= mathAbs(valueA)) return 0;\n  const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA));\n  return mathAbs(diff / valueB);\n}\nfunction roundToTwoDecimals(num) {\n  return Math.round(num * 100) / 100;\n}\nfunction arrayKeys(array) {\n  return objectKeys(array).map(Number);\n}\nfunction arrayLast(array) {\n  return array[arrayLastIndex(array)];\n}\nfunction arrayLastIndex(array) {\n  return Math.max(0, array.length - 1);\n}\nfunction arrayIsLastIndex(array, index) {\n  return index === arrayLastIndex(array);\n}\nfunction arrayFromNumber(n, startAt = 0) {\n  return Array.from(Array(n), (_, i) => startAt + i);\n}\nfunction objectKeys(object) {\n  return Object.keys(object);\n}\nfunction objectsMergeDeep(objectA, objectB) {\n  return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n    objectKeys(currentObject).forEach(key => {\n      const valueA = mergedObjects[key];\n      const valueB = currentObject[key];\n      const areObjects = isObject(valueA) && isObject(valueB);\n      mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB;\n    });\n    return mergedObjects;\n  }, {});\n}\nfunction isMouseEvent(evt, ownerWindow) {\n  return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent;\n}\n\nfunction Alignment(align, viewSize) {\n  const predefined = {\n    start,\n    center,\n    end\n  };\n  function start() {\n    return 0;\n  }\n  function center(n) {\n    return end(n) / 2;\n  }\n  function end(n) {\n    return viewSize - n;\n  }\n  function measure(n, index) {\n    if (isString(align)) return predefined[align](n);\n    return align(viewSize, n, index);\n  }\n  const self = {\n    measure\n  };\n  return self;\n}\n\nfunction EventStore() {\n  let listeners = [];\n  function add(node, type, handler, options = {\n    passive: true\n  }) {\n    let removeListener;\n    if ('addEventListener' in node) {\n      node.addEventListener(type, handler, options);\n      removeListener = () => node.removeEventListener(type, handler, options);\n    } else {\n      const legacyMediaQueryList = node;\n      legacyMediaQueryList.addListener(handler);\n      removeListener = () => legacyMediaQueryList.removeListener(handler);\n    }\n    listeners.push(removeListener);\n    return self;\n  }\n  function clear() {\n    listeners = listeners.filter(remove => remove());\n  }\n  const self = {\n    add,\n    clear\n  };\n  return self;\n}\n\nfunction Animations(ownerDocument, ownerWindow, update, render) {\n  const documentVisibleHandler = EventStore();\n  const fixedTimeStep = 1000 / 60;\n  let lastTimeStamp = null;\n  let accumulatedTime = 0;\n  let animationId = 0;\n  function init() {\n    documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n      if (ownerDocument.hidden) reset();\n    });\n  }\n  function destroy() {\n    stop();\n    documentVisibleHandler.clear();\n  }\n  function animate(timeStamp) {\n    if (!animationId) return;\n    if (!lastTimeStamp) {\n      lastTimeStamp = timeStamp;\n      update();\n      update();\n    }\n    const timeElapsed = timeStamp - lastTimeStamp;\n    lastTimeStamp = timeStamp;\n    accumulatedTime += timeElapsed;\n    while (accumulatedTime >= fixedTimeStep) {\n      update();\n      accumulatedTime -= fixedTimeStep;\n    }\n    const alpha = accumulatedTime / fixedTimeStep;\n    render(alpha);\n    if (animationId) {\n      animationId = ownerWindow.requestAnimationFrame(animate);\n    }\n  }\n  function start() {\n    if (animationId) return;\n    animationId = ownerWindow.requestAnimationFrame(animate);\n  }\n  function stop() {\n    ownerWindow.cancelAnimationFrame(animationId);\n    lastTimeStamp = null;\n    accumulatedTime = 0;\n    animationId = 0;\n  }\n  function reset() {\n    lastTimeStamp = null;\n    accumulatedTime = 0;\n  }\n  const self = {\n    init,\n    destroy,\n    start,\n    stop,\n    update,\n    render\n  };\n  return self;\n}\n\nfunction Axis(axis, contentDirection) {\n  const isRightToLeft = contentDirection === 'rtl';\n  const isVertical = axis === 'y';\n  const scroll = isVertical ? 'y' : 'x';\n  const cross = isVertical ? 'x' : 'y';\n  const sign = !isVertical && isRightToLeft ? -1 : 1;\n  const startEdge = getStartEdge();\n  const endEdge = getEndEdge();\n  function measureSize(nodeRect) {\n    const {\n      height,\n      width\n    } = nodeRect;\n    return isVertical ? height : width;\n  }\n  function getStartEdge() {\n    if (isVertical) return 'top';\n    return isRightToLeft ? 'right' : 'left';\n  }\n  function getEndEdge() {\n    if (isVertical) return 'bottom';\n    return isRightToLeft ? 'left' : 'right';\n  }\n  function direction(n) {\n    return n * sign;\n  }\n  const self = {\n    scroll,\n    cross,\n    startEdge,\n    endEdge,\n    measureSize,\n    direction\n  };\n  return self;\n}\n\nfunction Limit(min = 0, max = 0) {\n  const length = mathAbs(min - max);\n  function reachedMin(n) {\n    return n < min;\n  }\n  function reachedMax(n) {\n    return n > max;\n  }\n  function reachedAny(n) {\n    return reachedMin(n) || reachedMax(n);\n  }\n  function constrain(n) {\n    if (!reachedAny(n)) return n;\n    return reachedMin(n) ? min : max;\n  }\n  function removeOffset(n) {\n    if (!length) return n;\n    return n - length * Math.ceil((n - max) / length);\n  }\n  const self = {\n    length,\n    max,\n    min,\n    constrain,\n    reachedAny,\n    reachedMax,\n    reachedMin,\n    removeOffset\n  };\n  return self;\n}\n\nfunction Counter(max, start, loop) {\n  const {\n    constrain\n  } = Limit(0, max);\n  const loopEnd = max + 1;\n  let counter = withinLimit(start);\n  function withinLimit(n) {\n    return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd);\n  }\n  function get() {\n    return counter;\n  }\n  function set(n) {\n    counter = withinLimit(n);\n    return self;\n  }\n  function add(n) {\n    return clone().set(get() + n);\n  }\n  function clone() {\n    return Counter(max, get(), loop);\n  }\n  const self = {\n    get,\n    set,\n    add,\n    clone\n  };\n  return self;\n}\n\nfunction DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) {\n  const {\n    cross: crossAxis,\n    direction\n  } = axis;\n  const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n  const nonPassiveEvent = {\n    passive: false\n  };\n  const initEvents = EventStore();\n  const dragEvents = EventStore();\n  const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20));\n  const snapForceBoost = {\n    mouse: 300,\n    touch: 400\n  };\n  const freeForceBoost = {\n    mouse: 500,\n    touch: 600\n  };\n  const baseSpeed = dragFree ? 43 : 25;\n  let isMoving = false;\n  let startScroll = 0;\n  let startCross = 0;\n  let pointerIsDown = false;\n  let preventScroll = false;\n  let preventClick = false;\n  let isMouse = false;\n  function init(emblaApi) {\n    if (!watchDrag) return;\n    function downIfAllowed(evt) {\n      if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt);\n    }\n    const node = rootNode;\n    initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true);\n  }\n  function destroy() {\n    initEvents.clear();\n    dragEvents.clear();\n  }\n  function addDragEvents() {\n    const node = isMouse ? ownerDocument : rootNode;\n    dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up);\n  }\n  function isFocusNode(node) {\n    const nodeName = node.nodeName || '';\n    return focusNodes.includes(nodeName);\n  }\n  function forceBoost() {\n    const boost = dragFree ? freeForceBoost : snapForceBoost;\n    const type = isMouse ? 'mouse' : 'touch';\n    return boost[type];\n  }\n  function allowedForce(force, targetChanged) {\n    const next = index.add(mathSign(force) * -1);\n    const baseForce = scrollTarget.byDistance(force, !dragFree).distance;\n    if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce;\n    if (skipSnaps && targetChanged) return baseForce * 0.5;\n    return scrollTarget.byIndex(next.get(), 0).distance;\n  }\n  function down(evt) {\n    const isMouseEvt = isMouseEvent(evt, ownerWindow);\n    isMouse = isMouseEvt;\n    preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving;\n    isMoving = deltaAbs(target.get(), location.get()) >= 2;\n    if (isMouseEvt && evt.button !== 0) return;\n    if (isFocusNode(evt.target)) return;\n    pointerIsDown = true;\n    dragTracker.pointerDown(evt);\n    scrollBody.useFriction(0).useDuration(0);\n    target.set(location);\n    addDragEvents();\n    startScroll = dragTracker.readPoint(evt);\n    startCross = dragTracker.readPoint(evt, crossAxis);\n    eventHandler.emit('pointerDown');\n  }\n  function move(evt) {\n    const isTouchEvt = !isMouseEvent(evt, ownerWindow);\n    if (isTouchEvt && evt.touches.length >= 2) return up(evt);\n    const lastScroll = dragTracker.readPoint(evt);\n    const lastCross = dragTracker.readPoint(evt, crossAxis);\n    const diffScroll = deltaAbs(lastScroll, startScroll);\n    const diffCross = deltaAbs(lastCross, startCross);\n    if (!preventScroll && !isMouse) {\n      if (!evt.cancelable) return up(evt);\n      preventScroll = diffScroll > diffCross;\n      if (!preventScroll) return up(evt);\n    }\n    const diff = dragTracker.pointerMove(evt);\n    if (diffScroll > dragThreshold) preventClick = true;\n    scrollBody.useFriction(0.3).useDuration(0.75);\n    animation.start();\n    target.add(direction(diff));\n    evt.preventDefault();\n  }\n  function up(evt) {\n    const currentLocation = scrollTarget.byDistance(0, false);\n    const targetChanged = currentLocation.index !== index.get();\n    const rawForce = dragTracker.pointerUp(evt) * forceBoost();\n    const force = allowedForce(direction(rawForce), targetChanged);\n    const forceFactor = factorAbs(rawForce, force);\n    const speed = baseSpeed - 10 * forceFactor;\n    const friction = baseFriction + forceFactor / 50;\n    preventScroll = false;\n    pointerIsDown = false;\n    dragEvents.clear();\n    scrollBody.useDuration(speed).useFriction(friction);\n    scrollTo.distance(force, !dragFree);\n    isMouse = false;\n    eventHandler.emit('pointerUp');\n  }\n  function click(evt) {\n    if (preventClick) {\n      evt.stopPropagation();\n      evt.preventDefault();\n      preventClick = false;\n    }\n  }\n  function pointerDown() {\n    return pointerIsDown;\n  }\n  const self = {\n    init,\n    destroy,\n    pointerDown\n  };\n  return self;\n}\n\nfunction DragTracker(axis, ownerWindow) {\n  const logInterval = 170;\n  let startEvent;\n  let lastEvent;\n  function readTime(evt) {\n    return evt.timeStamp;\n  }\n  function readPoint(evt, evtAxis) {\n    const property = evtAxis || axis.scroll;\n    const coord = `client${property === 'x' ? 'X' : 'Y'}`;\n    return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord];\n  }\n  function pointerDown(evt) {\n    startEvent = evt;\n    lastEvent = evt;\n    return readPoint(evt);\n  }\n  function pointerMove(evt) {\n    const diff = readPoint(evt) - readPoint(lastEvent);\n    const expired = readTime(evt) - readTime(startEvent) > logInterval;\n    lastEvent = evt;\n    if (expired) startEvent = evt;\n    return diff;\n  }\n  function pointerUp(evt) {\n    if (!startEvent || !lastEvent) return 0;\n    const diffDrag = readPoint(lastEvent) - readPoint(startEvent);\n    const diffTime = readTime(evt) - readTime(startEvent);\n    const expired = readTime(evt) - readTime(lastEvent) > logInterval;\n    const force = diffDrag / diffTime;\n    const isFlick = diffTime && !expired && mathAbs(force) > 0.1;\n    return isFlick ? force : 0;\n  }\n  const self = {\n    pointerDown,\n    pointerMove,\n    pointerUp,\n    readPoint\n  };\n  return self;\n}\n\nfunction NodeRects() {\n  function measure(node) {\n    const {\n      offsetTop,\n      offsetLeft,\n      offsetWidth,\n      offsetHeight\n    } = node;\n    const offset = {\n      top: offsetTop,\n      right: offsetLeft + offsetWidth,\n      bottom: offsetTop + offsetHeight,\n      left: offsetLeft,\n      width: offsetWidth,\n      height: offsetHeight\n    };\n    return offset;\n  }\n  const self = {\n    measure\n  };\n  return self;\n}\n\nfunction PercentOfView(viewSize) {\n  function measure(n) {\n    return viewSize * (n / 100);\n  }\n  const self = {\n    measure\n  };\n  return self;\n}\n\nfunction ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) {\n  const observeNodes = [container].concat(slides);\n  let resizeObserver;\n  let containerSize;\n  let slideSizes = [];\n  let destroyed = false;\n  function readSize(node) {\n    return axis.measureSize(nodeRects.measure(node));\n  }\n  function init(emblaApi) {\n    if (!watchResize) return;\n    containerSize = readSize(container);\n    slideSizes = slides.map(readSize);\n    function defaultCallback(entries) {\n      for (const entry of entries) {\n        if (destroyed) return;\n        const isContainer = entry.target === container;\n        const slideIndex = slides.indexOf(entry.target);\n        const lastSize = isContainer ? containerSize : slideSizes[slideIndex];\n        const newSize = readSize(isContainer ? container : slides[slideIndex]);\n        const diffSize = mathAbs(newSize - lastSize);\n        if (diffSize >= 0.5) {\n          emblaApi.reInit();\n          eventHandler.emit('resize');\n          break;\n        }\n      }\n    }\n    resizeObserver = new ResizeObserver(entries => {\n      if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n        defaultCallback(entries);\n      }\n    });\n    ownerWindow.requestAnimationFrame(() => {\n      observeNodes.forEach(node => resizeObserver.observe(node));\n    });\n  }\n  function destroy() {\n    destroyed = true;\n    if (resizeObserver) resizeObserver.disconnect();\n  }\n  const self = {\n    init,\n    destroy\n  };\n  return self;\n}\n\nfunction ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) {\n  let scrollVelocity = 0;\n  let scrollDirection = 0;\n  let scrollDuration = baseDuration;\n  let scrollFriction = baseFriction;\n  let rawLocation = location.get();\n  let rawLocationPrevious = 0;\n  function seek() {\n    const displacement = target.get() - location.get();\n    const isInstant = !scrollDuration;\n    let scrollDistance = 0;\n    if (isInstant) {\n      scrollVelocity = 0;\n      previousLocation.set(target);\n      location.set(target);\n      scrollDistance = displacement;\n    } else {\n      previousLocation.set(location);\n      scrollVelocity += displacement / scrollDuration;\n      scrollVelocity *= scrollFriction;\n      rawLocation += scrollVelocity;\n      location.add(scrollVelocity);\n      scrollDistance = rawLocation - rawLocationPrevious;\n    }\n    scrollDirection = mathSign(scrollDistance);\n    rawLocationPrevious = rawLocation;\n    return self;\n  }\n  function settled() {\n    const diff = target.get() - offsetLocation.get();\n    return mathAbs(diff) < 0.001;\n  }\n  function duration() {\n    return scrollDuration;\n  }\n  function direction() {\n    return scrollDirection;\n  }\n  function velocity() {\n    return scrollVelocity;\n  }\n  function useBaseDuration() {\n    return useDuration(baseDuration);\n  }\n  function useBaseFriction() {\n    return useFriction(baseFriction);\n  }\n  function useDuration(n) {\n    scrollDuration = n;\n    return self;\n  }\n  function useFriction(n) {\n    scrollFriction = n;\n    return self;\n  }\n  const self = {\n    direction,\n    duration,\n    velocity,\n    seek,\n    settled,\n    useBaseFriction,\n    useBaseDuration,\n    useFriction,\n    useDuration\n  };\n  return self;\n}\n\nfunction ScrollBounds(limit, location, target, scrollBody, percentOfView) {\n  const pullBackThreshold = percentOfView.measure(10);\n  const edgeOffsetTolerance = percentOfView.measure(50);\n  const frictionLimit = Limit(0.1, 0.99);\n  let disabled = false;\n  function shouldConstrain() {\n    if (disabled) return false;\n    if (!limit.reachedAny(target.get())) return false;\n    if (!limit.reachedAny(location.get())) return false;\n    return true;\n  }\n  function constrain(pointerDown) {\n    if (!shouldConstrain()) return;\n    const edge = limit.reachedMin(location.get()) ? 'min' : 'max';\n    const diffToEdge = mathAbs(limit[edge] - location.get());\n    const diffToTarget = target.get() - location.get();\n    const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance);\n    target.subtract(diffToTarget * friction);\n    if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n      target.set(limit.constrain(target.get()));\n      scrollBody.useDuration(25).useBaseFriction();\n    }\n  }\n  function toggleActive(active) {\n    disabled = !active;\n  }\n  const self = {\n    shouldConstrain,\n    constrain,\n    toggleActive\n  };\n  return self;\n}\n\nfunction ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) {\n  const scrollBounds = Limit(-contentSize + viewSize, 0);\n  const snapsBounded = measureBounded();\n  const scrollContainLimit = findScrollContainLimit();\n  const snapsContained = measureContained();\n  function usePixelTolerance(bound, snap) {\n    return deltaAbs(bound, snap) <= 1;\n  }\n  function findScrollContainLimit() {\n    const startSnap = snapsBounded[0];\n    const endSnap = arrayLast(snapsBounded);\n    const min = snapsBounded.lastIndexOf(startSnap);\n    const max = snapsBounded.indexOf(endSnap) + 1;\n    return Limit(min, max);\n  }\n  function measureBounded() {\n    return snapsAligned.map((snapAligned, index) => {\n      const {\n        min,\n        max\n      } = scrollBounds;\n      const snap = scrollBounds.constrain(snapAligned);\n      const isFirst = !index;\n      const isLast = arrayIsLastIndex(snapsAligned, index);\n      if (isFirst) return max;\n      if (isLast) return min;\n      if (usePixelTolerance(min, snap)) return min;\n      if (usePixelTolerance(max, snap)) return max;\n      return snap;\n    }).map(scrollBound => parseFloat(scrollBound.toFixed(3)));\n  }\n  function measureContained() {\n    if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max];\n    if (containScroll === 'keepSnaps') return snapsBounded;\n    const {\n      min,\n      max\n    } = scrollContainLimit;\n    return snapsBounded.slice(min, max);\n  }\n  const self = {\n    snapsContained,\n    scrollContainLimit\n  };\n  return self;\n}\n\nfunction ScrollLimit(contentSize, scrollSnaps, loop) {\n  const max = scrollSnaps[0];\n  const min = loop ? max - contentSize : arrayLast(scrollSnaps);\n  const limit = Limit(min, max);\n  const self = {\n    limit\n  };\n  return self;\n}\n\nfunction ScrollLooper(contentSize, limit, location, vectors) {\n  const jointSafety = 0.1;\n  const min = limit.min + jointSafety;\n  const max = limit.max + jointSafety;\n  const {\n    reachedMin,\n    reachedMax\n  } = Limit(min, max);\n  function shouldLoop(direction) {\n    if (direction === 1) return reachedMax(location.get());\n    if (direction === -1) return reachedMin(location.get());\n    return false;\n  }\n  function loop(direction) {\n    if (!shouldLoop(direction)) return;\n    const loopDistance = contentSize * (direction * -1);\n    vectors.forEach(v => v.add(loopDistance));\n  }\n  const self = {\n    loop\n  };\n  return self;\n}\n\nfunction ScrollProgress(limit) {\n  const {\n    max,\n    length\n  } = limit;\n  function get(n) {\n    const currentLocation = n - max;\n    return length ? currentLocation / -length : 0;\n  }\n  const self = {\n    get\n  };\n  return self;\n}\n\nfunction ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) {\n  const {\n    startEdge,\n    endEdge\n  } = axis;\n  const {\n    groupSlides\n  } = slidesToScroll;\n  const alignments = measureSizes().map(alignment.measure);\n  const snaps = measureUnaligned();\n  const snapsAligned = measureAligned();\n  function measureSizes() {\n    return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs);\n  }\n  function measureUnaligned() {\n    return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap));\n  }\n  function measureAligned() {\n    return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]);\n  }\n  const self = {\n    snaps,\n    snapsAligned\n  };\n  return self;\n}\n\nfunction SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) {\n  const {\n    groupSlides\n  } = slidesToScroll;\n  const {\n    min,\n    max\n  } = scrollContainLimit;\n  const slideRegistry = createSlideRegistry();\n  function createSlideRegistry() {\n    const groupedSlideIndexes = groupSlides(slideIndexes);\n    const doNotContain = !containSnaps || containScroll === 'keepSnaps';\n    if (scrollSnaps.length === 1) return [slideIndexes];\n    if (doNotContain) return groupedSlideIndexes;\n    return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n      const isFirst = !index;\n      const isLast = arrayIsLastIndex(groups, index);\n      if (isFirst) {\n        const range = arrayLast(groups[0]) + 1;\n        return arrayFromNumber(range);\n      }\n      if (isLast) {\n        const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1;\n        return arrayFromNumber(range, arrayLast(groups)[0]);\n      }\n      return group;\n    });\n  }\n  const self = {\n    slideRegistry\n  };\n  return self;\n}\n\nfunction ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {\n  const {\n    reachedAny,\n    removeOffset,\n    constrain\n  } = limit;\n  function minDistance(distances) {\n    return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0];\n  }\n  function findTargetSnap(target) {\n    const distance = loop ? removeOffset(target) : constrain(target);\n    const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({\n      diff: shortcut(snap - distance, 0),\n      index\n    })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff));\n    const {\n      index\n    } = ascDiffsToSnaps[0];\n    return {\n      index,\n      distance\n    };\n  }\n  function shortcut(target, direction) {\n    const targets = [target, target + contentSize, target - contentSize];\n    if (!loop) return target;\n    if (!direction) return minDistance(targets);\n    const matchingTargets = targets.filter(t => mathSign(t) === direction);\n    if (matchingTargets.length) return minDistance(matchingTargets);\n    return arrayLast(targets) - contentSize;\n  }\n  function byIndex(index, direction) {\n    const diffToSnap = scrollSnaps[index] - targetVector.get();\n    const distance = shortcut(diffToSnap, direction);\n    return {\n      index,\n      distance\n    };\n  }\n  function byDistance(distance, snap) {\n    const target = targetVector.get() + distance;\n    const {\n      index,\n      distance: targetSnapDistance\n    } = findTargetSnap(target);\n    const reachedBound = !loop && reachedAny(target);\n    if (!snap || reachedBound) return {\n      index,\n      distance\n    };\n    const diffToSnap = scrollSnaps[index] - targetSnapDistance;\n    const snapDistance = distance + shortcut(diffToSnap, 0);\n    return {\n      index,\n      distance: snapDistance\n    };\n  }\n  const self = {\n    byDistance,\n    byIndex,\n    shortcut\n  };\n  return self;\n}\n\nfunction ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) {\n  function scrollTo(target) {\n    const distanceDiff = target.distance;\n    const indexDiff = target.index !== indexCurrent.get();\n    targetVector.add(distanceDiff);\n    if (distanceDiff) {\n      if (scrollBody.duration()) {\n        animation.start();\n      } else {\n        animation.update();\n        animation.render(1);\n        animation.update();\n      }\n    }\n    if (indexDiff) {\n      indexPrevious.set(indexCurrent.get());\n      indexCurrent.set(target.index);\n      eventHandler.emit('select');\n    }\n  }\n  function distance(n, snap) {\n    const target = scrollTarget.byDistance(n, snap);\n    scrollTo(target);\n  }\n  function index(n, direction) {\n    const targetIndex = indexCurrent.clone().set(n);\n    const target = scrollTarget.byIndex(targetIndex.get(), direction);\n    scrollTo(target);\n  }\n  const self = {\n    distance,\n    index\n  };\n  return self;\n}\n\nfunction SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) {\n  const focusListenerOptions = {\n    passive: true,\n    capture: true\n  };\n  let lastTabPressTime = 0;\n  function init(emblaApi) {\n    if (!watchFocus) return;\n    function defaultCallback(index) {\n      const nowTime = new Date().getTime();\n      const diffTime = nowTime - lastTabPressTime;\n      if (diffTime > 10) return;\n      eventHandler.emit('slideFocusStart');\n      root.scrollLeft = 0;\n      const group = slideRegistry.findIndex(group => group.includes(index));\n      if (!isNumber(group)) return;\n      scrollBody.useDuration(0);\n      scrollTo.index(group, 0);\n      eventHandler.emit('slideFocus');\n    }\n    eventStore.add(document, 'keydown', registerTabPress, false);\n    slides.forEach((slide, slideIndex) => {\n      eventStore.add(slide, 'focus', evt => {\n        if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n          defaultCallback(slideIndex);\n        }\n      }, focusListenerOptions);\n    });\n  }\n  function registerTabPress(event) {\n    if (event.code === 'Tab') lastTabPressTime = new Date().getTime();\n  }\n  const self = {\n    init\n  };\n  return self;\n}\n\nfunction Vector1D(initialValue) {\n  let value = initialValue;\n  function get() {\n    return value;\n  }\n  function set(n) {\n    value = normalizeInput(n);\n  }\n  function add(n) {\n    value += normalizeInput(n);\n  }\n  function subtract(n) {\n    value -= normalizeInput(n);\n  }\n  function normalizeInput(n) {\n    return isNumber(n) ? n : n.get();\n  }\n  const self = {\n    get,\n    set,\n    add,\n    subtract\n  };\n  return self;\n}\n\nfunction Translate(axis, container) {\n  const translate = axis.scroll === 'x' ? x : y;\n  const containerStyle = container.style;\n  let previousTarget = null;\n  let disabled = false;\n  function x(n) {\n    return `translate3d(${n}px,0px,0px)`;\n  }\n  function y(n) {\n    return `translate3d(0px,${n}px,0px)`;\n  }\n  function to(target) {\n    if (disabled) return;\n    const newTarget = roundToTwoDecimals(axis.direction(target));\n    if (newTarget === previousTarget) return;\n    containerStyle.transform = translate(newTarget);\n    previousTarget = newTarget;\n  }\n  function toggleActive(active) {\n    disabled = !active;\n  }\n  function clear() {\n    if (disabled) return;\n    containerStyle.transform = '';\n    if (!container.getAttribute('style')) container.removeAttribute('style');\n  }\n  const self = {\n    clear,\n    to,\n    toggleActive\n  };\n  return self;\n}\n\nfunction SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) {\n  const roundingSafety = 0.5;\n  const ascItems = arrayKeys(slideSizesWithGaps);\n  const descItems = arrayKeys(slideSizesWithGaps).reverse();\n  const loopPoints = startPoints().concat(endPoints());\n  function removeSlideSizes(indexes, from) {\n    return indexes.reduce((a, i) => {\n      return a - slideSizesWithGaps[i];\n    }, from);\n  }\n  function slidesInGap(indexes, gap) {\n    return indexes.reduce((a, i) => {\n      const remainingGap = removeSlideSizes(a, gap);\n      return remainingGap > 0 ? a.concat([i]) : a;\n    }, []);\n  }\n  function findSlideBounds(offset) {\n    return snaps.map((snap, index) => ({\n      start: snap - slideSizes[index] + roundingSafety + offset,\n      end: snap + viewSize - roundingSafety + offset\n    }));\n  }\n  function findLoopPoints(indexes, offset, isEndEdge) {\n    const slideBounds = findSlideBounds(offset);\n    return indexes.map(index => {\n      const initial = isEndEdge ? 0 : -contentSize;\n      const altered = isEndEdge ? contentSize : 0;\n      const boundEdge = isEndEdge ? 'end' : 'start';\n      const loopPoint = slideBounds[index][boundEdge];\n      return {\n        index,\n        loopPoint,\n        slideLocation: Vector1D(-1),\n        translate: Translate(axis, slides[index]),\n        target: () => location.get() > loopPoint ? initial : altered\n      };\n    });\n  }\n  function startPoints() {\n    const gap = scrollSnaps[0];\n    const indexes = slidesInGap(descItems, gap);\n    return findLoopPoints(indexes, contentSize, false);\n  }\n  function endPoints() {\n    const gap = viewSize - scrollSnaps[0] - 1;\n    const indexes = slidesInGap(ascItems, gap);\n    return findLoopPoints(indexes, -contentSize, true);\n  }\n  function canLoop() {\n    return loopPoints.every(({\n      index\n    }) => {\n      const otherIndexes = ascItems.filter(i => i !== index);\n      return removeSlideSizes(otherIndexes, viewSize) <= 0.1;\n    });\n  }\n  function loop() {\n    loopPoints.forEach(loopPoint => {\n      const {\n        target,\n        translate,\n        slideLocation\n      } = loopPoint;\n      const shiftLocation = target();\n      if (shiftLocation === slideLocation.get()) return;\n      translate.to(shiftLocation);\n      slideLocation.set(shiftLocation);\n    });\n  }\n  function clear() {\n    loopPoints.forEach(loopPoint => loopPoint.translate.clear());\n  }\n  const self = {\n    canLoop,\n    clear,\n    loop,\n    loopPoints\n  };\n  return self;\n}\n\nfunction SlidesHandler(container, eventHandler, watchSlides) {\n  let mutationObserver;\n  let destroyed = false;\n  function init(emblaApi) {\n    if (!watchSlides) return;\n    function defaultCallback(mutations) {\n      for (const mutation of mutations) {\n        if (mutation.type === 'childList') {\n          emblaApi.reInit();\n          eventHandler.emit('slidesChanged');\n          break;\n        }\n      }\n    }\n    mutationObserver = new MutationObserver(mutations => {\n      if (destroyed) return;\n      if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n        defaultCallback(mutations);\n      }\n    });\n    mutationObserver.observe(container, {\n      childList: true\n    });\n  }\n  function destroy() {\n    if (mutationObserver) mutationObserver.disconnect();\n    destroyed = true;\n  }\n  const self = {\n    init,\n    destroy\n  };\n  return self;\n}\n\nfunction SlidesInView(container, slides, eventHandler, threshold) {\n  const intersectionEntryMap = {};\n  let inViewCache = null;\n  let notInViewCache = null;\n  let intersectionObserver;\n  let destroyed = false;\n  function init() {\n    intersectionObserver = new IntersectionObserver(entries => {\n      if (destroyed) return;\n      entries.forEach(entry => {\n        const index = slides.indexOf(entry.target);\n        intersectionEntryMap[index] = entry;\n      });\n      inViewCache = null;\n      notInViewCache = null;\n      eventHandler.emit('slidesInView');\n    }, {\n      root: container.parentElement,\n      threshold\n    });\n    slides.forEach(slide => intersectionObserver.observe(slide));\n  }\n  function destroy() {\n    if (intersectionObserver) intersectionObserver.disconnect();\n    destroyed = true;\n  }\n  function createInViewList(inView) {\n    return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => {\n      const index = parseInt(slideIndex);\n      const {\n        isIntersecting\n      } = intersectionEntryMap[index];\n      const inViewMatch = inView && isIntersecting;\n      const notInViewMatch = !inView && !isIntersecting;\n      if (inViewMatch || notInViewMatch) list.push(index);\n      return list;\n    }, []);\n  }\n  function get(inView = true) {\n    if (inView && inViewCache) return inViewCache;\n    if (!inView && notInViewCache) return notInViewCache;\n    const slideIndexes = createInViewList(inView);\n    if (inView) inViewCache = slideIndexes;\n    if (!inView) notInViewCache = slideIndexes;\n    return slideIndexes;\n  }\n  const self = {\n    init,\n    destroy,\n    get\n  };\n  return self;\n}\n\nfunction SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) {\n  const {\n    measureSize,\n    startEdge,\n    endEdge\n  } = axis;\n  const withEdgeGap = slideRects[0] && readEdgeGap;\n  const startGap = measureStartGap();\n  const endGap = measureEndGap();\n  const slideSizes = slideRects.map(measureSize);\n  const slideSizesWithGaps = measureWithGaps();\n  function measureStartGap() {\n    if (!withEdgeGap) return 0;\n    const slideRect = slideRects[0];\n    return mathAbs(containerRect[startEdge] - slideRect[startEdge]);\n  }\n  function measureEndGap() {\n    if (!withEdgeGap) return 0;\n    const style = ownerWindow.getComputedStyle(arrayLast(slides));\n    return parseFloat(style.getPropertyValue(`margin-${endEdge}`));\n  }\n  function measureWithGaps() {\n    return slideRects.map((rect, index, rects) => {\n      const isFirst = !index;\n      const isLast = arrayIsLastIndex(rects, index);\n      if (isFirst) return slideSizes[index] + startGap;\n      if (isLast) return slideSizes[index] + endGap;\n      return rects[index + 1][startEdge] - rect[startEdge];\n    }).map(mathAbs);\n  }\n  const self = {\n    slideSizes,\n    slideSizesWithGaps,\n    startGap,\n    endGap\n  };\n  return self;\n}\n\nfunction SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) {\n  const {\n    startEdge,\n    endEdge,\n    direction\n  } = axis;\n  const groupByNumber = isNumber(slidesToScroll);\n  function byNumber(array, groupSize) {\n    return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize));\n  }\n  function bySize(array) {\n    if (!array.length) return [];\n    return arrayKeys(array).reduce((groups, rectB, index) => {\n      const rectA = arrayLast(groups) || 0;\n      const isFirst = rectA === 0;\n      const isLast = rectB === arrayLastIndex(array);\n      const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge];\n      const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge];\n      const gapA = !loop && isFirst ? direction(startGap) : 0;\n      const gapB = !loop && isLast ? direction(endGap) : 0;\n      const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA));\n      if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB);\n      if (isLast) groups.push(array.length);\n      return groups;\n    }, []).map((currentSize, index, groups) => {\n      const previousSize = Math.max(groups[index - 1] || 0);\n      return array.slice(previousSize, currentSize);\n    });\n  }\n  function groupSlides(array) {\n    return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array);\n  }\n  const self = {\n    groupSlides\n  };\n  return self;\n}\n\nfunction Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) {\n  // Options\n  const {\n    align,\n    axis: scrollAxis,\n    direction,\n    startIndex,\n    loop,\n    duration,\n    dragFree,\n    dragThreshold,\n    inViewThreshold,\n    slidesToScroll: groupSlides,\n    skipSnaps,\n    containScroll,\n    watchResize,\n    watchSlides,\n    watchDrag,\n    watchFocus\n  } = options;\n  // Measurements\n  const pixelTolerance = 2;\n  const nodeRects = NodeRects();\n  const containerRect = nodeRects.measure(container);\n  const slideRects = slides.map(nodeRects.measure);\n  const axis = Axis(scrollAxis, direction);\n  const viewSize = axis.measureSize(containerRect);\n  const percentOfView = PercentOfView(viewSize);\n  const alignment = Alignment(align, viewSize);\n  const containSnaps = !loop && !!containScroll;\n  const readEdgeGap = loop || !!containScroll;\n  const {\n    slideSizes,\n    slideSizesWithGaps,\n    startGap,\n    endGap\n  } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow);\n  const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance);\n  const {\n    snaps,\n    snapsAligned\n  } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll);\n  const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);\n  const {\n    snapsContained,\n    scrollContainLimit\n  } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance);\n  const scrollSnaps = containSnaps ? snapsContained : snapsAligned;\n  const {\n    limit\n  } = ScrollLimit(contentSize, scrollSnaps, loop);\n  // Indexes\n  const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop);\n  const indexPrevious = index.clone();\n  const slideIndexes = arrayKeys(slides);\n  // Animation\n  const update = ({\n    dragHandler,\n    scrollBody,\n    scrollBounds,\n    options: {\n      loop\n    }\n  }) => {\n    if (!loop) scrollBounds.constrain(dragHandler.pointerDown());\n    scrollBody.seek();\n  };\n  const render = ({\n    scrollBody,\n    translate,\n    location,\n    offsetLocation,\n    previousLocation,\n    scrollLooper,\n    slideLooper,\n    dragHandler,\n    animation,\n    eventHandler,\n    scrollBounds,\n    options: {\n      loop\n    }\n  }, alpha) => {\n    const shouldSettle = scrollBody.settled();\n    const withinBounds = !scrollBounds.shouldConstrain();\n    const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds;\n    const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown();\n    if (hasSettledAndIdle) animation.stop();\n    const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha);\n    offsetLocation.set(interpolatedLocation);\n    if (loop) {\n      scrollLooper.loop(scrollBody.direction());\n      slideLooper.loop();\n    }\n    translate.to(offsetLocation.get());\n    if (hasSettledAndIdle) eventHandler.emit('settle');\n    if (!hasSettled) eventHandler.emit('scroll');\n  };\n  const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha));\n  // Shared\n  const friction = 0.68;\n  const startLocation = scrollSnaps[index.get()];\n  const location = Vector1D(startLocation);\n  const previousLocation = Vector1D(startLocation);\n  const offsetLocation = Vector1D(startLocation);\n  const target = Vector1D(startLocation);\n  const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction);\n  const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target);\n  const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler);\n  const scrollProgress = ScrollProgress(limit);\n  const eventStore = EventStore();\n  const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold);\n  const {\n    slideRegistry\n  } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes);\n  const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus);\n  // Engine\n  const engine = {\n    ownerDocument,\n    ownerWindow,\n    eventHandler,\n    containerRect,\n    slideRects,\n    animation,\n    axis,\n    dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag),\n    eventStore,\n    percentOfView,\n    index,\n    indexPrevious,\n    limit,\n    location,\n    offsetLocation,\n    previousLocation,\n    options,\n    resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects),\n    scrollBody,\n    scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView),\n    scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]),\n    scrollProgress,\n    scrollSnapList: scrollSnaps.map(scrollProgress.get),\n    scrollSnaps,\n    scrollTarget,\n    scrollTo,\n    slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides),\n    slideFocus,\n    slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n    slidesInView,\n    slideIndexes,\n    slideRegistry,\n    slidesToScroll,\n    target,\n    translate: Translate(axis, container)\n  };\n  return engine;\n}\n\nfunction EventHandler() {\n  let listeners = {};\n  let api;\n  function init(emblaApi) {\n    api = emblaApi;\n  }\n  function getListeners(evt) {\n    return listeners[evt] || [];\n  }\n  function emit(evt) {\n    getListeners(evt).forEach(e => e(api, evt));\n    return self;\n  }\n  function on(evt, cb) {\n    listeners[evt] = getListeners(evt).concat([cb]);\n    return self;\n  }\n  function off(evt, cb) {\n    listeners[evt] = getListeners(evt).filter(e => e !== cb);\n    return self;\n  }\n  function clear() {\n    listeners = {};\n  }\n  const self = {\n    init,\n    emit,\n    off,\n    on,\n    clear\n  };\n  return self;\n}\n\nconst defaultOptions = {\n  align: 'center',\n  axis: 'x',\n  container: null,\n  slides: null,\n  containScroll: 'trimSnaps',\n  direction: 'ltr',\n  slidesToScroll: 1,\n  inViewThreshold: 0,\n  breakpoints: {},\n  dragFree: false,\n  dragThreshold: 10,\n  loop: false,\n  skipSnaps: false,\n  duration: 25,\n  startIndex: 0,\n  active: true,\n  watchDrag: true,\n  watchResize: true,\n  watchSlides: true,\n  watchFocus: true\n};\n\nfunction OptionsHandler(ownerWindow) {\n  function mergeOptions(optionsA, optionsB) {\n    return objectsMergeDeep(optionsA, optionsB || {});\n  }\n  function optionsAtMedia(options) {\n    const optionsAtMedia = options.breakpoints || {};\n    const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {});\n    return mergeOptions(options, matchedMediaOptions);\n  }\n  function optionsMediaQueries(optionsList) {\n    return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia);\n  }\n  const self = {\n    mergeOptions,\n    optionsAtMedia,\n    optionsMediaQueries\n  };\n  return self;\n}\n\nfunction PluginsHandler(optionsHandler) {\n  let activePlugins = [];\n  function init(emblaApi, plugins) {\n    activePlugins = plugins.filter(({\n      options\n    }) => optionsHandler.optionsAtMedia(options).active !== false);\n    activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler));\n    return plugins.reduce((map, plugin) => Object.assign(map, {\n      [plugin.name]: plugin\n    }), {});\n  }\n  function destroy() {\n    activePlugins = activePlugins.filter(plugin => plugin.destroy());\n  }\n  const self = {\n    init,\n    destroy\n  };\n  return self;\n}\n\nfunction EmblaCarousel(root, userOptions, userPlugins) {\n  const ownerDocument = root.ownerDocument;\n  const ownerWindow = ownerDocument.defaultView;\n  const optionsHandler = OptionsHandler(ownerWindow);\n  const pluginsHandler = PluginsHandler(optionsHandler);\n  const mediaHandlers = EventStore();\n  const eventHandler = EventHandler();\n  const {\n    mergeOptions,\n    optionsAtMedia,\n    optionsMediaQueries\n  } = optionsHandler;\n  const {\n    on,\n    off,\n    emit\n  } = eventHandler;\n  const reInit = reActivate;\n  let destroyed = false;\n  let engine;\n  let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions);\n  let options = mergeOptions(optionsBase);\n  let pluginList = [];\n  let pluginApis;\n  let container;\n  let slides;\n  function storeElements() {\n    const {\n      container: userContainer,\n      slides: userSlides\n    } = options;\n    const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer;\n    container = customContainer || root.children[0];\n    const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides;\n    slides = [].slice.call(customSlides || container.children);\n  }\n  function createEngine(options) {\n    const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler);\n    if (options.loop && !engine.slideLooper.canLoop()) {\n      const optionsWithoutLoop = Object.assign({}, options, {\n        loop: false\n      });\n      return createEngine(optionsWithoutLoop);\n    }\n    return engine;\n  }\n  function activate(withOptions, withPlugins) {\n    if (destroyed) return;\n    optionsBase = mergeOptions(optionsBase, withOptions);\n    options = optionsAtMedia(optionsBase);\n    pluginList = withPlugins || pluginList;\n    storeElements();\n    engine = createEngine(options);\n    optionsMediaQueries([optionsBase, ...pluginList.map(({\n      options\n    }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate));\n    if (!options.active) return;\n    engine.translate.to(engine.location.get());\n    engine.animation.init();\n    engine.slidesInView.init();\n    engine.slideFocus.init(self);\n    engine.eventHandler.init(self);\n    engine.resizeHandler.init(self);\n    engine.slidesHandler.init(self);\n    if (engine.options.loop) engine.slideLooper.loop();\n    if (container.offsetParent && slides.length) engine.dragHandler.init(self);\n    pluginApis = pluginsHandler.init(self, pluginList);\n  }\n  function reActivate(withOptions, withPlugins) {\n    const startIndex = selectedScrollSnap();\n    deActivate();\n    activate(mergeOptions({\n      startIndex\n    }, withOptions), withPlugins);\n    eventHandler.emit('reInit');\n  }\n  function deActivate() {\n    engine.dragHandler.destroy();\n    engine.eventStore.clear();\n    engine.translate.clear();\n    engine.slideLooper.clear();\n    engine.resizeHandler.destroy();\n    engine.slidesHandler.destroy();\n    engine.slidesInView.destroy();\n    engine.animation.destroy();\n    pluginsHandler.destroy();\n    mediaHandlers.clear();\n  }\n  function destroy() {\n    if (destroyed) return;\n    destroyed = true;\n    mediaHandlers.clear();\n    deActivate();\n    eventHandler.emit('destroy');\n    eventHandler.clear();\n  }\n  function scrollTo(index, jump, direction) {\n    if (!options.active || destroyed) return;\n    engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration);\n    engine.scrollTo.index(index, direction || 0);\n  }\n  function scrollNext(jump) {\n    const next = engine.index.add(1).get();\n    scrollTo(next, jump, -1);\n  }\n  function scrollPrev(jump) {\n    const prev = engine.index.add(-1).get();\n    scrollTo(prev, jump, 1);\n  }\n  function canScrollNext() {\n    const next = engine.index.add(1).get();\n    return next !== selectedScrollSnap();\n  }\n  function canScrollPrev() {\n    const prev = engine.index.add(-1).get();\n    return prev !== selectedScrollSnap();\n  }\n  function scrollSnapList() {\n    return engine.scrollSnapList;\n  }\n  function scrollProgress() {\n    return engine.scrollProgress.get(engine.offsetLocation.get());\n  }\n  function selectedScrollSnap() {\n    return engine.index.get();\n  }\n  function previousScrollSnap() {\n    return engine.indexPrevious.get();\n  }\n  function slidesInView() {\n    return engine.slidesInView.get();\n  }\n  function slidesNotInView() {\n    return engine.slidesInView.get(false);\n  }\n  function plugins() {\n    return pluginApis;\n  }\n  function internalEngine() {\n    return engine;\n  }\n  function rootNode() {\n    return root;\n  }\n  function containerNode() {\n    return container;\n  }\n  function slideNodes() {\n    return slides;\n  }\n  const self = {\n    canScrollNext,\n    canScrollPrev,\n    containerNode,\n    internalEngine,\n    destroy,\n    off,\n    on,\n    emit,\n    plugins,\n    previousScrollSnap,\n    reInit,\n    rootNode,\n    scrollNext,\n    scrollPrev,\n    scrollProgress,\n    scrollSnapList,\n    scrollTo,\n    selectedScrollSnap,\n    slideNodes,\n    slidesInView,\n    slidesNotInView\n  };\n  activate(userOptions, userPlugins);\n  setTimeout(() => eventHandler.emit('init'), 0);\n  return self;\n}\nEmblaCarousel.globalOptions = undefined;\n\nexport { EmblaCarousel as default };\n//# sourceMappingURL=embla-carousel.esm.js.map\n","import { useRef, useState, useCallback, useEffect } from 'react';\nimport { areOptionsEqual, arePluginsEqual, canUseDOM } from 'embla-carousel-reactive-utils';\nimport EmblaCarousel from 'embla-carousel';\n\nfunction useEmblaCarousel(options = {}, plugins = []) {\n  const storedOptions = useRef(options);\n  const storedPlugins = useRef(plugins);\n  const [emblaApi, setEmblaApi] = useState();\n  const [viewport, setViewport] = useState();\n  const reInit = useCallback(() => {\n    if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current);\n  }, [emblaApi]);\n  useEffect(() => {\n    if (areOptionsEqual(storedOptions.current, options)) return;\n    storedOptions.current = options;\n    reInit();\n  }, [options, reInit]);\n  useEffect(() => {\n    if (arePluginsEqual(storedPlugins.current, plugins)) return;\n    storedPlugins.current = plugins;\n    reInit();\n  }, [plugins, reInit]);\n  useEffect(() => {\n    if (canUseDOM() && viewport) {\n      EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions;\n      const newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current);\n      setEmblaApi(newEmblaApi);\n      return () => newEmblaApi.destroy();\n    } else {\n      setEmblaApi(undefined);\n    }\n  }, [viewport, setEmblaApi]);\n  return [setViewport, emblaApi];\n}\nuseEmblaCarousel.globalOptions = undefined;\n\nexport { useEmblaCarousel as default };\n//# sourceMappingURL=embla-carousel-react.esm.js.map\n","const defaultOptions = {\n  active: true,\n  breakpoints: {},\n  snapped: 'is-snapped',\n  inView: 'is-in-view',\n  draggable: 'is-draggable',\n  dragging: 'is-dragging',\n  loop: 'is-loop'\n};\n\nfunction normalizeClassNames(classNames) {\n  const normalized = Array.isArray(classNames) ? classNames : [classNames];\n  return normalized.filter(Boolean);\n}\nfunction removeClass(node, classNames) {\n  if (!node || !classNames.length) return;\n  node.classList.remove(...classNames);\n}\nfunction addClass(node, classNames) {\n  if (!node || !classNames.length) return;\n  node.classList.add(...classNames);\n}\n\nfunction ClassNames(userOptions = {}) {\n  let options;\n  let emblaApi;\n  let root;\n  let slides;\n  let snappedIndexes = [];\n  let inViewIndexes = [];\n  const selectedEvents = ['select'];\n  const draggingEvents = ['pointerDown', 'pointerUp'];\n  const inViewEvents = ['slidesInView'];\n  const classNames = {\n    snapped: [],\n    inView: [],\n    draggable: [],\n    dragging: [],\n    loop: []\n  };\n  function init(emblaApiInstance, optionsHandler) {\n    emblaApi = emblaApiInstance;\n    const {\n      mergeOptions,\n      optionsAtMedia\n    } = optionsHandler;\n    const optionsBase = mergeOptions(defaultOptions, ClassNames.globalOptions);\n    const allOptions = mergeOptions(optionsBase, userOptions);\n    options = optionsAtMedia(allOptions);\n    root = emblaApi.rootNode();\n    slides = emblaApi.slideNodes();\n    const {\n      watchDrag,\n      loop\n    } = emblaApi.internalEngine().options;\n    const isDraggable = !!watchDrag;\n    if (options.loop && loop) {\n      classNames.loop = normalizeClassNames(options.loop);\n      addClass(root, classNames.loop);\n    }\n    if (options.draggable && isDraggable) {\n      classNames.draggable = normalizeClassNames(options.draggable);\n      addClass(root, classNames.draggable);\n    }\n    if (options.dragging) {\n      classNames.dragging = normalizeClassNames(options.dragging);\n      draggingEvents.forEach(evt => emblaApi.on(evt, toggleDraggingClass));\n    }\n    if (options.snapped) {\n      classNames.snapped = normalizeClassNames(options.snapped);\n      selectedEvents.forEach(evt => emblaApi.on(evt, toggleSnappedClasses));\n      toggleSnappedClasses();\n    }\n    if (options.inView) {\n      classNames.inView = normalizeClassNames(options.inView);\n      inViewEvents.forEach(evt => emblaApi.on(evt, toggleInViewClasses));\n      toggleInViewClasses();\n    }\n  }\n  function destroy() {\n    draggingEvents.forEach(evt => emblaApi.off(evt, toggleDraggingClass));\n    selectedEvents.forEach(evt => emblaApi.off(evt, toggleSnappedClasses));\n    inViewEvents.forEach(evt => emblaApi.off(evt, toggleInViewClasses));\n    removeClass(root, classNames.loop);\n    removeClass(root, classNames.draggable);\n    removeClass(root, classNames.dragging);\n    toggleSlideClasses([], snappedIndexes, classNames.snapped);\n    toggleSlideClasses([], inViewIndexes, classNames.inView);\n    Object.keys(classNames).forEach(classNameKey => {\n      const key = classNameKey;\n      classNames[key] = [];\n    });\n  }\n  function toggleDraggingClass(_, evt) {\n    const toggleClass = evt === 'pointerDown' ? addClass : removeClass;\n    toggleClass(root, classNames.dragging);\n  }\n  function toggleSlideClasses(addClassIndexes = [], removeClassIndexes = [], classNames) {\n    const removeClassSlides = removeClassIndexes.map(index => slides[index]);\n    const addClassSlides = addClassIndexes.map(index => slides[index]);\n    removeClassSlides.forEach(slide => removeClass(slide, classNames));\n    addClassSlides.forEach(slide => addClass(slide, classNames));\n    return addClassIndexes;\n  }\n  function toggleSnappedClasses() {\n    const {\n      slideRegistry\n    } = emblaApi.internalEngine();\n    const newSnappedIndexes = slideRegistry[emblaApi.selectedScrollSnap()];\n    snappedIndexes = toggleSlideClasses(newSnappedIndexes, snappedIndexes, classNames.snapped);\n  }\n  function toggleInViewClasses() {\n    const newInViewIndexes = emblaApi.slidesInView();\n    inViewIndexes = toggleSlideClasses(newInViewIndexes, inViewIndexes, classNames.inView);\n  }\n  const self = {\n    name: 'classNames',\n    options: userOptions,\n    init,\n    destroy\n  };\n  return self;\n}\nClassNames.globalOptions = undefined;\n\nexport { ClassNames as default };\n//# sourceMappingURL=embla-carousel-class-names.esm.js.map\n","import cx from \"classnames\"\nimport { faCalendarDay } from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\n\nimport { dayjs } from \"@ourworldindata/utils\"\n\nexport default function DataInsightDateline({\n    className,\n    publishedAt,\n    formatOptions = {\n        month: \"long\",\n        day: \"numeric\",\n    },\n    highlightToday,\n}: {\n    className?: string\n    publishedAt: Date | null\n    formatOptions?: Intl.DateTimeFormatOptions\n    highlightToday?: boolean\n}) {\n    const date = dayjs(publishedAt)\n    let highlightClassName\n    let formattedDate\n    if (publishedAt) {\n        if (date.isToday()) {\n            formattedDate = \"Today\"\n            if (highlightToday) {\n                highlightClassName = \"data-insight-dateline--is-today\"\n            }\n        } else if (date.isYesterday()) {\n            formattedDate = \"Yesterday\"\n        } else {\n            const options =\n                date.year() !== dayjs().year()\n                    ? { ...formatOptions, year: \"numeric\" as const }\n                    : formatOptions\n            formattedDate = date.toDate().toLocaleDateString(\"en-US\", options)\n        }\n    } else {\n        formattedDate = \"Unpublished\"\n    }\n    return (\n        <p\n            className={cx(\n                \"data-insight-dateline\",\n                className,\n                highlightClassName\n            )}\n            suppressHydrationWarning={true}\n        >\n            <FontAwesomeIcon\n                className=\"data-insight-dateline__icon\"\n                icon={faCalendarDay}\n            />\n            {formattedDate}\n        </p>\n    )\n}\n","import { memo, useState, useCallback, useEffect, useMemo } from \"react\"\nimport { useMediaQuery } from \"usehooks-ts\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowRight,\n    faChevronRight,\n    faChevronLeft,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"classnames\"\nimport useEmblaCarousel from \"embla-carousel-react\"\nimport ClassNames from \"embla-carousel-class-names\"\nimport type { EmblaCarouselType } from \"embla-carousel\"\n\nimport { Button } from \"@ourworldindata/components\"\nimport {\n    EnrichedBlockImage,\n    OwidEnrichedGdocBlock,\n    LatestDataInsight,\n} from \"@ourworldindata/utils\"\nimport {\n    dataInsightIndexToIdMap,\n    SMALL_BREAKPOINT_MEDIA_QUERY,\n} from \"../../SiteConstants.js\"\nimport Image from \"./Image.js\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport DataInsightDateline from \"./DataInsightDateline.js\"\n\nexport default function LatestDataInsights({\n    className,\n    latestDataInsights,\n}: {\n    className?: string\n    latestDataInsights: LatestDataInsight[]\n}) {\n    const dataInsights = useMemo(\n        () =>\n            latestDataInsights.map((dataInsight) => {\n                return {\n                    ...dataInsight,\n                    publishedAt: dataInsight.publishedAt\n                        ? new Date(dataInsight.publishedAt)\n                        : undefined,\n                }\n            }),\n        [latestDataInsights]\n    )\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const [emblaRef, emblaApi] = useEmblaCarousel({ align: \"start\" }, [\n        ClassNames(),\n    ])\n    const { selectedIndex, scrollSnaps } = useDotButton(emblaApi)\n    const [canScrollPrev, setCanScrollPrev] = useState(false)\n    const [canScrollNext, setCanScrollNext] = useState(false)\n\n    const onSelect = useCallback((emblaApi: EmblaCarouselType) => {\n        setCanScrollPrev(emblaApi.canScrollPrev())\n        setCanScrollNext(emblaApi.canScrollNext())\n    }, [])\n\n    useEffect(() => {\n        if (!emblaApi) return\n        onSelect(emblaApi)\n        emblaApi.on(\"reInit\", onSelect).on(\"select\", onSelect)\n        return () => {\n            emblaApi.off(\"reInit\", onSelect).off(\"select\", onSelect)\n        }\n    }, [emblaApi, onSelect])\n\n    const scrollPrev = useCallback(() => {\n        if (emblaApi) emblaApi.scrollPrev()\n    }, [emblaApi])\n\n    const scrollNext = useCallback(() => {\n        if (emblaApi) emblaApi.scrollNext()\n    }, [emblaApi])\n\n    return (\n        <div className={cx(\"latest-data-insights\", className)}>\n            <div className=\"latest-data-insights__viewport\" ref={emblaRef}>\n                <ul className=\"latest-data-insights__card-container\">\n                    {dataInsights.map((dataInsight, index) => (\n                        <DataInsightCard\n                            key={dataInsight.id}\n                            index={index}\n                            title={dataInsight.content.title}\n                            body={dataInsight.content.body}\n                            publishedAt={dataInsight.publishedAt}\n                            // We need to supply a custom index to correctly map\n                            // the URL when we are excluding the current data\n                            // insight from the list, i.e. on the detail page.\n                            href={`/data-insights#${dataInsightIndexToIdMap[dataInsight.index ?? index]}`}\n                        />\n                    ))}\n                    {isSmallScreen && (\n                        // Normal way to hide the last slide would be a CSS media\n                        // query with `display: none`, but that breaks Embla.\n                        <li className=\"latest-data-insights__card\">\n                            <Button\n                                className=\"latest-data-insights__card__see-all body-3-medium\"\n                                href=\"/data-insights\"\n                                text=\"See all our Data Insights\"\n                                theme=\"outline-vermillion\"\n                            />\n                        </li>\n                    )}\n                </ul>\n            </div>\n            {canScrollPrev && (\n                <Button\n                    ariaLabel=\"Scroll to the previous data insight card\"\n                    className=\"latest-data-insights__control-button latest-data-insights__control-button--prev\"\n                    theme=\"solid-blue\"\n                    onClick={scrollPrev}\n                    icon={faChevronLeft}\n                    text=\"\"\n                />\n            )}\n            {canScrollNext && (\n                <Button\n                    ariaLabel=\"Scroll to the next data insight card\"\n                    className=\"latest-data-insights__control-button latest-data-insights__control-button--next\"\n                    theme=\"solid-blue\"\n                    onClick={scrollNext}\n                    icon={faChevronRight}\n                    text=\"\"\n                />\n            )}\n            <div className=\"latest-data-insights__dots\">\n                {scrollSnaps.map((_, index) => (\n                    <div\n                        key={index}\n                        className={cx(\"latest-data-insights__dot\", {\n                            \"latest-data-insights__dot--selected\":\n                                index === selectedIndex,\n                        })}\n                    />\n                ))}\n            </div>\n        </div>\n    )\n}\n\nconst DataInsightCard = memo(function DataInsightCard({\n    index,\n    title,\n    body,\n    publishedAt,\n    href,\n}: {\n    index: number\n    title: string\n    body: OwidEnrichedGdocBlock[]\n    publishedAt?: Date\n    href: string\n}) {\n    const titleId = `latest-data-insights__card-title-${index}`\n    const firstImageIndex = body.findIndex((block) => block.type === \"image\")\n    const firstImageBlock = body[firstImageIndex] as\n        | EnrichedBlockImage\n        | undefined\n    const otherBlocks = body.filter((_, index) => index !== firstImageIndex)\n    return (\n        <li className=\"latest-data-insights__card\">\n            <a\n                className=\"latest-data-insights__card__data-insight\"\n                href={href}\n                aria-labelledby={titleId}\n            >\n                {firstImageBlock && (\n                    <Image\n                        className=\"latest-data-insights__card-left\"\n                        filename={\n                            firstImageBlock.smallFilename ||\n                            firstImageBlock.filename\n                        }\n                        containerType=\"span-5\"\n                        shouldLightbox={false}\n                    />\n                )}\n                <div className=\"latest-data-insights__card-right\">\n                    {publishedAt && (\n                        <DataInsightDateline\n                            className=\"latest-data-insights__card-dateline\"\n                            publishedAt={publishedAt}\n                            highlightToday={true}\n                        />\n                    )}\n                    <h3\n                        id={titleId}\n                        className=\"latest-data-insights__card-title\"\n                    >\n                        {title}\n                    </h3>\n                    <div className=\"latest-data-insights__card-body\">\n                        <ArticleBlocks\n                            blocks={otherBlocks}\n                            containerType=\"data-insight\"\n                            shouldRenderLinks={false}\n                        />\n                    </div>\n                    <div className=\"latest-data-insights__card-continue\">\n                        <span className=\"body-3-medium-underlined\">\n                            Continue reading\n                        </span>{\" \"}\n                        <FontAwesomeIcon\n                            icon={faArrowRight}\n                            style={{ fontSize: \"10px\" }}\n                        />\n                    </div>\n                </div>\n            </a>\n        </li>\n    )\n})\n\nfunction useDotButton(emblaApi: EmblaCarouselType | undefined): {\n    selectedIndex: number\n    scrollSnaps: number[]\n    onDotButtonClick: (index: number) => void\n} {\n    const [selectedIndex, setSelectedIndex] = useState(0)\n    const [scrollSnaps, setScrollSnaps] = useState<number[]>([])\n\n    const onDotButtonClick = useCallback(\n        (index: number) => {\n            if (!emblaApi) return\n            emblaApi.scrollTo(index)\n        },\n        [emblaApi]\n    )\n\n    const onInit = useCallback((emblaApi: EmblaCarouselType) => {\n        setScrollSnaps(emblaApi.scrollSnapList())\n    }, [])\n\n    const onSelect = useCallback((emblaApi: EmblaCarouselType) => {\n        setSelectedIndex(emblaApi.selectedScrollSnap())\n    }, [])\n\n    useEffect(() => {\n        if (!emblaApi) return\n        onInit(emblaApi)\n        onSelect(emblaApi)\n        emblaApi\n            .on(\"reInit\", onInit)\n            .on(\"reInit\", onSelect)\n            .on(\"select\", onSelect)\n        return () => {\n            emblaApi\n                .off(\"reInit\", onInit)\n                .off(\"reInit\", onSelect)\n                .off(\"select\", onSelect)\n        }\n    }, [emblaApi, onInit, onSelect])\n\n    return {\n        selectedIndex,\n        scrollSnaps,\n        onDotButtonClick,\n    }\n}\n","import { useContext } from \"react\"\nimport cx from \"classnames\"\n\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport LatestDataInsights from \"./LatestDataInsights.js\"\n\nexport default function LatestDataInsightsBlock({\n    className,\n}: {\n    className?: string\n}) {\n    const { latestDataInsights } = useContext(AttachmentsContext)\n    if (!latestDataInsights?.length) return null\n\n    return (\n        <section className={cx(className, \"latest-data-insights-block\")}>\n            <header className=\"latest-data-insights-block__header span-cols-8 col-start-2 span-sm-cols-12 col-sm-start-2\">\n                <h2 className=\"h2-bold\">Data Insights</h2>\n                <p className=\"body-2-regular\">\n                    Bite-sized insights on how the world is changing, published\n                    every few days.\n                </p>\n            </header>\n            <Button\n                href=\"/data-insights\"\n                className=\"latest-data-insights-block__see-all-data-insights-button body-3-medium span-cols-4 col-start-10 span-sm-cols-12 col-sm-start-2\"\n                text=\"See all Data Insights\"\n                theme=\"outline-vermillion\"\n            />\n            <LatestDataInsights\n                className=\"span-cols-12 col-start-2\"\n                latestDataInsights={latestDataInsights}\n            />\n        </section>\n    )\n}\n","import { EnrichedSocialLink, SocialLinkType } from \"@ourworldindata/types\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    IconDefinition,\n    faFacebook,\n    faInstagram,\n    faLinkedin,\n    faMastodon,\n    faThreads,\n    faXTwitter,\n    faYoutube,\n    faBluesky,\n} from \"@fortawesome/free-brands-svg-icons\"\nimport { faEnvelope, faLink } from \"@fortawesome/free-solid-svg-icons\"\n\nfunction SocialLink({ url, text, type }: EnrichedSocialLink) {\n    const typeToIcon: Record<SocialLinkType, IconDefinition> = {\n        x: faXTwitter,\n        facebook: faFacebook,\n        instagram: faInstagram,\n        linkedin: faLinkedin,\n        youtube: faYoutube,\n        threads: faThreads,\n        mastodon: faMastodon,\n        bluesky: faBluesky,\n        email: faEnvelope,\n        link: faLink,\n    }\n\n    return (\n        <li className=\"article-block__social-link social-link\">\n            <FontAwesomeIcon icon={type ? typeToIcon[type] : faLink} />\n            <a href={url}>{text}</a>\n        </li>\n    )\n}\n\nexport function Socials({\n    className,\n    links,\n}: {\n    className?: string\n    links: EnrichedSocialLink[]\n}) {\n    return (\n        <div className={className}>\n            <ul>\n                {links.map((link) => (\n                    <SocialLink key={link.url} {...link} />\n                ))}\n            </ul>\n        </div>\n    )\n}\n","import { useMediaQuery } from \"usehooks-ts\"\n\nimport { EnrichedBlockPerson } from \"@ourworldindata/types\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../../SiteConstants.js\"\nimport { useLinkedDocument } from \"../utils.js\"\nimport { ArticleBlocks } from \"./ArticleBlocks.js\"\nimport Image from \"./Image.js\"\nimport { Socials } from \"./Socials.js\"\n\nexport default function Person({ person }: { person: EnrichedBlockPerson }) {\n    const { linkedDocument } = useLinkedDocument(person.url ?? \"\")\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const url = linkedDocument?.url\n\n    const heading = <h3 className=\"person-heading\">{person.name}</h3>\n\n    const header = (\n        <div className=\"person-header\">\n            {url ? <a href={url}>{heading}</a> : heading}\n            {person.title && (\n                <span className=\"person-title\">{person.title}</span>\n            )}\n        </div>\n    )\n\n    const image = person.image ? (\n        <Image\n            className=\"person-image\"\n            filename={person.image}\n            containerType=\"person\"\n            shouldLightbox={false}\n        />\n    ) : null\n\n    return (\n        <div className=\"person\">\n            {person.image && (\n                <div className=\"person-image-container\">\n                    {url ? (\n                        <a href={url} className=\"person-image--link-wrapper\">\n                            {image}\n                        </a>\n                    ) : (\n                        image\n                    )}\n                    {isSmallScreen && header}\n                </div>\n            )}\n            <div>\n                {(!person.image || !isSmallScreen) && header}\n                <ArticleBlocks blocks={person.text} />\n                {person.socials && (\n                    <Socials\n                        className=\"person-socials\"\n                        links={person.socials}\n                    />\n                )}\n            </div>\n        </div>\n    )\n}\n","/**\n * Registry of known bespoke components that can be embedded in gdocs.\n * Each component is identified by a unique name and specifies URLs for\n * its ESM script and CSS stylesheet.\n */\n\nimport type { BespokeComponentDefinition } from \"../bespoke/shared/bespokeComponentTypes.js\"\n\n/**\n * Map of component names to their definitions.\n * Add new bespoke components here.\n */\nexport const BESPOKE_COMPONENT_REGISTRY: Record<\n    string,\n    BespokeComponentDefinition\n> = {\n    // Example:\n    // \"my-widget\": {\n    //     scriptUrl: \"/assets/bespoke/my-widget.mjs\",\n    //     cssUrl: \"/assets/bespoke/my-widget.css\",\n    // },\n}\n","import type { BespokeComponentModule } from \"./bespokeComponentTypes.ts\"\n\n/**\n * Load a CSS stylesheet into a shadow root by appending a <link> element.\n * Resolves when the stylesheet has finished loading.\n */\nexport function loadCssIntoShadow(\n    shadowRoot: ShadowRoot,\n    cssUrl: string\n): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n        const link = document.createElement(\"link\")\n        link.rel = \"stylesheet\"\n        link.href = cssUrl\n        link.onload = () => resolve()\n        link.onerror = () => reject(new Error(`Failed to load CSS: ${cssUrl}`))\n        shadowRoot.appendChild(link)\n    })\n}\n\n/**\n * Mount a bespoke component into a shadow DOM container.\n *\n * Creates (or reuses) a shadow root on the given element, loads the CSS,\n * dynamically imports the JS module, and calls its `mount` function.\n *\n * Returns a dispose function that cleans up the mounted component.\n * Respects the provided AbortSignal to cancel mid-flight.\n */\nexport async function mountBespokeComponentInShadow({\n    container,\n    scriptUrl,\n    cssUrl,\n    variant,\n    config,\n    signal,\n}: {\n    container: HTMLDivElement\n    scriptUrl: string\n    cssUrl: string\n    variant?: string\n    config?: Record<string, string>\n    signal?: AbortSignal\n}): Promise<{ dispose?: () => void }> {\n    let shadowRoot = container.shadowRoot\n    if (!shadowRoot) {\n        shadowRoot = container.attachShadow({ mode: \"open\" })\n    }\n    shadowRoot.replaceChildren()\n\n    const cssPromise = loadCssIntoShadow(shadowRoot, cssUrl)\n    const jsPromise = import(\n        /* @vite-ignore */\n        scriptUrl\n    ) as Promise<BespokeComponentModule>\n\n    await cssPromise\n    const module = await jsPromise\n\n    if (signal?.aborted) return {}\n\n    if (typeof module.mount !== \"function\") {\n        throw new Error(\"Module does not export a mount function\")\n    }\n\n    const mountContainer = document.createElement(\"div\")\n    mountContainer.className = \"bespoke-container\"\n    shadowRoot.appendChild(mountContainer)\n\n    const result = await module.mount(mountContainer, { variant, config })\n    const dispose = typeof result === \"function\" ? result : undefined\n\n    return { dispose }\n}\n","import { EnrichedBlockBespokeComponent } from \"@ourworldindata/types\"\nimport { LoadingIndicator } from \"@ourworldindata/components\"\nimport cx from \"classnames\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { BESPOKE_COMPONENT_REGISTRY } from \"../../bespokeComponentRegistry.js\"\nimport { mountBespokeComponentInShadow } from \"../../../bespoke/shared/bespokeComponentShadowDom.js\"\n\n/**\n * Renders a bespoke component inside a Shadow DOM container.\n *\n * This is not a normal React component - it renders client-only and mounts\n * an external ES module into a Shadow DOM. This allows embedding\n * independently-built components that have their own bundled JS and CSS,\n * isolated from the rest of the page styles.\n *\n * On the server, this renders an empty div. On the client, useEffect dynamically\n * imports the module and calls its `mount` function.\n *\n * Example ArchieML:\n * {.bespoke-component}\n *   bundle: poverty-plots\n *   variant: distribution # Variant is optional, but can be useful when the bundle contains multiple charts that should be connected in state, but rendered in different places.\n *   {.config}\n *     country: \"USA\"\n *     year: 2020\n *   {}\n * {}\n */\nexport function BespokeComponent({\n    className,\n    block,\n}: {\n    className?: string\n    block: EnrichedBlockBespokeComponent\n}) {\n    const containerRef = useRef<HTMLDivElement>(null)\n    const disposeRef = useRef<(() => void) | null>(null)\n    const [isLoading, setIsLoading] = useState(true)\n    const [error, setError] = useState<string | null>(null)\n\n    useEffect(() => {\n        const container = containerRef.current\n        if (!container) return\n\n        const definition = BESPOKE_COMPONENT_REGISTRY[block.bundle]\n        if (!definition) {\n            setError(`Unknown bespoke bundle: \"${block.bundle}\"`)\n            return\n        }\n\n        const abortController = new AbortController()\n\n        setError(null)\n        setIsLoading(true)\n\n        mountBespokeComponentInShadow({\n            container,\n            scriptUrl: definition.scriptUrl,\n            cssUrl: definition.cssUrl,\n            variant: block.variant,\n            config: block.config,\n            signal: abortController.signal,\n        })\n            .then(({ dispose }) => {\n                if (abortController.signal.aborted) return\n                if (dispose) disposeRef.current = dispose\n                setIsLoading(false)\n            })\n            .catch((err) => {\n                if (abortController.signal.aborted) return\n                const message =\n                    err instanceof Error ? err.message : \"Unknown error\"\n                setError(\n                    `Failed to load bespoke bundle \"${block.bundle}\": ${message}`\n                )\n                console.error(\n                    `Failed to hydrate bespoke bundle \"${block.bundle}\":`,\n                    err\n                )\n            })\n\n        return () => {\n            abortController.abort()\n            if (disposeRef.current) {\n                disposeRef.current()\n                disposeRef.current = null\n            }\n            container.shadowRoot?.replaceChildren()\n        }\n    }, [block.bundle, block.variant, block.config])\n\n    if (error) {\n        return <BespokeError className={className} message={error} />\n    }\n\n    return (\n        <div\n            className={className}\n            style={{\n                position: \"relative\",\n                minHeight: 300,\n            }}\n        >\n            {isLoading && <LoadingIndicator />}\n            <div ref={containerRef}></div>\n        </div>\n    )\n}\n\nfunction BespokeError({\n    className,\n    message,\n}: {\n    className?: string\n    message: string\n}) {\n    return (\n        <div className={cx(className, \"bespoke-component__error\")}>\n            {message}\n        </div>\n    )\n}\n","import React from \"react\"\nimport cx from \"classnames\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faMinus, faPlus } from \"@fortawesome/free-solid-svg-icons\"\nimport { SiteAnalytics } from \"../../SiteAnalytics.js\"\n\nconst analytics = new SiteAnalytics()\n\nexport const Expander = (props: {\n    className?: string\n    children: React.ReactNode\n    title: string\n    heading?: string\n    subtitle?: string\n}) => {\n    const { className } = props\n\n    return (\n        <details\n            onToggle={(e) => {\n                const isOpen = e.currentTarget.open\n                analytics.logExpanderToggle(props.title, isOpen)\n            }}\n            className={cx(\"expander\", className)}\n        >\n            <summary className=\"expander__summary\">\n                {props.heading && (\n                    <span className=\"body-3-bold expander__heading\">\n                        {props.heading}\n                    </span>\n                )}\n                <span className=\"h4-semibold expander__title\">\n                    {props.title}\n                </span>\n                {props.subtitle && (\n                    <span className=\"body-3-regular expander__subtitle\">\n                        {props.subtitle}\n                    </span>\n                )}\n                <FontAwesomeIcon\n                    icon={faPlus}\n                    className=\"expander__status-icon plus\"\n                />\n                <FontAwesomeIcon\n                    icon={faMinus}\n                    className=\"expander__status-icon minus\"\n                />\n            </summary>\n            {props.children}\n        </details>\n    )\n}\n","import cx from \"classnames\"\nimport {\n    EnrichedBlockResourcePanel,\n    ResourcePanelIcon as TResourcePanelIcon,\n} from \"@ourworldindata/types\"\nimport { useContext } from \"react\"\nimport { AttachmentsContext } from \"../AttachmentsContext\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings\"\nimport { HybridLinkList } from \"./HybridLinkList\"\nimport { Button } from \"@ourworldindata/components\"\nimport { queryParamsToStr } from \"@ourworldindata/utils\"\n\nfunction DataCatalogButton({ buttonText }: { buttonText?: string }) {\n    const { tags } = useContext(AttachmentsContext)\n    const firstTagName = tags[0]?.name\n    if (!buttonText || !firstTagName) return null\n\n    const dataCatalogUrl =\n        `${BAKED_BASE_URL}/data` +\n        queryParamsToStr({\n            topics: firstTagName,\n        })\n    return (\n        <Button\n            href={dataCatalogUrl}\n            text={buttonText}\n            theme={\"solid-vermillion\"}\n        />\n    )\n}\n\nfunction ResourcePanelIcon({\n    className,\n    icon,\n}: {\n    className: string\n    icon?: TResourcePanelIcon\n}) {\n    if (!icon) return null\n\n    const iconMap: Record<TResourcePanelIcon, React.ReactElement> = {\n        chart: (\n            // Different from the FontAwesome linechart that we have\n            <svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                fill=\"none\"\n                viewBox=\"0 0 32 32\"\n            >\n                <g clipPath=\"url(#a)\">\n                    <path\n                        fill=\"#CE261E\"\n                        d=\"m5.10019 27.5455 6.15761-11.5637 7.0346 6.254c.2202.1957.4825.3383.7664.4168.284.0785.5822.0909.8718.0361.2921-.0547.5676-.1762.805-.3551.2374-.1789.4302-.4102.5633-.676l5.3193-10.5903-1.7538-.8673-5.2904 10.6-7.0345-6.254c-.2147-.1997-.4721-.3477-.7527-.4329-.2805-.0851-.5768-.1052-.8662-.0586-.2859.0475-.5574.1587-.7943.3256-.2369.1668-.43314.3849-.57411.6381l-5.09763 9.6363V2.49091H2.52728V27.5455c0 .5111.20305 1.0013.56449 1.3627.36143.3615.85164.5645 1.36279.5645H29.5091v-1.9272H5.10019Z\"\n                    />\n                </g>\n                <defs>\n                    <clipPath id=\"a\">\n                        <path\n                            fill=\"#fff\"\n                            d=\"M.600037.563599h30.8364v30.8364H.600037z\"\n                        />\n                    </clipPath>\n                </defs>\n            </svg>\n        ),\n    }\n\n    return <div className={className}>{iconMap[icon]}</div>\n}\n\nexport function ResourcePanel({\n    icon,\n    className,\n    title,\n    kicker,\n    buttonText,\n    links,\n}: EnrichedBlockResourcePanel & {\n    className?: string\n}) {\n    return (\n        <div className={cx(className, \"resource-panel\")}>\n            <ResourcePanelIcon className=\"resource-panel__icon\" icon={icon} />\n            {kicker && (\n                <span className=\"body-3-bold resource-panel__kicker\">\n                    {kicker}\n                </span>\n            )}\n            {title && (\n                <h3 className=\"h3-bold resource-panel__title\">{title}</h3>\n            )}\n            <HybridLinkList links={links} />\n            <DataCatalogButton buttonText={buttonText} />\n        </div>\n    )\n}\n","import LinkedA from \"./LinkedA.js\"\nimport cx from \"classnames\"\nimport { SpanLink } from \"@ourworldindata/types\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\n\nexport function Cta(props: {\n    url: string\n    text: string\n    className?: string\n    shouldRenderLinks?: boolean\n}) {\n    // Transforming into the span shape because LinkedA takes care of resolving all attachments already\n    const asSpan: SpanLink = {\n        url: props.url,\n        children: [{ spanType: \"span-simple-text\", text: props.text }],\n        spanType: \"span-link\",\n    }\n    return (\n        <div className={cx(props.className, \"cta\")}>\n            {props.shouldRenderLinks ? <LinkedA span={asSpan} /> : props.text}\n            <FontAwesomeIcon icon={faArrowRight} />\n        </div>\n    )\n}\n","import { SearchResultHeaderSkeleton } from \"./SearchResultHeaderSkeleton.js\"\n\nexport const SearchDataInsightsResultsSkeleton = () => {\n    return (\n        <div className=\"grid span-cols-12 col-start-2\">\n            <section className=\"search-data-insights-results animate-pulse span-cols-12\">\n                <SearchResultHeaderSkeleton />\n                <div className=\"search-data-insights-results__hits\">\n                    <SearchDataInsightHitSkeleton />\n                    <SearchDataInsightHitSkeleton />\n                    <SearchDataInsightHitSkeleton />\n                    <SearchDataInsightHitSkeleton />\n                </div>\n            </section>\n        </div>\n    )\n}\n\nconst SearchDataInsightHitSkeleton = () => (\n    <div className=\"search-data-insight-hit-skeleton\">\n        <div className=\"search-data-insight-hit__image-container\">\n            {/* Needs non-empty children to maintain aspect ratio. */}\n            <div />\n        </div>\n        <div className=\"search-data-insight-hit-skeleton__date\" />\n        <div className=\"search-data-insight-hit-skeleton__title\" />\n        <div className=\"search-data-insight-hit-skeleton__title\" />\n        <div className=\"search-data-insight-hit-skeleton__title\" />\n    </div>\n)\n","import cx from \"classnames\"\nimport { getCanonicalUrl } from \"@ourworldindata/components\"\nimport { formatDate } from \"@ourworldindata/utils\"\nimport { OwidGdocType, DataInsightHit } from \"@ourworldindata/types\"\n\nexport const SearchDataInsightHit = ({\n    hit,\n    className,\n    onClick,\n}: {\n    hit: DataInsightHit\n    className?: string\n    onClick: VoidFunction\n}) => {\n    const href = getCanonicalUrl(\"\", {\n        slug: hit.slug,\n        content: { type: OwidGdocType.DataInsight },\n    })\n\n    return (\n        <a\n            className={cx(\"search-data-insight-hit\", className)}\n            href={href}\n            onClick={onClick}\n        >\n            <article>\n                {hit.thumbnailUrl && (\n                    <div className=\"search-data-insight-hit__image-container\">\n                        <img\n                            className=\"search-data-insight-hit__image\"\n                            src={hit.thumbnailUrl}\n                            alt=\"\"\n                        />\n                    </div>\n                )}\n                <div className=\"search-data-insight-hit__date\">\n                    {formatDate(new Date(hit.date))}\n                </div>\n                <h3 className=\"search-data-insight-hit__title\">{hit.title}</h3>\n            </article>\n        </a>\n    )\n}\n","import { useMemo } from \"react\"\nimport { useQuery } from \"@tanstack/react-query\"\nimport {\n    DataInsightHit,\n    SearchDataInsightResponse,\n    SearchResultType,\n    SearchState,\n    FEATURED_DATA_INSIGHTS_ID,\n} from \"@ourworldindata/types\"\nimport { createTopicFilter } from \"./search/searchUtils.js\"\nimport { queryDataInsights, searchQueryKeys } from \"./search/queries.js\"\nimport { getLiteSearchClient } from \"./search/searchClients.js\"\nimport { SearchDataInsightsResultsSkeleton } from \"./search/SearchDataInsightsResultsSkeleton.js\"\nimport { SearchDataInsightHit } from \"./search/SearchDataInsightHit.js\"\nimport { Button } from \"@ourworldindata/components\"\nimport cx from \"classnames\"\n\nconst MAX_DATA_INSIGHTS_RESULTS = 1000 // setting to maximum allowed to get all results\n\nexport type FeaturedDataInsightsProps = {\n    topicName: string\n    className?: string\n}\n\nexport const FeaturedDataInsights = ({\n    topicName,\n    className,\n}: FeaturedDataInsightsProps) => {\n    const liteSearchClient = getLiteSearchClient()\n\n    const searchState = useMemo<SearchState>(\n        () => ({\n            query: \"\",\n            filters: [createTopicFilter(topicName)],\n            requireAllCountries: false,\n            resultType: SearchResultType.WRITING,\n        }),\n        [topicName]\n    )\n\n    const { data, isError, isLoading } = useQuery<\n        SearchDataInsightResponse,\n        Error\n    >({\n        // reusing the same query key function as search for simplicity but\n        // would technically collide if using the same query client instance\n        queryKey: searchQueryKeys.dataInsights(searchState),\n        queryFn: () =>\n            queryDataInsights(\n                liteSearchClient,\n                searchState,\n                0,\n                MAX_DATA_INSIGHTS_RESULTS\n            ),\n        enabled: Boolean(topicName),\n    })\n\n    const hits = data?.hits ?? []\n    const totalResults = data?.nbHits ?? 0\n\n    if (isError || !topicName) return null\n    if (!isLoading && totalResults === 0) return null\n\n    return (\n        <section\n            className={cx(className, \"needs-dividers\")}\n            id={FEATURED_DATA_INSIGHTS_ID}\n        >\n            <h1 className=\"h1-semibold\">\n                <span>Data Insights on {topicName}</span>\n                <a\n                    className=\"deep-link\"\n                    aria-labelledby={FEATURED_DATA_INSIGHTS_ID}\n                    href={`#${FEATURED_DATA_INSIGHTS_ID}`}\n                />\n            </h1>\n            {isLoading ? (\n                <SearchDataInsightsResultsSkeleton />\n            ) : (\n                <>\n                    <div className=\"article-block__featured-data-insights__hits\">\n                        {hits.map((hit: DataInsightHit) => (\n                            <SearchDataInsightHit\n                                key={hit.objectID}\n                                className=\"article-block__featured-data-insights__hit\"\n                                hit={hit}\n                                onClick={() => undefined}\n                            />\n                        ))}\n                    </div>\n                    <div className=\"article-block__featured-data-insights__see-all\">\n                        <Button\n                            theme=\"solid-vermillion\"\n                            text=\"See all data insights\"\n                            href=\"/data-insights\"\n                            dataTrackNote=\"featured-data-insights-see-all\"\n                        />\n                    </div>\n                </>\n            )}\n        </section>\n    )\n}\n","import { PropsWithChildren } from \"react\"\nimport { QueryClientProvider } from \"@tanstack/react-query\"\nimport { getSearchQueryClient } from \"../../search/searchClients.js\"\n\nexport const BlockQueryClientProvider = ({ children }: PropsWithChildren) => {\n    const queryClient = getSearchQueryClient()\n\n    return (\n        <QueryClientProvider client={queryClient}>\n            {children}\n        </QueryClientProvider>\n    )\n}\n","import { PropsWithChildren } from \"react\"\nimport cx from \"classnames\"\nimport {\n    ExploreDataSectionAlignment,\n    EXPLORE_DATA_SECTION_ID,\n    EXPLORE_DATA_SECTION_DEFAULT_TITLE,\n} from \"@ourworldindata/types\"\n\ntype ExploreDataSectionProps = PropsWithChildren<{\n    title?: string\n    className?: string\n    align: ExploreDataSectionAlignment\n}>\n\nexport const ExploreDataSection = ({\n    title = EXPLORE_DATA_SECTION_DEFAULT_TITLE,\n    className,\n    align,\n    children,\n}: ExploreDataSectionProps) => {\n    return (\n        <section\n            id={EXPLORE_DATA_SECTION_ID}\n            className={cx(\n                className,\n                \"explore-data-section\",\n                `explore-data-section--${align}`,\n                \"no-dividers\"\n            )}\n        >\n            <header className=\"explore-data-section__header col-start-2 span-cols-12 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                <div className=\"icon\" aria-hidden=\"true\">\n                    {icon}\n                </div>\n                <h1>{title}</h1>\n            </header>\n            {children}\n        </section>\n    )\n}\n\nconst icon = (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n        <path\n            fill=\"#CE261E\"\n            d=\"M5.283 10.788h2.264v6.659H5.283zM9.057 6.792h2.264v11.321H9.057zM12.83 9.456h2.264v7.991H12.83z\"\n        />\n        <path\n            fill=\"#355174\"\n            d=\"M9.75 0C4.364 0 0 4.365 0 9.75c0 5.383 4.365 9.748 9.75 9.748 2.107 0 4.16-.684 5.846-1.95l5.686 5.685c.22.218.573.218.793 0l1.157-1.158a.561.561 0 0 0 0-.792l-5.684-5.684a9.746 9.746 0 0 0 1.95-5.85C19.498 4.365 15.133 0 9.75 0Zm0 1.95c4.307 0 7.799 3.491 7.799 7.8 0 4.307-3.492 7.799-7.8 7.799a7.799 7.799 0 0 1-7.8-7.8c0-4.308 3.492-7.8 7.8-7.8Z\"\n        />\n    </svg>\n)\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faArrowDown,\n    faArrowRight,\n    faBook,\n    faChartSimple,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { TocHeadingWithTitleSupertitle } from \"@ourworldindata/utils\"\nimport { SearchResultType, SearchState } from \"@ourworldindata/types\"\nimport {\n    createTopicFilter,\n    SEARCH_BASE_PATH,\n} from \"../../search/searchUtils.js\"\nimport { stateToSearchParams } from \"../../search/searchState.js\"\nimport cx from \"classnames\"\n\nconst DEFAULT_TITLE = \"Sections\"\nconst SECONDARY_CARDS = [\n    {\n        id: \"data\",\n        title: \"Data\",\n        description: \"See all charts\",\n        icon: faChartSimple,\n        resultType: SearchResultType.DATA,\n    },\n    {\n        id: \"writing\",\n        title: \"Writing\",\n        description: \"See all articles and insights\",\n        icon: faBook,\n        resultType: SearchResultType.WRITING,\n    },\n] as const\n\ntype Props = {\n    toc?: TocHeadingWithTitleSupertitle[]\n    className?: string\n    title?: string\n    tagName: string\n}\n\nexport const LTPTableOfContents = ({\n    toc,\n    className,\n    title,\n    tagName,\n}: Props) => {\n    if (!toc || toc.length === 0) return null\n\n    const resolvedTitle = title ?? DEFAULT_TITLE\n    const resourceSectionTitle = `All our work on ${tagName}`\n\n    const resourceCards = SECONDARY_CARDS.map((card) => ({\n        ...card,\n        href: buildSearchHrefForCard(card.resultType, tagName),\n    }))\n\n    return (\n        <nav className={cx(className, \"ltp-toc\")} aria-label={resolvedTitle}>\n            <p className=\"ltp-toc__title col-start-2 span-cols-10 col-md-start-1 span-md-cols-12 span-sm-cols-12\">\n                {resolvedTitle}\n            </p>\n            <div className=\"ltp-toc__primary col-start-2 span-cols-7 col-md-start-1 span-md-cols-8 span-sm-cols-12\">\n                <ul className=\"ltp-toc__primary-list\">\n                    {toc.map(({ slug, title: headingTitle, text }) => {\n                        const displayTitle = headingTitle || text\n                        if (!slug || !displayTitle) return null\n                        return (\n                            <li key={slug} className=\"ltp-toc__primary-item\">\n                                <FontAwesomeIcon icon={faArrowDown} />\n                                <a\n                                    href={`#${slug}`}\n                                    className=\"ltp-toc__primary-link\"\n                                    data-track-note=\"toc_link\"\n                                >\n                                    {displayTitle}\n                                </a>\n                            </li>\n                        )\n                    })}\n                </ul>\n            </div>\n            <div className=\"ltp-toc__secondary span-cols-3 span-md-cols-4 span-sm-cols-12\">\n                <p className=\"ltp-toc__secondary-title\">\n                    {resourceSectionTitle}\n                </p>\n                <ul className=\"ltp-toc__secondary-list\">\n                    {resourceCards.map(\n                        ({ id, title: cardTitle, description, icon, href }) => (\n                            <li key={id}>\n                                <a\n                                    className=\"ltp-toc__secondary-card\"\n                                    href={href}\n                                >\n                                    <div className=\"ltp-toc__secondary-card-content\">\n                                        <span\n                                            className=\"ltp-toc__secondary-card-icon\"\n                                            aria-hidden=\"true\"\n                                        >\n                                            <FontAwesomeIcon icon={icon} />\n                                        </span>\n                                        <div className=\"ltp-toc__secondary-card-text\">\n                                            <span className=\"ltp-toc__secondary-card-title\">\n                                                {cardTitle}\n                                            </span>\n                                            <span className=\"ltp-toc__secondary-card-description\">\n                                                {description}\n                                            </span>\n                                        </div>\n                                    </div>\n                                    <FontAwesomeIcon\n                                        icon={faArrowRight}\n                                        className=\"ltp-toc__secondary-card-arrow\"\n                                        aria-hidden=\"true\"\n                                    />\n                                </a>\n                            </li>\n                        )\n                    )}\n                </ul>\n            </div>\n        </nav>\n    )\n}\n\nconst buildSearchHrefForCard = (\n    resultType: SearchResultType,\n    tagName: string\n) => {\n    const searchState: SearchState = {\n        query: \"\",\n        filters: [createTopicFilter(tagName)],\n        requireAllCountries: false,\n        resultType,\n    }\n    const params = stateToSearchParams(searchState)\n    return `${SEARCH_BASE_PATH}?${params.toString()}`\n}\n","import { EnrichedBlockDataCallout } from \"@ourworldindata/types\"\nimport { Container, getLayout } from \"./layout.js\"\nimport ArticleBlock from \"./ArticleBlock.js\"\nimport { DataCalloutContext, DataCalloutContextType } from \"../utils.js\"\n\n/**\n * DataCallout component wraps data-callout block content and provides\n * context for span-callout spans to look up their values.\n */\nexport function DataCallout({\n    block,\n    containerType = \"default\",\n}: {\n    block: EnrichedBlockDataCallout\n    containerType?: Container\n}) {\n    const contextValue: DataCalloutContextType = {\n        url: block.url,\n    }\n\n    return (\n        <DataCalloutContext.Provider value={contextValue}>\n            <div className={getLayout(\"data-callout\", containerType)}>\n                {block.content.map((textBlock, index) => (\n                    <ArticleBlock key={index} b={textBlock} />\n                ))}\n            </div>\n        </DataCalloutContext.Provider>\n    )\n}\n\nexport default DataCallout\n","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fortawesome/fontawesome-svg-core'), require('prop-types'), require('react')) :\n  typeof define === 'function' && define.amd ? define(['exports', '@fortawesome/fontawesome-svg-core', 'prop-types', 'react'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global[\"react-fontawesome\"] = {}, global.FontAwesome, global.PropTypes, global.React));\n})(this, (function (exports, fontawesomeSvgCore, PropTypes, React) { 'use strict';\n\n  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);\n  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      enumerableOnly && (symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      })), keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = null != arguments[i] ? arguments[i] : {};\n      i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n\n    return target;\n  }\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n      return typeof obj;\n    } : function (obj) {\n      return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    }, _typeof(obj);\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _objectWithoutPropertiesLoose(source, excluded) {\n    if (source == null) return {};\n    var target = {};\n    var sourceKeys = Object.keys(source);\n    var key, i;\n\n    for (i = 0; i < sourceKeys.length; i++) {\n      key = sourceKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      target[key] = source[key];\n    }\n\n    return target;\n  }\n\n  function _objectWithoutProperties(source, excluded) {\n    if (source == null) return {};\n\n    var target = _objectWithoutPropertiesLoose(source, excluded);\n\n    var key, i;\n\n    if (Object.getOwnPropertySymbols) {\n      var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n      for (i = 0; i < sourceSymbolKeys.length; i++) {\n        key = sourceSymbolKeys[i];\n        if (excluded.indexOf(key) >= 0) continue;\n        if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n        target[key] = source[key];\n      }\n    }\n\n    return target;\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _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\n  function _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\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  // Get CSS class list from a props object\n  function classList(props) {\n    var _classes;\n\n    var beat = props.beat,\n        fade = props.fade,\n        beatFade = props.beatFade,\n        bounce = props.bounce,\n        shake = props.shake,\n        flash = props.flash,\n        spin = props.spin,\n        spinPulse = props.spinPulse,\n        spinReverse = props.spinReverse,\n        pulse = props.pulse,\n        fixedWidth = props.fixedWidth,\n        inverse = props.inverse,\n        border = props.border,\n        listItem = props.listItem,\n        flip = props.flip,\n        size = props.size,\n        rotation = props.rotation,\n        pull = props.pull; // map of CSS class names to properties\n\n    var classes = (_classes = {\n      'fa-beat': beat,\n      'fa-fade': fade,\n      'fa-beat-fade': beatFade,\n      'fa-bounce': bounce,\n      'fa-shake': shake,\n      'fa-flash': flash,\n      'fa-spin': spin,\n      'fa-spin-reverse': spinReverse,\n      'fa-spin-pulse': spinPulse,\n      'fa-pulse': pulse,\n      'fa-fw': fixedWidth,\n      'fa-inverse': inverse,\n      'fa-border': border,\n      'fa-li': listItem,\n      'fa-flip': flip === true,\n      'fa-flip-horizontal': flip === 'horizontal' || flip === 'both',\n      'fa-flip-vertical': flip === 'vertical' || flip === 'both'\n    }, _defineProperty(_classes, \"fa-\".concat(size), typeof size !== 'undefined' && size !== null), _defineProperty(_classes, \"fa-rotate-\".concat(rotation), typeof rotation !== 'undefined' && rotation !== null && rotation !== 0), _defineProperty(_classes, \"fa-pull-\".concat(pull), typeof pull !== 'undefined' && pull !== null), _defineProperty(_classes, 'fa-swap-opacity', props.swapOpacity), _classes); // map over all the keys in the classes object\n    // return an array of the keys where the value for the key is not null\n\n    return Object.keys(classes).map(function (key) {\n      return classes[key] ? key : null;\n    }).filter(function (key) {\n      return key;\n    });\n  }\n\n  // Camelize taken from humps\n  // humps is copyright © 2012+ Dom Christie\n  // Released under the MIT license.\n  // Performant way to determine if object coerces to a number\n  function _isNumerical(obj) {\n    obj = obj - 0; // eslint-disable-next-line no-self-compare\n\n    return obj === obj;\n  }\n\n  function camelize(string) {\n    if (_isNumerical(string)) {\n      return string;\n    } // eslint-disable-next-line no-useless-escape\n\n\n    string = string.replace(/[\\-_\\s]+(.)?/g, function (match, chr) {\n      return chr ? chr.toUpperCase() : '';\n    }); // Ensure 1st char is always lowercase\n\n    return string.substr(0, 1).toLowerCase() + string.substr(1);\n  }\n\n  var _excluded = [\"style\"];\n\n  function capitalize(val) {\n    return val.charAt(0).toUpperCase() + val.slice(1);\n  }\n\n  function styleToObject(style) {\n    return style.split(';').map(function (s) {\n      return s.trim();\n    }).filter(function (s) {\n      return s;\n    }).reduce(function (acc, pair) {\n      var i = pair.indexOf(':');\n      var prop = camelize(pair.slice(0, i));\n      var value = pair.slice(i + 1).trim();\n      prop.startsWith('webkit') ? acc[capitalize(prop)] = value : acc[prop] = value;\n      return acc;\n    }, {});\n  }\n\n  function convert(createElement, element) {\n    var extraProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    if (typeof element === 'string') {\n      return element;\n    }\n\n    var children = (element.children || []).map(function (child) {\n      return convert(createElement, child);\n    });\n    /* eslint-disable dot-notation */\n\n    var mixins = Object.keys(element.attributes || {}).reduce(function (acc, key) {\n      var val = element.attributes[key];\n\n      switch (key) {\n        case 'class':\n          acc.attrs['className'] = val;\n          delete element.attributes['class'];\n          break;\n\n        case 'style':\n          acc.attrs['style'] = styleToObject(val);\n          break;\n\n        default:\n          if (key.indexOf('aria-') === 0 || key.indexOf('data-') === 0) {\n            acc.attrs[key.toLowerCase()] = val;\n          } else {\n            acc.attrs[camelize(key)] = val;\n          }\n\n      }\n\n      return acc;\n    }, {\n      attrs: {}\n    });\n\n    var _extraProps$style = extraProps.style,\n        existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style,\n        remaining = _objectWithoutProperties(extraProps, _excluded);\n\n    mixins.attrs['style'] = _objectSpread2(_objectSpread2({}, mixins.attrs['style']), existingStyle);\n    /* eslint-enable */\n\n    return createElement.apply(void 0, [element.tag, _objectSpread2(_objectSpread2({}, mixins.attrs), remaining)].concat(_toConsumableArray(children)));\n  }\n\n  var PRODUCTION = false;\n\n  try {\n    PRODUCTION = process.env.NODE_ENV === 'production';\n  } catch (e) {}\n\n  function log () {\n    if (!PRODUCTION && console && typeof console.error === 'function') {\n      var _console;\n\n      (_console = console).error.apply(_console, arguments);\n    }\n  }\n\n  function normalizeIconArgs(icon) {\n    // this has everything that it needs to be rendered which means it was probably imported\n    // directly from an icon svg package\n    if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName && icon.icon) {\n      return icon;\n    }\n\n    if (fontawesomeSvgCore.parse.icon) {\n      return fontawesomeSvgCore.parse.icon(icon);\n    } // if the icon is null, there's nothing to do\n\n\n    if (icon === null) {\n      return null;\n    } // if the icon is an object and has a prefix and an icon name, return it\n\n\n    if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName) {\n      return icon;\n    } // if it's an array with length of two\n\n\n    if (Array.isArray(icon) && icon.length === 2) {\n      // use the first item as prefix, second as icon name\n      return {\n        prefix: icon[0],\n        iconName: icon[1]\n      };\n    } // if it's a string, use it as the icon name\n\n\n    if (typeof icon === 'string') {\n      return {\n        prefix: 'fas',\n        iconName: icon\n      };\n    }\n  }\n\n  // creates an object with a key of key\n  // and a value of value\n  // if certain conditions are met\n  function objectWithKey(key, value) {\n    // if the value is a non-empty array\n    // or it's not an array but it is truthy\n    // then create the object with the key and the value\n    // if not, return an empty array\n    return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {};\n  }\n\n  var defaultProps = {\n    border: false,\n    className: '',\n    mask: null,\n    maskId: null,\n    fixedWidth: false,\n    inverse: false,\n    flip: false,\n    icon: null,\n    listItem: false,\n    pull: null,\n    pulse: false,\n    rotation: null,\n    size: null,\n    spin: false,\n    spinPulse: false,\n    spinReverse: false,\n    beat: false,\n    fade: false,\n    beatFade: false,\n    bounce: false,\n    shake: false,\n    symbol: false,\n    title: '',\n    titleId: null,\n    transform: null,\n    swapOpacity: false\n  };\n  var FontAwesomeIcon = /*#__PURE__*/React__default[\"default\"].forwardRef(function (props, ref) {\n    var allProps = _objectSpread2(_objectSpread2({}, defaultProps), props);\n\n    var iconArgs = allProps.icon,\n        maskArgs = allProps.mask,\n        symbol = allProps.symbol,\n        className = allProps.className,\n        title = allProps.title,\n        titleId = allProps.titleId,\n        maskId = allProps.maskId;\n    var iconLookup = normalizeIconArgs(iconArgs);\n    var classes = objectWithKey('classes', [].concat(_toConsumableArray(classList(allProps)), _toConsumableArray((className || '').split(' '))));\n    var transform = objectWithKey('transform', typeof allProps.transform === 'string' ? fontawesomeSvgCore.parse.transform(allProps.transform) : allProps.transform);\n    var mask = objectWithKey('mask', normalizeIconArgs(maskArgs));\n    var renderedIcon = fontawesomeSvgCore.icon(iconLookup, _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, classes), transform), mask), {}, {\n      symbol: symbol,\n      title: title,\n      titleId: titleId,\n      maskId: maskId\n    }));\n\n    if (!renderedIcon) {\n      log('Could not find icon', iconLookup);\n      return null;\n    }\n\n    var abstract = renderedIcon.abstract;\n    var extraProps = {\n      ref: ref\n    };\n    Object.keys(allProps).forEach(function (key) {\n      // eslint-disable-next-line no-prototype-builtins\n      if (!defaultProps.hasOwnProperty(key)) {\n        extraProps[key] = allProps[key];\n      }\n    });\n    return convertCurry(abstract[0], extraProps);\n  });\n  FontAwesomeIcon.displayName = 'FontAwesomeIcon';\n  FontAwesomeIcon.propTypes = {\n    beat: PropTypes__default[\"default\"].bool,\n    border: PropTypes__default[\"default\"].bool,\n    beatFade: PropTypes__default[\"default\"].bool,\n    bounce: PropTypes__default[\"default\"].bool,\n    className: PropTypes__default[\"default\"].string,\n    fade: PropTypes__default[\"default\"].bool,\n    flash: PropTypes__default[\"default\"].bool,\n    mask: PropTypes__default[\"default\"].oneOfType([PropTypes__default[\"default\"].object, PropTypes__default[\"default\"].array, PropTypes__default[\"default\"].string]),\n    maskId: PropTypes__default[\"default\"].string,\n    fixedWidth: PropTypes__default[\"default\"].bool,\n    inverse: PropTypes__default[\"default\"].bool,\n    flip: PropTypes__default[\"default\"].oneOf([true, false, 'horizontal', 'vertical', 'both']),\n    icon: PropTypes__default[\"default\"].oneOfType([PropTypes__default[\"default\"].object, PropTypes__default[\"default\"].array, PropTypes__default[\"default\"].string]),\n    listItem: PropTypes__default[\"default\"].bool,\n    pull: PropTypes__default[\"default\"].oneOf(['right', 'left']),\n    pulse: PropTypes__default[\"default\"].bool,\n    rotation: PropTypes__default[\"default\"].oneOf([0, 90, 180, 270]),\n    shake: PropTypes__default[\"default\"].bool,\n    size: PropTypes__default[\"default\"].oneOf(['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),\n    spin: PropTypes__default[\"default\"].bool,\n    spinPulse: PropTypes__default[\"default\"].bool,\n    spinReverse: PropTypes__default[\"default\"].bool,\n    symbol: PropTypes__default[\"default\"].oneOfType([PropTypes__default[\"default\"].bool, PropTypes__default[\"default\"].string]),\n    title: PropTypes__default[\"default\"].string,\n    titleId: PropTypes__default[\"default\"].string,\n    transform: PropTypes__default[\"default\"].oneOfType([PropTypes__default[\"default\"].string, PropTypes__default[\"default\"].object]),\n    swapOpacity: PropTypes__default[\"default\"].bool\n  };\n  var convertCurry = convert.bind(null, React__default[\"default\"].createElement);\n\n  exports.FontAwesomeIcon = FontAwesomeIcon;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","import { useState, useMemo, ReactNode } from \"react\"\nimport { EnrichedBlockCountryProfileSelector } from \"@ourworldindata/types\"\nimport {\n    FuzzySearch,\n    getRegionByCode,\n    getRegionByNameOrVariantName,\n} from \"@ourworldindata/utils\"\nimport { useLinkedDocument } from \"../utils.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome/index.js\"\nimport {\n    faArrowRight,\n    faMagnifyingGlass,\n    faTimesCircle,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { IS_ARCHIVE } from \"../../../settings/clientSettings.js\"\nimport { PROD_URL } from \"../../SiteConstants.js\"\nimport urlJoin from \"url-join\"\n\ninterface CountryItem {\n    name: string\n    code: string\n    slug: string\n    searchKeys: string[]\n}\n\ninterface FilteredCountryItem {\n    country: CountryItem\n    highlightIndexes?: number[]\n}\n\nconst FALLBACK_DEFAULT_COUNTRY_NAMES = [\n    \"United Kingdom\",\n    \"United States\",\n    \"China\",\n    \"Nigeria\",\n    \"India\",\n    \"Brazil\",\n]\n\nfunction resolveCountriesToItems(entityCodes: string[]): CountryItem[] {\n    return entityCodes\n        .map((code) => {\n            const region = getRegionByCode(code)\n            if (!region) return undefined\n            return {\n                name: region.name,\n                code: region.code,\n                slug: region.slug,\n                searchKeys: [\n                    region.name,\n                    ...(region.shortName ? [region.shortName] : []),\n                    ...(\"variantNames\" in region\n                        ? (region.variantNames ?? [])\n                        : []),\n                ],\n            }\n        })\n        .filter((item): item is CountryItem => !!item)\n        .sort((a, b) => a.name.localeCompare(b.name))\n}\n\nfunction resolveDefaultCountries(\n    defaultCountryNames: string[],\n    allCountries: CountryItem[]\n): CountryItem[] {\n    const allByCode = new Map(allCountries.map((c) => [c.code, c]))\n    return defaultCountryNames\n        .map((name) => {\n            const region = getRegionByNameOrVariantName(name)\n            if (!region) return undefined\n            return allByCode.get(region.code)\n        })\n        .filter((item): item is CountryItem => !!item)\n}\n\nexport function CountryProfileSelector({\n    block,\n    className,\n}: {\n    block: EnrichedBlockCountryProfileSelector\n    className?: string\n}) {\n    const { linkedDocument, errorMessage } = useLinkedDocument(block.url)\n    const [searchTerm, setSearchTerm] = useState(\"\")\n\n    const allCountries = useMemo(() => {\n        if (!linkedDocument?.availableEntityCodes) return []\n        return resolveCountriesToItems(linkedDocument.availableEntityCodes)\n    }, [linkedDocument?.availableEntityCodes])\n\n    const defaultCountries = useMemo(() => {\n        const names = block.defaultCountries.length\n            ? block.defaultCountries\n            : FALLBACK_DEFAULT_COUNTRY_NAMES\n        return resolveDefaultCountries(names, allCountries)\n    }, [block.defaultCountries, allCountries])\n\n    const fuzzyCountrySearch = useMemo(\n        () =>\n            FuzzySearch.withKeyArray(\n                allCountries,\n                (country) => country.searchKeys,\n                (country) => country.code,\n                { limit: 6 }\n            ),\n        [allCountries]\n    )\n\n    const filteredCountries = useMemo<FilteredCountryItem[]>(() => {\n        const term = searchTerm.trim()\n        if (!term) {\n            return defaultCountries.map((country) => ({ country }))\n        }\n\n        return fuzzyCountrySearch.search(term).map((country) => ({\n            country,\n            highlightIndexes: fuzzyCountrySearch.single(term, country.name)\n                ?.indexes,\n        }))\n    }, [searchTerm, defaultCountries, fuzzyCountrySearch])\n\n    if (errorMessage) {\n        return (\n            <div className={className}>\n                <p className=\"country-profile-selector__error\">\n                    {errorMessage}\n                </p>\n            </div>\n        )\n    }\n\n    if (!linkedDocument) return null\n\n    const profileBaseUrl = urlJoin(\n        // We currently don't archive topic pages or profiles, so this component shouldn't appear in an archive\n        // but if it does (in an article, for some reason) we want to make sure the links point to the live site, not the archive.\n        IS_ARCHIVE ? PROD_URL : \"/\",\n        \"profile\",\n        linkedDocument.slug\n    )\n    const title = block.title ?? \"Country Profiles\"\n    const description =\n        block.description ?? \"Browse country-level data and insights.\"\n\n    return (\n        <div className={className}>\n            <div className=\"country-profile-selector grid grid-cols-12 col-start-2 span-cols-12\">\n                <div className=\"country-profile-selector__info span-cols-5 span-sm-cols-12\">\n                    <h2 className=\"country-profile-selector__title h1-semibold\">\n                        {title}\n                    </h2>\n                    <p className=\"country-profile-selector__description body-2-regular\">\n                        {description}\n                    </p>\n                </div>\n                <div className=\"country-profile-selector__panel col-start-8 span-cols-4 col-md-start-7 span-md-cols-6 span-sm-cols-12\">\n                    <div className=\"country-profile-selector__search-wrapper\">\n                        <FontAwesomeIcon\n                            icon={faMagnifyingGlass}\n                            className=\"country-profile-selector__search-icon\"\n                        />\n\n                        <input\n                            type=\"text\"\n                            className=\"country-profile-selector__search\"\n                            placeholder=\"Search for a country...\"\n                            value={searchTerm}\n                            onChange={(e) => setSearchTerm(e.target.value)}\n                        />\n                        {searchTerm && (\n                            <button\n                                className=\"country-profile-selector__clear-button\"\n                                aria-label=\"Clear search\"\n                                onClick={() => setSearchTerm(\"\")}\n                            >\n                                <FontAwesomeIcon icon={faTimesCircle} />\n                            </button>\n                        )}\n                    </div>\n                    <div className=\"country-profile-selector__grid\">\n                        {filteredCountries.length > 0 ? (\n                            filteredCountries.map((country) => (\n                                <CountryProfileLink\n                                    key={country.country.code}\n                                    country={country.country}\n                                    highlightIndexes={country.highlightIndexes}\n                                    profileBaseUrl={profileBaseUrl}\n                                />\n                            ))\n                        ) : searchTerm.trim() ? (\n                            <NoResults searchTerm={searchTerm} />\n                        ) : null}\n                    </div>\n                </div>\n            </div>\n        </div>\n    )\n}\n\n/**\n * Takes e.g. \"United States\" and [0, 7]\n * returns [<strong>U</strong>, \"nited \", <strong>S</strong>, \"tates\"]\n */\nfunction highlightMatch(text: string, highlightIndexes?: number[]): ReactNode {\n    if (!highlightIndexes?.length) return text\n\n    const highlighted = new Set(highlightIndexes)\n    const parts: ReactNode[] = []\n    let start = 0\n\n    while (start < text.length) {\n        const isMatch = highlighted.has(start)\n        let end = start + 1\n        while (end < text.length && highlighted.has(end) === isMatch) {\n            end++\n        }\n\n        const chunk = text.slice(start, end)\n        parts.push(isMatch ? <strong key={start}>{chunk}</strong> : chunk)\n        start = end\n    }\n\n    return parts\n}\n\nfunction CountryProfileLink({\n    country,\n    highlightIndexes,\n    profileBaseUrl,\n}: {\n    country: CountryItem\n    highlightIndexes?: number[]\n    profileBaseUrl: string\n}) {\n    return (\n        <a\n            href={`${profileBaseUrl}/${country.slug}`}\n            className=\"country-profile-selector__country\"\n        >\n            <img\n                className=\"country-profile-selector__flag\"\n                src={`/images/flags/${country.code}.svg`}\n                alt=\"\"\n                loading=\"lazy\"\n            />\n            <span className=\"country-profile-selector__country-name body-3-medium\">\n                {highlightMatch(country.name, highlightIndexes)}\n                <FontAwesomeIcon\n                    className=\"country-profile-selector__arrow\"\n                    icon={faArrowRight}\n                />\n            </span>\n        </a>\n    )\n}\n\nfunction NoResults({ searchTerm }: { searchTerm: string }) {\n    return (\n        <p className=\"country-profile-selector__no-results body-3-medium\">\n            No country profiles found for &ldquo;{searchTerm}&rdquo;\n        </p>\n    )\n}\n","import cx from \"classnames\"\nimport { useContext, useState, useEffect } from \"react\"\n\nimport Callout from \"./Callout.js\"\nimport ChartStory from \"./ChartStory.js\"\nimport Chart from \"./Chart.js\"\nimport Donors from \"./Donors.js\"\nimport PullQuote from \"./PullQuote.js\"\nimport GuidedChart from \"./GuidedChart.js\"\nimport Recirc from \"./Recirc.js\"\nimport SubscribeBanner from \"./SubscribeBanner.js\"\nimport List from \"./List.js\"\nimport NumberedList from \"./NumberedList.js\"\nimport Image, { ImageParentContainer } from \"./Image.js\"\nimport {\n    EXPERIMENT_ARM_SEPARATOR,\n    EXPERIMENT_PREFIX,\n    OwidEnrichedGdocBlock,\n    spansToUnformattedPlainText,\n    TocHeadingWithTitleSupertitle,\n    Url,\n    defaultExperimentState,\n    getExperimentState,\n    ExperimentState,\n} from \"@ourworldindata/utils\"\nimport { CodeSnippet, convertHeadingTextToId } from \"@ourworldindata/components\"\nimport SDGGrid from \"./SDGGrid.js\"\nimport { BlockErrorBoundary, BlockErrorFallback } from \"./BlockErrorBoundary.js\"\nimport { match } from \"ts-pattern\"\nimport SpanElements from \"./SpanElements.js\"\nimport Paragraph from \"./Paragraph.js\"\nimport People from \"./People.js\"\nimport TableOfContents from \"./TableOfContents.js\"\nimport urlSlug from \"url-slug\"\nimport { MissingData } from \"./MissingData.js\"\nimport { AdditionalCharts } from \"./AdditionalCharts.js\"\nimport { ProminentLink } from \"./ProminentLink.js\"\nimport { ExpandableParagraph } from \"../../blocks/ExpandableParagraph.js\"\nimport { TopicPageIntro } from \"./TopicPageIntro.js\"\nimport { KeyInsights } from \"./KeyInsights.js\"\nimport { ResearchAndWriting } from \"./ResearchAndWriting.js\"\nimport { AllCharts } from \"./AllCharts.js\"\nimport Video from \"./Video.js\"\nimport StaticViz from \"./StaticViz.js\"\nimport { Table } from \"./Table.js\"\nimport { ExplorerTiles } from \"./ExplorerTiles.js\"\nimport KeyIndicator from \"./KeyIndicator.js\"\nimport KeyIndicatorCollection from \"./KeyIndicatorCollection.js\"\nimport { PillRow } from \"./PillRow.js\"\nimport { HomepageIntro } from \"./HomepageIntro.js\"\nimport { HomepageSearch } from \"./HomepageSearch.js\"\nimport LatestDataInsightsBlock from \"./LatestDataInsightsBlock.js\"\nimport { Socials } from \"./Socials.js\"\nimport Person from \"./Person.js\"\nimport NarrativeChart from \"./NarrativeChart.js\"\nimport { BespokeComponent } from \"./BespokeComponent.js\"\nimport { Container, getLayout } from \"./layout.js\"\nimport { Expander } from \"./Expander.js\"\nimport { BlockSize, ChartConfigType } from \"@ourworldindata/types\"\nimport { useLinkedChart } from \"../utils.js\"\nimport { ResourcePanel } from \"./ResourcePanel.js\"\nimport { Cta } from \"./Cta.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { FeaturedMetrics } from \"../../FeaturedMetrics.js\"\nimport { FeaturedDataInsights } from \"../../FeaturedDataInsights.js\"\nimport { BlockQueryClientProvider } from \"./BlockQueryClientProvider.js\"\nimport { ExploreDataSection } from \"./ExploreDataSection.js\"\nimport { LTPTableOfContents } from \"./LTPTableOfContents.js\"\nimport { DataCallout } from \"./DataCallout.js\"\nimport { CountryProfileSelector } from \"./CountryProfileSelector.js\"\n\nfunction ArticleBlockInternal({\n    b: block,\n    containerType = \"default\",\n    toc,\n    shouldRenderLinks = true,\n    interactiveImages = true,\n}: {\n    b: OwidEnrichedGdocBlock\n    containerType?: Container\n    toc?: TocHeadingWithTitleSupertitle[]\n    shouldRenderLinks?: boolean\n    interactiveImages?: boolean\n}) {\n    const { tags } = useContext(AttachmentsContext)\n    block.type = block.type.toLowerCase() as any // this comes from the user and may not be all lowercase, enforce it here\n\n    const { linkedChart } = useLinkedChart(\n        block.type === \"chart\" ? block.url : \"\"\n    )\n    // Special handling for mdims in side-by-side blocks to align them with\n    // other charts.\n    const isSideBySide = block.type === \"side-by-side\"\n    const sideBySideBlock = isSideBySide ? block : null\n    const leftBlock = sideBySideBlock?.left?.[0] || null\n    const rightBlock = sideBySideBlock?.right?.[0] || null\n    const leftIsChart = leftBlock?.type === \"chart\"\n    const rightIsChart = rightBlock?.type === \"chart\"\n    // Hooks must be called unconditionally.\n    const { linkedChart: leftLinkedChart } = useLinkedChart(\n        leftIsChart ? leftBlock.url : \"\"\n    )\n    const { linkedChart: rightLinkedChart } = useLinkedChart(\n        rightIsChart ? rightBlock.url : \"\"\n    )\n\n    // note: experimentState should NOT be used to conditionally render content b/c\n    // it will cause a flash of content before js loads.\n    const [experimentState, setExperimentState] = useState<ExperimentState>(\n        defaultExperimentState\n    )\n    useEffect(() => {\n        if (typeof window !== \"undefined\") {\n            const s = getExperimentState()\n            setExperimentState(s)\n        }\n    }, [])\n\n    if (block.parseErrors.some(({ isWarning }) => !isWarning)) {\n        return (\n            <BlockErrorFallback\n                className={getLayout(\"default\", containerType)}\n                error={{\n                    name: `Error in ${block.type}`,\n                    message: block.parseErrors[0].message,\n                }}\n            />\n        )\n    }\n    return match(block)\n        .with({ type: \"aside\" }, ({ caption, position = \"right\" }) => (\n            <aside\n                className={cx(\n                    \"body-3-medium-italic\",\n                    \"article-block__aside\",\n                    getLayout(`aside--${position}`)\n                )}\n            >\n                {caption ? (\n                    <SpanElements\n                        spans={caption}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                ) : null}\n            </aside>\n        ))\n        .with({ type: \"all-charts\" }, (block) => {\n            const layoutClassName = getLayout(\"featured-metrics\", containerType)\n            const topicName = tags[0]?.name\n\n            if (!topicName) {\n                return (\n                    <BlockErrorFallback\n                        className={layoutClassName}\n                        error={{\n                            name: `Error in ${block.type}`,\n                            message:\n                                \"Featured metrics requires at least one tag on the document.\",\n                        }}\n                    />\n                )\n            }\n\n            return (\n                <>\n                    {/*\n                     * The id is swapped between AllCharts and FeaturedMetrics based\n                     * on experiment arm so that the #all-charts sticky nav link always\n                     * scrolls to the visible element. Browsers won't scroll to a\n                     * display:none element, so a static id on AllCharts would break\n                     * navigation in the featured-metrics arm.\n                     */}\n                    <AllCharts\n                        {...block}\n                        id={\n                            experimentState &&\n                            experimentState[\n                                `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                            ]?.isPageInExperiment &&\n                            experimentState[\n                                `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                            ]?.arm !== \"all-charts\"\n                                ? \"\"\n                                : \"all-charts\"\n                        }\n                        className={cx(\n                            getLayout(\"all-charts\", containerType),\n                            `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1${EXPERIMENT_ARM_SEPARATOR}featured-metrics--hide`\n                        )}\n                    />\n                    <>\n                        <BlockQueryClientProvider>\n                            <FeaturedMetrics\n                                id={\n                                    experimentState &&\n                                    experimentState[\n                                        `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                                    ]?.isPageInExperiment &&\n                                    experimentState[\n                                        `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                                    ]?.arm === \"featured-metrics\"\n                                        ? \"all-charts\"\n                                        : \"\"\n                                }\n                                topicName={topicName}\n                                className={cx(\n                                    layoutClassName,\n                                    `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1${EXPERIMENT_ARM_SEPARATOR}featured-metrics--show`\n                                )}\n                            />\n                        </BlockQueryClientProvider>\n                    </>\n                </>\n            )\n        })\n        .with({ type: \"chart\" }, (block) => {\n            const resolvedUrl = linkedChart?.resolvedUrl ?? block.url\n            const { isExplorer, queryParams } = Url.fromURL(resolvedUrl)\n            const areControlsHidden = queryParams.hideControls === \"true\"\n            const size = block.size ?? BlockSize.Wide\n            const layoutSubtype =\n                isExplorer && !areControlsHidden\n                    ? `explorer--${size}`\n                    : `chart--${size}`\n            return (\n                <Chart\n                    className={cx(\n                        \"article-block__chart\",\n                        getLayout(layoutSubtype, containerType),\n                        {\n                            \"hide-sm-only\": block.visibility === \"desktop\",\n                            \"show-sm-only\": block.visibility === \"mobile\",\n                        }\n                    )}\n                    d={block}\n                    fullWidthOnMobile={true}\n                />\n            )\n        })\n        .with({ type: \"narrative-chart\" }, (block) => {\n            const size = block.size ?? BlockSize.Wide\n            return (\n                <NarrativeChart\n                    className={cx(\n                        \"article-block__chart\",\n                        getLayout(`chart--${size}`, containerType)\n                    )}\n                    d={block}\n                    fullWidthOnMobile={true}\n                />\n            )\n        })\n        .with({ type: \"code\" }, (block) => (\n            <CodeSnippet\n                className={getLayout(\"code-snippet\", containerType)}\n                code={block.text.map((text) => text.value.text).join(\"\\n\")}\n            />\n        ))\n        .with({ type: \"donors\" }, (_block) => (\n            <Donors className={getLayout(\"donors\", containerType)} />\n        ))\n        .with({ type: \"callout\" }, (block) => (\n            <Callout\n                className={getLayout(\"callout\", containerType)}\n                block={block}\n            />\n        ))\n        .with({ type: \"chart-story\" }, (block) => (\n            <ChartStory\n                d={block}\n                className={getLayout(\"chart-story\", containerType)}\n            />\n        ))\n        .with({ type: \"image\" }, (block) => (\n            <figure\n                className={cx(\n                    \"article-block__image\",\n                    getLayout(`image--${block.size}`, containerType),\n                    {\n                        \"hide-sm-only\": block.visibility === \"desktop\",\n                        \"show-sm-only\": block.visibility === \"mobile\",\n                    }\n                )}\n            >\n                <Image\n                    filename={block.filename}\n                    smallFilename={block.smallFilename}\n                    alt={block.alt}\n                    hasOutline={block.hasOutline}\n                    containerType={containerType as ImageParentContainer}\n                    preferSmallFilename={block.preferSmallFilename}\n                    shouldLightbox={interactiveImages}\n                />\n                {block.caption ? (\n                    <figcaption\n                        className={getLayout(\"image-caption\", containerType)}\n                    >\n                        <SpanElements\n                            spans={block.caption}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    </figcaption>\n                ) : null}\n            </figure>\n        ))\n        .with({ type: \"video\" }, (block) => (\n            <Video\n                className={cx(getLayout(\"video\", containerType), {\n                    \"hide-sm-only\": block.visibility === \"desktop\",\n                    \"show-sm-only\": block.visibility === \"mobile\",\n                })}\n                url={block.url}\n                shouldLoop={block.shouldLoop}\n                shouldAutoplay={block.shouldAutoplay}\n                caption={block.caption}\n                filename={block.filename}\n            />\n        ))\n        .with({ type: \"static-viz\" }, (block) => (\n            <StaticViz\n                className={cx(\n                    \"article-block__static-viz\",\n                    getLayout(`static-viz--${block.size}`, containerType)\n                )}\n                name={block.name}\n                containerType={containerType as ImageParentContainer}\n                hasOutline={block.hasOutline}\n                caption={block.caption}\n            />\n        ))\n        .with({ type: \"people\" }, (block) => (\n            <People className={getLayout(\"people\", containerType)}>\n                {block.items.map((block, index) => (\n                    <ArticleBlock key={index} b={block} />\n                ))}\n            </People>\n        ))\n        .with({ type: \"people-rows\" }, (block) => (\n            <People\n                className={getLayout(\"people-rows\", containerType)}\n                columns={block.columns}\n            >\n                {block.people.map((block, index) => (\n                    <ArticleBlock key={index} b={block} />\n                ))}\n            </People>\n        ))\n        .with({ type: \"person\" }, (block) => <Person person={block} />)\n        .with({ type: \"pull-quote\" }, (block) => (\n            <PullQuote\n                className={getLayout(\n                    `pull-quote--${block.align}`,\n                    containerType\n                )}\n                d={block}\n            />\n        ))\n        .with({ type: \"guided-chart\" }, (block) => (\n            <GuidedChart\n                className={getLayout(\"guided-chart\", containerType)}\n                containerType={containerType}\n                d={block}\n            />\n        ))\n        .with({ type: \"recirc\" }, (block) => (\n            <Recirc\n                className={getLayout(`recirc--${block.align}`, containerType)}\n                d={block}\n            />\n        ))\n        .with({ type: \"subscribe-banner\" }, (block) => (\n            <SubscribeBanner\n                className={getLayout(\n                    `subscribe-banner--${block.align}`,\n                    containerType\n                )}\n                d={block}\n            />\n        ))\n        .with({ type: \"resource-panel\" }, (block) => (\n            <ResourcePanel\n                {...block}\n                className={getLayout(`resource-panel`, containerType)}\n            />\n        ))\n        .with({ type: \"numbered-list\" }, (block) => (\n            <NumberedList\n                className={getLayout(\"numbered-list\", containerType)}\n                d={block}\n            />\n        ))\n        .with({ type: \"list\" }, (block) => (\n            <List className={getLayout(\"list\", containerType)} d={block} />\n        ))\n        .with({ type: \"text\" }, (block) => {\n            return (\n                <Paragraph\n                    d={block}\n                    className={getLayout(\"text\", containerType)}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            )\n        })\n        .with({ type: \"simple-text\" }, (block) => <>{block.value.text}</>)\n        .with({ type: \"heading\", level: 1 }, (block) => (\n            <h1\n                className={cx(\n                    \"h1-semibold\",\n                    getLayout(\"heading\", containerType)\n                )}\n                id={convertHeadingTextToId(block.text)}\n            >\n                <SpanElements\n                    spans={block.text}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n                {shouldRenderLinks && (\n                    <a\n                        className=\"deep-link\"\n                        href={`#${convertHeadingTextToId(block.text)}`}\n                    />\n                )}\n            </h1>\n        ))\n        .with({ type: \"heading\", level: 2 }, (block) => {\n            const { supertitle, text } = block\n\n            const id = supertitle\n                ? urlSlug(\n                      `${spansToUnformattedPlainText(\n                          supertitle\n                      )}-${spansToUnformattedPlainText(text)}`\n                  )\n                : convertHeadingTextToId(block.text)\n\n            return (\n                <>\n                    {supertitle ? (\n                        <div className={getLayout(\"divider\", containerType)} />\n                    ) : null}\n                    <h2\n                        className={cx(\n                            \"h2-bold\",\n                            getLayout(\"heading\", containerType),\n                            {\n                                \"has-supertitle\": supertitle\n                                    ? spansToUnformattedPlainText(supertitle)\n                                    : \"\",\n                            }\n                        )}\n                        id={id}\n                    >\n                        {supertitle ? (\n                            <div className=\"article-block__heading-supertitle overline-black-caps\">\n                                <SpanElements\n                                    spans={supertitle}\n                                    shouldRenderLinks={shouldRenderLinks}\n                                />\n                            </div>\n                        ) : null}\n                        <SpanElements spans={text} />\n                        {shouldRenderLinks && (\n                            <a className=\"deep-link\" href={`#${id}`} />\n                        )}\n                    </h2>\n                </>\n            )\n        })\n        .with({ type: \"heading\", level: 3 }, (block) => {\n            const { supertitle, text } = block\n            const id = supertitle\n                ? urlSlug(\n                      `${spansToUnformattedPlainText(\n                          supertitle\n                      )}-${spansToUnformattedPlainText(text)}`\n                  )\n                : convertHeadingTextToId(block.text)\n            return (\n                <h3\n                    className={cx(\n                        \"h3-bold\",\n                        getLayout(\"heading\", containerType),\n                        {\n                            \"has-supertitle\": supertitle\n                                ? spansToUnformattedPlainText(supertitle)\n                                : undefined,\n                        }\n                    )}\n                    id={id}\n                >\n                    {supertitle ? (\n                        <div className=\"article-block__heading-supertitle overline-black-caps\">\n                            <SpanElements spans={supertitle} />\n                        </div>\n                    ) : null}\n                    <SpanElements\n                        spans={text}\n                        shouldRenderLinks={shouldRenderLinks}\n                    />\n                    {shouldRenderLinks && (\n                        <a\n                            className=\"deep-link\"\n                            aria-labelledby={id}\n                            href={`#${id}`}\n                        />\n                    )}\n                </h3>\n            )\n        })\n        .with({ type: \"heading\", level: 4 }, (block) => (\n            <h4\n                className={cx(\n                    \"h4-semibold\",\n                    getLayout(\"heading\", containerType)\n                )}\n                id={convertHeadingTextToId(block.text)}\n            >\n                <SpanElements\n                    spans={block.text}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </h4>\n        ))\n        .with({ type: \"heading\", level: 5 }, (block) => (\n            <h5\n                className={cx(\n                    \"overline-black-caps\",\n                    getLayout(\"heading\", containerType)\n                )}\n                id={convertHeadingTextToId(block.text)}\n            >\n                <SpanElements\n                    spans={block.text}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            </h5>\n        ))\n        .with(\n            { type: \"heading\" },\n            // during parsing we take care of level being in a valid range\n            () => null\n        )\n        .with({ type: \"html\" }, (block) => (\n            <div\n                className={getLayout(\"html\", containerType)}\n                dangerouslySetInnerHTML={{ __html: block.value }}\n            />\n        ))\n        .with({ type: \"script\" }, (block) => (\n            <div\n                className={getLayout(\"script\", containerType)}\n                dangerouslySetInnerHTML={{\n                    __html: `<script type=\"module\">\n                    ${block.lines.join(\"\\n\")}\n                    </script>`,\n                }}\n            />\n        ))\n        .with({ type: \"horizontal-rule\" }, () => (\n            <hr className={getLayout(\"horizontal-rule\", containerType)} />\n        ))\n        .with({ type: \"sdg-grid\" }, (block) => (\n            <SDGGrid\n                className={getLayout(\"sdg-grid\", containerType)}\n                d={block}\n            />\n        ))\n        .with({ type: \"sticky-right\" }, (block) => {\n            const firstBlock = block.left[0]\n            let separateHeading = null\n            let left = block.left\n            if (\n                firstBlock?.type === \"heading\" &&\n                block.right[0]?.type !== \"chart-story\"\n            ) {\n                separateHeading = firstBlock\n                left = block.left.slice(1)\n            }\n            return (\n                <div className={getLayout(\"sticky-right\", containerType)}>\n                    {separateHeading && (\n                        <ArticleBlock\n                            b={separateHeading}\n                            containerType=\"sticky-right-left-heading-column\"\n                        />\n                    )}\n                    <div\n                        className={cx(\n                            getLayout(\n                                \"sticky-right-left-column\",\n                                containerType\n                            ),\n                            { \"grid-row-start-2\": separateHeading }\n                        )}\n                    >\n                        {left.map((item, i) => (\n                            <ArticleBlock\n                                key={i}\n                                b={item}\n                                containerType=\"sticky-right-left-column\"\n                            />\n                        ))}\n                    </div>\n                    <div\n                        className={cx(\n                            getLayout(\n                                \"sticky-right-right-column\",\n                                containerType\n                            ),\n                            {\n                                \"grid-row-start-2 grid-md-row-start-auto\":\n                                    separateHeading,\n                            }\n                        )}\n                    >\n                        <div className=\"sticky-column-wrapper grid grid-cols-7 span-cols-7 grid-md-cols-10 span-md-cols-10 grid-sm-cols-12 span-sm-cols-12\">\n                            {block.right.map((item, i) => (\n                                <ArticleBlock\n                                    key={i}\n                                    b={item}\n                                    containerType=\"sticky-right-right-column\"\n                                />\n                            ))}\n                        </div>\n                    </div>\n                </div>\n            )\n        })\n        .with({ type: \"sticky-left\" }, (block) => (\n            <div className={getLayout(\"sticky-left\", containerType)}>\n                <div\n                    className={getLayout(\n                        \"sticky-left-left-column\",\n                        containerType\n                    )}\n                >\n                    <div className=\"sticky-column-wrapper grid grid-cols-7 span-cols-7 grid-md-cols-10 span-md-cols-10 grid-sm-cols-12 span-sm-cols-12\">\n                        {block.left.map((item, i) => (\n                            <ArticleBlock\n                                key={i}\n                                b={item}\n                                containerType=\"sticky-left-left-column\"\n                            />\n                        ))}\n                    </div>\n                </div>\n                <div\n                    className={getLayout(\n                        \"sticky-left-right-column\",\n                        containerType\n                    )}\n                >\n                    {block.right.map((item, i) => (\n                        <ArticleBlock\n                            key={i}\n                            b={item}\n                            containerType=\"sticky-left-right-column\"\n                        />\n                    ))}\n                </div>\n            </div>\n        ))\n        .with({ type: \"side-by-side\" }, (block) => {\n            // Use the chart info detected at the top level\n            const leftIsMdim =\n                leftLinkedChart?.configType === ChartConfigType.MultiDim\n            const rightIsMdim =\n                rightLinkedChart?.configType === ChartConfigType.MultiDim\n\n            // Check if both are charts and one is mdim and the other isn't\n            const shouldApplyCompensation =\n                leftIsChart && rightIsChart && leftIsMdim !== rightIsMdim\n\n            return (\n                <div className={getLayout(\"side-by-side\", containerType)}>\n                    <div\n                        className={cx(\n                            \"grid grid-cols-6 span-cols-6 span-sm-cols-12\",\n                            {\n                                \"mdim-compensation\":\n                                    shouldApplyCompensation && !leftIsMdim,\n                            }\n                        )}\n                    >\n                        {block.left.map((item, i) => (\n                            <ArticleBlock\n                                key={i}\n                                b={item}\n                                containerType=\"side-by-side\"\n                            />\n                        ))}\n                    </div>\n                    <div\n                        className={cx(\n                            \"grid grid-cols-6 span-cols-6 span-sm-cols-12\",\n                            {\n                                \"mdim-compensation\":\n                                    shouldApplyCompensation && !rightIsMdim,\n                            }\n                        )}\n                    >\n                        {block.right.map((item, i) => (\n                            <ArticleBlock\n                                key={i}\n                                b={item}\n                                containerType=\"side-by-side\"\n                            />\n                        ))}\n                    </div>\n                </div>\n            )\n        })\n        .with({ type: \"gray-section\" }, (block) => (\n            <div className={getLayout(\"gray-section\")}>\n                {block.items.map((item, i) => (\n                    <ArticleBlock key={i} b={item} />\n                ))}\n            </div>\n        ))\n        .with({ type: \"explore-data-section\" }, (block) => (\n            <ExploreDataSection\n                title={block.title}\n                align={block.align}\n                className={getLayout(\"explore-data-section\")}\n            >\n                {block.content.map((item, i) => (\n                    <ArticleBlock key={i} b={item} />\n                ))}\n            </ExploreDataSection>\n        ))\n        .with({ type: \"conditional-section\" }, (block) => (\n            <>\n                {block.content.map((item, i) => (\n                    <ArticleBlock\n                        key={i}\n                        b={item}\n                        containerType={containerType}\n                        toc={toc}\n                        shouldRenderLinks={shouldRenderLinks}\n                        interactiveImages={interactiveImages}\n                    />\n                ))}\n            </>\n        ))\n        .with({ type: \"prominent-link\" }, (block) => (\n            <ProminentLink\n                className={getLayout(\"prominent-link\", containerType)}\n                {...block}\n            />\n        ))\n        .with({ type: \"sdg-toc\" }, () => {\n            return toc ? (\n                <TableOfContents\n                    toc={toc}\n                    title=\"List of targets and indicators\"\n                    className={getLayout(\"toc\", containerType)}\n                />\n            ) : null\n        })\n        .with({ type: \"entry-summary\" }, (block) => {\n            return (\n                <TableOfContents\n                    title=\"Summary\"\n                    toc={block.items.map((item) => ({\n                        ...item,\n                        title: item.text,\n                        isSubheading: false,\n                    }))}\n                    className={getLayout(\"toc\", containerType)}\n                />\n            )\n        })\n        .with({ type: \"ltp-toc\" }, (block) => {\n            const layoutClassName = getLayout(\"ltp-toc\", containerType)\n            const tagName = tags[0]?.name\n\n            if (!tagName) {\n                return (\n                    <BlockErrorFallback\n                        className={layoutClassName}\n                        error={{\n                            name: `Error in ${block.type}`,\n                            message:\n                                \"Linear topic TOC requires at least one tag on the document.\",\n                        }}\n                    />\n                )\n            }\n\n            return toc?.length ? (\n                <LTPTableOfContents\n                    title={block.title}\n                    toc={toc}\n                    tagName={tagName}\n                    className={layoutClassName}\n                />\n            ) : null\n        })\n        .with({ type: \"missing-data\" }, () => (\n            <MissingData className={getLayout(\"missing-data\", containerType)} />\n        ))\n        .with({ type: \"additional-charts\" }, (block) => (\n            <AdditionalCharts\n                items={block.items}\n                className={getLayout(\"additional-charts\", containerType)}\n            />\n        ))\n        .with({ type: \"expandable-paragraph\" }, (block) => (\n            <ExpandableParagraph\n                className={getLayout(\"expandable-paragraph\", containerType)}\n            >\n                {block.items.map((item, i) => (\n                    <ArticleBlock key={i} b={item} />\n                ))}\n            </ExpandableParagraph>\n        ))\n        .with({ type: \"expander\" }, (block) => (\n            <Expander\n                className={getLayout(\"expander\", containerType)}\n                {...block}\n            >\n                <div className=\"expander__content\">\n                    {block.content.map((item, i) => (\n                        <ArticleBlock key={i} b={item} />\n                    ))}\n                </div>\n            </Expander>\n        ))\n        .with({ type: \"topic-page-intro\" }, (block) => (\n            <TopicPageIntro\n                {...block}\n                className={getLayout(\"topic-page-intro\", containerType)}\n            />\n        ))\n        .with({ type: \"cookie-notice\" }, () => {\n            return (\n                <div\n                    className={cx(\n                        getLayout(\"cookie-notice\", containerType),\n                        \"wp-block-cookie-preferences\"\n                    )}\n                ></div>\n            )\n        })\n        .with({ type: \"cta\" }, (block) => {\n            return (\n                <Cta\n                    {...block}\n                    className={getLayout(\"cta\", containerType)}\n                    shouldRenderLinks={shouldRenderLinks}\n                />\n            )\n        })\n        .with({ type: \"key-insights\" }, (block) => (\n            <KeyInsights\n                {...block}\n                className={getLayout(\"key-insights\", containerType)}\n            />\n        ))\n        .with({ type: \"research-and-writing\" }, (block) => (\n            <ResearchAndWriting\n                {...block}\n                className={getLayout(\"research-and-writing\", containerType)}\n            />\n        ))\n        .with({ type: \"align\" }, (block) => (\n            <div\n                className={cx(\n                    `align-${block.alignment}`,\n                    getLayout(\"align\", containerType)\n                )}\n            >\n                {block.content.map((b, i) => (\n                    <ArticleBlock key={i} b={b} />\n                ))}\n            </div>\n        ))\n        .with({ type: \"table\" }, (block) => (\n            <Table\n                className={cx(\n                    getLayout(`table--${block.size}`, containerType),\n                    `article-block__table--${block.template}`\n                )}\n                {...block}\n            />\n        ))\n        .with({ type: \"blockquote\" }, (block) => {\n            // If the citation exists and is a URL, it uses the cite attribute\n            // If the citation exists and is not a URL, it uses the footer\n            // Otherwise, we show nothing for cases where the citation is written in the surrounding text\n            const isCitationAUrl = Boolean(\n                block.citation && block.citation.startsWith(\"http\")\n            )\n            const shouldShowCitationInFooter = block.citation && !isCitationAUrl\n            const blockquoteProps = isCitationAUrl\n                ? { cite: block.citation }\n                : {}\n\n            return (\n                <blockquote\n                    className={cx(getLayout(\"blockquote\", containerType))}\n                    {...blockquoteProps}\n                >\n                    {block.text.map((textBlock, i) => (\n                        <Paragraph\n                            className=\"article-block__text\"\n                            d={textBlock}\n                            key={i}\n                            shouldRenderLinks={shouldRenderLinks}\n                        />\n                    ))}\n\n                    {shouldShowCitationInFooter ? (\n                        <footer>\n                            – <cite>{block.citation}</cite>\n                        </footer>\n                    ) : null}\n                </blockquote>\n            )\n        })\n        .with({ type: \"explorer-tiles\" }, (block) => (\n            <ExplorerTiles\n                className={getLayout(\"explorer-tiles\", containerType)}\n                {...block}\n            />\n        ))\n        .with({ type: \"latest-data-insights\" }, () => (\n            <LatestDataInsightsBlock\n                className={getLayout(\"latest-data-insights\", containerType)}\n            />\n        ))\n        .with({ type: \"key-indicator\" }, (block) => (\n            <KeyIndicator className={getLayout(\"key-indicator\")} d={block} />\n        ))\n        .with({ type: \"key-indicator-collection\" }, (block) => (\n            <KeyIndicatorCollection\n                className={getLayout(\"key-indicator-collection\")}\n                d={block}\n            />\n        ))\n        .with({ type: \"pill-row\" }, (block) => {\n            return (\n                <PillRow\n                    {...block}\n                    className={getLayout(\"pill-row\", containerType)}\n                />\n            )\n        })\n        .with({ type: \"homepage-search\" }, (_) => {\n            return (\n                <HomepageSearch\n                    className={getLayout(\"homepage-search\", containerType)}\n                />\n            )\n        })\n        .with({ type: \"homepage-intro\" }, (block) => {\n            return (\n                <HomepageIntro\n                    className={getLayout(\"homepage-intro\")}\n                    {...block}\n                />\n            )\n        })\n        .with({ type: \"featured-metrics\" }, () => {\n            const layoutClassName = getLayout(\"featured-metrics\", containerType)\n            const topicName = tags[0]?.name\n\n            if (!topicName) {\n                return (\n                    <BlockErrorFallback\n                        className={layoutClassName}\n                        error={{\n                            name: `Error in ${block.type}`,\n                            message:\n                                \"Featured metrics requires at least one tag on the document.\",\n                        }}\n                    />\n                )\n            }\n\n            return (\n                <BlockQueryClientProvider>\n                    <FeaturedMetrics\n                        topicName={topicName}\n                        className={layoutClassName}\n                    />\n                </BlockQueryClientProvider>\n            )\n        })\n        .with({ type: \"featured-data-insights\" }, () => {\n            const layoutClassName = getLayout(\n                \"featured-data-insights\",\n                containerType\n            )\n            const topicName = tags[0]?.name\n\n            if (!topicName) {\n                return (\n                    <BlockErrorFallback\n                        className={layoutClassName}\n                        error={{\n                            name: `Error in ${block.type}`,\n                            message:\n                                \"Featured data insights requires at least one tag on the document.\",\n                        }}\n                    />\n                )\n            }\n\n            return (\n                <BlockQueryClientProvider>\n                    <FeaturedDataInsights\n                        topicName={topicName}\n                        className={layoutClassName}\n                    />\n                </BlockQueryClientProvider>\n            )\n        })\n        .with({ type: \"socials\" }, (block) => (\n            <Socials\n                className={getLayout(\"socials\", containerType)}\n                links={block.links}\n            />\n        ))\n        .with({ type: \"data-callout\" }, (block) => (\n            <DataCallout block={block} containerType={containerType} />\n        ))\n        .with({ type: \"country-profile-selector\" }, (block) => (\n            <CountryProfileSelector\n                block={block}\n                className={getLayout(\"country-profile-selector\", containerType)}\n            />\n        ))\n        .with({ type: \"bespoke-component\" }, (block) => (\n            <BespokeComponent\n                className={getLayout(\n                    `bespoke-component--${block.size}`,\n                    containerType\n                )}\n                block={block}\n            />\n        ))\n        .exhaustive()\n}\n\nexport default function ArticleBlock({\n    b: block,\n    containerType = \"default\",\n    toc,\n    shouldRenderLinks = true,\n    interactiveImages = true,\n}: {\n    b: OwidEnrichedGdocBlock\n    containerType?: Container\n    toc?: TocHeadingWithTitleSupertitle[]\n    shouldRenderLinks?: boolean\n    interactiveImages?: boolean\n}) {\n    return (\n        <BlockErrorBoundary className={getLayout(\"default\", containerType)}>\n            <ArticleBlockInternal\n                b={block}\n                containerType={containerType}\n                toc={toc}\n                shouldRenderLinks={shouldRenderLinks}\n                interactiveImages={interactiveImages}\n            />\n        </BlockErrorBoundary>\n    )\n}\n","import {\n    EnrichedBlockSubscribeBanner,\n    OwidEnrichedGdocBlock,\n} from \"@ourworldindata/types\"\n\nexport const injectAutomaticSubscribeBanner = (\n    blocks: OwidEnrichedGdocBlock[]\n): OwidEnrichedGdocBlock[] => {\n    const lastHeadingIndex = blocks.findLastIndex(\n        (block) => block.type === \"heading\" && block.level === 1\n    )\n\n    if (lastHeadingIndex === -1) return blocks\n\n    const SubscribeBannerBlock: EnrichedBlockSubscribeBanner = {\n        type: \"subscribe-banner\",\n        align: \"center\",\n        parseErrors: [],\n    }\n\n    return [\n        ...blocks.slice(0, lastHeadingIndex),\n        SubscribeBannerBlock,\n        ...blocks.slice(lastHeadingIndex),\n    ]\n}\n","import ArticleBlock from \"./ArticleBlock.js\"\nimport { injectAutomaticSubscribeBanner } from \"./gdocComponentUtils.js\"\nimport { Container } from \"./layout.js\"\nimport {\n    OwidEnrichedGdocBlock,\n    TocHeadingWithTitleSupertitle,\n} from \"@ourworldindata/utils\"\n\n/**\n * Renders a list of article blocks.\n *\n * @param blocks\n * @param containerType\n * @param toc\n * @param shouldRenderLinks - Won't render <a> elements when false. Useful to avoid\n * invalid nested links.\n * @constructor\n */\nexport const ArticleBlocks = ({\n    blocks,\n    containerType = \"default\",\n    toc,\n    shouldRenderLinks = true,\n    interactiveImages = true,\n    automaticSubscribeBanner = false,\n}: {\n    blocks: OwidEnrichedGdocBlock[]\n    containerType?: Container\n    toc?: TocHeadingWithTitleSupertitle[]\n    shouldRenderLinks?: boolean\n    interactiveImages?: boolean\n    automaticSubscribeBanner?: boolean\n}) => {\n    const blocksToRender = automaticSubscribeBanner\n        ? injectAutomaticSubscribeBanner(blocks)\n        : blocks\n\n    return (\n        <>\n            {blocksToRender.map((block: OwidEnrichedGdocBlock, i: number) => {\n                return (\n                    <ArticleBlock\n                        key={i}\n                        b={block}\n                        containerType={containerType}\n                        toc={toc}\n                        shouldRenderLinks={shouldRenderLinks}\n                        interactiveImages={interactiveImages}\n                    />\n                )\n            })}\n        </>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport dayjs from \"dayjs\"\n\nimport {\n    DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID,\n    IndicatorSources,\n    IndicatorProcessing,\n    CodeSnippet,\n    DataCitation,\n} from \"@ourworldindata/components\"\nimport {\n    FaqEntryData,\n    OwidOrigin,\n    PrimaryTopic,\n    OwidSource,\n    IndicatorTitleWithFragments,\n    OwidProcessingLevel,\n    ArchiveContext,\n} from \"@ourworldindata/types\"\nimport {\n    prepareSourcesForDisplay,\n    getCitationShort,\n    getCitationLong,\n    excludeUndefined,\n    getPhraseForArchivalDate,\n} from \"@ourworldindata/utils\"\nimport { ArticleBlocks } from \"./gdocs/components/ArticleBlocks.js\"\n\nexport default function MetadataSection({\n    attributionShort,\n    attributions,\n    canonicalUrl,\n    descriptionProcessing,\n    faqEntries,\n    origins,\n    owidProcessingLevel,\n    primaryTopic,\n    source,\n    title,\n    titleVariant,\n    archiveContext,\n}: {\n    attributionShort?: string\n    attributions: string[]\n    canonicalUrl: string\n    descriptionProcessing?: string\n    faqEntries?: FaqEntryData\n    origins: OwidOrigin[]\n    owidProcessingLevel?: OwidProcessingLevel\n    primaryTopic?: PrimaryTopic\n    source?: OwidSource\n    title: IndicatorTitleWithFragments\n    titleVariant?: string\n    archiveContext?: ArchiveContext\n}) {\n    const sourcesForDisplay = prepareSourcesForDisplay({ origins, source })\n    const citationUrl = archiveContext?.archiveUrl ?? canonicalUrl\n    const citationShort = getCitationShort(\n        origins,\n        attributions,\n        owidProcessingLevel\n    )\n    const citationLong = getCitationLong(\n        title,\n        origins,\n        source,\n        attributions,\n        attributionShort,\n        titleVariant,\n        owidProcessingLevel,\n        citationUrl,\n        archiveContext?.archivalDate\n    )\n    const currentYear = dayjs().year()\n    const producers = _.uniq(origins.map((o) => `${o.producer}`))\n    const adaptedFrom =\n        producers.length > 0 ? producers.join(\", \") : source?.name\n\n    const maybeAddPeriod = (s: string) =>\n        s.endsWith(\"?\") || s.endsWith(\".\") ? s : `${s}.`\n\n    // For the citation of the data page add a period it doesn't have that or a question mark\n    const primaryTopicCitation = maybeAddPeriod(primaryTopic?.citation ?? \"\")\n    const archivalString = getPhraseForArchivalDate(\n        archiveContext?.archivalDate\n    )\n    const citationDatapage = excludeUndefined([\n        primaryTopic\n            ? `“Data Page: ${title.title}”, part of the following publication: ${primaryTopicCitation}`\n            : `“Data Page: ${title.title}”. Our World in Data (${currentYear}).`,\n        adaptedFrom ? `Data adapted from ${adaptedFrom}.` : undefined,\n        `Retrieved from ${citationUrl} [online resource]${\n            archivalString ? ` ${archivalString}` : \"\"\n        }`,\n    ]).join(\" \")\n    return (\n        <div className=\"MetadataSection span-cols-14 grid grid-cols-12-full-width\">\n            <div className=\"col-start-2 span-cols-12\">\n                {!!faqEntries?.faqs.length && (\n                    <div className=\"section-wrapper section-wrapper__faqs grid\">\n                        <h2\n                            className=\"faqs__title span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\"\n                            id=\"faqs\"\n                        >\n                            Frequently Asked Questions\n                        </h2>\n                        <div className=\"faqs__items grid grid-cols-10 grid-lg-cols-9 grid-md-cols-12 span-cols-10 span-lg-cols-9 span-md-cols-12 span-sm-cols-12\">\n                            <ArticleBlocks\n                                blocks={faqEntries.faqs}\n                                containerType=\"datapage\"\n                            />\n                        </div>\n                    </div>\n                )}\n                <div className=\"section-wrapper grid\">\n                    <h2\n                        className=\"data-sources-processing__title span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\"\n                        id={DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID}\n                    >\n                        Sources and processing\n                    </h2>\n                    <div className=\"data-sources grid span-cols-12\">\n                        <h3 className=\"data-sources__heading span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                            This data is based on the following sources\n                        </h3>\n                        <div className=\"col-start-4 span-cols-6 col-lg-start-5 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                            <IndicatorSources sources={sourcesForDisplay} />\n                        </div>\n                    </div>\n                    <div className=\"data-processing grid span-cols-12\">\n                        <h3 className=\"data-processing__heading span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                            How we process data at Our World in Data\n                        </h3>\n                        <div className=\"col-start-4 span-cols-6 col-lg-start-5 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                            <IndicatorProcessing\n                                descriptionProcessing={descriptionProcessing}\n                            />\n                        </div>\n                    </div>\n                </div>\n                <div className=\"section-wrapper grid\">\n                    <h2\n                        className=\"reuse__title span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\"\n                        id=\"reuse-this-work\"\n                    >\n                        Reuse this work\n                    </h2>\n                    <div className=\"col-start-4 span-cols-6 col-lg-start-5 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                        <ul className=\"reuse__content\">\n                            <li className=\"reuse__list-item\">\n                                All data produced by third-party providers and\n                                made available by Our World in Data are subject\n                                to the license terms from the original\n                                providers. Our work would not be possible\n                                without the data providers we rely on, so we ask\n                                you to always cite them appropriately (see\n                                below). This is crucial to allow data providers\n                                to continue doing their work, enhancing,\n                                maintaining and updating valuable data.\n                            </li>\n                            <li className=\"reuse__list-item\">\n                                All data, visualizations, and code produced by\n                                Our World in Data are completely open access\n                                under the{\" \"}\n                                <a\n                                    href=\"https://creativecommons.org/licenses/by/4.0/\"\n                                    className=\"reuse__link\"\n                                >\n                                    Creative Commons BY license\n                                </a>\n                                . You have the permission to use, distribute,\n                                and reproduce these in any medium, provided the\n                                source and authors are credited.\n                            </li>\n                        </ul>\n                    </div>\n\n                    {(citationShort || citationLong || citationDatapage) && (\n                        <div className=\"citations grid span-cols-12\">\n                            <h3 className=\"citations__heading span-cols-2 span-lg-cols-3 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                                Citations\n                            </h3>\n                            <div className=\"col-start-4 span-cols-6 col-lg-start-5 span-lg-cols-7 col-md-start-2 span-md-cols-10 col-sm-start-1 span-sm-cols-12\">\n                                {citationDatapage && (\n                                    <div className=\"citations-section\">\n                                        <h4 className=\"citation__how-to-header\">\n                                            How to cite this page\n                                        </h4>\n                                        <p className=\"citation__paragraph\">\n                                            To cite this page overall, including\n                                            any descriptions, FAQs or\n                                            explanations of the data authored by\n                                            Our World in Data, please use the\n                                            following citation:\n                                        </p>\n                                        <CodeSnippet\n                                            code={citationDatapage}\n                                            theme=\"light\"\n                                            useMarkdown={true}\n                                        />\n                                    </div>\n                                )}\n                                <div className=\"citations-section\">\n                                    <h4 className=\"citation__how-to-header citation__how-to-header--data\">\n                                        How to cite this data\n                                    </h4>\n                                    {(citationShort || citationLong) && (\n                                        <DataCitation\n                                            citationLong={citationLong}\n                                            citationShort={citationShort}\n                                        />\n                                    )}\n                                </div>\n                            </div>\n                        </div>\n                    )}\n                </div>\n            </div>\n        </div>\n    )\n}\n","export default function TopicTags({\n    className,\n    topicTagsLinks,\n    tagToSlugMap,\n}: {\n    className?: string\n    topicTagsLinks?: string[]\n    tagToSlugMap: Record<string, string>\n}) {\n    // TODO (DB): mark topic pages\n    const tags = topicTagsLinks\n        ?.map((name) => ({ name, slug: tagToSlugMap[name] }))\n        .filter((tag) => !!tag.slug)\n    if (!tags?.length) return null\n\n    return (\n        <div className={className}>\n            <div className=\"topic-tags__label\">\n                See all data and research on:\n            </div>\n            <div className=\"topic-tags\">\n                {tags.map(({ name, slug }) => (\n                    <a key={slug} className=\"topic-tag\" href={`/${slug}`}>\n                        {name}\n                    </a>\n                ))}\n            </div>\n        </div>\n    )\n}\n","import {\n    DataPageDataV2,\n    DataPageRelatedResearch,\n    getAttributionFragmentsFromVariable,\n    getLastUpdatedFromVariable,\n    getNextUpdateFromVariable,\n    GrapherInterface,\n    intersection,\n    omitUndefinedValues,\n    OwidVariableWithSource,\n} from \"@ourworldindata/utils\"\n\nexport const DEFAULT_PAGE_DESCRIPTION =\n    \"An interactive visualization from Our World in Data.\"\n\nexport function processRelatedResearch(\n    candidates: DataPageRelatedResearch[],\n    topicTags: string[]\n) {\n    let relatedResearch\n    if (candidates.length > 3 && topicTags.length > 0) {\n        relatedResearch = candidates.filter((research) => {\n            const shared = intersection(research.tags, topicTags)\n            return shared.length > 0\n        })\n    } else relatedResearch = [...candidates]\n\n    return relatedResearch\n}\nexport function getDatapageDataV2(\n    variableMetadata: OwidVariableWithSource,\n    partialGrapherConfig: GrapherInterface\n): DataPageDataV2 {\n    const lastUpdated = getLastUpdatedFromVariable(variableMetadata) ?? \"\"\n    const nextUpdate = getNextUpdateFromVariable(variableMetadata)\n    return {\n        status: \"draft\",\n        title: variableMetadata.presentation?.titlePublic\n            ? omitUndefinedValues({\n                  title: variableMetadata.presentation?.titlePublic,\n                  attributionShort:\n                      variableMetadata.presentation?.attributionShort,\n                  titleVariant: variableMetadata.presentation?.titleVariant,\n              })\n            : {\n                  title:\n                      partialGrapherConfig.title ??\n                      variableMetadata.display?.name ??\n                      variableMetadata.name ??\n                      \"\",\n              },\n        description: variableMetadata.description,\n        descriptionShort: variableMetadata.descriptionShort,\n        descriptionFromProducer: variableMetadata.descriptionFromProducer,\n        attributionShort: variableMetadata.presentation?.attributionShort,\n        titleVariant: variableMetadata.presentation?.titleVariant,\n        topicTagsLinks: variableMetadata.presentation?.topicTagsLinks ?? [],\n        attributions: getAttributionFragmentsFromVariable(variableMetadata),\n        descriptionKey: variableMetadata.descriptionKey ?? [],\n        descriptionProcessing: variableMetadata.descriptionProcessing,\n        owidProcessingLevel: variableMetadata.processingLevel,\n        dateRange: variableMetadata.timespan ?? \"\",\n        lastUpdated: lastUpdated,\n        nextUpdate: nextUpdate,\n        allCharts: [],\n        relatedResearch: [],\n        source: variableMetadata.source,\n        origins: variableMetadata.origins ?? [],\n        chartConfig: partialGrapherConfig as Record<string, unknown>,\n        unit: variableMetadata.display?.unit ?? variableMetadata.unit,\n        unitConversionFactor: variableMetadata.display?.conversionFactor,\n    }\n}\n","import { useMemo, useEffect, useState } from \"react\"\nimport { GrapherProgrammaticInterface } from \"@ourworldindata/grapher\"\nimport {\n    REUSE_THIS_WORK_SECTION_ID,\n    DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID,\n    DATAPAGE_ABOUT_THIS_DATA_SECTION_ID,\n} from \"@ourworldindata/components\"\nimport {\n    EXPERIMENT_ARM_SEPARATOR,\n    EXPERIMENT_PREFIX,\n    DataPageV2ContentFields,\n    GrapherInterface,\n    joinTitleFragments,\n    ImageMetadata,\n    excludeNull,\n    defaultExperimentState,\n    getExperimentState,\n    ExperimentState,\n} from \"@ourworldindata/utils\"\nimport { RelatedCharts } from \"./blocks/RelatedCharts.js\"\nimport { FeaturedMetrics } from \"./FeaturedMetrics.js\"\nimport StickyNav from \"./blocks/StickyNav.js\"\nimport {\n    ADMIN_BASE_URL,\n    BAKED_GRAPHER_URL,\n} from \"../settings/clientSettings.js\"\nimport AboutThisData from \"./AboutThisData.js\"\nimport DataPageResearchAndWriting from \"./DataPageResearchAndWriting.js\"\nimport MetadataSection from \"./MetadataSection.js\"\nimport TopicTags from \"./TopicTags.js\"\nimport { processRelatedResearch } from \"./dataPage.js\"\nimport { GrapherWithFallback } from \"./GrapherWithFallback.js\"\nimport { AttachmentsContext } from \"./gdocs/AttachmentsContext.js\"\nimport { DocumentContext } from \"./gdocs/DocumentContext.js\"\nimport { BlockQueryClientProvider } from \"./gdocs/components/BlockQueryClientProvider.js\"\n\ndeclare global {\n    interface Window {\n        _OWID_DATAPAGEV2_PROPS: DataPageV2ContentFields\n        _OWID_GRAPHER_CONFIG: GrapherInterface\n    }\n}\nexport const OWID_DATAPAGE_CONTENT_ROOT_ID = \"owid-datapageJson-root\"\n\nexport const DataPageV2Content = ({\n    datapageData,\n    grapherConfig,\n    isPreviewing = false,\n    faqEntries,\n    canonicalUrl = \"{URL}\", // when we bake pages to their proper url this will be set correctly but on preview pages we leave this undefined\n    tagToSlugMap,\n    imageMetadata,\n    archiveContext,\n}: DataPageV2ContentFields & {\n    grapherConfig: GrapherInterface\n    imageMetadata: Record<string, ImageMetadata>\n}) => {\n    const titleFragments = joinTitleFragments(\n        datapageData.attributionShort,\n        datapageData.titleVariant\n    )\n\n    // Initialize the grapher for client-side rendering\n    const mergedGrapherConfig: GrapherProgrammaticInterface = useMemo(\n        () => ({\n            ...grapherConfig,\n            bindUrlToWindow: typeof window !== \"undefined\",\n            adminBaseUrl: ADMIN_BASE_URL,\n            bakedGrapherURL: BAKED_GRAPHER_URL,\n            enableKeyboardShortcuts: typeof window !== \"undefined\",\n            archiveContext,\n        }),\n        [grapherConfig, archiveContext]\n    )\n    const stickyNavLinks = excludeNull([\n        {\n            text: \"Explore the Data\",\n            target: \"#explore-the-data\",\n        },\n        datapageData.relatedResearch?.length\n            ? {\n                  text: \"Research & Writing\",\n                  target: \"#research-and-writing\",\n              }\n            : null,\n        datapageData.allCharts?.length\n            ? { text: \"All Charts\", target: \"#all-charts\" }\n            : null,\n        faqEntries?.faqs?.length ? { text: \"FAQs\", target: \"#faqs\" } : null,\n        {\n            text: \"Sources & Processing\",\n            target: \"#\" + DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID,\n        },\n        { text: \"Reuse This Work\", target: \"#\" + REUSE_THIS_WORK_SECTION_ID },\n    ])\n\n    const relatedResearch = processRelatedResearch(\n        datapageData.relatedResearch,\n        datapageData.topicTagsLinks ?? []\n    )\n\n    // note: experimentState should NOT be used to conditionally render content b/c\n    // it will cause a flash of content before js loads.\n    const [experimentState, setExperimentState] = useState<ExperimentState>(\n        defaultExperimentState\n    )\n    useEffect(() => {\n        if (typeof window !== \"undefined\") {\n            const s = getExperimentState()\n            setExperimentState(s)\n        }\n    }, [])\n\n    return (\n        <AttachmentsContext.Provider\n            value={{\n                linkedDocuments: {},\n                imageMetadata,\n                linkedCharts: {},\n                linkedIndicators: {},\n                relatedCharts: [],\n                tags: [],\n            }}\n        >\n            <DocumentContext.Provider value={{ isPreviewing }}>\n                <div className=\"DataPageContent__grapher-for-embed\">\n                    <GrapherWithFallback\n                        config={mergedGrapherConfig}\n                        useProvidedConfigOnly\n                        slug={grapherConfig.slug}\n                        queryStr={\n                            typeof window !== \"undefined\"\n                                ? window?.location?.search\n                                : undefined\n                        }\n                        enablePopulatingUrlParams\n                        isEmbeddedInAnOwidPage={false}\n                        isEmbeddedInADataPage={false}\n                        isPreviewing={isPreviewing}\n                    />\n                </div>\n                <div className=\"DataPageContent grid grid-cols-12-full-width\">\n                    <div className=\"bg-blue-10 span-cols-14\">\n                        <div className=\"header__wrapper grid grid-cols-12-full-width\">\n                            <div className=\"header__left col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                                <div className=\"header__supertitle\">Data</div>\n                                <h1 className=\"header__title\">\n                                    {datapageData.title.title}\n                                </h1>\n                                <div className=\"header__source\">\n                                    {titleFragments}\n                                </div>\n                            </div>\n                            <TopicTags\n                                className=\"header__right col-start-10 span-cols-4 col-sm-start-2 span-sm-cols-12\"\n                                topicTagsLinks={datapageData.topicTagsLinks}\n                                tagToSlugMap={tagToSlugMap}\n                            />\n                        </div>\n                    </div>\n                    <nav className=\"sticky-nav sticky-nav--dark span-cols-14 grid grid-cols-12-full-width\">\n                        <StickyNav\n                            className=\"span-cols-12 col-start-2\"\n                            links={stickyNavLinks}\n                        />\n                    </nav>\n                    <div className=\"span-cols-14 grid grid-cols-12-full-width full-width--border\">\n                        <div className=\"chart-key-info col-start-2 span-cols-12\">\n                            {grapherConfig.slug && (\n                                <GrapherWithFallback\n                                    slug={grapherConfig.slug}\n                                    config={mergedGrapherConfig}\n                                    useProvidedConfigOnly\n                                    id=\"explore-the-data\"\n                                    queryStr={\n                                        typeof window !== \"undefined\"\n                                            ? window?.location?.search\n                                            : undefined\n                                    }\n                                    enablePopulatingUrlParams\n                                    isEmbeddedInADataPage={true}\n                                    isEmbeddedInAnOwidPage={false}\n                                    isPreviewing={isPreviewing}\n                                />\n                            )}\n\n                            <AboutThisData\n                                datapageData={datapageData}\n                                hasFaq={!!faqEntries?.faqs.length}\n                                id={DATAPAGE_ABOUT_THIS_DATA_SECTION_ID}\n                            />\n                        </div>\n                    </div>\n                    <div className=\"col-start-2 span-cols-12\">\n                        {relatedResearch && relatedResearch.length > 0 && (\n                            <DataPageResearchAndWriting\n                                relatedResearch={relatedResearch}\n                            />\n                        )}\n                        {/*\n                         * The id is swapped between the all-charts section and the\n                         * featured-metrics section based on experiment arm so that the\n                         * #all-charts sticky nav link always scrolls to the visible\n                         * element. Browsers won't scroll to a display:none element, so\n                         * a static id on the all-charts section would break navigation\n                         * in the featured-metrics arm.\n                         */}\n                        {datapageData.allCharts &&\n                        datapageData.allCharts.length > 0 ? (\n                            <div\n                                className={`section-wrapper section-wrapper__related-charts ${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1${EXPERIMENT_ARM_SEPARATOR}featured-metrics--hide`}\n                            >\n                                <h2\n                                    className=\"related-charts__title\"\n                                    id={\n                                        experimentState &&\n                                        experimentState[\n                                            `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                                        ]?.isPageInExperiment &&\n                                        experimentState[\n                                            `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                                        ]?.arm !== \"all-charts\"\n                                            ? \"\"\n                                            : \"all-charts\"\n                                    }\n                                >\n                                    Explore charts that include this data\n                                </h2>\n                                <div>\n                                    <RelatedCharts\n                                        charts={datapageData.allCharts}\n                                    />\n                                </div>\n                            </div>\n                        ) : null}\n                        {datapageData.primaryTopic && (\n                            <div\n                                className={`section-wrapper ${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1${EXPERIMENT_ARM_SEPARATOR}featured-metrics--show`}\n                                id={\n                                    experimentState &&\n                                    experimentState[\n                                        `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                                    ]?.isPageInExperiment &&\n                                    experimentState[\n                                        `${EXPERIMENT_PREFIX}-all-charts-vs-featured-v1`\n                                    ]?.arm === \"featured-metrics\"\n                                        ? \"all-charts\"\n                                        : \"\"\n                                }\n                            >\n                                <BlockQueryClientProvider>\n                                    <FeaturedMetrics\n                                        topicName={\n                                            datapageData.primaryTopic.topicTag\n                                        }\n                                        isDataPage={true}\n                                    />\n                                </BlockQueryClientProvider>\n                            </div>\n                        )}\n                    </div>\n                    <MetadataSection\n                        attributionShort={datapageData.attributionShort}\n                        attributions={datapageData.attributions}\n                        canonicalUrl={canonicalUrl}\n                        descriptionProcessing={\n                            datapageData.descriptionProcessing\n                        }\n                        faqEntries={faqEntries}\n                        origins={datapageData.origins}\n                        owidProcessingLevel={datapageData.owidProcessingLevel}\n                        primaryTopic={datapageData.primaryTopic}\n                        source={datapageData.source}\n                        title={datapageData.title}\n                        titleVariant={datapageData.titleVariant}\n                        archiveContext={archiveContext}\n                    />\n                </div>\n            </DocumentContext.Provider>\n        </AttachmentsContext.Provider>\n    )\n}\n","import { Tippy } from \"@ourworldindata/utils\"\n\nexport const Footnote = ({\n    index,\n    htmlContent,\n    triggerTarget,\n}: {\n    index: number\n    htmlContent?: string\n    triggerTarget?: Element\n}) => {\n    const onEvent = (instance: any, event: Event) => {\n        if (event.type === \"click\") event.preventDefault()\n    }\n\n    return (\n        <Tippy\n            appendTo={() => document.body}\n            content={\n                htmlContent && (\n                    <div>\n                        <div\n                            dangerouslySetInnerHTML={{\n                                __html: htmlContent,\n                            }}\n                        />\n                    </div>\n                )\n            }\n            interactive\n            interactiveDebounce={50}\n            placement=\"bottom\"\n            theme=\"owid-footnote\"\n            trigger=\"mouseenter focus click\"\n            triggerTarget={triggerTarget}\n            onTrigger={onEvent}\n            onUntrigger={onEvent}\n        >\n            <sup>{index}</sup>\n        </Tippy>\n    )\n}\n","import { ENDNOTES_ID, RefDictionary } from \"@ourworldindata/utils\"\nimport ArticleBlock from \"./ArticleBlock.js\"\nimport cx from \"classnames\"\n\nexport default function Footnotes({\n    definitions,\n}: {\n    definitions: RefDictionary\n}) {\n    if (!definitions) {\n        return null\n    }\n\n    const definitionsArray = Object.values(definitions)\n    return (\n        <section className=\"footnote-container grid grid-cols-12-full-width col-start-1 col-end-limit\">\n            <div className=\"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                <h3 id={ENDNOTES_ID}>Endnotes</h3>\n                <ol\n                    className={cx(\"footnote-list\", {\n                        \"footnote-list__single-column\":\n                            definitionsArray.length === 1,\n                    })}\n                >\n                    {definitionsArray\n                        .sort((a, b) => a.index - b.index)\n                        .map((ref) => {\n                            return (\n                                <li\n                                    id={`note-${ref.index + 1}`}\n                                    key={ref.index}\n                                    className=\"footnote-list__footnote\"\n                                >\n                                    {ref.content.map((block, i) => (\n                                        <ArticleBlock key={i} b={block} />\n                                    ))}\n                                </li>\n                            )\n                        })}\n                </ol>\n            </div>\n        </section>\n    )\n}\n","import { Fragment } from \"react\"\nimport { BreadcrumbItem } from \"@ourworldindata/utils\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faAngleRight } from \"@fortawesome/free-solid-svg-icons\"\nimport { BAKED_BASE_URL, IS_ARCHIVE } from \"../../settings/clientSettings.js\"\nimport { PROD_URL } from \"../SiteConstants.js\"\n\nconst BASE_URL = IS_ARCHIVE ? PROD_URL : BAKED_BASE_URL\n\nconst BreadcrumbSeparator = () => (\n    <span className=\"separator\">\n        <FontAwesomeIcon icon={faAngleRight} />\n    </span>\n)\n\nexport const Breadcrumbs = ({\n    items,\n    className,\n}: {\n    items: BreadcrumbItem[]\n    className: string\n}) => (\n    <div className={className}>\n        <a href={`${BASE_URL}/`}>Home</a>\n        <BreadcrumbSeparator />\n        {items.map((item, idx) => {\n            const isLast = idx === items.length - 1\n\n            const breadcrumb = item.href ? (\n                <a href={item.href} data-track-note=\"breadcrumb\">\n                    {item.label}\n                </a>\n            ) : (\n                <span>{item.label}</span>\n            )\n\n            return (\n                <Fragment key={item.label}>\n                    {breadcrumb}\n                    {!isLast && <BreadcrumbSeparator />}\n                </Fragment>\n            )\n        })}\n    </div>\n)\n","import { getCanonicalUrl } from \"@ourworldindata/components\"\nimport { OwidGdocType } from \"@ourworldindata/types\"\nimport { useLinkedAuthor } from \"../utils.js\"\nimport Image from \"./Image.js\"\nimport { IS_ARCHIVE } from \"../../../settings/clientSettings.js\"\nimport { PROD_URL } from \"../../SiteConstants.js\"\n\nconst BASE_URL = IS_ARCHIVE ? PROD_URL : \"\"\n\nexport default function LinkedAuthor({\n    className,\n    name,\n    includeImage,\n}: {\n    className?: string\n    name: string\n    includeImage?: boolean\n}) {\n    const author = useLinkedAuthor(name)\n    const image =\n        includeImage && author.featuredImage ? (\n            <Image\n                className=\"linked-author-image\"\n                filename={author.featuredImage}\n                alt={author.name}\n                containerType=\"author-byline\"\n                shouldLightbox={false}\n            />\n        ) : undefined\n\n    const path = getCanonicalUrl(BASE_URL, {\n        // If there's no author slug, this will link to /team/\n        slug: author.slug || \"\",\n        content: { type: OwidGdocType.Author },\n    })\n    return (\n        <span>\n            <a className={className} href={path}>\n                {image}\n                {author.name}\n            </a>\n            {author.role && ` (${author.role})`}\n        </span>\n    )\n}\n","import { Fragment } from \"react\"\nimport LinkedAuthor from \"./LinkedAuthor.js\"\n\nexport const Byline = ({ names }: { names: string[] }) => {\n    return (\n        <>\n            {\"By \"}\n            {names.map((name, index) => {\n                const isLast = index === names.length - 1\n                const isSecondToLast = index === names.length - 2\n                return (\n                    <Fragment key={name}>\n                        <LinkedAuthor name={name} />\n                        {/* Use Oxford comma when there are more than two authors. */}\n                        {!isLast && names.length > 2 && \", \"}\n                        {isSecondToLast && names.length > 1 && \" and \"}\n                    </Fragment>\n                )\n            })}\n        </>\n    )\n}\n","export const OxfordAndGcdlLogos = () => (\n    <>\n        <a href=\"https://www.oxfordmartin.ox.ac.uk/global-development\">\n            <img\n                src={\"/oms-logo.svg\"}\n                alt=\"Oxford Martin School logo\"\n                loading=\"lazy\"\n                width={96}\n                height={103}\n            />\n        </a>\n        <a href=\"https://www.ox.ac.uk/\">\n            <img\n                src={\"/oxford-logo.svg\"}\n                alt=\"University of Oxford logo\"\n                loading=\"lazy\"\n                width={96}\n                height={103}\n            />\n        </a>\n        <a href=\"https://global-change-data-lab.org/\">\n            <img\n                src={\"/gcdl-logo.svg\"}\n                alt=\"Global Change Data Lab logo\"\n                loading=\"lazy\"\n                width={80}\n                height={103}\n            />\n        </a>\n    </>\n)\n\nexport const SiteLogos = ({ homeUrl = \"/\" }: { homeUrl?: string }) => {\n    return (\n        <div className=\"site-logos\">\n            <div className=\"logo-owid\">\n                <a href={homeUrl}>\n                    Our World\n                    <br /> in Data\n                </a>\n            </div>\n            <div className=\"logos-wrapper\">\n                <OxfordAndGcdlLogos />\n            </div>\n        </div>\n    )\n}\n","import { ArchiveVersions } from \"@ourworldindata/types\"\nimport { QueryClient, useQuery } from \"@tanstack/react-query\"\n\n// The convention is to use a single query client shared via\n// QueryClientProvider, but currently we don't render the two components where\n// we fetch versions in the same React tree (they are hydrated separately), so\n// we share the query client this way.\nconst queryClient = new QueryClient()\n\nexport interface UseVersionsQueryOptions {\n    enabled?: boolean\n}\n\nexport async function fetchVersions(url: string): Promise<ArchiveVersions> {\n    const response = await fetch(url)\n    if (!response.ok) {\n        throw new Error(`Failed to fetch versions file: ${response.statusText}`)\n    }\n    return response.json()\n}\n\nexport function useVersionsQuery(\n    url?: string,\n    options?: UseVersionsQueryOptions\n) {\n    return useQuery(\n        {\n            queryKey: [\"archive-versions\"],\n            queryFn: () => {\n                if (!url) {\n                    throw new Error(\"URL is required\")\n                }\n                return fetchVersions(url)\n            },\n            enabled: Boolean(url) && (options?.enabled ?? true),\n            staleTime: \"static\", // Fetch only on page load.\n        },\n        queryClient\n    )\n}\n","import { useMemo } from \"react\"\nimport * as R from \"remeda\"\nimport { ArchiveVersions } from \"@ourworldindata/types\"\nimport { useVersionsQuery, UseVersionsQueryOptions } from \"./queries.js\"\n\nexport function useArchiveVersions(\n    versionsFileUrl?: string,\n    options?: UseVersionsQueryOptions\n): Omit<ReturnType<typeof useVersionsQuery>, \"data\"> & {\n    data: ArchiveVersions[\"versions\"]\n} {\n    const result = useVersionsQuery(versionsFileUrl, options)\n\n    const versions = useMemo(() => {\n        const versionsObj = result.data\n        if (\n            !R.isPlainObject(versionsObj) ||\n            !(\"versions\" in versionsObj) ||\n            !Array.isArray(versionsObj.versions)\n        )\n            return []\n\n        return versionsObj.versions\n    }, [result.data])\n\n    return useMemo(\n        () => ({\n            ...result,\n            data: versions,\n        }),\n        [result, versions]\n    )\n}\n","import { Button } from \"@ourworldindata/components\"\nimport { SiteLogos } from \"../SiteLogos.js\"\nimport {\n    faArrowLeft,\n    faArrowRight,\n    faInfoCircle,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport {\n    dayjs,\n    formatAsArchivalDate,\n    parseArchivalDate,\n    Tippy,\n} from \"@ourworldindata/utils\"\nimport {\n    ArchivalDateString,\n    type ArchiveSiteNavigationInfo,\n} from \"@ourworldindata/types\"\nimport { PROD_URL } from \"../SiteConstants.js\"\nimport { useMemo, useState } from \"react\"\nimport * as R from \"remeda\"\nimport { useWindowQueryParams } from \"../hooks.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { VersionsDrawer } from \"./VersionsDrawer.js\"\nimport { useArchiveVersions } from \"./versions.js\"\n\nexport const DATE_FORMAT = \"MMMM D, YYYY\"\nexport const TIME_FORMAT = \"HH:mm\"\n\nexport interface ArchiveNavigationProps extends Omit<\n    ArchiveSiteNavigationInfo,\n    \"contentType\"\n> {\n    archivalDate: ArchivalDateString\n}\n\ntype ArchiveWritingNavigationProps = Omit<\n    ArchiveNavigationProps,\n    \"previousVersion\" | \"nextVersion\"\n>\n\nfunction ArchiveText({ tooltipContent }: { tooltipContent: string }) {\n    return (\n        <div className=\"archive-navigation-bar__archive_text\">\n            Archive\n            <Tippy\n                content={tooltipContent}\n                theme=\"owid-footnote\"\n                placement=\"right\"\n                appendTo={() => document.body}\n                trigger=\"mouseenter focus click\"\n                interactive\n                interactiveDebounce={50}\n            >\n                <span className=\"archive-navigation-bar__archive_text--tooltip\">\n                    <FontAwesomeIcon icon={faInfoCircle} />\n                </span>\n            </Tippy>\n        </div>\n    )\n}\n\nfunction ArchiveDate({ dayjsDate }: { dayjsDate: dayjs.Dayjs }) {\n    return (\n        <div className=\"archive-navigation-bar__date\">\n            <span className=\"archive-navigation-bar__date-value\">\n                {dayjsDate.format(DATE_FORMAT)}\n            </span>\n            &nbsp;\n            <span className=\"archive-navigation-bar__time-value\">\n                at {dayjsDate.format(TIME_FORMAT)} UTC\n            </span>\n        </div>\n    )\n}\n\nexport function ArchiveDataNavigation(props: ArchiveNavigationProps) {\n    return (\n        <div className=\"archive-site-navigation\">\n            <ArchiveHeaderLogoBar />\n            <ArchiveDataNavigationBar {...props} />\n        </div>\n    )\n}\n\nfunction ArchiveHeaderLogoBar() {\n    return (\n        <div className=\"archive-header-logo-bar\">\n            <div className=\"wrapper\">\n                <SiteLogos homeUrl={PROD_URL} />\n            </div>\n        </div>\n    )\n}\n\nfunction ArchiveDataNavigationBar({\n    liveUrl,\n    previousVersion: propsPreviousVersion,\n    nextVersion: propsNextVersion,\n    archivalDate,\n    versionsFileUrl,\n}: ArchiveNavigationProps) {\n    const hasButtons = !!(liveUrl || propsPreviousVersion || propsNextVersion)\n    const dayjsDate = parseArchivalDate(archivalDate)\n    const pageArchivalDate = formatAsArchivalDate(dayjsDate)\n    const { data: versions } = useArchiveVersions(versionsFileUrl)\n    const queryStr = useWindowQueryParams()\n\n    const { previousVersion, nextVersion } = useMemo(() => {\n        if (versions.length === 0) {\n            return {\n                previousVersion: propsPreviousVersion,\n                nextVersion: propsNextVersion,\n            }\n        }\n        // Find the index of the current version in the sorted list\n        const currentVersionIdx = R.sortedIndexWith(\n            versions,\n            (item) => item.archivalDate < pageArchivalDate\n        )\n        if (versions[currentVersionIdx]?.archivalDate === pageArchivalDate) {\n            return {\n                previousVersion: versions[currentVersionIdx - 1],\n                nextVersion: versions[currentVersionIdx + 1],\n            }\n        } else {\n            // This case is rare but could in theory happen: The current version could not be found in the array.\n            // In this case, we have versionsArr[currentVersionIdx] > pageArchivalDate,\n            // so we need a slightly different logic to find the previous and next versions.\n            return {\n                previousVersion: versions[currentVersionIdx - 1],\n                nextVersion: versions[currentVersionIdx],\n            }\n        }\n    }, [pageArchivalDate, propsPreviousVersion, propsNextVersion, versions])\n\n    return (\n        <nav className=\"archive-navigation-bar grid grid-cols-12-full-width\">\n            <div className=\"archive-navigation-bar__wrapper col-start-2 span-cols-12\">\n                <ArchiveText tooltipContent=\"We update our data regularly. To aid transparency and reproducibility, we archive versions of the data when an update is made. This allows users to cite a specific version of the data that does not change.\" />\n                <ArchiveDate dayjsDate={dayjsDate} />\n                {hasButtons && (\n                    <div className=\"archive-data-navigation-bar__buttons\">\n                        <Button\n                            className=\"archive-data-navigation-bar__button archive-data-navigation-bar__button-left\"\n                            style={{\n                                visibility: previousVersion\n                                    ? \"visible\"\n                                    : \"hidden\",\n                            }}\n                            href={\n                                previousVersion\n                                    ? previousVersion.url + queryStr\n                                    : undefined\n                            }\n                            theme=\"outline-white\"\n                            icon={faArrowLeft}\n                            iconPosition=\"left\"\n                            text=\"Go to the previous version\"\n                            dataTrackNote=\"archive-header-go-to-previous\"\n                        />\n                        {liveUrl && (\n                            <Button\n                                className=\"archive-data-navigation-bar__button\"\n                                href={liveUrl + queryStr}\n                                theme=\"solid-dark-blue\"\n                                icon={null}\n                                text=\"Go to the live version\"\n                                dataTrackNote=\"archive-header-go-to-live\"\n                            />\n                        )}\n                        <Button\n                            className=\"archive-data-navigation-bar__button archive-data-navigation-bar__button-right\"\n                            style={{\n                                visibility: nextVersion ? \"visible\" : \"hidden\",\n                            }}\n                            href={\n                                nextVersion\n                                    ? nextVersion.url + queryStr\n                                    : undefined\n                            }\n                            theme=\"outline-white\"\n                            icon={faArrowRight}\n                            iconPosition=\"right\"\n                            text=\"Go to the next version\"\n                            dataTrackNote=\"archive-header-go-to-next\"\n                        />\n                    </div>\n                )}\n            </div>\n        </nav>\n    )\n}\n\nexport function ArchiveWritingNavigation(props: ArchiveWritingNavigationProps) {\n    return (\n        <div className=\"archive-site-navigation\">\n            <ArchiveHeaderLogoBar />\n            <ArchiveWritingNavigationBar {...props} />\n        </div>\n    )\n}\n\nfunction ArchiveWritingNavigationBar({\n    versionsFileUrl,\n    liveUrl,\n    archivalDate,\n}: ArchiveWritingNavigationProps) {\n    const hasButtons = Boolean(versionsFileUrl || liveUrl)\n    const dayjsDate = parseArchivalDate(archivalDate)\n    const pageArchivalDate = formatAsArchivalDate(dayjsDate)\n    const [isDrawerOpen, setIsDrawerOpen] = useState(false)\n    const [hasRequestedVersions, setHasRequestedVersions] = useState(false)\n    const { data: versions, status } = useArchiveVersions(versionsFileUrl, {\n        enabled: hasRequestedVersions,\n    })\n    const queryStr = useWindowQueryParams()\n    const liveVersionHref = liveUrl ? liveUrl + queryStr : undefined\n\n    function handleDrawerOpenChange(isOpen: boolean) {\n        setIsDrawerOpen(isOpen)\n        if (isOpen) setHasRequestedVersions(true)\n    }\n\n    return (\n        <>\n            <nav className=\"archive-navigation-bar grid grid-cols-12-full-width\">\n                <div className=\"archive-navigation-bar__wrapper col-start-2 span-cols-12\">\n                    <ArchiveText tooltipContent=\"We update our data and writing regularly. To aid transparency and reproducibility, we archive articles when either their content or related data changes. This allows you to cite a specific version of an article that remains the same across time.\" />\n                    <ArchiveDate dayjsDate={dayjsDate} />\n                    {hasButtons && (\n                        <div className=\"archive-writing-navigation-bar__buttons\">\n                            {versionsFileUrl && (\n                                <Button\n                                    theme=\"outline-white\"\n                                    icon={null}\n                                    text=\"Browse all versions\"\n                                    dataTrackNote=\"archive-header-browse-versions\"\n                                    onClick={() => handleDrawerOpenChange(true)}\n                                />\n                            )}\n                            {liveVersionHref && (\n                                <Button\n                                    href={liveVersionHref}\n                                    theme=\"solid-dark-blue\"\n                                    icon={null}\n                                    text=\"Go to the live version\"\n                                    dataTrackNote=\"archive-header-go-to-live\"\n                                />\n                            )}\n                        </div>\n                    )}\n                </div>\n            </nav>\n            {/* NOTE: We should render the versions drawer only once per page,\n            but since the header and the gdoc body are hydrated separately, they\n            don't have a common parent where we could share the drawer state and\n            render it only once. Data fetching is deduplicated because they\n            share the query client. */}\n            <VersionsDrawer\n                isOpen={isDrawerOpen}\n                onOpenChange={handleDrawerOpenChange}\n                versions={versions}\n                status={status}\n                queryString={queryStr}\n                liveUrl={liveVersionHref}\n                currentArchivalDate={pageArchivalDate}\n            />\n        </>\n    )\n}\n","import cx from \"classnames\"\nimport { ModalOverlay, Modal, Dialog } from \"react-aria-components\"\nimport type { QueryStatus } from \"@tanstack/react-query\"\nimport { CloseButton, LoadingIndicator } from \"@ourworldindata/components\"\nimport { ArchivalDateString, ArchiveVersions } from \"@ourworldindata/types\"\nimport { parseArchivalDate } from \"@ourworldindata/utils\"\nimport { ARCHIVE_BASE_URL, IS_ARCHIVE } from \"../../settings/clientSettings.js\"\nimport { DATE_FORMAT, TIME_FORMAT } from \"./ArchiveNavigation.js\"\n\nconst BASE_URL = IS_ARCHIVE ? \"\" : ARCHIVE_BASE_URL\n\nexport type ArchiveVersionEntry = ArchiveVersions[\"versions\"][number]\n\nfunction formatVersionDateTime(archivalDate: ArchivalDateString) {\n    const versionDate = parseArchivalDate(archivalDate)\n    return `${versionDate.format(DATE_FORMAT)} at ${versionDate.format(TIME_FORMAT)} UTC`\n}\n\nfunction getCurrentVersionEntry(\n    archivalDate?: ArchivalDateString,\n    archiveUrl?: string\n): ArchiveVersionEntry | undefined {\n    if (!archivalDate || typeof window === \"undefined\") return undefined\n    const url = archiveUrl\n        ? new URL(archiveUrl).pathname\n        : window.location.pathname\n    if (!url) return undefined\n    const slug = url.split(\"/\").filter(Boolean).pop()\n    if (!slug) return undefined\n    return { archivalDate, slug, url }\n}\n\nfunction VersionItem({\n    variant,\n    href,\n    title,\n    description,\n    isSelected,\n    isLive,\n}: {\n    variant: \"small\" | \"large\"\n    href: string\n    title: string\n    description?: string\n    isSelected?: boolean\n    isLive?: boolean\n}) {\n    return (\n        <li\n            className={cx(\"versions-drawer-timeline__item\", {\n                \"versions-drawer-timeline__item--small\": variant === \"small\",\n                \"versions-drawer-timeline__item--large\": variant === \"large\",\n                \"versions-drawer-timeline__item--selected\": isSelected,\n            })}\n        >\n            <div className=\"versions-drawer-timeline__dot\" aria-hidden />\n            <a\n                className=\"versions-drawer-timeline__link\"\n                href={href}\n                aria-current={isSelected ? \"page\" : undefined}\n                data-track-note=\"archive-timeline-version-link\"\n            >\n                <div\n                    className={\n                        // We need separate classes instead of default +\n                        // override because the font mixins don't define the\n                        // same properties.\n                        isLive\n                            ? \"versions-drawer-timeline__title--live\"\n                            : \"versions-drawer-timeline__title--archived\"\n                    }\n                >\n                    {title}\n                </div>\n                {description && (\n                    <div className=\"versions-drawer-timeline__description\">\n                        {description}\n                    </div>\n                )}\n            </a>\n        </li>\n    )\n}\n\nfunction VersionsTimeline({\n    versions,\n    queryString,\n    isLive,\n    isError,\n    liveUrl,\n    currentArchivalDate,\n}: {\n    versions: ArchiveVersionEntry[]\n    queryString: string\n    isLive?: boolean\n    isError?: boolean\n    liveUrl?: string\n    currentArchivalDate?: ArchivalDateString\n}) {\n    return (\n        <ol className=\"versions-drawer-timeline\" aria-label=\"Archived versions\">\n            {liveUrl && (\n                <VersionItem\n                    variant=\"large\"\n                    href={liveUrl}\n                    title=\"Live version\"\n                    isLive\n                    isSelected={isLive}\n                />\n            )}\n            {versions.toReversed().map((version, index) => {\n                const formattedDisplay = formatVersionDateTime(\n                    version.archivalDate\n                )\n                const isFirstVersion = index === versions.length - 1\n                const isSelected =\n                    !isLive && version.archivalDate === currentArchivalDate\n                return (\n                    <VersionItem\n                        key={version.archivalDate}\n                        variant={isFirstVersion ? \"large\" : \"small\"}\n                        href={`${BASE_URL}${version.url}${queryString}`}\n                        title={formattedDisplay}\n                        isSelected={isSelected}\n                        description={\n                            isFirstVersion && !isError\n                                ? \"First available archived version of this article\"\n                                : undefined\n                        }\n                    />\n                )\n            })}\n        </ol>\n    )\n}\n\nexport function VersionsDrawer({\n    isOpen,\n    onOpenChange,\n    versions,\n    status,\n    queryString,\n    isLive,\n    liveUrl,\n    currentArchivalDate,\n    archiveUrl,\n}: {\n    isOpen: boolean\n    onOpenChange: (isOpen: boolean) => void\n    versions: ArchiveVersionEntry[]\n    status: QueryStatus\n    queryString: string\n    isLive?: boolean\n    liveUrl?: string\n    currentArchivalDate?: ArchivalDateString\n    archiveUrl?: string\n}) {\n    const currentVersionEntry = getCurrentVersionEntry(\n        currentArchivalDate,\n        archiveUrl\n    )\n    const versionsForTimeline =\n        status === \"error\" && currentVersionEntry\n            ? [currentVersionEntry]\n            : versions\n    const showTimeline = versionsForTimeline.length > 0\n    let content\n    if (status === \"pending\") {\n        content = <LoadingIndicator />\n    } else if (status === \"error\") {\n        content = (\n            <>\n                {showTimeline ? (\n                    <>\n                        <VersionsTimeline\n                            versions={versionsForTimeline}\n                            queryString={queryString}\n                            isLive={isLive}\n                            isError={status === \"error\"}\n                            liveUrl={liveUrl}\n                            currentArchivalDate={currentArchivalDate}\n                        />\n                        <div\n                            className=\"versions-drawer__status versions-drawer__status--error\"\n                            role=\"alert\"\n                        >\n                            Unable to load more versions.\n                        </div>\n                    </>\n                ) : (\n                    <div className=\"versions-drawer__status\" role=\"status\">\n                        No archived versions available.\n                    </div>\n                )}\n            </>\n        )\n    } else if (!showTimeline) {\n        content = (\n            <div className=\"versions-drawer__status\" role=\"status\">\n                No archived versions available.\n            </div>\n        )\n    } else {\n        content = (\n            <VersionsTimeline\n                versions={versionsForTimeline}\n                queryString={queryString}\n                isLive={isLive}\n                liveUrl={liveUrl}\n                currentArchivalDate={currentArchivalDate}\n            />\n        )\n    }\n    return (\n        <ModalOverlay\n            className=\"versions-drawer-overlay\"\n            isOpen={isOpen}\n            onOpenChange={onOpenChange}\n            isDismissable\n        >\n            <Modal className=\"versions-drawer-modal\">\n                <Dialog\n                    aria-label=\"Version history\"\n                    className=\"versions-drawer-dialog\"\n                >\n                    {({ close }) => (\n                        <div className=\"versions-drawer-dialog__container\">\n                            <div className=\"versions-drawer-dialog__header\">\n                                <h2 className=\"versions-drawer-dialog__title\">\n                                    Version history\n                                </h2>\n                                <CloseButton\n                                    className=\"versions-drawer-dialog__close-button\"\n                                    onClick={() => close()}\n                                />\n                            </div>\n                            <div className=\"versions-drawer-dialog__content\">\n                                {content}\n                            </div>\n                        </div>\n                    )}\n                </Dialog>\n            </Modal>\n        </ModalOverlay>\n    )\n}\n","import cx from \"classnames\"\nimport { useState } from \"react\"\nimport {\n    BreadcrumbItem,\n    CITATION_ID,\n    LICENSE_ID,\n    OwidGdocPostContent,\n    OwidGdocType,\n    formatDate,\n} from \"@ourworldindata/utils\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faBook, faClockRotateLeft } from \"@fortawesome/free-solid-svg-icons\"\nimport { faCreativeCommons } from \"@fortawesome/free-brands-svg-icons\"\nimport Image from \"./Image.js\"\nimport { Breadcrumbs } from \"../../Breadcrumb/Breadcrumb.js\"\nimport { breadcrumbColorForCoverColor } from \"../utils.js\"\nimport { Byline } from \"./Byline.js\"\nimport { VersionsDrawer } from \"../../archive/VersionsDrawer.js\"\nimport { useArchiveVersions } from \"../../archive/versions.js\"\nimport { useWindowQueryParams } from \"../../hooks.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\n\nfunction OwidArticleHeader({\n    content,\n    publishedAt,\n    breadcrumbs,\n    isDeprecated,\n}: {\n    content: OwidGdocPostContent\n    publishedAt: Date | null\n    breadcrumbs?: BreadcrumbItem[]\n    isDeprecated?: boolean\n}) {\n    const coverStyle = content[\"cover-color\"]\n        ? { backgroundColor: `var(--${content[\"cover-color\"]})` }\n        : undefined\n\n    const breadcrumbColor = breadcrumbColorForCoverColor(content[\"cover-color\"])\n    const { archiveContext } = useDocumentContext()\n    const isOnArchivePage = archiveContext?.type === \"archive-page\"\n    const versionsFileUrl =\n        archiveContext?.versionsFileUrl ??\n        (isOnArchivePage\n            ? archiveContext.archiveNavigation.versionsFileUrl\n            : undefined)\n    const [isDrawerOpen, setIsDrawerOpen] = useState(false)\n    const [hasRequestedVersions, setHasRequestedVersions] = useState(false)\n    const { data: versions, status } = useArchiveVersions(versionsFileUrl, {\n        enabled: hasRequestedVersions,\n    })\n    const queryStr = useWindowQueryParams()\n    let liveUrl: string | undefined\n    if (isOnArchivePage) {\n        liveUrl = archiveContext?.archiveNavigation.liveUrl + queryStr\n    } else {\n        liveUrl =\n            typeof window !== \"undefined\" ? window.location.href : undefined\n    }\n\n    function handleDrawerOpenChange(isOpen: boolean) {\n        setIsDrawerOpen(isOpen)\n        if (isOpen) setHasRequestedVersions(true)\n    }\n\n    return (\n        <>\n            <div\n                className=\"centered-article-header__banner\"\n                style={coverStyle}\n            ></div>\n            {content[\"cover-image\"] ? (\n                <div className=\"centered-article-header__cover-image span-cols-14\">\n                    <Image\n                        filename={content[\"cover-image\"]}\n                        containerType=\"full-width\"\n                        shouldLightbox={false}\n                    />\n                </div>\n            ) : null}\n            {!!breadcrumbs?.length && (\n                <div className=\"centered-article-header__breadcrumbs-container col-start-4 span-cols-8 col-md-start-2 span-md-cols-12\">\n                    <Breadcrumbs\n                        items={breadcrumbs}\n                        className={`centered-article-header__breadcrumbs breadcrumbs-${breadcrumbColor}`}\n                    />\n                </div>\n            )}\n            <header\n                className={cx(\n                    \"centered-article-header align-center grid\",\n                    \"grid-cols-8 span-cols-8 col-start-4\",\n                    \"grid-md-cols-6 span-md-cols-12 col-md-start-2\"\n                )}\n            >\n                <div className=\"centered-article-header__title-container col-start-2 span-cols-6 span-md-cols-6 col-md-start-1\">\n                    {content.supertitle ? (\n                        <h3 className=\"centered-article-header__supertitle span-cols-8\">\n                            {content.supertitle}\n                        </h3>\n                    ) : null}\n                    <h1 className=\"centered-article-header__title\">\n                        {content.title}\n                    </h1>\n                </div>\n                {content.subtitle ? (\n                    <h2 className=\"centered-article-header__subtitle col-start-2 span-cols-6 span-md-cols-6 col-md-start-1\">\n                        {content.subtitle}\n                    </h2>\n                ) : null}\n                <div className=\"centered-article-header__meta-container col-start-2 span-cols-6 span-md-cols-6 col-md-start-1 grid grid-cols-2 \">\n                    <div\n                        className={cx(\n                            \"centered-article-header__meta-container-left\",\n                            isDeprecated\n                                ? \"span-cols-2\"\n                                : \"span-cols-1 span-sm-cols-2\"\n                        )}\n                    >\n                        {content.authors.length > 0 && (\n                            <div>\n                                <Byline names={content.authors} />\n                            </div>\n                        )}\n                        <div suppressHydrationWarning={true}>\n                            {content.dateline ||\n                                (publishedAt && formatDate(publishedAt))}\n                        </div>\n                        {versionsFileUrl && (\n                            <div>\n                                <button\n                                    className=\"centered-article-header__browse-versions-button\"\n                                    onClick={() => handleDrawerOpenChange(true)}\n                                    type=\"button\"\n                                    data-track-note=\"gdoc-header-browse-versions\"\n                                >\n                                    <FontAwesomeIcon icon={faClockRotateLeft} />\n                                    Browse past versions\n                                </button>\n                            </div>\n                        )}\n                    </div>\n                    {!isDeprecated && (\n                        <div className=\"centered-article-header__links span-cols-1 span-sm-cols-2\">\n                            {!content[\"hide-citation\"] && (\n                                <a\n                                    href=\"#article-citation\"\n                                    className=\"display-block\"\n                                >\n                                    <FontAwesomeIcon icon={faBook} />\n                                    Cite this article\n                                </a>\n                            )}\n\n                            <a\n                                href=\"#article-licence\"\n                                className=\"display-block\"\n                            >\n                                <FontAwesomeIcon icon={faCreativeCommons} />\n                                Reuse our work freely\n                            </a>\n                        </div>\n                    )}\n                </div>\n            </header>\n            {/* NOTE: We should render the versions drawer only once per page,\n            but since the header and the gdoc body are hydrated separately, they\n            don't have a common parent where we could share the drawer state and\n            render it only once. Data fetching is deduplicated because they\n            share the query client. */}\n            <VersionsDrawer\n                isOpen={isDrawerOpen}\n                onOpenChange={handleDrawerOpenChange}\n                versions={versions}\n                status={status}\n                queryString={queryStr}\n                isLive={!isOnArchivePage}\n                liveUrl={liveUrl}\n                currentArchivalDate={archiveContext?.archivalDate}\n                archiveUrl={archiveContext?.archiveUrl}\n            />\n        </>\n    )\n}\n\nfunction OwidTopicPageHeader({ content }: { content: OwidGdocPostContent }) {\n    return (\n        <header className=\"topic-page-header grid span-cols-14 grid-cols-12-full-width\">\n            <h1 className=\"display-2-semibold col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                {content.title}\n            </h1>\n            <p className=\"topic-page-header__subtitle body-1-regular col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                {content.subtitle}\n            </p>\n            {content.authors.length > 0 && (\n                <p className=\"topic-page-header__byline col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                    <Byline names={content.authors} />\n                </p>\n            )}\n            <div className=\"topic-page-header__cta-buttons col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                <a href={`#${CITATION_ID}`}>\n                    <FontAwesomeIcon icon={faBook} />\n                    Cite this work\n                </a>\n                <a href={`#${LICENSE_ID}`}>\n                    <FontAwesomeIcon icon={faCreativeCommons} />\n                    Reuse this work\n                </a>\n            </div>\n        </header>\n    )\n}\n\nfunction OwidLinearTopicPageHeader({\n    content,\n}: {\n    content: OwidGdocPostContent\n}) {\n    return (\n        <header className=\"topic-page-header grid span-cols-14 grid-cols-12-full-width\">\n            <h1 className=\"display-2-semibold col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                {content.title}\n            </h1>\n            <p className=\"topic-page-header__subtitle body-1-regular col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                {content.subtitle}\n            </p>\n            {content.authors.length > 0 && (\n                <p className=\"topic-page-header__byline col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                    <Byline names={content.authors} />\n                </p>\n            )}\n            <p className=\"topic-page-header__dateline body-3-medium-italic col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                {content.dateline}\n            </p>\n        </header>\n    )\n}\n\nexport function OwidGdocHeader(props: {\n    content: OwidGdocPostContent\n    publishedAt: Date | null\n    breadcrumbs?: BreadcrumbItem[]\n    isDeprecated?: boolean\n}) {\n    if (props.content.type === OwidGdocType.Article)\n        return <OwidArticleHeader {...props} />\n    if (props.content.type === OwidGdocType.TopicPage)\n        return <OwidTopicPageHeader {...props} />\n    if (props.content.type === OwidGdocType.LinearTopicPage)\n        return <OwidLinearTopicPageHeader {...props} />\n    // Defaulting to ArticleHeader, but will require the value to be set for all docs going forward\n    return <OwidArticleHeader {...props} />\n}\n","import { useState, useEffect, useRef } from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faBars, faTimes } from \"@fortawesome/free-solid-svg-icons\"\nimport { useTriggerWhenClickOutside } from \"./hooks.js\"\nimport { TocHeading } from \"@ourworldindata/utils\"\nimport classNames from \"classnames\"\n\nexport const TOC_WRAPPER_CLASSNAME = \"toc-wrapper\"\n\nexport interface TableOfContentsData {\n    headings: TocHeading[]\n    pageTitle: string\n    hideSubheadings?: boolean\n    headingLevels?: {\n        primary: number\n        secondary: number\n    }\n}\n\nconst isRecordTopViewport = (record: IntersectionObserverEntry) => {\n    return (\n        record.rootBounds &&\n        record.boundingClientRect.top < record.rootBounds.height / 2\n    )\n}\n\nconst getPreviousHeading = (\n    nextHeadingRecord: IntersectionObserverEntry | undefined,\n    previousHeadings: Array<{ slug: string; previous: string | null }>\n) => {\n    return previousHeadings.find(\n        (heading) => heading.slug === nextHeadingRecord?.target.id\n    )?.previous\n}\n\nexport const TableOfContents = ({\n    headings,\n    pageTitle,\n    hideSubheadings,\n    // Original WP articles used a hierarchy of h2 and h3 headings\n    // New Gdoc articles use a hierarchy of h1 and h2 headings\n    headingLevels = {\n        primary: 2,\n        secondary: 3,\n    },\n}: TableOfContentsData) => {\n    const [isOpen, setIsOpen] = useState(false)\n    const [activeHeading, setActiveHeading] = useState(\"\")\n    const { primary, secondary } = headingLevels\n    const tocRef = useRef<HTMLElement>(null)\n\n    const toggleIsOpen = () => {\n        setIsOpen(!isOpen)\n    }\n    // The Gdocs sidebar can't rely on the same CSS logic that old-style entries use, so we need to\n    // explicitly trigger these toggles based on screen width\n    const toggleIsOpenOnMobile = () => {\n        if (window.innerWidth < 1536) {\n            toggleIsOpen()\n        }\n    }\n\n    useTriggerWhenClickOutside(tocRef, isOpen, () => setIsOpen(false))\n\n    useEffect(() => {\n        if (\"IntersectionObserver\" in window) {\n            const previousHeadings = headings.map((heading, i) => ({\n                slug: heading.slug,\n                previous: i > 0 ? headings[i - 1].slug : null,\n            }))\n\n            let currentHeadingRecord: IntersectionObserverEntry | undefined\n            let init = true\n\n            const observer = new IntersectionObserver(\n                (records) => {\n                    let nextHeadingRecord: IntersectionObserverEntry | undefined\n\n                    // Target headings going down\n                    currentHeadingRecord = records.find(\n                        (record) =>\n                            // filter out records no longer intersecting (triggering on exit)\n                            record.isIntersecting &&\n                            // filter out records fully in the page (upcoming section)\n                            record.intersectionRatio !== 1 &&\n                            // filter out intersections happening at the bottom of the viewport\n                            isRecordTopViewport(record)\n                    )\n\n                    if (currentHeadingRecord) {\n                        setActiveHeading(currentHeadingRecord.target.id)\n                    } else {\n                        // Target headings going up\n                        nextHeadingRecord = records.find(\n                            (record) =>\n                                isRecordTopViewport(record) &&\n                                record.intersectionRatio === 1\n                        )\n                        if (nextHeadingRecord) {\n                            setActiveHeading(\n                                getPreviousHeading(\n                                    nextHeadingRecord,\n                                    previousHeadings\n                                ) || \"\"\n                            )\n                        } else if (init) {\n                            currentHeadingRecord = records.findLast(\n                                (record) => record.boundingClientRect.top < 0\n                            )\n                            setActiveHeading(\n                                currentHeadingRecord?.target.id || \"\"\n                            )\n                        }\n                    }\n                    init = false\n                },\n                {\n                    rootMargin: \"-10px\", // 10px offset to trigger intersection when landing exactly at the border when clicking an anchor\n                    threshold: new Array(11).fill(0).map((v, i) => i / 10),\n                }\n            )\n\n            let contentHeadings: NodeListOf<Element>\n            // In Gdocs articles, these sections are ID'd via unique elements\n            const appendixDivs =\n                \", h3#article-endnotes, section#article-citation, section#article-licence\"\n            if (hideSubheadings) {\n                contentHeadings = document.querySelectorAll(\n                    `h${secondary} ${appendixDivs}`\n                )\n            } else {\n                contentHeadings = document.querySelectorAll(\n                    `h${primary}, h${secondary} ${appendixDivs}`\n                )\n            }\n            contentHeadings.forEach((contentHeading) => {\n                observer.observe(contentHeading)\n            })\n\n            return () => observer.disconnect()\n        }\n        return\n    }, [headings, hideSubheadings, primary, secondary])\n\n    return (\n        <div className={TOC_WRAPPER_CLASSNAME}>\n            <div\n                className={classNames({\n                    \"entry-sidebar__overlay\": isOpen,\n                })}\n            />\n            <aside\n                className={classNames(\"entry-sidebar\", {\n                    \"entry-sidebar--is-open\": isOpen,\n                })}\n                ref={tocRef}\n            >\n                <nav className=\"entry-toc\">\n                    <ul>\n                        <li>\n                            <a\n                                onClick={() => {\n                                    toggleIsOpenOnMobile()\n                                    setActiveHeading(\"\")\n                                }}\n                                href=\"#\"\n                                data-track-note=\"toc_header\"\n                            >\n                                {pageTitle}\n                            </a>\n                        </li>\n                        {headings\n                            .filter((heading) =>\n                                hideSubheadings && heading.isSubheading\n                                    ? false\n                                    : true\n                            )\n                            .map((heading, i: number) => (\n                                <li\n                                    key={i}\n                                    className={\n                                        (heading.isSubheading\n                                            ? \"subsection\"\n                                            : \"section\") +\n                                        (heading.slug === activeHeading\n                                            ? \" active\"\n                                            : \"\")\n                                    }\n                                >\n                                    <a\n                                        onClick={toggleIsOpenOnMobile}\n                                        href={`#${heading.slug}`}\n                                        data-track-note=\"toc_link\"\n                                    >\n                                        {heading.text}\n                                    </a>\n                                </li>\n                            ))}\n                    </ul>\n                </nav>\n                <div className=\"toggle-toc\">\n                    <button\n                        data-track-note=\"page_toggle_toc\"\n                        aria-label={`${\n                            isOpen ? \"Close\" : \"Open\"\n                        } table of contents`}\n                        onClick={toggleIsOpen}\n                    >\n                        <FontAwesomeIcon icon={isOpen ? faTimes : faBars} />\n                        <span className=\"label\">\n                            {isOpen ? \"Close\" : \"Contents\"}\n                        </span>\n                    </button>\n                </div>\n            </aside>\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport cx from \"classnames\"\nimport { useIntersectionObserver } from \"usehooks-ts\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faBoxArchive } from \"@fortawesome/free-solid-svg-icons\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport Footnotes from \"../components/Footnotes.js\"\nimport {\n    OwidGdocPostInterface,\n    CITATION_ID,\n    LICENSE_ID,\n    OwidGdocType,\n    formatAuthorsForBibtex,\n    EnrichedBlockText,\n    getPhraseForArchivalDate,\n} from \"@ourworldindata/utils\"\nimport { CodeSnippet } from \"@ourworldindata/components\"\nimport { BAKED_BASE_URL, IS_ARCHIVE } from \"../../../settings/clientSettings.js\"\nimport { OwidGdocHeader } from \"../components/OwidGdocHeader.js\"\nimport StickyNav from \"../../blocks/StickyNav.js\"\nimport { getShortPageCitation } from \"../utils.js\"\nimport { TableOfContents } from \"../../TableOfContents.js\"\nimport { useDocumentContext } from \"../DocumentContext.js\"\nimport { PROD_URL } from \"../../SiteConstants.js\"\n\nconst BASE_URL = IS_ARCHIVE ? PROD_URL : \"\"\n\nconst citationDescriptionsByArticleType: Record<\n    | OwidGdocType.Article\n    | OwidGdocType.TopicPage\n    | OwidGdocType.LinearTopicPage\n    | OwidGdocType.Fragment\n    | OwidGdocType.AboutPage,\n    string\n> = {\n    [OwidGdocType.TopicPage]:\n        \"Our articles and data visualizations rely on work from many different people and organizations. When citing this topic page, please also cite the underlying data sources. This topic page can be cited as:\",\n    [OwidGdocType.LinearTopicPage]:\n        \"Our articles and data visualizations rely on work from many different people and organizations. When citing this topic page, please also cite the underlying data sources. This topic page can be cited as:\",\n    [OwidGdocType.Article]:\n        \"Our articles and data visualizations rely on work from many different people and organizations. When citing this article, please also cite the underlying data sources. This article can be cited as:\",\n    // This case should never occur as Fragments aren't baked and can't be viewed by themselves.\n    [OwidGdocType.Fragment]:\n        \"Our articles and data visualizations rely on work from many different people and organizations. When citing this text, please also cite the underlying data sources. This text can be cited as:\",\n    // It is unlikely that we would want to cite an about page, but there might be a use case for it.\n    [OwidGdocType.AboutPage]:\n        \"Our articles and data visualizations rely on work from many different people and organizations. When citing this page, please also cite the underlying data sources. This page can be cited as:\",\n}\n\ntype GdocPostProps = Omit<\n    OwidGdocPostInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n> & {\n    isPreviewing?: boolean\n}\n\nexport function GdocPost({\n    content,\n    publishedAt,\n    slug,\n    breadcrumbs,\n    manualBreadcrumbs,\n}: GdocPostProps) {\n    const { archiveContext } = useDocumentContext()\n    const postType = content.type ?? OwidGdocType.Article\n    const citationDescription = citationDescriptionsByArticleType[postType]\n    const shortPageCitation = getShortPageCitation(\n        content.authors,\n        content.title ?? \"\",\n        publishedAt\n    )\n    const citationUrl =\n        archiveContext?.archiveUrl ?? `${BAKED_BASE_URL}/${slug}`\n    const archivalPhrase = getPhraseForArchivalDate(\n        archiveContext?.archivalDate\n    )\n    const citationText = `${shortPageCitation} Published online at OurWorldinData.org. Retrieved from: '${citationUrl}' [Online Resource]${archivalPhrase ? ` ${archivalPhrase}` : \"\"}`\n    const hasSidebarToc = content[\"sidebar-toc\"]\n    const headingVariant = content[\"heading-variant\"] ?? \"light\"\n    const shouldHideSubscribeBanner =\n        content[\"hide-subscribe-banner\"] || postType === OwidGdocType.TopicPage\n    const isDeprecated =\n        postType === OwidGdocType.Article &&\n        Boolean(content[\"deprecation-notice\"])\n    const bibtex = `@article{owid-${slug.replace(/\\//g, \"-\")},\n    author = {${formatAuthorsForBibtex(content.authors)}},\n    title = {${content.title}},\n    journal = {Our World in Data},\n    year = {${publishedAt?.getFullYear()}},\n    note = {${citationUrl}}\n}`\n\n    const stickyNavLinks = content[\"sticky-nav\"]\n\n    return (\n        <article\n            className={cx(\n                \"centered-article-container grid grid-cols-12-full-width\",\n                `centered-article-container--heading-variant-${headingVariant}`,\n                // Only add this modifier class when content.type is defined\n                {\n                    [`centered-article-container--${content.type}`]:\n                        content.type,\n                }\n            )}\n        >\n            <OwidGdocHeader\n                content={content}\n                publishedAt={publishedAt}\n                breadcrumbs={manualBreadcrumbs ?? breadcrumbs ?? undefined}\n                isDeprecated={isDeprecated}\n            />\n            {isDeprecated && content[\"deprecation-notice\"] && (\n                <DeprecationNotice blocks={content[\"deprecation-notice\"]} />\n            )}\n            {hasSidebarToc && content.toc ? (\n                <TableOfContents\n                    headings={content.toc}\n                    headingLevels={{ primary: 1, secondary: 2 }}\n                    pageTitle={content.title || \"\"}\n                />\n            ) : null}\n            {postType === OwidGdocType.TopicPage && stickyNavLinks?.length ? (\n                <nav className=\"sticky-nav sticky-nav--dark span-cols-14 grid grid-cols-12-full-width\">\n                    <StickyNav\n                        links={stickyNavLinks}\n                        className=\"span-cols-12 col-start-2\"\n                    />\n                </nav>\n            ) : null}\n            {content.summary ? (\n                <details\n                    className=\"article-summary col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\"\n                    open={true}\n                >\n                    <summary>Summary</summary>\n                    <ArticleBlocks\n                        blocks={content.summary}\n                        containerType=\"summary\"\n                    />\n                </details>\n            ) : null}\n            {content.body ? (\n                <ArticleBlocks\n                    toc={content.toc}\n                    blocks={content.body}\n                    automaticSubscribeBanner={!shouldHideSubscribeBanner}\n                />\n            ) : null}\n            {content.refs && !_.isEmpty(content.refs.definitions) ? (\n                <Footnotes definitions={content.refs.definitions} />\n            ) : null}\n            {!content[\"hide-citation\"] && (\n                <section\n                    id={CITATION_ID}\n                    className=\"grid grid-cols-12-full-width col-start-1 col-end-limit no-dividers\"\n                >\n                    <div className=\"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                        <h3\n                            className={\n                                isDeprecated ? \"align-left\" : \"align-center\"\n                            }\n                        >\n                            Cite this work\n                        </h3>\n                        {isDeprecated && (\n                            <p className=\"citation-deprecated-notice\">\n                                <span className=\"citation-deprecated-notice__highlight\">\n                                    This content is outdated\n                                </span>\n                                , but if you would still like to use it, here is\n                                how to cite it:\n                                <br />\n                            </p>\n                        )}\n                        <p>{citationDescription}</p>\n                        <div>\n                            <CodeSnippet code={citationText} />\n                        </div>\n                        <p>BibTeX citation</p>\n                        <div>\n                            <CodeSnippet code={bibtex} />\n                        </div>\n                    </div>\n                </section>\n            )}\n            <section\n                id={LICENSE_ID}\n                className=\"grid grid-cols-12-full-width col-start-1 col-end-limit\"\n            >\n                <div className=\"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                    {!isDeprecated && (\n                        <>\n                            <img\n                                src=\"/owid-logo.svg\"\n                                alt=\"Our World in Data logo\"\n                                loading=\"lazy\"\n                                width={104}\n                                height={57}\n                            />\n                            <h3>Reuse this work freely</h3>\n                        </>\n                    )}\n\n                    <p>\n                        All visualizations, data, and code produced by Our World\n                        in Data are completely open access under the{\" \"}\n                        <a href=\"https://creativecommons.org/licenses/by/4.0/\">\n                            Creative Commons BY license\n                        </a>\n                        . You have the permission to use, distribute, and\n                        reproduce these in any medium, provided the source and\n                        authors are credited.\n                    </p>\n                    <p>\n                        The data produced by third parties and made available by\n                        Our World in Data is subject to the license terms from\n                        the original third-party authors. We will always\n                        indicate the original source of the data in our\n                        documentation, so you should always check the license of\n                        any such third-party data before use and redistribution.\n                    </p>\n                    {!isDeprecated && (\n                        <p>\n                            All of{\" \"}\n                            <a\n                                href={`${BASE_URL}/faqs#how-can-i-embed-one-of-your-interactive-charts-in-my-website`}\n                            >\n                                our charts can be embedded\n                            </a>{\" \"}\n                            in any site.\n                        </p>\n                    )}\n                </div>\n            </section>\n        </article>\n    )\n}\n\nfunction DeprecationNotice({ blocks }: { blocks: EnrichedBlockText[] }) {\n    const { isIntersecting, ref } = useIntersectionObserver({\n        // Stops the notice from flashing to full width on page load\n        initialIsIntersecting: true,\n    })\n    return (\n        <>\n            {/* Non-sticky sentinel element for observing intersection. */}\n            <div className=\"col-start-1 span-cols-14\" ref={ref} />\n            <div\n                className={cx(\n                    \"deprecation-notice col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\",\n                    {\n                        \"deprecation-notice--sticky\": !isIntersecting,\n                    }\n                )}\n            >\n                <h4 className=\"deprecation-notice__heading\">\n                    <FontAwesomeIcon\n                        className=\"deprecation-notice__icon\"\n                        icon={faBoxArchive}\n                    />\n                    This article is outdated\n                </h4>\n                <ArticleBlocks blocks={blocks} />\n            </div>\n        </>\n    )\n}\n","import cx from \"classnames\"\nimport {\n    LatestDataInsight,\n    OwidGdocDataInsightInterface,\n    copyToClipboard,\n    MinimalTag,\n} from \"@ourworldindata/utils\"\nimport { useContext, useState } from \"react\"\nimport * as React from \"react\"\nimport {\n    faArrowRight,\n    faChevronRight,\n    faCheck,\n    faChain,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport LinkedAuthor from \"../components/LinkedAuthor.js\"\nimport DataInsightDateline from \"../components/DataInsightDateline.js\"\nimport LatestDataInsights from \"../components/LatestDataInsights.js\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.js\"\n\nexport const LatestDataInsightCards = (props: {\n    latestDataInsights?: LatestDataInsight[]\n    className?: string\n}) => {\n    const { latestDataInsights, className } = props\n    if (!latestDataInsights?.length) return null\n\n    return (\n        <div className={cx(className, \"data-insight-cards-container\")}>\n            <h2 className=\"h2-bold \">Our latest Data Insights</h2>\n            <a href=\"/data-insights\" className=\"see-all-button\">\n                See all Data Insights <FontAwesomeIcon icon={faArrowRight} />\n            </a>\n            <LatestDataInsights\n                className=\"data-insights-carousel\"\n                latestDataInsights={latestDataInsights}\n            />\n        </div>\n    )\n}\n\nconst RelatedTopicsList = ({\n    tags,\n    className,\n}: {\n    tags?: MinimalTag[]\n    className?: string\n}) => {\n    if (!tags?.length) return null\n    return (\n        <div className={cx(className, \"data-insights-related-topics\")}>\n            <p className=\"body-3-regular\">Related topic pages:</p>\n            <ul>\n                {tags.map((tag) => (\n                    <li key={tag.name}>\n                        <a href={`/${tag.slug}`}>{tag.name}</a>\n                    </li>\n                ))}\n            </ul>\n        </div>\n    )\n}\n\nfunction CopyLinkButton(props: { slug: string }) {\n    const [hasCopied, setHasCopied] = useState(false)\n    return (\n        <button\n            aria-label=\"Copy link to clipboard\"\n            data-track-note=\"data_insight_copy_link\"\n            id=\"copy-link-button\"\n            className=\"data-insight-copy-link-button body-3-medium\"\n            onClick={() => {\n                void copyToClipboard(\n                    `${BAKED_BASE_URL}/data-insights/${props.slug}`\n                )\n                setHasCopied(true)\n                setTimeout(() => {\n                    setHasCopied(false)\n                }, 1000)\n            }}\n        >\n            {hasCopied ? (\n                <>\n                    <FontAwesomeIcon icon={faCheck} /> Copied!\n                </>\n            ) : (\n                <>\n                    <FontAwesomeIcon icon={faChain} /> Copy link\n                </>\n            )}\n        </button>\n    )\n}\n\nexport const DataInsightBody = (\n    props: DataInsightProps & {\n        anchor?: string\n        publishedAt: Date | string | null\n        shouldLinkTitle?: boolean\n        // Hide the year on /data-insights index pages when published in the current year.\n        // Show it on individual data insight pages.\n        shouldHideYearInDateline?: boolean\n    }\n) => {\n    const shouldLinkTitle = props.shouldLinkTitle\n    const publishedAt = props.publishedAt ? new Date(props.publishedAt) : null\n    return (\n        <div className=\"grid grid-cols-1 span-cols-6 col-start-5 span-md-cols-8 col-md-start-4 col-sm-start-1 span-sm-cols-14 data-insight-body-container\">\n            <div\n                id={props.anchor}\n                className={cx(\"data-insight-body\", {\n                    \"data-insight-body--has-tags\": !!props.tags?.length,\n                })}\n            >\n                <DataInsightDateline\n                    className=\"data-insight__dateline\"\n                    publishedAt={publishedAt}\n                    formatOptions={\n                        props.shouldHideYearInDateline\n                            ? { month: \"long\", day: \"numeric\" }\n                            : {\n                                  year: \"numeric\",\n                                  month: \"long\",\n                                  day: \"2-digit\",\n                              }\n                    }\n                />\n                {shouldLinkTitle ? (\n                    <a\n                        href={`${BAKED_BASE_URL}/data-insights/${props.slug}`}\n                        className=\"data-insight-heading-link\"\n                    >\n                        <h1 className=\"display-3-semibold\">\n                            {props.content.title}\n                        </h1>\n                    </a>\n                ) : (\n                    <h1 className=\"display-3-semibold\">\n                        {props.content.title}\n                    </h1>\n                )}\n                <div className=\"data-insight-authors body-3-medium\">\n                    {props.content.authors.map((author, index) => (\n                        <LinkedAuthor\n                            className=\"data-insight-author\"\n                            key={index}\n                            name={author}\n                            includeImage={true}\n                        />\n                    ))}\n                </div>\n                <div className=\"data-insight-blocks\">\n                    <ArticleBlocks\n                        blocks={props.content.body}\n                        containerType=\"data-insight\"\n                    />\n                </div>\n                <div className=\"data-insight-footer\">\n                    <RelatedTopicsList tags={props.tags ?? undefined} />\n                    <CopyLinkButton slug={props.slug} />\n                </div>\n            </div>\n        </div>\n    )\n}\n\ntype DataInsightProps = {\n    className?: string\n} & Omit<\n    OwidGdocDataInsightInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n>\n\nexport const DataInsightPage = (\n    props: DataInsightProps\n): React.ReactElement => {\n    const attachments = useContext(AttachmentsContext)\n    const latestDataInsights = attachments.latestDataInsights\n        ?.map((dataInsight, index) => ({ ...dataInsight, index }))\n        .filter(\n            (dataInsight) => dataInsight.content.title !== props.content.title\n        )\n\n    return (\n        <div className=\"grid grid-cols-12-full-width data-insight-page\">\n            <div className=\"span-cols-6 col-start-5 span-md-cols-8 col-md-start-4 col-sm-start-2 span-sm-cols-12 data-insight-breadcrumbs\">\n                <a href=\"/data-insights\">Data Insights</a>\n                <FontAwesomeIcon icon={faChevronRight} />\n                <span>{props.content.title}</span>\n            </div>\n            <DataInsightBody {...props} />\n            <LatestDataInsightCards\n                className=\"span-cols-12 col-start-2\"\n                latestDataInsights={latestDataInsights}\n            />\n        </div>\n    )\n}\n","import { OwidGdocPostInterface } from \"@ourworldindata/utils\"\nimport * as React from \"react\"\n\ntype FragmentProps = Omit<\n    OwidGdocPostInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n>\n\n/**\n * We would like to handle Fragments better in the future\n * For now, we're just displaying them as JSON\n * When we get around to that, we should render them via the admin, because style bleed isn't so important and we don't\n * want to add extra JS/CSS to the common bundle\n */\nexport function Fragment(props: FragmentProps): React.ReactElement {\n    return (\n        <div className=\"grid grid-cols-12-full-width\">\n            <h5 className=\"h5-black-caps span-cols-12 col-start-2\">Fragment</h5>\n            <h2\n                className=\"display-1-semibold span-cols-12 col-start-2\"\n                style={{ marginTop: 0 }}\n            >\n                {props.content.title}{\" \"}\n            </h2>\n            <pre className=\"fragment-json span-cols-12 col-start-2\">\n                {JSON.stringify(props.content, null, 2)}\n            </pre>\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport { OwidGdocHomepageContent } from \"@ourworldindata/types\"\nimport { getAllChildrenOfArea } from \"@ourworldindata/utils\"\nimport { AttachmentsContext } from \"../AttachmentsContext.js\"\n\nexport interface HomepageProps {\n    content: OwidGdocHomepageContent\n}\n\nconst AllTopicsSection = () => {\n    const { homepageMetadata } = React.useContext(AttachmentsContext)\n    if (!homepageMetadata) return null\n    const { tagGraph } = homepageMetadata\n    if (!tagGraph) return null\n\n    // We have to flatten the areas because we can't nest <ul> elements and have them render correctly\n    // Filter to only include topics (tags with slugs) - searchable non-topic tags shouldn't appear here\n    const flattenedAreas = tagGraph.children.map((area) => ({\n        ...area,\n        children: getAllChildrenOfArea(area).filter((topic) => topic.isTopic),\n    }))\n\n    return (\n        <section\n            id=\"all-topics\"\n            className=\"grid grid-cols-12-full-width span-cols-14 homepage-topics-section\"\n        >\n            <h2 className=\"h2-bold span-cols-12 col-start-2\">All our topics</h2>\n            <p className=\"body-2-regular span-cols-12 col-start-2\">\n                All our data, research, and writing — topic by topic.\n            </p>\n            {flattenedAreas.map((area) => (\n                <section\n                    key={area.name}\n                    className=\"homepage-topic span-cols-12 col-start-2\"\n                >\n                    <h2 className=\"homepage-topic__topic-name h3-bold\">\n                        {area.name}\n                    </h2>\n                    <ul className=\"homepage-topic__topic-list display-3-regular\">\n                        {area.children.map(({ slug, name }) =>\n                            slug ? (\n                                <li\n                                    className=\"homepage-topic__topic-entry\"\n                                    key={`topic-entry-${slug}`}\n                                >\n                                    <a href={`/${slug}`}>{name}</a>\n                                </li>\n                            ) : (\n                                <li\n                                    className=\"homepage-topic__subtopic\"\n                                    key={`subarea-${name}`}\n                                >\n                                    {name}:\n                                </li>\n                            )\n                        )}\n                    </ul>\n                </section>\n            ))}\n        </section>\n    )\n}\n\nexport const Homepage = (props: HomepageProps): React.ReactElement => {\n    const { content } = props\n\n    return (\n        <div className=\"grid grid-cols-12-full-width\">\n            <ArticleBlocks blocks={content.body} />\n            <AllTopicsSection />\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport {\n    OwidEnrichedGdocBlock,\n    OwidGdocAuthorContent,\n    OwidGdocAuthorInterface,\n} from \"@ourworldindata/types\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport Image from \"../components/Image.js\"\nimport ArticleBlock from \"../components/ArticleBlock.js\"\nimport { getLayout } from \"../components/layout.js\"\nimport cx from \"classnames\"\n\ntype AuthorProps = Omit<\n    OwidGdocAuthorInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n> & {\n    content: OwidGdocAuthorContent\n}\n\nconst AuthorHeader = (gdoc: AuthorProps) => {\n    const {\n        title,\n        role,\n        bio,\n        \"featured-image\": featuredImage,\n        socials,\n    } = gdoc.content\n\n    // ✋ This component has two versions, one for small screens and one for\n    // medium and up. The medium version is hidden on small screens and vice\n    // versa. Please make sure to keep the two versions in sync when applicable.\n\n    return (\n        <div className=\"author-header grid grid-cols-12-full-width span-cols-14\">\n            <section className=\"author-header__sm grid grid-cols-12-full-width span-cols-14\">\n                <div className=\"col-start-2 span-cols-8\">\n                    <h1 className=\"author-header__name\">{title}</h1>\n                    <div className=\"author-header__role\">{role}</div>\n                </div>\n                {featuredImage && (\n                    <div className=\"grid grid-cols-3 col-start-11 span-cols-3\">\n                        <Image\n                            filename={featuredImage}\n                            alt={`Portrait of ${title}`}\n                            className={cx(\n                                \"author-header__portrait\",\n                                getLayout(\"image\", \"author-header\")\n                            )}\n                            shouldLightbox={false}\n                            containerType=\"author-header\"\n                        />\n                    </div>\n                )}\n                {socials && (\n                    <ArticleBlock b={socials} containerType=\"author-header\" />\n                )}\n                {bio?.length && (\n                    <ArticleBlocks blocks={bio} containerType=\"author-header\" />\n                )}\n            </section>\n            <section className=\"author-header__md grid grid-cols-12-full-width span-cols-14\">\n                <div className=\"span-cols-8 col-start-2 span-md-cols-7 col-md-start-2\">\n                    <h1 className=\"author-header__name\">{title}</h1>\n                    <div className=\"author-header__role\">{role}</div>\n                    {bio?.length && (\n                        <ArticleBlocks\n                            blocks={bio}\n                            containerType=\"author-header\"\n                        />\n                    )}\n                </div>\n                <div className=\"grid grid-cols-3 col-start-11 span-cols-3 span-md-cols-4 col-md-start-10\">\n                    {featuredImage && (\n                        <Image\n                            filename={featuredImage}\n                            alt={`Portrait of ${title}`}\n                            className={cx(\n                                \"author-header__portrait\",\n                                getLayout(\"image\", \"author-header\")\n                            )}\n                            shouldLightbox={false}\n                            containerType=\"author-header\"\n                        />\n                    )}\n                    {socials && (\n                        <ArticleBlock\n                            b={socials}\n                            containerType=\"author-header\"\n                        />\n                    )}\n                </div>\n            </section>\n        </div>\n    )\n}\n\nexport const AuthorWork = ({ blocks }: { blocks: OwidEnrichedGdocBlock[] }) => {\n    return (\n        <div className=\"author-work grid grid-cols-12-full-width span-cols-14\">\n            <ArticleBlocks blocks={blocks} />\n        </div>\n    )\n}\n\nexport const Author = (gdoc: AuthorProps): React.ReactElement => {\n    return (\n        <>\n            <AuthorHeader {...gdoc} />\n            <AuthorWork blocks={gdoc.content.body} />\n        </>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport cx from \"classnames\"\nimport { useEffect, useRef } from \"react\"\n\nimport { OwidGdocAboutInterface } from \"@ourworldindata/types\"\nimport { ABOUT_LINKS } from \"../../SiteConstants.js\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport Footnotes from \"../components/Footnotes.js\"\n\ntype AboutPageProps = Omit<\n    OwidGdocAboutInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n>\n\nexport default function AboutPage({ content, slug }: AboutPageProps) {\n    const shouldOverrideTitle = content[\"override-title\"]\n    return (\n        <main className=\"about-page centered-article-container grid grid-cols-12-full-width\">\n            <h1 className=\"about-header col-start-2 col-end-limit display-2-semibold\">\n                {(shouldOverrideTitle && content.title) || \"About\"}\n            </h1>\n            {!content[\"hide-nav\"] && <AboutNav slug={slug} />}\n            <div className=\"about-body grid grid-cols-12-full-width col-start-1 col-end-limit\">\n                <ArticleBlocks\n                    containerType=\"about-page\"\n                    blocks={content.body}\n                />\n            </div>\n            {content.refs && !_.isEmpty(content.refs.definitions) ? (\n                <Footnotes definitions={content.refs.definitions} />\n            ) : null}\n        </main>\n    )\n}\n\nfunction AboutNav({ slug }: { slug: string }) {\n    const activeLinkRef = useRef<HTMLAnchorElement>(null)\n\n    // Scroll the nav to the active link, since it might not be visible\n    // on mobile.\n    useEffect(() => {\n        const activeLink = activeLinkRef.current\n        if (activeLink) {\n            const nav = activeLink.closest(\"nav\")\n            if (nav) {\n                const activeLinkOffset = activeLink.offsetLeft\n                const navWidth = nav.offsetWidth\n                const activeLinkWidth = activeLink.offsetWidth\n                // Center the active link.\n                nav.scrollLeft =\n                    activeLinkOffset - (navWidth - activeLinkWidth) / 2\n            }\n        }\n    }, [])\n\n    return (\n        <nav className=\"about-nav grid grid-cols-12-full-width col-start-1 col-end-limit\">\n            <ul className=\"about-nav-list col-start-2 col-end-14 col-sm-start-1\">\n                {ABOUT_LINKS.map(({ title, url }) => {\n                    const isActive = url === `/${slug}`\n                    return (\n                        <li key={url}>\n                            <a\n                                className={cx(\"about-nav-link\", {\n                                    \"about-nav-link--is-active\": isActive,\n                                })}\n                                ref={isActive ? activeLinkRef : undefined}\n                                href={url}\n                                aria-current={isActive ? \"page\" : undefined}\n                            >\n                                {title}\n                            </a>\n                        </li>\n                    )\n                })}\n            </ul>\n        </nav>\n    )\n}\n","import { OwidGdocAnnouncementInterface } from \"@ourworldindata/utils\"\nimport * as React from \"react\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport DataInsightDateline from \"../components/DataInsightDateline.js\"\nimport LinkedAuthor from \"../components/LinkedAuthor.js\"\nimport { Cta } from \"../components/Cta.js\"\n\ntype AnnouncementProps = {\n    className?: string\n} & Omit<\n    OwidGdocAnnouncementInterface,\n    \"contentMd5\" | \"markdown\" | \"publicationContext\" | \"revisionId\"\n>\n\nexport const AnnouncementPageContent = (props: AnnouncementProps) => {\n    const { publishedAt } = props\n    return (\n        <div className=\"announcement-page-content span-cols-6 col-start-5 span-md-cols-8 col-md-start-4 span-sm-cols-14 col-sm-start-1\">\n            <header className=\"span-cols-6 col-start-5 span-md-cols-8 col-md-start-4 span-sm-cols-14 col-sm-start-1\">\n                <div className=\"announcement-page-header-meta\">\n                    <DataInsightDateline publishedAt={publishedAt} />\n                    <span className=\"announcement-page-kicker h6-black-caps\">\n                        {props.content.kicker}\n                    </span>\n                </div>\n                <h1 className=\"announcement-page-heading subtitle-2-bold\">\n                    {props.content.title}\n                </h1>\n                {props.content.authors.length && (\n                    <div className=\"data-insight-authors body-3-medium\">\n                        {props.content.authors.map((author, index) => (\n                            <LinkedAuthor\n                                className=\"data-insight-author\"\n                                key={index}\n                                name={author}\n                                includeImage={true}\n                            />\n                        ))}\n                    </div>\n                )}\n            </header>\n            {props.content.cta &&\n            props.content.cta.url &&\n            props.content.cta.text ? (\n                <>\n                    <p>{props.content.excerpt}</p>\n                    <Cta\n                        shouldRenderLinks\n                        text={props.content.cta.text}\n                        url={props.content.cta.url}\n                    />\n                </>\n            ) : (\n                <ArticleBlocks\n                    blocks={props.content.body}\n                    interactiveImages={false}\n                />\n            )}\n        </div>\n    )\n}\n\nexport const AnnouncementPage = (\n    props: AnnouncementProps\n): React.ReactElement => {\n    return (\n        <div className=\"announcement-page grid grid-cols-12-full-width\">\n            <AnnouncementPageContent {...props} />\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { ArticleBlocks } from \"../components/ArticleBlocks.js\"\nimport Footnotes from \"../components/Footnotes.js\"\nimport {\n    OwidGdocProfileInterface,\n    CITATION_ID,\n    LICENSE_ID,\n    formatAuthorsForBibtex,\n} from \"@ourworldindata/utils\"\nimport { CodeSnippet, getCanonicalUrl } from \"@ourworldindata/components\"\nimport { BAKED_BASE_URL } from \"../../../settings/clientSettings.js\"\nimport { OwidGdocType } from \"@ourworldindata/types\"\nimport { getShortPageCitation } from \"../utils.js\"\nimport { Byline } from \"../components/Byline.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faBook } from \"@fortawesome/free-solid-svg-icons\"\nimport { faCreativeCommons } from \"@fortawesome/free-brands-svg-icons\"\nimport { TableOfContents } from \"../../TableOfContents.js\"\n\ntype ProfileProps = Omit<\n    OwidGdocProfileInterface,\n    \"markdown\" | \"publicationContext\" | \"revisionId\"\n> & {\n    isPreviewing?: boolean\n}\n\nexport function Profile({ content, publishedAt, slug }: ProfileProps) {\n    const hasSidebarToc = content[\"sidebar-toc\"]\n    const instantiatedEntity = content.instantiatedEntity\n\n    const shortPageCitation = getShortPageCitation(\n        content.authors,\n        content.title ?? \"\",\n        publishedAt\n    )\n    const profileUrl = getCanonicalUrl(BAKED_BASE_URL, {\n        slug,\n        content: { type: OwidGdocType.Profile },\n    })\n    const citationText = `${shortPageCitation} Published online at OurWorldinData.org. Retrieved from: '${profileUrl}' [Online Resource]`\n\n    const bibtex = `@article{owid-${slug.replace(/\\//g, \"-\")},\n    author = {${formatAuthorsForBibtex(content.authors)}},\n    title = {${content.title}},\n    journal = {Our World in Data},\n    year = {${publishedAt?.getFullYear()}},\n    note = {${profileUrl}}\n}`\n\n    return (\n        <article className=\"centered-article-container grid grid-cols-12-full-width centered-article-container--profile\">\n            <header className=\"topic-page-header grid span-cols-14 grid-cols-12-full-width\">\n                <div className=\"profile-title col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                    <div className=\"profile-title__container\">\n                        {instantiatedEntity?.isCountry && (\n                            <img\n                                className=\"profile-title__flag\"\n                                src={`/images/flags/${instantiatedEntity.code}.svg`}\n                                alt=\"\"\n                                width={64}\n                                height={48}\n                            />\n                        )}\n                        <span className=\"profile-title__label h5-black-caps\">\n                            {instantiatedEntity?.name}{\" \"}\n                            {instantiatedEntity?.isCountry\n                                ? \"Country Profile\"\n                                : \"Region Profile\"}\n                        </span>\n                    </div>\n                    <h1 className=\"display-2-semibold\">{content.title}</h1>\n                </div>\n                {content.subtitle && (\n                    <p className=\"topic-page-header__subtitle body-1-regular col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                        {content.subtitle}\n                    </p>\n                )}\n                {content.authors.length > 0 && (\n                    <p className=\"topic-page-header__byline col-start-5 span-cols-6 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                        <Byline names={content.authors} />\n                    </p>\n                )}\n                <div className=\"topic-page-header__cta-buttons col-start-11 span-cols-3 col-md-start-3 span-md-cols-10 span-sm-cols-12 col-sm-start-2\">\n                    <a href={`#${CITATION_ID}`}>\n                        <FontAwesomeIcon icon={faBook} />\n                        Cite this work\n                    </a>\n                    <a href={`#${LICENSE_ID}`}>\n                        <FontAwesomeIcon icon={faCreativeCommons} />\n                        Reuse this work\n                    </a>\n                </div>\n            </header>\n            {hasSidebarToc && content.toc ? (\n                <TableOfContents\n                    headings={content.toc}\n                    headingLevels={{ primary: 1, secondary: 2 }}\n                    pageTitle={content.title || \"\"}\n                />\n            ) : null}\n            {content.body ? <ArticleBlocks blocks={content.body} /> : null}\n            {content.refs && !_.isEmpty(content.refs.definitions) ? (\n                <Footnotes definitions={content.refs.definitions} />\n            ) : null}\n            <section\n                id={CITATION_ID}\n                className=\"grid grid-cols-12-full-width col-start-1 col-end-limit\"\n            >\n                <div className=\"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                    <h3 className=\"align-center\">Cite this work</h3>\n                    <p>\n                        Our articles and data visualizations rely on work from\n                        many different people and organizations. When citing\n                        this profile page, please also cite the underlying data\n                        sources. This profile page can be cited as:\n                    </p>\n                    <div>\n                        <CodeSnippet code={citationText} />\n                    </div>\n                    <p>BibTeX citation</p>\n                    <div>\n                        <CodeSnippet code={bibtex} />\n                    </div>\n                </div>\n            </section>\n            <section\n                id={LICENSE_ID}\n                className=\"grid grid-cols-12-full-width col-start-1 col-end-limit\"\n            >\n                <div className=\"col-start-4 span-cols-8 col-md-start-3 span-md-cols-10 col-sm-start-2 span-sm-cols-12\">\n                    <img\n                        src=\"/owid-logo.svg\"\n                        alt=\"Our World in Data logo\"\n                        loading=\"lazy\"\n                        width={104}\n                        height={57}\n                    />\n                    <h3>Reuse this work freely</h3>\n                    <p>\n                        All visualizations, data, and code produced by Our World\n                        in Data are completely open access under the{\" \"}\n                        <a\n                            href=\"https://creativecommons.org/licenses/by/4.0/\"\n                            target=\"_blank\"\n                            rel=\"noopener\"\n                        >\n                            Creative Commons BY license\n                        </a>\n                        . You have the permission to use, distribute, and\n                        reproduce these in any medium, provided the source and\n                        authors are credited.\n                    </p>\n                    <p>\n                        The data produced by third parties and made available by\n                        Our World in Data is subject to the license terms from\n                        the original third-party authors. We will always\n                        indicate the original source of the data in our\n                        documentation, so you should always check the license of\n                        any such third-party data before use and redistribution.\n                    </p>\n                    <p>\n                        All of <a href=\"https://github.com/owid\">our charts</a>{\" \"}\n                        can be embedded in any site.\n                    </p>\n                </div>\n            </section>\n        </article>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport * as React from \"react\"\nimport { OwidGdocType, ArchiveContext } from \"@ourworldindata/types\"\nimport { OwidGdocPageProps } from \"@ourworldindata/utils\"\nimport { match, P } from \"ts-pattern\"\nimport { useIsClient } from \"usehooks-ts\"\nimport { GdocPost } from \"./pages/GdocPost.js\"\nimport { DataInsightPage } from \"./pages/DataInsight.js\"\nimport { Fragment } from \"./pages/Fragment.js\"\nimport { Homepage } from \"./pages/Homepage.js\"\nimport { Author } from \"./pages/Author.js\"\nimport AboutPage from \"./pages/AboutPage.js\"\nimport { AttachmentsContext } from \"./AttachmentsContext.js\"\nimport { DocumentContext } from \"./DocumentContext.js\"\nimport { AnnouncementPage } from \"./pages/Announcement.js\"\nimport { Profile } from \"./pages/Profile.js\"\nimport { ADMIN_BASE_URL } from \"../../settings/clientSettings.js\"\nimport { CookieKey } from \"@ourworldindata/grapher\"\n\ntype OwidGdocProps = OwidGdocPageProps & {\n    isPreviewing?: boolean\n    archiveContext?: ArchiveContext\n}\n\nfunction hasAdminCookie(): boolean {\n    try {\n        return document.cookie.includes(CookieKey.isAdmin)\n    } catch {\n        return false\n    }\n}\n\nfunction AdminLinks({ id }: Pick<OwidGdocPageProps, \"id\">) {\n    const isClient = useIsClient()\n    if (!isClient || !id || !hasAdminCookie()) return null\n\n    return (\n        <div className=\"gdoc-admin-bar\">\n            <a\n                href={`https://docs.google.com/document/d/${id}/edit`}\n                id=\"gdoc-link\"\n                target=\"_blank\"\n                rel=\"noopener\"\n            >\n                Gdoc\n            </a>\n            <span>/</span>\n            <a\n                href={`${ADMIN_BASE_URL}/admin/gdocs/${id}/preview`}\n                id=\"admin-link\"\n                target=\"_blank\"\n                rel=\"noopener\"\n            >\n                Admin\n            </a>\n        </div>\n    )\n}\n\nexport function OwidGdoc({\n    isPreviewing = false,\n    archiveContext,\n    ...props\n}: OwidGdocProps): React.ReactElement {\n    const content = match(props)\n        .with(\n            {\n                content: {\n                    type: P.union(\n                        OwidGdocType.Article,\n                        OwidGdocType.TopicPage,\n                        OwidGdocType.LinearTopicPage\n                    ),\n                },\n            },\n            (props) => <GdocPost {...props} />\n        )\n        .with({ content: { type: OwidGdocType.AboutPage } }, (props) => (\n            <AboutPage {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.DataInsight } }, (props) => (\n            <DataInsightPage {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.Announcement } }, (props) => (\n            <AnnouncementPage {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.Homepage } }, (props) => (\n            <Homepage {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.Author } }, (props) => (\n            <Author {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.Fragment } }, (props) => (\n            <Fragment {...props} />\n        ))\n        .with({ content: { type: OwidGdocType.Profile } }, (props) => (\n            <Profile {...props} />\n        ))\n        .with(P.any, (gdoc) => (\n            <div\n                className=\"grid grid-cols-12-full-width\"\n                style={{ height: 250 }}\n            >\n                <h3 className=\"span-cols-12 col-start-2\">\n                    Unknown article type: \"{gdoc.content?.type}\"\n                </h3>\n                <p className=\"span-cols-12 col-start-2\">\n                    Must be one of: {Object.values(OwidGdocType).join(\", \")}\n                </p>\n            </div>\n        ))\n        .run()\n\n    return (\n        <AttachmentsContext.Provider\n            value={{\n                donors: _.get(props, \"donors\", []),\n                linkedAuthors: _.get(props, \"linkedAuthors\", []),\n                linkedDocuments: _.get(props, \"linkedDocuments\", {}),\n                imageMetadata: _.get(props, \"imageMetadata\", {}),\n                linkedCharts: _.get(props, \"linkedCharts\", {}),\n                linkedIndicators: _.get(props, \"linkedIndicators\", {}),\n                relatedCharts: _.get(props, \"relatedCharts\", []),\n                latestDataInsights: _.get(props, \"latestDataInsights\", []),\n                homepageMetadata: _.get(props, \"homepageMetadata\", {}),\n                latestWorkLinks: _.get(props, \"latestWorkLinks\", []),\n                linkedNarrativeCharts: _.get(\n                    props,\n                    \"linkedNarrativeCharts\",\n                    {}\n                ),\n                linkedStaticViz: _.get(props, \"linkedStaticViz\", {}),\n                linkedCallouts: _.get(props, \"linkedCallouts\", {}),\n                // lodash doesn't use fallback when value is null\n                tags: props.tags ?? [],\n            }}\n        >\n            <DocumentContext.Provider value={{ isPreviewing, archiveContext }}>\n                <AdminLinks id={props.id} />\n                {content}\n            </DocumentContext.Provider>\n        </AttachmentsContext.Provider>\n    )\n}\n","/* eslint-disable react-refresh/only-export-components */\nimport * as React from \"react\"\nimport { observer } from \"mobx-react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport {\n    faCommentAlt,\n    faTimes,\n    faPaperPlane,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { observable, action, toJS, computed, makeObservable } from \"mobx\"\nimport classnames from \"classnames\"\nimport { BAKED_BASE_URL } from \"../settings/clientSettings.js\"\nimport { stringifyUnknownError } from \"@ourworldindata/utils\"\nimport { createRoot } from \"react-dom/client\"\n\nconst sendFeedback = async (feedback: Feedback) => {\n    const json = {\n        ...toJS(feedback),\n        environment: `Current URL: ${window.location.href}\\nUser Agent: ${navigator.userAgent}\\nViewport: ${window.innerWidth}x${window.innerHeight}`,\n    }\n\n    return await fetch(\"https://feedback.owid.io\", {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json;charset=UTF-8\" },\n        body: JSON.stringify(json),\n    }).then((res) => {\n        if (!res.ok)\n            throw new Error(\n                `Sending feedback failed: ${res.status} ${res.statusText}`\n            )\n    })\n}\n\nclass Feedback {\n    name: string = \"\"\n    email: string = \"\"\n    message: string = \"\"\n    environment: string = \"\"\n\n    constructor() {\n        makeObservable(this, {\n            name: observable,\n            email: observable,\n            message: observable,\n        })\n    }\n\n    @action.bound clear() {\n        this.name = \"\"\n        this.email = \"\"\n        this.message = \"\"\n    }\n}\n\nconst vaccinationRegex = /vaccination|vaccine|doses|vaccinat/i\nconst licensingRegex = /license|licence|licensing|copyright|permission|permit/i\nconst citationRegex = /cite|citation|citing|reference/i\nconst translateRegex = /translat/i\nconst fundingRegex = /\\b(fund|funds|funding|funded|funder)\\b/i\nconst reusingChartsRegex = /(use|reuse|using|reusing)\\s+(chart|image|picture)/i\nconst reusingDataRegex =\n    /(use|reuse|using|reusing|utilize|utilizing|utilise|utilising)\\s+data/i\nconst visualizationToolRegex =\n    /grapher|grapher\\s+reusability|(use|reuse|using|reusing)\\s+grapher|data\\s+viz\\s+tool|data\\s+visuali[sz]ation\\s+tool|visuali[sz]ation\\s+software/i\nconst logoRegex = /logo/i\nconst teachingRegex = /teach|teaching|teacher|teachers/i\n\nenum SpecialFeedbackTopic {\n    Vaccination,\n    Licensing,\n    Citation,\n    Translation,\n    Funding,\n    ReusingCharts,\n    ReusingData,\n    VisualizationTool,\n    Logo,\n    Teaching,\n}\n\ninterface SpecialTopicMatcher {\n    regex: RegExp\n    topic: SpecialFeedbackTopic\n}\n\nconst topicMatchers: SpecialTopicMatcher[] = [\n    { regex: vaccinationRegex, topic: SpecialFeedbackTopic.Vaccination },\n    { regex: licensingRegex, topic: SpecialFeedbackTopic.Licensing },\n    { regex: citationRegex, topic: SpecialFeedbackTopic.Citation },\n    { regex: translateRegex, topic: SpecialFeedbackTopic.Translation },\n    { regex: fundingRegex, topic: SpecialFeedbackTopic.Funding },\n    { regex: reusingChartsRegex, topic: SpecialFeedbackTopic.ReusingCharts },\n    {\n        regex: visualizationToolRegex,\n        topic: SpecialFeedbackTopic.VisualizationTool,\n    },\n    { regex: reusingDataRegex, topic: SpecialFeedbackTopic.ReusingData },\n    { regex: logoRegex, topic: SpecialFeedbackTopic.Logo },\n    { regex: teachingRegex, topic: SpecialFeedbackTopic.Teaching },\n]\n\nconst vaccineNotice = (\n    <a\n        key=\"vaccineNotice\"\n        href={`${BAKED_BASE_URL}/covid-vaccinations#frequently-asked-questions`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        COVID-19 vaccine questions\n    </a>\n)\n\nconst copyrightNotice = (\n    <a\n        key=\"copyrightNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-reuse-or-republish-your-charts`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Copyright questions\n    </a>\n)\nconst citationNotice = (\n    <a\n        key=\"citationNotice\"\n        href={`${BAKED_BASE_URL}/faqs#how-should-i-cite-your-charts`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        How to cite our work\n    </a>\n)\nconst translateNotice = (\n    <a\n        key=\"translateNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-translate-your-work-into-another-language`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Translating our work\n    </a>\n)\nconst fundingNotice = (\n    <a\n        key=\"fundingNotice\"\n        href={`${BAKED_BASE_URL}/faqs#how-are-you-funded`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        How are you funded?\n    </a>\n)\nconst reusingChartsNotice = (\n    <a\n        key=\"reusingChartsNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-reuse-or-republish-your-charts`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Reusing our charts\n    </a>\n)\nconst reusingDataNotice = (\n    <a\n        key=\"reusingDataNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-reuse-or-republish-your-data`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Reusing our data\n    </a>\n)\nconst visualizationToolNotice = (\n    <a\n        key=\"visualizationToolNotice\"\n        href={`${BAKED_BASE_URL}/faqs#what-software-do-you-use-for-your-visualizations-and-can-i-use-it`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Our visualization tool\n    </a>\n)\nconst logoNotice = (\n    <a\n        key=\"logoNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-use-the-our-world-in-data-name-or-logo`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Can I use your logo?\n    </a>\n)\nconst teachingNotice = (\n    <a\n        key=\"teachingNotice\"\n        href={`${BAKED_BASE_URL}/faqs#can-i-use-your-work-for-teaching`}\n        target=\"_blank\"\n        rel=\"noopener\"\n    >\n        Teaching with OWID\n    </a>\n)\n\nconst topicNotices = new Map<SpecialFeedbackTopic, React.ReactElement>([\n    [SpecialFeedbackTopic.Vaccination, vaccineNotice],\n    [SpecialFeedbackTopic.Citation, citationNotice],\n    [SpecialFeedbackTopic.Licensing, copyrightNotice],\n    [SpecialFeedbackTopic.Translation, translateNotice],\n    [SpecialFeedbackTopic.Funding, fundingNotice],\n    [SpecialFeedbackTopic.ReusingCharts, reusingChartsNotice],\n    [SpecialFeedbackTopic.ReusingData, reusingDataNotice],\n    [SpecialFeedbackTopic.VisualizationTool, visualizationToolNotice],\n    [SpecialFeedbackTopic.Logo, logoNotice],\n    [SpecialFeedbackTopic.Teaching, teachingNotice],\n])\n\ninterface FeedbackFormProps {\n    onClose?: () => void\n    autofocus?: boolean\n}\n\n@observer\nexport class FeedbackForm extends React.Component<FeedbackFormProps> {\n    feedback: Feedback = new Feedback()\n    loading: boolean = false\n    done: boolean = false\n    error: string | undefined\n\n    constructor(props: FeedbackFormProps) {\n        super(props)\n\n        makeObservable(this, {\n            loading: observable,\n            done: observable,\n            error: observable,\n        })\n    }\n\n    async submit() {\n        try {\n            await sendFeedback(this.feedback)\n            this.feedback.clear()\n            this.done = true\n        } catch (err) {\n            this.error = stringifyUnknownError(err)\n        } finally {\n            this.loading = false\n        }\n    }\n\n    @action.bound onSubmit(e: React.FormEvent<HTMLFormElement>) {\n        e.preventDefault()\n        this.done = false\n        this.error = undefined\n        this.loading = true\n        void this.submit()\n    }\n\n    @action.bound onName(e: React.ChangeEvent<HTMLInputElement>) {\n        this.feedback.name = e.currentTarget.value\n    }\n\n    @action.bound onEmail(e: React.ChangeEvent<HTMLInputElement>) {\n        this.feedback.email = e.currentTarget.value\n    }\n\n    @action.bound onMessage(e: React.ChangeEvent<HTMLTextAreaElement>) {\n        this.feedback.message = e.currentTarget.value\n    }\n\n    @action.bound onClose() {\n        if (this.props.onClose) {\n            this.props.onClose()\n        }\n        // Clear the form after closing, in case the user has a 2nd message to send later.\n        this.done = false\n    }\n\n    @computed private get specialTopic(): SpecialFeedbackTopic | undefined {\n        const { message } = this.feedback\n        return topicMatchers.find((matcher) => matcher.regex.test(message))\n            ?.topic\n    }\n\n    renderBody() {\n        const { loading, done, specialTopic } = this\n        const autofocus = this.props.autofocus ?? true\n\n        if (done) {\n            return (\n                <div className=\"doneMessage\">\n                    <div className=\"icon\">\n                        <FontAwesomeIcon icon={faPaperPlane} />\n                    </div>\n                    <div className=\"message\">\n                        <h3>Thank you for your feedback</h3>\n                        <p>\n                            We read all feedback, but due to a high volume of\n                            messages we are not able to reply to all.\n                        </p>\n                    </div>\n                    <div aria-label=\"Close feedback form\" className=\"actions\">\n                        <button onClick={this.onClose}>Close</button>\n                    </div>\n                </div>\n            )\n        }\n\n        const notices =\n            specialTopic !== undefined\n                ? topicNotices.get(specialTopic)\n                : undefined\n        return (\n            <React.Fragment>\n                <div className=\"header\">Leave us feedback</div>\n                <div className=\"notice\">\n                    <p>\n                        <strong>Have a question?</strong> You may find an answer\n                        in{\" \"}\n                        <a\n                            href={`${BAKED_BASE_URL}/faqs`}\n                            target=\"_blank\"\n                            rel=\"noopener\"\n                        >\n                            <strong>FAQs</strong>\n                        </a>\n                        .\n                    </p>\n                </div>\n                <div className=\"formBody\">\n                    <div className=\"formSection formSectionExpand\">\n                        <label htmlFor=\"feedback.message\">Message</label>\n                        <textarea\n                            id=\"feedback.message\"\n                            className=\"sentry-mask\"\n                            onChange={this.onMessage}\n                            rows={5}\n                            minLength={30}\n                            required\n                            disabled={loading}\n                        />\n                        {notices ? (\n                            <div className=\"topic-notice\">\n                                Your question may be answered in{\" \"}\n                                <strong>{notices}</strong>.\n                            </div>\n                        ) : null}\n                    </div>\n                    <div className=\"formSection\">\n                        <label htmlFor=\"feedback.name\">Your name</label>\n                        <input\n                            id=\"feedback.name\"\n                            className=\"sentry-mask\"\n                            onChange={this.onName}\n                            autoFocus={autofocus}\n                            disabled={loading}\n                        />\n                    </div>\n                    <div className=\"formSection\">\n                        <label htmlFor=\"feedback.email\">Email address</label>\n                        <input\n                            id=\"feedback.email\"\n                            className=\"sentry-mask\"\n                            onChange={this.onEmail}\n                            type=\"email\"\n                            disabled={loading}\n                        />\n                        <small className=\"form-text text-muted\">\n                            Your name and email will only be used to reply to\n                            you and not for any other purpose. If you do not\n                            give a valid email, we will not be able to reply to\n                            you.\n                        </small>\n                    </div>\n                    {this.error ? (\n                        <div style={{ color: \"red\" }}>{this.error}</div>\n                    ) : undefined}\n                    {this.done ? (\n                        <div style={{ color: \"green\" }}>\n                            Thanks for your feedback!\n                        </div>\n                    ) : undefined}\n                </div>\n                <div className=\"footer\">\n                    <button\n                        aria-label=\"Submit feedback\"\n                        type=\"submit\"\n                        disabled={loading}\n                    >\n                        Send message\n                    </button>\n                </div>\n            </React.Fragment>\n        )\n    }\n\n    override render() {\n        return (\n            <form\n                className={classnames(\"FeedbackForm\", {\n                    loading: this.loading,\n                })}\n                onSubmit={this.onSubmit}\n            >\n                {this.renderBody()}\n            </form>\n        )\n    }\n}\n\n@observer\nexport class FeedbackPrompt extends React.Component {\n    isOpen: boolean = false\n\n    constructor(props: Record<string, never>) {\n        super(props)\n\n        makeObservable(this, {\n            isOpen: observable,\n        })\n    }\n\n    @action.bound toggleOpen() {\n        this.isOpen = !this.isOpen\n    }\n\n    @action.bound onClose() {\n        this.isOpen = false\n    }\n\n    @action.bound onClickOutside() {\n        this.onClose()\n    }\n\n    override render() {\n        return (\n            <div\n                className={`feedbackPromptContainer${\n                    this.isOpen ? \" active\" : \"\"\n                }`}\n            >\n                {/* We are keeping the form always rendered to avoid wiping all contents\n                when a user accidentally closes the form */}\n                <div style={{ display: this.isOpen ? \"block\" : \"none\" }}>\n                    <div className=\"overlay\" onClick={this.onClickOutside} />\n                    <div className=\"box\">\n                        <FeedbackForm onClose={this.onClose} />\n                    </div>\n                </div>\n                {this.isOpen ? (\n                    <button\n                        aria-label=\"Close feedback form\"\n                        className=\"prompt\"\n                        onClick={this.toggleOpen}\n                    >\n                        <FontAwesomeIcon icon={faTimes} /> Close\n                    </button>\n                ) : (\n                    <button\n                        aria-label=\"Open feedback form\"\n                        className=\"prompt\"\n                        data-track-note=\"page_open_feedback\"\n                        onClick={this.toggleOpen}\n                    >\n                        <FontAwesomeIcon icon={faCommentAlt} /> Feedback\n                    </button>\n                )}\n            </div>\n        )\n    }\n}\n\nexport function runFeedbackPage() {\n    const elem = document.querySelector(\".FeedbackPage main\")\n    if (!elem) throw new Error(\"FeedbackPage main element not found in DOM\")\n\n    const root = createRoot(elem)\n    root.render(\n        <div className=\"box\">\n            <FeedbackForm />\n        </div>\n    )\n}\n","import { tippy } from \"@tippyjs/react\"\nimport type { Instance } from \"tippy.js\"\nimport { ADMIN_BASE_URL, BAKED_BASE_URL } from \"../settings/clientSettings.js\"\nimport {\n    ArchiveMetaInformation,\n    DetailDictionary,\n    fetchWithRetry,\n    readFromAssetMap,\n} from \"@ourworldindata/utils\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\nimport {\n    MarkdownTextWrap,\n    reactRenderToStringClientOnly,\n} from \"@ourworldindata/components\"\nimport urljoin from \"url-join\"\n\ntype Tippyfied<E> = E & {\n    _tippy?: Instance\n}\n\ndeclare global {\n    interface Window {\n        details?: DetailDictionary\n        _OWID_ARCHIVE_CONTEXT?: ArchiveMetaInformation\n    }\n}\n\nconst siteAnalytics = new SiteAnalytics()\n\ntype RunDetailsOnDemandOptions = {\n    shouldFetchFromAdminApi?: boolean\n}\nexport async function runDetailsOnDemand(\n    options: RunDetailsOnDemandOptions = {}\n) {\n    const { shouldFetchFromAdminApi = false } = options\n\n    const runtimeAssetMap =\n        (typeof window !== \"undefined\" &&\n            window._OWID_ARCHIVE_CONTEXT?.assets?.runtime) ||\n        undefined\n\n    const dodFetchUrl = shouldFetchFromAdminApi\n        ? urljoin(ADMIN_BASE_URL, \"admin/api/parsed-dods.json\")\n        : readFromAssetMap(runtimeAssetMap, {\n              path: \"dods.json\",\n              fallback: `${BAKED_BASE_URL}/dods.json`,\n          })\n\n    window.details = await fetchWithRetry(dodFetchUrl, {\n        method: \"GET\",\n        credentials: \"same-origin\",\n        headers: {\n            Accept: \"application/json\",\n        },\n    }).then((res) => res.json())\n\n    document.addEventListener(\"mouseover\", handleEvent, { passive: true })\n    document.addEventListener(\"touchstart\", handleEvent, { passive: true })\n\n    function handleEvent(event: MouseEvent | TouchEvent) {\n        const target = event.target as Tippyfied<Node>\n        if (!(target instanceof Element)) return\n\n        if (target.classList.contains(\"dod-span\")) {\n            const id = target.attributes.getNamedItem(\"data-id\")?.nodeValue\n            if (!id) return\n            showDod(id, target)\n            siteAnalytics.logDodShown(id)\n        }\n    }\n\n    function showDod(id: string, element: Tippyfied<Element>) {\n        const dod = window.details?.[id]\n        if (!dod) return\n\n        if (element._tippy) {\n            element._tippy.show()\n        } else {\n            const content = reactRenderToStringClientOnly(\n                <div className=\"dod-container\">\n                    <MarkdownTextWrap\n                        text={dod.text}\n                        fontSize={12}\n                        lineHeight={1.55}\n                    />\n                </div>\n            )\n\n            tippy(element, {\n                content,\n                allowHTML: true,\n                // Add hide delay to allow users reaching the tooltip with\n                // a mouse before it hides in tricky edge cases, e.g. when\n                // the DOD spans multiple lines.\n                delay: [null, 200],\n                interactive: true,\n                hideOnClick: false,\n                arrow: false,\n                theme: \"light dod\",\n                appendTo: document.body,\n                aria: {\n                    content: \"labelledby\",\n                },\n            })\n        }\n    }\n}\n","/* eslint-disable react-refresh/only-export-components */\nimport cx from \"classnames\"\nimport * as React from \"react\"\nimport ReactDOM from \"react-dom/client\"\nimport { BAKED_BASE_URL } from \"../../settings/clientSettings.js\"\nimport { DYNAMIC_COLLECTION_PAGE_CONTAINER_ID } from \"@ourworldindata/utils\"\nimport {\n    IReactionDisposer,\n    ObservableMap,\n    computed,\n    observable,\n    reaction,\n    makeObservable,\n} from \"mobx\"\nimport { observer } from \"mobx-react\"\nimport { WindowGraphers } from \"./DynamicCollectionPage.js\"\nimport { Grapher } from \"@ourworldindata/grapher\"\nimport { GRAPHER_PREVIEW_CLASS } from \"@ourworldindata/types\"\nimport GrapherImage from \"../GrapherImage.js\"\n\ninterface DynamicCollectionProps {\n    baseUrl: string\n    initialDynamicCollection?: string\n}\n\n/**\n * After the MultiEmbedder has mounted a Grapher, we poll grapherRef until grapherRef.current is defined,\n * and then update the window.graphers Map with it.\n *\n * This is what allows us to use a reaction in the DynamicCollection component to update the URL whenever a Grapher is updated.\n */\nexport function embedDynamicCollectionGrapher(\n    grapherRef: React.RefObject<Grapher | null>,\n    figure: Element\n) {\n    const interval = setInterval(() => {\n        if (grapherRef.current) {\n            const originalSlug =\n                grapherRef.current.grapherState.slug +\n                grapherRef.current.grapherState.queryStr\n\n            const index = figure.getAttribute(\"data-grapher-index\")\n\n            const windowGrapher = window.graphers.get(\n                `${originalSlug}-${index}`\n            )\n\n            if (windowGrapher) {\n                windowGrapher.grapher = grapherRef.current\n            }\n            clearInterval(interval)\n        }\n    }, 1000)\n}\n\n@observer\nexport class DynamicCollection extends React.Component<DynamicCollectionProps> {\n    initialDynamicCollection: string | undefined =\n        this.props.initialDynamicCollection\n    graphers: undefined | WindowGraphers = undefined\n    pollInterval: null | ReturnType<typeof setInterval> = null\n    disposers: IReactionDisposer[] = []\n\n    constructor(props: DynamicCollectionProps) {\n        super(props)\n\n        makeObservable(this, {\n            initialDynamicCollection: observable,\n            graphers: observable,\n        })\n    }\n\n    @computed get allGrapherSlugsAndQueryStrings() {\n        if (!this.graphers) return []\n\n        // If the grapher hasn't mounted yet, we use the original slugAndQueryString\n        // This allows us to update the URL if users interact with graphers that have mounted\n        // while still keeping the unmounted graphers in the URL in the right place\n        const slugsAndQueryStrings = new Array(this.graphers.size)\n\n        for (const [originalSlugAndUrl, { index, grapher }] of this.graphers) {\n            if (!grapher) {\n                // Strip index suffix from originalSlugAndUrl\n                const withoutIndex = originalSlugAndUrl.replace(/-\\d+$/, \"\")\n                slugsAndQueryStrings[index] = encodeURIComponent(withoutIndex)\n            } else {\n                slugsAndQueryStrings[index] = encodeURIComponent(\n                    `${grapher.grapherState.slug}${grapher.grapherState.queryStr}`\n                )\n            }\n        }\n\n        return slugsAndQueryStrings\n    }\n\n    override componentDidMount() {\n        this.pollInterval = setInterval(this.pollForGraphers, 1000)\n    }\n\n    pollForGraphers = () => {\n        if (typeof window !== \"undefined\" && window.graphers) {\n            this.graphers = window.graphers\n            clearInterval(this.pollInterval!)\n            this.setupReaction()\n        }\n    }\n\n    setupReaction = () => {\n        this.disposers.push(\n            reaction(\n                () => this.allGrapherSlugsAndQueryStrings,\n                (allGrapherSlugsAndQueryStrings: string[]) => {\n                    const newUrl = `${\n                        this.props.baseUrl\n                    }/collection/custom?charts=${allGrapherSlugsAndQueryStrings.join(\n                        \"+\"\n                    )}`\n                    history.replaceState({}, \"\", newUrl)\n                }\n            )\n        )\n    }\n\n    renderInterior = () => {\n        if (!this.initialDynamicCollection)\n            return (\n                <p className=\"span-cols-12\">\n                    No charts were added to this collection.\n                    {/* TODO: Algolia search? */}\n                </p>\n            )\n        return (\n            <div className=\"grid span-cols-12\">\n                {this.initialDynamicCollection\n                    .split(\" \")\n                    .map((chartSlug, index) => {\n                        const grapherUrl = `${this.props.baseUrl}/grapher/${chartSlug}`\n                        return (\n                            <figure\n                                key={index}\n                                className={cx(\n                                    GRAPHER_PREVIEW_CLASS,\n                                    \"span-cols-6 span-md-cols-12\"\n                                )}\n                                data-grapher-src={grapherUrl}\n                                data-grapher-index={index}\n                            >\n                                <a href={grapherUrl}>\n                                    <GrapherImage slug={chartSlug} />\n                                </a>\n                            </figure>\n                        )\n                    })}\n            </div>\n        )\n    }\n\n    override render() {\n        return (\n            <>\n                {/* TODO: Add Algolia search to add new charts? */}\n                {this.renderInterior()}\n            </>\n        )\n    }\n}\n\nexport function hydrateDynamicCollectionPage() {\n    const container = document.querySelector(\n        `#${DYNAMIC_COLLECTION_PAGE_CONTAINER_ID}`\n    )\n    if (!container) {\n        console.error(\n            `Could not find container with id ${DYNAMIC_COLLECTION_PAGE_CONTAINER_ID}`\n        )\n        return\n    }\n\n    const urlParams = new URLSearchParams(window.location.search)\n    const initialDynamicCollection = urlParams.get(\"charts\") || \"\"\n    window.graphers = new ObservableMap()\n    const entries = initialDynamicCollection.split(\" \").entries()\n    for (const [index, chartSlug] of entries) {\n        window.graphers.set(\n            // Include index in the key so that we can have multiple of the same chart\n            // This gets tracked in the DOM via data-grapher-index, so that the MultiEmbedder can update the correct object\n            // when the grapher mounts\n            `${chartSlug}-${index}`,\n            observable({\n                index,\n                grapher: undefined,\n            })\n        )\n    }\n    ReactDOM.hydrateRoot(\n        container,\n        <DynamicCollection\n            baseUrl={BAKED_BASE_URL}\n            initialDynamicCollection={initialDynamicCollection}\n        />\n    )\n}\n","import { createContext, useContext } from \"react\"\nimport { Filter } from \"@ourworldindata/types\"\n\nexport interface SearchAutocompleteContextType {\n    activeIndex: number\n    setActiveIndex: (index: number) => void\n    suggestions: Filter[]\n    setSuggestions: (suggestions: Filter[]) => void\n    showSuggestions: boolean\n    setShowSuggestions: (isOpen: boolean) => void\n    onSelectActiveItem: () => void\n    registerSelectionHandler: (\n        handler: (filter: Filter, index: number) => void\n    ) => void\n}\n\nexport const SearchAutocompleteContext = createContext<\n    SearchAutocompleteContextType | undefined\n>(undefined)\n\nexport function useSearchAutocomplete() {\n    const context = useContext(SearchAutocompleteContext)\n    if (context === undefined) {\n        throw new Error(\n            \"useSearchAutocomplete must be used within a SearchAutocompleteContextProvider\"\n        )\n    }\n    return context\n}\n","import { ReactNode, forwardRef, ForwardedRef, useRef } from \"react\"\nimport { useMediaQuery } from \"usehooks-ts\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport {\n    createFocusInputOnClickHandler,\n    isCurrentRef,\n    getSearchAutocompleteId,\n    getSearchAutocompleteItemId,\n} from \"./searchUtils.js\"\nimport { useSearchAutocomplete } from \"./SearchAutocompleteContext.js\"\n\nexport const SearchInput = forwardRef(\n    (\n        {\n            value,\n            setLocalQuery,\n            setGlobalQuery,\n            onBackspaceEmpty,\n            autoFocus,\n            children,\n            resetButton,\n        }: {\n            value: string\n            setLocalQuery: (query: string) => void\n            setGlobalQuery: (query: string) => void\n            onBackspaceEmpty: () => void\n            autoFocus: boolean\n            children?: ReactNode\n            resetButton?: React.ReactNode\n        },\n        inputRef: ForwardedRef<HTMLInputElement>\n    ) => {\n        const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n        const hasUserInteracted = useRef(false)\n        const {\n            activeIndex,\n            setActiveIndex,\n            suggestions,\n            showSuggestions,\n            setShowSuggestions,\n            onSelectActiveItem,\n        } = useSearchAutocomplete()\n\n        let placeholder = \"\"\n        if (isCurrentRef(inputRef)) {\n            // Only set the placeholder once the component has rendered so that useMediaQuery has a chance to initialize\n            // Otherwise on mobile it will flash from the desktop version to the mobile placeholder\n            placeholder = isSmallScreen\n                ? \"Search data, topics, countries or keywords…\"\n                : \"Search for an indicator, a topic, a country, or a keyword…\"\n        }\n\n        // Generate unique IDs for ARIA relationships using utility functions\n        const autocompleteId = getSearchAutocompleteId()\n        const activeOptionId = getSearchAutocompleteItemId(activeIndex)\n\n        const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n            // Handle backspace on empty input to remove last filter\n            if (e.key === \"Backspace\" && value === \"\") {\n                e.preventDefault()\n                onBackspaceEmpty()\n                return\n            }\n\n            if (!showSuggestions || !suggestions.length) return\n\n            switch (e.key) {\n                case \"ArrowDown\":\n                    e.preventDefault()\n                    setActiveIndex(\n                        activeIndex < suggestions.length - 1\n                            ? activeIndex + 1\n                            : activeIndex\n                    )\n                    break\n\n                case \"ArrowUp\":\n                    e.preventDefault()\n                    setActiveIndex(activeIndex > 0 ? activeIndex - 1 : -1)\n                    break\n\n                case \"Escape\":\n                    e.preventDefault()\n                    setShowSuggestions(false)\n                    break\n\n                case \"Enter\":\n                    e.preventDefault()\n                    if (activeIndex >= 0) {\n                        onSelectActiveItem()\n                    } else {\n                        // Submit the form\n                        setGlobalQuery(value)\n                    }\n                    break\n            }\n        }\n\n        // Allow clicks on the form to focus the input. This is useful on mobile\n        // when the search bar stretches vertically and reveals white space\n        // readers might be clicking on. Do register clicks on children, as we\n        // want clicks removing active filters or resetting the search to focus\n        // the input.\n        const handleFormClick = createFocusInputOnClickHandler(inputRef)\n\n        return (\n            <form\n                className=\"search-form\"\n                role=\"search\"\n                onSubmit={(e) => {\n                    e.preventDefault()\n                    // unfocus input to hide autocomplete/hide mobile keyboard\n                    if (isCurrentRef(inputRef)) {\n                        inputRef.current.blur()\n                    }\n                    setGlobalQuery(value)\n                }}\n                onClick={handleFormClick}\n            >\n                {children}\n                <div className=\"search-input-row\">\n                    <input\n                        type=\"text\"\n                        className=\"search-input body-3-regular\"\n                        ref={inputRef}\n                        data-testid=\"search-input\"\n                        placeholder={placeholder}\n                        enterKeyHint=\"search\"\n                        value={value}\n                        role=\"combobox\"\n                        autoFocus={autoFocus}\n                        aria-expanded={showSuggestions}\n                        aria-controls={autocompleteId}\n                        aria-activedescendant={activeOptionId}\n                        aria-autocomplete=\"list\"\n                        onChange={(e) => {\n                            hasUserInteracted.current = true\n                            setLocalQuery(e.target.value)\n                            if (e.target.value === \"\") {\n                                setGlobalQuery(\"\")\n                            } else {\n                                setShowSuggestions(true)\n                                setActiveIndex(0)\n                            }\n                        }}\n                        onKeyDown={handleKeyDown}\n                        onFocus={() => {\n                            // Only show suggestions on focus if the user has actually interacted\n                            // This prevents showing suggestions on initial autofocus\n                            if (hasUserInteracted.current) {\n                                setShowSuggestions(true)\n                                setActiveIndex(0)\n                            }\n                        }}\n                        onBlur={() => {\n                            setShowSuggestions(false)\n                        }}\n                    />\n                    {resetButton}\n                </div>\n            </form>\n        )\n    }\n)\n\nSearchInput.displayName = \"SearchInput\"\n","import {\n    faMapMarkerAlt,\n    faClose,\n    faMagnifyingGlass,\n    faTimesCircle,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { LabeledSwitch } from \"@ourworldindata/components\"\nimport { countriesByName } from \"@ourworldindata/utils\"\nimport { useState, useRef, useMemo } from \"react\"\nimport {\n    Button,\n    Popover,\n    ListBox,\n    ListBoxItem,\n    DialogTrigger,\n} from \"react-aria-components\"\nimport { useMediaQuery } from \"usehooks-ts\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport cx from \"classnames\"\n\nconst alphabetizedCountriesByName = Object.values(countriesByName()).sort(\n    (a, b) => {\n        return a.name.localeCompare(b.name)\n    }\n)\n\nexport const SearchCountrySelector = ({\n    selectedRegionNames,\n    requireAllCountries,\n    addCountry,\n    removeCountry,\n    toggleRequireAllCountries,\n}: {\n    selectedRegionNames: string[]\n    requireAllCountries: boolean\n    addCountry: (country: string) => void\n    removeCountry: (country: string) => void\n    toggleRequireAllCountries: () => void\n}) => {\n    const [isOpen, setIsOpen] = useState(false)\n    const [countrySearchQuery, setCountrySearchQuery] = useState(\"\")\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const listContainerRef = useRef<HTMLDivElement>(null)\n\n    const toggleCountry = (country: string) => {\n        if (selectedRegionNames.includes(country)) {\n            removeCountry(country)\n        } else {\n            addCountry(country)\n        }\n    }\n\n    const handleOpenChange = (isOpen: boolean) => {\n        setIsOpen(isOpen)\n        // if opening on mobile, scroll down a little\n        if (isSmallScreen && isOpen) {\n            setTimeout(() => {\n                const listContainer = listContainerRef.current\n                if (listContainer) {\n                    const rect = listContainer.getBoundingClientRect()\n                    window.scrollBy({\n                        top: rect.top - 100,\n                        behavior: \"smooth\",\n                    })\n                }\n            }, 100)\n        }\n    }\n\n    const filteredCountriesByName = useMemo(() => {\n        return alphabetizedCountriesByName.filter(\n            (country) =>\n                selectedRegionNames.includes(country.name) ||\n                country.name\n                    .toLowerCase()\n                    .includes(countrySearchQuery.toLowerCase())\n        )\n    }, [countrySearchQuery, selectedRegionNames])\n\n    return (\n        <div className=\"search-country-selector\">\n            <DialogTrigger isOpen={isOpen} onOpenChange={handleOpenChange}>\n                <Button\n                    className={cx(\"search-country-selector-button\", {\n                        \"search-country-selector-button--is-open\": isOpen,\n                    })}\n                    aria-expanded={isOpen}\n                    aria-label={\n                        isOpen\n                            ? \"Close country selector\"\n                            : \"Open country selector\"\n                    }\n                >\n                    <FontAwesomeIcon\n                        className=\"search-country-selector-button__icon\"\n                        icon={faMapMarkerAlt}\n                    />\n                    <span className=\"search-country-selector-button__text\">\n                        Select country\n                    </span>\n                </Button>\n                <Popover\n                    className=\"search-country-selector-list-container\"\n                    ref={listContainerRef}\n                    placement=\"bottom end\"\n                    crossOffset={8}\n                >\n                    <div className=\"search-country-selector-header\">\n                        <h5 className=\"h5-black-caps search-country-selector__heading\">\n                            Select or search for a country\n                        </h5>\n                        <Button\n                            aria-label=\"Close country selector\"\n                            className=\"search-country-selector-close-button\"\n                            onPress={() => setIsOpen(false)}\n                        >\n                            <FontAwesomeIcon icon={faClose} />\n                        </Button>\n                    </div>\n                    <LabeledSwitch\n                        className=\"search-country-selector-switch\"\n                        value={requireAllCountries}\n                        disabled={selectedRegionNames.length === 0}\n                        onToggle={toggleRequireAllCountries}\n                        label=\"Only show charts with data for all selected countries\"\n                    />\n                    <div className=\"search-country-selector-search-container\">\n                        <FontAwesomeIcon\n                            className=\"search-country-selector__search-icon\"\n                            icon={faMagnifyingGlass}\n                        />\n                        <input\n                            type=\"text\"\n                            placeholder=\"Search for a country\"\n                            className=\"search-country-selector-search-input body-3-regular\"\n                            value={countrySearchQuery}\n                            onChange={(e) =>\n                                setCountrySearchQuery(e.target.value)\n                            }\n                        />\n                        {countrySearchQuery && (\n                            <Button\n                                onPress={() => setCountrySearchQuery(\"\")}\n                                aria-label=\"Clear country search\"\n                                className=\"search-country-selector__clear-button\"\n                            >\n                                <FontAwesomeIcon icon={faTimesCircle} />\n                            </Button>\n                        )}\n                    </div>\n                    <ListBox\n                        className=\"search-country-selector-list\"\n                        aria-label=\"Countries\"\n                    >\n                        {filteredCountriesByName.map((country) => (\n                            <ListBoxItem\n                                key={country.name}\n                                id={country.name}\n                                className={cx(\n                                    \"search-country-selector-list__item\",\n                                    {\n                                        \"search-country-selector-list__item--selected\":\n                                            selectedRegionNames.includes(\n                                                country.name\n                                            ),\n                                    }\n                                )}\n                                textValue={country.name}\n                                onAction={() => toggleCountry(country.name)}\n                            >\n                                <img\n                                    className=\"flag\"\n                                    role=\"presentation\"\n                                    alt=\"\"\n                                    height={16}\n                                    width={20}\n                                    src={`/images/flags/${country.code}.svg`}\n                                />\n                                {country.name}\n                                <input\n                                    type=\"checkbox\"\n                                    checked={selectedRegionNames.includes(\n                                        country.name\n                                    )}\n                                    readOnly\n                                />\n                            </ListBoxItem>\n                        ))}\n                    </ListBox>\n                </Popover>\n            </DialogTrigger>\n        </div>\n    )\n}\n","import { RadioButton } from \"@ourworldindata/components\"\nimport { SearchResultType } from \"@ourworldindata/types\"\nimport { useSearchContext } from \"./SearchContext.js\"\nimport {\n    getEffectiveResultType,\n    hasDatasetFilters,\n    isBrowsing,\n} from \"./searchUtils.js\"\n\nconst OPTIONS = [\n    { value: SearchResultType.ALL, label: \"All\" },\n    { value: SearchResultType.DATA, label: \"Data\" },\n    { value: SearchResultType.WRITING, label: \"Writing\" },\n]\n\nexport const SearchResultTypeToggle = () => {\n    const {\n        state,\n        actions: { setResultType },\n    } = useSearchContext()\n    const { resultType, filters, query } = state\n\n    if (hasDatasetFilters(filters)) return null\n\n    const effectiveResultType = getEffectiveResultType(\n        filters,\n        query,\n        resultType\n    )\n\n    const optionsToShow = isBrowsing(filters, query)\n        ? OPTIONS.filter((option) => option.value !== SearchResultType.ALL)\n        : OPTIONS\n\n    return (\n        <fieldset\n            className=\"search-result-type-toggle\"\n            role=\"radiogroup\"\n            aria-label=\"Result type\"\n        >\n            <legend className=\"search-result-type-toggle__legend\">\n                Filter by type of content:\n            </legend>\n            {optionsToShow.map((option) => (\n                <RadioButton\n                    key={option.value}\n                    checked={effectiveResultType === option.value}\n                    onChange={() => setResultType(option.value)}\n                    label={option.label}\n                    group=\"search-result-type\"\n                />\n            ))}\n        </fieldset>\n    )\n}\n","import { DebugContext } from \"./DebugContext.js\"\n\nexport function DebugProvider({\n    children,\n    debug = false,\n}: {\n    children: React.ReactNode\n    debug?: boolean\n}) {\n    return (\n        <DebugContext.Provider value={debug}>{children}</DebugContext.Provider>\n    )\n}\n","import React, { useState, useCallback, ReactNode } from \"react\"\nimport { AriaAnnouncerContext } from \"./AriaAnnouncerUtils.js\"\n\nexport const AriaAnnouncerProvider: React.FC<{ children: ReactNode }> = ({\n    children,\n}) => {\n    const [announcement, setAnnouncement] = useState(\"\")\n\n    const announce = useCallback((message: string) => {\n        setTimeout(() => {\n            setAnnouncement(message)\n            setTimeout(() => {\n                setAnnouncement(\"\")\n            }, 2000)\n        }, 100)\n    }, [])\n\n    return (\n        <AriaAnnouncerContext.Provider value={{ announce, announcement }}>\n            {children}\n        </AriaAnnouncerContext.Provider>\n    )\n}\n","import React from \"react\"\nimport { useAriaAnnouncer } from \"./AriaAnnouncerUtils.js\"\n\nexport const AriaAnnouncer: React.FC = () => {\n    const { announcement } = useAriaAnnouncer()\n\n    return (\n        <div\n            className=\"aria-announcer\"\n            aria-live=\"assertive\"\n            aria-atomic=\"true\"\n            role=\"status\"\n            style={{\n                position: \"absolute\",\n                left: \"-10000px\",\n                width: \"1px\",\n                height: \"1px\",\n                overflow: \"hidden\",\n            }}\n        >\n            {announcement}\n        </div>\n    )\n}\n","import cx from \"classnames\"\nimport { useMemo } from \"react\"\nimport { useMediaQuery } from \"usehooks-ts\"\n\nimport { MultiDimDimensionChoices } from \"@ourworldindata/types\"\nimport { MultiDimDataPageConfig } from \"@ourworldindata/utils\"\nimport { SMALL_BREAKPOINT_MEDIA_QUERY } from \"../SiteConstants.js\"\nimport { useResolvedSettings } from \"./multiDimSettings.js\"\nimport MultiDimDropdowns from \"./MultiDimDropdowns.js\"\n\nexport const MultiDimSettingsPanel = ({\n    className,\n    config,\n    settings,\n    onChange,\n    disabled,\n}: {\n    className?: string\n    config: MultiDimDataPageConfig\n    settings: MultiDimDimensionChoices\n    onChange: (settings: MultiDimDimensionChoices) => void\n    disabled?: boolean\n}) => {\n    const { dimensions } = config\n    const isSmallScreen = useMediaQuery(SMALL_BREAKPOINT_MEDIA_QUERY)\n    const resolvedSettings = useResolvedSettings(settings, dimensions)\n\n    const availableSettings = useMemo(() => {\n        return config.filterToAvailableChoices(resolvedSettings)\n            .dimensionsWithAvailableChoices\n    }, [resolvedSettings, config])\n\n    let collapsedCount = Number.POSITIVE_INFINITY\n    if (isSmallScreen) {\n        const length = Object.values(availableSettings).length\n        collapsedCount = length > 3 ? 2 : length\n    }\n\n    return (\n        <div className={cx(\"md-settings-row\", className)}>\n            <div className=\"h5-black-caps md-settings__configure-data\">\n                Configure the data\n            </div>\n            <MultiDimDropdowns\n                className=\"md-settings__dropdowns\"\n                availableSettings={availableSettings}\n                resolvedSettings={resolvedSettings}\n                onChange={onChange}\n                collapsedCount={collapsedCount}\n                disabled={disabled}\n            />\n        </div>\n    )\n}\n","import * as _ from \"lodash-es\"\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport { unstable_batchedUpdates } from \"react-dom\"\nimport { useSearchParams } from \"react-router-dom-v5-compat\"\nimport * as Sentry from \"@sentry/react\"\nimport {\n    Grapher,\n    GrapherState,\n    getCachingInputTableFetcher,\n    GrapherManager,\n    loadCatalogData,\n} from \"@ourworldindata/grapher\"\nimport {\n    DataPageDataV2,\n    joinTitleFragments,\n    MultiDimDataPageConfig,\n    extractMultiDimChoicesFromSearchParams,\n    isInIFrame,\n} from \"@ourworldindata/utils\"\nimport {\n    AdditionalGrapherDataFetchFn,\n    ArchiveContext,\n    DataPageRelatedResearch,\n    FaqEntryKeyedByGdocIdAndFragmentId,\n    FaqLink,\n    GRAPHER_TAB_QUERY_PARAMS,\n    GrapherQueryParams,\n    ImageMetadata,\n    MultiDimDataPageConfigEnriched,\n    MultiDimDimensionChoices,\n    PrimaryTopic,\n} from \"@ourworldindata/types\"\nimport AboutThisData from \"../AboutThisData.js\"\nimport TopicTags from \"../TopicTags.js\"\nimport MetadataSection from \"../MetadataSection.js\"\nimport { useElementBounds, useMobxStateToReactState } from \"../hooks.js\"\nimport { MultiDimSettingsPanel } from \"./MultiDimDataPageSettingsPanel.js\"\nimport { getDatapageDataV2, processRelatedResearch } from \"../dataPage.js\"\nimport DataPageResearchAndWriting from \"../DataPageResearchAndWriting.js\"\nimport { AttachmentsContext } from \"../gdocs/AttachmentsContext.js\"\nimport {\n    cachedGetGrapherConfigByUuid,\n    cachedGetVariableMetadata,\n} from \"./api.js\"\nimport MultiDim from \"./MultiDim.js\"\nimport { useBaseGrapherConfig, useMultiDimAnalytics } from \"./hooks.js\"\nimport {\n    DATA_API_URL,\n    BAKED_GRAPHER_URL,\n    ADMIN_BASE_URL,\n    CATALOG_URL,\n} from \"../../settings/clientSettings.js\"\n\nexport const OWID_DATAPAGE_CONTENT_ROOT_ID = \"owid-datapageJson-root\"\nconst isIframe = isInIFrame()\n\nconst useTitleFragments = (config: MultiDimDataPageConfig) => {\n    const title = config.config.title\n    return useMemo(\n        () => joinTitleFragments(title.titleVariant, title.attributionShort),\n        [title]\n    )\n}\n\nexport type MultiDimDataPageContentProps = {\n    canonicalUrl: string\n    slug: string | null\n    config: MultiDimDataPageConfig\n    tagToSlugMap?: Record<string, string>\n    faqEntries?: FaqEntryKeyedByGdocIdAndFragmentId\n    primaryTopic?: PrimaryTopic\n    relatedResearchCandidates: DataPageRelatedResearch[]\n    imageMetadata: Record<string, ImageMetadata>\n    isPreviewing?: boolean\n    archiveContext?: ArchiveContext\n}\n\nexport type MultiDimDataPageData = Omit<\n    MultiDimDataPageContentProps,\n    \"config\"\n> & {\n    configObj: MultiDimDataPageConfigEnriched\n}\n\ndeclare global {\n    interface Window {\n        _OWID_MULTI_DIM_PROPS?: MultiDimDataPageData\n    }\n}\n\ninterface VariableDataPageData extends DataPageDataV2 {\n    faqs: FaqLink[]\n}\n\nexport function DataPageContent({\n    slug,\n    canonicalUrl,\n    config,\n    isPreviewing,\n    faqEntries,\n    primaryTopic,\n    relatedResearchCandidates,\n    tagToSlugMap,\n    imageMetadata,\n    archiveContext,\n}: MultiDimDataPageContentProps) {\n    const assetMap =\n        archiveContext?.type === \"archive-page\"\n            ? archiveContext.assets.runtime\n            : undefined\n    // A non-empty manager is used in the size calculations\n    // within grapher, so we have to initialize it early with\n    // a truthy value\n    const managerRef = useRef<GrapherManager>({ adminEditPath: \"\" })\n    const grapherStateRef = useRef<GrapherState>(\n        new GrapherState({\n            additionalDataLoaderFn: ((catalogKey) =>\n                loadCatalogData(catalogKey, {\n                    baseUrl: CATALOG_URL,\n                    assetMap,\n                })) as AdditionalGrapherDataFetchFn,\n            manager: managerRef.current,\n            archiveContext,\n            isConfigReady: false,\n        })\n    )\n    const grapherFigureRef = useRef<HTMLDivElement>(null)\n    const [searchParams, setSearchParams] = useSearchParams()\n    const [varDatapageData, setVarDatapageData] =\n        useState<VariableDataPageData | null>(null)\n\n    // Workaround to prevent a race condition when switching between views.\n    // https://github.com/owid/owid-grapher/issues/5727\n    const [isLoadingView, setIsLoadingView] = useState(false)\n\n    const inputTableFetcher = useMemo(\n        () =>\n            getCachingInputTableFetcher(\n                DATA_API_URL,\n                archiveContext,\n                isPreviewing\n            ),\n        [archiveContext, isPreviewing]\n    )\n\n    const titleFragments = useTitleFragments(config)\n    const additionalConfig = useMemo(\n        () => ({ archiveContext }),\n        [archiveContext]\n    )\n    const baseGrapherConfig = useBaseGrapherConfig(additionalConfig)\n\n    const settings = useMemo(() => {\n        const choices = extractMultiDimChoicesFromSearchParams(\n            searchParams,\n            config\n        )\n        return config.filterToAvailableChoices(choices).selectedChoices\n    }, [searchParams, config])\n\n    const updateGrapher = useCallback(\n        (\n            grapherState: GrapherState,\n            settings: MultiDimDimensionChoices,\n            grapherQueryParams: GrapherQueryParams\n        ) => {\n            const newView = config.findViewByDimensions(settings)\n            if (!newView) return\n\n            const variableId = newView.indicators?.[\"y\"]?.[0]?.id\n            if (!variableId) return\n\n            grapherState.isDataReady = false\n            setIsLoadingView(true)\n\n            const datapageDataPromise = cachedGetVariableMetadata(\n                variableId,\n                Boolean(isPreviewing),\n                assetMap\n            ).then((json) => {\n                const mergedMetadata = config.mergeViewMetadata(settings, json)\n                return {\n                    ...getDatapageDataV2(mergedMetadata, newView.config ?? {}),\n                    faqs: mergedMetadata.presentation?.faqs ?? [],\n                }\n            })\n            const grapherConfigUuid = newView.fullConfigId\n\n            const grapherConfigPromise = cachedGetGrapherConfigByUuid(\n                grapherConfigUuid,\n                Boolean(isPreviewing),\n                assetMap\n            )\n            const variables = newView.indicators?.[\"y\"]\n            const adminEditPath =\n                variables?.length === 1\n                    ? `variables/${variables[0].id}/config`\n                    : undefined\n            const analyticsContext = {\n                mdimSlug: slug!,\n                mdimViewConfigId: grapherConfigUuid,\n            }\n            managerRef.current.adminEditPath = adminEditPath\n            managerRef.current.analyticsContext = analyticsContext\n            managerRef.current.adminCreateNarrativeChartPath = `narrative-charts/create?type=multiDim&chartConfigId=${grapherConfigUuid}`\n\n            void Promise.allSettled([datapageDataPromise, grapherConfigPromise])\n                .then(async ([datapageData, grapherConfig]) => {\n                    if (datapageData.status === \"rejected\")\n                        throw new Error(\n                            `Fetching variable by uuid failed: ${grapherConfigUuid}`,\n                            { cause: datapageData.reason }\n                        )\n                    setVarDatapageData(datapageData.value)\n                    if (grapherConfig.status === \"fulfilled\") {\n                        const config = {\n                            ...grapherConfig.value,\n                            ...baseGrapherConfig,\n                        }\n                        const loadDataPromise = inputTableFetcher(\n                            grapherConfig.value.dimensions!,\n                            grapherConfig.value.selectedEntityColors\n                        ).then((inputTable) => {\n                            if (inputTable) grapherState.inputTable = inputTable\n                        })\n\n                        if (slug) {\n                            config.slug = slug // Needed for the URL used for sharing.\n                        }\n                        // Batch the grapher updates to avoid getting intermediate\n                        // grapherChangedParams values, which make the URL update\n                        // multiple times while flashing.\n                        // https://stackoverflow.com/a/48610973/9846837\n\n                        const previousTab = grapherState.activeTab\n\n                        // TODO we may not need to this anymore in React 18.\n                        unstable_batchedUpdates(() => {\n                            grapherState.setAuthoredVersion(config)\n                            grapherState.reset()\n                            grapherState.updateFromObject(config)\n                            grapherState.isConfigReady = true\n\n                            grapherState.populateFromQueryParams(\n                                grapherQueryParams\n                            )\n                        })\n\n                        // The below code needs to run after the data has been loaded, so that it has access\n                        // to the table and its time range\n                        await loadDataPromise\n\n                        grapherState.isDataReady = true\n\n                        // When switching between mdim views, we usually preserve the tab.\n                        // However, if the new chart doesn't support the previously selected tab,\n                        // Grapher automatically switches to a supported one. In such cases,\n                        // we call onChartSwitching to make adjustments that ensure the new view\n                        // is sensible (e.g. updating the time selection when switching from a\n                        // single-time chart like a discrete bar chart to a multi-time chart like\n                        // a line chart).\n                        const currentTab = grapherState.activeTab\n                        if (previousTab !== currentTab)\n                            grapherState.onChartSwitching(\n                                previousTab,\n                                currentTab\n                            )\n                    }\n                })\n                .catch(Sentry.captureException)\n                .finally(() => setIsLoadingView(false))\n        },\n        [\n            assetMap,\n            config,\n            inputTableFetcher,\n            isPreviewing,\n            slug,\n            baseGrapherConfig,\n        ]\n    )\n\n    const handleSettingsChange = useCallback(\n        (settings: MultiDimDimensionChoices) => {\n            const grapher = grapherStateRef.current\n            if (!grapher) return\n\n            const { selectedChoices } =\n                config.filterToAvailableChoices(settings)\n            const newSearchParams = {\n                ...grapher.changedParams,\n                ...selectedChoices,\n            }\n            const newGrapherParams: GrapherQueryParams = {\n                ...newSearchParams,\n                // Pass the previous tab to grapher, but don't set it in URL. We\n                // want it set only when it's not the default, which is handled\n                // by effect that depends on `grapherChangedParams`.\n                tab: grapher.mapGrapherTabToQueryParam(grapher.activeTab),\n            }\n\n            // reset map state if switching to a chart\n            if (newGrapherParams.tab !== GRAPHER_TAB_QUERY_PARAMS.map) {\n                newGrapherParams.globe = \"0\"\n                newGrapherParams.mapSelect = \"\"\n            }\n\n            setSearchParams(newSearchParams, { replace: true })\n            updateGrapher(grapher, selectedChoices, newGrapherParams)\n        },\n        [config, setSearchParams, updateGrapher]\n    )\n\n    useMultiDimAnalytics(slug, config, settings)\n\n    // Set state from query params on page load.\n    useEffect(() => {\n        const grapher = grapherStateRef.current\n        if (!grapher) return\n        const queryParams = {\n            // On first page load, query params may be empty but settings are\n            // already correctly computed, so include them (e.g. for embed\n            // URLs).\n            ...Object.fromEntries(searchParams.entries()),\n            ...settings,\n        }\n        // this is not taking into account what used to be passed as \"manager\"\n        grapher.externalBounds = bounds\n        grapher.bakedGrapherURL = BAKED_GRAPHER_URL\n        grapher.adminBaseUrl = ADMIN_BASE_URL\n        updateGrapher(grapher, settings, queryParams)\n        // NOTE (Martin): This is the only way I was able to set the initial\n        // state on page load. Reconsider after the Grapher state refactor, i.e.\n        // when we decouple Grapher state from the Grapher components. Adding\n        // deps properly to the dep array leads to an infinite loop.\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [])\n\n    // De-mobx grapher.changedParams by transforming it into React state\n    const grapherChangedParams = useMobxStateToReactState(\n        useCallback(() => grapherStateRef.current?.changedParams, []),\n        !!grapherStateRef.current\n    )\n\n    useEffect(() => {\n        if (grapherChangedParams) {\n            setSearchParams(\n                { ...grapherChangedParams, ...settings },\n                { replace: true }\n            )\n        }\n    }, [grapherChangedParams, settings, setSearchParams])\n\n    const grapherCurrentTitle = useMobxStateToReactState(\n        useCallback(() => grapherStateRef.current?.currentTitle, []),\n        !!grapherStateRef.current\n    )\n\n    useEffect(() => {\n        if (grapherCurrentTitle) {\n            document.title = grapherCurrentTitle\n        }\n    }, [grapherCurrentTitle])\n\n    const bounds = useElementBounds(grapherFigureRef)\n\n    useEffect(() => {\n        if (bounds) {\n            grapherStateRef.current.externalBounds = bounds\n        }\n    }, [bounds])\n\n    const hasTopicTags = !!config.config.topicTags?.length\n\n    const relatedResearch = useMemo(\n        () =>\n            processRelatedResearch(\n                relatedResearchCandidates ?? [],\n                config.config.topicTags ?? []\n            ),\n        [relatedResearchCandidates, config.config.topicTags]\n    )\n\n    const faqEntriesForView = useMemo(() => {\n        return _.compact(\n            varDatapageData?.faqs?.flatMap(\n                (faq) => faqEntries?.faqs?.[faq.gdocId]?.[faq.fragmentId]\n            )\n        )\n    }, [varDatapageData?.faqs, faqEntries])\n\n    return (\n        <AttachmentsContext.Provider\n            value={{\n                linkedDocuments: {},\n                imageMetadata,\n                linkedCharts: {},\n                linkedIndicators: {},\n                relatedCharts: [],\n                tags: [],\n            }}\n        >\n            <div className=\"DataPageContent MultiDimDataPageContent grid grid-cols-12-full-width\">\n                <div className=\"bg-blue-10 span-cols-14\">\n                    <div className=\"header__wrapper grid grid-cols-12-full-width\">\n                        <div className=\"header__left col-start-2 span-cols-8 col-sm-start-2 span-sm-cols-12\">\n                            <div className=\"header__supertitle\">Data</div>\n                            <h1 className=\"header__title\">\n                                {config.config.title.title}\n                            </h1>\n                            <div className=\"header__source\">\n                                {titleFragments}\n                            </div>\n                        </div>\n                        {hasTopicTags && tagToSlugMap && (\n                            <TopicTags\n                                className=\"header__right col-start-10 span-cols-4 col-sm-start-2 span-sm-cols-12\"\n                                topicTagsLinks={config.config.topicTags ?? []}\n                                tagToSlugMap={tagToSlugMap}\n                            />\n                        )}\n                        <div className=\"settings-row__wrapper col-start-2 span-cols-12 col-sm-start-2 span-sm-cols-12\">\n                            <MultiDimSettingsPanel\n                                config={config}\n                                settings={settings}\n                                onChange={handleSettingsChange}\n                                disabled={isLoadingView}\n                            />\n                        </div>\n                    </div>\n                </div>\n\n                <div className=\"span-cols-14 grid grid-cols-12-full-width full-width--border\">\n                    <div className=\"chart-key-info col-start-2 span-cols-12\">\n                        <div\n                            id=\"explore-the-data\"\n                            className=\"GrapherWithFallback full-width-on-mobile\"\n                        >\n                            <figure data-grapher-src ref={grapherFigureRef}>\n                                <Grapher\n                                    grapherState={grapherStateRef.current}\n                                />\n                            </figure>\n                        </div>\n                        <div className=\"js--show-warning-block-if-js-disabled\" />\n                        {varDatapageData && (\n                            <AboutThisData\n                                datapageData={varDatapageData}\n                                hasFaq={!!faqEntriesForView?.length}\n                            />\n                        )}\n                    </div>\n                </div>\n                <div className=\"col-start-2 span-cols-12\">\n                    {relatedResearch && relatedResearch.length > 0 && (\n                        <DataPageResearchAndWriting\n                            relatedResearch={relatedResearch}\n                        />\n                    )}\n                </div>\n                {varDatapageData && (\n                    <MetadataSection\n                        attributionShort={varDatapageData.attributionShort}\n                        attributions={varDatapageData.attributions}\n                        canonicalUrl={canonicalUrl}\n                        descriptionProcessing={\n                            varDatapageData.descriptionProcessing\n                        }\n                        faqEntries={{ faqs: faqEntriesForView }}\n                        origins={varDatapageData.origins}\n                        owidProcessingLevel={\n                            varDatapageData.owidProcessingLevel\n                        }\n                        primaryTopic={primaryTopic}\n                        source={varDatapageData.source}\n                        title={varDatapageData.title}\n                        titleVariant={varDatapageData.titleVariant}\n                        archiveContext={archiveContext}\n                    />\n                )}\n            </div>\n        </AttachmentsContext.Provider>\n    )\n}\n\nexport function MultiDimDataPageContent({\n    slug,\n    canonicalUrl,\n    config,\n    isPreviewing,\n    faqEntries,\n    primaryTopic,\n    relatedResearchCandidates,\n    tagToSlugMap,\n    imageMetadata,\n    archiveContext,\n}: MultiDimDataPageContentProps) {\n    return isIframe ? (\n        <MultiDim\n            config={config}\n            slug={slug}\n            queryStr={location.search}\n            archiveContext={archiveContext}\n            isPreviewing={isPreviewing}\n        />\n    ) : (\n        <DataPageContent\n            slug={slug}\n            canonicalUrl={canonicalUrl}\n            config={config}\n            isPreviewing={isPreviewing}\n            faqEntries={faqEntries}\n            primaryTopic={primaryTopic}\n            relatedResearchCandidates={relatedResearchCandidates}\n            tagToSlugMap={tagToSlugMap}\n            imageMetadata={imageMetadata}\n            archiveContext={archiveContext}\n        />\n    )\n}\n","import { TagGraphNode } from \"@ourworldindata/utils\"\n\nexport const SiteNavigationTopic = ({ topic }: { topic: TagGraphNode }) => {\n    return (\n        <li className=\"SiteNavigationTopic\">\n            <a href={`/${topic.slug}`} data-track-note=\"header_navigation\">\n                <span className=\"label\">{topic.name}</span>\n            </a>\n        </li>\n    )\n}\n","import React, { useState, useLayoutEffect } from \"react\"\nimport {\n    TagGraphNode,\n    TagGraphRoot,\n    getAllChildrenOfArea,\n} from \"@ourworldindata/utils\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faArrowRight } from \"@fortawesome/free-solid-svg-icons\"\nimport classnames from \"classnames\"\nimport { SiteNavigationTopic } from \"./SiteNavigationTopic.js\"\n\nexport const SiteNavigationTopics = ({\n    tagGraph,\n    onClose,\n    className,\n}: {\n    tagGraph: TagGraphRoot | null\n    onClose: () => void\n    className?: string\n}) => {\n    const [activeArea, setActiveArea] = useState<TagGraphNode | null>(\n        tagGraph?.children[0] || null\n    )\n\n    const [numTopicColumns, setNumTopicColumns] = useState(1)\n\n    // calculate the number of 10 topic columns we need based on the number of topics\n    // using useLayoutEffect to avoid a flash of the wrong number of columns when switching categories\n    useLayoutEffect(() => {\n        if (activeArea) {\n            const topics = getAllChildrenOfArea(activeArea).filter(\n                (topic) => topic.slug\n            )\n            const numColumns = Math.ceil(topics.length / 10)\n            setNumTopicColumns(numColumns)\n        }\n    }, [activeArea])\n\n    const stopPropagation = (e: React.MouseEvent) => {\n        e.stopPropagation()\n    }\n\n    return tagGraph?.children ? (\n        <div\n            className={classnames(\"SiteNavigationTopics\", className)}\n            // hack: this is to make sure the overlay is closed when clicking\n            // the - visually - empty space to the right of the topics menu. A\n            // click on the overlay in this area looks like a click on the\n            // overlay but is actually a click on the remaining grid columns of\n            // the menu. We then need to use stopPropagation to prevent clicks\n            // within the visible portion of the menu to bubble up and close the\n            // menu (and the overlay).\n            onClick={onClose}\n        >\n            <div className=\"categories\" onClick={stopPropagation}>\n                <div className=\"heading\">Browse by topic</div>\n                <ul>\n                    {tagGraph.children.map((area) => (\n                        <li key={area.id}>\n                            <button\n                                aria-label={`Toggle ${area.name} sub-menu`}\n                                onClick={() => {\n                                    setActiveArea(area)\n                                }}\n                                className={classnames({\n                                    active: area === activeArea,\n                                })}\n                            >\n                                <span>{area.name}</span>\n                                <FontAwesomeIcon icon={faArrowRight} />\n                            </button>\n                        </li>\n                    ))}\n                </ul>\n            </div>\n            {activeArea && (\n                <ul\n                    className={classnames(\"topics\", {\n                        \"columns-medium\": numTopicColumns === 2,\n                        \"columns-large\": numTopicColumns > 2,\n                    })}\n                    onClick={stopPropagation}\n                >\n                    {getAllChildrenOfArea(activeArea)\n                        .filter((topic) => topic.slug)\n                        .map((topic) => (\n                            <SiteNavigationTopic key={topic.id} topic={topic} />\n                        ))}\n                </ul>\n            )}\n        </div>\n    ) : null\n}\n","import { ABOUT_LINKS } from \"./SiteConstants.js\"\n\nexport function SiteAbout() {\n    return (\n        <ul>\n            {ABOUT_LINKS.map(({ title, url }) => (\n                <li key={url}>\n                    <a href={url}>{title}</a>\n                </li>\n            ))}\n        </ul>\n    )\n}\n","export const SiteResources = () => {\n    return (\n        <ul>\n            <li>\n                <a href=\"/latest\">Latest</a>\n            </li>\n            <li>\n                <a href=\"/explorers\">Data Explorers</a>\n            </li>\n            <li>\n                <a href=\"/sdgs\">SDG Tracker</a>\n            </li>\n            <li>\n                <a href=\"/teaching\">Teaching with OWID</a>\n            </li>\n        </ul>\n    )\n}\n","import cx from \"classnames\"\nimport { Autocomplete } from \"./search/Autocomplete.js\"\n\nexport const SiteSearchNavigation = ({\n    isActive,\n    onClose,\n    onActivate,\n}: {\n    isActive: boolean\n    onClose: VoidFunction\n    onActivate: VoidFunction\n}) => {\n    return (\n        <div className={cx(\"SiteSearchNavigation\", { active: isActive })}>\n            <Autocomplete\n                onActivate={onActivate}\n                onClose={onClose}\n                placeholder=\"Search for a topic, chart or article...\"\n            />\n        </div>\n    )\n}\n","import * as React from \"react\"\nimport { useEffect } from \"react\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { faCaretDown, faCaretUp } from \"@fortawesome/free-solid-svg-icons\"\nimport cx from \"classnames\"\n\nexport const SiteNavigationToggle = ({\n    ariaLabel,\n    children,\n    isActive,\n    onToggle,\n    withCaret = false,\n    dropdown,\n    className,\n    shouldScrollIntoView = false,\n    menuRef,\n}: {\n    ariaLabel: string\n    children: React.ReactNode\n    isActive: boolean\n    onToggle: () => void\n    withCaret?: boolean\n    dropdown?: React.ReactNode\n    className?: string\n    shouldScrollIntoView?: boolean\n    menuRef?: React.RefObject<HTMLDivElement | null>\n}) => {\n    useEffect(() => {\n        if (shouldScrollIntoView && isActive && menuRef?.current) {\n            const menuBottomOffset =\n                menuRef.current.getBoundingClientRect().bottom\n\n            // put bottom of the menu at the bottom of the viewport if it's offscreen\n            if (menuBottomOffset > window.innerHeight) {\n                window.scrollTo({\n                    top: menuBottomOffset - window.innerHeight + window.scrollY,\n                    behavior: \"smooth\",\n                })\n            }\n        }\n    }, [shouldScrollIntoView, menuRef, isActive])\n\n    return (\n        <div\n            className={cx(\"SiteNavigationToggle\", className, {\n                active: isActive,\n            })}\n        >\n            <button\n                aria-label={ariaLabel}\n                onClick={onToggle}\n                className={cx(\"SiteNavigationToggle__button\", {\n                    active: isActive,\n                })}\n            >\n                {children}\n                {withCaret && (\n                    <FontAwesomeIcon\n                        className=\"SiteNavigationToggle__caret\"\n                        icon={isActive ? faCaretUp : faCaretDown}\n                    />\n                )}\n            </button>\n            {isActive && dropdown && (\n                <div className=\"SiteNavigationToggle__dropdown\">{dropdown}</div>\n            )}\n        </div>\n    )\n}\n","import { useEffect, useRef } from \"react\"\nimport { SiteNavigationTopic } from \"./SiteNavigationTopic.js\"\nimport { TagGraphNode, getAllChildrenOfArea } from \"@ourworldindata/utils\"\nimport { SiteNavigationToggle } from \"./SiteNavigationToggle.js\"\n\nexport const SiteMobileArea = ({\n    area,\n    isActive,\n    toggleArea,\n}: {\n    area: TagGraphNode\n    isActive: boolean\n    toggleArea: (area: TagGraphNode) => void\n}) => {\n    const areaRef = useRef<HTMLLIElement>(null)\n\n    useEffect(() => {\n        if (isActive && areaRef.current) {\n            areaRef.current.scrollIntoView({ behavior: \"smooth\" })\n        }\n    }, [isActive])\n\n    return (\n        <li key={area.id} className=\"SiteMobileArea\" ref={areaRef}>\n            <SiteNavigationToggle\n                ariaLabel={\n                    isActive ? `Collapse ${area.name}` : `Expand ${area.name}`\n                }\n                isActive={isActive}\n                onToggle={() => toggleArea(area)}\n                dropdown={\n                    <ul>\n                        {getAllChildrenOfArea(area)\n                            .filter((topic) => topic.slug)\n                            .map((topic) => (\n                                <SiteNavigationTopic\n                                    key={topic.id}\n                                    topic={topic}\n                                />\n                            ))}\n                    </ul>\n                }\n                withCaret={true}\n            >\n                {area.name}\n            </SiteNavigationToggle>\n        </li>\n    )\n}\n","import { useRef, useState } from \"react\"\nimport { TagGraphNode, TagGraphRoot } from \"@ourworldindata/utils\"\nimport classnames from \"classnames\"\nimport { SiteNavigationToggle } from \"./SiteNavigationToggle.js\"\nimport { Menu } from \"./SiteConstants.js\"\nimport { SiteAbout } from \"./SiteAbout.js\"\nimport { SiteResources } from \"./SiteResources.js\"\nimport { SiteMobileArea } from \"./SiteMobileArea.js\"\nimport { SEARCH_BASE_PATH } from \"./search/searchUtils.js\"\n\nexport const SiteMobileMenu = ({\n    tagGraph,\n    menu,\n    toggleMenu,\n    className,\n}: {\n    tagGraph: TagGraphRoot | null\n    menu: Menu | null\n    toggleMenu: (menu: Menu) => void\n    className?: string\n}) => {\n    const [activeArea, setActiveArea] = useState<TagGraphNode | null>(null)\n    const menuRef = useRef<HTMLDivElement>(null)\n    const toggleArea = (area: TagGraphNode) => {\n        if (activeArea === area) {\n            setActiveArea(null)\n        } else {\n            setActiveArea(area)\n        }\n    }\n\n    return (\n        <div ref={menuRef} className={classnames(\"SiteMobileMenu\", className)}>\n            <ul>\n                <li>\n                    <span className=\"section__header\">Browse by topic</span>\n                    <ul className=\"section__dropdown--topics\">\n                        {tagGraph?.children.map((area) => (\n                            <SiteMobileArea\n                                key={area.id}\n                                area={area}\n                                isActive={activeArea === area}\n                                toggleArea={toggleArea}\n                            />\n                        ))}\n                    </ul>\n                </li>\n                <li>\n                    <a href={SEARCH_BASE_PATH} className=\"section__header\">\n                        Data\n                    </a>\n                </li>\n                <li>\n                    <a href=\"/data-insights\" className=\"section__header\">\n                        Insights\n                    </a>\n                </li>\n                <li>\n                    <SiteNavigationToggle\n                        ariaLabel=\"Toggle resources menu\"\n                        isActive={menu === Menu.Resources}\n                        onToggle={() =>\n                            toggleMenu(\n                                menu === Menu.Resources\n                                    ? Menu.Topics\n                                    : Menu.Resources\n                            )\n                        }\n                        dropdown={<SiteResources />}\n                        withCaret={true}\n                        className=\"SiteNavigationToggle--lvl1\"\n                        shouldScrollIntoView\n                        menuRef={menuRef}\n                    >\n                        Resources\n                    </SiteNavigationToggle>\n                </li>\n                <li>\n                    <SiteNavigationToggle\n                        ariaLabel=\"Toggle about menu\"\n                        isActive={menu === Menu.About}\n                        onToggle={() =>\n                            toggleMenu(\n                                menu === Menu.About ? Menu.Topics : Menu.About\n                            )\n                        }\n                        dropdown={<SiteAbout />}\n                        withCaret={true}\n                        className=\"SiteNavigationToggle--lvl1\"\n                        shouldScrollIntoView\n                        menuRef={menuRef}\n                    >\n                        About\n                    </SiteNavigationToggle>\n                </li>\n                <li>\n                    <a href=\"/donate\" className=\"donate\">\n                        Donate\n                    </a>\n                </li>\n            </ul>\n        </div>\n    )\n}\n","import { useState, useCallback, useEffect } from \"react\"\nimport {\n    faListUl,\n    faBars,\n    faXmark,\n    faEnvelopeOpenText,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { NewsletterSubscriptionContext } from \"./newsletter.js\"\nimport {\n    NewsletterSubscriptionForm,\n    NewsletterSubscriptionHeader,\n} from \"./NewsletterSubscription.js\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { SiteNavigationTopics } from \"./SiteNavigationTopics.js\"\nimport { SiteLogos } from \"./SiteLogos.js\"\nimport { SiteAbout } from \"./SiteAbout.js\"\nimport { SiteResources } from \"./SiteResources.js\"\nimport { SiteSearchNavigation } from \"./SiteSearchNavigation.js\"\nimport { SiteMobileMenu } from \"./SiteMobileMenu.js\"\nimport { SiteNavigationToggle } from \"./SiteNavigationToggle.js\"\nimport classnames from \"classnames\"\nimport { useTriggerOnEscape } from \"./hooks.js\"\nimport { useTopicTagGraph } from \"./search/searchHooks.js\"\nimport {\n    AUTOCOMPLETE_CONTAINER_ID,\n    DETACHED_MODE_MAX_WIDTH,\n} from \"./search/Autocomplete.js\"\nimport { Menu } from \"./SiteConstants.js\"\nimport { SEARCH_BASE_PATH } from \"./search/searchUtils.js\"\n\n// Note: tranforming the flag from an env string to a boolean in\n// clientSettings.ts is convoluted due to the two-pass SSR/Vite build process.\nconst HAS_DONATION_FLAG = false\n\nexport const SiteNavigation = ({\n    hideDonationFlag,\n    isOnHomepage,\n}: {\n    hideDonationFlag?: boolean\n    isOnHomepage?: boolean\n}) => {\n    const [menu, setActiveMenu] = useState<Menu | null>(null)\n    const [query, setQuery] = useState<string>(\"\")\n    const tagGraph = useTopicTagGraph()\n\n    const isActiveMobileMenu =\n        menu !== null &&\n        [Menu.Topics, Menu.Resources, Menu.About].includes(menu)\n\n    // useCallback so as to not trigger a re-render for SiteSearchNavigation, which remounts\n    // Autocomplete and breaks it\n    const closeOverlay = useCallback(() => {\n        setActiveMenu(null)\n        setQuery(\"\")\n    }, [])\n\n    // Same SiteSearchNavigation re-rendering case as above\n    const setSearchAsActiveMenu = useCallback(() => {\n        setActiveMenu(Menu.Search)\n        // Forced DOM manipulation of the algolia autocomplete panel position 🙃\n        // Without this, the panel initially renders at the same width as the shrunk search input\n        // Fortunately we only have to do this when it mounts - it takes care of resizes\n        setTimeout(() => {\n            // Only run when screen size is large, .aa-DetachedContainer gets positioned correctly\n            if (window.innerWidth <= DETACHED_MODE_MAX_WIDTH) return\n            const [panel, autocompleteContainer] = [\n                \".aa-Panel\",\n                AUTOCOMPLETE_CONTAINER_ID,\n            ].map((className) => document.querySelector<HTMLElement>(className))\n            if (panel && autocompleteContainer) {\n                const bounds = autocompleteContainer.getBoundingClientRect()\n                panel.style.left = `${bounds.left}px`\n            }\n        }, 10)\n\n        setTimeout(() => {\n            const input = document.querySelector<HTMLElement>(\".aa-Input\")\n            if (input) {\n                input.focus()\n                input.setAttribute(\"required\", \"true\")\n            }\n        }, 10)\n    }, [])\n\n    const toggleMenu = (root: Menu) => {\n        if (menu === root) {\n            closeOverlay()\n        } else {\n            setActiveMenu(root)\n        }\n    }\n\n    // Open overlay back when query entered after pressing \"esc\"\n    useEffect(() => {\n        if (query) {\n            setActiveMenu(Menu.Search)\n        }\n    }, [query])\n\n    useTriggerOnEscape(closeOverlay, { active: menu !== null })\n\n    return (\n        <>\n            {menu && <div className=\"overlay\" onClick={closeOverlay} />}\n            <div className=\"site-navigation\">\n                <div className=\"wrapper\">\n                    <div\n                        className={classnames(\"site-navigation-bar\", {\n                            \"search-active\": menu === Menu.Search,\n                        })}\n                    >\n                        <SiteNavigationToggle\n                            ariaLabel=\"Toggle menu\"\n                            isActive={isActiveMobileMenu}\n                            onToggle={() => toggleMenu(Menu.Topics)}\n                            className=\"SiteNavigationToggle--mobile-menu hide-sm-up\"\n                            dropdown={\n                                <SiteMobileMenu\n                                    menu={menu}\n                                    toggleMenu={toggleMenu}\n                                    tagGraph={tagGraph}\n                                    className=\"hide-sm-up\"\n                                />\n                            }\n                        >\n                            <FontAwesomeIcon\n                                icon={isActiveMobileMenu ? faXmark : faBars}\n                            />\n                        </SiteNavigationToggle>\n                        <SiteLogos />\n                        <nav className=\"site-primary-links hide-sm-only\">\n                            <ul>\n                                <li>\n                                    <SiteNavigationToggle\n                                        ariaLabel=\"Toggle topics menu\"\n                                        isActive={menu === Menu.Topics}\n                                        onToggle={() => toggleMenu(Menu.Topics)}\n                                        dropdown={\n                                            <SiteNavigationTopics\n                                                onClose={closeOverlay}\n                                                tagGraph={tagGraph}\n                                                className=\"hide-sm-only\"\n                                            />\n                                        }\n                                        className=\"topics\"\n                                    >\n                                        <FontAwesomeIcon\n                                            icon={faListUl}\n                                            style={{ marginRight: \"8px\" }}\n                                        />\n                                        Browse by topic\n                                    </SiteNavigationToggle>\n                                </li>\n                                <li>\n                                    <a href={SEARCH_BASE_PATH}>Data</a>\n                                </li>\n                                <li>\n                                    <a href=\"/data-insights\">Insights</a>\n                                </li>\n                                <li className=\"with-relative-dropdown\">\n                                    <SiteNavigationToggle\n                                        ariaLabel=\"Toggle resources menu\"\n                                        isActive={menu === Menu.Resources}\n                                        onToggle={() =>\n                                            toggleMenu(Menu.Resources)\n                                        }\n                                        dropdown={<SiteResources />}\n                                        withCaret={true}\n                                    >\n                                        Resources\n                                    </SiteNavigationToggle>\n                                </li>\n                                <li className=\"with-relative-dropdown\">\n                                    <SiteNavigationToggle\n                                        ariaLabel=\"Toggle about menu\"\n                                        isActive={menu === Menu.About}\n                                        onToggle={() => toggleMenu(Menu.About)}\n                                        dropdown={<SiteAbout />}\n                                        withCaret={true}\n                                    >\n                                        About\n                                    </SiteNavigationToggle>\n                                </li>\n                            </ul>\n                        </nav>\n                        <div className=\"site-search-cta\">\n                            {!isOnHomepage && (\n                                <SiteSearchNavigation\n                                    isActive={menu === Menu.Search}\n                                    onClose={closeOverlay}\n                                    onActivate={setSearchAsActiveMenu}\n                                />\n                            )}\n                            <SiteNavigationToggle\n                                ariaLabel=\"Toggle subscribe menu\"\n                                isActive={menu === Menu.Subscribe}\n                                onToggle={() => toggleMenu(Menu.Subscribe)}\n                                dropdown={\n                                    <>\n                                        <NewsletterSubscriptionHeader />\n                                        <NewsletterSubscriptionForm\n                                            context={\n                                                NewsletterSubscriptionContext.Floating\n                                            }\n                                        />\n                                    </>\n                                }\n                                className=\"newsletter-subscription\"\n                            >\n                                <span className=\"hide-lg-down\">Subscribe</span>\n                                <FontAwesomeIcon\n                                    className=\"hide-lg-up\"\n                                    icon={\n                                        menu === Menu.Subscribe\n                                            ? faXmark\n                                            : faEnvelopeOpenText\n                                    }\n                                />\n                            </SiteNavigationToggle>\n                            <a\n                                href=\"/donate\"\n                                className=\"donate\"\n                                data-track-note=\"header_navigation\"\n                            >\n                                Donate\n                            </a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            {HAS_DONATION_FLAG && !hideDonationFlag && (\n                <a href=\"/donate\" className=\"site-navigation__giving\">\n                    It’s Giving Season. Help us do more with a donation.\n                </a>\n            )}\n        </>\n    )\n}\n","import { ArchiveMetaInformation } from \"@ourworldindata/types\"\nimport {\n    ArchiveWritingNavigation,\n    ArchiveDataNavigation,\n} from \"./archive/ArchiveNavigation.js\"\nimport { SiteNavigation } from \"./SiteNavigation.js\"\n\ninterface SiteHeaderProps {\n    hideDonationFlag?: boolean\n    /**\n     * Stops the search bar from being rendered, as we show it in the page content on the homepage\n     */\n    isOnHomepage?: boolean\n\n    // If this is an archived page, we need to render a different version of the site header\n    archiveInfo?: ArchiveMetaInformation\n}\n\nexport const SiteHeaderNavigation = (props: SiteHeaderProps) => {\n    const archiveInfo = props.archiveInfo\n    if (archiveInfo?.archiveNavigation) {\n        const archiveNavigation = archiveInfo.archiveNavigation\n        const nav =\n            archiveNavigation.contentType === \"writing\" ? (\n                <ArchiveWritingNavigation\n                    archivalDate={archiveInfo.archivalDate}\n                    {...archiveNavigation}\n                />\n            ) : (\n                <ArchiveDataNavigation\n                    archivalDate={archiveInfo.archivalDate}\n                    {...archiveNavigation}\n                />\n            )\n        return nav\n    }\n\n    return (\n        <SiteNavigation\n            hideDonationFlag={props.hideDonationFlag}\n            isOnHomepage={props.isOnHomepage}\n        />\n    )\n}\n\nexport const SiteHeader = (props: SiteHeaderProps) => (\n    <header className=\"site-header\">\n        <div className=\"site-navigation-root\">\n            <SiteHeaderNavigation {...props} />\n        </div>\n    </header>\n)\n","/**\n * uuidv7: A JavaScript implementation of UUID version 7\n *\n * @license Apache-2.0\n * @copyright 2021-2024 LiosK\n * @packageDocumentation\n */\nconst DIGITS = \"0123456789abcdef\";\n/** Represents a UUID as a 16-byte byte array. */\nexport class UUID {\n    /** @param bytes - The 16-byte byte array representation. */\n    constructor(bytes) {\n        this.bytes = bytes;\n    }\n    /**\n     * Creates an object from the internal representation, a 16-byte byte array\n     * containing the binary UUID representation in the big-endian byte order.\n     *\n     * This method does NOT shallow-copy the argument, and thus the created object\n     * holds the reference to the underlying buffer.\n     *\n     * @throws TypeError if the length of the argument is not 16.\n     */\n    static ofInner(bytes) {\n        if (bytes.length !== 16) {\n            throw new TypeError(\"not 128-bit length\");\n        }\n        else {\n            return new UUID(bytes);\n        }\n    }\n    /**\n     * Builds a byte array from UUIDv7 field values.\n     *\n     * @param unixTsMs - A 48-bit `unix_ts_ms` field value.\n     * @param randA - A 12-bit `rand_a` field value.\n     * @param randBHi - The higher 30 bits of 62-bit `rand_b` field value.\n     * @param randBLo - The lower 32 bits of 62-bit `rand_b` field value.\n     * @throws RangeError if any field value is out of the specified range.\n     */\n    static fromFieldsV7(unixTsMs, randA, randBHi, randBLo) {\n        if (!Number.isInteger(unixTsMs) ||\n            !Number.isInteger(randA) ||\n            !Number.isInteger(randBHi) ||\n            !Number.isInteger(randBLo) ||\n            unixTsMs < 0 ||\n            randA < 0 ||\n            randBHi < 0 ||\n            randBLo < 0 ||\n            unixTsMs > 281474976710655 ||\n            randA > 0xfff ||\n            randBHi > 1073741823 ||\n            randBLo > 4294967295) {\n            throw new RangeError(\"invalid field value\");\n        }\n        const bytes = new Uint8Array(16);\n        bytes[0] = unixTsMs / 2 ** 40;\n        bytes[1] = unixTsMs / 2 ** 32;\n        bytes[2] = unixTsMs / 2 ** 24;\n        bytes[3] = unixTsMs / 2 ** 16;\n        bytes[4] = unixTsMs / 2 ** 8;\n        bytes[5] = unixTsMs;\n        bytes[6] = 0x70 | (randA >>> 8);\n        bytes[7] = randA;\n        bytes[8] = 0x80 | (randBHi >>> 24);\n        bytes[9] = randBHi >>> 16;\n        bytes[10] = randBHi >>> 8;\n        bytes[11] = randBHi;\n        bytes[12] = randBLo >>> 24;\n        bytes[13] = randBLo >>> 16;\n        bytes[14] = randBLo >>> 8;\n        bytes[15] = randBLo;\n        return new UUID(bytes);\n    }\n    /**\n     * Builds a byte array from a string representation.\n     *\n     * This method accepts the following formats:\n     *\n     * - 32-digit hexadecimal format without hyphens: `0189dcd553117d408db09496a2eef37b`\n     * - 8-4-4-4-12 hyphenated format: `0189dcd5-5311-7d40-8db0-9496a2eef37b`\n     * - Hyphenated format with surrounding braces: `{0189dcd5-5311-7d40-8db0-9496a2eef37b}`\n     * - RFC 9562 URN format: `urn:uuid:0189dcd5-5311-7d40-8db0-9496a2eef37b`\n     *\n     * Leading and trailing whitespaces represents an error.\n     *\n     * @throws SyntaxError if the argument could not parse as a valid UUID string.\n     */\n    static parse(uuid) {\n        var _a, _b, _c, _d;\n        let hex = undefined;\n        switch (uuid.length) {\n            case 32:\n                hex = (_a = /^[0-9a-f]{32}$/i.exec(uuid)) === null || _a === void 0 ? void 0 : _a[0];\n                break;\n            case 36:\n                hex =\n                    (_b = /^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n                        .exec(uuid)) === null || _b === void 0 ? void 0 : _b.slice(1, 6).join(\"\");\n                break;\n            case 38:\n                hex =\n                    (_c = /^\\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\\}$/i\n                        .exec(uuid)) === null || _c === void 0 ? void 0 : _c.slice(1, 6).join(\"\");\n                break;\n            case 45:\n                hex =\n                    (_d = /^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n                        .exec(uuid)) === null || _d === void 0 ? void 0 : _d.slice(1, 6).join(\"\");\n                break;\n            default:\n                break;\n        }\n        if (hex) {\n            const inner = new Uint8Array(16);\n            for (let i = 0; i < 16; i += 4) {\n                const n = parseInt(hex.substring(2 * i, 2 * i + 8), 16);\n                inner[i + 0] = n >>> 24;\n                inner[i + 1] = n >>> 16;\n                inner[i + 2] = n >>> 8;\n                inner[i + 3] = n;\n            }\n            return new UUID(inner);\n        }\n        else {\n            throw new SyntaxError(\"could not parse UUID string\");\n        }\n    }\n    /**\n     * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n     * (`0189dcd5-5311-7d40-8db0-9496a2eef37b`).\n     */\n    toString() {\n        let text = \"\";\n        for (let i = 0; i < this.bytes.length; i++) {\n            text += DIGITS.charAt(this.bytes[i] >>> 4);\n            text += DIGITS.charAt(this.bytes[i] & 0xf);\n            if (i === 3 || i === 5 || i === 7 || i === 9) {\n                text += \"-\";\n            }\n        }\n        return text;\n    }\n    /**\n     * @returns The 32-digit hexadecimal representation without hyphens\n     * (`0189dcd553117d408db09496a2eef37b`).\n     */\n    toHex() {\n        let text = \"\";\n        for (let i = 0; i < this.bytes.length; i++) {\n            text += DIGITS.charAt(this.bytes[i] >>> 4);\n            text += DIGITS.charAt(this.bytes[i] & 0xf);\n        }\n        return text;\n    }\n    /** @returns The 8-4-4-4-12 canonical hexadecimal string representation. */\n    toJSON() {\n        return this.toString();\n    }\n    /**\n     * Reports the variant field value of the UUID or, if appropriate, \"NIL\" or\n     * \"MAX\".\n     *\n     * For convenience, this method reports \"NIL\" or \"MAX\" if `this` represents\n     * the Nil or Max UUID, although the Nil and Max UUIDs are technically\n     * subsumed under the variants `0b0` and `0b111`, respectively.\n     */\n    getVariant() {\n        const n = this.bytes[8] >>> 4;\n        if (n < 0) {\n            throw new Error(\"unreachable\");\n        }\n        else if (n <= 0b0111) {\n            return this.bytes.every((e) => e === 0) ? \"NIL\" : \"VAR_0\";\n        }\n        else if (n <= 0b1011) {\n            return \"VAR_10\";\n        }\n        else if (n <= 0b1101) {\n            return \"VAR_110\";\n        }\n        else if (n <= 0b1111) {\n            return this.bytes.every((e) => e === 0xff) ? \"MAX\" : \"VAR_RESERVED\";\n        }\n        else {\n            throw new Error(\"unreachable\");\n        }\n    }\n    /**\n     * Returns the version field value of the UUID or `undefined` if the UUID does\n     * not have the variant field value of `0b10`.\n     */\n    getVersion() {\n        return this.getVariant() === \"VAR_10\" ? this.bytes[6] >>> 4 : undefined;\n    }\n    /** Creates an object from `this`. */\n    clone() {\n        return new UUID(this.bytes.slice(0));\n    }\n    /** Returns true if `this` is equivalent to `other`. */\n    equals(other) {\n        return this.compareTo(other) === 0;\n    }\n    /**\n     * Returns a negative integer, zero, or positive integer if `this` is less\n     * than, equal to, or greater than `other`, respectively.\n     */\n    compareTo(other) {\n        for (let i = 0; i < 16; i++) {\n            const diff = this.bytes[i] - other.bytes[i];\n            if (diff !== 0) {\n                return Math.sign(diff);\n            }\n        }\n        return 0;\n    }\n}\n/**\n * Encapsulates the monotonic counter state.\n *\n * This class provides APIs to utilize a separate counter state from that of the\n * global generator used by {@link uuidv7} and {@link uuidv7obj}. In addition to\n * the default {@link generate} method, this class has {@link generateOrAbort}\n * that is useful to absolutely guarantee the monotonically increasing order of\n * generated UUIDs. See their respective documentation for details.\n */\nexport class V7Generator {\n    /**\n     * Creates a generator object with the default random number generator, or\n     * with the specified one if passed as an argument. The specified random\n     * number generator should be cryptographically strong and securely seeded.\n     */\n    constructor(randomNumberGenerator) {\n        this.timestamp = 0;\n        this.counter = 0;\n        this.random = randomNumberGenerator !== null && randomNumberGenerator !== void 0 ? randomNumberGenerator : getDefaultRandom();\n    }\n    /**\n     * Generates a new UUIDv7 object from the current timestamp, or resets the\n     * generator upon significant timestamp rollback.\n     *\n     * This method returns a monotonically increasing UUID by reusing the previous\n     * timestamp even if the up-to-date timestamp is smaller than the immediately\n     * preceding UUID's. However, when such a clock rollback is considered\n     * significant (i.e., by more than ten seconds), this method resets the\n     * generator and returns a new UUID based on the given timestamp, breaking the\n     * increasing order of UUIDs.\n     *\n     * See {@link generateOrAbort} for the other mode of generation and\n     * {@link generateOrResetCore} for the low-level primitive.\n     */\n    generate() {\n        return this.generateOrResetCore(Date.now(), 10000);\n    }\n    /**\n     * Generates a new UUIDv7 object from the current timestamp, or returns\n     * `undefined` upon significant timestamp rollback.\n     *\n     * This method returns a monotonically increasing UUID by reusing the previous\n     * timestamp even if the up-to-date timestamp is smaller than the immediately\n     * preceding UUID's. However, when such a clock rollback is considered\n     * significant (i.e., by more than ten seconds), this method aborts and\n     * returns `undefined` immediately.\n     *\n     * See {@link generate} for the other mode of generation and\n     * {@link generateOrAbortCore} for the low-level primitive.\n     */\n    generateOrAbort() {\n        return this.generateOrAbortCore(Date.now(), 10000);\n    }\n    /**\n     * Generates a new UUIDv7 object from the `unixTsMs` passed, or resets the\n     * generator upon significant timestamp rollback.\n     *\n     * This method is equivalent to {@link generate} except that it takes a custom\n     * timestamp and clock rollback allowance.\n     *\n     * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n     * considered significant. A suggested value is `10_000` (milliseconds).\n     * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n     */\n    generateOrResetCore(unixTsMs, rollbackAllowance) {\n        let value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n        if (value === undefined) {\n            // reset state and resume\n            this.timestamp = 0;\n            value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n        }\n        return value;\n    }\n    /**\n     * Generates a new UUIDv7 object from the `unixTsMs` passed, or returns\n     * `undefined` upon significant timestamp rollback.\n     *\n     * This method is equivalent to {@link generateOrAbort} except that it takes a\n     * custom timestamp and clock rollback allowance.\n     *\n     * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n     * considered significant. A suggested value is `10_000` (milliseconds).\n     * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n     */\n    generateOrAbortCore(unixTsMs, rollbackAllowance) {\n        const MAX_COUNTER = 4398046511103;\n        if (!Number.isInteger(unixTsMs) ||\n            unixTsMs < 1 ||\n            unixTsMs > 281474976710655) {\n            throw new RangeError(\"`unixTsMs` must be a 48-bit positive integer\");\n        }\n        else if (rollbackAllowance < 0 || rollbackAllowance > 281474976710655) {\n            throw new RangeError(\"`rollbackAllowance` out of reasonable range\");\n        }\n        if (unixTsMs > this.timestamp) {\n            this.timestamp = unixTsMs;\n            this.resetCounter();\n        }\n        else if (unixTsMs + rollbackAllowance >= this.timestamp) {\n            // go on with previous timestamp if new one is not much smaller\n            this.counter++;\n            if (this.counter > MAX_COUNTER) {\n                // increment timestamp at counter overflow\n                this.timestamp++;\n                this.resetCounter();\n            }\n        }\n        else {\n            // abort if clock went backwards to unbearable extent\n            return undefined;\n        }\n        return UUID.fromFieldsV7(this.timestamp, Math.trunc(this.counter / 2 ** 30), this.counter & (2 ** 30 - 1), this.random.nextUint32());\n    }\n    /** Initializes the counter at a 42-bit random integer. */\n    resetCounter() {\n        this.counter =\n            this.random.nextUint32() * 0x400 + (this.random.nextUint32() & 0x3ff);\n    }\n    /**\n     * Generates a new UUIDv4 object utilizing the random number generator inside.\n     *\n     * @internal\n     */\n    generateV4() {\n        const bytes = new Uint8Array(Uint32Array.of(this.random.nextUint32(), this.random.nextUint32(), this.random.nextUint32(), this.random.nextUint32()).buffer);\n        bytes[6] = 0x40 | (bytes[6] >>> 4);\n        bytes[8] = 0x80 | (bytes[8] >>> 2);\n        return UUID.ofInner(bytes);\n    }\n}\n/** Returns the default random number generator available in the environment. */\nconst getDefaultRandom = () => {\n    // detect Web Crypto API\n    if (typeof crypto !== \"undefined\" &&\n        typeof crypto.getRandomValues !== \"undefined\") {\n        return new BufferedCryptoRandom();\n    }\n    else {\n        // fall back on Math.random() unless the flag is set to true\n        if (typeof UUIDV7_DENY_WEAK_RNG !== \"undefined\" && UUIDV7_DENY_WEAK_RNG) {\n            throw new Error(\"no cryptographically strong RNG available\");\n        }\n        return {\n            nextUint32: () => Math.trunc(Math.random() * 65536) * 65536 +\n                Math.trunc(Math.random() * 65536),\n        };\n    }\n};\n/**\n * Wraps `crypto.getRandomValues()` to enable buffering; this uses a small\n * buffer by default to avoid both unbearable throughput decline in some\n * environments and the waste of time and space for unused values.\n */\nclass BufferedCryptoRandom {\n    constructor() {\n        this.buffer = new Uint32Array(8);\n        this.cursor = 0xffff;\n    }\n    nextUint32() {\n        if (this.cursor >= this.buffer.length) {\n            crypto.getRandomValues(this.buffer);\n            this.cursor = 0;\n        }\n        return this.buffer[this.cursor++];\n    }\n}\nlet defaultGenerator;\n/**\n * Generates a UUIDv7 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nexport const uuidv7 = () => uuidv7obj().toString();\n/** Generates a UUIDv7 object. */\nexport const uuidv7obj = () => (defaultGenerator || (defaultGenerator = new V7Generator())).generate();\n/**\n * Generates a UUIDv4 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nexport const uuidv4 = () => uuidv4obj().toString();\n/** Generates a UUIDv4 object. */\nexport const uuidv4obj = () => (defaultGenerator || (defaultGenerator = new V7Generator())).generateV4();\n","import {\n    faCheck,\n    faCircleXmark,\n    faXmark,\n} from \"@fortawesome/free-solid-svg-icons\"\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport cx from \"classnames\"\nimport * as _ from \"lodash-es\"\nimport {\n    type FormEvent,\n    type ReactNode,\n    useEffect,\n    useRef,\n    useState,\n} from \"react\"\nimport { Form } from \"react-aria-components\"\nimport { match } from \"ts-pattern\"\nimport { uuidv7 } from \"uuidv7\"\nimport { Button, RadioButton } from \"@ourworldindata/components\"\nimport {\n    type UserSurveyExperimentArm,\n    type UserSurveyRoleAnswer,\n} from \"@ourworldindata/types\"\nimport { getExperimentState } from \"@ourworldindata/utils\"\nimport { SiteAnalytics } from \"../../SiteAnalytics.js\"\nimport {\n    getUserSurveyWidgetEligibility,\n    markUserSurveyAnswered,\n    markUserSurveyDismissed,\n} from \"../../userSurvey.js\"\nimport { useTriggerOnEscape } from \"../../hooks.js\"\n\nconst FEEDBACK_EMAIL_API_URL = \"https://feedback.owid.io\"\nconst FEEDBACK_STORAGE_API_URL = \"/api/user-survey\"\nconst USER_SURVEY_NAME = \"user-role-v1\"\nconst USER_SURVEY_EXPERIMENT_ID = \"exp-user-survey-role-v1\"\nconst USER_SURVEY_FREE_FORM_INPUT_ID = \"user-survey-free-form-input\"\nconst USER_SURVEY_FOLLOW_UP_INPUT_ID = \"user-survey-follow-up-input\"\nconst USER_SURVEY_TITLE_ID = \"user-survey-title\"\nconst USER_SURVEY_FOLLOW_UP_TITLE_ID = \"user-survey-follow-up-title\"\nconst USER_SURVEY_FOLLOW_UP_DESCRIPTION_ID = \"user-survey-follow-up-description\"\n\nconst siteAnalytics = new SiteAnalytics()\nconst responseId = uuidv7()\n\ntype RoleOption = {\n    id: string\n    label: string\n    description?: string\n    hasInlineInput?: boolean\n}\n\ntype SurveyState =\n    | { phase: \"hidden\" }\n    | { phase: \"role\"; experimentArm: UserSurveyExperimentArm }\n    | { phase: \"thankYou\"; roleAnswer: UserSurveyRoleAnswer }\n\ntype UserSurveyRoleStepProps = {\n    onDismiss: () => void\n    onAnswered: (roleAnswer: UserSurveyRoleAnswer) => void\n}\n\nconst LONG_LIST_OPTIONS: RoleOption[] = _.shuffle<RoleOption>([\n    {\n        id: \"policy-professional\",\n        label: \"Public policy professional\",\n        description:\n            \"Policy advisor, government official, or consultant working on public policy\",\n    },\n    {\n        id: \"journalist-or-media-professional\",\n        label: \"Journalist or media professional\",\n        description:\n            \"Reporting, writing, editing, or publishing for media or online platforms\",\n    },\n    {\n        id: \"educator\",\n        label: \"Educator\",\n        description: \"Teacher, lecturer, or professor\",\n    },\n    {\n        id: \"student\",\n        label: \"Student\",\n        description: \"School or university student\",\n    },\n    {\n        id: \"researcher-or-scientist\",\n        label: \"Researcher or scientist\",\n        description: \"Academic or applied research, including think tanks\",\n    },\n    {\n        id: \"ngo-or-civil-society-professional\",\n        label: \"NGO or civil society professional\",\n        description: \"Working in a local or international nonprofit\",\n    },\n    {\n        id: \"business-or-investment-professional\",\n        label: \"Business or investment professional\",\n        description:\n            \"Working in the private sector, including finance, industry, or startups\",\n    },\n    {\n        id: \"interested-member-of-the-public\",\n        label: \"Interested member of the public\",\n        description:\n            \"Using the site to learn, explore, or inform personal decisions\",\n    },\n    {\n        id: \"health-professional\",\n        label: \"Health professional\",\n        description: \"Clinician, public health worker, health practitioner\",\n    },\n]).concat([{ id: \"other\", label: \"Other\", hasInlineInput: true }])\n\nconst SHORT_LIST_OPTIONS: RoleOption[] = _.shuffle<RoleOption>([\n    {\n        id: \"government-civil-society-professional\",\n        label: \"Government or civil society professional\",\n    },\n    {\n        id: \"researcher-educator-student\",\n        label: \"Researcher, educator, or student\",\n    },\n    {\n        id: \"business-professional\",\n        label: \"Business professional\",\n    },\n    {\n        id: \"media-professional-or-journalist\",\n        label: \"Media professional or journalist\",\n    },\n    {\n        id: \"interested-member-of-public\",\n        label: \"Interested member of the public\",\n    },\n]).concat([{ id: \"other\", label: \"Other\", hasInlineInput: true }])\n\nfunction getAssignedExperimentArm() {\n    const assignedArm = getExperimentState()[USER_SURVEY_EXPERIMENT_ID]?.arm\n    if (\n        assignedArm === \"long-list\" ||\n        assignedArm === \"short-list\" ||\n        assignedArm === \"free-form\"\n    )\n        return assignedArm\n    return null\n}\n\nfunction isValidRoleAnswer(\n    selectedOptionId: string | null,\n    otherInput: string\n) {\n    return (\n        selectedOptionId !== null &&\n        (selectedOptionId !== \"other\" || otherInput.trim().length > 0)\n    )\n}\n\nfunction getFreeFormInput(selectedOptionId: string, otherInput: string) {\n    if (selectedOptionId !== \"other\") return undefined\n    return otherInput.trim()\n}\n\nfunction getSelectedOptionMeta(\n    selectedOptionId: string,\n    options: readonly { id: string; label: string }[]\n) {\n    const selectedOptionIndex = options.findIndex(\n        (option) => option.id === selectedOptionId\n    )\n    if (selectedOptionIndex === -1) return undefined\n\n    return {\n        optionIndex: selectedOptionIndex,\n        optionLabel: options[selectedOptionIndex].label,\n    }\n}\n\nfunction getFeedbackEnvironment() {\n    return `Current URL: ${window.location.href}\\nUser Agent: ${navigator.userAgent}\\nViewport: ${window.innerWidth}x${window.innerHeight}`\n}\n\nasync function sendFeedbackEmail({ message }: { message: string }) {\n    const response = await fetch(FEEDBACK_EMAIL_API_URL, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({\n            name: \"\",\n            email: \"\",\n            message,\n            environment: getFeedbackEnvironment(),\n        }),\n    })\n\n    if (!response.ok) {\n        throw new Error(\n            `Sending user survey feedback failed: ${response.status} ${response.statusText}`\n        )\n    }\n}\n\nasync function storeFeedback({\n    surveyName,\n    responseId,\n    feedbackAnswer,\n    roleAnswer,\n}: {\n    surveyName: string\n    responseId: string\n    feedbackAnswer: string\n    roleAnswer: UserSurveyRoleAnswer\n}) {\n    const response = await fetch(FEEDBACK_STORAGE_API_URL, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({\n            surveyName,\n            responseId,\n            feedbackAnswer,\n            roleAnswer,\n        }),\n    })\n\n    if (!response.ok) {\n        throw new Error(\n            `Storing user survey feedback failed: ${response.status} ${response.statusText}`\n        )\n    }\n}\n\nasync function submitFeedback({\n    surveyName,\n    responseId,\n    feedbackAnswer,\n    roleAnswer,\n}: {\n    surveyName: string\n    responseId: string\n    feedbackAnswer: string\n    roleAnswer: UserSurveyRoleAnswer\n}) {\n    await Promise.all([\n        sendFeedbackEmail({\n            message: buildFeedbackMessage({\n                surveyName,\n                responseId,\n                feedbackAnswer,\n                roleAnswer,\n            }),\n        }),\n        storeFeedback({\n            surveyName,\n            responseId,\n            feedbackAnswer,\n            roleAnswer,\n        }),\n    ])\n}\n\nfunction buildFeedbackMessage({\n    surveyName,\n    responseId,\n    feedbackAnswer,\n    roleAnswer,\n}: {\n    surveyName: string\n    responseId: string\n    feedbackAnswer: string\n    roleAnswer: UserSurveyRoleAnswer\n}) {\n    const messageLines = [\n        \"User survey context:\",\n        `survey_name: ${surveyName}`,\n        `response_id: ${responseId}`,\n        `experiment_arm: ${roleAnswer.experimentArm}`,\n    ]\n\n    if (roleAnswer.freeFormInput !== undefined) {\n        messageLines.push(`free_form_input: ${roleAnswer.freeFormInput}`)\n    }\n    if (\"optionId\" in roleAnswer) {\n        messageLines.push(`option_id: ${roleAnswer.optionId}`)\n        messageLines.push(`option_label: ${roleAnswer.optionLabel}`)\n        messageLines.push(`option_index: ${roleAnswer.optionIndex}`)\n    }\n\n    messageLines.push(\"\", \"Follow-up feedback:\", feedbackAnswer)\n    return messageLines.join(\"\\n\")\n}\n\nfunction logRoleSubmit({\n    surveyName,\n    responseId,\n    roleAnswer,\n}: {\n    surveyName: string\n    responseId: string\n    roleAnswer: UserSurveyRoleAnswer\n}) {\n    if (roleAnswer.experimentArm === \"free-form\") {\n        siteAnalytics.logUserSurveyRoleSubmit({\n            surveyName,\n            responseId,\n            experimentArm: roleAnswer.experimentArm,\n            freeFormInput: roleAnswer.freeFormInput,\n        })\n        return\n    }\n\n    siteAnalytics.logUserSurveyRoleSubmit({\n        surveyName,\n        responseId,\n        experimentArm: roleAnswer.experimentArm,\n        optionId: roleAnswer.optionId,\n        optionLabel: roleAnswer.optionLabel,\n        optionIndex: roleAnswer.optionIndex,\n        ...(roleAnswer.freeFormInput !== undefined\n            ? { freeFormInput: roleAnswer.freeFormInput }\n            : {}),\n    })\n}\n\nfunction submitRoleAnswer({\n    roleAnswer,\n    onAnswered,\n}: {\n    roleAnswer: UserSurveyRoleAnswer\n    onAnswered: (roleAnswer: UserSurveyRoleAnswer) => void\n}) {\n    logRoleSubmit({\n        surveyName: USER_SURVEY_NAME,\n        responseId,\n        roleAnswer,\n    })\n    onAnswered(roleAnswer)\n}\n\nfunction buildListRoleAnswer({\n    experimentArm,\n    selectedOptionId,\n    otherInput,\n    options,\n}: {\n    experimentArm: \"long-list\" | \"short-list\"\n    selectedOptionId: string | null\n    otherInput: string\n    options: readonly { id: string; label: string }[]\n}): UserSurveyRoleAnswer | undefined {\n    if (selectedOptionId === null) return undefined\n\n    const selectedOption = getSelectedOptionMeta(selectedOptionId, options)\n    if (!selectedOption) return undefined\n\n    const freeFormInput = getFreeFormInput(selectedOptionId, otherInput)\n    return {\n        experimentArm,\n        freeFormInput,\n        optionId: selectedOptionId,\n        optionLabel: selectedOption.optionLabel,\n        optionIndex: selectedOption.optionIndex,\n    }\n}\n\nfunction UserSurveyDialog({\n    className,\n    title,\n    onDismiss,\n    children,\n}: {\n    className: string\n    title: string\n    onDismiss: () => void\n    children: ReactNode\n}) {\n    return (\n        <aside\n            className={cx(\"user-survey\", className)}\n            role=\"region\"\n            aria-labelledby={USER_SURVEY_TITLE_ID}\n        >\n            <div className=\"user-survey__header\">\n                <h3 id={USER_SURVEY_TITLE_ID} className=\"user-survey__title\">\n                    {title}\n                </h3>\n                <Button\n                    className=\"user-survey__close-button\"\n                    theme=\"outline-light-blue\"\n                    onClick={onDismiss}\n                    ariaLabel=\"Close\"\n                    icon={faXmark}\n                />\n            </div>\n            {children}\n        </aside>\n    )\n}\n\nfunction ThankYouStep({\n    onDismiss,\n    onSuccess,\n    surveyName,\n    responseId,\n    roleAnswer,\n}: {\n    onDismiss: () => void\n    onSuccess: () => void\n    surveyName: string\n    responseId: string\n    roleAnswer: UserSurveyRoleAnswer\n}) {\n    const [feedback, setFeedback] = useState<string>(\"\")\n    const [isSubmitting, setIsSubmitting] = useState<boolean>(false)\n    const [submitError, setSubmitError] = useState<string | null>(null)\n    const isSubmitDisabled = isSubmitting || feedback.trim().length === 0\n    const headingRef = useRef<HTMLHeadingElement>(null)\n    useTriggerOnEscape(onDismiss)\n\n    // Move focus to the heading on mount so screen readers announce the phase\n    // transition from the role question to this thank-you step (WCAG 4.1.3).\n    useEffect(() => {\n        headingRef.current?.focus()\n    }, [])\n\n    function handleSubmit() {\n        const feedbackAnswer = feedback.trim()\n        if (feedbackAnswer.length === 0) {\n            onDismiss()\n            return\n        }\n\n        setIsSubmitting(true)\n        setSubmitError(null)\n\n        void submitFeedback({\n            surveyName,\n            responseId,\n            feedbackAnswer,\n            roleAnswer,\n        })\n            .then(() => {\n                siteAnalytics.logUserSurveyFeedbackSubmit({\n                    surveyName,\n                    responseId,\n                    experimentArm: roleAnswer.experimentArm,\n                })\n                onSuccess()\n            })\n            .catch(() => {\n                setSubmitError(\n                    \"Something went wrong while sending feedback. Please try again.\"\n                )\n            })\n            .finally(() => {\n                setIsSubmitting(false)\n            })\n    }\n\n    return (\n        <aside\n            className=\"user-survey user-survey--follow-up\"\n            role=\"region\"\n            aria-labelledby={USER_SURVEY_FOLLOW_UP_TITLE_ID}\n            aria-describedby={USER_SURVEY_FOLLOW_UP_DESCRIPTION_ID}\n        >\n            <div className=\"user-survey__follow-up-body\">\n                <div className=\"user-survey__follow-up-top-row\">\n                    <div className=\"user-survey__follow-up-checkmark\">\n                        <FontAwesomeIcon icon={faCheck} />\n                    </div>\n                    <Button\n                        className=\"user-survey__close-button user-survey__follow-up-close-button\"\n                        theme=\"outline-light-blue\"\n                        onClick={onDismiss}\n                        ariaLabel=\"Close\"\n                        icon={faXmark}\n                    />\n                </div>\n                <h3\n                    ref={headingRef}\n                    id={USER_SURVEY_FOLLOW_UP_TITLE_ID}\n                    className=\"user-survey__follow-up-title\"\n                    tabIndex={-1}\n                >\n                    Thank you for answering our survey.\n                </h3>\n                <p\n                    id={USER_SURVEY_FOLLOW_UP_DESCRIPTION_ID}\n                    className=\"user-survey__follow-up-description\"\n                >\n                    This will help us improve our website for our users.\n                </p>\n                <label\n                    className=\"user-survey__follow-up-label\"\n                    htmlFor={USER_SURVEY_FOLLOW_UP_INPUT_ID}\n                >\n                    Do you have any other feedback?\n                </label>\n                <textarea\n                    id={USER_SURVEY_FOLLOW_UP_INPUT_ID}\n                    className=\"user-survey__follow-up-textarea\"\n                    value={feedback}\n                    disabled={isSubmitting}\n                    maxLength={2000}\n                    onChange={(event) => {\n                        setFeedback(event.target.value)\n                    }}\n                    placeholder=\"Let us know here...\"\n                />\n                {submitError && (\n                    <p className=\"user-survey__follow-up-error\" role=\"alert\">\n                        {submitError}\n                    </p>\n                )}\n                <div className=\"user-survey__follow-up-actions\">\n                    <Button\n                        className=\"user-survey__follow-up-no-thanks-button\"\n                        theme=\"outline-light-blue\"\n                        disabled={isSubmitting}\n                        onClick={onDismiss}\n                        text=\"No thanks\"\n                        icon={null}\n                    />\n                    <Button\n                        className=\"user-survey__follow-up-submit-button\"\n                        theme=\"solid-light-blue\"\n                        disabled={isSubmitDisabled}\n                        onClick={handleSubmit}\n                        text={isSubmitting ? \"Submitting...\" : \"Submit\"}\n                        icon={null}\n                    />\n                </div>\n            </div>\n        </aside>\n    )\n}\n\nfunction ListRoleStep({\n    experimentArm,\n    options,\n    className,\n    radioButtonGroup,\n    radioButtonClassName,\n    onDismiss,\n    onAnswered,\n}: UserSurveyRoleStepProps & {\n    experimentArm: \"long-list\" | \"short-list\"\n    options: RoleOption[]\n    className: string\n    radioButtonGroup: string\n    radioButtonClassName?: string\n}) {\n    const [selectedOptionId, setSelectedOptionId] = useState<string | null>(\n        null\n    )\n    const [otherInput, setOtherInput] = useState<string>(\"\")\n    const otherInputRef = useRef<HTMLInputElement>(null)\n\n    function handleSubmit(event: FormEvent<HTMLFormElement>) {\n        event.preventDefault()\n        if (!isSubmitEnabled) return\n        const roleAnswer = buildListRoleAnswer({\n            experimentArm,\n            selectedOptionId,\n            otherInput,\n            options,\n        })\n        if (!roleAnswer) return\n\n        submitRoleAnswer({ roleAnswer, onAnswered })\n    }\n\n    const isSubmitEnabled = isValidRoleAnswer(selectedOptionId, otherInput)\n\n    return (\n        <UserSurveyDialog\n            className={className}\n            title=\"Which of the following best describes you?\"\n            onDismiss={onDismiss}\n        >\n            <Form className=\"user-survey__form\" onSubmit={handleSubmit}>\n                <fieldset className=\"user-survey__fieldset\">\n                    <legend className=\"user-survey__legend\">I am a:</legend>\n                    <div className=\"user-survey__options\">\n                        {options.map((option) => {\n                            const isSelected = selectedOptionId === option.id\n\n                            return (\n                                <div\n                                    className=\"user-survey__option\"\n                                    key={option.id}\n                                >\n                                    <RadioButton\n                                        className={cx(\n                                            \"user-survey__radio-button\",\n                                            radioButtonClassName\n                                        )}\n                                        id={`user-survey-${radioButtonGroup}-${option.id}`}\n                                        group={radioButtonGroup}\n                                        checked={isSelected}\n                                        onChange={() =>\n                                            setSelectedOptionId(option.id)\n                                        }\n                                        label={\n                                            option.description ? (\n                                                <span className=\"user-survey__option-text\">\n                                                    <span className=\"user-survey__option-title\">\n                                                        {option.label}\n                                                    </span>\n                                                    <span className=\"user-survey__option-description\">\n                                                        {option.description}\n                                                    </span>\n                                                </span>\n                                            ) : (\n                                                option.label\n                                            )\n                                        }\n                                    />\n                                    {option.hasInlineInput && (\n                                        <div className=\"user-survey__other-input-wrapper\">\n                                            <input\n                                                ref={otherInputRef}\n                                                className=\"user-survey__other-input\"\n                                                type=\"text\"\n                                                value={otherInput}\n                                                maxLength={200}\n                                                onFocus={() => {\n                                                    setSelectedOptionId(\n                                                        option.id\n                                                    )\n                                                }}\n                                                onChange={(event) => {\n                                                    setSelectedOptionId(\n                                                        option.id\n                                                    )\n                                                    setOtherInput(\n                                                        event.target.value\n                                                    )\n                                                }}\n                                                placeholder=\"Please specify...\"\n                                                aria-label=\"Please specify\"\n                                            />\n                                            {otherInput.length > 0 && (\n                                                <button\n                                                    className=\"user-survey__other-input-clear-button\"\n                                                    type=\"button\"\n                                                    onClick={() => {\n                                                        setOtherInput(\"\")\n                                                        setSelectedOptionId(\n                                                            option.id\n                                                        )\n                                                        otherInputRef.current?.focus()\n                                                    }}\n                                                    aria-label=\"Clear other details\"\n                                                >\n                                                    <FontAwesomeIcon\n                                                        icon={faCircleXmark}\n                                                    />\n                                                </button>\n                                            )}\n                                        </div>\n                                    )}\n                                </div>\n                            )\n                        })}\n                    </div>\n                    <div\n                        className={cx(\"user-survey__submit-row\", {\n                            \"user-survey__submit-row--sticky\":\n                                selectedOptionId !== null,\n                        })}\n                    >\n                        <Button\n                            className=\"user-survey__submit-button\"\n                            type=\"submit\"\n                            disabled={!isSubmitEnabled}\n                            text=\"Submit\"\n                            theme=\"solid-light-blue\"\n                            icon={null}\n                        />\n                    </div>\n                </fieldset>\n            </Form>\n        </UserSurveyDialog>\n    )\n}\n\nfunction FreeFormRoleStep({ onDismiss, onAnswered }: UserSurveyRoleStepProps) {\n    const [value, setValue] = useState<string>(\"\")\n\n    function handleSubmit(event: FormEvent<HTMLFormElement>) {\n        event.preventDefault()\n        if (!isSubmitEnabled) return\n        const freeFormInput = value.trim()\n        const roleAnswer: UserSurveyRoleAnswer = {\n            experimentArm: \"free-form\",\n            freeFormInput,\n        }\n        submitRoleAnswer({ roleAnswer, onAnswered })\n    }\n\n    const isSubmitEnabled = value.trim().length > 0\n\n    return (\n        <UserSurveyDialog\n            className=\"user-survey--free-form\"\n            title=\"How would you describe your main occupation?\"\n            onDismiss={onDismiss}\n        >\n            <Form className=\"user-survey__short-form\" onSubmit={handleSubmit}>\n                <div className=\"user-survey__short-body\">\n                    <label\n                        className=\"user-survey__short-legend\"\n                        htmlFor={USER_SURVEY_FREE_FORM_INPUT_ID}\n                    >\n                        I am a:\n                    </label>\n                    <input\n                        id={USER_SURVEY_FREE_FORM_INPUT_ID}\n                        className=\"user-survey__free-input\"\n                        type=\"text\"\n                        value={value}\n                        maxLength={200}\n                        onChange={(event) => setValue(event.target.value)}\n                        placeholder=\"eg. journalist, policy professional, educator...\"\n                    />\n                    <Button\n                        className=\"user-survey__submit-button\"\n                        type=\"submit\"\n                        disabled={!isSubmitEnabled}\n                        text=\"Submit\"\n                        theme=\"solid-light-blue\"\n                        icon={null}\n                    />\n                </div>\n            </Form>\n        </UserSurveyDialog>\n    )\n}\n\nexport default function UserSurvey() {\n    const [surveyState, setSurveyState] = useState<SurveyState>(() => {\n        const experimentArm = getUserSurveyWidgetEligibility()\n            ? getAssignedExperimentArm()\n            : null\n        if (experimentArm === null) return { phase: \"hidden\" }\n        return { phase: \"role\", experimentArm }\n    })\n\n    useEffect(() => {\n        if (surveyState.phase === \"role\") {\n            siteAnalytics.logUserSurveyRoleShow({\n                surveyName: USER_SURVEY_NAME,\n                responseId,\n                experimentArm: surveyState.experimentArm,\n            })\n        } else if (surveyState.phase === \"thankYou\") {\n            siteAnalytics.logUserSurveyThankYouShow({\n                surveyName: USER_SURVEY_NAME,\n                responseId,\n                experimentArm: surveyState.roleAnswer.experimentArm,\n            })\n        }\n    }, [surveyState])\n\n    function handleRoleAnswered(answer: UserSurveyRoleAnswer) {\n        if (surveyState.phase !== \"role\") return\n        setSurveyState({\n            phase: \"thankYou\",\n            roleAnswer: answer,\n        })\n        markUserSurveyAnswered()\n    }\n\n    function handleDismiss() {\n        if (surveyState.phase === \"hidden\") return\n        if (surveyState.phase === \"role\") {\n            markUserSurveyDismissed()\n            siteAnalytics.logUserSurveyRoleDismiss({\n                surveyName: USER_SURVEY_NAME,\n                responseId,\n                experimentArm: surveyState.experimentArm,\n            })\n        } else {\n            siteAnalytics.logUserSurveyThankYouDismiss({\n                surveyName: USER_SURVEY_NAME,\n                responseId,\n                experimentArm: surveyState.roleAnswer.experimentArm,\n            })\n        }\n        setSurveyState({ phase: \"hidden\" })\n    }\n\n    if (surveyState.phase === \"hidden\") return null\n    if (surveyState.phase === \"thankYou\") {\n        return (\n            <ThankYouStep\n                onDismiss={handleDismiss}\n                onSuccess={() => {\n                    setSurveyState({ phase: \"hidden\" })\n                }}\n                surveyName={USER_SURVEY_NAME}\n                responseId={responseId}\n                roleAnswer={surveyState.roleAnswer}\n            />\n        )\n    }\n    return match(surveyState.experimentArm)\n        .with(\"long-list\", () => (\n            <ListRoleStep\n                experimentArm=\"long-list\"\n                options={LONG_LIST_OPTIONS}\n                className=\"user-survey--long-list\"\n                radioButtonGroup=\"user-survey-long-role\"\n                onDismiss={handleDismiss}\n                onAnswered={handleRoleAnswered}\n            />\n        ))\n        .with(\"short-list\", () => (\n            <ListRoleStep\n                experimentArm=\"short-list\"\n                options={SHORT_LIST_OPTIONS}\n                className=\"user-survey--short-list\"\n                radioButtonGroup=\"user-survey-short-role\"\n                radioButtonClassName=\"user-survey__radio-button--short-list\"\n                onDismiss={handleDismiss}\n                onAnswered={handleRoleAnswered}\n            />\n        ))\n        .with(\"free-form\", () => (\n            <FreeFormRoleStep\n                onDismiss={handleDismiss}\n                onAnswered={handleRoleAnswered}\n            />\n        ))\n        .exhaustive()\n}\n","import * as _ from \"lodash-es\"\nimport { createRoot, hydrateRoot } from \"react-dom/client\"\nimport {\n    ArchiveMetaInformation,\n    DATA_INSIGHTS_INDEX_PAGE_SIZE,\n    DataPageV2ContentFields,\n    deserializeOwidGdocPageData,\n    isInIFrame,\n    MultiDimDataPageConfig,\n    OwidGdocType,\n    parseIntOrUndefined,\n    SiteFooterContext,\n} from \"@ourworldindata/utils\"\nimport {\n    DataPageV2Content,\n    OWID_DATAPAGE_CONTENT_ROOT_ID,\n} from \"./DataPageV2Content.js\"\nimport { Footnote } from \"./Footnote.js\"\nimport { OwidGdoc } from \"./gdocs/OwidGdoc.js\"\nimport { MultiEmbedderSingleton } from \"./multiembedder/MultiEmbedder.js\"\nimport SiteTools, { SITE_TOOLS_CLASS } from \"./SiteTools.js\"\nimport { runDetailsOnDemand } from \"./detailsOnDemand.js\"\nimport { hydrateCodeSnippets } from \"@ourworldindata/components\"\nimport { hydrateDynamicCollectionPage } from \"./collections/DynamicCollection.js\"\nimport {\n    _OWID_DATA_INSIGHTS_INDEX_PAGE_DATA,\n    DataInsightsIndexPageContent,\n} from \"./DataInsightsIndexPageContent.js\"\nimport {\n    _OWID_LATEST_PAGE_DATA,\n    LatestPageContent,\n    LatestPageContentProps,\n    LATEST_PAGE_CONTAINER_ID,\n} from \"./LatestPageContent.js\"\nimport { runAllGraphersLoadedListener } from \"./runAllGraphersLoadedListener.js\"\nimport {\n    __OWID_EXPLORER_INDEX_PAGE_PROPS,\n    ExplorerIndex,\n} from \"./ExplorerIndex.js\"\nimport { getInitialState } from \"./cookiePreferences.js\"\nimport { CookiePreferencesManager } from \"./CookiePreferencesManager.js\"\nimport { SearchWrapper } from \"./search/SearchWrapper.js\"\nimport { DebugProvider } from \"./gdocs/DebugProvider.js\"\nimport { AriaAnnouncerProvider } from \"./AriaAnnouncerContext.js\"\nimport { AriaAnnouncer } from \"./AriaAnnouncer.js\"\nimport {\n    MultiDimDataPageContent,\n    MultiDimDataPageData,\n} from \"./multiDim/MultiDimDataPageContent.js\"\nimport { BrowserRouter } from \"react-router-dom-v5-compat\"\nimport { REDUCED_TRACKING } from \"../settings/clientSettings.js\"\nimport { SiteHeaderNavigation } from \"./SiteHeader.js\"\nimport { DataInsightsIndexPageProps } from \"./DataInsightsIndexPage.js\"\nimport { NewsletterSubscriptionForm } from \"./NewsletterSubscription.js\"\nimport { NewsletterSubscriptionContext } from \"./newsletter.js\"\nimport { SUBSCRIBE_PAGE_FORM_CONTAINER_ID } from \"@ourworldindata/types\"\nimport UserSurvey from \"./gdocs/components/UserSurvey.js\"\n\nfunction runSearchPage() {\n    const root = document.getElementById(\"search-page-root\")\n    const topicTagGraph = window._OWID_TOPIC_TAG_GRAPH\n    if (root) {\n        createRoot(root).render(\n            <BrowserRouter>\n                <SearchWrapper topicTagGraph={topicTagGraph} />\n            </BrowserRouter>\n        )\n    }\n}\n\nfunction hydrateSubscribePage() {\n    const newsletterContainer = document.getElementById(\n        SUBSCRIBE_PAGE_FORM_CONTAINER_ID\n    )\n\n    if (newsletterContainer) {\n        hydrateRoot(\n            newsletterContainer,\n            <NewsletterSubscriptionForm\n                context={NewsletterSubscriptionContext.SubscribePage}\n            />\n        )\n    }\n}\n\nasync function hydrateDataInsightsIndexPage() {\n    const props: DataInsightsIndexPageProps = (window as any)[\n        _OWID_DATA_INSIGHTS_INDEX_PAGE_DATA\n    ]\n    const container = document.querySelector(\n        `#data-insights-index-page-container`\n    )\n\n    if (container && props) {\n        const urlParams = new URLSearchParams(window.location.search)\n        const topicName = urlParams.get(\"topic\")\n        if (topicName) {\n            // filter data insights to {topic}\n            const response = await fetch(`/dataInsights.json`)\n            if (!response.ok) {\n                throw new Error(\"Failed to fetch data insights for topic\")\n            }\n            let dataInsights = await response.json()\n            dataInsights = dataInsights.filter(\n                (di: { tags: { name: string }[] }) =>\n                    di.tags &&\n                    di.tags.some(\n                        (tag: { name: string }) => tag.name === topicName\n                    )\n            )\n\n            if (dataInsights.length) {\n                const tag = dataInsights[0].tags.find(\n                    (tag: { name: string }) => tag.name === topicName\n                )\n                props.totalPageCount = Math.ceil(\n                    dataInsights.length / DATA_INSIGHTS_INDEX_PAGE_SIZE\n                )\n                props.topicTag = { name: tag.name, slug: tag.slug }\n                props.dataInsights = dataInsights.slice(\n                    props.pageNumber * DATA_INSIGHTS_INDEX_PAGE_SIZE,\n                    (props.pageNumber + 1) * DATA_INSIGHTS_INDEX_PAGE_SIZE\n                )\n            }\n        }\n        hydrateRoot(\n            container,\n            <DebugProvider>\n                <DataInsightsIndexPageContent {...props} />\n            </DebugProvider>\n        )\n    }\n}\n\nfunction hydrateLatestPage() {\n    const props: LatestPageContentProps = (window as any)[\n        _OWID_LATEST_PAGE_DATA\n    ]\n    const container = document.querySelector(`#${LATEST_PAGE_CONTAINER_ID}`)\n\n    if (container && props) {\n        hydrateRoot(container, <LatestPageContent {...props} />)\n    }\n}\n\nfunction hydrateDataPageV2Content({\n    isPreviewing,\n}: { isPreviewing?: boolean } = {}) {\n    const wrapper = document.querySelector(`#${OWID_DATAPAGE_CONTENT_ROOT_ID}`)\n    const props: DataPageV2ContentFields = window._OWID_DATAPAGEV2_PROPS\n    const grapherConfig = window._OWID_GRAPHER_CONFIG\n\n    if (!wrapper) return\n    hydrateRoot(\n        wrapper,\n        <DebugProvider debug={isPreviewing}>\n            <DataPageV2Content\n                {...props}\n                grapherConfig={grapherConfig}\n                isPreviewing={isPreviewing}\n                archiveContext={window._OWID_ARCHIVE_CONTEXT}\n            />\n        </DebugProvider>\n    )\n}\n\nfunction hydrateExplorerIndex() {\n    const explorerIndexPageProps = (window as any)[\n        __OWID_EXPLORER_INDEX_PAGE_PROPS\n    ]\n\n    if (!explorerIndexPageProps) return\n    const container = document.querySelector(\".explorer-index-page\")\n    if (!container) return\n    hydrateRoot(container, <ExplorerIndex {...explorerIndexPageProps} />)\n}\n\nfunction runCookiePreferencesManager() {\n    if (REDUCED_TRACKING) return\n\n    const div = document.createElement(\"div\")\n    document.body.appendChild(div)\n\n    const root = createRoot(div)\n    root.render(<CookiePreferencesManager initialState={getInitialState()} />)\n}\n\nconst USER_SURVEY_ROOT_ID = \"user-survey-root\"\n\nfunction runUserSurveyWidget() {\n    if (isInIFrame()) return\n    if (window._OWID_ARCHIVE_CONTEXT?.type === \"archive-page\") return\n    if (document.getElementById(USER_SURVEY_ROOT_ID)) return\n\n    const div = document.createElement(\"div\")\n    div.id = USER_SURVEY_ROOT_ID\n    document.body.appendChild(div)\n    createRoot(div).render(<UserSurvey />)\n}\n\ninterface FootnoteContent {\n    index: number\n    href: string\n    htmlContent: string\n}\n\nfunction getFootnoteContent(element: Element): FootnoteContent | null {\n    const href = element.closest(\"a.ref\")?.getAttribute(\"href\")\n    if (!href) return null\n\n    const index = parseIntOrUndefined(href.split(\"-\")[1])\n    if (index === undefined) return null\n\n    const referencedEl = document.querySelector(href)\n    if (!referencedEl?.innerHTML) return null\n    return { index, href, htmlContent: referencedEl.innerHTML }\n}\n\nfunction runFootnotes() {\n    const footnotes = document.querySelectorAll(\"a.ref\")\n\n    footnotes.forEach((f) => {\n        const footnoteContent = getFootnoteContent(f)\n        if (_.isNil(footnoteContent)) return\n\n        hydrateRoot(\n            f,\n            <Footnote\n                index={footnoteContent.index}\n                htmlContent={footnoteContent.htmlContent}\n                triggerTarget={f}\n            />\n        )\n    })\n}\n\nfunction runSiteNavigation(hideDonationFlag?: boolean) {\n    const siteNavigationElem = document.querySelector(\".site-navigation-root\")\n    if (siteNavigationElem) {\n        let isOnHomepage = false\n        if (window._OWID_GDOC_PROPS) {\n            const props = deserializeOwidGdocPageData(window._OWID_GDOC_PROPS)\n            isOnHomepage = props?.content?.type === OwidGdocType.Homepage\n        }\n\n        let archiveInfo: ArchiveMetaInformation | undefined\n        if (window._OWID_ARCHIVE_CONTEXT) {\n            archiveInfo = window._OWID_ARCHIVE_CONTEXT\n        }\n\n        const root = createRoot(siteNavigationElem)\n        root.render(\n            <SiteHeaderNavigation\n                hideDonationFlag={hideDonationFlag}\n                isOnHomepage={isOnHomepage}\n                archiveInfo={\n                    archiveInfo?.type === \"archive-page\"\n                        ? archiveInfo\n                        : undefined\n                }\n            />\n        )\n    }\n}\n\nfunction runSiteTools() {\n    const siteToolsElem = document.querySelector(`.${SITE_TOOLS_CLASS}`)\n    if (siteToolsElem) {\n        const root = createRoot(siteToolsElem)\n        root.render(<SiteTools />)\n    }\n}\n\nconst hydrateOwidGdoc = (debug?: boolean, isPreviewing?: boolean) => {\n    const wrapper = document.querySelector(\"#owid-document-root\")\n    if (!wrapper) return\n    const props = deserializeOwidGdocPageData(window._OWID_GDOC_PROPS)\n    hydrateRoot(\n        wrapper,\n        <AriaAnnouncerProvider>\n            <DebugProvider debug={debug}>\n                <OwidGdoc\n                    {...props}\n                    isPreviewing={isPreviewing}\n                    archiveContext={window._OWID_ARCHIVE_CONTEXT}\n                />\n            </DebugProvider>\n            <AriaAnnouncer />\n        </AriaAnnouncerProvider>\n    )\n}\n\nconst hydrateMultiDimDataPageContent = (isPreviewing?: boolean) => {\n    const wrapper = document.querySelector(`#${OWID_DATAPAGE_CONTENT_ROOT_ID}`)\n    const { configObj, ...props }: MultiDimDataPageData =\n        window._OWID_MULTI_DIM_PROPS!\n\n    if (!wrapper) return\n    hydrateRoot(\n        wrapper,\n        <DebugProvider debug={isPreviewing}>\n            <BrowserRouter>\n                <MultiDimDataPageContent\n                    config={MultiDimDataPageConfig.fromObject(configObj)}\n                    {...props}\n                    isPreviewing={isPreviewing}\n                    archiveContext={window._OWID_ARCHIVE_CONTEXT}\n                />\n            </BrowserRouter>\n        </DebugProvider>\n    )\n}\n\ninterface SiteFooterScriptsArgs {\n    debug?: boolean\n    isPreviewing?: boolean\n    context?: SiteFooterContext\n    container?: HTMLElement\n    hideDonationFlag?: boolean\n}\n\nexport const runSiteFooterScriptsForArchive = (args: SiteFooterScriptsArgs) => {\n    const { debug, context, isPreviewing } = args || {}\n\n    switch (context) {\n        case SiteFooterContext.dataPageV2:\n            hydrateDataPageV2Content({ isPreviewing })\n            // runAllGraphersLoadedListener()\n            runSiteNavigation()\n            // runSiteTools()\n            // runCookiePreferencesManager()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.multiDimDataPage:\n            hydrateMultiDimDataPageContent(isPreviewing)\n            // runAllGraphersLoadedListener()\n            runSiteNavigation()\n            // runSiteTools()\n            // runCookiePreferencesManager()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.grapherPage:\n        case SiteFooterContext.explorerPage:\n            runSiteNavigation()\n            // runAllGraphersLoadedListener()\n            // runSiteTools()\n            // runCookiePreferencesManager()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.gdocsDocument:\n            hydrateOwidGdoc(debug, isPreviewing)\n            // runAllGraphersLoadedListener()\n            runSiteNavigation()\n            runFootnotes()\n            void runDetailsOnDemand()\n            // runSiteTools()\n            // runCookiePreferencesManager()\n            break\n        default:\n            console.error(\n                `runSiteFooterScriptsForArchive: context ${context} not supported`\n            )\n            throw new Error(`Unsupported context: ${context}`)\n    }\n}\n\nexport const runSiteFooterScripts = async (\n    args: SiteFooterScriptsArgs | undefined\n) => {\n    // We used to destructure this in the function signature, but that caused\n    // a weird issue reported by bugsnag: https://app.bugsnag.com/our-world-in-data/our-world-in-data-website/errors/63ca39b631e8660009464eb4?event_id=63d384c500acc25fc0810000&i=sk&m=ef\n    // So now we define the object as potentially undefined and then destructure it here.\n    const { debug, context, isPreviewing, hideDonationFlag } = args || {}\n\n    switch (context) {\n        case SiteFooterContext.dataPageV2:\n            hydrateDataPageV2Content({ isPreviewing })\n            runAllGraphersLoadedListener()\n            runSiteNavigation(hideDonationFlag)\n            runSiteTools()\n            runCookiePreferencesManager()\n            runUserSurveyWidget()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.multiDimDataPage:\n            hydrateMultiDimDataPageContent(isPreviewing)\n            runAllGraphersLoadedListener()\n            runSiteNavigation(hideDonationFlag)\n            runSiteTools()\n            runCookiePreferencesManager()\n            runUserSurveyWidget()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.grapherPage:\n        case SiteFooterContext.explorerPage:\n            runSiteNavigation(hideDonationFlag)\n            runAllGraphersLoadedListener()\n            runSiteTools()\n            runCookiePreferencesManager()\n            runUserSurveyWidget()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.explorerIndexPage:\n            hydrateExplorerIndex()\n            runSiteNavigation()\n            runCookiePreferencesManager()\n            runSiteTools()\n            break\n        case SiteFooterContext.gdocsDocument:\n            hydrateOwidGdoc(debug, isPreviewing)\n            runAllGraphersLoadedListener()\n            runSiteNavigation(hideDonationFlag)\n            runFootnotes()\n            void runDetailsOnDemand()\n            runSiteTools()\n            runCookiePreferencesManager()\n            runUserSurveyWidget()\n            break\n        case SiteFooterContext.latestPage:\n            hydrateLatestPage()\n            runSiteNavigation(hideDonationFlag)\n            runSiteTools()\n            runCookiePreferencesManager()\n            void runDetailsOnDemand()\n            break\n        case SiteFooterContext.dynamicCollectionPage:\n            // Don't break, run default case too\n            hydrateDynamicCollectionPage()\n        // falls through\n        case SiteFooterContext.dataInsightsIndexPage:\n            // Don't break, run default case too\n            await hydrateDataInsightsIndexPage()\n        // falls through\n        case SiteFooterContext.searchPage:\n            runSearchPage()\n        // falls through\n        case SiteFooterContext.subscribePage:\n            hydrateSubscribePage()\n        // falls through\n        default:\n            // Features that were not ported over to gdocs, are only being run on WP pages:\n            // - embedding charts through MultiEmbedderSingleton.embedAll()\n            runSiteNavigation(hideDonationFlag)\n            hydrateCodeSnippets()\n            MultiEmbedderSingleton.embedAll(isPreviewing)\n            runAllGraphersLoadedListener()\n            runFootnotes()\n            runSiteTools()\n            runCookiePreferencesManager()\n            void runDetailsOnDemand()\n            break\n    }\n}\n","import \"@ourworldindata/grapher/src/core/grapher.scss\"\nimport \"./owid.scss\"\n// From https://fontawesome.com/how-to-use/on-the-web/other-topics/server-side-rendering:\n// \"If the CSS is missing when this icon displays in the browser it will flash\n// from a very large icon down to a properly sized one a moment later.\"\nimport \"@fortawesome/fontawesome-svg-core/styles.css\"\n\nimport { ENV } from \"../settings/clientSettings.js\"\nimport {\n    Grapher,\n    renderSingleGrapherOnGrapherPage,\n} from \"@ourworldindata/grapher\"\nimport { Explorer } from \"@ourworldindata/explorer\"\nimport { SiteAnalytics } from \"./SiteAnalytics.js\"\nimport { runMonkeyPatchForGoogleTranslate } from \"./hacks.js\"\nimport { runSiteFooterScriptsForArchive } from \"./runSiteFooterScripts.js\"\n\ndeclare let window: any\nwindow.Grapher = Grapher\nwindow.Explorer = Explorer\nwindow.renderSingleGrapherOnGrapherPage = renderSingleGrapherOnGrapherPage\n\n// Note: do a text search of the project for \"runSiteFooterScripts\" to find the usage. todo: clean that up.\nwindow.runSiteFooterScripts = runSiteFooterScriptsForArchive\n\nrunMonkeyPatchForGoogleTranslate()\n\nconst analytics = new SiteAnalytics(ENV)\n\ndocument.documentElement?.classList.add(\"js-loaded\")\n\nanalytics.startClickTracking()\nanalytics.startDetectingBrowserTranslation()\n"],"names":["path$1","fs","require$$0","path","require$$1","os","require$$2","crypto","require$$3","packageJson","require$$4","version","LINE","parse","src","obj","lines","match","key","value","maybeQuote","_parseVault","options","vaultPath","_vaultPath","result","DotenvModule","err","keys","_dotenvKey","length","decrypted","i","attrs","_instructions","error","_warn","message","_debug","_log","define_process_env_default","dotenvKey","uri","environment","environmentKey","ciphertext","possibleVaultPath","filepath","_resolveHome","envPath","_configVault","debug","quiet","parsed","processEnv","configDotenv","dotenvPath","encoding","optionPaths","lastError","parsedAll","e","keysCount","shortPaths","filePath","relative","config","decrypt","encrypted","keyStr","nonce","authTag","aesgcm","isRange","invalidKeyLength","decryptionFailed","populate","override","mainModule","findProjectBaseDir","from","dir","parentDir","baseDir","findBaseDir","additionalEnvFile","dotenv","parseIntOrUndefined","ENV","BAKED_BASE_URL","BAKED_GRAPHER_URL","GRAPHER_DYNAMIC_THUMBNAIL_URL","EXPLORER_DYNAMIC_THUMBNAIL_URL","GRAPHER_DYNAMIC_CONFIG_URL","MULTI_DIM_DYNAMIC_CONFIG_URL","ADMIN_BASE_URL","DATA_API_URL","CATALOG_URL","ALGOLIA_ID","ALGOLIA_SEARCH_KEY","CLOUDFLARE_IMAGES_URL","Features","featureFlagsRaw","feature","freeGlobal","freeSelf","root","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","arrayMap","array","iteratee","index","isArray","symbolProto","symbolToString","baseToString","reWhitespace","trimmedEndIndex","string","reTrimStart","baseTrim","isObject","type","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","INFINITY","MAX_INTEGER","toFinite","sign","toInteger","remainder","identity","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","maskSrcKey","uid","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","getValue","object","getNative","WeakMap","objectCreate","baseCreate","proto","apply","thisArg","args","noop","copyArray","source","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","constant","defineProperty","baseSetToString","setToString","arrayEach","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","MAX_SAFE_INTEGER","reIsUint","isIndex","baseAssignValue","eq","assignValue","objValue","copyObject","props","customizer","isNew","newValue","nativeMax","overRest","start","transform","otherArgs","baseRest","isLength","isArrayLike","isIterateeCall","createAssigner","assigner","sources","guard","isPrototype","Ctor","baseTimes","n","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","types","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","overArg","arg","nativeKeys","baseKeys","nativeKeysIn","baseKeysIn","isProto","keysIn","assignIn","reIsDeepProp","reIsPlainProp","isKey","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","data","hashHas","hashSet","Hash","entries","entry","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","isKeyable","getMapData","map","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","size","MapCache","FUNC_ERROR_TEXT","memoize","resolver","memoized","cache","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","number","quote","subString","toString","castPath","toKey","baseGet","get","defaultValue","arrayPush","values","offset","spreadableSymbol","isFlattenable","baseFlatten","depth","isStrict","flatten","flatRest","getPrototype","objectCtorString","isPlainObject","baseSlice","end","castSlice","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","reHasUnicode","hasUnicode","asciiToArray","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","reUnicode","unicodeToArray","stringToArray","createCaseFirst","methodName","strSymbols","chr","trailing","upperFirst","capitalize","nativeIsFinite","nativeMin","createRound","precision","pair","baseClamp","lower","upper","clamp","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","baseAssign","baseAssignIn","allocUnsafe","cloneBuffer","buffer","isDeep","arrayFilter","resIndex","stubArray","nativeGetSymbols","getSymbols","symbol","copySymbols","getSymbolsIn","copySymbolsIn","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","getAllKeysIn","DataView","Promise","Set","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","initCloneArray","Uint8Array","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolValueOf","cloneSymbol","cloneTypedArray","typedArray","initCloneByTag","initCloneObject","baseIsMap","nodeIsMap","isMap","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","bitmask","stack","isFlat","isFull","isFunc","stacked","subValue","clone","cloneDeep","compact","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","set","equalByTag","convert","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","matchData","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","baseHasIn","hasPath","hasFunc","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","property","baseIteratee","arrayAggregator","setter","accumulator","createBaseFor","iterable","baseFor","baseForOwn","createBaseEach","eachFunc","collection","baseEach","baseAggregator","createAggregator","initializer","now","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","assignMergeValue","isArrayLikeObject","safeGet","toPlainObject","baseMergeDeep","srcIndex","mergeFunc","isCommon","isTyped","baseMerge","mergeWith","arrayIncludesWith","comparator","baseDifference","includes","valuesLength","outer","computed","valuesIndex","difference","last","baseMap","groupBy","baseGt","baseValues","parent","isEmpty","isEqual","isInteger","isNumber","isNil","keyBy","baseLt","mapValues","baseExtremum","current","max","maxBy","baseSum","merge","min","minBy","baseUnset","isRootPrimitive","customOmitClone","omit","paths","baseSortBy","comparer","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareMultiple","orders","objCriteria","othCriteria","ordersLength","order","baseOrderBy","iteratees","criteria","orderBy","partition","nativeFloor","nativeRandom","baseRandom","nativeCeil","baseRange","step","createRange","range","nativeReverse","reverse","round","shuffleSelf","rand","arrayShuffle","baseShuffle","shuffle","sortBy","baseSortedUniq","sortedUniq","sortedUniqBy","sum","sumBy","throttle","createSet","baseUniq","seenIndex","union","arrays","uniq","uniqBy","uniqWith","without","die","_len","_key","mockGlobal","getGlobal","assign","getDescriptor","objectPrototype","EMPTY_ARRAY","EMPTY_OBJECT","hasProxy","plainObjectString","assertProxies","once","invoked","fn","isStringish","protoConstructor","isGenerator","constructor","addHiddenProp","propName","addHiddenFinalProp","createInstanceofPredicate","name","theClass","x","isES6Map","thing","isPlainES6Map","mapProto","nullProto","isES6Set","hasGetOwnPropertySymbols","getPlainObjectKeys","symbols","s","ownKeys","toPrimitive","hasProp","target","prop","getOwnPropertyDescriptors","res","getFlag","flags","mask","setFlag","_arrayLikeToArray","r","a","_defineProperties","t","o","_toPropertyKey","_createClass","_createForOfIteratorHelperLoose","_unsupportedIterableToArray","_extends","_inheritsLoose","_setPrototypeOf","_toPrimitive","storedAnnotationsSymbol","createDecoratorAnnotation","annotation","decorator","is20223Decorator","storeAnnotation","prototype","isOverride","collectStoredAnnotations","context","$mobx","Atom","name_","IDerivationState_","_proto","listener","reportObserved","startBatch","propagateChanged","endBatch","isAtom","createAtom","onBecomeObservedHandler","onBecomeUnobservedHandler","atom","onBecomeObserved","onBecomeUnobserved","structuralComparer","b","deepEqual","defaultComparer","deepEnhancer","v","_","isObservable","observable","isAction","isFlow","flow","autoAction","shallowEnhancer","isObservableObject","isObservableArray","isObservableMap","isObservableSet","referenceEnhancer","refStructEnhancer","oldValue","OVERRIDE","createActionAnnotation","make_$1","extend_$1","decorate_20223_$1","adm","descriptor","_this$options_","actionDescriptor","createActionDescriptor","proxyTrap","mthd","kind","addInitializer","ann","_createAction","m","_ann$options_$name","_ann$options_","_ann$options_$autoAct","_ann$options_2","createAction","initMthd","_ann$options_3","_this$options_2","self","bound","assertActionDescriptor","_ref","_ref2","safeDescriptors","_annotation$options_","_annotation$options_$","_annotation$options_2","_annotation$options_$2","_annotation$options_3","_annotation$options_4","_adm$proxy_2","globalState","_adm$proxy_","createFlowAnnotation","make_$2","extend_$2","decorate_20223_$2","flowDescriptor","createFlowDescriptor","_this$options_3","assertFlowDescriptor","createComputedAnnotation","make_$3","extend_$3","decorate_20223_$3","assertComputedDescriptor","asObservableObject","ComputedValue","createObservableAnnotation","make_$4","extend_$4","decorate_20223_$4","_this$options_$enhanc","assertObservableDescriptor","desc","initializedObjects","initializeObservable","_ann$options_$enhance","ObservableValue","AUTO","autoAnnotation","createAutoAnnotation","make_$5","extend_$5","decorate_20223_$5","_this$options_4","flowAnnotation","actionAnnotation","observableAnnotation","_this$options_5","_this$options_6","OBSERVABLE","OBSERVABLE_REF","OBSERVABLE_SHALLOW","OBSERVABLE_STRUCT","defaultCreateObservableOptions","asCreateObservableOptions","observableRefAnnotation","observableShallowAnnotation","observableStructAnnotation","observableDecoratorAnnotation","getEnhancerFromOptions","getEnhancerFromAnnotation","getAnnotationFromOptions","_options$defaultDecor","createObservable","arg2","arg3","observableFactories","initialValues","createLegacyArray","createObservableArray","ObservableMap","ObservableSet","decorators","initObservable","extendObservable","asDynamicObservableObject","COMPUTED","COMPUTED_STRUCT","computedAnnotation","computedStructAnnotation","arg1","opts","_getDescriptor$config","_getDescriptor","currentActionId","nextActionId","isFunctionNameConfigurable","tmpNameDescriptor","actionName","ref","executeAction","canRunAsDerivation","scope","runInfo","_startAction","_endAction","notifySpy_","startTime_","prevDerivation_","runAsAction","prevAllowStateChanges_","untrackedStart","allowStateChangesStart","prevAllowStateReads_","allowStateReadsStart","allowStateChangesEnd","allowStateReadsEnd","untrackedEnd","allowStateChanges","prev","_Atom","enhancer","notifySpy","equals","_this","hasInterceptors","change","interceptChange","UPDATE","hasListeners","notifyListeners","handler","registerInterceptor","fireImmediately","registerListener","isObservableValue","CaughtException","TraceMode","propagateMaybeChanged","shouldCompute","prevTrackingContext","propagateChangeConfirmed","isCaughtException","wasSuspended","changed","track","trackDerivedFunction","clearObserving","firstTime","prevValue","autorun","prevU","isComputedValue","cause","derivation","prevAllowStateReads","prevUntracked","obs","l","changeDependenciesStateTo0","f","prevTracking","bindDependencies","prevObserving","observing","lowestNewObservingDerivationState","i0","dep","_dep","removeObserver","_dep2","addObserver","untracked","action","allowStateReads","MobXGlobals","canMergeGlobalState","isolateCalled","global","isolateGlobalState","node","queueForUnobservation","runReactions","list","d","Reaction","onInvalidate_","errorHandler_","requiresObservable_","prevReaction","abortSignal","_this2","dispose","enterBreakPoint","MAX_REACTION_ITERATIONS","reactionScheduler","runReactionsHelper","allReactions","iterations","remainingReactions","isReaction","setReactionScheduler","baseScheduler","isSpyEnabled","spy","ACTION","ACTION_BOUND","AUTOACTION","AUTOACTION_BOUND","DEFAULT_ACTION_NAME","actionBoundAnnotation","autoActionAnnotation","autoActionBoundAnnotation","createActionFactory","runInAction","view","_opts$name","_opts","_opts2","_opts3","runSync","reaction","reactionRunner","scheduler","createSchedulerFromOptions","isScheduled","run","expression","effect","_opts$name2","_opts4","_opts5","effectAction","wrapErrorHandler","nextValue","errorHandler","baseFn","ON_BECOME_OBSERVED","ON_BECOME_UNOBSERVED","interceptHook","hook","getAtom","cb","listenersKey","hookListeners","NEVER","ALWAYS","OBSERVED","configure","useProxies","enforceActions","ea","properties","annotations","descriptors","getDependencyTree","nodeToDependencyTree","unique","generatorId","FlowCancellationError","flowBoundAnnotation","generator","ctx","runId","gen","rejector","pendingPromise","promise","resolve","reject","stepId","onFulfilled","ret","next","onRejected","cancelPromise","_res","yieldedPromise","_isObservable","apiOwnKeys","toJSHelper","__alreadySeen","idx","_res2","_res3","toJS","transaction","when","whenPromise","_when","timeoutHandle","disposer","cond","_opts$signal","abort","_opts$signal2","_opts$signal3","getAdm","objectProxyTraps","_getAdm$set_","_getAdm$delete_","_getAdm$definePropert","_target$$mobx","_target$$mobx$proxy_","interceptable","interceptors","listenable","listeners","makeObservable","_annotations","SPLICE","MAX_SPLICE_SIZE","arrayTraps","arrayExtensions","ObservableArrayAdministration","owned_","legacyMode_","newV","oldV","newLength","currentLength","newItems","oldLength","delta","reserveArrayBuffer","deleteCount","lengthDelta","_this$values_","oldItems","_i","notify","added","removed","owned","proxy","_len2","items","_key2","_len3","_key3","copy","addArrayExtension","simpleFunc","mapLikeFunc","reduceLikeFunc","funcName","funcFactory","dehancedValues","callback","element","_this3","currentValue","isObservableArrayAdministration","ObservableMapMarker","ADD","DELETE","initialData","enhancer_","newEntry","hasKey","_change","_this3$hasMap_$get","_this4","_this4$hasMap_$get","makeIterableForMap","_keys$next","done","_keys$next2","_iterator","_step","_step$value","_this5","_this6","_iterator2","_step2","_this7","replacementMap","convertToMap","orderedData","keysReportChangedCalled","_iterator3","_step3","deleted","_iterator4","_step4","_step4$value","_value","keyExisted","_value2","iter1","iter2","next1","next2","iterator","makeIterable","dataStructure","ObservableSetMarker","callbackFn","_change2","makeIterableForSet","_values$next","_values$next2","otherSet","dehancedSet","descriptorCache","REMOVE","ObservableObjectAdministration","target_","values_","defaultAnnotation_","_this$target_$storedA","outcome","recordAnnotationApplied","deleteOutcome","cachedDescriptor","getCachedObservablePropDescriptor","_this$pendingKeys_","_this$pendingKeys_2","_options$name","isObservableObjectAdministration","_adm$target_$storedAn","ENTRY_0","safariPrototypeSetterInheritanceBug","p","OBSERVABLE_ARRAY_BUFFER_SIZE","StubArray","inherit","ctor","LegacyObservableArray","_StubArray","nextIndex","createArrayEntryDescriptor","createArrayBufferItem","getDebugName","_observable","getAdministration","named","aStack","bStack","className","unwrap","areArrays","aCtor","bCtor","_length","_getGlobal$Iterator","maybeIteratorPrototype","getSelf","g","c","ascending","descending","bisector","compare1","compare2","zero","left","lo","hi","mid","right","center","numbers","valueof","ascendingBisect","bisectRight","extent","Adder","j","y","compareDefined","compare","ascendingDefined","e10","e5","e2","tickSpec","stop","power","factor","i1","i2","inc","ticks","tickIncrement","tickStep","quickselect","k","z","sd","newLeft","newRight","swap","quantile","value0","value1","pairof","previous","first","module","this","u","h","$","M","D","S","w","O","Y","L","dayjs","customParseFormat","isToday","isYesterday","relativeTime","utc","formatDecimal","formatDecimalParts","coefficient","exponent","formatGroup","grouping","thousands","width","formatNumerals","numerals","re","formatSpecifier","specifier","FormatSpecifier","formatTrim","out","prefixExponent","formatPrefixAuto","formatRounded","formatTypes","identity$6","prefixes","formatLocale","locale","group","currencyPrefix","currencySuffix","decimal","percent","minus","nan","newFormat","fill","align","comma","trim","prefix","suffix","formatType","maybeSuffix","format","valuePrefix","valueSuffix","valueNegative","padding","formatPrefix","defaultLocale","definition","precisionFixed","precisionPrefix","precisionRound","STATE_PLAINTEXT","STATE_HTML","STATE_COMMENT","ALLOWED_TAGS_REGEX","NORMALIZE_TAG_REGEX","striptags","html","allowable_tags","tag_replacement","init_context","striptags_internal","init_striptags_stream","parse_allowable_tags","state","tag_buffer","in_quote_char","output","char","normalize_tag","tag_set","$constructor","params","init","inst","def","_a","Parent","Definition","$ZodAsyncError","$ZodEncodeError","globalConfig","newConfig","getEnumValues","numericValues","jsonStringifyReplacer","cached","getter","nullish","input","cleanRegex","floatSafeRemainder","val","valDecCount","stepString","stepDecCount","decCount","valInt","stepInt","EVALUATING","defineLazy","assignProp","mergeDefs","defs","mergedDescriptors","esc","str","captureStackTrace","_args","allowsEval","F","prot","shallowClone","propertyKeyTypes","escapeRegex","cl","normalizeParams","_params","optionalKeys","shape","NUMBER_FORMAT_RANGES","pick","schema","currDef","newShape","extend","checks","_shape","safeExtend","partial","Class","oldShape","required","aborted","startIndex","prefixIssues","issues","iss","unwrapMessage","finalizeIssue","full","getLengthableOrigin","issue","util.jsonStringifyReplacer","$ZodError","$ZodRealError","flattenError","mapper","fieldErrors","formErrors","sub","formatError","processError","curr","el","_parse","_Err","_ctx","core.$ZodAsyncError","util.finalizeIssue","core.config","util.captureStackTrace","errors.$ZodRealError","_parseAsync","parseAsync","_safeParse","errors.$ZodError","safeParse","_safeParseAsync","safeParseAsync","_encode","_decode","_encodeAsync","_decodeAsync","_safeEncode","_safeDecode","_safeEncodeAsync","_safeDecodeAsync","cuid","cuid2","ulid","xid","ksuid","nanoid","duration","guid","uuid","email","_emoji","emoji","ipv4","ipv6","cidrv4","cidrv6","base64","base64url","hostname","e164","dateSource","date","timeSource","hhmm","datetime","timeRegex","regex","integer","boolean","lowercase","uppercase","$ZodCheck","core.$constructor","numericOriginMap","$ZodCheckLessThan","origin","bag","payload","$ZodCheckGreaterThan","$ZodCheckMultipleOf","util.floatSafeRemainder","$ZodCheckNumberFormat","isInt","minimum","maximum","util.NUMBER_FORMAT_RANGES","regexes.integer","$ZodCheckMaxLength","util.nullish","util.getLengthableOrigin","$ZodCheckMinLength","$ZodCheckLengthEquals","tooBig","$ZodCheckStringFormat","_b","$ZodCheckRegex","$ZodCheckLowerCase","regexes.lowercase","$ZodCheckUpperCase","regexes.uppercase","$ZodCheckIncludes","escapedRegex","util.escapeRegex","$ZodCheckStartsWith","$ZodCheckEndsWith","$ZodCheckOverwrite","Doc","minIndent","dedented","line","$ZodType","ch","runChecks","isAborted","util.aborted","asyncResult","currLen","handleCanaryResult","canary","checkResult","$ZodString","regexes.string","$ZodStringFormat","checks.$ZodCheckStringFormat","$ZodGUID","regexes.guid","$ZodUUID","regexes.uuid","$ZodEmail","regexes.email","$ZodURL","trimmed","url","regexes.hostname","$ZodEmoji","regexes.emoji","$ZodNanoID","regexes.nanoid","$ZodCUID","regexes.cuid","$ZodCUID2","regexes.cuid2","$ZodULID","regexes.ulid","$ZodXID","regexes.xid","$ZodKSUID","regexes.ksuid","$ZodISODateTime","regexes.datetime","$ZodISODate","regexes.date","$ZodISOTime","regexes.time","$ZodISODuration","regexes.duration","$ZodIPv4","regexes.ipv4","$ZodIPv6","regexes.ipv6","$ZodCIDRv4","regexes.cidrv4","$ZodCIDRv6","regexes.cidrv6","parts","address","prefixNum","isValidBase64","$ZodBase64","regexes.base64","isValidBase64URL","regexes.base64url","padded","$ZodBase64URL","$ZodE164","regexes.e164","isValidJWT","token","algorithm","tokensParts","header","parsedHeader","$ZodJWT","$ZodNumber","regexes.number","received","$ZodNumberFormat","checks.$ZodCheckNumberFormat","$ZodBoolean","regexes.boolean","$ZodUnknown","$ZodNever","handleArrayResult","final","util.prefixIssues","$ZodArray","proms","item","handlePropertyResult","normalizeDef","okeys","util.optionalKeys","handleCatchall","unrecognized","keySet","_catchall","$ZodObject","sh","newSh","_normalized","util.cached","util.defineLazy","propValues","field","util.isObject","catchall","$ZodObjectJIT","superParse","generateFastpass","doc","normalized","parseStr","util.esc","ids","counter","id","fastpass","jit","core.globalConfig","fastEnabled","util.allowsEval","handleUnionResults","results","nonaborted","$ZodUnion","option","patterns","util.cleanRegex","single","async","$ZodIntersection","handleIntersectionResults","mergeValues","util.isPlainObject","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","merged","$ZodEnum","util.getEnumValues","valuesSet","util.propertyKeyTypes","$ZodTransform","core.$ZodEncodeError","_out","handleOptionalResult","$ZodOptional","$ZodNullable","$ZodDefault","handleDefaultResult","$ZodPrefault","$ZodNonOptional","handleNonOptionalResult","$ZodCatch","$ZodPipe","handlePipeResult","$ZodReadonly","handleReadonlyResult","$ZodCustom","checks.$ZodCheck","handleRefineResult","_iss","util.issue","$ZodRegistry","_meta","meta","pm","registry","globalRegistry","_string","util.normalizeParams","_email","_guid","_uuid","_uuidv4","_uuidv6","_uuidv7","_url","_nanoid","_cuid","_cuid2","_ulid","_xid","_ksuid","_ipv4","_ipv6","_cidrv4","_cidrv6","_base64","_base64url","_e164","_jwt","_isoDateTime","_isoDate","_isoTime","_isoDuration","_number","_int","_boolean","_unknown","_never","_lt","checks.$ZodCheckLessThan","_lte","_gt","checks.$ZodCheckGreaterThan","_gte","_multipleOf","checks.$ZodCheckMultipleOf","_maxLength","checks.$ZodCheckMaxLength","_minLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","_regex","checks.$ZodCheckRegex","_lowercase","checks.$ZodCheckLowerCase","_uppercase","checks.$ZodCheckUpperCase","_includes","checks.$ZodCheckIncludes","_startsWith","checks.$ZodCheckStartsWith","_endsWith","checks.$ZodCheckEndsWith","_overwrite","tx","checks.$ZodCheckOverwrite","_normalize","form","_trim","_toLowerCase","_toUpperCase","_array","_refine","_superRefine","_check","_issue","ZodMiniType","core.$ZodType","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","_def","core.clone","reg","ZodMiniString","core.$ZodString","core._string","ZodMiniNumber","core.$ZodNumber","core._number","ZodMiniBoolean","core.$ZodBoolean","core._boolean","ZodMiniArray","core.$ZodArray","ZodMiniObject","core.$ZodObject","ZodMiniEnum","core.$ZodEnum","_enum","ZodMiniOptional","core.$ZodOptional","optional","innerType","z.object","z.optional","z.string","z.boolean","z.enum","z.number","SiteFooterContext","EPOCH_DATE","IDEAL_PLOT_ASPECT_RATIO","GRAPHER_MAP_TYPE","GRAPHER_CHART_TYPES","ALL_GRAPHER_CHART_TYPES","GRAPHER_TAB_CONFIG_OPTIONS","GRAPHER_TAB_NAMES","GRAPHER_TAB_QUERY_PARAMS","ORIGIN_URL_REGEX_PATTERNS","SortOrder","SortBy","ScaleType","KeyChartLevel","DimensionProperty","TimeBoundValue","TimeBoundValueStr","ToleranceStrategy","AxisMinMaxValueStr","EntitySelectionMode","StackMode","FacetStrategy","FacetAxisDomain","SeriesStrategy","MissingDataStrategy","ScatterPointLabelStrategy","PeerCountryStrategy","VALID_PEER_COUNTRY_STRATEGY_QUERY_PARAMS","GrapherTooltipAnchor","LogoOption","ColorSchemeName","MapRegionName","GRAPHER_ALL_QUERY_PARAMS","GRAPHER_QUERY_PARAM_KEYS","grapherKeysToSerialize","GrapherVariant","GrapherWindowType","Position","HorizontalAlign","VerticalAlign","AxisAlign","ContentGraphLinkType","BlockSize","ChartConfigType","OwidGdocType","ALL_CHARTS_ID","KEY_INSIGHTS_ID","LICENSE_ID","CITATION_ID","ENDNOTES_ID","RESEARCH_AND_WRITING_ID","FEATURED_METRICS_ID","FEATURED_DATA_INSIGHTS_ID","EXPLORE_DATA_SECTION_ID","RESEARCH_AND_WRITING_DEFAULT_HEADING","EXPLORE_DATA_SECTION_DEFAULT_TITLE","gdocUrlRegex","DEFAULT_GDOC_FEATURED_IMAGE","DEFAULT_THUMBNAIL_FILENAME","ARCHIVED_THUMBNAIL_FILENAME","joinTitleFragments","attributionShort","titleVariant","OwidVariableRoundingMode","InputType","TransformType","JsTypes","ErrorValue","OwidTableSlugs","ColumnTypeNames","OwidEntityNameColumnDef","OwidEntityIdColumnDef","OwidEntityCodeColumnDef","StandardOwidColumnDefs","ZodISODateTime","core.$ZodISODateTime","schemas.ZodStringFormat","core._isoDateTime","ZodISODate","core.$ZodISODate","core._isoDate","ZodISOTime","core.$ZodISOTime","core._isoTime","ZodISODuration","core.$ZodISODuration","core._isoDuration","core.formatError","core.flattenError","ZodRealError","core._parse","core._parseAsync","core._safeParse","core._safeParseAsync","encode","core._encode","decode","core._decode","encodeAsync","core._encodeAsync","decodeAsync","core._decodeAsync","safeEncode","core._safeEncode","safeDecode","core._safeDecode","safeEncodeAsync","core._safeEncodeAsync","safeDecodeAsync","core._safeDecodeAsync","ZodType","util.mergeDefs","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","check","refine","refinement","superRefine","checks.overwrite","nullable","nonoptional","intersection","pipe","_default","prefault","_catch","readonly","description","core.globalRegistry","_ZodString","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","ZodString","core._email","ZodEmail","core._url","ZodURL","core._jwt","ZodJWT","core._emoji","ZodEmoji","core._guid","ZodGUID","core._uuid","ZodUUID","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","ZodNanoID","core._cuid","ZodCUID","core._cuid2","ZodCUID2","core._ulid","ZodULID","core._base64","ZodBase64","core._base64url","ZodBase64URL","core._xid","ZodXID","core._ksuid","ZodKSUID","core._ipv4","ZodIPv4","core._ipv6","ZodIPv6","core._cidrv4","ZodCIDRv4","core._cidrv6","ZodCIDRv6","core._e164","ZodE164","iso.datetime","iso.date","iso.time","iso.duration","ZodStringFormat","core.$ZodStringFormat","core.$ZodEmail","core.$ZodGUID","core.$ZodUUID","core.$ZodURL","core.$ZodEmoji","core.$ZodNanoID","core.$ZodCUID","core.$ZodCUID2","core.$ZodULID","core.$ZodXID","core.$ZodKSUID","core.$ZodIPv4","core.$ZodIPv6","core.$ZodCIDRv4","core.$ZodCIDRv6","core.$ZodBase64","core.$ZodBase64URL","core.$ZodE164","core.$ZodJWT","ZodNumber","checks.gt","checks.gte","checks.lt","checks.lte","int","checks.multipleOf","ZodNumberFormat","core.$ZodNumberFormat","core._int","ZodUnknown","core.$ZodUnknown","unknown","core._unknown","ZodNever","core.$ZodNever","never","core._never","ZodArray","minLength","maxLength","len","core._array","ZodObject","core.$ZodObjectJIT","incoming","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","ZodOptional","util.required","ZodNonOptional","ZodUnion","core.$ZodUnion","ZodIntersection","core.$ZodIntersection","ZodEnum","newEntries","ZodTransform","core.$ZodTransform","ZodNullable","core.$ZodNullable","ZodDefault","core.$ZodDefault","util.shallowClone","ZodPrefault","core.$ZodPrefault","core.$ZodNonOptional","ZodCatch","core.$ZodCatch","catchValue","ZodPipe","core.$ZodPipe","in_","ZodReadonly","core.$ZodReadonly","ZodCustom","core.$ZodCustom","core._refine","core._superRefine","GRAPHER_PREVIEW_CLASS","ARCHIVE_DATE_TIME_FORMAT","logBinningStrategies","equalSizeBinningStrategies","automaticBinningStrategies","MediumVariantGridSlotKey","LargeVariantGridSlotKey","EventCategory","GrapherErrorAction","PagesIndexRecordSchema","z.array","ChartRecordType","SearchIndexName","FilterType","SearchResultType","SearchUrlParam","PointVector","magnitude","lhs","rhs","l2","K","E","A","P","T","B","N","W$1","I","I$3","W","CAMELCASE_REGEXP_PATTERN","replace","dictionary","replacement","addedCharsCount","LOWERCASE_TRANSFORMER","fragments","separator","COMBINING_CHARS","CONVERT","CONVERT_CAMELCASE","camelCase","transformer","createFormatter","currency","getRootSVG","getRelativeMouse","event","eventOwner","checkIsTouchEvent","clientX","clientY","svg","svgPoint","point","rect","exposeInstanceOnWindow","component","alsoOnTopWindow","win","makeSafeForCSS","makeSafeForFigma","makeFigmaId","unsafeKeys","convertDaysSinceEpochToDate","dayAsYear","formatDay","formatYear","year","numberMagnitude","num","normaliseToSingleDigitNumber","roundSigFig","sigfigs","_.round","excludeUndefined","arr","excludeNull","excludeNullish","firstOfNonEmptyArray","R.first","lastOfNonEmptyArray","R.last","domainExtent","numValues","scaleType","maxValueMultiplierForPadding","filterValues","minValue","maxValue","cagr","startValue","endValue","yearsElapsed","ratio","slugify","allowSlashes","normalizedStr","subscriptMap","superscriptMap","slugifySameCase","slug","pointsToPath","points","sortedFindClosestIndex","endIndex","sortedFindClosest","isMobile","isTouchDevice","csvEscape","valueStr","_.toString","trimObject","trimStringEmptyStrings","_.isObject","_.isEmpty","fetchText","fetchWithRetry","fetchJson","response","fetchWithTimeout","timeoutMs","abortController","timeoutId","_getUserCountryInformation","getUserCountryInformation","_.memoize","stripHTML","getRandomNumberGenerator","seed","semiRand","sampleFrom","howMany","shuffleArray","clonedArr","replacerIndex","getIdealGridParams","containerAspectRatio","idealAspectRatio","initialColumns","rows","columns","findClosestTimeIndex","timesAsc","targetTime","tolerance","closestIndex","R.sortedIndex","higherOrEqualVal","lowerVal","lowerDiff","higherDiff","isNegativeInfinity","timeBound","isPositiveInfinity","findClosestTime","es6mapValues","valuesAtTimes","valueByTime","targetTimes","sortNumeric","valuesByEntityAtTimes","valueByEntityAndTime","MS_PER_DAY","dateDiffInDays","utca","utcb","diffDateISOStringInDays","getYearFromISOStringAndDayOffset","epoch","daysOffset","sleep","ms","fetchOptions","retryOptions","retryPromise","promiseGetter","maxRetries","exponentialBackoff","initialDelay","retried","delay","parseFloatOrUndefined","anyToString","isDocumentElement","scrollTo","top","scrollIntoViewIfNeeded","containerEl","focusedEl","menuRect","focusedRect","overScroll","rollingMap","keyMap","accessor","intersectionOfSets","sets","elem","differenceOfSets","diff","arrs","sortByUndefinedLast","sorted","_.sortBy","mapped","mapNullToUndefined","lowerCaseFirstLetterUnlessAbbreviation","sortByFn","_.identity","sortOrder","getClosestTimePairs","sortedTimesA","sortedTimesB","maxDiff","decidedPairs","undecidedPairs","indexB","indexA","timeA","closestIndexInB","lowCandidateIndexB","highCandidateIndexB","seenTimes","omitUndefinedValues","isInIFrame","differenceObj","defaultObj","findDOMParent","condition","textAnchorFromAlign","dyFromAlign","stringifyUnknownError","triggerDownloadFromBlob","filename","blob","objectUrl","triggerDownloadFromUrl","downloadLink","removeAllWhitespace","text","formatDate","deserializeOwidGdocPageData","json","canWriteToClipboard","copyToClipboard","textarea","imemo","bind","boundMethod","spansToUnformattedPlainText","spans","span","isArrayOfNumbers","greatestCommonDivisor","findGreatestCommonDivisorOfArray","_.uniq","acc","detailOnDemandRegex","guidedChartRegex","extractDetailsFromSyntax","term","commafyFormatter","lazy","commafyNumber","isFiniteWithGuard","getAllChildrenOfArea","area","children","child","flattenNonTopicNodes","tagGraph","flattenNodes","nodes","formatInlineList","connector","hasRun","isArrayDifferentFromReference","referenceArray","_.difference","readFromAssetMap","assetMap","fallback","assetValue","getUserNavigatorLanguages","getUserNavigatorLanguagesNonEnglish","lang","objects","_.mergeWith","calculateTrendDirection","stripOuterParentheses","getDisplayUnit","column","allowTrivial","isTrivial","unit","dimensionsToViewId","dimensions","keyA","keyB","parseArchivalDate","dateInput","formatAsArchivalDate","getOriginAttributionFragments","origins","yearPublished","yearPublishedString","splitSourceTextIntoFragments","fragment","getAttributionFragmentsFromVariable","variable","originAttributionFragments","_.compact","getETLPathComponents","channel","producer","dataset","table","indicator","formatAuthors","authors","formatAuthorsForBibtex","isDate","dateRegex","getLastUpdatedFromVariable","originDates","latestDate","getNextUpdateFromVariable","lastUpdated","nextUpdate","nextUpdateDate","getPhraseForProcessingLevel","processingLevel","prepareOriginForDisplay","label","prepareSourcesForDisplay","sourcesForDisplay","getYearSuffixFromOrigin","getCitationShort","attributions","owidProcessingLevel","producersWithYear","processingLevelPhrase","attributionFragments","getDateForCitation","getPhraseForArchivalDate","archivalDate","parsedDate","getCitationLong","indicatorTitle","citationUrl","sourceShortName","citationLonger","titleWithOptionalFragments","originsLong","today","archivalString","formatSourceDate","getDateRange","dateRange","dateRangeRegex","firstYearString","lastYearString","firstYear","lastYear","formattedFirstYear","formattedLastYear","isPresent","checkIsVeryShortUnit","checkIsUnitCurrency","checkIsUnitPercent","getTrim","roundingMode","trailingZeroes","getSign","showPlus","getSymbol","getType","numberAbbreviation","getPrecision","numDecimalPlaces","numSignificantFigures","replaceSIPrefixes","prefixMap","postprocessString","spaceBeforeUnit","useNoBreakSpace","tooSmallThreshold","appendage","formatValue","formatter","formattedString","hasAnInfinity","formatTimeBound","parseTimeBound","fromJSON","R.isString","toJSON","minTimeBoundFromJSONOrNegativeInfinity","minTime","maxTimeBoundFromJSONOrPositiveInfinity","maxTime","minTimeToJSON","maxTimeToJSON","reISODateComponent","reISODate","timeBoundToTimeBoundString","parseTimeURIComponent","param","upgradeLegacyTimeString","getTimeDomainFromQueryString","reIntComponent","reIntRange","reDateRange","timebound","regionsData","regions","checkIsCountry","region","checkIsAggregate","checkIsOwidContinent","checkIsIncomeGroup","checkHasMembers","checkIsOwidIncomeGroupCode","code","getIncomeGroups","incomeGroup","countries","entity","mappableCountries","country","getContinents","getAggregates","listedRegionsNames","getRegionDataProviders","getAggregatesByProvider","provider","regionsByName","regionsByCode","regionsByShortName","regionsByNameOrVariantNameLowercase","names","variant","countriesByName","getRegionByName","getRegionByCode","getRegionByShortName","shortName","getRegionByNameOrVariantName","nameOrVariantName","parentRegions","memberCode","subRegion","getParentRegions","regionName","getContinentForCountry","countryName","getCountryNamesForRegionRecursive","countryNames","getCountryNamesForRegion","_IntlDisplayNamesInstances","getRegionTranslation","regionCode","languageCode","_regionAlternativeNames","getRegionAlternativeNames","languages","translationCodes","shortCode","codes","translation","requiresPort","port","protocol","has","undef","querystring","query","parser","part","querystringify","querystringify_1","qs","controlOrWhitespace","CRHTLF","slashes","protocolre","windowsDriveLetter","trimLeft","rules","isSpecial","ignore","lolcation","loc","globalVar","location","finaldestination","Url","scheme","extractProtocol","forwardSlashes","otherSlashes","slashesCount","rest","base","unshift","up","extracted","instruction","instructions","ins","stringify","host","urlParse","strToQueryParams","queryStr","doNotDecode","querySplit","decodedKey","decoded","queryParamsToStr","newQueryStr","getWindowQueryStr","setWindowQueryStr","parseUrl","urlParseLib","ensureStartsWith","ensureQueryStrFormat","ensureHashFormat","pathname","hash","queryParams","strings","otherUrl","thisParams","otherParams","R.isShallowEqual","setWindowUrl","getWindowUrl","makeLinkedCalloutKey","fullUrl","findYDataPoint","columnSlug","col","dp","yValues","getCalloutValue","functionName","parameters","FontFamily","widthsMap","getPixelWidth","settings","font","fontVariants","charWidths","totalWidth","Bounds","height","bbox","p1","p2","x1","x2","y1","y2","boundsList","fontSize","fontWeight","fontFamily","isItalic","isBold","bounds","amount","_.isNumber","_.mapValues","scale","otherBounds","r2","gridParams","columnPadding","rowPadding","outerPadding","contentWidth","contentHeight","boxWidth","boxHeight","hasCell","row","_.range","cellEdges","cx","cy","objectWithPersistablesToObject","objWithPersistables","keysToSerialize","keysSet","valIsPersistable","updatePersistables","currentVal","currentValIsPersistableObject","newVal","deleteRuntimeAndUnchangedProps","changedObj","defaultObject","defaultKeys","_.isEqual","OwidVariableDisplayConfigDefaults","OwidVariableDisplayConfig","performUrlMigrations","migrations","migration","removeDiacritics","jsonCommentDelimiter","deserializeJSONFromHTML","delimiter","PromiseCache","createPromiseFromKey","PromiseSwitcher","AUTHOR_BYLINE_WIDTH","THUMBNAIL_WIDTH","LARGE_THUMBNAIL_WIDTH","LARGEST_IMAGE_WIDTH","getArchivalSizes","originalWidth","widths","getSizes","generateSrcSet","sizes","absoluteUrl","appendImageSizeSuffix","extIndex","ext","generateArchivalSrcSet","image","generateSourceProps","smallImage","regularImage","buildProps","media","srcSet","encodedId","REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","maybeKey","reactJsxRuntime_production","jsxRuntimeModule","REACT_PORTAL_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_ACTIVITY_TYPE","MAYBE_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","ReactNoopUpdateQueue","emptyObject","Component","updater","partialState","ComponentDummy","PureComponent","pureComponentPrototype","isArrayImpl","ReactSharedInternals","ReactElement","refProp","cloneAndReplaceKey","oldElement","newKey","isValidElement","escape","escaperLookup","userProvidedKeyEscapeRegex","getElementKey","resolveThenable","thenable","fulfilledValue","mapIntoArray","escapedPrefix","nameSoFar","invokeCallback","nextNamePrefix","mapChildren","lazyInitializer","moduleObject","reportGlobalError","Children","forEachFunc","forEachContext","react_production","childArray","childrenLength","render","prevTransition","currentTransition","returnValue","onStartTransitionFinish","usable","initialState","permalink","deps","Context","initialValue","create","passthrough","reducer","initialArg","subscribe","getSnapshot","getServerSnapshot","reactModule","bottom","auto","basePlacements","clippingParents","viewport","popper","reference","variationPlacements","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","getWindow","ownerDocument","isElement","OwnElement","isHTMLElement","isShadowRoot","applyStyles","style","attributes","initialStyles","styleProperties","attribute","applyStyles$1","getBasePlacement","getBoundingClientRect","includeScale","scaleX","scaleY","offsetHeight","offsetWidth","getLayoutRect","clientRect","contains","rootNode","getComputedStyle","isTableElement","getDocumentElement","getParentNode","getTrueOffsetParent","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","getOffsetParent","window","offsetParent","getMainAxisFromPlacement","within","mathMax","mathMin","withinMaxClamp","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","hashMap","toPaddingObject","arrow","_state$modifiersData$","arrowElement","popperOffsets","basePlacement","axis","isVertical","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","axisProp","_options$element","arrow$1","getVariation","unsetSides","roundOffsetsByDPR","dpr","mapToStyles","_Object$assign2","popperRect","variation","offsets","position","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","_ref4","_Object$assign","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles$1","passive","instance","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","eventListeners","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","getViewportRect","visualViewport","getDocumentRect","_element$ownerDocumen","winScroll","body","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","isBody","updatedList","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","getExpandedFallbackPlacements","oppositePlacement","flip","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","fallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","numberOfChecks","_loop","fittingPlacement","_ret","flip$1","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","hide","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide$1","distanceAndSkiddingToXY","rects","invertDistance","skidding","distance","_options$offset","_data$state$placement","offset$1","popperOffsets$1","getAltAxis","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","altAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow$1","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","documentElement","modifiers","visited","modifier","sort","requires","depModifier","orderModifiers","orderedModifiers","phase","pending","mergeByName","existing","DEFAULT_OPTIONS","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","runModifierEffects","_state$elements","_state$orderedModifie","_state$orderedModifie2","_ref3$options","cleanupFn","noopFn","createPopper","BOX_CLASS","CONTENT_CLASS","BACKDROP_CLASS","ARROW_CLASS","SVG_ARROW_CLASS","TOUCH_OPTIONS","TIPPY_DEFAULT_APPEND_TO","getValueAtIndexOrReturn","invokeWithArgsOrReturn","timeout","splitBySpaces","normalizeToArray","pushIfUnique","arrayFrom","removeUndefinedProps","div","isNodeList","isMouseEvent","isReferenceElement","getArrayOfElements","setTransitionDuration","els","setVisibilityState","getOwnerDocument","elementOrElements","_normalizeToArray","isCursorOutsideInteractiveBorder","popperTreeData","popperState","interactiveBorder","topDistance","bottomDistance","leftDistance","rightDistance","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","updateTransitionEndListener","box","method","actualContains","_target$getRootNode","currentInput","lastMouseMoveTime","onDocumentTouchStart","onDocumentMouseMove","onWindowBlur","activeElement","bindGlobalEventListeners","isBrowser","isIE11","pluginProps","renderProps","defaultProps","setDefaultProps","partialProps","getExtendedPassedProps","passedProps","plugins","plugin","_name","getDataAttributeProps","propKeys","valueAsString","evaluateProps","innerHTML","dangerouslySetInnerHTML","createArrowElement","setContent","content","getChildren","boxChildren","onUpdate","prevProps","nextProps","_getChildren","idCounter","mouseMoveListeners","mountedInstances","createTippy","showTimeout","hideTimeout","scheduleHideAnimationFrame","isVisibleFromClick","didHideDueToDocumentMouseDown","didTouchMove","ignoreOnFirstUpdate","lastTriggerEvent","currentTransitionEndListener","onFirstUpdate","debouncedOnMouseMove","onMouseMove","currentTarget","popperInstance","clearDelayTimeouts","setProps","show","hideWithInteractivity","enable","disable","unmount","destroy","_props$render","pluginsHooks","hasAriaExpanded","addListeners","handleAriaExpandedAttribute","handleStyles","invokeHook","scheduleShow","getDocument","getNormalizedTouchSettings","touch","getIsCustomTouchBehavior","getIsDefaultRenderFn","_instance$props$rende","getCurrentTarget","getDefaultTemplateChildren","getDelay","isShow","fromHide","shouldInvokePropsHook","pluginHooks","_instance$props","handleAriaContentAttribute","aria","attr","cleanupInteractiveMouseListeners","onDocumentPress","actualTarget","removeDocumentPress","onTouchMove","onTouchStart","addDocumentPress","onTransitionedOut","onTransitionEnd","onTransitionedIn","on","eventType","onTrigger","onMouseLeave","onBlurOrFocusOut","removeListeners","_lastTriggerEvent","shouldScheduleClickHide","isEventListenerStopped","wasFocused","scheduleHide","isCursorOverReferenceOrPopper","getNestedPopperTree","_instance$popperInsta","shouldBail","createPopperInstance","destroyPopperInstance","_instance$props2","popperOptions","getReferenceClientRect","moveTransition","computedReference","tippyModifier","_getDefaultTemplateCh","mount","appendTo","parentNode","_getNormalizedTouchSe","touchValue","touchDelay","nestedPopper","isAlreadyVisible","isDisabled","isTouchAndTouchDisabled","_getDefaultTemplateCh2","_instance$popperInsta2","_getDefaultTemplateCh3","_box","_content","isAlreadyHidden","_getDefaultTemplateCh4","tippy","targets","optionalProps","elements","instances","hideAll","_temp","excludedReferenceOrInstance","isExcluded","originalDuration","React","formatProdErrorMessage","Internals","createPortal$1","containerInfo","implementation","getCrossOriginStringAs","as","reactDom_production","container","previousTransition","previousUpdatePriority","href","crossOrigin","integrity","fetchPriority","checkDCE","reactDomModule","_objectWithoutPropertiesLoose","excluded","sourceKeys","preserveRef","ssrSafeCreateDiv","toDataAttributes","dataAttrs","uniqueByShape","outputItem","deepPreserveProps","instanceProps","componentProps","_instanceProps$popper","_componentProps$poppe","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","useMutableBox","useRef","updateClassName","classNames","classNamePlugin","isDefaultRenderFn","add","remove","TippyGenerator","Tippy","visible","singleton","_ref$disabled","disabled","_ref$ignoreAttributes","ignoreAttributes","restOfNativeProps","isControlledMode","isSingletonMode","_useState","useState","mounted","setMounted","_useState2","setAttrs","_useState3","singletonContent","setSingletonContent","mutableBox","computedProps","_instance$props$poppe","_state$modifiersData","hideData","createPortal","forwardRef","forwardRef$1","cloneElement","tippyProps","TippyInstance","LazyTippy","OriginalTippy","jsx","React.useState","lazyPlugin","isAndroid","isIOS","DEBUG_BUILD","GLOBAL_OBJ","SDK_VERSION","getMainCarrier","getSentryCarrier","carrier","__SENTRY__","getGlobalSingleton","creator","PREFIX","originalConsoleMethods","consoleSandbox","console","wrappedFuncs","wrappedLevels","level","originalConsoleMethod","_getLoggerSettings","isEnabled","log","_maybeLog","warn","isError","wat","isInstanceOf","isBuiltin","isThenable","addNonEnumerableProperty","RESOLVED_RUNNER","withRandomSafeContext","sym","globalWithSymbol","safeMathRandom","safeDateNow","truncate","getCrypto","gbl","emptyUuid","getRandomByte","uuid4","ONE_SECOND_IN_MS","dateTimestampInSeconds","createUnixTimestampInSecondsFunc","performance","timeOrigin","_cachedTimestampInSeconds","timestampInSeconds","updateSession","session","initialObj","mergeObj","levels","generateTraceId","SCOPE_SPAN_FIELD","_setSpanForScope","_getSpanForScope","DEFAULT_MAX_BREADCRUMBS","Scope","newScope","client","lastEventId","user","conversationId","tags","newAttributes","extras","extra","fingerprint","captureContext","scopeToMerge","scopeInstance","contexts","propagationContext","breadcrumb","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","attachment","newData","exception","hint","eventId","syntheticException","getDefaultCurrentScope","getDefaultIsolationScope","AsyncContextStack","isolationScope","assignedScope","assignedIsolationScope","maybePromiseResult","getAsyncContextStack","sentry","withScope","withSetScope","withIsolationScope","getStackAsyncContextStrategy","_isolationScope","getAsyncContextStrategy","getCurrentScope","getIsolationScope","acs","getClient","DSN_REGEX","isValidProtocol","dsnToString","dsn","withPassword","pass","projectId","publicKey","dsnFromString","lastPath","split","projectMatch","dsnFromComponents","components","validateDsn","makeDsn","parseEventHintOrCaptureContext","hintIsScopeOrFunction","hintIsScopeContext","captureContextKeys","captureException","captureMessage","getBaseApiEndpoint","getReportDialogEndpoint","dsnLike","dialogOptions","endpoint","encodedOptions","WINDOW","showReportDialog","optionalDocument","injectionPoint","mergedOptions","script","onLoad","onClose","reportDialogClosedMessageHandler","KEYS_EXCLUDED_FROM_INHERITANCE","mergeGrapherConfigs","grapherConfigs","configsToMerge","configsWithoutSchema","configsJson","uniqueSchemas","Sentry.captureMessage","cleanedConfigs","_.omit","MultiDimDataPageConfig","jsonString","choices","_.keyBy","_.groupBy","dimensionsEnriched","dimension","dimensionSlug","choiceSlug","matchingViews","selectedChoices","updatedSelectedChoices","dimensionsWithAvailableChoices","currentDimSlug","currentDim","availableViewsBeforeSelection","availableChoicesForDimension","choice","variableMetadata","mdimConfigView","viewConfigId","display","extractMultiDimChoicesFromSearchParams","searchParams","dimensionChoices","searchParamsToMultiDimView","mdimConfig","UMD","search","NULL","preparedSearch","getPreparedSearch","isPrepared","getPrepared","searchBitflags","go","all","noResults","containsSpace","threshold","denormalizeScore","limit","resultsLen","limitedCount","targetsLen","push_result","q","keysLen","keysBitflags","keyI","tmpTargets","noTarget","keysSpacesBestScores","NEGATIVE_INFINITY","tmpResults","allowPartialMatchScores","tmp","hasAtLeast1Match","objResults","KeysResult","score","highlight","open","close","targetLen","indexes","highlighted","matchI","indexesI","opened","prepare","info","prepareLowerInfo","new_result","cleanup","preparedCache","preparedSearchCache","Result","normalizeScore","normalizedScore","prepareSearch","spaceSearches","searches","_info","targetPrepared","searchPrepared","prepared","allowSpaces","allowPartialMatch","algorithmSpaces","searchLower","searchLowerCodes","searchLowerCode","targetLowerCodes","searchLen","searchI","targetI","matchesSimpleLen","isMatch","matchesSimple","successStrict","matchesStrictLen","nextBeginningIndexes","prepareNextBeginningIndexes","backtrackCount","lastMatch","matchesStrict","substringIndex","isSubstring","isSubstringBeginning","calculateScore","matches","extraMatchGroupCount","unmatchedDistance","uniqueBeginningIndexes","matchesBest","seen_indexes","first_seen_index_last_search","searchesLen","changeslen","resetNextBeginningIndexes","nextBeginningIndexesChanges","isTheLastSearch","indexesIsConsecutiveSubstring","newBeginningIndex","toReplace","allowSpacesResult","remove_accents","strLen","lowerCodes","bitflags","lowerCode","bit","prepareBeginningIndexes","beginningIndexes","beginningIndexesLen","wasUpper","wasAlphanum","targetCode","isUpper","isAlphanum","isBeginning","lastIsBeginning","lastIsBeginningI","segs","fastpriorityqueue","FuzzySearch","datamap","uniqByFn","rawStrings","fuzzysort","keyFn","keysFn","_.uniqBy","validateUniqueStrings","EXPERIMENT_ARM_SEPARATOR","EXPERIMENT_PREFIX","DEFAULT_COOKIE_EXPIRY","Experiment","asExperimentId","asArmId","total","arm","experiments","defaultConverter","converter","defaultAttributes","stringifiedAttributes","attributeName","cookies","jar","found","api","defaultExperimentState","getExperimentState","activeExperiments","exp","activeExperimentMap","assignedExperiments","getAssignedExperiments","currentPath","expId","armId","experiment","allCookies","Cookies","cookieName","buildChartHitDataDisplayProps","chartInfo","chartType","isEntityPickedByUser","showTimeRange","endDatapoint","findDatapoint","startDatapoint","columnInfo","xSlug","xColumnInfo","trend","showLocationIcon","yDims","historicalDims","dim","getTableColumnCountForGridSlotKey","slot","placeGrapherTabsInMediumVariantGridLayout","tabs","placedMainTabs","assignTabsToGridSlotKeys","placedRemainingTabs","tab","tabIndex","placeTabsInUniformGrid","_.sumBy","slotKey","maxNumTabs","numCharts","numAvailableSlotsForTable","numSlotsForTable","numNeededSlotsForTable","tableSlot","getGridSlotKeyForCount","slotCount","ColorScaleConfigDefaults","ColorScaleConfig","_.extend","colorSchemeInvert","baseColorScheme","customNumericValues","customNumericLabels","customNumericColors","INTER_BIN_DELIMITER","bin","color","INTRA_BIN_DELIMITER","customNumericColorsActive","customCategoryColors","customCategoryLabels","NO_DATA_LABEL","binningStrategy","legendDescription","CustomColorSchemes","OwidDistinctColors","DarkerOwidDistinctColors","darkerColorReplacementsHexToReplacementColorName","CategoricalColorsPaletteA","CategoricalColorsPaletteB","CategoricalColorsPaletteC","CategoricalColorsPaletteD","CategoricalColorsPaletteE","OwidDistinctColorScheme","OwidDistinctLinesPalette","OwidDistinctLinesColorScheme","OwidCategoricalAScheme","OwidCategoricalBScheme","OwidCategoricalCScheme","OwidCategoricalDScheme","OwidCategoricalEScheme","EnergyColors","EnergyColorPalette","OwidEnergy","OwidEnergyLines","getModifiedLinesColorScheme","IncomeGroupColors","ContinentColors","ContinentColorPalette","ContinentColorsColorScheme","colorScheme","modifiedColors","modifiedColorMap","ContinentColorsLinesColorScheme","SingleColorDenim","SingleColorTeal","SingleColorPurple","SingleColorDustyCoral","SingleColorDarkCopper","SingleColorGradientDenim","SingleColorGradientTeal","SingleColorGradientPurple","SingleColorGradientDustyCoral","SingleColorGradientDarkCopper","BinaryMapPaletteA","BinaryMapPaletteB","BinaryMapPaletteC","BinaryMapPaletteD","BinaryMapPaletteE","OwidMapColors","CategoricalMapPalette10","CategoricalMapPalette17","OwidCategoricalMapScheme","MapContinentColors","define","factory","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","rgbn","Rgb","rgba","hsla","rgbConvert","rgb","opacity","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","Hsl","hsl","m2","m1","hsl2rgb","clamph","clampt","constant$4","linear","exponential","gamma","nogamma","interpolateRgb","rgbGamma","colorRgb","numberArray","isNumberArray","genericArray","nb","na","interpolateNumber","object$1","reA","reB","one","interpolateString","bi","am","bm","bs","interpolate$1","interpolateRound","degrees","decompose","skewX","svgNode","parseCss","parseSvg","interpolateTransform","pxComma","pxParen","degParen","pop","translate","xa","ya","xb","yb","rotate","interpolateTransformCss","interpolateTransformSvg","epsilon2","cosh","sinh","tanh","interpolateZoom","zoomRho","rho","rho2","rho4","zoom","p0","ux0","uy0","w0","ux1","uy1","w1","dx","dy","d2","d1","b0","b1","r0","r1","coshr0","_1","_2","_4","quantize","interpolator","samples","interpolateArray","scaleArr","intervalWidth","intervals","interpolate","intervalOffset","getLeastUsedColor","availableColors","usedColors","unusedColors","colorCounts","_.minBy","getYiq","calculateLightnessScore","colorHex","isDarkColor","colorSpecifier","darkenColorToTargetYiq","targetYiq","darkenCoeff","darkenColorForLine","darkenColorForText","darkenColorForHighContrastText","ColorScheme","colorSets","singleColorScale","isDistinct","colorMap","shortColors","numColors","newColors","_.clone","startColor","endColor","newColor","knownColors","prevColors","colorSet","uniqValues","inverseOrder","colors","colorByValue","colorSetsArray","colorbrewer","ColorBrewerSchemeIndex","getColorBrewerScheme","initColorScheme","_colorSchemes","ColorSchemes","schemeRaw","GRAY_100","GRAY_80","GRAY_70","GRAY_60","GRAY_30","GRAY_10","GRAPHER_BACKGROUND_DEFAULT","GRAPHER_DARK_TEXT","GRAPHER_LIGHT_TEXT","OWID_NO_DATA_GRAY","OWID_ERROR_COLOR","dispatch","Dispatch","parseTypenames","typenames","typename","that","xhtml","namespaces","namespace$1","creatorInherit","document","creatorFixed","fullname","namespace","none","selector","selection_select","select","groups","subgroups","subgroup","subnode","Selection","empty","selectorAll","arrayAll","selection_selectAll","parents","matcher","childMatcher","find","childFind","childFirst","selection_selectChild","filter","childrenFilter","selection_selectChildren","selection_filter","sparse","update","selection_enter","EnterNode","datum","constant$3","bindIndex","enter","exit","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","keyValue","selection_data","arraylike","enterGroup","updateGroup","exitGroup","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","selection","groups0","groups1","m0","merges","group0","group1","selection_order","selection_sort","compareNode","sortgroups","sortgroup","selection_call","selection_nodes","selection_node","selection_size","selection_empty","selection_each","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","selection_attr","defaultView","styleRemove","styleConstant","priority","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","classList","ClassList","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","selection_lower","selection_append","constantNull","selection_insert","before","selection_remove","selection_cloneShallow","selection_cloneDeep","selection_clone","deep","selection_datum","contextListener","onRemove","onAdd","selection_on","dispatchEvent","dispatchConstant","dispatchFunction","selection_dispatch","selection_iterator","selection_selection","sourceEvent","pointer","nonpassivecapture","noevent$1","dragDisable","noevent","yesdrag","noclick","frame","interval","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","timer","timerFlush","wake","nap","poke","t0","t1","t2","timeout$2","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","schedule","timing","schedules","tween","tick","interrupt","active","selection_interrupt","tweenRemove","tween0","tween1","tweenFunction","transition_tween","tweenValue","transition","string00","string1","interpolate0","string0","string10","transition_attr","attrInterpolate","attrInterpolateNS","attrTweenNS","attrTween","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","easeVarying","transition_easeVarying","transition_filter","Transition","transition_merge","onFunction","on0","on1","sit","transition_on","removeFunction","transition_remove","transition_select","transition_selectAll","transition_selection","styleNull","styleMaybeRemove","listener0","transition_style","styleInterpolate","styleTween","transition_styleTween","transition_text","textInterpolate","textTween","transition_textTween","transition_transition","id0","id1","newId","transition_end","selection_prototype","quadOut","cubicOut","cubicInOut","defaultTiming","easeCubicInOut","selection_transition","pi","tau","epsilon","tauEpsilon","append","appendRound","digits","Path","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","a0","a1","ccw","cw","da","splitter","resulterrbound","elen","flen","Q","Qnew","hh","bvirt","enow","fnow","eindex","findex","hindex","estimate","vec","ccwerrboundA","ccwerrboundB","ccwerrboundC","C1","C2","orient2dadapt","ax","ay","bx","by","detsum","acxtail","acytail","bcxtail","bcytail","ahi","alo","bhi","blo","_j","_0","s1","s0","u3","acx","bcx","acy","bcy","det","errbound","C1len","C2len","Dlen","orient2d","detleft","detright","tree_add","tree","leaf","xm","ym","xp","yp","addAll","xz","yz","tree_cover","tree_data","tree_extent","Quad","tree_find","radius","x3","y3","quads","tree_remove","retainer","removeAll","tree_root","tree_size","tree_visit","tree_visitAfter","defaultX","tree_x","defaultY","tree_y","quadtree","Quadtree","leaf_copy","treeProto","tree_addAll","tree_removeAll","constant$2","lcg","initialRadius","initialAngle","forceSimulation","simulation","alpha","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","random","force","initializeNodes","angle","initializeForce","closest","forceX","strength","strengths","initialize","forceY","halfPi","quarterPi","radians","abs","atan","atan2","cos","ceil","hypot","pow","sin","sqrt","tan","acos","asin","haversin","streamGeometry","geometry","stream","streamGeometryType","streamObjectType","features","coordinates","streamLine","streamPolygon","geometries","closed","coordinate","geoStream","areaRingSum","areaSum","lambda00","phi00","lambda0","cosPhi0","sinPhi0","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","phi0","lambda1","phi1","lambda2","deltaSum","ranges","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","linePoint","normal","equatorial","inflection","lambdai","phii","antimeridian","rangeCompare","rangeContains","geoBounds","deltaMax","W0","W1","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","z0","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","geoCentroid","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","direction","cosRadius","sinRadius","circleRadius","clipBuffer","pointEqual","Intersection","clipRejoin","segments","compareIntersection","startInside","subject","clip","segment","link","isSubject","longitude","polygonContains","polygon","winding","ring","point0","sinPhi1","cosPhi1","point1","absDelta","arc","phiArc","pointVisible","clipLine","sink","ringBuffer","ringSink","polygonStarted","lineStart","lineEnd","pointRing","ringStart","ringEnd","pointLine","clean","ringSegments","validSegment","clipAntimeridian","clipAntimeridianLine","clipAntimeridianInterpolate","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","to","clipCircle","cr","smallRadius","notHemisphere","c0","v0","v00","point2","intersect","two","pa","pb","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","polar","meridian","q1","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","activeStream","bufferStream","x__","y__","v__","x_","y_","v_","clipStream","polygonStart","polygonEnd","polygonInside","cleanInside","graticuleX","graticuleY","graticule","DX","DY","X","geoInterpolate","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","identity$4","x00","y00","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","lengthSum","lengthRing","lengthStream","lengthPointFirst","lengthPoint","cacheDigits","cacheAppend","cacheRadius","cacheCircle","PathString","geoPath","projection","pointRadius","projectionStream","contextStream","pathArea","pathMeasure","pathBounds","pathCentroid","methods","TransformStream","fit","fitBounds","fitExtent","fitSize","fitWidth","fitHeight","maxDepth","cosMinDistance","resample","project","delta2","resampleNone","resampleLineTo","phi2","dx2","dy2","dz","a00","b00","c00","resampleStream","ringPoint","transformRadians","transformRotate","scaleTranslate","sx","sy","scaleTranslateRotate","cosAlpha","sinAlpha","ai","ci","fi","projectionMutator","projectAt","theta","preclip","postclip","projectResample","projectTransform","projectRotateTransform","cacheStream","invert","reset","recenter","conicProjection","azimuthalRaw","azimuthalInvert","sc","cc","azimuthalEqualAreaRaw","cxcy","geoAzimuthalEqualArea","mercatorRaw","tany","conicConformalRaw","fy","geoConicConformal","orthographicRaw","geoOrthographic","initRange","domain","constants","normalize","clamper","bimap","d0","polymap","bisect","interpolateValue","untransform","piecewise","rescale","continuous","tickFormat","linearish","prestep","maxIter","nice","transformLog","transformExp","transformLogn","transformExpn","pow10","powp","logp","reflect","loggish","logs","pows","transformPow","transformSqrt","transformSquare","powish","constant$1","withPath","Linear","curveLinear","d3_line","defined","curve","pointX","pointY","defined0","ZoomEvent","Transform","nopropagation","defaultFilter","defaultExtent","defaultTransform","defaultWheelDelta","defaultTouchable","defaultConstrain","translateExtent","dx0","dx1","dy0","dy1","constrain","wheelDelta","touchable","scaleExtent","touchstarting","touchfirst","touchending","wheelDelay","clickDistance2","tapDistance","wheeled","mousedowned","dblclicked","touchstarted","touchmoved","touchended","gesture","k0","k1","Gesture","wheelidled","mousemoved","mouseupped","dragEnable","touches","started","l0","l1","dl","isLogBinningStrategy","strategy","autoChooseLogBinningStrategy","magnitudeDiff","runLogBinningStrategy","conf","hasMidpoint","resolvedStrategy","calcMagnitudeDiff","bins","createLogBins","logSteps","exponentMin","exponentMax","candidates","R.range","pruneUnusedBins","isEqualSizeBinningStrategy","runEqualSizeBinningStrategy","targetBinCount","getTargetBinCountForEqualSizeBinsStrategy","createEqualSizeBins","normalisedRange","stepSizeInfo","candidateStepSize","numSteps","stepSize","stepSizeDifference","candidate","R.firstBy","actualStepSize","minValueRounded","steps","AUTO_EQUAL_BINS_MAX_MAGNITUDE_DIFF","lowerValue","upperValue","R.dropWhile","R.dropLastWhile","runBinningStrategy","hasValuesBelowMidpoint","hasValuesAboveMidpoint","autoChooseBinningStrategy","hasValidConfigForBinningStrategy","runBinningStrategyAroundMidpoint","midpointIdx","midpoint","computeMinMaxForStrategy","sortedValues","posValues","runResolvedBinningStrategy","leftRange","rightRange","biggerRange","R.takeWhile","binsRight","mirrorBinsAroundMidpoint","leftValues","rightValues","posValuesOnly","hasNegativeMinOrMaxValue","minValueForLog","maxValueForLog","lastValue","percentile99","binOffsets","filteredRightBins","leftBins","rightBins","_categoricalLegendBins_dec","_legendBins_dec","_numericLegendBins_dec","_numNumericBins_dec","_isManualBuckets_dec","_baseColors_dec","_noDataColor_dec","_customCategoryColors_dec","_bucketThresholds_dec","_autoBinThresholds_dec","_manualBinThresholds_dec","_singleColorScale_dec","_colorScheme_dec","_categoricalValues_dec","_maxPossibleValue_dec","_minPossibleValue_dec","_sortedNumericValues_dec","_hasProjectedDataBin_dec","_hasNoDataBin_dec","_legendDescription_dec","_colorScaleColumn_dec","_defaultNoDataColor_dec","_defaultColorScheme_dec","_baseColorScheme_dec","_customCategoryLabels_dec","_isColorSchemeInverted_dec","_customNumericLabels_dec","_customHiddenCategories_dec","_customNumericColors_dec","_customNumericColorsActive_dec","_customNumericValues_dec","_config_dec","_init","PROJECTED_DATA_LABEL","ColorScale","manager","__runInitializers","__publicField","labels","R.isNumber","categoricalValues","isColorSchemeInverted","minPossibleValue","maxPossibleValue","bucketThresholds","baseColors","baseColor","roundingOptions","displayMin","displayMax","isFirst","isLast","NumericBin","hasNoDataBin","hasProjectedDataBin","customHiddenCategories","allCategoricalValues","boundingOffset","CategoricalBin","__decoratorStart","__decorateElement","__decoratorMetadata","AbstractColorScaleBin","isProjection","isCategoricalBin","isNumericBin","isNoDataBin","isProjectedDataBin","_columnSlug_dec","_column_dec","_slug_dec","_table_dec","ChartDimensionDefaults","getDimensionColumnSlug","variableId","targetYear","ChartDimension","splitIntoFragments","separators","currText","joinFragments","_htmlStyle_dec","_lastLineWidth_dec","_width_dec","_height_dec","_singleLineHeight_dec","_lineCount_dec","_lines_dec","_separators_dec","_text_dec","_verticalAlign_dec","_fontFamily_dec","_fontWeight_dec","_fontSize_dec","_lineHeight_dec","_maxWidth_dec","HTML_OPENING_CLOSING_TAG_REGEX","startsWithNewline","shortenForTargetWidth","targetWidth","fontSettings","low","high","shortenWithEllipsis","ellipsisWidth","TextWrap","currentlyOpenTags","prependOpenTags","tagMatches","appendCloseTags","maxWidth","lineBounds","nextLine","nextBounds","wordWithoutNewline","_.max","lineHeight","verticalAlign","correctedTextHeight","containerHeight","correctedY","renderY","jsxs","React.Fragment","Fragment","renderX","emptyOptions","includeImageAlt","includeHtml","decodeNamedCharacterReference","characterReference","chunkStart","push","combineExtensions","extensions","syntaxExtension","extension","constructs","decodeNumericCharacterReference","normalizeIdentifier","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","normalizeUri","skip","factorySpace","effects","ok","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","initializeDocument","containerConstruct","tokenizeContainer","continued","childFlow","childToken","lineStartOffset","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","endOfFile","nok","classifyCharacter","resolveAll","events","called","attention","resolveAllAttention","tokenizeAttention","openingSequence","closingSequence","use","nextEvents","movePoint","attentionMarkers","marker","inside","after","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteContinuation","tokenizeBlockQuoteStart","contStart","contBefore","characterEscape","tokenizeCharacterEscape","tokenizeCharacterReference","test","numeric","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","tail","sequenceOpen","infoBefore","atNonLazyBreak","metaBefore","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","resolveCodeText","tokenizeCodeText","tailExitIndex","headEnterIndex","between","SpliceBuffer","initial","chunkedPush","subtokenize","eventsArray","jumps","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","adjust","breaks","slice","resolveContent","tokenizeContent","continuationConstruct","tokenizeContinuation","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","begin","factoryWhitespace","tokenizeDefinition","titleBefore","tokenizeTitleBefore","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","resolveHeadingAtx","tokenizeHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","resolveToHtmlFlow","tokenizeHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","continuation","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","tagOpen","declaration","commentEnd","comment","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","resolveAllLabelEnd","resolveToLabelEnd","tokenizeLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","newEvents","labelStart","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","sequence","tokenizeListContinuation","tokenizeListEnd","tokenizeListStart","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","resolveToSetextUnderline","tokenizeSetextUnderline","heading","paragraph","initializeFlow","atBlankEnding","afterConstruct","createResolver","initializeFactory","resolveAllLineSuffixes","initializeText","notText","extraResolver","resolveAllText","chunks","bufferIndex","chunk","contentInitial","flowInitial","insideSpan","resolveText","createTokenizer","columnStart","resolveAllConstructs","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","consume","defineSkip","sliceSerialize","sliceStream","addResult","expandTabs","serializeChunks","sliceChunks","_bufferIndex","_index","accountForPotentialSkip","chunkIndex","fields","construct","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","handleConstruct","store","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startBufferIndex","endBufferIndex","head","atTab","defaultConstructs","postprocess","preprocess","atCarriageReturn","preprocessor","endPosition","characterEscapeOrReference","decodeString","$0","$1","$2","stringifyPosition","pos","own","fromMarkdown","compiler","opener","onenterdata","codeFlow","emphasis","hardBreak","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcharacterreference","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","compile","resume","listStack","prepareList","defaultOnError","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","and","onExitError","ancestor","siblings","referenceType","combined","escapeStringRegexp","castFactory","anyFactory","propsFactory","typeFactory","tests","any","checkAsRecord","nodeAsRecord","testFunction","looksLikeANode","CONTINUE","EXIT","SKIP","visitParents","visitor","is","visit","subresult","grandparents","toResult","nodeAsParent","findAndReplace","ignored","toPairs","pairIndex","grandparent","matchObject","tupleOrList","tuple","toExpression","toFunction","urlRegex","remarkPlainLinks","turnIntoLink","_style_dec","_svgLinesWithDodReferenceNumbers_dec","_svgLines_dec","_htmlLines_dec","_tokensFromMarkdown_dec","_plaintext_dec","_detailsOrderedByReference_dec","_fontParams_dec","SUPERSCRIPT_NUMERALS","IRText","fontParams","IRWhitespace","IRLineBreak","IRElement","getLineWidth","getBreakpointBefore","splitLineAtBreakpoint","splitAllOnNewline","tokens","lineToPlaintext","IRBold","IRSuperscript","_.get","IRItalic","IRLink","IRDetailOnDemand","currentLine","unproccessed","firstLine","otherLines","breakWidth","tokenStartOffset","prevBreakpoint","_.sum","isTextToken","recursiveMergeTextTokens","splitIntoLines","processedLines","unprocessedLines","breakpoint","sumTextWrapHeights","spacer","_MarkdownTextWrap","React.Component","secondary","newLine","textWrapProps","mainMarkdownText","maybeBoldMarkdownText","secondaryMarkdownText","combinedTextContinued","combinedTextNewLine","mainTextWrap","canAppendTextToLastLine","convertMarkdownToIRTokens","references","tokensWithReferenceNumbers","appendReferenceNumbers","htmlLines","lineLengths","plaintextLine","MarkdownTextWrapLine","textProps","detailsMarker","textHeight","yOffset","getLineY","tokenIndex","currWidth","underline","MarkdownTextWrap","markdown","convertMarkdownNodeToIRTokens","splitted","textNode","traverse","_.cloneDeep","referenceIndex","existingTextWrap","textToAppend","reservedWidth","lastLineWidth","spaceWidth","availableWidthInLastLine","bold","nameRe","nameReJsx","whitespace","Schema","space","definitions","Info","powers","increment","booleanish","overloadedBoolean","spaceSeparated","commaSeparated","commaOrSpaceSeparated","DefinedInfo","mark","normals","caseSensitiveTransform","caseInsensitiveTransform","xlink","xmlns","xml","hastToReact","cap","dash","valid","Type","camelcase","dashes","kebab","htmlBase","svgBase","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","NEWLINE","FORWARD_SLASH","ASTERISK","EMPTY_STRING","TYPE_COMMENT","TYPE_DECLARATION","inlineStyleParser","lineno","updatePosition","msg","comments","declarations","decls","decl","__importDefault","mod","cjs","StyleToObject","inline_style_parser_1","styleObject","hasIterator","utilities","CUSTOM_PROPERTY_REGEX","HYPHEN_REGEX","NO_HYPHEN_REGEX","VENDOR_PREFIX_REGEX","MS_VENDOR_PREFIX_REGEX","skipCamelCase","character","trimHyphen","style_to_object_1","utilities_1","StyleToJS","pointEnd","pointStart","VFileMessage","causeOrReason","optionsOrParentOrPlace","reason","legacyCause","emptyMap","tableElements","tableCellElement","docs","toJsxRuntime","developmentCreate","productionCreate","mdxExpression","mdxJsxElement","mdxEsm","parentSchema","findComponentFromName","createElementProps","createChildren","addNode","addChildren","assert","crashEstree","createJsxElementProps","jsxDEV","isStaticChildren","alignValue","createProperty","objectExpression","countsByName","commas","spaces","parseStyle","transformStylesToCssCasing","styleToJs","allowExpression","identifiers","isIdentifierName","place","domCasing","cssCasing","transformStyleToCssCasing","toDash","urlAttributes","remarkParse","blockquote","language","strikethrough","footnoteReference","clobberPrefix","safeId","reuseCounter","sup","revert","subtype","contents","imageReference","inlineCode","linkReference","loose","listLoose","listItemLoose","spread","firstRow","tableContent","tableRow","cellIndex","cells","cell","tableCell","trimLines","trimLine","handlers","VOID","PRIMITIVE","ARRAY","OBJECT","DATE","REGEXP","MAP","SET","ERROR","BIGINT","env","deserializer","unpair","deserialize","serialized","EMPTY","typeOf","asString","shouldSkip","TYPE","serializer","strict","serialize","lossy","structuredClone$1","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","footer","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","tailTail","structuredClone","testOrVisitor","visitorOrReverse","maybeReverse","overload","createState","definitionById","footnoteById","footnoteCounts","defaultHandlers","applyData","patch","wrap","handle","shallow","defaultUnknownHandler","trimMarkdownSpaceStart","hName","hChildren","hProperties","toHast","foot","remarkRehype","destination","file","hastTree","bail","hasOwn","toStr","gOPD","hasOwnConstructor","hasIsPrototypeOf","setProperty","getProperty","copyIsArray","trough","fns","pipeline","middlewareIndex","middelware","middleware","wrapped","fnExpectsCallback","then","minpath","basename","dirname","extname","join","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","joined","absolute","normalizeString","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","minproc","cwd","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","third","VFile","isUint8Array","assertNonEmpty","assertPart","stem","CallableInstance","Processor","attacher","assertUnfrozen","realFile","vfile","assertParser","assertCompiler","executor","parseTree","realDone","compileTree","compileResult","looksLikeAValue","complete","assertDone","assertNode","transformers","outputTree","resultingTree","attachers","addPlugin","addList","addPreset","entryIndex","primary","currentPrimary","isPlainObj","unified","frozen","asyncName","looksLikeAVFile","changelog","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","processor","createProcessor","createFile","post","rehypePlugins","remarkPlugins","remarkRehypeOptions","allowedElements","allowElement","disallowedElements","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","deprecation","colon","questionMark","numberSign","transformDodLinks","SimpleMarkdownText","HtmlOrSimpleMarkdownText","htmlRegex","getLinkType","urlString","getUrlTarget","gdocsMatch","gdocId","dodMatch","dodId","guidedChartMatch","guidedChartId","convertHeadingTextToId","headingText","urlSlug","getPrefixedGdocPath","gdoc","getCanonicalUrl","baseUrl","faMessage","faCommentAlt","faFileLines","faArrowUpLong","faPencil","faPencilAlt","faBoxArchive","faTable","faBars","faHeartCrack","faHeartBroken","faLightbulb","faCircleExclamation","faFlag","faCompress","faPenToSquare","faEdit","faShareNodes","faShareAlt","faAngleRight","faBookmark","faChartSimple","faBullhorn","faLocationArrow","faChartBar","faImage","faCaretUp","faRotateLeft","faArrowDownLong","faPause","faCircleArrowLeft","faArrowDownWideShort","faSortAmountDown","faCircleArrowRight","faFilter","faCode","faMagnifyingGlassChart","faChartLine","faLineChart","faArrowRight","faHeart","faPanorama","faEye","faPen","faArrowLeft","faUpRightFromSquare","faExternalLinkAlt","faTag","faEnvelope","faCircleInfo","faInfoCircle","faArrowDownAZ","faSortAlphaDown","faMinus","faArrowLeftLong","faGear","faS","faCaretDown","faEllipsisVertical","faDownload","faArrowRightArrowLeft","faLocationDot","faArrowDown","faEarthAmericas","faEnvelopeOpenText","faLink","faChain","faPlay","faMagnifyingGlass","faSearch","faListUl","faCopy","faPlus","faExpand","faXmark","faClose","faTimes","faChevronLeft","faChevronRight","faSpinner","faClockRotateLeft","faArrowUpShortWide","faSortAmountUpAlt","faChartColumn","faArrowUpZA","faSortAlphaUpAlt","faRss","faBook","faCheck","faTriangleExclamation","faExclamationTriangle","faDatabase","faRightLeft","faPaperPlane","faCalendarDay","faCircleXmark","faTimesCircle","faMagnifyingGlassPlus","faSearchPlus","faMagnifyingGlassMinus","faSearchMinus","_defineProperty","_objectSpread2","_WINDOW","_DOCUMENT","_MUTATION_OBSERVER","_PERFORMANCE","userAgent","DOCUMENT","MUTATION_OBSERVER","PERFORMANCE","IS_DOM","IS_IE","G","lt","pt","xt","Ft","St","At","Ct","Lt","Wt","Et","t$1","r$1","bt$1","Yt","ua","I$1","ga","Ia","m$1","c$1","F$1","ma","wa","NAMESPACE_IDENTIFIER","UNITS_IN_GRID","DEFAULT_CSS_PREFIX","DEFAULT_REPLACEMENT_CLASS","DATA_FA_I2SVG","DATA_FA_PSEUDO_ELEMENT","DATA_FA_PSEUDO_ELEMENT_PENDING","DATA_PREFIX","DATA_ICON","HTML_CLASS_I2SVG_BASE_CLASS","MUTATION_APPROACH_ASYNC","TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS","PRODUCTION","familyProxy","_PREFIX_TO_STYLE","PREFIX_TO_STYLE","_STYLE_TO_PREFIX","STYLE_TO_PREFIX","_PREFIX_TO_LONG_STYLE","PREFIX_TO_LONG_STYLE","_LONG_STYLE_TO_PREFIX","ICON_SELECTION_SYNTAX_PATTERN","LAYERS_TEXT_CLASSNAME","FONT_FAMILY_PATTERN","_FONT_WEIGHT_TO_PREFIX","ATTRIBUTES_WATCHED_FOR_MUTATION","DUOTONE_CLASSES","RESERVED_CLASSES","getAttrConfig","coerce","_config","_onChangeCb","onChange","d$2","meaninglessTransform","insertCss","headChildren","beforeChild","idPool","nextUniqueId","toArray","htmlEscape","joinAttributes","joinStyles","styles","styleName","transformIsMeaningful","transformForSvg","containerWidth","iconWidth","innerTranslate","innerScale","innerRotate","inner","transformForCss","startCentered","baseStyles","dcp","drc","fp","rc","dPatt","customPropPatt","rPatt","_cssInserted","ensureCss","InjectCSS","functions","loaded","domready","toHtml","abstractNodes","iconFromMapping","mapping","iconName","reduce","thisContext","ucs2decode","toHex","unicode","codePointAt","second","normalizeIcons","icons","icon","defineIcons","skipHooks","shims","FAMILY_NAMES","PREFIXES_FOR_FAMILY","familyId","_defaultUsablePrefix","_byUnicode","_byLigature","_byOldName","_byOldUnicode","_byAlias","isReserved","getIconName","cssPrefix","cls","build","lookup","o$$1","a$$1","alias","aliases","hasRegular","shimLookups","shim","maybeNameMaybeUnicode","getCanonicalPrefix","c$$1","byUnicode","byLigature","ligature","byAlias","byOldName","byOldUnicode","oldUnicode","newUnicode","getDefaultUsablePrefix","emptyCanonicalIcon","getFamilyId","family","famProps","v$$1","styleOrPrefix","moveNonFaClassesToRest","sortedUniqueValues","getCanonicalIcon","skipLookups","givenPrefix","faCombinedClasses","faStyleOrFamilyClasses","nonStyleOrFamilyClasses","faStyles","styleFromValues","canonical","getDefaultCanonicalPrefix","applyShimAndAlias","aliasIconName","newCanonicalFamilies","newCanonicalStyles","prefixOptions","config$$1","isDuotoneFamily","valuesHasDuotone","defaultFamilyIsDuotone","canonicalPrefixIsDuotone","defaultPrefix","Library","additions","longPrefix","_plugins","_hooks","providers","defaultProviderKeys","registerPlugins","nextPlugins","mixout","tk","sk","hooks","chainHooks","hookFn","callHooks","callProvided","findIconDefinition","iconLookup","library","noAuto","dom","autoReplaceSvgRoot","autoReplace","canonicalIcon","domVariants","abstractCreator","asIcon","asSymbol","makeInlineSvgAbstract","title","maskId","titleId","watchable","isUploadedIcon","attrClass","uploadedIconWidthStyle","makeLayersTextAbstract","styleString","makeLayersCounterAbstract","styles$1","asFoundIcon","vectorData","missingIconResolutionMixin","maybeNotifyMissing","findIcon","noop$1","p$2","preamble","perf","noop$2","isWatched","hasPrefixAndIcon","hasBeenReplaced","getMutator","mutators","createElementNS","createElement","convertSVG","abstractObj","ceFn","nodeAsComment","mutation","abstract","forSvg","splitClasses","newInnerHTML","performOperationSync","op","perform","mutations","callbackFunction","mutator","disableObservation","enableObservation","mo","observe","treeCallback","nodeCallback","pseudoElementsCallback","observeMutationsRoot","mutationRecord","disconnect","styleParser","classParser","existingPrefix","existingIconName","innerText","attributesParser","extraAttributes","blankMeta","parseMeta","extraClasses","pluginMeta","extraStyles","styles$2","generateMutation","nodeMeta","getKnownPrefixes","onTree","htmlClassList","hclAdd","hclRemove","prefixesDomQuery","p$$1","e$$1","resolvedMutations","onNode","resolveIcons","maybeIconDefinition","iconDefinition","classes","ReplaceElements","providers$$1","nextChild","Layers","assembler","LayersCounter","LayersText","computedFontSize","boundingClientRect","CLEAN_CONTENT_PATTERN","SECONDARY_UNICODE_RANGE","_FONT_FAMILY_WEIGHT_TO_PREFIX","FONT_FAMILY_WEIGHT_TO_PREFIX","FONT_FAMILY_WEIGHT_FALLBACK","weights","hexValueFromContent","cleaned","codePoint","isPrependTen","isDoubled","getPrefix","fontFamilySanitized","fontWeightInteger","fontWeightSanitized","replaceForPosition","pendingAttribute","alreadyProcessedPseudoElement","fontFamilyMatch","hexValue","isSecondary","isV4","iconIdentifier","iconName4","processable","searchPseudoElements","operations","PseudoElements","_unwatched","MutationObserver$1","parseTransformString","transformString","PowerTransforms","ALL_SPACE","fillBlack","deGroup","Masks","maskData","explicitMaskId","mainWidth","mainPath","maskWidth","maskPath","trans","maskRect","maskInnerGroupChildrenMixin","maskInnerGroup","maskOuterGroup","clipId","maskTag","MissingIconIndicator","reduceMotion","gChildren","FILL","ANIMATION_BASE","OPACITY_ANIMATE","dot","SvgSymbols","symbolData","noAuto$1","config$1","library$1","dom$1","parse$1","findIconDefinition$1","toHtml$1","layer","ReactPropTypesSecret","ReactPropTypesSecret_1","emptyFunction","emptyFunctionWithReset","factoryWithThrowingShims","componentName","propFullName","secret","getShim","ReactPropTypes","propTypesModule","enumerableOnly","_typeof","_objectWithoutProperties","sourceSymbolKeys","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","iter","arr2","_classes","beat","fade","beatFade","bounce","shake","flash","spin","spinPulse","spinReverse","pulse","fixedWidth","inverse","border","pull","_isNumerical","camelize","_excluded","styleToObject","extraProps","mixins","_extraProps$style","existingStyle","_console","normalizeIconArgs","objectWithKey","FontAwesomeIcon","allProps","iconArgs","maskArgs","renderedIcon","convertCurry","PropTypes","appendClass","parseValue","newClass","ExpandableToggle","alwaysVisibleDescription","isExpandedDefault","isStacked","hasTeaser","DATAPAGE_ABOUT_THIS_DATA_SECTION_ID","DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID","REUSE_THIS_WORK_SECTION_ID","makeSource","attribution","isEmbeddedInADataPage","isEmbedded","hideProcessingPhase","makeLastUpdated","makeNextUpdate","makeDateRange","makeUnit","makeUnitConversionFactor","unitConversionFactor","makeLinks","linkFragments","urlOrText","IndicatorProcessing","$95phC$createContext","$4e85f108e88277b8$export$d688439359537581","$4e85f108e88277b8$export$b0d3ecf7112093a7","$4e85f108e88277b8$export$698f465ec27e93df","$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c","$HgANd$react","$1dbecbe27a04f9af$export$14d238f342723f25","setValue","$fCAlL$useState","currValue","$fCAlL$useRef","nextRef","queue","$fCAlL$useCallback","$b5e257d569688ac6$var$defaultContext","$b5e257d569688ac6$var$SSRContext","$670gB$react","$b5e257d569688ac6$var$IsSSRContext","$b5e257d569688ac6$var$componentIds","$b5e257d569688ac6$var$useCounter","$670gB$useContext","$670gB$useRef","_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner","_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","currentOwner","prevComponentValue","$b5e257d569688ac6$var$useLegacySSRSafeId","defaultId","$b5e257d569688ac6$var$useModernSSRSafeId","didSSR","$670gB$useState","$b5e257d569688ac6$export$535bd6ca7f90a273","$b5e257d569688ac6$export$619500959fc48b26","$b5e257d569688ac6$var$getSnapshot","$b5e257d569688ac6$var$getServerSnapshot","$b5e257d569688ac6$var$subscribe","onStoreChange","$bdb11010cef70236$var$canUseDOM","$bdb11010cef70236$export$d41a04c74483c6ef","$bdb11010cef70236$var$registry","heldValue","$bdb11010cef70236$export$f680877a34711e37","$eKkEp$useState","nextId","$eKkEp$useRef","$eKkEp$useSSRSafeId","cleanupRef","cacheIdRef","$eKkEp$useEffect","$bdb11010cef70236$export$cd8c9cb68f842629","idA","idB","setIdsA","setIdsB","$bdb11010cef70236$export$b4cc09c592e8fdb8","depArray","resolvedId","setResolvedId","updateId","$eKkEp$useCallback","$ff5963eb1fccf552$export$e08e3b67e392101e","callbacks","$431fbd86ca7dc216$export$b204af158042fbac","_el_ownerDocument","$431fbd86ca7dc216$export$f21a1ffae260145a","$431fbd86ca7dc216$var$isNode","$431fbd86ca7dc216$export$af51f0f06c0f328a","$f4e2df6bd15f8569$var$_shadowDOM","$f4e2df6bd15f8569$export$98658e8c59125e6a","$d4ee10de306f2510$export$4282f70798064fe0","otherNode","$lcSu5$shadowDOM","$d4ee10de306f2510$export$cd4e5573fbe2b576","_activeElement_shadowRoot","$d4ee10de306f2510$export$e58f029f0fbfdb29","$dfc540311bf7f109$export$63eb3ababa9c55c4","walkers","curNode","currentWalkerCurrentNode","shadowRoot","walker","newNode","nextNode","_this_filter","nodeResult","currentWalker","previousNode","whatToShow","$dfc540311bf7f109$export$4d0f8be8b12a7ef6","$bJKXg$shadowDOM","clsx","$3ef42575df84b30b$export$9d1611c77c2fe928","$7jXr9$clsx","$5dc95899b306f630$export$c9058316764c140e","refs","hasCleanup","cleanups","$5dc95899b306f630$var$setRef","$65484d02dcb7eb3e$var$DOMPropNames","$65484d02dcb7eb3e$var$labelablePropNames","$65484d02dcb7eb3e$var$linkPropNames","$65484d02dcb7eb3e$var$globalAttrs","$65484d02dcb7eb3e$var$globalEvents","$65484d02dcb7eb3e$var$propRe","$65484d02dcb7eb3e$export$457c3d6518dd4c6f","labelable","isLink","propNames","filteredProps","$7215afc6de606d6b$export$de79e2c695e052f3","$7215afc6de606d6b$var$supportsPreventScroll","scrollableElements","$7215afc6de606d6b$var$getScrollableElements","$7215afc6de606d6b$var$restoreScrollPosition","$7215afc6de606d6b$var$supportsPreventScrollCached","rootScrollingElement","$c87311424ea30a05$var$testUserAgent","_window_navigator_userAgentData","brands","brand","$c87311424ea30a05$var$testPlatform","$c87311424ea30a05$var$cached","$c87311424ea30a05$export$9ac100e40613ea10","$c87311424ea30a05$export$186c6964ca17d99","$c87311424ea30a05$export$7bef049ce92e4224","$c87311424ea30a05$export$fedb369cb70207f1","$c87311424ea30a05$export$e1865c3bedcd822b","$c87311424ea30a05$export$78551043582a6a98","$c87311424ea30a05$export$6446a186d09e379e","$c87311424ea30a05$export$a11b0059900ceec8","$c87311424ea30a05$export$b7d78993b74f766d","$ea8dcbcb9ea1b556$var$RouterContext","$g3jFn$createContext","$ea8dcbcb9ea1b556$var$openSyntheticLink","$ea8dcbcb9ea1b556$export$9a302a45f65d0572","$g3jFn$useContext","$ea8dcbcb9ea1b556$export$efa8c9099e530235","$ea8dcbcb9ea1b556$export$95185d699e05d4d7","setOpening","_window_event_type","_window_event","metaKey","ctrlKey","altKey","shiftKey","$ea8dcbcb9ea1b556$var$getSyntheticLink","$ea8dcbcb9ea1b556$export$7e924b3091a3bd18","router","_props_href","$ea8dcbcb9ea1b556$export$13aea1a3cb5e3f1f","routerOptions","$bbed8b41f857bcc0$var$transitionsByElement","$bbed8b41f857bcc0$var$transitionCallbacks","$bbed8b41f857bcc0$var$setupGlobalEvents","isTransitionEvent","onTransitionStart","transitions","$bbed8b41f857bcc0$var$cleanupDetachedElements","eventTarget","$bbed8b41f857bcc0$export$24490316f764c430","$03deb23ff14920c4$export$4eaf04e54aa8eed6","globalListeners","$lPAwt$useRef","addGlobalListener","$lPAwt$useCallback","removeGlobalListener","_globalListeners_current_get","removeAllGlobalListeners","$lPAwt$useEffect","$313b98861ee5dd6c$export$d6875122194c7b44","defaultLabel","labelledBy","$df56164dff5785e2$export$4338b53315abf666","objRef","$gbmns$useRef","refEffect","$gbmns$useCallback","refCallback","refCleanup","$gbmns$useMemo","$8ae05eaa5c114e9c$var$_React_useInsertionEffect","$8ae05eaa5c114e9c$var$useEarlyEffect","$lmaYr$react","$8ae05eaa5c114e9c$export$7f54fc3180508a52","$lmaYr$useRef","$lmaYr$useCallback","$ca9b37712f007381$export$72ef708ab07251f1","dependencies","isInitialMount","$azsE2$useRef","lastDeps","$9daab02d461809db$var$hasResizeObserver","$9daab02d461809db$export$683480f191c0e3ea","onResize","onResizeEvent","$Vsl8o$useEffect","resizeObserverInstance","$e7801be82b4b2a53$export$4debdb1a3f0fa79e","$cc38e7bd3fc7b213$export$2bb74740c4e19def","checkForOverflow","isScrollable","$62d8ded9296f3872$export$cfa2225e87938781","scrollableNode","$a40c673dc9f6d9c7$export$94ed1c92c7beeb22","$21f1aa98acb08317$export$16792effe837dba3","$21f1aa98acb08317$var$nonTextInputTypes","$21f1aa98acb08317$export$c57958e35f31ed73","$5df64b3807dc15ee$var$visualViewport","$5df64b3807dc15ee$export$d699905dd57c73ca","isSSR","$fuDHA$useIsSSR","setSize","$fuDHA$useState","$5df64b3807dc15ee$var$getViewportSize","$fuDHA$useEffect","newSize","onBlur","$ef06256079686ba0$var$descriptionId","$ef06256079686ba0$var$descriptionNodes","$ef06256079686ba0$export$f8aeda7b10753fa1","setId","$hQ5Hp$useState","$e9faafb641e167db$export$90fc3a17d93f704c","handleEvent","$ceQd6$useEffect","$2f04cbc44ee30ce0$export$53a0910f038337bd","scrollView","$2f04cbc44ee30ce0$var$relativeOffset","borderTopWidth","borderLeftWidth","scrollPaddingTop","scrollPaddingRight","scrollPaddingBottom","scrollPaddingLeft","borderAdjustedX","borderAdjustedY","maxX","maxY","scrollPaddingTopNumber","scrollPaddingBottomNumber","scrollPaddingRightNumber","scrollPaddingLeftNumber","$2f04cbc44ee30ce0$export$c826860796309d1b","targetElement","isScrollPrevented","_targetElement_scrollIntoView","originalLeft","originalTop","newTop","_opts_containingElement_scrollIntoView","_opts_containingElement","_targetElement_scrollIntoView1","$6a7db85432448f7f$export$60278871457622de","$6a7db85432448f7f$export$29bf1b5f2c56cf63","$5a387cc49350e6db$export$722debc0e56fea39","$jtQ6z$useRef","$99facab73266f662$export$5add1d006293d136","onReset","handleReset","$8rM3G$useEffect","_ref_current","$a5fa973c1850dd36$export$ccaea96c28e8b9e7","onLoadMore","scrollOffset","sentinelObserver","$7FoZl$useRef","triggerLoadMore","$cdc5a6778b766db2$export$a9d04c5684123369","pieces","$iulvE$version","$5671b20cf9b562b2$export$447a38995de2c711","$5671b20cf9b562b2$export$831c820ad60f9d12","$d3f049242431219c$export$6d3443f2c48bfc20","isReady","isEntering","setEntering","$jJMAe$useState","isAnimationReady","animation","$d3f049242431219c$var$useAnimation","$jJMAe$useCallback","$d3f049242431219c$export$45fda7c47f93fd48","isOpen","exitState","setExitState","isExiting","isActive","onEnd","animations","canceled","$jJMAe$flushSync","$7d2416ea0959daaa$var$supportsCheckVisibility","$7d2416ea0959daaa$var$isStyleVisible","windowObject","visibility","isVisible","computedDisplay","computedVisibility","$7d2416ea0959daaa$var$isAttributeVisible","childElement","$7d2416ea0959daaa$export$e989c0fffaa6b27a","$b4b717babfbb907b$var$focusableElements","$b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR","$b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR","$b4b717babfbb907b$export$4c063cf1350e6fed","$b4b717babfbb907b$var$isInert","$b4b717babfbb907b$export$bebd5a1431fec25d","$458b0a5536c1a7cf$var$_React_useInsertionEffect","$458b0a5536c1a7cf$var$useEarlyEffect","$3whtM$react","$458b0a5536c1a7cf$export$40bfa8c7b0832715","stateValue","setStateValue","$3whtM$useState","valueRef","$3whtM$useRef","isControlledRef","isControlled","$3whtM$useEffect","forceUpdate","$3whtM$useReducer","$3whtM$useCallback","$9446cca9a3875146$export$7d15b64cf5a3a4c4","$64fa3d84918910a7$export$c62b8e45d58ddad9","$64fa3d84918910a7$export$2881499e37b75b9a","$iETbY$react","$64fa3d84918910a7$export$4d86445c2cf5e3","defaultClassName","defaultChildren","defaultStyle","$iETbY$useMemo","computedClassName","computedStyle","computedChildren","$64fa3d84918910a7$export$fabf2dc03a41866e","$iETbY$useContext","availableSlots","errorMessage","$64fa3d84918910a7$export$29f1550f4b0d4415","contextRef","contextProps","mergedRef","$iETbY$useObjectRef","$iETbY$mergeRefs","mergedProps","$iETbY$mergeProps","contextStyle","$64fa3d84918910a7$export$9d4c57ee4c6ffdd8","hasSlot","setHasSlot","$iETbY$useState","$iETbY$useRef","$iETbY$useCallback","$iETbY$useLayoutEffect","$64fa3d84918910a7$export$ef03459518577ad4","removedLocale","$319e236875307eab$var$LIVEREGION_TIMEOUT_DELAY","$319e236875307eab$var$liveAnnouncer","$319e236875307eab$export$a9b970dcc4ae71a9","assertiveness","$319e236875307eab$var$LiveAnnouncer","$319e236875307eab$export$d10ae4f68404609a","_this_node","ariaLive","_this_assertiveLog","_this_politeLog","$edcf132a9284368a$var$AXIS","$edcf132a9284368a$var$FLIPPED_DIRECTION","$edcf132a9284368a$var$CROSS_AXIS","$edcf132a9284368a$var$AXIS_SIZE","$edcf132a9284368a$var$TOTAL_SIZE","$edcf132a9284368a$var$PARSED_PLACEMENT_CACHE","$edcf132a9284368a$var$getVisualViewport","$edcf132a9284368a$var$getContainerDimensions","containerNode","totalHeight","_visualViewport_scale","isPinchZoomedIn","_visualViewport_width","_visualViewport_height","$edcf132a9284368a$var$getOffset","$fZVmS$isWebKit","_visualViewport_pageTop","_visualViewport_pageLeft","$edcf132a9284368a$var$getScroll","$edcf132a9284368a$var$getDelta","boundaryDimensions","containerDimensions","containerOffsetWithBoundary","_containerDimensions_scroll_axis","containerScroll","boundarySize","boundaryStartEdge","boundaryEndEdge","startEdgeOffset","endEdgeOffset","$edcf132a9284368a$var$getMargins","$edcf132a9284368a$var$parsePlacement","crossPlacement","crossAxis","crossSize","$edcf132a9284368a$var$computePosition","childOffset","overlaySize","placementInfo","crossOffset","isContainerPositioned","arrowSize","arrowBoundaryOffset","_childOffset_crossAxis","_childOffset_crossSize","_overlaySize_crossSize","_childOffset_crossSize1","_overlaySize_crossSize1","minPosition","maxPosition","$fZVmS$clamp","$edcf132a9284368a$var$getMaxHeight","margins","overlayHeight","heightGrowthDirection","isContainerDescendentOfBoundary","_position_bottom","_containerDimensions_scroll_top","overlayTop","boundaryToContainerTransformOffset","_visualViewport_offsetTop","_visualViewport_offsetTop1","boundingRect","_margins_top","_margins_bottom","_margins_top1","_margins_bottom1","$edcf132a9284368a$var$getAvailableSpace","_margins_axis","_containerDimensions_scroll_axis1","_margins_axis1","$edcf132a9284368a$export$6839422d1f33cee9","placementInput","scrollSize","userSetMaxHeight","normalizedOffset","flippedPlacementInfo","flippedPosition","maxHeight","arrowPosition","preferredArrowPosition","arrowMinPosition","_margins_left","_margins_right","overlayMargin","arrowMaxPosition","arrowOverlappingChildMinEdge","arrowOverlappingChildMaxEdge","arrowPositionOverlappingChild","triggerAnchorPoint","$edcf132a9284368a$export$b3ceb0cbf1056d98","targetNode","overlayNode","scrollNode","shouldFlip","boundaryElement","$edcf132a9284368a$var$getContainingBlock","isViewportContainer","containerPositionStyle","$edcf132a9284368a$var$getPosition","marginTop","marginLeft","$edcf132a9284368a$export$4b834cebd9e5cebe","ignoreScale","clientTop","clientLeft","parentOffset","parentStyle","$edcf132a9284368a$var$isContainingBlock","$dd149f63282afbbf$export$f6211563215e3b37","$dd149f63282afbbf$export$18fc8428861184da","triggerRef","$dRVb8$useEffect","onScroll","onCloseHandler","$148a7a147e38ea7f$var$RTL_SCRIPTS","$148a7a147e38ea7f$var$RTL_LANGS","$148a7a147e38ea7f$export$702d680b21cbd764","localeString","textInfo","$1e5a04cdaf7d1af8$var$localeSymbol","$1e5a04cdaf7d1af8$export$f09106e7c6677ec5","$1e5a04cdaf7d1af8$var$currentLocale","$1e5a04cdaf7d1af8$var$listeners","$1e5a04cdaf7d1af8$var$updateLocale","$1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a","$ffhGL$useIsSSR","setDefaultLocale","$ffhGL$useState","$ffhGL$useEffect","$18f2051aff69b9bf$var$I18nContext","$h9FiU$react","$18f2051aff69b9bf$export$43bb16f9c6d9e3f7","$h9FiU$useContext","$5b160d28a433310d$var$localeSymbol","$5b160d28a433310d$var$stringsSymbol","$5b160d28a433310d$var$cachedGlobalStrings","$5b160d28a433310d$export$c17fa47878dc55b6","$5b160d28a433310d$var$getStringsForLocale","packageName","globalStrings","pkg","messages","$5b160d28a433310d$var$getLanguage","$6db58dc88e78b024$var$pluralRulesCache","$6db58dc88e78b024$var$numberFormatCache","$6db58dc88e78b024$export$2f817fcdc4b89ae0","variables","opt","pluralRules","selected","numberFormat","$fca6afa0e843324b$var$cache","$fca6afa0e843324b$var$getCachedDictionary","$6ksNp$LocalizedStringDictionary","$fca6afa0e843324b$export$87b761675e8eaa10","$fca6afa0e843324b$export$f12b703ca79dfbb1","$6ksNp$useMemo","$6ksNp$LocalizedStringFormatter","$33bf17300c498528$export$a2f47a3d2973640","$l9VVR$useMemo","$2b4dce13dd5a17fa$export$842a2cf37af977e1","numerator","$3b62074eb05584b2$var$EPOCH","$3b62074eb05584b2$export$f297eb839006d339","era","month","day","$3b62074eb05584b2$export$c36e0ecb2d4fa69d","monthOffset","$3b62074eb05584b2$export$553d7fa8e3805fc0","$3b62074eb05584b2$export$4475b7e617eb123c","$3b62074eb05584b2$var$daysInMonth","$3b62074eb05584b2$export$80ee6245ec4f29ec","jd","jd0","depoch","quadricent","dqc","cent","dcent","quad","dquad","yindex","extendedYear","yearDay","leapAdj","$35ea8db9cb2ccb90$export$99faa760c7908e4f","$14e0f24ef4ac5c92$export$dbc69fd56b53d5e","_a_isEqual","_b_isEqual","_a_isEqual1","$14e0f24ef4ac5c92$export$461939dd4422153","timeZone","$11d87f3f76e88657$export$1b96692a1ba042ac","$14e0f24ef4ac5c92$export$68781ddf31c0090f","$14e0f24ef4ac5c92$export$c19a80a9721b80f6","$14e0f24ef4ac5c92$var$timeToMs","$14e0f24ef4ac5c92$var$localTimeZone","$14e0f24ef4ac5c92$export$aa8b41735afcabd2","$14e0f24ef4ac5c92$export$5412ac11713b72ad","$14e0f24ef4ac5c92$export$b2f4953d301981d5","$11d87f3f76e88657$export$bd4fb2bc8bb06fb","$11d87f3f76e88657$export$b4a036af3fc0b032","$11d87f3f76e88657$var$epochFromParts","hour","minute","millisecond","$11d87f3f76e88657$export$59c99f3515d3493f","$11d87f3f76e88657$var$getTimeZoneParts","$11d87f3f76e88657$var$formattersByTimeZone","namedParts","$11d87f3f76e88657$var$DAYMILLIS","$11d87f3f76e88657$var$getValidWallTimes","earlier","later","$11d87f3f76e88657$var$isValidWallTime","$11d87f3f76e88657$export$5107c82f94518f5c","disambiguation","dateTime","$11d87f3f76e88657$export$b21e0b124e224484","offsetBefore","offsetAfter","$11d87f3f76e88657$export$e67a095c620b86fe","$35ea8db9cb2ccb90$export$d3b7288e7994edea","$11d87f3f76e88657$export$93522d1a439f3617","$35ea8db9cb2ccb90$export$ca871e8dbb80966f","calendar","calendarDate","$735220c2d4774dd3$export$c4e2ecac49351ef2","$11d87f3f76e88657$export$84c95a83c799e074","$11d87f3f76e88657$export$538b00033cc11c75","$11d87f3f76e88657$export$83aac07b4c37b25","$735220c2d4774dd3$var$ONE_HOUR","$735220c2d4774dd3$export$e16d8520af44a096","mutableDate","days","$735220c2d4774dd3$var$addTimeFields","$735220c2d4774dd3$var$addYears","$735220c2d4774dd3$var$balanceYearMonth","$735220c2d4774dd3$var$constrainMonthDay","$735220c2d4774dd3$var$balanceDay","maxYear","_mutableDate_calendar_isInverseEra","_mutableDate_calendar","isInverseEra","maxMonth","years","_date_calendar_isInverseEra","_date_calendar","monthsInYear","$735220c2d4774dd3$export$3e2544e88a25bff8","inverseDuration","$735220c2d4774dd3$export$4e2d2ead65e5f7e3","$735220c2d4774dd3$export$adaa4cf7ef1b65be","$735220c2d4774dd3$export$e5d5e1c1822b6e56","mutableValue","$735220c2d4774dd3$export$7555de1e070510cb","$735220c2d4774dd3$var$balanceTime","$735220c2d4774dd3$var$nonNegativeMod","$735220c2d4774dd3$export$d52ced6badfb9a4c","mutable","eras","eraIndex","$735220c2d4774dd3$var$cycleValue","_mutable_calendar_isInverseEra","_mutable_calendar","$735220c2d4774dd3$export$dd02b3e0007dfe28","hours","isPM","$735220c2d4774dd3$export$96b1d28349274637","$735220c2d4774dd3$export$6814caac34ca03c7","$735220c2d4774dd3$export$9a297d111fc86b79","plainDateTime","minDate","minAbsolute","maxDate","maxAbsolute","$735220c2d4774dd3$export$31b5430eb18be4f8","$fae977aafc393c5c$var$DATE_RE","$fae977aafc393c5c$var$DATE_TIME_RE","$fae977aafc393c5c$var$ABSOLUTE_RE","$fae977aafc393c5c$export$6b862160d295c8e","$fae977aafc393c5c$var$parseNumber","$fae977aafc393c5c$export$588937bcd60ade55","$fae977aafc393c5c$export$f59dee82248f5ad4","$fae977aafc393c5c$export$60dfd74aa96791bd","gregorianDate","$fae977aafc393c5c$export$4223de14708adc63","$fae977aafc393c5c$var$offsetToString","offsetHours","offsetMinutes","offsetSeconds","stringOffset","$fae977aafc393c5c$export$bf79f1ebf4b18792","_check_private_redeclaration","privateCollection","_class_private_field_init","privateMap","$35ea8db9cb2ccb90$var$shiftArgs","$35ea8db9cb2ccb90$var$_type","$aksy1$_","$35ea8db9cb2ccb90$var$_type2","$35ea8db9cb2ccb90$var$_type3","$62225008020f0a13$var$ERA_START_DATES","$62225008020f0a13$var$ERA_END_DATES","$62225008020f0a13$var$ERA_ADDENDS","$62225008020f0a13$var$ERA_NAMES","$62225008020f0a13$var$findEraFromGregorianDate","$62225008020f0a13$var$toGregorian","eraAddend","$62225008020f0a13$export$b746ab2b60cdffbf","endYear","endMonth","endDay","startMonth","startDay","cur","$62225008020f0a13$var$getMinimums","$8d73d47422ca7302$var$BUDDHIST_ERA_START","$8d73d47422ca7302$export$42d20a78301dee44","$8d73d47422ca7302$var$toGregorian","$5f31bd6f0c8940b2$var$TAIWAN_ERA_START","$5f31bd6f0c8940b2$var$gregorianYear","$5f31bd6f0c8940b2$var$gregorianToTaiwan","$5f31bd6f0c8940b2$export$65e01080afcb0799","$5f31bd6f0c8940b2$var$toGregorian","$f3ed2e4472ae7e25$var$PERSIAN_EPOCH","$f3ed2e4472ae7e25$var$MONTH_START","$f3ed2e4472ae7e25$export$37fccdbfd14c5939","daysSinceEpoch","farvardin1","dayOfYear","$82c358003bdda0a8$var$INDIAN_ERA_START","$82c358003bdda0a8$var$INDIAN_YEAR_START","$82c358003bdda0a8$export$39f31c639fa15726","indianYear","yDay","leapMonth","indianMonth","indianDay","mDay","$f2f3e0e3a817edbd$var$CIVIL_EPOC","$f2f3e0e3a817edbd$var$ASTRONOMICAL_EPOC","$f2f3e0e3a817edbd$var$UMALQURA_YEAR_START","$f2f3e0e3a817edbd$var$UMALQURA_YEAR_END","$f2f3e0e3a817edbd$var$UMALQURA_START_DAYS","$f2f3e0e3a817edbd$var$islamicToJulianDay","$f2f3e0e3a817edbd$var$julianDayToIslamic","$f2f3e0e3a817edbd$var$isLeapYear","$f2f3e0e3a817edbd$export$2066795aadd37bfc","$f2f3e0e3a817edbd$export$37f0887f2f9d22f7","$f2f3e0e3a817edbd$var$UMALQURA_DATA","$f2f3e0e3a817edbd$var$UMALQURA_MONTHLENGTH","$f2f3e0e3a817edbd$var$UMALQURA_YEAR_START_TABLE","$f2f3e0e3a817edbd$var$umalquraYearStart","$f2f3e0e3a817edbd$var$umalquraMonthLength","$f2f3e0e3a817edbd$var$umalquraMonthStart","$f2f3e0e3a817edbd$var$umalquraYearLength","$f2f3e0e3a817edbd$export$5baab4758c231076","startDays","endDays","yearLength","monthLength","yearStart","$7c5f6fbf42389787$var$HEBREW_EPOCH","$7c5f6fbf42389787$var$HOUR_PARTS","$7c5f6fbf42389787$var$DAY_PARTS","$7c5f6fbf42389787$var$MONTH_DAYS","$7c5f6fbf42389787$var$MONTH_FRACT","$7c5f6fbf42389787$var$MONTH_PARTS","$7c5f6fbf42389787$var$isLeapYear","$7c5f6fbf42389787$var$hebrewDelay1","months","$7c5f6fbf42389787$var$hebrewDelay2","present","$7c5f6fbf42389787$var$startOfYear","$7c5f6fbf42389787$var$getDaysInYear","$7c5f6fbf42389787$var$getYearType","$7c5f6fbf42389787$var$getDaysInMonth","yearType","$7c5f6fbf42389787$export$ca405048b8fb5af","ys","monthStart","previousDate","$b956b2d7a6cf451f$var$ETHIOPIC_EPOCH","$b956b2d7a6cf451f$var$COPTIC_EPOCH","$b956b2d7a6cf451f$var$AMETE_MIHRET_DELTA","$b956b2d7a6cf451f$var$ceToJulianDay","$b956b2d7a6cf451f$var$julianDayToCE","$b956b2d7a6cf451f$var$getLeapDay","$b956b2d7a6cf451f$var$getDaysInMonth","$b956b2d7a6cf451f$export$26ba6eab5e20cd7d","$b956b2d7a6cf451f$export$d72e0c37005a4914","$b956b2d7a6cf451f$export$fe6243cbe1a4b7c1","$64244302c3013299$export$dd0bbc9b26defe37","$fb18d541ea1ad717$var$formatterCache","$fb18d541ea1ad717$export$ad991b66133851cf","startParts","endParts","resolvedOptions","$fb18d541ea1ad717$var$hasBuggyResolvedHourCycle","$fb18d541ea1ad717$var$getResolvedHourCycle","$fb18d541ea1ad717$var$getCachedDateFormatter","$fb18d541ea1ad717$var$hour12Preferences","$fb18d541ea1ad717$var$hasBuggyHour12Behavior","pref","defaultHourCycle","cacheKey","numberFormatter","$fb18d541ea1ad717$var$_hasBuggyHour12Behavior","$fb18d541ea1ad717$var$_hasBuggyResolvedHourCycle","$896ba0a80a8f4d36$export$85fd5fdf27bacc79","$6wxND$useDeepMemo","$896ba0a80a8f4d36$var$isEqual","$6wxND$useMemo","$6wxND$DateFormatter","aKeys","$488c6ddbf4ef74c2$var$formatterCache","$488c6ddbf4ef74c2$var$supportsSignDisplay","$488c6ddbf4ef74c2$var$supportsUnit","$488c6ddbf4ef74c2$var$UNITS","$488c6ddbf4ef74c2$export$cc77c4ff7e8673c5","$488c6ddbf4ef74c2$export$711b50b3c525e0f2","_UNITS_unit","unitDisplay","$488c6ddbf4ef74c2$var$getCachedNumberFormatter","numberingSystem","signDisplay","needsPositiveSign","negative","noSign","$6c7bd7858deea686$var$CURRENCY_SIGN_REGEX","$6c7bd7858deea686$var$NUMBERING_SYSTEMS","$6c7bd7858deea686$export$cd11ab140839f11d","$6c7bd7858deea686$var$getNumberParserImpl","$6c7bd7858deea686$var$numberParserCache","defaultParser","$6c7bd7858deea686$var$getCachedNumberParser","$6c7bd7858deea686$var$NumberParserImpl","fullySanitizedValue","$6c7bd7858deea686$var$replaceAll","isNegative","_this_options_minimumFractionDigits","_this_options_maximumFractionDigits","$6c7bd7858deea686$var$getSymbols","$6c7bd7858deea686$var$nonLiteralParts","$6c7bd7858deea686$var$pluralNumbers","intlOptions","originalOptions","_allParts_find","_posAllParts_find","_decimalParts_find","_allParts_find1","symbolFormatter","allParts","posAllParts","pluralParts","_allParts_find_value","minusSign","plusSign","allPartsLiterals","$6c7bd7858deea686$var$escapeRegex","pluralPartsLiterals","sortedLiterals","literals","numeral","$325a3faab7a68acd$var$cache","$325a3faab7a68acd$export$a16aca283550c30d","$bb77f239b46e8c72$export$3274cf84b703fff","collator","startsWith","$21ck9$useCallback","substring","endsWith","scan","sliceLen","$21ck9$useMemo","$2a41e45df1593e64$var$visualViewport","$2a41e45df1593e64$export$d39e1813b3bdd0e1","$39EOa$useLocale","targetRef","overlayRef","arrowRef","scrollRef","containerPadding","shouldUpdatePosition","setPosition","$39EOa$useState","lastScale","$39EOa$useRef","$39EOa$useEffect","$39EOa$useCallback","anchor","_document_activeElement","anchorRect","scrollRect","_anchorRect_top","_anchorRect_bottom","overlay","_window_visualViewport","_window_visualViewport_height","$2a41e45df1593e64$var$translateRTL","newOffset","$39EOa$useLayoutEffect","$2a41e45df1593e64$var$useResize","$39EOa$useResizeObserver","isResizing","_position_maxHeight","_position_placement","_position_triggerAnchorPoint","$8a9cb279dc87e130$export$525bc4921d56d4a","nativeEvent","$8a9cb279dc87e130$export$c2b7abe5d61ec696","$8a9cb279dc87e130$export$715c682d09d639cc","stateRef","$6dfIe$useRef","$6dfIe$useLayoutEffect","$6dfIe$useCallback","onBlurHandler","_stateRef_current_observer","relatedTargetEl","$8a9cb279dc87e130$export$fda7da73ab5d4c48","$8a9cb279dc87e130$export$cabe61c495ee3649","$6dfIe$isFocusable","$6dfIe$getOwnerWindow","isRefocusing","onFocusOut","$6dfIe$focusWithoutScrolling","onFocus","onFocusIn","raf","$14c0b72509d70225$var$state","$14c0b72509d70225$var$savedUserSelect","$14c0b72509d70225$var$modifiedElementMap","$14c0b72509d70225$export$16a4697467175487","$7R18e$isIOS","documentObject","$7R18e$getOwnerDocument","$14c0b72509d70225$export$b0d6fa1ab32e3295","$7R18e$runAfterTransition","targetOldUserSelect","$ae1eeba8b9eafd08$export$5165eccb35aaadb5","$3aeG1$react","_class_apply_descriptor_get","receiver","_class_extract_field_descriptor","_class_private_field_get","_class_apply_descriptor_set","_class_private_field_set","$f6c31cce2adf654f$var$usePressResponderContext","$7mdmh$useContext","register","$7mdmh$mergeProps","$7mdmh$useSyncRef","$f6c31cce2adf654f$var$_shouldStopPropagation","$f6c31cce2adf654f$var$PressEvent","$7mdmh$_2","$7mdmh$_","pointerType","originalEvent","$7mdmh$_1","_state_target","$f6c31cce2adf654f$var$LINK_CLICKED","$f6c31cce2adf654f$var$STYLE_ID","$f6c31cce2adf654f$var$PRESSABLE_ATTRIBUTE","$f6c31cce2adf654f$export$45712eceda6fad21","onPress","onPressChange","onPressStart","onPressEnd","onPressUp","onClick","isPressedProp","preventFocusOnPress","shouldCancelOnPointerExit","allowTextSelectionOnPress","domRef","domProps","isPressed","setPressed","$7mdmh$useState","$7mdmh$useRef","$7mdmh$useGlobalListeners","triggerPressStart","$7mdmh$useCallback","shouldStopPropagation","triggerPressEnd","wasPressed","triggerPressEndEvent","$7mdmh$useEffectEvent","triggerPressUp","triggerPressUpEvent","$f6c31cce2adf654f$var$createEvent","setIsPointerPressed","cancelEvent","cancelOnPointerExit","triggerClick","triggerSyntheticClick","triggerSyntheticClickEvent","isElemKeyPressed","setIsElemKeyPressed","$7mdmh$useLayoutEffect","onKeyUp","_state_metaKeyEvents","$f6c31cce2adf654f$var$isValidKeyboardEvent","_state_metaKeyEvents1","$f6c31cce2adf654f$var$shouldPreventDefaultKeyboard","$7mdmh$getEventTarget","$7mdmh$nodeContains","$f6c31cce2adf654f$var$isHTMLAnchorLink","$7mdmh$openLink","originalTarget","$7mdmh$chain","$7mdmh$getOwnerDocument","isPointerPressed","onPointerUp","clicked","$7mdmh$focusWithoutScrolling","onPointerCancel","pressProps","$7mdmh$useMemo","$7mdmh$isMac","$7mdmh$isVirtualClick","stopPressStart","stopPressUp","stopPressEnd","$7mdmh$isVirtualPointerEvent","$7mdmh$useEffect","role","$7mdmh$getOwnerWindow","$f6c31cce2adf654f$var$isValidInputKey","$f6c31cce2adf654f$var$shouldPreventDefaultUp","$f6c31cce2adf654f$var$nonTextInputTypes","$507fabe10e71c6fb$var$currentModality","$507fabe10e71c6fb$var$currentPointerType","$507fabe10e71c6fb$var$changeHandlers","$507fabe10e71c6fb$export$d90243b58daecda7","$507fabe10e71c6fb$var$hasEventBeforeFocus","$507fabe10e71c6fb$var$hasBlurredWindowRecently","$507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS","$507fabe10e71c6fb$var$triggerChangeHandlers","modality","$507fabe10e71c6fb$var$isValidKey","$28AnR$isMac","$507fabe10e71c6fb$var$handleKeyboardEvent","$28AnR$openLink","$507fabe10e71c6fb$var$handlePointerEvent","$507fabe10e71c6fb$var$handleClickEvent","$28AnR$isVirtualClick","$507fabe10e71c6fb$var$handleFocusEvent","$507fabe10e71c6fb$var$handleWindowBlur","$507fabe10e71c6fb$var$setupGlobalFocusEvents","$28AnR$getOwnerWindow","$28AnR$getOwnerDocument","focus","$507fabe10e71c6fb$var$tearDownWindowFocusTracking","loadListener","$507fabe10e71c6fb$export$2f1888112f558a7d","$507fabe10e71c6fb$export$b9b3dfddab17db27","$507fabe10e71c6fb$export$630ff653c5ada6a9","$507fabe10e71c6fb$export$8397ddfc504fdb9a","$507fabe10e71c6fb$export$887a228355cf7d95","$507fabe10e71c6fb$var$nonTextInputTypes","$507fabe10e71c6fb$var$isKeyboardFocusEvent","isTextInput","document1","IHTMLInputElement","IHTMLTextAreaElement","IHTMLElement","IKeyboardEvent","$507fabe10e71c6fb$export$ec71b4b83ac08ec3","$28AnR$useEffect","$3ad3f6e1647bc98d$export$80f3e147d781571c","$k50bp$getOwnerDocument","lastFocusedElement","$k50bp$getActiveElement","$k50bp$runAfterTransition","$k50bp$focusWithoutScrolling","$a1ea59d68270f0dd$export$f8168d8dd8fd66e6","onFocusProp","onBlurProp","onFocusChange","$hf0lj$useCallback","onSyntheticFocus","$hf0lj$getOwnerDocument","$hf0lj$getActiveElement","$hf0lj$getEventTarget","$93925083ecbb358c$export$48d1ea6320830260","$46d819fcbaf35654$export$8f71654801c2f7cd","$f645667febf57a63$export$f9762fab77588ecb","$fcPuG$react","$f645667febf57a63$var$useFocusableContext","$fcPuG$useContext","$fcPuG$useSyncRef","otherProps","$f645667febf57a63$export$13f3202a3e5ddd5","$fcPuG$useObjectRef","$f645667febf57a63$export$4c014de7c8940b4c","focusProps","keyboardProps","interactions","$fcPuG$mergeProps","interactionProps","autoFocusRef","$fcPuG$useRef","$fcPuG$useEffect","$f1ab8c75478c6f73$export$3351871ee4b288b8","$87RPk$react","isRegistered","$87RPk$useRef","prevContext","$87RPk$useContext","$87RPk$useObjectRef","$87RPk$mergeProps","$87RPk$useSyncRef","$87RPk$useEffect","$f1ab8c75478c6f73$export$cf75428e0b9ed1ea","$87RPk$useMemo","$9ab94262bd0047c7$export$420e68273165f4ec","onBlurWithin","onFocusWithin","onFocusWithinChange","$3b9Q0$useRef","$3b9Q0$useGlobalListeners","$3b9Q0$useCallback","$3b9Q0$getOwnerDocument","$3b9Q0$getActiveElement","$3b9Q0$getEventTarget","$3b9Q0$nodeContains","$6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents","$6179b936705e76d3$var$hoverCount","$6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents","$6179b936705e76d3$var$handleGlobalPointerEvent","$6179b936705e76d3$var$setupGlobalTouchEvents","$6179b936705e76d3$export$ae780daf29e6d456","onHoverStart","onHoverChange","onHoverEnd","isHovered","setHovered","$AWxnT$useState","$AWxnT$useRef","$AWxnT$useEffect","$AWxnT$useGlobalListeners","hoverProps","triggerHoverEnd","$AWxnT$useMemo","triggerHoverStart","$AWxnT$getOwnerDocument","$AWxnT$nodeContains","$e0b6e0b68ec7f50f$export$872b660ac5a1ff98","onInteractOutside","onInteractOutsideStart","$ispOf$useRef","onPointerDown","$ispOf$useEffectEvent","$e0b6e0b68ec7f50f$var$isValidEvent","triggerInteractOutside","$ispOf$useEffect","$ispOf$getOwnerDocument","$8a26561d2877236e$var$DEFAULT_THRESHOLD","$8a26561d2877236e$export$c24ed0104d07eab9","onLongPressStart","onLongPressEnd","onLongPress","accessibilityDescription","timeRef","$4k2kv$useRef","$4k2kv$useGlobalListeners","$4k2kv$getOwnerDocument","$4k2kv$focusWithoutScrolling","onContextMenu","descriptionProps","$4k2kv$useDescription","$4k2kv$mergeProps","$9bf71ea28793e738$var$FocusContext","$cgawC$react","$9bf71ea28793e738$var$RESTORE_FOCUS_EVENT","$9bf71ea28793e738$var$activeScope","$9bf71ea28793e738$export$20e40289641fbbb6","contain","restoreFocus","autoFocus","startRef","$cgawC$useRef","endRef","scopeRef","$cgawC$useContext","$cgawC$useMemo","$9bf71ea28793e738$var$TreeNode","$cgawC$useLayoutEffect","$9bf71ea28793e738$export$d06fae2ee68b101e","$9bf71ea28793e738$var$isAncestorScope","activeNode","_startRef_current","stopPropagation","$9bf71ea28793e738$var$useActiveScopeTracker","$9bf71ea28793e738$var$useFocusContainment","$9bf71ea28793e738$var$useRestoreFocus","$9bf71ea28793e738$var$useAutoFocus","$cgawC$useEffect","$cgawC$getActiveElement","$cgawC$getOwnerDocument","$9bf71ea28793e738$var$isElementInScope","_focusScopeTree_getTreeNode_parent","_focusScopeTree_getTreeNode","_focusScopeTree_getTreeNode_parent_scopeRef","parentScope","focusManager","$9bf71ea28793e738$var$createFocusManagerForScope","tabbable","accept","_scope_","sentinel","scopeRoot","$9bf71ea28793e738$var$getScopeRoot","$9bf71ea28793e738$export$2d6ec8fc375ceafa","$9bf71ea28793e738$var$focusElement","$9bf71ea28793e738$var$shouldContainFocus","$9bf71ea28793e738$var$isTabbableRadio","radios","radio","_element_form_elements","_element_form","radioList","focusedNode","onKeyDown","focusedElement","nextElement","$cgawC$getEventTarget","$9bf71ea28793e738$var$isElementInChildScope","$9bf71ea28793e738$var$focusFirstInScope","$cgawC$getInteractionModality","shouldSkipFocusRestore","$cgawC$isAndroid","$cgawC$isChrome","_focusedNode_current","$9bf71ea28793e738$var$isElementInAnyScope","$9bf71ea28793e738$export$1258395f99bf9cbf","$cgawC$focusSafely","$9bf71ea28793e738$var$getFirstInScope","$9bf71ea28793e738$var$shouldRestoreFocus","nodeToRestoreRef","treeNode","nodeToRestore","_nodeToRestoreRef_current","clonedTree","$9bf71ea28793e738$var$restoreFocusToElement","$cgawC$isTabbable","$cgawC$isFocusable","rootElement","$cgawC$createShadowTreeWalker","_opts_from","$9bf71ea28793e738$export$c5251b9e124bf29","$9bf71ea28793e738$var$last","lastNode","$9bf71ea28793e738$var$Tree","_node_parent","newTree","_node_parent_scopeRef","$f7dceffc5ad7768b$export$4e328f61c538687f","$isWE5$useRef","$isWE5$isFocusVisible","isFocused","setFocused","$isWE5$useState","isFocusVisibleState","setFocusVisible","updateState","$isWE5$useCallback","$isWE5$useFocusVisibleListener","isFocusVisible","$isWE5$useFocus","focusWithinProps","$isWE5$useFocusWithin","$55f9b1ae81f22853$export$76e4e37e5339496d","$55f9b1ae81f22853$export$759df0d867455a91","$hpDQO$getOwnerDocument","$55f9b1ae81f22853$export$6c5dc7e81d2cc29a","$55f9b1ae81f22853$export$2b35b76d2e30e129","$hpDQO$getActiveElement","activeDescendant","$a11501f3d1d39e6c$var$visibleOverlays","$a11501f3d1d39e6c$export$ea8f71083e90600f","shouldCloseOnBlur","isDismissable","isKeyboardDismissDisabled","shouldCloseOnInteractOutside","$jtpZv$useEffect","onHide","$jtpZv$useInteractOutside","$jtpZv$useFocusWithin","$jtpZv$isElementInChildOfActiveScope","onPointerDownUnderlay","$628037886ba31236$export$f9d5c8beee7d008d","$gMvIk$useEffect","ariaHasPopup","overlayId","$gMvIk$useId","$49c51c25361d4cd2$var$visualViewport","$49c51c25361d4cd2$var$preventScrollCount","$49c51c25361d4cd2$var$restore","$49c51c25361d4cd2$export$ee0f7cc6afcd1c18","$7mMvr$useLayoutEffect","$7mMvr$isIOS","$49c51c25361d4cd2$var$preventScrollMobileSafari","$49c51c25361d4cd2$var$preventScrollStandard","scrollbarWidth","$7mMvr$chain","$49c51c25361d4cd2$var$setStyle","scrollable","allowTouchMove","$7mMvr$isScrollable","$7mMvr$getScrollParent","relatedTarget","$7mMvr$willOpenKeyboard","$49c51c25361d4cd2$var$scrollIntoViewWhenReady","_target_parentElement","focusable","wasKeyboardVisible","removeEvents","$49c51c25361d4cd2$var$addEvent","$49c51c25361d4cd2$var$scrollIntoView","nextTarget","scrollableRect","targetRect","adjustment","$96b38030c423d352$export$60d741e20e0aa309","$7yuSY$createContext","$96b38030c423d352$export$9fc1347d4195ccb3","_useContext","$7yuSY$useContext","$f57aed4a881a3485$var$Context","$4AOtR$react","$f57aed4a881a3485$export$178405afcd8c5eb","$4AOtR$useContext","modalCount","setModalCount","$4AOtR$useState","$4AOtR$useMemo","$f57aed4a881a3485$export$d9aaed4c3ece1bc0","$f57aed4a881a3485$var$OverlayContainerDOM","modalProviderProps","$f57aed4a881a3485$export$bf688221f59024e5","$f57aed4a881a3485$export$b47c3594eab58386","$4AOtR$useIsSSR","portalContainer","getContainer","$4AOtR$reactdom","$6d74810286a15183$exports","$a2f21f5f14f60553$exports","$k51So$arAEmodulejs","$k51So$bgBGmodulejs","$k51So$csCZmodulejs","$k51So$daDKmodulejs","$k51So$deDEmodulejs","$k51So$elGRmodulejs","$k51So$enUSmodulejs","$k51So$esESmodulejs","$k51So$etEEmodulejs","$k51So$fiFImodulejs","$k51So$frFRmodulejs","$k51So$heILmodulejs","$k51So$hrHRmodulejs","$k51So$huHUmodulejs","$k51So$itITmodulejs","$k51So$jaJPmodulejs","$k51So$koKRmodulejs","$k51So$ltLTmodulejs","$k51So$lvLVmodulejs","$k51So$nbNOmodulejs","$k51So$nlNLmodulejs","$k51So$plPLmodulejs","$k51So$ptBRmodulejs","$k51So$ptPTmodulejs","$k51So$roROmodulejs","$k51So$ruRUmodulejs","$k51So$skSKmodulejs","$k51So$slSImodulejs","$k51So$srSPmodulejs","$k51So$svSEmodulejs","$k51So$trTRmodulejs","$k51So$ukUAmodulejs","$k51So$zhCNmodulejs","$k51So$zhTWmodulejs","$5c3e21d68f1c4674$var$styles","$5c3e21d68f1c4674$export$a966af930f325cab","isFocusable","$7JYt2$useState","$7JYt2$useFocusWithin","combinedStyles","$7JYt2$useMemo","$5c3e21d68f1c4674$export$439d29a4e110a164","Element","visuallyHiddenProps","$7JYt2$react","$7JYt2$mergeProps","$parcel$interopDefault","$86ea4cb521eb2e37$export$2317d149ed6f78c4","onDismiss","stringFormatter","$iYaQO$useLocalizedStringFormatter","$iYaQO$intlStringsmodulejs","$iYaQO$useLabels","$iYaQO$react","$iYaQO$VisuallyHidden","$5e3802645cc19319$var$supportsInert","$5e3802645cc19319$var$refCountMap","$5e3802645cc19319$var$observerStack","$5e3802645cc19319$export$1c3ebcada18427bf","windowObj","$fF94N$getOwnerWindow","_opts_root","shouldUseInert","visibleNodes","hiddenNodes","getHidden","setHidden","hidden","walk","acceptNode","acceptRoot","_refCountMap_get","refCount","observer","changes","observerWrapper","$5e3802645cc19319$export$1020fa7f77e17884","$f2f8a6077418541e$export$542a6fd13ac93354","popoverRef","groupRef","isNonModal","isSubmenu","overlayProps","underlayProps","positionProps","arrowProps","$m0yab$useEffect","_groupRef_current","_groupRef_current1","$m0yab$mergeProps","$337b884510726a0d$export$a2200b96afd16271","$1CM7W$react","$337b884510726a0d$export$c6fdb837b070b4ff","$1CM7W$useIsSSR","setContain","$1CM7W$useState","contextValue","$1CM7W$useMemo","$1CM7W$FocusScope","$1CM7W$ClearPressResponder","$1CM7W$reactdom","$337b884510726a0d$export$14c98a7594375490","$1CM7W$useContext","$1CM7W$useLayoutEffect","$8ac8429251c45e4b$export$dbc0f175b25fb0fb","$7Dhkr$useEffect","$7Dhkr$mergeProps","$b1f0cad8af73213b$export$3585ede4d035bf14","$b1f0cad8af73213b$var$normalizeKey","$b1f0cad8af73213b$export$9145995848b05025","itemKey","$d191a55c9702f145$export$8467354a121f1b9f","ariaLabelledby","ariaLabel","labelElementType","$83Elw$useId","labelId","labelProps","fieldProps","$83Elw$useLabels","$2baaea4c71418dea$export$294aa081a6c6f55d","isInvalid","validationState","descriptionId","$2kC82$useSlotId","errorMessageId","$2kC82$mergeProps","$feb5ffebff200149$export$d3e3bd3e26688c04","$jUnAJ$isAppleDevice","$feb5ffebff200149$export$c3d8340acf92597f","collectionRef","_collectionRef_current","_collectionRef_current1","$feb5ffebff200149$var$collectionMap","$feb5ffebff200149$export$881eb0d9f3605d9d","$jUnAJ$useId","$feb5ffebff200149$export$6aeb1680a0ae8741","$fb3050f43d946246$var$TYPEAHEAD_DEBOUNCE_WAIT_MS","$fb3050f43d946246$export$e32c88dfddc6e1d8","keyboardDelegate","selectionManager","onTypeSelect","$dAE4Y$useRef","$fb3050f43d946246$var$getStringForKey","$ae20dd8cbca75726$export$d6daf82dcd84e87c","delegate","shouldFocusWrap","disallowEmptySelection","disallowSelectAll","escapeKeyBehavior","selectOnFocus","disallowTypeAhead","shouldUseVirtualFocus","allowsTabNavigation","isVirtualized","linkBehavior","$3H3GQ$useLocale","$3H3GQ$useRouter","navigateToKey","childFocus","$3H3GQ$flushSync","itemProps","_delegate_getKeyBelow","_delegate_getFirstKey","_delegate_getFirstKey1","nextKey","_delegate_getKeyAbove","_delegate_getLastKey","_delegate_getLastKey1","_delegate_getKeyLeftOf","_delegate_getFirstKey2","_delegate_getLastKey2","_delegate_getKeyRightOf","_delegate_getLastKey3","_delegate_getFirstKey3","firstKey","$3H3GQ$isCtrlKeyPressed","lastKey","$3H3GQ$getFocusableTreeWalker","$3H3GQ$isTabbable","$3H3GQ$focusWithoutScrolling","scrollPos","$3H3GQ$useRef","$3H3GQ$useEvent","_scrollRef_current","_scrollRef_current1","_scrollRef_current_scrollTop","_scrollRef_current_scrollLeft","_manager_lastSelectedKey","_manager_firstSelectedKey","$3H3GQ$getInteractionModality","$3H3GQ$scrollIntoViewport","shouldVirtualFocusFirst","$3H3GQ$FOCUS_EVENT","detail","$3H3GQ$useUpdateLayoutEffect","keyToFocus","previousActiveElement","$3H3GQ$getActiveElement","$3H3GQ$moveVirtualFocus","$3H3GQ$dispatchVirtualFocus","$3H3GQ$CLEAR_FOCUS_EVENT","_e_detail","didAutoFocusRef","$3H3GQ$useEffect","focusedKey","selectedKeys","$3H3GQ$focusSafely","lastFocusedKey","$3H3GQ$scrollIntoView","typeSelectProps","$3H3GQ$mergeProps","collectionId","$880e95eb8b93ba9a$export$ecf600387e221c37","shouldSelectOnPressUp","onAction","allowsDifferentPressOrigin","$581M0$useRouter","$581M0$useId","onSelect","$581M0$isCtrlKeyPressed","$581M0$useEffect","$581M0$moveVirtualFocus","$581M0$focusSafely","isLinkOverride","isActionOverride","hasLinkAction","allowsSelection","allowsActions","hasPrimaryAction","hasSecondaryAction","hasAction","$581M0$useRef","longPressEnabled","longPressEnabledOnPressStart","hadPrimaryActionOnPressStart","collectionItemProps","performAction","itemPressProps","$880e95eb8b93ba9a$var$isSelectionKey","$880e95eb8b93ba9a$var$isActionKey","$581M0$mergeProps","$581M0$chain","$581M0$usePress","onDoubleClick","longPressProps","$581M0$useLongPress","onDragStartCapture","$581M0$openLink","$657e4dc4a6e88df0$export$8f5ed9ff9f511381","containerRect","itemRect","_container_scrollWidth","_container_scrollHeight","_container_scrollLeft","_container_scrollTop","_container_clientWidth","_container_clientHeight","$2a25aae57d74318e$export$a05409b8bb224a5a","_item_props","getNext","tempKey","prevRect","layoutDelegateMethod","menu","$eak97$isScrollable","pageX","pageY","fromKey","$982254629710d113$export$b95089534ab7c1fd","disabledKeys","layoutDelegate","$1aJk5$useCollator","disabledBehavior","$1aJk5$useMemo","collectionProps","$c132121280ec012d$export$50eacbbf140a3141","$by1yQ$filterDOMProps","selectionBehavior","listProps","$by1yQ$useSelectableList","$by1yQ$useFocusWithin","$by1yQ$useId","$by1yQ$useLabel","$by1yQ$mergeProps","$eb2240fc39a57fa5$export$bf788dd355e3a401","$eb2240fc39a57fa5$var$iterable","$fzaAv$react","partialNode","parentKey","_v_key","_partialNode_index","childNodes","_partialNode_index1","childNode","_childNode_key","nodeKey","$eb2240fc39a57fa5$var$compose","_childNode_value","_parentNode_type","$eb2240fc39a57fa5$var$capitalize","builder","_partialNode_value","_partialNode_textValue","$7613b1592d41b092$export$6cd28814d92fa9c9","$lbNth$useMemo","$c5a24bc478652b5f$export$1005530eda016c13","$c5a24bc478652b5f$export$fbdeaa6a76694f71","$c5a24bc478652b5f$export$5f3398f8733f90e2","$c5a24bc478652b5f$export$8c434b3a7a4dad6","aAncestors","$c5a24bc478652b5f$var$getAncestors","bAncestors","firstNonMatchingAncestor","currNode","$453cc9f0df89c0a5$var$cache","$453cc9f0df89c0a5$export$77d5aafae4e095b2","countItems","$293f70390ea03370$export$497855f14858aa34","_item_props1","_props_isDisabled","_props_isSelected","isSelected","_props_shouldSelectOnPressUp","_props_shouldFocusOnHover","shouldFocusOnHover","_props_shouldUseVirtualFocus","_props_isVirtualized","$fcwmx$useSlotId","optionProps","$fcwmx$isMac","$fcwmx$isWebKit","$fcwmx$getItemCount","_data_onAction","$fcwmx$useSelectableItem","$fcwmx$chain","$fcwmx$useHover","$fcwmx$isFocusVisible","$fcwmx$filterDOMProps","linkProps","$fcwmx$useLinkProps","$fcwmx$mergeProps","$af383d3bef1cfdc9$export$c3f9f39876e4bc7","headingId","$8pE4M$useId","$e5be200c675c3b3a$export$aca958c65c314e6c","$e5be200c675c3b3a$var$CUSTOM_VALIDITY_STATE","$e5be200c675c3b3a$export$dad6ae84456c676a","$e5be200c675c3b3a$export$571b5131b7e65c11","$69F46$createContext","$e5be200c675c3b3a$export$a763b9476acd3eb","$e5be200c675c3b3a$export$fc1a364ae1f3ff10","realtimeValidation","displayValidation","updateValidation","resetValidation","commitValidation","$e5be200c675c3b3a$var$useFormValidationStateImpl","builtinValidation","validate","validationBehavior","controlledError","clientError","$69F46$useMemo","validateErrors","$e5be200c675c3b3a$var$runValidate","$e5be200c675c3b3a$var$getValidationResult","serverErrors","$69F46$useContext","serverErrorMessages","$e5be200c675c3b3a$var$asArray","lastServerErrors","setLastServerErrors","$69F46$useState","isServerErrorCleared","setServerErrorCleared","serverError","nextValidation","$69F46$useRef","currentValidity","setCurrentValidity","commitQueued","setCommitQueued","$e5be200c675c3b3a$var$isEqualValidation","$69F46$useEffect","errors","$43b800e97c901737$exports","$2cbb7ca666678a14$exports","$5FSX7$arAEmodulejs","$5FSX7$bgBGmodulejs","$5FSX7$csCZmodulejs","$5FSX7$daDKmodulejs","$5FSX7$deDEmodulejs","$5FSX7$elGRmodulejs","$5FSX7$enUSmodulejs","$5FSX7$esESmodulejs","$5FSX7$etEEmodulejs","$5FSX7$fiFImodulejs","$5FSX7$frFRmodulejs","$5FSX7$heILmodulejs","$5FSX7$hrHRmodulejs","$5FSX7$huHUmodulejs","$5FSX7$itITmodulejs","$5FSX7$jaJPmodulejs","$5FSX7$koKRmodulejs","$5FSX7$ltLTmodulejs","$5FSX7$lvLVmodulejs","$5FSX7$nbNOmodulejs","$5FSX7$nlNLmodulejs","$5FSX7$plPLmodulejs","$5FSX7$ptBRmodulejs","$5FSX7$ptPTmodulejs","$5FSX7$roROmodulejs","$5FSX7$ruRUmodulejs","$5FSX7$skSKmodulejs","$5FSX7$slSImodulejs","$5FSX7$srSPmodulejs","$5FSX7$svSEmodulejs","$5FSX7$trTRmodulejs","$5FSX7$ukUAmodulejs","$5FSX7$zhCNmodulejs","$5FSX7$zhTWmodulejs","$168583247155ddda$export$dc9c12ed27dd1b49","trigger","menuTriggerId","$czs6v$useId","triggerProps","$czs6v$useOverlayTrigger","$czs6v$useLocalizedStringFormatter","$czs6v$intlStringsmodulejs","$czs6v$useLongPress","$czs6v$focusWithoutScrolling","$fc79756100351201$export$6f49b4016bfc8d56","$d5336fe17ce95402$export$38eaa17faae8f579","$ieN2F$filterDOMProps","$ieN2F$useSelectableList","$ieN2F$mergeProps","_listProps_onKeyDown","$a2e5df62f93c7633$export$9d32628fc2aea7da","closeOnSelect","hasPopup","pressUpProp","pressChangeProp","onClickProp","hoverStartProp","isTrigger","isTriggerExpanded","$7Kjv5$useRouter","$7Kjv5$useSlotId","keyboardId","ariaProps","$7Kjv5$getItemCount","isPressedRef","$7Kjv5$useRef","interaction","_interaction_current","_interaction_current1","$7Kjv5$handleLinkClick","shouldClose","$7Kjv5$useSelectableItem","$7Kjv5$usePress","$7Kjv5$useHover","$7Kjv5$isFocusVisible","$7Kjv5$useKeyboard","$7Kjv5$useFocus","$7Kjv5$filterDOMProps","$7Kjv5$useLinkProps","$7Kjv5$mergeProps","$3e5eb2498db5b506$export$73f7a44322579622","$7Mibs$useId","$e93e671b31057976$export$b8473d3665f3a75a","$9Gacy$useLayoutEffect","$e93e671b31057976$var$getNativeValidity","isIgnoredReset","$9Gacy$useRef","$9Gacy$useEffectEvent","onInvalid","$e93e671b31057976$var$getFirstInvalidInput","_ref_current1","$9Gacy$setInteractionModality","$9Gacy$useEffect","$e93e671b31057976$var$getValidity","validity","$2d73ec29415bd339$export$712718f7aec83d5","inputElementType","isRequired","isReadOnly","$ig234$useControlledState","focusableProps","$ig234$useFocusable","$ig234$useFormValidationState","validationErrors","validationDetails","errorMessageProps","$ig234$useField","$ig234$filterDOMProps","inputOnlyProps","$ig234$useState","_props_defaultValue","$ig234$useFormReset","$ig234$useFormValidation","$ig234$mergeProps","$ig234$react","$5012d21d933388c1$exports","$8112f8b883c0272d$exports","$03K6r$arAEmodulejs","$03K6r$bgBGmodulejs","$03K6r$csCZmodulejs","$03K6r$daDKmodulejs","$03K6r$deDEmodulejs","$03K6r$elGRmodulejs","$03K6r$enUSmodulejs","$03K6r$esESmodulejs","$03K6r$etEEmodulejs","$03K6r$fiFImodulejs","$03K6r$frFRmodulejs","$03K6r$heILmodulejs","$03K6r$hrHRmodulejs","$03K6r$huHUmodulejs","$03K6r$itITmodulejs","$03K6r$jaJPmodulejs","$03K6r$koKRmodulejs","$03K6r$ltLTmodulejs","$03K6r$lvLVmodulejs","$03K6r$nbNOmodulejs","$03K6r$nlNLmodulejs","$03K6r$plPLmodulejs","$03K6r$ptBRmodulejs","$03K6r$ptPTmodulejs","$03K6r$roROmodulejs","$03K6r$ruRUmodulejs","$03K6r$skSKmodulejs","$03K6r$slSImodulejs","$03K6r$srSPmodulejs","$03K6r$svSEmodulejs","$03K6r$trTRmodulejs","$03K6r$ukUAmodulejs","$03K6r$zhCNmodulejs","$03K6r$zhTWmodulejs","$4d52238874b24f86$export$9bb30bbe003b82e0","inputRef","$kTEqN$useLocalizedStringFormatter","$kTEqN$intlStringsmodulejs","onSubmit","onClear","onClearButtonClick","_inputRef_current","inputProps","validation","$kTEqN$useTextField","$kTEqN$chain","$f195635a1f9154fe$exports","$957f4f2fd749edef$exports","$hwjOn$arAEmodulejs","$hwjOn$bgBGmodulejs","$hwjOn$csCZmodulejs","$hwjOn$daDKmodulejs","$hwjOn$deDEmodulejs","$hwjOn$elGRmodulejs","$hwjOn$enUSmodulejs","$hwjOn$esESmodulejs","$hwjOn$etEEmodulejs","$hwjOn$fiFImodulejs","$hwjOn$frFRmodulejs","$hwjOn$heILmodulejs","$hwjOn$hrHRmodulejs","$hwjOn$huHUmodulejs","$hwjOn$itITmodulejs","$hwjOn$jaJPmodulejs","$hwjOn$koKRmodulejs","$hwjOn$ltLTmodulejs","$hwjOn$lvLVmodulejs","$hwjOn$nbNOmodulejs","$hwjOn$nlNLmodulejs","$hwjOn$plPLmodulejs","$hwjOn$ptBRmodulejs","$hwjOn$ptPTmodulejs","$hwjOn$roROmodulejs","$hwjOn$ruRUmodulejs","$hwjOn$skSKmodulejs","$hwjOn$slSImodulejs","$hwjOn$srSPmodulejs","$hwjOn$svSEmodulejs","$hwjOn$trTRmodulejs","$hwjOn$ukUAmodulejs","$hwjOn$zhCNmodulejs","$hwjOn$zhTWmodulejs","$48f6ba390f8c5b59$export$1e40b3ca02d92d21","disableAutoFocusFirst","disableVirtualFocus","$4ELxY$useId","$4ELxY$useRef","delayNextActiveDescendant","queuedActiveDescendant","isMobileScreenReader","$4ELxY$getInteractionModality","$4ELxY$isIOS","$4ELxY$isAndroid","setShouldUseVirtualFocus","$4ELxY$useState","hasCollection","setHasCollection","$4ELxY$useEffect","updateActiveDescendantEvent","$4ELxY$useEffectEvent","$4ELxY$getActiveElement","$4ELxY$getOwnerDocument","$4ELxY$getPointerType","collectionNode","setCollectionNode","callbackRef","$4ELxY$useCallback","$4ELxY$useLayoutEffect","mergedCollectionRef","$4ELxY$useObjectRef","$4ELxY$useMemo","$4ELxY$mergeRefs","focusFirstItem","$4ELxY$FOCUS_EVENT","clearVirtualFocus","clearFocusKey","$4ELxY$moveVirtualFocus","clearFocusEvent","$4ELxY$CLEAR_FOCUS_EVENT","lastInputType","$4ELxY$useEvent","inputType","$4ELxY$getVirtuallyFocusedElement","$4ELxY$dispatchVirtualFocus","keyDownTarget","focusedNodeId","$4ELxY$isCtrlKeyPressed","focusCollection","shouldPerformDefaultAction","onKeyUpCapture","$4ELxY$useLocalizedStringFormatter","$4ELxY$intlStringsmodulejs","$4ELxY$useLabels","filterFn","nodeTextValue","lastFocusedNode","$4ELxY$dispatchVirtualBlur","_state_focusedNodeId","virtualFocusProps","$4ELxY$mergeProps","$94680be9a48a8f2d$export$ce1595f6e1a63433","propsOnInputChange","propsInputValue","propsDefaultInputValue","onInputChange","setFocusedNodeId","$LM92H$useState","inputValue","setInputValue","$LM92H$useControlledState","$d2f53cda644affe3$export$36e687af51cd0967","$llkzs$createContext","$d2f53cda644affe3$export$68ee3368b6d68148","$d2f53cda644affe3$export$2f2b9559550c7bbc","$llkzs$mergeProps","$llkzs$useAutocompleteState","$llkzs$useRef","$llkzs$useAutocomplete","$llkzs$react","$23b9f4fcf0fe224b$export$d68d59712b04d9d1","newCollection","$23b9f4fcf0fe224b$export$b1918e978f1ee46f","$23b9f4fcf0fe224b$var$filterChildren","$23b9f4fcf0fe224b$export$5ae2504e948afce5","$23b9f4fcf0fe224b$export$8258a0665a675899","$23b9f4fcf0fe224b$export$fd11f34e1d07f134","$23b9f4fcf0fe224b$export$437f11dc9b403b78","filteredSection","lastChild","$23b9f4fcf0fe224b$export$408d25a4e12db025","_node_key","_this_keyMap_get","Constructor","oldCollection","firstChildKey","firstNode","prevKey","_firstNode_key","_lastNode_key","$681cc3c98f569e39$export$410b0c854570d131","firstChild","previousSibling","nextSibling","_this_parentNode","referenceNode","$681cc3c98f569e39$export$dc064fe9e59310fd","_this_parentNode_node","_this_previousVisibleSibling_node","_this_previousVisibleSibling","_nextSibling_node","_this_firstVisibleChild_node","_this_firstVisibleChild","_this_lastVisibleChild_node","_this_lastVisibleChild","_this_parentNode_node_key","_this_previousVisibleSibling_node_key","_nextSibling_node_key","_this_firstVisibleChild_node_key","_this_lastVisibleChild_node_key","_node_colIndex","_node_colSpan","nextColIndex","siblingNode","CollectionNodeClass","rendered","textValue","isHidden","_element_parentNode","_element_parentNode1","$681cc3c98f569e39$export$b34a105447964f9f","$e948873055cbafe4$export$727c8fc270210f13","idScope","addIdAndValue","$luMFQ$useMemo","_rendered_props_id","$luMFQ$cloneElement","getFirstChild","$f39a9eba43920ace$export$94b6d0abf7d33e8c","$8SdCi$createContext","$f39a9eba43920ace$export$8dc98ba7eadeaa56","$8SdCi$useContext","$8SdCi$react","$f39a9eba43920ace$export$86427a43e3e48ebb","Wrapper","$8SdCi$forwardRef","$f39a9eba43920ace$export$b5d7cc18bb8d2b59","objectIs","useDebugValue","useSyncExternalStore$2","checkIfSnapshotChanged","latestGetSnapshot","useSyncExternalStore$1","useSyncExternalStoreShim_production","shimModule","$e1995378a142960e$var$ShallowRenderContext","$95feo$createContext","$e1995378a142960e$var$CollectionDocumentContext","$e1995378a142960e$export$bf788dd355e3a401","$95feo$useContext","$e1995378a142960e$var$useCollectionDocument","$95feo$react","$e1995378a142960e$var$CollectionInner","$e1995378a142960e$var$useSyncExternalStoreFallback","$95feo$useIsSSR","isSSRRef","$95feo$useRef","getSnapshotWrapper","$95feo$useCallback","$95feo$useSyncExternalStore","$e1995378a142960e$var$useSyncExternalStore","createCollection","$95feo$useState","$e1995378a142960e$var$SSRContext","$e1995378a142960e$var$createCollectionNodeClass","_class","$e1995378a142960e$var$useSSRCollectionNode","itemRef","$e1995378a142960e$export$18af5c7a9e9b3664","$95feo$forwardRef","$95feo$FocusableContext","$e1995378a142960e$export$e953bb1cd0f19726","useChildren","$e1995378a142960e$var$useCollectionChildren","_useSSRCollectionNode","$e1995378a142960e$var$CollectionContext","$e1995378a142960e$export$fb8073518f34e6ec","_props_idScope","$e1995378a142960e$var$CollectionRoot","$95feo$useMemo","wrappedChildren","$95feo$createPortal","$7135fc7d473fd974$export$d40e14dec8b060a8","$18I52$createContext","$7135fc7d473fd974$export$a164736487e3f0ae","renderDropIndicator","$7135fc7d473fd974$var$useCollectionRender","$18I52$useCachedChildren","$18I52$react","$7135fc7d473fd974$export$2dbbd341daed716d","keyAfter","nextItemInFlattenedCollection","nextItemInSameLevel","afterIndicators","$18I52$isValidElement","$18I52$cloneElement","$7135fc7d473fd974$export$4feb769f8ddf26c5","$7135fc7d473fd974$export$90e00781bc59d8f9","$18I52$useMemo","$701a24aa0da5b062$export$ea18c227d4417cc3","elementType","allowFocusWhenDisabled","rel","additionalProps","$bwqiF$usePress","$bwqiF$useFocusable","buttonProps","$bwqiF$mergeProps","$bwqiF$filterDOMProps","$4adc85d9bf5b9eed$exports","$a99895ee3dc79e61$exports","$894vb$arAEmodulejs","$894vb$bgBGmodulejs","$894vb$csCZmodulejs","$894vb$daDKmodulejs","$894vb$deDEmodulejs","$894vb$elGRmodulejs","$894vb$enUSmodulejs","$894vb$esESmodulejs","$894vb$etEEmodulejs","$894vb$fiFImodulejs","$894vb$frFRmodulejs","$894vb$heILmodulejs","$894vb$hrHRmodulejs","$894vb$huHUmodulejs","$894vb$itITmodulejs","$894vb$jaJPmodulejs","$894vb$koKRmodulejs","$894vb$ltLTmodulejs","$894vb$lvLVmodulejs","$894vb$nbNOmodulejs","$894vb$nlNLmodulejs","$894vb$plPLmodulejs","$894vb$ptBRmodulejs","$894vb$ptPTmodulejs","$894vb$roROmodulejs","$894vb$ruRUmodulejs","$894vb$skSKmodulejs","$894vb$slSImodulejs","$894vb$srSPmodulejs","$894vb$svSEmodulejs","$894vb$trTRmodulejs","$894vb$ukUAmodulejs","$894vb$zhCNmodulejs","$894vb$zhTWmodulejs","$d2e8511e6f209edf$export$e908e06f4b8e3402","_async","$5rwhf$useRef","onIncrement","onIncrementPage","onDecrement","onDecrementPage","onDecrementToMin","onIncrementToMax","$5rwhf$useLocalizedStringFormatter","$5rwhf$intlStringsmodulejs","isSpinning","clearAsync","$5rwhf$useCallback","clearAsyncEvent","$5rwhf$useEffectEvent","$5rwhf$useEffect","ariaTextValue","$5rwhf$clearAnnouncer","$5rwhf$announce","onIncrementPressStart","initialStepDelay","onDecrementPressStart","cancelContextMenu","$5rwhf$useGlobalListeners","isUp","isIncrementPressed","setIsIncrementPressed","$5rwhf$useState","isDecrementPressed","setIsDecrementPressed","$1c2b297f7e2cf474$exports","$dfb4eba373ed9493$exports","$4YhVz$arAEmodulejs","$4YhVz$bgBGmodulejs","$4YhVz$csCZmodulejs","$4YhVz$daDKmodulejs","$4YhVz$deDEmodulejs","$4YhVz$elGRmodulejs","$4YhVz$enUSmodulejs","$4YhVz$esESmodulejs","$4YhVz$etEEmodulejs","$4YhVz$fiFImodulejs","$4YhVz$frFRmodulejs","$4YhVz$heILmodulejs","$4YhVz$hrHRmodulejs","$4YhVz$huHUmodulejs","$4YhVz$itITmodulejs","$4YhVz$jaJPmodulejs","$4YhVz$koKRmodulejs","$4YhVz$ltLTmodulejs","$4YhVz$lvLVmodulejs","$4YhVz$nbNOmodulejs","$4YhVz$nlNLmodulejs","$4YhVz$plPLmodulejs","$4YhVz$ptBRmodulejs","$4YhVz$ptPTmodulejs","$4YhVz$roROmodulejs","$4YhVz$ruRUmodulejs","$4YhVz$skSKmodulejs","$4YhVz$slSImodulejs","$4YhVz$srSPmodulejs","$4YhVz$svSEmodulejs","$4YhVz$trTRmodulejs","$4YhVz$ukUAmodulejs","$4YhVz$zhCNmodulejs","$4YhVz$zhTWmodulejs","$3dfb0f96be0d6a08$export$4a931266a3838b86","disableArrowNavigation","$7CEvq$useLocale","$7CEvq$useMemo","$7CEvq$createFocusManager","$3dfb0f96be0d6a08$var$findNextSegment","focusLast","$7CEvq$getFocusableTreeWalker","$7CEvq$usePress","$7CEvq$mergeProps","fromX","closestDistance","absoluteDistance","$16f0b7bb276bc17e$export$653eddfc964b0f8a","$16f0b7bb276bc17e$export$300019f83c56d282","$16f0b7bb276bc17e$export$7b3062cd49e80452","$16f0b7bb276bc17e$export$5591b0b878c1a989","_state_value","$7Gzdi$useField","valueOnFocus","$7Gzdi$useRef","$7Gzdi$useFocusWithin","_props_onFocus","_props_onBlur","$7Gzdi$useLocalizedStringFormatter","$7Gzdi$intlStringsmodulejs","descProps","$7Gzdi$useDescription","describedBy","propsFocusManager","$7Gzdi$useMemo","$7Gzdi$createFocusManager","groupProps","fieldDOMProps","$7Gzdi$mergeProps","$7Gzdi$useEffect","$7Gzdi$useFormReset","$7Gzdi$useFormValidation","$7Gzdi$filterDOMProps","$3aeceb3a64eb8358$export$d42c60378c8168f8","$jR5iF$useLocale","$jR5iF$useLocalizedStringDictionary","$jR5iF$intlStringsmodulejs","$jR5iF$useMemo","$3aeceb3a64eb8358$var$DisplayNamesPolyfill","$32489daedd52963e$export$1315d136e6f7581","enteredKeys","$4d1jn$useRef","$4d1jn$useLocale","displayNames","ariaLabelledBy","ariaDescribedBy","$4d1jn$useMemo","monthDateFormatter","$4d1jn$useDateFormatter","hourDateFormatter","monthTextValue","spinButtonProps","$4d1jn$useSpinButton","$4d1jn$NumberParser","backspace","$4d1jn$isMac","$4d1jn$useFilter","amPmFormatter","eraFormatter","$4d1jn$toCalendar","$4d1jn$CalendarDate","eraDate","formatted","prefixLength","$32489daedd52963e$var$commonPrefixLength","onInput","numberValue","segmentValue","allowsZero","shouldSetValue","$4d1jn$scrollIntoViewport","$4d1jn$getScrollParent","documentRef","$4d1jn$useEvent","compositionRef","$4d1jn$useLayoutEffect","touchPropOverrides","$4d1jn$isIOS","firstSegment","$4d1jn$useId","isEditable","$4d1jn$useLabels","segmentStyle","$4d1jn$mergeProps","$4d1jn$react","$40df3f8667284809$export$d55e7ee900f34e93","$i6df2$useSlotId","$i6df2$useRef","$i6df2$useEffect","$i6df2$focusSafely","$i6df2$useOverlayFocusContain","$i6df2$filterDOMProps","$58aed456727eb0f3$export$703601b7e90536f8","$58aed456727eb0f3$export$e64b2f635402ca43","$aUnai$useCollator","$aUnai$useMemo","$aUnai$ListKeyboardDelegate","menuTriggerProps","menuProps","$aUnai$useMenuTrigger","$aUnai$useTypeSelect","$aUnai$useField","$aUnai$filterDOMProps","$aUnai$mergeProps","valueId","$aUnai$useId","$aUnai$setInteractionModality","$aUnai$chain","$bdd25dc72710631f$export$f809e80f58e251d1","autoComplete","$8BE50$useVisuallyHidden","$8BE50$useFormReset","$8BE50$useFormValidation","_triggerRef_current","$8BE50$useCallback","$bdd25dc72710631f$export$cbd84cdb2e668835","selectRef","$8BE50$useRef","containerProps","selectProps","$8BE50$react","$99b62ae3ff97ec45$export$c5f62239608282b6","$99b62ae3ff97ec45$export$567fc7097e064344","$0175d55c2a017ebc$export$fdf4756d5b8ef90a","propsDisabled","selectedKey","$dObGJ$useSelectableItem","tabId","tabPanelId","$dObGJ$filterDOMProps","$dObGJ$useLinkProps","$dObGJ$useFocusable","$dObGJ$mergeProps","$bfc6f2d60b8a4c40$export$15010ca3c1abe90b","_this_collection_getItem_props","_this_collection_getItem","startKey","orientation","$58d314389b21fa3f$export$773e389e644c5874","keyboardActivation","$bQNZs$useLocale","$bQNZs$useMemo","$bQNZs$useSelectableCollection","tabsId","$bQNZs$useId","tabListLabelProps","$bQNZs$useLabels","$bQNZs$mergeProps","$326e436e94273fe1$export$1c4b08e0eca38426","$kwmr2$filterDOMProps","$kwmr2$useHover","$kwmr2$mergeProps","$4e1b34546679e357$export$a6da6c504e4bba8b","shouldCloseOnPress","tooltipId","$6VwSn$useId","$6VwSn$useRef","handleShow","handleHide","immediate","$6VwSn$useEffect","$6VwSn$getInteractionModality","$6VwSn$isFocusVisible","$6VwSn$useHover","$6VwSn$useFocusable","$6VwSn$mergeProps","$01b77f81d0f07f68$export$75b6ee27786ba447","$kc2Tc$createContext","$0393f8ab869a0f1a$export$e9f3bf65a26ce129","$hU2kz$createContext","$d2b4bc8c273e7be6$export$24d547caef80ccd1","$fM325$createContext","$d2b4bc8c273e7be6$export$353f5b6fc5456de1","$fM325$createHideableComponent","isPending","$fM325$useButton","$d2b4bc8c273e7be6$var$useDisableInteractions","$fM325$useFocusRing","$fM325$useHover","renderValues","buttonId","$fM325$useId","progressId","wasPending","$fM325$useRef","$fM325$useEffect","$fM325$announce","DOMProps","$fM325$filterDOMProps","$fM325$react","$fM325$mergeProps","$514c0188e459b4c0$export$9afb8bc826b033ea","$1B3Dx$createContext","$514c0188e459b4c0$export$5f1af8db9871e1d6","$1B3Dx$forwardRef","ElementType","$1B3Dx$react","$a02d57049d202695$export$d085fb9e920b5ca7","_node_prevKey","_node_nextKey","_last_key","$e40ea825a81a3709$export$52baac22726c72bf","anchorKey","currentKey","$7af3f5b51489e0b5$var$equalSets","setA","setB","$7af3f5b51489e0b5$export$253fe78d46329472","selectionMode","allowDuplicateSelectionEvents","selectionBehaviorProp","isFocusedRef","$6tM1y$useRef","$6tM1y$useState","focusedKeyRef","childFocusStrategyRef","setFocusedKey","selectedKeysProp","$6tM1y$useMemo","$7af3f5b51489e0b5$var$convertSelection","defaultSelectedKeys","setSelectedKeys","$6tM1y$useControlledState","disabledKeysProp","setSelectionBehavior","lastSelectionBehavior","$6tM1y$useEffect","childFocusStrategy","$d496c0a20b6e58ec$export$6c8a5aaad13c9852","mappedKey","allKeys","$jkhUT$compareNodeOrder","_first_key","mappedToKey","_selectedKeys_anchorKey","_selectedKeys_currentKey","fromItem","toItem","_this_layoutDelegate","addKeys","_getFirstItem","_getFirstItem_key","$jkhUT$getFirstItem","$jkhUT$getChildNodes","_options_allowsCellSelection","$e72dd72e1c76a225$export$2f645645f7bca764","selectionState","$d5vlZ$useMultipleSelectionState","$d5vlZ$useMemo","$d5vlZ$useCallback","$d5vlZ$useCollection","$d5vlZ$SelectionManager","$e72dd72e1c76a225$var$useFocusedKeyReset","$e72dd72e1c76a225$export$ba9d38c0f1bf2b36","cachedCollection","$d5vlZ$useRef","$d5vlZ$useEffect","startItem","cachedItemNodes","itemNode","itemNodes","_cachedItemNodes_length","_itemNodes_length","_startItem_index","_startItem_index1","_itemNodes_length1","isReverseSearching","_startItem_index2","_startItem_index3","$a0d645289fe9b86b$export$e7f05e985daf4b5f","_props_defaultSelectedKey","setSelectedKey","$eBozH$useControlledState","$eBozH$useMemo","_keys_values_next_value","selectedItem","$fc909762b330b746$export$61c6a8c84e605fb6","setOpen","$hnMvi$useControlledState","$hnMvi$useCallback","toggle","$22195056771860be$exports","$452ac34de8c2444e$exports","$umoiH$arAEmodulejs","$umoiH$bgBGmodulejs","$umoiH$csCZmodulejs","$umoiH$daDKmodulejs","$umoiH$deDEmodulejs","$umoiH$elGRmodulejs","$umoiH$enUSmodulejs","$umoiH$esESmodulejs","$umoiH$etEEmodulejs","$umoiH$fiFImodulejs","$umoiH$frFRmodulejs","$umoiH$heILmodulejs","$umoiH$hrHRmodulejs","$umoiH$huHUmodulejs","$umoiH$itITmodulejs","$umoiH$jaJPmodulejs","$umoiH$koKRmodulejs","$umoiH$ltLTmodulejs","$umoiH$lvLVmodulejs","$umoiH$nbNOmodulejs","$umoiH$nlNLmodulejs","$umoiH$plPLmodulejs","$umoiH$ptBRmodulejs","$umoiH$ptPTmodulejs","$umoiH$roROmodulejs","$umoiH$ruRUmodulejs","$umoiH$skSKmodulejs","$umoiH$slSImodulejs","$umoiH$srSPmodulejs","$umoiH$svSEmodulejs","$umoiH$trTRmodulejs","$umoiH$ukUAmodulejs","$umoiH$zhCNmodulejs","$umoiH$zhTWmodulejs","$35a22f14a1f04b11$var$dictionary","$bUJMr$LocalizedStringDictionary","$bUJMr$intlStringsmodulejs","$35a22f14a1f04b11$var$getLocale","$35a22f14a1f04b11$export$f18627323ab57ac0","isDateUnavailable","rangeOverflow","rangeUnderflow","isUnavailable","$bUJMr$LocalizedStringFormatter","dateFormatter","$bUJMr$DateFormatter","$35a22f14a1f04b11$export$7e319ea407e63bc0","$35a22f14a1f04b11$var$DEFAULT_FIELD_OPTIONS","$35a22f14a1f04b11$var$TWO_DIGIT_FIELD_OPTIONS","fieldOptions","granularity","_options_maxGranularity","startIdx","endIdx","$35a22f14a1f04b11$export$61a490a80c552550","$bUJMr$toCalendar","$35a22f14a1f04b11$export$66aa2b09de4b1ea5","placeholderValue","$bUJMr$now","$bUJMr$getLocalTimeZone","$bUJMr$toCalendarDate","$bUJMr$toCalendarDateTime","$35a22f14a1f04b11$export$2440da353cedad43","defaultTimeZone","defaultGranularity","setLastValue","$bUJMr$useState","$3e3ed55ab2966714$var$placeholders","$bzTv4$LocalizedStringDictionary","$3e3ed55ab2966714$export$d3f5c5e0a5023fa0","$3c0fc76039f1c516$var$EDITABLE_SEGMENTS","$3c0fc76039f1c516$var$PAGE_STEP","$3c0fc76039f1c516$var$TYPE_MAPPING","$3c0fc76039f1c516$export$60e84778edff6d26","createCalendar","hideTimeZone","defaultFormatter","$g03ag$useMemo","$g03ag$DateFormatter","setDate","$g03ag$useControlledState","$g03ag$useState","calendarValue","_convertValue","placeholderDate","setPlaceholderDate","showEra","formatOpts","_props_maxGranularity","allSegments","seg","validSegments","setValidSegments","clearedSegment","$g03ag$useRef","lastCalendar","$g03ag$useEffect","$g03ag$isEqualCalendar","placeholder","$g03ag$toCalendar","displayValue","validKeys","$g03ag$GregorianCalendar","dateValue","$3c0fc76039f1c516$var$processSegments","markValid","adjustSegment","$3c0fc76039f1c516$var$addSegment","$g03ag$useFormValidationState","isValueInvalid","_props_defaultValue1","$3c0fc76039f1c516$var$setSegment","shouldBePM","formatOptions","newOptions","newFormatOptions","timeValue","processedSegments","isPlaceholder","dateSegment","$3c0fc76039f1c516$var$getSegmentLimits","$g03ag$getMinimumMonthInYear","$g03ag$getMinimumDayInMonth","wasPM","$a28c903ee9ad8dc5$export$79fefeb1c2091ac3","overlayTriggerState","$8bn9m$useOverlayTriggerState","focusStrategy","setFocusStrategy","$8bn9m$useState","expandedKeysStack","setExpandedKeysStack","closeAll","triggerKey","oldStack","$0b2218c4e3fe7d7e$export$3f8be18b0f41eaf2","$58ylH$useControlledState","$0b2218c4e3fe7d7e$var$toString","$2bc3a590c5373a4e$export$5159ec8b34d4ec12","triggerState","$6FfNf$useOverlayTriggerState","$6FfNf$useState","$6FfNf$useMemo","controlledValue","setControlledValue","$6FfNf$useControlledState","_props_onSelectionChange","_value_","listState","$6FfNf$useListState","$2bc3a590c5373a4e$var$convertValue","selectedItems","$6FfNf$useFormValidationState","_selectedItems_","$76f919a04c5a7d14$export$4ba071daf4e486","$fgY1A$useSingleSelectListState","$76f919a04c5a7d14$var$findDefaultSelectedKey","currentSelectedKey","lastSelectedKey","$fgY1A$useRef","$fgY1A$useEffect","_collection_getItem_props","_collection_getItem","_collection_getItem_props1","_collection_getItem1","$8796f90736e175cb$var$TOOLTIP_DELAY","$8796f90736e175cb$var$TOOLTIP_COOLDOWN","$8796f90736e175cb$var$tooltips","$8796f90736e175cb$var$tooltipId","$8796f90736e175cb$var$globalWarmedUp","$8796f90736e175cb$var$globalWarmUpTimeout","$8796f90736e175cb$var$globalCooldownTimeout","$8796f90736e175cb$export$4d40659c25ecb50b","closeDelay","$50cCT$useOverlayTriggerState","$50cCT$useMemo","closeTimeout","$50cCT$useRef","closeCallback","ensureTooltipEntry","hideTooltip","closeOpenTooltips","hideTooltipId","showTooltip","warmupTooltip","$50cCT$useEffect","$05ca4cd7c4a5a999$export$863faf230ee2118a","expandedKeys","$875d6693e12af071$export$728d6ba534403756","onExpandedChange","setExpandedKeys","$75HV2$useControlledState","$75HV2$useMultipleSelectionState","$75HV2$useMemo","$75HV2$useCollection","$75HV2$useCallback","$75HV2$useEffect","$875d6693e12af071$var$toggleKey","$75HV2$SelectionManager","$ee014567cb39d3f0$export$ff05c3ac10437e03","$hnYyE$createContext","$d3e0e05bdfcf66bd$export$c24727297075ec6a","$j6ya4$createContext","$a049562f99e7db0e$export$f9c6924e160136d1","$gZciS$createContext","$a049562f99e7db0e$export$eb2fcfdbd7ba97d4","$gZciS$forwardRef","$gZciS$useHover","$gZciS$useFocusRing","_props_role","_props_slot","$gZciS$react","$gZciS$mergeProps","$3985021b0ad6602f$export$37fb8590cf2c088c","$jMZTB$createContext","$3985021b0ad6602f$var$filterHoverProps","$3985021b0ad6602f$export$f5b8910cec6cf069","$jMZTB$createHideableComponent","$jMZTB$useHover","$jMZTB$useFocusRing","$jMZTB$react","$jMZTB$mergeProps","$cafa55beb2fc5ef3$exports","$df39c1238ae2b5f3$exports","$bK1z9$arAEmodulejs","$bK1z9$bgBGmodulejs","$bK1z9$csCZmodulejs","$bK1z9$daDKmodulejs","$bK1z9$deDEmodulejs","$bK1z9$elGRmodulejs","$bK1z9$enUSmodulejs","$bK1z9$esESmodulejs","$bK1z9$etEEmodulejs","$bK1z9$fiFImodulejs","$bK1z9$frFRmodulejs","$bK1z9$heILmodulejs","$bK1z9$hrHRmodulejs","$bK1z9$huHUmodulejs","$bK1z9$itITmodulejs","$bK1z9$jaJPmodulejs","$bK1z9$koKRmodulejs","$bK1z9$ltLTmodulejs","$bK1z9$lvLVmodulejs","$bK1z9$nbNOmodulejs","$bK1z9$nlNLmodulejs","$bK1z9$plPLmodulejs","$bK1z9$ptBRmodulejs","$bK1z9$ptPTmodulejs","$bK1z9$roROmodulejs","$bK1z9$ruRUmodulejs","$bK1z9$skSKmodulejs","$bK1z9$slSImodulejs","$bK1z9$srSPmodulejs","$bK1z9$svSEmodulejs","$bK1z9$trTRmodulejs","$bK1z9$ukUAmodulejs","$bK1z9$zhCNmodulejs","$bK1z9$zhTWmodulejs","$612b8eb6cb90e02d$export$d188a835a7bc5783","$f3JOg$createContext","$612b8eb6cb90e02d$export$f55761759794cf55","$612b8eb6cb90e02d$export$62ed72bc21f6b8a6","$f3JOg$forwardRef","$f3JOg$useContext","$f3JOg$react","$612b8eb6cb90e02d$export$971707d8a129a1f7","dragAndDropHooks","dropState","_dragAndDropHooks_isVirtualDragging","isVirtualDragging","$f3JOg$useCallback","$612b8eb6cb90e02d$export$d1e8e3fbb7461f6","_dropState_target","dropTargetKey","lastDescendantKey","_dropState_collection_getItem","_dropState_collection_getItem_level","targetLevel","_node_level","$f3JOg$useMemo","$72a5793c14baf454$export$e0e4026c12a8bdbb","$i47tY$createContext","$72a5793c14baf454$export$8b251419efc915eb","$i47tY$createLeafComponent","$i47tY$HeaderNode","$i47tY$react","$c8a5a149f625efcf$var$SharedElementContext","$I3GNx$createContext","$c8a5a149f625efcf$export$758399f318e6385a","$I3GNx$useRef","$I3GNx$react","$1d5b8b8664671ef2$export$c9549807523555e0","$4GgyL$createContext","$431f98aba6844401$export$6615d83f6de245ce","$i9JCE$createContext","$431f98aba6844401$export$7750289ca694c0b5","$i9JCE$CollectionNode","prevItem","$eed445e0843c11d0$export$7ff8f37d2d81a48d","$e8Bmu$createContext","$eed445e0843c11d0$export$7c5906fe4f1f2af2","$eed445e0843c11d0$export$41f133550aa26f48","$e8Bmu$forwardRef","$e8Bmu$useContext","$e8Bmu$react","$eed445e0843c11d0$var$ListBoxInner","$e8Bmu$CollectionBuilder","$e8Bmu$Collection","$eed445e0843c11d0$var$StandaloneListBox","listBoxRef","$e8Bmu$useListState","inputState","layout","$e8Bmu$UNSTABLE_useFilteredListState","isListDraggable","isListDroppable","$e8Bmu$useLocale","$e8Bmu$useCollator","ctxDropTargetDelegate","CollectionRoot","$e8Bmu$useMemo","$e8Bmu$ListKeyboardDelegate","listBoxProps","$e8Bmu$useListBox","$e8Bmu$useRef","$e8Bmu$useEffect","dragState","droppableCollection","isRootDropTarget","dragPreview","preview","DragPreview","dropTargetDelegate","$e8Bmu$useFocusRing","emptyState","$e8Bmu$filterDOMProps","$e8Bmu$FocusScope","$e8Bmu$mergeProps","$eed445e0843c11d0$var$ListBoxDropIndicatorWrapper","$eed445e0843c11d0$var$ListBoxSectionInner","section","CollectionBranch","headingRef","_props_arialabel","headingProps","$e8Bmu$useListBoxSection","$eed445e0843c11d0$export$dca12b0bb56e4fc","$e8Bmu$createBranchComponent","$e8Bmu$SectionNode","$eed445e0843c11d0$export$a11e76429ed99b4","$e8Bmu$createLeafComponent","$e8Bmu$ItemNode","forwardedRef","$e8Bmu$useObjectRef","states","$e8Bmu$useOption","$e8Bmu$useHover","$e8Bmu$useFocus","draggableItem","droppableItem","isDragging","dropIndicatorProps","isDropTarget","$eed445e0843c11d0$var$ListBoxDropIndicatorForwardRef","$eed445e0843c11d0$var$ListBoxDropIndicator","$e8Bmu$LoaderNode","isLoading","sentinelRef","memoedLoadMoreProps","$e8Bmu$useLoadMoreSentinel","$e8Bmu$inertValue","$44f671af83e7d9e0$export$2de4954e8ae13b9f","$8wt2Z$createContext","$44f671af83e7d9e0$export$746d02f47f4d381","$8wt2Z$forwardRef","$8wt2Z$filterDOMProps","$8wt2Z$react","$07b14b47974efb58$export$9b9a0cd73afb7ca4","$ehFet$createContext","$07b14b47974efb58$var$PopoverGroupContext","$07b14b47974efb58$export$5b6b19405a83ff9d","$ehFet$forwardRef","contextState","$ehFet$useContext","$de32f1b87079253c$export$d2f961adcb0afbe","localState","$ehFet$useOverlayTriggerState","$ehFet$useExitAnimation","$ehFet$useIsHidden","$ehFet$useLocale","$ehFet$react","$07b14b47974efb58$var$PopoverInner","UNSTABLE_portalContainer","clearContexts","$ehFet$useRef","containerRef","groupCtx","isSubPopover","_props_offset","popoverProps","$ehFet$usePopover","$ehFet$useEnterAnimation","shouldBeDialog","isDialog","setDialog","$ehFet$useState","$ehFet$useLayoutEffect","$ehFet$useEffect","$ehFet$focusSafely","$ehFet$useMemo","$ehFet$mergeProps","$ehFet$filterDOMProps","$ehFet$DismissButton","$ehFet$Overlay","$63df2425e2108aa8$export$744d98a3b8a94e1c","$3zqIJ$createContext","$3674c52c6b3c5bce$export$c7e742effb1c51e2","$kM2ZM$createContext","$3674c52c6b3c5bce$export$24aad8519b95b41b","$3674c52c6b3c5bce$export$795aec4671cbae19","$3674c52c6b3c5bce$var$SelectionManagerContext","$3674c52c6b3c5bce$export$27d2ad3c5815583e","$kM2ZM$useMenuTriggerState","$kM2ZM$useRef","$kM2ZM$useMenuTrigger","buttonWidth","setButtonWidth","$kM2ZM$useState","$kM2ZM$useCallback","$kM2ZM$useResizeObserver","$kM2ZM$react","$kM2ZM$PressResponder","$3674c52c6b3c5bce$var$SubmenuTriggerContext","$3674c52c6b3c5bce$var$SubmenuTriggerNode","$kM2ZM$CollectionNode","triggerNode","$3674c52c6b3c5bce$export$d9b273488cd8ce6f","$kM2ZM$forwardRef","$kM2ZM$CollectionBuilder","$kM2ZM$Collection","$3674c52c6b3c5bce$var$MenuInner","autocompleteMenuProps","filteredCollection","$kM2ZM$useMemo","$kM2ZM$useTreeState","$kM2ZM$useContext","$kM2ZM$useMenu","$kM2ZM$filterDOMProps","$kM2ZM$FocusScope","$kM2ZM$mergeProps","$3674c52c6b3c5bce$var$MenuSectionInner","$3674c52c6b3c5bce$var$MenuItemContext","$3674c52c6b3c5bce$var$GroupSelectionManager","$kM2ZM$SelectionManager","_section_props","_section_props1","_section_props_arialabel","$kM2ZM$useMenuSection","$kM2ZM$useMultipleSelectionState","$3674c52c6b3c5bce$export$2ce376c2cc3355c8","$kM2ZM$createLeafComponent","$kM2ZM$ItemNode","_useSlottedContext","$kM2ZM$useObjectRef","menuItemProps","keyboardShortcutProps","$kM2ZM$useMenuItem","$kM2ZM$useHover","$de32f1b87079253c$export$8b93a07348a7730c","$6IYYA$createContext","$de32f1b87079253c$export$2e1e1122cf0cba88","$6IYYA$useMenuTriggerState","buttonRef","$6IYYA$useRef","$6IYYA$useOverlayTrigger","$6IYYA$useState","$6IYYA$useCallback","$6IYYA$useResizeObserver","$6IYYA$useId","$6IYYA$react","$6IYYA$PressResponder","$de32f1b87079253c$export$3ddf2d174ce01153","$6IYYA$forwardRef","originalAriaLabelledby","dialogProps","titleProps","$6IYYA$useDialog","$6IYYA$useContext","$6IYYA$filterDOMProps","$6IYYA$mergeProps","$c699643d2073b351$var$dateSegments","$c699643d2073b351$var$granularityMap","$c699643d2073b351$export$f6a685cd1acbd1fa","$62z4d$useVisuallyHidden","inputStep","timeSegments","targetString","targetValue","$62z4d$parseDateTime","$62z4d$parseDate","$c699643d2073b351$export$eefa3e19139f00f3","$62z4d$react","$40825cdb76e74f70$export$7b3e670c86da5fe8","$a9Sgq$createContext","$40825cdb76e74f70$export$3b08bebcf796eea0","$40825cdb76e74f70$export$5d8dc44abd10a920","$40825cdb76e74f70$export$d9781c7894a82487","$a9Sgq$forwardRef","formValidationBehavior","_props_validationBehavior","$a9Sgq$useLocale","$a9Sgq$useDateFieldState","$a9Sgq$createCalendar","fieldRef","$a9Sgq$useRef","labelRef","$a9Sgq$useDateField","$a9Sgq$filterDOMProps","$a9Sgq$react","$40825cdb76e74f70$export$7edc06cf1783b30f","dateFieldState","$a9Sgq$useContext","timeFieldState","$40825cdb76e74f70$var$DateInputInner","$40825cdb76e74f70$var$DateInputStandalone","dateFieldProps","$a9Sgq$cloneElement","$40825cdb76e74f70$export$336ab7fa954c4b5f","$a9Sgq$useObjectRef","segmentProps","$a9Sgq$useDateSegment","$a9Sgq$useFocusRing","$a9Sgq$useHover","$a9Sgq$mergeProps","$5cb03073d3f54797$export$a8a3e93435678ff9","$bt28J$forwardRef","$bt28J$react","$f3f84453ead64de5$export$ab57792b9b6974a6","$daTMi$createContext","$f3f84453ead64de5$var$InternalModalContext","$f3f84453ead64de5$export$2b77a92f1a5ad772","$daTMi$forwardRef","$daTMi$useContext","$daTMi$react","$f3f84453ead64de5$var$ModalContent","defaultOpen","onOpenChange","$f3f84453ead64de5$export$8948f78d83984c69","$f3f84453ead64de5$var$ModalOverlayWithForwardRef","$daTMi$useOverlayTriggerState","objectRef","$daTMi$useObjectRef","modalRef","$daTMi$useRef","isOverlayExiting","$daTMi$useExitAnimation","isModalExiting","$daTMi$useIsSSR","$f3f84453ead64de5$var$ModalOverlayInner","modalProps","$daTMi$useModalOverlay","entering","$daTMi$useEnterAnimation","$daTMi$useViewportSize","pageHeight","scrollingElement","$daTMi$isScrollable","fractionalHeightDifference","$daTMi$Overlay","$daTMi$mergeProps","$daTMi$filterDOMProps","mergedRefs","$daTMi$useMemo","$daTMi$mergeRefs","$daTMi$DismissButton","$440f4836bcb56932$export$d1c4e4c63cb03a11","$8iEQ9$createContext","$440f4836bcb56932$export$b94867ecbd698f21","$8iEQ9$createHideableComponent","$8iEQ9$useRef","$8iEQ9$useSearchFieldState","clearButtonProps","$8iEQ9$useSearchField","$8iEQ9$filterDOMProps","$8iEQ9$react","$82d7e5349645de74$export$7540cee5be7dc19b","$akiWb$createContext","$82d7e5349645de74$export$ef445b55be0601bd","$82d7e5349645de74$export$ef9b1a59e592288f","$akiWb$forwardRef","$akiWb$useMemo","$akiWb$react","$akiWb$CollectionBuilder","$82d7e5349645de74$var$SelectInner","$82d7e5349645de74$var$CLEAR_CONTEXTS","$akiWb$useSelectState","$akiWb$useFocusRing","$akiWb$useRef","valueProps","hiddenSelectProps","$akiWb$useSelect","$akiWb$useState","$akiWb$useCallback","$akiWb$useResizeObserver","renderPropsState","$akiWb$filterDOMProps","$82d7e5349645de74$export$f8f745c04421623f","$akiWb$mergeProps","$akiWb$HiddenSelect","$82d7e5349645de74$export$e288731fd71264f0","$akiWb$createHideableComponent","_state_selectedItems_","$akiWb$useContext","$akiWb$useListFormatter","selectedText","_textValue_","$akiWb$Fragment","$akiWb$useLocalizedStringFormatter","$akiWb$intlStringsmodulejs","_state_selectedItems__value","_item_value","$5e8ad37a45e1c704$export$cfa7aa87c26e7d1f","$7aSLZ$createContext","$5e8ad37a45e1c704$export$364712098d2aa57c","$5e8ad37a45e1c704$export$b2539bed5023c21c","$7aSLZ$forwardRef","$7aSLZ$useMemo","$7aSLZ$react","$7aSLZ$CollectionBuilder","$5e8ad37a45e1c704$var$TabsInner","$7aSLZ$useTabListState","$7aSLZ$useFocusRing","$7aSLZ$filterDOMProps","$7aSLZ$mergeProps","$5e8ad37a45e1c704$export$e51a686c67fdaa2d","$7aSLZ$useContext","$5e8ad37a45e1c704$var$TabListInner","$7aSLZ$Collection","$7aSLZ$useObjectRef","tabListProps","$7aSLZ$useTabList","$5e8ad37a45e1c704$var$TabItemNode","$7aSLZ$CollectionNode","$5e8ad37a45e1c704$export$3e41faf802a29e71","$7aSLZ$createLeafComponent","tabProps","$7aSLZ$useTab","$7aSLZ$useHover","$4e3b923658d69c60$export$7a7623236eec67fa","$cCslV$createContext","$4e3b923658d69c60$export$39ae08fa83328b12","$4e3b923658d69c60$export$8c610744efcf8a1d","$cCslV$useTooltipTriggerState","$cCslV$useRef","tooltipProps","$cCslV$useTooltipTrigger","$cCslV$react","$cCslV$FocusableProvider","$4e3b923658d69c60$export$28c660c63b792dea","$cCslV$forwardRef","$cCslV$useContext","$cCslV$useExitAnimation","$cCslV$OverlayContainer","$4e3b923658d69c60$var$TooltipInner","$cCslV$useOverlayPosition","$cCslV$useEnterAnimation","$cCslV$mergeProps","$cCslV$useTooltip","$cCslV$filterDOMProps","LabeledSwitch","tooltip","tracking","onToggle","TooltipTrigger","Button","Tooltip","OverlayArrow","Checkbox","checked","testHook","RadioButton","CLOSE_BUTTON_WIDTH","CloseButton","OverlayHeader","onTitleClick","CodeSnippet","theme","isTruncated","useMarkdown","forceShowCopyButton","canCopy","setCanCopy","hasCopied","setHasCopied","IndicatorSources","uniqueSources","SourceContent","NonExpandable","retrievedOn","showKeyInfo","TextInput","heap","parentIndex","peek","halfLength","leftIndex","rightIndex","exports","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","localClearTimeout","localSetImmediate","advanceTimers","currentTime","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","firstTimer","requestHostTimeout","taskTimeoutID","frameInterval","startTime","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","continuationCallback","task","fps","eventHandler","priorityLevel","parentPriorityLevel","schedulerModule","Scheduler","ReactDOM","isValidContainer","getNearestMountedFiber","fiber","nearestMounted","getSuspenseInstanceFromFiber","suspenseState","getActivityInstanceFromFiber","activityState","assertIsMounted","findCurrentFiberUsingSlowPath","alternate","parentA","parentB","didFindChild","child$0","findCurrentHostFiberImpl","REACT_LEGACY_ELEMENT_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_CACHE_SENTINEL","REACT_CLIENT_REFERENCE","getComponentNameFromType","ReactDOMSharedInternals","sharedNotPendingObject","valueStack","createCursor","cursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","getOwnHostContext","getChildHostContextProd","popHostContainer","pushHostContext","JSCompiler_inline_result","popHostContext","HostTransitionContext","describeBuiltInComponentFrame","reentry","describeNativeComponentFrame","previousPrepareStackTrace","RunInRootFrame","Fake","control","x$1","x$2","sample","namePropDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","describeFiber","childFiber","getStackByFiberInDevAndProd","workInProgress","scheduleCallback$3","cancelCallback$1","shouldYield","requestPaint","getCurrentPriorityLevel","ImmediatePriority","UserBlockingPriority","NormalPriority$1","LowPriority","IdlePriority","log$1","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","clz32","clz32Fallback","LN2","nextTransitionUpdateLane","nextTransitionDeferredLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","wipLanes","rootHasPendingCommit","pendingLanes","nextLanes","suspendedLanes","pingedLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","claimNextRetryLane","createLaneMap","laneMap","markRootUpdated$1","updateLane","markRootFinished","finishedLanes","remainingLanes","spawnedLane","updatedLanes","suspendedRetryLanes","previouslyPendingLanes","entanglements","expirationTimes","hiddenUpdates","index$7","hiddenUpdatesForLane","markSpawnedDeferredLane","entangledLanes","spawnedLaneIndex","markRootEntangled","rootEntangledLanes","index$8","getBumpedLaneForHydration","renderLane","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","runWithPriority","previousPriority","randomKey","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetInst","getParentHydrationBoundary","getInstanceFromNode","getNodeFromInstance","getResourcesFromRoot","resources","markNodeAsHoistable","allNativeEvents","registrationNameDependencies","registerTwoPhaseEvent","registrationName","registerDirectEvent","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","isAttributeNameSafe","setValueForAttribute","prefix$10","setValueForKnownAttribute","setValueForNamespacedAttribute","getToStringValue","isCheckable","trackValueOnNode","valueField","updateValueIfChanged","tracker","getActiveElement","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","updateInput","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","updateOptions","multiple","propValue","setDefaultSelected","updateTextarea","initTextarea","setTextContent","unitlessNumbers","setValueForStyle","isCustomProperty","setValueForStyles","prevStyles","styleName$16","styleName$17","isCustomElement","isJavaScriptProtocol","sanitizeURL","currentReplayingEvent","getEventTarget","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","stateNode","canUseDOM","passiveBrowserEventsSupported","startText","fallbackText","getData","startLength","endLength","minEnd","getEventCharCode","keyCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","EventInterface","SyntheticEvent","UIEventInterface","SyntheticUIEvent","lastMovementX","lastMovementY","lastMouseEvent","MouseEventInterface","getEventModifierState","SyntheticMouseEvent","DragEventInterface","SyntheticDragEvent","FocusEventInterface","SyntheticFocusEvent","AnimationEventInterface","SyntheticAnimationEvent","ClipboardEventInterface","SyntheticClipboardEvent","CompositionEventInterface","SyntheticCompositionEvent","normalizeKey","translateToKey","modifierKeyToProp","modifierStateGetter","keyArg","KeyboardEventInterface","SyntheticKeyboardEvent","PointerEventInterface","SyntheticPointerEvent","TouchEventInterface","SyntheticTouchEvent","TransitionEventInterface","SyntheticTransitionEvent","WheelEventInterface","SyntheticWheelEvent","ToggleEventInterface","SyntheticToggleEvent","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","getNativeBeforeInputChars","getFallbackBeforeInputChars","supportedInputTypes","isTextInputElement","nodeName","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$286","isSupported$jscomp$inline_427","element$jscomp$inline_428","stopWatchingForValueChange","handlePropertyChange","handleEventsForInputEventPolyfill","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","shallowEqual","objA","objB","keysA","keysB","getLeafNode","getNodeForCharacterOffset","nodeEnd","containsNode","outerNode","innerNode","getActiveElementDeep","hasSelectionCapabilities","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","makePrefixMap","styleProp","eventName","vendorPrefixes","prefixedEventNames","getVendorPrefixedEventName","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","FiberNode","pendingProps","mode","createFiberImplClass","shouldConstruct","createWorkInProgress","resetWorkInProgress","createFiberFromTypeAndProps","owner","fiberTag","isHostHoistableType","createFiberFromFragment","createFiberFromText","createFiberFromDehydratedFragment","dehydratedNode","createFiberFromPortal","portal","CapturedStacks","createCapturedValueAtFiber","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","restoreSuspendedTreeContext","suspendedContext","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","listenToNonDelegatedEvent","mediaEventTypes","checkForUnmatchedText","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratableInstanceAfterHydrationBoundary","isSingletonScope","previousHydratableOnEnteringScopedSingleton","getNextHydratable","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","providerFiber","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","forcePropagateEntireTree","nextFiber","dependency","propagateParentContextChanges","isInsidePropagationBailout","currentParent","checkIfContextChanged","currentDependencies","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","consumer","AbortControllerLocal","signal","scheduleCallback$2","NormalPriority","CacheContext","createCache","releaseCache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","entangleAsyncAction","entangledListeners","requestTransitionLane","pingEngtangledActionScope","chainThenableValue","thenableWithOverride","prevOnStartTransitionFinish","globalMostRecentTransitionTime","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pushTransition","offscreenWorkInProgress","prevCachePool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","fulfilledThenable","rejectedThenable","suspendedThenable","resolveLazy","lazyType","getSuspendedThenable","rejectedReason","thenableState$1","thenableIndexCounter$1","unwrapThenable","coerceRef","throwOnInvalidObjectTypeImpl","returnFiber","newChild","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deletions","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","textContent","updateElement","updateFragment","updatePortal","createChild","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildrenArray","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","reconcileChildrenIterator","reconcileChildFibersImpl","firstChildFiber","reconcileChildFibers","mountChildFibers","hasForceUpdate","initializeUpdateQueue","cloneUpdateQueue","createUpdate","enqueueUpdate","updateQueue","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","capturedUpdate","newFirst","newLast","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","entangledActionThenable","processUpdateQueue","workInProgress$jscomp$0","instance$jscomp$0","firstBaseUpdate","lastBaseUpdate","pendingQueue","lastPendingUpdate","firstPendingUpdate","newState","isHiddenUpdate","workInProgressRootRenderLanes","workInProgressRootSkippedLanes","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","reuseHiddenContextOnStack","popHiddenContext","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","suspenseStackCursor","pushDehydratedActivitySuspenseHandler","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","isSuspenseInstancePending","isSuspenseInstanceFallback","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","HooksDispatcherOnRerender","TransitionAwareHostComponent","dispatcher","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","createFunctionComponentUpdateQueue","useMemoCache","memoCache","basicStateReducer","updateReducer","updateReducerImpl","baseQueue","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$60","revertLane","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","isHydrating$jscomp$0","snapshotChanged","updateEffect","subscribeToStore","pushSimpleEffect","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","forceStoreRerender","scheduleUpdateOnFiber","mountStateImpl","initialStateInitializer","updateOptimisticImpl","dispatchActionState","actionQueue","setPendingState","setState","isRenderPhaseUpdate","actionNode","runActionStateAction","prevState","handleActionReturnValue","onActionError","error$66","nextState","onActionSuccess","notifyActionListeners","actionStateReducer","oldState","mountActionState","initialStateProp","ssrFormState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","stateHook","updateActionStateImpl","currentStateHook","actionStateActionEffect","rerenderActionState","updateRef","mountEffectImpl","fiberFlags","hookFlags","updateEffectImpl","mountEffect","useEffectEventImpl","componentUpdateQueue","updateEvent","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","requestDeferredLane","updateDeferredValueImpl","startTransition","pendingState","finishedState","thenableForFinishedState","dispatchSetStateInternal","requestUpdateLane","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","useHostTransitionStatus","updateRefresh","refreshCache","root$69","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","eagerState","throwIfDuringRender","identifierPrefix","idWithLeadingBit","booleanOrThenable","applyDerivedStateFromProps","getDerivedStateFromProps","classComponentUpdater","checkShouldComponentUpdate","oldProps","newProps","nextContext","callComponentWillReceiveProps","resolveClassComponentProps","baseProps","propName$73","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","e$74","logCaughtError","onCaughtError","e$75","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","legacyErrorBoundariesThatAlreadyFailed","throwException","rootRenderLanes","renderDidSuspendDelayIfPossible","workInProgressRootExitStatus","attachPingListener","wrapperError","workInProgressRootConcurrentErrors","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","updateFunctionComponent","updateOffscreenComponent","deferHiddenOffscreenComponent","bailoutOffscreenComponent","nextBaseLanes","remainingChildLanes","mountActivityChildren","mountWorkInProgressOffscreenFiber","retryActivityComponentWithoutHydrating","updateActivityComponent","didSuspend","canHydrateHydrationBoundary","dehydrated","markRef","replayFunctionComponent","updateClassComponent","contextType","unresolvedOldProps","oldContext","contextType$jscomp$0","mountHostRootWithoutHydrating","SUSPENDED_MARKER","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","nextPrimaryChildren","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","digest","primaryChildren","offscreenProps","scheduleSuspenseWorkOnFiber","initSuspenseListRenderState","isBackwards","lastContentRow","tailMode","renderState","updateSuspenseListComponent","revealOrder","suspenseContext","shouldForceFallback","attemptEarlyBailoutIfNoScheduledUpdate","state$102","didSuspendBefore","beginWork","$$typeof","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","canHydrateInstance","canHydrateTextInstance","markUpdate","preloadInstanceAndSuspendIfNeeded","shouldRemainOnPreviousScreen","preloadResourceAndSuspendIfNeeded","resource","preloadResource","scheduleRetryEffect","retryQueue","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$106","bubbleProperties","completedWork","didBailout","newChildLanes","subtreeFlags","child$107","completeWork","nextResource","listenToAllSupportedEvents","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","lastEffect","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$140","commitHostMount","commitHostUpdate","domElement","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","insertOrAppendPlacementNode","commitHostSingletonAcquisition","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","nextEffect","commitBeforeMutationEffects","eventsEnabled","_enabled","anchorOffset","focusNode","indexWithinAnchor","indexWithinFocus","selectionInformation","resolvedPrevProps","clearContainerSparingly","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","error$139","commitActivityHydrationCallbacks","commitSuspenseHydrationCallbacks","retryDehydratedSuspenseBoundary","registerSuspenseInstanceRetry","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearHydrationBoundary","retryIfBlockedOn","getRetryCache","retryCache","attachSuspenseRetryListeners","wakeables","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","maybeNodes","getHydratableHoistableCache","mountHoistable","acquireResource","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","wasHidden","prevOffscreenSubtreeIsHidden","recursivelyTraverseDisappearLayoutEffects","hideOrUnhideDehydratedBoundary","hostParentFiber","parent$141","before$142","parent$143","before$144","finishedRoot$jscomp$0","includeWorkInProgressEffects","hiddenCallbacks","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","suspendedState","accumulateSuspenseyCommitOnFiber","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","sibling","DefaultAsyncDispatcher","resourceType","cacheForType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","pendingEffectsStatus","pendingEffectsRoot","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","exitStatus","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","wasRootDehydrated","scheduleTimeout","commitRootWhenReady","recoverableErrors","didIncludeRenderPhaseUpdate","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","timeoutOffset","waitForCommitToBeReady","commitRoot","didAttemptEntireTree","index$6","flushSyncWorkAcrossRoots_impl","resetWorkInProgressStack","cancelTimeout","allEntangledLanes","index$4","handleThrow","thrownValue","pushDispatcher","prevDispatcher","pushAsyncDispatcher","prevAsyncDispatcher","shouldYieldForPrerendering","prevExecutionContext","unitOfWork","throwAndUnwindWorkLoop","workLoopSync","thrownValue$165","performUnitOfWork","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","workLoopConcurrentByScheduler","thrownValue$167","suspendedReason","unwindUnitOfWork","skipSiblings","flushPendingEffects","scheduleCallback$1","flushPassiveEffects","flushMutationEffects","flushLayoutEffects","flushSpawnedWork","rootMutationHasEffect","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","start$jscomp$0","end$jscomp$0","startMarker","endMarker","rootHasLayoutEffect","releaseRootPooledCache","onRecoverableError","recoverableError","renderPriority","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","retryLane","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleImmediateRootScheduleTask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$170","performSyncWorkOnRoot","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","shouldAttemptEagerTransition","scheduleTaskForRootDuringMicrotask","index$5","expirationTime","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","scheduleMicrotask","actionScopeLane","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","temp","extractEvents$1","maybeTargetInst","i$jscomp$inline_1577","eventName$jscomp$inline_1578","domEventName$jscomp$inline_1579","capitalizedEvent$jscomp$inline_1580","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","getParent","tempB","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","targetFiber","captureName","_instance2","common","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","serverText","clientText","setProp","setPropOnCustomElement","hasSrc","hasSrcSet","propKey","propValue$184","lastProps","lastProp","propKey$201","propKey$217","propKey$222","propKey$227","propKey$232","isLikelyStaticResource","initiatorType","estimateBandwidth","bits","resourceEntries","transferSize","overlapEntry","overlapStartTime","overlapTransferSize","overlapInitiatorType","namespaceURI","parentNamespace","currentPopstateTransitionEvent","localPromise","handleErrorInNextTick","parentInstance","hydrationInstance","node$jscomp$0","nextNode$jscomp$0","suspenseInstance","anyProps","nodeType","targetInstance","rootContainerInstance","preloadPropsMap","preconnectsSet","previousDispatcher","flushSyncWork","requestFormReset","prefetchDNS","preconnect","preload","preloadModule","preinitScript","preinitStyle","preinitModuleScript","previousWasRendering","wasRendering","formInst","globalDocument","preconnectAs","limitedEscapedHref","preloadSelector","getStyleKey","getScriptKey","getStylesheetSelectorFromKey","getScriptSelectorFromKey","precedence","adoptPreloadPropsForStylesheet","insertStylesheet","scripts","adoptPreloadPropsForScript","currentProps","styles$243","resource$244","preloadStylesheet","stylesheetPropsFromRawProps","rawProps","preloadProps","styleProps","instance$249","linkInstance","prior","stylesheetProps","scriptProps","keyAttribute","caches","hostContext","onUnsuspend","estimatedBytesWithinLimit","insertSuspendedStylesheets","commit","stylesheetTimer","unsuspend","imgTimer","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","onDefaultTransitionIndicator","formState","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","attemptHydrationAtCurrentPriority","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedFocus","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queuedExplicitHydrationTargets","accumulateOrCreateContinuousQueuedReplayableEvent","existingQueuedEvent","pointerId","attemptExplicitHydrationTarget","queuedTarget","attemptReplayContinuousQueuedEvent","queuedEvent","targetContainers","nextBlockedOn","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","formProps","defaultOnDefaultTransitionIndicator","handleNavigate","pendingResolve","handleNavigateComplete","isCancelled","startFakeNavigation","currentEntry","ReactDOMRoot","internalRoot","ReactDOMHydrationRoot","isomorphicReactPackageVersion$jscomp$inline_1840","componentOrElement","internals$jscomp$inline_2347","hook$jscomp$inline_2348","reactDomClient_production","clientModule","DataCitation","iconPosition","dataTrackNote","aProps","defaultHaloStyle","Halo","halo","React.cloneElement","BodyPortal","DEFAULT_COLOR","LoadingIndicator","reactRenderToStringClientOnly","createRoot","flushSync","GrapherTabIcon","isLineChartThatTurnedIntoDiscreteBar","chartIcons","ARROW_PATHS","GrapherTrendArrow","isColored","latestSchemaVersion","outdatedSchemaVersions","defaultGrapherConfig","GRAPHER_PROD_URL","GRAPHER_EMBEDDED_FIGURE_ATTR","GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR","GRAPHER_TIMELINE_CLASS","GRAPHER_SIDE_PANEL_CLASS","GRAPHER_SETTINGS_CLASS","GRAPHER_CHART_AREA_CLASS","GRAPHER_HEADER_CLASS","GRAPHER_FOOTER_CLASS","DEFAULT_GRAPHER_ENTITY_TYPE","DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL","GRAPHER_LOADED_EVENT_NAME","DEFAULT_GRAPHER_WIDTH","DEFAULT_GRAPHER_HEIGHT","GRAPHER_THUMBNAIL_WIDTH","GRAPHER_THUMBNAIL_HEIGHT","GRAPHER_SQUARE_SIZE","DEFAULT_GRAPHER_BOUNDS","DEFAULT_GRAPHER_BOUNDS_SQUARE","GRAPHER_FRAME_PADDING_VERTICAL","GRAPHER_FRAME_PADDING_HORIZONTAL","STATIC_EXPORT_DETAIL_SPACING","GRAPHER_OPACITY_MUTED","GRAPHER_AREA_OPACITY_DEFAULT","GRAPHER_AREA_OPACITY_MUTED","GRAPHER_AREA_OPACITY_HIGHLIGHTED","GRAPHER_TEXT_OUTLINE_FACTOR","BASE_FONT_SIZE","GRAPHER_FONT_SCALE_10","GRAPHER_FONT_SCALE_10_5","GRAPHER_FONT_SCALE_11","GRAPHER_FONT_SCALE_11_2","GRAPHER_FONT_SCALE_12","GRAPHER_FONT_SCALE_12_8","GRAPHER_FONT_SCALE_13","GRAPHER_FONT_SCALE_14","GRAPHER_FONT_SCALE_18","GRAPHER_MAX_TOOLTIP_WIDTH","latestGrapherConfigSchema","CookieKey","WORLD_ENTITY_NAME","isWorldEntityName","entityName","CONTINENTS_INDICATOR_ID","isContinentsVariableId","population_regex","ADDITIONAL_REGION_DATA_PROVIDERS","isPopulationVariableETLPath","Patterns","SVG_STYLE_PROPS","GrapherModal","CHART_TYPES_THAT_SHOW_ALL_ENTITIES","defaultNoopBatch","observerBatching","printDebugValue","REGISTRY_FINALIZE_AFTER","REGISTRY_SWEEP_INTERVAL","TimerBasedFinalizationRegistry","finalize","maxAge","registration","UniversalFinalizationRegistry","observerFinalizationRegistry","__read","ar","observerComponentNameFor","baseComponentName","ObjectToBeRetainedByReact","objectToBeRetainedByReactFactory","useObserver","objectRetainedByReact","admRef","rendering","hasSymbol","ReactForwardRefSymbol","ReactMemoSymbol","memo","baseComponent","useForwardRef","observerComponent","copyStaticProperties","hoistBlackList","batch","symbolId","createSymbol","createdSymbols","newSymbol","setHiddenProp","mobxMixins","mobxPatchedDefinition","getMixins","methodMixins","wrapper","realMethod","retVal","mx","wrapFunction","mixinMethod","oldDefinition","originalMethod","newDefinition","createDefinition","enumerable","wrappedFunc","mobxAdminProperty","mobxObserverProperty","mobxIsUnmounted","skipRenderKey","isForcingUpdateKey","makeClassComponentObserver","componentClass","displayName","getDisplayName","observerSCU","makeObservableProp","originalRender","_displayName","createReactiveRender","_displayName2","comp","initialName","boundOriginalRender","isRenderingPending","createReaction","hasError","reactiveRender","_reactiveRender$mobxA","_allowStateChanges","valueHolderKey","atomHolderKey","prevReadState","_allowStateReadsStart","_allowStateReadsEnd","observer$1","_deselectEntities_dec","_selectEntities_dec","_deselectEntity_dec","_selectEntity_dec","_toggleSelection_dec","_clearSelection_dec","_addToSelection_dec","_setSelectedEntities_dec","_selectedSet_dec","_numSelectedEntities_dec","_isEmpty_dec","_hasSelection_dec","_selectedEntityNames_dec","SelectionArray","selectedEntityNames","entityNames","NaNButShouldBeNumber","DroppedForTesting","InvalidOnALogScale","UndefinedButShouldBeNumber","NullButShouldBeNumber","BlankButShouldBeNumber","UndefinedButShouldBeString","NullButShouldBeString","NotAParseableNumberButShouldBeNumber","DivideByZeroError","NoValueWithinTolerance","NoMatchingValueAfterJoin","ValueTooLow","NoValueToCompareAgainst","NoValueForInterpolation","InvalidQuarterValue","InvalidNegativeValue","MissingValuePlaceholder","ErrorValueTypes","isNotErrorValue","isNotErrorValueOrEmptyCell","defaultIfErrorValue","timeColumnSlugFromColumnDef","makeOriginalTimeSlugFromColumnSlug","makeOriginalStartTimeSlugFromColumnSlug","makeOriginalValueSlugFromColumnSlug","makeAnnotationsSlug","getOriginalTimeColumnSlug","originalTimeSlug","getOriginalStartTimeColumnSlug","originalStartTimeSlug","getOriginalValueColumnSlug","originalValueSlug","toPercentageColumnDef","columnDef","_valueByEntityNameAndOriginalTime_dec","_valueByTimeAndEntityName_dec","_valuesByTime_dec","_owidRowByEntityNameAndTime_dec","_owidRowsByEntityName_dec","_owidRows_dec","_allEntityNames_dec","_uniqEntityNames_dec","_minTime_dec","_maxTime_dec","_uniqTimesAsc_dec","_allTimes_dec","_valuesAscending_dec","_numUniqs_dec","_numValues_dec","_numErrorValues_dec","_maxValue_dec","_minValue_dec","_originalValues_dec","_originalValueColumnSlug_dec","_originalTimes_dec","_originalStartTimeColumn_dec","_originalStartTimeColumnSlug_dec","_originalTimeColumn_dec","_originalTimeColumnSlug_dec","_values_dec","_validRowIndices_dec","_valuesIncludingErrorValues_dec","_uniqValuesAsSet_dec","_uniqValues_dec","_isProjection_dec","_valuesToIndices_dec","_sortedUniqNonEmptyStringVals_dec","_datasetName_dec","_datasetId_dec","_titlePublicOrDisplayName_dec","_nonEmptyDisplayName_dec","_displayName_dec","_nonEmptyName_dec","_name_dec","_description_dec","_displayUnit_dec","_shortUnit_dec","_unit_dec","_numSignificantFigures_dec","_numDecimalPlaces_dec","_roundsToSignificantFigures_dec","_roundsToFixedDecimals_dec","_roundingMode_dec","_display_dec","_toleranceStrategy_dec","_tolerance_dec","_isAllIntegers_dec","_unitConversionFactor_dec","_hasNumberFormatting_dec","_isTimeColumn_dec","_isMissing_dec","_allowedValuesSorted_dec","_c","_d","_e","AbstractCoreColumn","MissingColumn","TimeColumn","AbstractColumnWithNumberFormatting","shortUnit","displayUnit","indexColumnSlug","indexVal","queries","_.union","indices","originalTimeColumnSlug","originalValueColumnSlug","_.min","entities","times","originalTimes","originalValues","valueByEntityNameAndTime","valueByTimeAndEntityName","StringColumn","SeriesAnnotationColumn","CategoricalColumn","OrdinalColumn","RegionColumn","ContinentColumn","ColorColumn","BooleanColumn","NumberOrStringColumn","valAsString","AbstractNumericColumn","NumericColumn","NumericCategoricalColumn","IntegerColumn","CurrencyColumn","PercentageColumn","RelativePercentageColumn","PercentChangeOverTimeColumn","DecimalPercentageColumn","RatioColumn","EntityIdColumn","EntityCodeColumn","EntityNameColumn","_.capitalize","YearColumn","DayColumn","dateToTimeCache","DateColumn","QuarterColumn","quarter","PopulationColumn","PopulationDensityColumn","AgeColumn","ColumnTypeMap","U","C","R","columnStoreToRows","columnStore","firstCol","slugs","newRow","numberOnly","makeAutoTypeFn","numericSlugs","slugToType","standardizeSlugs","colsToRename","guessColumnDefFromSlugAndRow","sampleValue","valueType","makeRowFromColumnStore","rowIndex","linearInterpolation","valuesSortedByTimeAsc","validIndices","startIndexInValidIndices","distBetweenStartAndEnd","currentValidIndexPointer","prevNonBlankIndex","nextNonBlankIndex","timeOfCurrent","timeOfPrevIndex","timeOfNextIndex","distLeft","distRight","toleranceInterpolation","onlyValidIndex","timeOfOnlyValid","timeDiff","prevTimeDiff","nextTimeDiff","makeKeyFn","columnSlugs","cols","col0","col1","col2","getColumnStoreLength","concatColumnStores","stores","slugsToKeep","lengths","newColumnStore","newColumnValues","toFill","rowsToColumnStore","columnsObject","guessColumnDefsFromRows","definedSlugs","firstRowWithValue","firstValue","autodetectColumnDefs","rowsOrColumnStore","replaceDef","newDefs","newDef","renameColumnStore","columnRenameMap","newStore","getDropIndexes","arrayLength","replaceRandomCellsInColumnStore","replacementGenerator","indexesToDrop","rowsFromMatrix","matrix","trimMatrix","trimEmptyColumns","trimArray","trimEmptyRows","parseDelimited","parseFn","papaParseToD3","dsvParsed","Papa.parse","detectDelimiter","rawRow","isRowEmpty","isCellEmpty","trimAt","applyNewSortOrder","newOrder","newArr","sortColumnStore","sortFn","makeSortByFn","isSorted","colValues","colIndex","av","bv","emptyColumnsInFirstRowInDelimited","emptySlugs","TransformParamType","insertMissingValuePlaceholders","endTime","filledRange","timeToValueIndex","computeRollingAverage","windowSize","valueIndex","expand","expandLeft","expandRight","windowIndex","timeSinceEntityExceededThreshold","timeSlug","entitySlug","thresholdAsString","groupValues","columnValues","timeValues","currentGroup","groupExceededThresholdAtTime","rollingAverage","currentEntity","currentValues","currentTimes","averages","divideBy","numeratorSlug","denominatorSlug","numeratorValues","denominator","multiplyBy","subtract","columnSlugA","columnSlugB","percentChange","_timeSlug","previousEntity","previousValue","asPercentageOf","duplicate","availableTransforms","availableTransformNames","isTransformName","word","words","transformName","paramDefs","R.zip","paramDef","applyTransforms","paramValues","_numColsToParse_dec","_explainColumns_dec","_inputAsTable_dec","_inputColumnStoreToRows_dec","_inputType_dec","_columnsAsArray_dec","_numericColumnSlugs_dec","_columnSlugs_dec","_columnJsTypes_dec","_columnTypes_dec","_columnNames_dec","_defs_dec","_colStoreIsEqualToParent_dec","_numValidCells_dec","_numColumnsWithErrorValues_dec","_columnsWithParseErrors_dec","_timeColumn_dec","_numColumns_dec","_numRows_dec","_lastRow_dec","_firstRow_dec","_indices_dec","_rows_dec","_delimitedAsColumnStore_dec","_columnStore_dec","_canReuseInputColumnStore_dec","_inputColumnStore_dec","_transformCategory_dec","_CoreTable","inputColumnDefs","advancedOptions","tableDescription","columnDefinitionsFromInput","sourceSlug","providedSlugs","originalInput","valuesFromColumnDefs","storeHasAllColumns","columnsFromTransforms","inputColumnStore","inputColumnsToParsedColumnStore","valuesThatMayBeMobxProxy","_numericColumnSlugs","renamedRows","colsToParse","missingCols","unparsedVals","columnsAsArray","columnsToMaybeParse","firstInputRow","missingTypes","alreadyTypedSlugs","ColumnType","transformCategory","filterMask","numRows","firstColValues","columnTypeName","maybeTimeColumn","valueColumnSlug","indexCol","valueCol","indexValues","valueValues","valueIndices","searchStringOrRegex","opName","FilterMask","mins","maxes","rowLimit","tb","jsType","numErrorValues","numColumns","betweenTime","timeToLoad","numColsToParse","numValidCells","numColumnsWithErrorValues","colStoreIsEqualToParent","queryDescription","opDescription","columnsToDrop","oldSlug","newSlug","oldSlugs","newSlugs","replaceFn","combineFn","overrides","tables","uniqDefs","slug1","slug2","cartesianProductSize","existingRowValues","val1","val2","rowsToAddCol1","rowsToAddCol2","col2UniqValuesCount","existingVals2","appendColumnStore","appendTable","CoreTable","keepThese","keepIndexes","originalColumn","newColumn","_columnDisplayNameToColorMap_dec","_entityNameToCodeMap_dec","_entityNameColorIndex_dec","_sortedByTime_dec","_rowIndicesByEntityName_dec","_entityIdSlug_dec","_entityIdColumn_dec","_entityCodeSlug_dec","_entityCodeColumn_dec","_entityNameSlug_dec","_entityNameColumn_dec","_availableEntityNameSet_dec","_availableEntityNames_dec","OwidTable","namesSet","included","excludedSet","includedSet","excludeFilter","includeFilter","excludedList","includedList","adjustedStart","adjustedEnd","timeColumnSlug","timeColumn","targetTimesSet","entityNameToIndices","matchingIndices","allTimesAsc","indexesByEntityName","entityNamesToKeep","indicesForEntityName","entityNamesToDrop","droppedEntitiesStr","rowEntityName","uniqTimes","entityNamesToIterateOver","entityCount","makeOpName","timeTotals","timeTotal","columnStorePatch","totals","__","startTimeBound","newRows","rowsForSingleEntity","valueSlug","comparisonValue","indexMap","_.maxBy","nonZeroValueIndices","minIndex","maxIndex","startRow","endRow","startTimeSlug","excludeColumns","useShortNames","makeShortName","getLabelForColumn","formatDataColumnName","dataSlug","dataColumn","formatTimeColumnName","dayOrYear","timeString","formatColumnName","withAllRows","interpolation","groupBoundaries","newValues","newTimes","toleranceStrategyOverride","toleranceOverride","toleranceStrategy","timeColumnOfTable","maybeTimeColumnOfValue","timeColumnOfValue","interpolateInBothDirections","interpolateBackwards","interpolateForwards","interpolationResult","extrapolate","maybeTimeColumnSlug","originalColumnSlug","originalColumnDef","columnA","columnB","toleranceA","toleranceB","valuesA","valuesB","newValuesA","newValuesB","newTimesA","newTimesB","availableTimesA","availableTimesB","timePairs","timeAtoTimeB","pairedTimesInA","candidateTimeA","candidateTimeB","candidateIndexA","candidateIndexB","originalTimeColumnASlug","originalTimeColumnBSlug","BLANK_TABLE_MESSAGE","BlankOwidTable","tableSlug","extraTableDescription","InteractionState","isInteractedWith","isInteractionModeActive","activeValue","autoDetectYColumnSlugs","getDefaultFailMessage","makeSelectionArray","getSeriesKey","series","autoDetectSeriesStrategy","handleProjections","columnThreshold","yColumns","makeClipPath","isElementInteractive","interactiveTags","interactiveClassNames","getShortNameForEntity","isTargetOutsideElement","getHoverStateForSeries","hoveredSeriesNames","isHoverModeActive","byHoverThenFocusState","makeAxisLabel","_fullMatch","untrimmedMainLabelText","labelTextInParens","mainLabelText","combineHistoricalAndProjectionColumns","historicalSlug","projectedSlug","combinedSlug","slugForIsProjectionColumn","transformFn","historical","projected","historicalTimeDiff","projectionTimeDiff","NoDataPattern","patternId","patternTransforms","getChartSvgProps","backgroundColor","_onDocumentKeyDown_dec","_onDocumentClick_dec","_FullScreen_decorators","FullScreen","React.createRef","TooltipFooterIcon","TooltipContext","React.createContext","NO_DATA_COLOR","TooltipValue","originalTime","labelVariant","isRoundedToSignificantFigures","showSignificanceSuperscript","displayColor","superscript","SignificanceIcon","Variable","TooltipValueRange","firstTerm","lastTerm","columnName","formattedUnit","displayOriginalTimes","classnames","TooltipTable","React.useContext","focal","swatched","tooEmpty","tooTrivial","showTotals","showTotalsAtTop","totalsCells","focused","blurred","striped","swatch","swatchColor","swatchOpacity","_m","seriesName","seriesParenthetical","missing","asSuperscript","makeTooltipToleranceNotice","plural","makeTooltipRoundingNotice","uniqueNumSigFigs","formattedNumSigFigs","toTooltipTableColumns","formatTooltipRangeValues","formatTooltipValueShort","formatTooltipValue","formatTooltipValueShortWithAbbreviations","TOOLTIP_FADE_DURATION","PlainTooltipState","newTarget","speed","TooltipState","_tooltip_dec","_TooltipContainer_decorators","_removeToolTipFromContainer_dec","_connectTooltipToContainer_dec","_Tooltip_decorators","TooltipCard","tooltipWidth","tooltipHeight","containerBounds","isPinnedToBottom","adjustedOffsetY","adjustedOffsetX","R.clamp","titleAnnotation","subtitle","subtitleFormat","dissolve","hasHeader","timeNotice","plain","TooltipIcon","TooltipContainer","Modal","contentStyle","__webpack_modules__","__unused_webpack_module","STARTS_WITH_VOWEL","article","__unused_webpack_exports","__webpack_require__","_require","irregulars","indefinite","rule","handleOptions","ending","startsWithVowel","ACRONYM","IRREGULAR_ACRONYM","isIrregularAcronym","bothOrNeither","caseInsensitive","isIrregular","initialVowel","NUMBERS","EIGHT_ELEVEN_EIGHTEEN","ELEVEN_EIGHTEEN","startsWith11Or18","EXTRAS","getFirst","xor","checkForIrregulars","__webpack_module_cache__","moduleId","cachedModule","__webpack_exports__","fm","fx","product","scalar","translateX","translateY","V","H","J","Z","tt","t.parse","t.translateX","t.translateY","t.scaleX","t.scaleY","t.multiply","SortIcon","isActiveIcon","faIcon","isOptionGroup","flattenOptions","Dropdown","menuClassName","isClearable","isSearchable","renderTriggerValue","renderMenuOption","useFilter","flatOptions","useMemo","selectedValue","handleSelectionChange","listBox","ListBox","ListBoxSection","Header","ListBoxItem","Select","SelectValue","Popover","Autocomplete","SearchField","Input","_active_dec","_onAnimationEnd_dec","_toggleVisibility_dec","_onDocumentPointerDown_dec","_SlideInDrawer_decorators","DrawerContext","SlideInDrawer","grapherElement","_countryNamesForSelectedRegions_dec","_countryNamesForSelectedRegionsSet_dec","_hasRegions_dec","_selectedRegionNames_dec","_selectedRegions_dec","_selectedCountryNamesInBackground_dec","_selectedCountryNamesInForeground_dec","_hasCountries_dec","_selectedCountryNames_dec","_selectedCountries_dec","_selectedEntitiesWithRegionInfo_dec","MapSelectionArray","memberCountries","R.difference","MAP_HOVER_TARGET_RANGE","DEFAULT_STROKE_COLOR","HOVER_STROKE_COLOR","DEFAULT_STROKE_WIDTH","HOVER_STROKE_WIDTH","SELECTED_STROKE_WIDTH","PATTERN_STROKE_WIDTH","BLUR_FILL_OPACITY","BLUR_STROKE_OPACITY","PROJECTED_DATA_LEGEND_COLOR","MAP_CHART_CLASSNAME","CHOROPLETH_MAP_CLASSNAME","GEO_FEATURES_CLASSNAME","DEFAULT_GLOBE_ZOOM","GLOBE_MIN_ZOOM","GLOBE_MAX_ZOOM","GLOBE_COUNTRY_ZOOM","GLOBE_LATITUDE_MIN","GLOBE_LATITUDE_MAX","DEFAULT_GLOBE_SIZE","DEFAULT_GLOBE_ROTATION","DEFAULT_GLOBE_ROTATIONS_FOR_TIME","ANNOTATION_COLOR_DARK","ANNOTATION_COLOR_LIGHT","ANNOTATION_FONT_SIZE_INTERNAL_DEFAULT","ANNOTATION_FONT_SIZE_INTERNAL_MIN","ANNOTATION_FONT_SIZE_EXTERNAL_DEFAULT","ANNOTATION_FONT_SIZE_EXTERNAL_MAX","ANNOTATION_MARKER_LINE_LENGTH_DEFAULT","ANNOTATION_MARKER_LINE_LENGTH_MAX","MAP_REGION_LABELS","MAP_REGION_NAMES","R.invert","RenderFeatureType","GLOBE_VIEWPORTS","MAP_VIEWPORTS","MAP_VIEWPORT_FACETED_WORLD","MapConfigDefaults","MapConfig","R.reverse","R.round","regionDataProviders","additionalRegionDataProviders","allRegionDataProviders","allRegionDataProviderSet","regionGroupKeys","regionGroupLabels","toProviderKey","providerSuffix","isAnyRegionDataProviderKey","groupEntitiesByRegionType","availableEntityNames","availableRegions","regionsGroupedByType","entitiesByRegionGroup","historicalCountries","nonHistoricalCountries","R.partition","incomeGroups","entitiesByProvider","parsedEntityName","parseLabel","providerKey","isEntityRegionGroupKey","trackNote","getCatalogAssetKey","catalogPaths","columnDefsByCatalogKey","_loadCatalogData","assetKey","catalogPath","loadCatalogData","catalogDataToOwidTable","loadCatalogDataAsOwidTable","loadCatalogDataFn","_barScale_dec","_selectedSortColumnMaxValue_dec","_selectedSortColumn_dec","_shouldShowFilterBar_dec","_filterValue_dec","_onChangeEntityFilter_dec","_filterOptions_dec","_close_dec","_onChangeSortOrder_dec","_onChangeSortSlug_dec","_loadAndSetExternalSortColumn_dec","_onClear_dec","_onChange_dec","_onDeselectEntities_dec","_onSearchKeyDown_dec","_onTitleClick_dec","_selectedEntities_dec","_searchResults_dec","_fuzzy_dec","_isMultiMode_dec","_filteredAvailableEntities_dec","_availableEntities_dec","_allEntitiesSelected_dec","_selectionArray_dec","_entityType_dec","_isSortedByName_dec","_sortValue_dec","_sortOptions_dec","_projectionColumnInfoByCombinedSlug_dec","_externalSortIndicatorDefinitions_dec","_externalSortColumnsByCatalogKey_dec","_numericalChartColumns_dec","_supportsSortingByExternalIndicators_dec","_entitiesAreCountriesOrRegions_dec","_someEntitiesAreRegions_dec","_inputTable_dec","_isLoadingExternalSortColumn_dec","_interpolatedSortColumns_dec","_isProjectionBySlugAndTimeAndEntityName_dec","_interpolatedSortColumnsBySlug_dec","_localEntityNames_dec","_entityFilter_dec","_sortConfig_dec","_searchInput_dec","_searchPlaceholderEntityType_dec","_title_dec","_mapConfig_dec","_endTime_dec","_manager_dec","_chartHasDailyData_dec","_toleranceOverride_dec","_isTimeScatter_dec","_populateLocalEntities_dec","_set_dec","_EntitySelector_decorators","EXTERNAL_SORT_INDICATOR_DEFINITIONS","regionNamesSet","EntitySelector","correctedState","correctedSortConfig","shouldBeSortedByName","chartIndicatorSortOptions","mapColumnSlug","sortSlug","localCountryInfo","countryRegionsWithoutIncomeGroups","userEntityCodes","userRegions","localEntityNames","valuesByTimeAndEntityName","isProjectionBySlugAndTimeAndEntityName","projectionInfo","combinedColumn","isProjectionValues","external","compatibleTime","entityFilter","inputColumnSlugs","isOnMapTab","matchingColumns","matchingColumn","isExternalSortIndicatorMatch","matchingKeys","projectionColumnInfoByCombinedSlug","isProjectionByTimeAndEntityName","projectedLabel","getTitleForSortColumnLabel","historicalLabel","hasHistoricalDataForTime","arbitrarySlug","chartColumn","matchingSlugs","slugsToExclude","formattedTime","langs","searchableEntity","availableEntities","entityNameSet","filteredAvailableEntities","sortConfig","byName","byValue","_.orderBy","worldEntity","_.partition","locals","others","sortedLocals","sortedOthers","withValues","withoutValues","sortedWithValues","localWith","otherWith","sortedLocalWith","sortedOtherWith","sortedWithoutValues","searchResults","dropEntityNames","catalogKey","additionalDataLoaderFn","sortByTarget","regionGroups","regionGroupKey","renderFilterTriggerValue","renderFilterMenuOption","renderSortTriggerValue","renderSortMenuOption","SelectableEntity","shouldShowFilterBar","selectedSortColumn","scaleLinear","barScale","formattedValue","selectedEntities","numSelectedEntities","hasFewEntities","shouldHideAvailableEntities","availableEntitiesTitle","Flipper","Flipped","entityIndex","FlippedListItem","bar","isLocal","isMuted","locationIcon","flipId","_onDismiss_dec","_modalBounds_dec","_frameBounds_dec","_EntitySelectorModal_decorators","EntitySelectorModal","padWidth","Tabs","AriaTabs","TabList","Tab","DownloadIconFullDataset","DownloadIconSelected","_onTabChange_dec","_isDataTabActive_dec","_isVisTabActive_dec","_activeTab_dec","_DownloadModal_decorators","_onCopyPng_dec","_showCopyPngButton_dec","_openEmbedDialog_dec","_showInteractiveEmbedTip_dec","_showExportControls_dec","_hasDetails_dec","_toggleIncludeDetails_dec","_toggleExportForUseOnWikimedia_dec","_toggleExportFormat_dec","_onSvgDownload_dec","_onPngDownload_dec","_baseFilename_dec","_fallbackPngUrl_dec","_reset_dec","_markAsReady_dec","_export_dec","_targetHeight_dec","_targetWidth_dec","_targetBounds_dec","_isWikimediaExport_dec","_isExportingSquare_dec","_captionedChartBounds_dec","_staticBounds_dec","_DownloadModalVisTab_decorators","DownloadModalTabName","DownloadModal","DownloadModalVisTab","DownloadModalDataTab","svgUrl","svgBlob","svgPreviewUrl","captionedChartBounds","targetHeight","showInteractiveEmbedTip","pngPreviewUrl","isRegenerating","previewWidth","previewHeight","boundScalar","imageStyle","Callout","DownloadButton","createCsvBlobLocally","csv","getDownloadSearchParams","SEARCH_PARAMS_TO_EXCLUDE","getDownloadUrl","searchStr","getNonRedistributableInfo","nonRedistributableCols","sourceLinks","CodeExamplesBlock","snippet","SourceAndCitationSection","otherSources","originsUniq","fullProcessingPhrase","ApiAndCodeExamplesSection","onlyVisible","setOnlyVisible","shortColNames","setShortColNames","exLongName","exShortName","shortNamesAvailable","downloadCtx","csvUrl","metadataUrl","serverSideDownloadAvailable","externalSearchParams","onDownloadClick","useCallback","csvDownloadType","fullOrFiltered","downloadHelpText","firstYColDef","activeView","fullDataDescription","filteredDataDescription","fullTableRowCountSnippet","makeNumberOfRowsSnippet","filteredTableRowCountSnippet","isDownloading","setIsDownloading","showLoadingUI","setShowLoadingUI","handleClick","loadingTimeout","SourcesKeyDataTable","links","keyDataWithoutSource","R.chunk","SourcesDescriptions","TabsWithDropdown","numVisibleTabs","setIsOpen","visibleItems","R.take","hiddenItems","selectedHiddenItem","lastVisibleItem","R.pipe","R.dropLast","R.concat","handleSelect","MenuTrigger","Menu","MenuItem","_tabLabelWidths_dec","_tabLabels_dec","_tabs_dec","_columns_dec","_editBaseUrl_dec","_modalPadding_dec","_showStickyHeader_dec","_setActiveTabKey_dec","_componentDidMount_dec","_SourcesModal_decorators","_descriptionBelowTitle_dec","_hideSourcesForDisplay_dec","_sourcesSectionHeading_dec","_sourcesForDisplay_dec","_showDescriptions_dec","_datapageHasFAQSection_dec","_nextUpdate_dec","_lastUpdated_dec","_attributions_dec","_producers_dec","_editUrl_dec","_source_dec","_citationLong_dec","_citationShort_dec","_def_dec","_Source_decorators","MAX_CONTENT_WIDTH","TAB_PADDING","TAB_FONT_SIZE","TAB_GAP","TAB_TITLE_SPACING","SourcesModal","measureTabWidth","Source","visibleLabels","moreButtonWidth","currentWidth","labelWidth","activeColumn","faqCount","getWidth","secondaryTextWidth","_CommandPalette_decorators","CommandPaletteClassName","CommandPalette","lastCat","commands","command","sortedCommands","cat","_embedOptions_dec","_EmbedModal_decorators","EmbedModal","embedUrl","embedArchivedUrl","areEmbedAndArchivedOriginsSame","embedOptions","undefined","_MAP","_KEYCODE_MAP","_SHIFT_MAP","_SPECIAL_ALIASES","_REVERSE_MAP","_addEvent","_characterFromEvent","_modifiersMatch","modifiers1","modifiers2","_eventModifiers","_preventDefault","_stopPropagation","_isModifier","_getReverseMap","_pickBestAction","_keysFromString","combination","_getKeyInfo","_belongsTo","Mousetrap","_sequenceLevels","_resetTimer","_ignoreNextKeyup","_ignoreNextKeypress","_nextExpectedAction","_resetSequences","doNotReset","activeSequences","_getMatches","sequenceName","deleteCombo","deleteSequence","_fireCallback","combo","maxLevel","processedSequenceCallback","ignoreThisKeypress","_handleKeyEvent","_resetSequenceTimer","_bindSequence","_increaseSequence","nextAction","_callbackAndReset","isFinal","wrappedCallback","_bindSingle","combinations","initialEventTarget","documentMousetrap","legacyToOwidTableAndDimensionsWithMandatorySlug","selectedEntityColors","dimensionsWithSlug","legacyToOwidTableAndDimensions","entityMeta","entityMetaById","baseColumnDefs","dimensionColumns","variableTablesToJoinByYear","variableTablesToJoinByDay","variableTablesWithYearToJoinByEntityOnly","columnDefs","timeColumnDef","timeColumnDefFromOwidVariable","valueColumnDef","columnDefFromOwidVariable","valueColumnColor","annotationMap","annotationColumnDef","annotationMapAndDefFromOwidVariable","timeColumnValuesFromOwidVariable","entityIds","entityCodes","conversionFactor","_.isInteger","variableTable","variablesJoinedByDay","fullJoinTables","joinedVariablesTable","daysColumn","getYearFromISOStringMemoized","dayValue","yearsForDaysValues","newYearColumn","variablesJoinedByDayWithYearFilled","dayOrYearSlug","entityColorColumnSlug","valueFn","indexColumnNames","mergeFallbackLookupColumns","indexValuesPerTable","mergeFallbackLookupValuesPerTable","fallbackColumns","sharedColumnNames","allIndexValuesArray","allIndexValues","columnsToAddPerTable","defsToAddPerTable","tableAndColumns","tableIndex","indexHits","fallbackMergeIndices","columnSet","fallbackIndex","variableTypeToColumnType","getSortFromDimensions","coverage","datasetId","datasetName","descriptionShort","descriptionProcessing","descriptionKey","descriptionFromProducer","timespan","nonRedistributable","presentation","updatePeriodDays","isContinent","parsedType","variableData","yearsNeedTransform","yearsRaw","convertLegacyYears","zeroDay","annotationsSlug","annotationsToMap","entityAnnotationsMap","SidePanel","OWID_LOGO_SVG","SMALL_OWID_LOGO_SVG","CORE_LOGO_SVG","GV_LOGO_SVG","logos","smallOwidLogo","Logo","targetX","targetY","spec","_subtitle_dec","_subtitleLineHeight_dec","_subtitleFontSize_dec","_subtitleWidth_dec","_subtitleMarginTop_dec","_useFullWidthForSubtitle_dec","_titleLineHeight_dec","_titleFontWeight_dec","_logoHeight_dec","_logoWidth_dec","_logo_dec","_subtitleText_dec","_titleText_dec","_showSubtitle_dec","_showTitle_dec","_baseFontSize_dec","_useBaseFontSize_dec","_Header_decorators","AbstractHeader","isOwidLogo","logoPadding","makeTitle","initialFontSize","originalLineCount","potentialFontSizes","currentLineCount","subtitleWidth","isSmall","showTitle","showSubtitle","subtitleMarginTop","logoHeight","Header$1","_StaticHeader_decorators","StaticHeader","logo","_canUseShareApi_dec","_onCopyUrl_dec","_onNavigatorShare_dec","_onEmbed_dec","_onClickSomewhere_dec","_dismiss_dec","_canonicalUrl_dec","_showShareMenu_dec","_ShareMenu_decorators","getShareData","canUseShareApi","shareData","shouldShareUsingShareApi","shareUsingShareApi","_ShareMenu","canonicalUrl","rasterizePromise","showCopyPngButton","editUrl","createNarrativeChartUrl","ShareMenu","_buttonCount_dec","_hasExploreTheDataButton_dec","_hasFullScreenButton_dec","_hasShareButton_dec","_hasDonateButton_dec","_hasDownloadButton_dec","_openDownloadModal_dec","_toggleFullScreenMode_dec","_toggleShareMenu_dec","_exploreTheDataButtonWidth_dec","_donateButtonWidth_dec","_fullScreenButtonWidth_dec","_shareButtonWidth_dec","_downloadButtonWidth_dec","_exploreTheDataButtonWithLabelWidth_dec","_donateButtonWithLabelWidth_dec","_fullScreenButtonWithLabelWidth_dec","_fullScreenButtonLabel_dec","_shareButtonWithLabelWidth_dec","_downloadButtonWithLabelWidth_dec","_showButtonLabels_dec","_widthWithIconsOnly_dec","_widthWithButtonLabels_dec","_ActionButtons_decorators","BUTTON_HEIGHT","PADDING_BETWEEN_BUTTONS","PADDING_BETWEEN_ICON_AND_LABEL","PADDING_X","BUTTON_WIDTH_ICON_ONLY","_ActionButtons","buttonCount","hasDownloadButton","hasDonateButton","hasShareButton","hasFullScreenButton","hasExploreTheDataButton","downloadButtonWithLabelWidth","donateButtonWithLabelWidth","shareButtonWithLabelWidth","fullScreenButtonWithLabelWidth","exploreTheDataButtonWithLabelWidth","exploreTheDataButtonWidth","remainingButtonCount","widthWithButtonLabels","showButtonLabels","widthWithIconsOnly","isInFullScreenMode","isShareMenuActive","ActionButton","ActionButtons","buttonClassnames","iconPlacement","buttonContents","_bottomContentHeight_dec","_topContentHeight_dec","_onMouseMove_dec","_actionButtons_dec","_actionButtonsMaxWidth_dec","_licenseAndOriginUrl_dec","_note_dec","_sources_dec","_showLicenseNextToSources_dec","_licenseAndOriginUrlMaxWidth_dec","_noteMaxWidth_dec","_sourcesMaxWidth_dec","_useFullWidthNote_dec","_useFullWidthSources_dec","_actionButtonsWidthWithIconsOnly_dec","_showNote_dec","_sourcesFontSize_dec","_licenseAndOriginUrlText_dec","_finalUrlText_dec","_correctedUrlText_dec","_finalUrl_dec","_originUrlWithProtocol_dec","_licenseUrl_dec","_licenseText_dec","_markdownNoteText_dec","_noteText_dec","_sourcesText_dec","_sourcesLine_dec","_hideOriginUrl_dec","_Footer_decorators","_textColor_dec","_StaticFooter_decorators","HORIZONTAL_PADDING","_AbstractFooter","originUrl","urlText","licenseText","correctedUrlText","actionButtons","licenseAndOriginUrlText","finalUrlText","showNote","sourcesFontSize","sourcesText","actionButtonsWidthWithIconsOnly","noteText","useFullWidthSources","licenseAndOriginUrl","note","useFullWidthNote","sourcesWidth","noteWidth","leftTextWidth","topTextWidth","licenseAndOriginUrlWidth","grapher","mouse","datapageSectionId","sourcesElement","renderSources","renderNote","renderLicense","renderPadding","tooltipTarget","AbstractFooter","Footer","StaticFooter","finalUrl","licenseUrl","textColor","linkStyle","targetAttr","licenseSvg","showLicenseNextToSources","_updateEndTime_dec","_updateStartTime_dec","_togglePlay_dec","_pause_dec","_stop_dec","_play_dec","_resetToBeginning_dec","_shouldUseEqualSpacing_dec","_msPerTick_dec","MIN_MS_PER_TICK","MAX_MS_PER_TICK","TARGET_ANIMATION_DURATION_MS","TimelineDragTarget","TimelineController","numTimePoints","R.takeFirstBy","R.identity","R.sum","progress","avoidTime","nextTime","prevTime","beginning","numberOfTicks","tickCount","fraction","currentIndex","targetIndex","clampedIndex","inputTime","closestTime","clickIndex","indexSpan","endTimeBound","constrainedHandle","_hoverTooltip_dec","_endHandleTooltip_dec","_startHandleTooltip_dec","_updateEndTimeOnKeyDown_dec","_updateStartTimeOnKeyDown_dec","_getEndTimeForNavigationKey_dec","_getStartTimeForNavigationKey_dec","_onChangeDate_dec","_onCompleteDate_dec","_onChangeYear_dec","_onCompleteYear_dec","_onMaxTimeButtonClick_dec","_onMinTimeButtonClick_dec","_onEdgeButtonMouseEnter_dec","_onTooltipMouseLeave_dec","_onTooltipMouseEnter_dec","_resetEditState_dec","_onStartEditing_dec","_onSliderTouchStart_dec","_onPlayTouchEnd_dec","_hideTooltipsAfterInteraction_dec","_onMouseLeaveSlider_dec","_onMouseMoveSlider_dec","_onMouseOverSlider_dec","_hoverTimeProgress_dec","_shouldShowHoverTimeHandle_dec","_areBothHandlesVisible_dec","_onMouseUp_dec","_onMouseDown_dec","_showTooltips_dec","_showEndTooltip_dec","_showStartTooltip_dec","_onDrag_dec","_isDailyData_dec","_canEditTimeViaTooltip_dec","_isTouchDevice_dec","_controller_dec","_isDragging_dec","_dragTarget_dec","_TimelineComponent_decorators","TIMELINE_HEIGHT","HANDLE_DIAMETER","HANDLE_TOOLTIP_FADE_TIME_MS_MOBILE","SLIDER_CLASS","PLAY_BUTTON_CLASS","NAVIGATION_KEYS","TimelineComponent","_.debounce","isStartMarker","isEndMarker","startHandleTimeBound","endHandleTimeBound","targetEl","dragTarget","mouseX","startX","evt","isPlaying","wasPlaying","calendarDateToDaysSinceEpoch","controller","shouldMoveBothHandles","formattedStartTime","SimpleTimeTooltip","isEditing","isDateValid","allowHandlesOnSameTime","EditableDateTooltip","EditableYearTooltip","formattedEndTime","hoverTime","formattedHoverTime","startTimeProgress","endTimeProgress","formattedMinTime","formattedMaxTime","TimelineEdgeButton","TimelineHandle","isRelevantNavigationKey","TimelineInterval","onMouseEnter","offsetPercent","formattedCurrTime","zIndex","castToNumberIfPossible","onStartEditing","onComplete","getTimeForKey","React.useEffect","handleKeyDown","newTime","handleChange","handleBlur","TimelineDateInput","daysSinceEpochToCalendarDate","setCurrentValue","shouldApplyImmediately","setShouldApplyImmediately","DateField","DateInput","DateSegment","ariaHidden","CalendarDate","isoString","VALID_CHART_TYPE_COMBINATIONS","CHART_TYPE_LABEL","LONG_CHART_TYPE_LABEL","MAP_CHART_TAB_CONFIG_OPTION_TO_CHART_TYPE_NAME","MAP_CHART_TYPE_NAME_TO_CHART_TAB_CONFIG_OPTION","mapTabConfigOptionToChartTypeName","tabOption","mapChartTypeNameToTabConfigOption","mapGrapherTabNameToConfigOption","tabName","mapGrapherTabNameToQueryParam","makeLabelForGrapherTab","useGenericChartLabel","findPotentialChartTypeSiblings","chartTypes","validCombination","validSet","findValidChartTypeCombination","isChartTypeName","isValidTabQueryParam","isChartTab","isMapTab","getSupportedDimensionsForChartTypes","chartTypeSet","hasScatter","hasMarimekko","hasLineChart","hasDiscreteBar","_onOverflowMenuSelect_dec","_hideOverflowMenu_dec","_showOverflowMenu_dec","_setTab_dec","_tabItems_dec","_hiddenTabs_dec","_visibleTabs_dec","_shouldShow_dec","_availableTabs_dec","_hasMultipleChartTypes_dec","_ContentSwitchers_decorators","MAX_VISIBLE_TABS","MAX_VISIBLE_TABS_BEFORE_OVERFLOW","_ContentSwitchers","activeTab","availableTabs","visibleTabs","hasMultipleChartTypes","TabContent","selectedTab","oldTab","newTab","ContentSwitchers","_label_dec","_showToggle_dec","_EntitySelectionToggle_decorators","_EntitySelectionToggle","isOnChartTab","hideEntityControls","shouldShowEntitySelectorAs","canChangeAddOrHighlightEntities","shouldShowDrawer","shouldShowModal","entityType","entityTypePlural","canHighlightEntities","canChangeEntity","canAddEntities","showToggle","EntitySelectionToggle","_value_dec","_options_dec","_showMenu_dec","_MapRegionDropdown_decorators","_MapRegionDropdown","isFaceted","mapConfig","MapRegionDropdown","_setAxisScale_dec","_AxisScaleToggle_decorators","AxisScaleToggle","isLinear","_isRelativeMode_dec","_onToggle_dec","_AbsRelToggle_decorators","LineChart","ScatterPlot","SlopeChart","AbsRelToggle","activeChartType","_ZoomToggle_decorators","ZoomToggle","_facetStrategy_dec","_strategies_dec","_metricName_dec","_entityName_dec","_facetStrategyLabels_dec","_FacetStrategySelector_decorators","FacetStrategySelector","entityChoice","byEntity","byMetric","_isYDomainShared_dec","_FacetYDomainToggle_decorators","FacetYDomainToggle","yAxis","facetStrategy","_NoDataAreaToggle_decorators","NoDataAreaToggle","_menuTitle_dec","_menuContentsChart_dec","_chartTypeLabel_dec","_showSettingsMenuToggle_dec","_showFacetControl_dec","_showAbsRelToggle_dec","_showNoDataAreaToggle_dec","_showZoomToggle_dec","_showFacetYDomainToggle_dec","_showXScaleToggle_dec","_showYScaleToggle_dec","_chartType_dec","_SettingsMenu_decorators","_SettingsGroup_decorators","StackedArea","StackedDiscreteBar","StackedBar","Marimekko","_SettingsMenu","canToggleRelativeMode","hasTimeline","xOverrideTime","filledDimensions","availableFacetStrategies","hideFacetControl","showFacetControlChartType","hasProjection","showYScaleToggle","showXScaleToggle","showZoomToggle","showNoDataAreaToggle","showFacetControl","showFacetYDomainToggle","showAbsRelToggle","xAxis","yLabel","xLabel","omitLoneAxisLabel","SettingsGroup","chartTypeLabel","DialogTrigger","Dialog","Heading","showSettingsMenuToggle","SettingsMenu","_onClick_dec","_trackNote_dec","_MapResetButton_decorators","_MapResetButton","shouldShowResetViewButton","shouldShowResetZoomButton","MapResetButton","_shouldShowSelectionOption_dec","_DataTableFilterDropdown_decorators","_DataTableFilterDropdown","DataTableFilterDropdown","_placeholderEntityType_dec","_DataTableSearchField_decorators","_DataTableSearchField","DataTableSearchField","_MapZoomToSelectionButton_decorators","_MapZoomToSelectionButton","isMapSelectionEnabled","GlobeIcon","MapZoomToSelectionButton","_populateLocalCountryName_dec","_filteredOptions_dec","_flatOptions_dec","_sortedCountries_dec","_MapZoomDropdown_decorators","isGroupedOption","_MapZoomDropdown","countryOptions","continentOptions","sortLocalEntitiesToTop","local","nonLocal","focusCountry","MapZoomDropdown","_showControlsRow_dec","_ControlsRow_decorators","_ControlsRow","ControlsRow","_bounds_dec","_NoDataModal_decorators","NoDataModal","isStatic","defaultHelpText","helpText","showHelpText","helpTextFontSize","TargetTimeMode","SparklineKey","PointColumnKey","RangeColumnKey","COMMON_DATA_TABLE_FILTERS","_sortedDisplayRows_dec","_displayRows_dec","_displayDimensions_dec","_dataTableDimensionsWithValues_dec","_targetTimes_dec","_isSortable_dec","_entityCount_dec","_entityNames_dec","_columnsToShow_dec","_autoSelectedStartTime_dec","_loadedWithData_dec","_tableCaption_dec","_singleDataColumnStyle_dec","_hasDimensionHeaders_dec","_updateSort_dec","_hasSubheaders_dec","_sortValueMapper_dec","_sortState_dec","_tableState_dec","_timelineMaxTime_dec","_timelineMinTime_dec","_tableConfig_dec","_DataTable_decorators","ENTITY_SORT_INDEX","DEFAULT_SORT_STATE","columnNameByType","inverseSortOrder","DataTable","dimIndex","columnKey","availableColumns","colDef","sortIndex","dv","isSingleValue","isRangeValue","isRangeColumnKey","ColumnHeader","headerText","measureWidth","contentMaxWidth","minWidth","coreTableColumn","_.upperFirst","titleFragments","dimensionHeaderText","isDeltaColumn","hasDimensionHeaders","hasSubheaders","columnDefinition","valuesForEntity","formatTime","getValueForEntityByKey","ClosestTimeNotice","highlights","showMarker","Sparkline","ValueCell","singleDimension","autoSelectedStartTime","numEntitiesInTable","firstTimeWithSufficientData","R.countBy","_count","skips","formattingOverrides","targetTimeMode","targetValuesByEntity","valuesByEntityName","deltaColumns","tableDisplay","valueColumns","sparklineColumn","dvs","deltaValue","deltaRatioValue","sortable","sortedCol","colType","isEntityColumn","sortIcon","CellContent","activeIcon","shouldShowClosestTimeNotice","owidRows","dotSize","strokeStyle","xDomain","xScale","yDomain","yScale","strokeDasharray","dimensionValue","isCommonDataTableFilter","isValidDataTableFilter","Emphasis","resolveEmphasis","hover","LINE_CHART_CLASS_NAME","DEFAULT_LINE_COLOR","VARIABLE_COLOR_STROKE_WIDTH","DEFAULT_MARKER_RADIUS","VARIABLE_COLOR_MARKER_RADIUS","DISCONNECTED_DOTS_MARKER_RADIUS","STATIC_SMALL_MARKER_RADIUS","DEFAULT_LINE_OUTLINE_WIDTH","VARIABLE_COLOR_LINE_OUTLINE_WIDTH","DEFAULT_LINE_STYLE","LINE_STYLE","LEGEND_PADDING","NUMERIC_LEGEND_STYLE","CATEGORICAL_LEGEND_STYLE","CategoricalColorAssigner","leastUsedColor","getSeriesName","seriesStrategy","hasMultipleEntitiesSelected","allowsMultiEntitySelection","getColorKey","getAnnotationsMap","getAnnotationsForSeries","annotationsMap","anno","getYAxisConfigDefaults","toPlacedLineChartSeries","chartState","dualAxis","horizontalAxis","verticalAxis","placedPoints","toRenderLineChartSeries","placedSeries","isFocusModeActive","_clear_dec","_toggle_dec","_clearAllAndAdd_dec","_remove_dec","_add_dec","_length_dec","_hasFocusedSeries_dec","_seriesNames_dec","_seriesNameSet_dec","FocusArray","seriesNames","_errorInfo_dec","_availableFacetStrategies_dec","_series_dec","_seriesStrategy_dec","_missingDataStrategy_dec","_annotationsMap_dec","_hasColorScale_dec","_categoricalColorAssigner_dec","_colorScaleConfig_dec","_isLogScale_dec","_colorColumn_dec","_formatColumn_dec","_yColumns_dec","_colorColumnSlug_dec","_yColumnSlugs_dec","_isFocusModeActive_dec","_focusArray_dec","_transformedTable_dec","_transformedTableFromGrapher_dec","LineChartState","isRelativeMode","strategies","canSelectMultipleEntities","hasColorScale","colorColumn","colorValues","_.sortedUniqBy","colorValue","shortEntityName","seriesColor","yColumn","_yDomainDefault_dec","_xDomain_dec","_allYValues_dec","_rawSeriesByEntityName_dec","_rawSeries_dec","_startTime_dec","_yScaleType_dec","SlopeChartState","owidRowByTime","colorKey","isToleranceAppliedToStartValue","isToleranceAppliedToEndValue","defaultDomain","yRange","_valuesToColorsMap_dec","_sortedRawSeries_dec","_entitiesAsSeries_dec","_columnsAsSeries_dec","_isProjectionColumn_dec","_hasProjectedData_dec","_yColumnMode_dec","DiscreteBarChartState","projectionColumnInfoBySlug","ySlugs","projectionSlugs","projectionSlug","yColumnSlug","defaultColorScheme","autoStrategy","transformedTable","isProjectionColumn","isColumnStrategy","sortByFunc","sortedSeries","sortedRawSeries","rawSeries","_midpoints_dec","_unstackedSeries_dec","_isEntitySeries_dec","_colorMap_dec","_allStackedPoints_dec","_seriesByName_dec","POSITIVE_COLOR","NEGATIVE_COLOR","AbstractStackedChartState","owidRowsByEntityName","seriesCount","areMultipleEntitiesSelected","hasMultipleYColumns","shortUnits","hasMultipleUnits","hasPercentageUnit","pointColor","prevY","middleY","yColumnSlugs","stackSeries","seriesArr","seriesIndex","pointIndex","pointBelowThisOne","stackSeriesInBothDirections","pointsBelowThisOne","withUniformSpacing","deltas","gcd","withMissingValuesAsZeroes","enforceUniformSpacing","allXValuesSorted","pointsByPosition","resolveCollision","s2","yMax1","yMax2","yLast1","yLast2","area1","area2","getXAxisConfigDefaultsForStackedBar","placeStackedAreaPoint","placeStackedAreaSeries","leftX","rightX","makeStackedAreaPolygon","prevPlacedPoints","baselineY","prevPoints","toPlacedStackedAreaSeries","validSeries","areaPoints","toPlacedStackedBarSeries","barWidth","barHeight","_yDomain_dec","_useValueBasedColorScheme_dec","StackedAreaChartState","_xValues_dec","_unstackedSeriesWithMissingValuesAsZeroes_dec","StackedBarChartState","_sortedRows_dec","_sortColumn_dec","_sortColumnSlug_dec","StackedDiscreteBarChartState","totalValue","bars","sortedRows","SCATTER_POINT_DEFAULT_COLOR","SCATTER_POINT_MIN_RADIUS","SCATTER_POINT_MAX_RADIUS","SCATTER_POINT_OPACITY","SCATTER_POINT_STROKE_WIDTH","SCATTER_POINT_DEFAULT_RADIUS","SCATTER_LINE_MIN_WIDTH","SCATTER_LINE_MAX_WIDTH","SCATTER_LINE_DEFAULT_WIDTH","SCATTER_LABEL_MIN_FONT_SIZE_FACTOR","SCATTER_LABEL_MAX_FONT_SIZE_FACTOR","SCATTER_LABEL_DEFAULT_FONT_SIZE_FACTOR","SCATTER_LABEL_FONT_SIZE_FACTOR_WHEN_HIDDEN_LINES","SCATTER_QUADTREE_SAMPLING_DISTANCE","SCATTER_POINT_HOVER_TARGET_RANGE","isValidVerticalComparisonLineConfig","lineConfig","_labelHeight_dec","_labelTextWrap_dec","_labelFontSize_dec","_baseTicks_dec","_tickFontSize_dec","_totalTicksTarget_dec","_rangeCenter_dec","_rangeMin_dec","_rangeMax_dec","_rangeSize_dec","_d3_scale_dec","_bandWidth_dec","_scaleType_dec","_canChangeScaleType_dec","_maxTicks_dec","_minTicks_dec","_nice_dec","_labelPadding_dec","_tickPadding_dec","_hideGridlines_dec","_hideAxis_dec","_tickLabels_dec","_size_dec","_labelMaxWidth_dec","_labelOffset_dec","_orient_dec","_logNoticeHeight_dec","_logNoticeWidth_dec","_logNoticeTextWrap_dec","_shouldShowLogNotice_dec","_labelOffsetTop_dec","_comparisonLineLabelOffset_dec","_comparisonLineLabelFontSize_dec","_comparisonLines_dec","_innerBounds_dec","_verticalAxisSize_dec","_horizontalAxisSize_dec","_verticalAxis_dec","_horizontalAxis_dec","OUTER_PADDING","doIntersect","bounds2","boundsFromLabelPlacement","xAlign","yAlign","xShift","yShift","_AbstractAxis","axisManager","parentAxis","maxBandWidth","positions","diffs","bandWidth","domainValues","totalTicksTarget","firstTick","lastTick","scaleLog","niceScale","niceTicks","d3_scale","processedTicks","maxLabelledTicks","maxTicks","tickValue","minDist","placedValue","formattingOptionsOverride","tickFormattingOptions","axisLabel","logScaleNotice","secondaryText","AbstractAxis","_HorizontalAxis","labelOffset","tickPadding","maxTickHeight","tickHeight","startEndPrio","sortedTicks","tickLabels","hideOverlappingTickLabels","HorizontalAxis","_VerticalAxis","maxTickWidth","tickWidth","visibleTicks","updatedBaseTicks","zeroIndex","VerticalAxis","DualAxis","_domain_dec","_constrainedMax_dec","_constrainedMin_dec","AxisConfigDefaults","parseMinFromJSON","parseMaxFromJSON","AxisConfig","labelPriority","makeStartLabel","isSubtleForeground","hideConnectedScatterLines","baseFontSize","nextSegment","makeMidLabels","prevPos","prevSegment","nextPos","potentialSpots","makeEndLabel","lastPos","offsetVector","labelPos","labelBounds","toSizeRange","maxLineWidth","maxPointRadius","computeSizeDomain","sizeValues","_horizontalAxisLabel_dec","_horizontalAxisLabelBase_dec","_verticalAxisLabel_dec","_validValuesForAxisDomainY_dec","_validValuesForAxisDomainX_dec","_domainsForAnimation_dec","_sizeDomain_dec","_xDomainDefault_dec","_pointsForAxisDomains_dec","_selectedPoints_dec","_allPoints_dec","_isConnected_dec","_allPointsBeforeEndpointsFilter_dec","_yAxisConfig_dec","_xAxisConfig_dec","_allEntityNamesWithXAndY_dec","_sizeColumn_dec","_sizeColumnSlug_dec","_xColumn_dec","_xColumnSlug_dec","_yColumn_dec","_yColumnSlug_dec","_xScaleType_dec","_compareEndPointsOnly_dec","_xOverrideTime_dec","_seriesNamesToHighlight_dec","ScatterPlotChartState","timeDomainStart","timeDomainEnd","originalTimeDomainStart","originalTimeDomainEnd","xColumnSlug","keyColor","xAxisConfig","yAxisConfig","strat","xColumn","entityNameColumn","sizeColumn","seriesNamesSet","inputTable","animationStartTime","animationEndTime","xValues","xScaleType","pointsForAxisDomains","yScaleType","xDimName","isAnyValueOutsideUserDomain","BarShape","_defaultXAxisLabel_dec","_xAxisLabelBase_dec","_selectedItems_dec","_sortedItems_dec","_items_dec","_uniqueEntityNames_dec","_domainColorForEntityMap_dec","_xSeries_dec","_y0_dec","_x0_dec","MarimekkoChartState","colorColumnSlug","xySlugs","valueOffsets","newPoint","createStackedXPoints","colorScale","uniqueEntityNames","colorRowsByEntity","domainColorMap","colorDomainValue","xSeries","domainColorForEntityMap","xPoint","sortByFuncs","sortColumnSlug","lastPoint","sortedItems","itemsWithValues","itemsWithoutValues","selectedSet","maxValues","xAxisLabelBase","MapTopology","detectNearbyFeature","groupElement","sortFeaturesByInteractionStateAndSize","R.sort","calculateDistance","isPointPlacedOnVisibleHemisphere","toRadians","degree","rotationPhi","getForegroundFeatures","selectionArray","countrySet","countriesByRegionMap","getCountriesByRegion","_isOnTheMapCache","isOnTheMap","isMapRenderFeature","isValidMapRegionName","isValidGlobeRegionName","_formatValueForTooltip_dec","_seriesMap_dec","_columnIsProjection_dec","_targetTime_dec","_mapColumnUntransformed_dec","_mapColumnSlug_dec","_mapColumnInfo_dec","_mapColumn_dec","MapChartState","mapColumnInfo","entityNamesToSelect","allMappableCountryNames","allRegionNames","mappableCountryNameSet","countriesInRegionSet","mappableCountriesInRegion","R.unique","mapColumn","COMPARISON_LINE_STYLE","COMPARISON_LINE_LABEL_STYLE","_labelPosition_dec","_lineCoordinates_dec","_rightBoundX_dec","_leftBoundX_dec","_closestRightLine_dec","_closestLeftLine_dec","_otherVerticalComparisonLines_dec","_lineConfig_dec","_VerticalComparisonLine_decorators","VerticalComparisonLine","linesOnTheLeft","otherLine","linesOnTheRight","closestLeftLine","innerBounds","closestRightLine","xValue","minX","lineCoordinates","rightBoundX","leftBoundX","availableSpaceRight","availableSpaceLeft","p$1","V$1","h$2","generateComparisonLinePoints","lineFunction","xScaleDomain","yScaleDomain","formula","parseEquation","yFunc","evalFormula","numPoints","controlData","expr","equation","Formula","_placedLabel_dec","_linePath_dec","_controlData_dec","_clipPath_dec","_haloOutlineWidth_dec","_CustomComparisonLine_decorators","CustomComparisonLine","comparisonLine","linePoints","labelPosition","pathId","renderUid","placedLabel","ComparisonLine","isVerticalComparisonLineProps","_VerticalAxisGridLines_decorators","_HorizontalAxisGridLines_decorators","_HorizontalAxisZeroLine_decorators","_VerticalAxisZeroLine_decorators","_DualAxisComponent_decorators","_VerticalAxisComponent_decorators","_f","_g","TICK_COLOR","FAINT_TICK_COLOR","SOLID_TICK_COLOR","VerticalAxisGridLines","strokeWidth","dasharray","HorizontalAxisGridLines","HorizontalAxisZeroLine","VerticalAxisZeroLine","stroke","DualAxisComponent","showTickMarks","labelColor","tickColor","lineWidth","gridDashPattern","showEndpointsOnly","verticalGridlines","horizontalGridlines","verticalAxisComponent","VerticalAxisComponent","horizontalAxisComponent","HorizontalAxisComponent","comparisonLines","labelTextWrap","logNoticeTextWrap","visibleTickLabels","pickFirstAndLastElement","R.sortBy","shouldShowLogNotice","tickX","VerticalAxisTickMark","preferredAxisPosition","tickMarkWidth","orient","tickSize","horizontalAxisLabelsOnTop","labelYPosition","tickMarksYPosition","tickLabelYPlacement","showTickLabels","tickMarkYPosition","tickMarkLeftPosition","tickRight","kx","ky","feature_default","topology","transformPoint","arcs","pattersonK1","pattersonK2","pattersonK3","pattersonK4","pattersonC1","pattersonC2","pattersonC3","pattersonC4","pattersonYmax","pattersonRaw","yc","geoPatterson","geoProjection","robinsonRaw","di","yy","geoRobinson","MAP_PROJECTIONS","GeoFeatures","topojson.feature","GeoFeaturesById","geoPathCache","geoPathsFor","projectionGeo","strs","geoBoundsCache","geoBoundsFor","corners","geoCentroidsForFeatures","geoBoundsForFeatures","geoFeaturesForMapCache","getGeoFeaturesForMap","projBounds","projPaths","geo","getGeoFeaturesForGlobe","RegionMap","highlightedRegion","onRegionHover","onRegionLeave","viewBox","allBounds","CountryPath","onPointerEnter","onPointerLeave","continentColorsMap","categoricalMapColors","descriptions","customRegionDisplayOrder","hasTooltipData","getDescriptionForKey","getRegionsForKey","customOrder","R.map","buildCountryMap","useStateWithDebouncedClear","clearDelay","timerRef","clear","RegionTooltip","initiallyHighlightedRegion","activeRegion","setActiveRegion","clearActiveRegion","RegionLegend","RegionLegendItem","defaultColors","SeriesLabel","onInfoTooltipShow","NativeAlignedLabelText","textFragments","iconFragments","LabelText","IconFragment","spanLines","textAnchor","spanIndex","isFirstLine","isLineStart","TextFragment","TextSpanFragment","tooltipRemountKey","setTooltipRemountKey","iconX","iconY","hitAreaSize","hitAreaBounds","LEGEND_ITEM_MIN_SPACING","MARKER_MARGIN","ANNOTATION_PADDING","DEFAULT_CONNECTOR_LINE_WIDTH","DEFAULT_FONT_WEIGHT","DEFAULT_LABEL_STYLE","LABEL_STYLE","dist","getNewHeight","currentHeight","findBracket","sortedBrackets","firstBracketValue","lastBracketValue","bracket","pickCandidate","sortedKeepSeries","keepSeriesHeight","insertIndex","R.sortedIndexBy","dismissCandidate","pickFromCandidateSubsetWithRetry","candidateSubset","getCandidateFromSubset","maxCandidatesToPick","remainingCandidates","numPicked","getCandidate","pickAsManyAsPossibleWithRetry","pickCandidateWithRetry","pickCandidateWithMaxDistanceToReferenceCandidate","referenceCandidate","computeCandidateScores","scoreMap","midPoint","distanceFromMidPoint","VerticalLabels","interactive","renderSeries","annotatedSeries","InteractionOverlays","ConnectorLines","Annotations","Labels","endX","totalLevels","leftCenterY","rightCenterY","markerXMid","lineColor","_positionedFragments_dec","_spanLines_dec","_hasIcon_dec","_contentLines_dec","_fragmentGroups_dec","_roleOnNameLine_dec","_regionIconFragments_dec","_valueFragments_dec","_suffixFragments_dec","_regionIconInfo_dec","_spaceFragment_dec","_spaceWidth_dec","_iconSize_dec","_fontSettings_dec","_nameWrap_dec","_parsedText_dec","_textAnchor_dec","_SeriesLabelState","textWrap","textBeforeIcon","textAfterIcon","textBeforeWidth","textAfterWidth","suffixText","nameWrap","spaceFragment","fragmentGroups","roleOnNameLine","lastNameLine","lineWidths","extractTextSpans","positionLineFragments","SeriesLabelState","positionedFragments","iconYOffset","findImportantSeriesThatFitIntoTheAvailableSpace","seriesSortedByImportance","availableHeight","highlightedCandidates","nonHighlightedCandidates","importanceScore","getMostImportantCandidate","findSeriesThatFitIntoTheAvailableSpace","numPickedCandidates","maxCandidate","_hasAnnotatedSeries_dec","_annotatedSeries_dec","_renderSeries_dec","_maxLevel_dec","_needsConnectorLines_dec","_visibleSeriesHeight_dec","_visibleSeriesNames_dec","_visiblePlacedSeries_dec","_seriesSortedByImportance_dec","_placedSeries_dec","_initialPlacedSeriesByName_dec","_initialPlacedSeries_dec","_legendY_dec","_stableWidth_dec","_maxLabelWidth_dec","_sizedSeries_dec","_textMaxWidth_dec","_yAxis_dec","VerticalLabelsState","defaultFontWeight","seriesLabel","annotationTextWrap","annotationWidth","annotationHeight","sizedSeries","legendY","legendX","legendYMin","legendYMax","labelHeight","midY","origBounds","initialY","yLegendMin","yLegendMax","hasOverlap","topGroup","bottomGroup","topBounds","groupBounds","bottomBounds","overlapHeight","newHeight","overflowTop","overflowBottom","newY","newGroup","stackGroupVertically","currentLevel","prevSign","currentSign","minLevel","initialPlacedSeries","markerMargin","connectorLineWidth","connectorLineCoords","textX","textY","currentY","_LineChartTooltip_decorators","LineChartTooltip","grouped","formatColumn","fading","_legendTickSize_dec","_legendAlign_dec","_legendHeight_dec","_legendMaxWidth_dec","_numericLegendY_dec","_categoryLegendY_dec","_legendX_dec","_legendStyleConfig_dec","_numericLabels_dec","_legendTitleWidth_dec","_legendTitle_dec","_legendTitleFontSize_dec","_positionedBins_dec","_x_dec","_availableNumericWidth_dec","_idealNumericWidth_dec","_isAutoWidth_dec","_totalCategoricalWidth_dec","_itemMargin_dec","_numericBinSize_dec","_numericBins_dec","_visibleBins_dec","_numericLegendData_dec","_HorizontalNumericColorLegend_decorators","_marks_dec","_containerWidth_dec","_contentWidth_dec","_markLines_dec","_visibleCategoricalBins_dec","_categoricalLegendData_dec","_HorizontalCategoricalColorLegend_decorators","DEFAULT_NUMERIC_BIN_SIZE","DEFAULT_NUMERIC_BIN_STROKE","DEFAULT_NUMERIC_BIN_STROKE_WIDTH","DEFAULT_TEXT_COLOR","DEFAULT_TICK_SIZE","CATEGORICAL_BIN_MIN_WIDTH","SPACE_BETWEEN_CATEGORICAL_BINS","MINIMUM_LABEL_DISTANCE","HorizontalColorLegend","HorizontalNumericColorLegend","visibleBins","itemMargin","binCount","spaceRequirements","minBinWidth","maxBinWidth","labelSpace","legendAlign","widthDiff","availableNumericWidth","numericBins","legendTitleWidth","xOffset","prevBin","legendTitle","numericBinSize","positionedBins","tickFontSize","makeBoundaryLabel","minOrMax","makeRangeLabel","raisedMode","styleConfig","currentStyle","numericLabels","bottomY","positionedBin","NumericBinRect","ARROW_SIZE","isOpenLeft","isOpenRight","restProps","HorizontalCategoricalColorLegend","rectSize","marks","markWidth","markX","markY","mouseEnter","mouseOver","mouseLeave","click","_segments_dec","_MultiColorPolyline_decorators","getMidpoint","toPoint","getSegmentsFromPoints","currentPoint","currentSegment","toSvgPoints","MultiColorPolyline","markerStart","markerMid","markerEnd","polylineProps","_hasMarkersOnlySeries_dec","_hasMarkers_dec","_outlineColor_dec","_outlineWidth_dec","_baseStrokeWidth_dec","_markerRadius_dec","_Lines_decorators","Lines","strokeOpacity","showOutline","outlineColor","outlineWidth","outline","LinePath","forceMarkers","pathProps","_externalLegend_dec","_xAxis_dec","_dualAxis_dec","_verticalAxisPart_dec","_horizontalAxisPart_dec","_verticalLabelsSeries_dec","_numericLegend_dec","_colorScale_dec","_hasColorLegend_dec","_verticalLabelsWidth_dec","_verticalLabelsState_dec","_clipPathBounds_dec","_verticalLabelsYRange_dec","_verticalLabelsX_dec","_hidePoints_dec","_renderUid_dec","_hasTimeHighlights_dec","_isHoverModeActive_dec","_hoveredSeriesNames_dec","_onVerticalLabelMouseLeave_dec","_debouncedClearVerticalLabelHover_dec","_clearVerticalLabelHover_dec","_onVerticalLabelMouseEnter_dec","_isTooltipActive_dec","_tooltipId_dec","_activeXVerticalLines_dec","_activeTimes_dec","_lineOutlineWidth_dec","_lineStrokeWidth_dec","_maxVerticalLabelsWidth_dec","_boundsWithoutColorLegend_dec","_onCursorMove_dec","_allValues_dec","_onCursorLeave_dec","_dismissTooltip_dec","_isStatic_dec","_chartState_dec","_LineChart_decorators","ev","parentRef","boxPadding","boundedBox","invertedX","highlightedTimesInLineChart","activeTimes","valueColor","externalLegendHoverBin","chartContainer","chartAreas","chartArea","boundsWithoutColorLegend","easeLinear","deduplicatedSeries","seriesGroupedByName","duplicates","defaults","customConfig","userConfig","numericLegendData","categoricalLegendData","NoDataSection","displayedNames","headingFontsize","bodyFontsize","toPlacedSlopeChartSeries","startY","endY","endPoint","toRenderSlopeChartSeries","Slope","dotRadius","outlineStroke","LineWithDots","MarkX","labelPadding","_onMouseLeave_dec","_onSlopeMouseLeave_dec","_onSlopeMouseOver_dec","_debouncedClearHoveredSeries_dec","_clearHoveredSeries_dec","_shouldShowSeriesNamesInLeftLabels_dec","_rightLabelsSeries_dec","_leftLabelsSeries_dec","_useCompactLayout_dec","_isNarrow_dec","_xRange_dec","_seriesSortedByImportanceForLeftLabels_dec","_visibleRightLabels_dec","_rightLabelsWidth_dec","_rightLabelsState_dec","_leftLabelsWidth_dec","_leftLabelsState_dec","_leftLabelsMaxLevel_dec","_leftLabelsOptions_dec","_rightLabelsOptions_dec","_commonLabelsOptions_dec","_labelsYRange_dec","_labelsFontSize_dec","_maxLabelsWidth_dec","_xEndMarkWidth_dec","_xStartMarkWidth_dec","_xMarkFontSize_dec","_formattedEndTime_dec","_formattedStartTime_dec","_sidebarWidth_dec","_xScale_dec","_yAxisWidth_dec","_yRange_dec","_xLabelPadding_dec","_bottomPadding_dec","_showNoDataSection_dec","_noDataSeries_dec","_endX_dec","_startX_dec","_backgroundColor_dec","_SlopeChart_decorators","VERTICAL_LABELS_PADDING","SIDEBAR_MARGIN","custom","domainDefault","xRange","s1_isLabelled","s2_isLabelled","leftLabelsWidth","rightLabelsWidth","chartAreaWidth","minStartX","maxEndX","availableWidth","idealWidth","maxSlopeWidth","currentSlopeWidth","showSeriesName","showAnnotation","distanceMap","closestSlope","distanceSq","toleranceSq","actualStartTime","actualEndTime","timeRange","timeLabel","isStartValueOriginal","isEndValueOriginal","toleranceNotice","roundingNotice","tickLabelOffset","tickLabel","tickLabelLength","longText","shortText","longTextWidth","shortTextWidth","xDist","rightPadding","leftPadding","renderedText","midX","uniqYValues","DISCRETE_BAR_STYLE","BAR_SPACING_FACTOR","makeProjectedDataPatternId","wrapLabelForHeight","originalFontSize","cleanedLabel","computeMaxLineCount","makeTextWrap","maxLines","optimalWidth","findMinWidthForMaxLines","labelWrap","minFontSize","optimalFontSize","findMaxFontSizeForHeight","reducedFontWrap","optimalFontSettings","maxLinesAtReducedSize","needsTruncation","bestWidth","maxFontSize","enrichSeriesWithLabels","availableHeightPerSeries","minLabelWidth","maxLabelWidth","annotationFontSettings","showRegionTooltip","wrappedLabels","labelWrapNeedsTruncation","remainingHeightForAnnotation","minAnnotationHeight","annotationWrap","annotationWrapNeedsTruncation","nonTruncatedLabelWidths","nonTruncatedAnnotationWidths","truncatedLabels","truncatedText","truncatedAnnotations","_classCallCheck","toPropertyKey","_inherits","setPrototypeOf","_assertThisInitialized","_possibleConstructorReturn","assertThisInitialized","_getPrototypeOf","transitionId","getTransitionId","isNamespace","timingDefaults","Events","_objectSpread","protoProps","staticProps","BaseNode","_iteratorNormalCompletion","_didIteratorError","_iteratorError","stateKey","tweens","getNameSpacedCustomTween","kapellmeisterNamespacedTween","_objectSpread3","_objectSpread4","_this$setState","getCustomTween","kapellmeisterTween","_this$setState2","_this$setState3","nameSpace","begValue","stateTween","_this2$setState","_objectSpread5","tid","mergeKeys","currNodeKeys","currKeyIndex","nextNodeKeys","nextKeyIndex","nextOrderA","nextOrderB","currOrderA","currOrderB","_i2","pivot","_i3","_pivot","ENTER","LEAVE","beg","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","NewTarget","NodeGroup","_Component","_super","_this$state","nodeKeys","nodeHash","isTransitioning","Node","_BaseNode","_super2","_this$state2","renderedChildren","keyAccessor","leave","keyIndex","_k","mergedNodeKeys","_k2","_n","Animate","_this$props","_projectedDataColorInLegend_dec","_showColorLegend_dec","_barWidths_dec","_barPlacements_dec","_barHeight_dec","_barSpacing_dec","_seriesHeight_dec","_rightValueLabelsWidth_dec","_hasNegative_dec","_hasPositive_dec","_valueLabelStyle_dec","_entityAnnotationStyle_dec","_entityLabelStyle_dec","_barCount_dec","_legendPadding_dec","_DiscreteBarChart_decorators","DEFAULT_PROJECTED_DATA_COLOR_IN_LEGEND","GAP__ENTITY_LABEL__BAR","GAP__ENTITY_LABEL__VALUE_LABEL","DiscreteBarChart","labelsWidths","allValues","labelWidths","textWidth","valueWidth","totalWhiteSpace","barX","barY","entityLabelX","valueLabelX","totalLabelHeight","entityLabelY","annotationY","showYearLabels","valueString","barColor","labelY","projections","uniqProjections","StripedProjectedDataPattern","handlePositionUpdate","easeQuadOut","legendBins","opacityByEmphasis","STACKED_AREA_STYLE","STACKED_BAR_STYLE","LEGEND_STYLE_FOR_STACKED_CHARTS","StackedAreas","Area","Border","_activeXVerticalLine_dec","_hoveredSeriesName_dec","_facetLegendHoveredSeriesName_dec","_paddingForLegendRight_dec","_onAreaMouseLeave_dec","_onAreaMouseEnter_dec","_showLegend_dec","_StackedAreaChart_decorators","STACKED_AREA_CHART_CLASS_NAME","StackedAreaChart","horizontalAxisPart","verticalAxisPart","isEntityStrategy","picked","hoveredIndex","closestPoint","hoveredPointIndex","bottomSeriesPoint","lastStackedPoint","clipPath","_titleHeight_dec","_rectSize_dec","_maxLegendWidth_dec","_VerticalColorLegend_decorators","VerticalColorLegend","rectPadding","titleHeight","runningYOffset","renderedTextPosition","onLegendClick","onLegendMouseOver","onLegendMouseLeave","StackedBars","onMouseOver","barOpacity","_onBarMouseLeave_dec","_onBarMouseOver_dec","_onLegendMouseLeave_dec","_onLegendMouseOver_dec","_horizontalColorLegend_dec","_verticalColorLegend_dec","_sidebarMinWidth_dec","_sidebarMaxWidth_dec","_legendWidth_dec","_activeColors_dec","_externalLegendHoveredSeriesNames_dec","_legendHoveredSeriesNames_dec","_paddingForLegendTop_dec","_showHorizontalLegend_dec","_StackedBarChart_decorators","StackedBarChart","legendHoverColor","hoveredSeriesNamesSet","hoveredColors","focusedColors","sidebarMinWidth","sidebarMaxWidth","legendDimensions","hoverBar","hoverSeries","hoverPoints","positivePoints","negativePoints","sortedHoverPoints","fake","showLegend","showHorizontalLegend","labelToBarPadding","StackedDiscreteBarRow","labelFontSize","showTotalValueLabel","formatValueForLabel","onEntityMouseEnter","onEntityMouseLeave","onClearTooltip","totalLabel","showLabelInsideBar","labelStyle","canShowLabel","_onEntityMouseLeave_dec","_onEntityMouseEnter_dec","_clearTooltip_dec","_formatValueForLabel_dec","_renderRows_dec","_placedRows_dec","_totalValueLabelWidth_dec","_showHorizontalAxis_dec","_showTotalValueLabel_dec","_labelWidth_dec","_sizedRows_dec","_totalValueLabelStyle_dec","_labelStyle_dec","_legend_dec","_focusedSeriesNamesByType_dec","_legendPaddingTop_dec","_boundsWithoutLegend_dec","_StackedDiscreteBarChart_decorators","StackedDiscreteBarChart","focusArray","focusedEntities","focusedColumns","binSeriesName","longestLabel","barSpacing","topYOffset","legendHoverSeriesName","rowFocus","placedBar","rowEmphasis","hasNotice","targetNotice","interpolated","Triangle","rotationRounded","_maxLabelHeight_dec","_endLabel_dec","_startLabel_dec","ConnectedScatterLegend","renderOptions","startLabel","endLabel","lineToLabelSpacing","lineLeft","lineRight","lineY","labelStartX","labelEndX","_ScatterPoint_decorators","_ScatterLine_decorators","INACTIVE_SCATTER_POINT_COLOR","ScatterPoint","isLayerMode","hideFocusRing","isLabelled","ScatterLine","_foregroundSeries_dec","_backgroundSeries_dec","_onPointMouseLeave_dec","_onPointMouseEnter_dec","_initialRenderSeries_dec","_hideConnectedScatterLines_dec","_hideEntityLabels_dec","_hideScatterLabels_dec","_fontScale_dec","_sizeScale_dec","_isSubtleForeground_dec","_isLayerMode_dec","_tooltipSeriesName_dec","_focusedSeriesNames_dec","_seriesArray_dec","_ScatterPointsWithLabels_decorators","ScatterPointsWithLabels","seriesArray","scaleColor","renderData","labelsByPriority","nHoveredLabels","higherPriorityLabel","lowerPriorityLabel","nearby","backgroundSeries","radiuses","circle","clipBounds","_highlight_dec","_legendSize_dec","_fontSizeFromRadius_dec","_ticks_dec","LEGEND_CIRCLE_COLOR","LEGEND_VALUE_COLOR","LABEL_PADDING","LABEL_COLOR","TITLE_COLOR","MIN_FONT_SIZE","ScatterSizeLegend","sizeScale","domainStart","domainEnd","largestTick","restTicks","tooltipSeries","LegendItem","centerX","circleFill","circleStroke","circleStrokeWidth","circleOpacity","labelFill","labelFontWeight","outsideLabel","_footer_dec","_showSignificanceSuperscript_dec","_roundingNotice_dec","_toleranceNotice_dec","_points_dec","_ScatterPlotTooltip_decorators","ScatterPlotTooltip","isTimeScatter","hasSameVariableWithTimeOverride","hasTimeMismatch","makeToleranceNotice","xStart","yStart","xEnd","yEnd","xNoticeNeeded","yNoticeNeeded","allRoundedToSigFigs","sigFigs","tooltipState","hasToleranceNotice","TooltipValueRangeX","TooltipValueRangeY","TooltipValueRangeSize","TooltipValueColor","showOriginalTimes","getXValuesWithTimes","formattedOriginalTimes","getYValuesWithTimes","targetStartTime","targetEndTime","getOriginalTimesForRelativeMode","spanStart","spanEnd","_sizeRange_dec","_hasNoDataSection_dec","_selectedEntitiesWithoutData_dec","_sizeLegend_dec","_quadtree_dec","_onToggleEndpoints_dec","_tooltipSeries_dec","_onScatterClick_dec","_onScatterMouseMove_dec","_onScatterMouseLeave_dec","_onScatterMouseEnter_dec","_arrowLegend_dec","_displayEndTime_dec","_displayStartTime_dec","_onLegendClick_dec","_isStaticAndSmall_dec","_colorsInUse_dec","_onSelectEntity_dec","_canAddCountry_dec","_axisBounds_dec","_ScatterPlotChart_decorators","ScatterPlotChart","addCountryMode","colorMatchingSeriesNames","_.without","hoveredLegendColor","colorLegendWidth","_.clamp","activeColorsSet","activeSeriesNames","activeSeries","lineRange","pct","scaleSqrt","defaultFontSize","minFactor","maxFactor","sizeLegend","arrowLegend","verticalColorLegend","sidebarWidth","verticalLegendHeight","sizeLegendHeight","arrowLegendHeight","legendPadding","ySizeLegend","yArrowLegend","yNoDataSection","noDataSectionBounds","separatorLine","MarimekkoBarsForOneEntity","entityColor","isFaint","currentX","onEntityClick","onEntityMouseOver","labelYOffset","noDataHeight","MarimekkoBar","barBaseColor","strokeColor","fillOpacity","overalOpacity","MarimekkoBars","normalElements","highlightedElements","focusColorBin","placedItems","selectionSet","hasSelection","noDataAreaElement","noDataLabel","firstNanValue","firstNanValueItem","lastItem","noDataRangeStartX","noDataRangeEndX","noDataLabelX","boundsForNoData","noDataLabelY","yAxisOnePixelDomainEquivalent","adjustedBars","barCopy","barsProps","toPlacedMarimekkoItems","preciseX","_labels_dec","_entityLabelFontSize_dec","_longestLabelWidth_dec","_longestLabelHeight_dec","_unrotatedHighestLabelHeight_dec","_unrotatedLongestLabelWidth_dec","_placedLabels_dec","_labelLines_dec","_labelsWithPlacementInfo_dec","_pickedLabelCandidates_dec","_tooltipItem_dec","_onEntityClick_dec","_onEntityMouseOver_dec","_hoverColors_dec","_placedItemsMap_dec","_placedItems_dec","_yColumnsAtLastTimePoint_dec","_xColumnAtLastTimePoint_dec","_tableAtLatestTimelineTimepoint_dec","_latestTime_dec","_MarimekkoChart_decorators","MARKER_AREA_HEIGHT","MAX_LABEL_COUNT","_MarimekkoChart","verticalAxisTrueWidth","whiteSpaceOnLeft","labelLinesHeight","marginToEnsureWidestEntityLabelFitsEvenIfAtX0","uniqueSelectedColors","tooltipItem","shouldShowYTimeNotice","xOriginalTime","xOriginalTimeFormatted","anyRoundedToSigFigs","numChunks","validItemNames","validCandidates","currentChunk","domainSizeOfChunk","domainSizeThreshold","xColumnAtLastTimePoint","yColumnsAtLastTimePoint","paddingInPixels","selectedItemsSet","ySizeMap","labelCandidates","yRowsForA","yRowsForB","sortedLabelsWithValues","sortedLabelsWithoutValues","availablePixels","numLabelsToAdd","picks","placedItemsMap","unrotatedLongestLabelWidth","unrotatedHighestLabelHeight","labelAngleInDegrees","labelsYPosition","labelsWithPlacements","labelElement","correctionFactor","correctedLabelWidth","minNextX","maxPreviousX","labelsWithPlacementInfo","shiftedGroups","unshiftedElements","selectedItemsKeys","startNewGroup","barEndpointY","labelWithPlacement","labelLines","indexInGroup","markerBarEndpointX","markerTextEndpointX","markerBarEndpointY","markerTextEndpointY","markerNetHeight","markerStepSize","directionUnawareMakerYMid","markerYMid","heights","rotatedLabelHeight","rotatedLabelWidth","domainColor","MarimekkoChart","_sparklineChart_dec","_sparklineChartState_dec","_sparklineBounds_dec","_sparklineHeight_dec","_sparklineWidth_dec","_sparklineManager_dec","_highlightedTimesInLineChart_dec","_showSparkline_dec","_hasTimeSeriesData_dec","_sparklineTable_dec","_MapSparkline_decorators","DEFAULT_SPARKLINE_WIDTH","DEFAULT_SPARKLINE_HEIGHT","SPARKLINE_PADDING","SPARKLINE_NUDGE","_MapSparkline","yAxisUnit","formatValueForTooltip","minVal","maxVal","minLabel","maxLabel","axisBounds","labelX","labelTop","labelBottom","MapSparkline","_tooltipSubtitle_dec","_lineColorScale_dec","_highlightedTimesInSparkline_dec","_formattedEndValue_dec","_formattedStartValue_dec","_endDatum_dec","_startDatum_dec","_timeSeriesTable_dec","_entityTable_dec","_shouldShowValueRange_dec","_mapAndYColumnAreTheSame_dec","_MapTooltip_decorators","MapTooltip","startDatum","endDatum","originalStartTime","originalEndTime","startValueIsInterpolated","endValueIsInterpolated","MapTooltipRangeValues","MapTooltipValue","makeTextColorForValue","formattedStartValue","formattedEndValue","hasCategoricalValueLabels","bboxCollide","boundingBoxes","xi","yi","bbi","nx1","ny1","nx2","ny2","cornerNodes","cn","prepareCorners","nodeI","bWidth","bbLength","bHeight","dataNode","bbj","dnx1","dny1","dnx2","dny2","dWidth","dHeight","xSize","ySize","xOverlap","yOverlap","xBPush","yBPush","xDPush","yDPush","heightWidth","pointInPolygon","ii","u1","v1","u2","v2","currentP","nextP","numContours","contour","contourLen","geom","feat","lineString","featureCollection","fc","multiLineString","getCoord","coord","getGeom","geojson","booleanPointInPolygon","polys","inBBox","polyResult","pip","TinyQueue","defaultCompare","best","checkWhichEventIsLeft","e1","checkWhichSegmentHasRightEndpointFirst","seg1","seg2","Event$1","featureId","ringId","eventToCheck","fillEventQueue","eventQueue","processFeature","featureOrGeometry","coords","iii","Event","Segment","testSegmentIntersect","x4","y4","denom","numeA","numeB","uA","uB","runCheck","ignoreSelfIntersections","intersectionPoints","outQueue","otherSeg","sweeplineIntersections","lib","lineIntersect","line1","line2","removeDuplicates","intersections","coordEach","excludeWrapCoord","stopG","geometryMaybeCollection","wrapShrink","coordIndex","isGeometryCollection","isFeatureCollection","isFeature","featureIndex","geomIndex","multiFeatureIndex","geometryIndex","geomType","geomEach","featureProperties","featureBBox","flattenEach","polygonToLine","poly","singlePolygonToLine","multiPolygonToLine","coordsToLine","multiPoly","booleanDisjoint","feature1","feature2","bool","flatten1","flatten2","disjoint","geom1","geom2","compareCoords","isPointOnLine","isLineOnLine","isLineInPoly","isPolyInPoly","isPointOnLineSegment","lineString1","lineString2","coord1","coord2","lineSegmentStart","lineSegmentEnd","dxc","dyc","dxl","dyl","pair1","pair2","booleanIntersects","annotationPlacementsById","enrichedAnnotation","MARKER_TEXT_GAP","makeInternalAnnotationForFeature","fontSizeScale","ellipse","makeEllipseForProjection","placeLabelAtEllipseCenter","makeExternalAnnotationForFeature","anchorPoint","markerLength","placedBounds","placeExternalLabel","moveExternalLabelIntoOcean","repositionAndFilterExternalAnnotations","backgroundFeatureIdSet","originalAnnotationsById","filteredAnnotations","minimiseLabelCollisions","nearbyGeoFeatures","getGeoFeaturesWithinRadius","nearbyAnnotations","checkAnnotationMarkerCollidesWithSomeLabel","checkAnnotationCollidesWithLandmass","ellipseCenter","makePlacedBoundsForText","textFits","checkPointIsInEllipse","scaledFontSize","textBounds","calculateExternalLabelPosition","paddingFactor","projCenter","projLeft","projTop","rx","ry","padX","padY","getExternalMarkerEndPosition","bridgeFeatures","maxSteps","annotationLabel","makePolygonFromBounds","newBounds","bridgeFeature","moveIntoDirectionByStep","_featuresWithinRadiusCache","checkRectangleOverlapsWithCircle","rectangle","closestX","closestY","simulationNodes","centerY","isTopOrBottom","originalBounds","markerLine","makePolygonForLine","nearbyAnnotation","nearbyLabel","lineLength","perpX","perpY","BackgroundCountry","CountryWithData","strokeScale","getStrokeWidth","CountryWithNoData","ProjectedDataPattern","forLegend","DottedProjectedDataPattern","patternSize","dotOpacity","lightness","InternalValueAnnotation","showHalo","ExternalValueAnnotation","_clearHoverEnterFeature_dec","_setHoverEnterFeature_dec","_onPointerLeave_dec","_onPointerEnter_dec","_onPointerMove_dec","_detectNearbyFeature_dec","_externalAnnotations_dec","_internalAnnotations_dec","_annotationCandidates_dec","_annotationCandidateFeatures_dec","_shouldShowAnnotations_dec","_projection_dec","_binColors_dec","_featuresWithNoData_dec","_sortedFeaturesWithData_dec","_featuresWithData_dec","_backgroundFeatureIdSet_dec","_backgroundFeatures_dec","_foregroundFeatures_dec","_featuresById_dec","_featuresInRegion_dec","_features_dec","_matrixTransform_dec","_viewportScaleSqrt_dec","_viewportScale_dec","_mapBounds_dec","_hoverFeature_dec","_choroplethData_dec","_viewport_dec","_ChoroplethMap_decorators","ChoroplethMap","mapBounds","viewportWidth","viewportHeight","viewportScale","mapX","mapY","newWidth","boundsCenterX","boundsCenterY","newCenterX","newCenterY","newOffsetX","newOffsetY","countriesByProjection","internalAnnotation","externalAnnotation","nearbyFeature","globeController","is2dContinentActive","matrixTransform","PI","Versor","sl","sp","cp","sg","cg","a2","b2","theta0","versor","cross","numericSort","makeMatrix","uniqueCountSorted","uniqueValueCount","lastSeenValue","ssq","sums","sumsOfSquares","sji","muji","fillMatrixColumn","iMin","iMax","cluster","backtrackMatrix","jlow","jhigh","sjlowi","ssqjlow","ssqj","fillMatrices","nValues","shift","shiftedValue","ckmeans","nClusters","uniqueCount","clusters","clusterRight","clusterLeft","_jumpTo_dec","_dismissCountryFocus_dec","_setFocusCountry_dec","_resetGlobe_dec","_toggleGlobe_dec","_hideGlobe_dec","_showGlobe_dec","geoFeaturesById","LONGITUDE_OFFSET","ANIMATION_DURATION","GlobeController","addLongitudeOffset","continent","calculateTargetForOwidContinent","calculateTargetForCountry","calculateTargetBasedOnTime","calculateTargetForSelection","calculateTargetForRegion","targetCoords","targetZoom","currentCoords","animatedCoords","currentZoom","animatedZoom","easeCubicOut","geoFeature","zoomToFit","calculateZoomToFitForGeoFeature","centerPoint","getCenterPoint","negateCoords","calculateZoomToFitForBounds","getCoordsBasedOnTime","calculateTargetForCountryCollection","visibleCountries","findVisibleCountrySubset","getCoordsAndZoomForCountryCollection","getCenterForCountryCollection","makeFeatureCollectionForCountries","mergedBounds","clusterCountriesByCentroidLongitude","nameToLon","lonToName","lon","centroidLon","_onPointerLeaveFeature_dec","_onPointerEnterFeature_dec","_clearHover_dec","_zoomGlobe_dec","_rotateGlobe_dec","_visibleFeatures_dec","_equatorPath_dec","_graticulePath_dec","_globePath_dec","_zoomScale_dec","_globeRotation_dec","_globeRadius_dec","_globeScale_dec","_maxScale_dec","_minScale_dec","_globeCenter_dec","_globeSize_dec","_globeController_dec","_ChoroplethGlobe_decorators","DEFAULT_SCALE","ChoroplethGlobe","maxDistance","zoomScale","geoGraticule","equator","newZoom","panAndZoom","previousType","startCoords","startQuat","startRot","previousPos","startDistance","getInteractionType","isMultiTouchEvent","panningOrZoomingStart","calculatePinchDistance","posVector","panningOrZooming","wheeling","pinching","panning","isPointInCircle","currCoords","quat","panningOrZoomingEnd","distanceSquared","radiusSquared","_categoryLegend_dec","_categoryLegendHeight_dec","_numericLegendHeight_dec","_categoricalHoverBracket_dec","_numericHoverBracket_dec","_hasCategoricalLegendData_dec","_numMembersPerCategoricalBinByIndex_dec","_shouldAddProjectionPatternToLegendBins_dec","_region_dec","_choroplethMapBounds_dec","_hoverValue_dec","_legendData_dec","_disableIntroAnimation_dec","_onRegionChange_dec","_onLegendMouseEnter_dec","_isMapSelectionEnabled_dec","_isFaceted_dec","_mapViewport_dec","_onMapMouseLeave_dec","_onMapPointerMove_dec","_onMapMouseOver_dec","_MapChart_decorators","PADDING_BETWEEN_MAP_AND_LEGEND","PADDING_BELOW_MAP_LEGEND","PADDING_BETWEEN_MAP_LEGENDS","MAP_LEGEND_MAX_WIDTH_RATIO","MapChart","createRef","legendMaxWidth","legendStyleConfig","easeCubic","hoverBracket","patternRef","legendData","memberCount","hoverValue","numericLegend","categoryLegend","clipping","mapOrGlobe","sparklineWidth","windowWidth","tooltipCountry","SimpleVerticalLabelsState","yPosition","minSpacing","margin","R.omit","SimpleVerticalLabels","xAnchor","_visibleEndLabels_dec","_visibleStartLabels_dec","_paddedStartLabelsWidth_dec","_paddedEndLabelsWidth_dec","_startLabelsWidth_dec","_endLabelsWidth_dec","_startLabelsState_dec","_endLabelsState_dec","_labelsRange_dec","_hasProjectedSeries_dec","_outerBoundsVerticalAxis_dec","_visibleEndPoints_dec","_visibleStartPoints_dec","_LineChartThumbnail_decorators","DOT_RADIUS","SPACE_BETWEEN_DOT_AND_LABEL","LineChartThumbnail","chartAreaPadding","labelCandidateSeries","endPointBySeriesName","endPoint1","endPoint2","showValueLabelsOnly","startPointBySeriesName","startPoint1","startPoint2","Dot","_labelCandidateSeries_dec","_xMarksHeight_dec","_SlopeChartThumbnail_decorators","SlopeChartThumbnail","xMarksHeight","firstPoint","_DiscreteBarChartThumbnail_decorators","DiscreteBarChartThumbnail","_paddedLabelsWidth_dec","_labelsWidth_dec","_StackedAreaChartThumbnail_decorators","StackedAreaChartThumbnail","series1","series2","_StackedBarChartThumbnail_decorators","StackedBarChartThumbnail","_StackedDiscreteBarChartThumbnail_decorators","StackedDiscreteBarChartThumbnail","_ScatterPlotChartThumbnail_decorators","ScatterPlotChartThumbnail","_visibleLabels_dec","_MarimekkoInternalLabels_decorators","MarimekkoInternalLabels","placedLabels","_labelledItems_dec","_shouldShowLabels_dec","_shouldShowVerticalAxis_dec","_MarimekkoChartThumbnail_decorators","MarimekkoChartThumbnail","_MapChartThumbnail_decorators","MapChartThumbnail","ChartComponentClassMap","ChartThumbnailClassMap","ChartStateMap","makeChartState","StateClass","getChartComponentClass","ClassMap","DefaultChartClass","ChartComponent","validChartState","ChartClass","makeChartInstance","getFontSize","minSize","getLabelPadding","getFacetGridPadding","shouldAddRowPadding","shouldAddColumnPadding","calculateAspectRatio","aspectRatio","_facetLabelSettings_dec","_categoricalLegendStyleConfig_dec","_numericLegendStyleConfig_dec","_LegendClass_dec","_isNumericLegend_dec","_externalLegends_dec","_columnFacets_dec","_entityFacets_dec","_isSharedXAxis_dec","_isSharedYAxis_dec","_intermediateChartInstances_dec","_intermediatePlacedSeries_dec","_hideFacetLegends_dec","_facetGridPadding_dec","_gridParams_dec","_facetCount_dec","_uniformXAxis_dec","_uniformYAxis_dec","_facetFontSize_dec","_facetsContainerBounds_dec","_chartTypeName_dec","_FacetChart_decorators","SHARED_X_AXIS_MIN_FACET_COUNT","facetBackgroundColor","getContentBounds","chartInstance","axes","shouldHideFacetAxis","edges","sharedAxesSizes","FacetChart","isNumericLegend","legendHeightWithPadding","isSharedXAxis","facetFontSize","facetCount","seriesColorMap","legendHoverBin","gridBoundsArr","sizeColumnSlug","missingDataStrategy","shouldPinTooltipToBottom","globalXAxisConfig","globalYAxisConfig","colorScaleColumnOverride","showSeriesLabels","intermediateChartInstances","useValueBasedColorScheme","R.values","axisAccessor","uniform","shared","axisWithMaxSize","domains","sharedAxisSize","initialGridBounds","edge","contentBounds","legend","externalLegend","_.uniqWith","binA","binB","activeColors","allBins","uniqBins","_.reverse","idealFontSize","facetLabelSettings","LegendClass","facetChart","shrunkFontSize","shortenedLabel","seriesLabelState","_facetArrangement_dec","_intermediateMapInstance_dec","_intermediateMapInstances_dec","_logGrapherInteractionEvent_dec","_FacetMap_decorators","FacetMap","horizontalLayout","verticalLayout","mapAspectRatio","horizontalLayoutAspectRatio","verticalLayoutAspectRatio","horizontalDiff","verticalDiff","bias","getFacetLabelPadding","transformedTableFromGrapher","mapViewport","logGrapherInteractionEvent","mapChart","facet","mapHeight","shiftY","facetArrangement","_activeChartOrMapType_dec","_ChartAreaContent_decorators","ChartAreaContent","activeChartOrMapType","containerStyle","_noDataPattern_dec","_fonts_dec","_StaticChartWrapper_decorators","StaticChartWrapper","includeFontsStyle","includeBackgroundRect","_svgProps_dec","_chartHeight_dec","_relatedQuestionHeightWithPadding_dec","_timelineHeightWithPadding_dec","_controlsRowHeightWithPadding_dec","_footerHeightWithPadding_dec","_headerHeightWithPadding_dec","_settingsPopoverMaxHeight_dec","_settingsPopoverMaxWidth_dec","_relatedQuestionHeight_dec","_showRelatedQuestion_dec","_boundsForChartArea_dec","_header_dec","_verticalPaddingSmall_dec","_verticalPadding_dec","_CaptionedChart_decorators","_staticHeader_dec","_staticFooter_dec","_svgBounds_dec","_StaticCaptionedChart_decorators","CONTROLS_ROW_HEIGHT","AbstractCaptionedChart","chartHeight","relatedQuestions","VerticalSpace","CaptionedChart","StaticCaptionedChart","previousOffset","includeDetailsInStaticExport","_isCaptioned_dec","_Chart_decorators","Chart","_setUpWindowResizeEventHandler_dec","_setBaseFontSize_dec","_setUpIntersectionObserver_dec","_dismissFullScreen_dec","_randomSelection_dec","_toggleYScaleTypeCommand_dec","_toggleTimelineCommand_dec","_togglePlayingCommand_dec","_toggleTabCommand_dec","_clearErrors_dec","_setError_dec","_dispose_dec","_rebuildInputOwidTable_dec","__setInputTable_dec","_grapherState_dec","_Grapher_decorators","Grapher","legacyConfig","startMark","tableWithColors","shortcuts","isSourcesModalOpen","isDownloadModalOpen","slideShow","currentSelection","newNum","containerClasses","entitySelectorArray","isNotVisible","isPartiallyVisible","pushParams","debouncedPushParams","updateWindowDimensions","shortcut","strArray","resultArray","urlJoin","getVariableDataRoute","dataApiUrl","noCache","urljoin","getVariableMetadataRoute","loadVariableDataAndMetadata","metadataPromise","metadataResponse","metadata","dataPromise","dataResponse","loadVariablesDataSite","variableIds","archiveContext","loadMetadataOnly","loadVariableDataPromises","variablesData","fetchInputTableForConfig","variablesDataMap","getCachingInputTableFetcher","previousDimensions","previousSelectedEntityColors","dimensionsMobx","selectedEntityColorsMobx","variablesToFetch","getEntityCodesToEntityNames","getEntityNamesToEntityCodes","codeToEntityName","codeOrEntityName","entityNameToCode","V1_DELIMITER","ENTITY_V2_DELIMITER","isV1Param","encodedQueryParam","entityNamesFromV1EncodedParam","entityNamesToV2Param","entityNamesFromV2Param","queryParam","migrateV1Delimited","LegacyDimensionRegex","injectEntityNamesInLegacyDimension","newNames","nonDimensionName","migrateLegacyDimensionPairs","urlMigrations","migrateSelectedEntityNamesParam","getEntityNamesParam","getSelectedEntityNamesParam","generateSelectedEntityNamesParam","setSelectedEntityNamesParam","getFocusedSeriesNamesParam","generateFocusedSeriesNamesParam","grapherUrlMigrations","legacyToCurrentGrapherUrl","legacyToCurrentGrapherQueryParams","allSchemaVersions","schemaVersionRegex","isValidSchemaVersion","getSchemaVersion","createSchemaForVersion","isLatestVersion","isOutdatedVersion","hasValidSchema","hasOutdatedSchema","migrateFrom001To002","migrateFrom002To003","migrateFrom003To004","migrateFrom004To005","migrateFrom005To006","hasChartTab","migrateFrom006To007","migrateFrom007To008","migrateFrom008To009","migrateFrom009To010","runMigration","recursivelyApplyMigrations","migrate","migrateGrapherConfigToLatestVersion","EMBEDDED_FONTS_CSS","IMPORT_FONTS_REGEX","StaticChartRasterizer","canvasElt","canvas","faces","outcomes","testBlob","blobFromSVG","testUrl","urlFromBlob","testImage","imageFromUrl","pixels","didDraw","svgImage","density","rej","reader","_dimensions_dec","_isOptional_dec","_allowMultiple_dec","DimensionSlot","GrapherAnalytics","pathNext","splitPathForGA4","grapherAnalyticsContextToGAEventFields","getPathname","consent","pushToDataLayer","fullPath","grapherObjectToQueryParams","R.isDeepEqual","stringifyGlobeRotation","parseGlobeRotation","latLon","lat","lonLat","isValidPeerCountryStrategy","isValidPeerCountryStrategyQueryParam","selectPeerCountriesForGrapher","grapherState","targetCountry","defaultSelection","prepareEntitiesForPeerSelection","peerCountryStrategy","regionInfo","selectPeerCountries","selectParentRegionsAsPeers","selectPeerCountriesByClosestValue","selectPeerCountriesByDataRange","selectNeighborsAsPeers","isDataLoaderAvailable","isDataColumnAvailable","filterEntitiesWithDataAtAllTimes","requiredTimes","entityData","relevantEntities","availableEntitySet","peers","isAvailable","owidContinent","aggregate","targetCount","maxPeerRatio","findClosestByValue","targetEntry","availableEntitiesSet","neighbor","randomize","candidateEntities","latestValue","populationData","population","findDataRangePeers","candidatesToUse","targetContinent","findClosestByLogDistance","sameContinentCandidates","otherContinentsCandidates","sameContinentPeers","remainingCount","otherContinentPeers","combinedPeers","targetLogValue","maxLogDistance","R.filter","R.isDefined","sortedData","bucketSize","buckets","bucket","weightedRandomPick","maxPopulationPick","totalWeight","R.sample","invalid","rawValue","OVERLAY_PARAM_VALUES","parseBooleanOneZeroParam","parseScaleTypeParam","parseTabParam","parseOverlayParam","parseStackModeParam","isValidSingleTime","parseTimeParam","startValid","endValid","parseGlobeParam","parseGlobeRotationParam","parseGlobeZoomParam","parseRegionParam","parseEntityNamesParam","parseCountryParam","parseFocusParam","parseFacetParam","isValidFacetStrategy","parseUniformYAxisParam","parseShowNoDataAreaParam","parseShowSelectionOnlyInTableParam","parseTableFilterParam","parseTableSearchParam","parseEndpointsOnlyParam","parseZoomToSelectionParam","parsePeerCountriesParam","parseGrapherQueryParams","logInvalidQueryParams","getErrorMessageRelatedQuestionUrl","question","pickColumnsForSourcesLine","activeDimensions","getDimensionPropertiesForActiveTab","isPopulationVariable","buildSourcesLineFromColumns","originFragments","uniqueAttributions","_numSelectableEntityNames_dec","_isEntitySelectorDrawerOpen_dec","_isEntitySelectorModalOpen_dec","_isEntitySelectorPanelActive_dec","_shouldShowEntitySelectorAs_dec","_canChangeAddOrHighlightEntities_dec","_canHighlightEntities_dec","_canAddEntities_dec","_canChangeEntity_dec","_canSelectMultipleEntities_dec","_animationEndTime_dec","_disablePlay_dec","_onClearEntities_dec","_onDeselectEntity_dec","_onTimelineClick_dec","_timeParam_dec","_hasUserChangedMapTimeHandle_dec","_hasUserChangedTimeHandles_dec","_embedArchivedUrl_dec","_embedUrl_dec","_isOnCanonicalUrl_dec","_canonicalUrlIfIsNarrativeChart_dec","_baseUrl_dec","_queryStr_dec","_authorsVersion_dec","_changedParams_dec","_areFocusedSeriesNamesDifferentThanAuthors_dec","_areSelectedEntitiesDifferentThanAuthors_dec","_overlayParam_dec","_allParams_dec","_clearQueryParams_dec","_clearFocus_dec","_isRelatedQuestionTargetDifferentFromCurrentPage_dec","_hasRelatedQuestion_dec","_shouldPinTooltipToBottom_dec","_isExportingForWikimedia_dec","_areStaticBoundsSmall_dec","_isMedium_dec","_isSmall_dec","_isSemiNarrow_dec","_isServerSideDownloadAvailable_dec","_isModalOpen_dec","_setHideExternalControlsInEmbedUrl_dec","_isInFullScreenMode_dec","_hasMultipleSeriesPerFacet_dec","_isStackedChartSplitByMetric_dec","_hasSingleEntityInFacets_dec","_hasSingleMetricInFacets_dec","_hasMultipleYColumns_dec","__sortConfig_dec","_entitiesByRegionGroup_dec","_regionGroups_dec","_applyPeerCountriesIfNeeded_dec","_canApplyPeerCountries_dec","_analyticsContext_dec","_containerElement_dec","_sidePanelBounds_dec","_chartAreaBounds_dec","_chartAreaPadding_dec","_activeBounds_dec","_idealHeight_dec","_idealWidth_dec","_availableHeight_dec","_availableWidth_dec","_hideFullScreenButton_dec","_fullScreenPadding_dec","_scaleToFitIdeal_dec","_useIdealBounds_dec","_heightForDeviceOrientation_dec","_widthForDeviceOrientation_dec","_isPortrait_dec","_externalBounds_dec","_isMobile_dec","_canToggleRelativeMode_dec","_relativeToggleLabel_dec","_staticBoundsWithDetails_dec","_defaultBounds_dec","_xDimension_dec","_supportsMultipleYColumns_dec","_hasStackedDiscreteBar_dec","_hasStackedBar_dec","_hasStackedArea_dec","_hasScatter_dec","_hasMarimekko_dec","_hasDiscreteBar_dec","_hasSlopeChart_dec","_hasLineChart_dec","_isOnStackedDiscreteBarTab_dec","_isOnMarimekkoTab_dec","_isOnStackedBarTab_dec","_isOnDiscreteBarTab_dec","_isOnSlopeChartTab_dec","_isOnStackedAreaTab_dec","_isOnScatterTab_dec","_isOnLineChartTab_dec","_isStackedDiscreteBar_dec","_isMarimekko_dec","_isStackedBar_dec","_isDiscreteBar_dec","_isSlopeChart_dec","_isStackedArea_dec","_isScatter_dec","_isLineChart_dec","_displayTitle_dec","_defaultTitle_dec","_yColumnsFromDimensionsOrSlugsOrAuto_dec","_axisDimensions_dec","_defaultSourcesLine_dec","_inputColumnsWithSources_dec","_inputColumnSlugs_dec","_timeTitleSuffix_dec","_isOnScatterWithTimeOverride_dec","_inputCategoricalColorColumnSlug_dec","_inputNumericColorColumnSlug_dec","_inputColorColumnSlug_dec","_inputSizeColumnSlug_dec","_inputXColumnSlug_dec","_inputYColumnSlug_dec","_inputYColumnSlugs_dec","_yColumnsFromDimensions_dec","_areHandlesOnSameTime_dec","_hasTimeline_dec","_currentTitle_dec","_shouldAddXIndicatorLabelToTitle_dec","_shouldAddChangeInPrefixToTitle_dec","_shouldAddTimeSuffixToTitle_dec","_shouldAddEntitySuffixToTitle_dec","_currentSubtitle_dec","_validChartTypeSet_dec","_validChartTypes_dec","_projectionColumnInfoBySlug_dec","_detailRenderers_dec","_detailsMarkerInSvg_dec","_displaySlug_dec","_defaultSlug_dec","_setDimensionsFromConfigs_dec","_setDimensionsForProperty_dec","_addDimension_dec","_filledDimensions_dec","_dimensionSlots_dec","_timelineHandleTimeBounds_dec","_validDimensions_dec","_ensureValidConfigWhenEditing_dec","_validateEntitySelectorState_dec","_syncEntitySelectionBetweenChartAndMap_dec","_onChartSwitching_dec","_ensureEntitySelectionIsSensibleForTab_dec","_ensureTimeHandlesAreSensibleForTab_dec","_entitySelector_dec","_ensureHandlesAreOnDifferentTimes_dec","_ensureHandlesAreOnSameTime_dec","_hasFatalErrors_dec","_hasOWIDLogo_dec","_shouldLinkToOwid_dec","_isSingleTimeSelectionActive_dec","_onlyTimeRangeSelectionPossible_dec","_onlySingleTimeSelectionPossible_dec","_isSingleTimeMapAnimationActive_dec","_isSingleTimeScatterAnimationActive_dec","_closestTimelineMaxTime_dec","_closestTimelineMinTime_dec","_endHandleTimeBound_dec","_startHandleTimeBound_dec","_hasTimeDimensionButTimelineIsHidden_dec","_hasTimeDimension_dec","_times_dec","_isInIFrame_dec","_loadingDimensions_dec","_newSlugs_dec","_whatAreWeWaitingFor_dec","_isReady_dec","_hasData_dec","_applyOriginalSelectionAsAuthored_dec","_applyOriginalFocusAsAuthored_dec","_showAdminControls_dec","_isUserLoggedInAsAdmin_dec","_isAdmin_dec","_isAdminObjectAvailable_dec","_createNarrativeChartUrl_dec","_focusableSeriesNames_dec","_chartSeriesNames_dec","_chartStateExceptMap_dec","_facetChartInstance_dec","_dataTableSelection_dec","_shouldShowSelectionOnlyInDataTable_dec","_hasArchivedPage_dec","_isOnArchivalPage_dec","_hasChartThatShowsAllEntities_dec","_showSeriesLabels_dec","_isOnChartOrMapTab_dec","_isOnTableTab_dec","_isOnMapTab_dec","_isOnChartTab_dec","_hasChartTab_dec","_resetToDefaultTab_dec","_defaultTab_dec","_defaultChartType_dec","_activeChartType_dec","_updateAuthoredVersion_dec","_setAuthoredVersion_dec","_dataTableSlugs_dec","_isDev_dec","_setTimeFromTimeQueryParam_dec","_populateFromQueryParams_dec","_filteredTableForDownload_dec","_tableForDownload_dec","_tableForDisplay_dec","_tableForDisplayBeforeEntityFilter_dec","_tableForSelection_dec","_tableAfterAllTransformsAndFilters_dec","_tableAfterAuthorTimelineAndActiveChartTransform_dec","_tableAfterAuthorTimelineAndEntityFilter_dec","_tableAfterColorAndSizeToleranceApplication_dec","_object_dec","_updateFromObject_dec","_GrapherState","includeDetails","_shouldIncludeDetailsInStaticExport","staticSVG","colorScaleConfig","visibleEntities","dataSlugs","originalTimeSlugs","ySlug","annotationSlugs","hasSingleEntity","editPath","adminPath","adminUrl","currentUrl","endMark","missingColumns","colorSlug","sizeSlug","mapColumnSlugs","isChartTypeThatShowsAllEntities","_oldTab","shouldSyncSelection","entitySelector","disposers","validDimensions","validProperties","newConfigs","newDimensions","configs","subtitleDetails","noteDetails","yAxisDetails","xAxisDetails","shouldIncludeDetailsInStaticExport","nonProjectionSlugs","findHistoricalSlugForProjection","validChartTypes","showEntityAnnotation","showTimeAnnotation","showChangeInPrefix","appendAnnotationField","xAxisLabel","entityStr","uniqueDatasetNames","renderToHtmlString","_isExportingToSvgOrPng","isOnLineChartTab","isOnSlopeChartTab","hideRelativeToggle","areHandlesOnSameTime","hasSingleEntityInFacets","hasSingleMetricInFacets","isOnMarimekkoTab","isStackedChartSplitByMetric","_externalBounds","initialOptions","isEditor","isExportingToSvgOrPng","externalBounds","widthForDeviceOrientation","heightForDeviceOrientation","windowInnerWidth","windowInnerHeight","fullScreenPadding","peerCountries","isOnStackedDiscreteBarTab","isOnStackedAreaTab","isOnStackedBarTab","selectedFacetStrategy","hasFacetStrategy","defaultBounds","staticBounds","idealPixelCount","hasRelatedQuestion","relatedQuestion","authorsVersion","authoredConfig","currentSelectedEntityNames","originalSelectedEntityNames","currentFocusedSeriesNames","originalFocusedSeriesNames","parentChartSlug","queryParamsForParentChart","combinedQueryParams","selectedCountryNamesInForeground","countriesInRegion","shouldShowPanel","chartTypeName","GrapherState","GuidedChartContext","useMaybeGlobalGrapherStateRef","localRef","React.useRef","refToUse","useGuidedChartLinkHandler","buildArchiveGuidedChartSrc","guidedUrl","mergedQuery","updatedUrl","FetchingGrapher","downloadedConfig","setDownloadedConfig","fetchAndApplyConfig","fetchedConfig","mergedConfig","unstable_batchedUpdates","fetchData","useCombinedRefs","VerticalScrollContainer","React.forwardRef","scrollingShadows","contentsId","scrollLock","scrollContainerRef","scrollBottom","useScrollBounds","useScrollLock","ScrollingShadow","getShadowOpacity","maxOpacity","scrollDistance","background","onScrollTop","onScrollBottom","scrollHeight","pendingUpdate","onScrollThrottled","onWheel","prevent","_updateMetric_dec","_onMetricSelectionChange_dec","_highlightLabel_dec","_onMenuMouseDown_dec","_unblockHover_dec","_blockHover_dec","_onHover_dec","_onSearchBlur_dec","_onSearchFocus_dec","_focusSearch_dec","_onKeyDown_dec","_clearSearchInput_dec","_focusOptionDirection_dec","_showDoneButton_dec","_focusedOption_dec","_selectionSet_dec","_selection_dec","_pickerTable_dec","_grapherTable_dec","_entitiesWithMetricValue_dec","_populateLocalEntity_dec","_availableEntitiesForCurrentView_dec","_activePickerMetricColumn_dec","_metricTable_dec","_selectedMetricDropdownOption_dec","_metricDropdownOptions_dec","_metricOptions_dec","_pickerColumnDefs_dec","_sortOrder_dec","_metric_dec","_isDropdownMenu_dec","_EntityPicker_decorators","toggleSort","EntityPicker","entityNameColumnInPickerColumnDefs","userRegionNames","metricTable","plotValue","localEntitiesIndex","entitiesWithMetricValue","unselected","currentToken","selectedDebugMessage","PickerOption","optionWithMetricValue","innerRef","hasDataForActiveMetric","metricValue","_playPrevious_dec","_playNext_dec","_playIndexCommand_dec","SlideShowController","slides","slide","isAtLeastReact17","reactVersion","reactMajor","setCause","seenErrors","recurse","captureReactException","componentStack","errorBoundaryError","INITIAL_STATE","ErrorBoundary","beforeCapture","onError","showDialog","handled","onMount","onUnmount","React.createElement","React.isValidElement","renderGrapherIntoContainer","catalogUrl","reactRoot","setBoundsFromContainerAndRender","grapherConfigWithBounds","Sentry.ErrorBoundary","renderSingleGrapherOnGrapherPage","queryStrValue","enrichedConfig","ExplorerControlType","ExplorerChartCreationMode","DefaultNewExplorerSlug","ExplorerControlTypeRegex","UNSAVED_EXPLORER_DRAFT","UNSAVED_EXPLORER_PREVIEW_QUERYPARAMS","EMBEDDED_EXPLORER_DELIMITER","EXPLORER_CONSTANTS_DELIMITER","EMBEDDED_EXPLORER_GRAPHER_CONFIGS","EMBEDDED_EXPLORER_PARTIAL_GRAPHER_CONFIGS","EMBEDDED_EXPLORER_VIEW_CONFIG_IDS","EXPLORER_EMBEDDED_FIGURE_SELECTOR","ExplorerContainerId","EXPLORERS_ROUTE_FOLDER","EXPLORERS_PREVIEW_ROUTE","CellHasErrorsClass","GridBoolean","GRID_NODE_DELIMITER","GRID_CELL_DELIMITER","GRID_EDGE_DELIMITER","Origin","BooleanCellDef","StringCellDef","StringDeclarationDef","EnumCellDef","RootKeywordCellDef","NumericCellDef","NumericOrAutoCellDef","IntegerCellDef","SubTableHeaderCellDef","SubTableValueCellDef","MatchUrlsOnlyRegex","UrlCellDef","AbsoluteOrRelativeUrlRegex","AbsoluteOrRelativeUrlCellDef","NothingGoesThereCellDef","CommentCellDef","WorkInProgressCellDef","SlugDeclarationCellDef","FrontierCellClass","SlugsDeclarationCellDef","EtlPathCellDef","IndicatorIdOrEtlPathCellDef","SlugOrIndicatorIdOrEtlPathCellDef","IndicatorIdsOrEtlPathsCellDef","_customOnChange_dec","AVAILABLE_OPTION_CLASS","UNAVAILABLE_OPTION_CLASS","SELECTED_OPTION_CLASS","EXPLORER_DROPDOWN_CLASS","HIDDEN_CONTROL_HEADER_CLASS","ExplorerControlBar","showControls","closeControls","mobileCloseButton","showMobileControls","ExplorerDropdown","dropdownOptions","selectedOption","ExplorerControlPanel","explorerSlug","available","isCheckbox","onChangeValue","hideTitle","displayTitle","optionsGroup","isBlankLine","didYouMean","caseSensitive","thresholdAbsolute","maximumEditDistanceToBeBestMatch","closestMatch","optionIndex","editDistance","getEditDistance","MAX_INT","stringA","stringB","maxInt","aLength","bLength","bIndex","aIndex","colMin","minJ","maxJ","delimitedToMatrix","delimited","rowDelimiter","columnDelimiter","tsvToMatrix","_cellDef_dec","_subTableParseResults_dec","GridCell","rootDefinition","grammar","firstWordOnLine","isFirstWordAKeyword","positionalCellTypeDef","pointerRow","subTableHeaderRow","parentKeyword","cellTerminalTypeDefinition","isCellInHeader","headerKeyword","subTableDef","headerCellDef","headerGrammar","valueCellDef","headerRow","isToTheImmediateRightOfLastFullCell","subTable","cellDef","optionKeywords","requirementsDescription","catchAllCellDef","catchAllKeywordRegex","regexResult","catchAllRegexResult","guess","showArrow","hasSuggestions","terminalOptions","firstOption","firstOptionName","requirements","GridProgram","tsv","lastCommit","lastLine","hits","keyword","blockRowNumber","keywordIndex","rowNumber","ColumnGrammar","toTerminalOptions","keywords","GrapherGrammar","parsedValue","omitEmptyStringValues","omitEmptyObjectValues","R.omitBy","R.isPlainObject","R.isEmpty","_choicesWithAvailability_dec","_availableChoiceOptions_dec","_allChoiceOptions_dec","_choiceNames_dec","_setValuesFromChoiceParams_dec","__setValue_dec","_setValueCommand_dec","_diffBetweenUserSettingsAndConstrained_dec","parseVariableIds","makeChoicesMap","headerLine","choiceNameAndType","choiceName","choiceType","removeChoiceControlTypeInfo","dropColumnTypes","makeCheckBoxOption","_DecisionMatrix","choiceParams","controlType","invalidState","trimAndParseObject","choiceValue","choiceMap","modifiedQuery","queryColumn","optionName","constrainedOptions","selectedRow","DecisionMatrix","ExplorerFormControlCellDeff","ExplorerGrammar","EXPLORER_FILE_SUFFIX","ExplorerRootDef","ExplorerProgram","makeFullPath","blockIdString","explorerGrapherConfig","decisionMatrix","grapherId","chartCreationMode","FromVariableIds","FromGrapherId","FromExplorerTableColumnSlugs","grapherIdColumn","tableSlugColumn","hasGrapherId","hasCsvData","colDefsRows","tableSlugs","columnDefinitions","parseColumnDefs","idOrSlug","remoteTable","existingTableDef","newCols","colDefsRow","selectedGrapherRow","partialConfigs","_.merge","relatedQuestionUrl","relatedQuestionText","yVariableIds","xVariableId","colorVariableId","sizeVariableId","makeSlugDimension","makeVariableIdDimension","parsedId","ySlugList","slugDimYList","slugDimX","slugDimColor","slugDimSize","yVariableIdList","varDimYList","varDimX","varDimColor","varDimSize","tableDef","tableDefRow","inlineData","owidDatasetSlug","trimmedRow","block","covidMetricFromLegacyQueryParams","legacyIntervalToNewValue","covidIntervalFromLegacyQueryParams","legacyInterval","boolParamToString","legacyToCurrentCovidQueryParams","baseQueryParams","restQueryParams","urlContainsMetric","explorerQueryParams","legacyCovidMigrationSpec","baseQueryStr","explorerUrl","decodeURIComponentOrUndefined","transformQueryParams","oldQueryParams","transformMap","newQueryParams","oldParamName","newName","transformValue","getExplorerSlugFromUrl","EXPLORER_SLUG","co2QueryParamTransformMap","co2UrlMigration","energyQueryParamTransformMap","energyUrlMigration","covidUrlMigration","explorerUrlMigrationsById","explorerUrlMigrations","migrateExplorerUrl","_requiredColumnSlugs_dec","_entityPickerColumnDefs_dec","_showHeaderElement_dec","_closeControls_dec","_onResize_dec","_toggleMobileControls_dec","_showExplorerControls_dec","_currentUrl_dec","_queryParams_dec","_currentChoiceParams_dec","_setSlide_dec","_updateGrapherFromExplorerUsingColumnSlugs_dec","_updateGrapherFromExplorerUsingVariableIds_dec","_updateGrapherFromExplorerUsingGrapherId_dec","_updateGrapherFromExplorer_dec","_enableMapSelection_dec","_setGrapherTable_dec","_reactToUserChangingSelection_dec","_partialGrapherConfigsBySlug_dec","_partialGrapherConfigsByVariableId_dec","_grapherConfigs_dec","_setGrapher_dec","_Explorer_decorators","LivePreviewComponent","useLocalStorage","setUseLocalStorage","renderedProgram","setRenderedProgram","hasLocalStorage","setHasLocalStorage","updateProgram","localStorageProgram","program","previousProgram","Explorer","renderLivePreviewVersion","isNarrow","_Explorer","choiceTitle","currentlySelectedGrapherRow","isOnArchivalPage","assetMaps","partialGrapherConfigs","chartConfigIdByViewId","explorerConstants","urlMigrationSpec","explorerUrlMigrationId","columnDefsWithoutTableSlug","configsBySlug","transformParams","dataSlugsForTransform","indicatorId","partialGrapherConfig","onResizeThrottled","resizeObserver","oldSelectedRow","oldGrapherParams","newGrapherParams","previousTab","currentTab","viewId","grapherConfig","owidTable","dimensionsOfSelectedRow","variableIdDimensions","slugDimensions","getColumnDef","baseSlugs","allRequiredSlugs","existingSlugs","missingColumnDefs","manuallyProvidedDef","oldIsNarrow","grapherContainer","showExplorerControls","showHeaderElement","archiveUrl","tableSlugToLoad","metric","columnDefsByTableSlug","grapherTableSlug","allColumnDefs","columnDefsBySlug","discardColumnTypes","buildExplorerProps","_.isArray","getIndexName","DEFAULT_SEARCH_PLACEHOLDER","pickEntitiesForChartHit","hit","selectedRegionNames","R.intersection","generateGrapherTabQueryParam","hasEntities","generateGrapherTimeQueryParam","timeBounds","timeMode","toGrapherQueryParams","generateQueryStrForChartHit","grapherParams","isExplorerView","isMultiDimView","viewQueryStr","grapherQueryStr","queryStrList","constructChartUrl","overlayQueryStr","queryParts","constructChartInfoUrl","constructSearchResultUrl","optionsQueryStr","constructPreviewUrl","isMinimal","imageWidth","imageHeight","fullQueryStr","CHARTS_INDEX","PAGES_INDEX","DATA_CATALOG_ATTRIBUTES","setToFacetFilters","facetSet","formatDisjunctiveFacetFilters","facets","formatConjunctiveFacetFilters","formatFeaturedMetricFacetFilter","formatCountryFacetFilters","requireAllCountries","facetFilters","formatTopicFacetFilters","topics","serializeSet","getFilterNamesOfType","filters","getFilterIcon","countryCode","findTopicAndRegionFilters","allRegionsNames","allTopics","selectedTopics","synonymMap","sortOptions","searchTerm","searchCountryTopics","countryFilters","createCountryFilter","topicFilters","topic","createTopicFilter","synonyms","synonym","filtersFromSynonym","R.groupBy","R.flatMap","filtersOfType","R.prop","R.uniqueBy","suggestFiltersFromQuerySuffix","selectedCountryNames","queryWords","splitIntoWords","matchedFilters","matchStartIndex","wordsToSearch","unmatchedQuery","countryMatches","topicMatches","allMatches","exactMatches","partialMatches","sortedPartialMatches","primaryFilters","createQueryFilter","createFilter","createFocusInputOnClickHandler","checkTargetEquality","isCurrentRef","getSearchAutocompleteId","getSearchAutocompleteItemId","getUrlParamNameForFilter","getItemUrlForFilter","filterParam","SEARCH_BASE_PATH","getPageTypeNameAndIcon","pageType","SiteAnalytics","eventContext","filterType","filterName","suggestions","suggestionsTypes","suggestionsCount","targetNext","chartUrl","staticVizName","surveyName","responseId","experimentArm","dataTrackAttr","dataGrapherUrlAttr","trackedElement","grapherUrlRaw","grapherUrlObj","browserLanguages","htmlElement","initialLang","sendTranslationAnalyticsEvent","prevLang","newLang","titleElement","runMonkeyPatchForGoogleTranslate","nodeToString","originalRemoveChild","originalInsertBefore","faThreads","faCreativeCommons","faXTwitter","faLinkedin","faInstagram","faFacebook","faBluesky","faGithub","faYoutube","faMastodon","PROD_URL","SMALL_BREAKPOINT_MEDIA_QUERY","MEDIUM_BREAKPOINT_MEDIA_QUERY","DATA_INSIGHTS_ATOM_FEED_NAME","SOCIALS","RSS_FEEDS","ABOUT_LINKS","GalleryArrowDirection","MOST_RECENT_DATA_INSIGHT","SECOND_MOST_RECENT_INSIGHT","THIRD_MOST_RECENT_INSIGHT","FOURTH_MOST_RECENT_INSIGHT","FIFTH_MOST_RECENT_INSIGHT","SIXTH_MOST_RECENT_INSIGHT","SEVENTH_MOST_RECENT_INSIGHT","dataInsightIndexToIdMap","GalleryArrow","GrapherImage","AllChartsListItem","chart","cachedGetVariableMetadata","isPreviewing","cachedGetGrapherConfigByUuid","grapherConfigUuid","configFileName","fallbackUrl","IS_SERVER2","useMediaQuery","initializeWithValue","getMatches","query2","setMatches","matchMedia","useIntersectionObserver","rootMargin","freezeOnceVisible","initialIsIntersecting","setRef","thresholds","isIntersecting","threshold2","prevRef","_a2","useIsClient","isClient","setClient","useIsMounted","isMounted","useResizeObserver","previousSize","boxProp","extractSize","sizeType","useResolvedSettings","DimensionItem","_.noop","Text","DimensionDropdown","groupLabel","groupChoices","Collection","MultiDimDropdowns","availableSettings","resolvedSettings","collapsedCount","isExpanded","setIsExpanded","dimensionsArray","needsToggle","MultiDimEmbedSettingsPanel","isSmallScreen","dropdownsRef","setCollapsedCount","calculateCollapsedCount","dropdownsContainer","gap","toggleButtonWidth","dropdowns","totalWidthAllDropdowns","dropdownWidth","newCollapsedCount","fittingDropdowns","availableWidthWithToggle","dropdown","totalWidthWithThisDropdown","analytics","useBaseGrapherConfig","additionalConfig","useMultiDimAnalytics","oldSettingsRef","newView","MultiDim","localGrapherConfig","grapherStateRef","grapherDataLoader","grapherContainerRef","useElementBounds","baseGrapherConfig","hasControls","setSettings","shouldPreserveTab","setShouldPreserveTab","additionalQueryParams","setAdditionalQueryParams","handleBaseSettingsChange","handleSettingsChange","handleGuidedChartSettingsChange","guidedChartContext","useContext","hasRegistered","ignoreFetchedData","adminEditPath","analyticsContext","viewGrapherConfig","Sentry.captureException","_renderInteractiveFigure_dec","figuresFromDOM","MultiEmbedder","figure","configUrl","fetchedGrapherPageConfig","grapherPageConfig","embedUrlRaw","multiDimConfig","mdimConfigUrl","narrativeChartInfoRaw","narrativeChartInfo","isExplorer","isMultiDim","isNarrativeChart","embedType","MultiEmbedderSingleton","useTriggerWhenClickOutside","useEmbedChart","activeChartIdx","refChartContainer","useTriggerOnEscape","handleEscape","throttleTime","setBounds","updateBoundsImmediately","updateBoundsThrottled","_.throttle","useMobxStateToReactState","mobxStateGetter","enabled","useWindowQueryParams","navigation","lastQueryString","currentQueryString","useSyncExternalStore","GrapherFigureView","slugConfigUrl","GrapherWithFallback","hasBeenVisible","imageFallback","DocumentContext","createContext","useDocumentContext","RELATED_CHARTS_CLASS_NAME","RelatedCharts","charts","showKeyChartsOnly","setActiveChartIdx","chartsToShow","sortedCharts","isFirstSlideActive","isLastSlideActive","activeChart","activeChartSlug","onClickItem","singleChartView","multipleChartsView","Subscribable","defaultTimeoutProvider","intervalId","TimeoutManager","#provider","#providerCalled","timeoutManager","systemSetTimeoutZero","isServer","functionalUpdate","isValidTimeout","timeUntilStale","updatedAt","staleTime","resolveStaleTime","resolveEnabled","matchQuery","exact","fetchStatus","queryKey","stale","hashQueryKeyByOptions","partialMatchKey","matchMutation","status","mutationKey","hashKey","replaceEqualDeep","isPlainArray","aSize","bItems","bSize","equalItems","aItem","bItem","shallowEqualObjects","hasObjectPrototype","replaceData","prevData","addToEnd","addToStart","skipToken","ensureQueryFn","shouldThrowError","throwOnError","FocusManager","#focused","#cleanup","#setup","setup","pendingThenable","_resolve","_reject","defaultScheduler","createNotifyManager","transactions","notifyFn","batchNotifyFn","scheduleFn","originalQueue","notifyManager","OnlineManager","#online","onOnline","onlineListener","offlineListener","online","onlineManager","defaultRetryDelay","failureCount","canFetch","networkMode","CancelledError","createRetryer","isRetryCancelled","continueFn","isResolved","cancelOptions","cancelRetry","continueRetry","canContinue","canStart","pause","continueResolve","promiseOrValue","initialPromise","retryDelay","shouldRetry","Removable","#gcTimeout","newGcTime","Query","__privateAdd","_Query_instances","_initialState","_revertState","_cache","_client","_retryer","_defaultOptions","_abortSignalConsumed","__privateSet","__privateGet","getDefaultState","defaultState","successState","__privateMethod","dispatch_fn","setStateOptions","addSignalProperty","fetchFn","queryFn","queryFnContext","queryFnContext2","context2","fetchState","dataUpdatedAt","hasData","initialDataUpdatedAt","QueryObserver","_QueryObserver_instances","_currentQuery","_currentQueryInitialState","_currentResult","_currentResultState","_currentResultOptions","_currentThenable","_selectError","_selectFn","_selectResult","_lastQueryWithDefinedData","_staleTimeoutId","_refetchIntervalId","_currentRefetchInterval","_trackedProps","shouldFetchOnMount","executeFetch_fn","updateTimers_fn","shouldFetchOn","clearStaleTimeout_fn","clearRefetchInterval_fn","prevOptions","prevQuery","updateQuery_fn","shouldFetchOptionally","updateStaleTimeout_fn","nextRefetchInterval","computeRefetchInterval_fn","updateRefetchInterval_fn","shouldAssignObserverCurrentProperties","onPropTracked","defaultedOptions","prevResult","prevResultState","prevResultOptions","queryInitialState","isPlaceholderData","fetchOnMount","fetchOptionally","errorUpdatedAt","skipSelect","placeholderData","selectError","isFetching","nextResult","isStale","finalizeThenableIfPossible","recreateThenable","prevThenable","shouldNotifyListeners","notifyOnChangeProps","notifyOnChangePropsValue","includedProps","typedKey","notify_fn","nextInterval","notifyOptions","shouldLoadOnMount","optimisticResult","infiniteQueryBehavior","pages","oldPages","oldPageParams","currentPage","cancelled","fetchPage","page","maxPages","addTo","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","Mutation","_Mutation_instances","_observers","_mutationCache","onContinue","mutationFnContext","restored","isPaused","MutationCache","#mutations","#scopes","#mutationId","scopeFor","scopedMutations","firstPendingMutation","defaultedFilters","pausedMutations","QueryCache","#queries","queryHash","queryInMap","QueryClient","#queryCache","#mutationCache","#defaultOptions","#queryDefaults","#mutationDefaults","#mountCount","#unsubscribeFocus","#unsubscribeOnline","cachedData","queryCache","defaultedCancelOptions","promises","queryDefault","QueryClientContext","useQueryClient","queryClient","QueryClientProvider","IsRestoringContext","useIsRestoring","createValue","isReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","ensurePreventErrorBoundaryRetry","errorResetBoundary","useClearResetErrorBoundary","getHasError","suspense","ensureSuspenseTimers","originalStaleTime","willFetch","isRestoring","shouldSuspend","fetchOptimistic","useBaseQuery","Observer","isNewCacheEntry","shouldSubscribe","React.useSyncExternalStore","React.useCallback","unsubscribe","useQuery","SearchChartHitDataDisplay","_define_property","_define_property_1","_object_spread","_object_spread_props","_object_without_properties_loose","_object_without_properties_loose_1","_object_without_properties","getPropertyByPath","htmlCharacters","regexEscapedHtml","regexHasEscapedHtml","unescape","TAG_REPLACEMENT","getHighlightedParts","highlightedValue","highlightPostTag","highlightPreTag","splitByPreTag","splitByPostTag","createHighlightPartComponent","highlightedTagName","isHighlighted","nonHighlightedTagName","TagName","createHighlightComponent","HighlightPart","userProps","_userProps_highlightedTagName","_userProps_nonHighlightedTagName","_userProps_separator","_userProps_classNames","_$1","_$2","partIndex","isLastPart","subPart","subPartIndex","InternalHighlight","Highlight","_0_classNames","singleValue","Highlight$1","SearchChartHitHeader","isLarge","makeStateForKey","R.pick","searchQueryKeys","chartHitQueryKeys","numDataTableRowsPerColumn","queryCharts","liteSearchClient","countryFacetFilters","topicFacetFilters","datasetProductFacetFilters","datasetNamespaceFacetFilters","datasetVersionFacetFilters","datasetProducerFacetFilters","fmFacetFilter","queryDataInsights","hitsPerPage","hasCountry","PreviewVariant","SCATTER_THUMBNAIL_WIDTH","SCATTER_THUMBNAIL_HEIGHT","getTotalColumnCount","placedTabs","R.sumBy","makeSlotClassNames","baseName","mapGridSlotKeyToClassName","getPreviewType","isPrimaryTab","calculateScatterPreviewImageDimensions","useQueryChartInfo","isChartRecord","entityParam","constructChartAndPreviewUrlsForTab","imageDimensions","previewUrl","SearchChartHitSmall","entityForDisplay","hasUserPickedEntities","dataDisplayProps","downloadUrl","SearchChartHitDataTable","numRowsPerColumn","mainTime","shouldShowTimeInTitle","displayRows","shouldShowSwatch","shouldSpanBothColumns","Row","timePreposition","CaptionedLink","caption","CaptionedLinkOverlay","CaptionedTable","dataTableContent","numAvailableEntities","captionWithIcon","SearchChartHitThumbnail","hoverOverlayText","imgLoaded","setImgLoaded","imgError","setImgError","CaptionedThumbnail","isSmallSlot","SearchChartHitRichDataFallback","grapherTabs","grapherTab","NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT","NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_LARGE_VARIANT","SCATTER_NUM_DATA_TABLE_ROWS_PER_COLUMN_IN_MEDIUM_VARIANT","SearchChartHitRichData","isMediumScreen","isLargeVariant","pickedEntities","loadingStatus","useQuerySearchResultDataForChartHit","sourcesUrl","SearchChartHitHeaderActionButtons","RichDataContentPlaceholder","countryParam","chartParams","constructChartUrlForTab","constructPreviewUrlForTab","isScatter","RichDataContentMediumVariantPlaceholder","RichDataContentLargeVariantPlaceholder","GrapherThumbnailPlaceholder","primaryGrapherTab","grapherQueryParams","overwriteParams","omitParamsForChartUrl","slotIndex","previewParams","previewType","calculateLargePreviewImageDimensions","tabsWithSmallerFont","SearchChartHitComponent","SearchChartHitLarge","SearchChartHitMedium","Action","PopStateEventType","createBrowserHistory","createBrowserLocation","globalHistory","createLocation","createBrowserHref","createPath","getUrlBasedHistory","invariant","warning","createKey","getHistoryState","parsePath","parsedPath","hashIndex","searchIndex","getLocation","createHref","validateLocation","v5Compat","getIndex","handlePop","history","historyState","createURL","ResultType","stripBasename","nextChar","ABSOLUTE_URL_REGEX$1","isAbsoluteUrl","resolvePath","fromPathname","toPathname","oldPathname","resolvePathname","normalizeSearch","normalizeHash","relativePath","getInvalidPathError","dest","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","routePathnameIndex","toSegments","hasExplicitTrailingSlash","hasCurrentTrailingSlash","joinPaths","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","NavigationContext","LocationContext","RouteContext","useInRouterContext","useLocation","UNSAFE_invariant","React.useLayoutEffect","useNavigate","isDataRoute","useNavigateStable","useNavigateUnstable","dataRouterContext","future","navigator","routePathnamesJson","UNSAFE_getResolveToMatches","activeRef","DataRouterHook","DataRouterStateHook","useDataRouterContext","hookName","useRouteContext","route","useCurrentRouteId","thisRoute","logV6DeprecationWarnings","renderFuture","routerFuture","Router","basenameProp","locationProp","navigationType","staticProp","navigationContext","React.useMemo","locationContext","trailingPathname","createSearchParams","getSearchParamsForLocation","locationSearch","defaultSearchParams","REACT_ROUTER_VERSION","START_TRANSITION","startTransitionImpl","BrowserRouter","historyRef","setStateImpl","v7_startTransition","UNSAFE_logV6DeprecationWarnings","useSearchParams","defaultInit","defaultSearchParamsRef","hasSetSearchParamsRef","navigate","setSearchParams","nextInit","navigateOptions","newSearchParams","DEFAULT_SEARCH_STATE","stateToSearchParams","datasets","versions","producers","createBrowserLocalStorageCache","storage","namespaceKey","getStorage","getNamespace","setNamespace","removeOutdatedCacheItems","timeToLive","filteredNamespaceWithoutOldFormattedCacheItems","cacheItem","filteredNamespaceWithoutExpiredItems","currentTimestamp","exists","createNullCache","createFallbackableCache","createMemoryCache","keyAsString","createAlgoliaAgent","algoliaAgent","addedAlgoliaAgent","createAuth","appId","apiKey","authMode","credentials","getAlgoliaAgent","algoliaAgents","defaultAlgoliaAgent","createNullLogger","_message","EXPIRATION_DELAY","createStatefulHost","lastUpdate","isTimedOut","AlgoliaError","ErrorWithStackTrace","stackTrace","RetryError","ApiError","DeserializationError","DetailedApiError","shuffledArray","serializeUrl","queryParameters","queryParametersAsString","serializeQueryParameters","serializeData","request","requestOptions","serializeHeaders","baseHeaders","requestHeaders","requestOptionsHeaders","headers","serializedHeaders","deserializeSuccess","deserializeFailure","stackFrame","isNetworkError","isRetryable","isSuccess","stackTraceWithoutCredentials","stackFrameWithoutCredentials","modifiedHeaders","createTransporter","hosts","hostsCache","logger","baseQueryParameters","timeouts","requester","requestsCache","responsesCache","createRetryableOptions","compatibleHosts","statefulHosts","compatibleHost","hostsUp","hostsTimedOut","hostsAvailable","timeoutsCount","baseTimeout","retryableRequest","isRead","dataQueryParameters","retryableHosts","getTimeout","pushToStackTrace","response2","createRequest","createRetryableRequest","apiClientVersion","getDefaultHosts","createLiteClient","appIdOption","apiKeyOption","auth","transporter","searchMethodParams","getRecommendationsParams","legacyRequest","liteClient","createXhrRequester","getSearchQueryClient","getLiteSearchClient","SearchResultHeaderSkeleton","SearchChartHitMediumSkeleton","CaptionedThumbnailSkeleton","SearchDataResultsSkeleton","MAX_MEDIUM_RESULTS","MAX_SMALL_RESULTS","FeaturedMetrics","topicName","isDataPage","searchState","searchHref","hitIndex","getTotalOffset","STICKY_NAV_HEIGHT","HEADING_SCROLL_MARGIN","StickyNav","validLinks","scrollY","currentHeadingIndex","headingPositions","previousHeadingYPosition","KeyDataTable","datapageData","AboutThisData","hasFaq","hasDescriptionKey","attributionUnshortened","id_","AttachmentsContext","breadcrumbColorForCoverColor","coverColor","useLinkedAuthor","linkedAuthors","author","getLinkedDocumentUrl","linkedDocument","originalUrl","parsedUrl","useLinkedDocument","linkedDocuments","urlTarget","useLinkedChart","linkedCharts","linkType","parsedOriginalUrl","linkedChart","parsedResolvedUrl","resolvedUrl","useLinkedIndicator","linkedIndicators","linkedIndicator","useImage","imageMetadata","useDonors","donors","useLinkedNarrativeChart","linkedNarrativeCharts","useLinkedStaticViz","linkedStaticViz","DataCalloutContext","useCalloutValue","linkedCallouts","calloutContext","linkedCallout","getShortPageCitation","publishedAt","DebugContext","useDebug","BlockErrorBoundary","resetError","BlockErrorFallback","roundNumber","checkIsNumber","handleCallback","easeOut","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","handleCancelAnimationFrame","handleCancelAnimation","contextInstance","handleSetupAnimation","animationName","animationTime","lastStep","frameTime","animationProgress","animationType","isValidTargetState","targetState","positionX","positionY","animate","isValid","setTransformState","scaleDiff","positionXDiff","positionYDiff","newScale","newPositionX","newPositionY","getComponentsSizes","wrapperComponent","contentComponent","wrapperWidth","wrapperHeight","newContentWidth","newContentHeight","newDiffWidth","newDiffHeight","getBounds","diffWidth","diffHeight","centerZoomedOut","scaleWidthFactor","scaleHeightFactor","minPositionX","maxPositionX","minPositionY","maxPositionY","calculateBounds","boundLimiter","minBound","maxBound","handleCalculateBounds","getMouseBoundedPosition","limitToBounds","paddingValueX","paddingValueY","paddingX","paddingY","handleCalculateZoomPositions","mouseY","scaleDifference","calculatedPositionX","calculatedPositionY","newPositions","checkZoomBounds","minScale","maxScale","zoomPadding","enablePadding","scalePadding","minScaleWithPadding","isPanningStartAllowed","isInitialized","targetIsShadowDom","isWrapperChild","isAllowed","isExcludedNode","isPanningAllowed","isPanning","handlePanningSetup","handleTouchPanningSetup","oneFingerTouch","handlePanToBounds","xChanged","yChanged","mousePosX","mousePosY","handleNewPosition","getPanningClientPosition","transformState","lockAxisX","lockAxisY","getPaddingValue","disablePadding","isVelocityCalculationAllowed","velocityAnimation","disabledVelocity","isVelocityAllowed","velocity","getVelocityMoveTime","equalToMove","sensitivity","getVelocityPosition","newPosition","currentPosition","isLocked","minTarget","maxTarget","calculatedPosition","getSizeMultiplier","defaultMultiplier","handleCalculateVelocity","lastMousePosition","velocityTime","sizeMultiplier","distanceX","distanceY","velocityX","velocityY","handleVelocityPanning","alignmentAnimation","zoomAnimation","sizeX","sizeY","velocityAlignmentTime","alignAnimationTime","moveAnimationTime","finalAnimationTime","maxTargetX","minTargetX","maxTargetY","minTargetY","startState","alignAnimation","alignStep","customStep","currentPositionX","currentPositionY","handlePanningStart","handleAlignToBounds","customAnimationTime","handlePanning","handlePanningEnd","velocityDisabled","wrapperRect","contentRect","isZoomed","shouldAnimate","handleZoomToPoint","handleAlignToScaleBounds","mousePositionX","mousePositionY","__assign","__spreadArray","pack","initialSetup","baseClasses","createSetup","newSetup","validValue","validParameter","dataType","handleCalculateButtonZoom","smooth","targetScale","handleZoomToViewCenter","resetTransformations","onResetTransformation","initialTransformation","boundedPositions","getOffset","wrapperOffset","contentOffset","xOff","yOff","calculateZoomToNode","customZoom","nodeRect","nodeOffset","nodeLeft","nodeTop","nodeWidth","nodeHeight","zoomIn","zoomOut","setTransform","resetTransform","centerView","getCenterPosition","zoomToElement","getControls","getState","getContext","passiveSupported","makePassiveEventOption","matchPrefix","exclude","getTransformStyles","centerPositionX","centerPositionY","mergeRefs","isWheelAllowed","wheelDisabled","touchPadDisabled","getDeltaY","getDelta","customDelta","deltaY","getMousePosition","handleCalculateWheelZoom","getTarget","paddingEnabled","handleWheelZoomStop","previousWheelEvent","isPinchStartAllowed","isPinchAllowed","pinchStartDistance","calculateTouchMidPoint","firstPointX","firstPointY","secondPointX","secondPointY","getTouchDistance","calculatePinchZoom","currentDistance","pinchStartScale","touchProportion","wheelStopEventTime","wheelAnimationTime","handleWheelStart","onWheelStart","onZoomStart","handleWheelZoom","onZoom","wheel","smoothStep","zoomStep","mousePosition","isPaddingDisabled","isLimitedToBounds","handleWheelStop","onWheelStop","onZoomStop","hasStoppedZooming","getTouchCenter","totalX","totalY","handlePinchStart","handlePinchZoom","panX","panY","finalX","finalY","handlePinchStop","pinchMidpoint","handleDoubleClickStop","handleDoubleClickResetMode","getDoubleClickScale","handleDoubleClick","doubleClickStopEventTimer","isDoubleClickAllowed","ZoomPanPinch","currentDocument","currentWindow","isCentered","centerOnInit","hasTarget","entries_1","keysPressed","onPanningStart","onPanning","onPanningStop","onPinchingStart","onPinching","onPinchingStop","isDoubleTap","isPanningAction","isPinchAction","onTransformed","ctx_1","getContent","TransformWrapper","useImperativeHandle","styleInject","insertAt","css_248z","TransformComponent","wrapperClass","contentClass","wrapperStyle","wrapperProps","contentProps","cleanupWindowEvents","wrapperRef","contentRef","LightboxImage","alt","isLoaded","setIsLoaded","Lightbox","imgSrc","imgFilename","hideDownload","handleDownload","onContentClick","FloatingDownloadButton","containerClassName","generateResponsiveSizes","numberOfColumns","gridSpan2","gridSpan5","gridSpan6","gridSpan7","gridSpan8","containerSizes","LIGHTBOX_IMAGE_CLASS","makeSrc","Image","smallFilename","hasOutline","containerType","shouldLightbox","shouldHideDownloadButton","preferSmallFilename","imageData","smallImageData","isInteractive","imageFromHook","smallImageFromHook","activeImage","isLightboxOpen","setIsLightboxOpen","openLightbox","renderImageError","imageSrc","sourceProps","downloadButton","DataPageResearchAndWriting","relatedResearch","research","Thumbnail","iconMap","ArticleBlocks","ChartPreview","chartSlug","queryString","thumbnailUrl","LinkedA","SpanElements","chartLink","SpanCalloutElement","SpanElement","shouldRenderLinks","handleGuidedChartLinkClick","hasHydrated","setHasHydrated","MultiDimEmbed","setConfig","setError","fullWidthOnMobile","archiveIframeRef","resolvedUrlParsed","resolvedQueryParams","chartConfig","configType","isExplorerWithControls","isMultiDimWithControls","archivedChartVersion","shouldRenderArchiveEmbed","unregister","defaultHeight","ChartStory","setCurrentIndex","currentSlide","setCurrentSlide","showDetails","maxSlide","generateTestimonials","Testimonials","testimonials","Donors","donorsByLetter","donor","testimonialGenerator","letter","isOnlyEmptySpans","isNewline","isEmptySimpleText","Paragraph","layouts","getLayout","blockType","PullQuote","AriaAnnouncerContext","useAriaAnnouncer","GuidedChart","chartRef","multiDimData","setMultiDimData","announce","archiveChartRegistrationRef","registerArchiveChart","applyGuidedChartLinkToArchive","iframeEl","nextSrc","handledArchiveIframe","didUpdateChart","registrationData","thumbnail","HybridGdocLink","HybridChartLink","HybridExternalLink","HybridLinkList","Recirc","BASE_URL","SubscribeBanner","List","NumberedList","SDGGrid","tile","SDGTile","goal","sdgNumberPadded","sdgIconUrl","People","TableOfContents","toc","supertitle","isSubheading","MissingData","AdditionalChartsLink","AdditionalCharts","ProminentLink","documentErrorMessage","linkedChartErrorMessage","ExpandableParagraph","EXPANDED_HEIGHT","setHeight","isClosed","buttonVariant","propsWithoutStyles","toggleExpanded","currentContainer","currentButton","containerTop","buttonTop","contentStyles","TopicPageRelatedTopic","topicText","topicUrl","TopicPageIntro","relatedTopic","b$1","g$1","ee","te","ne","oe","se","ie","le","ae","ue","ce","de","he","fe","ve","NarrativeChart","viewMetadata","metadataStringified","parentQueryString","archivedParentUrl","linkTarget","KEY_INSIGHTS_CLASS_NAME","KEY_INSIGHTS_INSIGHT_PARAM","KEY_INSIGHTS_THUMBS_CLASS_NAME","KEY_INSIGHTS_THUMB_CLASS_NAME","KEY_INSIGHTS_SLIDES_CLASS_NAME","KEY_INSIGHTS_SLIDE_CLASS_NAME","KEY_INSIGHTS_SLIDE_CONTENT_CLASS_NAME","Thumb","KeyInsightsThumbs","titles","selectedId","setSelectedId","setSlides","setSlug","apiRef","thumbsRef","keyInsightsNode","tempSlides","insightParam","selectedSlideIdx","windowUrl","ScrollMenu","LeftArrow","RightArrow","itemId","Arrow","useLeftArrowVisible","scrollPrev","VisibilityContext","useRightArrowVisible","scrollNext","KeyInsights","insights","renderAssetForInsight","narrativeChartName","ResearchAndWritingLink","shouldHideThumbnail","shouldHideThumbnailSm","shouldHideSubtitle","shouldHideAuthors","shouldHideDate","parseLatestWorkToResearchAndWritingLink","latestWork","ResearchAndWriting","hideAuthors","hideDate","latest","primarySecondaryUrls","latestWorkLinks","seeAllResearchHref","shouldPrimarySecondaryOverflow","isFeaturedVariant","sortRelatedCharts","relatedCharts","sortedSlugs","chartBySlug","topCharts","AllCharts","topSlugs","firstTag","firstTagDataCatalogQueryString","sortedRelatedCharts","Video","shouldLoop","shouldAutoplay","poster","posterSrc","videoSrc","StaticViz","staticViz","setIsDownloadModalOpen","StaticVizDownloadModal","dialogTitleId","useId","downloadImage","fallbackName","makeImageSrc","imageOptions","hasMobile","createDimensionsLabel","dataOptions","handleOverlayClick","grapherLink","hasTwoImages","previewImage","onClickAnalytics","fallbackWidth","TableCell","Table","template","isFirstColumnHeader","isFirstRowHeader","columnIndex","actualRowIndex","ExplorerTile","ExplorerTiles","explorers","explorer","KeyIndicator","textBlock","HEIGHT_ANIMATION_DURATION_IN_SECONDS","tabIconMap","KeyIndicatorCollection","isBlockOpen","setBlockOpen","homepageMetadata","blocks","blockIndex","AccordionItem","updated","KeyIndicatorHeader","KeyIndicatorLink","mobileHeader","useHeight","headerId","contentId","isElementFullyVisible","isElementAtTopOfViewport","isContentVisible","activeTabType","viewHeight","Pill","PillRow","pill","NewsletterIcon","NewsletterSubscriptionHeader","showSubheading","NewsletterSubscriptionForm","idDataInsights","idBiweekly","frequencies","setFrequencies","isSubmittable","updateFrequencies","frequency","AnnouncementsIcon","OwidSocials","includeRss","NewsletterSubscriptionContext","FeaturedWorkTile","kicker","thumbnailSize","linkedDocumentFeaturedImage","thumbnailFilename","useIsOverflowing","isOverflowing","setIsOverflowing","overflowing","HomepageAnnouncement","announcement","announcementRef","latestPageLink","publishedAtDayJs","publishedAtFormatted","HomepageAnnouncements","announcements","DonationCta","HomepageIntro","featuredWork","tiles","w2","w3","w4","useTagGraphTopics","topicTagGraph","allAreas","getAllSearchableTopics","useTopicTagGraph","setTagGraph","autocompleteId","generateAutocompleteId","getAttributeValueByPath","record","getItemsCount","isPrimitive","_Object$keys","safelyRunOnBrowser","userAgents","createClickedEvent","_ref$items","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_s","_x","_r","_arr","isModernInsightsClient","_split$map","_split$map2","major","minor","v3","v2_4","v1_10","_excluded2","prim","chunkSize","mapToInsightsParamsApi","objectID","createSearchInsightsApi","searchInsights","canSendHeaders","sendToInsights","payloads","_items$0$__autocomple","authenticatedUserToken","userToken","_len4","_key4","_len5","_key5","_len6","_key6","_len7","_key7","_len8","_key8","createViewedEvents","itemsByIndexName","_acc$current$__autoco","indexName","isAlgoliaInsightsHit","VIEW_EVENT_DELAY","ALGOLIA_INSIGHTS_VERSION","ALGOLIA_INSIGHTS_SRC","sendViewedObjectIDs","onItemsChange","createAlgoliaInsightsPlugin","_getOptions","getOptions","providedInsightsClient","insightsInitParams","onSelectEvent","onActiveEvent","__autocomplete_clickAnalytics","insightsClient","loadInsights","previousItems","debouncedOnStateChange","setContext","onActive","setInsightsContext","normalizeUserToken","_error","_ref6","_ref7","getAlgoliaSources","_context$algoliaInsig","algoliaSourceBase","_ref8","insightsEvents","_ref9","createInternalCancelablePromise","onfulfilled","onrejected","createCallback","onfinally","cancelable","onResult","_hasWaitPromiseResolved","_waitPromise","createCancelablePromiseList","cancelablePromise","createConcurrentSafePromise","basePromiseId","latestResolvedId","latestResolvedValue","currentPromiseId","getNextActiveItemId","moveAmount","baseIndex","itemCount","defaultActiveItemId","numericIndex","getNormalizedSources","getSources","seenSourceIds","maybeSource","defaultSource","normalizedSource","_createForOfIteratorHelper","allowArrayLike","it","normalCompletion","didErr","_e2","getPluginSubmitPromise","pendingRequests","waitUntilComplete","_plugin$__autocomplet","_plugin$__autocomplet2","_plugin$__autocomplet3","getCollectionFromActiveItemId","accumulatedCollectionsCount","collections","collectionsCount","collectionIndex","getRelativeActiveItemId","isOffsetFound","previousItemsOffset","currentCollection","getActiveItem","itemInputValue","itemUrl","getAutocompleteElementId","autocompleteInstanceId","elementId","isOrContainsNode","isSamsung","mapToAlgoliaResponse","rawResults","_facetHits","facetHit","getNativeEvent","createStore","onStoreStateChange","getAutocompleteSetters","setActiveItemId","setQuery","setCollections","baseItemId","setStatus","getDefaultProps","pluginSubscribers","_props$id","_props$onStateChange","_x$onStateChange","_props$onSubmit","_x$onSubmit","_props$onReset","_x$onReset","nested","_x$onSelect","_x$onActive","_x$onResolve","windowReference","reshape","originalSourcesBySourceId","_props$plugins$reduce","sourcesBySourceId","reshapeSources","isDescription","isRequesterDescription","preResolve","itemsOrDescription","sourceId","contextParameters","_state$context$key","packed","searchClient","execute","requesterId","requests","_container$items","maybeDescription","responses","postResolve","lastStalledId","runConcurrentSafePromise","_ref$nextState","refresh","setters","_nextState$isOpen","_request","__automaticInsights","isSearchResponseWithAutomaticInsightsFlag","_store$getState$conte","_nextState$isOpen2","isPanelOpen","highlightedItem","triggerScrollIntoView","nodeItem","triggerOnActive","waitForSubmit","_excluded3","_excluded4","_excluded5","_excluded6","getPropGetters","getEnvironmentProps","providedProps","inputElement","formElement","panelElement","onMouseDownOrTouchStart","isAutocompleteInteraction","isTargetWithinAutocomplete","contextNode","getRootProps","getFormProps","handleSubmit","_providedProps$inputE","_providedProps$inputE2","getInputProps","_props$environment$na","_ref3$maxLength","activeItem","shouldFallbackKeyHint","enterKeyHint","_onKeyDown","getLabelProps","getListProps","getPanelProps","getItemProps","_item","_source","runPreCommand","getMetadata","_options$__autocomple","_options$__autocomple2","_options$__autocomple3","optionsKey","extraOptions","injectMetadata","_environment$navigato","_environment$navigato2","isMetadataEnabled","metadataContainer","headRef","getCompletion","_getActiveItem","stateReducer","_nextState","createAutocomplete","subscribers","propGetters","_state$context","_state$context$algoli","isAlgoliaInsightsPluginEnabled","subscribePlugins","_plugin$subscribe","insightsParams","htm","ClearIcon","getHTMLElement","mergeClassNames","accValue","mergeDeep","pickBy","TOUCH_EVENTS_ALIASES","setStyle","eventProxy","_this$_listeners","useCapture","nameLower","getNormalizedName","setProperties","setPropertiesWithoutEvents","getCreateDomElement","_ref$children","autocompleteScopeApi","getInputPropsCore","isDetached","createDomElement","LoadingIcon","pauseAnimations","SearchIcon","createAutocompleteDom","autocomplete","_ref$placeholder","setIsModalOpen","translations","rootProps","detachedContainer","detachedOverlay","submitButton","clearButton","loadingIndicator","inputWrapperPrefix","inputWrapperSuffix","inputWrapper","panelProps","panel","detachedSearchButtonQuery","detachedSearchButtonPlaceholder","detachedSearchButtonIcon","detachedSearchButton","detachedCancelButton","detachedFormContainer","createEffectWrapper","runEffect","effectCleanup","currentCleanups","currentEffects","createReactiveWrapper","reactives","reactive","HIGHLIGHT_PRE_TAG","HIGHLIGHT_POST_TAG","createAttributeSet","lastPart","parseAttribute","preTagParts","postTagParts","parseAlgoliaHitHighlight","htmlEscapes","hasLetterOrNumber","isPartHighlighted","_parts","_parts2","isNextHighlighted","isPreviousHighlighted","reverseHighlightedParts","parseAlgoliaHitReverseHighlight","parseAlgoliaHitSnippet","parseAlgoliaHitReverseSnippet","createRequester","fetcher","fetcherParams","_fetcherParams$reques","transformResponse","requesterParams","requestParams","getAppIdAndApiKey","APP_ID","API_KEY","fetchAlgoliaResults","_ref$userAgents","coreUserAgents","_getAppIdAndApiKey","searchParameters","resultIndex","_result$hits","_ref2$tagName","createReverseHighlightComponent","ReverseHighlight","createReverseSnippetComponent","ReverseSnippet","createSnippetComponent","Snippet","defaultClassNames","defaultRender","defaultRenderer","preactCreateElement","PreactFragment","getDefaultOptions","_core$id","panelContainer","panelPlacement","renderNoResults","renderer","detachedMediaQuery","core","containerElement","defaultedRenderer","defaultComponents","defaultTranslations","getPanelPlacementStyle","formRect","renderSearchBox","toggleAnimation","_element$firstChild","svgElement","renderPanel","sections","sourceIndex","_createEffectWrapper","cleanupEffects","runEffects","_createReactiveWrappe","runReactives","hasNoResultsSourceTemplateRef","optionsRef","onStateChangeRef","_onStateChangeRef$cur","_props$value$core$onS","_props$value$core","hasItems","hasNoResultsTemplate","lastStateRef","setPanelPosition","scheduleRender","environmentProps","panelContainerElement","debouncedRender","scrollablePanels","scrollablePanel","previousIsDetached","toggleModalClassname","isModalDetachedMql","hasModernEventListener","updatedOptions","_props$value$renderer","rendererProps","createAlgoliaRequester","getAlgoliaResults","addHighlightedAttribute","LOCAL_STORAGE_KEY","LOCAL_STORAGE_KEY_TEST","isLocalStorageSupported","getLocalStorage","createLocalStorage","createStorageApi","getTemplates","onTapAhead","getDefaultSubscribe","recentItem","createRecentSearchesPlugin","transformSource","lastItemsRef","_params$facetFilters","_params$hitsPerPage","createLocalStorageRecentSearchesPlugin","recentSearchesPlugin","defaultSearch","buildSynonymMap","otherTerms","termLower","otherTermsLower","alternatives","alternative","alternativeLower","countryNameLower","SearchFilterPill","nameLabel","AUTOCOMPLETE_CONTAINER_ID","DETACHED_MODE_MAX_WIDTH","DETACHED_MEDIA_QUERY","siteAnalytics","getItemUrl","prependSubdirectoryToAlgoliaItemUrl","FeaturedSearchesSource","algoliaItemTemplate","indexLabel","indexIcon","algoliaOnSelect","algoliaGetItemUrl","AlgoliaPagesSource","AlgoliaChartsSource","createFiltersSource","createProfileSource","onActivate","panelClassName","panelRootRef","rootRef","setSearch","userCountryNameRef","inputId","button","HomepageSearch","chartCount","topicCount","explorerCount","isRecord","areOptionsEqual","optionsA","optionsB","optionsAKeys","optionsBKeys","breakpointsA","breakpointsB","valueA","valueB","sortAndMapPluginToOptions","arePluginsEqual","pluginsA","pluginsB","optionA","optionB","isString","isBoolean","mathAbs","mathSign","deltaAbs","factorAbs","roundToTwoDecimals","arrayKeys","objectKeys","arrayLast","arrayLastIndex","arrayIsLastIndex","arrayFromNumber","startAt","objectsMergeDeep","objectA","objectB","mergedObjects","currentObject","areObjects","ownerWindow","Alignment","viewSize","predefined","measure","EventStore","removeListener","legacyMediaQueryList","Animations","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","timeStamp","timeElapsed","Axis","contentDirection","isRightToLeft","startEdge","getStartEdge","endEdge","getEndEdge","measureSize","Limit","reachedMin","reachedMax","reachedAny","removeOffset","Counter","loop","loopEnd","withinLimit","DragHandler","dragTracker","scrollBody","scrollTarget","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","snapForceBoost","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","emblaApi","downIfAllowed","down","addDragEvents","move","isFocusNode","forceBoost","allowedForce","targetChanged","baseForce","isMouseEvt","lastScroll","lastCross","diffScroll","diffCross","rawForce","forceFactor","friction","pointerDown","DragTracker","startEvent","lastEvent","readTime","readPoint","evtAxis","pointerMove","expired","pointerUp","diffDrag","diffTime","NodeRects","offsetTop","offsetLeft","PercentOfView","ResizeHandler","watchResize","nodeRects","observeNodes","containerSize","slideSizes","destroyed","readSize","defaultCallback","isContainer","slideIndex","lastSize","ScrollBody","offsetLocation","previousLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","seek","displacement","isInstant","settled","useBaseDuration","useDuration","useBaseFriction","useFriction","ScrollBounds","pullBackThreshold","edgeOffsetTolerance","frictionLimit","shouldConstrain","diffToEdge","diffToTarget","toggleActive","ScrollContain","contentSize","snapsAligned","containScroll","pixelTolerance","scrollBounds","snapsBounded","measureBounded","scrollContainLimit","findScrollContainLimit","snapsContained","measureContained","usePixelTolerance","snap","startSnap","endSnap","snapAligned","scrollBound","ScrollLimit","scrollSnaps","ScrollLooper","vectors","loopDistance","ScrollProgress","currentLocation","ScrollSnaps","alignment","slideRects","slidesToScroll","groupSlides","alignments","measureSizes","snaps","measureUnaligned","measureAligned","SlideRegistry","containSnaps","slideIndexes","slideRegistry","createSlideRegistry","groupedSlideIndexes","doNotContain","ScrollTarget","targetVector","minDistance","distances","findTargetSnap","ascDiffsToSnaps","matchingTargets","byIndex","diffToSnap","byDistance","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","SlideFocus","eventStore","watchFocus","focusListenerOptions","lastTabPressTime","registerTabPress","Vector1D","normalizeInput","Translate","previousTarget","SlideLooper","slideSizesWithGaps","ascItems","descItems","loopPoints","startPoints","endPoints","removeSlideSizes","slidesInGap","findSlideBounds","findLoopPoints","isEndEdge","slideBounds","altered","boundEdge","loopPoint","canLoop","otherIndexes","slideLocation","shiftLocation","SlidesHandler","watchSlides","mutationObserver","SlidesInView","intersectionEntryMap","inViewCache","notInViewCache","intersectionObserver","createInViewList","inView","SlideSizes","readEdgeGap","withEdgeGap","startGap","measureStartGap","endGap","measureEndGap","measureWithGaps","slideRect","SlidesToScroll","groupByNumber","byNumber","groupSize","bySize","rectB","rectA","edgeA","edgeB","gapA","gapB","currentSize","Engine","scrollAxis","inViewThreshold","dragHandler","scrollLooper","slideLooper","shouldSettle","withinBounds","hasSettled","hasSettledAndIdle","interpolatedLocation","engine","startLocation","scrollProgress","slidesInView","slideFocus","EventHandler","getListeners","emit","off","OptionsHandler","mergeOptions","optionsAtMedia","matchedMediaOptions","mediaOption","optionsMediaQueries","optionsList","mediaQueries","PluginsHandler","optionsHandler","activePlugins","EmblaCarousel","userOptions","userPlugins","pluginsHandler","mediaHandlers","reInit","reActivate","optionsBase","pluginList","pluginApis","storeElements","userContainer","userSlides","customSlides","createEngine","optionsWithoutLoop","activate","withOptions","withPlugins","selectedScrollSnap","deActivate","jump","canScrollNext","canScrollPrev","scrollSnapList","previousScrollSnap","slidesNotInView","internalEngine","slideNodes","useEmblaCarousel","storedOptions","storedPlugins","setEmblaApi","setViewport","newEmblaApi","normalizeClassNames","removeClass","addClass","ClassNames","snappedIndexes","inViewIndexes","selectedEvents","draggingEvents","inViewEvents","emblaApiInstance","allOptions","isDraggable","toggleDraggingClass","toggleSnappedClasses","toggleInViewClasses","toggleSlideClasses","classNameKey","addClassIndexes","removeClassIndexes","removeClassSlides","addClassSlides","newSnappedIndexes","newInViewIndexes","DataInsightDateline","highlightToday","highlightClassName","formattedDate","LatestDataInsights","latestDataInsights","dataInsights","dataInsight","emblaRef","selectedIndex","useDotButton","setCanScrollPrev","setCanScrollNext","DataInsightCard","firstImageIndex","firstImageBlock","otherBlocks","setSelectedIndex","setScrollSnaps","onDotButtonClick","onInit","LatestDataInsightsBlock","SocialLink","typeToIcon","Socials","Person","person","BESPOKE_COMPONENT_REGISTRY","loadCssIntoShadow","cssUrl","mountBespokeComponentInShadow","scriptUrl","cssPromise","jsPromise","mountContainer","BespokeComponent","disposeRef","setIsLoading","BespokeError","Expander","DataCatalogButton","buttonText","firstTagName","dataCatalogUrl","ResourcePanelIcon","ResourcePanel","Cta","asSpan","SearchDataInsightsResultsSkeleton","SearchDataInsightHitSkeleton","SearchDataInsightHit","MAX_DATA_INSIGHTS_RESULTS","FeaturedDataInsights","totalResults","BlockQueryClientProvider","ExploreDataSection","DEFAULT_TITLE","SECONDARY_CARDS","LTPTableOfContents","resolvedTitle","resourceSectionTitle","resourceCards","card","buildSearchHrefForCard","headingTitle","cardTitle","resultType","DataCallout","ArticleBlock","fontawesomeSvgCore","_interopDefaultLegacy","PropTypes__default","React__default","FALLBACK_DEFAULT_COUNTRY_NAMES","resolveCountriesToItems","resolveDefaultCountries","defaultCountryNames","allCountries","allByCode","CountryProfileSelector","setSearchTerm","defaultCountries","fuzzyCountrySearch","filteredCountries","profileBaseUrl","CountryProfileLink","NoResults","highlightMatch","highlightIndexes","ArticleBlockInternal","interactiveImages","sideBySideBlock","leftBlock","rightBlock","leftIsChart","rightIsChart","leftLinkedChart","rightLinkedChart","experimentState","setExperimentState","isWarning","layoutClassName","areControlsHidden","layoutSubtype","_block","firstBlock","separateHeading","leftIsMdim","rightIsMdim","shouldApplyCompensation","isCitationAUrl","shouldShowCitationInFooter","blockquoteProps","injectAutomaticSubscribeBanner","lastHeadingIndex","SubscribeBannerBlock","automaticSubscribeBanner","blocksToRender","MetadataSection","faqEntries","primaryTopic","citationShort","citationLong","currentYear","adaptedFrom","primaryTopicCitation","citationDatapage","TopicTags","topicTagsLinks","tagToSlugMap","processRelatedResearch","topicTags","getDatapageDataV2","OWID_DATAPAGE_CONTENT_ROOT_ID","DataPageV2Content","mergedGrapherConfig","stickyNavLinks","Footnote","htmlContent","triggerTarget","onEvent","Footnotes","definitionsArray","BreadcrumbSeparator","Breadcrumbs","LinkedAuthor","includeImage","Byline","isSecondToLast","OxfordAndGcdlLogos","SiteLogos","homeUrl","fetchVersions","useVersionsQuery","useArchiveVersions","versionsFileUrl","versionsObj","DATE_FORMAT","TIME_FORMAT","ArchiveText","tooltipContent","ArchiveDate","dayjsDate","ArchiveDataNavigation","ArchiveHeaderLogoBar","ArchiveDataNavigationBar","liveUrl","propsPreviousVersion","propsNextVersion","hasButtons","pageArchivalDate","previousVersion","nextVersion","currentVersionIdx","R.sortedIndexWith","ArchiveWritingNavigation","ArchiveWritingNavigationBar","isDrawerOpen","setIsDrawerOpen","hasRequestedVersions","setHasRequestedVersions","liveVersionHref","handleDrawerOpenChange","VersionsDrawer","formatVersionDateTime","versionDate","getCurrentVersionEntry","VersionItem","isLive","VersionsTimeline","currentArchivalDate","formattedDisplay","isFirstVersion","currentVersionEntry","versionsForTimeline","showTimeline","ModalOverlay","OwidArticleHeader","breadcrumbs","isDeprecated","coverStyle","breadcrumbColor","isOnArchivePage","OwidTopicPageHeader","OwidLinearTopicPageHeader","OwidGdocHeader","TOC_WRAPPER_CLASSNAME","isRecordTopViewport","getPreviousHeading","nextHeadingRecord","previousHeadings","headings","pageTitle","hideSubheadings","headingLevels","activeHeading","setActiveHeading","tocRef","toggleIsOpen","toggleIsOpenOnMobile","currentHeadingRecord","records","contentHeadings","appendixDivs","contentHeading","citationDescriptionsByArticleType","GdocPost","manualBreadcrumbs","postType","citationDescription","shortPageCitation","archivalPhrase","citationText","hasSidebarToc","headingVariant","shouldHideSubscribeBanner","bibtex","DeprecationNotice","LatestDataInsightCards","RelatedTopicsList","CopyLinkButton","DataInsightBody","shouldLinkTitle","DataInsightPage","AllTopicsSection","flattenedAreas","Homepage","AuthorHeader","bio","featuredImage","socials","AuthorWork","Author","AboutPage","shouldOverrideTitle","AboutNav","activeLinkRef","activeLink","nav","activeLinkOffset","navWidth","activeLinkWidth","AnnouncementPageContent","AnnouncementPage","Profile","instantiatedEntity","profileUrl","hasAdminCookie","AdminLinks","OwidGdoc","_specialTopic_dec","_onClose_dec","_onMessage_dec","_onEmail_dec","_onName_dec","_onSubmit_dec","_FeedbackForm_decorators","_onClickOutside_dec","_toggleOpen_dec","_FeedbackPrompt_decorators","sendFeedback","feedback","Feedback","vaccinationRegex","licensingRegex","citationRegex","translateRegex","fundingRegex","reusingChartsRegex","reusingDataRegex","visualizationToolRegex","logoRegex","teachingRegex","topicMatchers","vaccineNotice","copyrightNotice","citationNotice","translateNotice","fundingNotice","reusingChartsNotice","reusingDataNotice","visualizationToolNotice","logoNotice","teachingNotice","topicNotices","FeedbackForm","loading","specialTopic","autofocus","notices","FeedbackPrompt","runDetailsOnDemand","shouldFetchFromAdminApi","runtimeAssetMap","dodFetchUrl","showDod","dod","_allGrapherSlugsAndQueryStrings_dec","_DynamicCollection_decorators","DynamicCollection","allGrapherSlugsAndQueryStrings","newUrl","grapherUrl","slugsAndQueryStrings","originalSlugAndUrl","withoutIndex","SearchAutocompleteContext","useSearchAutocomplete","SearchInput","setLocalQuery","setGlobalQuery","onBackspaceEmpty","resetButton","hasUserInteracted","activeIndex","setActiveIndex","showSuggestions","setShowSuggestions","onSelectActiveItem","activeOptionId","handleFormClick","DebugProvider","AriaAnnouncerProvider","setAnnouncement","AriaAnnouncer","MultiDimSettingsPanel","isIframe","useTitleFragments","DataPageContent","relatedResearchCandidates","managerRef","grapherFigureRef","varDatapageData","setVarDatapageData","isLoadingView","setIsLoadingView","inputTableFetcher","updateGrapher","datapageDataPromise","mergedMetadata","grapherConfigPromise","loadDataPromise","grapherChangedParams","grapherCurrentTitle","hasTopicTags","faqEntriesForView","faq","MultiDimDataPageContent","SiteNavigationTopic","SiteNavigationTopics","activeArea","setActiveArea","numTopicColumns","setNumTopicColumns","SiteAbout","SiteResources","SiteSearchNavigation","SiteNavigationToggle","withCaret","shouldScrollIntoView","menuRef","menuBottomOffset","SiteMobileArea","toggleArea","areaRef","SiteMobileMenu","toggleMenu","HAS_DONATION_FLAG","SiteNavigation","hideDonationFlag","isOnHomepage","setActiveMenu","isActiveMobileMenu","closeOverlay","setSearchAsActiveMenu","autocompleteContainer","SiteHeaderNavigation","archiveInfo","archiveNavigation","DIGITS","UUID","bytes","unixTsMs","randA","randBHi","randBLo","V7Generator","randomNumberGenerator","getDefaultRandom","rollbackAllowance","BufferedCryptoRandom","defaultGenerator","uuidv7","uuidv7obj","_.shuffle","hydrateDataPageV2Content","hydrateRoot","getFootnoteContent","referencedEl","runFootnotes","footnoteContent","_.isNil","runSiteNavigation","siteNavigationElem","hydrateOwidGdoc","hydrateMultiDimDataPageContent","configObj","runSiteFooterScriptsForArchive"],"mappings":"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,KAAM,OACN,WAAY,SAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,WACN,KAAM,WACN,KAAM,WACN,WAAY,OAAA,EAEhB,CACI,KAAM,WACN,KAAM,SACN,KAAM,SACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,WACA,WACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,wBACN,KAAM,wBACN,WAAY,OAAA,EAEhB,CACI,KAAM,WACN,KAAM,OACN,KAAM,OACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,kBACN,KAAM,kBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,uBACN,KAAM,uBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,qBACN,KAAM,qBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,kBACN,KAAM,kBACN,WAAY,YACZ,QAAS,CAAC,MAAO,KAAK,CAAA,EAE1B,CACI,KAAM,WACN,KAAM,kBACN,KAAM,kBACN,WAAY,OAAA,EAEhB,CACI,KAAM,WACN,KAAM,iBACN,KAAM,iBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,iCACN,KAAM,iCACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,8BACN,KAAM,8BACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,oBACN,KAAM,kBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,YACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,SACN,KAAM,SACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,oBACN,KAAM,kBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,iBACN,KAAM,iBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,eACN,KAAM,eACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,eACN,KAAM,eACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,wBACN,KAAM,wBACN,WAAY,eACZ,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,WACN,KAAM,iBACN,KAAM,eACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,uBACN,KAAM,uBACN,WAAY,eACZ,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,gCACN,KAAM,gCACN,WAAY,eACZ,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,YACN,KAAM,YACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,KAAK,CAAA,EAExC,CACI,KAAM,WACN,KAAM,6BACN,KAAM,6BACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,mBACN,KAAM,mBACN,WAAY,OAAA,EAEhB,CACI,KAAM,WACN,KAAM,gBACN,KAAM,gBACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,UACN,KAAM,sBACN,KAAM,sBACN,WAAY,YACZ,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,SACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,UACN,KAAM,UACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,oBACN,KAAM,oBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,8BACN,KAAM,8BACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,YACN,KAAM,YACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,sCACN,KAAM,sCACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,sBACN,KAAM,sBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,gBACN,KAAM,gBACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,sBACN,KAAM,sBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,oBACN,KAAM,oBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,iBACN,KAAM,eACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,0BACN,KAAM,0BACN,WAAY,OAAA,EAEhB,CACI,KAAM,UACN,KAAM,sBACN,KAAM,sBACN,WAAY,YACZ,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,aACN,KAAM,aACN,WAAY,OAAA,EAEhB,CACI,KAAM,WACN,KAAM,gBACN,KAAM,gBACN,WAAY,OAAA,EAEhB,CACI,KAAM,WACN,KAAM,wBACN,KAAM,wBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,eACN,KAAM,eACN,WAAY,OAAA,EAEhB,CACI,KAAM,WACN,KAAM,yBACN,KAAM,yBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,gCACN,KAAM,gCACN,WAAY,eACZ,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,OACN,KAAM,OACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,QACN,KAAM,QACN,WAAY,YACZ,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,WACA,WACA,WACA,WACA,WACA,UAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,yBACN,KAAM,yBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,sBACN,KAAM,sBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,aACN,KAAM,aACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,0BACN,KAAM,yBACN,WAAY,UACZ,aAAc,EAAA,EAElB,CACI,KAAM,WACN,KAAM,WACN,KAAM,WACN,WAAY,OAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,SAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,OACN,KAAM,OACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,UACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,UACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,UACN,KAAM,gCACN,KAAM,8BACN,WAAY,YACZ,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,iCACN,KAAM,+BACN,WAAY,YACZ,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,UACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,UAAW,MACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAE/C,CACI,KAAM,UACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,MACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,mBACN,KAAM,mBACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,cACN,KAAM,cACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,SACN,UAAW,SACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,mBACN,KAAM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ACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,oBACN,KAAM,kBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,qCACN,KAAM,mCACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAEtD,CACI,KAAM,YACN,KAAM,gBACN,KAAM,cACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAEpE,CACI,KAAM,YACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAE/C,CACI,KAAM,YACN,KAAM,0BACN,KAAM,wBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAE7D,CACI,KAAM,YACN,KAAM,0BACN,KAAM,wBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,kBACN,KAAM,gBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,2CACN,KAAM,yCACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,MAAO,KAAK,EAC/B,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,yBACN,KAAM,uBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAE/C,CACI,KAAM,YACN,KAAM,sBACN,KAAM,oBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAEpE,CACI,KAAM,YACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAE7D,CACI,KAAM,YACN,KAAM,4BACN,KAAM,0BACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAE/C,CACI,KAAM,YACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,mBACN,KAAM,iBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAE/C,CACI,KAAM,YACN,KAAM,yBACN,KAAM,uBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,yBACN,KAAM,uBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,8BACN,KAAM,4BACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,2BACN,KAAM,yBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,8BACN,KAAM,4BACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,0BACN,KAAM,wBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,0BACN,KAAM,wBACN,WAAY,YACZ,UAAW,WACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,qCACN,KAAM,mCACN,WAAY,YACZ,UAAW,QACX,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAEtD,CACI,KAAM,YACN,KAAM,qCACN,KAAM,mCACN,WAAY,YACZ,UAAW,QACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,uCACN,KAAM,qCACN,WAAY,YACZ,UAAW,QACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,aACN,KAAM,0CACN,KAAM,wCACN,WAAY,YACZ,UAAW,QACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,2CACN,KAAM,yCACN,WAAY,YACZ,UAAW,QACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,aACN,KAAM,4CACN,KAAM,0CACN,WAAY,YACZ,UAAW,QACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,mBACN,KAAM,iBACN,WAAY,YACZ,UAAW,QACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,YACN,KAAM,8BACN,KAAM,4BACN,WAAY,YACZ,UAAW,QACX,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,SACN,KAAM,cACN,KAAM,YACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,SACN,KAAM,YACN,KAAM,UACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,SACN,KAAM,cACN,KAAM,YACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,SACN,KAAM,uCACN,KAAM,qCACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,MAAO,KAAK,EAC/B,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,SACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAE/C,CACI,KAAM,SACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,gBACN,KAAM,gBACN,WAAY,UACZ,WAAY,GACZ,aAAc,CAAC,KAAM,KAAK,CAAA,EAE9B,CACI,KAAM,MACN,UAAW,KACX,KAAM,aACN,KAAM,aACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,SAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,mCACN,KAAM,mCACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,YACN,KAAM,YACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,yBACN,KAAM,yBACN,WAAY,SAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,+BACN,KAAM,+BACN,WAAY,SAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,UACN,KAAM,UACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,SACN,KAAM,6BACN,KAAM,2BACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,MAAO,KAAK,EAC/B,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,SACN,KAAM,+BACN,KAAM,6BACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,MAAO,KAAK,EAC/B,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,SACN,KAAM,mCACN,KAAM,iCACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,MAAO,KAAK,EAC/B,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,2DACN,UAAW,sCACX,KAAM,uDACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,MAAO,KAAK,EAC/B,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,QACN,KAAM,qBACN,KAAM,mBACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,KAAK,CAAA,EAExC,CACI,KAAM,QACN,KAAM,kBACN,KAAM,gBACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAAA,EAE7D,CACI,KAAM,SACN,KAAM,0BACN,KAAM,wBACN,WAAY,YACZ,UAAW,KACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,WACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,UACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,MACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,UACN,KAAM,iBACN,KAAM,eACN,WAAY,YACZ,UAAW,MACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,UACN,KAAM,8BACN,KAAM,4BACN,WAAY,YACZ,UAAW,MACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,UACN,KAAM,eACN,KAAM,aACN,WAAY,YACZ,UAAW,MACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,MACX,iBAAkB,CAAC,KAAK,EACxB,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,WACN,KAAM,wBACN,KAAM,sBACN,WAAY,YACZ,UAAW,MACX,iBAAkB,CAAC,MAAO,MAAO,KAAK,EACtC,QAAS,CACL,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KAAA,CACJ,EAEJ,CACI,KAAM,MACN,UAAW,KACX,KAAM,oBACN,KAAM,oBACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,QACN,KAAM,QACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,eACN,KAAM,eACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,SACN,KAAM,SACN,WAAY,UACZ,WAAY,EAAA,EAEhB,CACI,KAAM,MACN,UAAW,KACX,KAAM,WACN,KAAM,WACN,WAAY,UACZ,WAAY,EAAA,CAEpB,EC74KaC,GACTD,ICWG,SAASE,GAAeC,EAAmC,CAC9D,OAAOA,EAAO,aAAe,WAAaA,EAAO,aAAe,OACpE,CAEO,SAASC,GAAiBD,EAAqC,CAClE,OAAOA,EAAO,aAAe,WACjC,CAEO,SAASE,GAAqBF,EAAqC,CACtE,OAAOA,EAAO,aAAe,WACjC,CAEO,SAAS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AAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,IACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,EAAA,EAGP,CACI,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,IACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,EAAA,EAGP,CACI,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,EAAA,EAGP,CACI,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,EAAA,CACP,EAEH,gBAA6B,CAE1B,CACI,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,EAAA,EAGP,CACI,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,EAAA,EAGP,CACI,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,EAAA,EAGP,CACI,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,IAAK,GACL,KAAM,GACN,IAAK,GACL,IAAK,GACL,EAAG,GACH,IAAK,GACL,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAA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Ac,WAC3C,+BAAgCA,GAAc,WAC9C,gCAAiCA,GAAc,YAC/C,uCAAwCA,GAAc,MACtD,0CAA2CA,GAAc,KAGzD,eAAgBA,GAAc,WAC9B,qBAAsBA,GAAc,UACpC,sBAAuBA,GAAc,WACrC,2BAA4BA,GAAc,YAC1C,gCAAiCA,GAAc,YAC/C,iCAAkCA,GAAc,KAGhD,qCAAsCA,GAAc,UACpD,qCAAsCA,GAAc,MACpD,0CAA2CA,GAAc,WACzD,uCAAwCA,GAAc,WACtD,2CAA4CA,GAAc,YAC1D,4CAA6CA,GAAc,KAC3D,mBAAoBA,GAAc,aAClC,8BAA+BA,GAAc,WACjD,EAmDA7C,GAAmB,KAAK,CACpB,KAAM/5D,GAAgB,QACtB,iBAAkB,GAClB,UAAW,CACP,CACI,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SAAA,CACJ,CAER,CAAC,EAED+5D,GAAmB,KAAK,CACpB,KAAM/5D,GAAgB,MACtB,UAAW,CACP,CACI,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SAAA,CACJ,CAER,CAAC,EAED+5D,GAAmB,KAAK,CACpB,KAAM/5D,GAAgB,OACtB,UAAW,CACP,CACI,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SAAA,CACJ,CAER,CAAC,EAED+5D,GAAmB,KAAK,CACpB,KAAM/5D,GAAgB,QACtB,UAAW,CACP,CACI,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SAAA,CACJ,CAER,CAAC,EC55Dc,SAAAi9D,GAAShnG,EAAainG,EAAShkG,EAAW,CACvDjD,EAAY,UAAYinG,EAAQ,UAAYhkG,EAC5CA,EAAU,YAAcjD,CAC1B,CAEO,SAASgvB,IAAO/0B,EAAQiwB,EAAY,CACzC,IAAIjnB,EAAY,OAAO,OAAOhJ,EAAO,SAAS,EAC9C,QAASxkB,KAAOy0C,EAAYjnB,EAAUxtB,C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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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Ap9D,CACR,CACA,CCxKA,MAAMq+D,IAAqC,IAAQC,GAAkC,CACjF,IAAK,CACD,KAAM,QACN,MAAO,MACP,IAAK,MACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,MACN,MAAO,MACP,IAAK,KACb,EACI,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,OACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,MACb,EACI,IAAK,CACD,KAAM,MACN,MAAO,OACP,IAAK,KACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,MACN,MAAO,MACP,IAAK,KACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,MACN,MAAO,OACP,IAAK,KACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,IACN,MAAO,IACP,IAAK,GACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,OACP,IAAK,MACb,EACI,GAAI,CACA,KAAM,KACN,MAAO,IACP,IAAK,GACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,OACP,IAAK,OACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,IAAK,CACD,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,GAAI,CACA,KAAM,OACN,MAAO,KACP,IAAK,IACb,EACI,QAAS,CACL,KAAM,IACN,MAAO,IACP,IAAK,GACb,EACI,QAAS,CACL,KAAM,IACN,MAAO,IACP,IAAK,GACb,CACA,EAAG,IAAI,EACP,SAASC,IAA0CvvO,EAAOxnD,EAAOgzC,EAAQ,CAErE,OAAIwU,IAAU,OAASA,IAAU,YAAoBxnD,EACjDwnD,IAAU,QAAUA,IAAU,SAAWA,IAAU,MA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K,GACH+2B,GACEI,EACAn3B,EACAwqB,GACA,CAACwL,EACf,EACY,MAAMjwT,EACR,IAAK,GACH8tS,GAAsC,KACtC,MACF,IAAK,GACL,IAAK,GACH,MACF,QACE,MAAM,MAAMrpN,GAAuB,GAAG,CAAC,CACnD,CACQ,IACGw1M,EAAQ,YAAcA,IACrBo3B,EAAalE,GAA+B,IAAMn4T,GAAG,EACvD,GAAKq8T,GACL,CAOA,GANAL,GACEI,EACAn3B,EACAwqB,GACA,CAACwL,EACb,EACoB91B,GAAai3B,EAAiB,EAAG,EAAE,IAAzC,EAA4C,MAAMpxT,EACtD2wT,GAAsB12B,EACtBm3B,EAAgB,cAAgBO,IAC9BC,IAAoB,KAClB,KACAR,EACAD,EACArjB,GACAyiB,GACAD,GACAr2B,EACAwqB,GACA2L,GACArJ,GACAkJ,GACAuB,EACA,YACA,GACA,CACd,EACYH,CACZ,EACU,MAAMrxT,CAChB,CACQ4xT,IACER,EACAD,EACArjB,GACAyiB,GACAD,GACAr2B,EACAwqB,GACA2L,GACArJ,GACAkJ,GACAuB,EACA,KACA,GACA,CACV,CACA,CACA,CACI,KACJ,OAAW,IACTP,GAAsB5E,CAAa,CACrC,CACA,SAASuF,IACP14U,EACAgvU,EACA2J,EACA7+H,EACA8+H,EACA73B,EACAsB,EACAC,EACAC,EACAs2B,EACAV,EACAW,EACAC,EACAC,EACA,CAGA,GAFAh5U,EAAK,cAAgB,GACrB84U,EAAwB9J,EAAa,aAEnC8J,EAAwB,OACVA,EAAwB,YAAtC,SACA,CACAA,EAAwB,CACtB,YAAa,KACb,MAAO,EACP,SAAU,EACV,SAAU,EACV,gBAAiB,CAAA,EACjB,iBAAkB,GAClB,yBAA0B,GAC1B,UAAW12I,EACjB,EACI0zI,IACE9G,EACAjuB,EACA+3B,CACN,EACI,IAAIG,GACDl4B,EAAQ,YAAcA,EACnBkzB,GAA+Bn4T,GAAG,GACjCilS,EAAQ,WAAaA,EACpBsW,IAAiCv7S,GAAG,EACpC,EAKR,GAJAm9T,EAAgBC,IACdJ,EACAG,CACN,EACiBA,IAAT,KAAwB,CAC1BxB,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AAK,UACL,IAAK,YACL,IAAK,OACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,gBACL,IAAK,cACL,IAAK,YACL,IAAK,aACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,cACL,IAAK,WACL,IAAK,aACL,IAAK,eACL,IAAK,SACL,IAAK,kBACL,IAAK,YACL,IAAK,mBACL,IAAK,iBACL,IAAK,oBACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,OACL,IAAK,mBACL,IAAK,QACL,IAAK,aACL,IAAK,WACL,IAAK,SACL,IAAK,cACH,MAAO,GACT,IAAK,OACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,YACL,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,SACL,IAAK,YACL,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,eACH,MAAO,GACT,IAAK,UACH,OAAQ1M,IAAuB,EAAE,CAC/B,KAAKC,IACH,MAAO,GACT,KAAKC,IACH,MAAO,GACT,KAAKC,GACL,KAAKC,IACH,MAAO,IACT,KAAKC,IACH,MAAO,WACT,QACE,MAAO,GACjB,CACI,QACE,MAAO,GACb,CACA,CACA,IAAI4oC,GAA4B,GAC9BC,GAAc,KACdC,GAAa,KACbC,GAAc,KACdC,GAAiB,IAAI,IACrBC,GAAwB,IAAI,IAC5BC,GAAiC,CAAA,EACjCR,IACE,sPAAsP,MACpP,GACN,EACA,SAASF,IAAuBn8B,EAActlF,EAAa,CACzD,OAAQslF,EAAY,CAClB,IAAK,UACL,IAAK,WACHw8B,GAAc,KACd,MACF,IAAK,YACL,IAAK,YACHC,GAAa,KACb,MACF,IAAK,YACL,IAAK,WACHC,GAAc,KACd,MACF,IAAK,cACL,IAAK,aACHC,GAAe,OAAOjiH,EAAY,SAAS,EAC3C,MACF,IAAK,oBACL,IAAK,qBACHkiH,GAAsB,OAAOliH,EAAY,SAAS,CACxD,CACA,CACA,SAASoiH,GACPC,EACAf,EACAh8B,EACA0yB,EACAW,EACA34G,EACA,CACA,OACWqiH,IAAT,MACAA,EAAoB,cAAgBriH,GAGjCqiH,EAAsB,CACrB,UAAWf,EACX,aAAch8B,EACd,iBAAkB0yB,EAClB,YAAah4G,EACb,iBAAkB,CAAC24G,CAAe,CAC1C,EACe2I,IAAT,OACIA,EAAY5jC,GAAoB4jC,CAAS,EAClCA,IAAT,MAAsBF,IAA2BE,CAAS,GAC5De,IAEJA,EAAoB,kBAAoBrK,EACxCsJ,EAAYe,EAAoB,iBACvB1J,IAAT,MACS2I,EAAU,QAAQ3I,CAAe,IAAxC,IACA2I,EAAU,KAAK3I,CAAe,EACzB0J,EACT,CACA,SAASX,IACPJ,EACAh8B,EACA0yB,EACAW,EACA34G,EACA,CACA,OAAQslF,EAAY,CAClB,IAAK,UACH,OACGw8B,GAAcM,GACbN,GACAR,EACAh8B,EACA0yB,EACAW,EACA34G,CACV,EACQ,GAEJ,IAAK,YACH,OACG+hH,GAAaK,GACZL,GACAT,EACAh8B,EACA0yB,EACAW,EACA34G,CACV,EACQ,GAEJ,IAAK,YACH,OACGgiH,GAAcI,GACbJ,GACAV,EACAh8B,EACA0yB,EACAW,EACA34G,CACV,EACQ,GAEJ,IAAK,cACH,IAAIsiH,EAAYtiH,EAAY,UAC5B,OAAAiiH,GAAe,IACbK,EACAF,GACEH,GAAe,IAAIK,CAAS,GAAK,KACjChB,EACAh8B,EACA0yB,EACAW,EACA34G,CACV,CACA,EACa,GACT,IAAK,oBACH,OACGsiH,EAAYtiH,EAAY,UACzBkiH,GAAsB,IACpBI,EACAF,GACEF,GAAsB,IAAII,CAAS,GAAK,KACxChB,EACAh8B,EACA0yB,EACAW,EACA34G,CACZ,CACA,EACQ,EAER,CACE,MAAO,EACT,CACA,SAASuiH,IAA+BC,EAAc,CACpD,IAAIhlC,EAAaD,GAA2BilC,EAAa,MAAM,EAC/D,GAAahlC,IAAT,KAAqB,CACvB,IAAIxI,EAAiBF,GAAuB0I,CAAU,EACtD,GAAaxI,IAAT,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CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC3nB,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,QAAQ,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACvN,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,CAAC,EACrO,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,CAAC,EACtO,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC/b,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,CAAC,EAC/nB,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC5C,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACtF,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC9G,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,OAAO,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACtG,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,MAAM,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACtN,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,QAAQ,QAAQ,CAAC,EAC/D,CAAC,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,CAAC,EAC5D,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,CAAC,EAC3G,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACtM,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC5C,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC5C,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,CAAC,EAC/K,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC7G,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EACvF,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,UAAU,SAAS,CAAC,EACxI,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EAC7R,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EAC7L,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EAC/I,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EAC14B,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EACvhC,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EACvK,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,CAAC,EAC3C,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,CAAC,EACnM,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC3C,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,CAAC,EACnI,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC1G,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EACvT,CAAC,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,CAAC,EAC5S,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,CAAC,EAC1gB,CAAC,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,CAAC,EACtP,CAAC,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,CAAC,EACtM,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,UAAU,UAAU,CAAC,EAClV,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EAC1mB,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAU,UAAU,EAAE,CAAC,SAAU,UAAU,EAAE,CAAC,QAAS,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,QAAQ,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,QAAQ,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,QAAQ,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,QAAQ,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EAC1xZ,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EACrZ,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EACxtK,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC9G,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC9G,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAA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AAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EAC9tB,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EAChM,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EACjW,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EACve,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAS,EAAE,CAAC,WAAW,QAAS,EAAE,CAAC,WAAW,OAAQ,EAAE,CAAC,WAAW,OAAQ,EAAE,CAAC,WAAW,OAAQ,EAAE,CAAC,WAAW,OAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EACpW,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAQ,EAAE,CAAC,WAAW,OAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,MAAM,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EACzc,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EACzY,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EAC9K,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EACtM,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,OAAQ,EAAE,CAAC,WAAW,QAAS,EAAE,CAAC,WAAW,QAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAS,EAAE,CAAC,WAAW,QAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EAC3yC,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,CAAC,EACvN,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,OAAO,CAAC,EAChE,CAAC,CAAC,UAAU,OAAO,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EAChI,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC/K,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACnI,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,CAAC,EAC7d,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,CAAC,EACpO,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,CAAC,EAC7C,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,CAAC,EACnO,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC3T,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EACrJ,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EAC1C,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EACxK,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EAC7Y,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,CAAC,EACtG,CAAC,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,CAAC,EACxP,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,CAAC,EACzL,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EAC3K,CAAC,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,KAAK,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,CAAC,EAC5X,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,CAAC,EAClvB,CAAC,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,CAAC,EAC5U,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAC1K,CAAC,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,CAAC,EAChJ,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EACzc,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EAC3L,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EACjP,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,MAAM,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,QAAQ,SAAS,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,KAAK,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,KAAK,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EACj3C,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,WAAW,QAAQ,CAAC,EACjR,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EAClE,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EAClE,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,WAAW,QAAQ,CAAC,EAC/H,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,MAAM,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EACtqH,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EAC/6B,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,EAC5F,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,OAAO,SAAS,CAAC,EACnP,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,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AC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EACtO,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,W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AAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,QAAQ,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EACx7B,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,CAAC,EACtQ,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAClP,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SA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,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACnT,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EACzU,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SA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,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EAC30B,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,OAAO,CAAC,EAC1W,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,S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AU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACtb,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC/K,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,UAAU,UAAU,CAAC,EAClmC,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,OAAO,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,QAAQ,CAAC,EACxmE,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,QAAQ,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,C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SAAS,EAAE,CAAC,WAAW,QAAQ,CAAC,EACtI,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EACnvB,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EAC7P,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EACpf,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EACluB,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EACjU,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,QAAQ,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,CAAC,EACvJ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACjE,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACzJ,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,CAAC,EAC/K,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EAC9M,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EACrV,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,CAAC,EAC/T,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACzU,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EACvJ,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAClE,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACrM,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACxF,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC7G,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC1N,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,CAAC,EACjf,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAChE,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EAC5f,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,IAAI,SAAS,CAAC,EACzF,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EACzK,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EACzK,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,CAAC,EACxJ,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,WAAW,SAAS,CAAC,EAC5L,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACzjB,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,SAAS,CAAC,EAClE,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,SAAS,CAAC,EACnE,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,QAAQ,CAAC,EACvF,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,SAAS,CAAC,EACxF,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,WAAW,SAAS,CAAC,EAChE,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,WAAW,SAAS,CAAC,EAClE,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,SAAS,CAAC,EAC5G,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,WAAW,SAAS,CAAC,EACnE,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EACvF,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EACpF,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAChE,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EAC7D,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAC9D,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAC/D,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EACvG,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EACpF,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,CAAC,EAC9D,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EACjK,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAC/D,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,QAAQ,OAAO,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAC1H,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EACpM,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,CAAC,EACzC,CAAC,CAAC,UAAU,OAAO,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAC9D,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC,EACnF,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAC/D,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EAC7G,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAChE,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,QAAQ,SAAS,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,SAAS,CAAC,EACxJ,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EACpF,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAChE,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EAChE,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,MAAM,QAAQ,EAAE,CAAC,UAAU,SAAS,CAAC,EACpG,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,OAAO,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,QAAQ,OAAO,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,OAAO,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,E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S,EAAE,CAAC,WAAW,QAAQ,CAAC,EACpE,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,YAAY,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC,WAAW,QAAQ,EAAE,CAAC,YAAY,SAAS,EAAE,CA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AAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,gBAAgB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,gBAAgB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,WAAW,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,WAAW,EAAE,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,mBAAmB,gBAAgB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,oBAAoB,iBAAiB,CAAC,EACh3I,CAAC,CAAC,kBAAkB,gBAAiB,EAAE,CAAC,kBAAkB,gBAAiB,EAAE,CAAC,kBAAkB,gBAAiB,EAAE,CAAC,kBAAkB,gBAAiB,EAAE,CAAC,kBAAkB,gBAAiB,EAAE,CAAC,kBAAkB,gBAAiB,EAAE,CAAC,kBAAkB,gBAAiB,CAAC,EAC1Q,CAAC,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,SAAS,EAAE,CAAC,WAAW,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC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","x_google_ignoreList":[1,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,390,391,392,393,402,403,413,414,415,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,520,526,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,552,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,866,867,868,869,870,871,872,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1112,1113,1114,1115,1126,1127,1128,1129,1130,1131,1132,1133,1134,1139,1152,1153,1154,1155,1176,1233,1238,1239,1240,1241,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1328,1329,1330,1331,1356,1379,1380,1381,1406,1412,1413,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1478,1479,1480,1482,1483,1484,1497,1530,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1641,1642,1643,1644,1663,1715]}